diff --git a/avm-transpiler/src/transpile_contract.rs b/avm-transpiler/src/transpile_contract.rs index 6f8922f8045a..f7b732df61db 100644 --- a/avm-transpiler/src/transpile_contract.rs +++ b/avm-transpiler/src/transpile_contract.rs @@ -16,7 +16,7 @@ pub struct TranspiledContract { pub name: String, // Functions can be ACIR or AVM pub functions: Vec, - pub events: serde_json::Value, + pub outputs: serde_json::Value, pub file_map: serde_json::Value, //pub warnings: serde_json::Value, } @@ -29,7 +29,7 @@ pub struct CompiledAcirContract { pub noir_version: String, pub name: String, pub functions: Vec, - pub events: serde_json::Value, + pub outputs: serde_json::Value, pub file_map: serde_json::Value, //pub warnings: serde_json::Value, } @@ -113,7 +113,7 @@ impl From for TranspiledContract { noir_version: contract.noir_version, name: contract.name, functions, // some acir, some transpiled avm functions - events: contract.events, + outputs: contract.outputs, file_map: contract.file_map, //warnings: contract.warnings, } diff --git a/boxes/boxes/react/src/contracts/src/main.nr b/boxes/boxes/react/src/contracts/src/main.nr index f46cfc2ce940..fbbd66a4b00a 100644 --- a/boxes/boxes/react/src/contracts/src/main.nr +++ b/boxes/boxes/react/src/contracts/src/main.nr @@ -3,6 +3,7 @@ contract BoxReact { use dep::value_note::value_note::{ValueNote, VALUE_NOTE_LEN}; + #[aztec(storage)] struct Storage { numbers: Map>, } diff --git a/boxes/boxes/vanilla/src/contracts/src/main.nr b/boxes/boxes/vanilla/src/contracts/src/main.nr index e779d259835e..791e2ab7276a 100644 --- a/boxes/boxes/vanilla/src/contracts/src/main.nr +++ b/boxes/boxes/vanilla/src/contracts/src/main.nr @@ -3,6 +3,7 @@ contract Vanilla { use dep::value_note::value_note::{ValueNote, VALUE_NOTE_LEN}; + #[aztec(storage)] struct Storage { numbers: Map>, } diff --git a/docs/docs/developers/contracts/references/storage/main.md b/docs/docs/developers/contracts/references/storage/main.md index b78e2fdccd26..8645931656e0 100644 --- a/docs/docs/developers/contracts/references/storage/main.md +++ b/docs/docs/developers/contracts/references/storage/main.md @@ -30,11 +30,8 @@ Public state follows the Ethereum style account model, where each contract has i ## Storage struct -:::info -The struct **must** be called `Storage` for the Aztec.nr library to properly handle it (this will be relaxed in the future). -::: - ```rust +#[aztec(storage)] struct Storage { // public state variables // private state variables diff --git a/docs/docs/developers/contracts/writing_contracts/storage/define_storage.md b/docs/docs/developers/contracts/writing_contracts/storage/define_storage.md index 5781a404f4f6..6c913bd6b3ab 100644 --- a/docs/docs/developers/contracts/writing_contracts/storage/define_storage.md +++ b/docs/docs/developers/contracts/writing_contracts/storage/define_storage.md @@ -8,11 +8,8 @@ To learn more about how storage works in Aztec, read [the concepts](../../../../ [See the storage reference](../../references/storage/main.md). -:::info -The struct **must** be called `Storage` for the Aztec.nr library to properly handle it (this will be relaxed in the future). -::: - ```rust +#[aztec(storage)] struct Storage { // public state variables // private state variables diff --git a/docs/docs/developers/sandbox/references/cheat_codes.md b/docs/docs/developers/sandbox/references/cheat_codes.md index 2f206adcae0d..99968914df20 100644 --- a/docs/docs/developers/sandbox/references/cheat_codes.md +++ b/docs/docs/developers/sandbox/references/cheat_codes.md @@ -461,18 +461,11 @@ The baseSlot is specified in the Aztec.nr contract. #### Example ```rust +#[aztec(storage)] struct Storage { balances: Map>, } -impl Storage { - fn init() -> Self { - Storage { - balances: Map::new(1, |slot| PublicMutable::new(slot)), - } - } -} - contract Token { ... } @@ -499,18 +492,11 @@ Note: One Field element occupies a storage slot. Hence, structs with multiple fi #### Example ```rust +#[aztec(storage)] struct Storage { balances: Map>, } -impl Storage { - fn init(context: Context) -> Self { - Storage { - balances: Map::new(context, 1, |context, slot| PublicMutable::new(context, slot)), - } - } -} - contract Token { ... } @@ -538,20 +524,12 @@ Note: One Field element occupies a storage slot. Hence, structs with multiple fi #### Example ```rust +#[aztec(storage)] struct Storage { ... pending_shields: Set, } -impl Storage { - fn init() -> Self { - Storage { - ... - pending_shields: Set::new(context, 5, TransparentNoteMethods), - } - } -} - contract Token { ... } diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index 1c31e002eb40..9f85625842f6 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -91,7 +91,7 @@ library Constants { uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = - 0x1ad693effc2a4a40fdf5911ff29e19d2b6cd3cf73e6c3685519a6fb783144dcb; + 0x2e89c51c28aefc6b630af43a5908634e4cf552115280eb9fd783bbd224c0bb57; uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; diff --git a/l1-contracts/test/fixtures/empty_block_0.json b/l1-contracts/test/fixtures/empty_block_0.json index ffa73bdb042d..26130e748169 100644 --- a/l1-contracts/test/fixtures/empty_block_0.json +++ b/l1-contracts/test/fixtures/empty_block_0.json @@ -8,7 +8,7 @@ "l2ToL1Messages": [] }, "block": { - "archive": "0x122e56310a16134c202e94b3ba9cb74de123f7ec493e601d2f0b6da00cf57a4a", + "archive": "0x28d85d64f43aeffd30919743ecad7e51dbaa60f58dfb98020cbb9ffc29b8b354", "body": "0x00000000", "txsEffectsHash": "0x00df6b1c97b9e01113fa0363d9ff71c85addc74e92b22d433b2fb082d2493896", "decodedHeader": { @@ -23,8 +23,8 @@ "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0x66440eb666440eb666440eb666440eb666440eb6", - "feeRecipient": "0x061ca689507c7f1ccc68c2ad086c9d5d94f50869cb1b718c6a46aaf77a4500ba" + "coinbase": "0xd2335b584d0bbc706a1132378faf166ac32b253b", + "feeRecipient": "0x07bc43bbef62d5bb1f694a7ed2d83de7b89ba51b87bbdb5fed59cc92f371cfce" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -51,8 +51,8 @@ } } }, - "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd13000000001000000000000000000000000000000000000000000000000000000000000000100df6b1c97b9e01113fa0363d9ff71c85addc74e92b22d433b2fb082d249389600089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000800bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000800000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000066440eb666440eb666440eb666440eb666440eb6061ca689507c7f1ccc68c2ad086c9d5d94f50869cb1b718c6a46aaf77a4500ba", - "publicInputsHash": "0x00b833c76dd93572e83879eeb4085a3cd71f24831384fb4d3fe531ed87b859e3", + "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd13000000001000000000000000000000000000000000000000000000000000000000000000100df6b1c97b9e01113fa0363d9ff71c85addc74e92b22d433b2fb082d249389600089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000800bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000800000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000d2335b584d0bbc706a1132378faf166ac32b253b07bc43bbef62d5bb1f694a7ed2d83de7b89ba51b87bbdb5fed59cc92f371cfce", + "publicInputsHash": "0x0036d6337bcff3e8654b668e271af95bea640bca5d467bcfedf750e329898812", "numTxs": 0 } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/empty_block_1.json b/l1-contracts/test/fixtures/empty_block_1.json index 937d39bd6ae7..0735505b7c4c 100644 --- a/l1-contracts/test/fixtures/empty_block_1.json +++ b/l1-contracts/test/fixtures/empty_block_1.json @@ -8,7 +8,7 @@ "l2ToL1Messages": [] }, "block": { - "archive": "0x0d53ab5014f578345d853cd208bda74db64358fef8e5f646240db05893f6e780", + "archive": "0x18082b129edbbaabb50b7470846cf28f40b70f75d5709bb8420aa4e7ab2de654", "body": "0x00000000", "txsEffectsHash": "0x00df6b1c97b9e01113fa0363d9ff71c85addc74e92b22d433b2fb082d2493896", "decodedHeader": { @@ -21,14 +21,14 @@ "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1711637579, + "timestamp": 1712149260, "version": 1, - "coinbase": "0x66440eb666440eb666440eb666440eb666440eb6", - "feeRecipient": "0x061ca689507c7f1ccc68c2ad086c9d5d94f50869cb1b718c6a46aaf77a4500ba" + "coinbase": "0xd2335b584d0bbc706a1132378faf166ac32b253b", + "feeRecipient": "0x07bc43bbef62d5bb1f694a7ed2d83de7b89ba51b87bbdb5fed59cc92f371cfce" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x122e56310a16134c202e94b3ba9cb74de123f7ec493e601d2f0b6da00cf57a4a" + "root": "0x28d85d64f43aeffd30919743ecad7e51dbaa60f58dfb98020cbb9ffc29b8b354" }, "stateReference": { "l1ToL2MessageTree": { @@ -51,8 +51,8 @@ } } }, - "header": "0x122e56310a16134c202e94b3ba9cb74de123f7ec493e601d2f0b6da00cf57a4a00000002000000000000000000000000000000000000000000000000000000000000000100df6b1c97b9e01113fa0363d9ff71c85addc74e92b22d433b2fb082d249389600089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000006605844b66440eb666440eb666440eb666440eb666440eb6061ca689507c7f1ccc68c2ad086c9d5d94f50869cb1b718c6a46aaf77a4500ba", - "publicInputsHash": "0x00035031752fa374209f1ec4bc08613cae25ba65779c10130681421f6e71c6d9", + "header": "0x28d85d64f43aeffd30919743ecad7e51dbaa60f58dfb98020cbb9ffc29b8b35400000002000000000000000000000000000000000000000000000000000000000000000100df6b1c97b9e01113fa0363d9ff71c85addc74e92b22d433b2fb082d249389600089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660d530cd2335b584d0bbc706a1132378faf166ac32b253b07bc43bbef62d5bb1f694a7ed2d83de7b89ba51b87bbdb5fed59cc92f371cfce", + "publicInputsHash": "0x00056a5ebf2e50d61c9dab6ff88579d680c284f8ad94a2c7e249fb3cc65be3fb", "numTxs": 0 } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_0.json b/l1-contracts/test/fixtures/mixed_block_0.json index 8db142438ca9..eeb800283924 100644 --- a/l1-contracts/test/fixtures/mixed_block_0.json +++ b/l1-contracts/test/fixtures/mixed_block_0.json @@ -34,23 +34,23 @@ ] }, "block": { - "archive": "0x080e57619448c45b57fbe34372db20f730e420276579983e4f188f501c092240", - "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559000011000000021c000000b02185f8c0152162e19e296fff1a7e1664c5c8194faf05fc0450c5725c0de96009a63e0eb6a63e0eb6a63e0eb6a63e0eb6a63e0eb6a63e0eb6a63e0eb6a63e0eb6a63e0eb6a63e0eb6a63e0eb6a63e0eb6a63e0eb6a63e0eb6a63e0eb6a63e0eb6a63e0eb6a63e0eb6a63e0eb6a63e0eb60fbbab0f207b85446437daf4a753174801eee59e19f0c2203da8d4522de52b2c15a9c4f4c75d79ce22330ca2cdb6c1a6ede1f6d94ba28016eeb25e5578913ccb000000b008da11e3cf7794deddc5f101328b67834d6075f3fc13834dd109a4d54899a684aa3e0eb6aa3e0eb6aa3e0eb6aa3e0eb6aa3e0eb6aa3e0eb6aa3e0eb6aa3e0eb6aa3e0eb6aa3e0eb6aa3e0eb6aa3e0eb6aa3e0eb6aa3e0eb6aa3e0eb6aa3e0eb6aa3e0eb6aa3e0eb6aa3e0eb6aa3e0eb6277412a5bc03576b5c24a1ad40e1c0c3b1bb2a8ae0b7b9fb01cefc5f589571a82d622c8b62e54bf51a1fd35b67456b229dae3bc6126977f1b2d88662a3418347000000b02092797a6aff6705d5b2b7b9cc1a10fefd2cbae0c2da7b28952fcce27349ed00ae3e0eb6ae3e0eb6ae3e0eb6ae3e0eb6ae3e0eb6ae3e0eb6ae3e0eb6ae3e0eb6ae3e0eb6ae3e0eb6ae3e0eb6ae3e0eb6ae3e0eb6ae3e0eb6ae3e0eb6ae3e0eb6ae3e0eb6ae3e0eb6ae3e0eb6ae3e0eb60ec82bc9765989689bc122af58ef11e23953872f2dc5414482132ed89345b82314b645af1d3b7df259bc545d7f52bc412546986a5f76ff3b331cb8dbddf1c9c20000021c000000b007e6929e25559903154f38bbe427621d84c517850fe802721573ff5badfa337bb23e0eb6b23e0eb6b23e0eb6b23e0eb6b23e0eb6b23e0eb6b23e0eb6b23e0eb6b23e0eb6b23e0eb6b23e0eb6b23e0eb6b23e0eb6b23e0eb6b23e0eb6b23e0eb6b23e0eb6b23e0eb6b23e0eb6b23e0eb62680936011e15b8f93ade967f27dbb5de91fcc1bf48c391f463956e5bdf5fe9f2c6ead45b8c3501951a91b1618e165bcd512dd57263df715f742e0e908a2103e000000b01f9efa34c0dd6b2a0d3bff747db60b9934915c71d6aefa4cd99a2768d8aa79f7b63e0eb6b63e0eb6b63e0eb6b63e0eb6b63e0eb6b63e0eb6b63e0eb6b63e0eb6b63e0eb6b63e0eb6b63e0eb6b63e0eb6b63e0eb6b63e0eb6b63e0eb6b63e0eb6b63e0eb6b63e0eb6b63e0eb6b63e0eb60dd4ac83cc378d8cd34a6a6a0a8b0c7c70b828c04199c068c67d895ef8a6451a13c2c6697319821691459c1830eeb6db5cab39fb734b7e5f77871362435256b9000000b006f313587b339d274cd8807695c35cb7bc29b91623bc819659de59e2135ac072ba3e0eb6ba3e0eb6ba3e0eb6ba3e0eb6ba3e0eb6ba3e0eb6ba3e0eb6ba3e0eb6ba3e0eb6ba3e0eb6ba3e0eb6ba3e0eb6ba3e0eb6ba3e0eb6ba3e0eb6ba3e0eb6ba3e0eb6ba3e0eb6ba3e0eb6ba3e0eb6258d141a67bf5fb3cb373122a419b5f820846dad0860b8438aa3b16c23568b962b7b2e000ea1543d893262d0ca7d60570c777ee83a12763a3bad3b6f6e029d350000021c000000b01eab7aef16bb6f4e44c5472f2f5206336bf5fe02ea8379711e0481ef3e0b06eebe3e0eb6be3e0eb6be3e0eb6be3e0eb6be3e0eb6be3e0eb6be3e0eb6be3e0eb6be3e0eb6be3e0eb6be3e0eb6be3e0eb6be3e0eb6be3e0eb6be3e0eb6be3e0eb6be3e0eb6be3e0eb6be3e0eb6be3e0eb60ce12d3e221591b10ad3b224bc270716a81cca51556e3f8d0ae7e3e55e06d21112cf4723c8f7863ac8cee3d2e28ab175940fdb8c871ffd83bbf16de8a8b2e3b0000000b005ff9412d111a14b8461c831475f5751f38e5aa7379100ba9e48b46878bb4d69c23e0eb6c23e0eb6c23e0eb6c23e0eb6c23e0eb6c23e0eb6c23e0eb6c23e0eb6c23e0eb6c23e0eb6c23e0eb6c23e0eb6c23e0eb6c23e0eb6c23e0eb6c23e0eb6c23e0eb6c23e0eb6c23e0eb6c23e0eb6249994d4bd9d63d802c078dd55b5b09257e90f3e1c353767cf0e0bf288b7188d2a87aeba647f5861c0bbaa8b7c195af143dc20794de6f55e801795f5d3632a2c000000b01db7fba96c9973727c4e8ee9e0ee00cda35a9f93fe57f895626edc75a36b93e5c63e0eb6c63e0eb6c63e0eb6c63e0eb6c63e0eb6c63e0eb6c63e0eb6c63e0eb6c63e0eb6c63e0eb6c63e0eb6c63e0eb6c63e0eb6c63e0eb6c63e0eb6c63e0eb6c63e0eb6c63e0eb6c63e0eb6c63e0eb60bedadf877f395d5425cf9df6dc301b0df816be26942beb14f523e6bc3675f0811dbc7de1ed58a5f00582b8d9426ac0fcb747d1d9af47ca8005bc86f0e1370a70000021c000000b0050c14cd26efa56fbbeb0febf8fb51ec2af2fc384b657fdee2b30eeede1bda60ca3e0eb6ca3e0eb6ca3e0eb6ca3e0eb6ca3e0eb6ca3e0eb6ca3e0eb6ca3e0eb6ca3e0eb6ca3e0eb6ca3e0eb6ca3e0eb6ca3e0eb6ca3e0eb6ca3e0eb6ca3e0eb6ca3e0eb6ca3e0eb6ca3e0eb6ca3e0eb623a6158f137b67fc3a49c0980751ab2c8f4db0cf3009b68c13786678ee17a58429942f74ba5d5c85f844f2462db5558b7b40c20a61bb7482c481f07c38c3b723000000b01cc47c63c2777796b3d7d6a49289fb67dabf4125122c77b9a6d936fc08cc20dcce3e0eb6ce3e0eb6ce3e0eb6ce3e0eb6ce3e0eb6ce3e0eb6ce3e0eb6ce3e0eb6ce3e0eb6ce3e0eb6ce3e0eb6ce3e0eb6ce3e0eb6ce3e0eb6ce3e0eb6ce3e0eb6ce3e0eb6ce3e0eb6ce3e0eb6ce3e0eb60afa2eb2cdd199f979e6419a1f5efc4b16e60d737d173dd593bc98f228c7ebff10e8489874b38e8337e1734845c2a6aa02d91eaeaec8fbcc44c622f57373fd9e000000b0041895877ccda993f37457a6aa974c8662579dc95f39ff03271d6975437c6757d23e0eb6d23e0eb6d23e0eb6d23e0eb6d23e0eb6d23e0eb6d23e0eb6d23e0eb6d23e0eb6d23e0eb6d23e0eb6d23e0eb6d23e0eb6d23e0eb6d23e0eb6d23e0eb6d23e0eb6d23e0eb6d23e0eb6d23e0eb622b2964969596c2071d30852b8eda5c6c6b2526043de35b057e2c0ff5378327b28a0b02f103b60aa2fce3a00df515025b2a5639b758ff3a708ec4b029e24441a0000021c000000b01bd0fd1e18557bbaeb611e5f4425f6021223e2b62600f6ddeb4391826e2cadd3d63e0eb6d63e0eb6d63e0eb6d63e0eb6d63e0eb6d63e0eb6d63e0eb6d63e0eb6d63e0eb6d63e0eb6d63e0eb6d63e0eb6d63e0eb6d63e0eb6d63e0eb6d63e0eb6d63e0eb6d63e0eb6d63e0eb6d63e0eb60a06af6d23af9e1db16f8954d0faf6e54e4aaf0490ebbcf9d826f3788e2878f60ff4c952ca9192a76f6abb02f75ea1443a3dc03fc29d7af089307d7bd8d48a95000000b003251641d2abadb82afd9f615c33472099bc3f5a730e7e276b87c3fba8dcf44eda3e0eb6da3e0eb6da3e0eb6da3e0eb6da3e0eb6da3e0eb6da3e0eb6da3e0eb6da3e0eb6da3e0eb6da3e0eb6da3e0eb6da3e0eb6da3e0eb6da3e0eb6da3e0eb6da3e0eb6da3e0eb6da3e0eb6da3e0eb621bf1703bf377044a95c500d6a89a060fe16f3f157b2b4d49c4d1b85b8d8bf7227ad30e9661964ce675781bb90ed4abfea0a052c896472cb4d56a5890384d111000000b01add7dd86e337fdf22ea6619f5c1f09c4988844739d576022fadec08d38d3acade3e0eb6de3e0eb6de3e0eb6de3e0eb6de3e0eb6de3e0eb6de3e0eb6de3e0eb6de3e0eb6de3e0eb6de3e0eb6de3e0eb6de3e0eb6de3e0eb6de3e0eb6de3e0eb6de3e0eb6de3e0eb6de3e0eb6de3e0eb609133027798da241e8f8d10f8296f17f85af5095a4c03c1e1c914dfef38905ed0f014a0d206f96cba6f402bda8fa9bde71a261d0d671fa14cd9ad8023e35178c0000021c000000b0023196fc2889b1dc6286e71c0dcf41bad120e0eb86e2fd4baff21e820e3d8145e23e0eb6e23e0eb6e23e0eb6e23e0eb6e23e0eb6e23e0eb6e23e0eb6e23e0eb6e23e0eb6e23e0eb6e23e0eb6e23e0eb6e23e0eb6e23e0eb6e23e0eb6e23e0eb6e23e0eb6e23e0eb6e23e0eb6e23e0eb620cb97be15157468e0e597c81c259afb357b95826b8733f8e0b7760c1e394c6926b9b1a3bbf768f29ee0c9764289455a216ea6bd9d38f1ef91c1000f68e55e08000000b019e9fe92c41184035a73add4a75deb3680ed25d84da9f5267418468f38edc7c1e63e0eb6e63e0eb6e63e0eb6e63e0eb6e63e0eb6e63e0eb6e63e0eb6e63e0eb6e63e0eb6e63e0eb6e63e0eb6e63e0eb6e63e0eb6e63e0eb6e63e0eb6e63e0eb6e63e0eb6e63e0eb6e63e0eb6e63e0eb6081fb0e1cf6ba666208218ca3432ec19bd13f226b894bb4260fba88558e992e40e0dcac7764d9aefde7d4a785a969678a9070361ea46793912053288a395a483000000b0013e17b67e67b6009a102ed6bf6b3c550885827c9ab77c6ff45c7908739e0e3cea3e0eb6ea3e0eb6ea3e0eb6ea3e0eb6ea3e0eb6ea3e0eb6ea3e0eb6ea3e0eb6ea3e0eb6ea3e0eb6ea3e0eb6ea3e0eb6ea3e0eb6ea3e0eb6ea3e0eb6ea3e0eb6ea3e0eb6ea3e0eb6ea3e0eb6ea3e0eb61fd818786af3788d186edf82cdc195956ce037137f5bb31d2521d0928399d96025c6325e11d56d16d66a1130f4253ff458d3484eb10d7113d62b5a95ce45eaff0000021c000000b018f67f4d19ef882791fcf58f58f9e5d0b851c769617e744ab882a1159e4e54b8ee3e0eb6ee3e0eb6ee3e0eb6ee3e0eb6ee3e0eb6ee3e0eb6ee3e0eb6ee3e0eb6ee3e0eb6ee3e0eb6ee3e0eb6ee3e0eb6ee3e0eb6ee3e0eb6ee3e0eb6ee3e0eb6ee3e0eb6ee3e0eb6ee3e0eb6ee3e0eb6072c319c2549aa8a580b6084e5cee6b3f47893b7cc693a66a566030bbe4a1fdb0d1a4b81cc2b9f14160692330c329112e06ba4f2fe1af85d566f8d0f08f6317a000000b0004a9870d445ba24d1997691710736ef3fea240dae8bfb9438c6d38ed8fe9b33f23e0eb6f23e0eb6f23e0eb6f23e0eb6f23e0eb6f23e0eb6f23e0eb6f23e0eb6f23e0eb6f23e0eb6f23e0eb6f23e0eb6f23e0eb6f23e0eb6f23e0eb6f23e0eb6f23e0eb6f23e0eb6f23e0eb6f23e0eb61ee49932c0d17cb14ff8273d7f5d902fa444d8a493303241698c2b18e8fa665724d2b31867b3713b0df358eba5c13a8e9037e9dfc4e1f0381a95b51c33a677f6000000b0180300076fcd8c4bc9863d4a0a95e06aefb668fa7552f36efcecfb9c03aee1aff63e0eb6f63e0eb6f63e0eb6f63e0eb6f63e0eb6f63e0eb6f63e0eb6f63e0eb6f63e0eb6f63e0eb6f63e0eb6f63e0eb6f63e0eb6f63e0eb6f63e0eb6f63e0eb6f63e0eb6f63e0eb6f63e0eb6f63e0eb60638b2567b27aeae8f94a83f976ae14e2bdd3548e03db98ae9d05d9223aaacd20c26cc3c2209a3384d8fd9edbdce8bad17d0468411ef77819ad9e7956e56be710000021c000000b02fbb679e0b555e72c1730402a42489e69f82ade73c19eb49c11323a92e5f282bfa3e0eb6fa3e0eb6fa3e0eb6fa3e0eb6fa3e0eb6fa3e0eb6fa3e0eb6fa3e0eb6fa3e0eb6fa3e0eb6fa3e0eb6fa3e0eb6fa3e0eb6fa3e0eb6fa3e0eb6fa3e0eb6fa3e0eb6fa3e0eb6fa3e0eb6fa3e0eb61df119ed16af80d587816ef830f98ac9dba97a35a704b165adf6859f4e5af34e23df33d2bd91755f457ca0a6575d3528c79c8b70d8b66f5c5f000fa2990704ed000000b0170f80c1c5ab9070010f8504bc31db05271b0a8b8927729341575622690f6ea6fe3e0eb6fe3e0eb6fe3e0eb6fe3e0eb6fe3e0eb6fe3e0eb6fe3e0eb6fe3e0eb6fe3e0eb6fe3e0eb6fe3e0eb6fe3e0eb6fe3e0eb6fe3e0eb6fe3e0eb6fe3e0eb6fe3e0eb6fe3e0eb6fe3e0eb6fe3e0eb605453310d105b2d2c71deffa4906dbe86341d6d9f41238af2e3ab818890b39c90b334cf677e7a75c851921a86f6a86474f34e81525c3f6a5df44421bd3b74b68000000b02f2f726e313bed8aa817744c75f83f026d46d3220cf60ab935b9df6608e8c253023f0eb6023f0eb6023f0eb6023f0eb6023f0eb6023f0eb6023f0eb6023f0eb6023f0eb6023f0eb6023f0eb6023f0eb6023f0eb6023f0eb6023f0eb6023f0eb6023f0eb6023f0eb6023f0eb6023f0eb61d6524bd3c960fed6e25df4202cd3fe5a96d9f7077e0d0d5229d415c28e48d7623533ea2e37804772c2110f02930ea449560b0aba9928ecbd3a6cb5f73909f150000086c000000700000003204b93de0f6ec41eaadc260441ada91043105fc14c4ee581ea2e173d56394d3f1053f0eb60000000a073f0eb6073f0eb6073f000000361c71a57792741411a5af26fcb4693a7fe0d241018bb54ff967079be28e451a6d093f0eb60000000e0b3f0eb60b3f0eb60b3f0eb60b3f000000800000003a03c5be9b4cca460ee54ba7fecc768b9e686a9da5d8c2d742e74bce5bc8f560e80d3f0eb6000000120f3f0eb60f3f0eb60f3f0eb60f3f0eb60f3f0000003e1b7e2631e8521835dd386eb76605351a1836e2929f89cf1dab71f668f3a5a764113f0eb600000016133f0eb6133f0eb6133f0eb6133f0eb6133f0eb6133f000000900000004202d23f55a2a84a331cd4efb97e1286389fcf3f36ec9756672bb628e22e55eddf153f0eb60000001a173f0eb6173f0eb6173f0eb6173f0eb6173f0eb6173f0eb6173f000000461a8aa6ec3e301c5a14c1b67217a12fb44f9b8423b35e4e41efdc50ef5906345b193f0eb60000001e1b3f0eb61b3f0eb61b3f0eb61b3f0eb61b3f0eb61b3f0eb61b3f0eb61b3f000000a00000004a01dec00ff8864e57545e37742fae80d2d733e0c8006bd58b7020836893b67ad61d3f0eb6000000221f3f0eb61f3f0eb61f3f0eb61f3f0eb61f3f0eb61f3f0eb61f3f0eb61f3f0eb61f3f0000004e199727a6940e207e4c4afe2cc93d2a4e870025b4c732cd663446ab75be66c152213f0eb600000026233f0eb6233f0eb6233f0eb6233f0eb6233f0eb6233f0eb6233f0eb6233f0eb6233f0eb6233f000000b00000005200eb40ca4e64527b8be77f2ee14a7b6d0e988259144054afb48addeef91707cd253f0eb60000002a273f0eb6273f0eb6273f0eb6273f0eb6273f0eb6273f0eb6273f0eb6273f0eb6273f0eb6273f0eb6273f0000005618a3a860e9ec24a283d445e77ad924e8be64c745db074c8a78b105fc23c74e49293f0eb60000002e2b3f0eb62b3f0eb62b3f0eb62b3f0eb62b3f0eb62b3f0eb62b3f0eb62b3f0eb62b3f0eb62b3f0eb62b3f0eb62b3f000000c00000005a305c0ff78573f6c97bc10ca01467ce646e310c32a1ce44653cd72e094e7794c52d3f0eb6000000322f3f0eb62f3f0eb62f3f0eb62f3f0eb62f3f0eb62f3f0eb62f3f0eb62f3f0eb62f3f0eb62f3f0eb62f3f0eb62f3f0eb62f3f0000005e17b0291b3fca28c6bb5d8da22c751f82f5c968d6eedbcbaebd1b60828927db40313f0eb600000036333f0eb6333f0eb6333f0eb6333f0eb6333f0eb6333f0eb6333f0eb6333f0eb6333f0eb6333f0eb6333f0eb6333f0eb6333f0eb6333f000000d0000000622f6890b1db51faedb34a545ac603c8fea595adc3b5a2c3898141888fb3d821bc353f0eb60000003a373f0eb6373f0eb6373f0eb6373f0eb6373f0eb6373f0eb6373f0eb6373f0eb6373f0eb6373f0eb6373f0eb6373f0eb6373f0eb6373f0eb6373f0000006616bca9d595a82ceaf2e6d55cde111a1d2d2e0a6802b04ad30185bb08ee886837393f0eb60000003e3b3f0eb63b3f0eb63b3f0eb63b3f0eb63b3f0eb63b3f0eb63b3f0eb63b3f0eb63b3f0eb63b3f0eb63b3f0eb63b3f0eb63b3f0eb63b3f0eb63b3f0eb63b3f000000e00000006a2e75116c312fff11ead39c15779fc398dcfa4f54c97742adc5abe3161938aeb33d3f0eb6000000423f3f0eb63f3f0eb63f3f0eb63f3f0eb63f3f0eb63f3f0eb63f3f0eb63f3f0eb63f3f0eb63f3f0eb63f3f0eb63f3f0eb63f3f0eb63f3f0eb63f3f0eb63f3f0eb63f3f0000006e15c92a8feb86310f2a701d178fad14b76492abf91684c9f745f0158f53e8f52e413f0eb600000046433f0eb6433f0eb6433f0eb6433f0eb6433f0eb6433f0eb6433f0eb6433f0eb6433f0eb6433f0eb6433f0eb6433f0eb6433f0eb6433f0eb6433f0eb6433f0eb6433f0eb6433f000000f0000000722d819226870e0336225ce3d0293bbe33145ef0e5dd4bc1d20a163d9c7e993baa453f0eb60000004a473f0eb6473f0eb6473f0eb6473f0eb6473f0eb6473f0eb6473f0eb6473f0eb6473f0eb6473f0eb6473f0eb6473f0eb6473f0eb6473f0eb6473f0eb6473f0eb6473f0eb6473f0eb6473f0000007614d5ab4a4164353361f964d241490f519bf74d8a2a59491b8a5a7015b9498225493f0eb60000004e4b3f0eb64b3f0eb64b3f0eb64b3f0eb64b3f0eb64b3f0eb64b3f0eb64b3f0eb64b3f0eb64b3f0eb64b3f0eb64b3f0eb64b3f0eb64b3f0eb64b3f0eb64b3f0eb64b3f0eb64b3f0eb64b3f0eb64b3f000001000000007a2c8e12e0dcec075a59e62b8adad7b8cd4bc39276f12040f64e809822e3f9c8a14d3f0eb6000000524f3f0eb64f3f0eb64f3f0eb64f3f0eb64f3f0eb64f3f0eb64f3f0eb64f3f0eb64f3f0eb64f3f0eb64f3f0eb64f3f0eb64f3f0eb64f3f0eb64f3f0eb64f3f0eb64f3f0eb64f3f0eb64f3f0eb64f3f0eb64f3f0000007e13e22c04974239579982ac8cf2e509ebd35bef1b3e2dc83fcec4ca9c1eaa0f1c513f0eb600000056533f0eb6533f0eb6533f0eb6533f0eb6533f0eb6533f0eb6533f0eb6533f0eb6533f0eb6533f0eb6533f0eb6533f0eb6533f0eb6533f0eb6533f0eb6533f0eb6533f0eb6533f0eb6533f0eb6533f0eb6533f0eb6533f00000110000000822b9a939b32ca0b7e916f73458c73b3678328340804f4c01a92eaf2a9495a5598553f0eb60000005a573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0eb6573f0000008612eeacbeed203d7bd10bf447a48104860ac090ac52024764132f2522840a9c13593f0eb60000005e5b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f0eb65b3f00380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f0000000000000000000000000000000000000000000000000000000000000599000011000000021c000000b00c0d13939c1c4d164a9a0a542fb954c15632210234250891a68ff5a59ebf176b5e3f0eb65e3f0eb65e3f0eb65e3f0eb65e3f0eb65e3f0eb65e3f0eb65e3f0eb65e3f0eb65e3f0eb65e3f0eb65e3f0eb65e3f0eb65e3f0eb65e3f0eb65e3f0eb65e3f0eb65e3f0eb65e3f0eb65e3f0eb62aa7145588a80fa2c8f8bb003e0fae01ba8cd59918c93f3ed7554d2faebae28f0030dfc84e586402cea3a6f7e2f200037e4bfe8bd0c18ca4447ce19f0966f42d000000b023c57b2a37a41f3d4286d10cc947fe3d05fe65eefaec006c6ab61db2c96f5de7623f0eb6623f0eb6623f0eb6623f0eb6623f0eb6623f0eb6623f0eb6623f0eb6623f0eb6623f0eb6623f0eb6623f0eb6623f0eb6623f0eb6623f0eb6623f0eb6623f0eb6623f0eb6623f0eb6623f0eb611fb2d7942fe41a008953c02561cff204225323d65d6c68857997fa8e96b290a17e9475ee9e03629c6906db07c80a97f2e1843789788847f08a309ac34173aa9000000b00b19944df1fa513a8223520ee1554f5b8d96c29347f987b5eafa502c041fa462663f0eb6663f0eb6663f0eb6663f0eb6663f0eb6663f0eb6663f0eb6663f0eb6663f0eb6663f0eb6663f0eb6663f0eb6663f0eb6663f0eb6663f0eb6663f0eb6663f0eb6663f0eb6663f0eb6663f0eb629b3950fde8613c7008202baefaba89bf1f1772a2c9dbe631bbfa7b6141b6f862fa1aef585680850be7d3469160f52fadde488655e4f7c59ccc931b95ec781250000021c000000b022d1fbe48d8223617a1018c77ae3f8d73d6307800ec07f90af2078392ecfeade6a3f0eb66a3f0eb66a3f0eb66a3f0eb66a3f0eb66a3f0eb66a3f0eb66a3f0eb66a3f0eb66a3f0eb66a3f0eb66a3f0eb66a3f0eb66a3f0eb66a3f0eb66a3f0eb66a3f0eb66a3f0eb66a3f0eb66a3f0eb61107ae3398dc45c4401e83bd07b8f9ba7989d3ce79ab45ac9c03da2f4ecbb60116f5c8193fbe3a4dfe19b56b2e1ca419657ce509ab5d03a34d0d64329977c7a0000000b00a26150847d8555eb9ac99c992f149f5c4fb64245bce06da2f64aab2698031596e3f0eb66e3f0eb66e3f0eb66e3f0eb66e3f0eb66e3f0eb66e3f0eb66e3f0eb66e3f0eb66e3f0eb66e3f0eb66e3f0eb66e3f0eb66e3f0eb66e3f0eb66e3f0eb66e3f0eb66e3f0eb66e3f0eb66e3f0eb628c015ca346417eb380b4a75a147a336295618bb40723d87602a023c797bfc7d2eae2fafdb460c74f6067c23c7ab4d95154929f67223fb7e11338c3fc4280e1c000000b021de7c9ee3602785b19960822c7ff37174c7a9112294feb4f38ad2bf943077d5723f0eb6723f0eb6723f0eb6723f0eb6723f0eb6723f0eb6723f0eb6723f0eb6723f0eb6723f0eb6723f0eb6723f0eb6723f0eb6723f0eb6723f0eb6723f0eb6723f0eb6723f0eb6723f0eb6723f0eb610142eedeeba49e877a7cb77b954f454b0ee755f8d7fc4d0e06e34b5b42c42f8160248d3959c3e7235a2fd25dfb89eb39ce1869abf3182c79177beb8fed854970000021c000000b0093295c29db65982f135e184448d448ffc6005b56fa285fe73cf0538cee0be50763f0eb6763f0eb6763f0eb6763f0eb6763f0eb6763f0eb6763f0eb6763f0eb6763f0eb6763f0eb6763f0eb6763f0eb6763f0eb6763f0eb6763f0eb6763f0eb6763f0eb6763f0eb6763f0eb6763f0eb627cc96848a421c0f6f94923052e39dd060baba4c5446bcaba4945cc2dedc89742dbab06a312410992d8fc3de7947482f4cadcb8785f87aa2559de6c629889b13000000b020eafd59393e2ba9e922a83cde1bee0bac2c4aa236697dd937f52d45f99104cc7a3f0eb67a3f0eb67a3f0eb67a3f0eb67a3f0eb67a3f0eb67a3f0eb67a3f0eb67a3f0eb67a3f0eb67a3f0eb67a3f0eb67a3f0eb67a3f0eb67a3f0eb67a3f0eb67a3f0eb67a3f0eb67a3f0eb67a3f0eb60f20afa844984e0caf3113326af0eeeee85316f0a15443f524d88f3c198ccfef150ec98deb7a42966d2c44e09154994dd446282bd30601ebd5e2193f6438e18e000000b0083f167cf3945da728bf293ef6293f2a33c4a74683770522b8395fbf34414b477e3f0eb67e3f0eb67e3f0eb67e3f0eb67e3f0eb67e3f0eb67e3f0eb67e3f0eb67e3f0eb67e3f0eb67e3f0eb67e3f0eb67e3f0eb67e3f0eb67e3f0eb67e3f0eb67e3f0eb67e3f0eb67e3f0eb67e3f0eb626d9173ee0202033a71dd9eb047f986a981f5bdd681b3bcfe8feb749443d166b2cc73124870214bd65190b992ae342c984126d1899ccf9c69a08414c8ee9280a0000021c000000b01ff77e138f1c2fce20abeff78fb7e8a5e390ec334a3dfcfd7c5f87cc5ef191c3823f0eb6823f0eb6823f0eb6823f0eb6823f0eb6823f0eb6823f0eb6823f0eb6823f0eb6823f0eb6823f0eb6823f0eb6823f0eb6823f0eb6823f0eb6823f0eb6823f0eb6823f0eb6823f0eb6823f0eb60e2d30629a765230e6ba5aed1c8ce9891fb7b881b528c3196942e9c27eed5ce6141b4a48415846baa4b58c9b42f093e80baac9bce6da81101a4c73c5c9996e85000000b0074b9737497261cb604870f9a7c539c46b2948d7974b8446fca3ba4599a1d83e863f0eb6863f0eb6863f0eb6863f0eb6863f0eb6863f0eb6863f0eb6863f0eb6863f0eb6863f0eb6863f0eb6863f0eb6863f0eb6863f0eb6863f0eb6863f0eb6863f0eb6863f0eb6863f0eb6863f0eb625e597f935fe2457dea721a5b61b9304cf83fd6e7befbaf42d6911cfa99da3622bd3b1dedce018e19ca25353dc7f3d63bb770ea9ada178eade729bd2f449b501000000b01f03fecde4fa33f2583537b24153e3401af58dc45e127c21c0c9e252c4521eba8a3f0eb68a3f0eb68a3f0eb68a3f0eb68a3f0eb68a3f0eb68a3f0eb68a3f0eb68a3f0eb68a3f0eb68a3f0eb68a3f0eb68a3f0eb68a3f0eb68a3f0eb68a3f0eb68a3f0eb68a3f0eb68a3f0eb68a3f0eb60d39b11cf05456551e43a2a7ce28e423571c5a12c8fd423dadad4448e44de9dd1327cb0297364adedc3ed455f48c8e82430f6b4dfaaf00345eb6ce4c2ef9fb7c0000021c000000b0065817f19f5065ef97d1b8b45961345ea28dea68ab20036b410e14cbff0265358e3f0eb68e3f0eb68e3f0eb68e3f0eb68e3f0eb68e3f0eb68e3f0eb68e3f0eb68e3f0eb68e3f0eb68e3f0eb68e3f0eb68e3f0eb68e3f0eb68e3f0eb68e3f0eb68e3f0eb68e3f0eb68e3f0eb68e3f0eb624f218b38bdc287c1630696067b78d9f06e89eff8fc43a1871d36c560efe30592ae0329932be1d05d42b9b0e8e1b37fdf2dbb03ac175f80f22dcf65959aa41f8000000b01e107f883ad838168fbe7f6cf2efddda525a2f5571e6fb4605343cd929b2abb1923f0eb6923f0eb6923f0eb6923f0eb6923f0eb6923f0eb6923f0eb6923f0eb6923f0eb6923f0eb6923f0eb6923f0eb6923f0eb6923f0eb6923f0eb6923f0eb6923f0eb6923f0eb6923f0eb6923f0eb60c4631d746325a7955ccea627fc4debd8e80fba3dcd1c161f2179ecf49ae76d412344bbced144f0313c81c10a628891c7a740cdf0e837f58a32128d2945a8873000000b0056498abf52e6a13cf5b006f0afd2ef8d9f28bf9bef4828f85786f526462f22c963f0eb6963f0eb6963f0eb6963f0eb6963f0eb6963f0eb6963f0eb6963f0eb6963f0eb6963f0eb6963f0eb6963f0eb6963f0eb6963f0eb6963f0eb6963f0eb6963f0eb6963f0eb6963f0eb6963f0eb623fe996de1ba2ca04db9b11b195388393e4d4090a398b93cb63dc6dc745ebd5029ecb353889c212a0bb4e2c93fb732982a4051cbd54a7733674750dfbf0aceef0000021c000000b01d1d004290b63c3ac747c727a48bd87489bed0e685bb7a6a499e975f8f1338a89a3f0eb69a3f0eb69a3f0eb69a3f0eb69a3f0eb69a3f0eb69a3f0eb69a3f0eb69a3f0eb69a3f0eb69a3f0eb69a3f0eb69a3f0eb69a3f0eb69a3f0eb69a3f0eb69a3f0eb69a3f0eb69a3f0eb69a3f0eb60b52b2919c105e9d8d56321d3160d957c5e59d34f0a640863681f955af0f03cb1140cc7742f253274b5163cb57c483b6b1d8ae702257fe7ce78b8358f9bb156a000000b0047119664b0c6e3806e44829bc99299311572d8ad2c901b3c9e2c9d8c9c37f239e3f0eb69e3f0eb69e3f0eb69e3f0eb69e3f0eb69e3f0eb69e3f0eb69e3f0eb69e3f0eb69e3f0eb69e3f0eb69e3f0eb69e3f0eb69e3f0eb69e3f0eb69e3f0eb69e3f0eb69e3f0eb69e3f0eb69e3f0eb6230b1a28379830c48542f8d5caef82d375b1e221b76d3860faa82162d9bf4a4728f9340dde7a254e433e2a83f1532d3261a4f35ce91ef657abb1ab66246b5be6000000b01c2980fce694405efed10ee25627d30ec1237277998ff98e8e08f1e5f473c59fa23f0eb6a23f0eb6a23f0eb6a23f0eb6a23f0eb6a23f0eb6a23f0eb6a23f0eb6a23f0eb6a23f0eb6a23f0eb6a23f0eb6a23f0eb6a23f0eb6a23f0eb6a23f0eb6a23f0eb6a23f0eb6a23f0eb6a23f0eb60a5f334bf1ee62c1c4df79d7e2fcd3f1fd4a3ec6047abfaa7aec53dc146f90c2104d4d3198d0574b82daab8609607e50e93d5001362c7da12bf5dddf5f1ba2610000021c000000b0037d9a20a0ea725c3e6d8fe46e35242d48bbcf1be69d80d80e4d245f2f240c1aa63f0eb6a63f0eb6a63f0eb6a63f0eb6a63f0eb6a63f0eb6a63f0eb6a63f0eb6a63f0eb6a63f0eb6a63f0eb6a63f0eb6a63f0eb6a63f0eb6a63f0eb6a63f0eb6a63f0eb6a63f0eb6a63f0eb6a63f0eb622179ae28d7634e8bccc40907c8b7d6dad1683b2cb41b7853f127be93f1fd73e2805b4c8345829727ac7723ea2ef27cc990994edfcf3757bf01c05ec89cbe8dd000000b01b3601b73c724483365a569d07c3cda8f8881408ad6478b2d2734c6c59d45296aa3f0eb6aa3f0eb6aa3f0eb6aa3f0eb6aa3f0eb6aa3f0eb6aa3f0eb6aa3f0eb6aa3f0eb6aa3f0eb6aa3f0eb6aa3f0eb6aa3f0eb6aa3f0eb6aa3f0eb6aa3f0eb6aa3f0eb6aa3f0eb6aa3f0eb6aa3f0eb6096bb40647cc66e5fc68c1929498ce8c34aee057184f3ecebf56ae6279d01db90f59cdebeeae5b6fba63f340bafc78eb20a1f1924a00fcc570603865c47c2f58000000b0028a1adaf6c8768075f6d79f1fd11ec7802070acfa71fffc52b77ee594849911ae3f0eb6ae3f0eb6ae3f0eb6ae3f0eb6ae3f0eb6ae3f0eb6ae3f0eb6ae3f0eb6ae3f0eb6ae3f0eb6ae3f0eb6ae3f0eb6ae3f0eb6ae3f0eb6ae3f0eb6ae3f0eb6ae3f0eb6ae3f0eb6ae3f0eb6ae3f0eb621241b9ce354390cf455884b2e277807e47b2543df1636a9837cd66fa4806435271235828a362d96b250b9f9548b2266d06e367f10c7f4a034866072ef2c75d40000021c000000b01a428271925048a76de39e57b95fc8432fecb599c138f7d716dda6f2bf34df8db23f0eb6b23f0eb6b23f0eb6b23f0eb6b23f0eb6b23f0eb6b23f0eb6b23f0eb6b23f0eb6b23f0eb6b23f0eb6b23f0eb6b23f0eb6b23f0eb6b23f0eb6b23f0eb6b23f0eb6b23f0eb6b23f0eb6b23f0eb6087834c09daa6b0a33f2094d4634c9266c1381e82c23bdf303c108e8df30aab00e664ea6448c5f93f1ed3afb6c987385580693235dd57be9b4ca92ec29dcbc4f000000b001969b954ca67aa4ad801f59d16d1961b785123e0e467f209721d96bf9e52608b63f0eb6b63f0eb6b63f0eb6b63f0eb6b63f0eb6b63f0eb6b63f0eb6b63f0eb6b63f0eb6b63f0eb6b63f0eb6b63f0eb6b63f0eb6b63f0eb6b63f0eb6b63f0eb6b63f0eb6b63f0eb6b63f0eb6b63f0eb620309c5739323d312bded005dfc372a21bdfc6d4f2eab5cdc7e730f609e0f12c261eb63ce01431bae9da01b406271d0107d2d810249c73c478f0baf9548d02cb000000b0194f032be82e4ccba56ce6126afbc2dd6751572ad50d76fb5b48017924956c84ba3f0eb6ba3f0eb6ba3f0eb6ba3f0eb6ba3f0eb6ba3f0eb6ba3f0eb6ba3f0eb6ba3f0eb6ba3f0eb6ba3f0eb6ba3f0eb6ba3f0eb6ba3f0eb6ba3f0eb6ba3f0eb6ba3f0eb6ba3f0eb6ba3f0eb6ba3f0eb60784b57af3886f2e6b7b5107f7d0c3c0a37823793ff83d17482b636f449137a70d72cf609a6a63b8297682b61e346e1f8f6b34b471a9fb0df934ed728f3d49460000133c000001e0000000ea1f3d1d118f104155636817c0915f6d3c5344686606bf34f20c518b7c6f417e23bd3f0eb6000000c2bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f0eb6bf3f000000ee0691363549667352a30498c2a96cbe5adadcc50a53ccbc3b8c95bdf5a9f1c49ec13f0eb6000000c6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f0eb6c33f000001f0000000f21e499dcbe4ee45799af15f7b42fb67d68aa909f71a93b41650bbe602d4a20b1ac53f0eb6000000cac73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f0eb6c73f000000f6059db6ef9f447776da8de07d5b08b8f51241669b67a13b5fd100187c0f525195c93f0eb6000000cecb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f0eb6cb3f00000200000000fa1d561e863acc499dd27aa735f4976270c20dab882e68333a952640893a029811cd3f0eb6000000d2cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f0eb6cf3f000000fe04aa37a9f5227b9b121728380ca4b38f49a6082c7b75ba84156a730274b2de8cd13f0eb6000000d6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f0eb6d33f00000210000001021c629f4090aa4dc20a03eef0a6335d0af9724d19423cb25ed9909b0f9f632508d53f0eb6000000dad73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0eb6d73f0000010603b6b8644b007fbf49a06ff2be40ae29810aa9bd8f4a39a859d4cd88da136b83d93f0eb6000000dedb3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f0eb6db3f000002200000010a1b6f1ffae68851e6418d36ab57cf57a530d6eeaa561131831dfaf59604c3b1ffdd3f0eb6000000e2df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0eb6df3f0000010e02c3391ea0de83e38129b7ad6fdca8c3b86f4b4ea31eb8cc9e3f280f3f73f87ae13f0eb6000000e6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f0eb6e33f00000230000001121a7ba0b53c66560a79167e66096b523f683b903b69e5b0a76265501c6a243ef6e53f0eb6000000eae73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0eb6e73f0000011601cfb9d8f6bc8807b8b2ff682178a35defd3ecdfb6f337f0e2a98295a4d48571e93f0eb6000000eeeb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f0eb6eb3f000002400000011a1988216f92445a2eb09fc620bb074cd99fa031cc7dba2fcba6cfaaa2cf84cbeded3f0eb6000000f2ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0eb6ef3f0000011e00dc3a934c9a8c2bf03c4722d3149df827388e70cac7b7152713dd1c0a351268f13f0eb6000000f6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f0eb6f33f00000250000001221894a229e8225e52e8290ddb6ca34773d704d35d918eaeefeb3a052934e558e4f53f0eb6000000faf73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f0eb6f73f00000126304d09c083aa3079e015d4940631f0ef86d1184a5855a6caaf602d365f959f60f93f0eb6000000fefb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f0eb6fb3f000001600000012a17a122e43e0062771fb255961e3f420e0e6974eea5632e142fa45faf9a45e5dbfd3f0eb600000102ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0eb6ff3f0000002e2fc11490a990bf91c6ba44ddd805a60b54953d852931c63a2406e8f33a1f398801400eb60000000603400eb60340000000700000003217152db463e6f18f0656c5dff012f729dc2d9a29763f4d83a44b1b6c74cf800305400eb60000000a07400eb607400eb60740000000362ecd954aff6ec3b5fe438c9889a1a0a58bf9df163d06455e687143799f7fc67f09400eb60000000e0b400eb60b400eb60b400eb60b40000000800000003a1621ae6eb9c4f5b33de00d9aa1aef1c413923bba8a13cca7e8b575f2da300cfa0d400eb6000000120f400eb60f400eb60f400eb60f400eb60f400000003e2dda1605554cc7da35ccd4533b3d9b3fc35e80a750dac482acdb9e0004e0537611400eb60000001613400eb613400eb613400eb613400eb613400eb61340003800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d9000011000000021c000000b026f87cda0448d774af5aea5fc675eb7b0ed010fd32fd85b0403c6e831f94cece16400eb616400eb616400eb616400eb616400eb616400eb616400eb616400eb616400eb616400eb616400eb616400eb616400eb616400eb616400eb616400eb616400eb616400eb616400eb616400eb6152e2f290fa2f9d775695555534aec5e4af6dd4b9de84bcc2d1fd0793f9099f11b1c490eb684ee613364870379ae96bd36e9ee86cf9a09c2de295a7c8a3cab90000000b00e4c95fdbe9f0971eef76b61de833c9996686da1800b0cf9c080a0fc5a4515491a400eb61a400eb61a400eb61a400eb61a400eb61a400eb61a400eb61a400eb61a400eb61a400eb61a400eb61a400eb61a400eb61a400eb61a400eb61a400eb61a400eb61a400eb61a400eb61a400eb62ce696bfab2acbfe6d561c0decd995d9fac3223864af43a6f145f8866a40e06d0270623270db205e7301080591bbe7dbbe824b2b1ca7910c5e6d8cf5c4ecf20b000000b02604fd945a26db98e6e4321a7811e6154634b28e46d204d484a6c90984f55bc51e400eb61e400eb61e400eb61e400eb61e400eb61e400eb61e400eb61e400eb61e400eb61e400eb61e400eb61e400eb61e400eb61e400eb61e400eb61e400eb61e400eb61e400eb61e400eb61e400eb6143aafe36580fdfbacf29d1004e6e6f8825b7edcb1bccaf0718a2affa4f126e81a28c9c90c62f2856aedcebe2b4a91576e4e9017e36e88e72293b502ef9d38870000021c000000b00d5916b8147d0d962680b31c901f3733cdcd0f3293df8c1e04eafb82bfa5a24022400eb622400eb622400eb622400eb622400eb622400eb622400eb622400eb622400eb622400eb622400eb622400eb622400eb622400eb622400eb622400eb622400eb622400eb622400eb622400eb62bf3177a0108d022a4df63c89e7590743227c3c97883c2cb35b0530ccfa16d64017ce2ecc6b92482aa8a4fc04357e275f5e6ecbc307c1030a2d7e77c2a4d7f02000000b025117e4eb004dfbd1e6d79d529ade0af7d99541f5aa683f8c911238fea55e8bc26400eb626400eb626400eb626400eb626400eb626400eb626400eb626400eb626400eb626400eb626400eb626400eb626400eb626400eb626400eb626400eb626400eb626400eb626400eb626400eb61347309dbb5f021fe47be4cab682e192b9c0206dc5914a14b5f485860a51b3df19354a836240f6a9a2771678dce68bf1a5b331a8f743080b66fe0f8954fdc57e000000b00c6597726a5b11ba5e09fad741bb31ce0531b0c3a7b40b424955560925062f372a400eb62a400eb62a400eb62a400eb62a400eb62a400eb62a400eb62a400eb62a400eb62a400eb62a400eb62a400eb62a400eb62a400eb62a400eb62a400eb62a400eb62a400eb62a400eb62a400eb62aff983456e6d446dc68ab8350118b0e698c655a8c5841ef7a1aad933501fa5b008963a71c9728a6e213977af4f3dd102d4b8e4d44508f54e74242028fae0bf90000021c000000b0241dff0905e2e3e155f6c18fdb49db49b4fdf5b06e7b031d0d7b7e164fb675b32e400eb62e400eb62e400eb62e400eb62e400eb62e400eb62e400eb62e400eb62e400eb62e400eb62e400eb62e400eb62e400eb62e400eb62e400eb62e400eb62e400eb62e400eb62e400eb62e400eb61253b158113d06441c052c85681edc2cf124c1fed965c938fa5ee00c6fb240d61841cb3db81efacdda005e338e82868bdd17d33a0b17872fab686a0fba5e5275000000b00b72182cc03915de95934291f3572c683c965254bb888a668dbfb08f8a66bc2e32400eb632400eb632400eb632400eb632400eb632400eb632400eb632400eb632400eb632400eb632400eb632400eb632400eb632400eb632400eb632400eb632400eb632400eb632400eb632400eb62a0c18eeacc4d86b13f1f33e01ad85a8a0f106eba02cc113be8508199a6287522ffa32d453a6ccf4d1ed24ec281130078ce41826d1de7f0a6f8e921ce50e98f1000000b0232a7fc35bc0e8058d80094a8ce5d5e3ec629741824f824151e5d89cb51702aa36400eb636400eb636400eb636400eb636400eb636400eb636400eb636400eb636400eb636400eb636400eb636400eb636400eb636400eb636400eb636400eb636400eb636400eb636400eb636400eb611603212671b0a68538e744019bad6c72889638fed3a485d3ec93a92d512cdcd174e4bf80dfcfef21189a5ee401e8126147c74cb1eec0653efd2c4961fbedf6c0000021c000000b00a7e98e716171a02cd1c8a4ca4f3270273faf3e5cf5d098ad22a0b15efc749253a400eb63a400eb63a400eb63a400eb63a400eb63a400eb63a400eb63a400eb63a400eb63a400eb63a400eb63a400eb63a400eb63a400eb63a400eb63a400eb63a400eb63a400eb63a400eb63a400eb6291899a902a2dc8f4b7b3af8b3498042d855a87cb401403802ef629fffc314492f06b38ea984d11909766ca6d9ad2aa1c448b9b7e5b2fe2eb3f8eca34a6f25e8000000b02237007db19eec29c50951053e81d07e23c738d296240165965033231a778fa13e400eb63e400eb63e400eb63e400eb63e400eb63e400eb63e400eb63e400eb63e400eb63e400eb63e400eb63e400eb63e400eb63e400eb63e400eb63e400eb63e400eb63e400eb63e400eb63e400eb6106cb2ccbcf90e8c8b17bbfacb56d1615fee0521010ec781833395193a735ac4165accb263db03164912eda8f1ba7bc04be1165c32c08578343d1f1c851f6c63000000b0098b19a16bf51e2704a5d207568f219cab5f9576e33188af1694659c5527d61c42400eb642400eb642400eb642400eb642400eb642400eb642400eb642400eb642400eb642400eb642400eb642400eb642400eb642400eb642400eb642400eb642400eb642400eb642400eb642400eb628251a635880e0b3830482b364e57add0fba4a0dc7d5bf5c4759bd266523a1402e133448ff62d53d40ffb4618b49253bfbad5b48f9877d52f8634729afcfb2df0000021c000000b021438138077cf04dfc9298bff01dcb185b2bda63a9f88089daba8da97fd81c9846400eb646400eb646400eb646400eb646400eb646400eb646400eb646400eb646400eb646400eb646400eb646400eb646400eb646400eb646400eb646400eb646400eb646400eb646400eb646400eb60f79338712d712b0c2a103b57cf2cbfb9752a6b214e346a5c79def9f9fd3e7bb15674d6cb9b9073a809c3563a356765a8345b7ed4695049c78a779a2ea7ff95a000000b008979a5bc1d3224b3c2f19c2082b1c36e2c43707f70607d35afec022ba8863134a400eb64a400eb64a400eb64a400eb64a400eb64a400eb64a400eb64a400eb64a400eb64a400eb64a400eb64a400eb64a400eb64a400eb64a400eb64a400eb64a400eb64a400eb64a400eb64a400eb627319b1dae5ee4d7ba8dca6e16817577471eeb9edbaa3e808bc417acca842e372d1fb5035540d9617888fc1c3ce51fd63311fcda0d5bfc773ccda1b015303fd6000000b0205001f25d5af472341be07aa1b9c5b292907bf4bdccffae1f24e82fe538a98f4e400eb64e400eb64e400eb64e400eb64e400eb64e400eb64e400eb64e400eb64e400eb64e400eb64e400eb64e400eb64e400eb64e400eb64e400eb64e400eb64e400eb64e400eb64e400eb64e400eb60e85b44168b516d4fa2a4b702e8ec695ceb7484328b7c5ca0c084a26053474b21473ce270f970b5eb8257d1e54f270f4baaa597e5a6983c0bd11d4294fe086510000021c000000b007a41b1617b1266f73b8617cb9c716d11a28d8990ada86f79f691aa91fe8f00a52400eb652400eb652400eb652400eb652400eb652400eb652400eb652400eb652400eb652400eb652400eb652400eb652400eb652400eb652400eb652400eb652400eb652400eb652400eb652400eb6263e1bd8043ce8fbf2171228c81d70117e838d2fef7ebda4d02e72332fe4bb2e2c2c35bdab1edd85b01243d6ee811a706a769e6b21307b9b8137fc367a90cccd000000b01f5c82acb338f8966ba528355355c04cc9f51d85d1a17ed2638f42b64a99368656400eb656400eb656400eb656400eb656400eb656400eb656400eb656400eb656400eb656400eb656400eb656400eb656400eb656400eb656400eb656400eb656400eb656400eb656400eb656400eb60d9234fbbe931af931b3932ae02ac130061be9d43c8c44ee5072a4ac6a9501a913804ee165750f82efaec4d9068e6b8ef20efb0f6e3e02e5017c2eafb5411348000000b006b09bd06d8f2a93ab41a9376b63116b518d7a2a1eaf061be3d3752f85497d015a400eb65a400eb65a400eb65a400eb65a400eb65a400eb65a400eb65a400eb65a400eb65a400eb65a400eb65a400eb65a400eb65a400eb65a400eb65a400eb65a400eb65a400eb65a400eb65a400eb6254a9c925a1aed2029a059e379b96aabb5e82ec103533cc91498ccb9954548252b38b67800fce1a9e79b8b91a01d150aa1db3ffc3504fabfc5a256bcdff159c40000021c000000b01e6903670916fcbaa32e6ff004f1bae70159bf16e575fdf6a7f99d3caff9c37d5e400eb65e400eb65e400eb65e400eb65e400eb65e400eb65e400eb65e400eb65e400eb65e400eb65e400eb65e400eb65e400eb65e400eb65e400eb65e400eb65e400eb65e400eb65e400eb65e400eb60c9eb5b614711f1d693cdae591c6bbca3d808b655060c41294dcff32cff58ea0128ccf9bbb5313a727380c93b82a662929739ca08212820945e689361aa1a03f000000b005bd1c8ac36d2eb7e2caf0f21cff0c0588f21bbb32838540283dcfb5eaaa09f862400eb662400eb662400eb662400eb662400eb662400eb662400eb662400eb662400eb662400eb662400eb662400eb662400eb662400eb662400eb662400eb662400eb662400eb662400eb662400eb624571d4caff8f1446129a19e2b556545ed4cd0521727bbed5903273ffaa5d51c2a45373256dae5ce1f24d34c51b90fa4d93fe18d48d979e40a0cb1434551e6bb000000b01d7584215ef500dedab7b7aab68db58138be60a7f94a7d1aec63f7c3155a507466400eb666400eb666400eb666400eb666400eb666400eb666400eb666400eb666400eb666400eb666400eb666400eb666400eb666400eb666400eb666400eb666400eb666400eb666400eb666400eb60bab36706a4f2341a0c622a04362b66474e52cf664354336d94759b935561b9711995056113117cb5ec1544e69c660c360d83e3195e7012d8a50e3bc80022d360000021c000000b004c99d45194b32dc1a5438acce9b069fc056bd4c465804646ca82a3c500a96ef6a400eb66a400eb66a400eb66a400eb66a400eb66a400eb66a400eb66a400eb66a400eb66a400eb66a400eb66a400eb66a400eb66a400eb66a400eb66a400eb66a400eb66a400eb66a400eb66a400eb623639e0705d6f56898b2e958dcf15fe024b171e32afc3b119d6d81c6600662132951b7ecacb8e9f256ae1b0703550a3f10a4831e5cadf9084e770bc9aab273b2000000b01c8204dbb4d305031240ff656829b01b702302390d1efc3f30ce52497abadd6b6e400eb66e400eb66e400eb66e400eb66e400eb66e400eb66e400eb66e400eb66e400eb66e400eb66e400eb66e400eb66e400eb66e400eb66e400eb66e400eb66e400eb66e400eb66e400eb66e400eb60ab7b72ac02d2765d84f6a5af4feb0feac49ce877809c25b1db1b43f9ab6a88e10a5d110670f1bef964a9c091b625b5d983cdfc2a9bb8051cebb3e42e562ba2d000000b003d61dff6f29370051dd806780370139f7bb5edd5a2c8388b11284c2b56b23e672400eb672400eb672400eb672400eb672400eb672400eb672400eb672400eb672400eb672400eb672400eb672400eb672400eb672400eb672400eb672400eb672400eb672400eb672400eb672400eb622701ec15bb4f98cd03c31138e8d5a7a5c1613743ed0ba35e1d7dc4cc566ef0a285e38a70296ee168e3762c1b4f104d9480924af7082782c92e16650101300a90000120c00000150000000a209c437e5160b2b8a0fd8b215a69aab98e3ae70188bde417f621c0ec60017358575400eb60000007a77400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb677400eb67740000000a6217c9f7bb192fdb107c578ce40295514937ab50552a5395a264236d32ac77c0179400eb60000007e7b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b400eb67b4000000160000000aa08d0b89f6be92fae4761f9d05836a6331b1311a99fb2c0a3a686694c6577c27c7d400eb6000000827f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f400eb67f40000000ae20892036077101d53f4ec088f1c54faecadf56966679b87e6aac9159902808f881400eb60000008683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb683400eb6834000000170000000b207dd3959c1c733d27eeb418b09d2a0cd5277b33ab3873fc7eaf0c3d2cad84f7385400eb60000008a87400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb687400eb68740000000b61f95a0f05d4f05f976d80843a3614a490243f8277a4e37a2af16ebdff58895ef89400eb60000008e8b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b400eb68b4000000180000000ba06e9ba1417a537f6b6748945bb6e9b6789dc54cbc75bbeec2f5b1e593038dc6a8d400eb6000000928f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f400eb68f40000000be1ea221aab32d0a1dae614ffe54fd44e339a899b88e22b6c6f38146665ae922e691400eb60000009693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb693400eb6934000000190000000c205f63ace6d833c1aedfdd1006d0a9601c140f65cdb303e1073c578df9599696195400eb60000009a97400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb697400eb69740000000c61daea265090b0e41e5ea97b906993f7d710d3b49a1f735eb37eba0ecc049afdd99400eb60000009e9b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b400eb69b40000001a0000000ca0502bb88c361403f258718bb1ea6909bf8a597edef04bd34b82fd365faf9f6589d400eb6000000a29f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f400eb69f40000000ce1cbb231f5ee912661d73df73b8353a17a871dcdab5cbb50f7c55fb7325aa3cd4a1400eb6000000a6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a3400eb6a340000001b0000000d2040f3c43193f44635d106075d0428b36300a397f02d93c58fc9a2dec605a834fa5400eb6000000aaa7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a7400eb6a740000000d61bc7a3d9b4c7168a54fd272e69d134b1dfd67e6bc9a03433c0c055f98b0ac9cba9400eb6000000aeab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab400eb6ab40000001c0000000da031bbcfd6f1d48879499a83081de85d0676edb1016adbb7d41048872c5bb1046ad400eb6000000b2af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af400eb6af40000000de1ad424940aa51aae8c866ee91b6d2f4c173b1ffcdd74b358052ab07ff06b56c2b1400eb6000000b6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b3400eb6b340000001d0000000e202283db7c4fb4cabcc22efeb337a806a9ed37ca12a823aa1856ee2f92b1b9d3db5400eb6000000bab7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b7400eb6b740000000e619e0a54e60831ed2c40fb6a3cd0929e64e9fc18df149327c49950b0655cbe3b9b9400eb6000000bebb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb400eb6bb40000001e0000000ea0134be721ad950d003ac37a5e5167b04d6381e323e56b9c5c9d93d7f907c2a34bd400eb6000000c2bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf400eb6bf40000000ee18ed2608b66122f6fb98fe5e7ea524808604631f051db1a08dff658cbb2c70b0c1400eb6000000c6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c3400eb6c340000001f0000000f200413f2c70b754f43b357f6096b2759f0d9cbfc3522b38ea0e439805f5dcb72bc5400eb6000000cac7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c7400eb6c740000000f617f9a6c30c3f271b3322461930411f1abd6904b018f230c4d269c013208cfda7c9400eb6000000cecb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb400eb6cb4000380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f0000000000000000000000000000000000000000000000000000000000000619000011000000021c000000b011180d97bb3b36b5acb05c25bb796f5608da9505fb14f1f265ca90963b4178ffce400eb6ce400eb6ce400eb6ce400eb6ce400eb6ce400eb6ce400eb6ce400eb6ce400eb6ce400eb6ce400eb6ce400eb6ce400eb6ce400eb6ce400eb6ce400eb6ce400eb6ce400eb6ce400eb6ce400eb62fb20e59a7c6f9422b0f0cd1c9cfc8966d35499cdfb9289f968fe8204b3d4423053bd9cc6d774da230b9f8c96eb21a9830f4728f97b1760503b77c8fa5e955c1000000b028d0752e56c308dca49d22de550818d1b8a6d9f2c1dbe9cd29f0b8a365f1bf7bd2400eb6d2400eb6d2400eb6d2400eb6d2400eb6d2400eb6d2400eb6d2400eb6d2400eb6d2400eb6d2400eb6d2400eb6d2400eb6d2400eb6d2400eb6d2400eb6d2400eb6d2400eb6d2400eb6d2400eb61706277d621d2b3f6aab8dd3e1dd19b4f4cda6412cc6afe916d41a9985ed8a9e1cf4416308ff1fc928a6bf820840c413e0c0b77c5e786ddfc7dda49cd0999c3d000000b010248e5211193ad9e439a3e06d1569f0403f36970ee97116aa34eb1ca0a205f6d6400eb6d6400eb6d6400eb6d6400eb6d6400eb6d6400eb6d6400eb6d6400eb6d6400eb6d6400eb6d6400eb6d6400eb6d6400eb6d6400eb6d6400eb6d6400eb6d6400eb6d6400eb6d6400eb6d6400eb62ebe8f13fda4fd666298548c7b6bc330a499eb2df38da7c3dafa42a6b09dd11a04485a86c35551c668434084204e153268591420ab85f5294821d7160b49e2b80000021c000000b027dcf5e8aca10d00dc266a9906a4136bf00b7b83d5b068f16e5b1329cb524c72da400eb6da400eb6da400eb6da400eb6da400eb6da400eb6da400eb6da400eb6da400eb6da400eb6da400eb6da400eb6da400eb6da400eb6da400eb6da400eb6da400eb6da400eb6da400eb6da400eb61612a837b7fb2f63a234d58e9379144f2c3247d2409b2f0d5b3e751feb4e17951c00c21d5edd23ed6030073cb9dcbeae1825590d724ced040c47ff2335fa2934000000b00f310f0c66f73efe1bc2eb9b1eb1648a77a3d82822bdf03aee9f45a3060292edde400eb6de400eb6de400eb6de400eb6de400eb6de400eb6de400eb6de400eb6de400eb6de400eb6de400eb6de400eb6de400eb6de400eb6de400eb6de400eb6de400eb6de400eb6de400eb6de400eb62dcb0fce5383018a9a219c472d07bdcadbfe8cbf076226e81f649d2d15fe5e110354db41193355ea9fcc883ed1ea0fcc9fbdb5b1bf5a744d8c8c319c70aa6faf000000b026e976a3027f112513afb253b8400e0627701d14e984e815b2c56db030b2d969e2400eb6e2400eb6e2400eb6e2400eb6e2400eb6e2400eb6e2400eb6e2400eb6e2400eb6e2400eb6e2400eb6e2400eb6e2400eb6e2400eb6e2400eb6e2400eb6e2400eb6e2400eb6e2400eb6e2400eb6151f28f20dd93387d9be1d4945150ee96396e963546fae319fa8cfa650aea48c1b0d42d7b4bb281197b94ef76b78b9484f89fa9e86216c2850b259a99b5ab62b0000021c000000b00e3d8fc6bcd54322534c3355d04d5f24af0879b936926f5f3309a0296b631fe4e6400eb6e6400eb6e6400eb6e6400eb6e6400eb6e6400eb6e6400eb6e6400eb6e6400eb6e6400eb6e6400eb6e6400eb6e6400eb6e6400eb6e6400eb6e6400eb6e6400eb6e6400eb6e6400eb6e6400eb62cd79088a96105aed1aae401dea3b86513632e501b36a60c63cef7b37b5eeb0802615bfb6f115a0ed755cff983860a66d7225742d32ef371d0f68c22d60afca6000000b025f5f75d585d15494b38fa0e69dc08a05ed4bea5fd596739f72fc83696136660ea400eb6ea400eb6ea400eb6ea400eb6ea400eb6ea400eb6ea400eb6ea400eb6ea400eb6ea400eb6ea400eb6ea400eb6ea400eb6ea400eb6ea400eb6ea400eb6ea400eb6ea400eb6ea400eb6ea400eb6142ba9ac63b737ac11476503f6b109839afb8af468442d55e4132a2cb60f31831a19c3920a992c35cf4296b21d14b3e286ee9c2f99f5eb4c951cb43000bb4322000000b00d4a108112b347468ad57b1081e959bee66d1b4a4a66ee837773faafd0c3acdbee400eb6ee400eb6ee400eb6ee400eb6ee400eb6ee400eb6ee400eb6ee400eb6ee400eb6ee400eb6ee400eb6ee400eb6ee400eb6ee400eb6ee400eb6ee400eb6ee400eb6ee400eb6ee400eb6ee400eb62be41142ff3f09d309342bbc903fb2ff4ac7cfe12f0b2530a8395239e0bf77ff016ddcb5c4ef5e330edf17b4352205010e86f8d3e70372961560e6a93b6b899d0000021c000000b025027817ae3b196d82c241c91b78033a96396037112de65e3b9a22bcfb73f357f2400eb6f2400eb6f2400eb6f2400eb6f2400eb6f2400eb6f2400eb6f2400eb6f2400eb6f2400eb6f2400eb6f2400eb6f2400eb6f2400eb6f2400eb6f2400eb6f2400eb6f2400eb6f2400eb6f2400eb613382a66b9953bd048d0acbea84d041dd2602c857c18ac7a287d84b31b6fbe7a1926444c6077305a06cbde6cceb0ae7cbe533dc0adca6a70d9870eb6661bd019000000b00c56913b68914b6ac25ec2cb338554591dd1bcdb5e3b6da7bbde5536362439d2f6400eb6f6400eb6f6400eb6f6400eb6f6400eb6f6400eb6f6400eb6f6400eb6f6400eb6f6400eb6f6400eb6f6400eb6f6400eb6f6400eb6f6400eb6f6400eb6f6400eb6f6400eb6f6400eb6f6400eb62af091fd551d0df740bd737741dbad99822c717242dfa454eca3acc0462004f6007a5d701acd625746685f6ee6bdff9b45eb9a64fad7f1ba59cb412fa0cc1694000000b0240ef8d204191d91ba4b8983cd13fdd4cd9e01c82502658280047d4360d4804efa400eb6fa400eb6fa400eb6fa400eb6fa400eb6fa400eb6fa400eb6fa400eb6fa400eb6fa400eb6fa400eb6fa400eb6fa400eb6fa400eb6fa400eb6fa400eb6fa400eb6fa400eb6fa400eb6fa400eb61244ab210f733ff48059f47959e8feb809c4ce168fed2b9e6ce7df3980d04b711832c506b655347e3e552627804ca916f5b7df51c19ee9951df1693ccb7c5d100000021c000000b00b6311f5be6f4f8ef9e80a85e5214ef355365e6c720feccc0048afbc9b84c6c9fe400eb6fe400eb6fe400eb6fe400eb6fe400eb6fe400eb6fe400eb6fe400eb6fe400eb6fe400eb6fe400eb6fe400eb6fe400eb6fe400eb6fe400eb6fe400eb6fe400eb6fe400eb6fe400eb6fe400eb629fd12b7aafb121b7846bb31f377a833b991130356b42379310e0746ab8091ed2feb2c9d51dd06a53641ece019db5292a584243e8865e16fe2179149f62ca38c000000b0238303a229ffaca9a0eff9cd9ee7b2f09b622702f5de84f1f4ab39003b5e1a7602410eb602410eb602410eb602410eb602410eb602410eb602410eb602410eb602410eb602410eb602410eb602410eb602410eb602410eb602410eb602410eb602410eb602410eb602410eb602410eb611b8b5f13559cf0c66fe64c32bbcb3d3d788f35160c94b0de18e9af65b59e59917a6cfd6dc3bc39624f9967152205e32c37c048c927b0904929824f9a605f738000000b00ad71cc5e455dea6e08c7acfb6f5040f22fa83a742ec0c3b74ef6b79760e60f106410eb606410eb606410eb606410eb606410eb606410eb606410eb606410eb606410eb606410eb606410eb606410eb606410eb606410eb606410eb606410eb606410eb606410eb606410eb606410eb629711d87d0e1a1335eeb2b7bc54b5d4f8755383e279042e8a5b4c303860a2c152f5f376d77c395bd1ce65d29ebaf07ae73484979594200df56be4d06d0b63db40000021c000000b0228f845c7fddb0cdd87941885083ad8ad2c6c89409b3041639159386a0bea76d0a410eb60a410eb60a410eb60a410eb60a410eb60a410eb60a410eb60a410eb60a410eb60a410eb60a410eb60a410eb60a410eb60a410eb60a410eb60a410eb60a410eb60a410eb60a410eb60a410eb610c536ab8b37d3309e87ac7ddd58ae6e0eed94e2749dca3225f8f57cc0ba729016b350913219c7ba5c82de2c03bc58ccfae0a61da64f8828d7027f800b66842f000000b009e39d803a33e2cb1815c28a6890fea95a5f253856c08b5fb959c5ffdb6eede80e410eb60e410eb60e410eb60e410eb60e410eb60e410eb60e410eb60e410eb60e410eb60e410eb60e410eb60e410eb60e410eb60e410eb60e410eb60e410eb60e410eb60e410eb60e410eb60e410eb6287d9e4226bfa5579674733676e757e9beb9d9cf3b64c20cea1f1d89eb6ab90c2e6bb827cda199e1546fa4e49d4b0248aaaceb0a6d1680039b28a78d3616caab000000b0219c0516d5bbb4f210028943021fa8250a2b6a251d87833a7d7fee0d061f346412410eb612410eb612410eb612410eb612410eb612410eb612410eb612410eb612410eb612410eb612410eb612410eb612410eb612410eb612410eb612410eb612410eb612410eb612410eb612410eb60fd1b765e115d754d610f4388ef4a90846523673887249566a635003261aff8715bfd14b87f7cbde940c25e6b5585367324547aeba24074d1b6cda0670c711260000021c000000b008f01e3a9011e6ef4f9f0a451a2cf94391c3c6c96a950a83fdc4208640cf7adf16410eb616410eb616410eb616410eb616410eb616410eb616410eb616410eb616410eb616410eb616410eb616410eb616410eb616410eb616410eb616410eb616410eb616410eb616410eb616410eb6278a1efc7c9da97bcdfdbaf128835283f61e7b604f3941312e89781050cb46032d7838e2237f9e058bf8ec9f4ee6fce2e2118c9b80eaff27df9302139b7757a2000000b020a885d12b99b916478bd0fdb3bba2bf41900bb6315c025ec1ea48936b7fc15b1a410eb61a410eb61a410eb61a410eb61a410eb61a410eb61a410eb61a410eb61a410eb61a410eb61a410eb61a410eb61a410eb61a410eb61a410eb61a410eb61a410eb61a410eb61a410eb61a410eb60ede382036f3db790d9a3bf34090a3a27db6d8049c46c87aaecdaa898b7b8c7e14cc5205ddd5d002cb956da166f44e0169a9e93fcdf886715fd7348cd6279e1d000000b007fc9ef4e5efeb13872851ffcbc8f3ddc928685a7e6989a8422e7b0ca63007d61e410eb61e410eb61e410eb61e410eb61e410eb61e410eb61e410eb61e410eb61e410eb61e410eb61e410eb61e410eb61e410eb61e410eb61e410eb61e410eb61e410eb61e410eb61e410eb61e410eb626969fb6d27bada0058702abda1f4d1e2d831cf1630dc05572f3d296b62bd2fa2c84b99c795da229c382345a0082f77d19762e2c94bf7e4c23fd5c9a00d7e4990000021c000000b01fb5068b8177bd3a7f1518b865579d5978f4ad47453081830654a319d0e04e5222410eb622410eb622410eb622410eb622410eb622410eb622410eb622410eb622410eb622410eb622410eb622410eb622410eb622410eb622410eb622410eb622410eb622410eb622410eb622410eb60deab8da8cd1df9d452383adf22c9e3cb51b7995b01b479ef338050ff0dc197513d8d2c033b3d427031eb55c1890489ba10e8ad0e1cd0595a4418f133b882b14000000b007091faf3bcdef37beb199ba7d64ee78008d09eb923e08cc8698d5930b9094cd26410eb626410eb626410eb626410eb626410eb626410eb626410eb626410eb626410eb626410eb626410eb626410eb626410eb626410eb626410eb626410eb626410eb626410eb626410eb626410eb625a320712859b1c43d104a668bbb47b864e7be8276e23f79b75e2d1d1b8c5ff12b913a56cf3ba64dfb0b7c14b21ef21750dacfbda893fd706867b72066387190000000b01ec18745d755c15eb69e607316f397f3b0594ed8590500a74abefda03640db492a410eb62a410eb62a410eb62a410eb62a410eb62a410eb62a410eb62a410eb62a410eb62a410eb62a410eb62a410eb62a410eb62a410eb62a410eb62a410eb62a410eb62a410eb62a410eb62a410eb60cf73994e2afe3c17caccb68a3c898d6ec801b26c3efc6c337a25f96563ca66c12e5537a8991d84b3aa7fd16ca2c4335d8732c61f5a184b9e8abe999a0e8b80b00000bdc000000c00000005a24afa12b7e37b5e8749992213d5742529c4c60138ab6be9dfbc887a380ecece82d410eb6000000322f410eb62f410eb62f410eb62f410eb62f410eb62f410eb62f410eb62f410eb62f410eb62f410eb62f410eb62f410eb62f410000005e0c03ba4f388de7e5b43613235564937123e4bcb7d7c445e77c0cba1cbb9d336331410eb60000003633410eb633410eb633410eb633410eb633410eb633410eb633410eb633410eb633410eb633410eb633410eb633410eb633410eb63341000000d00000006223bc21e5d415ba0cac22d9dbeef33cecd3b101a49e8b3dc24032e229e64d79df35410eb60000003a37410eb637410eb637410eb637410eb637410eb637410eb637410eb637410eb637410eb637410eb637410eb637410eb637410eb637410eb63741000000660b103b098e6bec09ebbf5ade07008e0b5b495e48eb98c50bc07714a320fdc05a39410eb60000003e3b410eb63b410eb63b410eb63b410eb63b410eb63b410eb63b410eb63b410eb63b410eb63b410eb63b410eb63b410eb63b410eb63b410eb63b410eb63b41000000e00000006a22c8a2a029f3be30e3ac2196a08f37870b15a335b25fbce6849d3cb04bae06d63d410eb6000000423f410eb63f410eb63f410eb63f410eb63f410eb63f410eb63f410eb63f410eb63f410eb63f410eb63f410eb63f410eb63f410eb63f410eb63f410eb63f410eb63f410000006e0a1cbbc3e449f02e2348a298b89c88a592adffd9ff6d443004e16f29865e4d5141410eb60000004643410eb643410eb643410eb643410eb643410eb643410eb643410eb643410eb643410eb643410eb643410eb643410eb643410eb643410eb643410eb643410eb643410eb64341000000f00000007221d5235a7fd1c2551b356951522b3221427a44c6c6343c0ac9079736b10e93cd45410eb60000004a47410eb647410eb647410eb647410eb647410eb647410eb647410eb647410eb647410eb647410eb647410eb647410eb647410eb647410eb647410eb647410eb647410eb647410eb647410000007609293c7e3a27f4525ad1ea536a38833fca12a16b1341c354494bc9afebbeda4849410eb60000004e4b410eb64b410eb64b410eb64b410eb64b410eb64b410eb64b410eb64b410eb64b410eb64b410eb64b410eb64b410eb64b410eb64b410eb64b410eb64b410eb64b410eb64b410eb64b410eb64b41000001000000007a20e1a414d5afc67952beb10c03c72cbb79dee657da08bb2f0d71f1bd166f20c44d410eb6000000524f410eb64f410eb64f410eb64f410eb64f410eb64f410eb64f410eb64f410eb64f410eb64f410eb64f410eb64f410eb64f410eb64f410eb64f410eb64f410eb64f410eb64f410eb64f410eb64f410eb64f410000007e0835bd389005f876925b320e1bd47dda017742fc271642788db62436511f673f51410eb60000005653410eb653410eb653410eb653410eb653410eb653410eb653410eb653410eb653410eb653410eb653410eb653410eb653410eb653410eb653410eb653410eb653410eb653410eb653410eb653410eb653410eb6534100000110000000821fee24cf2b8dca9d8a47f8c6b5632755b14387e8eddd3a5351dc4c437bcfadbb55410eb60000005a57410eb657410eb657410eb657410eb657410eb657410eb657410eb657410eb657410eb657410eb657410eb657410eb657410eb657410eb657410eb657410eb657410eb657410eb657410eb657410eb657410eb657410eb657410000008607423df2e5e3fc9ac9e479c8cd70787438dbe48d3aeac19cd2207ebcb67ff43659410eb60000005e5b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b410eb65b41000001200000008a1efaa589816bcec1c1d1408166ff21efe8a8297a01b1b9779646a6c9e1303ab25d410eb6000000625f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410eb65f410000008e064ebead3bc200bf016dc1837f0c730e7040861e4ebf40c1168ad9431be0812d61410eb60000006663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb663410eb6634100000130000000921e072643d749d2e5f95a883c189b1c8a200ccb0b1586389bdab101504690c7a965410eb60000006a67410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb667410eb6674100000096055b3f6791a004e338f7093e30a86da8a7a527af6293bfe55af533c981410e2469410eb60000006e6b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b410eb66b41000001400000009a1d13a6fe2d27d70a30e3cff6ca37172457716c9c295ab7c01f1b5bd6abf154a06d410eb6000000726f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410eb66f410000009e0467c021e77e0907708050f8e2446842df09c94076683f099f5f8e4fe6a19b1b71410eb60000007673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb673410eb6734100000150000000a21c2027b88305db2e686d17b17bd311be8ed60e2d3d2f36e46385b65d1151e19775410eb60000007a77410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb677410eb67741000000a6037440dc3d5c0d2ba80998b393e062dd166e6ad18a3cbe2de3c9e8d64c02281279410eb60000007e7b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b410eb67b4100000160000000aa1b2ca872d8e3df529ff65f6c2d6f0c58c63aafbe5103b608a7f010e376b26e8e7d410eb6000000827f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f410eb67f41000000ae0280c196933a114fdf92e06e457c5d774dd30c629e113d522834435cb162b50981410eb60000008683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb683410eb68341", - "txsEffectsHash": "0x006451393e911c9f94169c1b498798dcbc99da23e9357ecd3b9b74d28b2a7c57", + "archive": "0x22c896fa63b5449d976aad712cdcaffd47c3f8faaa3c7cac417c13fca61b8bba", + "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559000011000000021c000000b00dafad12427706eb0313fae6e7b265819373819d998df09f7b3f4478738eed1f0f7692387ced21d77f75ea7c880166b22a78c4b11da758bce639d58fd0a6f642dbd5163182dee1e0c184b5747e8f2b74a2cc880a4779c692a48ceb716895481c9b0be9a930cbdf1646b78161add7740d2cd39eebf014cf600301a2fc8df0eccf26c4679dd193d4c6dd54321d9027451f2493c8e9e8c47ee28bfc3acc52fe1e3e06ce3535a4c4707e52c5d632f76598a2000000b0168537e0a2a17648e3fd32efb526e9e736ae554c095451d624b296a6f118085ada096955b7c5b4f375ac5c3ca36718734031efea6dc3ae7827727237a389218a5876b740d15ffb656d6f30c3228021ccfb4408d081b315c413100717b67e0c9b462d09dd02d69bf74ca72fb478d04c4529606974cb2cc322dc7f5a178e927dbc821e69b0057eb78c76e971888b6fbe6d22c594374eae7b3f702b03ae131b2e0623414b80f210b820968e6206b288b0ae000000b02e44cf8a74e16b4f18ed700a399e60f9aeb2a98943f8f4bb4d2ea030c0972f38fbee902ddd6e35ad0d56ebbca9347da90c3a88ea2285bba3e09dfb1825e6cf3703efb7e4e080ad5a8bea5a3edef755b69ddaffa251a4dbf992b4751331bb0c4a117944eb911fcc32760325ccbd73d49101a38c3f9bae063d1ce9f2786d749b218062d619fd3bd215ac7587f1be9a914f100854eb063851e824ad262aaadb3543c222c3a8fa2ff9aa1c1d656dd8b06b160000021c000000b025157311f2ca4bf8d03fc8fea7c3989c76db7de8256c8e726cec1fdb4f85e77dddc54cdd9971bf2c09c2bf1e9d28938345949db24877bb4787c8ca3287c0fc4059195a4e5f7dac57a5fe6f5b18163b5776c42c04a8fa90fd8b2003323c50cb06072cb28bac2ad0f67a4b9de8a951fb410c52a6fa3e4f5ca85f9fcba647ae25d6ec6ab7ab3c053d553efa9103cd22f642115f7060b9000b3ccbf1dfc2d95f0c0e91d40a83899c4dae5897a780c756611c000000b00949f71c141a361a34b1468e7dc227e10e099bec3aebda0fb87a1871ede670b283f643009728d2bdc03cbdba5a92a6cd7f86334d2fc0bc75006bd5d2eb0def738272d0514756e09da910b3414efdd40c54bd60558229700839ee1dcee0c6dd65027ffc4db4c8b8f7ff6ec9c82ceca71f15a0dd0c637354037ba13f65e4771f998b0cac39a26ee58e1bd449324682cd6b11eb9652876f376ed7afcfcf52c8ea232a286ee690974ad15dc5dc731bd6b373000000b003de023555a8a9bce4418790b8959b1e723c07b9ea10b54e978b422288a2dedd21a5893194fb697dcc476d28cea58e2b41222eccfe918dc49140acd56e4b534abae90176fd791fc0af329e9ca4d4e49eafafeda9abca46f0fca6168c76d4e5f9e8d341034fdefea038f0270a017b3f9e27af9f27b7c59cb2584a7e3057c0c70ad8c3480a0d64056b7734b9f40168304f1eddf397a3b3b4f217d32034e19fbbaf6229b2698506b95a4adbe9d30ea457950000021c000000b01ea185c8b4f61adc8bf77335f463383504ce5265e1cd6ce1aa7b506bf0ccfefcf391a189d7e60bb0598eebde8218381e60da986d464f207b7415a640bf6a5a868446403c94d9e8d718268b21ccf0c8053a49567838a7c7aa124f45399670f64253d6f9d30d9839b219efd028c02354311df0b906c98cf119bdb3129e9fb802d69780252f8fe700afb95d92afc48254262824a69793904c31608ec23706e7b46566f4547e01d69844545662803f5a7a5e000000b00e1d4a857db3f17eca960f0ffb9627bf8e465ee413e5c3eb6a71c93acf3d16ec0162e4bfa14847c9f752a39f9ac4cc228244ac342912e7e2ef31a91b3a7cdc5ad9936f11d9cd0bb96e9b198913440c39bf2561b41f317ca40fee7ed292f6ae08dfe4e444ef61ce37e5911fc84e08c17c13ed86fb677f722d5abd29a1ec8cc35f01fdffe12cab35e6ba44023f0c7c408411ce79c7755a17ad5922e249337c0013f899139daada02f1f1b847e471cbfe1d000000b01274357d5695e56ca7c9334cb0c32639b022da66163c28bbf81f705f9f1e8b42419e15e94fcfe19afb27b6dcfd70893fd2feeb7e334085b3103511b8e30fef4d2f2433f6070cd54c3f4a18ff2ea2916ebd57a17534dd2ed21aa8954ef097aa0b739febb81daa89f637cf05915f960f8e030c29dcdf3ab856bc9856cd848d930fde9ea059037f49d5d01e01327c1e92152a3a69f6d5572a6d6f5ed8b17efa15d223e71a8bd9e4fdaa309e4a36bf06ab9c0000021c000000b01e8bfd40eedb35e52073d79d1b3722ffb5701e74a684d861f45753c9aa30a137fd27fd10235f1be72f58645a3d0e8da22c6b3ad0b4a506d4368e89522fe821b6ff6a2f62a4a7c3c7f0f7a4963d0bf2cafbaba53fd9e435bc3c1c31aaae9af11f631a9b7d65601d7970235ad7fd779fcb1517032b0b8668e8e87f66c05a57a5ce65c9cb7d15c17147b8b7b8837fe7095e3024928892520e855b73864cd101d5880788fc0bd378cb80614333b8caaba57b000000b00707bd9b6c444db757d1eb2c5085a696f90351d9ed05d431bbec0740abc93266bfd2fa8e60fdab877eac273a1cd4036203365a21b20262537f611abc51a0fe0519e3b054a1f9f753927d002314e1acff046827210800310b5629b06de86a5090be5d0fb74d2dbe6a525e2f02d64d47c617520b12f25c2272305f85ec157f009f40ac70743d31401e2ee491863835beae05a3468ef92b4f4abca9cedc9b27e7ce86e69f4b15776a57bae9af126823a93f000000b02478aa4da9b4fd1892a3905f3fae67d2b6a1f72c9fbc8c860009e6ba83905cd48863f197b3044f60652978b3f8c4be2bb4bcf1cc3848f4f4dcc720e94f7cbf97733f7fff7e5eb88cd060d7644dab86bf7a26e265844374376235e8387ea32719e4c555ce3fff44fc34edc5085abd00bb1c0bfd9d999d65ee86441b303e7acfddd6065a6d839b52489e8025bb31aa51432b7585c98c890be888025f4b61853638dc7950fa4e7f43168be0514747e45f440000021c000000b0134c701e87debab1281a11d8da533e5feaf86cc3266cb6f3716faeefc893038a71f3dab0be654a8bae430e5a8f0ccc2a53169547794e7f9e43b10b1403387485c32abbda8e4d26a46907a24247544cf9b20fef8f4fdbc74eddaf12d80f548672f76904e3e8f2b596d495ed97e61fd457053293f0cd6c4f1b3fef33bf6ff788e6c86b8cea6404d4594ccfd67e8007582f2c37a98da6bac2cda712b3257a6aad476ecd4e5f9e5ebcb4e26300952ff80d49000000b0185b4cf03e75ee763ca4e03885d16e2900fe33a96d3c845fa5b4a4ebadd89fb8bc7cacacdc4ce6179a5cc4b723201437aaeca9cc074b561708a3ab8326ed0ecb8f668c32396bce71583a70407a3d9b37e94a31cd80162d710e60c77e706732faf58c8a72ea560ef19e6e5a85534909ce051e9504117e3c5ca0d3c17dceab7ece3272c41414be81ed1d9dee5433fbd9d11bf3cd039ab8a2882499622f3d1693698dbe1a4c42140207069413cb331180a1000000b0301d0d1df575629346acf634b58c9878fa09daa1fe54e54e2eb2384dac9c48bd3d761e24661001da2f29ac6379fb64a7299f102db83dda9413a87f99c8c7fbd49901c0ed9f6ca9bb58bbf079f10da16fe66df0d87b67b1ab6733fb6e7807a185c8bd99040ecf818af5a23f1ac6ccd1aa2c659272277365e506d13c17cde6ce4711bbe0254f39674d6e6b7dbd69f4919227548b48fa6a8aaa6f5cbf85d4c9ca7aa8a1882ba182d85704c9ea9ee624cb6f0000021c000000b00c90b0011d14de925d2023c1b6631dc205ec8c40bd482f8b426ee1b46fba0b56817d22bbba3f151eb77d7568cbca91500bfb9c9a5151a42e40c00fd51ddbff5849174ce81e1a2da93eac99ffcaa28d0bf3acb9f22bceedfa5ff8260f3194e9c019957f637cd12b3a88688e780f30f8a90a60bed775a136ac90e60b4f4004f8af985741ae2bc76b6ea989982116d729202006af953e895b9e7eaf36913f5db29a4ec97e6c9d7dcc098dc9490cf756a5c4000000b0294552f578d8afd5b2e31471846bd85c058910c4033673e8dcd1e1618c67d56960f92f47b5818912c0fcb0bf1b4aa91d26ee4d9163312a745144ec727d25ffb7fd25e82410f3efa7c753cb7658be39ad1834c47f158d9181eaf5f9dc603be5ae2ebc830425eb0ce8d737eb82f3660dfb07771ff13e03682ee4e6423201ceadaded72c3b4ad987eab794932e14869717914b62f902cc0efae1f5d97e5beeedb08232d6c2822145352d0593d239103d749000000b00faa7d52984b8f3f237a9e8b051d00119825528dddb06fbed9d6b054d1e032ef3b8279b8a96635f6f0f6d50af5dcec4222f0dc59157defb26cb2f3dc82a43612f9312881ac0de9c0c26a1e63559780b5033b30e3f440d1db0989712fae42126171da6b31ce5c6d8255fdf3da9f7b1fed2938bfe61fa7ac63dc79067efdc68fc6341dcc5233d4d9b38ae78ba38a16827108a363200e9f4b220afd504ab2677f0b227569fa91aa607a159929c326bc9ed20000021c000000b0148ae302c2e74e276ca3ad907b615bb603adab618f0cd92ffa95d3a57c4158fd43f3287d95a58f220ed89baf1f6f49ef6aa26b50767d3ccfd6d25c32608261c5725b101ab09bbcabe594058d770d9c7885fc8d20e75e8d430879ead5765e6a1a456dd6a01b9e0934ad953ea66a553a0020df80dff21fa71af2e3d2b85baeeb760232d93241cf8745043c306d65d432d11314642566336e4a2cd053bb4c14c8b27547f2e0efe9d2cff48dd27bf5e31f11000000b014954b0d768b1d1d2016b92418dbba4c6015c606164aad25ab5eeac12aaef60eafcb3d5e4e4082c12bf54be91e6f54d32e0c9f48ce1d6280ddab37f6346fe4d3025a753bff51362c82b393216722aa364f92dd620cade88101a7e4242f922b6e5249ca78a007c7f9e86daf2fb1579eb1038be3fb400bbec3a7ce52f6cf57323110bd10ffb9dc6c7aeb329fdca5f72d8d1968034fd1ae7afc5181a2643f57ed273a8bb47a3330d77d728d1e1a24a8c04c000000b0251250706b9342ecdcd916e23681404156fa35bafd1a7225edca90c29b3d9b8aefd6a87f21869b6f04bde81f3ae2049d4054eb900558af87a3933864fecb0387d5642a33e610be994bb8021afc5d625a4878e2526fe5df8c24145f5c8a12c3c1177d4e3f720fd11dc5ccdd5e5d972c3c198b2873cf8b61ddc9ac86258cd99446414c9831327aedf626e87e5e24a01ed82412d4915e89df9f114c27241ec0631ca8ff9d595c4691c53dbf8a125180a77d0000021c000000b01f52d944eabad806c9163adffea1ddf0164e0859f5fcc29b2c8d9699d3f61442299ac6a95e0e007c63a10059d97b996af5270bfb98519bec31e10fa5e70e8f95b33ad3f6b7c0dc482e2a4db59db70e1875e4c0a7abf02aa114429387af672cfe3db202fa051c924661040884952a49431844bbd3977e0ea660cec4836288ee91ffe0858fc608598242a0d92df6b9fc5001e2bbdba748c27e3681d43ca6949228cf5e91e5d1952e2fb508fb224d281c26000000b01a9be8a85c8829b1c42d4a3206e9e2c6084d554293461955f40d7ec9e80ab7bde4e6f1bc10e3be2b7d8dccdd93cd2717a7a710df789479b73308bb0d886cc1e59d83e0e4a5d1d16926b3fa3cedbf4f3f96b35f59f4a4efb3ccc12e8173b46be8182c7103d97e305c8f80b4ef5b1b9ef6188006ddda56165fce7fd83b448ef278f390f221bbc10b2e2a99408e41688dbb2c435c1b820c9c9b59204eb8258c6f8a49714093ea653ba84716e49685c9bebc000000b02e30440abefa4ff0d60facc4607f497819259fa610ae3a33e355a767987265f6d2b48989e32a0acec68bb804051e6adc116c096ae067f36db54cd89196f0aca010e4e950215291a2e17a8de2db176a8f62d32fdc78ebd09562e9eae3c26ca4dcacd0daa29b9e3bebe4027e655a16649101096ac7c6689be027a67a9e428e69f3c9b1fa23151d2784a39cab20c5f1646501eea224137759ffa68b0fc6c71b8b4da289c7c43a1eaef1bbad267360532ccb000010ca00000101000000970adfab15e1351c3c4f03212dbef0099edfd54532e28bf7c10b5209c39ad7c07d687d15fe0000006f9a9249212137c00feec154fc497768ba2109cb823a807d588a60d51866ff6200d477a3908a969a1552e8415c7fe45105ac11fe3fab5d2383a701bf1b5c791ed86cadae051f625ce8ca9c61c32b7fa6718c4654d9797319e6444164c5d57b76815ef01dbb5dd70ae7dff978831d7046000000621cb8225652c5cf2f7efc581fc760d78dbdb59e9e50ec54731a08234d1d34ef652349c73c0000003a371ca2b6df2733ab88dc26d7d4d5bc6725c0e05b530c69b703a2d9f744a4b83a70d4951e2405d06c8f5dacb416ce5e4e3d030b91d40b5fe7b07b00000223000001102c39f028f65ce935309a3a73c5be5ef5e5c20278d912153b8d02ae9c2e33fbb4db40b021000000e84050137c5ec742b5122eb53a790c91102d93906e7b666c0f309c9f182f20d10b36938a742f88916d5612973bf2a6f5ec7b6a79d2354d78c9e1231b3d28e9599035df80a5c9cd390ffe58d0f9b3e2ea835b8130c171b78117cc03f4b7ba8621813b13400bbdf935bb38008e79b79543b9bea72d8898107f707ffd8968201ef986f94b1c7f292400c64a6c53d904d98316c1827c902ccb86d54e8b7b1617d45d1467786f064f684832e4dacd28d8f2f16d650760fe063e84f34ddd23ea1a6808b768e1b65ab511b85fb1cfa23e929730013ae85ea42d8c171210425e97f50b48a486dcc71e6a05e59e0000010b1b6723e2418e0645919caddd3aac3963728a2bf575a6e96a5cddb1cdca6b8113ce57b73e000000e35fbf28b1567d4cba8d27aa24a73e8402392dd895baf4cf77eafcb958de78e89c87baf8a8a9d69842595a92af014c451503d1113e8e77ee6415cfa310553d4d28075b4eae506c4a4a0b3d11d0e497c52db18b50c487c11a3ec73c5e82aca3b1daa921fba970c70600da4cfd7d0faad4e949fd72922d4a0f0ebdceba8ddf585e10ae11e4757b30363865390ee4a9cb6a50ffbeec893a383cf7d22253c7257215e14ca8649964f4d273f1bad8eab2f2893e7d615e805b70d12f46af18332faa1ba215cd3025859b4b92a3688ed5060d5cd7085eb11b4d4b84d68970a729cd0f3c24916b02000001cc0000010d144c5269fb0ef4c7b46922ee868d9ac2ebf7830d2c9ae0653b40bf122b555d974e645c97000000e5eee591d9ea17e2c70e9c4b19db4b6ced5a8b87f5134fc09dddce8fe035f81d7c8447e4fcbf33938badedc54d7a0d8499fdb45b52858776e16b6c3111dc9226a605db9abba9000741e1b6acfe28d1dd997179f7af0e9605688a1f418792b05cf4b6d03fcbde95c83f141dea2d244429a8ec2382b999adf23c29059a9afc24992e11daf3881c30d5c2f11d95f4c8d1905641f7ec5f9565f518a9e9f74455febdf18f414c137e6366d2581aa14018c15c0a6b15d8a855c4ab6606fa27ee0e983e85ba27fa99260d1bdf49b54362c3e6b2b8a325a2287a027c26d36e044cac0402a38f34f99a35000000b70b0ef475e9464427a459015384075e95fcee5cee90e8db465386e451acc596e71c9fd9db0000008f0839f69b6320788d9677b255b7c1166810b10812d095f0f1e6a95de72f838942cf60984b7342ddfcf70fb3de14929b547c7e95a571693e4ee560c97f1c4f08b7a3cba89b6c8a44101c1f744ea17d3d630db73c7aa3d1145bd8f6cf8e4ceab5706719a91ab0d9f65a055e9e54e26ee732993064327c3a2cbcb0d71a814265c234ab946da895c32baf0306c315dddfe7000001560000005319983de37ce82185a90226c622f27fdfecc5596a679c4e5112415a0cfc2e59a6f48e9e930000002b9a5dcf8176531cad91cc429aefb6beb94a4c1acf37118f9c4aca24a2e9520efd1fd5f36d66e656bd9b687c000000fb2b9aa02e122da79243c68be3d5e9b7b98522be9ddd2b9970a5ac00bc260bd0261795c87c000000d392e5abd3d5d71c8f9ea023fd721e3b98d2148b64cf86790d29ef1981fe717308ae9e5c9439b8a756b54219613a1df3645c96ed767a6d5958c35ccdfc515841e5c5f06f15d94d7b05157eaca07e7d7d024be9740ad7816ab562a46bf0ecae38f16f0e61431eb42eab6eb84aa45029627e0253c23a53020c5087b1a69c2c7086b905cc72f869482068ec36bdca388064405a334513a62b1cb0f471be9d4d776b07bc8bad56dcd700a7a4dad10844756a604098fa289a1b702c4ed31ea4768748735ccc7e69208d6a991c1a99604870e927f5a330000001990000007400d5a69e6532449a3035a2810756ef3a31ebbe15a08ea37de497aab6284020211d8ccedb0000004c1f4e09ea73fa7d927a0b64aaf375f894c3e8629c7a0f086ed18d5435172b17810670b47d6b24e71ba2ad5cb17a6ba5386b8d138ee6cb514b9dd51985e5c5025614914856f07f3f4e8b39a1ee0000011d2eea117ef6b5722dec398a4345e39c4d6abc2ccedc53c555ed760bfba772dd51454c2f1b000000f5bf3506a5c8e69cf8b4f912d88e5f47daee30070303eb5186e4ffa3265a983475e60aae61dd777adfdcca7d26db24056a96588edc1a0078fd6aa3de31c62db0dc072905671fe8114f934649f6f0419866445dc5ae16761eae93af132b8af45f3eb323c1988d08ac8031b8eb6a4f9b366f1c8c07b5671d3225018573270467f108833d1f46503e204f9365ad4b13ec2139c9286ace77e65b9653169ba7e8205d0d23fb5ba1532a042c3e3c54619e9f6d907045096877d87b2056f26e4b85f492115c75beb8d3d68e10c517ba8dce07852ba295692bc8e22cf62ccd44a7e60a77f6a37e05f0495666ae37367210398019375db9c5fe09000000f70000009e112140526fdefd85cd33797159a3dc2458d57a82587e59d0c3750ebb716d149515d6e87b00000076d73b25854cbabfd14782f890243cfd01c1fa89227a43170991b4d242cb31de1e29a1fe045132410ef178d90d2baefb8ff5ba3b40757c2c8d5d9614430dbaa2de78989f548e584c0f032d285a4242ff5b1a1fdca9420f0ff871c17a3d33911094bbe8f00d649aa1a405674e9666f02072b225180145b80000005117e79ba39bf4934babbbd49747f48a7568ddbddb7538d4d2c8793b45b157013bb040d50100000029b4a91b4606308d7ad7af54af49f993dbcc10a61b04d250ddf12d998f1a1a12c9110bb201a8db129afd000001fe000000d72e517f730f2cab31c9a15a79481237565f743ac8bd62ddf55394bec648a59470f60f66ee000000afa7b1063d3cec3397df911740e5f5efed29c63f65c9b9e8bded64bfb7b5af7554ef85b9cfc18d02b53becb8ece13e674d99bc3e273587f601a39f19cd1ed0fcd36bfc159da36b30721d437f82cb522f60e47746edba0e2d55eaa59688e09c9ba060e45d7c60c03933159cd58df95797ab6f73bed205b0423ada59eb80a6748e9c875c0642a4d902f1a681e77d43b2db3ef8ada278301619f3b2a1e213e90973f67ab178fc954ea8fc7b3713be5cec740000011f0c3c8c49104f1debac9290e7543891b584a2407785f9a8283aac78525c7341b93d972aef000000f7cdde06f098f5ea2e3606a4eb6bd366b068539fd9eb156c42cfe7b19adecf03a1fd5b39b27a360be90c1046c460d0667ae375f9454a03065c606cbec5a8e5d18811b2cba7685e3bd331f6e9871fdccd28a4a6d09a120a316f0ac9b43c7b9439be11330a3ab8565b6ec958c5732b625978d046a2e38906ba928583848e58b94373d4ed12af9cf758adbe658c5723521494d11ad12bee2d784617ac02cc5ad205d1863ed443e069153c6aace612232468a616b55e81bd58aef332980a334a2010bc5e79deb0565021ea0c5c4d26bfb1ec04e8ae955c3e3f2b7a1c6ef19fb30033d5dcbcc40b7a700c99051b0701028ecf2b52d67bec1b415a000001b9000000d00207f0e1e04740a87df44deaae09e017d6413ba42ce738c3907e399143bed977c903d90b000000a8d51c8d9f49532d794849865b8b9d550ad83c605f9d82cd396c636ae5e811dbafbf9c379e670e0cbccc127b29c0db7af763256e00dd0cf8e1f11f48738a093dd317cd6aea73c1616eced60f95893883bffbffced35d0566887360f65bdf9948bdf6573f9d01b8fab821164da637b176f4806339dba08f48161febe071a8d12827fced6674665de59d04116d75d838adf2c43922d388d4ed377981babd6c6729e71bae24edbe93d125000000e112892a56bf01f0b5784af68fdab6de157b86e25cb4b25833ae0519d7f576d7177807b88a000000b9654faef9e3998e6724b266fb4b523808f48582d32793dab7a4938c52a1aad582ee51138c4a6f70fe6a565c4d80dd27afa62d21f1e8c497fa9bc0d05f97fcf120d561b314014fe00a25555315831c0366317726b209f310f7b2675e00ae31cf2f5d48bae289d37bf354b5627b21efe33e07fad34e770bd7d3d23aa41fbcb506441c072217e52c3ad4ae19bafd371538762fb1272169882f3c4ef459045eb5c9592d3fd666103ca525008bc60799c3c6a4f0c07585365f59f2260000014f000000a6075b0f0e9823d4e18c3a13da06afc72726500e9bf8c4befe00a34d03a1abf5747ed4ccb30000007ee113952ad2dda890492df8a84835b5b503806713f80fc9e3968900b6bcad9eafab2fbb38e39748a74b8a2c9516d8e57df40d63e0ff0cd97135863e4e430ab173f08c9d32d8abadf5d265c99f23afce765cc91afaa77e4f89aad5627cd927609b8ce16873507c8255784dac60af0c78b894febba7cc98b1695c14ec95c8c9000000a11e243957ca516862c10e9e734af4ca3265ff5081be244228afcbf8d64aa09c1ebd634c5200000079a08291a51448728a9474936d7d21a3ce37fd411adb18397778fc42ab097a3a7d6f2627719fc17a5181b78b4e9e2454b04888863808196c730e9d2f9034ed9e4efd1d36b03a68021ef61b2d0ba2cceca59fa2444a914cbab1a15f4e7e25430e98be30f4bdb0f3f0c3d5c0078b3ba9f521f8565a943d10713f470000010700000066182b73ed73b210742c2b56dff556a683bab8c80d3d5e007093f7be448697c240153bfa3e0000003ee46b54715b437b9d14e5a2bd86f26c43f974679f62ca5778bf7366725c1107a94a53bab7fad822a24b5fea33167272cbc1ba156f8cdfd56beffbbafae326000000991152b763d17f98e7034f1ea18e8fbe15ab489d2ced4cd77c05b6587d9028f2652575b30a000000714d6485cf26d6991053ace4ff43eca32a73b03c62d1381794c6078516482318a350121a6c27f61a6e7450f7857a9442383ad48443fec4084b0a3558e8abdba0b536c9866f391f616040eb2f172c6cced156275d17071473ae2ae847f62d3a8f31b0c3a6a59a8b489ad8ab82ca88400cf404000001bb000001082d6635eba34e6f2ddc1a34d8f0ad925e0529fb09f3e83421edd5d320ee63d6984333e798000000e0c8dfe6a33623d62731a2d7181a8457acf7c060efc6452b188bc40f120a8b1d52f4344df142b03a0e0a24ae6f56a309549f89f08d64e9b9e30ea80a8e3d3e64c2b7a420619db004f07b100afff033bd7f32d24a7fae61de2ce2418a9197a8004d768b36cb642176a5bcf7b78f19be0fe5d0acb6c2379e452c370366c9768f672f6bfc0332fa8e2e4d641a9492c5b519d555c4b8099e6810b29af0af2d1ce4140dd8c4a33aabe2daa3c70d31f6df173f318bbe88013dc05ddcb849add2d633defa4f5b718c44ee0ab9d9c41fdcabe6073bc63b63c25331fc8e70d727ed64f499c0000000ab2a6d16a416cc3531921ebd3ac6ef85d724b654fac91b42f5ac900f333880b83e4442249b00000083eec527e4fb7bb2697fadfb811a1174e98e40682194463e6c2547dbe8fa68f003289ec602836ddce84c5e3d0277fff67412823a3f308e0c71b3ba7b4b8de417a0f6a91a262db3dd220a7ec2a2d8eb46e2b7d0994f2a52299785c6622c3b84f351f0ec8460e613f42e05b22ca83fb081af08fd400ee2329e9cc91a76f01a6c0ba999cc6200380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f0000000000000000000000000000000000000000000000000000000000000599000011000000021c000000b01a4e106c20dcdf9e7be80e31f6a06cb840820563c2e2e96b32edb5ff758155f0cc065053d55ce3348e2e90ab57acf029057c019d438bf1b311862957043af3c540123dcc4a412cefff73104553232e7367e164451cc1b61300f0127ba81938bd49192984103c87c2697708cfc52e3c082d733b381cf63662013227053a5636f30948cc709f003041bce9ce4bf09b0ea229ac5e42e6072f38f0baf656b13a321fea5eb1e9eee24cb8263b86728267df8a000000b01525a6403149462324d81dc371c238d3a3ada742677ccdc996e86721223c80aa44842d77a98ba3ecf8e3d257d7f34bfe464ccc8709639c75277e683068e1d966dd788e9384897d4ae386182913edf1e83f89c307dc5e9275f59d5f145c8ce92f52ec8bccde5c0ef22e437dec7f4d4be82a022e24d99948ec674196b113c46a770539dc39be7ca520d4ae5f9206cd01291041383ce335d1dc9ac22afba9fdf87468ce909913d9261c06e60d158608b3c6000000b02eb6198e2f9f6364963a2920d65b409fea4647874ee569135c6b760aa6264e70dc588a649cbfb6d88b494e098c63c643b9b4bd867561860e81b5acaf01a9bafe59a77188e87463a5a40114aa4f5c1f34de75da4dc6075e35e7834e4c9d25989918fd9eec278903d78c87b7951f6bee7e12c2f3cf477d8427e0dd42829d574426e5805721e1463187ae0123048a7da7c90dc31e8437077b458ac5ee7f78f5dfbfc173322094a11b4327982463b563ab960000021c000000b0036d56cbb42dc7cb7bed5d69d134ce22fde9b0e5f269b23778c2e4eb01510c9e9cb2ee5f0dd06fdcdc22959fd65d57a788e5c7bc62f822511799f87b0f0ab56c1ad17db4143b7b3553d719a8a9d93e96a79484ffd5269b61c938377ade568ab0f66d9dd2c432d0114c95cc000a41c04028080542c56393d8fa680959973e4efcf8da91d70cc1f4b6a4a047238ecb7bcd1fd364b2cb5f7644dd3ccbd65c74f5231c4221993f9a5c6f53574f73493810af000000b00347108b524ec122de555b3d9cb83096f8d550c3512fefec5c1b06c84017e884704afd1b671fe73ef01a5c11f570d3ba2fe1a2a5b624af0cdf48dbbe3d170957b2eb4d5fbb8b1e33295e4b4ccb758d62fea46780293f7d88069570a4f2e3f94a514c0117400feb830af635d4c2c3d96b24ceefc1dcda3947c1e0c3a48f593383b8907ce1da5391c6b1d92d3ddc59c46313a07884d13319d7138974b9d7d15df9cd5e66344b71d38d8547ddcbee0c5fb4000000b016e464363ed61b231a92c792c442cd728d9d7db9b2903cff8e5fab10a58a3629ace443af99dc8ad130226190a562bee487c9f80c6a0f79568d815665d54aa3d018ab6b842676badc776e44c777a4879c123b1985c0b397e4a197bc0b7c1ebc87051ae5aef9c4b500bb725b48102b4899032fb9ebd40201e5439a0aef5115a21b8f63b18d12bcc68d0c81975dd4507eae07aee81d04bcd19f2defbe9301d9c3b8d294e61093b7b161a61cb14b5152c9200000021c000000b00c905ddca49a5d1898525fc50a4b5c288f3e516f32fdce9f0f0eb10b2de9004a753cdb3602c699f74c365d9aae5fc261b56e355ac8d4739a988050a4e4fb2b22d4ca0e3dda9a04d819f70b4a160ef3b5be94c6c432d6770c6a78b7444dc2e70e37863be3c85ba3644f6d87528b123be70f23783447d3400cd7bbeb4c3317968807a1788468e426cfaaede565d3a0c73c24798f28a1defab1e08a3a63f57c5748634aa65f77feccd7ec80edc152ec5331000000b0066cfc5c826cc12334f7538844b9d7235d06d196f6446078acd7e3a0de13174227fa4ea4a84c7ed7f513c16f456142cfedd201ed9288527a6d2b58a115718138f7039aac682132a7ef2add40ab6979e82db8cc814f395821ffb2a8d9e6d1600cae54dcbcf846c4b3a75372103e80ca8d0c0a14b3a3a0f136c39a8b41149660a354fa603c66e3d5d5181a8be6329735b92fef194458217d2ce239ceeef970fddf06b4038515f8a3429855ce9b98427544000000b003c1e55c135af814976aec90e4501eb094fd2f7f64d84018bb987f942e8df73df4b67bdbd1f0ef9bd8327eea289387d6dcff5d1edda46aa3088b59359258ca598b635948167c3c1f614800f3239294e3361c4b68290efa58b9ebc5b20fa05cfe5bd776ea088bfb31d55516aed11b73cd01877a4273a084fef4c1ee8e1391b9dc4d2c9e3f2a1297a61ad7ce0ebf49b3902132ce911c54b1d98f0315a12154585b479eab93e0b21909bb06c3bf438328d70000021c000000b02245ac3434d60805d2c124eebb1563e01be91f5bd38f2d7ac8f096f2d6260fe9cf9db4b50a585fbabdca412e0e5d2e5342702a36f6a1c602d1b9055983bf91f8860c201515c132f72f69b30923f8c3c1e463d38a93cd91ec61e291bbe21a69f740e5e9c32871b33f1d3e9a07802b557e0bcf4c38a8618459e9f332f6cf110be884c7151095e4c4bc9d8380907308dcd61863fdfb24d6a1c51a161318d0779ebde68ba44ee9f7e1c5692bfb81ef29f177000000b01e7bfc50619d5b93dbe0d34f34127314a174f31e6776399d7c2c0b0b42cbdf17b218e01e037791b84dbcd082185d2f995299b2614e7d2586b807d31f855fb483b850b9063e4f55701b91511490fa1d865c3e6b1d5a4edf46b01d69919e30ba9d3fdb10afffa90ee5c68f2938615c78721965ff0c9142f78ab7a35b397ed48deebdd3de348079dc317c34a032b4ee596008fc97808d42fab50bf7cc36923c0dbef8ffac51e9e833e6c9279a1645453b5d000000b00f29bc69c040b634d9c8409ae75e125b245cb8c0c24f964fcafb8539f7045d43bacfbb1ec6bc619f9950d3be0796b60765cb6aecf5996f178cac38828593088ef36a1a7b66ab1d71a8e8cb4daf2136a4cc1d9bc0d6ac10b5275694d3a003e041d7636081f39c8656187810ed4121cf640e4d1ffbdc9934ab3a3aaf4e20e50abf7e3cc257a5b46fff1d8077336718d9e72d9ff19d7584d16a68963ce3ad34a33ddf46223f96e7a3c67dd870aaba64c8de0000021c000000b021761fd269aec019753f2cfe04e0349cffa5e1b9dc424355cd22fd1f000213b405de7fc0492b27fa20edc20b3414b6d2785db02df469e36376ac52f7a8c9288636937b62af684123fada4969e7d829517fbbc4a3756c0d2dd98bdaf90cff80ed42a2ed038f6495485be8c0e18d8c1212073a93360af9a2ca61463ab267210572e7946c380d83a0fcce7544c87d23427f000187838abeb8ede485a4115dcb49068602804a780d5ceda1b8b3f911a9aef3000000b0193ec5e24102c921670aa7c2e01af954c57692d716a33491a90579b07ad22a3cd1b981caaef8a44d90d4be7273899a77a2f09e6250c00e1c087c14626bba507ed1d94e0c727f621c9acf6a4e00b43a8d77050a27c46f13782c88c61718b6b40b3a40ecbdd888856b5a6fcc5df8a492c213622c1c4fc749e1104cc20afaee1427cb4e2c485584915248a7211b082c377f00c7a030af527f148ce33baa9dbbc2cb47604c9fe9cf6c646ad941cdd9aedad0000000b0235c203cbd062ee70a74f84d488bdce61a553a159819ef1e1dae6bab395bda3754c64bf48eb325190908ba86e2f07c8e594400446e2a4b2c0206f6b6adcb935a892a1aa1416212f8fbbaa5bf276331b9026a3fd360e59b182873d67a5fd8b97d197ab56571761834dc00076cdf8b884a0a25fcc96b2acd2c25d575b3948e109ebca0230409230077a7a4b2389f82d1fc1ef2c55d6e13be9fea5b9fd749b06edee04df721c094840b637ea39ecea5c91d0000021c000000b01720d6c84bd67728a29dc171d1c45bcaf80637d6badd8965ef4af7c47c3cab0760c20138b33fa0612de03006c089501b5a295b0253db28a6bc180417181e2f4114546e1a858d55497892bd9218e89c63236b04f7cfb33d25b67dc13aa5e10c92e397e2dc7fdb6af2fd17b36b3923a17e1f8bc5b200b0f152c4fc3639cc6c4f7fe9a5a4d9079c5f263314a44d3c8cf749162199839f5d6c625d7fbd1f5763a1170add1c71e92e525b22803d15559e9ee8000000b000c85e72c9965907c4471cfff706e0c63470c042675c3a80272205f04c18ed33ec283f77381c539f96229fad5c2db2a4fb14c1781c15130d2bd28c4513b2174d8bc295306c83b024f78f6b59dcb7e6f37b5143ded87d1f17ef421475b5e3931ac26649a6c71f4119872ddbec80f5992818c97d06909eccc4b343093486c9fd6d1ab7eafa039a4739614fa5558ccff30a0bac292255bfe8b6578d644fcd424b6ce5c995f6614d525594a4a8869fd84535000000b0259b8f5248b604d51248c3a5ed211d7abc1eb366894be820b93e6d7d296fc01b2f798d8e6ed2509746819f6d27a25f0a9c99ce90e6c97f244f998beda4ad8b455e0895adeec0093ce2f5b647f708215679cc73862852edbd50ea413733fd6ec14b1f387916fa5e5594c5161681c3c3f40631e533e954edeb3e0dc9c0f73fe617fd1673150f759fda82e93c74ff2316c926bcb2da0284a2d9429e3eab70f89affaf107506c8371ba99feafb837f2598c30000021c000000b00b292c4c6b1dabd6ea0dc7ae4d5e07d196ad8aec3bd54f72d246a26d61adf5966d7008af9542169c5151aba34b3f024dfaacc1fc9fcb2f880fab457e754e8750ff8bd3ebbe622b436680433a2b608195e308f0a514972b6b518f786a71f3a7d2e5e6af3c3a6f25921136e6d5dfc528c62b0a1b4cc38b9bcd3c34bd64d9c1d0806e18a36792e29be2eb81c030e17ca892122c28c64abcb35b578dccc9cddd0a89cb048054c20526a868971f3923a86e9d000000b011213f6680e37987f5626970c9f2e46fb5cf60cbb5e565b11404778c42d6913d88a238bc266517e78ce0d80f849b023b39227f8df3ff853deb60d93a1ceee030b24c71434ddaf2af49c7545faeea2d90423d49c3ff96a272674f095979735e397a4079d40b7b8e076e0badd4e844aa8301042fd57444c513e6de67de8a7778da9de1995d0d5ceb1e4d3a82a604b54ee0016c884a03e2c3ab8837f652bf913ff80669e4a4bffc19b72aa27cb3c791efb8000000b02f057ea6b23e9b2029c9e4e3c603675c3ce77ecd121a6ae5bd8ffb84c26e35c8c03f3394e766c47177e25c403b85725324b0932e9640cd933bd45a02037bee47598eb1dcdcaef71ab8069fa149fbba2467b6f856e8b3f10bdbda59e351f0a0eaab8618bdda10a185b76851b0051a88c60bc5685aad838920f5dcd3010065ce5dd455bfc5cd93882e59749f77859906c50b133ab6a1fab78caa75788daaf564e34c4e3eda72a73eab9e6e480e4331b5760000021c000000b00124bd36c5737910ed1c04ef364dd04abf55928283aeb49fd2ca949acd3829ecf0631ae6f67e70be4b44d18339400746c88973437d5499ccf39a323d5cf3827c7aa02279d2efee6ce9f361fde6cbc9dd1f1c1592f8c2b011b84b6cd8835b60d4e74d9d944d3bcf46a86614f9423b80910cda017b2870d1415079f08f4fc7df5f6a91a2dd0fd57dee426942695de729f00aae5a117282f8c2022467b30b0a42f32b847556b056d6d1cb42bb5a368178d6000000b01b2e9ac1bfa72cc5a73fff7918e60a7ace5fe60704a5328422b6680c90f29f3531d4cb9eed5f3f6d7583b65a99f6e8c0180d42715198a8a923fec67200ea6c68d08683b39c0668aa52e02f906b5a5eb109a06b976cbc973e69ab7f94eeaa0d9b7d029a997e5e076c9367159ce19dc087127a12fe09fd7d46325814690bcd73dea3cd91576c42f036c5e94689961dfe8f1c86537c68beeffea63ea99035bfcbe0178742ae25b9920be28261b57d45cc38000000b0280f05ee734f32a4fc27725d2d21427c7368f6a06d74a69b37654d3eaad15388a7e5ea6c7c260683915e9124a2ae0b8a113f4a455de174753a1e5f9ddbf5c101e56b7c473c1024bcfd6195007b8d04e934bc0cec5a26713f391cb5c0e79bd761f52feae039a06bd2d1b1da4d35504eed2e2bd0142182aa80ac03415ab1bbe5ede5e2f7daf2c421197e579fa0661d309f06611dbabb30f698e8aea45668cb2fa9a4547e3326e8c417cf97ef2c4a6944f900000d00000000f8000000810fdec28f2db5666669b4f5cfe2c9e7ec31aad1f5a28bf855f7a4f388ad390bb899f2de88000000598de83aa06171c2206e6a305847c719822d278c349c1e2d0b2f8ee0a915675ea5daade32e525466c5aa07fc415bee151c3187bc64477d4245da515834521299f93954c2408f7fcf49d28eb26870e21e957479927e1578bac7660000006f14285f09974f57ff4eb1ed44b569484b34075ce692cd0d04995fd9e04bf0feecafed2518000000478484b339492c838fae29cc3c7abd07cf39c61f672732d6eb43cfa2bb2996ffd9829bec0cbacadfcc40d3af132c444a95c87911929f51c03808424e762ca1b07870d8a3376a3737000000c10000004910f36d463293b671fe078ef010833c5a878c18024fdc8e8f6c079123549d79e02b1e7214000000216b6031c3c6b2f529170ba86b29aec1cac15a1ce21107dbad9251454d8da76d54410000007024fee44da96c0f3bdf498915dcc3657b59a37b5e59f47d73e5e71c3703d2a1ae48bc456e0000004899858ac3baf0ea53778b05441a68fe107c02a5f9107db4d504a43c4f96a4325885d63261730cd659330e601c02ca5199829b42d2e68691d26f6c3d8c47100f0cb2ce7371e24ad810000000c7000000452caa1b41cf9fa5eed15e952b2e2029c561b47a189ee4f8a05bab38057ab6e39e43a1ec520000001d82e36cb1af35719e27dd45686750ab55f91a08b5c5cc5f61203ae78d6f0000007a2de558830b5e791d5b6b0081b03d0e2f79895d077065000680f6b950a95d9d1b9ca5a7ee000000523a8c518d430b9c9d158377335e2c62bb5a4eb579a5aebb8d379dafb9f0bbbf58b1538b9fc88c6d182a40089e91807582d32b0ce55565948a10c1284f4eb64b3e856eab3cb4c889c530b2f88ccdbb6ee68e960000010e000000b21e77d2f4318e66bc92564f54620217766570441c65700ac3c1a2b687e7bac347f041c55f0000008a54b10ff56f1ea21f19c5e955f0448172776fb683e82886d67352d2b6876dd4f5f7c143689d3ea76159576302bf7efed0dd6ffba6fff86049e03d85be236e0af89dcf6edc5a4c999444a2518662760691b7c0220aea5be3f165a9ef4896a0104694d1b6d9c6116c0ccd3e4279b34c40d9e64e62890cce7de41b2051c1d64a5c2833de353471581b30a560000000540880346e979ba28e94db26d8052289a690ec63c583edde8703e1731197eaf1bab4d9df660000002c191047cd0c2fde702f31a1ac96bcab45fb62444248ec31edead5741f6f5717a06d9afbf864f003f7b2f9aa800000018f000000fb0dd48d7fb6ddb43e7fa216220f141baf584a0f4d0193eddf3b2d3c85fd86bbf193bd53bc000000d3b03ea9e23bb69a50859da87e3189f51a47171ca2832a88effc9d45d7933b7365d5b7e54daea46abc1127db5768453575040c6d8e091a2009a547e430f0ebbf739048b3fc1e417c4ee531dde90470b3ea0ba5fafc1c880889bf33908424176605c3610ca1d4929db4a164ff58dd31185472a2e0e1d3e131d6387860a3a94e3d0609728037f2974794594baa45332308b512c0666e38bdd4e28508e23148a70f068807bd1dc7f0903596ac544b9968786933b401331363eb65065378363a1ac51974e92605f960a7647d2010f0f371ae97526a930000008c2b7cf1cd130f95ca457525d077f990bac4c825f2b81aea67757bad9fd4050c3e8e32572000000064affcb5145744317eac0f084acc7efecec93a3bc1d08cbf30a8e262f5e9ed6547b0ea39d8a2057b8ccf4e88c05f07a3a3c83cae654572fe67b91deaf56057c72a9cf42163ea4d162d656ae641e45650cb4d8581194b51ad77d536bf3c4723611e6416f4d900000217000001280a4cc481d928474b05dcb1f5fd8975f4049a1cc65cf31a467e9e96b16768f0b85c8375070000010045e1270d4fee1d599aed53ed5c4c6f163e8cb38a7697bae37ab6561ddf7ee1ec47a8d1759b39ed65440d8efb844a2c83605bb99c4aa516af189302b495d7ef7f67f3a9bd249815820a2344e4b58cb097b89bcaf8be32543048042d9ec05b774ce2f6acc0c2ba29c6e74b0edb00385d6f3d0110e832d054618f7e5b086eb43792e37e2e65d3753db5318306dc788fc7d27788bbc27dcbb1b61622a00789196d9573db571fb3540417f9d62e60f4ba327b594efcd5cd2eafcf27bd357419a78c6982e1abc4ab7b10630713b88763bacc6ad82ac4a4257fac2a193830897dd824f3e45824b9716045b865f0a4bca2b62be906982de8d7f6127dd2a92f33173e503e000000e72a20a52cf969546d073880094c86c01350bf98fa768c76d7cc1b7831637f4ec9b91c4d34000000bfd0c9a9a4bc92bef2dd9869868bf8625efaa796ab516bdcc2e5090cb69fef5d93f400ea6ed8fea5ad02711eb739a55c69e6f6fa4b3c0562cf13ed8443ec76a5a97cd664c377c3a2a3aa27cddda17412a8eb9589d4fddc0d56c3c6b97f074f2e733b0017ade09c89f6cdea0c890e673c654c92b3bf75251a94604b43547a5271a94ac19b587c902f9656b4d1879a86b8132cf5fe4cf99683e1ad47e7647222641584e41796096f62b874277814a4970040f7d2d36514204b4245ecb7abf9fda100000129000000d90585f5f3727fde5c927204a697026d3c4757668086f13c18b21538579476d735b6468ac7000000b161dfe27ad112239c1d7ebf409eecdacd2fc328500e3f26ad10d21dc2705bdfa856a1cc7b21d5563cf3bb1f00a34b22f858d290319f22e3054de608f5d5a0eda049e28b2bb6d59fd6597f72d6896eab5f896685efa82048e77a29f498d2067ef765ee7a5607b17294895fc72358971e62776835902ab858ed52041aa6f03594b9f044ce467ff0d396f40e2d0cd12ce756fe588283be30f869c2cebae7bb8515833c321e2e1d19a80d5eaaca9746c0d4fa4a0000004812968fd02ab82084008b9b840220decc18cc6412d82c4f832bcaec3aefa493989e9d64ea00000020624092eb24716ec2070edff857b8a9495a1da56997a8fd82a27ee11fe86c5f3a000001900000006f1c770ba60f6e9448da32e85360d5091f612fb82b38d701846c2957c67ee90ef146db85f1000000470a3ef9c9fb1f5f7d4cbd4f75d67c9594a2916b11fe83f3c3f25298e4cdf055efdbbebec1cc2d82879e239122cdcd10ece3b10b5b1631ca93ec4dbefe1d216b0c7ebfd9f1a38cba00000119134e4dbaec270961f884ccbbee50df5a07e6e5c154edc8412c12c738602ddc1736506e1a000000f1a73abd56776f53f4d56f83aacfc9d0dca227ec96a3bf29658df8624f5ded9c056ee99df402508cc834229fad11eda2da2071c776101c39d4105d3eb6b6efe33b17d1bd516398c6f5c543a8ba36eed9cd6f5705007c0efd0c3c8e0d72b66a2df60a88cabb80160ad74a91aaad7cd36d688a5bc44775ccd5ac7c0c98430e7035ef7ae79e375db28e38887471c99830d23981264ecdf51c5ec2ee2cfaebaa1e52b5bb9b23ff518d64d393fab1b65e6897965d6341fcc76391dd2946048718e40c547dae41dab17835f8c945fcdcb757347c82c1802bd8a22cb8d28aaa5e789b500956309f3f93cab55d5a934a4c776f7dca46000001240000002c2741edbfc7469cd30c7ba56eece874f335e870f47345ff55783e146cd7767e0ee7f188c8000000041fd5c8b3000000f0286723abf09384a08120794d575ae06a1908e3be1f2797d5bb856de0a894a6b028a2f364000000c8e2338c7670e9bb94f484bf33f08f33baa58d01b05a96fcb1966a174924f8ff72aacd93c18c99f82a97ccc9b82fe62a3207581adf395aa508c6f971a90e4b28f06db1ef236d7db9a7748861c874f828c8f629b22e25e5a17c208ae6fd6a5054c533747c6ea5ad482d811749af13e33a982d06e8780b3358a95116931c3771e8efecb3798a61668bf92847504f86bf3dd11ebd2f5d82ffadae2ec88ae1eab367674e0c195e40b2ceaaf140e237cccb674e59693af90fb43577871d09456942fb1a801a6465ec722bc30000008900000051140ce0af2b2423628c101f5bd9f457c8bd479f679fceca1947401e6fe7c0bd5aaa30520500000029dc70d427229431b63a2374556814008f819f360646fac1a980bb83b3c58354693a072f17f4c74a47d800000030238296fc83da4461d46d480a0dd6efce1140859b36817ea46fd25885ce0c4fcc9db14eef0000000808f5f6a1dd1cd4ae0000013a000000391bb065710598894613c916c75ed60bc8c34729ede56c567c627106d8d2d585b93a51f7c6000000112b7dfd4f3dfb7089ec0dd1e15c63e197d6000000f90dcda4c8ef69cf49095f3d6bf5b4634d2943a52809d0418e1a5519fb6d41d23f0e54c2e3000000d1cfb5c33c89d5d3e1a4451311ce5f2ed573fe50ef73f2a24e59a4020ec0bd28b56b004554ef160df596121c81a9a3eb11e9bc0a5b27c8a86e4c8cc688ab288b3e8d5505cc63d76409ad5a2f77e814e0822b7236756c70ceb2286403ed53002ad9c0a39e7e0ada9eccffd3243fdc02e301790aae54eaaa830756bb80056075f26774a7c7a2ad778d845b795075804424e86368031afa9c9159deecbbcc3b5f83b1f8abde8e4869d67281727a9a6147efc137e74b3cd1a6ac6b09b1fe782c7be66a98c2521133bff958d96246a4bfb8a24f69003800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d9000011000000021c000000b00820c09ed920d1673e9da75f6de3fd4b5b62159138be84dd31bfeb9f45578e60588c023a1a79395ccb3c4ef5f4ba4ad50d5c823941a452d2abc8ff1e57891dbc0c7ca5ec9ab3f8f3212048077ef22e201f2d2f2ce7572802b8948044f44488370b4b5f5c83809618f78d338e0eaa774613acdb2c354089c2f34d24ac4af15c24e34515f8a1a7bd0b23693d09c03e5ff905648ba787bf6b9a987b7eb03f37ba90105c56ca5e229ca9631d77ee524c489d000000b01fd785f3ff3cc82d3c42f2066ef7aba76ad6434641c8b9c589dcd213920eb1c916dc553145b3755a19e1b0d41923f143d77a494903f7a313537a28dbf5f10ed4e8893b810012261b5369511c3d4349bc3c3a53113c273ffa85e9b04d28e85c6dc6991eb088793d1f83ef9211dfa0a96223bf27deea99da20679bf80a711598008429a1a5518c111559f229626f49da4f21b0a81af9b71af5722c35036cd7d19b21e152b0c97e7c070e03182d5f005d36000000b02552fe2998d309c0c52024a80734186f028d4ae0556bc4599911d540abf3543fd2aad5f7b4a6fec548abd03aa4459731a3447e2a5f7b02eb7908f5d44519b4c9a77958a4af8c6aa7a7ab8f0c4cbd575e848d174ccc32891466d23ec0fdf956ab3b707a430f45f10620f4c5c1d9e94d8c04bba356ae91e4f8fefaa38970ec5ae6445b0cbe5a513709b6b0f1b150af50d314b25ae0361ea4af96d2936482892052771cbd17a46e7f6783c21ed58ffd70690000021c000000b01b10352c93fc87f8e1ab5fcad3734901c2c5b289bacb3031f5cf1d332b2803b7e2a94dfc238c6e18814e924dfc373c7c048392f3e287e2f412dd9a734a17f44ebb740653ab479a7ebea87a9750e36621a407391ecb7f4c24e75721b638853fa60a4599669a18dc7062367c658ad6760520e0ff400ed5f20799375408dc8bc9f2026e0e67b3a1816a66389b322805940310c065e56bc3f31403f734c007e5ef99a0996cb56aa44e763c72233810c3c3d4000000b010ff44a905954eecfef2349937f5519e950c1f6ef68bbedc1f15cc9cf70e7931dede5190018ab829e6ce965e36f10c588f28e71eed4f242c0ef20cc078cb56c05126592fb99e8ef6da6bc09611257bde8b9d0df4ef5119ac2e9a188719522609354034a1d3dd6755a30956e79ffa3f2a0a6cc26fe9fc2da7ca54c0edce4ca93310cbcc504f974aebd60712d12dc7b0142c95a6e0dfb757eeeb09f1538b67ac26d769bace4c5b3dfd3f27c6eb4720d2d4000000b00617f24e32166fefdf8067447a44dfaa9d8ab96ddea0637269fa8be5e01958e089facc689e62ab6ddb584f8688f6624ce645d750c565f0202aab557da22280dfc73a0aacf1298e082e4dbe62232c36dc5b4dbfe81a002d1a7e8199ce6ed56acbf361313d03501b269e044f06fd1985ae2e4bf049fb581cc0889efaae5f332f207c43fc3473cb586b26c54c10f507112b2c27ec69a992206c0b94c46f31a26842d0bb5728ab7e11b33fb7decf1b18d1440000021c000000b02bd6cc830766440a3943ad5b374c759a3bf07825c7e1c00787c8e58d912e51f96610cbc061598e5867a4f5b71c0349f18b8abec5260f8ecc0d26fd8405cb3be254ff64b8b496357433b7f426bd3fce3703b9cca43b74cfdc0f7e9d6e293fbda35b3a36fd8325410e0e2861591ddd22aa1a056ccfc91bb98514f4f7a200bb95bad8b49023c4df71ab4d51224b38cb5d1100bd9607f363b28780c77d33f771d494ca268019f3a23f5a8a0447cd2e13a20d000000b015074c67c185979fc485c4b6d40b8a47439ce9ee9c483427c702aafd90211fa9effee16381ff9848bdf6da74e9ea059f7c71ac370ac6ed76665513493d203e9ecd47a36ecdd8570c7e3c6d3c6331b5277bf10893cf7df4ec6a26cb80d9a658c11ab0eb657d11fd3d457256633366160927afb75b031614b58d74b70e3b003ec4670552746e527cc62ebe51c6000c10a42f80583dae91f0bb99645a241c825b8a6d8ab7729e0913be02fff8cc0f5e3881000000b014c891deb04aca8d77bc129b229c2da1c919255d682f5ac01d24041cacb3c9da0ebdd856343ce4a40819cf2393b189939118dcad7fd378318d9b94ae285ed98bc220026783e2e62653e4284cf0c8dad882d7908d6c4958781f352ffdb67ed963352d49f463fc24d90da750ac7184a5c0263435f22bc2d1b05d3e4787782922edf4c60a7ae7844bc9f7e24b9066f8773e2c02647c94e2c8157f82dd5ff759b484b8c63beb2f22bd83f4d69df253a0f4440000021c000000b0035f021676cd991e6d17c5c8ebe58f5628e47a2fc25d51c007199f1641166fc87ad16f259d5ea1a73f2457cc1ab5c35a1cfc4f5b1942b06c35b7743194c3cb3a27963707d63f7631c29f944b78d3b1657d51c18f2e73072c0ffcdcb360aaee657be2c02c71b7894c8609a72eb917ead30a7f1a455a74bb98d656e590893fcd977115772a016aa12518490b86c4188fc3272091eb05bdd4f8ded9ddb394411540185de53aa4cb312a7e36ad507fa45734000000b027a2ecec39beb02067675f86d1f7fce5cbac15815f931cd5b0625a51abb0189bc8c77d9fcfed40bc0c152495cfc494487971fcd57188eae460ca7cf7d501622d4d122422cb9c205d0b793fe5371073c968285ab04862279a3e01adda40fac22f6372a20bd15fcbc6fe70111cdfffbb431d7848432aef37cc8cf9238f3cef4f6050253c8700d914598e7deeedce95ad0327ba23d86301a517d7f33be0bf0aa29dd50261cc14a3df6f8e8e360a2d0ec82d000000b010d424c82bd263c9c967b826dce9e77d5117e5477bf9848dc8e536bd9253377c391b623de1b5b008c1b315b08758dc6bb49b685de39a4aea071c520ba503cda6033d3dc4b115900f2432f032e4eee5aa6edbfb37c6847f813cbe098eefda6c983a7a37e16a4907f0b65fc63bb5bb8a2719800c56d4831982e07f13334e2d3f626a185ddaedb9bbcbfd248640531bca1a305030998b749ded1a7617621de2f4a1b04e13ed7a9da3fa7bb13e41fc9f116a0000021c000000b01f549c1ca9fc8b97cd3292d1d40bbf2a2e241fba0f56849520c6de0482a095638fb275431744f70911c4e90bfb88c93f47c170bd3c75f46f1ffd74e89415abaccae34a938ab5bb72f72d3d2b8863cf15e9b6822ac30544fafecf58b73a28cc58377aef18e7d06af66cb8b999b0d22c630d23a848b151c43ff512bbdce02775947981be2f3768f446080beb543776a15c141e2b985e078eff7f7b41c4fbf6e9f02979f84dd127e3755c49ca4a3c55fe06000000b02e441a3512f258009936eea497a4030f04b8d0530598d0a8d570ff9e11542783e360f8a6bc2f2a8363420b3c77378e44bc2e12584279fa766a48eebc04b725908074a81015dd803e01581299a7ec75fcdb24bd114acf78dca775791fb2a524d29db498cd414e50cd973d6e4c8b74d1271824c592535777f73c91852ad79218183fd0ffdb5c41861f687b9f3afe4340681a5aa3ec9f3ea0327c729cfec04bd1a8528874a975b6f6b28b79b53500a8f4e2000000b02437e1bb7b709493a3e8bda7d3efa374678223cf452087229c517cdd45aa169d1172bf15ac76e44acf3e4cc5c377d7e0e29da248a98826820a3df3178d39c54f8fed21102143a683a4550e22256bbde3c2b1836c5fff92254bb75327db55350c6d3ab3b4d91870e01370bb8e0095911d1f4d78306d99dac4f5ff7b799810aa241bb7928d7aa697eb903a0a0d7bed53130532e95bf702e54edcc3822e210bde2e51ebc9c0b26970e6649c241788467e3f0000021c000000b0163df66deddb1d4ce9b2d2f71076278147dca95e8392b575de8513f5e2c217cc81f18d6b509c309e1c2d64d85fcdd4bc18d6e9107bf1ae03e0d56ba2e02a925d4e9b20106c81a197acc98aa71c786e53650945ab1596ef22035d98b7d366fad2e3f503dbe0e7adb45ac8f8148defb9d71e1da2f83498c8ca74d32e21ca12a4c6765c876c4b108d6f4a654cbd094907c625fe00642482692d4b1fcafb952d1d125c6d7db825d36731a39628dfc11a7e46000000b01519f14c7ec47914691731ec81100657902589ad5af77fccbd4a558060ea4360047fc9d0bd9a0ba06751c9bd132240a3bed47b7bb70c17d9e4a0839fd7075b4a6fa930cc413069a961e1298879c033e23e48e775eeb18c59414db9d8811fa7d81ee8c3d107f938231519b53356913fb211d7b6deeb1f5fd8b7e6fc13b8e067afcc121134f8b36f4099b9cf9a78975a4a15db1f91249cc5362cb1960242e86bcee393e90933822257505b80e2fdeb07ef000000b01a65f6374494b110493c876199df77ebd2135cbf1ffecea00955187d3a417915b99badc4d2f5b91d816dd4ca5776d848b5e31b8921a56b9fd7ff2076582a94f770431c0c7fee2ca9c2f2e24094a6b98a77300dcbd4824b8333b61a23c31481ebebf59a56d857971241c7e14a5d54f0900fbd10d78f8c9fd27f8b9862229941516d904959d2733ac312920babc159026004ec5449f901ba21d7c92097cf995505e1041a4e1bbf722a1b1a41a4f7394d800000021c000000b0117880cde23d7757d34bc1769dfd5ca049904a4ecf34dea8757a3a5b8b397be8387c917aa24eb552aa0189324351f54ca345eab030a70ca439e20b5f72f0c5482d60e840723aba71f37b92ce143728768d6d88bbad31304a4530e206bb69fbe2d8225db6950f41b9876e6b46c4d47e67114684e8c445933be4b11a814d9acac5e9fe1d626317861bba3cc02b4ad8165f0d7913b9d46edafa6ef58e17e13c728105c18c41d95a116c2ef874da846cb8ac000000b026f8dd5382d00bcb87ce1c33c0c1e71f2a01fec7b384612d59dc7486a45afb19895025b528be3392a8ffba23d7052e5fd61b2518c9bf06e20cdca80bc67e3ad5df66423dd58d3b150430c1ec57f4656259cf91536b10e733878f95b5d9dcad3ec45f2245a34b6241c37b0a1f4eda47f305176308bb20c2f8545f2693f1036017e3ea3eaf980e6eae3bf08d79364e980703c2f94be06c20b6a999f5f93f1aad6077f7c150fb78e73d8294bdf6d7f17c55000000b00b1a509174bfdc1fbb03a6c119e8114be0e3ff39e23960453757cf3491acefeb1c9ac31a6f89365e4f1d99f86371ed67272561332889e9e5d90776e7a2ab465435989f1f03152e55e748718693bdb283c6c401ebe80e6f454910785548040ad71f989e508d95e7d2d74b334e1ea3ea851f8f929bac78787201259f8e8e561d4585c24cbe61a480d32d0abe0a0cd6ceef1b8fb8fdfa8bdffce52368c861feeb47fed68df9cebf46970ce754aca14124b20000021c000000b00884a4e4517d3356d3a8a5fb8a60f3746a18b60648d6a7efdd773c98eb53f7fe55efc7c78375cd02df434afcd34961257a15ebe445a6141dad8a1eb33ba06a3df62f2e9afa8915bd5eb5da4a6dd26c745a64d85a10472748e405d6d8267b8db795d4af4e81179250d41c07854d29ddfa1c5a393ea457face848b2971d5929a5e14a42fc47415285a2a70f12940c384b83031a41d9284fd55aae8b4e71ec7bc3f7c4f52ca08d90d90b4f234f09a8564b5000000b01851ee890c550536bf030e9f486338816e9f882460fe4966f1d5b5a664f765b859913c1a4963e41a6b8a8a0c5995fa99f1b184d86d083fc0439454cf5ffa45f4eb0fb646945684ad54d000ed783e526f46a38358c9699d2667d84c432672d8878c77613a817930e06ab9536171b1b3cd2d6e0b819b76795760dbfc0c8fa1a9bdff40707dd28de74224ac028ecf1b5c81237d2498272d5d2364c711159dec1934ab61fba4a8faab1f6ff74bbb7c3881c7000000b01c4df3fd06a4b53b9188eda9f64929ef657d960e68e57627f231c1da9aceb0ce534c418893d13abc2d839055fa22281f46e412bb16199cea043dc1ab301ad49145099eadbf4f6121551d0feae4c4ca29426d5b8a954eff30874c0d080bbff433ab1bfec7258294718189f63ea1d86c6725f039797dc2442597235125ceac7957ec56b32fea3dbace24a6be67d75b282f06e9946b7b66b5aa31cb2a5dd1c2a0bea6bca7b3e5edf0859331acdadbdb0a4e00000e2b000001b0000000c400ab2cccf319b6b46d73edf221216ab45261991b6bbde45a3657180a3cd75872391aa2860000009c7ed5722e545eb27743e991a7588a9293958ec39c6d264330bcd07d7511e910c8ad2e8ad8702a52ca7580cd90cfd824c51e906f38d5806eccbd8f0045f8fb88f84a773e415c6a8d37e2251ed731142c55d7ac8e5863c96fa56da74e64a2df6c843ad546e45f79da87690c3881b2e2d436e384e19aa5c1e62f8b4517b18179931ad9585208ddbbf90bca7d999b8c956dc8670638d99c8c8eec405fc99b000000e42225fd37105b2c6ed9c9535cb97a6695bc4e80e9f8caa6997c90d9d5ceb49953f3234114000000bcad460e8bf9f11af8ca36defb93965584955d32a478c8a09aeb5ad785bc812e3b060339ce2373936acb05bcb80757f5a19107ff5927f377ed2426cd3442efe0cf8609525c8a91820877daddc35100eb3f0be827ae8ea0becc1001d75bce51e4e4bdc1d3734d13a8fbad5ab1e47a8a13faf5174de06eb67e2e4307287ba22cbdc62455d40d12dd9146e7fa1d4c1959c26aa6c5a6498c6407b85a716f0ac3d1ad7b9f65d1915caf46a52acdf8ae3c509bc47e0bda0ecf7858dc7f60555c000000860000004c2ee71b7eac52c727cccafe8b72d3e74e8bdea4851b023a0c027bef1cbb632074d90e441900000024b8f5c62eda741049b64a9cf11d38888bf423757df7bd97d696e36b620752d6c76cced668000000321c6adb4fa9a1e2a6d333e86e7b00d44b15b142153a3fedb529139ff4823e9f41dcd0ec830000000a0f7af506bb1400aae679000001710000012b0b822882236fc1c33fef44f932e420cc9b5609d385caab43b48ffddba2e9d1e240a334490000010342390414e536c9fbc8486be8ca726c2a03ab545af8e4badd1013de48feb44b706fdfbb5a06562e6a1c3fc851f3d22b0bbab29e5653346ede1b5f6fa43e7805da0bca2e1ad4b46bf386dfada111c950909026098408bcb534e461698e950743d4ebc714ec3d03dbb060db5c1ad7be10593eaf8380fddedeee74a46adeb0a8c567529dd83356fbee7ea5c0e5ea6a3e364419d987cd9a1dcde5030bde6aaa7d42137656b463e5b3e8a7deb920521a472af23487dcf5030f5aa0d31210f8cad24b5a211f736ed3f74b359e789002adc77abe6f1d7db5cb2dd9f7e2dfc48f051c916b7442536deaaa97d3d880e42ecab6dd24f539294d0412ac7979636f185091c0d3bce0d30000003e1f65251da860560ee90b068ca00a139038fa58a1625b9e2fc1fa85094fd707d1c7e438cf00000016874ae182e2d9780c4c654d7b286faf1e984e84b87f8a0000024a00000120178f5c38be0dd9e2ce5fdc31a6fcc91d13a352e1f1e312b2e2dd6271af494d0536047136000000f87ea40b6ecd2c3bf6cc2fae82119fd022960e4886ae43e3616ef6abed20b3cd30b8324c25864efb79b0da6733440215ae1cb005edb506f45199ef2c1a6e07e587760f0e63383b062c77f12df9901eb7f8960128d4338eeb09fb7b307b5d0cff0b89bde0350daca6ff71d43d2a799f3f583f62d3f3af98b959b5ccaf80287292479e614e95988b3b76a1ff55aba96f9205a24babd330039dcd0ae2ec260ed12a7b615ea0e8ad75ec58bd4410348ddfac633eba9b54b12442dcc8c9a635b7ff9467c59dd94f1f78f7affbba617b552ac7285cb50e673bac3575c7b1cbf61c9ae31193620094f419cb15c9276b465f0d58c2084a480d78b120ad000001221400962dc32b53d1d3ac91a4d4b2fa20531ef275db97f98c2ce2036bc9757975443004fd000000fa07cb1337b6b1579e8a96f2278a647ff0a8b67501659f389077066d8ed75243862812220cd4c3819638df357353d035b92e301253d158d1b3bdd0845e7cacad808858a8d35fbf52ffa36e21ccc10089a8f933bbe653920233080efd137ac35aab5dc01f625841bb2cb80f337369a9adfead613edc4651bb3f3fc83eeac3a00591358cd163958b7c8889a470ef2ded1552a181c1367eeee62d15822fc87161228ccb4e3a5faad425f12bb01f1307dec02ad31bb890365a3c4976abe611686950a1b32d189a2002045f10d056d71fc85325dcd8d33aadee94cefe5ef1eba2c5cfc5fa497160949b1be71332d9419772c364519c6ddb36f76af247dd000001130000008a0fa08f5b4a66f52b902c668343267c5bc69b480db5fc7a5d6f8064a4e1723bae72df9c4500000062a06f39a9bd2e3cfa576f9e0fc317c0e1a0382be7f0bcaf7be0ce1c903925b87e6d797d8b3c648653f3be793af1f9d82561e337586a5c6424b68edc09238363cd90ff51618ba6f60d875481be16a0f4988b0322bd9a7559b89f5bd9fd2f10b7779d25000000810ec99b3daa498e852e6715289e6e36e280248cffb54777eba41c0daf597c3beb282b6c2f000000591b0d04a56e04157dfa3ccd89efc775409af7566fb22fe82ac3563fdc06f67656fbb3f2ecf5074764215004c59e8cfab4cce88ade5aff00325e04861b4822c0a328dd06aac628306d463d3ff27563329347c278fc622a3c31840000014d0000003a006c8009db7c7319ad0938f0bfcf0e314cf3bf53e194e04a2500fa5e2ea9041581276be4000000125df96c9b250594b5162f32431b0ff99efb380000010b00d3f0ea0aee436e9776f4f62a3b7eb5b82ebc388a57818740e467321078a379d0d2c17d000000e3c574603c4c8815c6815c752a039a65c35445fcaa1e8e604756bf4a68c8fc53ec4b7951a89e5553e5ce435e446ba59de1d3698561718d3a19fdfb1d4f2e009cc8794c4693df814012504d68635c45ea139537e8db61428090bf18ddde569a84aea9387f550aae93b9ea12fbd0fa0100c50df16eda475db19699c53bfb4ddbea02fe9d8b6fc3cb181b1c94545a7adfba303ea9a828a686fc950dfba65b1d4eaa4cf90fe7c9bfc40a35d35fb20266638383ea1e0ab861693c6e9d7d2fbbdbb1f247f1ea707eeb04738f3525bad228ecc6460e1f2606ef83bb872b7297222ea1e6424feddc000001b70000011e097ed48567e289ded7e87b16dc003ad0004651a0b23386562c3ccb9b334f4f34e932e388000000f6f61bce99c3e4d484cd597a5d84b4c6ed1399415e5f05207b9e2812954dfec66070545bd24a2679f5f3648f9151950c983a623e02a87520bd6a0cae12e5891e7584c627d15412ec2942f85059ddb016c1ba817469b4905bab398f823e35508767d6e038aa8914ceae24ec45db7f10a4fe2207358f09a2982b73cca195be9a596e906b990fbc731882a379b28432a498fc5aa896ce8206512972fabbffc092d7a180472b6783d230501ee62a0f7f008a51d3b9d0f6373709ce87a9697a80f493c5df53ad2bdc3d64744bcf677de4f746791004c53bc53f6c294c5ff0b01e29799962b00b5e915d45e4ed8a5524d393f8f665bbf9f7fdb70000009108500c3104ca2f3fc32b1d65ec60f6d203fcae4fc7125977a8d7ef8f661e33cd18e4461500000069021e172f2bc9358243cc4c46e37f02af97ba98a5eb8c3cd31af9fb25d4c283f0f612d85d5c19acb7635173870ba68daf05e8fd9972ba9dd597447741f693939d6e54c8436733572cf0a77370f968f5dc4ab08b14fcb11ceb3a33da97f661484b7702a141938bcadaf20000017a000001270eb5af1b847aed72b593f552dfc413af8d720f6289b7d8b2e22571927925571d31b7ade1000000ffbae9858aaadc3b97422a3d18219608e4391addb4baf8b10961e5b587614285ba62035688f47806eb332e4449da4b3fa06ff84b296505fc34d99e362423a3bc3d6694dd869552da69efe38bfdff33e88310e4d7eaeeb02753ce29112a1f9f810e0999fa7aac4def296213ae867f07922ddfd481b39ba2e477f27bb23d9a42ada3ab7dac6abdfff1c7f2a34ed14f194378dee16796aad9833a1983617cfaf88a46ead5e7673d1c22de03efd4502456141f65bf49274f1b0ff93fa21f991ddbd8e489c92452df082289509b9c3036d89e90f90f02e63fdc811f2b579bdfe9022ebf96bd616cbe52ec705cb947612e50266d9718886a17dca3696a262d05eb02650000004b0d4e7710a1a993d4e6608885a8518e5d75ed28050c8cddec5a864fb77de63ac381537f9e000000237d13d5b7c3a73ac1c3f487040ea65a1426ba67a573d4f7c8d2c91768040b8555607f1a000000e50000004b229b12434466c660a788fc73c5f8dc49c8a9b050bd1e0f11784f463fcd13516125d6811c00000023b12d5069db953049d939f673d7183c71e8d4a420c80da2a3cbe6ea62aa3ef9578cabce0000009214e694b58f838d55efd0781f7fa2a6b2493fe0a8a1508725c46eba09b26c0160760936fe0000006aea09b0f9732166e2149d3da0f49a99738abc19f49f4f29559a5a16f3c1154c436a9ca0e9aaf53cedf24ba639d9164bb00caff37f12cec108a30f93f790fd8112634fdf80ef4e0e74341b9b272ce8fb88bdfcd0a29a6df4beb6719cf8a76ceed1e8ea633566fb51be7ff3000001170000004a037c06918c9fd24a9356b7114998760770ba8d7181bca30351abd3b3659cb71e46523026000000227dcf0dcb1f4e4fb64e20cbc0ab90a2e78b33903a0e30a3113f9a919433d79e316ac8000000c5268f42ed6f8852bec46f8464b7e40c47a0331ac9368b3afa5aba4111fb1cc9ba5d93e2c10000009d1214f7a1f4bff0cdf904f1dd21102654985c7a67f8b49fbb7bb69dc0081ee6474957d15e6f1394346ab1bf9d80827f5d7420181eccb9dd1c5309c9d2f5a8fdbadbdde188001a585f6b0d7f6c430a31b4a7ee67620d534c9d2ef87acd7866f917dca7896bb1b9d1945bbb40dc8d8e217dd82afccb39a6aa18dfedbc1c3249ef473dc3e65d91138ad029f6996ab7a1ac6286d52c36dfb36e12df8c7961e1000000810000003a2b3d959933258ee0804429f4165dabec1dd6454f5829f2b371617eccac0b7d502beb6f81000000126d3e68dc81bdfac18d34941ccb30a928185e0000003f0af1a2d2af20bc7e9af5a340b5f60e25bc290215328ddb609b23d8e939cd7851175b718200000017e399ba7dbd5a17747b4f3272c9e85e5e06d571e14823ea00380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f0000000000000000000000000000000000000000000000000000000000000619000011000000021c000000b014e71d1c7afe6959fbef57f82b1f63f0d738e130ee3e4194e39d598084edd4ca248c55a1bdaa685ff6c0a1dd1fe4d8509a8da6ffef49ae240b6dc24a13a0a40e5f29a7ccc0ab12a442705940ee25e13a795db2b974372d6dc2721cb32823f48324109bcd4692bf0e18450a2f0fb499a6293106c2d3885918b7cb0608771ff8fb39e589413a7d88f637196fd28157c4472adf3a24d2ea827b520633bea7a4a6666e90edc23d94237cff4901b163262dcc000000b01042c3b579fedc9d8c40a95fb78d4f2f57153ae09507bc3a48306819dcd02e6b4acd9685e5dda09d65124b61ecfc854a0798993f2750281773901282c3c1f3481853106ae70eb287c8a1dd6e17f25ded5fe28e10a484dee603460dfe929f7c430eb9eb98eaca7b54095a319ec597fdf81cdfac869c97f73d4c3de9c48fd99c3e0a962f6c1c6ab811e222568e0ed9f33c087364bcc0b4a3342ea524804d8fcbb1b3546fe1d28f2908c3ae395e86f41e7d000000b01cd45c005f151fc8cd82f632f997b8a87e3dc659076d65e00ae1692499d3a2d01e7435c872fce320d120f2556a481505aac27cc5ce0214d67427bf546ef17d2d00b50c31749e6072a26c4448b81a93d5b36e0c2e9571870be8c3aef6386baeeb406f0a9ddee921aa921ef292bee4f23210f7db1a5436a25f119b90e3860853c0af6cb035b4f539f9eb464f490d7368390f4cf020574b16f78d84d342f2069fece43a1755fd2504568302e1da377044ae0000021c000000b021bb28f2808bdfebf48ac2eeba288834ce37d41deeb40b5322f07c9928077284dd5062ce8a5ecbee5a205242565685d8a7e949e808d15ca789c9a29b45a7042381dc9bfb554e83fb0b66c99a9f507c5ab9092d1ec18a68c54f5c8775ce349989ac3f19786bc0b0c5299ad3a03bda561e116f0d117c0f0a0ff10e1254292c5f75338d9db33d20d2af49850f081996177424673c832c02a460d6c15042a542cd99465ba7af5e061ea66624b4f24f69ee12000000b02ef2180fd462ca067ce4ecf52d6e8a17de8100d0d37a3d33e17f28825984152b57da77796455f4b4cc78e189f41422928233c27e68ad9d05a7553c4099465a183c7b75a60f1697f73b91c55441ecaa3036131097063de1114b36f07c6f3800f5d59b849784426e0c29def6a3c5bf8d57068d2a278baf05311fe7ca42969da5fc04fbdfbca306f6c3af0cf07c668e444517949f38a3593fffa8290335b455cb2cb5105d2de49c1376298634172167d3b7000000b0014826053f848ddb4c241aa84258220c80bd17e238a14085ac77d73822198004da8c6e2fef34d05f2c1db3da33401bcc943c86deb05e7706e6885b543bda9166bc5b0cc1c636e5b86b406126372170e980779ff3b004d3cced94038831d8a8a8de1fe5abbc6fecb4a42ba91092a1132426369941774671fc52579cce4fc509e3536d41ef4be86120ef68ebd8041434ec1929d9acf5a9025a571f36961d24876efccd8d16d2ac3adf5a49d519ef5fd4a60000021c000000b0240842f028abc659670a2df0d50967456c0449bb62336ffc976129ff5dfa94c6bdec76f3b74df5f178755583a19d0bd6af57da3d30607242ed0ccbc5569dac7afb3b4fc6f94622a1afdb6c674a986783590b7f898a7570710701ad1730919ec74b0210562939c545f035a79f4c97ecc52986edd255a26dad2ca81acecd3a4abb86ddc478073f74d6ae11e39bcd37bd0605bf5004f285e7c6517a6db5ce34feea5b275a0e92b332d765474de71b2c4127000000b00247e6c005b8547e4d8a39c483f6965a359b57e94a53194d27933a59adef1a78c6668109ab166890df1ee040c23d33ebd91acb78c34e72d47c8974428ece860771410d6a9d08c9bf649cbaa5ca6490f0278556358faaadbba34261174630f73be7e8f2b0ad075c6f234e8a854e621c930b93451ca00d51f5297a8258f560d5d526841d147ac70608d7cb83bf8e245b6c0671e989dcc32fb8f95e235d673bf7e0ae1e529c1cfaef2af63879a4f1e62aa5000000b0043d91f8d342b42a64d3756cb1ebdf6944fa23050fcaf99164895fb1102c3668c3cc53c7352ed2baf633d0e64df5a244d99350db41d1682bcecaaafa23de060bd286d232fa7d4d403b9f052e5bd84a37cf54194a182430e7b795b6e79d8abc0d28a42d5372262aa557dcc4ffa896ed1616b6578cd5d9819a18759dc1721c23dbc4a55d6bcff5d85d6bf932f5db7685e52b5d3003266d1897fcf5b890c2b1be67bec3206bdaf421ae9995c21a47ef882b0000021c000000b0258256c68623f0ba75ff9aced0150ed8033c191a2c94310513b538284beda67b90413e36ccbd65e7e749ff0cca31e77155affbadf0e9ac1e53f989ea91d1006fa06c3ec812afac7752e22b0bd463e93c8c3c1feb918fe676a721bc01576ef589a13d904b00976b15f85fbddf61e152130030a28b364c1cb9c7770be7e801b97959846ce5e0ec6cbd9ae7d52a6eafcee905a5af2b6a1faa1b5d07c9defb6095df7e5f99dd4ef9b057effa7680279192c4000000b006ba41e72201a1bd244c7f52012f42349f6a8be09f3993a63220ecdf7f7a9ebb4f14c0c1d677cf3979f9989a732702a5b18e39d9245b34df9b2c117cb887b42207be42d14b5bf627a72d585cb77898deab935d47dc625abfa290007b0526faa03e326d3124250a5a1085ea294130db550fc3a86f409f88fe643b8fbf7ab3bddad3f7c3b760af4787fc17b419e057a1ad22d7224c8248e08f01b1750bdab6aea5cf8cece55ea92ee243edcd5bdee625cc000000b017be3979eaa031307b6dc50331ba2dd783eebb58d43599c53ab1e89f28a65d57cb62fd21882be628c30994c2df7ec7bf846cf0270a79a764cc530e96f2bac99eb3c195a5c223ef375e817844603f2c264918b5f27bd5ef2480e68bf3e392a2bb84597bb64a3f7f6c014fe67fb0dd5c210cde753a3cde1c663d62624ff220528f1fe1971714373e1b076663277063d7772eb97cc3afe6c279b5a4e2e92747f852dd06cc111f9d46ddbcfdeaed77f191140000021c000000b02e86260e8905fb55ce605d55e708888810db90b3d223344db009ffcfb7527e1c6c8693a891e679ca3736441a694eb110c68163a1fcf069a94b378895a0b0a7f28a8f0f367e119193487427701e841f53442ec7b2ed9358184107483c599bfdcb9ba748d4bb21f23eef6938854f6c28cd205ae87053793c357be7bfea20c0ddadce2ed5ab1b5f6497d6d6e89a6b4dfaae2d6b5f9c0b198dddba9d687eee087952d041c6cede42287e67f2866149a78568000000b025ad3ef39812ee78797cda74963861a3b1a133a482eda04b16660f1f8228a65c2609ae389fb995385f964c2c03342abeef5d4ca208290a619fa48c3aaf373a5b17fc0922fe78996a641dbeb281695278939c9898e70cf944afacc8f5998092910c6ad2cbd23f4e23a592d12c7ddb9a791a8b03314f045f530852400c91d9aadf2ce79e8390feb79e5813e887ba24e77517148e7e3d6cb846bd97f4b12cb651a3c94ee648c2e9a9c9a64cd821fd7aca02000000b0163cf22ea7f374f6a0fa9e20d32d9f8fa50720ca635454502360dcc4e640dfe2549fadf501401d8a131b078738824533a8df5fdf9df1a2a866174500941126c0683679eb5aa726c4203cf96330f10dd5400d6050061aacd3ad83c97f63c95d91cd11053820927bc2c478abba08b4c7ea1b36fb7698fa93d1c1798b2a67bb83d3f0885af5d85e374c24cf7bd78358977d0d10279eef827384e2906d38fed634c8b8086b8fe7c1c2dffa2a51a4bf4c0a0c0000021c000000b0027d1578548faca16566691c41d9251c79337aa4ca0552b33d65b77c4525f93948fda2e76a5189b2654e61de4aab286c06dba0af81a0cd490a8954364403109a0988a2e5f8ebedfc56e7e5a152f92727f9ff9d7a086085b478aa3045fe1a4582b7bbdfee774c71daf0892f0772f5c0fd2cc8f3f44946ccdd32d753cd3c2b67641239f75d6c6f7aeae778466fa53831ee12cc6786cafd31e4fccfccc2bb9c87fd3a79dc0ffead99e6f965343f96a46e05000000b00166ed582264f37c2ac051508d08ff8856f2ecaae001b93449a5de53892ef45f200ea5d5255baf025820671afc30481287e077e75563940574c93a3a32805912af0205c723a45dc57f2f5e7bac9e206d345c5a318d4e4cf49aa7851e243c6a9f0bddfde754e2b287195c0b9994ae688a20797c378a021d8ad2b237489b2b93c13e44037c011c34bc728e8f8768105e80072a0bc68e1eaa2f8f88df2f90c751da654d376468d02e3e40b48428d4640539000000b00e2295e974b4dc2e80f7e2f312593e46a858cacb56f9dd7a4f5315b57e0614c5943143e207fd653052c07a22ba84389a897dcbba47d121ea0e96c58be0b8f75fc405c9e30475ac5542cd4456e3214213f91866f3e745c0df25274a12898de2513b2062e0bd5070a02323fb59520180a22bf7186885bd6c9d3a0afd1edf082d5269dcf69d211fe15bdefb43ba8aa38a240211b7c4e9c4ea784222c46fa6e9c1bcc9fcf0d7d2fecb83d1bd323eb43f31850000021c000000b025672cd8aa3265eb55be0fc13664900c854f8dff1a4a9da792c9d4b7d34f99639baa796e3b24e54dccda4ed3809b369bf0ae1b1a1497bc495ee83089c538cb5fd6e9c31ccba367653825bd613367a8ada311536e56ef2f61a9f190876b8fe0d0764a0d2f34f5711e388d43fe3f8609d72c8c9111e2e5c91cdc4e8f0c97c73cbeb12a8bf223969be3238151cb3afadec508387c7447c31a52df94dababfd9307ec85d20f40d1c3eb8ead8fe6de4145bc2000000b0212177c46f24ee990a81407d780b34555a2bd8a6f814f15cfe63618111166e4acd5b6f3d114f88e0e5d1c83a337d9791e374f224cb97acb58b7d0e16639a0192b9318957d3b88e356161f5e38ee945fdad77760726dfdae0b2acf308029f52819cfd1f1598d9830d49f8f3d0fba914a41e6a9d6f3c533eff5140b76d1046b36b304876fac3ed641dcd16e000047723de0ee2dba5379fceff69f02f572b8d1813ae794f5f2b89e46aee754bd1584947dc000000b00ab04feca1a9b731002c8dfa0d7991d4928080be2b9e13a4dcbf6bce406e185e2baa8af77bc31f8ca851902dfe0a6688bba573ee2ea66b3a12be065c423885631b7a64c3082ffa01a207b6bf7fe85ecd136111e47582efe03d16f04774f98292d5b67f016b8a11c8bcb510abfc44863e20a3e9a3ae14afcc2fc694997ba51917701fca3f855cfef2fc0ce83e54c85d130b66a89336729b9092887b53ffedc1670ef90f6ef9025aab10925a0abac0173b0000021c000000b00fa76fb27a8affdd80f3923333fb343cea61786df0fb52f40a8999ae321f5841d946985a06eceb321629121366d507c6f2036b9b358a8b8a9db25502530dd9cffc0a817b93e4ebbf87d766d7434da56572c37f817c6ad520210f41b9c5c35a61881f7f781ccc0a0a7a307c9643653dff108322fb43d20bbabecfc0577d1109be706c8db162974c134cf6295c2fe94f6827b6146387a6e6be7b5a3c1070ee18f079c29cb03c5551b5d249f375ac290d6d000000b005faf2d288aecaf4bc5f50a7034d023a6517095148a06828f4eba8203f840e25daa78f6adadafe582db8c2ce5aa2b5e3cc53551c346c99c2ea16635227cb466f23b239215341f9adf7dfcd9e017758784e08b2a39fe95ad0f402cadac39e0390b491fec8a99b728be1b920f4b56938fd1a7c2c96140c65ba76d6294941bc6effd819f23abce3820e6569fa4e9beb6967137112ff09b6253a549fd2887c2af28f8ccdba62b69b02e5264ab231eca7d68d000000b02127909df8f32c6b98e845e52c8f8aff64075e4af65c77d4ca9269f49ad90a8d0cc16ca4185560d99f6b55899480fdae388292892ee4f65ba6537c5d7c6a8d83ef87dc41d2dd5ad82ed78a486e491753f575b472763b89b14fe21cf75d5338e507f953238512b4c72c7ea2eb6d5507e60e4229c9e0e6480495c47d1bfc37d521bf423542299f83bedc1e8e349aa6a29f224803f8412d793e20affcee4c14001e353fb61b435e14d30e23b58b62f8109700000e6f000000a8000000532d904102f9368d1a5b780b27df6afdaa0bae56f46fc6c23c958aedad09528e8190a291180000002b10c1c9bfe098561def1245b5561ec83fdeefb880d68ed13bb2b88f3b182228995f32ea1c1e18bb9402d3100000004d17e4e90892376c43b91b4aae5e7b7d41966f83a695ee9d634f0bd62cada526f60f3a3762000000252564727f2661309a98804e98def68c0a584c06d6878d67b1843edebebc9b62bc5bcdab5fb10000017200000074109817c552ca358fd76d32d77b59340bffc19598e14e91e85c2d1ce9bcba0e553b4daec50000004c05b252eaaa026c49566d36f251f4c8746cf22d87961543ada6340f12ebfb6ad261bb7b36dd78d9cccf0bf15912030c0903f445089037f2246a411b4f1f1255403ccc8d3916c49ea57419e527000000f62d1fe4e3d63157e3fb92afbf8b8a9ad3a79476d7422e1fab9b9f8ac2287215f14391f348000000ce9b22b245e58485b78c4e738697df153c4339539afe8ee2d643f4a83403771a9962ce26f3925fa86cba03a0eb0075763897fc7d8fe3929ae938d7a8f92af376ead4cb5c41d3ced591df08f4fe3dcf0154863e04bf2b66f1737479ed7fe41dac0394c5b3682f26a20ca08cbdaa9418c6631e0f8d14001a97a0b7d55bd7e99845b323974a2eaa39714d77d6b2e866a8e6d51e85c9437f64c5f6e55541e11e281b52694647ef91c3423ff85b4234204c22f08847590295c78b1866dc09ac7386cb74f9bd0ce9e4adc1cadc58a15c5a04000000f40000008b1c0353dba5c68ad5a1114ed62d12b8a701cea32e06cbdba0b6188c9283604978bd2cda48000000630e7a072bca3e36bda3b2f07688830db1e3866422ab88b50093fcf687e8f5dfe22f6504489a1e3d1624ce3193f3f78274216cb54fc49cc3fce0f0d331df0303ded07f00be1e5f753eb606a8358a6c01dac76c45193a0c9da14ae6abc083e71b1e8919e0000000611920014b0f8c97ec7a595859165dd44b1f939ef4003ab346d4476199089388ddedf3a62400000039c9d879671c1a3b34b5f1253f563afb119ff5812530a95db972aec466af6a0176e0116531a6583379ddf8f3bd94bfcfdb9511df64e91e2e415b000001890000011d2b7c7100f1bc4594c9e69903938f63a44af433ebf19261379a1fecfcd675bca57d5fb785000000f5697ff8b435d54c47aab114b6458542e7a66aab8c52317937330c69249c0d94b01e330553dee2cacd17c586808199e2bed0a6d5a67ce6fff3c7be19ef730af15a2ea1528ca3ad4846b4c93ff3e622c7746cdc396dc6f8235774e6ff11eb13e29288f59efea22657cb36a5088defd0b61288f9d21fe93439879e9010c3dc7594f69b7f84dbe166dc0237b19ee9ceecf594c6e354372e88d333eb1e18deaf2f58d2c8965a7892254a11a9a600f2369e2794f72e6ad4a8ca5dcd7f5301061a6bfed7b3e033577a1545cd3da2a8afdad1b9de4e426183dbfc866bd8bc2f8c31d8c806a8cad308c27496103071e4a5ba40db6568c76693a700000064124baa54d72ff6f3b60e77e56b831a03878640fcc929876b41704997641fc964ad2936ad0000003cb2520d341ad576f145ec68b892ca97a32b647bec83befaffd84f98b1e10c99d20854071d8d799e2e50fb4080bc39b873dcfcdef46027a8f99f520cf30000017d000001130dfff4661447e25e3ccc457c536e4dcffaf303e1fd71e8685cf712b2efcf71ae7bc86c34000000eb5b20552890d0fab176d93ae7f9ad05a1a1cb3d59a81b2804d9d0734081d4338cdefab37605f0041029cf1180b4e0a24728b92d419a6be1ad330cd5742d178108f7a43a97ed6aae9b0a35672bc3c5e3f93a23a9337c34d652f18a04904eeb253665af86aa6c38c520125702c2e194ca4817218515f743312a7567b4fc76b9714b3a3d076df8586c35adf245d7e01f484932972e12f4303b3c3ab7c5a1a27361e60c52d179121e7d1a62d3dad44390ab8da9839412c8241ed6e467a9d6ffe8f88df17d5e9e0d2f5d39e5e5d79537f72a974a7d6ee1eef30e747a1e67b7f0ce963b88f2686c0f8e399a15c8a3000000621365ce4d013be86a6326d2e2f491b685a9260d1e4b1e3256b47c7bae042dfb1c909eeee80000003aa9ed76ca890a1b0f075136c2e31556e40266c64fb0cd795fce6399b26873522400b944703a01e603dd593ce22270650da577fe00c5f276503347000000bb00000073256387708fd53c5585b64158d149f7e257df27d3134f2e364223fb8a2c1865434ea63dc80000004b3eb0bbd47917ba988a2a78ba9784e4515872859d84d8240e387d4544738102bc6e846b14c9994404c89f8ae31d61b53957d945d482d9477b301dde2ce0fb7b058fc487bda08873540a0617000000402a7c37bf55d6b9b2d395a40803f71e30d4ba7ea5a97c13b3296d2449f9bcf9b473e04bff00000018086c70fc1d267bdb3fdeb095aceebb7c070225c5d3654b5a00000126000000e22bd0ea1d8255b8b936cf92474afac4a1d9e0a5a3e699ec06837a1ce0aba6dae9a73f0b08000000ba5296be04c2df42002c5a094aa1295b4e12106f53e69c42a2316268111deb9808521f941e2737a7b5fb0d9523e1e45cca1ec3fdf7e16bca587b0c713bbe355d924fef321df5091ae0e5bebd3a9d19f3c569dfd12a8bd61378b5f96797e9c29619a5db67990c32d01f6103d8f7b27c6af008eb348f7fe2aa902a93cb8b1e2af36d6b81c42ee3c40d5b8185fb756a4b888268cd66bea9cfde4422ff6cc409b0ba7a9c979ac6d9456b7fd4040cbf4489a9e84134027ca9bb1984d2dc0000003c2207c7c00d3ee3d7cbc8b2a8247e02f44d4e1047d3fb2538ead1cfa494c28492076966d400000014a3fcdc72692dea1694ebe18cacfddbf05299f96f000001bc0000008a034279fd889442d8577b7727eba8e560c378568e514637066a6931f4e675994d182b075a000000622c0701e114b1b09179342b198b2fc666d71394aa0ed30d23f3d6092d5a4aa70afaf44800c0a69d4076f71670adf4716027a3a23ec13e7e53a4031db877f7ccd99def976da23658c6991d8bd37ba5848a684e54a5362c3bc7e73b69b8b1f6774e741d0000012a0c47d4919ce9c0b012a2e1136afd8bf8947b1e459d9310ce30936388b45e0afa87737ee6000001025f66f008bcab1b37ecdf7511219f19e5c090500a97b7127ebdb1fc2c8adf00c76d7960106f961b16305d2269d07d1a5dda6252e5a0d43d92bc03d3df01b2c01b6f5df978bb4d997577adcc389143f93b02ba941c05fc809af6189688c161661a0e2c532d3ca1636fc5f1f77f29aac76b8be572eb8408f6fee96530f7f67036c34e8743804fd7a665441b0003866c7e0fbff8ce2f46715cf0a4fbcb0026c6002b80a87a2a663f12fad0ba8aeca5fbb3d214c7afec01a2152d5c107d5d07fcbe936fa29972132532e76e696778f1bf06461480712b55a38dfa69b24b29abdc2df3112af8069c516d77d706269889dd7f79a8dc6688477c0bf6dd009e6a64d7a2ced8a2000001e4000000bd122e9fa0d6720c20dade53d060c88d98e8057a90b2a881001209cc7affede955b7e8b36e00000095d82dec8c7ef3d0b859808d1fe230d8cc6489a5ef6f0f78d447f68a9864999f470443ae76e48956734adda21b9980674137c5166cc7d2c65027bcbf2526c60c7591d9f3031ca32d5fbfbed57dfa63498cde78ece700451c355a7846f1324ea357785f6e62082515f3da259f7dda79ce454d979cb2d7dc12fd0acb75cff798381bcf10ea09d108421e02028b0d8bfed7b418e239a1580000011f09b656c062122d185ff31bd52caab36339f205d33fa71137923f663adb3695b69caf612b000000f7c44284d0cc02d20a85691697774823563fbea8ba9428447e1e0bdb2a2c697be0e3ce6e12d1c82066f2787d3a05e716d4424bd8e62e52a5b41ba7819df7ad3895218067e9f4d0edb541fd31f7b66afd014914c6c967cb013a8273d32061e0be1086b38819842fa9505a2bffffde03ac30ef23c99d67b01dd569bcf6b88f895db0c5861b7a76c75a6e0a48ec6438d225eb6cbf7f06a3ec40e065df92f5337d78ef19cd178a5d557d8c41cbe5953ca9ac05ea2d6b053fbf8afe0ca78fa223a0b9eedacdff7dcef2cbc717f3fa3774d5b3fb32603165dd66c608eeff274bb97707022b7b62ff7f05d93ee6eeebdac14b50a730f8d22ed8c1a80000018f0000009a15f9f5da316caa9d2caa7c42401899d351c2a0c96038bc6cea123dd11e6bd6c6bb16d0e100000072f9efeed3bc6610ef1fadbc94dd9823d58da42f925e73c5c1f9b775c216ecc6d4684ec5097262f9977a2b5ee52df861e57351c3764c022c506f3bbda78b0bd9c24af135f1bdd6a36261db634132ecce2c5851999e21e31a5cb09efd8e402fab2c3aed1040137cf2978f4023cff8b24bd25496000000ed1ee285a772eb6526055f6ce1c1c9e64a2cc51f7c9c3aab462f35f38e56b0434c8d707ab6000000c5f8dfe6b26bf755f5c8bea795607c41e1da47676fbadb7405f64ea63e7830f0a4d1795fd12a79443f1187287bdca1ca2b6d54b6565373b89d7c419f7e599eff85716f22843621a25de2674ced4fab78f8ebe17c6f5c8128e34e747d4e47a00762c7f5b1d8bb9826d4a3b014b2ffcdb42dccbc2ff9d12563b6bb1269732ed8e27c92a0f79aad07683979a465b78bdbac7f33be9d5cbbdbf35f5015d74dc4f22557231c0429cbbc06023dc8e6ead796b2bc7e90724fb510ca9abee63b3a369c8e5a76f0253b350000011f000000e4106603b7b7b8ea700faa6b92a2fad9da78af7dbc83c03a1cfb4bc346b4876c1ab87139d1000000bced3d0e03c7ac4f1461527c34025966ec51d1ca2fb728eee52ac9f36d809fb5840b568adf3e87cfae6396f08bfd6111cd9edafc9a725c418fb74332856bcf2935dcbdb635793dd6f17d80543cfcb0f95d468743c19f888482fac1be77a61c9f70d6c4c12128ba8bb79e27bbadd540a4b692cb6d402af9aaa7e0f34e57a4657ad1b67abecd0476e4b1399f30815a3b25581c037ec36ff3d3f2ca4e90d13193553b4513a4e6e8758e03ec4e54ad639a0bc21a75efb8264f20a199de0f3f00000033197694b3e7552d7355ffe5b7fe95de844e2da4f84895529286fc34a653f6dadd84121d2e0000000baf4e95e09fdcd9157ae308", + "txsEffectsHash": "0x0048389757dcf2f6090bf063f2f238422ad8632cb5e3e059f52490fc9b0db7a3", "decodedHeader": { "contentCommitment": { "inHash": "0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c", "outHash": "0x00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb6", "txTreeHeight": 2, - "txsEffectsHash": "0x006451393e911c9f94169c1b498798dcbc99da23e9357ecd3b9b74d28b2a7c57" + "txsEffectsHash": "0x0048389757dcf2f6090bf063f2f238422ad8632cb5e3e059f52490fc9b0db7a3" }, "globalVariables": { "blockNumber": 1, "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0xa23e0eb6a23e0eb6a23e0eb6a23e0eb6a23e0eb6", - "feeRecipient": "0x09cd9129799990baa63ca94680ef6ce915fbd462e83f04298c9f4a4ee339198d" + "coinbase": "0x2ccb2e8d168accbd33493a811caaaa8e0d34571f", + "feeRecipient": "0x0bead1bdad603edb64455a6ef075785703993a76c55788631b525a87a1c7f74a" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -77,8 +77,8 @@ } } }, - "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd130000000010000000000000000000000000000000000000000000000000000000000000002006451393e911c9f94169c1b498798dcbc99da23e9357ecd3b9b74d28b2a7c5700089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001801faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000a23e0eb6a23e0eb6a23e0eb6a23e0eb6a23e0eb609cd9129799990baa63ca94680ef6ce915fbd462e83f04298c9f4a4ee339198d", - "publicInputsHash": "0x004360ce86f229ea4fb62da45c0d9d6f7e17a93ba2a80781ac796ef8556e55e6", + "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd1300000000100000000000000000000000000000000000000000000000000000000000000020048389757dcf2f6090bf063f2f238422ad8632cb5e3e059f52490fc9b0db7a300089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001801faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002ccb2e8d168accbd33493a811caaaa8e0d34571f0bead1bdad603edb64455a6ef075785703993a76c55788631b525a87a1c7f74a", + "publicInputsHash": "0x001f06b7b4d5aa8d17c2a9c7427530af2625cc4013360d74feb2b3207837d262", "numTxs": 4 } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_1.json b/l1-contracts/test/fixtures/mixed_block_1.json index ba775a324568..7f3801c751b1 100644 --- a/l1-contracts/test/fixtures/mixed_block_1.json +++ b/l1-contracts/test/fixtures/mixed_block_1.json @@ -34,27 +34,27 @@ ] }, "block": { - "archive": "0x1d11e9e4f40c998af79ae573ae711e9b2d7c0d9e5b29719bac18102799ae6b97", - "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659000011000000021c000000b0018d4250e9181574171c2828f71858118537adf3b1e5bc766c9e9de316c3420087410eb687410eb687410eb687410eb687410eb687410eb687410eb687410eb687410eb687410eb687410eb687410eb687410eb687410eb687410eb687410eb687410eb687410eb687410eb687410eb620274312d5a3d800957ad8d5056eb151e992628a9689f3239d63f56d26bf0d2426155cf87c85cc8a53760a832bd25bb0d58573c5c83bb11a4e6d7f70716b1ec3000000b01945a9e7849fe79b0f08eee190a7018d3503f2e078acb45130c4c5f04173887c8b410eb68b410eb68b410eb68b410eb68b410eb68b410eb68b410eb68b410eb68b410eb68b410eb68b410eb68b410eb68b410eb68b410eb68b410eb68b410eb68b410eb68b410eb68b410eb68b410eb6077b5c368ffa09fdd51759d71d7c0270712abf2ee3977a6d1da827e6616f539f0d69761c36dbfe8793128b8543dfaccf5d1dd06a15493863ceb1b1e9ac1b653e000000b00099c30b3ef619984ea56fe3a8b452abbc9c4f84c5ba3b9ab108f8697c23cef78f410eb68f410eb68f410eb68f410eb68f410eb68f410eb68f410eb68f410eb68f410eb68f410eb68f410eb68f410eb68f410eb68f410eb68f410eb68f410eb68f410eb68f410eb68f410eb68f410eb61f33c3cd2b81dc24cd04208fb70aabec20f7041baa5e7247e1ce4ff38c1f9a1b2521ddb2d263d0ae8aff523ddd6e564b0cea1556dc10303e92d7d9f6d6cbabba0000021c000000b018522aa1da7debbf4692369c4242fc276c6894718c813375752f2076a6d4157393410eb693410eb693410eb693410eb693410eb693410eb693410eb693410eb693410eb693410eb693410eb693410eb693410eb693410eb693410eb693410eb693410eb693410eb693410eb693410eb60687dcf0e5d80e220ca0a191cf17fd0aa88f60bff76bf9916212826cc6cfe0960c75f6d68cba02abca9bd33ff57ba769948271fb291db788131c0c70117bf235000000b0300a92387605bde63e7efd54dbd1a5a31c34d95e53482b5039554883d1845bef97410eb697410eb697410eb697410eb697410eb697410eb697410eb697410eb697410eb697410eb697410eb697410eb697410eb697410eb697410eb697410eb697410eb697410eb697410eb697410eb61e404487815fe049048d684a68a6a686585ba5acbe32f16c2638aa79f1802712242e5e6d2841d4d2c28899f88f0a50e5444eb6e7efe4af62d742347d3c2c38b1000000b0175eab5c305befe37e1b7e56f3def6c1a3cd3602a055b299b9997afd0c34a26a9b410eb69b410eb69b410eb69b410eb69b410eb69b410eb69b410eb69b410eb69b410eb69b410eb69b410eb69b410eb69b410eb69b410eb69b410eb69b410eb69b410eb69b410eb69b410eb69b410eb605945dab3bb612464429e94c80b3f7a4dff402510b4078b5a67cdcf32c306d8d0b827790e29806d002251afaa717a203cbe7138c3cf236ac578666f676dc7f2c0000021c000000b02f1712f2cbe3c20a7608450f8d6da03d53997aef671caa747dbfa30a36e4e8e69f410eb69f410eb69f410eb69f410eb69f410eb69f410eb69f410eb69f410eb69f410eb69f410eb69f410eb69f410eb69f410eb69f410eb69f410eb69f410eb69f410eb69f410eb69f410eb69f410eb61d4cc541d73de46d3c16b0051a42a1208fc0473dd20770906aa3050056e0b409233adf277e1fd8f6fa11e1b340a64b7f7bb3587903b92e871bac8f03a18cc5a8000000b0166b2c168639f407b5a4c611a57af15bdb31d793b42a31bdfe03d58371952f61a3410eb6a3410eb6a3410eb6a3410eb6a3410eb6a3410eb6a3410eb6a3410eb6a3410eb6a3410eb6a3410eb6a3410eb6a3410eb6a3410eb6a3410eb6a3410eb6a3410eb6a3410eb6a3410eb6a3410eb604a0de659194166a7bb33107324ff23f1758a3e21f14f7d9eae737799190fa840a8ef84b38760af439ae62b558b39c9e034bb51d50c6b5d09bf0c17cdc3d0c23000000b02e2393ad21c1c62ead918cca3f099ad78afe1c807af12998c229fd909c4575dda7410eb6a7410eb6a7410eb6a7410eb6a7410eb6a7410eb6a7410eb6a7410eb6a7410eb6a7410eb6a7410eb6a7410eb6a7410eb6a7410eb6a7410eb6a7410eb6a7410eb6a7410eb6a7410eb6a7410eb61c5945fc2d1be891739ff7bfcbde9bbac724e8cee5dbefb4af0d5f86bc41410022475fe1d3fddd1b319b296df2424619b317fa0a178dadab6016e98a06ed529f0000021c000000b01577acd0dc17f82bed2e0dcc5716ebf612967924c7feb0e2426e3009d6f5bc58ab410eb6ab410eb6ab410eb6ab410eb6ab410eb6ab410eb6ab410eb6ab410eb6ab410eb6ab410eb6ab410eb6ab410eb6ab410eb6ab410eb6ab410eb6ab410eb6ab410eb6ab410eb6ab410eb6ab410eb603ad5f1fe7721a8eb33c78c1e3ebecd94ebd457332e976fe2f5191fff6f1877b099b79058e540f187137aa700a4f97383ab056ae649b34f4e05b1c03419d991a000000b02d301467779fca52e51ad484f0a59571c262be118ec5a8bd0694581701a602d4af410eb6af410eb6af410eb6af410eb6af410eb6af410eb6af410eb6af410eb6af410eb6af410eb6af410eb6af410eb6af410eb6af410eb6af410eb6af410eb6af410eb6af410eb6af410eb6af410eb61b65c6b682f9ecb5ab293f7a7d7a9654fe898a5ff9b06ed8f377ba0d21a1cdf72153e09c29dbe13f69247128a3de40b3ea7c9b9b2b622ccfa48144106c4ddf96000000b014842d8b31f5fc5024b7558708b2e69049fb1ab5dbd3300686d88a903c56494fb3410eb6b3410eb6b3410eb6b3410eb6b3410eb6b3410eb6b3410eb6b3410eb6b3410eb6b3410eb6b3410eb6b3410eb6b3410eb6b3410eb6b3410eb6b3410eb6b3410eb6b3410eb6b3410eb6b3410eb602b9dfda3d501eb2eac5c07c9587e7738621e70446bdf62273bbec865c52147208a7f9bfe432133ca8c0f22abbeb91d27214f83f786fb41924c57689a6fe26110000021c000000b02c3c9521cd7dce771ca41c3fa241900bf9c75fa2a29a27e14afeb29d67068fcbb7410eb6b7410eb6b7410eb6b7410eb6b7410eb6b7410eb6b7410eb6b7410eb6b7410eb6b7410eb6b7410eb6b7410eb6b7410eb6b7410eb6b7410eb6b7410eb6b7410eb6b7410eb6b7410eb6b7410eb61a724770d8d7f0d9e2b287352f1690ef35ee2bf10d84edfd37e2149387025aee206061567fb9e563a0adb8e3557a3b4e21e13d2c3f36abf3e8eb9e96d1ae6c8d000000b01390ae4587d400745c409d41ba4ee12a815fbc46efa7af2acb42e516a1b6d646bb410eb6bb410eb6bb410eb6bb410eb6bb410eb6bb410eb6bb410eb6bb410eb6bb410eb6bb410eb6bb410eb6bb410eb6bb410eb6bb410eb6bb410eb6bb410eb6bb410eb6bb410eb6bb410eb6bb410eb601c66094932e22d7224f08374723e20dbd8688955a927546b826470cc1b2a16907b47a7a3a101760e04a39e56d878c6ca97999d08c44333d692fd1100c5eb308000000b02b4915dc235bd29b542d63fa53dd8aa6312c0133b66ea7058f690d23cc671cc2bf410eb6bf410eb6bf410eb6bf410eb6bf410eb6bf410eb6bf410eb6bf410eb6bf410eb6bf410eb6bf410eb6bf410eb6bf410eb6bf410eb6bf410eb6bf410eb6bf410eb6bf410eb6bf410eb6bf410eb6197ec82b2eb5f4fe1a3bceefe0b28b896d52cd8221596d217c4c6f19ec62e7e51f6ce210d597e987d837009e071635e85945debd530b2b182d55f91d370ef9840000021c000000b0129d2effddb2049893c9e4fc6beadbc4b8c45dd8037c2e4f0fad3f9d0717633dc3410eb6c3410eb6c3410eb6c3410eb6c3410eb6c3410eb6c3410eb6c3410eb6c3410eb6c3410eb6c3410eb6c3410eb6c3410eb6c3410eb6c3410eb6c3410eb6c3410eb6c3410eb6c3410eb6c3410eb600d2e14ee90c26fb59d84ff1f8bfdca7f4eb2a266e66f46afc90a19327132e6006c0fb348fee1b8517d381a01f238706e0de3b61a018b261ad9a2b9671bf3fff000000b02a5596967939d6bf8bb6abb5057985406890a2c4ca432629d3d367aa31c7a9b9c7410eb6c7410eb6c7410eb6c7410eb6c7410eb6c7410eb6c7410eb6c7410eb6c7410eb6c7410eb6c7410eb6c7410eb6c7410eb6c7410eb6c7410eb6c7410eb6c7410eb6c7410eb6c7410eb6c7410eb6188b48e58493f92251c516aa924e8623a4b76f13352dec45c0b6c9a051c374dc1e7962cb2b75edac0fc04858b8b2308290aa804e66dfaa3c71c053a39c6f867b000000b011a9afba339008bccb532cb71d86d65ef028ff691750ad7354179a236c77f034cb410eb6cb410eb6cb410eb6cb410eb6cb410eb6cb410eb6cb410eb6cb410eb6cb410eb6cb410eb6cb410eb6cb410eb6cb410eb6cb410eb6cb410eb6cb410eb6cb410eb6cb410eb6cb410eb6cb410eb63043b07c201bcb4949b1dd632bdd2f9f5483b3fffbf4e42084dcf1ad7c73bb5805cd7beee5cc1fa94f5cc95ad0bf81a11842dcf2b3ed3185f204861cd71fccf60000021c000000b029621750cf17dae3c33ff36fb7157fda9ff54455de17a54e183dc230972836b0cf410eb6cf410eb6cf410eb6cf410eb6cf410eb6cf410eb6cf410eb6cf410eb6cf410eb6cf410eb6cf410eb6cf410eb6cf410eb6cf410eb6cf410eb6cf410eb6cf410eb6cf410eb6cf410eb6cf410eb61797c99fda71fd46894e5e6543ea80bddc1c10a449026b6a05212426b72401d31d85e3858153f1d0474990136a4e2b1cc80f21df7ab42960b62aae2a01d01372000000b010b63074896e0ce102dc7471cf22d0f9278da0fa2b252c979881f4a9d1d87d2bd3410eb6d3410eb6d3410eb6d3410eb6d3410eb6d3410eb6d3410eb6d3410eb6d3410eb6d3410eb6d3410eb6d3410eb6d3410eb6d3410eb6d3410eb6d3410eb6d3410eb6d3410eb6d3410eb6d3410eb62f50313675f9cf6d813b251ddd792a398be855910fc96344c9474c33e1d4484f04d9fca93baa23cd86e61115825b7c3b4fa77e83c7c1b0aa366ee0a33c8059ed000000b0286e980b24f5df07fac93b2a68b17a74d759e5e6f1ec24725ca81cb6fc88c3a7d7410eb6d7410eb6d7410eb6d7410eb6d7410eb6d7410eb6d7410eb6d7410eb6d7410eb6d7410eb6d7410eb6d7410eb6d7410eb6d7410eb6d7410eb6d7410eb6d7410eb6d7410eb6d7410eb6d7410eb616a44a5a3050016ac0d7a61ff5867b581380b2355cd6ea8e498b7ead1c848eca1c92643fd731f5f47ed2d7ce1bea25b6ff73c3708e88a884fa9508b06730a0690000021c000000b00fc2b12edf4c11053a65bc2c80becb935ef2428b3ef9abbbdcec4f3037390a22db410eb6db410eb6db410eb6db410eb6db410eb6db410eb6db410eb6db410eb6db410eb6db410eb6db410eb6db410eb6db410eb6db410eb6db410eb6db410eb6db410eb6db410eb6db410eb6db410eb62e5cb1f0cbd7d391b8c46cd88f1524d3c34cf722239de2690db1a6ba4734d54603e67d63918827f1be6f58d033f776d5870c2014db962fce7ad93b29a1e0e6e4000000b0277b18c57ad3e32c325282e51a4d750f0ebe877805c0a396a112773d61e9509edf410eb6df410eb6df410eb6df410eb6df410eb6df410eb6df410eb6df410eb6df410eb6df410eb6df410eb6df410eb6df410eb6df410eb6df410eb6df410eb6df410eb6df410eb6df410eb6df410eb615b0cb14862e058ef860eddaa72275f24ae553c670ab69b28df5d93381e51bc11b9ee4fa2d0ffa18b65c1f88cd86205136d86501a25d27a93eff6336cc912d60000000b00ecf31e9352a152971ef03e7325ac62d9656e41c52ce2ae02156a9b69c999719e3410eb6e3410eb6e3410eb6e3410eb6e3410eb6e3410eb6e3410eb6e3410eb6e3410eb6e3410eb6e3410eb6e3410eb6e3410eb6e3410eb6e3410eb6e3410eb6e3410eb6e3410eb6e3410eb6e3410eb62d6932ab21b5d7b5f04db49340b11f6dfab198b33772618d521c0140ac95623d02f2fe1de7662c15f5f8a08ae593716fbe70c1a5ef6aaef2bf4395b0074173db00000cc2000002320000011314bd4bcedc0c09b32fea359558be708c8249f557847fe8d6d26033b9e745a8b8e6410eb6000000ebe8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410eb6e8410e000001172c75b3657793dbda27d6fc4df24d1a0832163a444b46e0b196865bc711f5ef34ea410eb6000000efec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410eb6ec410e000002420000011b13c9cc8931ea0dd767737d500a5a6b26b9ae96e8985467fb16ca8e404ca635afee410eb6000000f3f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410eb6f0410e0000011f2b82341fcd71dffe5f604408a3e914a2697adbd55f1b5fd5daf0b64d77567c2bf2410eb6000000f7f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410eb6f4410e000002520000012312d64d4387c811fb9efcc50abbf665c0f1133879ac28e71f5b34e8c6b206c2a6f6410eb6000000fbf8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410eb6f8410e000001272a8eb4da234fe42296e98bc355850f3ca0df7d6672efdefa1f5b10d3dcb70922fa410eb6000000fffc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410eb6fc410e000001620000012b11e2cdfddda6161fd6860cc56d92605b2877da0abffd66439f9f434d17674f9dfe410eb60000010300420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420eb600420e0000002f2a02bfaa4936733a7d8dfc0d2758c4586ea3a2a143cbfe699401cc90b740a34a02420eb60000000704420eb604420e00000072000000331156d8ce038ca537bd2a7d0f3f661576f63bff4590d985b31445ff09f1f0e9c506420eb60000000b08420eb608420eb608420e00000037290f40649f14775eb51743c7d8f4bef2a608443257a07d8dd86c27171ca130410a420eb60000000f0c420eb60c420eb60c420eb60c420e000000820000003b10635988596aa95bf4b3c4c9f10210112da0a0d6a4ae04d758b05990575176bc0e420eb60000001310420eb610420eb610420eb610420eb610420e0000003f281bc11ef4f27b82eca08b828a90b98cdd6ce5c36b74fcb21cd6819d8201bd3812420eb60000001714420eb614420eb614420eb614420eb614420eb614420e00000092000000430f6fda42af48ad802c3d0c84a29e0aab65054267b88283fb9d1ab416bcb203b316420eb60000001b18420eb618420eb618420eb618420eb618420eb618420eb618420e00000047272841d94ad07fa72429d33d3c2cb42714d187547f497bd66140dc23e7624a2f1a420eb60000001f1c420eb61c420eb61c420eb61c420eb61c420eb61c420eb61c420eb61c420e000000a20000004b0e7c5afd0526b1a463c6543f543a05459c69e3f8cc57031fe1850e9d221290aa1e420eb60000002320420eb620420eb620420eb620420eb620420eb620420eb620420eb620420eb620420e0000004f2634c293a0ae83cb5bb31af7edc8aec14c3628e5931dfafaa5ab36aa4cc2d72622420eb60000002724420eb624420eb624420eb624420eb624420eb624420eb624420eb624420eb624420eb624420e000000b2000000530d88dbb75b04b5c89b4f9bfa05d5ffdfd3ce8589e02b824425ef692387731da126420eb60000002b28420eb628420eb628420eb628420eb628420eb628420eb628420eb628420eb628420eb628420eb628420e000000572541434df68c87ef933c62b29f64a95b839aca76a6f27a1eea159130b223641d2a420eb60000002f2c420eb62c420eb62c420eb62c420eb62c420eb62c420eb62c420eb62c420eb62c420eb62c420eb62c420eb62c420e000000c20000005b0c955c71b0e2b9ecd2d8e3b4b771fa7a0b33271af40001686a59c3a9ecd3aa982e420eb60000003330420eb630420eb630420eb630420eb630420eb630420eb630420eb630420eb630420eb630420eb630420eb630420eb630420e0000005f244dc4084c6a8c13cac5aa6d5100a3f5baff6c07bac6f9432e7febb71783f11432420eb60000003734420eb634420eb634420eb634420eb634420eb634420eb634420eb634420eb634420eb634420eb634420eb634420eb634420eb634420e000000d2000000630ba1dd2c06c0be110a622b6f690df5144297c8ac07d4808caec41e305234378f36420eb60000003b38420eb638420eb638420eb638420eb638420eb638420eb638420eb638420eb638420eb638420eb638420eb638420eb638420eb638420eb638420e00000067235a44c2a2489038024ef228029c9e8ff2640d98ce9b786772ea463d7ce47e0b3a420eb60000003f3c420eb63c420eb63c420eb63c420eb63c420eb63c420eb63c420eb63c420eb63c420eb63c420eb63c420eb63c420eb63c420eb63c420eb63c420eb63c420e00380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f0000000000000000000000000000000000000000000000000000000000000699000011000000021c000000b01c78ab9751449fd27bdd08348dd4eecb3dd59deeb0be3995064b16c09798f9633f420eb63f420eb63f420eb63f420eb63f420eb63f420eb63f420eb63f420eb63f420eb63f420eb63f420eb63f420eb63f420eb63f420eb63f420eb63f420eb63f420eb63f420eb63f420eb63f420eb60aae5de65c9ec23541eb732a1aa9efae79fc6a3d1ba8ffb0f32e78b6b794c486109c77cc0380b6beffe6a4d8410d9a0d65ef7b784d5abda7a43802ba0240d625000000b003ccc4bb0b9ad1cfbb798936a5e23fe9c56dfa92fdcbc0de868f4939d2493fde43420eb643420eb643420eb643420eb643420eb643420eb643420eb643420eb643420eb643420eb643420eb643420eb643420eb643420eb643420eb643420eb643420eb643420eb643420eb643420eb62266c57cf826945c39d839e2b438992a29c8af29e26ff78bb754a0c3e2450b022854df629f0888e5f7d36b90da9c438915bbc0651421b582685e2ac72cf11ca1000000b01b852c51a722a3f6b3664fef3f70e965753a3f7fc492b8b94ab57146fcf9865a47420eb647420eb647420eb647420eb647420eb647420eb647420eb647420eb647420eb647420eb647420eb647420eb647420eb647420eb647420eb647420eb647420eb647420eb647420eb647420eb609badea0b27cc6597974bae4cc45ea48b1610bce2f7d7ed53798d33d1cf5517d0fa8f886595ebae3376fec92f2a994a79d541d09612f3ccbe8a25d4067a1631c0000021c000000b002d945756178d5f3f302d0f1577e3a83fcd29c2411a04002caf9a3c037a9ccd54b420eb64b420eb64b420eb64b420eb64b420eb64b420eb64b420eb64b420eb64b420eb64b420eb64b420eb64b420eb64b420eb64b420eb64b420eb64b420eb64b420eb64b420eb64b420eb64b420eb6217346374e0498807161819d65d493c4612d50baf64476affbbefb4a47a597f92761601cf4e68d0a2f5cb34b8c383e234d2061f627f634a6acc8854d9251a998000000b01a91ad0bfd00a81aeaef97a9f10ce3ffac9ee110d86737dd8f1fcbcd625a13514f420eb64f420eb64f420eb64f420eb64f420eb64f420eb64f420eb64f420eb64f420eb64f420eb64f420eb64f420eb64f420eb64f420eb64f420eb64f420eb64f420eb64f420eb64f420eb64f420eb608c75f5b085aca7db0fe029f7de1e4e2e8c5ad5f4351fdf97c032dc38255de740eb57940af3cbf076ef9344da4458f41d4b8be9a7503bbf02d0cb7c6cd01f013000000b001e5c62fb756da182a8c18ac091a351e34373db52574bf270f63fe469d0a59cc53420eb653420eb653420eb653420eb653420eb653420eb653420eb653420eb653420eb653420eb653420eb653420eb653420eb653420eb653420eb653420eb653420eb653420eb653420eb653420eb6207fc6f1a3e29ca4a8eac95817708e5e9891f24c0a18f5d4402955d0ad0624f0266de0d74ac4912e66e5fb063dd438bd848503873bcab3caf132dfd3f7b2368f0000021c000000b0199e2dc652deac3f2278df64a2a8de99e40382a1ec3bb701d38a2653c7baa04857420eb657420eb657420eb657420eb657420eb657420eb657420eb657420eb657420eb657420eb657420eb657420eb657420eb657420eb657420eb657420eb657420eb657420eb657420eb657420eb607d3e0155e38cea1e8874a5a2f7ddf7d202a4ef057267d1dc06d8849e7b66b6b0dc1f9fb051ac32ba6827c0855e189dc0c1d602b88d83b147177124d32627d0a000000b000f246ea0d34de3c62156066bab62fb86b9bdf4639493e4b53ce58cd026ae6c35b420eb65b420eb65b420eb65b420eb65b420eb65b420eb65b420eb65b420eb65b420eb65b420eb65b420eb65b420eb65b420eb65b420eb65b420eb65b420eb65b420eb65b420eb65b420eb65b420eb61f8c47abf9c0a0c8e0741112c90c88f8cff693dd1ded74f88493b0571266b1e7257a6191a0a295529e6f42c0ef703357bbe9a5184f9f32ef359d3a5a5d12c386000000b018aaae80a8bcb0635a02271f5444d9341b6824330010362617f480da2d1b2d3f5f420eb65f420eb65f420eb65f420eb65f420eb65f420eb65f420eb65f420eb65f420eb65f420eb65f420eb65f420eb65f420eb65f420eb65f420eb65f420eb65f420eb65f420eb65f420eb65f420eb606e060cfb416d2c620109214e119da17578ef0816afafc4204d7e2d04d16f8620cce7ab55af8c74fde0bc3c3077d8476438201bc9cacba38b5e16cd397c30a010000021c000000b0306316174444828a51eeedd7edd382afcb34691fc6d72e00dc1aa8e757cb73bb63420eb663420eb663420eb663420eb663420eb663420eb663420eb663420eb663420eb663420eb663420eb663420eb663420eb663420eb663420eb663420eb663420eb663420eb663420eb663420eb61e98c8664f9ea4ed17fd58cd7aa88393075b356e31c1f41cc8fe0add77c73ede2486e24bf6809976d5f88a7ba10c2df1f34e46a96373b2137a0794e0c273507d000000b017b72f3afe9ab487918b6eda05e0d3ce52ccc5c413e4b54a5c5edb60927bba3667420eb667420eb667420eb667420eb667420eb667420eb667420eb667420eb667420eb667420eb667420eb667420eb667420eb667420eb667420eb667420eb667420eb667420eb667420eb667420eb605ece18a09f4d6ea5799d9cf92b5d4b18ef392127ecf7b6649423d56b27785590bdafb6fb0d6cb7415950b7db9197f107ae6a34db081395cfa4bc759fd2396f8000000b02f6f96d19a2286ae897835929f6f7d4a02990ab0daabad252085036dbd2c00b26b420eb66b420eb66b420eb66b420eb66b420eb66b420eb66b420eb66b420eb66b420eb66b420eb66b420eb66b420eb66b420eb66b420eb66b420eb66b420eb66b420eb66b420eb66b420eb66b420eb61da54920a57ca9114f86a0882c447e2d3ebfd6ff459673410d686563dd27cbd5239363064c5e9d9b0d81d23652a8288c2ab2e83a77483137be71ef6727d3dd740000021c000000b016c3aff55478b8abc914b694b77cce688a31675527b9346ea0c935e6f7dc472d6f420eb66f420eb66f420eb66f420eb66f420eb66f420eb66f420eb66f420eb66f420eb66f420eb66f420eb66f420eb66f420eb66f420eb66f420eb66f420eb66f420eb66f420eb66f420eb66f420eb604f962445fd2db0e8f23218a4451cf4bc65833a392a3fa8a8dac97dd17d812500ae77c2a06b4cf984d1e53386ab579aab24b44dec455b8813eb621e0628423ef000000b02e7c178bf0008ad2c1017d4d510b77e439fdac41ee802c4964ef5df4228c8da973420eb673420eb673420eb673420eb673420eb673420eb673420eb673420eb673420eb673420eb673420eb673420eb673420eb673420eb673420eb673420eb673420eb673420eb673420eb673420eb61cb1c9dafb5aad35870fe842dde078c776247890596af26551d2bfea428858cc229fe3c0a23ca1bf450b19f104442326621789cb8b1cb05c02dc49ed8d346a6b000000b015d030afaa56bcd0009dfe4f6918c902c19608e63b8db392e533906d5d3cd42477420eb677420eb677420eb677420eb677420eb677420eb677420eb677420eb677420eb677420eb677420eb677420eb677420eb677420eb677420eb677420eb677420eb677420eb677420eb677420eb60405e2feb5b0df32c6ac6944f5edc9e5fdbcd534a67879aed216f2637d389f4709f3fce45c92d3bc84a79af31c517444e9afe66fd82a37a583207c66c7e4b0e60000021c000000b02d88984645de8ef6f88ac50802a7727e71624dd30254ab6da959b87a87ed1aa07b420eb67b420eb67b420eb67b420eb67b420eb67b420eb67b420eb67b420eb67b420eb67b420eb67b420eb67b420eb67b420eb67b420eb67b420eb67b420eb67b420eb67b420eb67b420eb67b420eb61bbe4a955138b159be992ffd8f7c7361ad891a216d3f7189963d1a70a7e8e5c321ac647af81aa5e37c9461abb5e01dc0997c2b5c9ef12f804746a473f294f762000000b014dcb16a0034c0f43827460a1ab4c39cf8faaa774f6232b7299deaf3c29d611b7f420eb67f420eb67f420eb67f420eb67f420eb67f420eb67f420eb67f420eb67f420eb67f420eb67f420eb67f420eb67f420eb67f420eb67f420eb67f420eb67f420eb67f420eb67f420eb67f420eb6031263b90b8ee356fe35b0ffa789c480352176c5ba4cf8d316814ce9e2992c3e09007d9eb270d7e0bc30e2adcded6edf21148800ebfeb6c9c78ad6ed2d453ddd000000b02c9519009bbc931b30140cc2b4436d18a8c6ef6416292a91edc41300ed4da79783420eb683420eb683420eb683420eb683420eb683420eb683420eb683420eb683420eb683420eb683420eb683420eb683420eb683420eb683420eb683420eb683420eb683420eb683420eb683420eb61acacb4fa716b57df62277b841186dfbe4edbbb28113f0addaa774f70d4972ba20b8e5354df8aa07b41da966677c185ad0e0ccedb2c5aea48bb0fefa57f584590000021c000000b013e932245612c5186fb08dc4cc50be37305f4c086336b1db6e08457a27fdee1287420eb687420eb687420eb687420eb687420eb687420eb687420eb687420eb687420eb687420eb687420eb687420eb687420eb687420eb687420eb687420eb687420eb687420eb687420eb687420eb6021ee473616ce77b35bef8ba5925bf1a6c861856ce2177f75aeba77047f9b935080cfe59084edc04f3ba2a687f89697958792991ffd335ee0bf5317392a5cad4000000b02ba199baf19a973f679d547d65df67b2e02b90f529fda9b6322e6d8752ae348e8b420eb68b420eb68b420eb68b420eb68b420eb68b420eb68b420eb68b420eb68b420eb68b420eb68b420eb68b420eb68b420eb68b420eb68b420eb68b420eb68b420eb68b420eb68b420eb68b420eb619d74c09fcf4b9a22dabbf72f2b468961c525d4394e86fd21f11cf7d72a9ffb11fc565efa3d6ae2beba6f121191812f508456e7ec69a2dc8d01b5980bd561150000000b012f5b2deabf0c93ca739d57f7decb8d167c3ed99770b30ffb272a0008d5e7b098f420eb68f420eb68f420eb68f420eb68f420eb68f420eb68f420eb68f420eb68f420eb68f420eb68f420eb68f420eb68f420eb68f420eb68f420eb68f420eb68f420eb68f420eb68f420eb68f420eb6012b652db74aeb9f6d4840750ac1b9b4a3eab9e7e1f5f71b9f5601f6ad5a462c07197f135e2ce0292b437223312564138fddcb2313a7b512505f8bf9f80657cb0000021c000000b02aae1a7547789b639f269c38177b624d179032863dd228da7698c80db80ec18593420eb693420eb693420eb693420eb693420eb693420eb693420eb693420eb693420eb693420eb693420eb693420eb693420eb693420eb693420eb693420eb693420eb693420eb693420eb693420eb618e3ccc452d2bdc66535072da450633053b6fed4a8bceef6637c2a03d80a8ca81ed1e6a9f9b4b250233038dbcab40d8f3faa100fda6eaced1485b40722b69e47000000b01202339901cecd60dec31d3a2f88b36b9f288f2a8adfb023f6dcfa86f2bf080097420eb697420eb697420eb697420eb697420eb697420eb697420eb697420eb697420eb697420eb697420eb697420eb697420eb697420eb697420eb697420eb697420eb697420eb697420eb697420eb60037e5e80d28efc3a4d1882fbc5db44edb4f5b78f5ca763fe3c05c7d12bad3230625ffcdb40ae44d62ccb9dde2c15eadc7426cb4277c343694c9e6805d66e4c2000000b029ba9b2f9d569f87d6afe3f2c9175ce74ef4d41751a6a7febb0322941d6f4e7c9b420eb69b420eb69b420eb69b420eb69b420eb69b420eb69b420eb69b420eb69b420eb69b420eb69b420eb69b420eb69b420eb69b420eb69b420eb69b420eb69b420eb69b420eb69b420eb69b420eb617f04d7ea8b0c1ea9cbe4ee855ec5dca8b1ba065bc916e1aa7e6848a3d6b199f1dde67644f92b6745ab980967c500829770eb1a0ee432c1158f00e8d88172b3e00001592000001a2000000cb2fa8b5154438941194ab15a0ef7b07463ae7e552835865f56c0cac97681b601b9e420eb6000000a3a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420eb6a0420e000000cf16fcce38fe8ec60ed44796a307885864c28041f6d065ed3eec50df10a2cba696a2420eb6000000a7a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420eb6a4420e000001b2000000d32eb535cf9a169835cc345d5ba11701e0724c86e3972ce519b077071dcd7bed12a6420eb6000000aba8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420eb6a8420e000000d716094ef3546cca330bd0de5db92452fef9e4e387e43a6c6330bb3997082c338daa420eb6000000afac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420eb6ac420e000001c2000000db2dc1b689eff49c5a03bda51652b2fc7aa9b12874ab01643df4e161a432dc7a09ae420eb6000000b3b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420eb6b0420e000000df1515cfadaa4ace57435a26186ac04d9931498518f80eeb877525941d6d8cc084b2420eb6000000b7b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420eb6b4420e000001d2000000e32cce374445d2a07e3b46ecd1044ef714e115ca05bed5e362394bbc2a983d0700b6420eb6000000bbb8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420eb6b8420e000000e7142250680028d27b7ae36dd31c5c483368ae26aa0be36aabb98feea3d2ed4d7bba420eb6000000bfbc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420eb6bc420e000001e2000000eb2bdab7fe9bb0a4a272d0348bb5eaf1af187a6b96d2aa62867db616b0fd9d93f7be420eb6000000c3c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420eb6c0420e000000ef132ed1225606d69fb26cb58dcdf842cda012c83b1fb7e9cffdfa492a384dda72c2420eb6000000c7c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420eb6c4420e000001f2000000f32ae738b8f18ea8c6aa597c466786ec494fdf0d27e67ee1aac220713762fe20eec6420eb6000000cbc8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420eb6c8420e000000f7123b51dcabe4dac3e9f5fd487f943d67d77769cc338c68f44264a3b09dae6769ca420eb6000000cfcc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420eb6cc420e00000202000000fb29f3b973476caceae1e2c4011922e6e38743aeb8fa5360cf068acbbdc85eade5ce420eb6000000d3d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420eb6d0420e000000ff1147d29701c2dee8217f4503313038020edc0b5d4760e81886cefe37030ef460d2420eb6000000d7d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420eb6d4420e000002120000010329003a2d9d4ab10f196c0bbbcabee17dbea8504a0e27dff34af526442dbf3adcd6420eb6000000dbd8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420eb6d8420e000001071054535157a0e30c59088cbde2cc329c4640acee5b35673ccb3958bd686f8157da420eb6000000dfdc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420eb6dc420e000002220000010b280cbae7f328b53350f553767c5adc17f60cf1db21fc5f178f5f80ca931fc7d3de420eb6000000e3e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420eb6e0420e0000010f0f60d40bad7ee7309091d47894682d367da54e7f6f09e6610fa3b343cdd00e4ee2420eb6000000e7e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420eb6e4420e000002320000011327193ba24906b957887e9b312df6d6b22d71936c35d0de3bd3c9db50f88054cae6420eb6000000ebe8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420eb6e8420e000001170e6d54c6035ceb54c81b1c33460427d0b509f01082de6585540e0dca33309b45ea420eb6000000efec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420eb6ec420e000002420000011b2625bc5c9ee4bd7bc007e2ebdf92d14c64d634fd49a55d60183435d75de0e1c1ee420eb6000000f3f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420eb6f0420e0000011f0d79d580593aef78ffa463edf7a0226aec6e91a196b2e4a9987868509891283cf2420eb6000000f7f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420eb6f4420e003800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d9000011000000021c000000b006983c550836ff13793279fa82d872a637e021f778d5a5d72bd938d3b345a394f7420eb6f7420eb6f7420eb6f7420eb6f7420eb6f7420eb6f7420eb6f7420eb6f7420eb6f7420eb6f7420eb6f7420eb6f7420eb6f7420eb6f7420eb6f7420eb6f7420eb6f7420eb6f7420eb6f7420eb625323d16f4c2c19ff7912aa6912ecbe69c3ad68e5d79dc845c9e905dc3416eb82b2056fc9ba4b629b58c5c54b7927645882de7c98f2b9a7b0da81a610ded8057000000b01e50a3eba3bed13a711f40b31c671c21e7ac66e43f9c9db1efff60e0ddf5ea10fb420eb6fb420eb6fb420eb6fb420eb6fb420eb6fb420eb6fb420eb6fb420eb6fb420eb6fb420eb6fb420eb6fb420eb6fb420eb6fb420eb6fb420eb6fb420eb6fb420eb6fb420eb6fb420eb6fb420eb60c86563aaf18f39d372daba8a93c1d0523d33332aa8763cddce2c2d6fdf1b5331274702055fae826f528dd56cf9fc7640fc6446ddc3921c48dec4cda489dc6d2000000b0060c47252e1d8e2b5fd6ea4454ac27c205a4473249b1c546a07ff4908dcf3dbcff420eb6ff420eb6ff420eb6ff420eb6ff420eb6ff420eb6ff420eb6ff420eb6ff420eb6ff420eb6ff420eb6ff420eb6ff420eb6ff420eb6ff420eb6ff420eb6ff420eb6ff420eb6ff420eb6ff420eb6243ebdd14aa0c5c42f1a726142cac680d39f781f714e5ba8a108eae428a1fbaf2a2cd7b6f182ba4ded15a40f692e70dfbf92895aa300199f521274e7734e0d4e0000021c000000b01dc4aebbc9a5605257c3b0fcee3ad13db5708c1f1078bd2164a61c9db87f843803430eb603430eb603430eb603430eb603430eb603430eb603430eb603430eb603430eb603430eb603430eb603430eb603430eb603430eb603430eb603430eb603430eb603430eb603430eb603430eb60bfa610ad4ff82b51dd21bf27b0fd220f197586d7b63833d51897e93d87b4f5b11e87af07be1773edbcd4da0a1737c7fdd8a69a8ad15413402930897232760fa000000b00518c7df83fb924f976031ff0648225c3d08e8c35d86446ae4ea4f16f32fcab307430eb607430eb607430eb607430eb607430eb607430eb607430eb607430eb607430eb607430eb607430eb607430eb607430eb607430eb607430eb607430eb607430eb607430eb607430eb607430eb623b2c8a1708754dc15bee2ab149e7b9ca1639d5a422a7b1815afa6a1032b95d729a0e28717694965d3ba14593b0225fb8d56ae9573dc390ec6b930a44dd7a776000000b01cd12f761f8364768f4cf8b79fd6cbd7ecd52db0244d3c45a91077241de0112f0b430eb60b430eb60b430eb60b430eb60b430eb60b430eb60b430eb60b430eb60b430eb60b430eb60b430eb60b430eb60b430eb60b430eb60b430eb60b430eb60b430eb60b430eb60b430eb60b430eb60b06e1c52add86d9555b63ad2cabccbb28fbf9fe8f38026195f3d91a3ddbdc5210f4fbaad1bf7b631356955b530f771a14ef0b39c0e9c05846fd631d8887edf10000021c000000b004254899d9d99673cee979b9b7e41cf6746d8a54715ac38f2954a99d589057aa0f430eb60f430eb60f430eb60f430eb60f430eb60f430eb60f430eb60f430eb60f430eb60f430eb60f430eb60f430eb60f430eb60f430eb60f430eb60f430eb60f430eb60f430eb60f430eb60f430eb622bf495bc66559004d482a65c63a7636d8c83eeb55fefa3c5a1a0127688c22ce28ad63416d474d8a0b435c13ec9e2095c4bb502687b0b8330b238b2ab338346d000000b01bddb0307561689ac6d640725172c6722439cf413821bb69ed7ad1aa83409e2613430eb613430eb613430eb613430eb613430eb613430eb613430eb613430eb613430eb613430eb613430eb613430eb613430eb613430eb613430eb613430eb613430eb613430eb613430eb613430eb60a13627f80bb8afd8ce4ab67de47c75560609b8fa30c8185da5e33a0a33c694910017c65279d7f874adfdd1604ab71b44c53accad4be3f7c8b67bda3ede87ae8000000b00331c9542fb79a980672c17469801790abd22be5852f42b36dbf0423bdf0e4a117430eb617430eb617430eb617430eb617430eb617430eb617430eb617430eb617430eb617430eb617430eb617430eb617430eb617430eb617430eb617430eb617430eb617430eb617430eb617430eb621cbca161c435d2484d1722077d670d1102ce07c69d379609e845badcdecafc527b9e3fbc32551ae42cca3ce9e3a1b2ffc1ff1b79b8537574f8de5b11898c1640000021c000000b01aea30eacb3f6cbefe5f882d030ec10c5b9e70d24bf63a8e31e52c30e8a12b1d1b430eb61b430eb61b430eb61b430eb61b430eb61b430eb61b430eb61b430eb61b430eb61b430eb61b430eb61b430eb61b430eb61b430eb61b430eb61b430eb61b430eb61b430eb61b430eb61b430eb6091fe339d6998f21c46df3228fe3c1ef97c53d20b6e100aa1ec88e27089cf6400f0dfd1f7d7b83ab826924d0b6476c4e83b84e5be892bea0cfd2182a534907df000000b0023e4a0e85959ebc3dfc092f1b1c122ae336cd769903c1d7b2295eaa235171981f430eb61f430eb61f430eb61f430eb61f430eb61f430eb61f430eb61f430eb61f430eb61f430eb61f430eb61f430eb61f430eb61f430eb61f430eb61f430eb61f430eb61f430eb61f430eb61f430eb620d84ad072216148bc5ab9db29726b6b4791820d7da7f884e2eeb634334d3cbc26c664b6190355d27a55eb894fd615ca33849348af59b67b93f840377df94e5b000000b019f6b1a5211d70e335e8cfe7b4aabba6930312635fcab9b2764f86b74e01b81423430eb623430eb623430eb623430eb623430eb623430eb623430eb623430eb623430eb623430eb623430eb623430eb623430eb623430eb623430eb623430eb623430eb623430eb623430eb623430eb6082c63f42c779345fbf73add417fbc89cf29deb1cab57fce6332e8ad6dfd83370e1a7dd9d35987cfb9f26c8b67e366e8bb1cefecfc673dc5143c72b0b8a994d60000021c000000b0014acac8db73a2e0758550e9ccb80cc51a9b6f07acd840fbf693b93088b1fe8f27430eb627430eb627430eb627430eb627430eb627430eb627430eb627430eb627430eb627430eb627430eb627430eb627430eb627430eb627430eb627430eb627430eb627430eb627430eb627430eb61fe4cb8ac7ff656cf3e40195db0e66057ef6239e917c77a9275910ba98adc9b325d2e5706ee159f6b1df3344017210646ae934d9c32e359fd8629abde359db52000000b01903325f76fb75076d7217a26646b640ca67b3f4739f38d6bab9e13db362450b2b430eb62b430eb62b430eb62b430eb62b430eb62b430eb62b430eb62b430eb62b430eb62b430eb62b430eb62b430eb62b430eb62b430eb62b430eb62b430eb62b430eb62b430eb62b430eb62b430eb60738e4ae8255976a33808297f31bb724068e8042de89fef2a79d4333d35e102e0d26fe9429378bf3f17bb446197f6182f281917e103bbce958a6cd371e0a21cd000000b000574b833151a704ad0e98a47e54075f52001098c0acc0203afe13b6ee128b862f430eb62f430eb62f430eb62f430eb62f430eb62f430eb62f430eb62f430eb62f430eb62f430eb62f430eb62f430eb62f430eb62f430eb62f430eb62f430eb62f430eb62f430eb62f430eb62f430eb61ef14c451ddd69912b6d49508caa609fb65ac52fa550f6cd6bc36b40fe0e56aa24df662ac4bf5e1ae9687afeb30e0afea24dd66ad702b4c41cccf54448ba68490000021c000000b0180fb319ccd9792ba4fb5f5d17e2b0db01cc55858773b7faff243bc418c2d20233430eb633430eb633430eb633430eb633430eb633430eb633430eb633430eb633430eb633430eb633430eb633430eb633430eb633430eb633430eb633430eb633430eb633430eb633430eb633430eb606456568d8339b8e6b09ca52a4b7b1be3df321d3f25e7e16ec079dba38be9d250c337f4e7f1590182904fc00cb1b5c1d29e6330f24103c0d9d1127bd836aaec4000000b02fc81ab068614b529ce82615b1715a56b1989a724e3aafd5c34a63d14373187e37430eb637430eb637430eb637430eb637430eb637430eb637430eb637430eb637430eb637430eb637430eb637430eb637430eb637430eb637430eb637430eb637430eb637430eb637430eb637430eb61dfdccff73bb6db562f6910b3e465b39edbf66c0b92575f1b02dc5c7636ee3a123ebe6e51a9d623f20f1c2b964aa0598d9b277fbead733e861374fcaae1af540000000b0171c33d422b77d4fdc84a717c97eab753930f7169b48371f438e964a7e235ef93b430eb63b430eb63b430eb63b430eb63b430eb63b430eb63b430eb63b430eb63b430eb63b430eb63b430eb63b430eb63b430eb63b430eb63b430eb63b430eb63b430eb63b430eb63b430eb63b430eb60551e6232e119fb2a293120d5653ac587557c3650632fd3b3071f8409e1f2a1c0b400008d4f3943c608e43bb7cb756b7614ad4a037e4bb31e17b8243e8cb3bbb0000021c000000b02ed49b6abe3f4f76d4716dd0630d54f0e8fd3c03620f2efa07b4be57a8d3a5753f430eb63f430eb63f430eb63f430eb63f430eb63f430eb63f430eb63f430eb63f430eb63f430eb63f430eb63f430eb63f430eb63f430eb63f430eb63f430eb63f430eb63f430eb63f430eb63f430eb61d0a4db9c99971d99a7fd8c5efe255d425240851ccf9f515f498204dc8cf709822f8679f707b6663587b0a74164600331117198cfeabb30ca5a1aa51137b8237000000b01628b48e78958174140deed27b1aa60f709598a7af1cb64387f8f0d0e383ebf043430eb643430eb643430eb643430eb643430eb643430eb643430eb643430eb643430eb643430eb643430eb643430eb643430eb643430eb643430eb643430eb643430eb643430eb643430eb643430eb6045e66dd83efa3d6da1c59c807efa6f2acbc64f61a077c5f74dc52c7037fb7130a4c80c32ad1986098178b762e53515198af76314bb93a5625e5dcca4e2bc8b2000000b02de11c25141d539b0bfab58b14a94f8b2061dd9475e3ae1e4c1f18de0e34326c47430eb647430eb647430eb647430eb647430eb647430eb647430eb647430eb647430eb647430eb647430eb647430eb647430eb647430eb647430eb647430eb647430eb647430eb647430eb647430eb61c16ce741f7775fdd2092080a17e506e5c88a9e2e0ce743a39027ad42e2ffd8f2204e859c6596a879004522ec7e1facd487bbb1e12803230ea0c04d778dc0f2e0000021c000000b015353548ce7385984b97368d2cb6a0a9a7fa3a38c2f13567cc634b5748e478e74b430eb64b430eb64b430eb64b430eb64b430eb64b430eb64b430eb64b430eb64b430eb64b430eb64b430eb64b430eb64b430eb64b430eb64b430eb64b430eb64b430eb64b430eb64b430eb64b430eb6036ae797d9cda7fb11a5a182b98ba18ce42106872ddbfb83b946ad4d68e0440a0959017d80af9c84cfa0d330dfef4bebd01417c25f8db97a6a503750b38c55a9000000b02ced9cdf69fb57bf4383fd45c6454a2557c67f2589b82d42908973647394bf634f430eb64f430eb64f430eb64f430eb64f430eb64f430eb64f430eb64f430eb64f430eb64f430eb64f430eb64f430eb64f430eb64f430eb64f430eb64f430eb64f430eb64f430eb64f430eb64f430eb61b234f2e75557a220992683b531a4b0893ed4b73f4a2f35e7d6cd55a93908a86211169141c376eabc78d99e9797df5677fe05caf2654b1552e765f5dde3c9c25000000b01441b603245189bc83207e47de529b43df5edbc9d6c5b48c10cda5ddae4505de53430eb653430eb653430eb653430eb653430eb653430eb653430eb653430eb653430eb653430eb653430eb653430eb653430eb653430eb653430eb653430eb653430eb653430eb653430eb653430eb6027768522fabac1f492ee93d6b279c271b85a81841b07aa7fdb107d3ce40d10108658237d68da0a9072a1aeb918b46860778b9537362389eaeba91d718ece2a000000f6200000112000000831a2fcfe8cb337e46411baff604b645a2cb51ed0508777282c1d72fe0f8f1177d56430eb60000005b58430eb658430eb658430eb658430eb658430eb658430eb658430eb658430eb658430eb658430eb658430eb658430eb658430eb658430eb658430eb658430eb658430eb658430eb658430eb658430eb658430eb658430eb658430e000000870183e90c8589b04380b830f81cc396c152ea49a95584f9cc421b625a33a15df85a430eb60000005f5c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430eb65c430e000001220000008b193c50a32111826a78a4f7b0b652403d02b68e961c4bf1a706418a675e51a4745e430eb60000006360430eb660430eb660430eb660430eb660430eb660430eb660430eb660430eb660430eb660430eb660430eb660430eb660430eb660430eb660430eb660430eb660430eb660430eb660430eb660430eb660430eb660430eb660430eb660430eb660430e0000008f009069c6db67b467b84178b2ce5f915b8a4eeb3a695978f08685bce09901eaef62430eb60000006764430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430eb664430e00000132000000931848d15d76ef868eb02e3f6b67ee3ad73a1b3027302070cb4aabe4edc3b2316b66430eb60000006b68430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430eb668430e00000097300138f4127758b5a81b0624017ce452e9e77513f6e768a60ed20cfaee6277e76a430eb60000006f6c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430eb66c430e000001420000009b17555217cccd8ab2e7b78726198a3571717fd1b843f4efef8f163f742912be626e430eb60000007370430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430eb670430e0000009f2f0db9ae68555cd9dfa44ddeb318deed214c16a50abbe7ca533c678153c304de72430eb60000007774430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430eb674430e00000152000000a31661d2d222ab8ed71f40cee0cb26300ba8e4734957c96f13d38099fa8e734b5976430eb60000007b78430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430eb678430e000000a72e1a3a68be3360fe172d959964b4d98758b0b8361e9066ee97a6c207b92391d57a430eb60000007f7c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430eb67c430e00000162000000ab156e538c788992fb56ca169b7cc22aa5e04914da6b9dee3817eaf480f3d3d8507e430eb60000008380430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430eb680430e000000af2d26bb23141165224eb6dd541650d421901559c73264e612dc111c8e1e841ecc82430eb60000008784430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430eb684430e00000172000000b3147ad446ce67971f8e535e562e5e254017adb66b7f726d5c5c554f075934654786430eb60000008b88430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430eb688430e000000b72c333bdd69ef69468640250ec7eccebbc779fb5846396537207b771483e4abc38a430eb60000008f8c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430eb68c430e00000182000000bb1387550124459b43c5dca610dffa1fda4f1257fc9346ec80a0bfa98dbe94f23e8e430eb60000009390430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430eb690430e000000bf2b3fbc97bfcd6d6abdc96cc97988c955fede9ce95a0de45b64e5d19ae94538ba92430eb60000009794430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430eb694430e00000192000000c31293d5bb7a239f67fd65edcb91961a748676f98da71b6ba4e52a041423f57f3596430eb60000009b98430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430eb698430e000000c72a4c3d5215ab718ef552b4842b24c3f036433e7a6de2637fa9502c214ea5c5b19a430eb60000009f9c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430eb69c430e000001a2000000cb11a05675d001a38c34ef35864332150ebddb9b1ebaefeac929945e9a89560c2c9e430eb6000000a3a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430eb6a0430e000000cf2958be0c6b8975b32cdbfc3edcc0be8a6da7e00b81b6e2a3edba86a7b40652a8a2430eb6000000a7a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430eb6a4430e000001b2000000d310acd73025dfa7b06c787d40f4ce0fa8f5403cafcec469ed6dfeb920eeb69923a6430eb6000000aba8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430eb6a8430e000000d728653ec6c16779d7646543f98e5cb924a50c819c958b61c83224e12e1966df9faa430eb6000000afac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430eb6ac430e00380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f0000000000000000000000000000000000000000000000000000000000000719000011000000021c000000b02183a59b70638971ddf35a061995095ff07e11f277ae22f5c585b1b1341b5af7af430eb6af430eb6af430eb6af430eb6af430eb6af430eb6af430eb6af430eb6af430eb6af430eb6af430eb6af430eb6af430eb6af430eb6af430eb6af430eb6af430eb6af430eb6af430eb6af430eb60fb957ea7bbdabd4a401c4fba66a0a432ca4de40e298e911b26913a75417261a15a771d0229fa05e61fcf6a9cccdb4a21897ef7c144aa70863729daa9ec337b9000000b008d7bebf2ab9bb6f1d8fdb0831a25a7e78166e96c4bbaa3f45c9e42a6ecba172b3430eb6b3430eb6b3430eb6b3430eb6b3430eb6b3430eb6b3430eb6b3430eb6b3430eb6b3430eb6b3430eb6b3430eb6b3430eb6b3430eb6b3430eb6b3430eb6b3430eb6b3430eb6b3430eb6b3430eb62771bf8117457dfb9bee8bb43ff8b3bedc71232da95fe0ec768f3bb47ec76c962d5fd966be27728559e9bd62665c5e1dc8643468db119ee32798c5b7c9737e35000000b020902655c6418d96157ca1c0cb3103fa27e2b3838b82a21a09f00c37997be7eeb7430eb6b7430eb6b7430eb6b7430eb6b7430eb6b7430eb6b7430eb6b7430eb6b7430eb6b7430eb6b7430eb6b7430eb6b7430eb6b7430eb6b7430eb6b7430eb6b7430eb6b7430eb6b7430eb6b7430eb60ec5d8a4d19baff8db8b0cb6580604dd64097fd1f66d6835f6d36e2db977b31114b3f28a787da48299863e647e69af3c4ffc910d281f262ca7dcf8310423c4b00000021c000000b007e43f798097bf93551922c2e33e5518af7b1027d89029638a343eb0d42c2e69bb430eb6bb430eb6bb430eb6bb430eb6bb430eb6bb430eb6bb430eb6bb430eb6bb430eb6bb430eb6bb430eb6bb430eb6bb430eb6bb430eb6bb430eb6bb430eb6bb430eb6bb430eb6bb430eb6bb430eb6267e403b6d23821fd377d36ef194ae5913d5c4bebd346010baf9963ae427f98d2c6c5a21140576a99173051d17f858b7ffc8d5f9eee61e076c03203e2ed40b2c000000b01f9ca7101c1f91ba4d05e97b7cccfe945f4755149f57213e4e5a66bdfedc74e5bf430eb6bf430eb6bf430eb6bf430eb6bf430eb6bf430eb6bf430eb6bf430eb6bf430eb6bf430eb6bf430eb6bf430eb6bf430eb6bf430eb6bf430eb6bf430eb6bf430eb6bf430eb6bf430eb6bf430eb60dd2595f2779b41d1314547109a1ff779b6e21630a41e75a3b3dc8b41ed8400813c07344ce5ba8a6d10f861f3005a9d68761329e3bf3a550ec4752b7698451a7000000b006f0c033d675c3b78ca26a7d94da4fb2e6dfb1b8ec64a887ce9e9937398cbb60c3430eb6c3430eb6c3430eb6c3430eb6c3430eb6c3430eb6c3430eb6c3430eb6c3430eb6c3430eb6c3430eb6c3430eb6c3430eb6c3430eb6c3430eb6c3430eb6c3430eb6c3430eb6c3430eb6c3430eb6258ac0f5c30186440b011b29a330a8f34b3a664fd108df34ff63f0c1498886842b78dadb69e37acdc8fc4cd7c9945352372d778b02ba9d2bb06d7ac4943498230000021c000000b01ea927ca71fd95de848f31362e68f92e96abf6a5b32ba06292c4c144643d01dcc7430eb6c7430eb6c7430eb6c7430eb6c7430eb6c7430eb6c7430eb6c7430eb6c7430eb6c7430eb6c7430eb6c7430eb6c7430eb6c7430eb6c7430eb6c7430eb6c7430eb6c7430eb6c7430eb6c7430eb60cdeda197d57b8414a9d9c2bbb3dfa11d2d2c2f41e16667e7fa8233a8438ccff12ccf3ff2439accb0898cdd9e1a1a470bec5d42f4fc8247530b1ad3dcee4de9e000000b005fd40ee2c53c7dbc42bb23846764a4d1e44534a003927ac1308f3bd9eed4857cb430eb6cb430eb6cb430eb6cb430eb6cb430eb6cb430eb6cb430eb6cb430eb6cb430eb6cb430eb6cb430eb6cb430eb6cb430eb6cb430eb6cb430eb6cb430eb6cb430eb6cb430eb6cb430eb6cb430eb6249741b018df8a68428a62e454cca38d829f07e0e4dd5e5943ce4b47aee9137b2a855b95bfc17ef2008594927b304dec6e92191c168f1c4ff4d7d54af995251a000000b01db5a884c7db9a02bc1878f0e004f3c8ce109836c7001f86d72f1bcac99d8ed3cf430eb6cf430eb6cf430eb6cf430eb6cf430eb6cf430eb6cf430eb6cf430eb6cf430eb6cf430eb6cf430eb6cf430eb6cf430eb6cf430eb6cf430eb6cf430eb6cf430eb6cf430eb6cf430eb6cf430eb60beb5ad3d335bc658226e3e66cd9f4ac0a37648531eae5a2c4127dc0e99959f611d974b97a17b0ef40221594933d9f0af62a75c0639ca399751c07c434456b950000021c000000b00509c1a88231cbfffbb4f9f2f81244e755a8f4db140da6d057734e44044dd54ed3430eb6d3430eb6d3430eb6d3430eb6d3430eb6d3430eb6d3430eb6d3430eb6d3430eb6d3430eb6d3430eb6d3430eb6d3430eb6d3430eb6d3430eb6d3430eb6d3430eb6d3430eb6d3430eb6d3430eb623a3c26a6ebd8e8c7a13aa9f06689e27ba03a971f8b1dd7d8838a5ce1449a0722991dc50159f8316380edc4d2ccc4886a5f6baad2a639b7439422fd15ef5b211000000b01cc2293f1db99e26f3a1c0ab91a0ee63057539c7dad49eab1b9976512efe1bcad7430eb6d7430eb6d7430eb6d7430eb6d7430eb6d7430eb6d7430eb6d7430eb6d7430eb6d7430eb6d7430eb6d7430eb6d7430eb6d7430eb6d7430eb6d7430eb6d7430eb6d7430eb6d7430eb6d7430eb60af7db8e2913c089b9b02ba11e75ef46419c061645bf64c7087cd8474ef9e6ed10e5f573cff5b51377ab5d4f44d999a52d8f1751777122bdb986624a99a5f88c000000b004164262d80fd024333e41ada9ae3f818d0d966c27e225f49bdda8ca69ae6245db430eb6db430eb6db430eb6db430eb6db430eb6db430eb6db430eb6db430eb6db430eb6db430eb6db430eb6db430eb6db430eb6db430eb6db430eb6db430eb6db430eb6db430eb6db430eb6db430eb622b04324c49b92b0b19cf259b80498c1f1684b030c865ca1cca3005479aa2d69289e5d0a6b7d873a6f982407de684320dd5b5c3e3e381a987dac8a57c4563f080000021c000000b01bcea9f97397a24b2b2b0866433ce8fd3cd9db58eea91dcf6003d0d7945ea8c1df430eb6df430eb6df430eb6df430eb6df430eb6df430eb6df430eb6df430eb6df430eb6df430eb6df430eb6df430eb6df430eb6df430eb6df430eb6df430eb6df430eb6df430eb6df430eb6df430eb60a045c487ef1c4adf139735bd011e9e07900a7a75993e3eb4ce732cdb45a73e40ff2762e25d3b937af34a509f675943f64f3b8e28b45a1e1fdf0bcd0ff068583000000b00322c31d2dedd4486ac789685b4a3a1bc47237fd3bb6a518e0480350cf0eef3ce3430eb6e3430eb6e3430eb6e3430eb6e3430eb6e3430eb6e3430eb6e3430eb6e3430eb6e3430eb6e3430eb6e3430eb6e3430eb6e3430eb6e3430eb6e3430eb6e3430eb6e3430eb6e3430eb6e3430eb621bcc3df1a7996d4e9263a1469a0935c28ccec94205adbc6110d5adadf0aba6027aaddc4c15b8b5ea7216bc290043dbb14bffdcf520c99bcc216e4de29b6cbff000000b01adb2ab3c975a66f62b45020f4d8e397743e7cea027d9cf3a46e2b5df9bf35b8e7430eb6e7430eb6e7430eb6e7430eb6e7430eb6e7430eb6e7430eb6e7430eb6e7430eb6e7430eb6e7430eb6e7430eb6e7430eb6e7430eb6e7430eb6e7430eb6e7430eb6e7430eb6e7430eb6e7430eb60910dd02d4cfc8d228c2bb1681ade47ab06549386d68630f91518d5419bb00db0efef6e87bb1bd5be6bdecc4a8118ed99c585a739f1a2106425b17576467127a0000021c000000b0022f43d783cbd86ca250d1230ce634b5fbd6d98e4f8b243d24b25dd7346f7c33eb430eb6eb430eb6eb430eb6eb430eb6eb430eb6eb430eb6eb430eb6eb430eb6eb430eb6eb430eb6eb430eb6eb430eb6eb430eb6eb430eb6eb430eb6eb430eb6eb430eb6eb430eb6eb430eb6eb430eb620c9449970579af920af81cf1b3c8df660318e25342f5aea5577b561446b475726b75e7f17398f82deaab37d41a038554c249f6065e118e106813f648f1758f6000000b019e7ab6e1f53aa939a3d97dba674de31aba31e7b16521c17e8d885e45f1fc2afef430eb6ef430eb6ef430eb6ef430eb6ef430eb6ef430eb6ef430eb6ef430eb6ef430eb6ef430eb6ef430eb6ef430eb6ef430eb6ef430eb6ef430eb6ef430eb6ef430eb6ef430eb6ef430eb6ef430eb6081d5dbd2aadccf6604c02d13349df14e7c9eac9813ce233d5bbe7da7f1b8dd20e0b77a2d18fc1801e47347f59ad8973d3bcfc04b2eea02a86c571ddc9c79f71000000b0013bc491d9a9dc90d9da18ddbe822f50333b7b1f635fa361691cb85d99d0092af3430eb6f3430eb6f3430eb6f3430eb6f3430eb6f3430eb6f3430eb6f3430eb6f3430eb6f3430eb6f3430eb6f3430eb6f3430eb6f3430eb6f3430eb6f3430eb6f3430eb6f3430eb6f3430eb6f3430eb61fd5c553c6359f1d5838c989ccd8889097962fb64803da0e99e20fe7a9cbd44e25c3df396d1793a71633fb37f33c32ef838940f179b598054aeb99eaf477e5ed0000021c000000b018f42c287531aeb7d1c6df965810d8cbe307c00c2a269b3c2d42e06ac4804fa6f7430eb6f7430eb6f7430eb6f7430eb6f7430eb6f7430eb6f7430eb6f7430eb6f7430eb6f7430eb6f7430eb6f7430eb6f7430eb6f7430eb6f7430eb6f7430eb6f7430eb6f7430eb6f7430eb6f7430eb60729de77808bd11a97d54a8be4e5d9af1f2e8c5a951161581a264260e47c1ac90d17f85d276dc5a455d07c3a0b49840e0b219d95c6c31f4ecb2fcc642f282c68000000b00048454c2f87e0b511636098701e29ea6aa01cb077342285ad8712e3ff309621fb430eb6fb430eb6fb430eb6fb430eb6fb430eb6fb430eb6fb430eb6fb430eb6fb430eb6fb430eb6fb430eb6fb430eb6fb430eb6fb430eb6fb430eb6fb430eb6fb430eb6fb430eb6fb430eb6fb430eb61ee2460e1c13a3418fc211447e74832acefad1475bd85932de4c6a6e0f2c614524d05ff3c2f597cb4dbd42f2a4d82d89baede2828d8a17298f55f47159d872e4000000b0186836f89b183dcfb86b4fe029e48de7b0cbe546fb02baaba1e99c279f09e9ceff430eb6ff430eb6ff430eb6ff430eb6ff430eb6ff430eb6ff430eb6ff430eb6ff430eb6ff430eb6ff430eb6ff430eb6ff430eb6ff430eb6ff430eb6ff430eb6ff430eb6ff430eb6ff430eb6ff430eb606365f31d669d53ecf5e92469681d44956932deba8e5e07c5e909ce749dca7c00c2479177d4bc9c88d59c3f4bce57ea842863f26da979e730f9a26ea9488b95f0000021c000000b030209e8f36a00ff6b0581698c373376360982a33c1c9b286660fc434c9ba304a03440eb603440eb603440eb603440eb603440eb603440eb603440eb603440eb603440eb603440eb603440eb603440eb603440eb603440eb603440eb603440eb603440eb603440eb603440eb603440eb61e5650de41fa32597666818e504838469cbef6822cb478a252f3262ae9b5fb6d24446ac3e8dc26e33461b33c76abe2a588b207bd5e66369903fcb02e34620d0c000000b01774b7b2f0f641f3eff4979adb808881e83086d80ed739cfe653f6ae046a76c507440eb607440eb607440eb607440eb607440eb607440eb607440eb607440eb607440eb607440eb607440eb607440eb607440eb607440eb607440eb607440eb607440eb607440eb607440eb607440eb605aa6a01fc506456b6030290685589652457532679c1ffebd33758a4246641e80b9883e7a33258e073fe343e8eb933c4104a6461ab73bde28440e2a76f125387000000b02f2d1f498c7e141ae7e15e53750f31fd97fccbc4d59e31aaaa7a1ebb2f1abd410b440eb60b440eb60b440eb60b440eb60b440eb60b440eb60b440eb60b440eb60b440eb60b440eb60b440eb60b440eb60b440eb60b440eb60b440eb60b440eb60b440eb60b440eb60b440eb60b440eb61d62d19897d8367dadefc94901e432e0d42398134088f7c6975d80b14f1688642350eb7e3eba2b076beafaf72847dd3fc016a94e723ab5bd48670ab499c29a0300000932000000820000003b04b6eabc522e687aed8c4a4b19f183ff5bbbf4b78d967f1017a1b32a89c6cedf0e440eb60000001310440eb610440eb610440eb610440eb610440e0000003f1c6f5252edb63aa1e5791103b3802d7b0b8839a4545d76eadbc7db37b477155b12440eb60000001714440eb614440eb614440eb614440eb614440eb614440e000000920000004303c36b76a80c6c9f25159205cb8d7e9993209648a16afe345c0c0db0ef275bd616440eb60000001b18440eb618440eb618440eb618440eb618440eb618440eb618440e000000471b7bd30d43943ec61d0258be651c281542ecdb356831f60f203235be19d7a2521a440eb60000001f1c440eb61c440eb61c440eb61c440eb61c440eb61c440eb61c440eb61c440e000000a20000004b02cfec30fdea70c35c9ed9c07d297933ca8537d9b53f7d58a07668375487e8cd1e440eb60000002320440eb620440eb620440eb620440eb620440eb620440eb620440eb620440eb620440e0000004f1a8853c7997242ea548ba07916b822af7a517cc67c067533649c90447f382f4922440eb60000002724440eb624440eb624440eb624440eb624440eb624440eb624440eb624440eb624440eb624440e000000b20000005301dc6ceb53c874e79428217b2ec573ce01e9d96ac913fc7ce4e0c2bdb9e875c426440eb60000002b28440eb628440eb628440eb628440eb628440eb628440eb628440eb628440eb628440eb628440eb628440e000000571994d481ef50470e8c14e833c8541d49b1b61e578fdaf457a906eacae498bc402a440eb60000002f2c440eb62c440eb62c440eb62c440eb62c440eb62c440eb62c440eb62c440eb62c440eb62c440eb62c440eb62c440e000000c20000005b00e8eda5a9a6790bcbb16935e0616e68394e7afbdce87ba1294b1d441f4902bb2e440eb60000003330440eb630440eb630440eb630440eb630440eb630440eb630440eb630440eb630440eb630440eb630440eb630440eb630440e0000005f18a1553c452e4b32c39e2fee79f017e3e91abfe8a3af737bed71455149f9493732440eb60000003734440eb634440eb634440eb634440eb634440eb634440eb634440eb634440eb634440eb634440eb634440eb634440eb634440eb634440e000000d2000000633059bcd2e0b61d59bb8af6a7137ec15f98e704d56a766b56b1976d5e74a98fb336440eb60000003b38440eb638440eb638440eb638440eb638440eb638440eb638440eb638440eb638440eb638440eb638440eb638440eb638440eb638440eb638440e0000006717add5f69b0c4f56fb2777a92b8c127e207f6179b783f2a031db9fd7af59d62e3a440eb60000003f3c440eb63c440eb63c440eb63c440eb63c440eb63c440eb63c440eb63c440eb63c440eb63c440eb63c440eb63c440eb63c440eb63c440eb63c440eb63c440e000000e20000006b2f663d8d3694217df3143e61c51abbf9d04ba6667e4aea7af601c7e4da0a1caa3e440eb60000004340440eb640440eb640440eb640440eb640440eb640440eb640440eb640440eb640440eb640440eb640440eb640440eb640440eb640440eb640440eb640440eb640440e0000006f16ba56b0f0ea537b32b0bf63dd280d1857e4030acb5871c47645fa5e14ba632542440eb60000004744440eb644440eb644440eb644440eb644440eb644440eb644440eb644440eb644440eb644440eb644440eb644440eb644440eb644440eb644440eb644440eb644440eb644440e000000f2000000732e72be478c7225a22a9d861c76b6b69407b047f7921f699f3a6c226b3f6aa9a146440eb60000004b48440eb648440eb648440eb648440eb648440eb648440eb648440eb648440eb648440eb648440eb648440eb648440eb648440eb648440eb648440eb648440eb648440eb648440eb648440e0000007715c6d76b46c8579f6a3a071e8ec407b28f48a49bdf2cf0e8bab054e47a1af01c4a440eb60000004f4c440eb64c440eb64c440eb64c440eb64c440eb64c440eb64c440eb64c440eb64c440eb64c440eb64c440eb64c440eb64c440eb64c440eb64c440eb64c440eb64c440eb64c440eb64c440eb64c440e000001020000007b2d7f3f01e25029c66226cdd72852b12e3f14e988a5f3e8c37ed67cf1a4cb36984e440eb60000005350440eb650440eb650440eb650440eb650440eb650440eb650440eb650440eb650440eb650440eb650440eb650440eb650440eb650440eb650440eb650440eb650440eb650440eb650440eb650440eb650440e0000007f14d358259ca65bc3a1c34ed94060024cc6ad462cf301700cff1aaf6adf7b7d1352440eb60000005754440eb654440eb654440eb654440eb654440eb654440eb654440eb654440eb654440eb654440eb654440eb654440eb654440eb654440eb654440eb654440eb654440eb654440eb654440eb654440eb654440eb654440e00000112000000832c8bbfbc382e2dea99b01591d9eeabc876798b19b9c867e7c340d7780a2bc38f56440eb60000005b58440eb658440eb658440eb658440eb658440eb658440eb658440eb658440eb658440eb658440eb658440eb658440eb658440eb658440eb658440eb658440eb658440eb658440eb658440eb658440eb658440eb658440eb658440e0000008713dfd8dff2845fe7d94c9693f1fbfce6fe11e7be06d5ef31438509f144dc0a0a5a440eb60000005f5c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440eb65c440e000001220000008b2b9840768e0c320ed1395d4c8b8aa662adde2caacd9ce70c07ab31fe6f8c50865e440eb60000006360440eb660440eb660440eb660440eb660440eb660440eb660440eb660440eb660440eb660440eb660440eb660440eb660440eb660440eb660440eb660440eb660440eb660440eb660440eb660440eb660440eb660440eb660440eb660440eb660440e0000008f12ec599a4862640c10d5de4ea397f7813576894f1aaa6e5587ef6477aa3c970162440eb60000006764440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440eb664440e", - "txsEffectsHash": "0x00b96b59d2a7d81ba0baee59f0b589653fa67845988f84047305a4be9ae20ed8", + "archive": "0x1bce6e63f8a86d79d3275122fadb3446cbe1058d8e8a03a6b6e56977f136b52b", + "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659000011000000021c000000b0000f8de2bdcdab4b501c8842a10f1bcfcda23dddb48a02419c508650c77710a2b947e693ce39a4ba87c4c091019e70043187432afe55e44f93ba38269b806d367921648d79c0c0efe84c2671f8dde9fecd465bb58c282644186cbf5f9ac432ed35ce612b4342e0145cc0dfe1e916992c2cb879ab4265bc7ca7afe308739ac5411e934e0422b30b893c6b423c7066d8581fb2bdf178fcbe2e32e0292c410a3bd1c9ee4ae95d70bd98a078ff93a7427e1f000000b02ebd887780d471badabf7a83a94da52631f28353c3c934849eb243a033f1eaf0ab0d1704cfab10dcdbb4f12ff096fb37a0c8bbd40db898dbc9a7b71b788f0e5a1b85edffa4ef3a045d775f0a0f518b3b48c73842b3e1ce6a7b98061c7dd43fb3a84fb3687c41afea95dbde7abf2af08b01957f04e5053ef2922a4c02a8da8f7d96c6cc3994db0ca7450a51f7850cf7c32c8ee4a607c1865380a51b597e74a552b9da3f5afb99b11c17d275a1e786d53d000000b01ce4b7439a4b62a3532af4739afd6789f329d6fa6b7bf76abffe3de1cb6567306dee9aef133508bc4184fc5c57b4b0ea3ff0e10373a31f5d203ab1b06310ff733c152832c40156bd44e039e979d513bcc94e3dd081f577a3b53c5d98f330ed0638bf26186fca488498a85dd36c9401d41cb670332b699383dc874699132ebc1d10e1635ade3b2884e73fc600021521082df014a95092a8bc698602d78dfef92eeb1bf5230131ffab75c8e9c6ec26c7f20000021c000000b01bfc87c33ded0ae8acb20f6094c1d40a0dabd8da428a2f0f8c8e8466e0e0b9dea7c67e71a39749176b5d3f44eb847ee3c83ea4f905eecfd82b3339bf0ef5b2ee41eb681a4cfcda699f92c1874ed8263b64ef3346497bc7c0fa27d65f9795a42b0ecdc5e8f973943d3fbbb089e5abbcf90e4cf578fdc5802b633fb9133c82561772c3c50774771d648f3bd7feb49df7102ceed0c93c44400bb5929713c1d79a318dc15e452435888ec56e6ae51b257ac0000000b00dda1d4cbef2678fb15243ebd853d8ea87fab5672a386df04410453040be422c94568b9eec2b6418310073aee9d3ace7ba352f270555541172446634b88ce8c78c161cf21bb62f37672fa290bcd7832a014f4555d4becf326365a81f67b9fac9623cf0d1e57829b879966b340db6817f2559bd4ff4ea68b1fd63aa06ada9d5a99c9454308e878c10a2ea0e77267c60ed0e8592b14bdbf0d55c21a34f44ea59d1c52b2c66aba783fe058851a6c5565a19000000b017b106e75bfeece3491164f384ac1d0b0181ef43dfe6d47d8dbf463bef4b18a5938b4bc8c9b72b05e4cf3583e5b0980432991f53fe08801511316d0e07a567c874b454463d6aef6fd984e0e52e8f005fc237f8d6e1430b7002150e17c9dbd8633850267a96a496a3ce2fdaf460427dfd0ebc9c546b0ad7663bfa38dc36550b97d8a638c3c863d88202a2ac322ea993581f64f7e26c4478169e69bf93ce8e86a9b0ecd679adb9ea36e5bb21e6dd5c5a300000021c000000b00c0a924988f419c6e9217c0169c235a45e66c3b0cf992781dfdd9c62927e36dfb78e777551cf271474ce9150eab46f9ae6b460362689af9cc9b417672adf9a97d9327c76887c22b3edd4b9ea5075a79094b0c58d5e2c20d5d61f0926a41832af57fa26d9002e0cfcff2e98f5578fa3cd066e007ffe5109da5402d6ca35b2e8d55969b81696a6ebc144357d41272fa8de0ddbe8e71ddaa2631616c6ce68647e8c5f91e12e20bcf664ab52d01da6d42417000000b025caee8104bd93c4c07dc9a0fd5f26da99eebdb1800bb9567c3bae43b2ebb73ca5e3ca4e35224285e4490799ebc138c4b3acf60051fa7232e5715069fb3dc2cb144b58ac351ebaba8eb39e557dd4b5aaa50942e5b686e995debc0f65ae8f7216007474c3e46f6f48bb0e22121d05bd7018796f49c9eb29c6fcb7a4614607ede55bf225e9784b50b135efdebcf5f7f2342d8610b42fb8edb34cd8a76553cae3ecdd5966d465f543b7d144c42fda593843000000b02bcaa618a4c40b26fb156e6c64c136fd7f85ef4dff2e4c4b22b3f7598183c3f65af4647c37b5e53e41f270b243707a8ceb1124da31d78d82f17465693ba8e46ce3dd7a988064b7835833ce537f2fcf31196ebbb8eddbcd17073255dc8a9525a23c7ac471fdac118b837df3c40f1eac12123ee1582d10e9cb18a478a437a4f6463e0a3013538b97df29ed3fc00baed0821c5ef7843250bbef9683a96f4c0190128e1075d4b056912484de16e603d9bfe20000021c000000b02a5cf08708e925f3a8e66febf464a76b00c45d512be6eea9e05df59a6ebb0a144a52f328aca92f351c6347ee0b6cf1a6698559e35cbff6c119f85479cf870a8ab75cf078ad057888b0d6b9070232af58a80ce18f4f3f6a52b15f13f8f1f93fe7f4c495e4ebe48013b2cf8556625d5fbf0c5040057a8cd77b673adc5430587f82caaef2a2f815b6ad0083a28fbf1e99b1302d5ebed6470bef9ff0cbf1c91bf27c6dc7c4a2a28e0e0964d691f95cb8a064000000b00d3b8813939b34f13fb7ed09a5d22806a16823059078afa0b4199f50f8b7eb90591369d0054326aa14baa717121c5e31576fc7f44a95e1d7945ba8394defbf9a327f12be369f2b6092fe7b41a82327ddca851617d654bf8831acbcc966b2713496263a3869a4ad9c5d35bbc9f8aa71a717b823192102fce69418a9d81d5b33e556002519324452fd96856372040c2daf021a9d70e2a811cfb5378d00be847d4e98ae57ea1c06a70f0ad218d1ded45772000000b02060c8469f5f9424740183a45cce4140a8bf5e46a10939363498ab5df4b2144d2503615261b3b3167487a6ff3aabea9cd59bd3987b2837e2df8d4d9b5a8e6cf5763d081ca0d3774b66a71077072aca2984731307a8e352743c9d8883316239130451889a8e2e6c85bcc2c376a19fb23d09970c3fcd3975b850ae8df04590bb12d76770a33a25c94e4f379f4e5639f44c2fe2f7b4fa679f836c03b4fd7bcabbfb0e15c50691da5df1ec659e14e835158f0000021c000000b027a41ee310f1fb58579c40c92667f80b4cb75ed12ae6cab261fc79e5289c34c157121e8de3c8fc73c8d8698ea0b6f4bc3d752fd36d93f3ef3f43a57d88d4deb72ba4f543fe33a4649aa1bd8065442c3a55577d91f2a2b0f7bae57aa53d43898745b4c5c199f6140d93a615b812e116192679d28d2b28893939b32d56a3a986b77e33a0f69713e27abd4da1584e4e0faf06c4808e068bf3513927927ce72e0c8cfb267c82811dd3d7f4c2c6475995c5bc000000b00827b09b91d00f9fe9af761193bbd88fd34962c8207e11d8e6b0f8ea5ce58cd778751c7de627e63da137e8babc53c44246821c42dd1f4f076f21c612eba86aa2524e031595f907828742bf1b5f3eb2b0f32f54b3c5883f8bf639c20185359b2a4a968e7935f831cb28ba4ff72fb87dde07bb59ecd23d935c94bf40824765d08b614dc8999ec595cde9d837a3cc6a0ae1292fd0facbd56539fc12a9fc09bccbc477f38b473fb8f70e0769a2df508cbcba000000b027ad39ff58b31e26260f76a9a32bc08ed33801059951147a3b8892c2b889a0e219c0a90c1ebf362fb1b6d5e2c93761c5f101a398032338e7167ec3417ed689a750f6273d281f8f299c70bbd42afe332e5175d026a3d0cf15803432da87b41e742be5564e55447b803efe45f11edf2daf2626c851ddda8511c1c69a906ad8fd083c1fd58b700924a913413f40e59863bb2af3a33deca4f0cef9686f1f509ce33c2a7ffc449e1804736bfb9d7d37c5e1be0000021c000000b001acec7dc893bd8956f9856e68c254677f3477adf998dd9d20e91ceb265bfbfc2e6bb893d8d7c9a35af7f37706767d8a0b237d9343918224a5aa7cd582af55f5906a9632a7b9e0a8747b02d69ee2bbe0f4d3f48b802151160be7f0468d4b5afa50b81d31942118eb9a31acf6c1c278a72dc448ea6ab73ae86e3403fb1ee1fa36f1c9c845235ff5c92fc5283bbac38098035b69a706162ab476e54d5e08772d1c3d3b9237f8bdf35c56500d88d3f08eda000000b008781acdc6a8e2f29126bd4f626d0d6987035a7a676c8e5f7e973a569daa8f6f94aa82e6126758ba780ed8f24d53a035db4677aef3bde5bf80a4cb0eefa57cc54bfdcf01a4da5c14aea57a8ddd00cd9bf6ba3eb3b5948460ef164cc25b0350010e88b28abbc642ded83bb3cac6ae5cee1d6e6c83c85388a401a9a0281f6306d735e4184c9a16d75018caf25631fede2b0c35855d58bacecb3566661fd059ad3ead9d7f66834f461de21dbfb94e229b1b000000b02965e37f7baf8227d2a7b2a7674d03678cd7fcca4565b1a3d566d4389863ce051db5e700c6bcbfa89429a11a26d08e0b6d7707499b5ee43aaac7098869018b9621ef83e1419be36a4a706df2457012e0a3f42b69d3cf90319436718c522608f334c52d0cee25c3e9fc55ec62977eaf662e3d86c5608ef5c120c810fd5a78d2561d2df0cf61f25622135a8e405a7cb5910c4bd645d596bb82fe004726b672adb25f52de465d11382d28e598644fd457180000021c000000b009617dcd4bc2c6e2a28e69d2de899d45385b8f942a8a3be27d23daeaec538e3e8a0042b5c745a973b724b3772a26c741d6d4a11695ff3cc408f3f0806648165f12e6371378f091fc8b8af03a7f9ab656a1972ac9c2c2ba7262d251946e51c908f6d4dcfc8a8f601075b7c37bd5152a961d68d8a257619e67b0de2e41b9bcbf4e39e8a21007eaf67ff620fceed93ef94718246380c192c3ea98d796948504127423d8b2b95d9f7d9f5232ff812b1faf78000000b0288fabd31370e3091bf8ed3f2b314cc6acbe9521ecf1d02dc24f46f7c3aa33ef169ea9ac05f647c759e14eafae56a047f6a9c08cb045d09ca7b1552fa671b08c9e00271193aaada2a84cc608ab3f5e93eb13692925e08643198e73b31766c52f02132906acf32dbbadd04678d3f69d9b081f5e26fa04330fe0ec809b2a0641ef8be30ac5db724499493ade8085f580231313a61e6cc4aa389e42e8d2c9304f7599f5b5016d297abad33ca543b625a0f4000000b0091e0bc0cfb5af7bc30423124e85208cfc9848b929e4d562c5d5acf58f855151de5b5870e3f6706efe86b676984034f2af3c3183011673c9a2ef4a97f05cb5f503aaf06188b91bc78a424cc2d8b18f26c410cb1d749d2548fad83698a6360acc689deb73e9f0e94ecb3ff5c2541265a52d123b4d181f4846a7a78776099220ce9b4a0955d2f6f0b91d6996eacf60405c24640c0a6bee6991e88191a822e0c0921c21c4612bd888302101142461f86a080000021c000000b01c4c00f667f9cb2721c586472e2fe8d289b7f3ad5895c0bac3e3ceb942a03dcdc9f16454a693c33f97bf454f5ac86366e98b99aed8d68bf6ec9753a0191a50c1e7a6369bddf512fc289b8a4edeeac1d735128a7bc9e62128d20fd4be67f761533a7e30fdc096dcc46fa9e5305047c1810fb4bdd63dd38811c2df52111b36d56788c12a13dcf9acd211fade722f8111e22f1baa3640efa8436424b143e6e6b52dde4c7c0645ffea9334e74fbf8d221ce1000000b02e90b2c303530604f915f4578c03687364c3142672316cbb8cf0941c0e36f85984f0b7b6fd5f2f8aa69641b7846cb5fe95f12c4b6cd0f621dc0af3ee48a1b40872d7919cea8761da15d94a9c3bd0358fc8de675de602b5800291c550c99e515da29765e6b7eaa91300d96a499a2646fa2c616206b22e652c06b96f64e1f65069756c905a43cbf2af68e278103ac1570701290ce30e1b912005240ec7167727139808a83594821b32c403bdbeb6477786000000b0282121c9a069f2a5ab23e60f4785d52f3ba3e84fbf5225e1c258e8aa90e7c1ab8bf6dec491ed30ce3e8c3e7a0e6a8143ef166dc0f0daffbd0acecf7a2d7642194cf233618346d1c04211d2009179ec7d357cb210416f61312e8b8648e9c6f848421f0ec9b4656522a1e9e59a0b028f331b6520695e2a8bde31610668e3f038987b003f750cf5366cb988a85ad8b4e183114540a3108616a9be590f5310c657f6b6799029748a253c1c98560a26888c5800000f5a000001af00000083195441a84f64019313a0482016ec37a62a7c1ed3cde2a9274863c639b62f3bc19cf9ce510000005ba85f5ff7b44336a9b20bcb794f03c975da5f2c4cb4858c26dd5313237deed27e53632aeb48e25df94dfc6239b45797be58c8b1d3cfcd5075a2bc319dbf7cff3583698035faf3aa19606b904c5cffb9111a09c20511e661d3aaa63d000001242b0a700e3c39fdb08117cccd4f0779c9c5fe28da345d9f3ac0f7b0005ea808da6f6a1967000000fccb35a7dfaf4e67529c555602511a57117f2dd013a6d783e63dd2b9506225112c371992cb0ec1b1a396075e7a6f9d797f098539f5369243965c276d7d4f6c6913ab93b0a55e73041268f97ea846b51276b0aea03f4fe294b517b566ab5472b348eb3f4e4990c2cbce9e0f2acf0eaaf1e92d60c6152565ccabd7d433a02115857dca70fae5f847b27ee35dc5a555f31ac4f56470657ccc4c90158018a660e7dc5136ae6e1e0aca56b4ce08971095c5229f0a7d57eb5c9166a1405dc53ac3c3b041f658f946f5088eb850ee7820f9ced16d062fce2d9c7af06b058d76afc59a371f9efa34f86937a54ce7c9fee97fa7865cd8833d860a0cf2c459bfc3b40000014b000001011ff53484cf0466d387a088f430288caa1fd8459a59bd1d74ec81eb1b5ede6d55443c553a000000d9db0188f31ddf0f56ec21df006347710dac8cd245bbc7a9ab0c2b53d4faa1da296db46df6319541bb5ae72106ade93c551fbc54119adf7b10b0c8418aba1839de18b34b273b2e8a4b1322ff2a304f08777e0355c42b13700bd6405488c54dedf9692b7124df8aa5fea5c2c431519eb97b4f0d6584b2bc0dedce2857a56147dcf96af31eadd237d21c6ddc93a889949b63f667919ed08b792d15078599b86b3dcbb8737181b4dd142dcf270925e3256374a22ef3d4e404329f6e30c90814e8ed21217a9bd12b691b93b50552ae99e41e1f498260411a79f9303f000000421c6ceed6765965a9b98d54707fb3675496a7038a4d1d2414e1e0d3b1d45de6402da4843e0000001af186fd8f898628b04e18a489ccd0eb0a71890f2bd1a64ceb463c0000012c000000d7279e1c6c2330cec7e2995644dec51cfef627242545b4aea47ae929194837eb0c7c96dabd000000afc0baf61201a1f129959238f60c1c0c1b7a9e7c7764875c56a89c8ff3e87949df3ca270b4e337e892e228dda8d89603d595520b454f3301282c8c8595c7b4cc1ddddb88749240e8a827aec0f73f3ea18c39973bc838781036709c16b91547a4d44013fdc10b668b237d8cf570effb30a2a449e0b2dcdbd76ad5e1dc449137fd7e0b06ba9abb0e70a03137f541a40ddb8720297a4ca89ddb5565bc0e105769e549a5beb58588505305112c5355fbe7d80000004d06f3ef3487696afb449013dbfd53b8140f52b3de5bfed946f63ed591b83a7dcf97f2e26b0000002508ccd4680747cd4f2a7a5cac7ae8fed69d8f4d3b9d5946ef718c4c3e6e8435c00b7e828a63000002330000012604f41141c1ba89c62ab323593863a5fdc2df6bac8777e8af1cfe2c94886bee55689507e0000000fe559f8bd681dbf7eb0b310e9b87e6ba2b4bc07965a8c7c9acf6fb3b878a855eb536ea4bdbe39b0e3950265b10c35df9edb7084270aba341facff1df491a51c4084cc331346ebd947b886df579c8dd352f83ead1569e41f016feb6ae3c1c0ccd1596b8a9fa66607c3e1b9be779c40dbea61fdc379686363934d37035ed230599776a153bbe2bec427e15a84c180af525eaa4d17e3036e632556a552b3800700c90c91c6cbcdb880b4400d0a0d4cf7cf9c8acb7e6e51e1c5aeb73e60259148750af0234bfca217f2994164be500fbc35ec47f7d05e03d53f7dfacc48227af76a41acb90f00101304259dbaef687d1880cc39a229302e1aad7bbf67be7729db300000105197c8507f6c6c85889b73796129a6df73b605ab8842cf772357023fbe0a47a88b1b639b6000000dd46efa642feebbc3fbbd35d163f578892bb682ce962570bc1d8a452e7d9c12333106a5445ff39f495ca4b27c88dd54f4330aa2748afadeb903bfbb839fe182f5bcdc5fbb189d2641d649a9deee510cd31663318668c17a35d4bbf0f1eb512510bdcb34faf6584a6b2e9eaae0204d647d29614984a168fa8274f0fe743ff38cb30cb90dfd838a39a01cf4b7988f3a4ac907091a7c69ef314cfc6267ae69478c5d45bb932d21e81b9d1c2271e7ec39f9459350e244eaa22ecc725b1500efa74ad76260a9c6ee2bfa63be099611710d425fa6b666ddcbdf529ce3a48d4b892000001e000000114072e915f0713043d38277b57d0c9772fc8d99c85f644a9e890d0c3ec3f7e867a3f8b39b1000000ecef0a89f60f125755b35532614a6e448102e8eeda28d34e38f36c6620d6cbfe2728d101d7fca5bff1d78641b77e11b7f2d7d338c34c2e00d66cc02b7dfa4696826bb2a6874c7a5a7e4ec409ed380acf31eb2499a681fdfc8c60c79acca9e39ebb85ef2a5b3923086bc8d32557fbae64d3a4f87f606f48053eee45f3600b180f2ce3ce310e53744ab0ef72e3cb4b4d4e432bd71289c10e6ebc1abe7f392e5418ccdfa129f648b2e02f0811a05dc4a1bf0d9a6e163136cd944fcbbe2f8c1203cf7fdf034214d4b8c9dec154ea46b7d3cc6ca8063be371f625575fdc6d770033a24851233b2f986cdc49d963fb70000000c42e09d8cab5b53457c7b7aa720382b8e03014f43da36ba489473bee5ba57172e40b5f49310000009c2c04a28836ddaa412d482bcaca48f81c1a766b0a174ae1d03d4ba30cf1a51e7daf3190e1a812999a8deed24010192eb2facb308e1ae41a66225e2835fb2792b303aafefdb8e086a8ddfeb06da763e58e46d64420d48e0e26bba5710d69814e0c81b484a6f7212c677860368878b633ff5682dc780a407746df5018e0fca614f6f784a5356da9830e6f5e5af7fa4417868a386c8e2f123d9f93a15cd100000173000000bd04903991549f2ef282fbdac3c3f34af7924afc97efc1730e4c7f0dee59c425377271886b00000095e26f3c27888575a6ee7266514011b1e6c1f852cab0853876e140f1209b898d0ef32869647a2789dcaeaeaf0095af9efc8ea00bced88fc1a2402df75295b5cd5c3dc5225e2c0212abcbb15dc0101ff83e83df5dad0f0143c8a2ed105d585a7ec41b108f1e3efeb829a943410e70427b9c5c65599ad004894ff60d4dd97658fe071445957080288bab626939dfa567558b46aad12241000000ae21f2f1d883ec6b84b36d23789779ea1e57d8213f8414fbe6b03468bf6b69b33eca2a664500000086846298e96920e98ce31531a7b14ac7e578d5269158340308abad7a1f8d32f4d2d7b88abb044dd098d7e4af186e3f2bd81581efdb0e9625559892d4e35b6efc86d043e5f01f01c8d04ad583b48c9fabf0f1181c941f2747ae98e1f41590008866a81dcf6757335365fc337904d6901caa355989c21193ba508e2418f3e00a1c206a9ed9382f14000000a40000004c1d8bc24f2ebb364f7103607ca26f3742e7eaa207725c6fcb4d5ed5cb2f166612cdf29abc00000024e8271f59fb3a6d9fc7fbffc81b25ecb359b8b0b7b5bc13ed10b5ff832fa4f1dcbc68c967000000500f08ac5dab83e9ae5fbc4d4eb42dbd279c06bc06914ef3908d0529ce83f71719eec54a530000002851e23f6b9b422ad3b15d33a99272dab4e00ca060c7d3832ae6e8546ced19d1bf8a26652b03bc5b11000000e6000000452999151cd99037c3c4fbad7d5651b42426a74d9acb7f5b1750b17974d55c821188211f1d0000001d3ffc970f537685e6f38d5b2daee1f57eabb51f5ea02e04f9fdc66a215400000099080ef9928a2116320610a28029c8b177f7101e8f3ec6aa814a150470331e8da47f6f8ee000000071451154bc426974eb2fae030042f56ae331f219476d92f41c56b0f7cd0c905e0977663175b85607842387bdf0dcc773e1264a025a1c0d7ffe84696335d54693a90f86bf345b6659a234c5756c669664049df2c402917cc41f3ccb5a92cdc73ab845ee8db1c75a619a6e5bbb9734ef745a2c000000c6000000650e13c6d36aa71390bfe8a613e47755c91a604079630245ea634a76575121884ca33560920000003d5139564b1b29fe1c18d7f00a3e18b59eebd3c36a4bddd8a478e80fff029aba1c3d58cdb6224c6a7147a3ab73b05dced3a85242a46df625fd44c00125fe000000591fb9ebc762b317057e2fc392c2d1eed2d46a70fbbe218c75a0be11f3b593465e6721d6e2000000316e5c799a27c98e58c6aa089bb3bf4c08e5fedfe2c3268297bfd888d2d6d7b8caac272efa01dbec681c0ab4625dd0d5b534000001d9000000a90d5b532622bd19ac9e50cb02cf5e1f5563d86941d682aa28538ed44a0dd758a96cb7f12e000000815e251444fa3890992bd4e5ae61bc2a424ef78b0ea042ec4eb6c4e92184ef490ebb2da000b9d3ba99ce148542456c0f54a588f4e62577ac329fecddfae5ee03240ff6384588047b71006a84077406fc05dfd680a126dd7b7d36269933ca7c0cb06aedfc7cee9b85329051d6889ef9293709e658da4bc90f366856e2e9722f6c96c30000012806a1db29820f26348d1f99b90ef850d01f021b7fde930b94f93709d03d25f1cf5b1def2e000001000224c10766a032761792085fe13c908b3cbf3148342d39880f05ad6a0e0caacecdb4ff4a2b4bfa733ee045c05736e598203786f675a04d91e35b86ec3a0124b8e3624f52946f8d66e41bc7d9eb6874b3e1adffcb6331035400e4f3f9ebcdb922222f59ee304ee215d4ab5f6204c24e555310cdc4d4188e77390cf996c849bd1b49c5989fa27418efbeb1e46e5937611848862d7447ccc693c3cfd214a94fbc237f0f401dcdcb1158be08ed8c7b9d0bc65c91a78d0c734e2f86a6cb26aa61fe65ba58f582007210755467a9806867909c1b260535e1b2a88ec672a6bc05bcf6e62afc4805255858b0a13a31f66e60809ad91250afa3dfc93642b24dbebe14276d000001590000004f18ca972dc6ea04c44832b6762a17c3ba2842b1a57bd552f96841cf4bc3983cbb52d8a45700000027b63290905a998a8310da412d11d768a5d1639d302807f277dc1ea5745bc543a5176c114bbe1ac10000010209da8d03cff75a2e1bbbb5b33560d3d50cb4a3f5daea65b4202e186df36971e1d441b270000000da1ffee6d41181cb6ddb20aa7c23ae3436ba3c2e017de4ecae70f4dbad50d04221d692c99070bc1e7acd7d92ac4398d70cfb0511fc4be05c152d7fa96907bdc0e5191be1ef2963fb55603cf67e31f7ac9ee4c71fb926dbc28284e30591f8d1602a4dd7017581c443998a3473e8410353297479d7d6ed1664965acdbb8e312a3fc0c9f0ebfc2bc9fe44a5963b02e936ac166cea7ee368f5c6abe5c89efe9bfe67d122f8ff9e23783536ae4ee08ef16f5cf7cf6b7f15d2f4d5cfd251782ef9fe274117a3f7ed283b06e2a27213a04937881298e4b1f28462b847906d00380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f0000000000000000000000000000000000000000000000000000000000000699000011000000021c000000b007e48136d4af7e5363b07097a3a5d5661e047fff963e82bd2031ffa9a0fdf4feb6ae4fcaac59e279d413b452340fd98ee461ca5e93bdaa5e36295a947499e984a62dbc1b7560eb4e329717dbc847f103fcef12ae4a40c08e9a316e387e141bbb6961a8ae67987cf06ff38e40a6ef39661d067e8f211bc946054a1979dd0ddfc9da487e526f7c0913170a4a3a38b536730ab208bf333b7d5a0b0680c16ef359f40dc11765e93d6ab7220fed0a16ef24e8000000b0255948611c4a587c2eeb002a0d70afd8d1bb248690c3fd8cd1879ee23f3ade4d31e150b2fdaf5a1b03d6dfbe6adedffc62ede8dfb432c04c674d13f9b4ba944e6cdb25f5b8a783a76986b5185f11bdef69c281bd592c2407b0341da5d919041d4f8bde4730ca236946a2b77b1b1794eb26d921eb3f69f334ac8c2c9b4f190c49ddb45cbc653c4fad4256c6147a3c23d421f277e44c763f44662b7e03e430842cbc1a1aefe9e14b4de9fcc617463209f3000000b01b4c8552a53c0e5e25b48dd1e4a6019b03dba47da15fcb49d20f21d48df359ae86d03a86f7178552515e73de4f7dc92c247c05813bdbb74311f4d8b8a63d10ed5290b401886e121ecceb5f1447eea75be8beb116a1330551bda38e6284cd9fd54ac347961cc445e81801a18150dbfac32fe10e2dca20de857d758f0b86de5c8b6083bd5ca0705e32c231afa76a840a7b2d586378f1b055b318e3c131bdc2c55dab5645ec34ee9eb33dbb40f223faf1930000021c000000b017bb977c3709b533d8ff543f12ea8d682195e32d0885e1f2bfd525eb42a8e19c5b39d73571d63b6df09ea0d3826cf91f9939f80bd0849bbb038ffa229c1032604ec22b4c5ea4550b66acfc1817d510df7718213d3669bcb8f16c5ac6957b00f7940ec0d2de0748c21e9b344cc7a5271a1faa89463bde971ca51497712952841e90eb6bad0e3f3097a8e004a08de300722acce09f623d5d025829264b36687ea5caa05a07ca4c0befe4fe13cd5eb3b0c8000000b01cb8dc034a97304f2bac9f2983e77d9a8459980ed1fac09d42c3b89fa85c4667bee204f4fccc3ca64fd5a28f1f900ad7c245a6b3ce03f8d96dc7ef9b8508be617ac09681b642f99074b1ec249a33dabb73255326e5de48eddb2cd412753c8cfe6a1a61214184800bb5e668ec1a8151cd1ac96d15c39e40e8001824b0ac0eb95fdf1b1e659827baaf336b4ed82bff0b34298fa27442287c46f75ca4e5d5edd003017f872f76a60be66849eebe8ac35b5f000000b01c5e538d962e5523bf14564aca18c790a02284ebbe729f4febcddc5601db48cac11ae5295b6abb02f08b77d6fbd733774866dce9a07b7cb9b2b245846bacf79381c14b6373cd739aca5308d32f89ceef0647ccebf0dbac598232d807004bbaf8eb24561a9f954b95380af83afd797a6a1ad5a1d5c538e6d9bcb2ef6ac59fecf367d86e9fa9ef1aaa7958b8be641f9a87025d319a89e3d9aaad085b9ae8fd0cec8a804c69e3fd599c004d8106e16106620000021c000000b0196946c5515a5595eb50be898743579caf9894b1285b3847d8786e06f62092b1a41d90a4c49a35b837a99e842add34c63d8e3e254678b9a10aeb3d70f559c1233c94b69017a80fcb0536466ad6094a3351681996fa4887f46b543b728803c3650d40cb418436825decfa7a14f84c6691038e4d30c94f28e3857714b1ea09b1e03a48544e3279879554c24ebfce00b0660e514f3f784be0deed2a7a00598bc0ceecd45e9d15d11f9e10867439edc56dfc000000b00dbd84cf8cbd771e9d7492b775a9b6bc8a841eefff36e42ef56ce29845bf5b4bc9362b3c95c777d9cc63fd6e19636e2148ec279d7ee532b6207206462ff1479e114b9876e42094080f90f68ee3aaf88cf8321090f2cd2cf1b1f6f74e461e3e9bd94f203f8133387dfcc203bec772dbe010d11ed87fb7547d7f41fbbfe8f7df82ad57fde7d1e510b8021507ff36e4ddae138a01c899011ae7ecfb764cef7f5c4e702429b05670cc197eec1daf6ccdb414000000b01a95aeffe4634777431042fe77933eb21c70c23182ffe5102d144987d27c198b0f0b9032d814ee48ff799368662b407d976fcc255f23035809a7fe218a60be1d50441bb644f693a3bd27aff8b84907e87e4c8f6ed82e82d6a10bf481e5c86ad7286ebcf5d3deb9f7b8c93c13b379c2551d7be360a11eb6f8d4cac6d575a68b911d80770acf1317b36a61ebcb9a58f3b525f1d47c89cdf683ea02d4f9544045714234a0b0f6f4bdc82b048d2af1d7a0750000021c000000b008d8ddc0cdf81a2c4c8eda72557af3af5c4f0d977ccc70426e99da8b95767c5a29712e096cb3671a770d2f1a8fc62feb97b3007300bcc7fe717213916a88cd0ba73a9e189fa4deebd101c775b4c08ad32538e42b41298ea0a134d3136cf79f3438e6707f2555bcd542c6e4bc0ec76d481d9bfe5f9471b698eed3af546e1922e513947fba9cddd4956ea2a0bf3d652ff42462b950836d2d756695d464fdb3aa67a140f6760383a8396cb53e83be5e6329000000b0196392f3beeb38a11dbb27bbfee05abcd70e2199fef5f7b4dd18be79ee9c1409b8d27ca440357352f7ef27a23785ebf69b8a74f4d6b2da33a358441c48b787569d0108eefbb6aa133e0974ff2622cca3fe6a0d18c47106a2709519bdb4ebdb820787eefdf3e1d608b7e8f4afbd95db5f2ac6dfeb9d34b8bb42c200ffae88a134ef54b5bf9ae9ef248b8ec7ef71f4e0451adce36d7b650a89996f7ef3f513686f5b89d1f755d594c40900aeca7801e9b4000000b01af7c8258cbc2254b2cceffaf5a11edbdf4404de64a97c862a707709efaeebe179bdabb1b99c19ee71407258a8a582d5e140b8986c2d1c2f1b61e186bc07b2b83c574bc339cc18984da7db414403eca0ca1802021abd60124ced5e191863da7f52204b444226f1572ec36452a40c000221e4a8d348dd1d3e84a60f41cd0266a877d8873e1adcb502fc25bc7ab87802e317f8024b4dd631396700407314000bac42b35c520f23562d4a479cd6d8b077ed0000021c000000b01d003407a851433f325742af4959b47405c555b58adb6e8a6281e61d7273e4a73a1d7a061d2e67601cf0b8e43bd507cf634d4c319b3c7b268e9c279307de23ad5068a64e66b2b660a2ec464850e7e4b2531394cfb6ec3d7c6fcc359f149b3202fb7b16f2e3693579dc796d5c93c2cce72c339f8ce2508e2c054c924884877ec38b0821b97295a311d306b8da494400992e58473d53d9261fa967c42aa87eaffe8c9a2a2e79ed363fd848941059ec65a4000000b01c2cbf78408ccca4c49efcd695928baf5423f6c910fb18a02b354a9fa3674c5932969f8d1dd8829603326c146364d1fccfd132e3600688756b723e47ed764d6c6f70455f87e6d2aae9de84791adafa5c767321bd045eabdbcfbf9fb22d6f71b61e7af876caba2f2fa91d14a85fc9286107cafd05f69e5c1a90dc96c705380f719304ab22593c8b8cb96e20b080ec0bd1157bc57a136d5a081190cfd05de4ae3bd8bbe6b47325a2b187b0ee313fffa9e3000000b0113a1d12ece58045ffb4fcc0a63947b51220eb5eb0a05a45a17ca6ac494cc779604dee73e5e7179b1041174f17ca6338ac7cf1d6afbf9593c4b1e654343917890ba8510a3a019cf7583a2d6f41505d82fab4306fe0cb5f480f8ed09b152f433817fb92c342a876258e77566bdd68605d2d351a5b85567ecd61bbcf641efe630efbbc8d916ca74ae872ca9cb5174fbf940efecf93c62da3b3f853d4686c572c68e691abbef1de34897dd17a40d3f0f2170000021c000000b01d2012643d6a87e95a50abb47cf61bb745140681bb4e2fcb42dbbc4ec2ef1f395189b3580109bb584c07d4212e0093719953dbabc30e5bafb8dba5139e61567c44a7a21c47150fb233ebc0e9993d14c43c181b7f843c86a1dba854fb5fde9ba67cb21661ed382fc3a61fd8f9ce3e2d5e23165c299fe673c8a3e47149632bcff8fa5765ac76e1f0b2dbeb96b0a65cd4bd19f076b835bad12e9af20f15e8a727621034bb8a398d2554f7728fbc71914ae6000000b01e4ddc658866ee39ed454a5b05b3c24e2f0bd37d428fcd61386392af38324b6482be97f9ad9e4be9a20e3fe3566b16d7358ceee3cdcd84186c870d9415526e19af2a9c75927b21d9f339b992203846156999e7013c8732d11d1186a520b42e29e26c883c2a15d5eadcbd9b97744fc9c12872175c862595cb3716e94352e7add04e2236e91c3ec24ce4b95d4b403fddab2568e32b40dda0bce7aedbc10aa708ea301e5276c5a49ef96f8780a5ffbebad1000000b0046d509beacfb4c1ce6ce7b8c18ae65f3f933f56635b012a24878dccf5f303c8e28c7b630e57e87809947ef32a4af4ca67e1507368f1bd99395e1d6a766e8a015fc27c51976b3944d3b1c91db33c5d2e0531281505cd22e1f09c71c6e6754d6326cc2ea0e7f129f32b5fdad6727c94340a1dd14516f925cf0eed690f2288f164a07530946f6e391a0cd55ad466009a2c02dbde53393a90cfaa1202044350fc2a19751d5e63e87227c9e32681c0b9c2330000021c000000b028ef1c573529a561ec7b39913e58905122eb735d7b492ed918e9bf649b1a9cf45427ece32163ace1c69ced79850e48dcb45d3e932295c9a43edba8022ecb03043e90608b0551622f5de08047eaf690c4c3f81c7e91541a0dee29178690fc2202cb5c3db5046a6a9449c51c9f5fe130e22c30c236cae19cd87b750ca3243c00af10591f04b85f07c02e69addbf1d2f7c4156874dc2e240c1f15caf0b369bc3b9b8015ff53d8395065443a73a17f46d289000000b004c07042d24d9cb824cd0ce430da79abbc915775603b0a2659a69c8cce9d89a8889fdeca7d66530bad96cd7040bae1c8c6bef26f84946b28c3fc24dbd94862d85697581a5e3b89a2871540e3a14f107bf608cb02773a81b939be1fee28e17fea943c6d1d2a4ca107c042f19ef55aa8e810c3af937a108087d73768d218bf3eebd38398f05016b7e7c05d5d475a7035562b4da23538354a97bf9e30ea4b595b48e394fedf957689e5c4550e86d84a7bdc000000b00df127a2fef6b52b2eee05129a0bb3985c52a1b80dd302fa10b949326c5647c9a38a5e75e75e90554692540eac7cc7af135c004f28dbf0f7daea323cddd3c51d669676fff83ec5c86e6300f248fd539b05dd53406dc972f70d1d3d65ea975ca39f02fd244cc60108f036c57b800ac2be03c9f0ef38c9f412f604009703a3dcdf8243ca2fd11fc415b8675e4a8816ad880f79038161296e63c4a21659fc1d88e1d9a5ec3cc1cb9c49710a4edcc2007df60000021c000000b02672fcd5595f8906d10a3cea9c90b1c41e53fbe92b8f62df61781381b91e2c6d21a4a68652978c1c6aec6c61e6162a2667905b9d8d7ff5f0a9ca6bcc7c8a10bc3e320aaef6a2e43c3536626c732eb1cea583f5a6d85e53eb7f34366192df68d12481851cc7ed0d13fc7ef4e8677ea09e2e9d702cc487482e6750743201b467c787bae580f6deda6de40d94b870b2b0f50e3aad22f28db477123066c2e5d12c55f55ce3e9e1ea20db0e791811eaa145fa000000b02aca84e05ed8df3e3d66e8d0ef32a36c453afa6f9e65bb858bec16f14f523dfadddf1f9ee968a7075c11bbbf6bdfe9fd54ef1a6bc3b746773ae40056577a45564716d4d00dcf090fef0d4936f55869eb5616bb27348680b5be7bda6c9eed59e64fc1b9e4f89ed9d50b0b84762ee372e81eb098d7a85333c4c09ca77b4b431e8a26bf3e0d5161e2e84b2bc90bbc1e0f432ae9921cd0ae455ad8f571f29af5ccaecfcb990c7ef9cf486c8cf239a5620c36000000b02f4530ea118c1daff8748da2d12e62c30d62eea32f23905ed00afd9c3cd7e58c23fccb8afa1d6a93992bd34e3d6bdc2d95a6caaf1dbec861cc294aa04485683f2ac5ac3c46af74311722a1818dd741a3d0a6f42ad2b35943fdde270d21e4f8d15de33fe7ee8cab726c7c05975c5f4ec302494427031de45f18bdc2935a98943e497bc3969e10b2e5d5f4919aedf8824a2983eaff0d8e6af2ac2f43912577da7b370deea9e74ce3d0812cfd63e9de392a00000ef40000016a0000004819134de460a3538ebe311d2b01518cfcbe7c82abd843187ffaca9d8791aa2d3193da693e00000020209dcb40c5d789fc9e0cb438b466e4781f4819abb3637a5dcefc016087ac60ae0000011a2543fa63873b02cc627f3f6323b7adf008c8b2117b8ddc21aeb752592307b522d674efcf000000f2f29372f91e5ad9ed297a6e1a88daa11b1dce840c69a86e7a1a3c5a8dba6f539be4d19416b16891b7539d9cc354232a18d271469544c8b071e29079469693a69cdad9980b009337f720f292e46e4130d791499fd1c8a3f0c83d508d23a0b6391613dba79a0fb0006d83b4975e3f9dbf087dc9d1fab1986ba6401d72221e8aaed9c1ae6c633ea04c370fca5e867096bba14e1e6bb6a0896ca50162ab59f1e66d4f24ef3e6d903a690afbc691c76b8722bc156709623b18a785025a41a10e4425afd03fb6a903ac39b0e620b5ca34c282f0ce07d967a3d5e8e698219ecf5ed4a3f1b13160c468f996c38f52aaf2fa61dbe41daa0000015f000000710fbfdb0ad82c98fe14a59bb9bc292046aa7da4ffea6020b1b8b238ef82bf836a44de39f70000004945201d881c908b0f7a09e92b4deff0074f7f6fae319564f35667a06c660d59c7a9931d9141bd9e257ae086dbec1dbdab07e2a5b334d02652eec8f4e7fe26fce732c95fd699980cf272000000e61c4db6cb89debec05cc6178481e25f33599f2ea4e77b1ac4cb93a7b5b4a250abf73f8649000000be060ad17f0252904c9a6488f9968f238ca0a7feded950d0d6ca620e991bfa5eff142972a6fe2c8a48b72acf9dea2a4b01ed8705955dab57285fbd77c6c120d915861f37604c12b3c568acdd94dac67789b62ae6b06f542c4d0173ab1290340ba2c134c7bf85b17b620a26fa21135fa75daea5d93cd87650c77646aa3b1ccc8f7c2cafa582173c05fb1ee4fc3723873138f8fd6177ea3c27918b12a3f45a0aae2a35c6163739da99b233613c08efc6b267b64cb8fbf8fa42802ce1a907e24f000001ed000000f3149b48e0a7c867f74dac87beae31a601741a58b7f00f512b19c1874d3c783c9793f5d77b000000cbf03f5f3317db6f82673d433f10f6a7b269271b0d3231141f7c3a0319f13a3139b426a2124ff8b099706a2d7e05c50ef1a07f0335cbf708e8b89de1bdfdeb0602749aa7818d91c3a9388fe63345d44dc58789bceba9175f03e39adbcf5844a197e7c2083e4a512c2050155c60f0d5e5956b4bcdfa033ef614b05a90972e037442af8e833d0dc76b9b1be5e4dc5bea0b525536f2f7a842cefedbed39bb82a01a8fd454f17372081397555d0a526251fcf83f511669901cb2a1d7e66ce4af9e5e2f9462172c4194d1078b5336000000f229beed230a9c6c24a40bd46f652bbe74d9c529d34ff225b1e4c6b9a51a415943697a09f7000000ca62692a33407069c2a44aeb90009775b61dfa6afc936001a1780b4d7a806a82128b090e545c03d0eea07241ed72d193845a7ce93acd6d3285337913980b62d8e9468b23e614078b7138aa38dc5c9befe9132a33155410a96017a62f8c28e2d09be7fafbb99a5b5518da65b8f7ed3a24fd6faf3165a545cad3819b84288f00521e45a698cb04995197dd0076a1806045f6afdb567bd2082c62f105962e843bed244f6e29954c0ffeb5b4edbf61a757990951d6f39b57c0725ede8b733f95980849492a2c86390f7cad1e7d0000018c000000fd29747398ce5e562c6c7dbaf0189138b7683e067a016937254e57d93e7e07d11c8ec32e08000000d5e0e8234e4f22d03eb9719c7894f5fd1913b2f266e086e83bfb1e3adc4a69baa38b550f15747cc492047d16851e7331c2ef4625c60fdab185fe3a94bc27403308080e708cf7c22c487a92d166f4b02d9f5080c8b938def6b0016bda56b22910b7a630feec8cc55b895046037d9a7c6c5332dadd67266bd83adcde15d322ce4209420b4d0c7fb2c670f87b2a9f9c15dcf569d5ebb6c2913e402058964223508d2f8bf7f334513ca8607e9d2b04e12d3a5e3d7a86f0e6c9f8fc3e7dbb7e27214c1f8e86e482b7edb9e29f461aee6b69e034ad8cc361b0000000871f8dbd30a426947c13dd774cd7b8becdf8db8d892c3cc1b18d90668d9cc0a0ce719656540000005f9aace7d3ee7d6bad0c55a0efe90d7edad0f92f61adb69a5ede040d848f86590342f4c633a52582aab6ca9efc46612231cec1748fefabe793eaca7ac8f7420aa8e13c10dba0fe3f78e287a699f547261a9bc76f24474f53aa2385ac7e1a0050000000f50000007e0c162ed6c6d06838d3e3ef9699af278a2acbc69cee8685d1245b8de907479b22af2ca766000000567972955a160cc7ce136077b1e4012c4698dec29ed9161261790d38d2da176320f439a0be65308967b7e5238fe406836fe0edc04eb0e063041156037b3789a12a155cbc5aa69f3bb2627a2b421c04bf3a49692489cbf10000006f245a8cd79ffb7cd22b8e7c86adbd9061d5831380fcb03ded957b6d12e2e50c2191de08cc0000004793f3104769d080b6bdec4b1eed1128c0578382f57b3457b3ccea83ee4f9dd7ebefdfc6434616c0c774f9239f6f5d4ef4e85bc331ef3004e615cf741f52a44cbbc6610fc7603bb5000000b000000046299b7d5a6839f521ac9627f4bd556e638bfd7a2c241e7881b57a83f2205e49ca9217c3270000001e7cc8442f896a3e5d62e7000e15f180e770400329a00a40e9b96636d17c8d000000621e8bd3d0b4809d10e9c604cf6f3c0482ac0abdd1aa8ec68431b2be08215f297c23514cfb0000003adfdef6591dd9ca371fbb1d49db22b8a1dc27abe9c376ecab5ee89824be1f966216811b31832104bb85620a981197b5998e81f81bd73aa6e0ab94000001e6000000c413a4f71047c1fe1fa02c8fbbc73d812cb9bb9ebd22a4e9b30990847d6c6de21f3aa0e7410000009c659f5dc9e21edc35d7ea17ff877e51088087435a713ace27496a7985f9d1b0cca5f2f51a241081cbafa33aceac1d6a59fea58ba9ab539ff781d1fe6fda66735b19b7b30abf85968745374fe2a7d744a3135ec3c1d9eb1c2b746ba6ee426f79643ee843aa228064153b788988bcba71a63da1ec059ff9ef6521e00c046375f065a28087f39f71bed9f3ec66fe935b1471b58e6b864a475e782c8033550000011a1ac3561647d3173b5769b8dc996dc5f5048b884a6ecd1c43446a038682875a04b968fb09000000f2030d85fc22fcbc45d8b7f5f6e7e936c95cbb8261a580230fa30081c971eabde0092cae12cfdf72424fe7738399732d00719d586d8470965e944f36dc496caedbb493c7d33a22fd8b00d7a648a4cd3a31c317f88b9e336e237727d1136382bbe96780ee257743517e2d0231b2515f8164b8c6ecfb008ca13533cef63b21f313466ef431357c30fe9a49d22638c8973524196559d25e930a87bf984e94bd021a12e55625a2861668ceea1c2d38fb020d097274c664c67698707b1bd14c6742a89eb6c98a974ef85daa7818650034fc7d10fd22f95617b07db0b8bb351a00e9076674a515207be6c518ea4405db73f6d37dc03000000100000000a6244cd2b7cb143e790d895ed3893e1f51534e1042f6716dcb609d849b452779f2d70c63b70000007ec283a8a5e3f17529e94064deee61fe6579083b7dde761e80597b89e03095f51757e6c62c7b5941740fe465642e75ad314114e47e48a26d1980423097533c2c45765e7d64f7273d4fd23c47bc974a41b6f58af175e78e877aa245a52c98fadde9010e0d61768d2672d84d8cb760865646db6c77528c32ba951800ac74f6cb0000005208e53bc8a2728aaf5ec94e5623c4b8279f9d9f0c03221d3c2bb9891a0ffaa07b2309e0f00000002a12b62f35b20862a8e9c1717400bbc073a8ca13addb2bdd4c9d60a12491f4f4402bb1e6e799b669668e8e00000216000000ed11000efc5c9882e357c773e3be74e5cbee7181473ace8113e99271c2e1531f587205bffc000000c56c78872bc095436b6f44aa22985e58bd920fd46ac8a903b159ed286a7c2e385743698c0a4c591e1943f391f73a155484f27fa007c0d1bc91baa3e820d68c3512fe0edda62a75e67d8556c0b6e6852e4a9d4c5bf993ad9cacf595c4f706776d4a7cfa7b949d1b8e1b7d7b8f666e624b2c3ed6657a32f3712423ccd91753f656171d5062cffb6a556aec2605e019caa3ca6b26d704df267d70e33ba9fc3f4033d18193835a1a2f87ee387b06f02b677f64d74f9935f304a437bf70f0b31254a75c2e23044c2a000001210cf9bdd2ec95eebb7170803efbf2917b9a9c1edf52e8a6750f7098884ec46b67e428bc0d000000f94acbee50e6b716416f0e61c64b461c65e8bf09875a036447a5cdd84658ef26b3612a5b0a7510a3509270da7d26120098d9905840913f851040dfea13ed4680c7c7538eb54f345c3e87dc31e38c6711ae53113d7cb04da5493dcf8bb9c1911a2b1fc5867fa9c4ec92f55baf1e609a1a6185f5741beea3af0251330a0c81bcd930d467b127898fe9c55dc848d017cada31dfc1e342f273b53e66128430ef5823baeb936752526ab7adbe93b1c4b5ad186fd2f9f05726d0aebe740a0d146aaa0e134fed03bf489e5146dd15d4d5b36b68195d34355226492eba9e696aa2c71b274cedf3fbaec11387415d66a816f7774b3cea5c01026e1dca805200000104000000a529a5b163aec33b6cb6182e58392006e73eea235b0d38b6d0e790b6f15350c2d987c9723f0000007d6a0e5eddb8327ec4ddb35f255a855ba833b4f8843abe7b4d39609631ab944d7962d5d702c4fa16932a00a14cc54525f9ff4fca84abcb3d2fbc02edad9a1698c03f376a65f247b03ee95576b7fe79abfc10f18bf98209b16405006d3ef8abb06d6027ef4deaa7b67e60c8be0a4e68d0d6084e7e66e6bfe734a0b27689960000005725efa67c5f2825fb8a854612ce3588d41ee10111fd2b9b244863ecae223b1f132abfccad0000002faca6e85670c912f6472fda03563623cbb6524635d47be6fc9ec1abf55b5ff29314a15ab87862d0cb05ce5e37e76e39000000e1000000a32434ba45ddab86f300ab3c255a087c881568d582fe61a302679dbe177b42d7103d681ad30000007be050a7c6095e83b92378d19c143b8bb0cd592fc28cac9ccf7e54cc4ac8acf43afc8f4e797f3c5fd8af4d3c941d5d157673d8e071193208ebc26e89410779d34736d7b4ce923b9f2b3290d2b58b86c250f4652804a01d4408f458352f8377ffcde43e7e6069d122d7effb70f750e6898691ce9ab01d54fb1c4e35dc00000036078ac306c693fbbcb7cdc41c8cae602ab3ac4557f9a4eba64763a611ef1d8416e3b964f10000000e4983ceca4e618084b125a1d9b909003800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d9000011000000021c000000b00a82b5e16f75545d45b69ddcd21c75ddabc0c5add971f4635ec79419e514c04e171c03b5218bf75527ab0528ade920b0f4c1a69631817e8887d138305a7a6587962fbafe544cedb2a758e77d0ad3ca565b821a73e978971f5a77a528fd22f057c2bada9aaad069912666b3f32ac76c242101016d3cfb831d4dc86113a6621b52d7f517498e62984ad36ee500784ae0b80846967bc86bf01ba17ce9ab41daea4500948f77bfa9e153c4c315d7d3227899000000b02a170e9a1a205be2f3fa8a59c68db499936c42c2b3c7044961f116fd79dae1c0cda3d62815e269160b9709deeba82c24316f09fd0ac75c880dbd9a5627f915d7779822a7568942e9fc081b76c4472a9f28e24901fc52c143b7fcd9591219c5ee553b3832da24c075c22481000cbfae021fc91eeb74b15106d54fa56d580edbe152d09bd2e86a1f2938898b4e030fc29d291cb41236682cc009c35feecca59c0c21e3999d7978d95bae737940415fdd59000000b029737f975c9744756cd089c0a7c3adfeb9554da3b27154530c43374f07fe1133ad42c3a4a5e375b566b45817f88b208ff795cfe468aa18af77c466964b9894214b62e1016e7cda198946103fdad96983cac8bbdab519e3e80ff6b43c76164da0fabea76155806d7a018529a7c8ed9d961e7fdc2105707c8311ecdfaf2729526c01b42b7d3e8d19a7b93a687bb0c4843f2eb8739bef74a859d7e82071e84f29856a113640102b33cd416ab4c56b6154790000021c000000b0040addf63155e669de9e25a86a6dd4e389db0cf9f7d1d5bc5745221a537d45e2a11635412566819599fcfdbae596a5fd411ca4faf1d9781b7988a68b9bed42740bf5eed5c7886189c6d74179fb123c73c148cfcdd853b81268f9d1e1d93233ecd05bd74b867b88911a5e933073b69ac426f5b1cf5dce3c21faa83b1f13d714e6bb441d9d33c84151177deb92d8fd3a8f06c1042b38da1154512886aacd45bde528f94954cb0f59c6e336e36ebb2f4b31000000b00d7a5c516cda4544e437197ffc1bde4d8bcd3d1b9b5e83b54369857387bddfecc75803822d26b9c3919a8a7f29a771f7672a0ad423c49d8986ebc260faeaa8d9b196e1c54aed4cb298dfe61a623db940f07b7606b43a0b29991d7e3727c6a71c081ac6c6f3a143dde2efde38fe431e220ceea47e69fa987aee9953a488e19d516b8ad666adf9820d548c3f499dd8214c2d54d32abcb51968561ab451a20a9d39fd05b5e72ba093df1322563d81a79d85000000b001068a29fea25f8cc5a3825e82607071460d4ac1338d611fd2349a3a6984835f823ba4c4327cb1775390a4d6690b523080dc10cd67589b06e507a8066ac1171124ef567036447526730ed91a39579c8d5d4b4721a7d3d48f65a64e1fc966b666491cc3b8feecfe968ec349effa6e148726c0979403959b1a8190f04824cb785b6510491b76cfc2a082e9dc8d4d37bad91a94f473f7e1ec44869fa510138edd5d8da9220eb851ba78e8c122849bd00f3c0000021c000000b01466869c900584f5473fa64f7bf03bb82803f3a3aeb9933f9f8b0e2bfb207bf52c17c07d73ee6f47532d01f96b0793c32a858eb7153d7fdc5927366afed41d10e3ec3bebc5d94f2f1b19bb4eeab8780644e69a683f4d7ad8fc9888543c526110d767ae4b2692a70642bb82a20f577f731d15fb726b994ff65412fdb8c006a76729ba1bdb41d6bcaeb7a58430c92ccf2115ecef634b786c6d211753963a69c8170f3ff7f7e119e452d5089f798c779b8f000000b00fbfafc86205e715eb247d2cfc1dd47cce75a38009fbb64c96e8109d231fa26963bc0e13ee9c63f38abaae2eff64e77e6c946135fdb0378680d0350e8d2ce517b462be2fbe3f7e6d03ff2148e31a46295b987b7900c3ce5c81251e3902ee1741e35ad152c945b1d8b2045d5ee5fbd506103aa88f3a4395260172240a37f8bd69dfbda5c3e92eba6d8ec2f78b05a1bc120dcfe44c86a26c667d59d6a0fed56ea4739ae580f4c8ed9466246af0ffb14936000000b03037567c219172d5ef199c8d1fa0566e98c224f53cd0cb3f7779d61846b590ec85a9a6f0e40036e6df31ceac20cf4860fb657bf3e6802f338a3f8cd752bb518fe103debf585ead1ac99171a24a5539c544be7391a1b1bcf8bb2f56b32eb16ed197777456f58dcc2db0b8f041da2cd7a20c33ee3bdfe80eee66f15ad29f30fee3a06302f7d7ba78d53a736d62f249470326607f20604950979904785bad94d5b24e46216722c1293528982b54e341436f0000021c000000b00d9c83bdf5d2f6d479dcb8e23be4479396618b7e84501ed2b0b269ca4527f6ccb7b7cd19b1208262597c44b76a3dfc5f7ff180dd8b04ba9ba542b198fbdcbb08ae21a9b5ae2b65ebc6d52ff5f516ad105903a690f17c8dd038ba32bd69e4eb8f6effa169e76e4df2a1de0d5f2d437e140b3e5a3074cf558ca9113c178189cd2106955a2739cdc533ba2758a76bd9fb6b1acac0a6484967dd617986c2f9798f343458c228ebdbfaa7098bf1bf601b59cf000000b02a3f41cd7eeac2b778cecd310626091d412ad7a9637237ee2f5fc3f62d41b6c1d6115782acaaf5a807f1793d4f87d58e666773922e04939be1f40368399d4f7984011e1451f1057d4eda14307b20801f5f33c08a2e1afe42a23b1a0d365833277c4447de1fc6f20b12349694c73c77ed145b067788dc8b4779b2bc157b9820d2c2c1801c35639a47a015dc839659b6612173ca0529aca227bcb5c2471395974cf4ceee62a2f48ac604c3450ff3ba3cb8000000b01fb7e10674a7144bdad43d1249c59d44c08fd3f43285208b447c3b8c798ff20cfbacb595a37d16527809d026f8aa9fe7bd6af7131e3dfb10ff1e876b87f41c9403f7fbcb2cc654600e17589c9c36d42cfd15157e8cc98003ad9ab2bcc166be08246aed092398eb49a5c53701e6c3dc5d14d56ea3b9ebd7f69fec15b3e8751600917af880b77351fb585c3920bb4fd98a1ad10b04ae76f541b2e7c3fd11337b3a26604b548a62c181f66c22fb13034a2c0000021c000000b01d4e03284e8bd1127df288aad77255fbe15e866dfdde70b2289f48d1f9a7edd106d433edc8036a32bd1c5280ad5452a73de0d01549a98b7588ac8de7bdb18883371d6e37c0d9e08c0e260e96cc9b4e35a64bddd963038a6ee971773f265eecb255cff70f9d3867997f5870d337d58b1c2ed00773e78051b25a8143a99ffd6010d02a96ab39734f72b50f61bd72ffbd672a6eb5e9f498b397afc54d3937e74ae1491730dc22480feb7a18f3b379642cff000000b022708f2be3726be56157841364927ae1c2db15751390956b3339a1e2408f5391eb97891044b6f2652af05e57d9862bbf13ec90a9a219d1e3b121abfb84978b030d63788b9b5e2693fbc41d29ada46c8e59a5441b097366c1d28d5ff896f322dff2756447067ce95cf4e6dc7433bc5f4121832ffd789cbf75afc0cd1ee83608e5b861ba61aa663f8c45dda99fbe986a792fb02daa982b07978424db7854f15dbc5490036f0e998881448033439d15dc66000000b028cb95dc27f29ade3781e1427c3f5601ae88c1c19198e6802bc8d93342038a45b54cdbd1b5041654ab18320963e765ae431c590059c5aa762f8e5bece147a0c08b8a7dbaa2982ed839f8de4aafa701a8b982a8c31fbb0611733cc01a567540a58bd6698fa35401dc97d4ab86c234e27e098f3273f1b17e23629415d17795e02b964c90cdee2eb43d402da730ecd546e91a7b4d6b4811dba60fdb3776df67cc1df82c1560b28a420230de6799930fc72d0000021c000000b02b28fe1091ea5057607e4496817384ccd57e7f0808c99d3fdab12d5fab27b9afca0e36f5f7065607d126575141a3d2a211b1f1af943cf35639ff83227fcc6a40a6a5c11bedc23a7973f765a416bc367c3016daba7a21650b1256bda11891e4c6afc4679a7fb467b09a43acfded24dcda0496caae749d229f588259642492abc30a2663a3b0d6f333ca647e5924f7cf250d156a28fded9840d995249d83d35de0fab789db90171f47736f6de8902f6d4c000000b013a8d4cac4dd6e18de46fb9f26526668bea911c183f50b2bd2c7f7b09a1bf92e543d28126f6d08d83105ee371cc90786603c1b94dde536705fd4d9a3b5200e0ace6369ff4cbab52875f7832b451564a3a1679e802bb997789236fd9b3dafe523fb21179e740fe1fabc1f1741c19b6bbf0f22e1226a9c7e4caba1985fef2748e766b49b4fdf1a0d67174a1c7805e8e7ca1566f5564c1043e82da59a3acb0978c8e5710a1c3e709b73b54bd0a4f1c7e2d6000000b01204d08fb80da9864e8ec81138bb8bd3a3d7d79b0541bdfbe24c076503b0a393f7f1f370642d3d6b770c25ea70b788f5a8b4a0db1f14eb6b3827f96aa921179c4de5c63d260e227bafc666112051dfea04fc066e3f28af40bc3e9ffc15273e9ac3482673698503e7e2693bdcc04397f71f8ee94f420aa10d4921eb6cee905da817393ccb21bfda403f991d8d4507c9680b31df05487f1ffed72861196514cf5eac0e81c7b8c5a651d105539a588d4dd40000021c000000b0282910f4bdb9a0f6da8d582941086688e9ea83c85de06dddfef6269869c9e776a77b956de6863fffa48f564787b086278b3891c3877ed74c905ab5cae27efed79bd55e1231de241bd7b763837e45c7cff180a40047396473d9a70964ec02b148edbefb55a0a8d0becfec38d42d83f0ad1302828b2e8bfc5c6098d1daa813eae405ef7fbfc65e63ff58d58b507a279a301894486828ac566a5feef4f8ff574de827e2afe11b620136cb72b064ebeeb7e2000000b01366537ba5faa682d0a3dd84867a55bd24142fc0047530a8c8e8de9de42838ac8ba85506bb9c0c112552f6633e72840cc26ccf0c4954ebf40976dff7ca28a2648bcb5b24b1800a94bc3cfa7827521351539f162a060ae22f92cb66e84846007e16f6e609843fb52fdfba290793556e3b0554b3666c6939f941b2a7227ae693941b049052861402397e6771a0db5bb71b2e437bddb65ff0b6fc424b3fa76fbe3c8060d3c803dd6787fb348c129695a7f5000000b02d812e2bba7a109ea30c547b77ff540e0ed52cec982d9224daef25e726a68c3dc4e671a3a107446aeca2d42fe02362f96a179f197e338a492ebf94229a824d4b3954e94ee64015effd89f01c0c38a4ed2efa4e69ee1577a39cd12163c760bd31b85ce99cd9d9db510ad092539988a09021fd0ba2c33553572913799c97d1b63aa5b6175519c62a53375e55342f39987f13b8b272473ad38a894b108cfed06016f50f109bf8ce0e20a0a8a7c26bcc5b9a0000021c000000b023970c3e6111b2f2f585d2144569bca80c156a3c160931286eccb22044d8dfbae4ae1b75ceca1197b02e22c40992f94fd88dc39d0bd74ed93c6b49de3c77fc7d88f67870bc49303f731575c1206ebda7453116aed743e293b83d332a93259ca9f8246148a3e131f882f73c656f1d11341ce3d58fbfaeae9f69e828f9b1fa2e249293b7d8bf84023d4c690cd52d7423b4006ca7b936cb83db2ffa97134d290127d8845a8da6d0d0200b4d72cbd9685635000000b007b00dd1e12088130626e29b9af647908cd204a7a47fa04841f9612bc65fc54828c5edd2ea2894e63558b2f631025c168aa3623c981366d8dfb69600d0a2516600733596fb20e998cbae309e08b9a5491b81966ce1149236c9f45ac4eece8932b048305eef09d6b1e2e0edc22a2386440cc3fb895aac53f49decfcd3661ca4bcc263455530fbc92ba08263f406d3276117033e83b52cb507c42d8103e604f89af61f960034d8a3730f32aaa44db44268000000b01dfe427acaf01c3c2efaf0ceea4e132da7f6805178f83efe603acb3b0de333a2a3bfbe542ee53c16ab1ffc5ca3aca1c929ef61947299b14aa688a4010f645632a6be18401819b2a70d8464ca21a2273cfc2bbd4a750b491d41ccfa3926b7f180c47169fdc2fb1e9aa68262db5297a69c301ea4d874e9ffe7dad4c6b81d9f2160376eba01da70b9edcf1766e69776ce770897c77e9fd4b0f947934afad393baaec62baff4a80ec32f506fb0defdda1a8e00000f6b0000013b000000d2191c5c55d97d62cc930a71d279b653b70f04976c7fba0f976a8e03991964c67dfd5de963000000aad7effab564ac413113fa6ddcbd51741ddb142370e925e79421ea9cce6d62d73a296204b7fc939011136fdeb3c9aec940aaf4368c6d54d6c82dc4b5287b7804a684659a9ab38fccd03c321268aa141fcb73432904a2a81c4d4e1dbda7840ab83ea2e226e23f610adf8b8ac2596c69e2d043f502f647f36232662c3ae8f9362a5ba1deb20434196cceb3623859be20c60e0bad5191d9b8678405c6ff2e3051203ec263bbb87cb015da5fb600000061176768083bc472c7d3de7b3b2c1467581e29390bdb284649cab876fb52569c486ec30ff700000039d5bac759a9af0f873bebf80a53750171d576ccf97a733dba7d123ec2eed57e51e1a96a7381c1ad32444d77ba0e750c1a313e63fdfce38a3a80000001d7000000de265206f16f999caff8e76c779fa381d1f1c6928578829161af3d211343b31dc8a6f04575000000b619509a0928bbea229d121cd4e59c371c24b5c2ddbe62c34027b9bb1b9168af3bf645aed4159267e5ba68e862b7f51d3f79de0cf327ed692646e06247c3cedc765ecad1e59f5f45d36418a1ec5ec1894872118e91b1eddc00ca1ec86eb772a6fefd64650ec3348604d2253c4b2368580d207f82f3bdd665b7d147cd9b13985c4fca1febfb0435575c25b1c3ededbe2e736fc04c0dbf75289bf1fca3ec21e34675710e4fb7fe384000743806bd8ae96413fa25185aa0a9000000f115bce8bcddc2f339c560ac79103553b6f97f4c7447c3dda630f4ca5d7356133f97b7b882000000c940deec9491eac4e7dc547ae65ce018905c867fd8a621f040c4dbd74e3a7ef113c4e447b0954a5c4377ed29eed0139126179325366fe2d3797746b24ea8acaca148d5f930dc63c96880e4a6db185206f50f78ae2ae929f3b2dece88503d5cbd8c8d8724d4e2646c46fb4327acf2ed2f4527ff18556eb043168fabeb91f2ffcc542886db4a43ea8ea5f8a26ea462cf7471798e356cb2e85a924d13dc149218227198bb6a292981f8149fc21e6d6f87089e1b1ac2d32ef63743773f69f273fd7cb31a6457a54e9f61f0fc00000183000001241b3d91d7af62755109199ecec0954045aebb66ff851d0d76082c4c9e890ab574175be8a0000000fcc5f26962456586397295e17b5792e8e49f90e0ac5a7725e021746fd2f34917c8a0e897016c49c534f83646d436c3ca753acdfd4fd6a5d63e5f3c3f8c80ade6a873c478a27740bbc41b5aad6460afd6c2e5b9c4f06c7034430498b22ca74e0bafe1efbe4e7ce3d960ba608a3ebde7921a5a70e0f5f9fa057de83cfdcf1b2d72125ee94722bd409a170da55b47b778f55afbf56515665e697bf666a8065c5c4a971ed49a99458623c3600c83d88e727fce3c7d18eb8a5de69d07910bca1e0bbbe853ca79bb163e170a3f27a0d995a88ab7b51af0007d64c8d1a1cdfc5c22ac8c499080a476e1edcec1313b8cb9dbc6bdc5cb1033dba9346b55f3b5603b0000005711090e19d6a52944340c7fbfaac6a32245877be90d25af8ac3b2d1b9028639289d1197140000002fad661ad9b72e93a13f55e96e6cdaa531379e01b9114dcdea99bece0e7d7821f3b2b57c04ad71125cffaa8ed606e7fd00000192000000f8003ffaba82820802ce407ee300cca6f7b04f7224171be9ba325c02b5727ed14de8686c49000000d0c331e6483e2d796f8dff90f46cde964c41d83c47f04f36ed0a2f3f3ffb2e1aec6aa6300321283c152b02231f9740f10b4a6d814d659adffbfab14440ecfac7091f5d98840ef3d45b2de8ebb565b98efd1b7717fdc3fb9988fa5ecfa0279548f04ec6f51414192e39d302cd2f7038ee7a4369f6acd3a04a51428e50793b3452774f67dfa9cf3f8fe79f7039df9d9373f77564fbb12efa08dc91ecaec1c4fa9035e8648f8b4895d78c95617bcd0cdbdbf2b119c7c3bc50f3d50dab5281821332fac40d981e8874498842680c192230329e000000921e19557932c66ca5c95f973ad48429e5d8081322b7363c8f6915e32d6c912169ba1b4b650000006a58262cb99c3d0ad75483c9dad7b78206c3bd4eedd95c4212c36f4c50854d4b5a46499692f5489f36bcb757412e72cb8faef3fa08a5a2eff005c9e6fcf3563aa445a8c73856407ab059932ae1b3dbfc11eecabbf4293913d003b81e1cb145ae0d0c163383d475d6deb94e00000151000001172f324a34b85e9dca1666497fde94b09f7006d46a354160158b815034ee5d54cd557d1a30000000efc195780781a312c38634c970ea148bd93c1dfc866f9abcfe49c40681e62381d2947df2067aae99573e7f33a63ba3af741b7aa6db8c17d874e7297d6e48f4b57aa28e3efacf0f28e946c66bce6a3f9919126d8f071a8f02179a69d49e7ec009f363f7fd7d7c391117ea873f22f9b61a1c75bcb898ff5402fe3c4c73a0c909b46384898f8e682194f2a5c3a10ca7c3d67f413f9d6e1dfe329b35e6b4296a0829af45df5f0966ed8b00b97d8483b7e3b011e14fc895f171b713434c1af0b679175822997f81d633159a547d929b15c72a3535111ae1ad4b994d2c7b9959f6018eca956784ba5a29b4f38629c82219d7f7000000322ed530203cf302bfcf872e06ebae8be5c61e756eb4126589ab1250271a7e92a88528a0620000000aaf63e0a8047941426eb6000000d90000007d130063f6ed22e092edbd1c38d7fec3b52359917c603f77a4c43f3af73914cc40990ae11300000055c6cae69ab66e8fce8c1c5c2d5da5f6daaa7b411f8c1f640ee57ee0e87a9d918d016f46aebd47ece0697a4612c5d6f688e7c7e18e13427aa667a1b09176bb5c0cb1235178693c8f88e25212465c6975e0051123a1d7000000541bff7a67ee4726c2e7fd4a94ddc5a533efea4962de656241aa02eb73594d1312412171320000002c1a2a574a2885f42c23deb3c4695fa3d82501ddb47a6029025e339ccbc972734f67645ba3c15994be424cc613000001a80000008e0e1186f317302c659c226ab922cabb3cebd9681ef59298add72ef5b9ad65fc5f306a3bf800000066c5b2180d9b8b99c06bac491e04edf8af7752df5d335005fb54cbad2da35846e4ae0782eebe0bb181aeed47c60a08200ef39174ceada977947bfd0b401073a52738c64a0d1f7ce3cf20bbcf3b07c76a5bc397371783e87e42436ee1c8d9013682f4acb145bf2f000001122fb0dcff0940186274d2970205dcef33d291531db96e6050d6ca40da463b2bd7e4995b4b000000eac9ad2f45471dd9bbc972a79bb1922b01d045d97ce875db05d50f74b227f63ca87ed2298584e730f9784569b95814b25a4869929b6b4c055637658575b9753b49efce2c0078538e3c2162dba3d0eff45e7e8796bc7187a60b5b4f6d3fa41fcfd3c391399d111dae362c5a66392f743310f4cda86b5ee9f3675a18502b687ede5a2d80b84da119893ca7ea6c85d1cd771effd332a7ef8170241cc25babf3af62470c05c772edb3e6f685d6687a9c5abfb18745eec389b5248b8f6256678103269d3e59528e22651602aa00ae0bed57eb337adbfd42846a27dcbe0d1c9bfd180578ac12bcb7097ab30af0d1000001ac000000c100646961f00b95fd4972b2638eb0813f03055e0d004ecc1561d6b898087d0ecd0a1d3c8500000099dbf3608685050ffc35a06df7a12f9abb373e9fcb02053382b70c0e7956c065a358a45730164ac6e88937023052092fff99a7c004516b1e978ab20f1f5e32d0bfa3a7d77b7ac224bdda3c787d2fbc1bb2c69c35c59500f233d0dfb3752c3c19453a892a664453778fc4dfc21212dac30cf191bd20e40fd884b70b19df4b954cea268b927dec095d218ade412d0b29b793a8f7d7751c6f79d2b4000000e32c24811251c120c745734d4e34cc0ccae4dae4139058a045340579e715f4759af318dfc1000000bb2e19e1d998d7b83909f614d75089b31e198fbe807f1b503162d0e98d5d5ee6ceb617fdfb6cb45705ec25d7f822463e8c12ef4ef643572faa9040d23afa37ed4d101edc3966fcf6af33c90a529f30fd8f7c6f9b2dc5ad1d798db339da2a36894bb11da48b2933d6c4f29d1d8985cf7e874fd933ee243e1a24b70d71809169021f8536767c6861fdbc3f2d63c8f73c8c0998ec6d35412f19124975facc7996aa54be7787a5628f64bd701da8d0cc340b1cc38e2c3c5f98280345ab7d0000018d000000922dd1c950d06926542b3419e245199a2bfd71b3bfbed86d1e4e6ab332c7df320232e36d910000006ae32385bfd533ad37867b952dfa917f5d2dd4f18bf4fb5db208d145313b6b78ad43ad661b4546f8c3c91257e6a8c5caccd0cafb9de1ce1a8fb6ecad8b73fd95fc2bb6f1e9acfcf0fdf10b416a651246663b7fa1feb6518a62e3a376b928fbc691727723bf85e9648a5d89000000f30d28e2a3e72466962c0cc144625803442eba0ae658f0824cd710ded4b4e2018ddf360731000000cbf0e38655157c2f485d5510b5de28d6edf6194389f17f16b5036455c42962f04d46b543fdea44ed635525fa72e52154412ab6e21b16251531e100c9c398434a84d74d032d8c9d07d8709539ef0bc52f8088dca790fce2130229e1475bc2113c34b96c64c7d1b786964082f31f7177915b40f86a949b8a7f313cca6af908344704e1d849b7389a212601ef7bef7b3ffb8b741da4c5611ad69d3421e7b05a7d54fded4db746f3002a1beaceddf150dee0dbed00ed9bbaa063ec2bc3cb4b5bd712d2731f2ddf38ff1b5e506dc500000192000000e6166d770e92a2f3d616ce1b54c1c22dcab92da5d9e4e21cbc67c0c9d1a2f6c69dc899f8aa000000be9892f6a743604fa686360d7d72ea9375f50d574cc36fa0414bad1d9a7f79abee64100b4f54ccf0e523aaf93d8105edf65441bc0a8ac23ec77613c4e82ea95a2ba81ac78035839a22ddc0d797233e1ac0efd8446a2b62e8e728c5990f890bb3a4313f5bc39f4f69ecbcdf6e67c8b74cd7953206f9e7066c7610fed1b06fe53e91909c6c3497480d97424a968079c607c9f25165bf165426509c919a465c134de74b2afe34206e93514bdea47f83a832125c0c1b6706c79209e376dd734a4b000000a42263b6a44ca02549bd3e37d50b6b5d9bb327a3c28d6a47adde066473eb98d01262f438120000007c3f3d50e2158388340267d7538e5de1e32b8948e7d6d10ed73954e0b0f87ae8c76e1663100da6b9c82b12709a82d7a2022f9a1d055efd380e6716d4ed80ab3670ba3573c68d552b21a04d5aa6be1fd397e09cd145768259b9375d9b46af47d6744adbf04c402a016e3453ff3ca960567da91d676d4caa0faffee75ddb0000007b0000003a20287787175afeb7dd91eeec24d0f90c6b900e8f755e5d3666b1f09d61fd4bdfa83bbfa1000000126b0744578b94496ef9cdebc0d8769cbd8a33000000390c2b1e9b33fd52ce9739d1340b105b4d10050121cb9850320c5cd33aa075883c34bbcaef00000011ef576526218aefd7dd97a19ac9e13f2d8100380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f0000000000000000000000000000000000000000000000000000000000000719000011000000021c000000b01fa0dc3ea475ea6e10270052ac1ffc91ca5c194bdb0cb11ff12adf63c9cc18f101a73bc7ce5e5e1ecf2576d1c65f6eda915bb393fabc573f4cd78eb0082bd988578685abbce6e82f4a0de5e58230b9581f592ccca33574d97e2964bf322f1551a95be727aefb31490a873ef27c3a23e22d82e6e417f4eae24852be5cb3d45adc473cadb9985018ac7d5ba2827f67c97f1ad4acdf55d347489fabc8e197391af1731e02f3c4c398e7188e992d46546891000000b0081a3083310e4d608f57900957bdc0cc4b5c6ac38d486dced2188079a2398f92f29c0ec23731a1dd0c1bcfc82f5ba6a2e39f4c18198ab5997cf81e886920c11a4abb547fe4168e3c613eb5c457f5dc47f028c29fb0c4016c1e0e74a60f4a0f6849749a63089c78c0eb56a967d5f5f9fb068c88fdad5da22da17a1efca4009a9e0865655753f9a18623ff602ec95a0fb604ea447dff029fa4ab4c0ed68b6b6a75dca9cbeadb33253a6a759d3fdbdee127000000b0256a1229b23b0d8c897944d9c73d70959bb62934ee69cc35e85564c13898fad515808f25ac98092a1cb2bb0a6458191802757162906d15b9b6804f2282440341e9bc00739fc0aa25f1ba09ea7ec9ac409d17b4ff5337bcf2d75f100ef9fd3a3a2620a8070672f3497ba12503ed91e3e126bf73a406224c3c7a00a0e683bd7337b1248811c362351eb155f55eb794d5071168169efead6d543dfff5e5df2c2996f4d1a92faa54d667d973d57289ae12a60000021c000000b0037920fbfa1dbcea29db9c27515f8b4c5497a06a0fca2461c44b233c7cfd8696166cbd7cb06a2bfcc8fbc7b81ef4b04967559ab6a47b4613ed63ee9bd9da0fdae0752370077a4b1cb30abc6c7a93480bbb64fd1e929b9fe9671fedde0c3ab42ce0192ecae90b57784671f3d90743a83a02a300ec27770266cf4c7d5d40efdb309b570b2fe98c51bb6bb050f5cc43b4ac126d38e44e1e38182be3196cc300bd54230f30c241435746b9f625d9599403e1000000b008b18e1ec0f9e563a1e677303318ebe57d4a35937ded7ef7936e24c75b42b518990787dc7d3cd58d1c50445bfbd3f61682ce8dcc2f56cb819c83a8408eee30be9d8d319b9d4bf522a2f3f8ad057822e8424c231f4d94bb34c3087aacb09a742198ab1d80700cfdd3ebe550c319da791f2f6bdd80a159aacc7dfb4b6b3425ad30da7c38b32e602d84e3106ca53e7ac57d1714717c37d47935bf5c7c12c1764019a0db83c964fe4a45d5031dfc6c9e27e3000000b00fa5ab66e622ef20fb1a9d6cc3fb9722a8fce8b57212e754a385126a6a5438cc2fc32ba9754836aa3ac00349e01d3937925f05f0bd83a7573f8a9f5f5cca97b7f685ab1c9dcf2fb64ad5c3d795a5515f906b159548c43784b6cd2fdb1634c4b92d0318bd5750f9125f7c443979a5c15e092bebdfe259946ce12ba1d9c66e754d76fb4f60ddfa1b34321e8dceae695e2c0c0969119f8360a40445954ee4138bd0044022600023c4aabf56251b70af6e200000021c000000b01dc1bf4cac742fe5b2896a84fadd796c681d7851c8aa18d29eccaf2f1dd15374531c8e8f447dfaeb04184a4cb82f5639e84739d99151cdc0929da7116ebd620ea06cf6b37d02eec9fcc3259ada93a903f6216309828c9d9f85f40135982319a723e8f286d1e4efc8ba0cdc759e6a266a25f9de658426033a4a78fed3d58629ff861c2ff92a9896cd16fe8a395fea481511627aba5eb6b70f8405970ff3e9a53fae9f175a1f4bc007ebb6488ad887b566000000b000e392ef5aec0abd5e6760f692e794c79a6670266f878b6ac812e53aa102c65cfa38784b7175ed0f817915b8d068867f379a5e60aa061882f8f6bbfa8006348cc99a56e31ad0103efe3c7bed23c9a060525e31a177c05c82ebc90e968ff5af6eb8598ea86a8ae81f940317669744145023ec0e6e668740414db2be1d61d116414b0a867a7666062775c3e6e3e80abf2e1ea386f0701d5e599dd3faa36955716c7b271c700ad9a46754c3703dc5c538cb000000b01e29412f21bd79de3547d7d7e927537bfc7b8dbe5e1f7832b834047f85c5629a8648d69eb082179fbab132966248fc5517b0ee060b4e12ad5c2db4237fce500a0d8f6557ee5524ce795bb6c30e618efdeae4d3ff93bc19d85e5137c50dca4c4406984d384f91d849da617fb8b27e72dd2d0b9caeffe41fe88ba7470f50af776fa005e03edacf3d1b8e5e8e1154f7ac0d0bfa803a784fa4c0380a4d4faa6bac068501b363aa66d15878199013ba1a2c630000021c000000b019b69d814e8a87d9e8587bc1a553b1b2294104194b4f8e8035a12472b2ddbb359fb96dd91b61da15b3c9d06695159f720fbda1208c4a1cf4dfeee578473a4ffc87c845e32232f92fef1f7fefcd1196e39031d2f8580ec24ccc1a2ddbe3da143295e4afa59f8ac90560bcc8ecce1ccc5d2bea41f7be607739e89514f0cc37018066f854727cb7f95857addfeaa3749f490af23a2ddc0aabfbd18f06d0977540f5f482f8d63f500b5cfeaae8c88a7d327f000000b01957bb02863d909c71ce7698711240ff99725669b81640356e6e9117aa32d47588890f3c793df54159a2a6e8fdddac3b5b5ef10217c73f1ddbe15e8900d7ec87f9e11a04165b0b9ea49c6bdf462c657ea627f844f45030672a4336d9745ea25e093c26dafe3e8b175819f78a982fff30186556a38365640120a9e0bf9e6b99b021134d11b62fb625489e3ad3e4b88fc325ddd6c47c634b69f30149811208ce3cde1e8c8d5e70d004c0e4baf322b48a68000000b0114d8956409be85fbe2369798ce0db00038b66a4b870ccf17e3abde6cef02ace27c33ecde12f22185b6231c4661bb32baf792eb571177331e3b77491810b9b29a8646bacaf9dbdd6e2c90533676c9888f35838bd3a6f77bf39a73d2d23eec9e5fe370578995066098155170987bad91d076beea9c799217508b7fd16ee4d5f567e17919bac7687516a07e2920bd0e12a15227bda11c287e0acff89a2d058f37e88285acfd59c1412a9af70d3162564630000021c000000b000ebb2a82d19f4103dfecebd8f57398ee4355c9cc81ec33fc30320854783234319688d02590e376c36b88bbf8649b8a15ab71a4cc4f0faa8ddf99ca3d1757e8133752b03c6bf210795f8997370ade5c2142df607e406f56984f38ffeb5a445da7aef955c6b8ecbbf04c3b82cbe7f406e17fafbce9cb61e33eea2799fbf261ef4290381a52cc26648df4590a7cc3b68990380dbeb96ae16702f24c47107021d0fddd97451cb94146f46ad22ad55995ce7000000b00b61768c2a49002bae9152a9dede8d5265f981ba528b0ddfc6e197ecd34caf14ec80a96f3d305e8b6755e6fb1180a1d78cf983ae84352000871f3e037672b3dcf3253e0ebd4bca77b7b9d72eed95b4241d07269c99c93ccc1f55b16f05a4e7f3adf9aa3de37facf37c2d44cc2f76333b0ec2d6eb4292830ac804fb8c33485f39eb7a788370d694fd4d11225954f4aac61c73fc57975f6b3a843956554195a92d2c74c0c8c939266e48f055987eca4b24000000b02aa8e5ce6f100372a17596b45bb6bd393c4ea3a71edb1a90ae444959055200deb18cb774a3804e112f9fa62de10641ad182b8ad62b23347f36595dd1776432001a0d0fd5bbbd37b6c00628c94ec79bef638399d27ffb8be47eddaa2a8916f6cb2a6f09bf8c20d7273e316e78bb114ee2224a3308b0025032b81d2c7befbdd3170364eb96177c6efef39efffd3a66de16259c3bc273a8517cea13c0f8029c03aca2a58045c6df92186c2fc7f16c1040d00000021c000000b02ecac7351dc44ae600f3c8f8cbe840c1be21b97baad2e14a23253e20bd0a63b3afc1a4061cef56b01b96101abfd80c033d11c7b934cffba737e3a5dfbc3339e23af20119de94e00b28b305ada9c81322c8b6964e14e173ca6ef55e3c2d3bfeaa4e5f0e953cf197fae4f0cc2e9cc6e30722b9acb13e361f67c920db08259c1433eb2bb355456a23114f1a42f0c44ef5f129812b83ad189b1baa603843658567829787f47b46945123fa28d0ad8b370166000000b015437d654f1b29a96fe87c8fe2d8217ef1c7527ed36123081ca873a5b8e0f3829d77380159584f5f1e78511b4aeaf9172f744af981b94cf4067b8d634fcfe219cd5409b060d1ae6f1156386e99abe28e64b472debb9c327a11c37ad5b052e2691a8f0e1f985042e449924b4c1228dc1524051df6a282a2bcfd7cf4fd418ee1038ebbaff280fdd75edd611ca603ff2d822a346e56ee641ab66527db5b4ffd1c3f69924204a2ed51c6e386bc842b0677e8000000b0141e83001d5891f41b0fd857ecbce6263714bb8955923fb05b3b82d1a658e8926d01bb89bc8a8eb3f75675d65c6ef741102610615e13de6e8282393c122ef890b6b5c515339793f6bf4e03e953c43f6afbab2f1f375636330382848e39b0c0d6a8708350f7189c2e958450dd9a6193181510810a42122c791b1ebc25bf16a733ca90327b54cdfe73b1234aff456eed121c55a2d0637439767c0c5089334634cc1d58b5159e362202ba9c449d6f92434a0000021c000000b01bf5e5d5124b0b1a6226da243c5452c74814a0665f084e07e72859b529d61103da23c78c846aab80d1fcf27675107b84e14b92721ede78715e16a40e2b3fb9ef9a97b1e88d6cb47e37a8f8047ae8da1fb6ecc13314f607b1764be260c94eeec7ffc7ff5758fe666ca59dc787ee1dd298251a67d3b6c2bd89b73c4afb3e77c96a9b7d7ca792f3a68ebbfe40e0d75fefc8248db9bcf7672a447e30c92d4b186cc6ff3bd95f97628e7d2c69287e1f264d16000000b02984c1cee00d097aff5520f091e2dfdaed9aeda26d7840533ad1af1b31bb69bec704289b30a0fa6200102bcd2170624f78a2d178cad2f63b123284211a2537127b09ea92436658cf692a6a8f5a32113be3042f903a726a5037c68bd4d25704d199b083bd959cd8d5d01fe89217f3817b237ee690a4f3559330069afcb31b0a523dad5d0a9cae80e44dcc85bd93438b1f016f6efd19f8b0b8153dee3aa31b7e2394e23cb849b7187234d35d77562d22ce000000b008e0d751d30e48cf3767cdecf3fa738eb92cedecc2ab954d1df523c51eceb9d99a2e27c9868c2cb2857e20adb54c16cbbfcdfa3a5bebd1a9752b2f1331e361e5690057ab8985679b5a44ea882a1997af88d73664229caad008187ff4feb781386393128f80ba0837a769af064669cea511d5378078df76f8b4139acf713f38bac141a4b26ae28446e31c7a3bdfab48b50e77d04dcae0a0c8bd8387e95627af3e451dffcaa49bab02ea109b72027039d90000021c000000b01ab1d2a16a722eaa2244e49d25467ad23b7206926f117c5f521aa83f5a996caa630ac1701d8c7238cbeb7fcd67c16b0f763e81a32744f9763775a08f2ebe2e458be6d996c0d7854e71845fc00f93570a11c2b67d7b3d1984421f7fe99200ab60e0240d4aacb3bfc0895b41fbe2e53223244fd95761ced4cae6c18eca203be6ba127609028b70cc8af1c20d5dab307480289e763f8d0e7da2a866f7994b5829a02e7903824ae5c130602286ff39b93090000000b023d9d0e6e69e8a5c8cacc9a2b0d7b4a8e34650dba96be5fdc4b8927b05bec541bcc02679b6e41194d46ff8c182cba8eac8e1a8f910ea96057e3b020d8da6452fa7e64a7016bdc330fdd3e50f7b826c6c83ee965585397bd69dd8122991fa3af507894413d5ae47f5a67b646cf34ddf131c12f7769af9e3a1de4cfc370b6b66c0acab566dd5dc24ae951fe0fa2b875f0610c9a9f9bd39e07b05bd30a4f05e440d7514454db6978baf2bdde4ccb9d477db000000b02906a3062e7ad2871f545ebf286c02028c01763f8260140fa08ce5cc1f9038e8130b1efd0b1dccc4ee2b4616c2825cfbe82fc997f71fbee25f578b9910425af3231e1213485eef596fd0931608f538cd599d7ff60db44940bc3925147ff96efe6b4e052e483a20244f7908bebcbd6b5200bf0d3e0bbffa9f980bfe06c23ae6e7a63a371430672e1a0fe6e65163458788150ec3f7de453f96f7e558fc9fffbe834062c4b5232b26718c9063654b97e94700000cf700000170000000f806b786772e641e499060eccf3e4f4af94ae8129126f6cb1cd0a8aa98ad5bd859fdf54f1b000000d05f3afa322a4fc16ea5657c38983eba932727bdc271e45c4241bfd835545e26186e0806fba85d22b2c9d64ef7ab9aee49d3887f63f90dcf82b0a2b25e7cfe7757afd86023da290be39dd3b5851d811c386d75278d33c91003cd401f5c9f44957503ac02379bf5cd8cd43926dec1eb5d685187f15566d611b7cdc02e900d27da3ad01bae66fa6f48d76df29aeba779e6f5b033db80ddffd4f3ddbcb20aa45db085a17482080e3f086596139aeca8e8f09f51937256007e41507ddee2da4801875f88fa9d0b8d4aab76a3259758a2d8af3c000000702278ffc78c9be6f63e04dd15135ee3afe637bd1f00d96dbd42744aad661630fb8d6fd5f200000048c62fe58b50045ef920d2d391fc544995434221ae3e5846b342e1ab0fb91c221790a70ec826582afea764d85a1084ef74aff4ea26b2cd489758ae35efe6b91a724520de40602bb161000000ec0000005613808e142b367fd8a0f1bd9031bac3eb3d0423ebcb4bfd7efb19ac6deb50d1419aa6415c0000002e8bd4420989d35856c706aaf61112287a6c3086b0c35b626e62caa0dcc39b366bbbb069a8c3123805b14575dbe1a20000008e17dbe42670ee85298dfd5f1523f51381ba36d5e3b0117853a1d2c33b05174c3662356ba800000066f4615989249e576147276556b1e13518f4e5bcdb99fb2b5a4c3dfef0a53a6e108f8ab47627b73fe077338bfd3df8d5c155b66cb9baecc37333ba8079b2b4a7ecd3d0a47f2312b156c2bd72506dbcfbd5df1cecedb9d0f2c6a8e65cbe8a1afb3dded28fa5157500000100000000552ddd40910b01486c7befeaa611a07cfe2b7bb8edcbc17bfb93f19af3252b1cb949d3e8b40000002db838f6a15f6c8ed197a2f5c73b4577633abc32a848ace727f773f43b47a990a875d63629e4af7decbde004d270000000a31fc5cf8a3d885097578485ff5953884906b1aaf3cb6ac0986cb49b854092278e2f0c5b7d0000007b2982ca607c72050c183d1e784420d10be1c93dbd400b02a40ed0f98b86893ae970bac96182dbda953679348f3fd4f735f0acfdeaed24d4a1aaa74b6390d9636e3d628e3727b76427046065d84805eacec2d5aececbd81b85d4fdb5d119d7751c6e8505a6ece6a031096d357a29be87261132ade63c2aaebdca4b16000000b6000000740c65ef9bb60eabe5b2704583076835ce73d868cd69422bdf320a9aeaeb72e4810f3df00e0000004cebf9c40f8a75db18955edd8ff895cafe8119e0fa92bcad0834a2bb5ae3bbdf91e1b0c54be19ffa7197737b4a3b549ebc7366e9a25251dd5bd1c6b5a063d4862d81d901488cf7f72717e8b7910000003a1d7e45fd0fee784d20e2b3bc454738e8a2b215762e6235a1d32096e7b9e8860d834db92e0000001214543adfe81b211c047d36066ce895e7c8910000015f000000932da7982e0894e6148e36105c3d3f79018f292e766bf15a92bc1b5ed27989f9fd7e9aa37b0000006bb145e717bcbcd93064be027ef9b89efa7ce0dffe9f3490b00a5522bf4638a85fcbbc621d998e0c02c4ab5a85d82d4a69db416fbcf67680e410856698e0ddc7612733c30a014d8cb8d756c16873f7dcf81ce1b604a54fa229beaa9644e49a487bcaa70ec53b54cfa1c9ccbf000000c42f417bea3f6eafe5870f1d51c115a45fa8793b38f3babfa25e15db0a4d750847a55a7dad0000009ce281b8c026f2ec007f603a1e76a63016205a6c7b99fa2499bfca1ae7fe4705e32ae4933d6aad20d99207a8aa3949f54f30c7dab65dc99f4801dba9cf76147f72a01fc9b9cd0d3d972befa5a0105dff1be817c42b727a255e1368bcff999daf1b5805e6390a2d8969f1fa3d2111dc8d89b0ddcef9451e1e370e4e9b7c1996799a17fed6aca2b7b3db50a2251f47a31a57d25c0ec8f2056edd8f0907a0000001180000009411cfa945cb942a100b85686d19b58c6774d88ca8c3a7e908de0a856a746ad8ca816a45150000006c0655bd57187bc17f0fe62db2973c4db95ef76939b9b21293caa58563f2fb81b2229c8053554d0f1c0cf991cb7fa9d84b4f03be872b5ef6ab1bbf59875ad3264289361bc5fc0c0f0247043efc081e4bad29092489f3a0c7091b2cc29463cf39f910e5fb20ae98f953b6fe43290000007c1655302670dcef7ad8637cbcffe67c2b2058ad0be0525b60f572f6a708a2a22d77e770c9000000540b2708e7973e53a1503d2936c4c0292ad98e2a1502dc483bb913f92120336ccab5ec1caf702ca56e02e9d998f556177b7fb19fc7b80965ede30a27ab9facbdcb874ab06879f94270ce208b6cdc967741bd0942500000017a000000dd03115f2aeff50c327983523a1e1c10de230eb31f4376e756c31945285273f8ae47319fda000000b5d4a15d035ee035fa94de623a564755cde00ece6b5940465f6a6e6c31ded61e8f6f3b730d8c5979d190546e797fd7ed2ecde8a993e55d4b0f133831918586e4c6276e94da3e1017e6d140a67d50d6d5d192b1af47e767fd009755d33948ec36798e0f4d4c4d2508d9cb3cba43c2412cb8562d3ed7a0ed3a4e48ca49820a49e4a4a1e50fd6d748c41b2f9c605072e78561acbee9e647380340cffe743dd365d3ae31b24722e77491a5d0ad51b47f1611284ef8b0411d00000095254c8196800c315f0d14eb5fb02b2a663d303e680aa23bffcc6bca524691d3de4cb8e41b0000006d21f95972af90f4545b89bd6d7646cc23a497f0c0ae2df85990e26297bdb1b1e915c1244d8c6ff40cce68ccac383cbdc604988aa779b12d5bbf7ef0bceaf6232ac9fad11d63651c088f63cf884a74fe07f86f50f5fbd6f0dca86fb6281c22153e96ad642f47fc3431a46fad76da000000e2000000930d71ca5456de976c65a7bab5c6e3ef9b40e4d2771401bf7645b1ea083a635755752045d90000006ba446884ecb2d79adbce7c3ec50454baff7c29a8c8ea3918bee249d3683c7131606db7d0ba465d7b7f8123066b3fca4e00d9a5fc1f7b513cdfaf939ceeb4f73570625a2451206865e4f8c5ac23dd3f56bfff432c5c6844e2c88c6ab57ac45a26ec38fbdbeae0d0e417f4599000000471b80f5047dc1eb3d4d8f82c3f806f4199abe7b6b1cf762d6ff25e7b03f6c6da37b7fcea40000001f511810a66b58a20ae1c8c963741eab263386f034d3f883d88129974f6cd8c1000000dc000000611070eab010f80c2b6bbedc3485ed10df14a88aaa8431baae43af6403f941a849a49f15c000000039219dc8e20cc2cceb9115cefef876330272052ef0456e8b234910e968fc2fc1d43b9cd64a3c99d02678725d4be132dcd6b69ea3e52a745b59030000007327939feebbbf2ee6cdf24b740e48e573d9e46b9f5ce42e1e5e9c46e9d614ec69538d65de0000004b8e72f89fa36ba6470be65a3fae9bf2ccceb948c773459fd4597ffb5ac4270b9a7a4472681b533742f37dc98ecf37752c881afa0c41f107fa5344611c0c1beb784f00afc8976efc46f91693000000e8000000630bd0b5b3ec3a4ed0494c2254209d01173e0f980ef0695ef5982c9cd9b47c252d02e60d330000003b09d0fd6f49c68487db389cd16d105a2cf3ea63226ea72b613a75f3930989d2922a3855870ba53deaad287ade8d4845958d41c8e7b005b70c9c05160000007d1b64d4edaa4fad6e067ddd74f81cb96c39558e7ec830ed3f943d360f587d6de012b6221800000055293b1771109a770cb76908ee568609d92a6737393873437921bcae07ba9bba2347fd077d9963c31b50786587500c094ae819da4ca4a85bccb11b71e0a4bae0d88262fb1588dab955fe120331154d39c3abb01557eb000002220000010d24217cf3cf7774d06e7508f5fd7ebb19bfe74114ec1157c41dc0d2568ed08459046787f2000000e578e24359b8de6aa99a95be391d7672e0d703d11b405ea913e860929328c76a983eb2381448dc9196945b7b2f47172206082c01cbfcbba1b17781c174507e9eae6b39c5d2cdb72e6e4f899d83b889b68263735807d31a5b063afee30a01da56135698b31e5fe7da7046e8a3a2e2d7e5c22b08d3afa419260eaa9b2d3699ca18d29cead64c7a61380adf43dce86a67f7081181a20a6c89dbf3ad8383330bbeb50f65eb550ddaf2e3569cf28748ab7b625d969e7bc9dc1f3469db4df241ad585391096b8e15a20d258528b32a8f966830b47980e7d81a1309734eed4616ae587c65c62c8666360000010d2c587c7130a3eec8e0ffead28ffc69e13ff7ee1ea8289ce4d6cab976bbe778a4b8f283a6000000e5e33023cb448771f9f3e2f339700e10afe0e4b2a63ab75fcf76feb1269cdfbaa1b5492a2843b4d2bb2a0a1abf94e4b7ac157db804b0e3a0d54deee68d26e49495be4ac71315a6ca782aaeff57a6ba40fe7079b5df8f00d72248a6ccf8db4b6b8bb6e6befd64124f35869d69ab695d5139df13fe99db195ee56f98f344904e4939cce2ab0a39c88f3afaa8df438bd5ba3ea8220fa05a7ca24a1b427a1f435f5369c418858bc296117bc3b7e0edf6ff02ff4ec57f5e70061b7df293b1380a7fdbf196936d50f988d9f05d7d7826a5281e0a423d8bf1374b7de1e260079a425b89776e46bb3e2b", + "txsEffectsHash": "0x0037b52524b16f36a59dca483761d8e5742cd76f73026bdec2219e3585bbcdcf", "decodedHeader": { "contentCommitment": { "inHash": "0x00212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb891937", "outHash": "0x00a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd", "txTreeHeight": 2, - "txsEffectsHash": "0x00b96b59d2a7d81ba0baee59f0b589653fa67845988f84047305a4be9ae20ed8" + "txsEffectsHash": "0x0037b52524b16f36a59dca483761d8e5742cd76f73026bdec2219e3585bbcdcf" }, "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1711637481, + "timestamp": 1712149190, "version": 1, - "coinbase": "0xa23e0eb6a23e0eb6a23e0eb6a23e0eb6a23e0eb6", - "feeRecipient": "0x09cd9129799990baa63ca94680ef6ce915fbd462e83f04298c9f4a4ee339198d" + "coinbase": "0x2ccb2e8d168accbd33493a811caaaa8e0d34571f", + "feeRecipient": "0x0bead1bdad603edb64455a6ef075785703993a76c55788631b525a87a1c7f74a" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x080e57619448c45b57fbe34372db20f730e420276579983e4f188f501c092240" + "root": "0x22c896fa63b5449d976aad712cdcaffd47c3f8faaa3c7cac417c13fca61b8bba" }, "stateReference": { "l1ToL2MessageTree": { @@ -77,8 +77,8 @@ } } }, - "header": "0x080e57619448c45b57fbe34372db20f730e420276579983e4f188f501c09224000000002000000000000000000000000000000000000000000000000000000000000000200b96b59d2a7d81ba0baee59f0b589653fa67845988f84047305a4be9ae20ed800212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c88000002802ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660583e9a23e0eb6a23e0eb6a23e0eb6a23e0eb6a23e0eb609cd9129799990baa63ca94680ef6ce915fbd462e83f04298c9f4a4ee339198d", - "publicInputsHash": "0x0005d2ee2aabe134e453465944f9ca06584e536278cbdd9a824584a29bb87ef4", + "header": "0x22c896fa63b5449d976aad712cdcaffd47c3f8faaa3c7cac417c13fca61b8bba0000000200000000000000000000000000000000000000000000000000000000000000020037b52524b16f36a59dca483761d8e5742cd76f73026bdec2219e3585bbcdcf00212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c88000002802ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660d52c62ccb2e8d168accbd33493a811caaaa8e0d34571f0bead1bdad603edb64455a6ef075785703993a76c55788631b525a87a1c7f74a", + "publicInputsHash": "0x002b88999142748d85d2ebdcf025c954ba4a0200b5b21cf729f3a82bbab0303f", "numTxs": 4 } } \ No newline at end of file diff --git a/noir-projects/aztec-nr/aztec/src/prelude.nr b/noir-projects/aztec-nr/aztec/src/prelude.nr index 4ff61133372f..b43c10713cd4 100644 --- a/noir-projects/aztec-nr/aztec/src/prelude.nr +++ b/noir-projects/aztec-nr/aztec/src/prelude.nr @@ -4,7 +4,7 @@ use crate::{ state_vars::{ map::Map, private_immutable::PrivateImmutable, private_mutable::PrivateMutable, public_immutable::PublicImmutable, public_mutable::PublicMutable, private_set::PrivateSet, - shared_immutable::SharedImmutable + shared_immutable::SharedImmutable, storage::Storable }, log::{emit_unencrypted_log, emit_encrypted_log}, context::PrivateContext, note::{ diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/storage.nr b/noir-projects/aztec-nr/aztec/src/state_vars/storage.nr index e742ab7e036d..070c8d6fec0f 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/storage.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/storage.nr @@ -5,3 +5,9 @@ trait Storage where T: Serialize + Deserialize { self.storage_slot } } + +struct Storable { + slot: Field, + typ: str + } + diff --git a/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr b/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr index 238374006450..37c2edf31b7d 100644 --- a/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr @@ -17,6 +17,7 @@ contract AppSubscription { use crate::subscription_note::{SubscriptionNote, SUBSCRIPTION_NOTE_LEN}; + #[aztec(storage)] struct Storage { // The following is only needed in private but we use ShareImmutable here instead of PrivateImmutable because // the value can be publicly known and SharedImmutable provides us with a better devex here because we don't diff --git a/noir-projects/noir-contracts/contracts/avm_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/avm_test_contract/src/main.nr index f09e441aa999..a23ae6af3945 100644 --- a/noir-projects/noir-contracts/contracts/avm_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/avm_test_contract/src/main.nr @@ -35,6 +35,7 @@ contract AvmTest { // avm lib use dep::aztec::avm::hash::{keccak256, poseidon, sha256}; + #[aztec(storage)] struct Storage { single: PublicMutable, list: PublicMutable, diff --git a/noir-projects/noir-contracts/contracts/benchmarking_contract/src/main.nr b/noir-projects/noir-contracts/contracts/benchmarking_contract/src/main.nr index 44278fd8d955..ae9b0bb7e04e 100644 --- a/noir-projects/noir-contracts/contracts/benchmarking_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/benchmarking_contract/src/main.nr @@ -12,6 +12,7 @@ contract Benchmarking { use dep::aztec::{context::Context}; + #[aztec(storage)] struct Storage { notes: Map>, balances: Map>, diff --git a/noir-projects/noir-contracts/contracts/card_game_contract/src/main.nr b/noir-projects/noir-contracts/contracts/card_game_contract/src/main.nr index 789614346ecc..1e54f0c2866e 100644 --- a/noir-projects/noir-contracts/contracts/card_game_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/card_game_contract/src/main.nr @@ -12,6 +12,7 @@ contract CardGame { use crate::cards::{PACK_CARDS, Deck, Card, get_pack_cards, compute_deck_strength}; use crate::game::{NUMBER_OF_PLAYERS, NUMBER_OF_CARDS_DECK, PLAYABLE_CARDS, PlayerEntry, Game, GAME_SERIALIZED_LEN}; + #[aztec(storage)] struct Storage { collections: Map, game_decks: Map>, diff --git a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr index 0ba6c5946cff..08950786eaed 100644 --- a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr @@ -8,6 +8,7 @@ contract Child { }; use dep::value_note::value_note::ValueNote; + #[aztec(storage)] struct Storage { current_value: PublicMutable, a_private_value: PrivateSet, diff --git a/noir-projects/noir-contracts/contracts/claim_contract/src/main.nr b/noir-projects/noir-contracts/contracts/claim_contract/src/main.nr index 7fac09947852..6cac882ba6f9 100644 --- a/noir-projects/noir-contracts/contracts/claim_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/claim_contract/src/main.nr @@ -9,6 +9,7 @@ contract Claim { use dep::value_note::value_note::ValueNote; use interfaces::Token; + #[aztec(storage)] struct Storage { // Address of a contract based on whose notes we distribute the rewards target_contract: SharedImmutable, diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/class_registered.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/class_registered.nr index 5705f9378d12..3cbea7c57ca1 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/class_registered.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/class_registered.nr @@ -4,7 +4,7 @@ use dep::aztec::protocol_types::{ traits::Serialize }; -// #[event] +// #[aztec(event)] struct ContractClassRegistered { contract_class_id: ContractClassId, version: Field, diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/private_function_broadcasted.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/private_function_broadcasted.nr index ede896c6ddcc..8e587fe454e0 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/private_function_broadcasted.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/private_function_broadcasted.nr @@ -31,7 +31,7 @@ impl Serialize for } } -// #[event] +// #[aztec(event)] struct ClassPrivateFunctionBroadcasted { contract_class_id: ContractClassId, artifact_metadata_hash: Field, diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/unconstrained_function_broadcasted.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/unconstrained_function_broadcasted.nr index 6731a3b2a63f..c7d9f4c6d075 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/unconstrained_function_broadcasted.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/unconstrained_function_broadcasted.nr @@ -28,7 +28,7 @@ impl Serialize, } diff --git a/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr b/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr index a48a17e3da54..42a0883fabd0 100644 --- a/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr @@ -9,7 +9,7 @@ contract Crowdfunding { use dep::value_note::value_note::ValueNote; use interfaces::Token; - #[event] + #[aztec(event)] struct WithdrawalProcessed { who: AztecAddress, amount: u64, @@ -21,6 +21,7 @@ contract Crowdfunding { } } + #[aztec(storage)] struct Storage { // Token used for donations (e.g. DAI) donation_token: SharedImmutable, diff --git a/noir-projects/noir-contracts/contracts/delegated_on_contract/src/main.nr b/noir-projects/noir-contracts/contracts/delegated_on_contract/src/main.nr index ea3f6dea736c..c0a9fca00e84 100644 --- a/noir-projects/noir-contracts/contracts/delegated_on_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/delegated_on_contract/src/main.nr @@ -6,6 +6,7 @@ contract DelegatedOn { }; use dep::value_note::value_note::ValueNote; + #[aztec(storage)] struct Storage { current_value: PublicMutable, a_private_value: PrivateSet, diff --git a/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr b/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr index 46417912fa17..38d45edec6bf 100644 --- a/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr @@ -6,6 +6,7 @@ contract Delegator { }; use dep::value_note::value_note::ValueNote; + #[aztec(storage)] struct Storage { current_value: PublicMutable, a_private_value: PrivateSet, diff --git a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr index 7c00cac84d75..f83976c49607 100644 --- a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr @@ -23,6 +23,7 @@ contract DocsExample { use crate::options::create_account_card_getter_options; use crate::types::{card_note::{CardNote, CARD_NOTE_LEN}, leader::Leader}; + #[aztec(storage)] struct Storage { // Shows how to create a custom struct in PublicMutable // docs:start:storage-leader-declaration @@ -118,7 +119,7 @@ contract DocsExample { context.this_address(), FunctionSelector::from_signature("get_shared_immutable_constrained_private()") ); - Leader::deserialize([ret[0], ret[1]]) + Leader::deserialize([ret[0], ret[1] + 1]) } #[aztec(public)] @@ -131,7 +132,7 @@ contract DocsExample { context.this_address(), FunctionSelector::from_signature("get_shared_immutable_constrained_public()") ); - Leader::deserialize([ret[0], ret[1]]) + Leader::deserialize([ret[0], ret[1] + 1]) } #[aztec(public)] diff --git a/noir-projects/noir-contracts/contracts/easy_private_token_contract/src/main.nr b/noir-projects/noir-contracts/contracts/easy_private_token_contract/src/main.nr index 6d398f9fb2ae..a9081073066c 100644 --- a/noir-projects/noir-contracts/contracts/easy_private_token_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/easy_private_token_contract/src/main.nr @@ -4,6 +4,7 @@ contract EasyPrivateToken { use dep::value_note::{balance_utils, value_note::ValueNote}; use dep::easy_private_state::EasyPrivateUint; + #[aztec(storage)] struct Storage { balances: Map, } diff --git a/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr b/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr index ddcfcb3bcc9b..76cc88e1201f 100644 --- a/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr @@ -7,6 +7,7 @@ contract EasyPrivateVoting { use dep::aztec::context::Context; // docs:end:imports // docs:start:storage_struct + #[aztec(storage)] struct Storage { admin: PublicMutable, // admin can end vote tally: Map>, // we will store candidate as key and number of votes as value diff --git a/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr b/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr index 97733ad1a855..d7da24dbf67d 100644 --- a/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr @@ -16,6 +16,7 @@ contract EcdsaAccount { use crate::ecdsa_public_key_note::EcdsaPublicKeyNote; + #[aztec(storage)] struct Storage { public_key: PrivateImmutable, } diff --git a/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr b/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr index f02f1c8b679f..709c65b3ec58 100644 --- a/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr @@ -6,6 +6,7 @@ contract Escrow { use dep::address_note::address_note::AddressNote; + #[aztec(storage)] struct Storage { owner: PrivateImmutable, } diff --git a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr index da3f517b69a2..deb23fa21d93 100644 --- a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr @@ -6,6 +6,7 @@ contract FPC { use crate::interfaces::Token; + #[aztec(storage)] struct Storage { other_asset: SharedImmutable, gas_token_address: SharedImmutable, diff --git a/noir-projects/noir-contracts/contracts/gas_token_contract/src/main.nr b/noir-projects/noir-contracts/contracts/gas_token_contract/src/main.nr index ca8f8f7bac5f..ba8ecf6c608d 100644 --- a/noir-projects/noir-contracts/contracts/gas_token_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/gas_token_contract/src/main.nr @@ -6,6 +6,7 @@ contract GasToken { use crate::lib::{calculate_fee, get_bridge_gas_msg_hash}; + #[aztec(storage)] struct Storage { balances: Map>, } diff --git a/noir-projects/noir-contracts/contracts/inclusion_proofs_contract/src/main.nr b/noir-projects/noir-contracts/contracts/inclusion_proofs_contract/src/main.nr index d425ad10d516..a4f40af6fc36 100644 --- a/noir-projects/noir-contracts/contracts/inclusion_proofs_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/inclusion_proofs_contract/src/main.nr @@ -26,6 +26,7 @@ contract InclusionProofs { // docs:start:value_note_imports use dep::value_note::value_note::ValueNote; // docs:end:value_note_imports + #[aztec(storage)] struct Storage { private_values: Map>, public_value: PublicMutable, diff --git a/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr b/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr index c43fbf2b3da0..42bcdca5b9fd 100644 --- a/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr @@ -20,6 +20,7 @@ contract Lending { use crate::interfaces::{Token, Lending, PriceFeed}; // Storage structure, containing all storage, and specifying what slots they use. + #[aztec(storage)] struct Storage { collateral_asset: PublicMutable, stable_coin: PublicMutable, diff --git a/noir-projects/noir-contracts/contracts/pending_note_hashes_contract/src/main.nr b/noir-projects/noir-contracts/contracts/pending_note_hashes_contract/src/main.nr index 7d3fcd593b88..6dffaa99e913 100644 --- a/noir-projects/noir-contracts/contracts/pending_note_hashes_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/pending_note_hashes_contract/src/main.nr @@ -11,6 +11,7 @@ contract PendingNoteHashes { use dep::value_note::{balance_utils, filter::filter_notes_min_sum, value_note::{VALUE_NOTE_LEN, ValueNote}}; use dep::aztec::context::{PublicContext, Context}; + #[aztec(storage)] struct Storage { balances: Map>, } diff --git a/noir-projects/noir-contracts/contracts/price_feed_contract/src/main.nr b/noir-projects/noir-contracts/contracts/price_feed_contract/src/main.nr index 31cfcb9fe705..c4afaacf7538 100644 --- a/noir-projects/noir-contracts/contracts/price_feed_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/price_feed_contract/src/main.nr @@ -6,6 +6,7 @@ contract PriceFeed { use crate::asset::Asset; // Storage structure, containing all storage, and specifying what slots they use. + #[aztec(storage)] struct Storage { assets: Map>, } diff --git a/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr b/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr index b9d4890ee93e..bc1d49931d8a 100644 --- a/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr @@ -17,6 +17,7 @@ contract SchnorrAccount { use crate::public_key_note::{PublicKeyNote, PUBLIC_KEY_NOTE_LEN}; + #[aztec(storage)] struct Storage { // docs:start:storage signing_public_key: PrivateImmutable, diff --git a/noir-projects/noir-contracts/contracts/slow_tree_contract/src/main.nr b/noir-projects/noir-contracts/contracts/slow_tree_contract/src/main.nr index b2ded7de8436..2fa7b935a4b9 100644 --- a/noir-projects/noir-contracts/contracts/slow_tree_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/slow_tree_contract/src/main.nr @@ -28,6 +28,7 @@ contract SlowTree { global EMPTY_ROOT: Field = 5785871043333994658400733180052743689641713274194136017445890613179954325976; + #[aztec(storage)] struct Storage { trees: Map>, } diff --git a/noir-projects/noir-contracts/contracts/stateful_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/stateful_test_contract/src/main.nr index d96acfef3fc8..7532cec43160 100644 --- a/noir-projects/noir-contracts/contracts/stateful_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/stateful_test_contract/src/main.nr @@ -7,6 +7,7 @@ contract StatefulTest { oracle::get_contract_instance::get_contract_instance, initializer::assert_is_initialized }; + #[aztec(storage)] struct Storage { notes: Map>, public_values: Map>, diff --git a/noir-projects/noir-contracts/contracts/test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/test_contract/src/main.nr index 41ae2ec4f48b..5c3d3c722425 100644 --- a/noir-projects/noir-contracts/contracts/test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/test_contract/src/main.nr @@ -31,11 +31,12 @@ contract Test { use dep::field_note::field_note::FieldNote; use dep::value_note::value_note::ValueNote; - #[event] + #[aztec(event)] struct ExampleEvent { value: Field, } + #[aztec(storage)] struct Storage { example_constant: PrivateImmutable, example_set: PrivateSet, diff --git a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr index cd046614445f..aaf2548f66f5 100644 --- a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr @@ -30,6 +30,7 @@ contract TokenBlacklist { use crate::interfaces::SlowMap; // docs:end:interface + #[aztec(storage)] struct Storage { admin: PublicMutable, balances: BalancesMap, diff --git a/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr index c02dbe0fd4df..673e4b8aa7f8 100644 --- a/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr @@ -18,6 +18,7 @@ contract TokenBridge { // docs:start:token_bridge_storage_and_constructor // Storage structure, containing all storage, and specifying what slots they use. + #[aztec(storage)] struct Storage { token: PublicMutable, } diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_contract/src/main.nr index 27a0b12ff803..edacd0c85bfd 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/main.nr @@ -28,6 +28,7 @@ contract Token { // docs:end::imports // docs:start:storage_struct + #[aztec(storage)] struct Storage { // docs:start:storage_admin admin: PublicMutable, diff --git a/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr b/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr index 09599bbbd937..b6d2d97a97ed 100644 --- a/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr @@ -17,6 +17,7 @@ contract Uniswap { use crate::interfaces::{Token, TokenBridge}; use crate::util::{compute_swap_private_content_hash, compute_swap_public_content_hash}; + #[aztec(storage)] struct Storage { // like with account contracts, stores the approval message on a slot and tracks if they are active approved_action: Map>, diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr index 2fec9bce466f..3bc9bc759f18 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr @@ -131,7 +131,7 @@ global REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af8166354 // CONTRACT INSTANCE CONSTANTS // sha224sum 'struct ContractInstanceDeployed' global DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; -global DEPLOYER_CONTRACT_ADDRESS = 0x1ad693effc2a4a40fdf5911ff29e19d2b6cd3cf73e6c3685519a6fb783144dcb; +global DEPLOYER_CONTRACT_ADDRESS = 0x2e89c51c28aefc6b630af43a5908634e4cf552115280eb9fd783bbd224c0bb57; // NOIR CONSTANTS - constants used only in yarn-packages/noir-contracts // Some are defined here because Noir doesn't yet support globals referencing other globals yet. diff --git a/noir/noir-repo/Cargo.lock b/noir/noir-repo/Cargo.lock index 8c47f03b267c..ba0b74535763 100644 --- a/noir/noir-repo/Cargo.lock +++ b/noir/noir-repo/Cargo.lock @@ -542,9 +542,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "bitmaps" @@ -1607,12 +1607,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.48.0", ] [[package]] @@ -2569,16 +2569,16 @@ version = "0.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "libc", "redox_syscall 0.4.1", ] [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" [[package]] name = "lock_api" @@ -3131,7 +3131,7 @@ version = "6.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "crossbeam-channel", "filetime", "fsevent-sys", @@ -3585,7 +3585,7 @@ checksum = "7c003ac8c77cb07bb74f5f198bce836a689bcd5a42574612bf14d17bfd08c20e" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.4.2", + "bitflags 2.5.0", "lazy_static", "num-traits", "rand 0.8.5", @@ -4074,15 +4074,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.28" +version = "0.38.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" +checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.48.0", ] [[package]] @@ -5548,7 +5548,7 @@ version = "0.121.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dbe55c8f9d0dbd25d9447a5a889ff90c0cc3feaa7395310d3d826b2c703eaab" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "indexmap 2.0.0", "semver", ] diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index 3ee6f9c21b93..b62ab90bd157 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -4,20 +4,16 @@ mod utils; use transforms::{ compute_note_hash_and_nullifier::inject_compute_note_hash_and_nullifier, events::{generate_selector_impl, transform_events}, - functions::{transform_function, transform_unconstrained}, + functions::{export_fn_abi, transform_function, transform_unconstrained}, note_interface::generate_note_interface_impl, storage::{ assign_storage_slots, check_for_storage_definition, check_for_storage_implementation, - generate_storage_implementation, + generate_storage_implementation, generate_storage_layout, }, }; -use noirc_frontend::{ - hir::def_collector::dc_crate::{UnresolvedFunctions, UnresolvedTraitImpl}, - macros_api::{ - CrateId, FileId, HirContext, MacroError, MacroProcessor, SecondaryAttribute, SortedModule, - Span, - }, +use noirc_frontend::macros_api::{ + CrateId, FileId, HirContext, MacroError, MacroProcessor, SortedModule, Span, }; use utils::{ @@ -39,16 +35,6 @@ impl MacroProcessor for AztecMacro { transform(ast, crate_id, file_id, context) } - fn process_collected_defs( - &self, - crate_id: &CrateId, - context: &mut HirContext, - collected_trait_impls: &[UnresolvedTraitImpl], - collected_functions: &mut [UnresolvedFunctions], - ) -> Result<(), (MacroError, FileId)> { - transform_collected_defs(crate_id, context, collected_trait_impls, collected_functions) - } - fn process_typed_ast( &self, crate_id: &CrateId, @@ -90,15 +76,19 @@ fn transform_module(module: &mut SortedModule) -> Result let mut has_transformed_module = false; // Check for a user defined storage struct - let storage_defined = check_for_storage_definition(module); - let storage_implemented = check_for_storage_implementation(module); - if storage_defined && !storage_implemented { - generate_storage_implementation(module)?; + let maybe_storage_struct_name = check_for_storage_definition(module)?; + let storage_defined = maybe_storage_struct_name.is_some(); + + if let Some(storage_struct_name) = maybe_storage_struct_name { + if !check_for_storage_implementation(module, &storage_struct_name) { + generate_storage_implementation(module, &storage_struct_name)?; + } + generate_storage_layout(module, storage_struct_name)?; } - for structure in module.types.iter() { - if structure.attributes.iter().any(|attr| matches!(attr, SecondaryAttribute::Event)) { + for structure in module.types.iter_mut() { + if structure.attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(event)")) { module.impls.push(generate_selector_impl(structure)); has_transformed_module = true; } @@ -139,6 +129,7 @@ fn transform_module(module: &mut SortedModule) -> Result // Apply transformations to the function based on collected attributes if is_private || is_public || is_public_vm { + export_fn_abi(&mut module.types, func)?; transform_function( if is_private { "Private" @@ -185,24 +176,6 @@ fn transform_module(module: &mut SortedModule) -> Result Ok(has_transformed_module) } -fn transform_collected_defs( - crate_id: &CrateId, - context: &mut HirContext, - collected_trait_impls: &[UnresolvedTraitImpl], - collected_functions: &mut [UnresolvedFunctions], -) -> Result<(), (MacroError, FileId)> { - if has_aztec_dependency(crate_id, context) { - inject_compute_note_hash_and_nullifier( - crate_id, - context, - collected_trait_impls, - collected_functions, - ) - } else { - Ok(()) - } -} - // // Transform Hir Nodes for Aztec // @@ -212,6 +185,11 @@ fn transform_hir( crate_id: &CrateId, context: &mut HirContext, ) -> Result<(), (AztecMacroError, FileId)> { - transform_events(crate_id, context)?; - assign_storage_slots(crate_id, context) + if has_aztec_dependency(crate_id, context) { + transform_events(crate_id, context)?; + inject_compute_note_hash_and_nullifier(crate_id, context)?; + assign_storage_slots(crate_id, context) + } else { + Ok(()) + } } diff --git a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs index fd538dc578bc..134342b07d79 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs @@ -1,48 +1,43 @@ use noirc_errors::{Location, Span}; use noirc_frontend::{ graph::CrateId, - hir::{ - def_collector::dc_crate::{UnresolvedFunctions, UnresolvedTraitImpl}, - def_map::{LocalModuleId, ModuleId}, - }, - macros_api::{FileId, HirContext, MacroError}, - node_interner::FuncId, - parse_program, FunctionReturnType, ItemVisibility, NoirFunction, UnresolvedTypeData, + macros_api::{FileId, HirContext}, + parse_program, FunctionReturnType, NoirFunction, Type, UnresolvedTypeData, }; -use crate::utils::hir_utils::fetch_struct_trait_impls; +use crate::utils::{ + errors::AztecMacroError, + hir_utils::{collect_crate_functions, fetch_notes, get_contract_module_data, inject_fn}, +}; // Check if "compute_note_hash_and_nullifier(AztecAddress,Field,Field,Field,[Field; N]) -> [Field; 4]" is defined fn check_for_compute_note_hash_and_nullifier_definition( - functions_data: &[(LocalModuleId, FuncId, NoirFunction)], - module_id: LocalModuleId, + crate_id: &CrateId, + context: &HirContext, ) -> bool { - functions_data.iter().filter(|func_data| func_data.0 == module_id).any(|func_data| { - func_data.2.def.name.0.contents == "compute_note_hash_and_nullifier" - && func_data.2.def.parameters.len() == 5 - && match &func_data.2.def.parameters[0].typ.typ { - UnresolvedTypeData::Named(path, _, _) => path.segments.last().unwrap().0.contents == "AztecAddress", - _ => false, - } - && func_data.2.def.parameters[1].typ.typ == UnresolvedTypeData::FieldElement - && func_data.2.def.parameters[2].typ.typ == UnresolvedTypeData::FieldElement - && func_data.2.def.parameters[3].typ.typ == UnresolvedTypeData::FieldElement - // checks if the 5th parameter is an array and the Box in - // Array(Option, Box) contains only fields - && match &func_data.2.def.parameters[4].typ.typ { - UnresolvedTypeData::Array(_, inner_type) => { - matches!(inner_type.typ, UnresolvedTypeData::FieldElement) - }, - _ => false, - } + collect_crate_functions(crate_id, context).iter().any(|funct_id| { + let func_data = context.def_interner.function_meta(funct_id); + let func_name = context.def_interner.function_name(funct_id); + func_name == "compute_note_hash_and_nullifier" + && func_data.parameters.len() == 5 + && func_data.parameters.0.first().is_some_and(| (_, typ, _) | match typ { + Type::Struct(struct_typ, _) => struct_typ.borrow().name.0.contents == "AztecAddress", + _ => false + }) + && func_data.parameters.0.get(1).is_some_and(|(_, typ, _)| typ.is_field()) + && func_data.parameters.0.get(2).is_some_and(|(_, typ, _)| typ.is_field()) + && func_data.parameters.0.get(3).is_some_and(|(_, typ, _)| typ.is_field()) + // checks if the 5th parameter is an array and contains only fields + && func_data.parameters.0.get(4).is_some_and(|(_, typ, _)| match typ { + Type::Array(_, inner_type) => inner_type.to_owned().is_field(), + _ => false + }) // We check the return type the same way as we did the 5th parameter - && match &func_data.2.def.return_type { + && match &func_data.return_type { FunctionReturnType::Default(_) => false, FunctionReturnType::Ty(unresolved_type) => { match &unresolved_type.typ { - UnresolvedTypeData::Array(_, inner_type) => { - matches!(inner_type.typ, UnresolvedTypeData::FieldElement) - }, + UnresolvedTypeData::Array(_, inner_type) => matches!(inner_type.typ, UnresolvedTypeData::FieldElement), _ => false, } } @@ -53,77 +48,35 @@ fn check_for_compute_note_hash_and_nullifier_definition( pub fn inject_compute_note_hash_and_nullifier( crate_id: &CrateId, context: &mut HirContext, - unresolved_traits_impls: &[UnresolvedTraitImpl], - collected_functions: &mut [UnresolvedFunctions], -) -> Result<(), (MacroError, FileId)> { - // We first fetch modules in this crate which correspond to contracts, along with their file id. - let contract_module_file_ids: Vec<(LocalModuleId, FileId)> = context - .def_map(crate_id) - .expect("ICE: Missing crate in def_map") - .modules() - .iter() - .filter(|(_, module)| module.is_contract) - .map(|(idx, module)| (LocalModuleId(idx), module.location.file)) - .collect(); - - // If the current crate does not contain a contract module we simply skip it. - if contract_module_file_ids.is_empty() { - return Ok(()); - } else if contract_module_file_ids.len() != 1 { - panic!("Found multiple contracts in the same crate"); +) -> Result<(), (AztecMacroError, FileId)> { + if let Some((module_id, file_id)) = get_contract_module_data(context, crate_id) { + // If compute_note_hash_and_nullifier is already defined by the user, we skip auto-generation in order to provide an + // escape hatch for this mechanism. + // TODO(#4647): improve this diagnosis and error messaging. + if check_for_compute_note_hash_and_nullifier_definition(crate_id, context) { + return Ok(()); + } + + // In order to implement compute_note_hash_and_nullifier, we need to know all of the different note types the + // contract might use. These are the types that implement the NoteInterface trait, which provides the + // get_note_type_id function. + let note_types = + fetch_notes(context).iter().map(|note| note.borrow().name.0.contents.clone()).collect(); + + // We can now generate a version of compute_note_hash_and_nullifier tailored for the contract in this crate. + let func = generate_compute_note_hash_and_nullifier(¬e_types); + + // And inject the newly created function into the contract. + + // TODO(#4373): We don't have a reasonable location for the source code of this autogenerated function, so we simply + // pass an empty span. This function should not produce errors anyway so this should not matter. + let location = Location::new(Span::empty(0), file_id); + + // These are the same things the ModCollector does when collecting functions: we push the function to the + // NodeInterner, declare it in the module (which checks for duplicate definitions), and finally add it to the list + // on collected but unresolved functions. + inject_fn(crate_id, context, func, location, module_id, file_id); } - - let (module_id, file_id) = contract_module_file_ids[0]; - - // If compute_note_hash_and_nullifier is already defined by the user, we skip auto-generation in order to provide an - // escape hatch for this mechanism. - // TODO(#4647): improve this diagnosis and error messaging. - if collected_functions.iter().any(|coll_funcs_data| { - check_for_compute_note_hash_and_nullifier_definition(&coll_funcs_data.functions, module_id) - }) { - return Ok(()); - } - - // In order to implement compute_note_hash_and_nullifier, we need to know all of the different note types the - // contract might use. These are the types that implement the NoteInterface trait, which provides the - // get_note_type_id function. - let note_types = fetch_struct_trait_impls(context, unresolved_traits_impls, "NoteInterface"); - - // We can now generate a version of compute_note_hash_and_nullifier tailored for the contract in this crate. - let func = generate_compute_note_hash_and_nullifier(¬e_types); - - // And inject the newly created function into the contract. - - // TODO(#4373): We don't have a reasonable location for the source code of this autogenerated function, so we simply - // pass an empty span. This function should not produce errors anyway so this should not matter. - let location = Location::new(Span::empty(0), file_id); - - // These are the same things the ModCollector does when collecting functions: we push the function to the - // NodeInterner, declare it in the module (which checks for duplicate definitions), and finally add it to the list - // on collected but unresolved functions. - - let func_id = context.def_interner.push_empty_fn(); - context.def_interner.push_function( - func_id, - &func.def, - ModuleId { krate: *crate_id, local_id: module_id }, - location, - ); - - context.def_map_mut(crate_id).unwrap() - .modules_mut()[module_id.0] - .declare_function( - func.name_ident().clone(), ItemVisibility::Public, func_id - ).expect( - "Failed to declare the autogenerated compute_note_hash_and_nullifier function, likely due to a duplicate definition. See https://github.com/AztecProtocol/aztec-packages/issues/4647." - ); - - collected_functions - .iter_mut() - .find(|fns| fns.file_id == file_id) - .expect("ICE: no functions found in contract file") - .push_fn(module_id, func_id, func.clone()); - Ok(()) } diff --git a/noir/noir-repo/aztec_macros/src/transforms/events.rs b/noir/noir-repo/aztec_macros/src/transforms/events.rs index e7e39ed29bac..b77a5821b813 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/events.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/events.rs @@ -16,7 +16,8 @@ use crate::{ chained_dep, utils::{ ast_utils::{ - call, expression, ident, ident_path, make_statement, make_type, path, variable_path, + call, expression, ident, ident_path, is_custom_attribute, make_statement, make_type, + path, variable_path, }, constants::SIGNATURE_PLACEHOLDER, errors::AztecMacroError, @@ -38,7 +39,8 @@ use crate::{ /// This allows developers to emit events without having to write the signature of the event every time they emit it. /// The signature cannot be known at this point since types are not resolved yet, so we use a signature placeholder. /// It'll get resolved after by transforming the HIR. -pub fn generate_selector_impl(structure: &NoirStruct) -> TypeImpl { +pub fn generate_selector_impl(structure: &mut NoirStruct) -> TypeImpl { + structure.attributes.push(SecondaryAttribute::Abi("events".to_string())); let struct_type = make_type(UnresolvedTypeData::Named(path(structure.name.clone()), vec![], true)); @@ -174,7 +176,7 @@ pub fn transform_events( ) -> Result<(), (AztecMacroError, FileId)> { for struct_id in collect_crate_structs(crate_id, context) { let attributes = context.def_interner.struct_attributes(&struct_id); - if attributes.iter().any(|attr| matches!(attr, SecondaryAttribute::Event)) { + if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(event)")) { transform_event(struct_id, &mut context.def_interner)?; } } diff --git a/noir/noir-repo/aztec_macros/src/transforms/functions.rs b/noir/noir-repo/aztec_macros/src/transforms/functions.rs index 8cb118906ac8..8b33ee701de2 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/functions.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/functions.rs @@ -1,10 +1,10 @@ use convert_case::{Case, Casing}; use noirc_errors::Span; use noirc_frontend::{ - macros_api::FieldElement, BlockExpression, ConstrainKind, ConstrainStatement, Distinctness, - Expression, ExpressionKind, ForLoopStatement, ForRange, FunctionReturnType, Ident, Literal, - NoirFunction, Param, PathKind, Pattern, Signedness, Statement, StatementKind, UnresolvedType, - UnresolvedTypeData, Visibility, + macros_api::FieldElement, parse_program, BlockExpression, ConstrainKind, ConstrainStatement, + Distinctness, Expression, ExpressionKind, ForLoopStatement, ForRange, FunctionReturnType, + Ident, Literal, NoirFunction, NoirStruct, Param, PathKind, Pattern, Signedness, Statement, + StatementKind, UnresolvedType, UnresolvedTypeData, Visibility, }; use crate::{ @@ -113,6 +113,90 @@ pub fn transform_function( Ok(()) } +pub fn export_fn_abi( + types: &mut Vec, + func: &NoirFunction, +) -> Result<(), AztecMacroError> { + let mut parameters_struct_source: Option<&str> = None; + + let struct_source = format!( + " + struct {}_parameters {{ + {} + }} + ", + func.name(), + func.parameters() + .iter() + .map(|param| { + let param_name = match param.pattern.clone() { + Pattern::Identifier(ident) => Ok(ident.0.contents), + _ => Err(AztecMacroError::CouldNotExportFunctionAbi { + span: Some(param.span), + secondary_message: Some( + "Only identifier patterns are supported".to_owned(), + ), + }), + }; + + format!( + "{}: {}", + param_name.unwrap(), + param.typ.typ.to_string().replace("plain::", "") + ) + }) + .collect::>() + .join(",\n"), + ); + + if !func.parameters().is_empty() { + parameters_struct_source = Some(&struct_source); + } + + let mut program = String::new(); + + let parameters = if let Some(parameters_struct_source) = parameters_struct_source { + program.push_str(parameters_struct_source); + format!("parameters: {}_parameters,\n", func.name()) + } else { + "".to_string() + }; + + let return_type_str = func.return_type().typ.to_string().replace("plain::", ""); + let return_type = if return_type_str != "()" { + format!("return_type: {},\n", return_type_str) + } else { + "".to_string() + }; + + let export_struct_source = format!( + " + #[abi(functions)] + struct {}_abi {{ + {}{} + }}", + func.name(), + parameters, + return_type + ); + + program.push_str(&export_struct_source); + + let (ast, errors) = parse_program(&program); + if !errors.is_empty() { + return Err(AztecMacroError::CouldNotExportFunctionAbi { + span: None, + secondary_message: Some( + format!("Failed to parse Noir macro code (struct {}_abi). This is either a bug in the compiler or the Noir macro code", func.name()) + ) + }); + } + + let sorted_ast = ast.into_sorted(); + types.extend(sorted_ast.types); + Ok(()) +} + /// Transform Unconstrained /// /// Inserts the following code at the beginning of an unconstrained function diff --git a/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs index 01d0272088bb..de94e5eed2d6 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs @@ -1,7 +1,7 @@ use noirc_errors::Span; use noirc_frontend::{ - parse_program, parser::SortedModule, ItemVisibility, NoirFunction, NoirStruct, PathKind, - TraitImplItem, TypeImpl, UnresolvedTypeData, UnresolvedTypeExpression, + parse_program, parser::SortedModule, ItemVisibility, LetStatement, NoirFunction, NoirStruct, + PathKind, TraitImplItem, TypeImpl, UnresolvedTypeData, UnresolvedTypeExpression, }; use regex::Regex; @@ -24,7 +24,7 @@ pub fn generate_note_interface_impl(module: &mut SortedModule) -> Result<(), Azt .iter_mut() .filter(|typ| typ.attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(note)"))); - let mut note_properties_structs = vec![]; + let mut structs_to_inject = vec![]; for note_struct in annotated_note_structs { // Look for the NoteInterface trait implementation for the note @@ -80,6 +80,13 @@ pub fn generate_note_interface_impl(module: &mut SortedModule) -> Result<(), Azt )), }), }?; + let note_type_id = note_type_id(¬e_type); + + let (note_exports_struct, note_exports_global) = + generate_note_exports_struct_and_global(¬e_type, ¬e_type_id)?; + + structs_to_inject.push(note_exports_struct); + module.globals.push(note_exports_global); // Automatically inject the header field if it's not present let (header_field_name, _) = if let Some(existing_header) = @@ -138,7 +145,7 @@ pub fn generate_note_interface_impl(module: &mut SortedModule) -> Result<(), Azt &header_field_name.0.contents, note_interface_impl_span, )?; - note_properties_structs.push(note_properties_struct); + structs_to_inject.push(note_properties_struct); let note_properties_fn = generate_note_properties_fn( ¬e_type, ¬e_fields, @@ -167,7 +174,7 @@ pub fn generate_note_interface_impl(module: &mut SortedModule) -> Result<(), Azt if !check_trait_method_implemented(trait_impl, "get_note_type_id") { let get_note_type_id_fn = - generate_note_get_type_id(¬e_type, note_interface_impl_span)?; + generate_note_get_type_id(¬e_type_id, note_interface_impl_span)?; trait_impl.items.push(TraitImplItem::Function(get_note_type_id_fn)); } @@ -178,7 +185,7 @@ pub fn generate_note_interface_impl(module: &mut SortedModule) -> Result<(), Azt } } - module.types.extend(note_properties_structs); + module.types.extend(structs_to_inject); Ok(()) } @@ -245,19 +252,16 @@ fn generate_note_set_header( // Automatically generate the note type id getter method. The id itself its calculated as the concatenation // of the conversion of the characters in the note's struct name to unsigned integers. fn generate_note_get_type_id( - note_type: &str, + note_type_id: &str, impl_span: Option, ) -> Result { - // TODO(#4519) Improve automatic note id generation and assignment - let note_id = - note_type.chars().map(|c| (c as u32).to_string()).collect::>().join(""); let function_source = format!( " fn get_note_type_id() -> Field {{ {} }} ", - note_id + note_type_id ) .to_string(); @@ -443,6 +447,40 @@ fn generate_compute_note_content_hash( Ok(noir_fn) } +fn generate_note_exports_struct_and_global( + note_type: &str, + note_type_id: &str, +) -> Result<(NoirStruct, LetStatement), AztecMacroError> { + let struct_source = format!( + " + struct {}Exports {{ + id: Field, + typ: str + }} + + #[abi(notes)] + global {}_EXPORTS = {}Exports {{ + id: {}, + typ: \"{}\", + }}; + ", + note_type, note_type, note_type, note_type_id, note_type + ) + .to_string(); + + let (struct_ast, errors) = parse_program(&struct_source); + if !errors.is_empty() { + dbg!(errors); + return Err(AztecMacroError::CouldNotImplementNoteInterface { + secondary_message: Some(format!("Failed to parse Noir macro code (struct {}Exports). This is either a bug in the compiler or the Noir macro code", note_type)), + span: None + }); + } + + let mut struct_ast = struct_ast.into_sorted(); + Ok((struct_ast.types.pop().unwrap(), struct_ast.globals.pop().unwrap())) +} + // Source code generator functions. These utility methods produce Noir code as strings, that are then parsed and added to the AST. fn generate_note_properties_struct_source( @@ -581,3 +619,9 @@ fn generate_note_deserialize_content_source( ) .to_string() } + +// Utility function to generate the note type id as a Field +fn note_type_id(note_type: &str) -> String { + // TODO(#4519) Improve automatic note id generation and assignment + note_type.chars().map(|c| (c as u32).to_string()).collect::>().join("") +} diff --git a/noir/noir-repo/aztec_macros/src/transforms/storage.rs b/noir/noir-repo/aztec_macros/src/transforms/storage.rs index 10f44d01bb43..e3ba9b9b170b 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/storage.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/storage.rs @@ -1,4 +1,4 @@ -use std::borrow::{Borrow, BorrowMut}; +use std::borrow::Borrow; use noirc_errors::Span; use noirc_frontend::{ @@ -7,33 +7,53 @@ use noirc_frontend::{ FieldElement, FileId, HirContext, HirExpression, HirLiteral, HirStatement, NodeInterner, }, node_interner::{TraitId, TraitImplKind}, + parse_program, parser::SortedModule, + token::SecondaryAttribute, BlockExpression, Expression, ExpressionKind, FunctionDefinition, Ident, Literal, NoirFunction, - PathKind, Pattern, StatementKind, Type, TypeImpl, UnresolvedType, UnresolvedTypeData, + NoirStruct, PathKind, Pattern, StatementKind, Type, TypeImpl, UnresolvedType, + UnresolvedTypeData, }; use crate::{ chained_dep, chained_path, utils::{ ast_utils::{ - call, expression, ident, ident_path, lambda, make_statement, make_type, pattern, - return_type, variable, variable_path, + call, expression, ident, ident_path, is_custom_attribute, lambda, make_statement, + make_type, pattern, return_type, variable, variable_path, }, errors::AztecMacroError, - hir_utils::{collect_crate_structs, collect_traits}, + hir_utils::{collect_crate_structs, collect_traits, get_contract_module_data}, }, }; // Check to see if the user has defined a storage struct -pub fn check_for_storage_definition(module: &SortedModule) -> bool { - module.types.iter().any(|r#struct| r#struct.name.0.contents == "Storage") +pub fn check_for_storage_definition( + module: &SortedModule, +) -> Result, AztecMacroError> { + let result: Vec<&NoirStruct> = module + .types + .iter() + .filter(|r#struct| { + r#struct.attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(storage)")) + }) + .collect(); + if result.len() > 1 { + return Err(AztecMacroError::MultipleStorageDefinitions { + span: result.first().map(|res| res.name.span()), + }); + } + Ok(result.iter().map(|&r#struct| r#struct.name.0.contents.clone()).next()) } // Check to see if the user has defined a storage struct -pub fn check_for_storage_implementation(module: &SortedModule) -> bool { +pub fn check_for_storage_implementation( + module: &SortedModule, + storage_struct_name: &String, +) -> bool { module.impls.iter().any(|r#impl| match &r#impl.object_type.typ { UnresolvedTypeData::Named(path, _, _) => { - path.segments.last().is_some_and(|segment| segment.0.contents == "Storage") + path.segments.last().is_some_and(|segment| segment.0.contents == *storage_struct_name) } _ => false, }) @@ -117,9 +137,15 @@ pub fn generate_storage_field_constructor( /// /// Storage slots are generated as 0 and will be populated using the information from the HIR /// at a later stage. -pub fn generate_storage_implementation(module: &mut SortedModule) -> Result<(), AztecMacroError> { - let definition = - module.types.iter().find(|r#struct| r#struct.name.0.contents == "Storage").unwrap(); +pub fn generate_storage_implementation( + module: &mut SortedModule, + storage_struct_name: &String, +) -> Result<(), AztecMacroError> { + let definition = module + .types + .iter() + .find(|r#struct| r#struct.name.0.contents == *storage_struct_name) + .unwrap(); let slot_zero = expression(ExpressionKind::Literal(Literal::Integer( FieldElement::from(i128::from(0)), @@ -136,7 +162,7 @@ pub fn generate_storage_implementation(module: &mut SortedModule) -> Result<(), .collect(); let storage_constructor_statement = make_statement(StatementKind::Expression(expression( - ExpressionKind::constructor((chained_path!("Storage"), field_constructors)), + ExpressionKind::constructor((chained_path!(storage_struct_name), field_constructors)), ))); let init = NoirFunction::normal(FunctionDefinition::normal( @@ -157,7 +183,7 @@ pub fn generate_storage_implementation(module: &mut SortedModule) -> Result<(), let storage_impl = TypeImpl { object_type: UnresolvedType { - typ: UnresolvedTypeData::Named(chained_path!("Storage"), vec![], true), + typ: UnresolvedTypeData::Named(chained_path!(storage_struct_name), vec![], true), span: Some(Span::default()), }, type_span: Span::default(), @@ -239,16 +265,51 @@ pub fn assign_storage_slots( context: &mut HirContext, ) -> Result<(), (AztecMacroError, FileId)> { let traits: Vec<_> = collect_traits(context); - for struct_id in collect_crate_structs(crate_id, context) { - let interner: &mut NodeInterner = context.def_interner.borrow_mut(); - let r#struct = interner.get_struct(struct_id); - let file_id = r#struct.borrow().location.file; - if r#struct.borrow().name.0.contents == "Storage" && r#struct.borrow().id.krate().is_root() + if let Some((_, file_id)) = get_contract_module_data(context, crate_id) { + let maybe_storage_struct = + collect_crate_structs(crate_id, context).iter().find_map(|&struct_id| { + let r#struct = context.def_interner.get_struct(struct_id); + let attributes = context.def_interner.struct_attributes(&struct_id); + if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(storage)")) + && r#struct.borrow().id.krate().is_root() + { + Some(r#struct) + } else { + None + } + }); + + let maybe_storage_layout = + context.def_interner.get_all_globals().iter().find_map(|global_info| { + let statement = context.def_interner.get_global_let_statement(global_info.id); + if statement.clone().is_some_and(|stmt| { + stmt.attributes + .iter() + .any(|attr| *attr == SecondaryAttribute::Abi("storage".to_string())) + }) { + let expr = context.def_interner.expression(&statement.unwrap().expression); + match expr { + HirExpression::Constructor(hir_constructor_expression) => { + Some(hir_constructor_expression) + } + _ => None, + } + } else { + None + } + }); + + if let (Some(storage_struct), Some(storage_layout)) = + (maybe_storage_struct, maybe_storage_layout) { - let init_id = interner + let init_id = context + .def_interner .lookup_method( - &Type::Struct(interner.get_struct(struct_id), vec![]), - struct_id, + &Type::Struct( + context.def_interner.get_struct(storage_struct.borrow().id), + vec![], + ), + storage_struct.borrow().id, "init", false, ) @@ -260,28 +321,33 @@ pub fn assign_storage_slots( }, file_id, ))?; - let init_function = interner.function(&init_id).block(interner); + let init_function = + context.def_interner.function(&init_id).block(&context.def_interner); let init_function_statement_id = init_function.statements().first().ok_or(( AztecMacroError::CouldNotAssignStorageSlots { secondary_message: Some("Init storage statement not found".to_string()), }, file_id, ))?; - let storage_constructor_statement = interner.statement(init_function_statement_id); + let storage_constructor_statement = + context.def_interner.statement(init_function_statement_id); let storage_constructor_expression = match storage_constructor_statement { HirStatement::Expression(expression_id) => { - match interner.expression(&expression_id) { - HirExpression::Constructor(hir_constructor_expression) => { - Ok(hir_constructor_expression) - } - _ => Err((AztecMacroError::CouldNotAssignStorageSlots { + match context.def_interner.expression(&expression_id) { + HirExpression::Constructor(hir_constructor_expression) => { + Ok(hir_constructor_expression) + } + _ => Err(( + AztecMacroError::CouldNotAssignStorageSlots { secondary_message: Some( "Storage constructor statement must be a constructor expression" .to_string(), ), - }, file_id)) - } + }, + file_id, + )), + } } _ => Err(( AztecMacroError::CouldNotAssignStorageSlots { @@ -295,9 +361,9 @@ pub fn assign_storage_slots( let mut storage_slot: u64 = 1; for (index, (_, expr_id)) in storage_constructor_expression.fields.iter().enumerate() { - let fields = r#struct.borrow().get_fields(&[]); - let (_, field_type) = fields.get(index).unwrap(); - let new_call_expression = match interner.expression(expr_id) { + let fields = storage_struct.borrow().get_fields(&[]); + let (field_name, field_type) = fields.get(index).unwrap(); + let new_call_expression = match context.def_interner.expression(expr_id) { HirExpression::Call(hir_call_expression) => Ok(hir_call_expression), _ => Err(( AztecMacroError::CouldNotAssignStorageSlots { @@ -310,7 +376,8 @@ pub fn assign_storage_slots( )), }?; - let slot_arg_expression = interner.expression(&new_call_expression.arguments[1]); + let slot_arg_expression = + context.def_interner.expression(&new_call_expression.arguments[1]); let current_storage_slot = match slot_arg_expression { HirExpression::Literal(HirLiteral::Integer(slot, _)) => Ok(slot.to_u128()), @@ -325,22 +392,123 @@ pub fn assign_storage_slots( )), }?; - if current_storage_slot != 0 { - continue; - } + let storage_layout_field = + storage_layout.fields.iter().find(|field| field.0 .0.contents == *field_name); - let type_serialized_len = get_serialized_length(&traits, field_type, interner) - .map_err(|err| (err, file_id))?; - interner.update_expression(new_call_expression.arguments[1], |expr| { + let storage_layout_slot_expr_id = + if let Some((_, expr_id)) = storage_layout_field { + let expr = context.def_interner.expression(expr_id); + if let HirExpression::Constructor(storage_layout_field_storable_expr) = expr + { + storage_layout_field_storable_expr.fields.iter().find_map( + |(field, expr_id)| { + if field.0.contents == "slot" { + Some(*expr_id) + } else { + None + } + }, + ) + } else { + None + } + } else { + None + } + .ok_or(( + AztecMacroError::CouldNotAssignStorageSlots { + secondary_message: Some(format!( + "Storage layout field ({}) not found or has an incorrect type", + field_name + )), + }, + file_id, + ))?; + + let new_storage_slot = if current_storage_slot == 0 { + u128::from(storage_slot) + } else { + current_storage_slot + }; + + let type_serialized_len = + get_serialized_length(&traits, field_type, &context.def_interner) + .map_err(|err| (err, file_id))?; + + context.def_interner.update_expression(new_call_expression.arguments[1], |expr| { *expr = HirExpression::Literal(HirLiteral::Integer( - FieldElement::from(u128::from(storage_slot)), + FieldElement::from(new_storage_slot), false, - )); + )) + }); + + context.def_interner.update_expression(storage_layout_slot_expr_id, |expr| { + *expr = HirExpression::Literal(HirLiteral::Integer( + FieldElement::from(new_storage_slot), + false, + )) }); storage_slot += type_serialized_len; } } } + + Ok(()) +} + +pub fn generate_storage_layout( + module: &mut SortedModule, + storage_struct_name: String, +) -> Result<(), AztecMacroError> { + let definition = module + .types + .iter() + .find(|r#struct| r#struct.name.0.contents == *storage_struct_name) + .unwrap(); + + let mut generic_args = vec![]; + let mut storable_fields = vec![]; + let mut storable_fields_impl = vec![]; + + definition.fields.iter().enumerate().for_each(|(index, (field_ident, field_type))| { + storable_fields.push(format!("{}: dep::aztec::prelude::Storable", field_ident, index)); + generic_args.push(format!("N{}", index)); + storable_fields_impl.push(format!( + "{}: dep::aztec::prelude::Storable {{ slot: 0, typ: \"{}\" }}", + field_ident, + field_type.to_string().replace("plain::", "") + )); + }); + + let storage_fields_source = format!( + " + struct StorageLayout<{}> {{ + {} + }} + + #[abi(storage)] + global STORAGE_LAYOUT = StorageLayout {{ + {} + }}; + ", + generic_args.join(", "), + storable_fields.join(",\n"), + storable_fields_impl.join(",\n") + ); + + let (struct_ast, errors) = parse_program(&storage_fields_source); + if !errors.is_empty() { + dbg!(errors); + return Err(AztecMacroError::CouldNotImplementNoteInterface { + secondary_message: Some("Failed to parse Noir macro code (struct StorageLayout). This is either a bug in the compiler or the Noir macro code".to_string()), + span: None + }); + } + + let mut struct_ast = struct_ast.into_sorted(); + module.types.push(struct_ast.types.pop().unwrap()); + module.globals.push(struct_ast.globals.pop().unwrap()); + Ok(()) } diff --git a/noir/noir-repo/aztec_macros/src/utils/ast_utils.rs b/noir/noir-repo/aztec_macros/src/utils/ast_utils.rs index bdcbad646c27..eb8f5a4156d2 100644 --- a/noir/noir-repo/aztec_macros/src/utils/ast_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/ast_utils.rs @@ -67,6 +67,7 @@ pub fn mutable_assignment(name: &str, assigned_to: Expression) -> Statement { pattern: mutable(name), r#type: make_type(UnresolvedTypeData::Unspecified), expression: assigned_to, + attributes: vec![], })) } @@ -82,6 +83,7 @@ pub fn assignment(name: &str, assigned_to: Expression) -> Statement { pattern: pattern(name), r#type: make_type(UnresolvedTypeData::Unspecified), expression: assigned_to, + attributes: vec![], })) } diff --git a/noir/noir-repo/aztec_macros/src/utils/errors.rs b/noir/noir-repo/aztec_macros/src/utils/errors.rs index 48186555efff..9aead1756f95 100644 --- a/noir/noir-repo/aztec_macros/src/utils/errors.rs +++ b/noir/noir-repo/aztec_macros/src/utils/errors.rs @@ -11,6 +11,9 @@ pub enum AztecMacroError { UnsupportedStorageType { span: Option, typ: UnresolvedTypeData }, CouldNotAssignStorageSlots { secondary_message: Option }, CouldNotImplementNoteInterface { span: Option, secondary_message: Option }, + MultipleStorageDefinitions { span: Option }, + CouldNotExportStorageLayout { span: Option, secondary_message: Option }, + CouldNotExportFunctionAbi { span: Option, secondary_message: Option }, EventError { span: Span, message: String }, UnsupportedAttributes { span: Span, secondary_message: Option }, } @@ -46,6 +49,21 @@ impl From for MacroError { AztecMacroError::CouldNotImplementNoteInterface { span, secondary_message } => MacroError { primary_message: "Could not implement automatic methods for note, please provide an implementation of the NoteInterface trait".to_string(), secondary_message, + span + }, + AztecMacroError::MultipleStorageDefinitions { span } => MacroError { + primary_message: "Only one struct can be tagged as #[aztec(storage)]".to_string(), + secondary_message: None, + span, + }, + AztecMacroError::CouldNotExportStorageLayout { secondary_message, span } => MacroError { + primary_message: "Could not generate and export storage layout".to_string(), + secondary_message, + span, + }, + AztecMacroError::CouldNotExportFunctionAbi { secondary_message, span } => MacroError { + primary_message: "Could not generate and export function abi".to_string(), + secondary_message, span, }, AztecMacroError::EventError { span, message } => MacroError { diff --git a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs index f31a05842617..0535643186a3 100644 --- a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs @@ -1,12 +1,19 @@ use iter_extended::vecmap; +use noirc_errors::Location; use noirc_frontend::{ graph::CrateId, - hir::def_collector::dc_crate::UnresolvedTraitImpl, - macros_api::{HirContext, ModuleDefId, StructId}, - node_interner::{TraitId, TraitImplId}, - Signedness, Type, UnresolvedTypeData, + hir::{ + def_map::{LocalModuleId, ModuleId}, + resolution::{path_resolver::StandardPathResolver, resolver::Resolver}, + type_check::type_check_func, + }, + macros_api::{FileId, HirContext, ModuleDefId, StructId}, + node_interner::{FuncId, TraitId}, + ItemVisibility, NoirFunction, Shared, Signedness, StructType, Type, }; +use super::ast_utils::is_custom_attribute; + pub fn collect_crate_structs(crate_id: &CrateId, context: &HirContext) -> Vec { context .def_map(crate_id) @@ -25,6 +32,16 @@ pub fn collect_crate_structs(crate_id: &CrateId, context: &HirContext) -> Vec Vec { + context + .def_map(crate_id) + .expect("ICE: Missing crate in def_map") + .modules() + .iter() + .flat_map(|(_, module)| module.value_definitions().filter_map(|id| id.as_function())) + .collect() +} + pub fn collect_traits(context: &HirContext) -> Vec { let crates = context.crates(); crates @@ -69,50 +86,85 @@ pub fn signature_of_type(typ: &Type) -> String { } } -// Fetches the name of all structs that implement trait_name, both in the current crate and all of its dependencies. -pub fn fetch_struct_trait_impls( - context: &mut HirContext, - unresolved_traits_impls: &[UnresolvedTraitImpl], - trait_name: &str, -) -> Vec { - let mut struct_typenames: Vec = Vec::new(); - - // These structs can be declared in either external crates or the current one. External crates that contain - // dependencies have already been processed and resolved, but are available here via the NodeInterner. Note that - // crates on which the current crate does not depend on may not have been processed, and will be ignored. - for trait_impl_id in 0..context.def_interner.next_trait_impl_id().0 { - let trait_impl = &context.def_interner.get_trait_implementation(TraitImplId(trait_impl_id)); - - if trait_impl.borrow().ident.0.contents == *trait_name { - if let Type::Struct(s, _) = &trait_impl.borrow().typ { - struct_typenames.push(s.borrow().name.0.contents.clone()); +// Fetches the name of all structs tagged as #[aztec(note)] in a given crate +pub fn fetch_crate_notes(context: &HirContext, crate_id: &CrateId) -> Vec> { + collect_crate_structs(crate_id, context) + .iter() + .filter_map(|&struct_id| { + let r#struct = context.def_interner.get_struct(struct_id); + let attributes = context.def_interner.struct_attributes(&struct_id); + if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(note)")) { + Some(r#struct) } else { - panic!("Found impl for {} on non-Struct", trait_name); + None } - } + }) + .collect() +} + +// Fetches the name of all structs tagged as #[aztec(note)], both in the current crate and all of its dependencies. +pub fn fetch_notes(context: &HirContext) -> Vec> { + context.crates().flat_map(|crate_id| fetch_crate_notes(context, &crate_id)).collect() +} + +pub fn get_contract_module_data( + context: &mut HirContext, + crate_id: &CrateId, +) -> Option<(LocalModuleId, FileId)> { + // We first fetch modules in this crate which correspond to contracts, along with their file id. + let contract_module_file_ids: Vec<(LocalModuleId, FileId)> = context + .def_map(crate_id) + .expect("ICE: Missing crate in def_map") + .modules() + .iter() + .filter(|(_, module)| module.is_contract) + .map(|(idx, module)| (LocalModuleId(idx), module.location.file)) + .collect(); + + // If the current crate does not contain a contract module we simply skip it. More than 1 contract in a crate is forbidden by the compiler + if contract_module_file_ids.is_empty() { + return None; } - // This crate's traits and impls have not yet been resolved, so we look for impls in unresolved_trait_impls. - struct_typenames.extend( - unresolved_traits_impls - .iter() - .filter(|trait_impl| { - trait_impl - .trait_path - .segments - .last() - .expect("ICE: empty trait_impl path") - .0 - .contents - == *trait_name - }) - .filter_map(|trait_impl| match &trait_impl.object_type.typ { - UnresolvedTypeData::Named(path, _, _) => { - Some(path.segments.last().unwrap().0.contents.clone()) - } - _ => None, - }), + Some(contract_module_file_ids[0]) +} + +pub fn inject_fn( + crate_id: &CrateId, + context: &mut HirContext, + func: NoirFunction, + location: Location, + module_id: LocalModuleId, + file_id: FileId, +) { + let func_id = context.def_interner.push_empty_fn(); + context.def_interner.push_function( + func_id, + &func.def, + ModuleId { krate: *crate_id, local_id: module_id }, + location, ); - struct_typenames + context.def_map_mut(crate_id).unwrap().modules_mut()[module_id.0] + .declare_function(func.name_ident().clone(), ItemVisibility::Public, func_id) + .unwrap_or_else(|_| { + panic!( + "Failed to declare autogenerated {} function, likely due to a duplicate definition", + func.name() + ) + }); + + let def_maps = &mut context.def_maps; + + let path_resolver = + StandardPathResolver::new(ModuleId { local_id: module_id, krate: *crate_id }); + + let resolver = Resolver::new(&mut context.def_interner, &path_resolver, def_maps, file_id); + + let (hir_func, meta, _) = resolver.resolve_function(func, func_id); + + context.def_interner.push_fn_meta(meta, func_id); + context.def_interner.update_fn(func_id, hir_func); + + type_check_func(&mut context.def_interner, func_id); } diff --git a/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs b/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs index 7fafa7191863..516c8a53cb67 100644 --- a/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs +++ b/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs @@ -2,10 +2,11 @@ use std::collections::BTreeMap; use acvm::acir::native_types::Witness; use iter_extended::{btree_map, vecmap}; -use noirc_abi::{Abi, AbiParameter, AbiReturnType, AbiType}; +use noirc_abi::{Abi, AbiParameter, AbiReturnType, AbiType, AbiValue}; use noirc_frontend::{ hir::Context, - hir_def::{function::Param, stmt::HirPattern}, + hir_def::{expr::HirArrayLiteral, function::Param, stmt::HirPattern}, + macros_api::{HirExpression, HirLiteral}, node_interner::{FuncId, NodeInterner}, Visibility, }; @@ -109,6 +110,51 @@ fn collapse_ranges(witnesses: &[Witness]) -> Vec> { wit } +pub(super) fn value_from_hir_expression(context: &Context, expression: HirExpression) -> AbiValue { + match expression { + HirExpression::Constructor(constructor) => { + let fields = constructor + .fields + .iter() + .map(|(ident, expr_id)| { + ( + ident.0.contents.to_string(), + value_from_hir_expression( + context, + context.def_interner.expression(expr_id), + ), + ) + }) + .collect(); + AbiValue::Struct { fields } + } + HirExpression::Literal(literal) => match literal { + HirLiteral::Array(hir_array) => match hir_array { + HirArrayLiteral::Standard(expr_ids) => { + let value = expr_ids + .iter() + .map(|expr_id| { + value_from_hir_expression( + context, + context.def_interner.expression(expr_id), + ) + }) + .collect(); + AbiValue::Array { value } + } + _ => unreachable!("Repeated arrays cannot be used in the abi"), + }, + HirLiteral::Bool(value) => AbiValue::Boolean { value }, + HirLiteral::Str(value) => AbiValue::String { value }, + HirLiteral::Integer(field, sign) => { + AbiValue::Integer { value: field.to_string(), sign } + } + _ => unreachable!("Literal cannot be used in the abi"), + }, + _ => unreachable!("Type cannot be used in the abi"), + } +} + #[cfg(test)] mod test { use std::ops::Range; diff --git a/noir/noir-repo/compiler/noirc_driver/src/contract.rs b/noir/noir-repo/compiler/noirc_driver/src/contract.rs index 9a0e25a321bf..5c0f2f81b1ed 100644 --- a/noir/noir-repo/compiler/noirc_driver/src/contract.rs +++ b/noir/noir-repo/compiler/noirc_driver/src/contract.rs @@ -1,14 +1,20 @@ use serde::{Deserialize, Serialize}; -use std::collections::BTreeMap; +use std::collections::{BTreeMap, HashMap}; use acvm::acir::circuit::Program; use fm::FileId; -use noirc_abi::{Abi, ContractEvent}; +use noirc_abi::{Abi, AbiType, AbiValue}; use noirc_errors::debug_info::DebugInfo; use noirc_evaluator::errors::SsaReport; use super::debug::DebugFile; +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct CompiledContractOutputs { + pub structs: HashMap>, + pub globals: HashMap>, +} + #[derive(Clone, Debug, Serialize, Deserialize)] pub struct CompiledContract { pub noir_version: String, @@ -19,10 +25,7 @@ pub struct CompiledContract { /// stored in this `Vector`. pub functions: Vec, - /// All the events defined inside the contract scope. - /// An event is a struct value that can be emitted via oracles - /// by any contract function during execution. - pub events: Vec, + pub outputs: CompiledContractOutputs, pub file_map: BTreeMap, pub warnings: Vec, diff --git a/noir/noir-repo/compiler/noirc_driver/src/lib.rs b/noir/noir-repo/compiler/noirc_driver/src/lib.rs index e52f702ad7c7..6aff9a44c94d 100644 --- a/noir/noir-repo/compiler/noirc_driver/src/lib.rs +++ b/noir/noir-repo/compiler/noirc_driver/src/lib.rs @@ -3,11 +3,12 @@ #![warn(unreachable_pub)] #![warn(clippy::semicolon_if_nothing_returned)] +use abi_gen::value_from_hir_expression; use acvm::acir::circuit::ExpressionWidth; use clap::Args; use fm::{FileId, FileManager}; use iter_extended::vecmap; -use noirc_abi::{AbiParameter, AbiType, ContractEvent}; +use noirc_abi::{AbiParameter, AbiType, AbiValue}; use noirc_errors::{CustomDiagnostic, FileDiagnostic}; use noirc_evaluator::create_program; use noirc_evaluator::errors::RuntimeError; @@ -31,7 +32,7 @@ mod stdlib; use debug::filter_relevant_files; -pub use contract::{CompiledContract, ContractFunction}; +pub use contract::{CompiledContract, CompiledContractOutputs, ContractFunction}; pub use debug::DebugFile; pub use program::CompiledProgram; @@ -424,18 +425,51 @@ fn compile_contract_inner( let debug_infos: Vec<_> = functions.iter().map(|function| function.debug.clone()).collect(); let file_map = filter_relevant_files(&debug_infos, &context.file_manager); + let out_structs = contract + .outputs + .structs + .into_iter() + .map(|(tag, structs)| { + let structs = structs + .into_iter() + .map(|struct_id| { + let typ = context.def_interner.get_struct(struct_id); + let typ = typ.borrow(); + let fields = vecmap(typ.get_fields(&[]), |(name, typ)| { + (name, AbiType::from_type(context, &typ)) + }); + let path = + context.fully_qualified_struct_path(context.root_crate_id(), typ.id); + AbiType::Struct { path, fields } + }) + .collect(); + (tag.to_string(), structs) + }) + .collect(); + + let out_globals = contract + .outputs + .globals + .iter() + .map(|(tag, globals)| { + let globals: Vec = globals + .iter() + .map(|global_id| { + let let_statement = + context.def_interner.get_global_let_statement(*global_id).unwrap(); + let hir_expression = + context.def_interner.expression(&let_statement.expression); + value_from_hir_expression(context, hir_expression) + }) + .collect(); + (tag.to_string(), globals) + }) + .collect(); + Ok(CompiledContract { name: contract.name, - events: contract - .events - .iter() - .map(|event_id| { - let typ = context.def_interner.get_struct(*event_id); - let typ = typ.borrow(); - ContractEvent::from_struct_type(context, &typ) - }) - .collect(), functions, + outputs: CompiledContractOutputs { structs: out_structs, globals: out_globals }, file_map, noir_version: NOIR_ARTIFACT_VERSION_STRING.to_string(), warnings, diff --git a/noir/noir-repo/compiler/noirc_frontend/src/ast/statement.rs b/noir/noir-repo/compiler/noirc_frontend/src/ast/statement.rs index b14ead8ad42f..aaa05af932a2 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/ast/statement.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/ast/statement.rs @@ -2,6 +2,7 @@ use std::fmt::Display; use std::sync::atomic::{AtomicU32, Ordering}; use crate::lexer::token::SpannedToken; +use crate::macros_api::SecondaryAttribute; use crate::parser::{ParserError, ParserErrorReason}; use crate::token::Token; use crate::{ @@ -107,7 +108,7 @@ impl StatementKind { pub fn new_let( ((pattern, r#type), expression): ((Pattern, UnresolvedType), Expression), ) -> StatementKind { - StatementKind::Let(LetStatement { pattern, r#type, expression }) + StatementKind::Let(LetStatement { pattern, r#type, expression, attributes: vec![] }) } /// Create a Statement::Assign value, desugaring any combined operators like += if needed. @@ -405,13 +406,17 @@ pub struct LetStatement { pub pattern: Pattern, pub r#type: UnresolvedType, pub expression: Expression, + pub attributes: Vec, } impl LetStatement { pub fn new_let( - ((pattern, r#type), expression): ((Pattern, UnresolvedType), Expression), + (((pattern, r#type), expression), attributes): ( + ((Pattern, UnresolvedType), Expression), + Vec, + ), ) -> LetStatement { - LetStatement { pattern, r#type, expression } + LetStatement { pattern, r#type, expression, attributes } } } @@ -556,6 +561,7 @@ impl ForRange { pattern: Pattern::Identifier(array_ident.clone()), r#type: UnresolvedType::unspecified(), expression: array, + attributes: vec![], }), span: array_span, }; @@ -598,6 +604,7 @@ impl ForRange { pattern: Pattern::Identifier(identifier), r#type: UnresolvedType::unspecified(), expression: Expression::new(loop_element, array_span), + attributes: vec![], }), span: array_span, }; diff --git a/noir/noir-repo/compiler/noirc_frontend/src/debug/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/debug/mod.rs index 8e5c174d2703..c99cfdc4a5c4 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/debug/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/debug/mod.rs @@ -145,6 +145,7 @@ impl DebugInstrumenter { pattern: ast::Pattern::Identifier(ident("__debug_expr", ret_expr.span)), r#type: ast::UnresolvedType::unspecified(), expression: ret_expr.clone(), + attributes: vec![], }), span: ret_expr.span, }; @@ -248,6 +249,7 @@ impl DebugInstrumenter { }), span: let_stmt.expression.span, }, + attributes: vec![], }), span: *span, } @@ -273,6 +275,7 @@ impl DebugInstrumenter { pattern: ast::Pattern::Identifier(ident("__debug_expr", assign_stmt.expression.span)), r#type: ast::UnresolvedType::unspecified(), expression: assign_stmt.expression.clone(), + attributes: vec![], }); let expression_span = assign_stmt.expression.span; let new_assign_stmt = match &assign_stmt.lvalue { diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_crate.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_crate.rs index 0c53bff4a54d..39aa6c85a76c 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_crate.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_crate.rs @@ -253,20 +253,6 @@ impl DefCollector { // Add the current crate to the collection of DefMaps context.def_maps.insert(crate_id, def_collector.def_map); - // TODO(#4653): generalize this function - for macro_processor in macro_processors { - macro_processor - .process_collected_defs( - &crate_id, - context, - &def_collector.collected_traits_impls, - &mut def_collector.collected_functions, - ) - .unwrap_or_else(|(macro_err, file_id)| { - errors.push((macro_err.into(), file_id)); - }); - } - inject_prelude(crate_id, context, crate_root, &mut def_collector.collected_imports); for submodule in submodules { inject_prelude( diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_mod.rs index fcb20c740c7f..6fbb3b675460 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_mod.rs @@ -102,8 +102,12 @@ impl<'a> ModCollector<'a> { for global in globals { let name = global.pattern.name_ident().clone(); - let global_id = - context.def_interner.push_empty_global(name.clone(), self.module_id, self.file_id); + let global_id = context.def_interner.push_empty_global( + name.clone(), + self.module_id, + self.file_id, + global.attributes.clone(), + ); // Add the statement to the scope so its path can be looked up later let result = self.def_collector.def_map.modules[self.module_id.0] @@ -455,6 +459,7 @@ impl<'a> ModCollector<'a> { name.clone(), trait_id.0.local_id, self.file_id, + vec![], ); if let Err((first_def, second_def)) = self.def_collector.def_map.modules diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs index 157227f763e7..4dce79ccf819 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs @@ -2,13 +2,13 @@ use crate::graph::CrateId; use crate::hir::def_collector::dc_crate::{CompilationError, DefCollector}; use crate::hir::Context; use crate::macros_api::MacroProcessor; -use crate::node_interner::{FuncId, NodeInterner, StructId}; +use crate::node_interner::{FuncId, GlobalId, NodeInterner, StructId}; use crate::parser::{parse_program, ParsedModule, ParserError}; use crate::token::{FunctionAttribute, SecondaryAttribute, TestScope}; use arena::{Arena, Index}; use fm::{FileId, FileManager}; use noirc_errors::Location; -use std::collections::BTreeMap; +use std::collections::{BTreeMap, HashMap}; mod module_def; pub use module_def::*; mod item_scope; @@ -217,20 +217,66 @@ impl CrateDefMap { }) .collect(); - let events = module - .type_definitions() - .filter_map(|id| { - id.as_type().filter(|struct_id| { - interner - .struct_attributes(struct_id) - .iter() - .any(|attr| attr == &SecondaryAttribute::Event) - }) - }) - .collect(); + let mut outputs = + ContractOutputs { structs: HashMap::new(), globals: HashMap::new() }; + + interner.get_all_globals().iter().for_each(|global_info| { + interner.global_attributes(&global_info.id).iter().for_each(|attr| { + if let SecondaryAttribute::Abi(tag) = attr { + if let Some(tagged) = outputs.globals.get_mut(tag) { + tagged.push(global_info.id); + } else { + outputs.globals.insert(tag.to_string(), vec![global_info.id]); + } + } + }); + }); + + module.type_definitions().for_each(|id| { + if let ModuleDefId::TypeId(struct_id) = id { + interner.struct_attributes(&struct_id).iter().for_each(|attr| { + if let SecondaryAttribute::Abi(tag) = attr { + if let Some(tagged) = outputs.structs.get_mut(tag) { + tagged.push(struct_id); + } else { + outputs.structs.insert(tag.to_string(), vec![struct_id]); + } + } + }); + } + }); + + let mut outputs = + ContractOutputs { structs: HashMap::new(), globals: HashMap::new() }; + + interner.get_all_globals().iter().for_each(|global_info| { + interner.global_attributes(&global_info.id).iter().for_each(|attr| { + if let SecondaryAttribute::Abi(tag) = attr { + if let Some(tagged) = outputs.globals.get_mut(tag) { + tagged.push(global_info.id); + } else { + outputs.globals.insert(tag.to_string(), vec![global_info.id]); + } + } + }); + }); + + module.type_definitions().for_each(|id| { + if let ModuleDefId::TypeId(struct_id) = id { + interner.struct_attributes(&struct_id).iter().for_each(|attr| { + if let SecondaryAttribute::Abi(tag) = attr { + if let Some(tagged) = outputs.structs.get_mut(tag) { + tagged.push(struct_id); + } else { + outputs.structs.insert(tag.to_string(), vec![struct_id]); + } + } + }); + } + }); let name = self.get_module_path(id, module.parent); - Some(Contract { name, location: module.location, functions, events }) + Some(Contract { name, location: module.location, functions, outputs }) } else { None } @@ -283,6 +329,11 @@ pub struct ContractFunctionMeta { pub is_entry_point: bool, } +pub struct ContractOutputs { + pub structs: HashMap>, + pub globals: HashMap>, +} + /// A 'contract' in Noir source code with a given name, functions and events. /// This is not an AST node, it is just a convenient form to return for CrateDefMap::get_all_contracts. pub struct Contract { @@ -290,7 +341,7 @@ pub struct Contract { pub name: String, pub location: Location, pub functions: Vec, - pub events: Vec, + pub outputs: ContractOutputs, } /// Given a FileId, fetch the File, from the FileManager and parse it's content diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs index 00bcb0cdebf1..727a6596df1a 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs @@ -26,7 +26,7 @@ pub type ParsedFiles = HashMap)>; pub struct Context<'file_manager, 'parsed_files> { pub def_interner: NodeInterner, pub crate_graph: CrateGraph, - pub(crate) def_maps: BTreeMap, + pub def_maps: BTreeMap, // In the WASM context, we take ownership of the file manager, // which is why this needs to be a Cow. In all use-cases, the file manager // is read-only however, once it has been passed to the Context. diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs index 624961ddaed4..390bc31d6bae 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs @@ -1166,6 +1166,7 @@ impl<'a> Resolver<'a> { pattern: self.resolve_pattern(let_stmt.pattern, definition), r#type: self.resolve_type(let_stmt.r#type), expression, + attributes: let_stmt.attributes, }) } @@ -1178,6 +1179,7 @@ impl<'a> Resolver<'a> { pattern: self.resolve_pattern(let_stmt.pattern, definition), r#type: self.resolve_type(let_stmt.r#type), expression, + attributes: let_stmt.attributes, }) } StatementKind::Constrain(constrain_stmt) => { diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/type_check/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/type_check/mod.rs index c6e9b7f804a3..cfac0adcad95 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/type_check/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/type_check/mod.rs @@ -466,6 +466,7 @@ mod test { pattern: Identifier(z), r#type: Type::FieldElement, expression: expr_id, + attributes: vec![], }; let stmt_id = interner.push_stmt(HirStatement::Let(let_stmt)); let expr_id = interner diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir_def/stmt.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir_def/stmt.rs index 4e5f718cf476..21fda446bfa3 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir_def/stmt.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir_def/stmt.rs @@ -1,4 +1,5 @@ use super::expr::HirIdent; +use crate::macros_api::SecondaryAttribute; use crate::node_interner::ExprId; use crate::{Ident, Type}; use fm::FileId; @@ -26,6 +27,7 @@ pub struct HirLetStatement { pub pattern: HirPattern, pub r#type: Type, pub expression: ExprId, + pub attributes: Vec, } impl HirLetStatement { diff --git a/noir/noir-repo/compiler/noirc_frontend/src/lexer/token.rs b/noir/noir-repo/compiler/noirc_frontend/src/lexer/token.rs index f8378cdd84b8..357b1ead593e 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/lexer/token.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/lexer/token.rs @@ -510,6 +510,7 @@ impl Attribute { Attribute::Secondary(SecondaryAttribute::ContractLibraryMethod) } ["event"] => Attribute::Secondary(SecondaryAttribute::Event), + ["abi", tag] => Attribute::Secondary(SecondaryAttribute::Abi(tag.to_string())), ["export"] => Attribute::Secondary(SecondaryAttribute::Export), ["deprecated", name] => { if !name.starts_with('"') && !name.ends_with('"') { @@ -604,6 +605,7 @@ pub enum SecondaryAttribute { Export, Field(String), Custom(String), + Abi(String), } impl fmt::Display for SecondaryAttribute { @@ -618,6 +620,7 @@ impl fmt::Display for SecondaryAttribute { SecondaryAttribute::Event => write!(f, "#[event]"), SecondaryAttribute::Export => write!(f, "#[export]"), SecondaryAttribute::Field(ref k) => write!(f, "#[field({k})]"), + SecondaryAttribute::Abi(ref k) => write!(f, "#[abi({k})]"), } } } @@ -640,7 +643,9 @@ impl AsRef for SecondaryAttribute { match self { SecondaryAttribute::Deprecated(Some(string)) => string, SecondaryAttribute::Deprecated(None) => "", - SecondaryAttribute::Custom(string) | SecondaryAttribute::Field(string) => string, + SecondaryAttribute::Custom(string) + | SecondaryAttribute::Field(string) + | SecondaryAttribute::Abi(string) => string, SecondaryAttribute::ContractLibraryMethod => "", SecondaryAttribute::Event | SecondaryAttribute::Export => "", } diff --git a/noir/noir-repo/compiler/noirc_frontend/src/lib.rs b/noir/noir-repo/compiler/noirc_frontend/src/lib.rs index 6ce6f4325e44..93d7960faf54 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/lib.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/lib.rs @@ -45,7 +45,6 @@ pub mod macros_api { pub use noirc_errors::Span; pub use crate::graph::CrateId; - use crate::hir::def_collector::dc_crate::{UnresolvedFunctions, UnresolvedTraitImpl}; pub use crate::hir::def_collector::errors::MacroError; pub use crate::hir_def::expr::{HirExpression, HirLiteral}; pub use crate::hir_def::stmt::HirStatement; @@ -76,15 +75,6 @@ pub mod macros_api { context: &HirContext, ) -> Result; - // TODO(#4653): generalize this function - fn process_collected_defs( - &self, - _crate_id: &CrateId, - _context: &mut HirContext, - _collected_trait_impls: &[UnresolvedTraitImpl], - _collected_functions: &mut [UnresolvedFunctions], - ) -> Result<(), (MacroError, FileId)>; - /// Function to manipulate the AST after type checking has been completed. /// The AST after type checking has been done is called the HIR. fn process_typed_ast( diff --git a/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs b/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs index 09e0cb04d263..4bb6f0bb2e94 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs @@ -146,6 +146,7 @@ pub struct NodeInterner { // Maps GlobalId -> GlobalInfo // NOTE: currently only used for checking repeat globals and restricting their scope to a module globals: Vec, + global_attributes: HashMap>, next_type_variable_id: std::cell::Cell, @@ -480,6 +481,7 @@ impl Default for NodeInterner { field_indices: HashMap::new(), next_type_variable_id: std::cell::Cell::new(0), globals: Vec::new(), + global_attributes: HashMap::new(), struct_methods: HashMap::new(), primitive_methods: HashMap::new(), type_alias_ref: Vec::new(), @@ -647,11 +649,13 @@ impl NodeInterner { local_id: LocalModuleId, let_statement: StmtId, file: FileId, + attributes: Vec, ) -> GlobalId { let id = GlobalId(self.globals.len()); let location = Location::new(ident.span(), file); let name = ident.to_string(); let definition_id = self.push_definition(name, false, DefinitionKind::Global(id), location); + self.globals.push(GlobalInfo { id, definition_id, @@ -660,6 +664,7 @@ impl NodeInterner { let_statement, location, }); + self.global_attributes.insert(id, attributes); id } @@ -673,9 +678,10 @@ impl NodeInterner { name: Ident, local_id: LocalModuleId, file: FileId, + attributes: Vec, ) -> GlobalId { let statement = self.push_stmt(HirStatement::Error); - self.push_global(name, local_id, statement, file) + self.push_global(name, local_id, statement, file, attributes) } /// Intern an empty function. @@ -838,6 +844,10 @@ impl NodeInterner { &self.struct_attributes[struct_id] } + pub fn global_attributes(&self, global_id: &GlobalId) -> &[SecondaryAttribute] { + &self.global_attributes[global_id] + } + /// Returns the interned statement corresponding to `stmt_id` pub fn statement(&self, stmt_id: &StmtId) -> HirStatement { let def = diff --git a/noir/noir-repo/compiler/noirc_frontend/src/parser/parser.rs b/noir/noir-repo/compiler/noirc_frontend/src/parser/parser.rs index a40355be8aac..9712ba6c8c00 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/parser/parser.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/parser/parser.rs @@ -158,14 +158,17 @@ fn implementation() -> impl NoirParser { /// global_declaration: 'global' ident global_type_annotation '=' literal fn global_declaration() -> impl NoirParser { - let p = ignore_then_commit( - keyword(Keyword::Global).labelled(ParsingRuleLabel::Global), - ident().map(Pattern::Identifier), - ); + let p = attributes::attributes() + .then_ignore(keyword(Keyword::Global).labelled(ParsingRuleLabel::Global)) + .then(ident().map(Pattern::Identifier)); let p = then_commit(p, optional_type_annotation()); let p = then_commit_ignore(p, just(Token::Assign)); let p = then_commit(p, expression()); - p.map(LetStatement::new_let).map(TopLevelStatement::Global) + p.validate(|(((attributes, pattern), r#type), expression), span, emit| { + let global_attributes = attributes::validate_secondary_attributes(attributes, span, emit); + LetStatement { pattern, r#type, expression, attributes: global_attributes } + }) + .map(TopLevelStatement::Global) } /// submodule: 'mod' ident '{' module '}' diff --git a/noir/noir-repo/compiler/noirc_frontend/src/parser/parser/attributes.rs b/noir/noir-repo/compiler/noirc_frontend/src/parser/parser/attributes.rs index 4b256a95c8b0..47add6f82e05 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/parser/parser/attributes.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/parser/parser/attributes.rs @@ -2,6 +2,7 @@ use chumsky::Parser; use noirc_errors::Span; use crate::{ + macros_api::SecondaryAttribute, parser::{NoirParser, ParserError, ParserErrorReason}, token::{Attribute, Attributes, Token, TokenKind}, }; @@ -44,3 +45,25 @@ pub(super) fn validate_attributes( Attributes { function: primary, secondary } } + +pub(super) fn validate_secondary_attributes( + attributes: Vec, + span: Span, + emit: &mut dyn FnMut(ParserError), +) -> Vec { + let mut struct_attributes = vec![]; + + for attribute in attributes { + match attribute { + Attribute::Function(..) => { + emit(ParserError::with_reason( + ParserErrorReason::NoFunctionAttributesAllowedOnStruct, + span, + )); + } + Attribute::Secondary(attr) => struct_attributes.push(attr), + } + } + + struct_attributes +} diff --git a/noir/noir-repo/compiler/noirc_frontend/src/parser/parser/structs.rs b/noir/noir-repo/compiler/noirc_frontend/src/parser/parser/structs.rs index 0212f56783f4..87e58f69efb2 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/parser/parser/structs.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/parser/parser/structs.rs @@ -1,17 +1,15 @@ use chumsky::prelude::*; -use noirc_errors::Span; use crate::{ - macros_api::SecondaryAttribute, parser::{ parser::{ - attributes::attributes, + attributes::{attributes, validate_secondary_attributes}, function, parse_type, primitives::{ident, keyword}, }, - NoirParser, ParserError, ParserErrorReason, TopLevelStatement, + NoirParser, TopLevelStatement, }, - token::{Attribute, Keyword, Token}, + token::{Keyword, Token}, Ident, NoirStruct, UnresolvedType, }; @@ -35,7 +33,7 @@ pub(super) fn struct_definition() -> impl NoirParser { .then(function::generics()) .then(fields) .validate(|(((raw_attributes, name), generics), fields), span, emit| { - let attributes = validate_struct_attributes(raw_attributes, span, emit); + let attributes = validate_secondary_attributes(raw_attributes, span, emit); TopLevelStatement::Struct(NoirStruct { name, attributes, generics, fields, span }) }) } @@ -48,28 +46,6 @@ fn struct_fields() -> impl NoirParser> { .allow_trailing() } -fn validate_struct_attributes( - attributes: Vec, - span: Span, - emit: &mut dyn FnMut(ParserError), -) -> Vec { - let mut struct_attributes = vec![]; - - for attribute in attributes { - match attribute { - Attribute::Function(..) => { - emit(ParserError::with_reason( - ParserErrorReason::NoFunctionAttributesAllowedOnStruct, - span, - )); - } - Attribute::Secondary(attr) => struct_attributes.push(attr), - } - } - - struct_attributes -} - #[cfg(test)] mod test { use super::*; diff --git a/noir/noir-repo/compiler/wasm/src/compile.rs b/noir/noir-repo/compiler/wasm/src/compile.rs index 9e6fca1126e6..de157a1fe20b 100644 --- a/noir/noir-repo/compiler/wasm/src/compile.rs +++ b/noir/noir-repo/compiler/wasm/src/compile.rs @@ -30,11 +30,16 @@ export type DependencyGraph = { library_dependencies: Readonly>; } +export type ContractOutputsArtifact = { + structs: Record>; + globals: Record>; +} + export type ContractArtifact = { noir_version: string; name: string; functions: Array; - events: Array; + outputs: ContractOutputsArtifact; file_map: Record; }; @@ -218,7 +223,7 @@ pub fn compile_contract( noir_version: String::from(NOIR_ARTIFACT_VERSION_STRING), name: optimized_contract.name, functions, - events: optimized_contract.events, + outputs: optimized_contract.outputs.into(), file_map: optimized_contract.file_map, }; diff --git a/noir/noir-repo/compiler/wasm/src/compile_new.rs b/noir/noir-repo/compiler/wasm/src/compile_new.rs index d6b382f669fb..c187fe7f3de5 100644 --- a/noir/noir-repo/compiler/wasm/src/compile_new.rs +++ b/noir/noir-repo/compiler/wasm/src/compile_new.rs @@ -146,7 +146,7 @@ impl CompilerContext { noir_version: String::from(NOIR_ARTIFACT_VERSION_STRING), name: optimized_contract.name, functions, - events: optimized_contract.events, + outputs: optimized_contract.outputs.into(), file_map: optimized_contract.file_map, }; diff --git a/noir/noir-repo/compiler/wasm/src/types/noir_artifact.ts b/noir/noir-repo/compiler/wasm/src/types/noir_artifact.ts index 935c99043daf..c1b4a3794e64 100644 --- a/noir/noir-repo/compiler/wasm/src/types/noir_artifact.ts +++ b/noir/noir-repo/compiler/wasm/src/types/noir_artifact.ts @@ -1,35 +1,59 @@ import { Abi, AbiType } from '@noir-lang/types'; /** - * A named type. + * A basic value. */ -export interface ABIVariable { - /** - * The name of the variable. - */ - name: string; +export interface BasicValue { /** - * The type of the variable. + * The kind of the value. */ - type: AbiType; + kind: T; + value: V; } /** - * A contract event. + * An exported value. */ -export interface EventAbi { +export type AbiValue = + | BasicValue<'boolean', boolean> + | BasicValue<'string', string> + | BasicValue<'array', AbiValue[]> + | TupleValue + | IntegerValue + | FieldValue + | StructValue; + +export type TypedStructFieldValue = { name: string; value: T }; + +export interface StructValue { + kind: 'struct'; + fields: TypedStructFieldValue[]; +} + +export interface TupleValue { + fields: AbiValue[]; +} + +export interface FieldValue extends BasicValue<'field', string> { + sign: boolean; +} + +export interface IntegerValue extends BasicValue<'integer', string> { + sign: boolean; +} + +/** + * A named type. + */ +export interface ABIVariable { /** - * The event name. + * The name of the variable. */ name: string; /** - * Fully qualified name of the event. - */ - path: string; - /** - * The fields of the event. + * The type of the variable. */ - fields: ABIVariable[]; + type: AbiType; } /** @@ -60,8 +84,11 @@ export interface ContractArtifact { noir_version: string; /** The functions of the contract. */ functions: NoirFunctionEntry[]; - /** The events of the contract */ - events: EventAbi[]; + + outputs: { + structs: Record; + globals: Record; + }; /** The map of file ID to the source code and path of the file. */ file_map: DebugFileMap; } diff --git a/noir/noir-repo/tooling/nargo/src/artifacts/contract.rs b/noir/noir-repo/tooling/nargo/src/artifacts/contract.rs index c0316a6d1a2e..868fb4404fd2 100644 --- a/noir/noir-repo/tooling/nargo/src/artifacts/contract.rs +++ b/noir/noir-repo/tooling/nargo/src/artifacts/contract.rs @@ -1,14 +1,26 @@ use acvm::acir::circuit::Program; -use noirc_abi::{Abi, ContractEvent}; -use noirc_driver::{CompiledContract, ContractFunction}; +use noirc_abi::{Abi, AbiType, AbiValue}; +use noirc_driver::{CompiledContract, CompiledContractOutputs, ContractFunction}; use serde::{Deserialize, Serialize}; use noirc_driver::DebugFile; use noirc_errors::debug_info::DebugInfo; -use std::collections::BTreeMap; +use std::collections::{BTreeMap, HashMap}; use fm::FileId; +#[derive(Serialize, Deserialize)] +pub struct ContractOutputsArtifact { + pub structs: HashMap>, + pub globals: HashMap>, +} + +impl From for ContractOutputsArtifact { + fn from(outputs: CompiledContractOutputs) -> Self { + ContractOutputsArtifact { structs: outputs.structs, globals: outputs.globals } + } +} + #[derive(Serialize, Deserialize)] pub struct ContractArtifact { /// Version of noir used to compile this contract @@ -17,8 +29,8 @@ pub struct ContractArtifact { pub name: String, /// Each of the contract's functions are compiled into a separate program stored in this `Vec`. pub functions: Vec, - /// All the events defined inside the contract scope. - pub events: Vec, + + pub outputs: ContractOutputsArtifact, /// Map of file Id to the source code so locations in debug info can be mapped to source code they point to. pub file_map: BTreeMap, } @@ -29,7 +41,7 @@ impl From for ContractArtifact { noir_version: contract.noir_version, name: contract.name, functions: contract.functions.into_iter().map(ContractFunctionArtifact::from).collect(), - events: contract.events, + outputs: contract.outputs.into(), file_map: contract.file_map, } } diff --git a/noir/noir-repo/tooling/noirc_abi/src/lib.rs b/noir/noir-repo/tooling/noirc_abi/src/lib.rs index cffb0c20cd54..8a385d581af1 100644 --- a/noir/noir-repo/tooling/noirc_abi/src/lib.rs +++ b/noir/noir-repo/tooling/noirc_abi/src/lib.rs @@ -10,9 +10,7 @@ use acvm::{ use errors::AbiError; use input_parser::InputValue; use iter_extended::{try_btree_map, try_vecmap, vecmap}; -use noirc_frontend::{ - hir::Context, Signedness, StructType, Type, TypeBinding, TypeVariableKind, Visibility, -}; +use noirc_frontend::{hir::Context, Signedness, Type, TypeBinding, TypeVariableKind, Visibility}; use serde::{Deserialize, Serialize}; use std::ops::Range; use std::{collections::BTreeMap, str}; @@ -513,31 +511,35 @@ fn decode_string_value(field_elements: &[FieldElement]) -> String { final_string.to_owned() } -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct ContractEvent { - /// Event name - name: String, - /// The fully qualified path to the event definition - path: String, - - /// Fields of the event - #[serde( - serialize_with = "serialization::serialize_struct_fields", - deserialize_with = "serialization::deserialize_struct_fields" - )] - fields: Vec<(String, AbiType)>, -} - -impl ContractEvent { - pub fn from_struct_type(context: &Context, struct_type: &StructType) -> Self { - let fields = vecmap(struct_type.get_fields(&[]), |(name, typ)| { - (name, AbiType::from_type(context, &typ)) - }); - // For the ABI, we always want to resolve the struct paths from the root crate - let path = context.fully_qualified_struct_path(context.root_crate_id(), struct_type.id); - - Self { name: struct_type.name.0.contents.clone(), path, fields } - } +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[serde(tag = "kind", rename_all = "lowercase")] +pub enum AbiValue { + Field { + value: FieldElement, + }, + Integer { + sign: bool, + value: String, + }, + Boolean { + value: bool, + }, + String { + value: String, + }, + Array { + value: Vec, + }, + Struct { + #[serde( + serialize_with = "serialization::serialize_struct_field_values", + deserialize_with = "serialization::deserialize_struct_field_values" + )] + fields: Vec<(String, AbiValue)>, + }, + Tuple { + fields: Vec, + }, } fn range_to_vec(ranges: &[Range]) -> Vec { diff --git a/noir/noir-repo/tooling/noirc_abi/src/serialization.rs b/noir/noir-repo/tooling/noirc_abi/src/serialization.rs index ed838803fab3..4f91d9b7dfd6 100644 --- a/noir/noir-repo/tooling/noirc_abi/src/serialization.rs +++ b/noir/noir-repo/tooling/noirc_abi/src/serialization.rs @@ -1,8 +1,7 @@ +use crate::{AbiType, AbiValue}; use iter_extended::vecmap; use serde::{Deserialize, Deserializer, Serialize, Serializer}; -use crate::AbiType; - // This module exposes a custom serializer and deserializer for `BTreeMap` // (representing the fields of a struct) to serialize it as a `Vec`. // @@ -41,6 +40,37 @@ where Ok(vecmap(fields_vector, |StructField { name, typ }| (name, typ))) } +#[derive(Serialize, Deserialize)] +struct StructFieldValue { + name: String, + value: AbiValue, +} + +pub(crate) fn serialize_struct_field_values( + fields: &[(String, AbiValue)], + s: S, +) -> Result +where + S: Serializer, +{ + let fields_vector = vecmap(fields, |(name, value)| StructFieldValue { + name: name.to_owned(), + value: value.to_owned(), + }); + + fields_vector.serialize(s) +} + +pub(crate) fn deserialize_struct_field_values<'de, D>( + deserializer: D, +) -> Result, D::Error> +where + D: Deserializer<'de>, +{ + let fields_vector = Vec::::deserialize(deserializer)?; + Ok(vecmap(fields_vector, |StructFieldValue { name, value }| (name, value))) +} + #[cfg(test)] mod tests { use crate::{AbiParameter, AbiType, AbiVisibility, Sign}; diff --git a/yarn-project/aztec-node/src/aztec-node/server.ts b/yarn-project/aztec-node/src/aztec-node/server.ts index e00c0b93f145..cb53de23b15e 100644 --- a/yarn-project/aztec-node/src/aztec-node/server.ts +++ b/yarn-project/aztec-node/src/aztec-node/server.ts @@ -676,7 +676,8 @@ export class AztecNodeService implements AztecNode { throw reverted[0].revertReason; } this.log.info(`Simulated tx ${tx.getTxHash()} succeeds`); - return returns; + // We only have a single tx, so we can just return the first return value. + return returns[0]; } public setConfig(config: Partial): Promise { diff --git a/yarn-project/aztec.js/src/contract/checker.ts b/yarn-project/aztec.js/src/contract/checker.ts index 438bef2048c3..e6c449cfb750 100644 --- a/yarn-project/aztec.js/src/contract/checker.ts +++ b/yarn-project/aztec.js/src/contract/checker.ts @@ -1,4 +1,4 @@ -import { type ABIType, type BasicType, type ContractArtifact, type StructType } from '@aztec/foundation/abi'; +import { type AbiType, type BasicType, type ContractArtifact, type StructType } from '@aztec/foundation/abi'; /** * Represents a type derived from input type T with the 'kind' property removed. @@ -51,10 +51,10 @@ export function abiChecker(artifact: ContractArtifact) { * Throws an error if the type has an unrecognized kind or incorrectly formed attributes. * Additionally, checks nested types for array and struct kinds. * - * @param type - The ABIType object representing the type of the ABI function parameter. + * @param type - The AbiType object representing the type of the ABI function parameter. * @returns A boolean value indicating whether the type is valid or not. */ -function abiParameterTypeChecker(type: ABIType): boolean { +function abiParameterTypeChecker(type: AbiType): boolean { switch (type.kind) { case 'field': case 'boolean': @@ -73,7 +73,7 @@ function abiParameterTypeChecker(type: ABIType): boolean { } /** - * Check if the structure of the ABIType 'struct' is valid by ensuring field names are strings + * Check if the structure of the AbiType 'struct' is valid by ensuring field names are strings * and their type attribute passes the abiParameterTypeChecker. Returns true on successful validation, * otherwise throws an error providing insight into the incorrect formation in the struct. * diff --git a/yarn-project/aztec.js/src/contract/contract.test.ts b/yarn-project/aztec.js/src/contract/contract.test.ts index ea338b82c628..af425afcc90a 100644 --- a/yarn-project/aztec.js/src/contract/contract.test.ts +++ b/yarn-project/aztec.js/src/contract/contract.test.ts @@ -100,7 +100,10 @@ describe('Contract Class', () => { debugSymbols: '', }, ], - events: [], + outputs: { + structs: {}, + globals: {}, + }, fileMap: {}, }; diff --git a/yarn-project/aztec.js/src/contract/contract_base.ts b/yarn-project/aztec.js/src/contract/contract_base.ts index a49a7205c13e..5758973849e8 100644 --- a/yarn-project/aztec.js/src/contract/contract_base.ts +++ b/yarn-project/aztec.js/src/contract/contract_base.ts @@ -1,4 +1,4 @@ -import { computePartialAddress } from '@aztec/circuits.js'; +import { type Fr, computePartialAddress } from '@aztec/circuits.js'; import { type ContractArtifact, type FunctionArtifact, FunctionSelector } from '@aztec/foundation/abi'; import { type ContractInstanceWithAddress } from '@aztec/types/contracts'; @@ -16,6 +16,48 @@ export type ContractMethod = ((...args: any[]) => ContractFunctionInteraction) & readonly selector: FunctionSelector; }; +/** + * Type representing a field layout in the storage of a contract. + */ +type FieldLayout = { + /** + * Slot in which the field is stored. + */ + slot: Fr; + /** + * Type being stored at the slot + */ + typ: string; +}; + +/** + * Type representing a note in use in the contract. + */ +type ContractNote = { + /** + * Note identifier + */ + id: Fr; + /** + * Type of the note + */ + typ: string; +}; + +/** + * Type representing the storage layout of a contract. + */ +export type ContractStorageLayout = { + [K in T]: FieldLayout; +}; + +/** + * Type representing the notes used in a contract. + */ +export type ContractNotes = { + [K in T]: ContractNote; +}; + /** * Abstract implementation of a contract extended by the Contract class and generated contract types. */ diff --git a/yarn-project/aztec.js/src/contract/contract_function_interaction.ts b/yarn-project/aztec.js/src/contract/contract_function_interaction.ts index f04d81d25794..76eb264e29ca 100644 --- a/yarn-project/aztec.js/src/contract/contract_function_interaction.ts +++ b/yarn-project/aztec.js/src/contract/contract_function_interaction.ts @@ -1,6 +1,6 @@ import { type FunctionCall, PackedArguments, TxExecutionRequest } from '@aztec/circuit-types'; import { type AztecAddress, FunctionData, TxContext } from '@aztec/circuits.js'; -import { type FunctionAbi, FunctionType, encodeArguments } from '@aztec/foundation/abi'; +import { type FunctionAbi, FunctionType, decodeReturnValues, encodeArguments } from '@aztec/foundation/abi'; import { type Wallet } from '../account/wallet.js'; import { BaseContractInteraction, SendMethodOptions } from './base_contract_interaction.js'; @@ -70,7 +70,6 @@ export class ContractFunctionInteraction extends BaseContractInteraction { * 2. It supports `unconstrained`, `private` and `public` functions * 3. For `private` execution it: * 3.a SKIPS the entrypoint and starts directly at the function - * 3.b SKIPS public execution entirely * 4. For `public` execution it: * 4.a Removes the `txRequest` value after ended simulation * 4.b Ignores the `from` in the options @@ -83,10 +82,6 @@ export class ContractFunctionInteraction extends BaseContractInteraction { return this.wallet.viewTx(this.functionDao.name, this.args, this.contractAddress, options.from); } - // TODO: If not unconstrained, we return a size 4 array of fields. - // TODO: It should instead return the correctly decoded value - // TODO: The return type here needs to be fixed! @LHerskind - if (this.functionDao.functionType == FunctionType.SECRET) { const nodeInfo = await this.wallet.getNodeInfo(); const packedArgs = PackedArguments.fromArgs(encodeArguments(this.functionDao, this.args)); @@ -99,13 +94,15 @@ export class ContractFunctionInteraction extends BaseContractInteraction { packedArguments: [packedArgs], authWitnesses: [], }); - const simulatedTx = await this.pxe.simulateTx(txRequest, false, options.from ?? this.wallet.getAddress()); - return simulatedTx.privateReturnValues?.[0]; + const simulatedTx = await this.pxe.simulateTx(txRequest, true, options.from ?? this.wallet.getAddress()); + const flattened = simulatedTx.privateReturnValues; + return flattened ? decodeReturnValues(this.functionDao, flattened) : []; } else { const txRequest = await this.create(); const simulatedTx = await this.pxe.simulateTx(txRequest, true); this.txRequest = undefined; - return simulatedTx.publicReturnValues?.[0]; + const flattened = simulatedTx.publicReturnValues; + return flattened ? decodeReturnValues(this.functionDao, flattened) : []; } } } diff --git a/yarn-project/aztec.js/src/index.ts b/yarn-project/aztec.js/src/index.ts index 646c5488bf9b..e7cc7c0ba205 100644 --- a/yarn-project/aztec.js/src/index.ts +++ b/yarn-project/aztec.js/src/index.ts @@ -25,6 +25,8 @@ export { Contract, ContractBase, ContractMethod, + ContractStorageLayout, + ContractNotes, SentTx, BatchCall, DeployMethod, diff --git a/yarn-project/circuit-types/src/interfaces/aztec-node.ts b/yarn-project/circuit-types/src/interfaces/aztec-node.ts index 918630b042eb..03e9ddbff8ab 100644 --- a/yarn-project/circuit-types/src/interfaces/aztec-node.ts +++ b/yarn-project/circuit-types/src/interfaces/aztec-node.ts @@ -7,7 +7,6 @@ import { type PUBLIC_DATA_TREE_HEIGHT, } from '@aztec/circuits.js'; import { type L1ContractAddresses } from '@aztec/ethereum'; -import { type ProcessReturnValues } from '@aztec/foundation/abi'; import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { type Fr } from '@aztec/foundation/fields'; import { type ContractClassPublic, type ContractInstanceWithAddress } from '@aztec/types/contracts'; @@ -22,7 +21,7 @@ import { } from '../logs/index.js'; import { type MerkleTreeId } from '../merkle_tree_id.js'; import { type SiblingPath } from '../sibling_path/index.js'; -import { type Tx, type TxHash, type TxReceipt } from '../tx/index.js'; +import { type ProcessReturnValues, type Tx, type TxHash, type TxReceipt } from '../tx/index.js'; import { type TxEffect } from '../tx_effect.js'; import { type SequencerConfig } from './configs.js'; import { type L2BlockNumber } from './l2_block_number.js'; @@ -283,7 +282,7 @@ export interface AztecNode { * This currently just checks that the transaction execution succeeds. * @param tx - The transaction to simulate. **/ - simulatePublicCalls(tx: Tx): Promise; + simulatePublicCalls(tx: Tx): Promise; /** * Updates the configuration of this node. diff --git a/yarn-project/circuit-types/src/mocks.ts b/yarn-project/circuit-types/src/mocks.ts index 760128c49efa..4ee6dbd95243 100644 --- a/yarn-project/circuit-types/src/mocks.ts +++ b/yarn-project/circuit-types/src/mocks.ts @@ -7,7 +7,7 @@ import { computeContractClassId, getContractClassFromArtifact, } from '@aztec/circuits.js'; -import { type ContractArtifact, type DecodedReturn } from '@aztec/foundation/abi'; +import { type ContractArtifact } from '@aztec/foundation/abi'; import { makeTuple } from '@aztec/foundation/array'; import { times } from '@aztec/foundation/collection'; import { randomBytes } from '@aztec/foundation/crypto'; @@ -56,14 +56,17 @@ export const mockTx = (seed = 1, logs = true) => { export const mockSimulatedTx = (seed = 1, logs = true) => { const tx = mockTx(seed, logs); - const dec: DecodedReturn = [1n, 2n, 3n, 4n]; + const dec = [new Fr(1), new Fr(2), new Fr(3), new Fr(4)]; return new SimulatedTx(tx, dec, dec); }; export const randomContractArtifact = (): ContractArtifact => ({ name: randomBytes(4).toString('hex'), functions: [], - events: [], + outputs: { + structs: {}, + globals: {}, + }, fileMap: {}, }); diff --git a/yarn-project/circuit-types/src/tx/simulated_tx.test.ts b/yarn-project/circuit-types/src/tx/simulated_tx.test.ts index 29cc00194779..167c91259fa8 100644 --- a/yarn-project/circuit-types/src/tx/simulated_tx.test.ts +++ b/yarn-project/circuit-types/src/tx/simulated_tx.test.ts @@ -6,4 +6,11 @@ describe('simulated_tx', () => { const simulatedTx = mockSimulatedTx(); expect(SimulatedTx.fromJSON(simulatedTx.toJSON())).toEqual(simulatedTx); }); + + it('convert undefined effects to and from json', () => { + const simulatedTx = mockSimulatedTx(); + simulatedTx.privateReturnValues = undefined; + simulatedTx.publicReturnValues = undefined; + expect(SimulatedTx.fromJSON(simulatedTx.toJSON())).toEqual(simulatedTx); + }); }); diff --git a/yarn-project/circuit-types/src/tx/simulated_tx.ts b/yarn-project/circuit-types/src/tx/simulated_tx.ts index febf33cdfb45..3f4abc8f5e3f 100644 --- a/yarn-project/circuit-types/src/tx/simulated_tx.ts +++ b/yarn-project/circuit-types/src/tx/simulated_tx.ts @@ -1,8 +1,9 @@ -import { AztecAddress } from '@aztec/circuits.js'; -import { type ProcessReturnValues } from '@aztec/foundation/abi'; +import { Fr } from '@aztec/circuits.js'; import { Tx } from './tx.js'; +export type ProcessReturnValues = Fr[] | undefined; + export class SimulatedTx { constructor( public tx: Tx, @@ -15,17 +16,12 @@ export class SimulatedTx { * @returns A plain object with SimulatedTx properties. */ public toJSON() { - const returnToJson = (data: ProcessReturnValues): string => { - const replacer = (key: string, value: any): any => { - if (typeof value === 'bigint') { - return value.toString() + 'n'; // Indicate bigint with "n" - } else if (value instanceof AztecAddress) { - return value.toString(); - } else { - return value; - } - }; - return JSON.stringify(data, replacer); + const returnToJson = (data: ProcessReturnValues | undefined): string => { + if (data == undefined) { + return JSON.stringify(data); + } + const res = JSON.stringify(data.map(fr => fr.toString())); + return res; }; return { @@ -41,22 +37,11 @@ export class SimulatedTx { * @returns A Tx class object. */ public static fromJSON(obj: any) { - const returnFromJson = (json: string): ProcessReturnValues => { + const returnFromJson = (json: string): ProcessReturnValues | undefined => { if (json == undefined) { return json; } - const reviver = (key: string, value: any): any => { - if (typeof value === 'string') { - if (value.match(/\d+n$/)) { - // Detect bigint serialization - return BigInt(value.slice(0, -1)); - } else if (value.match(/^0x[a-fA-F0-9]{64}$/)) { - return AztecAddress.fromString(value); - } - } - return value; - }; - return JSON.parse(json, reviver); + return JSON.parse(json).map(Fr.fromString); }; const tx = Tx.fromJSON(obj.tx); diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index e2144817194e..21cb70243916 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -76,7 +76,7 @@ export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99n; export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631n; -export const DEPLOYER_CONTRACT_ADDRESS = 0x1ad693effc2a4a40fdf5911ff29e19d2b6cd3cf73e6c3685519a6fb783144dcbn; +export const DEPLOYER_CONTRACT_ADDRESS = 0x2e89c51c28aefc6b630af43a5908634e4cf552115280eb9fd783bbd224c0bb57n; export const L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; export const MAX_NOTE_FIELDS_LENGTH = 20; export const GET_NOTE_ORACLE_RETURN_LENGTH = 23; diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index d279fd474280..9d6784963350 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x12ee05255924ea5eed79c7fe41f57a5309e40d6c9861efac8a8986dac6145a63"`, + `"0x133531888d45cd480e620bf3489d5a3b5770975fc53b3525542f9712a7d39603"`, ); }); }); diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.ts b/yarn-project/circuits.js/src/contract/artifact_hash.ts index e590084a51ed..ba6a259b48f1 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.ts @@ -60,7 +60,7 @@ export function computeArtifactHashPreimage(artifact: ContractArtifact) { export function computeArtifactMetadataHash(artifact: ContractArtifact) { // TODO(@spalladino): Should we use the sorted event selectors instead? They'd need to be unique for that. - const metadata = { name: artifact.name, events: artifact.events }; + const metadata = { name: artifact.name, outputs: artifact.outputs }; return sha256Fr(Buffer.from(JSON.stringify(metadata), 'utf-8')); } diff --git a/yarn-project/cli/src/encoding.ts b/yarn-project/cli/src/encoding.ts index b06c9301b6e2..e10f843814db 100644 --- a/yarn-project/cli/src/encoding.ts +++ b/yarn-project/cli/src/encoding.ts @@ -1,4 +1,4 @@ -import { type ABIParameter, type ABIType, type StructType } from '@aztec/foundation/abi'; +import { type ABIParameter, type AbiType, type StructType } from '@aztec/foundation/abi'; import { Fr } from '@aztec/foundation/fields'; /** @@ -29,7 +29,7 @@ export function parseStructString(str: string, abiType: StructType) { * @param abiType - The type as described by the contract's ABI. * @returns The encoded argument. */ -function encodeArg(arg: string, abiType: ABIType, name: string): any { +function encodeArg(arg: string, abiType: AbiType, name: string): any { const { kind } = abiType; if (kind === 'field' || kind === 'integer') { let res: bigint; diff --git a/yarn-project/cli/src/test/mocks.ts b/yarn-project/cli/src/test/mocks.ts index 1ca54bbee68c..1c56cf0dba25 100644 --- a/yarn-project/cli/src/test/mocks.ts +++ b/yarn-project/cli/src/test/mocks.ts @@ -65,6 +65,9 @@ export const mockContractArtifact: ContractArtifact = { debugSymbols: '', }, ], - events: [], + outputs: { + structs: {}, + globals: {}, + }, fileMap: {}, }; diff --git a/yarn-project/end-to-end/src/e2e_2_pxes.test.ts b/yarn-project/end-to-end/src/e2e_2_pxes.test.ts index 2091acb648a0..be7d4c330f27 100644 --- a/yarn-project/end-to-end/src/e2e_2_pxes.test.ts +++ b/yarn-project/end-to-end/src/e2e_2_pxes.test.ts @@ -106,11 +106,15 @@ describe('e2e_2_pxes', () => { const receipt = await contract.methods.mint_private(balance, secretHash).send().wait(); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(balance), secretHash]); - const extendedNote = new ExtendedNote(note, recipient, contract.address, storageSlot, noteTypeId, receipt.txHash); + const extendedNote = new ExtendedNote( + note, + recipient, + contract.address, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, + receipt.txHash, + ); await pxe.addNote(extendedNote); await contract.methods.redeem_shield(recipient, balance, secret).send().wait(); diff --git a/yarn-project/end-to-end/src/e2e_blacklist_token_contract.test.ts b/yarn-project/end-to-end/src/e2e_blacklist_token_contract.test.ts index 622fb312b721..1877d7a3c407 100644 --- a/yarn-project/end-to-end/src/e2e_blacklist_token_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_blacklist_token_contract.test.ts @@ -87,15 +87,13 @@ describe('e2e_blacklist_token_contract', () => { }; const addPendingShieldNoteToPXE = async (accountIndex: number, amount: bigint, secretHash: Fr, txHash: TxHash) => { - const storageSlot = new Fr(4); // The storage slot of `pending_shields` is 4. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote const note = new Note([new Fr(amount), secretHash]); const extendedNote = new ExtendedNote( note, accounts[accountIndex].address, asset.address, - storageSlot, - noteTypeId, + TokenBlacklistContract.storage.pending_shields.slot, + TokenBlacklistContract.notes.TransparentNote.id, txHash, ); await wallets[accountIndex].addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts b/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts index f6f5568ec1c5..ae795631c10b 100644 --- a/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts +++ b/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts @@ -224,21 +224,23 @@ describe('e2e_cheat_codes', () => { // docs:start:pxe_add_note const note = new Note([new Fr(mintAmount), secretHash]); - const pendingShieldStorageSlot = new Fr(5n); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote const extendedNote = new ExtendedNote( note, admin.address, token.address, - pendingShieldStorageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); // docs:end:pxe_add_note // check if note was added to pending shield: - const notes = await cc.aztec.loadPrivate(admin.address, token.address, pendingShieldStorageSlot); + const notes = await cc.aztec.loadPrivate( + admin.address, + token.address, + TokenContract.storage.pending_shields.slot, + ); const values = notes.map(note => note.items[0]); const balance = values.reduce((sum, current) => sum + current.toBigInt(), 0n); expect(balance).toEqual(mintAmount); diff --git a/yarn-project/end-to-end/src/e2e_crowdfunding_and_claim.test.ts b/yarn-project/end-to-end/src/e2e_crowdfunding_and_claim.test.ts index 1556d2b40ce8..fd47b6b9515b 100644 --- a/yarn-project/end-to-end/src/e2e_crowdfunding_and_claim.test.ts +++ b/yarn-project/end-to-end/src/e2e_crowdfunding_and_claim.test.ts @@ -64,10 +64,15 @@ describe('e2e_crowdfunding_and_claim', () => { txHash: TxHash, address: AztecAddress, ) => { - const storageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote const note = new Note([new Fr(amount), secretHash]); - const extendedNote = new ExtendedNote(note, wallet.getAddress(), address, storageSlot, noteTypeId, txHash); + const extendedNote = new ExtendedNote( + note, + wallet.getAddress(), + address, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, + txHash, + ); await wallet.addNote(extendedNote); }; diff --git a/yarn-project/end-to-end/src/e2e_escrow_contract.test.ts b/yarn-project/end-to-end/src/e2e_escrow_contract.test.ts index 90a6e59a747a..0fa784969d5d 100644 --- a/yarn-project/end-to-end/src/e2e_escrow_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_escrow_contract.test.ts @@ -21,9 +21,6 @@ import { TokenContract } from '@aztec/noir-contracts.js/Token'; import { setup } from './fixtures/utils.js'; describe('e2e_escrow_contract', () => { - const pendingShieldsStorageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - let pxe: PXE; let wallet: AccountWallet; let recipientWallet: AccountWallet; @@ -76,8 +73,8 @@ describe('e2e_escrow_contract', () => { note, owner, token.address, - pendingShieldsStorageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); @@ -127,8 +124,8 @@ describe('e2e_escrow_contract', () => { note, owner, token.address, - pendingShieldsStorageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_fees.test.ts b/yarn-project/end-to-end/src/e2e_fees.test.ts index 3b11f865776a..0a5ba7c31477 100644 --- a/yarn-project/end-to-end/src/e2e_fees.test.ts +++ b/yarn-project/end-to-end/src/e2e_fees.test.ts @@ -671,16 +671,13 @@ describe('e2e_fees', () => { }; const addPendingShieldNoteToPXE = async (accountIndex: number, amount: bigint, secretHash: Fr, txHash: TxHash) => { - const storageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(amount), secretHash]); const extendedNote = new ExtendedNote( note, e2eContext.accounts[accountIndex].address, bananaCoin.address, - storageSlot, - noteTypeId, + BananaCoin.storage.pending_shields.slot, + BananaCoin.notes.TransparentNote.id, txHash, ); await e2eContext.wallets[accountIndex].addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_lending_contract.test.ts b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts index 8a5ce3cd3fd9..ae1b3956ee66 100644 --- a/yarn-project/end-to-end/src/e2e_lending_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts @@ -103,17 +103,14 @@ describe('e2e_lending_contract', () => { const b = asset.methods.mint_private(mintAmount, secretHash).send(); await Promise.all([a, b].map(tx => tx.wait())); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(mintAmount), secretHash]); const txHash = await b.getTxHash(); const extendedNote = new ExtendedNote( note, accounts[0].address, asset.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, txHash, ); await wallet.addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts b/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts index 921cb5c321b5..10fa2c76cda3 100644 --- a/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts +++ b/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts @@ -63,16 +63,13 @@ describe('e2e_multiple_accounts_1_enc_key', () => { const receipt = await token.methods.mint_private(initialBalance, secretHash).send().wait(); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(initialBalance), secretHash]); const extendedNote = new ExtendedNote( note, accounts[0].address, token.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_non_contract_account.test.ts b/yarn-project/end-to-end/src/e2e_non_contract_account.test.ts index cc9fb6f70b7c..65a56eb1d1bf 100644 --- a/yarn-project/end-to-end/src/e2e_non_contract_account.test.ts +++ b/yarn-project/end-to-end/src/e2e_non_contract_account.test.ts @@ -80,15 +80,13 @@ describe('e2e_non_contract_account', () => { // Add the note const note = new Note([new Fr(value)]); - const storageSlot = new Fr(1); - const noteTypeId = new Fr(7010510110810078111116101n); // FieldNote const extendedNote = new ExtendedNote( note, wallet.getCompleteAddress().address, contract.address, - storageSlot, - noteTypeId, + TestContract.storage.example_constant.slot, + TestContract.notes.FieldNote.id, txHash, ); await wallet.addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_note_getter.test.ts b/yarn-project/end-to-end/src/e2e_note_getter.test.ts index 48320d81ac98..27e6be2c03af 100644 --- a/yarn-project/end-to-end/src/e2e_note_getter.test.ts +++ b/yarn-project/end-to-end/src/e2e_note_getter.test.ts @@ -159,7 +159,7 @@ describe('e2e_note_getter', () => { const VALUE = 5; // To prevent tests from interacting with one another, we'll have each use a different storage slot. - let storageSlot: number = 2; + let storageSlot = TestContract.storage.example_set.slot.toNumber(); beforeEach(() => { storageSlot += 1; diff --git a/yarn-project/end-to-end/src/e2e_persistence.test.ts b/yarn-project/end-to-end/src/e2e_persistence.test.ts index a4a6d2161811..cc44b29499f6 100644 --- a/yarn-project/end-to-end/src/e2e_persistence.test.ts +++ b/yarn-project/end-to-end/src/e2e_persistence.test.ts @@ -330,12 +330,14 @@ async function addPendingShieldNoteToPXE( secretHash: Fr, txHash: TxHash, ) { - // The storage slot of `pending_shields` is 5. - // TODO AlexG, this feels brittle - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(amount), secretHash]); - const extendedNote = new ExtendedNote(note, wallet.getAddress(), asset, storageSlot, noteTypeId, txHash); + const extendedNote = new ExtendedNote( + note, + wallet.getAddress(), + asset, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, + txHash, + ); await wallet.addNote(extendedNote); } diff --git a/yarn-project/end-to-end/src/e2e_sandbox_example.test.ts b/yarn-project/end-to-end/src/e2e_sandbox_example.test.ts index 389a8f2b58e5..28416e0d2485 100644 --- a/yarn-project/end-to-end/src/e2e_sandbox_example.test.ts +++ b/yarn-project/end-to-end/src/e2e_sandbox_example.test.ts @@ -76,12 +76,16 @@ describe('e2e_sandbox_example', () => { const receipt = await tokenContractAlice.methods.mint_private(initialSupply, aliceSecretHash).send().wait(); // Add the newly created "pending shield" note to PXE - const pendingShieldsStorageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(initialSupply), aliceSecretHash]); await pxe.addNote( - new ExtendedNote(note, alice, contract.address, pendingShieldsStorageSlot, noteTypeId, receipt.txHash), + new ExtendedNote( + note, + alice, + contract.address, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, + receipt.txHash, + ), ); // Make the tokens spendable by redeeming them using the secret (converts the "pending shield note" created above @@ -153,8 +157,8 @@ describe('e2e_sandbox_example', () => { bobPendingShield, bob, contract.address, - pendingShieldsStorageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, mintPrivateReceipt.txHash, ), ); diff --git a/yarn-project/end-to-end/src/e2e_state_vars.test.ts b/yarn-project/end-to-end/src/e2e_state_vars.test.ts index 56783ceee2ee..1a766277f532 100644 --- a/yarn-project/end-to-end/src/e2e_state_vars.test.ts +++ b/yarn-project/end-to-end/src/e2e_state_vars.test.ts @@ -38,6 +38,7 @@ describe('e2e_state_vars', () => { // checking the return values with: // 1. A constrained private function that reads it directly // 2. A constrained private function that calls another private function that reads. + // The indirect, adds 1 to the point to ensure that we are returning the correct value. await contract.methods.initialize_shared_immutable(1).send().wait(); @@ -45,12 +46,8 @@ describe('e2e_state_vars', () => { const b = await contract.methods.get_shared_immutable_constrained_private_indirect().simulate(); const c = await contract.methods.get_shared_immutable().simulate(); - expect((a as any)[0]).toEqual((c as any)['account'].toBigInt()); - expect((a as any)[1]).toEqual((c as any)['points']); - expect((b as any)[0]).toEqual((c as any)['account'].toBigInt()); - expect((b as any)[1]).toEqual((c as any)['points']); - - expect(a).toEqual(b); + expect(a).toEqual(c); + expect(b).toEqual({ account: c.account, points: c.points + 1n }); await contract.methods.match_shared_immutable(c.account, c.points).send().wait(); }); @@ -58,17 +55,15 @@ describe('e2e_state_vars', () => { // Reads the value using an unconstrained function checking the return values with: // 1. A constrained public function that reads it directly // 2. A constrained public function that calls another public function that reads. + // The indirect, adds 1 to the point to ensure that we are returning the correct value. const a = await contract.methods.get_shared_immutable_constrained_public().simulate(); const b = await contract.methods.get_shared_immutable_constrained_public_indirect().simulate(); const c = await contract.methods.get_shared_immutable().simulate(); - expect((a as any)[0]).toEqual((c as any)['account'].toBigInt()); - expect((a as any)[1]).toEqual((c as any)['points']); - expect((b as any)[0]).toEqual((c as any)['account'].toBigInt()); - expect((b as any)[1]).toEqual((c as any)['points']); + expect(a).toEqual(c); + expect(b).toEqual({ account: c.account, points: c.points + 1n }); - expect(a).toEqual(b); await contract.methods.match_shared_immutable(c.account, c.points).send().wait(); }); diff --git a/yarn-project/end-to-end/src/e2e_token_contract.test.ts b/yarn-project/end-to-end/src/e2e_token_contract.test.ts index 2c985d5e1f58..5fde4adfe1b3 100644 --- a/yarn-project/end-to-end/src/e2e_token_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_token_contract.test.ts @@ -38,16 +38,13 @@ describe('e2e_token_contract', () => { let tokenSim: TokenSimulator; const addPendingShieldNoteToPXE = async (accountIndex: number, amount: bigint, secretHash: Fr, txHash: TxHash) => { - const storageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(amount), secretHash]); const extendedNote = new ExtendedNote( note, accounts[accountIndex].address, asset.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, txHash, ); await wallets[accountIndex].addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/guides/dapp_testing.test.ts b/yarn-project/end-to-end/src/guides/dapp_testing.test.ts index 4e3ee9f7a7ca..8cde4b58e962 100644 --- a/yarn-project/end-to-end/src/guides/dapp_testing.test.ts +++ b/yarn-project/end-to-end/src/guides/dapp_testing.test.ts @@ -50,16 +50,13 @@ describe('guides/dapp/testing', () => { const secretHash = computeMessageSecretHash(secret); const receipt = await token.methods.mint_private(mintAmount, secretHash).send().wait(); - const storageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(mintAmount), secretHash]); const extendedNote = new ExtendedNote( note, recipientAddress, token.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); @@ -94,16 +91,13 @@ describe('guides/dapp/testing', () => { const secretHash = computeMessageSecretHash(secret); const receipt = await token.methods.mint_private(mintAmount, secretHash).send().wait(); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(mintAmount), secretHash]); const extendedNote = new ExtendedNote( note, recipientAddress, token.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); @@ -159,16 +153,13 @@ describe('guides/dapp/testing', () => { const secretHash = computeMessageSecretHash(secret); const receipt = await token.methods.mint_private(100n, secretHash).send().wait(); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(mintAmount), secretHash]); const extendedNote = new ExtendedNote( note, ownerAddress, token.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); @@ -177,8 +168,8 @@ describe('guides/dapp/testing', () => { // docs:start:calc-slot cheats = CheatCodes.create(ETHEREUM_HOST, pxe); - // The balances mapping is defined on storage slot 3 and is indexed by user address - ownerSlot = cheats.aztec.computeSlotInMap(3n, ownerAddress); + // The balances mapping is indexed by user address + ownerSlot = cheats.aztec.computeSlotInMap(TokenContract.storage.balances.slot, ownerAddress); // docs:end:calc-slot }, 90_000); diff --git a/yarn-project/end-to-end/src/guides/writing_an_account_contract.test.ts b/yarn-project/end-to-end/src/guides/writing_an_account_contract.test.ts index 185455ce4cd8..7f7237b6da62 100644 --- a/yarn-project/end-to-end/src/guides/writing_an_account_contract.test.ts +++ b/yarn-project/end-to-end/src/guides/writing_an_account_contract.test.ts @@ -73,11 +73,15 @@ describe('guides/writing_an_account_contract', () => { const mintAmount = 50n; const receipt = await token.methods.mint_private(mintAmount, secretHash).send().wait(); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(mintAmount), secretHash]); - const extendedNote = new ExtendedNote(note, address, token.address, storageSlot, noteTypeId, receipt.txHash); + const extendedNote = new ExtendedNote( + note, + address, + token.address, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, + receipt.txHash, + ); await pxe.addNote(extendedNote); await token.methods.redeem_shield({ address }, mintAmount, secret).send().wait(); diff --git a/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts b/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts index 78bfdb7ee735..c7ba3f88a829 100644 --- a/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts +++ b/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts @@ -423,15 +423,13 @@ export class CrossChainTestHarness { async addPendingShieldNoteToPXE(shieldAmount: bigint, secretHash: Fr, txHash: TxHash) { this.logger('Adding note to PXE'); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote const note = new Note([new Fr(shieldAmount), secretHash]); const extendedNote = new ExtendedNote( note, this.ownerAddress, this.l2Token.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, txHash, ); await this.pxeService.addNote(extendedNote); diff --git a/yarn-project/foundation/src/abi/abi.ts b/yarn-project/foundation/src/abi/abi.ts index e74196ab93ff..7c0583065ee6 100644 --- a/yarn-project/foundation/src/abi/abi.ts +++ b/yarn-project/foundation/src/abi/abi.ts @@ -2,6 +2,48 @@ import { inflate } from 'pako'; import { type FunctionSelector } from './function_selector.js'; +/** + * A basic value. + */ +export interface BasicValue { + /** + * The kind of the value. + */ + kind: T; + value: V; +} + +/** + * An exported value. + */ +export type AbiValue = + | BasicValue<'boolean', boolean> + | BasicValue<'string', string> + | BasicValue<'array', AbiValue[]> + | TupleValue + | IntegerValue + | FieldValue + | StructValue; + +export type TypedStructFieldValue = { name: string; value: T }; + +export interface StructValue { + kind: 'struct'; + fields: TypedStructFieldValue[]; +} + +export interface TupleValue { + fields: AbiValue[]; +} + +export interface FieldValue extends BasicValue<'field', string> { + sign: boolean; +} + +export interface IntegerValue extends BasicValue<'integer', string> { + sign: boolean; +} + /** * A named type. */ @@ -13,7 +55,7 @@ export interface ABIVariable { /** * The type of the variable. */ - type: ABIType; + type: AbiType; } /** @@ -47,7 +89,7 @@ export interface BasicType { /** * A variable type. */ -export type ABIType = BasicType<'field'> | BasicType<'boolean'> | IntegerType | ArrayType | StringType | StructType; +export type AbiType = BasicType<'field'> | BasicType<'boolean'> | IntegerType | ArrayType | StringType | StructType; /** * An integer type. @@ -74,7 +116,7 @@ export interface ArrayType extends BasicType<'array'> { /** * The type of the array elements. */ - type: ABIType; + type: AbiType; } /** @@ -101,24 +143,6 @@ export interface StructType extends BasicType<'struct'> { path: string; } -/** - * A contract event. - */ -export interface EventAbi { - /** - * The event name. - */ - name: string; - /** - * Fully qualified name of the event. - */ - path: string; - /** - * The fields of the event. - */ - fields: ABIVariable[]; -} - /** * Aztec.nr function types. */ @@ -151,7 +175,7 @@ export interface FunctionAbi { /** * The types of the return values. */ - returnTypes: ABIType[]; + returnTypes: AbiType[]; /** * Whether the function is flagged as an initializer. */ @@ -260,9 +284,12 @@ export interface ContractArtifact { */ functions: FunctionArtifact[]; /** - * The events of the contract. + * The outputs of the contract. */ - events: EventAbi[]; + outputs: { + structs: Record; + globals: Record; + }; /** * The map of file ID to the source code and path of the file. diff --git a/yarn-project/foundation/src/abi/decoder.ts b/yarn-project/foundation/src/abi/decoder.ts index 69bab60b6c57..f5017065613b 100644 --- a/yarn-project/foundation/src/abi/decoder.ts +++ b/yarn-project/foundation/src/abi/decoder.ts @@ -1,27 +1,26 @@ import { AztecAddress } from '../aztec-address/index.js'; import { type Fr } from '../fields/index.js'; -import { type ABIParameter, type ABIType, type ABIVariable, type FunctionArtifact } from './abi.js'; +import { type ABIParameter, type ABIVariable, type AbiType, type FunctionAbi } from './abi.js'; import { isAztecAddressStruct } from './utils.js'; /** * The type of our decoded ABI. */ export type DecodedReturn = bigint | boolean | AztecAddress | DecodedReturn[] | { [key: string]: DecodedReturn }; -export type ProcessReturnValues = (DecodedReturn | undefined)[] | undefined; /** * Decodes return values from a function call. * Missing support for integer and string. */ class ReturnValuesDecoder { - constructor(private artifact: FunctionArtifact, private flattened: Fr[]) {} + constructor(private artifact: FunctionAbi, private flattened: Fr[]) {} /** * Decodes a single return value from field to the given type. * @param abiType - The type of the return value. * @returns The decoded return value. */ - private decodeReturn(abiType: ABIType): DecodedReturn { + private decodeReturn(abiType: AbiType): DecodedReturn { switch (abiType.kind) { case 'field': return this.getNextField().toBigInt(); @@ -58,7 +57,7 @@ class ReturnValuesDecoder { return array; } default: - throw new Error(`Unsupported type: ${abiType}`); + throw new Error(`Unsupported type: ${abiType}`, abiType); } } @@ -97,7 +96,7 @@ class ReturnValuesDecoder { * @param returnValues - The decoded return values. * @returns */ -export function decodeReturnValues(abi: FunctionArtifact, returnValues: Fr[]) { +export function decodeReturnValues(abi: FunctionAbi, returnValues: Fr[]) { return new ReturnValuesDecoder(abi, returnValues.slice()).decode(); } @@ -115,7 +114,7 @@ export class FunctionSignatureDecoder { * @param param - The parameter type to decode. * @returns A string representing the parameter type. */ - private getParameterType(param: ABIType): string { + private getParameterType(param: AbiType): string { switch (param.kind) { case 'field': return 'Field'; diff --git a/yarn-project/foundation/src/abi/encoder.ts b/yarn-project/foundation/src/abi/encoder.ts index 7ca7260db684..119554935af6 100644 --- a/yarn-project/foundation/src/abi/encoder.ts +++ b/yarn-project/foundation/src/abi/encoder.ts @@ -1,5 +1,5 @@ import { Fr } from '../fields/index.js'; -import { type ABIType, type FunctionAbi } from './abi.js'; +import { type AbiType, type FunctionAbi } from './abi.js'; import { isAddressStruct, isFunctionSelectorStruct, isWrappedFieldStruct } from './utils.js'; /** @@ -11,7 +11,7 @@ class ArgumentEncoder { constructor(private abi: FunctionAbi, private args: any[]) {} - static typeSize(abiType: ABIType): number { + static typeSize(abiType: AbiType): number { switch (abiType.kind) { case 'field': case 'boolean': @@ -36,7 +36,7 @@ class ArgumentEncoder { * @param arg - The value to encode. * @param name - Name. */ - private encodeArgument(abiType: ABIType, arg: any, name?: string) { + private encodeArgument(abiType: AbiType, arg: any, name?: string) { if (arg === undefined || arg == null) { throw new Error(`Undefined argument ${name ?? 'unnamed'} of type ${abiType.kind}`); } diff --git a/yarn-project/foundation/src/abi/utils.ts b/yarn-project/foundation/src/abi/utils.ts index 1959d5762b81..7bc8c55ce5e8 100644 --- a/yarn-project/foundation/src/abi/utils.ts +++ b/yarn-project/foundation/src/abi/utils.ts @@ -1,11 +1,11 @@ -import { type ABIType } from './abi.js'; +import { type AbiType } from './abi.js'; /** * Returns whether the ABI type is an Aztec or Ethereum Address defined in Aztec.nr. * @param abiType - Type to check. * @returns Boolean. */ -export function isAddressStruct(abiType: ABIType) { +export function isAddressStruct(abiType: AbiType) { return isEthAddressStruct(abiType) || isAztecAddressStruct(abiType); } @@ -14,7 +14,7 @@ export function isAddressStruct(abiType: ABIType) { * @param abiType - Type to check. * @returns Boolean. */ -export function isEthAddressStruct(abiType: ABIType) { +export function isEthAddressStruct(abiType: AbiType) { return abiType.kind === 'struct' && abiType.path.endsWith('address::EthAddress'); } @@ -23,7 +23,7 @@ export function isEthAddressStruct(abiType: ABIType) { * @param abiType - Type to check. * @returns Boolean. */ -export function isAztecAddressStruct(abiType: ABIType) { +export function isAztecAddressStruct(abiType: AbiType) { return abiType.kind === 'struct' && abiType.path.endsWith('address::AztecAddress'); } @@ -32,7 +32,7 @@ export function isAztecAddressStruct(abiType: ABIType) { * @param abiType - Type to check. * @returns Boolean. */ -export function isFunctionSelectorStruct(abiType: ABIType) { +export function isFunctionSelectorStruct(abiType: AbiType) { return abiType.kind === 'struct' && abiType.path.endsWith('types::abis::function_selector::FunctionSelector'); } @@ -40,7 +40,7 @@ export function isFunctionSelectorStruct(abiType: ABIType) { * Returns whether the ABI type is a struct with a single `inner` field. * @param abiType - Type to check. */ -export function isWrappedFieldStruct(abiType: ABIType) { +export function isWrappedFieldStruct(abiType: AbiType) { return ( abiType.kind === 'struct' && abiType.fields.length === 1 && diff --git a/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts b/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts index 1a77f8916cb5..c8d238d4322e 100644 --- a/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts +++ b/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts @@ -1,7 +1,11 @@ import { type ABIParameter, + type BasicValue, type ContractArtifact, type FunctionArtifact, + type IntegerValue, + type StructValue, + type TypedStructFieldValue, getDefaultInitializer, isAztecAddressStruct, isEthAddressStruct, @@ -180,6 +184,69 @@ function generateAbiStatement(name: string, artifactImportPath: string) { return stmts.join('\n'); } +/** + * Generates a getter for the contract's storage layout. + * @param input - The contract artifact. + */ +function generateStorageLayoutGetter(input: ContractArtifact) { + const storage = input.outputs.globals.storage ? (input.outputs.globals.storage[0] as StructValue) : { fields: [] }; + const storageFields = storage.fields as TypedStructFieldValue[]; + const storageFieldsUnionType = storageFields.map(f => `'${f.name}'`).join(' | '); + const layout = storageFields + .map( + ({ + name, + value: { + fields: [slot, typ], + }, + }) => + `${name}: { + slot: new Fr(${(slot.value as IntegerValue).value}n), + typ: "${(typ.value as BasicValue<'string', string>).value}", + } + `, + ) + .join(',\n'); + return storageFields.length > 0 + ? ` + public static get storage(): ContractStorageLayout<${storageFieldsUnionType}> { + return { + ${layout} + } as ContractStorageLayout<${storageFieldsUnionType}>; + } + ` + : ''; +} + +/** + * Generates a getter for the contract notes + * @param input - The contract artifact. + */ +function generateNotesGetter(input: ContractArtifact) { + const notes = input.outputs.globals.notes ? (input.outputs.globals.notes as StructValue[]) : []; + const notesUnionType = notes.map(n => `'${(n.fields[1].value as BasicValue<'string', string>).value}'`).join(' | '); + + const noteMetadata = notes + .map( + ({ fields: [id, typ] }) => + `${(typ.value as BasicValue<'string', string>).value}: { + id: new Fr(${(id.value as IntegerValue).value}n), + } + `, + ) + .join(',\n'); + return notes.length > 0 + ? ` + public static get notes(): ContractNotes<${notesUnionType}> { + const notes = this.artifact.outputs.globals.notes ? (this.artifact.outputs.globals.notes as any) : []; + return { + ${noteMetadata} + } as ContractNotes<${notesUnionType}>; + } + ` + : ''; +} + /** * Generates the typescript code to represent a contract. * @param input - The compiled Noir artifact. @@ -193,6 +260,8 @@ export function generateTypescriptContractInterface(input: ContractArtifact, art const at = artifactImportPath && generateAt(input.name); const artifactStatement = artifactImportPath && generateAbiStatement(input.name, artifactImportPath); const artifactGetter = artifactImportPath && generateArtifactGetter(input.name); + const storageLayoutGetter = artifactImportPath && generateStorageLayoutGetter(input); + const notesGetter = artifactImportPath && generateNotesGetter(input); return ` /* Autogenerated file, do not edit! */ @@ -208,6 +277,8 @@ import { ContractFunctionInteraction, ContractInstanceWithAddress, ContractMethod, + ContractStorageLayout, + ContractNotes, DeployMethod, EthAddress, EthAddressLike, @@ -235,6 +306,10 @@ export class ${input.name}Contract extends ContractBase { ${artifactGetter} + ${storageLayoutGetter} + + ${notesGetter} + /** Type-safe wrappers for the public methods exposed by the contract. */ public methods!: { ${methods.join('\n')} diff --git a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap index a408a9bedd3d..e819c7b325a6 100644 --- a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap +++ b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap @@ -38,19 +38,19 @@ PrivateKernelInnerCircuitPublicInputs { "inHash": Buffer<0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c>, "outHash": Buffer<0x0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c3>, "txTreeHeight": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, - "txsEffectsHash": Buffer<0x001070b95a463cd3e0c1eec74d545327d35f036fa6270ff9ee4ae4fd248e4b8c>, + "txsEffectsHash": Buffer<0x001339bf9815be1e3e96eb38606437691da48cd96d212384013a2864a211997f>, }, "globalVariables": { "blockNumber": "0x0000000000000000000000000000000000000000000000000000000000000003", "chainId": "0x0000000000000000000000000000000000000000000000000000000000007a69", "coinbase": "0x0000000000000000000000000000000000000000", "feeRecipient": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": "0x000000000000000000000000000000000000000000000000000000006601bb64", + "timestamp": "0x00000000000000000000000000000000000000000000000000000000660a3e6d", "version": "0x0000000000000000000000000000000000000000000000000000000000000001", }, "lastArchive": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 3, - "root": Fr<0x12323626efdb913d8d0e878df766c402fbb5b61c87826363fa9cde7ba5e1ab8b>, + "root": Fr<0x104a6f775616ff8bc00d6d58ec2c6546b2350dc4c4b7aa8581451a82b04489dd>, }, "state": StateReference { "l1ToL2MessageTree": AppendOnlyTreeSnapshot { @@ -60,11 +60,11 @@ PrivateKernelInnerCircuitPublicInputs { "partial": PartialStateReference { "noteHashTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 384, - "root": Fr<0x1b64454c8b6f9ef03956bec11fe831358f8fe47a3593534790f822b35324ceef>, + "root": Fr<0x13b22ab0f862a52bbdf6fa6236860c7bb1b54c16848de1d09f1246b4368b21c3>, }, "nullifierTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 512, - "root": Fr<0x1798310a7303baf83b94523073876af0682377b02f648d6368d4b750297a8008>, + "root": Fr<0x04694d8c853e46047e6ddc41ceca99a948a3866e2f3aca4ae9e0d626becab330>, }, "publicDataTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 256, @@ -349,7 +349,7 @@ PrivateKernelInnerCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x1882c9614901f1f1b248a220cfca811c12c5fdd88c61804824a9319d9c308981>, + "value": Fr<0x1a186acfce6610096c463e7843d5e5bf69b0ac1f086994344de2d18ae1e50fae>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1892,7 +1892,7 @@ PrivateKernelTailCircuitPublicInputs { }, "end": PrivateAccumulatedRevertibleData { "encryptedLogPreimagesLength": Fr<0x0000000000000000000000000000000000000000000000000000000000000138>, - "encryptedLogsHash": Fr<0x0082cb025a081337054f138f2d4708d3ae2a35c1c024041344b5f55c6ed3ee83>, + "encryptedLogsHash": Fr<0x00c3c8ebdfbeec9f7396fcc09c6f5e74acf6c861c5c552f39ed71d0d285440f3>, "newL2ToL1Msgs": [ Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1900,7 +1900,7 @@ PrivateKernelTailCircuitPublicInputs { "newNoteHashes": [ SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000002>, - "value": Fr<0x12d57be1320db2f84e9ee09f4cb6d2845d5a813c7dc5be06779a58820db51183>, + "value": Fr<0x28d23cd3f4c08daeaa0eea08676686f6a3b0c266aac8925de6d6cd2213c17ee3>, }, SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2127,12 +2127,12 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x028d5f9670104b5af44b1ae3ea44a5bbdc97f37425dc07a9acbfd6902e8fc3af>, + "value": Fr<0x1b5bb0d2d86fd54f93dbac726c4e9adc87c1a89fd82fb00fff0f74fdd1c46edd>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000003>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x2905d10baaf69765d2b2f1e03ded36e2b50a91489515aa91d277a9658999cd51>, + "value": Fr<0x14486dada110ccff78d071d2c81bc470974cd0cf4f5748a75717b215eba53f05>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2581,7 +2581,7 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x1ae0435114bcd3eab4c8994725a1b5a21e63c1ed26db53f0ec26af423562c07e>, + "value": Fr<0x07de15c05ffa7c46940ce0926bcdda3e831ea20a2d3d4ec5fb1e406dcafbf640>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex index b429f7a21ee2..cbb4038fe308 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex @@ -1 +1 @@ -1cd5ad4b3a2730bb3e21d5483c7cba30278b7e86de666f712758642e58f9f23aaf9f8c4401000864ba282583f7e8885cd95c99d5b94e8e4e7e90f960f7d1f744d4e1a3d1184600000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000011cd5ad4b3a2730bb3e21d5483c7cba30278b7e86de666f712758642e58f9f23aaf9f8c44010000000000000000000000000000000000000000000000000000000000000000001cd5ad4b3a2730bb3e21d5483c7cba30278b7e86de666f712758642e58f9f23a0000000000000000000000000000000000000000af9f8c440000000000010864ba282583f7e8885cd95c99d5b94e8e4e7e90f960f7d1f744d4e1a3d11846000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000276ccc1f739a2f32e67e0a69d000e0f24549e2daf7ba4ab92d0c396c749ef708000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011cd5ad4b3a2730bb3e21d5483c7cba30278b7e86de666f712758642e58f9f23a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040073ced0da546b196db6081a63207dd54a4471baa30273e0b81f7ca1896331ab00e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f16100cde5c5b63f50c24f425289b93fb6719b045e905e9dcb9c281c79f8a10700e749f3a31cc27ed4aa1c105c023e78dbd20f922114e47d92d044fefc24e355f13f925dcd83bf6054ea0cce12d21a0b9d3be109d26fa9c333bae17b82becf29f188d5acf2ca79a04d6e2db7589ff5543f53308a162c360a65c80261e28f6768200000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +1be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed1af9f8c4401002588f756e2294742f2e0b8bdeef919248a8dc09354d23b21eefc860b1941bd4e00000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000011be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed1af9f8c44010000000000000000000000000000000000000000000000000000000000000000001be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed10000000000000000000000000000000000000000af9f8c440000000000012588f756e2294742f2e0b8bdeef919248a8dc09354d23b21eefc860b1941bd4e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d38f6fde0427101df4e778ed294bf222b735c885172067d2b4d6967b6a7c8c3000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400fe53a6ceaf194ae7c61b757a173982685276f1dade7402c02e78198779ae0400e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f08292bdecc7ec53f359ff38f06a8528e13f1790afb2287a45b4222db8ac33ff222664a87df907f732f4fa814018bb43063a411a6b4fa0072e5f5f443c9c9f08921b17810bc097a2bca3247690619cb3215d116f832eea2ec8d844460fde2fcfc1bd86d85941600496c74f2da2ccfea9fed69dbe88d8a73033097f0c4f7a44e8400000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex index cd0999705548..e85fef945854 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be2000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001882c9614901f1f1b248a220cfca811c12c5fdd88c61804824a9319d9c30898100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028e0cd51c331bac85a0b3e3ec688d034ab7eb5e75ab085dfd3aa200343d23460ed08e599e5db578d1fc18d29c1eded075b92ccd489624367e8852bc807861ed000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012323626efdb913d8d0e878df766c402fbb5b61c87826363fa9cde7ba5e1ab8b000000030000000000000000000000000000000000000000000000000000000000000001001070b95a463cd3e0c1eec74d545327d35f036fa6270ff9ee4ae4fd248e4b8c00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000301b64454c8b6f9ef03956bec11fe831358f8fe47a3593534790f822b35324ceef000001801798310a7303baf83b94523073876af0682377b02f648d6368d4b750297a8008000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000006601bb640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f0000000025ac0f8793721f4bed5541b84ac1b3d3a7979d2d5c367b7752fc0ee13db1aa9109b10c924d7b8ea453aa111249a391832ed60e771536c5f7496bea3d6e921d9502cb42d99fc18dfd0b7faebcbc4b04cac72deeaa804c2f881c734253b239915d25d4a020c2e9dd66895268ad6890d394df1b7bba1b5f68c5482f32502bfe7eda0906bca101000ed08e599e5db578d1fc18d29c1eded075b92ccd489624367e8852bc807861ed25d4a020c2e9dd66895268ad6890d394df1b7bba1b5f68c5482f32502bfe7eda00000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000412323626efdb913d8d0e878df766c402fbb5b61c87826363fa9cde7ba5e1ab8b000000030000000000000000000000000000000000000000000000000000000000000001001070b95a463cd3e0c1eec74d545327d35f036fa6270ff9ee4ae4fd248e4b8c00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000301b64454c8b6f9ef03956bec11fe831358f8fe47a3593534790f822b35324ceef000001801798310a7303baf83b94523073876af0682377b02f648d6368d4b750297a8008000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000006601bb64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f0943e0d2a4e58238525bf3e5f2b00d44ebfd6d27463767fce64425c1c95ca1a60ce0972a4958e5b11c7d51f6f803f78799b28bd1c2df941f869ef6c553d6941b27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed2665e9a78f03a58e48cb92a31a243d9906c13eb556d8feed67ea831230d9d8c900000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be2000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a186acfce6610096c463e7843d5e5bf69b0ac1f086994344de2d18ae1e50fae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063e957fb833022fdbc841e0192be07c55b1f2d3ec3d9d5933c566e7eca418a2b4dfa98ee7ff2bd78ece3acaff9c3961243f2ec9307024a71fd0b46a0da1fce000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104a6f775616ff8bc00d6d58ec2c6546b2350dc4c4b7aa8581451a82b04489dd000000030000000000000000000000000000000000000000000000000000000000000001001339bf9815be1e3e96eb38606437691da48cd96d212384013a2864a211997f00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000003013b22ab0f862a52bbdf6fa6236860c7bb1b54c16848de1d09f1246b4368b21c30000018004694d8c853e46047e6ddc41ceca99a948a3866e2f3aca4ae9e0d626becab330000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660a3e6d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000001d33cb2a28886e7dffe6e29908fa4287f9a770bd5591eb4e0b05af7a0410b21c03d486d8df44f793ec2c180cdbb3835e185e43a7c9991695e6bacae04d0b548c0217c6fc6e5bf85420ed3b84254a5ff189eb6d11dc0d4ce911a3b03be3c6b76014213a070b8e4ade4aed7a7ec0b3aaaee87b4f1c13981476e1cdd3c0aaa010e70906bca101002b4dfa98ee7ff2bd78ece3acaff9c3961243f2ec9307024a71fd0b46a0da1fce14213a070b8e4ade4aed7a7ec0b3aaaee87b4f1c13981476e1cdd3c0aaa010e700000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004104a6f775616ff8bc00d6d58ec2c6546b2350dc4c4b7aa8581451a82b04489dd000000030000000000000000000000000000000000000000000000000000000000000001001339bf9815be1e3e96eb38606437691da48cd96d212384013a2864a211997f00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000003013b22ab0f862a52bbdf6fa6236860c7bb1b54c16848de1d09f1246b4368b21c30000018004694d8c853e46047e6ddc41ceca99a948a3866e2f3aca4ae9e0d626becab330000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660a3e6d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f1b312d79c2f2b38b11da7a65c57ee25cdefc03e154410dbc0d1208de3c7d984d268220209c5229055952db6d99f7aca3997322c471c4d451f74f849ec2aef9da27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed025eb824626710dc3ec6f2f31a2006710f207dc284da5f52f0e5051871a092b300000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex index 73a2d6e1f99a..b93929daff27 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002df6f1bebea79e7109e9a05d46eb4f3cbcd2ab2f1deddf1ee404519d06f6db4100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ae0435114bcd3eab4c8994725a1b5a21e63c1ed26db53f0ec26af423562c07e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028d5f9670104b5af44b1ae3ea44a5bbdc97f37425dc07a9acbfd6902e8fc3af000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012905d10baaf69765d2b2f1e03ded36e2b50a91489515aa91d277a9658999cd5100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082cb025a081337054f138f2d4708d3ae2a35c1c024041344b5f55c6ed3ee83006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b3900000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000001922b5761a51e19b5cb4d8b6bb2ee8268771782838b138bcbca98b4ac18627890bce5a69119854406c06308ba266813d1c29cf462591d0d9fcec48977c449a7a19d92aa77bbcd9971855e260da442e61407d51011a2f83479a5663c018aa933d2df6f1bebea79e7109e9a05d46eb4f3cbcd2ab2f1deddf1ee404519d06f6db410000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ae0435114bcd3eab4c8994725a1b5a21e63c1ed26db53f0ec26af423562c07e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028d5f9670104b5af44b1ae3ea44a5bbdc97f37425dc07a9acbfd6902e8fc3af000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012905d10baaf69765d2b2f1e03ded36e2b50a91489515aa91d277a9658999cd5100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019babf882a6846aa2af472d18fe0ef024706c6c64f0b82e131eaec63207daaab000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007de15c05ffa7c46940ce0926bcdda3e831ea20a2d3d4ec5fb1e406dcafbf640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b5bb0d2d86fd54f93dbac726c4e9adc87c1a89fd82fb00fff0f74fdd1c46edd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114486dada110ccff78d071d2c81bc470974cd0cf4f5748a75717b215eba53f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c3c8ebdfbeec9f7396fcc09c6f5e74acf6c861c5c552f39ed71d0d285440f3006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b3900000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000002447f72d2f5d3ae9d3fe1e17ca75242eb186337ef31fcb56cde96ab973f4cf092fbb460516c785a1f63de48c5f9e685761c45d63441f9318b29aca93af532d240d438e2fe6192c58edd342c34980ed4c6ada2ac6ee418572be0f58050f2b21b619babf882a6846aa2af472d18fe0ef024706c6c64f0b82e131eaec63207daaab0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007de15c05ffa7c46940ce0926bcdda3e831ea20a2d3d4ec5fb1e406dcafbf640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b5bb0d2d86fd54f93dbac726c4e9adc87c1a89fd82fb00fff0f74fdd1c46edd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114486dada110ccff78d071d2c81bc470974cd0cf4f5748a75717b215eba53f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts b/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts index 4c60072d12dc..444e24bba564 100644 --- a/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts +++ b/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts @@ -1,4 +1,4 @@ -import { type ABIType } from '@aztec/foundation/abi'; +import { type AbiType } from '@aztec/foundation/abi'; import { createConsoleLogger } from '@aztec/foundation/log'; import { type NoirCompiledCircuit, type NoirFunctionAbi } from '@aztec/types/noir'; @@ -50,7 +50,7 @@ function addIfUnique(item: PrimitiveTypesUsed) { * @param type - The ABI type to convert. * @returns The typescript code to define the type. */ -function abiTypeToTs(type: ABIType): string { +function abiTypeToTs(type: AbiType): string { switch (type.kind) { case 'integer': { let tsIntType = ''; @@ -107,7 +107,7 @@ function getLastComponentOfPath(str: string): string { * @param output - The set of structs that we have already generated bindings for. * @returns The TypeScript code to define the struct. */ -function generateStructInterfaces(type: ABIType, output: Set): string { +function generateStructInterfaces(type: AbiType, output: Set): string { let result = ''; // Edge case to handle the array of structs case. @@ -124,7 +124,7 @@ function generateStructInterfaces(type: ABIType, output: Set): string { // List of structs encountered while viewing this type that we need to generate // bindings for. - const typesEncountered = new Set(); + const typesEncountered = new Set(); // Codegen the struct and then its fields, so that the structs fields // are defined before the struct itself. diff --git a/yarn-project/pxe/src/pxe_service/pxe_service.ts b/yarn-project/pxe/src/pxe_service/pxe_service.ts index c08323ce9e61..4981c2c4fe5c 100644 --- a/yarn-project/pxe/src/pxe_service/pxe_service.ts +++ b/yarn-project/pxe/src/pxe_service/pxe_service.ts @@ -418,8 +418,7 @@ export class PXEService implements PXE { } if (simulatePublic) { - // Only one transaction, so we can take index 0. - simulatedTx.publicReturnValues = (await this.#simulatePublicCalls(simulatedTx.tx))[0]; + simulatedTx.publicReturnValues = await this.#simulatePublicCalls(simulatedTx.tx); } if (!msgSender) { @@ -650,7 +649,7 @@ export class PXEService implements PXE { await this.patchPublicCallStackOrdering(publicInputs, enqueuedPublicFunctions); const tx = new Tx(publicInputs, proof, encryptedLogs, unencryptedLogs, enqueuedPublicFunctions); - return new SimulatedTx(tx, [executionResult.returnValues]); + return new SimulatedTx(tx, executionResult.returnValues); } /** diff --git a/yarn-project/sequencer-client/src/sequencer/abstract_phase_manager.ts b/yarn-project/sequencer-client/src/sequencer/abstract_phase_manager.ts index c26f2a2e2a2a..fbce35ac06de 100644 --- a/yarn-project/sequencer-client/src/sequencer/abstract_phase_manager.ts +++ b/yarn-project/sequencer-client/src/sequencer/abstract_phase_manager.ts @@ -1,4 +1,10 @@ -import { MerkleTreeId, type SimulationError, type Tx, type UnencryptedFunctionL2Logs } from '@aztec/circuit-types'; +import { + MerkleTreeId, + type ProcessReturnValues, + type SimulationError, + type Tx, + type UnencryptedFunctionL2Logs, +} from '@aztec/circuit-types'; import { AztecAddress, CallRequest, @@ -42,13 +48,6 @@ import { makeEmptyProof, } from '@aztec/circuits.js'; import { computeVarArgsHash } from '@aztec/circuits.js/hash'; -import { - type ABIType, - type DecodedReturn, - type FunctionArtifact, - type ProcessReturnValues, - decodeReturnValues, -} from '@aztec/foundation/abi'; import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection'; import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; import { type Tuple } from '@aztec/foundation/serialize'; @@ -212,13 +211,11 @@ export abstract class AbstractPhaseManager { // separate public callstacks to be proven by separate public kernel sequences // and submitted separately to the base rollup? - const returns = []; + let returns: ProcessReturnValues = undefined; for (const enqueuedCall of enqueuedCalls) { const executionStack: (PublicExecution | PublicExecutionResult)[] = [enqueuedCall]; - let currentReturn: DecodedReturn | undefined = undefined; - // Keep track of which result is for the top/enqueued call let enqueuedExecutionResult: PublicExecutionResult | undefined; @@ -277,23 +274,20 @@ export abstract class AbstractPhaseManager { if (!enqueuedExecutionResult) { enqueuedExecutionResult = result; - - // Padding as the AVM is not always returning the expected return size (4) - // which is expected by the kernel. - const paddedReturn = padArrayEnd(result.returnValues, Fr.ZERO, RETURN_VALUES_LENGTH); - - // TODO(#5450) Need to use the proper return values here - const returnTypes: ABIType[] = [{ kind: 'array', length: 4, type: { kind: 'field' } }]; - const mockArtifact = { returnTypes } as any as FunctionArtifact; - - currentReturn = decodeReturnValues(mockArtifact, paddedReturn); + // The calls to public functions are always initiated through a private function, so if multiple calls are enqueued, it is + // not completely clear which one is actually the one that is expected to be returned. + // Since most interactions that are "just" making a call to read would be directly to the function, and only have one enqueued + // this might not be a big issue. But we are currently overwriting the value with every enqueued call, so returning the last + // that is part of the application logic phase. + // It is not fully decided what would actually be the desired outcome for a multi-call case. + // Padding as the AVM is not always returning the expected return size (4) which is expected by the kernel. + + returns = padArrayEnd(result.returnValues, Fr.ZERO, RETURN_VALUES_LENGTH); } } // HACK(#1622): Manually patches the ordering of public state actions // TODO(#757): Enforce proper ordering of public state actions patchPublicStorageActionOrdering(kernelOutput, enqueuedExecutionResult!, this.phase); - - returns.push(currentReturn); } // TODO(#3675): This should be done in a public kernel circuit diff --git a/yarn-project/sequencer-client/src/sequencer/public_processor.ts b/yarn-project/sequencer-client/src/sequencer/public_processor.ts index 14c15d70b9bd..4334c5393285 100644 --- a/yarn-project/sequencer-client/src/sequencer/public_processor.ts +++ b/yarn-project/sequencer-client/src/sequencer/public_processor.ts @@ -1,5 +1,6 @@ import { type FailedTx, + type ProcessReturnValues, type ProcessedTx, type SimulationError, Tx, @@ -11,7 +12,6 @@ import { } from '@aztec/circuit-types'; import { type TxSequencerProcessingStats } from '@aztec/circuit-types/stats'; import { type GlobalVariables, type Header } from '@aztec/circuits.js'; -import { type ProcessReturnValues } from '@aztec/foundation/abi'; import { createDebugLogger } from '@aztec/foundation/log'; import { Timer } from '@aztec/foundation/timer'; import { PublicExecutor, type PublicStateDB, type SimulationProvider } from '@aztec/simulator'; diff --git a/yarn-project/simulator/src/client/execution_result.ts b/yarn-project/simulator/src/client/execution_result.ts index 5118b28d6070..0bebc372c30b 100644 --- a/yarn-project/simulator/src/client/execution_result.ts +++ b/yarn-project/simulator/src/client/execution_result.ts @@ -4,7 +4,6 @@ import { type PrivateCallStackItem, type PublicCallRequest, } from '@aztec/circuits.js'; -import { type DecodedReturn } from '@aztec/foundation/abi'; import { type Fr } from '@aztec/foundation/fields'; import { type ACVMField } from '../acvm/index.js'; @@ -40,8 +39,8 @@ export interface ExecutionResult { // Needed when we enable chained txs. The new notes can be cached and used in a later transaction. /** The notes created in the executed function. */ newNotes: NoteAndSlot[]; - /** The decoded return values of the executed function. */ - returnValues: DecodedReturn; + /** The flattened return values of the executed function. */ + returnValues: Fr[]; /** The nested executions. */ nestedExecutions: this[]; /** Enqueued public function execution requests to be picked up by the sequencer. */ diff --git a/yarn-project/simulator/src/client/private_execution.test.ts b/yarn-project/simulator/src/client/private_execution.test.ts index 379bb25504e2..6b475d10e5ad 100644 --- a/yarn-project/simulator/src/client/private_execution.test.ts +++ b/yarn-project/simulator/src/client/private_execution.test.ts @@ -1011,7 +1011,7 @@ describe('Private Execution test suite', () => { oracle.getCompleteAddress.mockResolvedValue(completeAddress); const result = await runSimulator({ artifact, args }); - expect(result.returnValues).toEqual([pubKey.x.value, pubKey.y.value, 0n, 0n]); + expect(result.returnValues).toEqual([pubKey.x, pubKey.y, Fr.ZERO, Fr.ZERO]); }); }); @@ -1040,7 +1040,7 @@ describe('Private Execution test suite', () => { // Overwrite the oracle return value oracle.getPortalContractAddress.mockResolvedValue(portalContractAddress); const result = await runSimulator({ artifact, args }); - expect(result.returnValues).toEqual([portalContractAddress.toField().value, 0n, 0n, 0n]); + expect(result.returnValues).toEqual([portalContractAddress.toField(), Fr.ZERO, Fr.ZERO, Fr.ZERO]); }); it('this_address should return the current context address', async () => { @@ -1052,7 +1052,7 @@ describe('Private Execution test suite', () => { // Overwrite the oracle return value const result = await runSimulator({ artifact, args: [], contractAddress }); - expect(result.returnValues).toEqual([contractAddress.toField().value, 0n, 0n, 0n]); + expect(result.returnValues).toEqual([contractAddress.toField(), Fr.ZERO, Fr.ZERO, Fr.ZERO]); }); it("this_portal_address should return the current context's portal address", async () => { @@ -1064,7 +1064,7 @@ describe('Private Execution test suite', () => { // Overwrite the oracle return value const result = await runSimulator({ artifact, args: [], portalContractAddress }); - expect(result.returnValues).toEqual([portalContractAddress.toField().value, 0n, 0n, 0n]); + expect(result.returnValues).toEqual([portalContractAddress.toField(), Fr.ZERO, Fr.ZERO, Fr.ZERO]); }); }); diff --git a/yarn-project/simulator/src/client/private_execution.ts b/yarn-project/simulator/src/client/private_execution.ts index 2eb822b4b7a8..415bb152297c 100644 --- a/yarn-project/simulator/src/client/private_execution.ts +++ b/yarn-project/simulator/src/client/private_execution.ts @@ -1,5 +1,5 @@ import { type FunctionData, PrivateCallStackItem, PrivateCircuitPublicInputs } from '@aztec/circuits.js'; -import { type ABIType, type FunctionArtifactWithDebugMetadata, decodeReturnValues } from '@aztec/foundation/abi'; +import { type FunctionArtifactWithDebugMetadata } from '@aztec/foundation/abi'; import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; @@ -53,12 +53,6 @@ export async function executePrivateFunction( const callStackItem = new PrivateCallStackItem(contractAddress, functionData, publicInputs); - // Mocking the return type to be an array of 4 fields - // TODO: @LHerskind must be updated as we are progressing with the macros to get the information - const returnTypes: ABIType[] = [{ kind: 'array', length: 4, type: { kind: 'field' } }]; - const mockArtifact = { ...artifact, returnTypes }; - const returnValues = decodeReturnValues(mockArtifact, publicInputs.returnValues); - const noteHashReadRequestPartialWitnesses = context.getNoteHashReadRequestPartialWitnesses( publicInputs.noteHashReadRequests, ); @@ -72,7 +66,7 @@ export async function executePrivateFunction( acir, partialWitness, callStackItem, - returnValues, + returnValues: publicInputs.returnValues, noteHashReadRequestPartialWitnesses, newNotes, vk: Buffer.from(artifact.verificationKey!, 'hex'), diff --git a/yarn-project/types/src/abi/contract_artifact.ts b/yarn-project/types/src/abi/contract_artifact.ts index 587e6c195c8a..18610faecf99 100644 --- a/yarn-project/types/src/abi/contract_artifact.ts +++ b/yarn-project/types/src/abi/contract_artifact.ts @@ -1,7 +1,7 @@ import { type ABIParameter, type ABIParameterVisibility, - type ABIType, + type AbiType, type ContractArtifact, type FunctionArtifact, FunctionType, @@ -119,7 +119,7 @@ type NoirCompiledContractFunction = NoirCompiledContract['functions'][number]; * @param fn - Noir function entry. * @returns Function artifact. */ -function generateFunctionArtifact(fn: NoirCompiledContractFunction): FunctionArtifact { +function generateFunctionArtifact(fn: NoirCompiledContractFunction, contract: NoirCompiledContract): FunctionArtifact { if (fn.custom_attributes === undefined) { throw new Error( `No custom attributes found for contract function ${fn.name}. Try rebuilding the contract with the latest nargo version.`, @@ -134,10 +134,23 @@ function generateFunctionArtifact(fn: NoirCompiledContractFunction): FunctionArt parameters = parameters.slice(1); } - // If the function is secret, the return is the public inputs, which should be omitted - let returnTypes: ABIType[] = []; - if (functionType !== 'secret' && fn.abi.return_type) { + let returnTypes: AbiType[] = []; + if (functionType == FunctionType.UNCONSTRAINED && fn.abi.return_type) { returnTypes = [fn.abi.return_type.abi_type]; + } else { + const pathToFind = `${contract.name}::${fn.name}_abi`; + const abiStructs: AbiType[] = contract.outputs.structs['functions']; + const toClean1 = abiStructs.filter(a => a.kind == 'struct' && a.path == pathToFind); + if (toClean1.length > 0) { + if (toClean1[0].kind == 'struct') { + const toClean2 = toClean1[0].fields.filter(a => a.name == 'return_type'); + if (toClean2.length > 0) { + returnTypes = [toClean2[0].type]; + } + } else { + throw new Error(`Could not generate contract function artifact}`); + } + } } return { @@ -191,8 +204,8 @@ function hasKernelFunctionInputs(params: ABIParameter[]): boolean { function generateContractArtifact(contract: NoirCompiledContract, aztecNrVersion?: string): ContractArtifact { return { name: contract.name, - functions: contract.functions.map(generateFunctionArtifact), - events: contract.events, + functions: contract.functions.map(f => generateFunctionArtifact(f, contract)), + outputs: contract.outputs, fileMap: contract.file_map, aztecNrVersion, }; diff --git a/yarn-project/types/src/noir/index.ts b/yarn-project/types/src/noir/index.ts index c244ee699958..56a449d8ef03 100644 --- a/yarn-project/types/src/noir/index.ts +++ b/yarn-project/types/src/noir/index.ts @@ -1,10 +1,10 @@ import { type ABIParameter, type ABIParameterVisibility, - type ABIType, + type AbiType, + type AbiValue, type DebugFileMap, type DebugInfo, - type EventAbi, } from '@aztec/foundation/abi'; export const AZTEC_PRIVATE_ATTRIBUTE = 'aztec(private)'; @@ -27,7 +27,7 @@ export interface NoirFunctionAbi { /** * The type of the return value. */ - abi_type: ABIType; + abi_type: AbiType; /** * The visibility of the return value. */ @@ -68,7 +68,10 @@ export interface NoirCompiledContract { /** The functions of the contract. */ functions: NoirFunctionEntry[]; /** The events of the contract */ - events: EventAbi[]; + outputs: { + structs: Record; + globals: Record; + }; /** The map of file ID to the source code and path of the file. */ file_map: DebugFileMap; } diff --git a/yellow-paper/docs/bytecode/index.md b/yellow-paper/docs/bytecode/index.md index c7d7162b4f4b..a7484820b142 100644 --- a/yellow-paper/docs/bytecode/index.md +++ b/yellow-paper/docs/bytecode/index.md @@ -115,7 +115,7 @@ If the function is public, the entry will be its ABI. If the function is private | `name` | `string` | The name of the function. | | `functionType` | `string` | `private`, `public` or `unconstrained`. | | `parameters` | [ABIParameter[]](#abi-parameter) | Function parameters. | -| `returnTypes` | `ABIType[]` | The types of the return values. | +| `returnTypes` | `AbiType[]` | The types of the return values. | ### ABI Variable @@ -123,7 +123,7 @@ If the function is public, the entry will be its ABI. If the function is private | Field | Type | Description | |----------|----------|----------| | `name` | `string` | The name of the variable. | -| `type` | [ABIType](#abi-type) | The type of the variable. | +| `type` | [AbiType](#abi-type) | The type of the variable. | ### ABI Parameter @@ -131,7 +131,7 @@ If the function is public, the entry will be its ABI. If the function is private | Field | Type | Description | |----------|----------|----------| | `name` | `string` | The name of the variable. | -| `type` | [ABIType](#abi-type) | The type of the variable. | +| `type` | [AbiType](#abi-type) | The type of the variable. | | `visibility` | `string` | `public` or `secret`. | ### ABI Type @@ -143,7 +143,7 @@ If the function is public, the entry will be its ABI. If the function is private | `sign?` | `string` | The sign of the integer. Applies to integers only. | | `width?` | `number` | The width of the integer in bits. Applies to integers only. | | `length?` | `number` | The length of the array or string. Applies to arrays and strings only. | -| `type?` | [ABIType](#abi-type) | The types of the array elements. Applies to arrays only. | +| `type?` | [AbiType](#abi-type) | The types of the array elements. Applies to arrays only. | | `fields?` | [ABIVariable[]](#abi-variable) | The The fields of the struct. Applies to structs only. | ### Bytecode in the artifact