From a6ca537d94835c7469c4874978ab7d86990f0279 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Sat, 12 Sep 2026 21:22:28 +0200 Subject: [PATCH 1/5] Add Zcash v5 and v6 transaction deserialization --- src/electrumx/lib/tx.py | 240 ++++++++++++++++++- tests/blocks/zcash_mainnet_1687103.json | 10 + tests/blocks/zcash_mainnet_1687104.json | 10 + tests/blocks/zcash_mainnet_3428142.json | 18 ++ tests/blocks/zcash_mainnet_3428143.json | 10 + tests/blocks/zcash_mainnet_3428144.json | 12 + tests/lib/test_tx_zcash.py | 165 +++++++++++++ tests/test_transactions.py | 4 + tests/transactions/zcash_mainnet_2d69a4.json | 38 +++ tests/transactions/zcash_mainnet_381b65.json | 13 + tests/transactions/zcash_mainnet_525f44.json | 70 ++++++ tests/transactions/zcash_mainnet_57d7d9.json | 18 ++ tests/transactions/zcash_mainnet_5d9654.json | 30 +++ tests/transactions/zcash_mainnet_99966b.json | 30 +++ tests/transactions/zcash_mainnet_b5e074.json | 28 +++ tests/transactions/zcash_mainnet_f15bfc.json | 13 + tests/transactions/zcash_mainnet_f9369e.json | 105 ++++++++ 17 files changed, 811 insertions(+), 3 deletions(-) create mode 100644 tests/blocks/zcash_mainnet_1687103.json create mode 100644 tests/blocks/zcash_mainnet_1687104.json create mode 100644 tests/blocks/zcash_mainnet_3428142.json create mode 100644 tests/blocks/zcash_mainnet_3428143.json create mode 100644 tests/blocks/zcash_mainnet_3428144.json create mode 100644 tests/lib/test_tx_zcash.py create mode 100644 tests/transactions/zcash_mainnet_2d69a4.json create mode 100644 tests/transactions/zcash_mainnet_381b65.json create mode 100644 tests/transactions/zcash_mainnet_525f44.json create mode 100644 tests/transactions/zcash_mainnet_57d7d9.json create mode 100644 tests/transactions/zcash_mainnet_5d9654.json create mode 100644 tests/transactions/zcash_mainnet_99966b.json create mode 100644 tests/transactions/zcash_mainnet_b5e074.json create mode 100644 tests/transactions/zcash_mainnet_f15bfc.json create mode 100644 tests/transactions/zcash_mainnet_f9369e.json diff --git a/src/electrumx/lib/tx.py b/src/electrumx/lib/tx.py index 51c7536e3..dbc6b3ec1 100644 --- a/src/electrumx/lib/tx.py +++ b/src/electrumx/lib/tx.py @@ -28,7 +28,7 @@ '''Transaction-related classes and functions.''' from dataclasses import dataclass -from hashlib import blake2s +from hashlib import blake2b, blake2s from typing import Sequence, Optional, Tuple from electrumx.lib.hash import sha256, double_sha256, hash_to_hex_str @@ -50,6 +50,10 @@ class SkipTxDeserialize(Exception): ''' +class ZcashDeserializeError(ValueError): + '''Raised when a Zcash transaction has an invalid wire encoding.''' + + # note: slotted dataclasses are a bit faster than namedtuples # note: frozen dataclasses are much slower than non-frozen # ref https://rednafi.com/python/statically-enforcing-frozen-dataclasses/ @@ -76,6 +80,18 @@ def serialize(self): )) +@dataclass(kw_only=True, slots=True) +class TxZcash(Tx): + '''Transparent projection and public metadata for a Zcash v5 or v6 transaction.''' + version_group_id: int + consensus_branch_id: int + expiry_height: int + fee_adjustment: int + + def serialize(self): + raise ValueError('serializing a Zcash transparent projection is unsupported') + + @dataclass(kw_only=True, slots=True) class TxInput: '''Class representing a transaction input.''' @@ -503,17 +519,235 @@ class DeserializerEquihashSegWit(DeserializerSegWit, DeserializerEquihash): class DeserializerZcash(DeserializerEquihash): + _V5_VERSION_GROUP_ID = 0x26A7270A + _V6_VERSION_GROUP_ID = 0xD884B698 + + @staticmethod + def _hash(personalization, data=b''): + return blake2b(data, digest_size=32, person=personalization).digest() + + def _zcash_read(self, size): + if size < 0 or self.cursor + size > self._binary_length: + raise ZcashDeserializeError('truncated Zcash transaction') + return self._read_nbytes(size) + + def _zcash_varint(self): + first = self._zcash_read(1)[0] + if first < 253: + return first + size, minimum = ((2, 253) if first == 253 else + (4, 0x10000) if first == 254 else + (8, 0x100000000)) + value = int.from_bytes(self._zcash_read(size), 'little') + if value < minimum: + raise ZcashDeserializeError('non-canonical CompactSize') + return value + + def _zcash_varbytes(self): + return self._zcash_read(self._zcash_varint()) + + def _zcash_transparent(self): + inputs = [] + prevouts = [] + sequences = [] + scripts = [] + input_count = self._zcash_varint() + if input_count > (self._binary_length - self.cursor) // 41: + raise ZcashDeserializeError('too many transparent inputs') + for _ in range(input_count): + prevout = self._zcash_read(36) + script_start = self.cursor + script = self._zcash_varbytes() + scripts.append(self.binary[script_start:self.cursor]) + sequence = self._zcash_read(4) + prevouts.append(prevout) + sequences.append(sequence) + inputs.append(TxInput( + prev_txid_rev=prevout[:32], + prev_idx=int.from_bytes(prevout[32:], 'little'), + script=script, + sequence=int.from_bytes(sequence, 'little'), + )) + + outputs = [] + output_encodings = [] + output_count = self._zcash_varint() + if output_count > (self._binary_length - self.cursor) // 9: + raise ZcashDeserializeError('too many transparent outputs') + for _ in range(output_count): + output_start = self.cursor + value = int.from_bytes(self._zcash_read(8), 'little', signed=True) + script = self._zcash_varbytes() + outputs.append(TxOutput(value=value, pk_script=script)) + output_encodings.append(self.binary[output_start:self.cursor]) + + if inputs or outputs: + transparent_digest = self._hash( + b'ZTxIdTranspaHash', + self._hash(b'ZTxIdPrevoutHash', b''.join(prevouts)) + + self._hash(b'ZTxIdSequencHash', b''.join(sequences)) + + self._hash(b'ZTxIdOutputsHash', b''.join(output_encodings)), + ) + else: + transparent_digest = self._hash(b'ZTxIdTranspaHash') + return inputs, outputs, scripts, transparent_digest + + def _zcash_sapling(self, version): + spend_count = self._zcash_varint() + if spend_count > (self._binary_length - self.cursor) // 96: + raise ZcashDeserializeError('too many Sapling spends') + spends = [self._zcash_read(96) for _ in range(spend_count)] + output_count = self._zcash_varint() + if output_count > (self._binary_length - self.cursor) // 756: + raise ZcashDeserializeError('too many Sapling outputs') + outputs = [self._zcash_read(756) for _ in range(output_count)] + if not (spends or outputs): + return self._hash(b'ZTxIdSaplingHash'), 0 + + value_balance_bytes = self._zcash_read(8) + value_balance = int.from_bytes(value_balance_bytes, 'little', signed=True) + anchor = self._zcash_read(32) if spends else b'' + self._zcash_read(192 * spend_count) + self._zcash_read(64 * spend_count) + self._zcash_read(192 * output_count) + self._zcash_read(64) + + if spends: + noncompact_person = (b'ZTxIdSSpendNHash' if version == 5 + else b'ZTxIdSSpendNH_v6') + compact = self._hash(b'ZTxIdSSpendCHash', + b''.join(spend[32:64] for spend in spends)) + noncompact = self._hash( + noncompact_person, + b''.join(spend[:32] + (anchor if version == 5 else b'') + spend[64:] + for spend in spends), + ) + spend_digest = self._hash(b'ZTxIdSSpendsHash', compact + noncompact) + else: + spend_digest = self._hash(b'ZTxIdSSpendsHash') + + if outputs: + compact = self._hash( + b'ZTxIdSOutC__Hash', + b''.join(output[32:148] for output in outputs), + ) + memos = self._hash( + b'ZTxIdSOutM__Hash', + b''.join(output[148:660] for output in outputs), + ) + noncompact = self._hash( + b'ZTxIdSOutN__Hash', + b''.join(output[:32] + output[660:] for output in outputs), + ) + output_digest = self._hash(b'ZTxIdSOutputHash', compact + memos + noncompact) + else: + output_digest = self._hash(b'ZTxIdSOutputHash') + return self._hash(b'ZTxIdSaplingHash', + spend_digest + output_digest + value_balance_bytes), value_balance + + def _zcash_action_bundle(self, version, ironwood=False): + action_count = self._zcash_varint() + if action_count > (self._binary_length - self.cursor) // 820: + raise ZcashDeserializeError('too many Orchard-protocol actions') + if ironwood: + top_person = b'ZTxIdIronwd_H_v6' + compact_person = b'ZTxIdIrnActCH_v6' + memo_person = b'ZTxIdIrnActMH_v6' + noncompact_person = b'ZTxIdIrnActNH_v6' + elif version == 5: + top_person = b'ZTxIdOrchardHash' + compact_person = b'ZTxIdOrcActCHash' + memo_person = b'ZTxIdOrcActMHash' + noncompact_person = b'ZTxIdOrcActNHash' + else: + top_person = b'ZTxIdOrchardH_v6' + compact_person = b'ZTxIdOrcActCHash' + memo_person = b'ZTxIdOrcActMHash' + noncompact_person = b'ZTxIdOrcActNHash' + + if not action_count: + return self._hash(top_person), 0 + actions = [self._zcash_read(820) for _ in range(action_count)] + flags_and_balance = self._zcash_read(9) + flags = flags_and_balance[0] + if flags & 0xf8 or (not ironwood and flags & 0x04): + raise ZcashDeserializeError('invalid Orchard-protocol flags') + value_balance = int.from_bytes(flags_and_balance[1:], 'little', signed=True) + anchor = self._zcash_read(32) + self._zcash_varbytes() + self._zcash_read(64 * action_count) + self._zcash_read(64) + + compact = self._hash( + compact_person, + b''.join(action[32:64] + action[96:212] for action in actions), + ) + memos = self._hash( + memo_person, + b''.join(action[212:724] for action in actions), + ) + noncompact = self._hash( + noncompact_person, + b''.join(action[:32] + action[64:96] + action[724:] for action in actions), + ) + data = compact + memos + noncompact + flags_and_balance + if version == 5: + data += anchor + return self._hash(top_person, data), value_balance + + def _read_v5_or_v6(self, version, header): + version_group_id = int.from_bytes(self._zcash_read(4), 'little') + expected_group_id = (self._V5_VERSION_GROUP_ID if version == 5 + else self._V6_VERSION_GROUP_ID) + if version_group_id != expected_group_id: + raise ZcashDeserializeError('unknown Zcash transaction format') + branch_id_bytes = self._zcash_read(4) + consensus_branch_id = int.from_bytes(branch_id_bytes, 'little') + locktime = int.from_bytes(self._zcash_read(4), 'little') + expiry_height = int.from_bytes(self._zcash_read(4), 'little') + header_digest = self._hash(b'ZTxIdHeadersHash', + header + version_group_id.to_bytes(4, 'little') + + branch_id_bytes + locktime.to_bytes(4, 'little') + + expiry_height.to_bytes(4, 'little')) + inputs, outputs, _scripts, transparent_digest = self._zcash_transparent() + sapling_digest, sapling_balance = self._zcash_sapling(version) + orchard_digest, orchard_balance = self._zcash_action_bundle(version) + digests = header_digest + transparent_digest + sapling_digest + orchard_digest + ironwood_balance = 0 + if version == 6: + ironwood_digest, ironwood_balance = self._zcash_action_bundle(version, ironwood=True) + digests += ironwood_digest + root_person = b'ZcashTxHash_' + branch_id_bytes + txid = self._hash(root_person, digests) + return TxZcash( + version=version, + inputs=inputs, + outputs=outputs, + locktime=locktime, + txid_rev=txid, + wtxid_rev=txid, + version_group_id=version_group_id, + consensus_branch_id=consensus_branch_id, + expiry_height=expiry_height, + fee_adjustment=sapling_balance + orchard_balance + ironwood_balance, + ) + def read_tx(self): orig_start = self.cursor start = self.cursor - header = self._read_le_uint32() + header = int.from_bytes(self._zcash_read(4), 'little') overwintered = ((header >> 31) == 1) if overwintered: version = header & 0x7fffffff - self.cursor += 4 # versionGroupId + self._zcash_read(4) # versionGroupId else: version = header + if version in (5, 6): + self.cursor = orig_start + header_bytes = self._zcash_read(4) + return self._read_v5_or_v6(version, header_bytes) + is_overwinter_v3 = version == 3 is_sapling_v4 = version == 4 diff --git a/tests/blocks/zcash_mainnet_1687103.json b/tests/blocks/zcash_mainnet_1687103.json new file mode 100644 index 000000000..2ffe1cac7 --- /dev/null +++ b/tests/blocks/zcash_mainnet_1687103.json @@ -0,0 +1,10 @@ +{ + "block": "040000009dba98912c7f53af95e811bd36a429c665e97673db1f02e85568f4000000000091430e9e6fdf926710aa0e349c10bc21fca8354ca86c0caba1d1cc1147a0a5f0febdb8cf442b0f41b1a392d63e886644b655f59fe7213bb6446fd1d9a3fd5844d754966200bb011c3000d85e000000000000000000000000000029000000000000000000000054e9fd400500998b658bd7879348a310fd65223f9288d2356ae7066156ee5b47038fb20180dccb4c714e6e949f205a0e5c96692395419b23e3094febd72bb71ce71c735115f9967c1520834f4f8df8c8795dfe026f5d356ea903733706b9d44bbbbbdd6228b8b870a0e5230b90db0bc629ed1188e7fcaa5ad1387d8c4f70de61f3351c05af356337dd68bbbfc78214f0c84f80fad0965b334bbcce1c449a13b592cf082559f9720b2fb99bd2510eb41d4a66cf212cd9b6691c225142cad330fa86530f18f22755e3211f9b9e47ba8bc206f24dab9d946d21c63a2e97a6d0b9c6a1f2f288517ff0fcdef05812314e032b7d5234fcae9b149d1eb81752de0efcb6dd12087e483078b619d728e3e6a0d9a24de3fc9690b7395f657460266db7936f69141b6f15fb32137c1dcd3c40bf4654abd81bdc30c5c996459b2644c43abdc86a9ff537e5a1772bca4116f148dd0776cb029995f30347d6b08a08b4f0fc4a6379f04a4fe53425b4c29618be06b49d252f1ba9dbe2968d7c57a9dcbab8ad750ccd80df3295f1caf92401631ff6abf1a0681be222250b2ddea55dffa9f51a4765d4df41d1f9fc177c430b1551784c9e9289af8d727eac3da61141ef2a288519e72b59a31c47e2f5b5221760e1da7dd3deb8411a15923a088bdc32c9356fc2dfa0dabc852ad0798dfa4c55c5e1e8240767ab33f4fbcf707a5da8637dc6430996605c64ad6979bfa607a86ae97ef23fa654efc511a72c0f2d4c442d0c96982154d1df6a7bcd1755e10feef415930f883b6935a8bc6a708eb2cd0357ccfd1203b97c0563ffebe4a1e12e0fe24cf3056959b03a0d0ee3f12f5033a7371da7c146e1dbfae0073d4fd01882baae11de5349bbf2665d61e13bd1b92710e87c179cde9fc7cad412ece212325d6f5a3e3b007650f21bf23d6d9607d9407c6bd325e2f4c5a9e709f4be2301bdd5e0a3d98bd3f8e610a59ac239d9bb0ddab34d039906f2a1c347421d489188c23a124cb99c4c77920b7b5b7fb1d591f4bb1c26434c748a3394c45f7ab21886074c128ec99a9329a2740d2a6c57124fbaa26110512938e421add7ce0d820256aa7414a15d1b9257291aef7006da3bd7673d8accb17d0bf3ad7f5ed8e4130176933cef9b81d6b3f2165237ac08c2e6a666d21c22a1c5f16d3d4ffc037250595306853c5f4eb627091235af4e62e72baafee79e577949832c3af9a69e6f8c1bde396bd511816c08666df71e1ed5e51783a21400e10c720c3f5f0c1b6360cff2f84571a52c83be23b8b73708d686cafee1d2b30c1b84a137897cd34912c5eceeec6b8addb8b2232747a09efe915d1caec2802e46c2886af0f5840e08ba2eceded759c99d4fb619b66d6de54d8233f1fbc4b152701ec6595b7b3722282e0db589104eaf4e2f93c36bd74536240058f16c06def9edf6865be4c773b146a7a3781ae1cc3bb6f31d5fe4eed1d39b69155a73adf7b054d6684c742cc00cfae73b5bc689afedd366c686e613122495180f921ffeaafa186128e3f692d67b40e263ca2c281dde3a0c7db6de558b4d42a40c43767fb460ee4c0bbdeb433356d70cdc66a49d8bcff4713832cd0985c45c1e28133b22d3f9e98b779c3ed41951714cd60e791fbd5734e83bdae0189a3b306e69f7a07f9a4f08c6fce5bf0d59db75d34369815dd5b58b6ffa6e5f55873b548a455c571e59e706b7fa7967aa467c28d6ab34fbc797205bbe2bbf9c8a7f7c26548d6f2e135e93a195792b36483202cbaa2cdfe226c4be9b7a2f5d6d8a1dbdde266a14e03e2e6a177804155c7cbb0efd6ee9f31cbb37584522b41c88136abf3b8aae6542f302785cf42e35348a9be2d3a3eaccedd868ca4ea69a7398f9fb603cd1a4015b60a9c3b06133e3a86fa59651ddbed0b4010400008085202f89010000000000000000000000000000000000000000000000000000000000000000ffffffff05033fbe1900ffffffff0480b2e60e000000001976a9145c38e5e20b62bbb5683dd68677ac3715047341ea88ac38c94d010000000017a91469a9f95a98fe581b6eb52841ef4806dc4402eb908740787d010000000017a914931fec54c1fea86e574462cc32013f5400b8912987286bee000000000017a914d45cb1adffb5215a42720532a076f02c7c778c908700000000000000000000000000000000000000", + "hash": "000000000162bdf56998ca7703adad22cdce21252f6354c077e82ccf434e761f", + "height": 1687103, + "merkle_root": "f0a5a04711ccd1a1ab0c6ca84c35a8fc21bc109c340eaa106792df6f9e0e4391", + "previousblockhash": "0000000000f46855e8021fdb7376e965c629a436bd11e895af537f2c9198ba9d", + "tx": [ + "f0a5a04711ccd1a1ab0c6ca84c35a8fc21bc109c340eaa106792df6f9e0e4391" + ] +} diff --git a/tests/blocks/zcash_mainnet_1687104.json b/tests/blocks/zcash_mainnet_1687104.json new file mode 100644 index 000000000..0896be421 --- /dev/null +++ b/tests/blocks/zcash_mainnet_1687104.json @@ -0,0 +1,10 @@ +{ + "block": "040000001f764e43cf2ce877c054632f2521cecd22adad0377ca9869f5bd62010000000002a08979bd6a9af10999e20861a1caf2a32b4f32ba7b6aaebb155157eaa4692d142586b9edd610c071b0d913ecfc88de2784720edd9aa26f5b33f2c9860edfdf4d5596629fb3011cbc603329000000000000000000000000000002000000000000000000400755e6fd4005001e19433e04c79da647e4224ce8628d4018d1020c0dc3643384452cc157e5b2c2f2a3357ed199bd08870657d9e6f0c76ef73b3fe44defd37e22c68a9be4ec15bc9612cc4f0a55d2598214966c6abaaa15d561220db8640737595acf3c6252e555cff02daab4f4682a32ce61dfb6973afd217fa55720d2c621b243fe4e302f38a7b210d276a74ba4e7b905ef831df580f17da23187369b6ed536c8b3e3745d72b51eeae8ef5c2c6c0ab82c3576662217379176022c4153b9ebeff61c192deb8c12889e7fef6ae7d53e3f4ef009a71e10360f28b631bf6f142ea8f39e32e17d339e2a676e13dc3b59cb3d84ca754223ca4276e0c055706f490f9ac4e7121b740f9d876ca5cb02e1f42319d115c3ee7c0bd92c4dec934330c909e6bc9655a2bfdfc6b2285deae91f1a837c5d5fc78b496fa20efe2a636504e0cf2526727b34d68a6979c196bf9876b3ec5c6749f31d443700df8d5fca6ccae18ca6f3f1b6d853dfbf85ff3fc709b8d0ac821e2acbff95a660d2492d1619b8b7a7cd0ac751b8c5c617bb9566336b1a45b8e5a111fa212f118953104e71634b8f061289acecc71f883c9fd6c20be2453f9f935613123e64281a79337ff4523fb80618b617ebe91a8cc12b91043c3dd2d7e19c0bbf436917f87aaae586c491fbcac3e5167ee05deb303a621f2aa0425b043ac2ffe7ae43a66d3b57621b0274955c07e6518d61c9afdeb75f438061d3e409b7e0d833810b94d610ae911e0de305c1dc1e359ed118365c16511051ac82ca6e92d59148c3652c9c21b179cbefc3bf1507657b3d47b0f88b0556c1bed8ced2608f7ec40512172f7a7a500b0d9fc2613cc48d0da5140569bec513eb34afde078be4b4a6227eb13b3f1182263172ac1e20af454558855efd8f32f2c0c33368ee5932a8393513b6b4e2e243a9cfb0abbff0670e0afff4d95b66025dc12adf6a0de5e76d754d2ff584ce7641395ff53c466a3153de426394fd041930d6e1e346c33e535b08dc7f47ce09d78c7dd002ce9eaae91ddf46316d657193f41a7f6a9e83b7dc890093caa7eb35835b1f570a6032df23ee98f3846d447d996e59ce6b6d9df40c226e2b805b9a42e9000a245d0964b03a87187cc8bf15186690d4d58817b64fd671bc56d2a20f19f551ab4ca1448ec9d6620fc75ae8c7064b3f2ac6ead9b72703bc10ef8b0e82f3ec9a733b299c1fc122501c21cd1d1bbf709c123165f1d2e5ebabd097e7abf01e48f63376c1bdbccec13be7d613a3a336a3f63386d600954041b49c259618418707d6817b38459a5454b47c890a664abce3df5017912372193c6eaef28fbefba60b2aa681773b4c62fa6e9e52e501c8f50d1b7d13dc691a2ee5a8274d464b98887c56017ae9a7219d5fce5133f44f7c8b5eae1bec98238c612b810127bc1a5e8f03d7c6afe1e3de095bee741f5c7d5c4a0ef05c6b5b1478fa25af0a8f14c6d4371db34e768f7c229c69854c8704f465b17f0f9ad726601e5732c5dfffbaee3b64a9f50f96da9f5b406c67a0884207268573191fa60542093d032f04f9b6bf87466b54b95b7dc57fe3c80ad8374ede8ac59ddf5071656e3aec61bcb071d07d06c845d1790ccf5734c9547d075d96162827bcfcfb16136ba0a68f2e530910a49223342245b826df7fb909e96acb25d56421426fc0c88aa26dd076fdcb4e0c14baeaf128a11823339136c4d5fb5bca774bbbb3fd23ffcc034095ae47e29b17a142e75df2993cfde765495535fa14a86b295bb074b33d32e3866207d923b210970ae66a50c49133e237cdf37e977b0dff5ab27e51ea23d7c0d52707fa134793d449f6c787b73ef5a620dbd3430e9aff94fae903e528724fd901fcefed8665bc5d98461d4c47be5bea78dceac22329373ee1a701050000800a27a726b4d0d6c20000000040be1900010000000000000000000000000000000000000000000000000000000000000000ffffffff050340be1900ffffffff0480b2e60e000000001976a914fb8a6a4c11cb216ce21f9f371dfc9271a469bd6d88ac38c94d010000000017a91469a9f95a98fe581b6eb52841ef4806dc4402eb908740787d010000000017a914931fec54c1fea86e574462cc32013f5400b8912987286bee000000000017a914d45cb1adffb5215a42720532a076f02c7c778c9087000000", + "hash": "0000000000d723156d9b65ffcf4984da7a19675ed7e2f06d9e5d5188af087bf8", + "height": 1687104, + "merkle_root": "2d69a4ea575115bbae6a7bba324f2ba3f2caa16108e29909f19a6abd7989a002", + "previousblockhash": "000000000162bdf56998ca7703adad22cdce21252f6354c077e82ccf434e761f", + "tx": [ + "2d69a4ea575115bbae6a7bba324f2ba3f2caa16108e29909f19a6abd7989a002" + ] +} diff --git a/tests/blocks/zcash_mainnet_3428142.json b/tests/blocks/zcash_mainnet_3428142.json new file mode 100644 index 000000000..b25982ef4 --- /dev/null +++ b/tests/blocks/zcash_mainnet_3428142.json @@ -0,0 +1,18 @@ +{ + "block": "040000006bda7b56bcb4042b7f3463e2876f699b01625002d31935294ebbac0000000000403614dc9eb3f6ed9a58e30ee2e5e31ac89592818d6ea43fb935faf5f03cf6f120b3a771fadb09fd52dd82905b11777903a2fc5d213a00c6ba50cc6606a3103090b7686a8dc2001c00000000000000000000000000000000000007000000000000000000d20001b1fd400500283ebf651f0cc9f240a5008a52503ab0f6374d0628458a46cef32261f61b83b5c5563a6596584db1d809c1f9a9f4c847cafe3fd353c8baf1daaff89d29ca66005db25cadd9cdd5a0167432d95ee9d2f1f37c3203422a5e96573aedf1c742fed7aeb3f77ca51efb920d4a31bdddd476cab36004fe7fc0803543309714aa178b91a21e1748bf9326019c5ff9419d7161f2c1bb25272982331cb2efcc1192eee9cecdf8bcf657698e042797d0d8559ba4f7902415d5708d855b536f6d3c0a2e2e5b825c70d5b1f231511eba55649209d3c15e0f959e80d4db416db2ca8371a6bc82312c0018590651c26333bf5d678928f067fc00dba8f6d265fbda9805794d0b80c742223a11937c66d55dd28a833d5e1b14fd05bc9fdad20131953803a3460b661fd7f93fa1189649f7aecdded8b30633788a6fb0c6bd40dc014634ccef90e49903f717046689837d9346b2a49f698b047c27d9ba02bec3109d5282516840caaa73decce12869ebea87d13bbb9057a7c0ab57bfadfa5bb635810c1e37aaaa477412740fc4e86dba19dddb4592bf34197ab4e7ae784f6fcfb4830796e6fb9178eb38cb33117a1f118aed62b5cc0d313130457ad713c69f0a1d20072cb9ce6551d968d213dc62e3ac09281d53ddc5232906eb282c28cdd9d4f584dbc5a951fe6871362246b9ed82dc56db26eb1b98a33dec4a3a560e9fa9f007ae6e82e8438fb4a1d5c1079c7b98f5e5e49af5460aa4147b6fccec609d49567da8c22611d1df348699106c0d8dcc53f5e17db873092c756ed52ee52dd36e12cc3e1d7d0f8ca533fd85faaf6f1a0b5211ffdad116a9f1c0f69146b56dfcb1b71e753fe206aa1a073a562d8cbe079a9d03f95c75ce90ce3ea9e7a7322a0a21e64c31badfb5e73a00e2cb1a3ccadd047cc8d9e42613faacec1e748d47127419ccdb290b5609fc96fe00b9ac6e7fd9fc4b90db941e4240c64639b53dbf5a026a139ac1a254755d08d113053518f9243471f206306385b60b8fc6d3bb026ac5f4f0d3afabec7f3ec2335427790261cdd78254473e9cd5c455e6b21fddb50c8f3a50815a763f78ad62895b67d360a8011cb1a72bb595aebcdfe355499987c4fecb420a367e141e300d99fecc2c10750d8be22197f3629e3e6b0d1f81364b14fb1f991a1c016f53b794fd70bd8ed5f7dda56d0363b6e52888cce18c2588ff2adc08c2e9899e55b12a9f37c7ac1e3e5711f9a7d5ee6b7dda5f553e5ead0aee21b25de0b39367e721528cfe231dc2885a768c411496f358dddfa1ce255c79d7ec84cfa26a9dd9ad08cdaad5b556a81183e4c14aee633994f6e28e871918c8478b4412eb49521206b97beee6c1c9f2d987de0f888f69d6d315cf31ddb2b73facb4f36cb91ecf51101591782fd090fd893ea4946274f2ff91b57ed38702356f2c2f0302744c31530c243d551199baafbddd20a2eb6a73a61dcbf630a607ecb8103e61393b80892d7776b1f14ee15b2590e30f59b28a426aa55eeb887facf638dafb2b69df2b7b6a9e755a0ee2b0f81cc2099bf09a7aecf6ed9a92b0d62667208d5a528d71cb14213a78dad3af7ea15633d0354e6b9d13ef91dd2a4641450910e1388f3c41f9735050056ba6355d680647af1fb1d41fac7fea7d151d33e5d0eb11073a2b4b0a102ceaf26137e7315d444bfc24a8b68802d7b1ed3c360a105f7043b3b88d64084a7f43e31a729f2f4e342c5b062b60bbdfc5a425d43e565c95ce845d8f20367ce490e3d586c7255b55b5d4d4851976dbf29d510fce2af7409911d1b3642a1e895b4d22a6b97b63f41da3fcd6b38e7ac111c5f33e96b95681bdd87ce699111b02ab098f3fa94d6af1b29377eba63c5fdca6a411d2c516a52058c9b7a3b1fcd79fe468e20372f72d09050000800a27a72630f33754000000002e4f3400010000000000000000000000000000000000000000000000000000000000000000ffffffff28032e4f3404f09fa693164d696e6564206279206d696c6c6564676576696c6c65c6e63054b0e40a22ffffffff0268f37407000000001976a9143adb65035f409626fbdbd188443a88fb72aef38688ac20bcbe000000000017a914c20cd5bdf7964ca61764db66bc2531b1792a084d87000000050000800a27a72630f3375400000000554f34000000000002e08a0f6b13c76de2aac3d66aa45bf3d4ef96544f2968aa16da07ca53e114533d538294e22118694cad6c729066a944788ff01775cafc54948d875da49f13ea3acb8d4c0fc799a12d8195ea18b0d95bcf5f548d9dadea711b8f6613a25387e03e4a246c651a6effee93a5ee8f43f6891fe121773c27d98d9438a9a0061c9e0e257970386e124d55a92cc5ef6e6558bb50ed9c8c7a54e0e4fa2318021cfc575039f64104f33337b35b0788f1e28b879af20d99ae0e741b7516698195a51e4fe59d835c924ba0a083ea81078ba2481a6ff8951fee9fdf2da3cdf5ab450a22f655617cdfce4be4e02d128305f125cc4837d0889569ff66b1dddba281f0206535756dfe3f306b92d0c6846d3d2670b6c34c75fd8798c294d54a391494cbb106bcd53a680d9fe2c98b82083f04583a70c00c6e723b5b06da6d5effb65663d6a7ce7899e5528a8fccb50bd02cd05f9827b653aa2a5b90b7ccc8b9547171acef7271ccc52906702e26e9409727b691aaea6d9c3e45aee78dd59ed9b4fa55efe31d2d23a31e3cf4ad91c00e13e9b998c059a599651b22fb98a541a80bd6d5e57892cd24e6a2f3e214cac0cc6700e044df09287fd62c90b275d66658255002d30dd4939537cbfae3d5966a19fba33ca9c2cd05b7f63b04bb1dda759cdd3c9a0da1285a81445be46aa3739c4a7b025a449fe97c53978d28e38f2fefd97847467f0545343f6a87947cd7bd9ad3968283d61a8f25a10797b762ccbb5329db195ee9ad63e89aa7618e69f5a2877d08fcb4d6434c78985db1b44e38dc1d41e89464d4a238fbfb53e896edbb227dd3dc2ae60beb6eb37b46c70f05784333e4feaadd6a754514ec51a75c7d4f582a5450be192a0f3ed0df407440a1a9a110c334ce3e9c106f0f233f3ddeb285705aa1a885ab4eaa12d6446ff77cc68cc407a51f20fc42fedb2595ef59942a455890c78be02cb5b1628f1646046a353eefef624138794d58831b1992eb6207835913e33916a769b5ff2e5a7a19f1820e4006491678ae796fa5fa619ebd24494a606166b60e3b48be4f4ea205d585e3b405094cb6497e432418748d10f3fd668f19c5cb405e020647eb89bf5c622fab876785559cde01344b20a2ff89cffb7525b141dab1e68e56ce603200575a624b83db68d156b334661b97eb162c5f5bb289f019d5fc94c903cb1e3641112000d237440b74b4b7fa1fdca6e0c683d765434d58988fb1ee6df4e59fbb77858fbd14367e95fb5844e14db5d5a9972b1aa69d2ec6c17b95c42224f044b53ce7a660ff91f587c143052283fc330811d8a91e73401a362146aad0ae94e40d761202c7ff1c76771aad6e5c2dfd2d960867448e930edb96823ff904590ac78f4e8faf8d663d13b97b21425a152af1767983da8ca45b461487b6be342477c6302e08d6fc5856f3d16bf1ba59af1f2a5f25536258280335b729ae68f10f1370702c8920b1d477a631ab59ac9f2415821910d875a0273300c7eb3dd996bc49beaa65943036141f7719e50066a22a6510f990b479600a07fa6a62a4da615e04c1a16229779fe9d99b15e5e31799fdc0f1c61cf5eaaed3c2cae40419894145fe534a8313ff3180d18adc4dc680f5a50c988c1c42099ef8bbce08b1df34da7137de14d58b3caa4f7e1491d8855ee6c5152b76430491427851050045e75714fa5a265484f6cb4b55d2d760ebac9c76fc39eaf044274404eafd0af5d34b99bb6dceda9a27f849a3ac39e08759fdd0b9c782e8efbdb85532419035de39fc249842aa751cbe334a7c694b79c85ae181d3e5c53c86d75473bddecd94e71051de8ce4919bc6fc94fa6df4711e023eb4d4ca6d812c628e664892df2608be257bd1b3c2e2aeb2d859fd24de75d245d3b6767b106f10ae13d288004d56423f8486ec6891fbaf814f8fb23d6a7e0dea2e1bde89b7c9df1564655fb3cb397a9b80bf91cb524e3d5b0af338049550e100fdf5281db149ba0169729e62b85c6ee3f95ba5f39d7cf3f396857a4eee87a60d4e35e071ef3622ef9c844197501cfe1793e91d1d3be78b1f0998ac47c993c313ea88b2653a71a0cf0441f258edfd6a20abcb95e7302e2290664606d93406826d25aa48e589dc362f5966996875833d7e82c27f4ba8f42fd71c564989447b48ffb0607fb3b26251f5f9b4a3daaff3af58259b6e18f5f7e2d16d32a4d973cd5b91104739df0d0d9edeb3b5b283101f4203f932a0d07892d46070fb95852ceb531a7ded4292d2620ce509e9550b79aca39eda06f75106285e0473008762ae23694ff258b8c2867854251d37603aeda9ab93cd7103102700000000000032ef86c9ddd4d9b749190bbd151664524ea253fe1b8c08bdbdf28767200db904fd601cf06e80ee2672a2b4cab3d27393c92fec667a53d20aa2a95053ee2b41ab7bf2161656149c4649f2e1c9f083ae242ba41ddd67b68c6165b5fe8c5feeb0d4868e964972263f4d7f85002a91827921a79077984470db6937e728c414a01f4643343d075015b6ee28df2ffae0ff233bc0b8e497848bdd3264e570b08540e8460310833a4c489decd5806ab47be0eca3eb9f699a3efc529b0a0c708ec794507ac2c03ea427f133ac38c54578261ccae563e880057627f4eef747f2fe78a0f646029d9f70cfc13c2b671b122458e4fea1fc6e4d7d7bc444b241f9f2e13080c9c818e2081c8ae35f68b44777e4493606aed319eddb9a6bafaf37b7504f6a91a829d9d8ad3dc5500ba675e920c06b45558260c4052dd479a649f0c8e27b2531343364f82cdb562415901001130591f57fcbc64f2e7c383bb28772d0d16f80cfedb9574ba40d4321b1380f805ef1d6dcc0cc1eb7b0feefb6046041df29f083108dcac8fb10ce7587ffe8bcf78695f08d80ea83816d388721b91ca69bfe517558b91201acbc2e82823e22c5ac16e2450112a95d87b78a521d750d082fbef66dc1702e6d908a14a457a0cb0b9f2938feeed1322e6e0db76cc8cf394b95555b313453b0b73e1f1c8fcca44814b98a0d51ec9b66aa15985849f7f93320081e5bcfdf0d422f2a1556eeef0fed49a4371a4922f6b133765b058447d4ada9907fd1c754e5efbc0abff4642e8246d7ad9d91d6e5fb6968f09b55d7391b7cb7304eeaf00ff760a592bf994988145e99753f3a24bfead73e75a907a324de5b73701b839f52e1b2e7182f4e2045547b44ae1c54c25f58cc0621e165696ee38a4e5e86fc335f4af8046e010d39326abc698c0da146c42afc7ba8bccf19dd7f26d6c2ff224c235d96b743ad5abc93d70f98617a4d6d1626acc35bc5210e6fd23e308276f9c1db117d360618c2e2e56523b81c7885b703012eb5db5301d54713e43d75322d866195cd95e62b843149c94146cbcf922b15178e321b73beb643e2c3e45c52f94c788f4be7882dd06bb6eed0020675d28e97866a09b8c4e5248121e1caf9feff7170ffb000388c778ce6b75e6f499d6ff7e5244d9821aa5b22401caf3d4f44f651660c3c0c6a3a0b8b503732c1253b8879bff58253e1c58d44b9a88b99170d5a46977b4ef8ccadc9d6ab09efbe21574c1cfcbbb4e608df392a1e28fea56b8d7eea3ea695e37717c5e10bf801fd93378aefc618211222cf56a83b543087ee766d46dd0f749b2622d0fde0976795d3f6a83a4ae4fc38e9a3b13cfe1d61013a536bfc74dcd5ce4c320531cfcf4251b654b9440ac3f1aa0b306458994ed8ee07a16d2aae111be3ac015f99358d0672775c56f8c544ea583ef83547b970af2913cc4a016d1df58b698292f574f4793750c23c08157581b057c10a464fe59d7789da4032b1b268e42d99decad90ef301850a24561401a37796d40c044b428f4fdfdaa10857912fd1603b9abc0e8a37ec6b74892674ec7aca23f8bc8afa813ff29af4875755b01d7c4208fe371babf7ec096954b8d717038d7c3cc0ed11dbd22ba772b4358bbf16b35538c5a922fdfbdced0e906e0be926d38cab9d809757e8cbb60e7aac1caf005fb0a9e95b1cca4d11f03322a51f9e5ae1dad9319418482ea97498a8f32a474ce50d39c969943fcd5d64052cd7bca2b9c678a18dc9917e0d103e1f56b1830b2895a4a07db2c34be7e734a92e2888671e960607498f36e793d67be1b35899835d9f8e2a59a4c0b3acf8b1373f8eb9dcb52742212c6ed6d34a1e00e34e6dd4379dd29723db16fbd76ff8ed83acd84b356bebae8df7a07ed29bc275fe8757725f1b35a88c3b8d954c9c4ba66becb312148a7b5c1d156c27593fe39255f913186b2e88e01da04de512fb3d10a482b33f2374998c7a87741175bc2f51bb795905db443e0435c52ba74b4eaaadf54a8305ac3ef4cf7f923b6ad26d45bf34e2e380cf66df59088b1ace168856026131d6ea8e47d03ce9840fbe69e4be4adf519676c85d1b4a302ff36c4f867138d572c961625219b22b572757a2e8901416ee20d9a7347edeb1dcc9bed0435f9fc5b9a8df61ed5f8385a17e342e6ac3702d0435ba09df7e3304cef365406be6850788219108751972259e084ff8e0441818977180979302e39a1b101fe0e2ca57cc09ac05113bd330f1776d058d6ae7e871299a6d687dd8011db5d160ed71505091f3fbe322457e7696f76c2d76f12e5a747e193224b582702ec9c26cff201343cea532b15407579640ba123dfa8845b9063e020ae70abf33aed725c1bc55e4d890cb161c539c8e246fbcbd27a9acae6db612b3ac811e48100d205589ab4a8796d47b1724b2a248a3841ff0a9530d9f4da7c051c8dd70cfb2146802863d71063b903fc995b26e57f20145c9baebd08860f74f9edad40d14732d142686a988c301d4a26dcf890ba563977ccc127bdfd89e2056e4b977185916296f2936eb8a0078a380fea195111073ee9e6f2589972042e12d45dde9ee149e1d72e1ca473c410e5ec8830f99e08ab92b24ee00054969fdd54bd7ff7d987a3e12e2887912dc26e619cbddad5ff2169667f9ca5aafdec8c612b1e096986bfcec0afd88c786b06588acc81f83436ed07c92e9d3eb06da018339ef33aefbbba05a2453018860754fe4d3a1b4857bac61328035396912e6b2c6945321ffb93585003be33219b60ba75ed12902bbaba538338d96c6aaa8e53b443368aa74369b42dd2ab87d05b62836dcb3c01ac5f1812d149e2b83db575266878138d00350b75ed40a6d6450ebe32adf247b0b339b956ead043ed25e9c1082dacb643a4820ef857a32de80471b33d89940fd7584c90c6c0f126efb30620f04656a294675b5b9f4c93f2901efdb322ed2285e1b6b32fe519e3ea87e716dbe349b0d4e760f35f61b400fb316a24af856e53126fc415b496e4a27cc79b606b499c356a3d8261dbc256b3da92a3fbcecab9514a171211552db0b114ea9768e9b451f7b467414806f5eb32194cb7d31cf2a2912133ac4df4a95d8d5a6a0b9b5d17cc3b11b787c20cadafc16c2b9a9f523d69d0550bf62b6a00f0bbf6f3ceb065c1b46fd95bdd1327ac9ad26761d92115c9b44ca549f0fe08f88d2e9623ca89c98d7cb3674e6caa9e3de473ef44fd6d0bcba57d20a3d07c98b4c0208b3b1824c05999f4b6165e4a8df6b820f9d8a2be8818a0880b005dbb95d7fbdae264bb6087dd63af93bfc998669efb730af9a13c30705cf40cf28080b1c76a8306965314952776eb2be5999b170bb560c9f2426d9194c52d7b6abf20d1b6ac84de5f6673e869443a231f038440562852035c4e8b547680c3ed55021b255cad68ea01c29a41cb4794666aebaa92a80803e91e57ef56fa33dd7a6b1da79aaf5d55ab042d812f134bbac76496446dd75ef2845334b56c77cf0d53481b67db24d522d9b7469793b13ff9388578eff25a14c22cb2e41bb7480058bcfab38f07ca4cad0f0fd435ab379bee1902b16e0ec474f1ac536d1635c31ce233d098d3c6749d413c98cc63ae1977465bf8833f2e84a0217a8ac0322963b3311eea6ab9cfe3f4463ab2ac818be7e4ba04fdfa3dd3bf3100b6564e082fe701d7983d8708beb42644bca33ca8dec516bc2327a7662660abd34f67b199134cba86eb6bb4c6f8b355b93914e8ccb07db0291bc66bbb2804f4908e5bf16734af3920a7bb6215b2feaa51bc3111caa3306951f8ce05acc2e69c822428b08c4958e5d7ababc6207b90689d68d77283f4052e87f4e120a676139c007bd834668fd92545984c899314c68f6def6601c75d95c5c69ed047214aea980359c17d4781a7ffbb5d599e5b29a0359c2388938a4de92a134c08f24e98cc79a1bdae54ad6097c8dff318c23107aabc709f249f9cdafe7edf0ef247f55bfeaf23f1376f70c8cad7672e51076a12111be7f47addc8fc0800925a800bec42fc61811591f16a48eda63f22d8b48a539bd38ed088275cdd2909c27b55f1f19ae551410635b35fddedb6285e941214b7bd1906154a136122382c9493f08026075d3151d84151118c70bfc8b831b2308ea741db939cb051099faaff11f324251161bdb248b451f759d5d7b08b418c57c25ab253d57f0ba9b4a842188572e6ec4ff04c20654c8c697d420300940af9309df2d8b594502553fe99ddafd12a9011e09086b03713ef0bccaf52ba3a5ab65751208e2b554c14f9fb7ebf2e11fd753deb82c0210153da14088e642e1e408fde7420f8fb33c2690142ddbb54fe2bd881e94166427bd3e954d0eab93c50ab092f9b5d0804ad49d6ab71b40c96e2cb3daf3b49f9d054c9f0e2cb1ab648d5ff04e1ab2e46d8115b87247494ee3e081ee7b7104e5ad073330d056f4e8daa91ffcbd01832c0fd2c44b450a9d033a812cb45a0b9e588317bd664b34fc405b309d060f4560a331ddd1b80efe0ec008628ceb59bc6afc4e093cf796103ab4c98445de879539207984c273bc61010ae96e5433f0393742fb1a59cf831d5fb48c3de354d47c83492bc245646e806b9edf3c31b64568c27fd10afbafb50d5f8dd013dc4ac1acc42688e4c8072a80e54ef1982e6103da3965d61534bdd5527c4674d75b55f198a17ef22b16b3591a3366e7537f501cb21cdd98185824a621e19340a5eec0372486d8882f766ac0c3b3c5e0a95da85b5021df3c0707ac6c96e1b9ef61d27c38cf281c39540ada7886e729567dbc7cc27edc2d420d422547157e0300803a0c30cdba8a98e1a071ad475288f1d54aa506b46ca9473670158bbaa70ffae0647c0490cf8b5d420b3f63beb1278576c29736ae6fffc406a957c662e7d1c3da443a6dbab02645c3c30d9a5cb57591dcff380a7e1f2d322170d43773148112589cbba29f7c839a8b25ff9baf62cb7fe3fb40eab860f64b094a6dfc29514dac01b93ae12adac9c1d8b838810f47a0c4776a31197fc86b3e0c98e374f24819fc6ce57b6d212cd2c826a73429ff99288a741c44bdf73970ed0afe9ec98d98d316d587b9ef7125359a368240f36eeb44787e6d3e9a3a1e57d50c63e982fc0d59248ec02b695d40f0a356d204ed1e723fc566fc696164fa24fd37a24a7b5bc567b306b812fbe13ebc61fc28de5c0dc0224dc851fc2da2f2ffde0edeaff131beede87c86c20a905453e07f4a6a4425aeb4bb516e60350af77423362e50b0d5d3bc90544a3501838d32c28092d238bac58eead7e35a9c6c89f27821f022f5b1f3930add7d6c872c29d227a049165f4e857abf114525a6ad1104b33712337b48ea08231e095c603f7e6000bd25b3ace766b05c85c4850e8116b43d2ec643982cfc1c78d1afeaa1f9a457dadb2f5122728be019ded8034607a45c433d5593c0f135c9de4a439a9772d44fa468f288a3c9329c1378ee4119dfe6a2512efec7d9c2eba4cfff10df2c64b57096ef391f866b7327afbfa886c2b9f9682414c578a3f8452b147199e1dab9808ecb75b3a49a66e91aa7ecfbbb64f2c19640356bc498393a1279653a88e4231e0b45564d77fb809c39317c34bc9d3e40120e0456f8c61c6e5f7c01d846c77b1c27d61346afa49e35409b2e7758a7c4f85aeb0673d997e06132b982a1c0944bd0ce06d5889ef2b29096c1298b9726ac5666e83d6a4f1f63fb0de3775700aaa99bc18c004117071544213d6ae5e61c53a61e21391bd90e4f998546325f5ef9c9bf941515014392a9acaa24d82092a4028ddc5a3c8d81b341c13e8df01e332d98db8ecf1f50980ce026b6508202dbbe394e06da0754aaa66653e4bd98f99f0ccff36a80b2558d87243b500731b3f211d0a1c84a117a6eea7ef55362a5580dd41217217fe5ecf189ca10e694a5693bc9e435686514e893ffd82ea5a05edcedc2579c97537c842a9b23171ec48cb0b429177399b73d8e3a0ed58c3988237da5d823eb97707986316190069c248abc4483bd3cd1891805f719d37fe72159837606a38d4409c7b03063a308e11738eff847b9bf6f18053f90a60e34768c5f080ebf0d0d97cd46d48660bb564d67e5b40c50ab337fec38af4e38d0e60fea0a139da73e4589763f3ea063ea6f56ae8533a577ae760bbc10a421a1f87c6d8e52ebceb05a75c2976c6f0cb346f3e3f152292b58822fb3761495e7abda359d59c45896c974a3a1b2c2f73febbd931f5ae2e657e3b73cfb8417e4927d0e1b797562844e50f2f5edd329229e7464d82d1462bd3d59aacd38e401e99a484db6c621b22120ef3b59a9bbd312f9a4a2e21492a2dab29600dd47960436a7107db47fa5ebf27ab08cfe14b76491d9bfc1ceb583ea751cf926738abe0d69080f702f52c015f2d59f1c944909f71dc520e63ac456d558e3d68ca377e229dfa4af37cf135a422f923a18bd9315751f9eb6b60962a42b1dc199321a7dd10db835e1616b8d1f70a3ba0fb279ae0c6898bf669325d7b9f5fd3b3faa3792c4031eb48313e60fccc98a8593ee91528651aa27d2495577d1ee6c47daf4a53eff1c3572b7e977e09d5ac5dce020f3c511e5dfb66611dc8e65290974014ac92d6531e71095d34e62c7a4b4392589ff643364f3ae532d2aa3f17ccf73aa6059d5d521add864095d1b38b988cb790514358570bff275ad6e55746ef4e3e964c1bbe10a23d31e5a8848066ec70797556118b47fc6461aa31b0007ee8974e079c6cf1d1b199661ad72bfa017521aaf9a6a3bfaa03d94132716b96c850a5a2ba185c8cc32385b42c82a488009f841061bfef42ce905d3ac09806acc66f5f92b9e021e9d167f803803b2ed1c1a5c8780d0d4942f99ee8933cf2989e41c256b7418394ae61b94865f9e4c35954f8a3e8affc7ba15a8f4caa40840b6f5202705de8e506020176ded896c92d577a0c063c9b2cd76cf448ae034fea4f55514ddbc52a2542b292dbcedf2d7a287573a3bd261b37165f60dca0dee08bd333a9f14c1e3155363901878a5e8f66334931aa3c928bb8ec0c0e317c60f6789bbd22878381c678a2e4e1ef46628f9082fdd9d0aa885462b00b344a9f2d1e04c15ec95ac4b03ffdbfcc8103f821d9ca1e7811264e998da0f3eb7c712309dd61719a27564bce111858d4112efe2c0389b6b839e609e0428ef81dd50e36ec9d9285b6e4468200f2750554f161e31828de04cc715fcd19a86742a32922a2c634f1052ce1a8532d0c7d219942e0ee3030530c6668fa12b66b40298cdd71ca0ee54d7d778e2fea5b5291a8ae212dae88bcc9a4ee28bef9af3d75780c6a6c05ea3dfa7b0236b8b0b4f7b52ab9133c1c33617fd273baca1e583674eba7d448778b11e68078ad3610ce97accbb2e3769d26cd388e05dc451b4275764ab44c041a02e3e22769b984574a861cfb578192857b489a0bddc3d2c43be38a5fe1a64fd50cf3cdcfbe2abc9708628f363f33e7e1ba5ed70af8ec588e173eab02986e0bb11fabf67ef957d004750325e97f23041ee89f71c2b40992dfb127dcec4b6abbb33b7d4c3264e4d3c90496b654c000d4d6c3a8f27b4f62ec9836d0f124763464e2ed71ca4af3d610c66587f06d14619d7b4405bd63a4bdaae66f06a4ef61c23dadca3571aa5c3598f964f0e259b163617a385f99d4705333ef45f22e8d2a7ea700eb619cfb56b3697551df5df8f721a578f2b3cda8d8d59e9105b567ebf53e2b4fba0bf1de6a7be54be02cc5e1d0015848a971066170b1d6b507377d52950643f9221bf38cec7285e1ab88723582a1a360a0f1c38804b5f0198aa082fa8836750db416cd8b001a375a43bf35d99b535e0be8b868ee40ce4cd5096f4c9f22953cb29d3f305224dccce59784f4298f239b3d12799c84fcf931e39a4c7581e6973f3a47fa0acfcd697eb8fff5d470a5810d4c70bf71bfd826d2334c7a2b60dd5a13e928130b1389bdf4f55300a6ec3080587ee8e2689df79e41c1aa1ee58b5bd190f0ce10bcea29c1d44911918da994a1caeb4c3272077b0cdca6f4043ad600745ceb0a40e8d94bfd84d4ace5fdf98e003bca09b31e2b7c07e97037342ab21cf5f5a2bd7e9eb8f5708c5d89183fbff390835d0856ff1b9314707ad6d2500abf03217d466ea1b1b3b2e16f4908b633aac110eeddb0587dad28e499c4e3a6bb83b91ae55cfa06dcf757490f1be10a1c87b20a2e64321a26e77766f15f5469a95e322d362b7772debadc2adbf75a7b9c5a129e435866f9c103c0a234907dd0520f0b66b0f4ff765c3e17aa971310565712d075a2f7823b082878794dc6ea29e941ee8ae29b6cc2d86e8bd414e39e766ba361c894c472d29c651361763546289ef000f7ebd345c7c3aaf621b9b1f27b1dd093ef9eaaf1165f130cb6438ff2f5a6710e7e26b58cb980a65c988fd97a6fca68d2eaf8fd5ceb93594f3924a3ce23c42c71b0c334238fcbb2772221081a12f8d2e23ff78cf785d04529fe2a6fd9563fad9c6dde0466bb07b30812cedc1803371d81a954bd978615cda87eaf7e171b034b69ae86878430d4abd85a2ddf06c95f2913a6dc1ee09270a0e88f3a574f351c6d8a56b9c63ee8ba9b8f140a6be09d557390b247a90d06b5935d8dcd94707c830802e34b77fa6935f6ea0b88a58cd12d5240fffd8d02669d290df3866cc01635c1b1bbc72534ff75d5367f30f38b7fdb10d06c24bab25916b062f46dececc667d58b60db77772f9fceea9119025502aaf9926c3d82448a53d18166fb14a895aa034d5d20a0e8cd6b8ecb2e9e99da54a29bc0d452d26b4df51758f535bd326125b960f7f9d95116183bd48346e3ddd4422c32ccb21e94081a6ecbf51da9ad96722793d9c54d3142a3640308052e1de2bbae622dc06e62c93ca69199c9654bf7a5e22e4148c5fe3bab21de678c49c222b136d2d15ed67391d380baa7ed673dda194b207482239eede9c14cd8b193fc5bff6422af3e745a7c05bd16a210412c330cdbc81f933dccf94d5b805dc4b3e378f15af02a052d01a58ff51d4b34fbeee71d3942a63162323364ae4e433a4fd9b27d5ac090e14a73e86b001927b3b4b2691e5b562e2a7d3a03b721f90f8701fb93dc3b807c047a98ce87f37d6b3ee697c97e6deb65dd1774834a8e0e42a82d21a3153f81993a3743c31b0f71686eb35b9efd6e33cc4c2bf10ec9be084b50b99798c44861c1c6f35dd3f47137bac845a1e31c35ff47bc15c7084e849c08bb538e0d41e921b44d171f61f021883718d47f1ef66c9a2de55b23a9979f85809a46a482021158bbb0536b7fca556bc7bc5ed0bc65f28bea705a931dc96e37cf3be4c8e829df7275524b4c0f071704d77589789dff2a3a7eacf9adbb985a9378b1ad013d2cc3f3fe734ea6e22edd39eca74daf1e0701c61f122deb60c7c5dbd3d363c06dd50601c17ddaa5b42d5c753f58eed12c7a6a09f71942fedab868b8ff9c0be555aac1ab6e940aac8ba6f1bc1103036b12036360c2122d1671ca4695093314015dd7ef0a2f7dd9554ed9461ac24257cff8ba984877e313723d716b717131748e1bbf8c706ee8e208416ee4c5c3b4c1dff5ba4fe2ac325841689adf4425fb90c469014661607619f352306d43ca22953bc0a99fe60ec86efb3b339246cd7c277602f876e27cd6f0bfb59763db804172d2debda7872a5e6670e2642ed697721a43be95f19b8a517a0165a433366a7370d282e6584fcca507fd5c781048e6f5aa08020e8ba82ebf9f6b637965c43c58973f65e6d4dea3c97c90889399ec3d9cbe93f0afdb132fdde357b3eec780004cc029ef2cfff5569486ff3d5b54f6eaaa71f89d318ddbfe3d0ccf579890aadf7975b8fe3d26c406f8e1f49c6e4c893004aa5d8deff6f916e01aeb5f8633fc82343a38965044ace27173a1ca38d141daa887c264b238fbffb663f4c8739f0bcbd65645d9fc8921e4372d9dd868fb32f916cf33c7d3668a3b516f8c9b182fa9bcee17f493faef4619abe424b060d80dd12ea924d224ec4834b4523f2205d85da246f24d5f9b7f6d0aa86a31c1b4d8db80505d93b50e5f02baf132eba9c598469bd78c074f69d41fb8976ef89f7baf189a5e3d43f8bcd732f5d037eab194ffbf9f3829a257c26371b1dc41f68783d1bbf14ae28ed33368a2a3173be708bbb69d6e649eeedb7d1cb36fdce3cac6af69d23afca5ae5290f8fbb8c236fa0c987639e45c05523c1a5b0bd2644e947e6b437ee56f36f3cf5bc2b8d47a5ddd38bd58cbb1c3b1166b00be83b8a588ee13edba53f94530ecf738aea234f4ca65c35d19dfc3c93457524a7c6929d12f8a69ba1a2957da4b6251ddb053acb3d707e7d1d4d8d50fc7671fcc4424a48e5dcdd9355a6c8ae9c29b9eac380bbb67858ac856914b51d899f71d8460434264c372f4a68f43d5a5883e1680ac31b54564802055e9f3b5d3d8749917f7814ad8c944aa10676d4c9b5cbd849e75db0d9f851e6f51fd1d19b8d8bfad5b6f021476873b839a9e1fb6080686391f66c1c1f713168e6fa829e8d1ffe5bf7082e35f73000be6fd64eb05421f31e6fb47f8e3c212436066c8bb769347b047af81163552abd74cdc2841504baca39385add35050000800a27a72630f3375400000000564f34000576ed7787cd6b69663e174fbb98dee1b066a04b6027ba90edf2fa7ef15707c27f000000006a47304402206ad69724295c3219767f6581f5898cb912207c9e25ff594528428106cd0e3f47022065791f0be7719a1c82270eb2a5ee904c2d241d908c5bd9e2a5db7728e4c4e72a012103ce9ba58a5a99296d1e5a83497283c64335386a01f7f153596ce8fd3a09551db3ffffffffcb58ae0250bb6de9be0365eb24ea3faf990ed5a47b3e7b724bd5c062795b1775000000006b483045022100e67fe728822c440c244f436e2c74052429e6601dbafb846745ea369a35f32e3402204f41992f3546032f075276bbbbbd6854601018104473a1429d42be1d6a932d49012103ce9ba58a5a99296d1e5a83497283c64335386a01f7f153596ce8fd3a09551db3ffffffff9b4147e92fb86580bd7ecf07fa1d4eaf8e3ef5ec9946fbc230af898254356505000000006a473044022057ee5e42c1727f69a1bdea9ec18c8b0ff2cd02520c2b6fdd4b3ca54741aaea1302204aa706b540804843a53f0dda8aeece79110126bb5adf3520d014d60a05500e63012103ce9ba58a5a99296d1e5a83497283c64335386a01f7f153596ce8fd3a09551db3ffffffff69bdaa62ceedcf3fe3c58bf4a7d9b93d8acd231cdc8fa2bf35e0d129a878e7ea000000006a473044022026aeefab2ae1401f105636b0841e8a3abfbb6e85e2de6c0f85abf4c937f34017022075142499daf788a65cbe40af086062b3ac47ba021954ca6128ccc1a8efc97840012103ce9ba58a5a99296d1e5a83497283c64335386a01f7f153596ce8fd3a09551db3ffffffff7d0a24d15e6998c3ff28af6b1a4ecc59039f094406156a9dfa9cc5d9df14aacc000000006a4730440220656fb1b555453b53cd60b180f8ca07d65b1dca9d27a1da7c0fcdb7b4467292ea0220011d2ba9815115fc025c0cd0864583ceac5f84a6e80fe12be20440ee847b44af012103ce9ba58a5a99296d1e5a83497283c64335386a01f7f153596ce8fd3a09551db3ffffffff000000029671040b76c8dad2841fdbe8345aece2c63508989e2ea7dc98f3993a156fe6ada0f07160779c7eb58d658e3b468e33087e6d0aa0867799297d1cd9d81bea921ab7d16bf8ed3660bbc1cde18676f6031921224ef34333159f6b05b46b48f5068cf34203764c86bef45d996abe8073e88b2f3005a72f21286a7d5dc60950738f14dd47cf8076e48bd0de27fd19540bfa82f221d65e459204d927dcc375f137763268930a2310b2152470d5d251d51f10fe611624889a2c4daec9e1f9a340e9b513476f099c558a3c324f4a63d768f222daae83b3fb2195807a1e9072ac163da95c6c020f5fdc2c88f0410eebf82c8d3636d44763ce45f507d1ceee5d858446d1ef8f7ebb2f7e534bd63616a1f15d076f41b46aef02d273af125c23e88577c546ba4a43e030494ce7df6e7ffba4906c8033f51b47386b66337baee56132a8661c1146728293f4886b5448bf79438c803e8131d3f35b159146ff12cae092e919f838d8a7866bcf6140ddef8644fb0ae272f423805dce4c49cef2f2562b7e2bb7536069be3a1de38421c7e897320d15ddb524dc1b3357e963c87bbf31288c01c149f933eab4b351f15494e5d34524895ec02f97173a6b79a398d4e406b0939ffe988c3f744fe440930c360aa5a131e57a4c9a56e47c1a5e15c5779f10f377a134f93fc8423237f741c63ec874de899b73e1f74cbc66e1a6d16c10a0cdf3f2ba601468bd97281b52e27747f81eb86259eb5d828902841d83aec59d1d60bb1bb91cb6d472268c8890aae13572fc9b5a39998f30163bc51ca08fe8c9ea50914e930770311d1fc5f11f99cfcc23f36238808930c2d16fadbbf7d2df56fcb441d156cfac0bb1cfa026e44e9ce1a7aa523af1738bc662dea0b021b1d6a5db01e2b66b0ceea81b0d45bab9ac58c76b3ca9d80f32fae0dbad4cbef69c88bafdebbe0a495d8745f5b062465c2602489a1f91c92f5826300b3a4f2eff3f6bed2fba1724a9fc9cbfbe0afdbba39ac8d2eccc3ade693dce70962a4325839a81bdf0eb3782037bda7dc0f1bcaa86d76cdbdec09136ce87f6b4b2ff7e173838488324ca3d2eabe861f14cb4cb88d7bd3b18204aaab3504675a95b1f5be1fdb7d0c3206ab6d7e355e13e1d76e000404f88573cb57dfe27a40c59eee302b9499a75051e2eb0ff103f380ea3afeb2c0d3d94cedbeea49932eb54bfe1737a2d3641e574ba0a9be51015c2fe831da764a03de48e9cb28d4331f4dbd2d896450974493df4c2f95defb249cdb9e919f4f9219d2b8cbdb3359d8a6bc9ed37c952146340c5ea259af5b26bccc9babeb5deb6a0640371d8d7ad8e4e84a452c96f1f1712fb11f510713dba43ff072215470e6051487f29471fe5051eb6e21fd3d69c3368679cc663ee725b106893e50d6533efad6cf2833cec6479183ddbb994cead12d0d7f37389cb46bc8732d5afde11ddcae4216a3914094b848be215726ec62c0c64b4e3ca16be4d455dbae033806419b5dbe4bf953e2d2841e28cf1cf2906e150a83958445d26a1eba636089be1a2ee059c90f476c1bcfd3b3d871bb55866a48eace4a34272b0f3406a5f2e619ff23c74f0341941b9957e521112db551e817380db285777accf6a9265e821537baa86b540bd2635209ed13ee0d841bb3b86ea5134df85fd8ae7aa898cf734d43d3b7404c484efbce90f61fa006f167c68a456ace675a15e7f495ee011295adc13f8a38f33368bf9d187560f1de677d1e912fcc448b0c43ca3f76e1e2d3fd149b0fde4a0664b710591c69b0c2732575fc14c38c30bbd36059705662ddb596abd0f321026f409e60eb70a22000362fca15b228078951639edcb7525e5f4fdce2de41aa13086cd64861a4ac406c5d813b3e7580035c67663f432c3c99984ab57309c3e7873ee2b230ecb833bc92c78ef6538de0ad6e539437b0b8001581f4878df63fd579b03295fa8fc1d77afa085606afcc0257847e3a7e6ae6cf196d0c85b6d90eb509bf7a078821af88397106761deba01d7df6055a34bd2db5939aa796199f498a86c2b9441be01908096b8f07645e9e9f044bea1af51de2ef33aad67b01921b1234a57bf790de3c957902fb89fce103308ae8bb072dd25e4822882056b57f296229681ce73b1be2129ad6a2aa3ea354d0ee8d751cd010059b061c14a49d0af4a06e0d515b6daefc90d1d836c8ab6627025f85d8cb2f813ed7abfd4fa66f05dcad0470cb03f0f8db7d9d7da4146a8c3f6ce4112594b075213484f05009bf066aee211ffac5d9bea3eca444b62f7c8ccc2e8fc469ccd203373e0a98c0544a42b6397d2f3713a8603b8f8d0aff6ffffff32ef86c9ddd4d9b749190bbd151664524ea253fe1b8c08bdbdf28767200db904fd601caad9c6e554e5652c5a1220fd0682f104d1bbac77e94da8313322ea1dd1c709bc24a82d05b6ee6cd10947ff6f9254ecee1d7704a6e3e652fb3fb2b75db455f2099da1717d246fc946332382468aeac9a15c7e7cf090f6ac4494a442af075899b52d3062a2d7fe87cd856a2316a331ebcb50d5d83d331e9299f42dddb121762c034d5d945ea030585923df831318de5fad788b51cd1d1675f2db4472c68c5d481360e720ed4cf100c6881da9eea9e72326c08563dcf7fe1a7abe7c79241d8a6199c964d59e7761f94f4800b5c4966e5330dbee234e469f14badf33fc649af6d284f357119f61247d3cf23a897f14fc14709913cf370de6e21d1c99a5ee912af49e2dd0676e7911698f0c4ab7ab224373c0486807320e1c5edca3afe3feeabdbcb4dc263061067448b716a71952266f28f7b4cfe974532b71ac0cf13f239cbf81abb530ce2c877f324e097727a3af8e94a66a4c631b437db5d72988f89d86f05405b15db7716fb13511c7f715f6fe299d8b22b288899c1b0e4b2fda8f63b23c7284ae1c0f58487b19575e8766d9ade9fe2040697590d4b6f20e239e921b1135bdabe6bd71ea3a55f79b815a08e0f9bcabdb50912d7e003a07a1f6e77e939a22208ea0c6edcbe4aab96ffbb445b1610a2392eb104430ede74e2187e4818f8be006ac61cdea8329e779d60a8d3c66636dd3c435f14d44a611771f9fcc0fee5f6cad3006d3067486dee7e461945469d973d6106041fefa9e0eba0689caef61ed7c5c8d0d2a3647cfb72a52bea8f542ae0b59395d0e40a8bbc999fb464915bf7f2209bee1dff0069e8532de802fa5299aadb1d79dfae6f287bdbbbe04ce3e643d35abb62474f81bd5aa195dd2b7f67fd7b6b1f86dc2f8065421ceff156683c7cec3a11737b602962f339bd937e0f96dde7d09211e17be4ea48934b0084de195ec05c217e13d41f76cc8eedea160cd9eebee2b8be79b613e3726fca5d815c2a044a0518b9c7d3016d82c69de4a0d89a55a60cce13886c3b42a79ceac125dda6b656956130558016433c1b989d95b5344763ffe79e1063c9e4ce2d544a9187827c6e3d81e61bd44d77ea82efd6d74b736db84537c39d7b018668b20eb4ff02492c856513f8acf20ee1237ebd765daa74cff46cc56d736dee1178a29f83c9651a552ae92200fb88576f769feef492430cdc3c25060ceed1e810a4a447a7100a50b22f0f9238ec510f6f78ddae2479cb43237036545296895ca7c3615d984f3a4470f1d502e76f30003e53a9d962a8d346068ae8aea865270f3437bbae3afa2d0a2ccc9d9032109c873fc5f273d10b7507435c94a3823ca4a0a50f0542e492854eb57fb1bb4d055dd3210fb8c30eca532b28f9a1936dc37193fdad75a81fcfa992fdc183ca7da7fb88fe60e3c4536f13e45d593c79cb4f07f67e40a5a7147c0080936c21c3ceb74a62d696161fab9e9b0b90b656cef20d8df3dc011408e1e81d4cdda9ffc07ef37d26052643e92916792635893707bd042202bca4561396afc7a055871eb9d5ce5a64cb7fe3d094c3e96fd7de5b2a45421e73b93490046347027f3ccb5331d490fa8c2250ba0f7c3b2c8f923eee46eadbd97653de5cecd302ad54cf11b01150fb8041e18950f196db41cd0ba525d13ef6df58d6f77703a2124ffc3e3beb79b1f6d3903b7dae4a962f8516c9a7373fdcf0047f50a805d7b5bd40c98f0e015900d8ed46ea84549738b18929b99fc9c34752cb36bfaf5d628eacadd8b3f20d4bac4c935c6de13dcf2afc9a68d9987284607076166fff4c161339f5bec34988ba624d1131a2286f6b24d6aea2d76891ad889909ee7ae19638571dc74ae392b3883384686b1e9013a4d279e29f7ce966794584ca43a486bb0a3a59752d008f3288e6a4566ad00360317e12a2044f4d0da7905b3cd05511535f0f7d4179517d52697498de47a8f6bf3150071a0585508e65941af13c7d682bcaaabc3c6410cfcbda654eb59d2128030f85cac250bcc19abfc0802efd1e8b0208854644cc01f70f5b4ffe32a010e5711429f959b859e94368751e117e18d9b5d700275a57eafdfb9ba8ef16d556f708384647d1c658222e43eb69e0d197feb655eed2b8bde1c08e882dac066d465c90097ac158d7fc0f9aaedc53d2dbcca52c96bd6e6ec4bce3e99065d09992ca76ee75621b34bb8bc39554be2c705168fb13c157fe586c397199fb7419d137635d7ae7ff91352d653c51c7fce7e1cca8ce847acf06d941a4fe30a12a702c60cb8299d1109f638ec849fd361623ec0474a7635113ce5e6123331730983257637a75c7b00db9eb70cf35b9f215fb8e460faf7065fd3b1943cd039b61fdb502986501262ef9f15f385549e3f9ee0af1edb1121ed712c96d97e89eb8218da0e74d0e65d17995ac26869dc36a37d5ea5cd83840559721ad009cfb54a9404d0d1e4288f6098c3002c214599a2f28e0d6e20c88b7249be565af8001554963962e98bbc42de15ba1e01908643d4185d7c011a485df40981e8cad5ac53aedb023982f01a05a8972d848e5315a4f257d9beaa505cc14ab19fc912f5bc6c86b31ac0f018b6edaa1685ee79a6e2b3aa76c14170c6e912ce3554f90f1b5f23b4bf157f08e4fc33271062275311169af7bebb34e4ac36f728d4ea65746cf0bc8b602b90ef5c3eb5ce5b6d7d83652808cdda6f11b48daf5eda8f053306c77ee4f59c0a4c08e32170678eec613585880eede7982ad83dd8cbf1461ba840d092f36cc008427d92d082fdfab1092f869e4f3008abcc0156bfcb92897c7eb008337ced9a0bbd596fe38680b3294ea785946ba1b7bf9bd3c474086bff6c9a80049c6b28d3230927f158edeb038a01195300dbce20ebf1b3328135fb045dbf8b729278eaa71be9c949e7a20178449eb835ed572cb1019b4fcd19983d5ee6428ce44c18f4ca07e51f258aabd9acc4afbee1e9a286c5043213095059fe8399e24e4e26fdec0c010bb194e746305cfdcc9dfb16833a3b15d775b5c4960b8184d28d94b3b473dd019ce8aa5f8bc6c74bf9fa1227169489bfadeb80a4f3690d0fb147d9a6ea03100e27db96baaa9536fb676b57d8ba92978ec9e4108a2c7ddac15a4ed45bc887682b1f650de8238a337b7bf536b25d8d5b4d236fa95c12c64deb255233097fa8591bc661c884f829dab774cf1f0429dc8e6e8ae68fff45f7568689350f07c2345e26da8311fff2d92e10c6f3fb5b3177b7ece09cd4770ff25d28c75f02681c87fe381c17a8340cfe61ef27538d39270c23247ecd1b4537b54e0061650e7a2cbd6c064cf2ff0a7ae1425063fab65aca3e57aba0ed59992556c1c9faf15d05fe67f828c7013dde63d968f1bcd745b8d4413e517ea0bcb6b3a8cd32917df72113e4013f03d91877afa57b2091e4c178e4914fe7853cd4c3f3d93dfa363c952074bd8f2a2a9d3a7b81c9d7bfa8cbcfbe7bf8e059a1e82b150bfe994d8085951f38ee9a0a8417fd58893fa6814631138a0b96bb9983830d9da6e6ac7d6c21ac84cabd211c686cd9e4271593259dc57fe27633431c03e1bad26bb142d5276ba002de10b03656bd66e6b6c8e0505921699656916825ac64cced68aa02102b8290d71d729c2c7f21ac228bcd65004a560459cd1cba028828f5b2bbb63d83aa89d7eeeb428a15a028a1bbc508687fa00954d3e22e3b085d76cb9006b2a1d4d58ac313e192100dd99b53c21992d445ca23038b246d8c114da1c2f89e79156f3e419ec53fb32321a05f7a5037271693247c85821359b0fc0d0e37cfa765603f449dac35e5dbba19d6f7b916be5a2ab427f60b807c8ef3ab798215b422306dc684444ad9e7103c1f2577a63218083e7d871ef10ea70786c3694721ad4fa6677648a888aafabba619915558f7df03c63cfffd40c3a8de063eea0ac8c13ac64f96f17c031dd5f7fc34723800a5426f5d0c66d7c1df3fa869e48dd3d9e2e84dda487d5fe3c2cd4be91aef0e7bc971dd9d43bce3157fc0c5552616872f5b8ccd6d8cfbd8fb742549c52eec6409dcd708a502c128ded3d3437fde8bb72dd576285dab395c866b20d60c180e50bb58bb6f595ca37c103863c159a3adbf3e13019c81e5f1abcdea1d774b295dd158996334c5aae905c4d2685e7455791ee638b95f874340a49427931a82319b385312530dda70053b41cbf7197608c4de3949f7e2c7a847ab51b192ef7518dd0acd93fcb1cfa52ccc924cc18fd5c6da305e01adbdb95d966efbc802c3240e7438aa2a3248fe31fec2d8dc89dd92673e8f73ca7f20febce52c5c83a383ba3ceeb8c9a8266a22eff0e5d275026573c1510daa7681efea682cb3a560e9344b3946b02edf3e4808ce65b8a9e6f7bb68690b6f223ba96fd8e9aac91d2a175f0c1fa64e13c6987f99be3c71b6b4b45a55cd2d467cc80fac960d8b615276539f9d3e2143f9f045cb9660eef789467eface5e86a30e1914ad3bdf3216fcdef6f11d21c77957ea87f3755557467215c98b41d4c26791c0d28e84a00b8e415ef17b7306d95f3ff2ed44789f67fd19cf508521ef271d4ebdaff79c0e4c4b3a07164b3b190f6f465849edfb4c67167453091779c895c5376810970ed11a08d729d99c6418d500d659269c1848880ed815c9757e54aa573dce3242614eb36b8f46b5816a1d1df6a0c1973666d0208a89ac813d4932ee0e9798c08d78015e8e63e12ec9f10c177da8c5a4c537a1eb7575fa55734d312bda275e7da64761455f8523ffd47b14a453cf51043ccdbde63a428b838cb8bda832a6f0d2fb45e8b7e8343823441e10f98a0f90f8fc0b276ae61681239bd83aae099c42c8b207b8b48988f0eadc262e8b2fe5f7da38552bc9346eaa68594e909c803d102fc2adf06f9e3f904b1e541ac302289e0beb44357ee51102b5fc1b76d6680193575b756ddae6c5366408720428986f4170e0fd4d061e9e2e16b9ffb83c22a02533f2a263fd310bf37be300084e272d48ffb477bf967714cc4108f20e5a06cf8a392ba0bc1d04ed4a4d7940073a95d4a2a44c785671dce7376d913cb61880e7097957aea9794aeac9c20a770a98e220ee206779cb286b1858965a60b49b9d44c9d2cb34e4faaef2872f03f52fce59e7577e9baf35002c4fa9aa65236c61716b7e22d1e3a23d1ed4a5bbc01026e64d46e50c5975338487f9b863123d50aeb8e06fd001d44a68cc2697998b391634af51f1634f5a38d8fe533538e7af8cbca57c5cfcca6a84d4b7a3783fb31203c8b28117f38f06d5c4107ef313127fd89b6add19cd34712b3fdeb3991e0a2b1d00a53e4f4b84b394909383f6d2b59609f83795281bcd048c87e80413c716f310a5e0e9f445efd790c4dd2bb60aa95fe5fa8421769c7d6ea0a5a863e37c14011301951f67a4071537395067043948454ddd224bddf62184a4eab18f4f57f25b2e83a566796d111ceb4be49dca4bce98653873d54463562a242a69672c2c093913f9d6da61f792e6c46cd01cb397878f6ec9a05a3f47ab53c371f73b3fc290070e9763e60b10512cde9072ad6ace4e65db29e9d23c4ef10a48eccc4bf22250e311fe0fa6aeb89ba77b3a0ebe9f82a67b2607a6273357ff823dd3ea4d689751ec0a642c1b3adc390821421578fe9e7862c12cf246f69d8aeba12cda4dcca94993155fc304e555db87d3b712a25a532d5538dc28448729c209d18d1c8622e76e7b2f0b9014b23459ed43e8225953577e55c7ec4e000d58334a0c4fea5d4057591f07dbba044637135e717040f268503d8a1ac1f124262f9080b2bddac036ed6e6e0e31d82db5b05c222a53d0c4d35c4a4d804764ed019c9a287f1ee5e7ae863ecc0d5c2dd2a29f9d8c7a58bc5451af918ebcb3b1e40a6ee71e0dfef7cec32f36373c6c2f742b38a7b11fe670edaeb45c51f98e84678dcb1323ac5f35dd1a2d88ee0934c5b8c29e30b4daa15d16738525aee87a9f1fde3647e39c5ebd06e067b91f0888feef807b0cd09600ac99626b1ee944ae74945640967ddd711160fca9f7ae23656d4db952ab7e7c2d70070b179cd9b0c6ef5095d6dcec9bb0a9a8814eb0532ed50a7158958c40002f65544db0cca190ded5a8f7fd424789b83950f72ebb77285c371a04930415c54789a18bb24b61d60347dea58d0960a4c83fbbee6d449907f50803572dc118027f1fc88d569bce61f136db56faec18e6d6e6b92ae043293e30e22cf543f160b532250c459dff1135be93f3030872f1a292c568f3b0f4aa26651350a75aeab0744e9d38cc5948c317dc3ed9737964101ae6d111adcf06563b92c36b78c78de2facfca53294ecaf4a6fa5a063432c931d2df235931a2e67e1a2414fe712a51319c1e09c3eb658191425699f438091215d32af453cb6a0a4f3b3df143c209a06c38a03870dcff9d1bb7b6dcdc84d515f8aa7137fad2ab878d1376d05d8c95d81175c4d7fa4eeb1bcf191915f586d115d0a115cdf2ca53dfe0226c404773d1521e4f320e493d98fbcc298e85891730a9bff370d5697742d1dd285531f193c4882183b0230da4f996ee42d420ddfd985ee2c8cddd574e8c5fbf1f43443bafc73b3752cf6640f5d360b2ba1dac462dcb7ad8937bac2e09c892901b9d747b598705fcd66c2f5f038dde37fe1a84bfe1a4afabbb5dd0d5667636ed3d965c6a49517921da047749d4908bd82360bf6154eb54e110f1644feddd87f0342f6a714ea5e0a6e1078736d2d945ef17de14e3bb443c9a1942a58377eaf5b0249ddaa763f9ee7ebd5240eed6c8a88530a4b9c10aa1baae416da97a1d23268b01ffdfa5635cb2c7596866dc3414f487c3a3aea7e17732d806b91ba48ff05ee63c231bd9f47f8c8c28627f1ae67fa18a3ee686935b6ed65e76ea63b826e40c893d9668dde6fa14d47b224eb68bbcdb61cb82cf156f847140c66669d2b3b331dc13e505a232201b0ac4248ec53d015351a0e88fe5a0e30c70b95c00d48b30523e14d7c452120adfec9f1aecbd6210de5d4fd07d105a2d62ad0d8ca3f5cdffba0a1e036bf844048d13e5751c9736d42de5e2b9f8832f38985824e546b4833fe0f611056ec4ca6bdfa9550846a2ce60cbf09236bf0c0e1a6d307e6276c2b1add906255d8fad95aafc3bf74297d6243374580d02f01985795317e87659a57cf919c22d94671330d60212b7987c9480a1ffe6e9ecd1e771328ac747067f83c386dda414eb132837ae5b39880c7d9e76166d753171dad6ab5b173d244f15bd44f70e102677cf007072ca45c95f30af50940ab6cf69da621b18a0e8c98da0adee76496627c0d2f2980868dabca8dd481542cd90c08cc7cee427b48ade22fd14669e7145285644b2663767b84772c6e65813dfbe88449e3e0ca24c330c8a1275c55372a3360243de22f452371fb403bd2ee868571fd10c06006c9dbde9a57253e1066f562e2950a31ee749f0bea84f6605ce2c46b3f66a00e0e4e5ae2c59c93cc246e4b81775a142054b9c3137b25c8de915aed10b6a2bca698ae97609ef1cbc0a26d0be02137cb3bf156ce170e6f7b43aa6fe1180c89da6e92f7efeeae5d16a174fe49832e7f00ca8c0c3fe3b7ca1e8b1aca6085b1f12d73c765e95c784d91cb53285191aec2a59a6fe6db02d3f1342d18dd40f5729161d44678cf917d8538c82c186d30474afeaa4abd9d90e106f708edb10497af4dd397129a63674ee231433a477593f7ee64254e2d05cbe3520563b04e94df2703d379db6b1492fff6923d1608a3509cc8a271661d635613c8aff839f9f09e86efbc5115ab253f2c2cea18acb9f461bf6d274d2c8977b29ac1dadfef668dfd1211f6326e6e3c0372bf7be23f3715e1658e8828697b65ef040441fe965112abfbf0dff102c1fb21658fa89b13903221d38969f6cfac1e1d91363e97cb3bba645a1dc0edbe9726e912c8b8b0bc95e5713af00f9ccdfb9b634003afae572a5bc3e8eb92a5adafbf5bd1fb0a5c040110e108dbfd7fc029582ed1948291c603d3ec93db6302e90c8ac14b5e639380dc3262d0308515cd08878a07e5d96ae4c817336eb319483b7a983ffb5fd82abffdb0f36f397973c64156bb390fa3bb89cfd55bf44b57f3fe3e5a9049f691b175318563b257d41117efc099d71cf38136d55ffe0cc44227840c1807d6a03af9f9c6de40fc240606e3702a6b57a8f097745775480f3683639905dd977fbb22950517d4c181fd6288fd796bd9d3da5d2586532c3306ababbb43a716b1d77e4accac37d3d0c2ccc0497ffdc365909f05a5cd4bda6125c4c7d548b3d27eed80edf9e5a2e42264a01f7fa2aa5e2f2925750772bc9b05a09fdbd4074fcbe39c1d442abc6c3c7381691f6bea359776ae392f939f4bff2ff16b52c9f9b5653c67bfd796a926cbc376ab00059af955a18eb487688b92a81e2031db8d13dfd24158b762261e4d1fe3e70e07757d50834dae208ed4e8ea9852a6ecb88e0a62fbf46f29f96a79ad34929ddb99b1da8492cea83f6adca3197869f67e769d16f2252c7f2d885bb9d00d51d98254439d82d7d126492f4186b553da8a16efcd197d9fbe261e95d4a8e7d4916e8920b0f5a69b1a20e6bff8b7c6149f03244594ef9ebe6cef926ccbb7d9ca52e5a2d11ad5f07e1b79466f0d4df1043c54aa6c214e9b8488bb3c9e31b406a9f09fe41fc62476d63c8ba0cddf97915e15b53f279f396470ba6e2b23c8c46d94929c57d4a5a43bc1a4955c7b28029e2cc49b64fd3a90c1336b4fa1754e998b0b22f71b15d98b442966bd0d2a188ff3acbc9a7e42fe6e83c55a5bd0bb0aa2dca5626d6ba3677c61967c17109aac84127c9a3677694b519856339d015b574f483200931444f6b78227759d7da62bd6a9ab7ec32fe0a11fc7ffbe92557ef9587c86c3b761cdccd1c68699769dee913984ae4fea9220752a84634792853a0f854ba971e2f1a0c57628b639cad6d3cc5cac9ab5f26a9767c7c6428537d9335b5e924a82e9ecee022b506dd34bebc4a6039d1289ef0de9cac4419c3b880c667a0f6afc13e905f8993f91198588064732c0e0335e2d0d550a347cfa6c2fd3859fb0b8d0637aa2a19606d370da21fc08fa99bc13677d8d7f9a2c0ef7d37ee437ffa51edcf136c95768afa7cfe4fc09131ae3d0aeb767740fa94e0d103c87be2be5d8a7e7c368c1400358667347d3ee54812ab7ac5460f28f222b0963d098d331de7c67741838df6039139feb6f2cbf779606e7ca027dc685dfa45142e118faafb9d93d1321df0a58a0e7114f2ca6c9875f676913026d3efd747d035812674c751ec7caa2aa492a132c4e0d12c4f4f9221adc878eda2f284d6593a851104a3bfc3e1ff4f03a075c6a33d413f80c46a8e4e9681d6f4c6041a6bceb5825d71c02b06a8a9a018bb79138587c02ef92b8cf85dc0c6e596cde17aec9d7cd19639c55378666c9a8839210b34c7d3cbceead97ab3deb7398578494d8b166634d02af9745639c78992aabe6afbc8ba7add56585b9df51c2c88d5b2e3d8846d977274c754c0c2901ba988fa96566d8d8d8712aa2493e9919ee63ebfb8745a13c302dd5100494017244c9fbba834294b658a0d19f47d798fb77637cb3631eacba142a2686974cbded962af5e54e0bb94dd140bf1bdcb2836af3c43ee2970547a6b599d7a08ecbe85752f95e43d7979c2b70f30bc083960abe0a91a996cd1f9c2afa9541e72aec1a700b2896d54a5ebbc756e33721978f73ba6b48ff0dcffb168cb442f27862b2f83e368278ee9896863ea5ec88cb4e99f58daebf79261aa69a03f861ef5e1a126c564192f6dd0d39c1c522c01dc649db69b0b285cabd7ba76ac7d6c1522276303b07a61bd57691eac74307cd173e2c587c7a1fd9fe58e95c469cfd01ac0e4005e0e4281b25945c894b648609be71d3f6e881d73d79867dc4d38caff1beb2c2aa22a930216e3e1c777dd59a8005b3c7480081299681a14ccce742b3485395a186f067ff9bb89d83dc0d288b883b255e40d062b470320711894e1de8f8aa507f987552fcb0fc626e1576df29a51a0d383982f9157831287d0aba952dfa1ad2103ea8866eb1751188fbb0cd3fefcf947a1c88acdfe10e2e2dd9f99d4d263ed6ef93e25e1b701f57bd75fa96e64f899db1977a29b4da115b5d29a93c23c14408dbeb349d31739eead4e79f5583dbac27f5a50c5b8d24b3593dfdbd9864421d95135ab68f4c71559bf611589d4fd5f7e65b9555425fbd5d79ab08def1bfbfd716e6d4679e25721edf42c5fe4e4a33abc2bee60a6cd3707facd448395ef10594341d7a7041b12304550eaead6d98bce05c4c9d271812a78daa08c7daf2f7fc7c31481d338843cbef1488f7a72590e32a4c105a611d36a85b72d3b6359d4f9214fcff4f39f6ceb18f4d4b717ef28927b7d32ef2965938eee6868e52e78a543a16c673d1df18b3015f7b9de8237782d6df92d275b74e4398cd070827863648ac2be551006a8ddfa1f54f55bef835918a345e5dd7e01cdb0246b0e4d33624d3c4fa2275b3f87372386878ace7ad258ef35e9e6ac78c29223a36fb03ec0ecfe3d4c23fdd29678925f1d050000800a27a72630f3375400000000534f3400000000000204c9d25e122a20353db0b6c7152a7120614f6031c61e4dede876bc64ac45b6072cb0342ca941abaf589df6cc34b13ed17e5db8485f34f4d740b795d75336591f4e3b34e25acf387bdb0cd29788c68609d3bcf936ce89bf93b1418e0183ac8ab04b86d627946ac2fa7a1f54784920daf201bbd23bd9f006dcb004b7183f935836208818b615dd23d8d5397ac3a27245d2fdadeb6a5b3b1940f6f35b6809d027a0e67a92a678fb36a1636053651b07cca8edcf580815194f2602c45378b56b157f5fd97d7d20c0071ea9cbecebca7cb838ea9303c721774b63234569cc101c302dd1a694da97e7c38b2ca159c843760d4a191d2207aa026525169e9fcc449b9f3cbab119717ddb8390c338beea1b4a953b450fca0532a9093f923785f55cf4b6bbdc4996adc7be670d4cb1898aaaca1a336c368730ac486c619655b28a507710a8f21eeb099e64601acca3c5f92a729226621138f04a6a863af4a3987cf55ad1199a2c6e5ea10797b49416406ce83699105f4975e0070ffcb24c83c1d57a26b8b06288617e96d6664367de8e71b43ed10db59c800e0e07bc39ae6f2daf3ea42607a1a2c86c44c786ce96b05f17ec044bb9bdd7d8d71663b9d43a05329123dd7c45240fa45fd7283c1be61a861e103c94778626dc245a891cb61fbfcf5c1818bea5e3b6d5f7acacf21bb35c6c6cad8e249df151851a61d6de29e84b7728d3af13ef16a106fd0dbd098b739301f40c7f342c828795d0492b57d6d5a92f9015d0dad67391877e932eff33404cc2d0c62b9d8af972a875a591da802aa84fadaeba41a1cb63d89f2da0fe0e4a9b42a67852df855e36396f72ac100dafd4a7184e701f3fe9dac4a36e83866d17cd77050c3713c5673cf7bc858fe76c7b49bc51db14a382a98fdb516f1f4e8f6200726cd3ef1911f4f84654778a4a97a5f258edec7c2424918406290760ef0f940f1e496c9ad23bcbf60afbbcf805837fc33ad73d352cfd1dca2fd76f9cc37233b4541fa197a994d7d336bd037ac1bc4b04b43430d8794dad9fb3865145aeeb0e53023c884394492db9c513970cdbb8f62e2ce82e99dfa2de3d6679312ca5160065755aa8204ba95d1069b2ae627894e97c83ca615c987fd415005bd0bbbcbc070e040bfeaf86881d027c8fc1d77168991727dbc481f1fff49762924cbd187601f305d72966b2932b471da5b30b3f4ac94bd9061abac2d17a002a27a810427170c22053d35a8da4b1dcbf20b56f7a5121854f13be5cb706995554bcd8b0ec21ccb8c1ec5fabbd737a4ca70b24bb3cb2cf486bba6bd2bc10b77f612a963d75a20d905446fc23827c44e0b0280f1721f072e46d408928cf84e769a3456aaf2cbd4ea1b5e18e6fae28935811887676117c31de46c32ef162cefa48f6ab041a265cea11111ce707376535431bdb515f85326bfd7a48cd6c370445de9e6d936c8f62b080ae0c817e6289b0c18332799b6294fb95113c6dc7c558ed87dbb882a242a26084f1095287705506412510132f0353e1a8b427de392857401b43394b1444f1b7e8a2a32b7e116f4fb50f035d073368577c7f01e379c555aaa1c014b5dfdf5578eccdc36875a143d4526b4b980da5c5028247c91d4b7dfd3392977a5957e5fc0bdb4268b63698d12ed26129eb52106352c62abe5e97d977611af760a37cbe1492074b75301554f920e0c428fbb1931c1aab084dfebacc75a0af1b4890e32756dd3f5c53f7260877e03aba8aa2ffa6d5140b6d688078099b064856c4af7215e193c9d21c7577b049bb0489335b6b30795ffec0308feef81d02095480ce4104b2a9f71e32219f8153a8de35109a315be002a257fb3abcd4eb8cfc122c6d4586a41184bdc3cd26eac2c46b24394d3e9be1076e4fe063a38024877b4ddc34e5925c463a0d74889b007cf99af8dc9243aaf8ac249cd258cc40c923486fbf97473ecc3fc1f539508cabc9f0a57e303e0f352d2e4d0202617830448fe3f6a793995bb2043c593a928cba802dc7438a5dd854fbac2dae3d21b3a7c1fd1c0071c9e2b73337ac9fb94cf51956e88f80db933e516e55360f4040909371c80197d9d48a116c12d4bc5e657df472ff02bd06ffe3f623eb0279c5d2e201269a358a97db9b4555b78ddf1eb9b9ccc1c17bdaeddaeb37a2ac16c15db3ae697fca96e50eb189682a7374bd22cf3200df4ef5d4099ad9fa4749abada929892c7dd4a3a3887836477361ce64301e436e73d37660fdf48b05168c16dc702b5c41c34532de256c5389a79cd05676d8af8a8b2f9e06d1641955d3732e7e413951458eaf426136bca42d6803102700000000000032ef86c9ddd4d9b749190bbd151664524ea253fe1b8c08bdbdf28767200db904fd601caa743aa146dcc38beccaaba9502236ab0414dd83819d5c785e3ccd3dfb84d68b57161fe5890fb5dce1270910b1811194da5b1a5bbe6211f22395e4af3cebf9a8955b6c31a10b7ee896903d548d2596bd6a0e6ab068ef27b490aab562db86b033fe5b92dddbe557ed308f5d3f15056b907c218c836d31cb0eba973d63373e130e0efd6b2f6c21a81af4ebcc01063a6b33edd1278a6b74422ab5ee1999025e172eacd4a571629323f988a9077284f48e49e95daacdb671ebed215109a1d588b5b35602877308585a537eadbe92255dbb13129318033abb8e549f7716cd58b504876fdf450966ff7ea8ce09a4a23702310a99611f483f7865e178f53b38402ead0348a03695ce7cf2f9e860189f6386b0ac7d461b0fb4fbd1ec9e94db1579bf463110abb0978e0483005079fc2839f57d40f83f6eac54340a810cde7299243e8a855500780b941726bd304439689ccc0f9179f3d05e955ebb02d11bd8ea90dd9c93228f4a925ca35ea14e78134f37d6a35f1389a9eefecd03f2e79c179587973d3a6be6b0a3816c75b68a129eb88723c54688cb6ec1498cf2d500d8183b84358f3fa9454c00703acbeb2dcca7ffabb18bb742ef41d758d2abf4c45034e742c9ffba4fef581f8187716b839989bd8fd8ae201b3dbb709f008c59cbc0fa30e2757cbe20b98f6d6a26362f9c5af4441aa485e930e68dd208f9b3ded52105c67ca2fea0c0a56af22aea142fbf096e7b0b76ec5d956c0b7fe1f53c0145a7e33b0fb4e0aad44a21cd5141749e0e5e729b3b54f7a8d0125a6f9d106b1c57ffb6987dca6e174c1b76fa015caa2096327f6c1094a305db0232e3e3cc8016042be7a389870222e1cbb08b621c4e485d4825df96e1065701ff9e82e3ec47738b6a59a5e5b277afc2c5630c85083fa79f333336f9fa1790448117b38595594592fb6a9a67b5372332ce4bb8f1e272726457d6ffc4891c929ef2bd85340fabd8e5327b979c695717992c739268c409e84e0ffb6520aea84cf7677b82cdfefe18fbfe7fb3b441c4a53e4cc33815d6c46dd80a50967f45cb1cd7bfc437ba5cb8c11b3fef5ea62ee7bb10332006bb642ae20b42fcc674f57bc03c81554fd54f5939dbf1ed385c3d612dd323cf6d21a2aa376dc8019f0ccb256a7f282df139889f40ce6912a19f374706701be6c2bc4af8fb42535589b58de0d9372d3fdc953b4983432cacf96067da82fb65bb8b0481ff5207cfcee5c0d50dbb61ced9dd4ebf546325729fa09f1e129a1e22a1448d45458bbe79215b44453a2557af59d940f0f6744d7087678d3e5e8f63aa31f18bb5f480d0e1dcef089a811c21a0eb62478a78eaaceca53cd96aa1991938e5be5e9e80a6d703fe0d21faa8cbd079bce7aa6f9b45adbabd996fd3c489a2563c51aa728357fc1e97676ff9109250eb87ad3ba755e25ebf5bd392dde2ab90414925c15563cea972d1f255301c8903ef9a18557e54b1527d8a5547e3e1bc676c3c9360a8bec25a4d69b7f8587c7a7e1ccd5f742f80c8f68fcd47837d4fa42c9dd1dc7b749cee5fbc3fe71a12a6d2cb31802f6a544eadd5aa2e004843c6bd2ec69c024928756b3169b682533557f17221378ac61186220ec2ccfa7c33680e37573cc47bd13171337cc9c6347ae9fbe877a3dfd7577334bd5857df4ad96d06d311e62f0b44d1839d884e420373e51ce6b3f48bb5b4c90a03b03dee84f33c1c3ea652e022683e5e9b1672a22ba8198cfb47e10368c193a53d484e1326d8430db427ac7461a561705c2d762b47341fc4b2311a9322a5596d3f42d18691467da9ead3ac7917deb41651bac8ef2782f841be36cc9289349d9dea3e9db1cc10b3ad672d328b38324423a2f7a1376ad8428831fca1f2f1e89be4cb2cef4569f7638f81f70227fbfbb5623b27774cbf21cafdfde6478e1a851f7fae87b9ebec18430c1c7f4060d6cdb6b41e707bb99b34cd3da20f883c58503395df2a0df3d9f32f246bee6c832a376d42054f73d64980d1c77187cd83bba2a40fca1417fd5d6ae2967584e62d49c755fb4d480df2408e02ed5684783acfd27b0d485dd17372accb201ef80359cefd8221cdb54a0b71d79019cf27df7533763444fcad2f53104cc59b91b01313f254f7a9ee40244df4e0169ba28a57cb4b8dea5f1012300bc608b925b239d9e28965f4970b3fcd067d040a54adead6257d6ad99bc4ae4e49cd96370caf768f95aa0992c7661819f5d34d75175586389761636e6c6d81ef86532a500ca130e004111da0907b229854ed2557d709d1120df935c9aadcd097a0943a908ece2f114e65f846348553faf7c7e20160ee3ede59870e9b169731cfbc217b95b2ed71f8b81dc1a74d52f0267cbf6a225a59863476ea4c1ac0b610da0c7a72d39f16d53983209b2cbdae50b5aa3ebf098aaeb767ee84730f56f38b6ce4d69c1423b1eba32f0f0d6d8301061e7fdccd5527241de372ed4d90f54a60338ee3ae030964b8361f3aa4a05845f3d32dc919abc3abe1425a824098eabb33e0ab7c116431ef123b32b95dcc326dd9c8f4b39ce45e88d8885b20e88b6a75ea21f203478111999507c16b38ab2e33a2cdea42b71fa187e3e57fb3c05ec4b9d645ee44ad6935f01f946fbc56c20f8c7d551175c2f9fe5bdbb60995106e083567992f6bf1410c5b52fb41f0eb1b0fbb97fb829281e9edda75a995a33c78b7bbcc5c41021bf3211885c68503572e1457b09709aaeccd6986a5f63cff11ffdab6617560cff346383a7e29b0ad66fc6e90768da6af1febe6f27c16a06ccbacf5188aeaa0d435eb08cd02bed65d176af5ea13898e10e670db2951ccc94426b9af3766e5ac88070f30f2b90ee1aa1cf28ea34ac764e247ab1ad9b944fabbc5b760ee92dce1f6ffaa2ce05e623d4b40fd806c5ce7eae9f328b5ce1b3ec9d3442fb22a7fd45ae9640c0018152608e7378687159ffd56a0258539fb10ed49496903ed5dc8f8a74046890c416ada964f412d3f2fb85aed909c25bb782d255400704d6e35499b06de88600446f561ab17675195267ab6fd429c84ccdd1fb8a3f2c03e6daac71742b7d8592efeb5ec1bfc52aaed4f7374277feb455248f64bb479a1cb854aca3b472b871309d2cba26078b2c51cb772f7fc068388d9f8c25a7baa76045f43b057b3b9ef0d35affcf9d48d844638afc7c1b35649844e69a69f995140546207a418d20bb61f1dd87659ec036bf6a67e0e17f5dfe212e0500c015d5d67f8023061f4f19f82673b6448774e6b14b4267327095743f72a58413d2eda1936b98ea4d82e2098ce3721b2e5353affcfe70f8c2e74080b7e41cfae96a08006aed8edb50d513f1227fb2cea2ec7c08a18b2a37077d292af96d437f0e8f9345eb055aadbe3b8c74ed9690f321b879602cbd9a0d919917fe1f771236a0555f49ae2b17b3744e06cccf62611a5c6ff142d943bb207f2f3f985df8b116f08495b8529352fa0a9a894d257d407538821aa944e6a3fec0085f74bbf1059204d74dd178dfc72e4a08522ed8a441f3cb646946b2e0aceafbeeaa79ab013af2bcd22519628b5d790ff32bf8f04f72ab10a82a4bcf34d97bf0682a2002bf3dc8e901c183dacaa42e0a49f23334ada1d9ab28419a0e6cea66dada9740b3ff99706ecefb6d1a68fe8a38be0a5a1c53d311ec0ab0f79736b06753a8c82e4c92b64a128ae38353d75ed14ef4cb71e6e0317f2bcf88fe6887875ceb683fa88419a535b55a9ef495eacc11f95ab0873428b325421714f1d0a8f2e8687601d8a7ab6b8eadd1a48d5e411a162e9ec02f04dd10d70210ab7f235784417dc972810400d2a17a641b6b71a91bf402cb90cd2db6e2df54dc0c724a50331240b4107984df993c12cc65ae90a71426f8a37b790339d07582dec80f408d176471ef4aaa619ee8ebc307461c5448ff0a7f93e815b5a7b32f09ba72f5c3615439afa52947088ba38bfe0527be1bd1f936c7ed755bf28130c42de57bb1bacc4ba6cd688c056d517894d37f2ee43835be40d2f609331d2cf1c59f63c9fbda73b7cfa321f4a40a72e1d93eef784780a58305a243116e2e21434885fe87ec8bdb2ce5436a7a3733e64a577367f951274e733a887030f130bca35bcaa9bec51485aa00b090dde5d60fffd01d71d87b451e23986a1122f0bd05d0ca236af46a5119c3a7d72964ecac5fafbc71778eb89bd7bfd14a83fdde0ceaf31a6fa8b9423e5d724a066d8352c449c44ffd343276fea74cad4f8c946ec780b06ad0e95c969b631aaa2847df86251995ce94b3b2d9fafa578759d06aba4cf6003f7211f1e0b5aa70b0a4bf5edf3af22fb88a62d08b60af3c3daada36e6bfe633a2161e7c31cea5c6dca9dd054ef07836e815e53bdd47e6a4b7462a2e95cbefc37503c292956c212c7f8a90684e74c64798f5bdff316e7e8972215fde29069f81ad98cba7b8fcce1090b3db71678527fcb252562923da4fb00422cefa112a1d5312024fb3664a986aaa247b4aaa9115e53446170226d29f1ba4fecd0c3ee07900c8f5685b47830b350a729e2a4eb75dadd2b1c73c11a21d72be96aaacc462b3c35225094717de34db26fe02e8efe6a5e0945282a034e39fc3fb223b70a0c86ff04371725c26e51bb6fc09ba19fc384260d3a7e2375af0d185f4f3e30f18dbd73030468f4b049a9247cbd24062efd317f625f4a992c0eb4d879a95930eaebdc09373264f1d39d6892a3b34ea703c66f6508aecc6a7ec15eb46395b201daab0157149bea1fd4a8e78dea81b9bd0c99e3b76a9c0317a9ec437178bc28bfe2e84699334ab5592c2f6a3c2aa370a97d5e16027ba98fee5831e174972ec00e9887d3b60a6ec85c9f707e3a73f313a1285f7cdb9f5e1ccd3cc105f02c8a3f4a4161fc0433ef9accf6178a0267c8cae717afde7d74971b00583902ed6ea0983203aad2c83c432c8538e043d2ecf5fa57fc4eb0b8f35a5b4659b3f204b23c97d19a3f8ae62361c0997263ce025d6b9e6ce5632b73a5741f5c52b95dc3a0e35d473a8881861b99771bb50c9ebd56293bd83d7b2b1b7c3b182acfc71479de10709e2fa282e309e08021aa17bc9f7608437198c6956dd0b4eab2886a3464788c25bea01b1370076c165115f5792e5991bf542cf9eb7266007466605bbe538747f22b1d111bc203e73f2a07a677ebeee65964a601062b856651455fbe8f5a6253437a92c61867191256b27f21749253dd34a8fadda9848e58d348969d474929bcffa219154f8222812aa5b6adf4c4ae1a49dd6f5203f095f454500614067b7672e6bc8370d80d1ebde259f0f7127901fc3051934c162c33f8e66a137abd96521d04a4a3aa129e1f9461692bbed5509bbff2958e35e588ddb0091238a9b67cd278db0776d18b511084d48871233db90f572fdec21161e0e16fe3ff9af398563ba13a7cb08c97723c17346a1f1d4a05655832819af6785b9532136b9f8413385f71d8ac07f19d5c3f96e7529a3dc21cdb0d1e08c484e80b4942c376cdccf785198be7db86cfb207296474a0680e532223e615479469329ec26b09a04657ed44ebd6efea3a919abd38d7c4d0e66693a944296c804c5b45b44dc0f97ff0c85b94a388ce77c53b4a9510601f990b9b82ca6977f20d1b44e90217546e66353e999df2fb3250c6212dc6101da051c7dcb0a01d88b47574142184943b40163380fc4e51ea2a0e95a255a50d1412263e8e4e66e581c5b3dadd2e98ead2c4cf3df4ec1a7d727f6cfa96b5661dfb22bc76c4cc13912a5e2a0d3e8ac0665afdfbc1eaffe92c92cdaa35ebe22e0caffba60de4b058daa8736f34ad4c1cc1a39b4cdf492fcd4dddb60bab53bd52134f6886c0e9a94683b3884d0b08e9dd8ebddff69b384b8f8f7b8ef6d58c395509c84b1aa2d56deae7138cfc44dc5257e977fbff9147bb38b1dc2ae84037850e2b459f85247dacaa72e1a1f640909cd3c41e2ce62f7a7f606b8c29a3765fa88c18daf2c73a53d4220d75be644cf4422f286783545f3b0fbd2dbb07034ed8cf3027c6c6f20b1c12b0062c636d00afea3858c33a711a35f399e60c3f1215280bc33673a9b2171a814a83643331039d4b8eb5e2dc6e88803fdf8d11de7730ec36343217f8fc68b5177e8c727c1c5cb7dfa3512fda04cedcb589d633c21ac4463a251992242dd0d0c9836f35776b9e8166ec7f8cd3ad541d60971ba5518b7fc4b0a70e71cb818a4edb0805a56fd4fa968caf7677ac7a3d9c677a2b205f7981cd902f01fc5d83070b57e0b674090de015be97cfee07f6a2e067b5d5df98de67e93abf31254e08e7a824e511134d2eb48b1f9c4706dcd21cddcc6839a114ff90f7453512117f5305a0f3665aefecf3ed52de6882683b17b54b71085aba29ac0042551d0167becc302b41830c920169e8b75b04a25a34b9fd4818b127f0e3e9b168be7b32a8dfd6c62c67c58fb3f96065cade6d13b66a6d81658e80e64dc5207f8375343ba57eaa54a031369eb238d10e6b3ae912b26e2654be95f452e9292d0afb516a231c97f86d446019924bb55fa9ff8b45e549a5b5788ad6e5b2757622b5ee0c7f34f3b7a7237764b69cdd611a3cf50b438566920877c8f1ed52acf61d1dbb1e563386a54bd47894edd2b96d059dd15fc49386106c35dbd90b9bd03241e2a74b8b170c1cd4a29d110180a28cf2566c38c846316fd9cd35dcd467b097d5cd81d0de031e272a7fe87210a72268653a487bb7660c399e81fc0a4fd1b1412275a281b61a1eecadd51c2438ca36b884b32c215b574f4dc75d25679e2cc961bb3e52a6ab0c3145b00049e6d9cf14ddfdafdeeb82f993d08f243b3154e4dce8b712c462f30cc42d5d4b8f8e8c8fbb41f6423df69223e8ca2503880178fb807ac3bf185d0e205a792833e7adb3778f438f0900c93739246a83ddf9f329c08ea1cc79827e92071bc871bfa9a584f4e6206ac1058a1c309bf61126d10cf9c520982a78bd41be3820f095a47938887b9f5c786dc3a0279d2403270e40ff8a5f38572a1aa17c131d3416e3d2cd07f5aee254d4b3f0d0176767ce69ff2c8cbd2db0a3a667a233562a5fd6aede78de9d715de97762da5908016f5e3d6eddd87b8ac3b7b179e8393c35d7616c33a6c8ea15ab3f07f2d43ad5d629c7e479b447264e2afb0baa060b6004a4a300d9243c1b6e127e2f69ff6a60a435c8c4a61e589e0c77733a32da5a2137ead8a7f6a1118cd48258bbd666eebbe2adc07d2a0870f825fe0c0aae5630d32a68b4ef1f58ae91f6a936901e7fd17316920cb41a2d52b1a3cf45e7f12cc4d32304c50c555d6fbe3b32faeb7e11b8f924fa32863652f6cbe3548a3e312907e33d29813eb36b42fb265e8c4939f7f70d12644a63f26a9e4535e3755cf514013a3fbec23c95f4da7cd67dac070b1866e0b92ccb309494b269ce3e4a362ea1b69b3e1b12fbc05055d8d823627978a7b8d779b419d38fc65bc50e072535167e8fa33bec5e0e7312c7ffa55c05ff27bf528fb49c61cb90a441da6060f452a3acfc3d2fa8fb5c0c5717d33ad62817f3d3fdd1afc639b0c3c002628ee0587c592ba61c1723ba87cee897531dff455be485a4c392b619ea5a977fb0827ef980a9e43bf60f444fbd8dd090173d94297c6b743bff6eee37a1913a29759c7b2516b5bfdbd7312c12a59c1bb999c9bd73d00f6164fcb9a2f3f6d379acd671bab9d29c194770036136d1262c9a6ec8b1bee15a6303d5cf54bba0d97a0c18b444648abb01aaed3557dc1488b2a0d4fc56724946ded46cf5bf5f376c7e691a5eb1221041747aba151029b2f7c5ec646c706012af65ce3c68063f21cb1af259d9412ab06747dc480b4c0f9ae63372a80cd9b6d6ccd79444cc831f750df276077a7d58203312a47c05cdeb1bdc7daec50a98392fe8058bc37186ff43af6389647d891db7bcf014ce0cc53fe848d02b22244b43907efecf10fdc3da2d0c4ee6b11d09f64da9196c8a0a83ad223014e18d40c14bbeb752741cfa4398f0e966685bf04bcd586a0b367a326000c9da30db34c9a4feccbd5b85ba965c49f2bfd158b78f9ed557e7d6625b16ea36ca7a34e5647f7ea3685ef7a19fcd58da584572743b7b7767661a33a87328a187073fca9fa2cddad1a161715f4b234ed0dd345daf2686c7d12d7b8aae57222da8dcc608fe5a4abc97e8b5b67f02a2334e8ecfb7aa952ac2ecef9c9542bf048a86d26506980addd526031ae8e01215e237c2d225e1bb09a8b58de06ae53839d0be8256f3204266d6f1f4765c6a347ebd88fd3a4cee5754d365f14fd12aa93967443e871eebafde590c36b010ae8aec0ccaf0db75c92157889685548f08aa05ab9689ac032aeaf1016deb88389687b1f39a3b4157688db5b0cc270c7210cd21d39fd48f699a7f25a1378c778fe47f9d8084b93919e3362aa8fc78eb9db6d32f88ea2e0af270b68c4ab794e253e2dd62c36b820a9ac14700f315fcd4d162e123358a766ca0e732ee86d0b0c3888526e90093e63b4720f28e3c730c1e1acb8f32cdf3624d284b9b81f0403046c615f83ba203b2f878e40ce1c6819da4c853e701ad85ffccee7eb335e107c5b764c65cc272248589d9de3ab9ab01a404ded9b8189210204f69e6836221ba403a56e985fab7c20a27ad6d6dfe25c43a81210cf506380eab0ce4101c1e2b18ced1c2761a7609c8c9e197c4bd029ef977fc56b56a02bab7272af0b8f55c886f2bcf053df12afd534d9472ca86b0359912f03de162301d958be7c8e0a7a8c5eda4f07c46d23aabf6675494fc484bd697aea10eab461be161fe371ae207a7a34ebeb7e2af8ef5696f1619e02393d9e25f818a7eb1131a473ab57d442e1782f15e047ebf1d6e49ef9f1a934708d11923247bec53881a0385030a0cfcb711832d716d9e5847a31991d2f3932f8836192200d89e712de692b6577782a1c22fcc211ebc841b4d3b5e311191319c1dd462d6ccf15d713649238d42153349af0c4addb6fdc54f67d1c69b35a10a8c0b48084ad08d8213174a125e0e8c99a190e90a0791759c18e2967c6c6a0a491955e60c31cd90bc2f2ecb2ddd7fedcf82a5298c386a49d1a2ea2ce13241a9e2164431b25d06f5fe6d05831b2995292760c442a389e07a113eedf0dcaecc24d368d19455dadb8950d2134f33fc8dc083cd317d774e5759b747280ba0bca47230f9daa7386a84f3a608b8ae155b5a304ec7631e7efcadecf059352e77091df8761fed5877bd6df270eba8e59531ccffe1e5a933be7225b8399fd1e8fa79532aee9e39c631071d764bf8edba3fa8506ae7c49220a1e63b538526b3892ec4766ac90a3ba8229575d6174fb5eea0b2f4839236e32152147d8f897059d4ba6f70d8e2e70d771eaa7857f6a44c378c140a605001686877b2f463f97334362699eb76d0a35fa6cfd2e47f2ebb9d0e3e4468baf98fd8fcd3f4e926ab3ac6b96f3dd47347b5c026f842f0e7847cd75b9ba432f15ddbbeb61e5233d33bfac47dc783cadc05f7dd8556254547629665af97175c9b1caf4a5b5ed834bb6b2026261ba646cf117b23862a64192a8107b2d39018fc74f0ed76a00b811f8ddd87ac5cb18f2cb22957938a4153133304131cba34e1df62094080845dfcd2ff6e56cf89aa0f9ac38311cd73282c3d02f478f30339111687b0e2f8f7e1833b30b651322745cd529d0e0fad79808d9cbeb846a97717770819f53480a24dec65679828816663219b1c18fad287169d585ed76204722232ded7c601e98eec109163015accbc292a38305a79abcc6ddf9a365ac0e69c33ca0c012f673913a52782e4830a9739dce2456eed472f9784a3784c281910e294fc0837932517b303e52ab0f76b8fd6993a68af4f5b3e007e394ab9d56f0e4ea78900c23308c1053e6abd3f5bd37dd084ebe6a3d6fb6d02d793d718cdbfffd5b3cb2a5787f38b22dc3952476a985b3600d7057c8b6d351d742c047237915a2210d1ea79564ffcd9c085b96ceb13f72e47901374ab1ad29b4e75f9d4cc9313ee2679f9e6fe08a7082cfb58ba37d0ff444f42721f150e42d069a118e8e68b902d8b416af42a4fb4b8462aca0a9a4fe24e8adaa57d0d982acc25ecc4e6db367cc9ad42810cdb30655220f7646cb9e171571be0b7f16a1b4f9cf063f0ac1d0e49951bf3264d6c4fabb7a2e706dba39342aaf46817c472b3b59399bf37fe4efcf502976e699262574fd316b7ff4327b2904b47c273a31acd3851cc8ea9422303a70e2a18fe5679f12ae26770232ef3a4e9e9e5527166060efdf870aef7840b17092c0f1503bd89c62a0a8063115ff947ed545c388583defba07ff71edd1cfc6ceb932e0755fc17d0de45f9fff28d22910fe8d38cf4ff5275bfab67c5fd25ac1d30d42fb46b41268b736d4f99f25fe414222c29dda54e376527444f40c37e7f080e87916cc7281d52dbbf1e865367e68e2e399259ef1d18ea260c3036b98c3484927d22991402dcad9197229af68071f1c58acb204dab468f37366ac0efa602088334384384ee46d6fd72453fd06a29ceea8f30d03d8a3968a7a460509ab03ac8ff6609050000800a27a72630f3375400000000534f34000000000002d9b6a2258903690e2ee80bc6b36f16b722675306cf25015b8d9004fe1d0ab20940749eabfbc5a307e7352fac0b9e63602dfc2fa23780a3e5c62146509d115434ce41364e56c134d2e60f32516ab3cd14e37f863ec246add96a561700ecf0bd329534fcad25f948d7df72fbaa4a5dde4e34a94f76d54e333d52da42594a50c618c1da45ad2df2c0400b1d76aba5cb9874c91ba4d262aff33f9beb7f5382815f1e03e13b772b1ef54cfb09bb797e487bf904f60d61a5344570a25fc1cd49f84e3c609c03108277ae0bdf13ededb88eb1251b1d99986445d35c6200a554354d0f397fcbba29eac8c78967e8820bd8eb3b6e36498ef3ddd253999139e7f8fe9e34d555f29484a420fc59c921153f42a27fada611195b01715c151dc32ccb07869873e39672a069779eed23a1436a85cb45356dac1505e95aa0ceadd1fc4987fa557c6f8b7c7b934f73d5425c93181c79f0c31a60f34db698dd4b3a568b6f6720a8b4bd00a73e9375058258793652867c65931f867408a626f12d3e49d9b45cb50d2b016a6a656f5473c8aecb4e43fa271d2e468fc4cc8a122879d1d162e6b99035f16e37dcbb52cb115dbbf8accf4cc5128986cdb881fbf997b013a3b42c80065d351871c0d5ef6a46de80da16ff9a6ea435d4a5f30768edf6c17a520419be0dff46d7edd215d7931464b3ec9675d33317972337977fc64fe864b3173caf95b13fba5f4758f08ed57b4485e71cc441aeecdc57e0dceef01a563d0e56052e4ad575484b258f04461f34c6e0ec3a25c2098e8d99edf263c751357ac5bf9dba8a6a6849559e7c42cbd50b00ed266815a4ab3a8d570c99f45d4430ff9e94239b797dd7c64f5e0d5eb54af6215c7ccf6684e6eb4a229c51f513fd00a1cd2a299914ea8a0bf409604b13e166f007d880a8a2724532ca7c5516d44c7a768af48ed902adac6188e53efa2098015e343476ef6d9a2afa4a5a8f7ca7d5d307dc83975674314b613c58e6e09919f6e5b2898b9439d9c5a672a50ffa70fe27b4f258560ec1e64dd4a87977f5fa2b86e2e35c0f281d435330fad6df33326e0e88d19fb87164962304f24fd3063a4cc14b8c1d5081c6a4d82ec9f08bd8c7da537b689f2d038b013f2fb6eae99447289bb39ff04d27a6e827eb00ab4be44093c1ac3f7531ce21020b98091ffdadfcce8d5795c7d8cfa95c0101a913de0dbc61d555516dd163374f15d85c8ff6391c7d817ff9329d3f933f6522308fbe147228021d12e038d6c673cdade09f318b5df8fc0132ba2179f516de5dbdbf17960bcf5cc366a8df0decd16337ecdd40e7f36476984eae2f2a715fd924235abb270a6338333acb517a8064e320d284bdb3861899b0304cd6438e0056aa05b4363447b3370a1a410fea7ee25558764702228986e31268e7ccec032d812a37200e750ecb87e1b2e1a3252e732cd91c61eb42ad47a55918c3e8021c87e6f594ae736418dfe0a75ac159690307585726b7f1417cfc79c17089bbae1f8da9e79efcd0f98bc7c4f2b8055b56bf8f1d5b17e9854de722022229171ad611c87f0c2df2f7a0c7937469b58be985c3155e9caef2800e2b5a20c01e296331daf8c4bbb34cf7d9eeaf6b340c2ad198d3001cf8860aa4f98ce6f308c1e7daef307a1ad7858dc4e60e7b042e4bf794b9e61e856e523969f2bf845e2db4adf7264832885a525fac40c96c0a2d69189b4a18f32c25ef1818ed3819d5014be8c49549e9afdb1cc5e1573bb48816e38258a3069652420c05558acac508c6361b2431817fc27ef38aac791d905a4c07ca21a14f5838d9bdf5c1c0f3bdaa47960b84bd14fe1f271dbea05b4a80d754cb442407d17074dfd2c8461d3e3fb60d28ec88eac7a621164ffada10a8c877058db9fedd91b006c55bc39a4885433b8d24d9623f4b25706bc6f1331a2fed7536831091366c47df5422969bd6f128e9d486cc3e5d9ef0a2e6898b5cbf8c6aedadcd54408381a9b461cff264ce34200bb1e3cf4425fe196674fb84391032c17ca0fbe0dba700c8468c558fb43477a4e967afe2fe902843de864a9b953401aa13e7bfb8c0487175050fc92e77f79923fda1b95dbe87d53d06aefb3a0f1213917eafdbf031e125402e0425735bb62648be73023f3530f8f0504a2aa7bda7b30ccb65f25190f149525c548aed698596c65c9c314ced74a9d728acf0fa3fee1950d1cc3fd05989343097390eeae6cb35103da2f1f234ad1f0d20d60b8b0c6c3deeb8f27f27696913554cf94b4b89cc659400f252e314c994894a46bb8fab1a22bd6e28d1038a72a4cb665488edaf5cfe1845f50310270000000000003422d420a46d0ddddf059a1d7061226b30807336b511c2715c5574a335775f0bfd601cdba1ce4dab6c03c3ed2ee042310270a2c4fe44eb66252ac452e72aa661de70bedaf3642879f114245adc8fe772b33db42c4e21043609ed2159eb8217636bbc86a02ab332030304c6c2b1af0ee5bb8a0ad6aade1b493e6ffaff86906529a71fbf24eb0ed9ae5f2ca8991a28e19f0225e5089c3f495970688b15c7764d1ba28e1e64cba54bd9829e52935386216dff824d55281311fdf4e2d73026bec4698a50bef57f48245df81a5456179859c7fbc6a6d8368e2add766f3ffecc72662764fc28da3a85f05c63d53d7478131c755a0f0216ed5c68d5216285ba679903ddc650157cd340b600f4bf2149d28607c3da68e19c14a0fe0266c0003df850f5c5eb0c0d22d9eb65503d455b3ff7655e52357a6891577f5e90ced2605ae07347f644f53e9eef34f603d6d76ad0e16315824e7459b0e49e61c8541c6eb421cc99eca22e0e98915c3f9ab897ecc8c474a0858e04b1ed347ffd22bea081e418d6aaec4b4622d11840dcfee3f0b8b1e6bba396928d03281b72f49d98aeca8430d7f2e15d49824deb6a8229820069c5f9d30e4a61202dca7fc00885446a0be90e5600cd1c8fb5e2372f63f90c8c4f66b07e4816d8c47456c040916cde90cf807c951a72530a8070d6eae52a060bcb79367deb1a0dddccccf1a30cbad1be531d5893a42cf133ac678c3935727066bde3860ce664fa241b938b3ee1a4b43d74d62c426ab64c7d0c7761e7df7c5e35d00047f002600245bc5e43cbbcfeeb8eadf89045e5074681a8fbfddca94cc511040b55bb2fdde42e42a78d14c082dc3d7ce15ae82d9eef46a823c22c3521111fc605b90903e36090e8955228d04ce58a6d9fc33da2fadecea31cf1b2e90d5044bbc4567b21fd60dc2311b4b3fc355770cd0b3f162110bf012b8f1206cc8600e010d01324ffa568599bb690035c9a016e619be2897dcbf56ebf07ba619d19877e3b9a221e8d58a7932420595025124b88c293e5395643307c9f38d08734f81188b63071c0bad6f5b093ef1bc7356a12cf694cbc9c3fec5ca32209fe3034abb8d9cca86c2f01bc379d2e05a0fff510162ee7b92ae3df222fec17b459ba877ab8071c8c87ac412d432fd2deb1d8462bda5ccfa20edbf2e43aff3c4f2e3b6d2e42a9556d7c6b8637c9e1f3f0cba57485d2296c868599efa628de0130558adea6785f0bdf89c5cb2a6a2d8ea30590a575237035cef633d164a5142802bc58b7ee863a5f243bdef780fa2dfc49dcad4581c5b879e23b81a9b69e9d0fb6f654037e5ea5af42c4c720547715d61f21891889a28e0417477131f73ce03e17624bbf36640afd5ac354134bbce8f2489da4475ea8709d21e5a0f08f19079357c6f65b3aa410b6b47fe0b9f3428beabc213c3e3457f7666a8b6c31473dec8ffc4e55cf78870d2fc35284cf06bba05b784c5638d63d2030607fdf37339275156c079030390381ec60e3b50909e0cb91eb49af273707dea47d7287b98042b32d889562a51b822fda7d2519dad246be31cb3f941f0bc34f0628d50ed99478482fc78ef485bf0d0be5fce111bc1a90997e7ad0713e0e67a54f57c95bc4c4e471a4dd67cd72dcf571512e356f0e6b102bb334522e3c26f309c621cace62aed5521bc368cf5540e8c6b0c2e182fa46a699d2b0117406caa9d6f05e47783dd9ffa105995f3ca8e1e77ba2d6565e2ea521d8af6aecdd57846c73ea7bc6372219604cb66ee8684023ae405f41d13d642a64f44d031170d230255cd969e5fc0d3ee5d90fc9cfacfb53feab30dadfcb70f702f3f05e2c506c76b437afe4341bc9b1f65ab8a94683885c93756600eeb16e04e4fefa87cf98a60ceac8ba8b845db3743698aac611e3363e5f01775baca896c4f1f21e842b3aa922304af7c7b5f10f36237d90f360f897e56a18df434e1e33af0398dde0b228ce1d4408e056cc4989c656f6b688959802d8644fe91186e56da95f72c4a58ffd9abd285c22660ce6ebf1203280bcee54f7af90cba0c7aa950c29cc9d09ea0667b2683c1972e8e97450734ac401815662c11ed991236f1d9294f9551e8a29d8d4aec2af5811f311b1c46be4432e63aebb206eccd1be85361ed8780588ac65addcf95e8f74ed76b1e830d56574122a7a3083064e71c95dd176430f3ea7a6c1b41fc7fb77779ded0d20d4a332de342bacfbaac310e1e4505d589619ae8dddc87fd2143de6b33e6ca47af45a2d80b3b5a75af38de2c160ab4b218fb3fa4b255b7b94c9e9e4f866c4b1ad3076ed6aa18c7844661e9ca443cb5b779ad772e198a672f53d29f93b2ef291ff28922cc729f1329d923d6f91b0746d3a3684ece7a9da65575eda8e1f3e75104a49a419853fa812e64c269429d25ece865d72ca4d5de8dc5451967369ad2ff5f52ddbbc2e1528666bb29a08e80de0ef891668cf7d3e5204283260a0f67698310d55849dd425410f8e6ec26e02c28c90ea048db0b12079380d6407965c6c38cfd04abb7d911c1d13f000bc49ca6c4e10be368bf85dfbd535e9939a9874bf740a0dfe113f1e132761979e681a5699cd16ecf8235f59c30d69ccdfba60f37d75a17d3af7e3a41e109d50fd979c5d9475026874d85e120b559b51cc20644dc0ce6922dc8907bc1d5882ef7b9512bfb24122c32bc1824f5a75ae9b08a98088874e9cc2413b9e31252b58d290196d15311b2bc12781fab517ecc670e6161e8148c573be9d4c952a0cfa461410efdbeb6d26debefa58654cb2e1085fe3143c2c82b83fe1c9b7f43d3975e29efc3e47cba2fa7d860ff5f64b8de4e70a347fad0cc7f10f0c054a7b24272a4c9ae49ae995f52aed2855b1df2a41c8f36dab298c3c10b4d16246ba8e233f089b1b1d73bfe59f84976a49466304adb6da525abdcf8471eb23e9b70ce5f5090e3ab8937d5238d4b4f0b0e619ebc9724f8e856831da10fb57006e980f8c5829485ea34ea08f48fb6133ca5467975a4b2ad94584a2b52da62e0c31339091e82ae06ce2a977190728afa703032a12cb93f784428de2b51f6b252fb7702ee8af0356b159c3a5aa2a1f1ace08705d311edce1ac3257d1877847e0e5fdeb51a9f607e5033a0b021294decc2f4abe3501e4a953e1b21d53b43999b3a66d85d11bb50941bba1e23578fdcff573a696664132c33a654e46491f61664825fa3ae2701234097a173f42c451e9a79de00f265cb8fbe5eb5d5eb929ebe3eb4887b0ccb2d81cbbc9e740d696ced92fdcd675db96b1236e5ea0f39052a5f79e05b09cbdb3f52dc30a6b300885d84c21fac517c19bcc519ad194a56d3aaddad9e59b8aca7e1e2b66e31aee7994a2623c47a4f130a3bbd632df19a0a835d80e959e84c7f717fc1d2ad4f77e24bc5d7d43230b657d14704c939386c49616cd27ff073d2eae45d0295d4c3bc7b20bfd740c225d9dcb792c78d79ee8d514ecfdb2c99dd8ee684eaa37e9a8227fad216f4f2eb8bf223d7965ccfda5f6d2e5385e439034f7dc4a81f93389a5332d98499c34899abd450544e183ec780ccc6d25595b6c573862328dff2ee06791f0e268052c96706c02d4fb463f851c49b1e072fdf03720bf6cded68f3ff70301fc5963af7ec0a31c2b18303a9ac69362085e5a1bcc00a237dcf5ef573fcf478f4f1c57ef3291f1bcce1d9c48df2856956f90177a95e6c117a5dca1690ced4d13d555c3d3d8d0e6b5ed0419af5a61f4eba852725bcbec833cd41c14f90cbd5eb047f92e2df2defc0658462cc041b4152c559bbece28bf95786f4858453c2e9641573fa0e7a5e0694e705484ce327f0d3fba47afa37df1cf4ad62df1f83831c6b3453058e8a5b6aff561397e2e9918f02088f852f8fc3121acc528761526e0d8ebf35888f3fea2ff722e01730046c35d42519bd8397cb4ee0c760528fe263162f4a4a593c4dbe2b5ef8c5480e6862218410b33aa1b245426931ce1daec2f5bca711fd60c46f55a5c7cdca21d5333bdb96c7517ba0b5a96842c83e0d61132717b80e6e55df2282e2d2a898917c623fe4ba15b9e25ffafe5d5a1c2aff2a12566617f5d3ff6b867a907f4989f158d18d72cd3a9d8a87d81b143fb45a0035c28d1e65d2c4e7916929dc908a2ba64575b31282d6af18e51f6c16e0504d16b80086398c426972c557d53364725246372c224891958a5c2c7adfe38f727f351861576b25f7591e37a0c6e35f788d7b255d3c67d39ea9fffa33f6f45b0f3b83d423db3104c2cb4edabdcc9f4543a6e17e397a829514fefde0b0480c5376121eeaf0efb9b14d2ccc00d2f31a914f11bcaa6cdba095fa7d0ac239db24cddb94b8aa014a12a7ed48037d5763d402bf066cabc3d2f3516d8570fe79b4c7545f83439ae2b9d614c5d799c59bec52f940ef8815193e2acc3682b3213ebbbe34b3389f5fc028c5aefb776e1ada4fb75e1448f1b8a90bba62eb9b764b200002332f00b73b60aa3b0fb124104621cf83aa3e1e18a2fd1e71f2e88ffc9fc22c4702f854eb5013552d32656207f947d4c099afb973722886982f95cbfda6f6e53351463884b5238edb861d7787a28418eaa5e5acf191c447a06cc9227dd57091359555b646e4318214300b301e11c7795785afaa0bd39adfe04e5d818e0e09cf3291e217d6a8e253695b9aec79b6a96621025d776a980c436a45e93b0100463947390bce9aaed02d7537363aeba148688589aab103eb5381000f98ac4dad9b12056540b06979c3d9809e6c88acc5e868b491b0eb58c79f73d8282e99457ff5d250845c892ea8f0dbdef6a4178ec96c7a5e0522b10659c7e4c8c3f3350c18815a9e792502cce101a1090ec7108d88930c262987fae5943cfe88382226b0ed43503d383d5b303be0a274a31c6dd09bf47747732e7f0490252205b2ea3401ec68298050ef4725a192dfa5a6e93b8282a4ef8c42150ca87174209c6c24c30ed0fa761d192b512f4b50516d3dd909f4805e5ba536a2eba17701c47a444022f1097c20783804d6bc9333e1b72c47e3f1e7c0e5b9e33e328fad83e1e6e90794b5b616b7bbd8274d47a3421ad581224dabd6813433c43f9a8fb66f6b677c6c5b8473da3ebd9924a213c0610da7edb4a0a0326d11691bd3f82d6d4a0089fc7b1580fdb2516101b59e1e16c1778e786063372bae385215a69569761a6143e59c348b3056a597fce643457c121b5a9f2ffc46bafb27695a2981f9a355dd9a50a2f4aee428f65ccad67c7a3f521a7bc69057ca7f8f11fb2e70133d729dff118777d99e56c88ff1f1c5481b87a017df4d5952349e11f636af4aae2def51c5d7df3f4721e5f337c0508da00d54b0d6b18513d74d42c868168b331f3836fc07717caaec87a2b4a817638150851f730603e3bf2cefd5aaf21afd27bb3145e61232fa6e66ea920e056eed6686da0463701fe9ab650b93818410605450d02c26c0ba2abdaad92e7f8501995ffa2d7c13d0efbbe3f26cf022aa027a43a7a7352f0c998289e80ecf74419c02d256590992a8c0fd1a5af2c92f71983dd48c372520e746719ad1a3ca7902037608ad768e220637a0fa4a604aac0ccb0a2a06161951977eb69a3c71a24a577a697f58a552821ff904ddc09235384c4b135ffc7faf2b98b374b79f960d8109296c46292c668113a7ed6da22844cb34fdbc34c684103c3099ba0cf8464a0302c2a48770addfb2b37886c6c273d9ecd7f38a9ffdd5ddc55115ab431ee69c1f488cc80c9cfe1852c3c08b73ca2c4fd39b1ecc9259fbe6f70703e5ddef59d50242b6e46c6c7e359291f4e7b8d9151ccede7dd78d29cdec8907aba62a2aff45a5a1846dca8e1f05310f25ff03307998a88a6adfa1dbc835ed000e205444444f823c30560f0928a062a5e984a1820db0dbbb9d72094d5dedf10ce7db0546bb56f33546cf8e201431628d5039775c0b471df5613a314ff8dbfca71b9d9ed2cf01a4aebc7bbe67b17a335980b846060ab9db00517e83c13ddfc710a426c680ad5166a099b1e70dd4b2037ce145f1c5f0d8af7820e8806ffd5a9297b31d990392f63cd745e801a05f96c2e6997b830fbf9def8e4fa0ab81e25a2edc9b2a9ed1fdbc60292b0c2bde1e9ac3ffe2670eed6d0a9601b065dbf31d430754af9f9756bdea7b208f634f2aa6b762a4a001888f207ac4664751052c6dc421d3a182dd9bf6c6ad12df30d478418163c9107e214823ac1b4fd5774ef2c30980a1217bff814b462c74bea7f0f8646091a31821e8999710ed4632daffdac071e7c613124d09102d2550ee24767e8eac6349b6198d9c3857386d97bedc41d65a1e725054b3ac9a615cbcb99b5274198f92f4c9361527d1c680dd6b1db4262abb5efbee631e3b091ac9ea8dc553d2482d2145eee490f0f1221c8a182bf3826a8fd34702d0686cca1ce52995e0dfc620a8d19bcf82ec7835449308d597c681d7fa33dc4bc2933c5f5f3811036cf5f3ef58616e0c89e1bc857b89c96055dd64ba9dd8ae8c0f131ea9bfc7790fa460dd39ee70d7d13fb4c7c0dfb5b199ab0f986735cbea9b0928e905f88d9fd8d15e4314b12176f028a95829de41d0ad044200049c467a5b9963305f03ab98d9092c1fa257c1283703e0a8a3887e78cebe3e605eeadc052a82e3f43d06455f2f2aa68095c3c1893e8db8631a4cfdf821380559df48800dd8f889dd41b886a4dd5c32dc4d2603de3f491315ce5bfe3048a55a70b84ba958fca4f3c83ce048406c327ef4e986b108618a41a541e71ea5cbda3cf32fa08eddacec4d4ce3d22ca099dde3e7641a41c3211e25fd58ef9661ff236ec3f51c4b161adbc9dc15a408c6ddaec08d91cf20bdb34cfef204c7d87b4a25c534b9f395d264b0b3ddc5e1fc11393de97f3b27124d9ec5f86813d4dec8f8e913d17004b67f13c69c0e04b80dd4aa8e64da442b330af52b6599848444c4e81ee1bea567d765b0b0ba1aea957d05880c5d975b90409a0e84433bc6abd8ba914a658916eb442be952028bd93dcf5e1adb2edd650582c08db395c137a93eb73d7870cc5c92c295023f2b15af03b0277e6897bb4182f0b576c9f91f30d1087f1a9d6abda1d412cb65089caf5b677631c6ce8c0750ebd21f6333d5686103d1b12da95ce2c23fdcf49e1c504a35139a91bd71432605de401a2f458643452eec99abadf3d0cb0868e9a35a8e02e20bb26c010dcdd1280ca23d61c7759f0215a3b478d5da82b756370aaa2012b29b33dcc4c8e0273edd44b09ee710377a4446ef3d79b43c1895704ddfb75dd5774d0c15690f78e88bf198b2f783a605853fbb3ffc31d785b641e05e9aca281114f71db1352480544d8f7f9175fd4dda2ffb5fde4ebe0947b61e41d4fc320a73d101a2fe61ce132971f35a60ce94526abea7980bc41ad5b86b5505cb95e24eaf4cff7ee299976de8c8a34ac1592a0d162085e633bdec1269b43f97d064539943286ee4e1d68602d797a48d91f18f25f02bf3b19675795084a3eba0246e833288dabe4232126e27a31f62550353b1d083070a98bcaeb2d9ff7a9c22f415695ef93e545f4f8075ab0afab5f000cab13fd3670dd07cbd1589cb01d8cfabc5400272ff0dfb9aff706bf74c9a03112c00d1371f108008fb10cc75f50a39e82e60fe761a8adc96f61eeeb32e09dae2514e67df9a441073ced0049af06b77a7165de2b9decbe9fcea88d75a692e01b050421b546c925b1b41603873d18e5be37971dc9325c8d6f319a0cc4f242744826669c0c45d0c93deac0fa95ce26d6dd9b39adef2e76abb5b1755aba34adf3692a7fd6573e028c1585006df7caba74d8235b0214f6942320072018b924b0bde33f6edc8ed63bf75de0b9aabfcf2436e17d10b9e7b60e39d8f1ea9bbbf9e579da22b9c4184caa1ed4db1d2c4bd0b88895ebef5a9b085a6ff9d8041a065d2a60a12fa8c9d788d1eb7596dba7eea0e7e9801989bae889337e2e83bea0c3e0f74cee087251a7445e1fc86c80107964c75deebadb11b4e851872439603ac056809094000d601002ee1469baebae646aa6f91ac841f734bc450aeb44076c6d04da76b03930a81ff745914fca06e59179342a13ceaa3b124aa7849d5e4c0b0637fba9230b27cb802dd376b39755b8d06d214e775f34acb8fe9679f579d118ce3ac86dbc33da141ac5cfba8f3d9cc723dff0a66d8521ab50ef71d59d68ddd99f7f9ec0d314402dc64dd82ecca191cf18a42886eab3f637f5832556f885fecd50a6e479d7037e691fc5e9543b18d798e2b07a2eeaf39401a9dfaf9ac180318e32b7c4a2212d057ff38464efe53732107cb71e50087636461dc7f01cde085ba6b613b80b802d7cfc5ffcd4643ba5dd668014cb37f77ff08dff5c338cfae0b9536528c7369f3c3b0621f4a4fa9a0ed069f001e3ce1ae56c5843bc5d8cdedeb3aee69f06dbc10fb9af9230ec44b7cc72110470213569ffcf7ee7fd3b4c1b44b63769f35dca243680767a6e23b456ae0d336a4cbe3abfa1f70b68c78dbb15b46ac133f76063662e3cb9ae9f642a9cef0a71482cbd56227fb53fe443b94cc05efd96aec3efdbc9353723f126cf487b20f0198d2cac700eb8065fbc6f5fd4d50621cfe42a7951b515894d7ca197527701b08882f876fa857a62b89d2c37eeebc1ab5dc33dd38f1504494839204e82b83e0dbb1c26be1ab8423526e3f9a537fcc07ea1c1ccb0969c2821d1cb09bbbc028e4d488f4f7bd6f83a5daf0b36d9a46f8aee3b63cbb15d253f6f2eccb015e58d003e0a0d445547e62e3e6d0a5f86f466466970b5177e5364353e1ead66df1fa7c47100267674d58a9788ef513f7d96e497a1cb054d4c4c5f0a030f0e7357ce3c73698697489b90acb37893789896a32144e511209d40f04313bb1c02d8bd43914f66bd75a78b9e5d2b1a215567e43533d11a47b392e6e9c20a8c58767a21878549652381d04083fe85e2fa85f1c370be581a761a01776aeb8832fe12986947b9f4e6c53e62cb2aaec4aa81eb69b50a777d59dbfd0616d9ac10f375b0efbf7a0b647a89bed1850d24c45ac8db5e87f92a159af04aa6960497066f5a448e2ed26e9702a03bfa62d1d1a1cca41f1f89ea23cc0755aba4686d663473e149987fd172e3d28211ad97e8ecb74dfe49fa03c1b778ea6d705c009375394cc50fb73ecc1beca0bf6a71e6906f2f9e04984f5d62918932dae5410f62cd2afae3c7727b6aab56925264baebb2329ac8d7ad5fa15ef27096bb6baf6de803a517e45c3c362a4b855ce75e9606d3623bb2a8179f2412180290d2c02f440663afdd153281403f2995c734109909aad7569dc397eb6eec6ef3929038794d8721099c054a6b74a750ef561a781b5ea2bb3ffff843b0d0ae9fd2651205a93ac60710e4cd211a0a118d742fff579a42b7e77b516da8ec9f6076b741f29961748fc39107b122173c3bde856ab3f95adeaf95d3ef3ea6f93c41e2c30f4f55b61d04b7a10644ecdb9f7cda471efbc3c2e84d929e268f1b966e4432543f023cd85e4bda90112bd35dc3a00c35612ad8f095951af00da6eb3af63d8ab29780f55830e0d19ae365c7a065bb86fcc83812d671dc3c7a2308712a274bb8081d94f76986410a385dfbfba5efbe07da6c5a889bbb060071ba156a321cc5674a76374c553a7dc0afc92e508feba06d5375ab73180ed588f1377b13511ddcb6ca2c0867e682ac7b34c8dfe9a303b2dc61b87908bf1e6debdec8db29f881be29e19b6ba30b7ef3d092d6a320882f63bf034702800e2b679b42ffb3f1c5faef8d2edfc0b83df52a451eda8e6b746799f1b563a7fd839d7ae21050d762fe4ef93f0481b7ec1d66e2bb87877cbe1865841d6f9f4bced1e1d10a5d7c22b6fcf75b7b96aff4920dba285b979784d63c11106ad79cc719ef308092ea9b76dfa548c5b333c6e0d15a8e3c5a8edf5c20dceab3ea619c53ce1ba44aa1749abdfcd594ec4a919dcd961e8298b328d83dee85f74c9f8109dd4c23d8216fe4e215e1da7ee301cb12b8bb03c754421157abc9c09f34f5412d08a0e6e99d9e1e8a8ced3100817a3c2a9dd593b69cf3844bcdd1410a5d589a8c743df4757afc799363988721131423bd146ebec318e80224baae535edb8f5a197ab06bfd750f192bced95d2bfd16b278d5474db1bf92166f4131ccd3be6aa3bcc6dca9d08fa37c8305788ff0ad0f40ca7a1052aa775d10ff1df383f1df4adeb43efdc6b9f26192b698067cd8a9ba1b8842d66fd4dba093a223200f921af012c1b4349e128a1b46f3ac2de8b32fee386be0966dd7ef312521d681dc6f39f21be410371c973de1b50f1892f640dbeb58f32a7e9cc279993bf54f2aa2ff0e2909b51c97d4a97ba6696c3d81cfea52a622c38689db8286680bd5561c4a41a6b7e1cd6b362bf2dbed1f08764ba5a5c3be89a1ad3b075c2983006c38a34e531b7c93db0054b6a1645d6282a1e281eea0b476bfdadd6fc400ad387b183a872afc5980e201062c5bb18376b781e95321be0f9d8b1065f5b58cbe290f412719f3e35297ca928335b0d60de2926f14adbcfc52366a611a2054e226b41d5803aab64336dd03eb0085bf4b45bfab799daa65ce30ebb51e770c9fc0d237050000800a27a72630f3375400000000564f34000000000002433dd82d93bf400c86dd6d84a358ccbe3f22f8ee615cd8683d4bbff4ab7b77a25cf31587fbda1a8d1e31fd4b12c10a1049b6fbff6dcdc64378f81408d50ef611384f45ae4767869722755bdf51bcf30b1c11081b778a3164f7122386d931d5a83dd7d135ea940127ca332713850ccdfb15d648a85cf62753be8f9fc1d5d9fb314f492e826172aafa2a754d6c0c8be0e620775967b9c6b7f1aebe909aa930180564691cf40d440b8a18b0a5d42a5a1ca987c75b3191186e33de09fb06215698faf4b9f1cc1d57d6aac40c0558cf76666d6ad80d8f73c2a07ddf6c4e00583444df67138fe40be3e9466ec6ff6f6c9c012cecb16c2ae35152978026d80aab9a428393e5b2c20cce17079931ecf602130aae1b1dfd6c92d0805a1c50b6462a0201659feb4b77ca8c1d882b039dbbb935f0fb48257f0aac296776470cd677dce6cc24559abc37bcdfa2b5879db32f47031526991884cf4f0961f8a0ac18d9339d9789d198b9e01361551cae604d05e0e0c293be480e834eaf7a9a5301237473e6c5641dd68da324f322da40f5938ea2fc5ddb23fe46bd6497f173f7e9f64756f4a7933e65d45dfdc78b7a148f2bd80571f43adb780149dfe4a8c4f76e7352cbca04b533eb5a0590b92bc990e82d737b9708ba0fc7c3ec1cbef3207c3107d06f6e554ce95b2a2bd64d6c35df3441a4c6203acb978734ce174e94b5945e62bb6468fd7da958f4df897d71332691fa1faeaaba189e4b959c140b6a64455d4935050d9437fceb47de753f53389643ce1d3b01d9a2f711e7a55b3a72b5e3efb5507cd1cd4f95279e8a16cff05aec4774300f2e3f4706a1d566c0dcbf0978aa4f08742e9fc538f9eee4551b1a8db23572f2a41cd60be65d90a8ca4e61c8f9ae5455ca4c44ebc38069d0695154f3ff94fc0624a33afa0cbe03bd147fd1c4b96bec871dc2832799970ee1497df99067b15f14297b8aa1c8be3f4540bba67a39cf3753f0489197039db0b1000a963830b56665dd90e67d14c3f07f76dc9b4c803c7c4a89144d30e0b3f40ac768d342487c8c11135bf0b880df738889c58f3948cb729a430f5c19d2faf9cc556d865199b00bff9a4650ec77087db5dab89ed55a58c230f7e326f088c134df0ed4f4c2441a0e31c4cd6f29f7a17b2d32b6f35caaffda314f75160a8bf4423ee56fc9e71adcc557f8af97d82194d1b923340534da6f8b260df84fdddaa2edea7f72eaa293685061cd097059ea3fac2f83eec360138ea30ffdb32b3947fbe01ed899b289c10016c24d22b34faf6f9c3dd86342478926d3b6cd19154c4fbcd3a3010fcdaeea840c597e3d3555c1c1f30f5421cda54c5debde138a57f2e4ee1d9ef6de0a7771fbcf6b5c6f854d719d3602c35b5d624a765bbc9bdef5181474550eba0dde7feae4196e29b3d76e45f55c3b9b160fd7fd4f919c59dd30ec82dcca5f14ad284a7f9aa36566e03e008d8eca091099085c868d3477ac4a883dd75aac09ddf143f6c84c936fc9544537e75fc82dd18f8bbabe6afeaaabb958481c50dfda1e7a458bee55817ed7dd98454c7f0700ebfcb05cdde2ad9b3fd80259acc485f8818ed9a9627004ca974588305efa43f871d13b944050233c13b0345f380dd7132af01200d0ec94933204f022a541e2bf788392994190b233e60087347e4b7bb970838a69c1c671d616763bdcbcacee0a3a985ae8bbef1509261f87dcad45d48e384cedd40c80b5c92f9ea7dd54cfabd574b42d5bdf5a515139284de87ffbffc56519c1530c88463c8c0d4582a506d5e3a4868d39288d527e8cc6a57dc516e0d56c3cdc9feb40ffde27a3407c2d1602ac7b0a4dd42de4ee07184cd01b2864fe528fd254b0d298395eba9ecf0e78f094ec643fedce3725db23b97f3bae982266a9713eacba04844e5121fdfd707e2268c60a06a3e8eac8b1ab49a5e27bad99a6e5106633e88ad7062cba1afb330eef39d0a0d378c790b91ca2428659790279bf19e8cb34008dbf96c59d85a102a2c32872609093c0c017c858e46c70d3763730a6c64a2de5afafaaee070023f204448b1112958ddda8bde7b30350cfd4b54d57b306e7bc3cb588be43eb40af1d53f2c3bbbe329994987d5db9a305c95e6126a197783ece61a99ef2890b4d884167b14995733ace93e18e50f7fdc4c9583a2e00e497cebf55840dad892b2b17a9d2c2ad43294151313c02ebc41855f1d7327686d25bf9ca97261d7b43a434a0e213d888bc5ce6745ff90ee7df6ddaf5c17b86d481a419b67e52a169bd0841426b183bea68dd25c6651e7a87c581ea6fe5fc5e171adaa6095a03102700000000000032ef86c9ddd4d9b749190bbd151664524ea253fe1b8c08bdbdf28767200db904fd601c0d8b05b117efa553f12a74eb679f58bd572dd643e711503d6a870ed2dcf0efa33f28b98c619de976df9b860e0b6d38a49f4c5cb2e495fdc8469a537436eb5f8a35b8c29647b9e3d320f52bdad9a717c255d1aeebc6713100891834f24f9aeaae69dd7e44a03f6d3d77f22046f5ca776171bccfff6a787a6e6667d294c0aee6a93ecd28d21778c2e64ab47ad93dcdb4e5f8726842908233fb7c2d27fb45f0c111ee7929c4358e3f36ea99a565fbc6a3667496ae77d2c01dc16d60f3ab61623b1ac0cc1cee85c5e302f14fd3123c93bce683d2f8842a8b6f660dadd3543e03420ea8a4a364c82745347d0b49b9e29109500f4959f22cd27fa42457498ccb50a8a9ca9401905f65296a02bf7daeae4cf47b5533ddee715eb0f56f27855a537cc71a24fbea824f0941888d659fcde815573ed104e90d9faf1f8e59544e4cd6c93b37e9e9109671de119ed56101e39468e2b34f177a92e3463fb6a55b6f178e4feda0fa04f67b24e09227a0935a5a2611371a9a291e44e1bc6a29f9f0543e14c92335cf35375c5ad88ca340e83446ff703a30c81bbefe10e5ebb9dec55f15975c27331433740983f93e702fb9f7b84877cea0741e70a635d6bb077b50d5797eef199f57446371435043f25ea6660b74e574db2446a88b9dc7c7db2474fd4dd97ae2395cfa557ad6350ede2207d4caa747e1a34610db8b76a0a2560dea81a8fee575a77a46ab6154cdff91fbec8aa8ecc49a0e774f3b56d8cfc8ef45f6c82ff9cd6e0e0568bcf1d0ae50b4e57d72eefa7132ad8b45a943349bf63260b71248bf78b895cc0c246d4f9f973baf46dd09264a7a619388d6fe2f96fc798feb5e3f95b1a30e3ec6a339b7735900b8c23b8beeb4282050dc0e1983fde0ba74ebb8565602e03a6f81ff33763c6cef7726bf61df45f0b046891c12cbd71730cd902d1e22b83a3b17d1d321e00f161ed3050f7ad29aba91393a46ef6360ba3185b63b2976dc4583c744da04bf8f677f5b60b88e3dcf4457da6bc063e97fb9fa8f17dfef36bd9b0cf0830ed225a6729f8251625ab65918e706a19d7b5a95904aa485f50aebe84c8425d2c38e59b78396a3c6b677a3cb135c536b2e434202824b6c1dd0edf0e5481e942b0cb87e8100763f96ef6f330aca2b31d77bb7a7a3ae955d81797abe5b3616f12705af000814da2978e5bdd1c7b3b5be36fbdc370c75db19bdc50ab008e7a4ab89e5211d089463aa2d4d9ecb1bd4c99b237e062dbfe7500da44ada09e4e924cee14c7f416d97e51c891010e0993a4a368a7f0ec4036a85ddef0f7a6d06258bbfa3961c543b18373bce429f4b8611789af5c24efcc67ac20a887b70b62582ac8243dd4279778e775f6acb695369f195ecf0f9441835833bababf485cc804a143e7d9e8ae9afac9f33da48c369134d62f9500176f059171855c41c2970d43d061bcb15fdd05a1b4ccd2adf6dc36542e49739c94a31347db498db498843d2e190e26ce1e8e078e6959d9844ea73fcd9ec2fa8f057700e46020a7f2e8e1f75eb2553ba09a23ad67422ba4831b6340f17f7fe7335a497d66e44ab917d56d2768fb81b1777904ee6b16a4c7396397306a02628c25593c326c43b9d0ff96a5c5de2bf6661f71a256b1e99fce3cd466a193f3218c09f3b0a76319746f4bbe3c892680edb1c12d71e7d681c28eb22f842cf371bcf75631b4fe2dc87e9dfb410c9e6dc067ff42aa6c408ce31f61cc86a570433e98a14c417cb376efab9ecdbe1009c340f9daa6474cf8c66dd02351f1185f1f0f96364fa2879531b5ac79a086884b913b26b400e8f490f98556b7182c3312f3fd9ef0b1d1df3073ebcd7bc99fe72a4ff9f653071c81eed97a5f61041ea01bda39f78cfe72094d86a2372906620d43807966818472944701dda03d8a8a56c02d27bbcd5cee6b58b3eec87aeb54fab2f892e5c6d3c5c910648a665ed3a1f41a217672b68ca28a7aff60d532350f8ffe2ad0f0f66876f363dfc7018ee7e5522bff997002b747e548b06918f52265d74197e26b5d5f8e126685722943e8b758d5de8e0d7732e27006ff8a7d083840b6d5e9dbbada5126cdc7b2c27fd57e4ddd6577f0788b1e04aee6f85b2a16707fabb94c6a9cf4732e3ee06f2441645b30a5c631655584814ad373bb05bc66e4d4bdd2d9ca2d0848179a6aeec1e17197ccb837cbaac487ac68f02d0049c1801ece4f808ec845ad278b6c0a7fe546ceed8d0e8b7ae4b003d2ce8e26f440f61318788f94b8b1844302e55101978ffe1aede8c457b790810b863fa5775cb593fea5ff248feab9b1656ef3f95d99e2c75dbe5d9a661303d31ff4429b01ba852bf4b8cc5d2d8f43d114ed249e238f6b5e3d786d5673faed166d88c213c4b609234e01c505f16f22d704f004ba48262112db48a4b2a37a5a5e48132b894e0371b63e7637c7e03491ebd15dd20b9641a60042974daef8bceb9df8cf3d19c311f61eb81fc378ed2d62e47e39c100ae55ff76bf8190987b8f95f6a2f814a8313989fa2195e3a53adc60127f43f8f35cb36f148e1664b80673d15aa809e72ab8c26a524683629eb3bc332a0182d220ea326270fc76ac84e0c7a5e7dfbb9360d3883f5f8fd86318415e130f21cf9dc33db3b66fc4a742cb1385147649675533664b99a912bfae60e335d1adde922c233a83ee9b3382bc1657b4e3c6fc78157d2b4df1bf71d4d16f0800917eae9036224ca2a8b97f722d4b2eac47dd783b2d2c5f46416c823e17be540b035bf22edf9794d37e815be871e884435ac89ffcbfcd577859f4ce0cfeef4e37e1d563fbb6ec786b3604ce2c5ce8bda6dd736a2cb047961b17c2b4648c73d440312944391d396c98e67b5de32262e5de324e310c1dc4f9321623b8fae8a7af3103449341e9aa43dd7e6ef9d6e9f8ad3cc152bf61fc35a7c4fbf06caeaa48f8607063c3eb6451fbaf23b28e34a33c725865589a157ffa1edc07636db9bd789684b1b8844211dcc8411b95af2b025db4952b579d147ae9c6b96a8a969e161a16b1a3a721854d1741742ce997f28579dac26fa01a3b82e2d8f85b69e3152823805ce28550342f3c0c41e7748096c7f363e9abf8d8abf8f2f33052eb769ec19b139f416be9e5c6ddb69cdcb802182c0d4d342dc04d430987237398687dfca605b605123a190467b39db6c67ac451dbb5b564686b83fe78a3aaa980062843ccf32510f2f07b85ae951991e5f3b69631099a2c54dcdb6ec9eb1fa94fa8a10d3a949c0f023750dabc79116b71cb540097e1482df1bcc0d63aae75b5f6c98c184fe6a26c700dd416624f08213a5cc081ea1041850aae46486e2f7b3129a88c5cf1a7ad98a1c10598cd13ff2a0224129917ff601ed26eb1a6957dc34adb54bc09d36a09f89227aca94def8c1b883d3dfd177c09663f31c6088e592666bda4ae2eb06f640cd13cd112055edf801f8b3efa25814b1dd4dde050d35cdc7c7d5e293e7fc775c313e79afe930fc4b076b788b690d8aec6d165f5762d7203fdfe4773f472bddf2f22af8dd05376c63ef2af9834b6a880e48f0052fc49b6d11e8367620e4ef0632531a19de29a057006e331d6fb6a6fd416304801ceb2900fd0d55b3de4ddd6e366811b320689057c1cca761481fc2d3fd751122f9e08aa2ac213118f49b533bbcc40c1c4b889cc410e8fe60315cc62e2ed9704ba7ab9200b4b3658e55c06ba8bcf7042a9ed66a7a870ba7354d0c4aa3253950c6b4b965bd55085e2de815bc57147e269a5ce6f4c623eed68c93ce58920922c8229afe7e17adcc0ad319304714a3080d4bd21c130233d3a20c995debced88eefb452c349067bf2e43922019c25a9862b1f2ed5655347e779b99fea3edacbdc398dc6a9066d049ba8fe248814e248123eed0ada7e2b610a6267409fd56d2ed674679d588177a3286947de88ed5f08d917fb60c553c6bf6c8720ef612e281ab00261f7638370a65ca3a4fd3f2f6732e612f96a112d1a1641a13e0b6d5359a3772b1dc1a1e4ac075f76c318bc71545c8331f31615c1c20f04aa3af8c5130be0fa519b1207a3f5a53a759b5843563b8843061912a0b19375f3fecec81399dbf954cb9dafb127667826b3d7b266c975878706ecd3a9d7e6844a07ed3bad2c45c3e1dcbf38422160cc9817541b3b5320f1dd2c4daadaaf5c5d933ae72a71e20fcd184cf8ef9f8747db6fe57bf32fa7144c6c2ea3fff7d22d2c5e15bca6c33e9047e1e1b83ea82f10f66b28cb582a57cd1ad506327880b57ba54eb777693f027e84948a6eda5004a83f262ce3c2c4f33575bd217a6ab671fe858fce66307d8298a60233c81e62f9cd9af557550a17fb4c574f2f8c29919341b0ccb34639b77c71969ef2bdbb68c0a4e54be326a0b76513ed023889d364f93e342c3fa34b1250d82bd72b93c81b638a1dae575f4a7fb0a169d9048c8d951a106d53a8f4d4fa611ec3ce23bd34b681af1d0f4d325a90e8f3b978031752562726e483035d94eca6080a1f4596da93e0f0d564aae2c87a92676ea02fcd1e66415127c704fdd0d22dd9867e4e877359f225e47456280e7659377b4f162fd1bd1fdc8c9ce94d74e246ceefc697fadf3bda1c68e4bb210e9528a444e537882aad7c90fc4939e0e19a847d8fb2bc6658f084eb6be3a0cae6f1ec788e5f2f71edfd23eedee52607e4548e1efbf9ee6015c36f900691aef4d5206d5f3a33139dbf6a1f5f55bb0920577c02763ceb8cbbdbddb5cfe85e0816ff6c899a40bc0d3d9b4c6c096c94543a6046bf6c2d9a30b8d6560f14fda1ec44dd4fe4f6e5130461983dfdc16aeac735717c23af41eda55a94128fa1171f67cf97676c08268703c690d313bd1b18090d26020cfd35806dc75e8d431580ff83126f53401edddd1a9a652e82668a9946c8a57d3b1c147ea9d16e42c2f14ca5d086a6671743d6ae14d4c87b8a51a60dc3b54479f2f3030b69d2ceba49d86b1a1f8cfeb15db9fce31c16d1f3c63e77516cb42af1151357972e32b59ac8033f5c5bb70e22f17f607b02e8536bf8e214c87c97490b975f79a9b7dd5babcca9d35a8dbb5a42bac2c243386d36a54f7e336fa317c4b2c83d43f9084a3cc3da79d8fbfa61d72975e8e47134bddfd52e00df8cc9f2148a60b3052e60dd3a6f0293b682a67404c5e268fbf425fdc2ec643e282ded3f901712f9412d978ccd8002c9fd08e0a90369c00c58ff3d2ff9f0e38f72da9d78ec499a16b61431ceb45649f9789ae4409163a73e38b030504088f52901fec9102438bb65738250e9c85064ac2ae4796e2a3ff07c15e20dbb55da55ba3b04ac80d615821e6f747c0e51895062d00bd66e5f956459ca822b34a18ab6f1721cb0579ea0f95e0eeceadfa3dc45d9cfaf890daab2bac66b8b34f71fcb413ac219e46e9b81771c48d87269e1a0f62a8f4ef4ed8d570637708816106ef231b92f723ce5e4b76d1deeddfdec0b65c5bd2c1f9aeeaac87ca263261f4ab1bb0111b35c4a99e9300fa0a9aefd2c28a7cef8ef439c3b9f4e6f3f67121515246681476e2867df2e75b7d62123de635a350294e3d7189280ee2a730c7d3d1c3974e34aaf06d4b7e109edf2d21ded9f333a5cc6a1734d3ad66ba3d2e8261e8e40d08a2ac59e26299fe0b2b2e6dffceaab05d3efbf999a88e9902812d7d225b9d7ceaa0e0a350a692d19360b33d67817044240222dcb18122a4bf3e8a6a93251f20579390584882cbe93d24e8d247f9de5319d37a428d0c3757af4e73e652de9186606b89e460d53d1c0d85254a5ab848434d290547d6968eb9ad7491d58245486bc80c6f6b196f9db8cca5cff2248927855ec8dbdbb57e9c483a1ed16952f4629161f224c8dfca173daf374d2deaaa5e4c9ef9bffa282a13af562eb2a28147d36ea5b606e995adec670dfb9bd16b190201866cab485e290a55f12ec52e839871595ac230de699b4e7bbd332ebb34d116faec04d0c0e15be3adada89a4be16dc0938acca9bcc5d102e9d2ed3ec69e009d473e90c09f420e5222d8a75a88935f8cbd77e80f27c8500b089d9d55966a52954bc293c7ebde7146d3e32fd40593dc46f00ca3d597afe68c78d3edb7ab55d0802814d83c05aa60a950ff839c6270dfe80a7172a82279156628295296a4be502eb6f69260672b5687fd6eda93d8636d058bb63bf12ddd4cc0452ffbfb65ee00ed39da9171b9b55bd85bbd7dcbb123f2ee8dd6965943f75b7676023031f892e5e6da2bc85869472f94a8015a8eec431a9c9791b629dd2e331e09cea69dcb51943b60594f5242d10ca3cbe5a20e6db264c92eb5c700b854b6d064b236a3b00f92d016f1ea43887d7531d6b52c75bb61098bfefe808bd394b48e0ceb953139ac06cb9d7ba78c7322230ef3882f3892820d5c3c31f52c501264a7730412aeb64d2453872a51626e803e0583b0f5580c32b98b01966433ee1595f94f26a7e61e57d5509470eec8747c6e71e2e2e1229332fdae51fda8bd58f3518c472c65efe845fc1b113f7797a71c60f72612cd28820396043928b3f09610fa06587de22f1b3daf7e20179b6c01f5967032a69c4f81b3f5a91425947ec8ec38224fb5add565f3d19e7d49902bcbb630c773f9ec7590f373df590544c5a3d563e9e3fa5f989b6f310838fcd9b1f704489cef7e324464021e066591388f233e083994ad0f46cf0547012ef0c98927515dc0430531da0593babe3ef688896b18ecdf48304dbade3436f1f66d34fab756a81daac54a657bc39863e701ce0d3f8453afa7f5669a6f7ac035943a842336ffb853e581e0c954632d8d64c6f2f2d87ef65a256997da15769c1f7b7a10a152b7968cd603f26f408063aef4511cbb971268aaddc9d541d4dad5fdd1d12de28654d410b54c4b50d36088e7739774a0496ff2e19ec06a6bf31070d924b74a760c2c5ddf431f1d67f380d7f40e9055ebc14ecb1df8e9258432d67de26590f0e49a4e65f3e4eb6f4365d3ec9154a955de03680b54c7367dbe750029614a609e62c6e77b40bc6c108786c2e2be8736d5431b76ef398a1deb7e7d73235cbd95c2ad711b120b1adef338286318cbf97bfa8ee8b563f5cf48010025bcf961f0b64543a2ef72b29b291b8dfec396ed875f3f1430c7e11cbe95b0e50fd2c5f19216f820e42ec00773b1869c8632addb394140c0de138a8ebc7b9c8b45cd0399cddd184006d5cdfe7cb82c2b2b30f058dae32f913c399eeaee7f522dc679bc0a9e18e5b9a4e7a3e6caa64cba84201915ffb43f348eda3597135c06a0f9503e9fe989591b7a75c061cad69429ef03208ba0b2b8afafcd1322477e2174c9a4eaa980c3644c82477c21fbf2a2efa8328ede890b18b439b1e5660788a322df68dc67e3818a6965ef11ab532b73a151d2d716860d2e5cc980f999f77674464772414e6a7163a909d455b438287d7ab3c0b7a0aba70b57623415214a7c6db56744585d4816ced4293de9c6a118cb8f9e837c7561a3dadb455cef64019e2a455e2a18dcc2d0dd27a2e98df204ff51f579e385ed8a16c46dfda9be7202759eb040cf4f537f9e12a6b00e9217bfe9f3f075e379ac11e71a2631fc2e17787fefa5f52ea97461b0410337e9645d6cc69479d251c06b9936242d4314a8356bcec914bd7ad27240296446744cc3c4ef359debf3b1ce9b13383f818f065c8317dfc1f25d73e91f1596bf5e7a463dd49ac0dfdbf442e30157e63570ab1f3427931f466e35a8f237962d2007372a54c90f4092b97561378c4adaca0aa70d667571b18f3faac06ca8dfc76fc1a120a170904c77f1e7d168bd0e7f0e6a60a868c9f6b542bd035a1e11026d17f57daa170bfdfc813d71426c243ce254f3dfd4e7b50b84e4e15de7d85f87e7dbf3a9c7d6cde39c8bd744c06dda7338d2d4f202e1f1c1bcdbbc67d65fceed2ad96ba8bd6c3dc9198e691291a52ea3b25192619f1a8927faa8f1db0dff5440f35d8300a93a781cab63aadc9109ca4dd1cb4f43dbce2d81edc408714fcd6e4cae32f442da6b63928fc76de06122af714e3615cbf27c4a034f54bfd3e1a19bb7ae63b96384679d86e806204e824a68f5fd33d4c99d400a1ebff0dd7955c0fe4cea713bb53959e6180cd815e490d899237e4464877099c9208f0e7ea84a3c5a3e1f59932430b6b64fa8dac6b9d325a816ab3ddd39ceef81e4f2a783d1f0d1f6980dcbc0c4ca4828cebcd523f0c0c024f02aec9b092d1344b8a58e0839eb7447132de4f4d512974528b309d12333f7368e00698b115a227a036a2dbe2e4a7a7947e31c5e2816c14f94ed5aebcc13eaba6fcc5f89ae8ddbc031e624b911ef61dc9ae57fc2ccad6eb1335141f028a1b07deb9d8c0357819a167c84531c2eeb7f5c282de9b6443884688c86a67d79b2356e88a8ae8ecd9754c016c1c7f0fa5d17f03b1d400c4ff347399167990113a3cfcac074257effee1e02a89b1bfd4b2788d13883b8a00b66f9b8cb6e0602f9134f9db990e401ebfe30bb6eb01fec333047204f86b3a4cfec56013042219c401227db74a10cd8b1c3f702a613bcc62c84367541f721398d8469bbd89f6f015510f6077adf846f2634a233ebebfa49f0bea599ba2ba57dee9fa87b48c204868320e2222779c3bf61a5195a115e739f8429b23a0fec8f463b5dffb9d2484f02bfc03b5382c1b832f92e5de586364a8116d676c681b4c7eca4a24b38b900b32cbe72a48edc31db22f70ba8d62215696b20244cfc46bb5924f7e2151f9a7aead486632926f1bb61cde7c5ec71efdfcb309d15a985cd719526aa908f805bec20ae5a80244526fb36c13ab52068f66ab7f0643d785930d94e3868f74ef43e0b620bee8381a42bf6cb8728899e6c10ebc7302f98c82da05401df85fe55a7e4a146827dc041a42ad8fdee82f58b6aa28242225f00c2f68601ae02677e55457a679c9b5c23f7e1864ca7cd5075429ebcb1cb126897cf8cd50f4d7c4eae59deb15de67b09622018ac13fc55179a8445c3fcb4fb58e90d31ae606aaea6632bfea9af21cef3b111e4aec36ad650d8cc27c58ef41d25897653deddf5fa7c70e7827f4b8dd427620ca8218287538af6c2c9949d355bed1a043614b1bda08e26e2c16bd08e2271e1a8ccd16f76d766ac391b2e9df015ee0b5ca9448e723909bcf97bc4ccd84e4a6248a58398b0a6f9bb2f6d3dcfb53baf1a48000610affc5c77a6f5f8fd86d37ca093a1babc8ae2b53d5df25455c1a833a2d2bcdbb345d7e010f48f57cb700a0603da03fe6f27285031da78f529ed03a55f802f8aa0991370906c2d69335b0582897829ea61b82d1c9bb80eea65b750daa210ef1f478187e69e16467894b04be619ae9bb2cb35f0066caa4a33ba60b1c7a7f8a83aa3eed3e6405d4b744341d4d31b1787c9e794b78b30b68ca95e3ff49f8263a6cc48023a5d6593bb4a7fcd20e9803eae3f2a9bdc59119ea2d64d1d0a9d33ee1a70543eb410287ac9e4d055e350826138e8414252a12812b281c0717085b95ae420775d2638f4f9914ac7177f25518030f20ca329b93fa4f14e0c51e42e3d28197ea9ca863df7ad6e40d62664eedae66357d83f50566d4b6143b6458a3e58b0ad7e3b915a08754c5b8ca548184891cfcc0b50aba28fc88b1a46e417f1c29040e65f124aeb7a577147e0315f8263fbd65aa4c254efea37fac2d6806e39bbbb47ac2399546751c76c6841e1c3e5cea0047c70c575e3ccecc0de4f951cb6ba3934e27c8d508fa3f22e0ad8cafa97ccd246285089e84595d9afa7f0dc273a41656917f17b44908d44e471f6599ccd87137e82ab8b7511c18b4ffbc9edf85478938d511a7796b676b05420071f04baa19352dec586398782376f49f7688eaa94922fbf02613db9a6698af2a09ee46e67f1019ab9022d4c0aad96c05f5bd8dc9c9de6f0725f1468138d882fb457f00d6b2363b1695f99642ceea73b4050cbbe0aff5a9f368d6a81b1b26af9397eda856c114f4ba8932914424e815e50564b7586cdbc71148ace1e2de316aaf65828bc618b87aea002b593978be319331ff154f8117e6165ef77afc026448b3a51d6440428e9509f3e4e73083030c8677ad302a9b55b3d8ed127b850fff68dc6882a7131d9211e53c5e2a1b095ab78528f01e7f8786caaddb537567046d4125fcc6184428997fa42158f664f6ed1cd8a2d7de03942409b14280a6198c3eb4491278125655aa2f76e5982522b370dc8316744029647ba7b6dab37bf439133c9edb5442133903ec8c8b7ecf2637ca9dc1ce5665356ad2120bc88c315216e6c755d3c0208d72216376ef0ae0f63470dbbc339328213a502e8c55dc51adb0fd02c3d8d3b1fe690611ac3f7dcf3e759bf88303d340d987d7efc185bcc90ea9440a1aaef63905c000d1069227770c1f2be2e86434679740b6983a0ced6c7df62e30831972381e4931cd229d9c045cc8821e14009dd0db4165367009fc91a4aec13b0f9b0a0f984b18e42b330cf10cb979bc9369e053664b9a84ac1625579e043776a3b3dea09b111f224511904e08e0d3da57a6d4b8e154704e02860768d163b193552e00598ac43f050000800a27a72630f3375400000000564f340000000000028b62b962ef94553c31a7cf76b335878bb201be5d689d58c0f9d489eaa8236ead5db7ab4e361fca759b639a9931ef28fb6c39aceeddb0d9f60958e77b88853b11fc3d21bd4615905702ad076c12eeb1e5e0e2dc92ca600bb3b0ba040ce8b7a507da5509bb9987bcd7ffa815dbed44029379346eabf8494e1a1c622da5b5bcab002643e4c8b1c0d70801fdf8a72bd281c760a46f0468b916b26bf6dacbe3dc9e8708215cc42f50fc58df68c204a6ca9d299321893a919bccf8ec1d3b05aae8c7f8aa3af1df009a0ee22753bb6b6176508198fadac3cde15a5faf8b1ecf23855112c7cb5d319a7d598bbc5dfe6c2a1387eca56f420fe8c58369b2934a3bf65ca6de7e64a291ad239b579cf5fa6d7ce1caf3297b37742d2caf7e2bbd476cda7a15fbe6464626008bbbb4041846da23d8f796ae577b1c2dba1bdc9208dbe29c555a33cc6d82f3d112998532bdd80384208810781a3f19b01322dd5cf3f0708b259e763581f0c7df86de6188959e9233a4f4176b62c8515b2881f6f4d35dbe960858df9eebd9bf498bf647504d9cc7c02311300b43708200738c16c7d90c81bfd37d1f302b76e1848d086001546de5d8c3fa9274798b48543a4e06bf81737f8ccc9f1664b541bb30e38bca7c0af4fac9d496c6db604d2b94a5477b848bbe322bbb0bbf1d73cfe26000bbf82ebcc18c2ab83b61cde7b477a8b6329cfa0780ee5d65387053ae9044ba1fa7fbd36793265da1366c7ee0a431fd938b53400d0eae838727c0c1661e89d89dd44d9857f1c5b40aa3878f1a3180b8abe9ec790d9d1c66e2d417cfa720dc68e8a601def36a22b814e836473b789593b2035ded219db7db07967a83a502764a4d3016c04f09fa4e565e2b91703d681a1d313ec3a201d2f9fa1bbf71835c193779580c43fa9789d649cfc2c70cfc05406af3e4b947e270df295c2ef135e8c2a4ad8e3629ae4283c14f584d4d33df22120299eb69601e5a155a85fb5ab3a60f1d6173231e75d11eb5f84339282271467f8c83e32f6a550b5a09cbb1ce0a11e1ddb32cf9621034d19e635fa6dd394371392399c901cce93e128402347a8fe51c88e0ddb8a76d6e0b857a0a43f46e15147db839dd4386c5a2070883fa9948d4dbab5bbc027a52e13306ff193c7e59e4bd3137ac66d5d01e908c53a2231cfb28e3696faa1418315471e36035691cf360bce64c2296a21d9a24c4b584603c4e649c4ada44f8e4da5c8db2b54e10f2475730c636fdc5206b31dcda6ed1e6b19775107b0f3f86898db7323b4bc8b4023a40bec50633e9d88122e6f305d9f547c811f4927ee104cb42b0242b1e0b1c1d2ad43d0887547ee43743e5276b5d99af908b87b0f9faa91ce8b36151680ccec00b6c154f72fc56536b527def68d5990344cc913d06166928f0b8126ed4e9a70b91c5cf725db16638128bdf3b7555175a04d7253495d272908e18d073192fde28d1f66f494c9be7a247d6e38d6b0dd9e2c485ec9a075a1f4c735517b33287d25536fc99a46ce37c0306d75fcc2e11b04f91e824df61bdfc2430cec858cb301da413eb709ffdefe37c195d7420e0270a533dfdeccd5426a491c3ed8e49fa91c5d227191952939ef821506d33809ee623730f01f7de823aea1073e6841604b4412441632d33476d40e7c8c03501b17eda7842552c42749bd5bc43addd42cc46ac33c8fe8a57a5dfd776033aa96843f9dbcbb4cdcde511c9a9b2f078bac3dfabfd2ac0675dbef7e1777d92df12e1c0db6654588768ff2e0fa3619fa951cf35e92bfb79767010658e72cd712a4a19737b9d0b38970419d0d6b8c4444388ec1f550fb58265499a34e065dacc6a6dfc9287edc1c983c242e43554429bfda9135e8d31439150fa2a5a4b837eadc3501f1857e69c9419e826a1bb3e6e45818aa2ee286da6324ec6ddf1af0db9df98e87170f27cf3a1c6219f1ebf1c82352010e190e51876c78bbff16eff69735f5b55f90ea3376bc5e13cfce2833934e9c892a66c8c4e7ab33e7b654694dd71db0330d377bd8a05f7483bc982bb405404b41adff850f3d07a1189776d1118f243fb67873c2590d54f6bb7b091913b5f04d7c91e27b2d193b5299b6fd7c9f65dc30cf259486104bb6ee861ac1909d4530d182badb0e639549567afdd87d6aa698c6324bf0f87908e185808c3260e5099fc17f69b2802222034a88d577000465b40d539da76f33f6c3202a142212be8c197188776db3753396dd200451b244f6ace0febd3879fea27ef0555ea65b752a8568e226e8b6477f52d9e1c9436ab5eb415f3943f045b7d7987f5cabdb4b20c03102700000000000032ef86c9ddd4d9b749190bbd151664524ea253fe1b8c08bdbdf28767200db904fd601c87007940ed87fed3202ac0e99e5a9e83262a7734592166b553f0ef89902ffdaca43fe10ab2f2c64d0dfbca603364c62a1bbdcc8a01dd568a8238bedce493e6a64fa8dd68ae71a07fdefb14b06cd4556d27638984f9af78c5e12d78b4f265d8379072cc5a51554594436c8f10bacc5230d2f6eaf902e76d831cd3504832657835c5394ed70ab077f2ab744bc76fd39db51b5f2ebf0b0be67901754014995116107ffbf816bfa0a3d252c32065eff5ca395c54c6300b558a4dff1da69315ccf516bd51a3890d8bd07aea129787b60569cfae1b60bd6bc858c3c38eaa9a0292e0361e80369b16334f8b6b2f58840771bc8b46a3579f414cf75ceb0b915d38e5208e664fb375b5fed79161fbee41a51b1a1e218ddf47821670c0072a536e5d8fec8abe6a99508749be7606bde3b1892fcf5b63acbb4f2fe8d6b80c5fc40333eecba7d189f19790ce17977df3136f7c8ff148e52d6337b053bca26683800dd7499e21afe3033e4b775731b0c9acecfb214c1c0dd8de08161521898a5ee89c4762363edad857fb250f44f426e45b807fff14f4d41727e080cd794f439d889cb687b51fb4a6d57af3d59232a56f74bcce0e1aaa7d2794e0e170884b2d6188b99423e6a8890bd694ea360cb8ad72118cd7cde5822cfec48bc53f44dac03881b5198e2a37638f972fe1690a401bb72ee9a94e0b299f807fa88baf6ad276ca24aa51f48c257ea9b4776e206b856f9757fbf9efd1662ab9625fe31e92321668f0cdfc08c704000976ec46f37ca447787a2be8647d1f62e40bf9d5aaf058e578ec60e83039ae2a30e3a16f5b3f61599ff44f7aebc320e843052b108e5ba93b61b6223ed23433bc22b2b6897bc2ae30842b08e985d334351c8ae4550a1a7c7c5eda4590cdc132e85482bd30356093e3b3eee169c2a73a9c3f9e351a4b533cf45a78429a7fb6a67beba55d583b7bc10f9eb23824f9ad67cc3353ee2eeb1b422de6a3a7cc76b695c7dec4695468aed1bec348bdc9699c2e9665d3bd0e74f7cd188b0209e482ac2a5133ca9324c8a59c7de49daabdbc9d6c6a053083bfb59b54f1926637d67754b5dd5fab9b83d3974fda39577c29a205c983d3d12fee74c73ac9771555a4653a30f3694358f9d6b3b6b2b8c8e28058009390f130ecba50ca61753ba683d86b8d992aa5ac09ecf4ba6a09e7e5002967a48d1a19a14915cad643b1acaf6ebaab27949bb5459a4bb764a273896646107079eace89315aa8c54c8fd47c130639fd2c304f356912e1007c3dfbd2d9323e65174fb4ccc1aa72cd607778fe08a30d123c2b79e63b64b057c4086e5302305781f203de46896e4f99024e1f7a3b3e5ac1690364a3fc241cc5a991aac164b7401cfb311c1dd152717f013782648a6061aff53acba03cf593170b4f468504a157e67a2066da8a857d20b6c5d0a69e5586d0d43e3e82270422fc9942ac100dde7d437cf4bcbed2f1c3247ce9d468ac3a2b53f10b0fbaffe822328c4ca20b0448f39cc2a5df09e80e5a2a66d009709811eb313e0ef2cf9a2cd73b881e438bfcaf84cce80a2e25f2a2df515d9e1f29d86516d119199de9898c06242797e7848af4a034d383cd35c6235928da63d6ce1e5f48576a34630b9e038a26f44060437a51d877d2873b519f1b067fda07c637a7718a2bfeba4cea9d7240623430ecde85c36514f0461e77cef56cc48a5e7b5ed8cfb05904bda1abec8feacc5787a1bf8ad32a871f6aba8d5c6887bf0a95b0646fd4d2c59599d7f1bd784fc1547e8354dba20f3533a672cb3728a04de983d221bd4f3d81ec2386c3845c01759b18aef878716ef311189d5fe38f0f76a9ff450c445901ca42ac7166199cccd320575cdbfa103ce3f22776095f28873b67cc7ca598f675550d17116e49401cea4d0d42c6a8622f81f9437138a7c4a44239940f5e21269847ea35d6b92120df8ea5ee0050f757c1b78892b0b5b3c78c54b87fd79c60b76d390c8eca7e190a93f4e0e95e1f46ae035b68cfbfcbf86fd5dd18f2959f27f143d5b9168dcd0eeef061ab3fb80dba6d61def2e32fe8fad4e36dfe48296c7414ec226d250f37bcb85518e7c4d05480f819c379863a404176a3fb7821d0bee78cf3c0888c36a599867fdefa027a635222b025e0575aa32efa6b9ec3271c04f5c9b31af43b759d6843b27480eb602a23cd3be807760bc24a2f52af8e61982411ba8f27a803d61334654ed3ba0f282b390e097fc43d191c269bef848865042aba0638260d90647639a81e2dc447bad0101bb65cf055887c4b2b9e7fdbf9f3821a4301665fb29e89f02a34633e31d2d1d4e38748ae4f33d32f29e14f2d98a0eef1350625aaa9e8fc8d0182d88cdd586cedcc2cc4db1e2adc45fa61c15473aead202269dc45bd7ad821c6e23bb47aefc3661220a69ae3039313d99db004a1f33e14bb488079138f7856f21513ed81ef3ffe6f8962ecdb1bc4c819375a38c0e258fd19c3b12b0370dd04fd02c5fee4b0f304d70244126b699c874b7d62754ce7f09f88f1eaca3cca903f123cfac9aee64a3993990992b0cb1bbbadb081951a6d7983b4ced9d135f9513e1fdb4f8e26bfec17ef52186a77e59a28e93565ed4f1304855679b8542ca8fc328551389bda85f20dadb18767114e431bf0673bb8b84f956d4424c4a80ce31f182709804b498e4ae7a94f383a3711f0bf34487a653a950730657c41e93d9643f5fd742609a1b9afdbff616e4dfe94bb294db1951c4d06abbfd65d55470b5fe3460d27b2d0b6e0f1b63938b781248561b24b431948cb47807d5146e727031be05eea03e9992dc507691921b90f951642a35cdf5d6f84a9496df35800720a1de69da9c544732246ccc73bd8514750c3d1b5a302f029144e5a522defe40a247f35e32ec43df54088cf2b1f227cfee7abc99a4ef2fac4bd4be6a759564aeb004de4a70bfdb72d8e35d8d7262804f2788777d913b1f34dc4224c827f36fdcb259168e309abf5ee0ae8f619515ac90ddfec591e8761761c51f22abb2312f1bf30952bc8d72f362967d7595e0e058503353129f402279f390fb5b4d3fc62246a04c272f68588cc67e77ff24656b74e27813b3277fd9bba0091d61597ad0017553a7d9430877c1632793b871bacbc0ef167b0c63084a4da8ad1c1467274bfb50b22994de0da8881847c866dab3054cf5a79768de7024a9c355e2d9a6bb00c45242224032ef40e87e822692b61b0115980f80bd45611c39475a2fbc1192698c7f034882e4485739f1e4f6c277b234cc785e5ee75fd9e90ad2139b0f1dbd202d26b067a2aecbc6b5aacceecaceb4ac9a6451e9874781e987f9127ae1a66b4902af3142ba1ec9a032643dea861bc1b6532b41267ac23d031bea8463e3d92b51639592b41b1e1aca37f2d492575afa12a1ccd4678c85a38a3a96adf8fd6b0b54265851a7c7b48a6b492e7c902566689eb4e9339c982baa5bfe8499634e8b145d64f6639f8e2965d3788ac2a33ad93e5d54b881248eddb563cd002dbeab96719f224263125c82625d958cd04e4f4934cef9115f0e068d409efa6eb259f0081165a5e1d13008dafc940a4863bb21102c012fee185ee8440edd482b951abb9bd4131738101de67c09f7209c4f107de393ce13f8e00d07c69a0975f2ce7eced9a1109e0fd0080a36c135b9b946c6934358b1acf74b9520b200beb19c26d743bd70d0a4e7802efc989f737bdebc0966d898974c66a11a41e075cd4f9518ef8795380757801147f0c6bb1210b5998d837bc99da89549a526f713ad4db6890a2f7bc51b1acae26b8143069361e6f6db6a8b4f8e00e9a2069f1f7ceac9a63189fc928022033e93a915b8ad96f64ed8fb4ed3d025e1d6fadd52ac92f11bbede9012963d79d081b13cdcd14b8969bc7f6a6193cb769d514e1233797274852d6c5b9b7762b00eef236df7a4227055bcb6a9f3e75316616f5615cc346c6a05ef04647be2fb5f7df932ad160f5cc8f330dd7caa0f98460271030250fdd362f4f2eff6ffd69fa421882127248d6d94e92bc37ca6689439b3d72f0b8ab4eae399650ce637fa18bb1888f38b73bf0ecf7656e297376e2210dba2586b67a789313d56a02cea3a6a2fee7a32976137b0883218a52da1d052b40a8e4f74f53f8e43e754ea2dd5f6731837b7716e1ded825dbeabad62f06815ba597e2acb1de18364c96afae27415ae767d9dd15a9c4fcb97778b493eeeaa6d60b3a04564635abbe9176dbff02799e7d7d32770c211ede9c459c015beac14a8a23f1b96a3d3f75a77d9647012273c40280156f21c359cd5942d2ffc94a1f8a936eceb8490ef1fcd7e12e99e90039482be983a9072a6a6a06aa2deb719f5e49cfb21c6b15a18f99ee12764ff10589265dcb3bec1a61702a864963043dd99da0d7f043341049777d48799058df1b9ac8d9dcd9da11b4ac58225d91626e6941a9c36bcf47c8c7cfd1b31c97ba1db02d6113044a63259bb89b7d2e02a255819d2d73d75e8dc0cb7134bd2f4354ec06a36cc0a3dda4133b46dcd74beb90bd5946a9ae31addbbb3b591cf4bb6ea07d378b2d02c275c111916ec7639690791276f6dd67d89d470c64315292fb09214bd041fb660e4cf63a5df642f8749f89ab5ab85aaa56974e6651789de6de4d8ec68a95c235b472a7298b1e950f209fda134e5eb08dbff12d1f076cdf47be299be02309d84baa0ffa241fd8bf676bd841f39efb4247c1ee949ad24307d57f1a71cba90435dd6ade2306d05cd6f41f9463eef03a307a76d2d9ae8e6fe14f772b3e5a2f44027196f3900281ae2654175c39a0568a7ba32e8516ee9165dd625038da5e550a499030ef6d07a625191f62ad85c5d75af7ce3e92fc109a501551f9ea48e1052e31e9d24d1825171b4dd65652c9f2b5f08d60c8ef79f87db4159de9280f5793766684119ece071316b0ff1df9b611b42804324530a8a590ed11782b70c52c3bcb9b7751674428274940432360e92f806db11694d46d1ce012d21bb4a89adc01576e5f4d2f6439d6cf79c80f362f1fca8315f76981ad89eab9b5935d9ef3acf3a5b6df29fd4c2b8bd5152320edabbf23902ccbedb19c9cacb9a75f46c4c162afa69adb0beb90237b63c44d92e79b5814813151e7c39bcad5f0fe2d76bb46006c00a9be235ec60d2df45f12461b1ce7e30b434278dd428ba27110541bbff87838e248c1243f62301a34e9fa2ee5c5cb181fe7b575596784afc192caa43e6a900d105a633b1e53230f45f16146d3e87b336b05f72139aaf81a17d061f74452fefe5860fc1dfac62ed2e5be84e031f9f3e0452a42f85e85f48385032ec30033f09be4e9f6605c3b2e77019000876b1667d5e13e1f398043290dac8ea4966be88a113d81e101dc191ad098a475f397896ccafa960453b5b935a91e9f9116bb1996bdd335c65c464114fee406f65e3f1ab1f0e5b6c02840c5a3341767ecec973ed14cda5cdfccdf67327d091b5fff2bc71b4aeaa560d9ea1d6c9d15b6e7e02c93d6fb2f3b7d0897343bb4173ffd3fda1d7b9569852392eaa67f28a2529537766d143f5d963893bcbe2b432349a1f5b2ad5af9febf06551cb4ba3476ecfa6aa62e57059ef2ce6edb2f2a268991eab70d7394f1749184f7063c4c8323beb066a03b81bf3a6eaadf085c3c1dd019cec2f59b7ee71a53d430e2ede6959f285816b1666da147a1f5b5fdd13d01b24cb1920d5ed704d14eaf16d7867e766dbf5b56ebad2d7cc02eaff52b882731c77b7fbcae7dbfeeccb207025df0a633c8ede021f0045b39abff3b433a80133b30dd76c17e136648b0f751253ef0e321c113a2f8e5871b990c11b23a0ae23b1eab7dccbf39b906e3e028d72e0e47af4460b3555a8bebae722d2a65acc3e13ddba2d6aeb6f1f56bc7dda35248961a3ce4b14d41ba55f516884d447916151f308fcc38aacec8abcabd2f24138d19a532916bcf6ed73857502afd216cbbf17b2f8959103e8b2e73f2dd929b86c567d08c7151c4c4c6911f0aa607fecb0129ea3b8d7a2227edf760de5b3e4eff0cfdafe93884ed05e55ab840462881b01e51ac398999043725a24d68c1dae0f3b12c78f48adfd6fb86b6647c7832e509a059182d5690c9795219ec9eca7318d03348171ae34f2b564ba16ee76ffc2ed111a1713b39bef03b14c8675be66c9af27e73eeffc914a97e67b11ba51d4118d614efd90dfc45b2a34c9bbc5b2876bb5e1eac4e1d85e57536fe61021b8ab601825bcdd109b7f00d206133d6ec7185f52270b5b7cfb173b6f41e2b1f6ee33a3a086f9a270212ca8c2b7a4e156989a4d6534d31fd1ac2f09fb86ad12930a262c969cc50f730b13582a39e8eb64a773e4c5d98fbb235602a8d2e10f18ed0ce200588051758095c4ba3e8156043785754c31afa758aca5d1b7187d791d51173b478d63c6805267440fabe0484a44ab8222b8fbbad6ec92fb972eb240481f11b19580776a086046c820b19d2366ed0ccd26218d1c03302ee86ec361b8a04cfcf7e27a994d22f2aba91ad1a1b099b291f423d507e9aadab8b297c7a83d3f6eaf58901fc6f131f016029cea8822f312e502c06863d20a994fec001b6125253da51c46e20020d1112c20d16cdf5473b2574139ce77b4e84a221a5e8e6fd77fd22723fbc69bb0420027b9476d2a4ce3093243c32cb9e06d816358a88745e5d1c08ae6a0095e27e671adc5a59fc01e085004059d111f595fe668243c1841f591a6c5ceefca97ed1b01ec8811009496ca25b1cd0068631ceaeb678fe2ce462543a5194e13d51b666541307933575ef2bb93b552ef301fec3872835f34e69904503cb292ee781c558cf1282514701cb8d7852dfa7f6e6839492370e2ccf884b1534a75ed60bd62620141820163a568a20a3f5fd6290ecee78e72a32ebff0395890396a38fdd01a0e068045b2a918a9abfadd5348468f90919286a2e321397c5537bfc10ac46c4bb39cf1d8f7395eb58b0a506ee348914296893d3b19ca57decf0ea440b86c9f966f0a4172360b46415a17debd8aa35c03f5f959db553a043f7d5ea1de6eeb5e4ae4e3e2d465c8322a83120eff0dd26cb6f62e41482c02e7c45d583a029fa6b5b99b5da25fef2fe2edb6e6ce75427b09afcc6ff48bde76c791e989dae820b0da0d10ed5342f1a6bb95f71247c1736339f0b765281039dbb746661ba3345001e919c1f330d89bc39ff326e4ca99ee63b6a2e05bc833d7bab6dfe00234a1dca44b0a2e2892750fae01056783967e509cc6090e53486f30d74f15675bbe2b2848065a8390f010540b2f2befea9b3cb895611fc02b1a1b54e6463903e75b4b7ff367c33fd2c005baf30934a0188df1607776669e18e3fd2b11ad4f1b104f430e15a3dbee2b8268c0ffc650cfbe823c85c384f08fdb1dc40d7914a9a00a9df9ea1c5e2c46180155902f87c96c0e7d932bd9613b0065cd1d08419f68289d66c217eb3202a4dfa3bf0f9015daf5b83efdc8af035fdf3130d181fbf4aaf789e8e8df9d8450ea99d122c9e2d2c4cf0059c64dd2f5a141bb57a37f33bea7ceaa9dc08eb4589af66dd1162c2b8684cd2774686f6b0d669d39dd2b2dde653265e0a24f566046d131804279eb6d19f4e6596d461f9b573f62282ae8eebebc59b41025abfaa8ffab4a6bb30e63f2e3d3e5dec805efe07bb2b2a77f76b05473b696f816a7167f253bb0ada300a6dae8289444478b2fd085242b62de290ebf898f846e35dea837e3fedc6e60d157f178c0ac141269e4b3a656eac2893541671f4a8ab9a65597cc54ea09dd339397c27449bf474035967bdce6fc59a5eac495430dc0bfc495e406c77094a3c364b0f6628f5441846efd051c8de623708c3a5eafa9648735d4b98f5f569f3931147ca51c9579cea0cfe2c06e7d6f2bb714b9ee2ec7235997f5bc9ef9cd3281e30f29f16c54e744057afd252b606c6f7e32ccc915f6bc7e9a89173f28a5fee80326a1f013c927450f5b49b9288e733bbfd79b39d6de811f183141545a3c3466b32f7f246f8ae1e49e2c45dda622e8a714899344b50c95c40e4b05b8d7bc6459e13acda1b7e43b1e1ee27d905d9e4d23278fd68959e84e1be7d28425bcf73f7451799a6c66e44804a2bc840e4a9238ae4e399b6cc738b943b406f3de3515f6f2b250dd8c26e39c10b313216b38d4e2d3cac0a248b2fc00a21c533105a0f87166209efdf829df1981f5deabd7bf6c1b059afd8259a280635365f1ef36e3616506f144c33539e1b4cc97c2654b7a1abf78b1492ad75d82034b9153edc9d2e7a82721a2affa15c8748595e249b8208e039474fa45274b6887269c95ee3543a3ec8bf15329f84d9edb87405eca33c9781bec60ac865bd67492c3d2fff5070dac890be31fea583dde0c1553149d9f5f4fd35071a6a39586b15708af001bba8952f79480b8758b43da29cdd625ea7aa910e5db8dce1530113e9d04bab4d30ab6bc570b314c454721e96317471814ddf616c0efe4d4876feb1e854e2adf5c0e2f198303431d294b603754233097a398ee6e85b9d6bb02c34848b97a1aeeb79ba2e7401600b1416335de0e624bbdb36275fb1122559411b5482367bf35d135dd88df8613932f7c43d51edd1ea7b3e0f16a79f03affe28be5395a99bb7b8eaa954cea526621e94a6a9120086a6d8cfa4dbd33e24ac7f2657b67bc1e6dc597a0a668122037e386eaac513af017810eb72adfaa92e54cce7b6a6147501215557b160643becbe0be2310e29ebb90a9bd517d920f444ae136062ce2a28e9eb8fca77af74f8bdc701d48f6b56cb70f4d8a4aff1caabdacb1f67893f67d7c91a6ad60b516fe2ac073e245a78c634447aaff6e21e040cb70a395c7f250d56588ed087054f74345e85282ba1229b1bae1c45acc665399d51ceebf28bd49f9a7d0db0784f46126c32ab0328ead8c2f6806d6a0cbffc0caf4e89668241f4885d0ab299a594d6685adbb10a6b69992926b5890c4e83871bb376d8e693165b3c6ffd4be47e33285c9f29fe17058be15e62e91966d177b0a01174f223257e86b786943c5bbd5c73ad10a21e2f1d6864f35f561aef9d9874a7d77532cbf6e26bf06eec71abc00c5b9eb8801e27bce7d50f586fe5aa6333daaade8ea9feaef76a240b81f5e9500223b437441b1807df346249876d4999f4f5ffa2652987b2f64e314fe1452e460def21c77438aa17e3d931179122992640f53e22e52517dd34eedd8a3030fcb41e65bfdcaea7329d9169c4fc3083020a8d677da85618e47a664e4cbe9f3523ebf116567dc5b22dc648b7c4a4001a35f99d60228ccc3dc3226959365851efefd4360cfa0bc9cfbbd30f041b57b430d660f37960c0b9f385769b530004aa322c6f3c55ec5c8a2199700aaff1c107b25aa18a7e292d19c339b2328149242555bef0c9ead3bb05d9a4ddcfb86984aeef6b4d363d0c59de7c46efcb298d4daa6b08b7c6f4d45070290cfd100eeb6a9947d908b503dbc161c712f26a309eff4a60d9c5e74f80d1613dbf7682cd9bd47304553d0fdb6b764ae14424e5f94c7f5c199352da5b530b844c1f7c1ff362159956b80e7092878b5551bb7afbdfc25c3d546295dd214d393eea37513abb00b6115c35fc571194281a711c347ae44d25f64f83315f3e024c781f8350ca9a05916bcf81be6cf6f207e746063a1cc554f0fa5c40efe9031f15785c0b10986655a028403705b420664ff7f21f4bad0152fc050255f47fcb3b222cbe8c920050eeab3e09cd59dc3f23eda3c96082e441e0d3b222a0e877928ddc18712e9e880308f691ec291b13cf51868ec116e0e77de6aa2705e26bc42ccc3381fc1a31f539b3a1b04f5ec212eec96668b70b4c27e4c699562d86702940900d57630341537ab041b0e50f58fed81bfb7bd20abd59ce207c6dd500f62564dd6df7678346568f299928b67fdac28cd57d7cc0f834545a27c96a41268bb989d2ba7376bebf98a105e944c27e92d264cf852d1c8c25aaf613a923f46826e553b6a090d42890aaf2a02b87c3305209b61b370d2bc524432abfe32479ae4e77561edd36cc33a43ed58b09bad37de143aa52e099dc22a48b4a62395835758bc3e7570ac60098aa9e90a3b8b8b2c3bcfd50853f644159cc05a1290d27b3e4ca990e787271e91a6ef596772bd20527c1af70183d0ad0f298179a912a73e5c1d4cd47ff9f6b18089e5d59c76179f0eff4d132304e337bfd8d5a5a40b0cfcb050de482f430890024642e6b431936b05575ddfe8f123942e12a9fe6ebfa04be812b90b7604e53e11a23bfe6caf230a94e4196e1360f73dbf8b1c538f101ba16f9e95c039746c81bb670aa673a6d49f7e07eb8d9c05f95eea35039f1c4400dde7fc468419e9b0289000ceb81cb3a13a93c8493dfb3b28b182536561680415888be7dfec3f2c0645a337678c5f19eaba3b41eef6b3aa2399c59219f174430834661aeff599fb7535b238d4cbddd8416ba72707c5ecc83a8391222066636dc0363064e19c5e20b890b8ed4515aa74dca90e6376ccd3a061ee1e9499d711f442e917c458e93674e43c72b050000800a27a72630f3375400000000564f34000000000002798267c64fc0a308fab7b33fd9f1e31fa8c62b6bae265dbce95ed3c3f9c13285e6ca857768587d2645c1525522cd7bfe9fc3bdc6ab88bb895c62d726fa69e610d06543d9c7343a8a8eed72657ee4a546be36300d305e8b5297d5097e399db73b46ff5abc8f1f30683c43fe2f37e41f249f814c6916f6825967f0ab74d370cb205f8814dac5db5e891304c47abd9afb9ee1c67d1b1b8cc06e547735cc4ddcda1c445b89aa330948ae0b8f65931842d3606e2290b4a293e5ccce4fda1da7ef0b85e42b8f0fdc91b6c59d41722cd7122592c48dbf7a4e7d2e4df3980178644151f348928066341eb1abc6b2561d3bbb969752f72f8cc1bf337e0aba674c9a91f643ac48f966ed73efbd5205518d41190cbc2eeab3778de438fae18ddf567cf4ccd835716edf5def86be62a08f88eb1e92fbb3f0e435d620920d6679711ef6d6c24e9f3b3f3a0e62678633cf5b79d255831748e99e8782a476c235ad7284f6eed396ea8432a135a73282851657d39d725a5f5425cd9bbae7aaf389139b418653e830a24673ca342b454a1579ac7dd615d08562435e6482f68a06478e2847a85be8753206c9db58676919c2d173a2b149f78701720fe802e84e223b944060ce02205ac421fc2816577e94db60b5e69f205d1eb356ea5fc2ac1d544cb5661c97be2c07210b2b2cf60e7332eadade45b9197c7beb6d37bcb63e9b05327e5a6e78ef8ca11c3ea15c189ee57d100773772047f443434fb0b8002813ffc13d941b9ef54aa02a4a1a72d1587f8f6775b1f1204eb419e298677ae880edbb117bdf929d6b52e45ca370fce79e4a50ecba2712512f67be60099128f1988226a946ceb05fcfcb6792a8883af7cf6fffa2eb4d480920cc35b65772771db9853af6c0bc444395f5e048098ff6384f653718a39f2ef12bc9507cf7454b5161dd70b757f672ca48f34b48167bba489040827e58ba3788f72ffae3a23beb182f4d9b50083e64f90a37bb60278b570a7f4dac7e315046bda60b5f144e3977386881d47a2af2289532335520092212c4db95c1f6648318e5c0f4e700b0fee174510d058c9b3866151db7539ebfde0ac44ce4e35f5e4cc8dc4114d8dc842ee9c2fbc1e3d06634f71e69fb43abe58f506634662575a31880a6ec5b1d2d0ee7afdae6b20310831790b527c2f94b0560b585b47b0749c56d11ed6dcac8c49e85b984969ba7cfea1c33a7801f764b4565290808bb168491cacddd7d7eb858c88e2ca435bd2f8ee86f974d1c9dc29a585b59495a07eb4cd448d345c81bb664ba97a8b6428a8679c581dab5403cd131cc2e514e75c3be2c796d716a7e7b12c6bddd19990bbc34201f49478ec313042b46b1b2accd7a962d01a638897d4003f3c6f190924e825cbb66be622ecd441d148ca2e0c06860d02c4a970267b37c6827b20907f2f185bcffb3dbcd680b728c7a929ccafbd99ab38ebea83bdabad41e1a7f78b602528b8934fae768764d7a7a457771d80818cc003fb2fc6e610655fd07ba1c546570c0a1f13dbe63825f949dd0752bda44c27660cf56211bea64b520baba51077df2aca773f2dcf377482c51c2a5e3fbb600426e276e1eb9139e342c6913cbd4ae44d07f1ff95c3f3dc910daa048a5fbaf02a8378bfceda4710a841b89af0c835f105640b8d7564cf8eb376e64178863c5fa4d9d938d193b3010ef8950e5f3ca5427c751bf0806023b399d2098ef592da5a7c108e48b93609909abc542606f6f41a4786dfbf8f531a037655c9f9fabe6e73fd3714a2c6425a431b0c81c6f5aa8fc33535a215ed033b70fac185834fff8d4c80fe47c900bb55fc535b0ad51d954d0e57b13837ca82026639811f4a471444f7b689662fa3de7872b14cd85ae59465ef97b291f30da684474e34fbb3d4dd98c544426a6291b2f90ae7e35d6c51aaa7ff5524243c47dd59edef79fb3db0bece6779a97eb92d452245fbc2432bcd5af767113fb07f10d0b985a472946c823546959d1f658f3473853474aa61c20f2cfde6903475449816a9e707c403e3ead2edc044f24dddb53da28892ec4047d280ada13e1738f2e6f1347c7a0cce6f00533e667d79635c87be0f01497f518bd4dd8e92d24e0bf46a238b234d3313f6209598fba1bba7faed8d0b54c88a0e8fea787a737ee217d96f9c9d210b7461989fdb3cae2a209c19e1d946bd98600e726fea63cee1664532df3e4c3ae37463e5974ba0b860355522f8795b4acedf823f0493513544382fac6476425858ae56292bf13b29c361d0b2f448f3e7a6bf87d7609ce5249dc7a7b9cf684269a08df52bd88aba41e1a5c03102700000000000032ef86c9ddd4d9b749190bbd151664524ea253fe1b8c08bdbdf28767200db904fd601cb129b2d68a5bde8403d9d1bb8ac1f7e58696ac47ec1ed9a1489a46f475895a96aedc53e5d493662640d2e67d8743526242725975aed1f77ad3cc47a90e8df5b3588c6922cd6e41f6ed980ce296d8ec0af3d0d191c734279603ba1067c2be6d196a18409923d8ed05ccbec788571a22c4acfe9570bfb7b63fb2810c31fc42c1949b3653216f1a464e653cee01292abe0b27776792f1808ea086b88d2ac8d8d6aae09063fdfeca0cfd6e16ac33a59036e206d44184f1468a6f6908d05b11dee687e54233f405863e88c21c1bf798e4336a0eda85b380e334d8ba48ca41c8b2da35d626595e59ba63eaeb088878c99b0ce1b00709e668a0fa2de0c264f6145144a1fef0cf79b47e49b74dd7cd60314df5679a0706f5e0369f01b0e10873b9158610d41c5955226d50c058feb44b3abd9ed8ec38f1440f5d4425e479a1b6340429b3d87168faf76ebcc86aefe2c55619068228f697676ceefe51f0c28a03a0947a1e3b46d58016d48a909488a3d23ebda6f25ed2a65bd66fb480b2d16e22a43cd40dc6532f00e919bfbbce7a900f5c6457d8a8c60d1a38e37cbaff9914885c7aeb9de0b9929271bd40165ef86205376837d6b32ea6542c198dd9bbaf99e5ea975eb595301df560a2f170b90765d4ad9180966f40badae9e47ef38e8fec05e322f1aee454a48214c79758b317d9c86a7aa3a3715fccb7854aa09228c3224386b438a44dcf94d14f34494683a1c60c5958eeebab2443f347740d50e47d02426119d2afac339fba329f1556d6bfa9599160a94b0dfbe8eb6e5daff564b24d9128b0a125bb3a16926a775a5d5d5016adf863dbf993773a7cfcf769ba4819400df1b7b13eb98118986f8270f0a215c1f1aec4f63b94d55441a36209fc8bb06e8284cfc53b32e44457bfd24dce89c207a2879a8665480c3be49848fe3992eaaac344f29c34916f456998229257096eb6642090520918dd6a7bbf0eb8247af8ac1983c2d0b610949cf3d932177fa90b4b1eca6736d71cdbcd899473ad0e4845e3d124197b843d3def0d07c02675217038174375288f6e66330dc044b58882648e856e42d580177645e091948bec8214019fbe650bf7d5ea309b8325a786444e329b19a2e38ed3303337bba195f887d6bca14bbc22e1198aeb3b3d57cbd71517a9731e462f9f2911eac73f2196dcfa569a5d41c8393b815999dc77ddf423f16140affe50d225cdd805ef2c0fecbb72c8500c8796824b93e62eadc44f1cc9bf05e8bc855c4b044dd21d5c7d37466445ffbe387695c42ef1eafbd8f0556c18c01e7fc5f80ab59a712efb0f1e793764652251b213c3a0485823406e2bc477b9227a418f1d8e150b38c33b0db736f6f5456e59aba971a8906258364d48b0ac0446fb117e37c6db32d3108cd20970c4440cdda93f0c41b6dad88ff76d84051cacaa8c333a107178b2609c5e97dad70381d7b2a88fa24744ad84a97a1bce2165c649e7807e5c1ba79dd87b8bdd086f1c1711e6d92266591148cfc9a598275a9f37135d40aff7207c3633c9a8b0fd8c3c8fbb2f06fcfc31baa3417e68884c896118a878f0115d905ea2f5e4c258f4e25bbbeaeea0423de82170e1dc9481b7500ba08df34420458853308e8c6f50b8fd34a3f343aa46eb66144f9e0fe4dc88890197521d73153c735fb326a8743f349fb785396e0687a03e4113870b3ea9414fbdb4b43735a27156f52226333343ef137ffffa9c55c5d223568771c57db0e2626bc263a0bb53da706231dfb9f6f7fc240b054ff12d0aaf33b7daa706a06ada9c83132dc1f28a6d658e1ee7759ddc4072b6d082b323e843e090daebd908af59795597eee10f4c45ecb4153dbde35851e0b6119ca09a0442d2a3b6b7fa3b51661b8310dd8b431ae5948e1a275ecda5f61fa2b488f3b70e92065e218748e75908cceb2ea5614ee6ff835ab67f894288818897e6ce3202f051f4d1a3ff925270c4d23dcc42bc3cb54ef10eb346280cc85dbaabf89b9aae856d70d031ec19e63a36e3e2b3bd0729973ee3b11372f3a8655cad411df2268bdd984a31d94808b7464327880e70d14671a3a8bdac1730ad54849375ac2fb75563c598fe81d88f30b7159b14f88599052f944c0017dc6211a2ca03667e534df666ad73e0cba7238f05b778e8b4faef40e89b85360e8dfd0e16e5b8b34ed55d28d0845fcd4b4c2b5a8e2d2ecc2d2df9798d00a87b81aa3df58a084b3bce2e14b508732633405e9e8ba6ffbec221a319671bc7b7ef09dcb3168bc024e3d0891827de540491129eede0efa66ee1b2f941389eacae1e362a9c5572543d8b94170380d6a17267279f7df0bbd2cd7d0cbc1a3d19c37ddb931e23db984ae06164c9f862969163cbbe50d536816a6c1c2940801e6fea794217607c8a20c24baa4d3a8b46f64ecea7f5cf86bb9c8910010ba6d7ba82461b9124de4bb8b8adf07e9d1181b82455de11b6bfc32161ca3487acdbf1b8d8e2f37114205406677c200e550242d2d80157354db887049436ad4a06d8a925d3ee87b83e99167c4c91a86600058d0bd85e2d9b6c8f35748c88978ec35dd16fa70b7fd42fbdb8142fc2922afbe2078ce83d9fcb38a45c160f7fcc34f353b94db36f75451b186a80e5711dd70460f44d0e9f64b474bbcf8621351816324b642b22ac74f01983e810509c9120990a0bc147474dd31922daa89e7a4758e5d0e7c9ac8b7f9136642bcf1d3534dd5aee1cda28ca789f954db791b0b593fc405a6278769a2c291979a6761d8254a276ac6924f597debe643b2c0db4adf1d791eb979725e2a5143b08e7ce8dad17506abef42fb85a436be126712a5863564b8656f2ba07f33d6b13df9f9ac2fa4ba27b34f687a9cf40f62ba5232b60997f56d6134f48678771471a5cfc3a5ce30a60748353ad43034633dec9f80acb597feec3f9319e30d557753a152b074094324643b251eee3eb2420be092aad9f109e6f34e8f802764fab1922f8595ce33c0767d86a1c7da35cf38f7307fdb9392320588f3a1a381afccce80a05acb802dcfc791fd2b621a24983d782bface3a80e94cca490e7dd547253572258225339a3605aea15f0c5653117ac57f7de8fed4087887a2d51a94c14f053214dd012e0b0bdad4042149a50b7f588a20df4d57dfe1afa43c615ca5c62ba90394fd9eaa646f8efbbe15090b24bda198ae6b3b99084d19079e8f0f67600efb004f76456007d8f3ae20baa275eb8058967d7631bf4569f2ae89d1ce0ca247f8d215627246f631c2c190d66730f9cc175b68d78e0caa712a8e350e513a23fb3c92c1ea511391ec5be63c329d49f312a447167f1790ed59a39999d7f8e6429e8370eed2fff9679c6cd5e2200daed12e1eb700c22d72098fd0cfbb0243a9756b908140c3f873084b599183a7f78be15a130ea8436f7aa3ba81c66e79c99bb47e31d370711013c4d01f7d2c3d915e1013e00398d326a4e25e544a15d473c0eb10263297318533ec942c913293ceb2b5549be66ab5b55a46b64e909a39e29108434a012543be4a6c63344772939ebffba06dc30b71fb9bf1da597c4b8f7e42cbca24039494fa0db77e667772137e51614965fbf3c41f991d8498760ed732f79b4e35405812b87762f08119ea177128bc60745526c1e9b5e36f0cd0dc3584aba019cf22ce6a9d603b43a4a0898174a0cff35151e0c88f6ffb9d16625196a679e621dab0b4ee614da9fa518a54bf0b87d9c9c716def841693683e9ba932bfdc214ef30b05f0861223f2fbe3412196dad9254e65e5d6afcfd2c9121c751e4409c9ceff9e027e6c1f986c46b98e55f6c99f7460af335ca860cb834ec0a7eb7196be652c9d1b9ae365a523f4494b93caa9dedd554be2f7fc9c85af38729eecad6ee1bbfe9f0f50ee2750e01bf4ee0fc1c487d4fd41936cee9306707f00d22974004f5e09810c655667c91da46ff8ae4a6e06caf345f13519f22e90caa36bd28db742d72a32133db0dcddaabda0851a77c0003e8d0e60d6e02b19bc74ad1cd13f577d305a9c03a1e19a804b3cb6cb3b274fdda5d12d4f9388d2b24b32c4827415d09620e7e113cd6d7a56e374e1e71e1f5373e00e4fd62a6124a0cdb74a5293f7d463bcce04224b29136cd332ac086d66228e9436e3a4b89952701ce6a1d5a466201f25f49e200f27c150be243d8b0a1091ee3e9e7714d972ee8b1602e6b5da00f1d3bc3c5f1ee178f61f6585ab79dec0cc23ce38ff20fd0b02f8827495d8bbb2000b436e6d2d2591eb4328224fd07449b333f6cdff4a9115e466a69cd771248b0c62d915d320a3b9098b7abcaf8173de16a9b2a935cc4605c2883901d2900f12bf9697080c07f10c01eeefac88002a47789f163dbb4b6e96d4321e550a9131a0d6ded2a99d0e56db2373bde8ed840af68e833879999e8f98cadca9951a5a67934a1a5007aa094fc8849a97941f0091260edfa032d228be3889654f0561a4b988e357c07dd83bb14f57b67bf70371a3ada4a876cad5ceb13dd66d0463e996bd6ca73d57eacc1bcdaa17710c69796df08c5daaaebdd0e83757b59bf9b556f9a0afd6d5ba589007bf72ec5b050c97841852f2658696b3c7a02899ac7209c0897cf3fb3bc9f85e1a9933e9a0b9abf68f7da3c295a4be8fe13f1daaa1fb6b7d3f90163fdfdc963b05c09965ed3f427d1c469d170cf5e71a77f9f5da947f1a935b7bd0d07964dbe1107b7da4f99cdc60169b806a0da5909d16577a6663cf01195ee455c40ff1b89c15e64c2d6ff6b7661a31ee072f259e1175cbbf1cb383c4f2eac880f206d3730635827634995ffe8dbf7d084c3142b3af8457b14ed165a3aacbad6d3c19957133354ca10cfbd12ca914832e922100ae30cc76498f859ec7c2a95d7e37921a867d1b46ffa40fcac926797186c4852ce0e99f8f7d1dce35dd2c8679079e8e9c24d310574fa16a31405651ba473881eb7c08534bb1e3da24c56e5411934c7c2840f6341eee207d93d8858dffa09c6471acb94d5b0246bb069dd933160d3177470dd32123e27a6190a851e758e86d3b4f5610f05252c666932d64d57ecf6441e331d801008b018fd3b149e80e71400d4461384893f699aee58f2af7f1b954e15b8ec5005843d5930dd2ebf4ec341f3fa15671f3ecdf8b8db2983d2d30798052450fb52c3d9137a36ead3e99f923ac3e4cdda231d21ebad651ff5799aca868dd954bd9051390fdc7da24a93a6438f2e2c767e33a17c052ce13d44b31d6956bf8e6c07d13a801811797cb0349879c9192c6622dce69d0c5cbe728bfcee39b7a8fc8c4cf30be146c4fddc1787864f5230066f44d5bc15bfde3c32a41e85ac903f48b61902dfb8fae4ad1eeb95f4f49067c4b066ccf66351405d7f8cc66bae5019ddc4c00368329fabcbce71019fffd2bd6c603534741ccaaa815a399e541f3c5cf9fbbc51386607129cac4b346a61b12e76152d52a8121152a5b3c32e81c2cc9eea1cfaf3f777217ea8a01c9666915a6abba542f684f7ce1bcad8a1c8a1ba081708e6b2914bec6558eca06558c22fd153dbf02e773c250112242996623eb6f22112f6c8e31a2f215f61d3886ed789c362af59763a5425db5ca9ad631a880064ecbc29196359386732beba6e0cbcdff018db7f29039636793159ec0a8e3bd33afe37d7a2e1d7e2563e99138d8f4cb9b5071a560a276d08b34eec981adeedf6421095b5b020c2e193b976a77ac0b318a8ae7d20fbfbc9cd9d9e614c5abda20254ef9755bac1e547a5d2e150720804332ba96d443716fae846ae98de5a8ccb53e76b45b2a1c3102a84be3a5f54d8970ad12402c06de5e7772265aef7d3959f96f5f2d3811f416251402ee1138360f187d0f9ec8ca4cb5f838e1d0e1ec8aee1a65b896c9765939ad3993594613cb78dc11bab3b5d15aba27b3a321c180b9a92aa4683d5bffa215fd1004264afcf35064101d996bdaf926630e54b07a93cfd3f91215788e2fb637c3cf35679364869850f107ae1e6efafb4a19896a0bc965dd16bfba2c8f44433bb2f02cb13f6189c7a3cba1cbd3ef0277faf0299591e3dc88528a4fb583b2982c55f4000e5aa0b37fc7708a0687ab2275bc3a4dd25e616a1b92a1b20f15ddd70be3dbd85037d92aeaf62efd51931d541df8290aab44e718e1336a1acf7d761316295ad26d3a00a61a490866232e51a4dac0b0f3a06d92cf2220ec16c2e7d27314059430e0217edacc72798bb15302ea0a8a25ae2104696a849931b50ead112307d0e334e86282fd68a1fe2dba9eebf9cf18facd87a0e745cb00f75666eb00782988cce250a825a80e9cb536b778f1909cec6fcd3332d8b06475cee17b46fd14115d283912b830a4e3d8b232634134e1337a0e00ce5a1a62b30573cb3fa63fc319276b40d9336e00288c8a883779a23545a4e1bf082bf87a11960b9fe26bc41b1bfbc74a5413367f5978e2e88ece523af51861da14c272872427e3d3f03c406621a9cace3e56cef25ab2d2b3e306251ad80ba0599a89158b55f80ae0fe411b68326ca0e0559623ad7a89afe93f560bbfc3afe3d6960821cba03a38a76747c7e406493c7373265df9034c1e98fa24790047b04deb2a8cca5403380c30134bead50d75384a9be2453985eba032b6c67e9ce2dd83ff1c63a7998eb459823648d8eb12144a1fc9217a152dbba23e84776a26fc7c47c2c891a5e7c5bbaca92081fc841ca2a1e9bf8769dcdf1d4adec009884ff650ddb11996e06639dbeb196076343201817e0653caebabeaa0cd29cb85fc4819cd66ff60dec68dfce60587f7068613122dd9a8c7440a800642a61eedbefbc94d372395d2942bba64b1124a9ee71e6c1e640c06ddf4c7b5a31371a203e50e18cfe8ea99af4c739259f60efabc1f0b9439d7b6b80c599beb057bd28d31ed947eea3833a2cbd1c8c47ce99ebc9213efc51825610ed24cb476087b658de0a0223de5fed3b7127e5e4c2bc8d242e44abdd51d315ee80259d66d319743e1f5beba2a3baba6049b92e2e976c40710041df7511e6f25ddfd07800629d0109479d3690168eed80e6a08cdd6bf1f689bdc7be3d117248fad75456b65d7e883da32aaafd05ec618a5f9df49760fcd44bc83a688fe325f1d49d83a0865340c1c1b5a094f51ff64f38f370fea5b109cc63b7cc42cff20cefe90454e9604e17a5d5ba9a3d2fe72e3a575694cb8ed484719cee720dcc80266369b3876f9cd7252864e1742f363f8fcb6fee49673d139d64f3e68db1f2c091ab8f49d3a43cc60167b876d128ae2c6f031e9197957e09c99cfe2cb64b1f33b18dc73d078679df61254577e37a34648e5f093482a751d882a42377ce563780ab3a307b0864c18989f432e1f1ab4e5f4b484415b6cd58661f85755f7ac71990ce411931f7f33994a2bdfc978b97fb519140ed55e2f3363ed7a84f4a9e19fdd1b791d4248dc04f57496423c1b5272e469f51c01be891798bb0d6c4006fff39835dabab265ec8271e839872a779f714ff79c5e7a507b178d220961c4aed8a42d303aa586048ae690040e10bfe87e35670633a201ab6bbf72c87a3b303e5d2fb10c8a839bd41a3df0e5af3b72a375e6f3be7195382b6a1b224681c4283c18c88413e1a8bec4f4014b23a034fc9e95590349b02f72e7ecea817ba312c1e2dd078a2159250ce4ac31059cd796a8fffddeb75185f8fa60f937cd9f02eb3a23280710312a4051a10fcf7af4bc4138ea121369a0b6ad149b6049beb6523eb6d774d235051d727f571fde03504c4b9b4ea74e5116d07dd72f5fa80f80fa6613d42c8bc00c6ba3fa4c91b6e069cb4c22ba1d465eef08539e95996834d033abb9d2668c35163e195637a7984480e19dfc0ace96d428b1b671d26ec69ec9d8c10d5b8cb5452656c5b52594ee58aa635f948fb745925fdc1d83c00054421a1ca575385a37321d2b1cca77a7b574e766ba043ef6583136d1eb0ff5c00ab6fd11d101c858aaef30bb3499333c202bde0fc0c0809c4bad3ff64b178698578d5c49e06d0e1e53532ff537994dc9ffb86caa8452780c7518abd7811a26119ed512680eeb4c9931ac3d490770e38d43a1cb85c1e87e99cf32f5fb9dd6b78e2e7908739671b880eae036eb258a7b5c6faff1a1edbab2c2f7c7ef59ddfc2bc9cce6bfd0a5258f24acc91a2220bafef7c23e13c601a56ca65bf7727b19157e97092bee918e5a3152db8e318c6ad9a6d25718373c5c1b674fbeaf04aecc36b99f66e8a2fd5005e10acdfa3ac18beea78a74a5ed9f049c24f925e8e93b1e4c5b813fad5e7315ecfa0f3a560df4e5997d431998352e160eef9a2ad9a28cdbc0e898294187535eb02349042d19fe6aec49ef0f5941007a7ef94e456951501c3f1a2ac070272623cc217b2a2a10d52fe07fe2a663230991ad4f569eb7313ffd4344db5a4edb9b4e2e5585110705cdce6ccbee1ecd23f20258ebf125521cab745c1e6f0b294b178999829555b22989d498c065cf38db8dceae23b9682f584324590cb5b620fd9d65a7fc22e3dc19dba2de6ea50c585dfa84f6aef73a314d5d784362b87ffeca40bd31fe7ca3e93344f0fa3be2077594a63b16178ca96c4571cb64ffbf5efec2e69c79b4fd4e78252382ba4082cb1c60706d82264f532d142f41e1f9bcc829acb77beb01ee6ebc2ef6b5b959260ea084dc87d41fdd0da92095b4148d8612cd60d82d57ac12d7af1b3797ed60af1a0fd6f430e23679ed30e3e7b41f834cd2aa6928a13b3210c5cf3c93a233953b541e6c26dd1f458c96cfab227d2b454b109224e6f21034af5b5a0265759c5573fd8dd1459980bb23dccb8c1ff82b2666923e8e3ab570d32aeae126852dc4f40a7ae10213192b7c7f08fcae0b1333a3de410dd46025fdf490130806b7cb80a0e2c7371f411465e426ada630a4e15b69b3f0da802c00aed0c566120fb49072467dc046c66c87a0f371e9c5fa89d06e76ff54ee88d288a07f214cc402beed36085db2841d3aa8da9a01bc224d3f449fdb0f36cf8f0272070799037413e84d7e7b2aba9ef4f32fe7f8aa6bbd366d18bac2fe9ccc45193a41302dc959206a85e3df84dcb4893d16b840c28ad751953f06d5f32850c69ff75ee9203b5a3df6eaf33debb208dbad3f03730d677536d5ed6bdeca81736c928a06eadae1a63805dc2259d83af5b7d3c4f9551897df4bacfdfa43faa314a525a1263e46b171b906a544fad6af32e960c09295da61deaf805dba7450cc5abadf71f26349b8d188d888f9d5fdf9aec8b5f3429ba15fb9c97284fda440837cdbc42608991cd5f8ad3b009f574075110e7bfb24782f5b40e8513e55b278d031cc3e55e93a138935bec9cbd43d1c55a798f3571387d46b07a8b4debc67d9eed5ff37d68c5abc72fcb08c72c5914b3d64cdff41b85fd21db7fab81cd7d977ccbe39ba4be1a8ab660e9394440b44e14c62f6365d5d9a6f4858a66ca75628debecba14b9e83cd95953daff411c7f2bc9980acfb067e6ba10a999064a73aa5b0aa7f29ecc732d9c4048cbc7ce84a0647b280815eb9f3d082f7026ff6d9e6e773abe715b2d0ffc88dfe0b26a1bb672102de7a64d715bedb0373789b6634a8411eca8c20ea035e55f2d3438372f4caa753c05a6fe6efee4e50b38b1c6151b3ecade4dc7bf1220ea0551addab5ff043ba132be54f905a101076e3fa7441ad37fe343f5c573022112ce795fb1d7e35791b678c7157195bfa271c426d1052cbf607115857cb07568f427ddfb3b72471c02329f17b9547d6c8329ea8b15ef6ee39187316ae26816ff41992004399541673e4c352a195c804dc4de40c50d9b63c3782b20e7e35af1c63da7c81f992dee78bd4fb58e5f35b67a82526fb2ed9808e6b76f8afd73e61a127328e79dc19bf02f800803c20a4c61b1d581309f1a3573a3d73476bd02558baab2ebf4d3ea9b0ea6f97d7c87799e23db8637f288e1ea6a7b852c13ed6f3f05d03eb4f90ff295f0327522b1924f7a5617bd1c66a09500290651f608055aa9d77817e13b551a2ac21494f6c9a5b2d85691b9e1c02193a6e0a4e896ff7a4db1883a94d0a44683bb39db96740663f078e47c234c4fb357de8bef4a8839fb5d8518d164d11c2f58017cd4115a236c8bffde98c98e8cb961fde1c3a7a43ab92af49bcc40019aef51b60dc3db5be7d04733361a6209cca64f903e3440aaed4c648084b0e6c0c372227189b63079f7117558bfcaee466ac994ba8fa16f8e86654b188856d403302771030530acf7805f92827c292ecf54f3861d3c7862ffb9f3e4919fdfa351beb4e2f8dbcd42e0bb0451bdcfe4330c0bae4b25659654ce314e841e33fdba2e18bb886284890ba87da6228f130e56b30e303dd371ba75e56fde80af0e987926cb64404199b7f7fca4a3c89170a3a149993285bc4da08dbdf0cd11e99bbfcc5cc37febcd1be96dde0cbec39e146c27c6a9f2b12f6f95e2631c30fb2fe0aac35dfc467281705361b8829703cb910981333d50b30af049e6c38c89bb1cc6bf361533f59a9634f7e0452410150cb7df6c6be1bf44275b4c039d28965947b23d1d53d83b532050000800a27a72630f3375400000000564f3400000000000234b128c8a700d4ed6fcbecf826743076d7f7006277259562a78b162b8c014f0e862ff0ebc92ceb083f0f9e22b0a0852a2e0546471de8ca3d390fd4981729110cde48005979792494f66e9f59f265a2f95517c80691c513f377ffb5f103cb49aff29c84e72a34723f202197a3b70b8d3f4f9f2df736d3c7fd7e5bdce5ee901c1892a852097f570d9a4b852ed36b6f666aa606f0f614dfd6b3f99129220b31021d8b0f11c78448df1c01d41466149b9953a4ac46163bef8057210cd20605c09d0b72153a981e07a3166c3a04094534b87203a5b5b10589f196e80ca2682905588f812af376ed43e39eebd4721ddf8af4e52cc4250d36fdb470718bf4a0e59c16375f398b8f89a7e32deaa3c91b7cd498d182e1f3d8a5bcbe1a1f6fb310db197e4bf382ba1ddc73413a85cfff27bd0890be8535dacef2b01c6dc1fd7684a0fe62ce3c02d1ed2381eaedcccc3e58f1f5f037caeac167f0237e497710f5e0be902d9189d926a31d70d72d53954bbfd46e27bc1c93b1f8fc4ca3a76d37d10af9f8a189f597e95f0f4fd28bff1e29b34c5b46a94d6ff96c17abe5ad6e70e9259894137c24ce23482c8dcbbb7a7508fd30ccba576e1a46c40d29dd51a9541af251a5c215f0f1576218508d0388ec0efef260f97b1a34ac4d9b56c0d7318a848cc7ecb640d440c7a6098e5412c91641943113c2871140e659f29325bd4003bc4f6bb11bac6020b221d62cbc0388ef9ddf65a37e8e93b85b0bfff0e9e064f7c1a4c626ff7bb9716b9e358fe0baf7ab2d2630cdbce25c6510ddc51fb9163973ae4332e37e8afbd3475aad168d8154914fd2abdbda241e427d2044478827c8ce68d72db6c293681e945c5c6f2b8bf216919358f22548d7592bdd24be13c369eee18cb65c97cf44b15e775cc839c6abaab33071e0474f031356ae66ca188faef5c6a0cf10337313935c33193bb06364a9bc58c5b0b02c778ecfb9967251b1351bd50b5919f456fc19838a48857a8aa4fa60c9219e2cf50cd367c3d3e8fa6ba8c42cb9962a49fb62534ad36150ddb99899a2ee2a935f6f16f3de81115cdfa4920f28fcfd4ee5b0a7593e12aab8517e635a99f8f695455b82d9504cdb2ef76e5422bb02506cd458a2e9513bfd99012ff9f62b62c494e68007727718085440a1f5bd3d0c8e4534e5518a4345046544b348d4a0be1047c3a374c597946c251cbd76200018917023acef955e8a1491ed4fe9fa67e2a809ca9c85255c1e62e2566055d31edd2afb4c916f23712f30582d595824322dc7f1a78f8551ff26edc8f6db4200a10b5940d3518f094289adabcb4b2aa6219f95691fe0f432f92776d98bcbebd9e8b92cd26478d8668ed726bb77edafd4b7726d9730ffc9554335d770555e3b5f33018a06dd6a181859862299dfbb82bce3fce30ce6fd828c9c0d6676523880923cee7b74ce4e78fcfbe3d671ad9d1c9ad0ad9d184b5279343bff5fe68ed35f0ad522601409814ce3dce4981655eb038d6f82179206fafee11456190d4790e1fa564ddc5fcc76fbf0f4b165ad2b85131489bc12ae021077c34eb20d9e843ccbfb79c04b6faab07b93f17ccebec22dd72513e5b0a9a6e84aae7e077d246b6012550fa38f43678ab1bf34681439cbbc59d2c00a7707b20a95b29de649bb61e28a2dc4e236158033850cbb5d7ec2c5c4d9f6f4b28587fac8b515e6dff4e2c57b7694a383e91dcd4f8c5b22d0763c58acdbbb30faac7233031be41c072924398e878925afb5f24a3632ac884ca61ba29e1697f336a88d4a4600f462c783cca885a08ca0cae8c9c5fdfa55b6fbf77fe45bd93fa58c00ee89bc01eb618fb8feafb820557c5e1409d8690806982bcafe329a1c1d6e45e8f2d7b7de951c4ed68d85e233cf76459a8a59bd8dad91b74f8efdb2872cb793b0ebc01bd569afe66276c4ec95000caae9453f5e5a4726436cef0f97e0008946f08be907a683d2035e7911ec5450f0d224aed7ca874fe682a0fcc0e3d971d60bd89f47f576491e71b3c2ac3115044a6d0cd930c0a03cf4d6b3dc20b13988a2d00ce0bbf00a161b32142327cbc00ca2851fc244a05ebb85647a0753aa7d37f0ea64e747649bf41ad38e4dc8ab9776d40c967d912ce848db05f3823990acc044a92b9cca5edb32827bba457f73941ae479f1c8a7f3ea08c6676e11724ae649afbf1d0090ebd460e38569e82fe12efe3f15396251bf0639f81c97cebcbe2971fb9fdf8ff42743dde9451ff92d052f68499780497ebfc1086ceffa0f108e1d3dd7d866c6b02b8966efc0dfd93c0b96ee4904c80d7f14c640dbf7b076b87803102700000000000032ef86c9ddd4d9b749190bbd151664524ea253fe1b8c08bdbdf28767200db904fd601ca197ca1216b8fe9386ae453e9bee284074e7b62b3cd667a386bd868680d38532e80dfcd57d95c5c1a034c33393c55b07a5666d08cfd72f7123cd3fdd7b4e0c9d5c49f44074024000b0a6840304fa1e653be1ba0b1a2d06e09598150e439aef2224f27f46faa66ce0ce3719769d22f1c9c164ec1f1a26722038040ca8d062502e34e48b8a64a608ab29d8518e84b5f6026a36b6206b67627ebbbfa81a6d35a28d536e16909bbe16b6d698e88a2ebab43341746c17889056b0c8a12890f091ab8b752d158de60082f750aa207620715fdd72e60b77437ff4a0c6e6114fccb4130cb582160d95ec248ffd3f5515d1a872fd53ca04558947c9150756766c73b0a389161b5d7cc52f9ad386bd37e547d53ca756d1ef8aacc93f71284fc6ec559fd68a0d773e8bb0f644e61dcc01bf5058c00d65df2e623800a0a8899eb5ecd7b49f8e201e2f242733d7f4703024a86fba80fe7be29a1b5b23f32db315ef366f75530a6c252b1ec18e22d9d2f215d19f30259d01adb378867df443c9b3e744963c5d276b783eabf6fb8d952a03fdd8c40c0abe08d54253795b5a7f7dd1700d1dd87fae455cfeaac39514df7c30a7f290f86ea036c9ba98eada3b3a1c4f596f81014697541b96e085a137de72f0cc15eeb45f25560c7cd0781df715ca2a07cfc5f60710a7464e5b1cb64dae9a47da212382d5b5e17a245784df39a3022cb1dbe03e3701d67e48840e49b3841732c4e14cade822f5e5554482613fe59b394ce83c64e40e4d9630b85e49a5784cb1ff6f2f2224194c1b8578415c1ce322862d01f296a8871678490b32a05f20362640952d9738f913cadbc01d09d5e191d8b6c5325b2894ca166693122105abc65107df8cdca5ff82cc0e7c8409437bb563ac3a12eaa73173dcb21baf9f110dd3f648f9024474b81cd35fd5ca7be9c62b5d7d079810aaafee7113e548b3f3e089799ad6ae6e7d2c858fb2e1a25b82fca336017b8e2e2d2323136820402c4e2f1fb3d796de67ad20dad866a95978a43d990d1067532130b63eb268310671a4c20067cfa1cf2f6cc09147feea0d07a20bc5d550cb930c8f2f25698b39b97baec6605b1233156eb29b317ea0067254af2410bb902f8b21db3eb228a37d7b5c41c0dee53dc3af9b3f01bc97c67ad5eb5efdbb89ac27cd16d909d671b1b54379712c19614b106a03c97d19e31a1e334a48ad63a6de41632bf62555b2c522d2f3e64fa11d93ced4dc52247d96a75600551af27212c17d488bea9202dc781139da40422c328fcf49886ab8446c82ea4629010fbb42ce46681e5002c5e4f508a216dc3a4ce351723379d21297b247f735f297ed2f40f436e296341d44d329a00ad7aa7a6b628408b57e390b4c2afe1e76e6e86cb48ee223b969533e05f9d4219a30f42e0eb4780a9e19db4b0246677be5f5e119ed5cac86b4bb378079258c51eaa626d33945343c79ed8197a233c2d29bef25f50d412e62bdba1036acd6b852ac48e88d8faee019ff5a8987d83fe9ea4cd92a0bcb12966af3f362b827771e1dc3cf799c74b602789f0b3147805f0a51ab4ebaca4cd0738388eb3fbf1a720dcf80fe460a1d9acc3f710bd78c82006392b2427a6d1c9fb268b756042889f6716e0f8c4b1371bcfc01b7a358c03cbfca899a17f62dac7a0ab0837fc9aeb249742ab508b3e32b15a96fe63c167ee70fd70a9b6d016d9b56a88b49b1c1806d4d0dd274de74e6bda3f40b8477d4729e6eaff599704de989a38948365229a4dd93874666436663e1c0e4005078e376e91a4ab74e1b5867c62ff3707622f922c00d3da35e5eeee923d2c1db1609bbfbcb123dd3d7a1da57036c3c5fe6abf10ae94a92b62c1ee2f7c7a3a400aac79389a16e8ff0528b60e2111ccc1c84408a94b11bee1401f85be4335f2e4c720920ca34a9e9e628b9597e01448a7331d073b608eb11056397ab65a2fb8b14d71c32ab1f1963df2923a82226131322c3e831b9fb4213bdf1239ae25379df8d918fe9a4402b9eb160e4fbeeaefcad1babda3f1fed8ca95388db64a8d13cbbb3c58f434fab718e24b2c49601e21458370514db3d89e55b09876fbf75079aaf92b2c7fb2ea784120b5875a68851e09a35289f3a1c5470fa6ca7eacf2250d222358a82d71d1c933d9218d1f5255a3f4f12717a4b834611cb68d9f75bb673239142422a5e7fdeac470490468d25961a831ea60ca3971d06249d1e4f86103d95609ca3a13b7f7abbe1fcf4a0cf2340e4ebc86f4a8db5bd1bd12e6f9ebb94853817735435c05a19e34e79e41cde64e386a6311b7428a84a72339fc44295c1c50c3957b056e7945cc9b8325a770b913e23052117e45d2fb624e079b905bb2504041869e99b34ac730bfaee83946ffaa50ccc870b80f910306d2ba285c0319d4f427f89837ce05616f49a8097184e2b0aa518e7d550822d0d22a353186012a0669cfaa5a10ff9869cc429d438e7b30e6a38f6e042d5dd0837391da41a7adb7e19ca5431cdf8b33ae315380de3901e4ede37d43b70658e3dc3cb20936f16c43f17cc4c8d1b583c41f7bc5e3bc5c94b82d639a532bc98f600d0af341a82b471ad4ad552bbb1307a5f5398a2e245545cd60855a58f81d4dc1da1960a91eef71a6935c15a65eb8d7d0c3183f06acf5f607fcf3210a1450cf12c41efff31a552ab307070f19754e952221b1913191653b490c3c1abcb2410a720fa1ede189493a107713747f05d4e2f5c6254c868d5541ed9e0d18c55cd5b0f2c34bf9d6024771303effa61a5d6ad4d18ae13fcd3213ad8fc2c7e7b8d28a87e25fed16dfd2c4c1ccb7a683f5dc4531a013710032c663378ccf7bf58fe144f1d31ae28ae8db3bd2fd48c9727f8d79e421b352d84b63e8820c2abb9f7d4d432d71bde824a0f8448332d1513b48112abbf8cbeece04925664f3fa4d354374426990e5d61ce919b9b14d3521042f43c3248233a66a922abbc0550eef8e0e242607b35489c7e57afbb93313a385a6784bb61dfedd8fe9054f68846695d1372f747f02defb00f07d714b7bc163d07e93ff67cf756c0b6648883607df6ef371191bb2a3a85e96d579417d46083ff79ee04a3be3d2961c2ef4717d556c01bdc8ada8b0e12644bd6ab5d7aa168cf749cf61d5781bb6970e4d6fee30e4cb8d3886d9d5f641e22b533ac6565c83731d419cdc15dd868a7152c0a40db61c2592b94ef8e0e8e2f01aba6286f009816b3ca6a808008142588cc793db6d1575b5eb175769fd363142df3b6e83d463cf7c68c44b1c0246f21eadeb63220fefdb4d53eb70b65464d3580c1d406d5ee0cec827fc75a16745f97d7da7be8657f16e77964e55f12372620e8d18354964972936781c90a74fb8e24a8dcbe33e94850724d865d5a8ba7080bd2c430464cc14161a5d53e723c5b13b1221c4fe8c5d3fd25940cf00a8b28e90a6bf21f2e0bbfd25918c9ad46444e9226497f4e9c370ca97b3a9bdb768b575f32045f224d6077746f0209d981f80d5fd92fcb763c7379812df67fdd58de96df3460e13414eac5eefe0a010f0670ac049e03ab1963c2e8a4f26cc743d9d7e63f10eec25f0a7a1a194879b959001b98f30a4457f88cd6c9c303dff50246e5b32220a8679d6a100369497f2f3b86196b3bede3ffd8ae8178effc0b03e10139e5ec0eb116ba28dc59670a4f80c790610b4ab89c45f1e66ec1a68c4d34a36b92eb3d14951972d2bd2b42c8d2e5383c7c1164cc378c94c8116006492997b79f1f2feb2de5cf218d61f61b3f98ad52fcee9829a2cef4ba325aed94479ce7dc383b788e11537249d9f63781b258ca98eee3ee217c0ec564e2816639271328748b411a0c1e84032bedd43ec02f933c7975979d24ca75f705ad6f0d95b19dca63a944610c02b9076e7b2ca38abbdf4a68d9fe197066a42a449c51a96cd883e41be0a991ab041f8064bf04ebc0925ff4e1f0ccb41952bb5a72b94b98c8cfa6f392de194ba4134daac190666dcaaa321f013161034aa90646446571cf7a45af1c33c41a2c6229d36b15ea28cac77fb3e39f3ef36b3bd0dd42dcdc192263f1ce714b7e55a81d17b29f2b4c5f2980e599decacf28efe211ff83b42c35b353313531cad816475337b8e693de33156e9cfa53e866ebeef77d8f071eea4efb19df86e8adb61c750e342ea7f0ad3de5780f551986fccaf1697fc270e0e4cf4b805f05fc6841e7e3be170003f48dd519e8c95213cd015351459951a30de7e3ca7f3408eb353499bdea00a3409c4c848554454670bcc9e785b1a3dacbe899d341c2927d9cfac091e5b5316d7a7312f484db1df7dc32e1bd32cc70f76ad7fd9896fd334f03c79250792e1521e1e436f4382e8712593a8d07d589eb3cf7ac8fc3145eefc7c8f1562b3145224f27ddaf37aa95d66ed59d601e33f9241f1ae95a77c7b759efec2785ba246c360cfcd72d623e8fe948cca79414dca0c3632e43e9e99956aa848fecd7cda43a2a38965e6e3998a224f695cb35e8fadc2ee07ab5d264b7e4644dbbab83caf72c144b0a89ed3c8e780efd7e35c683e666fb8a2ac8770b579d758cd83a4b3d6beb3e1b664b0b82317b2cdc7b5395854d59c5c731db4ddd61722f67ab64bc7c28192c75998d6cdb0fefcd8da69cf3b46be40611010e093f71180490a910809b25442162f54c9773b1e03b5f6d91fc06416095cfdcfc8eea0f1412356ade9338c24602cde8606affc93a5cff86e270a5063f251fd0d2196ad498d6f6af25d32be5d82d3a42bca54f2e05ee6680d33da78c18e5a9a0b915c2cbfa07f737f0aa22a77024b28c42817a09d9930af58fc76835b8aad195169960b362a36e16e146baff8532b185ebc14d0630091cf431bd490ca409fbb0c03a4760af7a5bdeb10a2b2c7e2ff7b053d863ddc13c0bdde02d0d9b505be8fbdecbe1c5ce999f49c1921501c83c0cd99a4438fddc8bb7838d85a6afe3d0f971cc236a289e16b1307c4734ecd81ff8a3a05c26de42d8fbeb158a32dc8767572a4ed09da9c1edc862f481e694a01cbbe0491f5ab765660d4aabffe454e2ab384f736f523e26758532556b6c991730d39bc688e4ea027e6717f7a1ae31045f9f5d84eecc983729eca092500799b0169ac4660bf7301199bb339c489a5ef4a1f67c883a8abadd86909afd5ec80c113d0e0558488ad181195f8997d81b593d7f36033dfb1b16022cd9f71be22d6e452ccf06fac751f765a223ce620e4b76de3b7c4a4d560ff6b5d06bba5225ccf52104f19b0f201bc30075df7e93045b9eaf45d30078b4a9f230c81053bbee64b6c805e9bdc30f00289de9a7b345d83fb1b9ec0a4cd1920522178f4dcb7e5b4940bc17824cbe70d3dd189b5041c870af3006adc6b2ad28c578961879a800680bcd9f32acbee5efbde6aa0fdb0d109504eb3c5b759ba25197a7d33006c99836e165d218d08353a6244232caeb7c8e367a8915c12b7023483990abda1808eef8ed6ff220cbcd2236d1e66ea8fec6fe25486a3217ece2f9612b08be735963032c5412d21d57b99ae868671e64cf138e8189125f3e722e4f178c458d1d0f96b0ebc7b7ad11fbf11d415f50e891d5ccbbfe8471ad8beafea7c7abf093996427faa02ab7c71149525a0895300ea32f35460d0d27b92af44674cfdf378c7719342be3d01a69293fa6c78d3375622b851509e280e5fee6457f869827602d2efd558b240a90663a7d6990f016303d71e3d0f98849d6914ed340e8b54ee27bb5c1cf83371ae00b1c3536a605463b7ff6ecf25b56d74336da882851ac6c1120dc0c4e2d684750d02a31126c45ffcbf0ad47df2fabf89585850549272e2fad33e16bcc7928f82d2215bdf0ffe797bd7aeba70c0f53cfc5e908bc6e55b321811929ad17ae93f0409301ea4c041dbdc93f1e6b7abe5ff96386721727f8f4ad953b7411fa764decf4da2b6ae3638a861c08aebb939a59d31ad254e55bb21b4b792f436df60f80fe42612aa1fb1f6e93a9cd0a2663326e7093ab5c9a47bd3eb1591008ad0ff413018d4729a85ebd5587b2135903ea8c14b38459116db018b519d5ae5c0bd5b29d48d9b3065d87ed88023b24ce60338e91ae6b1c503cf385af71f1e7a7b14552b74a96450aceaac7b0f0ccbae6b97b78752158bd56838549f72f74c5846eabde83da49cf22fc1f799911b9c2169b4f7fdca7e9b31a7a1b726ebeef3f54463934213c5fc7171b42166c49b9c2604337f67616192ae69a496d737cfed5adeb280ddd2666392fad71b5f0cce1324f39f3b3b43e15ca87757d3edf4be11fbdd060d63c29582900e83a7f581895317d732cef871c3bf1efbef585b8ce1eb4714772aef06d63951e3ad4e3ad9f6ae99335f1da05a55dd1ee0b03ef95121f22c6a250896756c0e30047e9e23f90f823231cfee32f38a7b7bb3c4ed19e393d80806bd8bcfbe16623125cde3d0a0d1e20b8faed153af0ea9124ceb9eecaa9f4962a9981960decc7ca275abc4b6bfe2d201a4f841693da435a75a84f032caef6a8c88b6ed4f8f3f1bd3a092c45c3c76f47044119d4bf1324b207df560441ae0299f2c64b44a5f99d8336201ed69105000cfcfbda3ad40e64bce8141233616dfc1ede5e2822d8950b26048cded04048d4608df159087368c503b6028a4cc6214341a76526aa5735aa7611ff7ddb70cddf310f5e7eaa8e5f64f9afa884aeccadfa94de8f5c602f6bb7cc0460438ffbce22ecaf085ad1d5e0c36539680febc392bcd8eef70d6b93886778101a583caee89f0043fd36fbb24c7b838babf4b96466cf2ea72d756bd66d92283a2577fc2717eadd39c28ff1f2df781eeb81bc77284bf205db75001df2e9aefe1c771d6e2779e558d2aa510c2ba5709119822f92f913648f7a5b92bfc847faf92c1668d94b472d11e02d2d5d54c2574b905ac599faabf3bd552a5a8248a4eeff2a024e4ceaff05726f55f91ecd5f962554f893830008b2a837cd364db0ed721117b1520ae4bcdf21f1c8ca5e4c3d721e8072adfdd84517c4a10b3b0ddd37c9fc1ef864c3bb33e56409e2b927ca7b47117046a391aed784755baa30cd09617255188932333ef44560edae6b952aa6e8924b9b8709dc459c6a457c4e99e3b993900a1b110476c1b0d0f6a6926f2bb44d80d94f5e2990f1e7c9e48a7fccdcdbb8a03c1ae031aff533d58c0b91cc16095a77cab2da615ec7be841660a940e205edd8387dfdc33aa5b2f1527e49790cba2155ee62df36779785c016e5800250f6cbc5300b448803957fee05bff0dde9dd4c47e42aebe573a26dccf74b25d7b3db352f0c81cd88306ea86f5924f26ea7ceee2f6f31493b2eb0c2414bfc8963807e82570afda0034ce2ee98a9bea9fc291bdf4e35924a64da2c019752619ee0a87d0c462844ea48e2033e772cc4fdbaba055475fae0743c3a391d80f9d3c3245352667706ca45d940f2777108167eb816365bfe37873544c45515ddfb0ab3a2d808a4d00e8e36db489223d2d2409f9f129cbd7646b3cf0f85c17cc822ee770d3d7bdf702dc69c02e1e80d832d2a1139c4cd988358c5929dbaeb98b5cd86ca2a1bc8f34816a739098c60bdfd17c2c90cd94385bccdc5e188070d07ec850629ae3fa57b47326144439bfed856d393f261073e918d5dbc8e1b9ae43443b5ad9b42129f4bf434c7497ac683331dd0aad72c4486976db10c2504a8968ac067a05ff761510b29248578a21f8cfcb56718b6a23e526f51ed68c1e998d6b79e329227b4605ed7a5102a60cb921269226a4ea691d2c560a69923097e3227dc6ce2a753f62ab11d571c0846dc5eabb8e53dcb2cb33fc9812879343a1c31b9a421df6426c118e153ff2c2735821ba6f8cec2d28a36515841276428e4a46f916fd0a165ace9bf507b6501451a91eeadd7079281a22b589f62dbb682034ef68e6ee46efd7df1e996dab904d158ba21e0618b7b8f0536bc43f1ec91d75b6c15c659b63f77064dc32a938f1b19023d1ebb741e6a95e113e23e62b408915d69be7d920885a2d73dafc5bd2a1bb9d674849bacf80209ef4285c493d0099a7bdd369bc566370a1b9a690f84f80aa11fbb5fc574ae94606dd01297b0c1a4d3b59025c77746e4868d74c19b58382dcc72cbb50a55c11fcdae4bcdbdc046bddc232c9377c2d8473595d894de12b317b49eb3cd5d6ee9e337a1191a94037078d2b4d686c6d21e11533627c89c79f7369ded1faeeb25d5fc843e035895981190bea7966335e54ba00f65ea55fc01572061cdfce625b6da6dceed555eaaac884dc372b2a9d16c823f3ff370ea2fd7740655e5fda512d15b60194bec037b75df813a954b6ff1b90eb91b84d4fe775e950a6a5d8c655e0a9145fc0dac6aca3d7d62a3e33babb142ab12c95da0ccbaec8730f65f44a07c119c08b37161580ee3bebca430d20321cb61912e6a0022006eeb198a4e48241ff2602ccd6ff0cfb40da4c9c2498279eb481b819ec0652a1389352d0e8d22a9552cfce0cfecdb2fe4862be70a6d67f0856c988b1826cd2c71b8dc3a409e84da5d3a10fa977946dd36a9d7949a3063004dc0e868677b7deccef42c1f2897a4deeb8abb1adbb8722180d5617a8829a2c993e299a86121e3dd3ec2c017a72753e3a6cfa96e058a8ca9874024a342e75fc8f83ffeebd1e5dd6cdedc0323755a2f71af16aa105b7c6b242b5a6c14b26c4fd1f9f92deeefb2412544cc9c35a3c4ce6bbf885ae27ba96ce8b420c72b15c8febfbc783dcd013564b4294bd7087e83ede7ef4bb66a4eeb949023e6266076ce2642b559f6528063d999bc03443f979c1e900c472d2d593d6c5ed6152969068e7db2e4c4bdda194cdff700a73a2188b0c42423b18fb30097754ba25009fb7a1222613f3cb1707f9e847e3b2c281546347c0a0402b53e8fbe4b7a57db81d38113051267ae91534e6dc7f285af7e84acf6a717bb219937d87b1f48064e915b865284418f97263e4683b7a277b332235a96026b3f82ae81f8ff32df427823208a798c845e8985b88a6b90ccfc47713a1cdbe683af6bb856346609af17235f0491018bb6fe8d0208989e5a20bb61160c9fedbe9047fe54ac457b86cf52e0875dd4b074a558e6f3274d6da38771f3f215272169db5c632de5988ac4ed72895e3b0743c6b89950dcaf16d0939b61e5f41138aaa7d62e24d00882e9f563943a896d04d8f6110f678a14310f90dfe386e9804295b5c97255fc096409bdff2d1582991aca74b0ed63e0a11ad2d381caf445210b6a27a3be2de8379f7ecc6944c6146e8253c822fcbf5701d1601bc524a08e2f7c5093137c588649d7823102a24edd62c2520c48c9b9065a56d64cbba18b598df224dbe359961aed07ec99cfe9a4baa23312e0393cb74fb621b3eb02812506ad9800e33948ec6eb4235f928cb068981dfe62c8332b7473eb0cfa72af2cc498153a4d227cc1381b27f725689b7a365e6a2a1c94c01a41d3a70ca0daa0fe453fa6621661879ffa5d78f4f00cb831e77c5c5fa5ac5c5b7f17a829ad3016cb6243b33e722e0a6484a31f5480704f7ccd8bb0261c932a3f1e1a952e5dc172a1ef872fa8cd114e85f290a1ee9039ae02a0ace04dc0230b2606c911d0bb106855442295c3d17f18ff84f04dac6b2dd7362d1c30637a9d55dfec4f4485e656c173c09a24dbed0e1a86f14fe0974eef71caec4d2fcc195114c874c25e3cc98b39cd5b9737559b5e297e7375b6ff410169e1da86fe0ef29100b85a36ad713e96943618ab3fc044c297ffe1056720e5ee5285e5e2553cced16c22d81926551ec1c99f48ee040ac618f2c60d6fe048df788fecb6507fae3db847b2ee73e6ed49b22f2068a42a8985a9cc663ad7a5886ffc7b1737e29900d0e743e208c1fd766c08ce5915318ab1536ff2f7e8eba4d05fff903aa5777d8fc527a3fa129954ed252f283a7544a781653c6a71586a17b4049148f2a77c2ca63443e59a895cd1dc4f736d70e40c2cb7b5befd86e9218823872f3523b243aeef2f4fa722ad26d10e10b8e56829a7a912afae3ad60c0b4a3e9e89b9020a182ac4aaac70c895d60b69e757875ada40a756e9957dc6e3cb6f06bd7ee5cadcfbcab59afe95103923721a5c0f42df190f31cdd2592468e7a79c36f0539ed07984df4204a98adb28e4bf4b1fa9ad8c60e5a55ce13a498be8f539f24ae37ebd7cb5e8827fa9a6654fadc7f415d1f7cc54a7862f87c4e60c1b7dfbe3922d8104e908b84e5f9f39c0fffb5bff0677c6bc55af1fb08c5bbf7f470515fe4666bd57f104977a7c9dbe4f033c53e5c7cbaa506e513add8de9d0b205f2469073bb30e9dffef9fd8bcec7f8c89204f4515c59e6e98f285dc010bf0f263bbc6775a01c978aa43447114afdc0379655c2469748a8bed521f9dd49efd78554b297b8ee0b13af6d9ed7f6ab1051bda813f9f9240e6073c117284064484b1162413af9787af1b1937a1b89b23dc5b5232cdf53562767408e30c54113ad168d8ab98c8f7bc35be1ca13255d3441a7ec921101c9dc2b50d7fa0806db8b230a440f897a3c7a9b3f13baf4cbda3d4ab0d7afa261dc00075ea81a02", + "hash": "00000000008b2ffd813f6a09372b4c9da20caad248245086445c19770ac270dd", + "height": 3428142, + "merkle_root": "f1f63cf0f5fa35b93fa46e8d819295c81ae3e5e20ee3589aedf6b39edc143640", + "previousblockhash": "0000000000acbb4e293519d3025062019b696f87e263347f2b04b4bc567bda6b", + "tx": [ + "6d0c4b77aa28fe4c486719a968762e213450e027937b3d2e7bd55037df5a0437", + "e08715bdada7e393d14cf44c29f8b761f539a9683b4cb549047afa933af3a22e", + "118ae0df58820cf35a0e64420a806e430a861b846f369c61b961b802b07437cb", + "3773157710de7df6c05dbd9c0baaa734b2fe02974645bde55bde409ac969ea92", + "5f78f43e765baf092d269d07b297194f1b3f2715b6e64cb0c47748ce7a92ddb3", + "5825904d688fbb81af7bb61070b1b87724eecef5928cc360bc69b74d17f9bf77", + "42cade52d68baf8f9da6e9a0b5e2ea013485d41a7831bec9cf87189fde40c871", + "ec302548a432dcbc0de538ff3ea44fd8b2dc5001d2cd496643ca5f0a56f2b3db", + "b0fd5d921bb44779124e2ba10128b5bfc8ea6c8e044e7802717cb43b7b671450" + ] +} diff --git a/tests/blocks/zcash_mainnet_3428143.json b/tests/blocks/zcash_mainnet_3428143.json new file mode 100644 index 000000000..945a951fb --- /dev/null +++ b/tests/blocks/zcash_mainnet_3428143.json @@ -0,0 +1,10 @@ +{ + "block": "04000000dd70c20a77195c4486502448d2aa0ca29d4c2b37096a3f81fd2f8b00000000009057f31d9c8d1c669f632e65289cb27155167bc89322c5ff966c6f30c36b9699408c9670232370030421f370ae90fb42474b8650c5355ec0b5706d6181198a219bb7686ac1c4001cb52a25eb0000000000000000000000000000020000000000000000000010fe96fd400500557457d1d7e1930781d1923afcd74470d3be6d0f108fba2c76522bc36cd1922d40bf41d0aeced4507105d7963b0a680a75df73f08cffaf45e65ef99d89641e23f7595fa7e59749fb133472facdbd01ad7e734208b4d8601b49cf659712494883e680b2f5d7fbb1592f900f435b256bddeaa7a429df3233b9efb27fee5d0a6750b9ae5804035a5ba0baa13cb158b03acdae951f75235b391ae555719f322ac14e50317946ff19ea01a23c878c058d0b7d390259a7c43be66c835503ee2c3dbf4eb9b3f215aa0bf3f453648e2d3f955104eb06be8be95e09f1af16c000cfc113663c48d89e02d212acb6f826c8d0956fd9623afef99368c42b68949e0d669f60601374b2f2b55395b4d192f1d63ab1e0ef19e807edbb87566b40302260bd248054ae7f25fad8181aaa138c8e5f6736f9a4188aad579a0d3f3a74c83be58759631eacd3a33e7747a8411f9aed0a9ee8c602fa10aabc69add9dc6704d7a24c801a1da299da2c30b5e26f91ba358bdd2f04424c7f5321ba24709dda049752e2e6033ea8e50f955950bf134b8287fe6b5b0d5662cc53ebd1b1759fd42199230e7a2c0957d7121f8872a5d60f39db6f8254261449734979ea30fe1840a454d90468844f6f4d456a8acf3f12823cbb90db291882b91ea4aabdcd90e36cc49fb2797f2e4c52de59e4075a236281a1abc427a70ded1016b525bd331c0df4b138184f763ce3c1f2acdc61ce2724663ecc9e3749f4e13a8fa5039ed836554b4269be0be0157c0211803a78d587efc5a00d62710e2b07b9b63cf192c03489bd83f3e5cbd58bb0d466acf8e50e041cf06bc9118baa632c9ce6c550e0513f124c5809010fee7645263846f94850f90b9f9cd2b7c8af7a26bfd3d79ad31f32736eecda9867791ea309976461f53edd4a26aa28eef6acc4a17c8d9a3b139e067b20470c6bfb87e30145937b8e4168fd7f79430fdfc22a0768e2df645312d094dbdf4a86956358115ca99ee4d338cb7f49e80874ccb62a727841d3622410d1de9e8a14c6b0b0e1093a917a085ef24b8a46315243dcd8e72a68fef33406ddb727a9de6d51d54f54628a2b04a6c66cde704d16972c6e04cc01349f59c329b6c8519172da54013d07c059aab54d892f647c209954ecb0b1c79bd661d619915c3ed38a3444912fb55a8ff53257aa159e48e3040e462fde0e6a49d88151512df9bedcc579aeef4c19dfa92471e6d0ab72d6422a0e1c0815355b5c4a3c0673b85f6a4a6877cc6f3218aa9a57aafb7cfe26443748fe6bc819f3d536b103bf8553f2226711776c40161ddd7d6186104555fad5a06d406575a5e75d527829166962b750537890f6f6fac2c00dd6d492de50f528e81f37779b2da7a897342b18f4af51b9067187a33c2d9640301aeedd01617604df728905e4c1fd2d870195fb002285d354dcbad08377701d5e949f1f350c4b1fb6bf9b2dabe1a30b994617ca49031607df15d41700ee19279b73ad49c233976dc2c1c5f8513a13c1249d2fbb66f3fbddcf4d1da2737f118b7a3a7e069103a9d0fb6c024829333071563ec4dd6e095f78185639c62a6112b6061be108e548927b051d93479f5b6705c5820d4344758987c6a62f8e4fba1d92391f28a11f5a13101d74308fc146c26c7647decd7c0134eadd0e662dfd1edd04c3ccff73ee82ddd54b60ce7c5fb027d32b198412e253316a762902b16fc58c7a9e33d11c3d93d0a1357bbbf79e1390dc4de21670eff670a92db2c2ef472a5c9f960955747ac2db278ff81d0d5713b529a810c9d68464dce9fba57cc0577bc3dc3ac71bc9bdee700eee5ba7e5c51d4145ee41a47dd5966e2162d9742322c11dba2f734d61b48a46422d15654b47e98beea9ea646fe7c16540413ed5a15fd4167184010600008098b684d85b16a537000000002f4f3400010000000000000000000000000000000000000000000000000000000000000000ffffffff09032f4f3404f09fa693ffffffff0240597307000000001976a91425db9091e9786867e536f70089a5102523ab1d6a88ac20bcbe000000000017a914c20cd5bdf7964ca61764db66bc2531b1792a084d8700000000", + "hash": "00000000001a8b54bbde4e8996373417a6b33ee2bd984bcf02882e5d8128d761", + "height": 3428143, + "merkle_root": "99966bc3306f6c96ffc52293c87b165571b29c28652e639f661c8d9c1df35790", + "previousblockhash": "00000000008b2ffd813f6a09372b4c9da20caad248245086445c19770ac270dd", + "tx": [ + "99966bc3306f6c96ffc52293c87b165571b29c28652e639f661c8d9c1df35790" + ] +} diff --git a/tests/blocks/zcash_mainnet_3428144.json b/tests/blocks/zcash_mainnet_3428144.json new file mode 100644 index 000000000..7a7b39b73 --- /dev/null +++ b/tests/blocks/zcash_mainnet_3428144.json @@ -0,0 +1,12 @@ +{ + "block": "0400000061d728815d2e8802cf4b98bde23eb3a617343796894edebb548b1a000000000072b8422b8830875380f2a81ed4f30994ddce4f967b89e9111781f782b97362a479927c96dd86bdd0bb3b8c9ba4d92e80d2a027d11c89bc6dbcb65b7814c3da9cc5b7686a27c5001cb5299b1e0000000000000000000000000000090000000000000000000001d4cafd40050019ec28ac1ac20fca2e03720a48d16ce7fdf73d5517fb04a63434e913b82494036cd70dde53fe79dc3d075be9e26184eaa8d9a1717a3a4a879a416a9ea3a4495c2ad16fedbc23f38608d9f7f1b0ab5781bcd53e033d97021f5db589e32ee46f73681596d22a7e2da70c8633f3081fb035ed0b3285b3d5ff80a32e177ed004eff188a4993d218d9d6231baef464d995e514f1e061f7743da8828fdb07af2e26b65119e39ce1c3e9c0175ea78ac605dc5b881505032fc8018c2383b4a501fb80dbba795ceb1a4d675cf15ba89e1822318a8110cda764e0717c6970d4b13231a7bd8c2344a14e1d919b53ed4b29a519f63f8b210e82d89898f0cd119f707cf3af03d60aefb508182a10250324e0bdf5b67802318eaedbea6e41b524365b3cfc861c687df5a16170b05c31ef1cac7f7c0043469d4467931470f6ef8ba2668ed26f71ac28b1c2245cc0d549c9f4c229c3e830422679241559424f137729a5cdd662ef1c038e36c309b0be0c295b312ae27d3e859d9ef050dc9cb1b4f1b8439bd215b383cfe931283c2ae4eba55a6df46c04375d6665a14edcde0b9271d67eb42965ea5f740a10a20940c5b0a77dd295de2c50ef4b5a21f7eb31bd11297028cf7cefcb5aa352373dc6a406de61b9d40d2406a8c08015abd857ac7646ebe32ca9b353ffc0e9b4ea77e8229d8c581b6dfe603f7fbebd691705eb7c0091c4ec18e797c93e637338a19271f9a619e3ce0683375e3a8e71f761fc06513b232cf049d79b6cf75392b8f63ebc71bee2f14bc32ddf8dd3d3d8773b1cc853c036c00615bc713a6360cc334fca4f7b3679e24840c664ce832cb78392033130da56ff02d495b6d5c6a1b8fb90876182e85b6f1a3a2d0bb97671aad19432e1be444ba2ba6249daaa58245fb34ec1499d09d5683438ffa2dceef6a7b8759e6fbbffab40ea14595f3c301a9909ea450aaf535e459748cdef13b046a3baf230915af4546a6a3a574878170bdc83b80624310538c187c5ca5284b23072fb987738a5bb09a72fed8f2b0369e348077b82d29db0fa882ddd57812275fd6f36c049c4ac1efa107090e9f72871868f24dd5a41492121672f9ff6ba2a929b684c55497e343ae24325f5eef3096a267c33d2179f07b8330f33349ddcbdb794f3d33ae09f82469285798a817629ac23996415852586305c750f9c0c2b7b466bb90bd718c5b9451e7d0eef241c5cbe2d32b19899bf3e645c3e4291ed842181fe019bd90fa0c1fab2ff5a33334ac614eb106fc17d1381ca2a31c88550acfeb3425373bf0d6279331ddf7c510d09e61541a7bc37864033fa67d3599927a5080f1217dc2a01d48e30944fb6263356bed5e53b3df55031c5ddac41c1f23e17d632638f67bb4765d4df6490f3a36a5406caac4018585d59132b6b82367a9ddce3e020e3cb8a69849efafba326232313fa1cba1af60664fb884aea79d08c995bc57a65259f8c69da495d05b047c577b31d4b5a161ea22ffc8e6bf0cdeb8d5c45306ea24c5ff2086697bf4b8941a67e92e43eed63bf802dc218b84e274f392e7d2bf77a12b6db574f784c60a920ad17b24a8dfb9e5e63fe5f99ae720f5790adf1872ecf5ba11b849820c846dd86de3c15c9cd80d931958519825b21f81b5d602a31ab56349d5bb5ff88b02a1cb6480e88299d48ed370d56f066b1aea9adf88097884fa5357412cf36fcb0bc863bcc3c8a5df5994085e1e8bd36067254586b7e825e9d7622c7b5354fc171691da08582b5ee25eb313b04b2fce622534770e0728a9f70bd4d16d1ead1372b3ed5e9e461672443e23794406f54b7da76fb8b505163a6569d59abb6e0910c3f4d15ac559a28765d38697e116f579326c055f20e1457504361bcbbddd833f4c4283992f22cf072b030600008098b684d85b16a53700000000304f3400010000000000000000000000000000000000000000000000000000000000000000ffffffff0903304f3404f09fa693ffffffff02901c7407000000001976a91425db9091e9786867e536f70089a5102523ab1d6a88ac20bcbe000000000017a914c20cd5bdf7964ca61764db66bc2531b1792a084d87000000000400008085202f8903ff26d2f5dbd050a50d2b1a4a24ca17bfc46b117a57f9487edab68f4cc237814c35010000fc00483045022100ceb09d2aa76c576dac36147ca0dd68f692fb9ee407f758ab6efcc757b51668570220462434f6434f78c83065fbb18c47499cae58e2eed79b0dce9b4b5db4be3d1fde01463043021f0a3b138a9e238b119be21c9df8c9ad6f210adb2fb14cdb95b83c3fbfb4a70402206f339f658ea171c35c472a8189f5d478c2b1d5203d8beef786403829986910a8014c695221026863e103cd27a7607fde095abf596d6bfea341265eacf13f9f83a858d56894a22102d6b313894f97d89e1006d70adf4decfb549e31c76004a7ce938c17fc2c2df474210254824c8cf0ac337d5295efadc0976dd98837dda6453ba4ff135d38770a7b855b53aeffffffff882aa2df4c812ba9e1cd433bfebd3b1735f416a3feb700510b1ffd2a3c90aa850b000000fc0047304402200c9135e5d7ffca142161ebfcd7fe851bf5d44a3d1c6529acfbf830e88698ba420220779a4e02b2fcb52ab276f6b8bdf68cfac2152ebef7b2a9c05c59497443e2c188014730440220136552cdf47f5770f2cb9730c50a84152cd935c684cdbedc9b4820cf57e1a4c0022064248d45f85de6edf915eae0f5bd22936afa13dd0e05da4d82f57521aaa309f3014c695221027f62375d7eb5eaaf2df737ef0fc5d28776ba3945e94a21b2df159cf1c3d2595e2102306d77d394060aad93177d11cf3e7b2e7da62b5bb15293e0fb5f1673d895dc462102db42362f0bb20b891e7e9615d4354ffb4b4269b7bcec7ce46e3160201635389b53aeffffffffb854c290d13915a01cb8a05e069ab0f6904cb7bb020103de42cd5d6ed35059f527000000fc004730440220222fc74636148c23cf939323dd7307daaa86f342c20c26011461b1de770f67840220200881b8129a3c7d54407c7b29e3991d9d0d1551e1f0460628975dbeb028129c0147304402204063bf9efa9d9a4ff6d90782a63a5a86f1ebc7ab4f67c85ba403bc06b4b69e5b02204ab3a7314f75ace6691a253c38b33989da8c971d9c32fa5bfa346d3f08d41a42014c69522102f89ccab2fd7590a93237016bd52ea74c7b2e98972185a2a746b7903aa284e67e2102cf41a4552527e0155f7c0a3ec6e456d0fad7fbe485616c0508c39515bbcfd3602103093e78ef7d9e3bcaec27e75a26b7a6b38726be2e35abdb58aefa50c1fa0f414753aeffffffff0280841e000000000017a91483e3d5d9d891e3c3562f50c7a877972309a7dcd28756791e000000000017a91445ef714be82964d7898fb8c66a4bcaf9eb19a13e8700000000484f340000000000000000000000000600008098b684d85b16a53700000000574f34000000000002ed27184d4e8d424ba449ac0f5f4d3ccc3d31fd756242ba1f136960006d6bd03e645aebd9818851c57ddb89f263b00f4cc4acd7386aa77d1b1f05916f234a0c0ca14401f25a4c2eee8e32d501d3935be9b5afda694bdb22d8c007408c9ca63225b70b8faaecc00766822b6ea814b14b5a8088c5b6f8e02caffbc0bc9292889417145888b1494271f1e2889e8cfd90c89cd35d7c6629d3c8bb8d82f51dfe21b2142ab738737c410fe38a37a0f0832d8958ea15ef774e5ecfdda857c881ad1aca0fd38c006bd412615268d48d3afef06e740060e1cb17606d2573f78d680e9f8768e1424bcd5584df8613a8b9d6ab90706e3c437d91a8f9d35c60419423088592b81bf02e31dd85e64d2649853abb16e4d130ed944025c8e0f70a8daf3e3f9eb5343cce1f87140c66386b22b26e3c57aa74aa4b4c499529522dacad09f16a7acc4027715376bfdff36d7924065433e3d2a0d62009655fdf15b295a200e072a0ca3801692c525676a206d3b01c3bdfb031036eeb975cdc79c8d96405457dd853354bff898bcd57139662d9a714963095588c44b9ca118eac64f199e0f6230b439d8a9d71e0c139a2389522ee24f525f4024d16878685e74dc32c04afb4fbbdc6b777fa616f3bf0e87a567904437705099b8893d1e14e0747a81982ebf03bf8d29b8bcb6ac1bf936091ac447e673d9f47dbed85fb8fc4b27c305a65147e6da5eaa5c357c76de2a85b89787c5bb46331f0f6f713a2b7b8a0c1739a79a6b725137d498081c3d64b357d85a2f3027b0c6fa7956eb8382f89d112665f139b443c1bc8c28d4cf333a5f307858c697b3e447d45724748fac590a7b9fdd6aeffb6ad7cfd065f8d715cb46ce31cc21f1d2c921f952e5f5f52506448543f9c5a76c826e17039a486c1b5dd17a1d4fe3f7189ca7f503da0591856f8ebf6652a2d3fca354efd204c9c7c2358b5829fd861f53f2e9444bae1b94f77cd3998c4b391272374c4b0be459a2f7b530cb9d93c96be38a7badce1c02ea8b16dc521045284555ca70a9d1552d02362517fe5e2c2129cb4960068321de6faf29a2cf8751dd9112fc7575bde9d3b525a8f0751acdda40da2d71b97e404236b9425f4a63015e2c1df584a4590c96d62c0e4886b8a1177662f8c275eca4a69bd463bcb968b3c878ff863e17d95a951a15874ddcab513b80192b7ea6379177fa113b0450d6c3afc9b2e8b254897fca9f00a207596c94a93cb4d09bf93362dbc707f15ec22be785b97f618712149a52515035cb272131b06949f54ae94f1876021a721b0dfcec316beb70bbc9df35abc2ceeba236bb3986915187622facace78bcfd3517d38adf3250c204d78c5547358796ed8f47c6377de8cfbad2e123bc177f3a8d89ac936e2f51ff09babd0a2eb731df7fd41c48467ea4fc445706ca2b788aa90302d9003584157023d3b313443780e0b9d97bff5a9ee2dca7ed83ad1a33a8dcc3a21f88e740234ed2849c27e95dbd3e4962737f4c8e52224c079e03d5c485aec61a21ab86b1eeaf4746ca4041ca5a2292c8e147c0683deb42b97c14f843e1b230ce793fd796f42640bbd1b3692df1282ca0737d062c257aa7e082c79d45a3cf8636a08a47b59f6445e3b6db81c002c975e8d4d40526dca8326e80cac00ccd255e92bed17ac1c10698ee3f7c3b9a8ce88a25bf14406804c347d274a0862118787b622fd853c0b9f51d5c51eda4127524c74467edbc387c66f7e88dcb2a906b7073ffda3ef456fba75c4882c9ac3265cd4605effd2bffa3bfe194a6bb50e974c0c6edb06af083ef7b04a4daf9078b0a260ed97696527c4746922789731c9cf140b369d1da3c1279da11c10dfb88fe18de319215f324e40a8e3000e624dbdd562032b2a6d9f75f6d8fc2c05c8f2fde9d1556037fedcf66229bd1a39af80c880a5c919e27c183d68be2e38363d70f44a8bd419ef779e9258d14409fb1e455565b83917a92c008591a5c85215414ff66fff63341cdfc6f575b8ca40308e93375b2b109931b342c1917aeec5033e9f87640dd19bf3cea51ba36ab0fc5a511597d3df17ac29abae25c634d84c5f4b8419be6c4c8133ef08e34c124747ac1ab9df770bd7ffaa4b73af2180502f73ce232638217063692798ea3f535c228642938d6f8f279cd3256d9bf69e5d2ee65fa63ff5aa03cc2ef9daa3784270e923fd0d99469f94cf2a966fbda791705b47578970788f791b80383f5a80ee4dc578164b5020ebea6f89d55b56e27b78a871d040920be129e41f4d62d2333c3d9a4680d16580c7843c4efdfec9946e6462da32e28a9456dd7178103d60360900f000000000032ef86c9ddd4d9b749190bbd151664524ea253fe1b8c08bdbdf28767200db904fd601cf811bef55e4e2ea0c9991478094aef223f716e426a843df5ab38be8d2301d102b817279259c827c19882f544e498d4b60cad9d71332599c58fe3fcf17ebb920f9fe9cd1c475d45dec4dc5b374fa85e535ea48ea16a2442187b8dc1f27630d600af0f239c85fb4448579c232b3173bcde779eb4fe6626f858782acec9aa8baba3ae1e787c866d56a192b4f46980e9ebb5d551aa8b70ab4210528883b5ddd4ae8b1c0ada714e239166937e8edc7017015860e95be62c4c1cd354846ed844692406567ec698920ba9367dee28f6489abdd591ec3fa36ba5f3851e5dde21464eb78dc3d22f285546775641949b7d37c667aad009b80c2e6ccceb8479a5339ca6a1806af485d3127d561b330fdfd77c48c3a4d37207043bed538be504b4f1a72321b22acf2aabba7202946154b4d4b0478827fb4fc0f60a515cbb54a562fdeaef3038b3b4b342b3fe3eb578150ac780924e28f984856e48646e8d481380a50d1abd19dddfa22fe87f8509320926f7d0d6bb50d4d30b54cba9e1eb4d970ae2df71cb172c4e933663776021e36990a5932aaab89d099c1c9fe12123fd26e38fa61e6f037d5d442baf47e8a9fe8b68ca6041c0d543b5aa483324006212422cffbb0239b45a2d71f43ee09e1883939b2c9ecec22a5d1d92f6f6ea381793d530b74ae32329af027d4153c50900ce11c8270f420a5de4b6c85e20b0b73fb0982fa375a69bb09847f5c13fa7b42238cd44e29cd13ace7d8a3dcb4611f3819fe0df24f80430255bcc09927b9c5b2e584e6e08009f911c42c6febe867ba9eb0e0e8f8036d289aaecc21c810b72c2beb5d2ff0a830528d013fda156a052cf1f6609f593f4f5ba06da40e64ac6221476d2231602e9a085e0666bd059ed9acb7e1d9033ec0291b8884f4c60e4e7e833f84a2f8b6460813ddc85cffea121b473b0e53d94da2e7914a5da1e9321f4b17c273d5b0d38d5aba68484fdb0bd6dfb5aaee161b19a3a8c8621de253379993dd0ff107fd7fd78d5cb32eaaa6e55328f030800588ffed27c99b88936b3abb5c8e5f308dcd5be8151fb9afc7847dd2c5b66adfa0633501ae3e607ddf128ee8f24979417acae7cfe791c20956fda1ab0b4364d0d6ac912088ec49281c89c2b5622f73f73909da8dd7fabeb73f186b179165430d7f934546e1cd5aee81a5ef6e0c079caaa64b23b4c56f26e8ed5b49249a04a14f87afe27837e5927ac38e5efb51e99a9033e7c0619a408410ea35fe5f88cec1256a469ab09deb3321fd39729f93fce73815d223d52051420f4141896315172bb745f7e94ad2fd5146b7f94f5533681f0e80544e57cddd2493bf1ce658358ef24f2b4e03bb157de2386088fd57a6c5092052302825b12248b32df92875348494eb3c8abab44239a1984edd01429f1fcfdbb555c689fabf0a7d35a88a47c3538a44464f3dedaf40d941966c5b33bbc6d576bd1db798c3c4c1061b9d258f778aba88fb7e28bceb1dcb78657e08169c462f0c3838b7e84ad8e9aca30c10f121e42cd2d0c552342345cafadee1b1976218831e758fb3a694a4b5d7acd7f13ad0e0e19bf4764f5f7632712a5aaaee1efd1d473eda803137adc1ff11b5b83884a451a59ad06540a012f1d2b7c53a05e7ea1e54c749f68c7b78f529df83dce045a2273375c9f109e17a2cd947f71a5a0d9652d7caffd5fba06839bbcc1116814dd56444d97cd1e3493c7f28a93af2e7d83e800def6b31e305a17a90e4ba2303aaaeb08e5489d04bf90329c99114e3108f6a641649b264d1d1a9259cef8127417a09951c766fbb031ce129a8f491fc823893e72a3d1466b5308efb4d649f5337de21e74f7743e49e2b7c3928247b71f9706eb054a9aec3c3e97461bd7f265e1156290aff3ff8dbf6f5b894392bcfe586a9f29c46951f21eec6b48fabc74af91204c6fbe249f8c81b76bf5519da5a07a29567e2baa9ccbc5b5092aa46340f701864cfbb92857c00104317e5a90c5b9e7aa6c386cb812a462e8332ab8d6f792bd111474d166ec3cbd1a88d82c202c81734c39cdfde99c67d109ad84a9a1f454537c7747d59b6a827cb0917316af6a584f2e262609b17d375bbb64ad81e572b6ba3dfce03362d0d45b8e0ef5a9b3e918e5396a57397deb014cab4e549cd06fbe666e611516654f78ad305e5da9225f7f51917a58665d1bb65282bc1578c4c6a6b4419b05f258bd1c834dee298495617c30ea4d440f94dd912409ae0dc63243ce43a8364172b111615efccef20501094dff08cb4849b6478445cf8ae50b9ca03f5966369322852893459b3246438188de107c9c306bb4d1e461cb8aeac6224f2d86755abd062990bed45260d9cb20b0c0d3e3c51499bdb6ad657ef20824b05942935b1b60003e5e1f5483965cf63ca51188c142e886c1f3f228f1d78904d99312b264243fad266dd2555d14ad7410544275f9fa5c4934be766df6bab40e91eafee4ffa8eacd330cc405ce80193d211cbcf27c59ee8770db7b25938fd7333acaeb2ebcb81883ab0823ae66f6c7632c01e6546577426de5fc16a842f306f2228c797f957dd0536cb541ef3ee499ce3415aa66616c5567fb163dd6ba03be4e344a8d7d479d22abaa2aa7cf2b2f2e961bc2b12effcc031b2fc10b50b55ac3c7dfac1cd0732d1462e222423ff32ce115226f6c60209877f6a92ef9bd56d47981ad23400718d1aed7fea1655b8f48365b01da5131774036839bbd78835932e7fa1913745c95d0915b5e2010255ee4be3110f5f02e4a91d883d9ff286b5cc0ba2963bac8b5b4d449bd5463b0c5c877b6c8083c15a4d31191c3621c4a2042d41584ecb4fce5cb6c95a3093549a641a0bf000e3a3bad7511c2cd8cc1cb2ee118088f7fabb8f506c3fd9a7308b92d0a7c6e9133c7c898a0b47710f810bc189cadcdc3af9dc1e3439d2e908a76b14817e5c10e0fe00e1a49dc497c0017e7f00ba9a908e610a2b19e096ab72df587e2d93cc3a820ae9aeb3b9b4a6ae638e98d5605c2d360fc25f3d738a862d9be3c279a41c0122cf9c9dfbf88d275d031767ffe643046984484c95d736b98a9c36a833c3454342cfd1c004362e3ebe89afa4881e1abfa771e22fc0e977c8adb58007083ee19ba3655f88835dfa1382b654035864e027eb54f545478fa58c0eb4b0d895bc7d46d1b69ad13215db9c33ec7070f1ff0026d072ae2b1e2886be226514f49204a1192066eb12742d688fa8043b6869efb5d70dd8072f139ab5cc13e41f17a8ce6a1dd3ce5f2604fe9d18c3dfa6d8d340675f85e221e671b80b8f8ae396541de22f3ce31b31fa174a7d87ffd08ba95f57e7d6bfdd01f05f341fe58c6daeae65782401f100dce5cdd892418a387a16030f73c412fbb44d31c971d577aa1d1e284de7f210a25d1717f33d243be1c8281d9b7daeb971a82d5a46c62bd4dcdb20900c11bff290c41d3c43c4a3fcbf01b4c87d38e145966bee7da62264754fbea61046486d630323269c8f20690a4d424c49f04fdc01e5b8b84bd370605c2678727ba927ca0257b95565280281279078af87b20a9626f1f8f1f207d31e69a7557fafbbda6b332b3b6286d1e87d6933f46fdf4aaff469d72918717f3631439cf525cbf19af100047d2e485e81451d7458c33edffba346da5a12aa233b6268a4aa34f643db013013114ccef003aec008df16355a51b605634a52a939a58cecb531d9df4894f2a2af8881daaaee800d734a33975b7f2e5ddc8eb8f5ef329b8829d7769d602feb41e2d5988e27414488f789e9201edffbc1b16d00859481504ed181eb0007c4fb93dde751d55bda2aa4da460c68710eabeeea415fc56af038238493fd71963ddbf218ca59feb9e1b06f5053cb927f9e0d92057aee0981c4ff251fe4bb1b282262937a4e42507e58713c7c4638bba9795d77d19c56ed9d52d2343dcee3449d20be61c2d2fed00e38335f90deac40757d93b004598ddfe6cae370b41d81d50dd27a4110894737e3582e9223a5f4e6c90a465b46b4e9cc8e5f4ed5e7ae1dd1666e2a93168e18d4f1ca2a6c7f7387fa82f0dfc4e4c65fd1e21a5c04526c8694af9e1ff00c3f9a2f4e0dd8aaeda172d279b23f61fa80cd087b5498f49e78b41c671c9443f15302748b2008ef658aed499d9dd1d8745a8a0e570091376a301f463f1d98a1e3afbfd018ca30d5af9d30bd5c507b95eee9ce6b12d62a52627b3693ee0f50011081847d456e6f60fd8077ff082c3bf42225ee4a05324f7c25b4a1b6e1046c31ccabe3ba1eb7b5b4169668f88d739c1cd332d8cb55c7d04d2780f605f5b88d134f970107316b1e02b1dc8ca4b7639bdad7aa0fdf1cff43e6400b5c8b5c0dd02278cde30bc45a38a8fcd8baadd4ac7e965c8d8193f0b1dd75e10f2d46a0dfa0411f0cb4fcafeaa7b47e8f962e9c020072dacf1c68283aca499b9c7f9bf64de223e20325cbfc5cdac362fafd28445c7270f7143ac58d03c30af48d21d9b94be383eac885cd359259213eb3cff9b9365657e9fff160f8113f93da5630a1b4810bb1cd422e49ad59477019c09b7aedb6ae8e4b05cbbcdb2fd081f30fdd882dde49f3f765a809aa77e71d8981e262b96e689b383a52526ba235780c67b184543615a125b36e195a7834a1663a9c1f8b8a8c0594b4261c5c61c0329b7630dfc5a6a08000ada06a6a3c6c80eeea7c5d1516e8570d622dcee405b6b84276398da8299263fd10290d31b3fc262ad84db8b6b37a6dc52c47e37b703840cef2ae33ce1764934a42deeabae389b8648b6bd7e8042ad5e3146ae505b913cfd1a21a73b5587e10c1c42c23f5aff75857a771c3cde49d0adce3124f04d62796206a6b3f8e102682731a046f1fa7c01c3493dd3191571361736bc80e7b6f5bf68a24d0b5a67004e2eef3a29698c3f2a3d037cbc7cfdaa06f6f483de9aeadcaab812cb0203f22c4b2b39fae8caeaa442a3bcf438713827fde6946f141702c29a6dab1f5cb5deaa093bd7e94d33144d6b2086a74e0968c5daaf59ea72fd9bd5e8f55ebd878eb4ddb10a354c3ef810c80c9b99ae8bc7f1ea5e79efb2c918cf39655676c4ef45b393bc399c56d6ded3e739e18c4cd1859adcd5cfb33a42728d179b478ade0cd772268830aa90845c90c6d8c0838af8c98979e0b8898523fb4a0581f688f875cba5cbc01a452b3ba33f8dab670ddb0092904d1b31c650b869f7b88c42d4f15091954e300dbb814f2ea95a77211ce0b0b4839f644420e3c902d40a2dd1cfd9955ce16a5a294907c9f00ab39ef1c96f9723742a15ec2093e84aa6f44f9be63833153070b129c0635cdf5a58a36f22b7cde554a2ac17ce536efb61743224738926a3174fcf077156b6f2ee0949dd3f9a3aae4942e9127a318f2900bc5e39669f983b6f350c24ee78b5a841989d3ee7355a015cd93614e5fb7f2ed861c665b48f768ed468cd0f03d5aa5d596add48d0da5b8b57194e3c2c1f08e5c0025a64afbd7ab554cefc2e3d89f5b0e5690eb7cbcdefda20e041111ac5ed8084e0353d3f0caff5b4dcdf1736549fab771475e3e89f2a0500466ecf9c66ecc2dcacc2a061272dde9b1dc72ad5462672a7d14febc48559f3f40c39c42bd0ed58e84f092bad772401c9ad1e204930e979bb0efa33afd4952514656d3a15ada89b2ffb31f29666b571380faf345c846aa6e5d7a2dd7bb0f5525c31a8c9b94bc2edf4e6f82c2779b8f9cbecbc204471ba74c24472ed9144be140ba66a3cff52b5f5b20771e606435e04a2988913ca2662e6bebd0da2adee828b0aa7427b5ee41163ab3d3f425df33dadfb327f04fb70a9118f5bf49e88a7e002e24a60e727d8ba4e7acb54e48f1bf666a2cc9f3b9c8a811c8fd46e670e7bb5f8cbe5b577692d858e9ef3680b20246f0a40c6c92e8cf1734560f75d4a8c7c0eb1d17571e59a37ea0163d3ade220c8d853c9b4582d3d825ddc8829c6a787ef61b7b13002ea1bbca401c56258be0dd38dc8db90f03b42c2614174c15e91e3bd91d6b93548fbc22cd814e459bbf3ec3e19a2dce41d10f9cb2deccac04e96eca36c3d0ed3331147764c51b16ba99baf27457bf81485367ff8034f4ac20ec3e832458d4acc75650c159ae0d9d0c312e329cfa7fb9d7229978a17ff1b452831cff5980b9eb88a57933afbee84455f0c9972956dd3ec4213fc97a60a163a292d95a4dd9257743d4879949cde4f5969df4dbe1c76fc111832f7a9a66f4c8fedda71f4b905527d1adfba166ca10fcc26073799ffdf750a521a7271a84afa1c97f8433f4e0203a8182bb1d469c5551065d7810f1597d228df16f62cc867d25eea97105ba265deafeb539bfd0b99b27e313938340593e262e91294aa5911ebd6400a7743602a2aff7a324c4a4a4ca8b470d6f90e860f8e761404fea199420f238efb98e5c284009badc03e2ed32266528fb1dfcbcc4c4bdbca03bea9cd20fb55587b8add811a4f000110292bdbadaecd5bdcbddd44217c4f9610dacea0a89107056914553e8e9e4e650d9624a0016944fd74329e86dfe889f7291e59c6ca0d648473e8cb1f3ae965375fc591ef534973e9e829e62b33be147137cf3d1797450631bfe51e7e05c39fa239a01fdab6c8f3c2de57872931a3a1572fe010696301443e5e2b6a2971f86537fb49dd1dc40d47cab07c513b0b8bc0431942a9f93a68b61cba061022564b541c104bea65d671c3a15f07bd11b6b433c62eb6190b7df2a444d4c516de3ff05bae9dd5ff1f27b08bf9b5a23fc01ec568772db3c8bad390997af58f07ce84a06065da05b302dff2c73556f01bed2cc6640717128e27b36b5cd79ec52f433d1e04905f0bc40f86aae9c3a6c7d92df13a4c7c2a8bada62c0befb7e02dc3b32e61708d571b26f6280fc78f47c1bea2f41e71a3386b8391f668b7c0486477dbc8c621cbf4b783fa9a62a240e59d8691e02227a81661a99594570be51850e9d811a3eba2c7ff41d8520f42c57229d9f6a3c916e61efe5a41ff7905be99d4b5e5e83f387967e9056a4e2dd2f63ac1bae1fea818483e3d2adacb8f12c9ec717d73f3d3e9e41fb8d2e7e3d74ee16abea4cbe4dce3762129c273fa4046051789655b4e9c95c267f5335e7ab80119c13eee5aad25f3861cf6c1ed0f523759fbad5a96ac505ff034f0172fd761ce92c045b61b229df52a2f9c582277592df489094dce4456665ed5f1922f64c0746d20373d9247df45f73ddcf134c17498962405748f1f7f8fab8a47f09a24593d99a25d5b05769529e23bdb2c6dc452bd05c7fd462a83059e956402f0217aa4bd66fed345a9628cc5d20cb80a40b054ffc7ecd7a07b89cebad6787d06b22bf3be0edc5af99a739491ec0a2fc64112879da615b33da35d267b1e2726c45b3cafc32fc73b9fa17f6ce55f226c87840bf62b1ee415d54946bcfbece023929f9b31e1880d1e2595de88389a1cf033550953eae4e669287efac2d3d37f29123e3c170bbe9993b07ebeb95baf2197b26792fc8398ea479df0236b5dca9273d7b459fc56ac6e85262fea4846ec205da133bc3def711ddb9830fdb774e1f016fdaa403466684ed0d2f6b3f69a921be23aeb7805b18baf4db7d7d7be12ab384d99b8b48156637720f8e2b16a09da2f2b746ee73d2c8013b858fe63d9b77a2750bc4372e936ed83b5093e31bf06a5201b1dc50e1ba644ba4149b90183c37f3959c9b41c2ffd5aaf9f302e840f513d0a668236307f70e9fef642c888d05cb247b79682c7f948889f3e02e439a3f8e2232ec1f2f0410cd94b2ebfda972f195f9eec017900268e3de0dba4554a33eb810dac1d4951bd33413226fde5bcbc78c2d8595ed25b107cb2bc6b4eb1b7ae95a32b56f543325236cfb17b5fb06eafb4c89de97f8fe9b390edd28cdb3d7616235139957be25ea0335d169d2ea0f85284dde491a5c09856dd9da441667608c90e753891f4e79e5c24d04696ee61a9a721a3b5b379bbd6402f5ca4a9a4cd00f1f9ed14aaaef5e14998eb6301b0ca927782a0bfa2fdd2833037198e0829943083976804d006d1061e80092bf53da844fda2bc35ec0665c03655aed0df0bdaa07a4ecd343df5d77e0e74d0c87c05f7a7530c0c82c66a8fa54fc3577bb06215615cc6e3226894f65f8521cc3f3bcc127019fb6a603915b35b1b89877b242d4e386434bd0841cd867b8e9a1f7a59aa1be734cb404b8380284a013053a8778e71ad7e89e40b74479b8edb06cf0f4cf46734fa0ffa63c5df27a0e3b14af24998702e94b13e07038b350eb5f73d585b21140a535bef2ed570e0d09402656eb615db1fcf6d3e2c053147d57a657666b578a45284aaf2c696bb91468df258cc51a6bcf502117637f08064e1dc31bb604d754956cd73c6c82e1c4fcdaa8d49e977f38ca685e39a04f6be170af83f47ddc752edcf459f81fbca99d26b1fe46d5d40756e36beef1c03d0d21e305767630ed44513c0019373f489c37d9721ccb9f34241c2e0d0a7cf07e5f492832d01c7decf9f070bb913194ac9e2d2b58dbec80c7bf0bb951a59f20a0304c5c2658c760fd5ac135eddd043acaef8a9795981dfa33a8d5d16ec14aa211fff23339f076847bde9a8a5f2efddc78d724df39225c3f45d22b27ec4f58f0023ac62ca9df2c9a428fd2543ca8b4feed347d4bac644a687d56fa3a15caf4d02e536a5f0fcfb7d620faae434002009eccdfb55ff4afe9f94c095a420d133623c0b4c476a7c9476995ecf1d2770c0d697177dcc6a6443bf12009000f2e0561b3e8299eb3126c29798d2ef8bf5363bf716ad17a50ac1927065ee1459ba0273460ce2fe3388298e2d6e8e2ac8a9a7d4f6c85a79038fcf42eea2fc5e7a59f059b40909c680bb0aa1b153d9b3c21c2dc3004b1b53a0fef590de217fb5b5ca3a38520f74bfde58910018a7033cc2325880d64016a2b41acd1141cf80b29a699dfa9c9ae9f1e6b4444443d13347ff02c02fd34935f873f6612ceb04a4623ff446bc7209056387631559775211ca6e6be143b0e25dcba4b56714469fb32bbb7b6f331f11f9a7e2c1502f5b5a50189cdd3d0da168386527162ae2f3d9a39c0e9ca708992e32c71f251ee6883239d14cd2c179dc5ef500619fa9d05d71237b753b01ddc7123a773a8d0fbc7300c8427ee5131828e20a08211762ff9762363e6fd83f2fd23e9d5042679f9b9d68fe956b686f975e0963d515e22d4799b29d76c2578ddcff88a462f6b6138b5eb3ccd98ffde36251d2e5548fe4eeb7aa937f2be2401747a5b0d9179f46de8c5b5f6b35428db6e50ce3d56cb0954d46162dc16cf4af714d9934cf929b24b40ddaf7c99e0892d9283e88024d7b92232c1bd659f6c7ef44bc809536628690e5ee723770b5723ea91444897e7f4fd1d7ebea74f82e41f09585689cfb6416c41686e4222afdeaae63e1decaa177449036430f27b8a078f2468d421d76977fc92f0c922196d69377ac91fa8cfacbeba2f05f0a7241a5146693c331262b5682523d3e603534f02e073de8ffb4d8f14ccf3246c4b1a3381c48b32e0bbcc7e22f3c6bd4d4ec0c0f3a24f3fb930c060523a216b3cf81e1ce1513f3665e955a299a458c91ae042e8e912f838de5ca27dd7956756629cef1611b5c50b7aa3f9bb5d89d9fa9e1e712deb6c0f235a65877683f57ee8bbc399379e1d7f25b64b6266b2a1e1fbe5ad798f31f1d6d8309b29116c57bf13fbfbbdd3e9826173c382c52b600558fe7f894d63e2bc157a3f829aa50b0e6140e3789957b6ce64512b3275795fa6c1366d381966cb58845ae43efb2f4851055ae9a15669fc451687c8a81e33db4555837bf892c016369686db30a408dcf0e545b87d384ce59b83cb57085607edec37d66b8d44936a0d39bcc849a2e430422c95ccaa7a9e18689ff6f7a87b32a3bd6ca49435fc9507d922d56731c07623fffea451e7fa049b4ba2687f43b208bb3859ddcf88992b1bf3aafa9165cc7a92fc627c6a9b5c9552d2e8d269cb8bfce84731361b5bcb66717be7139807bb156f45e830c82210b94911ef06c8c31b047f3b092394675f775008620cac9e5f8d1e2a1941824507269ebbee20e1a149fcea5469d32d4ad234fabb6cb5c62f52e8d3e4ba1cf62b594109b7222b4199f6f426fa9b0d68111d2bd9e9fcafacfc0e2cfab2122d870dfc49495a4655d29089c9925b8a6f2b07e11949c19a4a1fc95cb36cf34b88ea6916ecfced7068e42385ba69c9ce8c5ad4bef6cee4456fd2a935ea593f174c01b54772325cc2b4c252170f14d63471df61a045795401cccdf906aaee93aadc6dc887d87255b153b072a042ede67ddada728dd7d193ac9a5ee1ecadffb1168f53dfdd2fcb234e21f0707a4e7896bb38ae9e78188a9e7da4e03c4412d4b7fb971c807c948745de612911549f34ac234424056b7ab9504c4658ec0a3cb62e707a20e83717c03cdab519f86231df3c371cd6a50c6a8989d4b22715828c68a9a9fd3bf641a2c997040d0af25d05ff959f86cce397c8ed2c4bcddf9ecab465cc4f71679a1e4d3366692fd7f85e70aeb3b7c8eb15459769dd3ab31c1eebac1c3f01d9f8437ccd3879f74d38e3902fb424d310fe316a5f976f8cfdb8739e11d18b1513d3637438b76a2af334eeebb129bc15588c16f3f086bd028ca8922ec02f3aa4d98ff9bd5c0e306e74cc7bb2ab4339ad88997d336f6b8eda71b47a958f0d54e0754d7aafa67eee179ac7fd0b06c92564c58eb9e7c3bed41bc4b06aa5c870c721355eb3cf89edd5c4f1e789d3a5440f7777408b55a6aa27a75b193342d3678c654ccf1adb34696e8c44e2d8d2543fb9c0189b35268f8485ca598ef583ae38453d58d0531fcdda80be27d22e66cbb286daa6e80ebaa5e2751a7abd09262becbf698e2eeb801ecf81079abf04665dd7e9995b30689bd66dfcdf3de26a18a57ff9ae55a0493aa023c469793e9a1a24950be35f2386b74ee2e20e6637ed435099f1acae3f284586a6baf1c2e701a6354a58fc4a3decf81455cd1c621e14b1311dee5bd495195c4dbd57c7e50e8d52554b7a76de5b750a5c9c3597fc409c3680488e42458d8ed03fa732cf64da67a9444fee6b7ba417551920dcdc16c381b73538bc051f4af1099fc1653e3d40bae952d3d03ad73946ed75c6ac1b31976617b035deb385223745a98ee9a189e0c389a991e2be0e08fb8713fa3d5dc42c0dd98a7ff4f2eb71ed263026541d92330e7fd7145c7ba9f8c4e4205a0b69c365179b14a5b9ce78010c9c68c1af5b49cb6af8c1257d137b58b17e4e68d22d80d6cb4778063d07af98a5755511b58b514efe7501ee18faeb4c0c9baf454f00cf6af59cc10a7054da4bb88718d23bf57a5de6446d2a634c85dc8c9076a8e6acc3019ed179c768a15bfb1fe793a3a51e4b9cc4743f5afeb249e420bdc0e3e733ce713c3579db15de6331837bfedcd4b1f6338b592e5d58fb8ee70dec1a15c448a8e865df8f648ae945e41a55971de99477595f3ddf65926159c6bb26b0fe841b1197ee5087939024114b3f0d1e4b504faa3acc82dcbb4bbf0c67b520ea8ebabaf9faf3b1ee35672c568fa959f1780e20dca1f54e7c8424c88de11cc9b7bdcf95b9ecc9507569694c52c46b664a41dc2fa9c9b555fd0651b5418f2c30c61946352f8d78be91b472f058845518a914c965bba5b8d12b36c80de0953351ba4f756cba706c07decb2e64ccb58ab84b3fe437629474eda2baaba3c9aad9a9d8dea7d31742b52f9d115674e6f3e84dedda4c5d9f76c347495a6796091cf8c3ac33af1e7565a56e5f4184e06a9fc39bab92ddbd689045371779b96f2851694a574e5795f944b9ad3768119092e04ec18680080260bec26a2f9a51d15a92141c7540bb778ea13f604defe6da7176e50816d91436081db8617c5e05a13e13dbf858faa63d4daf8b8fbdb11a20c700bb4cd1f4de3bfa017409ee20a2e8ccfa14760c00c262da649b97d931fb30fff677139641723428de4c30271a6405f7499c1221190985649bbaada535959f0d03bc5f6b86246ff9c06b6ad8b819dd4ba0448a0226d84957d750133bb2fd467a3b2cb26ee154ddce8f52d42d57166c2a8618df2de55564f2d199e84a6789a5166e5f46c2aaba782a6678ee6d78dbef45b73db8feeb86861659e5a09d4dafc3b0c77071e177fe9cefdbaeb4a576561649c503c6ae487605b3c872544d438c676969446e9c656b980cde25cb0ecc8815fb9a29f20055c579ca4cd42bae24b507c9b7bb37b7b1de2c1a34cf4aae80d0cf134c8696a815a7839c474faa605fb29a8d82baf86f952482a9382894263385e9c514a3cd75a3545282a5cfdee044662a5529658f5dcbde1c882b1db0050c8160abff0c5aa64e2616e00629ca4ba9e74411a8bf15a0e3b5626d9e46f851e38b8f8d7f3f1d009c4e290270c3b5a3a0496aef4859278ae58abe49ec096d3c51395f13e6ccaab98be7c47f41190a913a4517aaf3c2b2c94adceb48b7a6e371047d5170d2f56f7ec93d3208e235489e4b42a52434d4ca751679d909a821cdcf6245eefbdf0935200703a23ef9c80c7ec19f71d9ae67e6d7271d3f290507071a834ca55e5d36e0a2891234e95ca55fbda7f3892055ab000bf5e71af69fa9ddf8382e5a6ab543901ad76aaaf01f4c510b695ce1299e75195ea8f77c71d6cf235d0bd47aeadf7c166c75423a1ab97da19601f4a7b1693fd31d1f932225ec249faa5acb1a22a415acabeed9c9369457a9d87511af957909d4de1c3ecd7ce2e85ff0130218e498410bc4b34ee2bd5d4fdb9e60bbf4fcfce8e55a2291e5b32499bb2da05ff8279ad43d59b82e3421622a85e35075f5f1c7ea86fce0215efe2aac542e59dbc8c312755465275d5a249782c77e8011ab0bfc9ecf57e139fc13fbfa9129c7cb1d464c42b1d07c0bdf0ffffffffffae2935f1dfd8a24aed7c70df7de3a668eb7a49b1319880dde2bbd9031ae5d82ffd601cabfd6df7e650947b8efcee5710b0090580f4d6d08684d6b0cca4f1a380bc5d8bb1a46ed18986c6ce6298d9b8f104eaf9a7dcc9e180d5350b7066721454404595877d88c9413afbae1c3dc11f0fae5cea55df27b540ae6ba09fdf4a411613e2abe2d3b596bc66af521a86baf056ed64064ab948af23d5d7c3b67c770628c490a6ff60718420d45cf083d750c995a49363110b624d56004185e3edb2a98ea68ca6f7586d75967809ef596515865b43276a55db29fc8fa095f050abcd8862c71d33ca57fbd3c211c6499c388f42b8955c71792fced2d2897f92d8ba4f950b84211179992768d853f401bb5756246f2fa36ebeec2255ceffbecccdb2561c95dec4a68ba4321e8f23257455b8ed35de5d80cc734c3ee20e6a6d2e476ebf453c2b662a3e30433ada8e69cb2a2a2d0c03095b6b2d3ee36e8d44223832391163ae798f893a61db89bc4595e15e3b6bea1d737cac61676c6f777c380e3e3ead5e98ae2c1470aeab1473ccf7d69deae0c208f2e0f4346408e8ccbf1410f0e32d455d56a286599312b9521080c47d1beed6cbd74f3fa2a9b09ed776fb76580a1980f1d6f13ab4633bc5b49a915218e2ced84fc8badaffc8eb912ff233918545dbfff483400986cf37551f97d9d7eb5484a2113098127e0abb71ff57bff5fdc7e26a95f45ea015e624a36d807079815bc6059f02a11495fab2b01db36a426f4af3dc2c24410788b231c954fa204a502a77a4101707da99f6be3cad80920c005a3ddd387b991f179347384fa6fe579a3f3587bb7db9049b1795343a5cb2b7f4c22c5f90abc0a5cbda9de7616dc1796fc179f14e7db9d6dcdf86457a3e741bbb5508c99e93ffaa772af1eb7b8f61fe3b13363ff634ac74dc801a0da1efb07f3c05c7bfc88ec7083d8ebf764739886ceaf91c9ba482e2675aabd43c3a0dfc6507426e801bba2db7eb73b3153226b8dd0480e076a2e8ed4f3beb1f7ec1a9a60ff22e21052710eebff839bef708ee8e7a64d99c5c521d1d5f467a0410d606a0ca82b172ab35b2d5b055b9f71c55f569e3c05f391bb25db9da9bd994d32df6b967526f5932021af51b1849eeefaafc1721e6270c5a69f4b475a180033accf3f403a977bfca71ac542e246111c94dd65a48a9933df17bdef3992e2803f2f9d03774ddf9802821a1dc89b51aef4749aa0df7d06198eedf034a1010dc5bb3fb14bb05b035c697597d9c22ecd713845ba04a789dd903a24c2bce92ee3db3b8a2427de969e2bb6e38bc9f9d32a09dd08d4b313fdc10fec53ddda0c0dabaafcc2f80760e2f49b32742b1a70fb9e531f8ee567d41e6a1161469025622ead322de92b0f89762a28c92e7ec710d4be99566da0385a5049fc36e8ee921ba372884b9e94e28359a63740b0fac4e1221573fbebbc0e653af2fce7c96d68e6771f5efec0ac0b95e3fb660c653fd051c961b2e393fc1a94bce84ba53337ec6ddd0852b5b0b8250d52b92847c0df7268ba13e9250360b2913ca7bab6fa0a046f2882c3259db4945f8095ab59a5f38be07b07ddfb1e09f08e627012fabf460a6562958907ddaba4a5e57499d9b3304b22d5f753dcd9f47f68b89ad238f61527aa4a04e216871d0e964165428b59cf5c51bf8a30b7d7b647caf9343b198ec23888727934f15a454c08753d82b2fbca44e27cd8cc40f77aa543de9709a990790a795b1cb83fd4e2bc4543f7d1d7f1c76c58501f3629f134323cdc81531f7d6f09a51e1927b9c97e00d45c572b4670b5783a3bec1cdeec3e68ab4b5396970ac202d4b13439d09518e513f5b53f46bac337f10b180fc8d16afddb216317800cb65dca3932ed69ce701ad9d39562f74035883bb2ec75053cc43d3300234550b8fe1021751af52ef9cdad991d7ae9c1d096996192d68d95da280d8247b08269980c46ee84216a64c1ec1f70494ca13610ec36d880e3c2b85e0d0c09fa47e7335e212958bba205eb2500248dab3663824eaa1d3a38bec70d5b5abceb472da3e4038f507e0184770294578fd3dcd614dcc8fa6c5a1b3a13d4dd8d70e1e93bfc66c499f86839c3b3060cc8aeaca1a435a86b65469a0d5674b226f08bed67164b0cefdd7256f68da31cdb6d136e28b1593611ce7f5a224ed27b34ee936d447b6fe2ec1b96ebe8fadf2e86ff5aa9e2439125a73c24181218b7e7802c444624842f1c24d4b23b56c2feffc31723dd4292a7949ce72bc83ddf1baae2ce8e405a4dd83d64d74572e681b5b91ea267ff3777cb4ddb11237beb1eef4d632c58ecffca6c888908d47ded075f13b28c0803a72ea73adedab61133c06f3c71e1f2b05fed4e551578c540a87a18f5401f51f9cb2b2da48496c5c37894ca17ea251efb25633bbee95ad0c32991c24b5bb28bc9bfac3e85111563297aeaac1187bb96a4a8002bba442bdcccbc7682ea3b75c0fd6d26374ecba919239fd8b089a40dc97ed147be623cd1d2e043be42880aca2960612214252cb43de08ad52999c034725b918f4c1f1cb7bd9792ae3e4c19ff579a3f977bee05860a733f09b32f7a6a50598f77061cb7669c586d2d5157cd1830d771fe3409f17d5d139478f130cb6a4a8ae8b772c0ff570eb52e8f8cb821cd344964e41f7ab5dc23b03a888c7bdf841863ca3935c270a82703319d3a7f1e91532cae58fa425c90a9a013e3d00fe545899ac32e437d614482ff937cf419376b51e4f02e2eafad3061e304866e353cec870ada3969415ac4890bc80203021b40a845c299556a557b7ec231f1d5fe07f9de7cf5c05278e3b56f7d983cdc1d6e7c14f1c03d5f0b90b54551568669d6bcf8fcf6274f28ec150ce2b18e5571c5a8ac4626d3571e0475ec121192c7eb8f32c0c475d3f1bf507f3615632ff28aa9a6265f20c7b56747677451906bc919b3588bd1f88b3370d86a88bcf587395049f055716d4ba65d33a1074683245fd7c128c45eb67bf63bc01b790406e0adae18d699e434f31ffcff718e38433cf483c9a8226e3fa3419592811750c83c842f1116be30f8388ed1d22fab60b320cbc4d5cedae3ed7b0f03ffbb7e4ca0bf8c7b03bf852d799a190b9a5bb3c292e2b43ccc42ed44aa81974fa22911b686ca0b003134f0e0965bcecb60063a6830d035052f365d944bde40c76e52489ed1a0ad331ec5a27858495e94f9e88e1a320892411954fb60cc13ae57c09eda787d9e38016866ca733aab21e1c290a96dd1d130fee9826327feb9f3905dc00bf9bd41185f04e7bc0a87efdbffe10c02b182643a52f5b7b719562e99ea3bee47175b4ab1b6bdc41ab954f8218d2d5934bcf0f32ba82a8b2a3c1de7cfe246301d9274b0313b7c8e8aac0e84ec53c206ab69c0cc3befb878fa348a9168eeba01eda70e81deb4ecf9a5307840608c28c10584e004e64bfa5035a0dc01ce04edf94367edc748d3e113ddbb9a9457009eb5f620c1022dd40e0029827ea9727e76b870646b3d99bd57e7460b08705de39da1a9c6019a268a828e40d4e6ca9999e4c48ca44f9ca312be0a151ee804d4172778b5bff02af1be30464effddbf941b45ba9366ad574dd141d798162f2e76fa4a88d14dc02a3b2690334cc481135b8db0a52c15321b3c40ca8bc797ea8072b8d49df4e5a01cb93b1c0c4c79a900bb56da9f8d66e4f1ba7c21beda38d7fb842b408ade6ea36473acb4d5fbe6262529da961386b831984adb2ba95835d5c7019388ff211da226b9421c8783bb15b368503e38e278e6d5330b211d48587613060d11a6ce2b21f9c6c6212becb84f38fbe60be89575e53d85c112cc1d99e49f4aca0a59f7c261ebbe7dafd1b9ce6f2200e58e69bf6a4bddace7b8b07ed66ba09824b457a103c32da5a6914f11f404091fef2312572c2cdada43df0ec8cbb7f99d624042eafeb13fccdfdb687d86f081d52ddd6e8f253aa88bda9410f46da34e3808dddd4cca21139b617562c6aa0d8758fc212f4cda6d8e9469958aedff12a984387fb7f994f3426bdcb82b8c3fcaf7c949e9070273858780c74fb3e35bf7e614379b67f5865368ae5e93db8e46986952e5ef0c7e4b429665e91aa15f21425921144770a1bc73fb2bfab54984f79f171609031c1acef9925a112ce439915676474b042e2cd1c058793d31de623269ca5be4b8317263e71e1e10c154fdadded3d48740c8f0c0b141e3699613d1ef16c6dd8ed89f3bf3e1a3f04b91771bc5d8d675206c91c14763565aa05eedc2a9dfdb1eb1c13b0306484d9d5e0d03ddd3fa0db022d0a2c0a7805da4ee111770ab47840e7cae6daabb84ed4bbb38c1967149306d092ef6ecdaf189e1512a28b4b03f2097b4abda5b2efc9f7d6c3639dc516201f8d0264f2d92a1ece014e9c28bed381e658c485d569ec6541b58dc659ddca7a337779dd6ff19b16c4203f38bd7b6a50300345411d483a3c466619828b77f21c67c581e5f11cd8203a492bcda81b55a599ca401c6c4a4e68c7164104e9fd9e7319eaa09b9554dd09fc849650bd928dbe9304372f6b54d67e9a6bcfe4d86930d39aa41ea0210a782cf9a13cc108933a5adcb45a4cd369602e423f6069cc43b2ad87248bead8230332392e643ef88d8fc447bd4060be4a504918214941c33c24f2b4e4a361e157ad247d976cd44eda51d1639ad72550038b013415c43cf2338c3cc6649fa33c4b07175c90957caa2ceb79b01cbe2e815baaba21ff78c0e012d1f8e6e07b406dc844233a53c4c5264fb464fd40290264893ede85960641099c576b56b54ae335fe57097ca42ee8cdf832f1735aebe6e22705886442f18561252bae9b3dcfb5722cf9251d562df82779688ad50b4589f29dd948109e8c0dc258dfd6c68e83477453e01f9a754502c0b5eb88376be96e9b3eba0ebebaa910155db405a1b90c834d7dd83a879b722ce270edcba9f957455b23e8bf3f480e7ed8c14b7018d7e8a046a84b2812690ae8551a4dfd06160b4e89b748ec03362b908c8d16b02f14a2f408f35104f4df1741a43f6eb5a60457d2e4a10fcb029b266c12465dfedd2d66b16201573936fb85a0a74a31a85d692bdf734ac38792b8ba58d614478da16e785f8dbac40a8e8cdd14b740cb98f2f0baad9c772cf87e4b39464628869331882c59aaa5333486229eb60b0667fa002e017aac1d0b78f4fe8d27d3ef30110eb41004c640643e979d1259347b1b87b55e05157e07428019dab962371bcc1c5033bb7d65201d14973eb57500d9058d5dd6a40be4dac063247eda1f800f6c24ba4ccb4908bf7a28585bb1f8b047c85e8471fb736d55963b88c39a4533261eb51b461cdf51b9ce0d3ae19589b65dd30233fc83614e40ac9f6a832b81f5e139ecc3f129f40574d503c14d8e4d2b6a9dbe6ec10eaeb884b9afdba05e672622e1a9c146d18c31db9e0250fc6c393b51740ea7f33a299b16c9ba8e14a6e09b277841f0be31318287c611a2c9923858e6e699379bf36eefc68895ca49967a81d240062f15ea98cb7df117ef0390753b2b6c2237eea3eb64646dddf8cfb91d6d9072f7a6b1681bc0fb4401963a3c2e775504a5692074e1f881379f91c5a9e49166c50edffbecf7bcf1930af1f88933af20e0dd6bc8ed00f5d40cd65c5e7ee9d618f4519e536ead51cd3226cb41124525d4cbf6e23f992056590c01b03e84825f47c923afa3a213295d832174ac4d3debdb9d041f4527be8c786d86e302766bb406779f8dc672b8d4fa52393d25fd5958d39f4e1af45f141abf42654ff0e0e36f30f8fa7a5ba08c0b3c9436f2af5deed1779e5b4068e8ca39fb9be11126029aea9d9ba22b84059f9100322fcc3a47b3308ea5aa46bb25ab8ad8e6f54c2b5abffbca3b2d746f36618741bb03394effb2656ea23870051c0d7c49173f26bc5e8cee284cb050d1b5daefdcba0f0a13c05ceeadbea61bd2d4a2fded19d3032cf05d35897e586109f2b41f8043121d485a7cc4f75eeac762caf3f349e0405204875ef445a84dc038ad26c8ada30c75574edfd5d3387df3213ddefaea462784cd134a67eba41d94ce6227d3cc813af5ab17e9e4f914afd01ff0894b0c0d389da440459cf1e2a8200ab718299aeb0a2a5fe3f8a41558fa2e1e05ef6e329891eebd83d8d32e191257f37444cf2a7b285dcc8eb9badc3d984bc79e93714a35c569ee05a15220c4bf39490c6bb164b01125ab213cc7e40d0def20f8cb77b3c632bc2867a87c8171c2f8fad936c2718a210dc6d7d410aca54821c6001c11444a75479a821b48b244aafe723ce304c0351a66ce7d78273aa26800734610c84892587d50960fe109a3a28939ab4d179eae30f25676ae27fc9823087e2d420cdad4d9d2ddedb4612233c0e9e9f1d4da347a291d8901945dd11b9ecc81acf12fc24b47203101bd942aeb2cc19e3532f59bd72d7a7890e947164953a1756aaf17d93e359c17893bee2a8fb89f308f873d557232e92b1057a0cfd311164960279f93784c6ee8dead28faf7bf003ca1f33c03ea16d9dcfcf336a9181c02cd02f1dbf51646cb30d5688af4f5c1a9857cef87ac850995b143224cf1ee3ad07f5aec7cdb042f9bcb4276bc729fce6f0feb60ffadef01ecfc85365e872d2d969d8826c439cd370236dac97abbafb23b6b3ed8e69f5b026a9bcd22327e574bfa482b27ba9312f365c11326376b1234825f6e7d8ae926397e0a4caab5ee4e3c747e4d7cfb875a0169325ba9cb5c0341cc9f6db9edbae413aab249647f63b4affb06a58dead900dc16585c9672b400f66b2e549d2b8ec416e4c6247588add22b235e0ebfb83602d9691752086a5e2b52fdaa497a2d6b2e30db6b23aa2de5e7beb7a4c68cd4d29d9ccd69bdf8199f7a91d27c959dcd973c217810707aa65e8508dc9fe2a150974338c1f428f37f2ea198289ab2a913665630ec70dd9afc396fa96181c2ae669d68cbe786d21bfacaf8c39fb2aa0687a13e16a3013889d373b286369ecb7ec7995555e8a096403de82dacac20254aa9d284037b8841f759f3d3066ca2e0c081518a3415be5a5728cfc58045d7b73841aae436fb414906f6592e18b556ca3822b64911cc4b2a9ff35df84604001b6b1922ed115dd0a363b0e6d633063d9c193dd0bb7595579d7ec7b2c7f2e2c66b297cc5011726390e739012d9b518d330bd74d3f5ee0ec94ad4747bb3175eff362c23f3f105e6576a3c19c393ba9d857440e489f9859c18c26e8d7bd3e9196500e7a1eaba1e9278048b545020f850f9923de56194f9760c7379f4a095067e141f721f0c4d168b90788621383c065a646b5da1ad08a73b09a6910e7982a484f0666572f4640a2cbc1e3afd63f49f98a3ad110908eeebf3d088e1437d4b5877fe60200a73760d857fff32e36d624f64feccec5b28a4c26ce88daa0c1ed05e7834a2a1be55880a9b8b83df151430fe4fb4425d6c8c01c29cb78c095064689b573d28eac257820ebd5e7a6c059efc82e5ecd0c26d0eb1927f3a62861cc9df89815ffe18fab0bf0fec79e546e8d3f22134fee50995d9511341b74dfda14144b65e8b00b23f3e233566e2438cebcf47201b6f9b0a6bfe08db7160ea56c7b93beeb3b767566019e31d5b5016ab50feb7aebaa2c6f6ca5478372d63e2313c078c35aac2d184e331952db09548c6eb4487f40e1c0316e8007eb3cb046d790fdb82d9e783c9685f77cf086b69adc0ed3efe5ab5bf376ef676b5dbfba246ae0c528eb531fa6984b947681234aa08651decc5c0ab8ba0f6112ef0baa690336514b3d72b970eeab9bbde921fc85b4f17c6cf7317a009505ac0eecce314dd199048c27898347c13951b3fba1211092c1fdbe484f88158f8f6bc3163cceed928e695834d820cf89ba940dbe21f7b8448b74ebaeb055ccb19cf54a3e74098996ea6f9ab3c1dc2026f71a9b546020248f8832ab4e39cbc59b0b39a49fc8d0dc1529ef94397cb5ed40a7d20594c3952f0fddbfad9acc92aacc7e5ef7ad87493d34197176feb528b1bcac61696c83b7afb2f06cae325e5912dea9bd8841c3f6ef1e98f3c46f505433499d2bb50e52fe1caa4530e71db753b2ebbdd222ed2a781782270994dfca4eca80726fe20840d58b0962688c0f575c8d4425cb4da361d7547bd2d4f40322a2b377c01d67f7b31cf4bdf67c009fba88008fb9479f9698bf5f818496f64ea085a366659ff9b0b359e0ca4a08d96947001085d0347d8f3b05c62ebcab2874ed0ecf31185c2c5973f819d172d73c3485eccf9de4400aa495e5e59fb9ecebbfb0d44421d7a3966f515b9cb7074663c3dd28029d6d3584e3cd089824db46cf6f2c1320257abc4145c0fb93559d92a4139109111bf796a4c3c470568f45b8dbd0c9eeffa60cb94d4d519c91d1cbf0ad18ebd44f81fc763f057af77c420b5c2eaeaa55a676930e234761482432777b7134ff080af8f5b9c54ea5635b1540df7ca30e15e8e4913fe91702a04c4a74bc59c01183f91945c0905bb6811085c72d4041b4873cf38e05bcf583661211d757e8bfb5b48a168ba6c457a6947bb2865f7e620f458187fd8b94cc40b7b3bafaa156ad61a862961a0431fddff8b1b87311489a1d9adff2b011b432a0179b1498557a52b56939f2a9ca4d469442aec0c04c452f98b0db1eea4403c261bcc1baa07e462e2a666a51d2b97628801cbde91e13cb616069d09df406c3ed316f2339dafa375766823d2626369f70592f7d4f6e0fb688831d8af72bf93a09208bf635a3ecc4add08f84ff534aabff7de34854f40e9d51f84da8444d2c52cb82e13cdd5f5df0197de27841967565dbedd7939dd9aa725b5bc35549969df11ef2f47f8f4cd4969ec0a83635e6e6b48c866c092926de33d41a1c01588e1ec781428845a7f516a049803daad2c862504f61c7f7690fa9c3938c4dcd7c7d5ce45d91d8be09e8dd5a1c27c77b21c1daabdfd3b003f622b51d663aa558748ddefbf4b9fc8a9d022545282b0201ebd799ecf5b7afac10a2834092372d79ed23b7a75a51b722d6215cc7c1af34fd1c29d5eafd26164d6a31327db09a2a442f8f60fc7de0e0d94f7cd497900a561860566a2c268b340ad9df1c6beb1d699c02f48ee45d22c85bfb947399731e6a849a82c3dad43f4d43bb5e360e3e6dbba2b3ade52cfe43026fa8bd51b19bcfc3232f01fd780ae39f4a9bb89d2b4348c4b6f3f3ddc9ad704cf54821abad800b75630e8e883b1691cd1d330b91186c1240e86eeffcb5b0c2efc18781b34b9e900cb8fa99b7963d6db35552208f06c2d3d54a6b7c22cd81d1b16b25eff3cf852dd9dffee842e3176e91a27b94c842df7244e232f8cc6383720416cdd02c2df4a6c536f0c5f2c90507acd314ccfba93149a1981a2328dc6d08c740a237b565c960891010bda34bc2111ccf19e8132144de3a6de2c5473b0fb8ab55e889e5396d5e28661ef3a01f36c36a1c3c46f30c039f6adaa0d5d671895223702aa45d065ea6893f7d3ea25e08e4185a1ba0e94d3fb5aa3fd6d123bcfff83f2108158da15c4cdcc28c4f6291b62f825a1f85d06c287b11480f40483d68907add6db2548ec8a7e1a4432ecb34ca636e1eb5ffd1022779db8dc1b567981e22be2fcfb40cb0c81bba00ee8dc0b934939c5e78933439a4622662a91231faba18b7dc37513582dfc37f0eb398b4e009a9bfb52eeb5eeb9555c57f32e9711e61e8ac62b2055ba1e454329a41144c3a41abc61bc09eb7ce65d68f17ceecfb98c4730291bfa675b3c304bd6d3b39c324f062da4d6639df95fcd142769f8dec79440b3a0861eb275470c8e224a9f4f5605695ea9911a650713f4defa2c4519b83d09bd4a9be78322eacdcfd58031a05010d10f7a1eb8197a8cb4dfead30bf532e5619d37aea762200bbafb043387ccaf587a9faf05f7acbfe8e1e938ecc4d67d2f2b9105f86c8383fda7c415a8a39e35d03cacd2725847a29c2a74198d0cbc9dc35b0ebd9c9510829c8c1abe4c5559441b0a7b606945d9ef453988c7f18a29bd43c39b2a85d0f0737207fedf117edb539034e65f5f91640c897dbb8d58956355b9358c349a662411a11d93f27505136c16b8bff6ce385083942fd9260d59b7bea4a5aa170e2d6d094a6422379d14a942d8751fd7ae8ad0077f01b64afcffb5d132cd2ddd9c9e34de61fb6d0e901fec89952988274ff35f273e1058ee08885d5c313391426a1756a5ce7426648344f613daaad86e29327d553631d6d6725ed733501cbd036380ba01d75114769e47fe63745bc83cf8d9b768e18e9be7bacc5392683c34f4104168cabcd595b72e4eb4fec2f87e04c4fb3481d7ea7446ef6ddaf4acf82683bac50f3cf66d01a7487dcd7328ec542874055eb14a13fdce1683b6b3a1fa336342781d0fe885fe8fb800b8365ee45cd48c5691704ef92d0414b1deb6c1c0285914364538493bb4ad3394f843dec689a3398d2852a55057b48cd2426d71da17c236922dd0cd70278551c8d8d7c69367bd8e04f536017fe01f1af45833c51d232f2c552cca86b693452db1c1ccfb67e7b5aa0284f1ff7945a49c8981730f2c0ae0da6cadb00e2b83a9e8ec40df8848aceb7631507e74ba1ee954948c69893721", + "hash": "00000000001c9023a5266987592d05daf36331d702478bbdf13e0b7e63253403", + "height": 3428144, + "merkle_root": "a46273b982f7811711e9897b964fcedd9409f3d41ea8f280538730882b42b872", + "previousblockhash": "00000000001a8b54bbde4e8996373417a6b33ee2bd984bcf02882e5d8128d761", + "tx": [ + "fcef11562c98b6fcea162d13f2078a97cdbc51d285fd01af9a9f6b3662865728", + "abc1b76937c09f681fd1cd082804013a0a31fd72903422d4f4bedd4009ad48b0", + "f15bfc86171351c5841f4629c8cf52b8ca5d85684c6495456940f78443a3d574" + ] +} diff --git a/tests/lib/test_tx_zcash.py b/tests/lib/test_tx_zcash.py new file mode 100644 index 000000000..e7f7ff782 --- /dev/null +++ b/tests/lib/test_tx_zcash.py @@ -0,0 +1,165 @@ +# Copyright (c) 2026, the ElectrumX authors + +"""Regression vectors for post-Sapling Zcash transaction encodings.""" + +import json +from collections import defaultdict +from pathlib import Path + +import pytest + +from electrumx.lib.coins import Zcash +from electrumx.lib.hash import double_sha256, hash_to_hex_str, hex_str_to_hash +from electrumx.lib.tx import DeserializerZcash, TxZcash, ZcashDeserializeError +from electrumx.server.mempool import MemPool, MemPoolTx + + +FIXTURES = sorted((Path(__file__).parents[1] / 'transactions').glob('zcash_*.json')) +BLOCK_FIXTURES = [ + path for path in sorted((Path(__file__).parents[1] / 'blocks').glob('zcash_mainnet_*.json')) + if 'merkle_root' in json.loads(path.read_text()) +] + + +@pytest.mark.parametrize('fixture_path', FIXTURES, ids=lambda path: path.stem) +def test_zcash_v5_v6_transaction(fixture_path): + fixture = json.loads(fixture_path.read_text()) + raw_tx = bytes.fromhex(fixture['hex']) + + deserializer = DeserializerZcash(raw_tx) + tx = deserializer.read_tx() + + assert isinstance(tx, TxZcash) + assert deserializer.cursor == len(raw_tx) + assert hash_to_hex_str(tx.txid_rev) == fixture['txid'] + assert tx.wtxid_rev == tx.txid_rev + with pytest.raises(ValueError, match='serializing'): + tx.serialize() + assert tx.version == fixture['version'] + assert tx.version_group_id == fixture['version_group_id'] + assert tx.consensus_branch_id == fixture['consensus_branch_id'] + assert tx.locktime == fixture['locktime'] + assert tx.expiry_height == fixture['expiry_height'] + assert tx.fee_adjustment == fixture['fee_adjustment_zat'] + + assert len(tx.inputs) == len(fixture['inputs']) + for expected, actual in zip(fixture['inputs'], tx.inputs): + assert actual.sequence == expected['sequence'] + if expected['coinbase'] is not None: + assert actual.is_generation() + assert actual.script.hex() == expected['coinbase'] + else: + assert hash_to_hex_str(actual.prev_txid_rev) == expected['txid'] + assert actual.prev_idx == expected['vout'] + assert actual.script.hex() == expected['script'] + + assert [(output.value, output.pk_script.hex()) for output in tx.outputs] == [ + (output['value_zat'], output['pk_script']) for output in fixture['outputs'] + ] + _, size = DeserializerZcash(raw_tx).read_tx_and_vsize() + assert size == len(raw_tx) + + +def test_zcash_transaction_respects_start_offset(): + fixture = json.loads(FIXTURES[0].read_text()) + raw_tx = bytes.fromhex(fixture['hex']) + deserializer = DeserializerZcash(b'\x00' + raw_tx, start=1) + tx = deserializer.read_tx() + + assert hash_to_hex_str(tx.txid_rev) == fixture['txid'] + assert deserializer.cursor == len(raw_tx) + 1 + + +@pytest.mark.parametrize('fixture_path', BLOCK_FIXTURES, ids=lambda path: path.stem) +def test_zcash_block_consumption_and_merkle_root(fixture_path): + fixture = json.loads(fixture_path.read_text()) + raw_block = bytes.fromhex(fixture['block']) + header = Zcash.block_header(raw_block, fixture['height']) + deserializer = DeserializerZcash(raw_block, start=len(header)) + transactions = deserializer.read_tx_block() + + assert deserializer.cursor == len(raw_block) + if fixture['height'] == 3428144: + assert [tx.version for tx in transactions] == [6, 4, 6] + hashes = [tx.txid_rev for tx in transactions] + while len(hashes) > 1: + if len(hashes) & 1: + hashes.append(hashes[-1]) + hashes = [double_sha256(left + right) for left, right in zip(hashes[::2], hashes[1::2])] + assert hashes[0] == hex_str_to_hash(fixture['merkle_root']) + + +def test_zcash_v5_v6_rejects_truncated_data(): + fixture = json.loads(FIXTURES[-1].read_text()) + with pytest.raises(ZcashDeserializeError, match='truncated'): + DeserializerZcash(bytes.fromhex(fixture['hex'])[:-1]).read_tx() + + +def test_zcash_v5_v6_rejects_invalid_header_and_compact_size(): + fixture = json.loads(FIXTURES[0].read_text()) + raw_tx = bytes.fromhex(fixture['hex']) + + wrong_group = raw_tx[:4] + b'\x00' * 4 + raw_tx[8:] + with pytest.raises(ZcashDeserializeError, match='unknown Zcash transaction format'): + DeserializerZcash(wrong_group).read_tx() + + # The first CompactSize (the transparent input count) is at offset 20. + noncanonical = raw_tx[:20] + b'\xfd\x01\x00' + raw_tx[21:] + with pytest.raises(ZcashDeserializeError, match='non-canonical'): + DeserializerZcash(noncanonical).read_tx() + + +@pytest.mark.parametrize('name', ('zcash_mainnet_f9369e', 'zcash_mainnet_f15bfc')) +def test_zcash_effecting_and_authorizing_bytes_have_expected_txid_behavior(name): + fixture_path = next(path for path in FIXTURES if path.stem == name) + fixture = json.loads(fixture_path.read_text()) + raw_tx = bytes.fromhex(fixture['hex']) + + # The final binding signature is authorizing data, so it must not affect + # ZIP-244's transaction ID. + changed_signature = raw_tx[:-1] + bytes((raw_tx[-1] ^ 1,)) + changed_txid = DeserializerZcash(changed_signature).read_tx().txid_rev + assert hash_to_hex_str(changed_txid) == fixture['txid'] + + # lockTime is in the effecting header digest and must affect the txid. + changed_locktime = raw_tx[:12] + bytes((raw_tx[12] ^ 1,)) + raw_tx[13:] + changed_txid = DeserializerZcash(changed_locktime).read_tx().txid_rev + assert hash_to_hex_str(changed_txid) != fixture['txid'] + + +def test_zcash_fee_adjustment_is_included_in_mempool_fee(): + pool = object.__new__(MemPool) + pool.hashXs = defaultdict(set) + pool.txs = {} + pool.txo_to_spender = {} + prevout = (b'P' * 32, 0) + txid = b'T' * 32 + tx = MemPoolTx( + prevouts=(prevout,), in_pairs=None, out_pairs=((b'X' * 11, 60),), + fee=0, size=100, fee_adjustment=7, + ) + deferred, _ = pool._accept_transactions( + tx_map={txid: tx}, utxo_map={prevout: (b'X' * 11, 100)}, + touched_hashxs=set(), touched_outpoints=set(), topologically_sort=False, + ) + + assert deferred == {} + assert pool.txs[txid].fee == 47 + + +def test_zcash_negative_shielded_aware_fee_is_not_silently_clamped(): + pool = object.__new__(MemPool) + pool.hashXs = defaultdict(set) + pool.txs = {} + pool.txo_to_spender = {} + prevout = (b'P' * 32, 0) + tx = MemPoolTx( + prevouts=(prevout,), in_pairs=None, out_pairs=((b'X' * 11, 100),), + fee=0, size=100, fee_adjustment=-1, + ) + + with pytest.raises(ValueError, match='negative shielded-aware'): + pool._accept_transactions( + tx_map={b'T' * 32: tx}, utxo_map={prevout: (b'X' * 11, 100)}, + touched_hashxs=set(), touched_outpoints=set(), topologically_sort=False, + ) diff --git a/tests/test_transactions.py b/tests/test_transactions.py index b57904def..068663d64 100644 --- a/tests/test_transactions.py +++ b/tests/test_transactions.py @@ -24,6 +24,10 @@ for name in os.listdir(TRANSACTION_DIR): name_parts = name.split("_") + # Zcash needs dedicated checks for shielded bundles, coinbase inputs and + # integer zatoshi values. See tests/lib/test_tx_zcash.py. + if name_parts[0] == "zcash": + continue tx_list = transactions_bitcoin if name_parts[0] == "bitcoin" else transactions_alts try: coinFound = Coin.lookup_coin_class(name_parts[0], name_parts[1]) diff --git a/tests/transactions/zcash_mainnet_2d69a4.json b/tests/transactions/zcash_mainnet_2d69a4.json new file mode 100644 index 000000000..da9c59f25 --- /dev/null +++ b/tests/transactions/zcash_mainnet_2d69a4.json @@ -0,0 +1,38 @@ +{ + "consensus_branch_id": 3268858036, + "expiry_height": 1687104, + "fee_adjustment_zat": 0, + "hex": "050000800a27a726b4d0d6c20000000040be1900010000000000000000000000000000000000000000000000000000000000000000ffffffff050340be1900ffffffff0480b2e60e000000001976a914fb8a6a4c11cb216ce21f9f371dfc9271a469bd6d88ac38c94d010000000017a91469a9f95a98fe581b6eb52841ef4806dc4402eb908740787d010000000017a914931fec54c1fea86e574462cc32013f5400b8912987286bee000000000017a914d45cb1adffb5215a42720532a076f02c7c778c9087000000", + "inputs": [ + { + "coinbase": "0340be1900", + "script": "", + "sequence": 4294967295, + "txid": null, + "vout": null + } + ], + "locktime": 0, + "outputs": [ + { + "pk_script": "76a914fb8a6a4c11cb216ce21f9f371dfc9271a469bd6d88ac", + "value_zat": 250000000 + }, + { + "pk_script": "a91469a9f95a98fe581b6eb52841ef4806dc4402eb9087", + "value_zat": 21875000 + }, + { + "pk_script": "a914931fec54c1fea86e574462cc32013f5400b8912987", + "value_zat": 25000000 + }, + { + "pk_script": "a914d45cb1adffb5215a42720532a076f02c7c778c9087", + "value_zat": 15625000 + } + ], + "source": "Zebra getrawtransaction(txid, 1)", + "txid": "2d69a4ea575115bbae6a7bba324f2ba3f2caa16108e29909f19a6abd7989a002", + "version": 5, + "version_group_id": 648488714 +} diff --git a/tests/transactions/zcash_mainnet_381b65.json b/tests/transactions/zcash_mainnet_381b65.json new file mode 100644 index 000000000..ac129df3c --- /dev/null +++ b/tests/transactions/zcash_mainnet_381b65.json @@ -0,0 +1,13 @@ +{ + "consensus_branch_id": 3370586197, + "expiry_height": 2726440, + "fee_adjustment_zat": 10000, + "hex": "050000800a27a7265510e7c800000000289a29000000010fdb9e26177ab75591f2e199485538a743e5bead9c1c83a9b7a3213925c735cc3cc1ca5c7cda9d3a18775dae8223c86f12cc2aba8c8dcd58944f16f225208cee12647a51bfd768350154cacd51ede89f40f5b4b580b5fe46c38077586499ab4802ca344ac797aca4bc95eb0d5ffbd209e3bec8bf0ff0707feebe79a11a4c4bfc227b6e4e84a529861fefda1ac4139faa9f67f3139c077e2828c2a39489a949c56e22afc1cc86647fc7767ecc01efefe7bf0248d79b535e5d9a5212e6fdbebe98ec4e0d683b8f7bc98f1b4e9a60046a8c5eea02bd1464c8e4e3c0a1304ce1b57f5c4515ce27dc6bff44c04a67378f628b2c5f275eefd95d14c8ff388327a32fddf1cf14589aa5e5b5d080221eab64e6c1513699de498341e9ce110350c0e0378d1006dedee40705418a5b9e9300c0adff108e820b7ce1c3f1ba7171eab2d3165a04cc0a4e9b80cc75808143f4a1860a8c532acca037ca2f4802e99a0bcc55a50e20fef079f881ed5ef4dfa88d9d9bd1eae1376b7f9d6bca96268c38af54784c4634134b67699013cc26681d3b5de4affd98e2cccd8bbb5461022ab41ec91250f1c69fcd28d98cb416749ce8ae376a2670c0f59d71b2263c820d5540700fd83886b1e56a72583ce5ffd5025557fbf9e967cbfa5037684cedebd83de113d6dc02dcb15a9d018f84a8dd71768d6b8e1ddfa2f9d9fcc2b923f65c508970373569e9bc38e2c78d7f17ed3514fae85545cb14195a543abc8010f216dfde9707109b9c2e666382dd6543b14477d98da32aadd85850212433f3c469c814ffc5bfc5c7868b436131fc341d86b2af1750bf4c9e5b7b48ab03adc7afe6298a2f6108555d3e08bca4fa1d2d1358b9dce1b886bb39fe58f39d60dc29af455ad3f13f8ff3a453b5e268b36775c726063c7cc4e3950fe1b65a23ff775fa4cbeed0dc34b983c25adb19ba2f32fe9009c4f16872c2dd67dc7f9b4f41d759c020ef4a0c86c678444e246c3fdc4a451b2c2b2c8ec530dc420f41a12e8660370abaa0323e7b6ae5fa46ec364486e9c8c56dc6c66f8be6cd0437f854402c602a130095f53347d8fd7f5bef364c2a3ce01dd215dce256a4a3faf6520381cb39df81de0c0e89f332daaa40f8c464fd09d1e7a0cc7aa24a844da6f436d23702836ae792f4baa9a0361e6217d43b2dc5a313ad2595a20dfa302dfb796ace58f7c96301999e8b3b2c511ba6a83239489237edfeb1bd915dcef5eb263f3ef917ff768cb95fefdd0c00f7f06d5a86d70769a3f9c3c35051d9e321eb937dcea50e39e93f00d34246805e745f1c029cabe1505237b927761b7959a46e389b26fb7d862a265fe9fdbfdf5085705f4dc12a058fd1d8c94be064e35d4c944c8aed6a5bb52e996cf68ecf7966c83370490d2d1d4c85f567437081a9c3396f1505e6e41feb6e6e51139ee7786fb34a49eb060c87f8b5250cd7394ff233aed132b280f8d7985530969279cca490f33ef384e810fd70faffa1cd984cafb06cba49f49b9e5915b80b3845748a5dee8032110556efe453937875d6d2e10ea06000c7a5228bfb57328589dde278f3d4133838e5b8175d5ef74982531790c8f30c3a32f5844b4d8fb261b3217160a463f001202b531e963b1383b0317c8f954e89ee0b7c2c6a8b03583ffa7d1171fd6c48f24f42f3990a1ec7c092fb76af89ce2627fadce77077d08eb497cd3c191d246df9c8d2bf20f345d5be61838c46f5dc5a9387eb6a6e3831aca76623b3249b5ac673bc3c7b8b3de5a6a74c4accbf576e31b4422d14bdbf9a6e1a0f332a2185a8ffa9badc036af594259e6f372dd56650aec096cfb67068a9a3c7f40f9435f97fbefb0a22bfc0dfbe809d77b38c6562b43a8e7065d9da963448459528a002be823de9d395b62e51915af3b1b97b1455b44598154124b444328210733f8a11d53cd65d42f8b00a8fefccd1923cd468fb1d9e3e9ebe1f3c1780f0207e2850b2fb485a43651f5fe5760b507f99acbcff950460e6e200e09e955424aa784ab65276eb82a622bceff2255da8c4753a30d14cc77aa8854f59379b6b65e79e19895105beb576991825e7acccbef5e2fcd15eb3d523b8cdb17e73a828a7b5952b327b855abdbca3fe5802fcd08bd898762f670abab4692933a07437ffab9d0fea598b1cc034c7802e7a65f42cf75b8b3e3c1a4422f16c43c4859c7684c5650287ea0a449ace5dc49c78e39b297b8d86f4442d6786331224649f4e41072c93c6dbf8f64b681ab282b758db72ae3b1be31f8cfa1027000000000000b6ad189a6ebe04915a0edf309a6d3061677ba4de672953d1cb401dac8b85ff24af9afe77caae36ccb63178bc60f40c938a1d4b16a42a33fb98306950bbb46cbed0393d039524b7b2e272d0ed42a051d783ab9bdc8a892a9805773525ee702d4a07a334c2bfa4383f0dd4c01bcf6de6eaeae43b11789ec7982f4f16aa82ef0e04165436b459cd19b0ed714bf08621121e1e1c6e95a11189ffb7a7232638091ae48ebe3a0fe7d745a4bf096aea1240bb37a718401790b757c03301ad47830ab28f8a2e1ab7bc660080f3dad0946e4065770f771a4bd3d844a5ac54c32360de8850517b377ee8f9cb0238a0002d273d93dc5e68e384353fdaf2ae3288787dac1cf1e81e80d2b2bb04af300879eadb927e69c4fd5b7077a20370aa738fbff3b75a03a8b2d0e95616e14f93cda383e971e5802c97528d90c94facff9ed13e12933c45d21f704025ab8217495279ac59e1f89f8bbe7c4d0cb2955dce23f085dfb18f07db8142483643cf4fe5055741577687e87a086c1e6225359d89ff8db679f8cac6043118721d1f889bd488c0f4a1a6483c29cb9afe342067d7805b44cc1509e88af25ae5abede8c8cc53663d08cbf5e1e48df375ceb465e18dc00e013a9deaed0609e913edc44358272897ccf2657a0c27e248b59f6efc9d18fd81f3549f6e4d71b30042085abaf7c1b719b8587a878ffe7f251439f05c201add37b93716b751377f0982c398ffaf3fdb03c8dae5628f36b2ee552e0ce8c44351902f0e9c7ad66439c5b69e7b242a6654d53613e355f14b0237e99f9e8da68912c0257ad9f035a00ed2f850b4a6ed53afa08ca6825b73001906a5b0aa373eda010ff233f5740d78b9dedaab6ce0f71598e682d47ccbfb9d8d4c62d95d4b71412ba5cb74e9e8bda93a48a763fdfbb7f235da7d0ed653c59425d818a6b778bbe765e57f985da92bf96964b8b43b4e0acbb20523bf20921cfbf24a3c1153d2df09724c56e3c8d506410aae044116ea7fa748c2c2ca46ce5693f1bb6be5efdf4c7088081fb25a714d0600", + "inputs": [], + "locktime": 0, + "outputs": [], + "source": "Zebra getrawtransaction(txid, 1)", + "txid": "381b65eb3fa04c1c78e73d4488b7e0b02f0469e5bd8e222f84c7896410e966dd", + "version": 5, + "version_group_id": 648488714 +} diff --git a/tests/transactions/zcash_mainnet_525f44.json b/tests/transactions/zcash_mainnet_525f44.json new file mode 100644 index 000000000..705526592 --- /dev/null +++ b/tests/transactions/zcash_mainnet_525f44.json @@ -0,0 +1,70 @@ +{ + "consensus_branch_id": 1307332080, + "expiry_height": 3146400, + "fee_adjustment_zat": 0, + "hex": "050000800a27a726f04dec4d00000000a0023000010000000000000000000000000000000000000000000000000000000000000000ffffffff0503a0023000ffffffff0c40597307000000001976a914ba92ff06081d5ff6542af8d3b2d209d29ba6337c88ac20bcbe000000000017a914c20cd5bdf7964ca61764db66bc2531b1792a084d870063a85ab700000017a914df3f053f9c73f96eb8502563f0566817e5c0b680870063a85ab700000017a914df3f053f9c73f96eb8502563f0566817e5c0b680870063a85ab700000017a914df3f053f9c73f96eb8502563f0566817e5c0b680870063a85ab700000017a914df3f053f9c73f96eb8502563f0566817e5c0b680870063a85ab700000017a914df3f053f9c73f96eb8502563f0566817e5c0b680870063a85ab700000017a914df3f053f9c73f96eb8502563f0566817e5c0b680870063a85ab700000017a914df3f053f9c73f96eb8502563f0566817e5c0b680870063a85ab700000017a914df3f053f9c73f96eb8502563f0566817e5c0b680870063a85ab700000017a914df3f053f9c73f96eb8502563f0566817e5c0b680870063a85ab700000017a914df3f053f9c73f96eb8502563f0566817e5c0b68087000000", + "inputs": [ + { + "coinbase": "03a0023000", + "script": "", + "sequence": 4294967295, + "txid": null, + "vout": null + } + ], + "locktime": 0, + "outputs": [ + { + "pk_script": "76a914ba92ff06081d5ff6542af8d3b2d209d29ba6337c88ac", + "value_zat": 125000000 + }, + { + "pk_script": "a914c20cd5bdf7964ca61764db66bc2531b1792a084d87", + "value_zat": 12500000 + }, + { + "pk_script": "a914df3f053f9c73f96eb8502563f0566817e5c0b68087", + "value_zat": 787500000000 + }, + { + "pk_script": "a914df3f053f9c73f96eb8502563f0566817e5c0b68087", + "value_zat": 787500000000 + }, + { + "pk_script": "a914df3f053f9c73f96eb8502563f0566817e5c0b68087", + "value_zat": 787500000000 + }, + { + "pk_script": "a914df3f053f9c73f96eb8502563f0566817e5c0b68087", + "value_zat": 787500000000 + }, + { + "pk_script": "a914df3f053f9c73f96eb8502563f0566817e5c0b68087", + "value_zat": 787500000000 + }, + { + "pk_script": "a914df3f053f9c73f96eb8502563f0566817e5c0b68087", + "value_zat": 787500000000 + }, + { + "pk_script": "a914df3f053f9c73f96eb8502563f0566817e5c0b68087", + "value_zat": 787500000000 + }, + { + "pk_script": "a914df3f053f9c73f96eb8502563f0566817e5c0b68087", + "value_zat": 787500000000 + }, + { + "pk_script": "a914df3f053f9c73f96eb8502563f0566817e5c0b68087", + "value_zat": 787500000000 + }, + { + "pk_script": "a914df3f053f9c73f96eb8502563f0566817e5c0b68087", + "value_zat": 787500000000 + } + ], + "source": "Zebra getrawtransaction(txid, 1)", + "txid": "525f440283b4c9ec30fa04a5796f3ddfa4ba1e1e48657a8d6f32313f36cf1381", + "version": 5, + "version_group_id": 648488714 +} diff --git a/tests/transactions/zcash_mainnet_57d7d9.json b/tests/transactions/zcash_mainnet_57d7d9.json new file mode 100644 index 000000000..b2eed0584 --- /dev/null +++ b/tests/transactions/zcash_mainnet_57d7d9.json @@ -0,0 +1,18 @@ +{ + "consensus_branch_id": 933566043, + "expiry_height": 3428194, + "fee_adjustment_zat": 250121076, + "hex": "0600008098b684d85b16a53700000000624f34000001dc50e80e0000000017a9146cad43ee34eff0c56aaf0b6ee719d3719d071caa87018895e356d4cd95a47aad7dcd35bea2e7f4a442a18fc47d73cff52b0768dce6b027d5a33ed6a49018296fe55b31773fed31c5a3b238ff0203d86c1f8a5462b2cde4de8c85da6883e4ebb51c95b71807796ac3685cfc0fc4d34e5178a2c66066cf02536129cf8dd3514429e4b3de05aeebcee91650d173005c696d12c7cbb248ae5d36c59fada3b521a2b48a9e62acbb85b30d1e740e4b33d80547de66f73cc2511a8a5f37ab85d0e4de6715050e790cd607faa58449eba261d756ac83bab92694dbef70dd7a6748110f4b4b895a2fdca0f3bb8d4f69582b40d76b0b66211285e1b81aa50d9ec21ee415e5b7d14cf1fc255132579c2930611822cc44f066109ae2792bf0d32112d6ef6bcf4dbf53131356c1028ab3ebec35977b5ba7b5322386bfa62a3beac9ff7751fde09589b80d6f1bcd4dda86301917e8b9164c9e87749354af59c8fd49b28864b344ff6f8123fdcaacbead3fb8898202f3e5edd95e7cee0719770f139181cecec2dea6664179dba1033a3a430cf8ce8b7c7756442fa0c1b314679e353dfcb7f0aaa507f90c50eef04f2c302caba3ad37b103d82d0ba80add3d327cff38ab2bc447d7cc7441ca509ecba0d4d2d6a9a02bab84b2915deca0c0e0205b9ff305ee2e16212493c719896e066dcab92a3baa69c4302c5db21755b63b8d73361609b2752cbc50c7fbdb26bba16ca913bdecf3197f49e2e386b0a7fcf994f314e5d76b794ed794a27e980b7c62ad3e1236f4ff8d87e43b7eef661b0212f25592658cd117619262208aae6d92c8bd331bda0c389e0254c2ab909287461c96fc182839554e5bf273d073ba9b7640adb10eb2c70712569b71758956f93463bf0f5a2b7a179c1fe6ba93fa0065e31495bb932ce558f79ae6301b8472a02841e9252722d2ef291fbf2828a1d9623faf4c316ebfac5e0604c331e2c6de0eb06252a5fe0c78c045d7ba7c8289db44f7f59cc882eab5485c71662f38a2f0eb93ee01306cffcfed906b001dfb0cd08decf8e6408d5945be522d6546097d8a5a0bb90f423dc00b127d9049eb419be19d04d2c1e0185957bcfcc115276a0b61739bd790997f076bfda2f6f7dac3c370b5549d0b7175b3aad9bac15af0f79010b45f56baeb5f332c0fe9f16256018b9c56f539a6f1e503bc63a0cf69e352292fa61fb60fe8d7afb1c0a09cbc9711b1a3a6f156abe36077808ff833e533537ed83a0f466ff639b48138ce70c02356b8029fd262ec25f657b13bd3984f811adc68e6da170093bec9c0b46ad466d64990d6d0039b224f3916a31b0af348b87a9ff6c03f21eaf9466798946e68901d5a2e1803ec4396d833517f7f22b96808af4458db91fe1ab70125195f7fa3fcdd27c8649debecf2b6b1305616851cfb084b30f2f0a474ba5e13709ce9da9a0766d401c4ad1cad863bc9990edf5555eb3b7c4c0fdd1deb534245aa1cdbd0456d63bd50e3a44c80a4979d0e3e0e841815b7392084f8af424610520a5358c92288d4f35dc274242df2af69fed13fd973bfbe434cb437d2fe9a508080064ed8ed3374bb8de5e3c4d186bf1f1c34179b0d8da0b28e494267f10589e55a523d99aee9fbf795ef47ed95b47f49e14b2ce986da59771f3a5a72370cfa58e52dbe88c192527b55d8ed6fddfbca536fb243ec7fc7831fabaa6643396b1d2c68fbc5f04be8f94ff0e88c203af0b23ad93c7f5bd56e2b85b30269a92e6ee448992d25aff44d4422d5e8de49f1c91c281221b9eefe34fcd4ff374a175fd35d2cc2c516e0e0a9d28461483d25458a6c215f0b4281659d86669a92a515825443d9b09cddb6da98dffbc67add5cf7baa6ba75005857e7971f1c8c4a7e5895fae8176be4b77a586a99f1de65d5e8cabcfc67d3cdeac7a3be5e5b963cc1e04717e10cf1ea3f13f2ca2aa19952e91690f7bb392e998c36262b2595b3d251276fdd8b6f0e74d362a26e1efbbc69c9d2a76cba4537100bdea42fc4153543661a66fb289a838ad725d977085d9d292ce147ff3cd02cc9f5c846858903efd60f13115695b75207492504493d692159de8a38cbe5b2d8be6c8ddd07a6d3d13fcd7bf1c183a850c652fc269ea61ae7e559123213191ff5912549d8e79b497a79b7a8d6a8d3eec9146e6895d1f457ca20cffc6e36bca56e58f6e0202ce4fe02e348601047c12ac91144821ffb3e9e2f92ec7287ce93a2ec23de932fd79d1494934788ca5b75818f553e99427f90ee4a42c53019c47184846cb46476609262bf1c1faef9f1fd32603e1ff196748be80e00000000d58232e95b3cb4affbe06c2e1b81055d5e34fada7dcdae0015f4379a7acdd455a7896e185b5a808db6b7387630d5a8a3a34215ec0ffec7b78aa7b4635b51208bd888c857ff5014cf65335dfe4961740fac2e340ac78f1986d9f211abf2ec35a51d3ac9a7fffdd82392d9623a443f60709e6dec869badd475d4368de421aa128706dee44e5844b8730ddeabd10f033b88f2f834666d8598c4ec6c17ac7b921e88dab9d11d746cd5cc3bb93afd1e195268a31f7843c7a3c6fd62ca3502cb3959cc4337932446a3f146aa37d86fc81d8d771430c78e2c8f88eee12f11c288529d66f77a46f664998755b3bbb75f0368fd62a61183245d80c5143065647ddc7eef28635877e4ecb1a271bc4431707be4e7ef56d8e8bbd80686d064a57cd28f940007b0de17d21232d71d5c2e9b2f0741ee8f66e01c276bc7c23bd2ed38c22a64ec3cd427b8e3b7b92347f2b1228abddab5fa83d0dcd9f4ab87cf85bc878d01afa05b6d9d81b2645c6d3a5f8dbdac1e32652ae00e8723f1790181a6e97b368ae02b1d1984e42a5649591f58f23912648d420e482f22ba20748d5542349058c76185645c52fbcc83cf959617a4693e0e62f28d9483faa9c1ec125773bbc24f40b2d68d2608e84674dbd8b2978d59aa64a0fb6bb14731efddc5ea0d4a755272fb2f0133a5ff50f4373bbe917c2c5122686051a42665b11909334c29a57816789d5f11b7edfb118580a1b32460199a4f76da00ceb791ad093cd1db6b0c74f0b83b762ef55faff25f9b8558e47e3bdc4a051bef0a9ece71a8c198d909c493a2b474e21ecc19e08a785149f17718aa1a1782e329de1a572db506a8453e4d6e93c28c22d5510cec9a2b1deb62c24bcc5215e807863284f3f7c251ce71b82a340c2056d15132f5c0f692c7043f1dad697d0d5b05fcffe503de89d091b13654aa0086be2e2f0071aea92f0edacdca4683731901fbfcd35ac934b174d0ad5890a97b6dca2cb6de319ca85f41bc75000955d0cea33b1d9bc968b42c55c5f285dd2bd7e40afa290a0000", + "inputs": [], + "locktime": 0, + "outputs": [ + { + "pk_script": "a9146cad43ee34eff0c56aaf0b6ee719d3719d071caa87", + "value_zat": 250106076 + } + ], + "source": "Zebra getrawtransaction(txid, 1)", + "txid": "57d7d945f70c88853f800519dd3d2b8a2fd8cff990aa02e16e8f81472e34fe3d", + "version": 6, + "version_group_id": 3632576152 +} diff --git a/tests/transactions/zcash_mainnet_5d9654.json b/tests/transactions/zcash_mainnet_5d9654.json new file mode 100644 index 000000000..3334b662e --- /dev/null +++ b/tests/transactions/zcash_mainnet_5d9654.json @@ -0,0 +1,30 @@ +{ + "consensus_branch_id": 933566043, + "expiry_height": 0, + "fee_adjustment_zat": 0, + "hex": "050000800a27a7265b16a537000000000000000001b79eda08eabfa47a79bb87bba080378dc6f48a7ac6d99f8b9dbbf13402a15c59010000006b483045022100ecfce5814c2fbbfa534bd28248c474ff4860eb652c23a0f8c50d7f80cf9efd2d02200d88fa4ce3c05deb6cf9c0ad8c1331f012bafc6c8a4210af5c24288a22f878ed012102d81fb14029a65380ef2c00e74425c7a47311608ef1117c8d81e2ec8df1225b75ffffffff0280778e06000000001976a9140233071d783bc2d75549ac4130115c580800c46d88ac78f1fa27000000001976a914063117a36d20247c1741fbd66dddd298009a80d988ac000000", + "inputs": [ + { + "coinbase": null, + "script": "483045022100ecfce5814c2fbbfa534bd28248c474ff4860eb652c23a0f8c50d7f80cf9efd2d02200d88fa4ce3c05deb6cf9c0ad8c1331f012bafc6c8a4210af5c24288a22f878ed012102d81fb14029a65380ef2c00e74425c7a47311608ef1117c8d81e2ec8df1225b75", + "sequence": 4294967295, + "txid": "595ca10234f1bb9d8b9fd9c67a8af4c68d3780a0bb87bb797aa4bfea08da9eb7", + "vout": 1 + } + ], + "locktime": 0, + "outputs": [ + { + "pk_script": "76a9140233071d783bc2d75549ac4130115c580800c46d88ac", + "value_zat": 110000000 + }, + { + "pk_script": "76a914063117a36d20247c1741fbd66dddd298009a80d988ac", + "value_zat": 670757240 + } + ], + "source": "Zebra getrawtransaction(txid, 1)", + "txid": "5d9654bea2a061ab8a9f16cd20a4f4cc9b3c676d72e950053e4dfa860210571c", + "version": 5, + "version_group_id": 648488714 +} diff --git a/tests/transactions/zcash_mainnet_99966b.json b/tests/transactions/zcash_mainnet_99966b.json new file mode 100644 index 000000000..392b23986 --- /dev/null +++ b/tests/transactions/zcash_mainnet_99966b.json @@ -0,0 +1,30 @@ +{ + "consensus_branch_id": 933566043, + "expiry_height": 3428143, + "fee_adjustment_zat": 0, + "hex": "0600008098b684d85b16a537000000002f4f3400010000000000000000000000000000000000000000000000000000000000000000ffffffff09032f4f3404f09fa693ffffffff0240597307000000001976a91425db9091e9786867e536f70089a5102523ab1d6a88ac20bcbe000000000017a914c20cd5bdf7964ca61764db66bc2531b1792a084d8700000000", + "inputs": [ + { + "coinbase": "032f4f3404f09fa693", + "script": "", + "sequence": 4294967295, + "txid": null, + "vout": null + } + ], + "locktime": 0, + "outputs": [ + { + "pk_script": "76a91425db9091e9786867e536f70089a5102523ab1d6a88ac", + "value_zat": 125000000 + }, + { + "pk_script": "a914c20cd5bdf7964ca61764db66bc2531b1792a084d87", + "value_zat": 12500000 + } + ], + "source": "Zebra getrawtransaction(txid, 1)", + "txid": "99966bc3306f6c96ffc52293c87b165571b29c28652e639f661c8d9c1df35790", + "version": 6, + "version_group_id": 3632576152 +} diff --git a/tests/transactions/zcash_mainnet_b5e074.json b/tests/transactions/zcash_mainnet_b5e074.json new file mode 100644 index 000000000..6f77957da --- /dev/null +++ b/tests/transactions/zcash_mainnet_b5e074.json @@ -0,0 +1,28 @@ +{ + "consensus_branch_id": 3268858036, + "expiry_height": 1687147, + "fee_adjustment_zat": -501839159, + "hex": "050000800a27a726b4d0d6c2000000006bbe1900020404679c0535c84751871d4eea5ab2aa4fcd403b64e1907f2fd4214887f98d17000000006a473044022050bbe141dd051afbe16eb6ae78ced380edb29df5d29a0f3f225d90aa33ee78d802207993449211f006bb85c7cea7a567a85f4f050931dcdd2888fd6383d8012b9408012103dc5bdbb3321d6f1db1d4683b259e66df141a4c76ce3af96492ea1e44331d3132fffffffff298ec8d59fb36109a9d25d3d3b80e97e07e66774b94b275cc1ef27a728ea4ea000000006a47304402205c09f935703b1a216875aef97696095ca8b1ddbd614e1dec9c8458f2f3d7d52402207df1dd8890985b394f250542858a53a5f8e3d922ce903e7789351a4be49fdc39012103dc5bdbb3321d6f1db1d4683b259e66df141a4c76ce3af96492ea1e44331d3132ffffffff00000145296811f8949a77ef5d5dbd5be53bccd0daadbcaa761019760f725d0b39f3698ecaecb21b6656babd50626ea16a897e9197d4702f3c9f297367729c3f269668e14c10af3d214c0ee42043688ab5d6ab0581b1a505f8ea68ac00348135feb596b6b06476ffeb0b9e162aef1801c80b47c59d1e1fd1a8b6744c4695745604da7473c6d525409ad7f285be06b54ee87a993c357331f29f7fd6c45a0035fbb8966e6a85a0c122c48b6523c812bdabcc2b89876ea19efa61de5a6840c0e629e8af5a06e8c8309677edc9f94af01933234a4393960587e1764840e07fbe64214e88b593f86248ba1c9812814cf2343ce4d0b1215d0c63ed523ded939f2dbccfcaa5030ebe931e8a5789069560f3a987489deb13d7da657f216375abd360fbdb5fa8543f269f89df5649a0c609ec847e7f8a3e369f936b06f72716cb4fd5d62e2921b81adcb7a7621a3210f18c1b577b11f8be9141d942e0d9775c92c10198652b94c9772cb961aec29cc49d02cc9e5aad24a5d66ea65adaed96dfa99135481e4c47db8e1b8cea574c163325447e24341cec69e187c910d76f6655e5f2a86930af9de249df619bd825b85ad2c80b80d62f2aa1bd3dc335379cfe714dd0f9d3c68f8af76303588a56619fbbfa5299089bbf2b93021ee646a8a2aa35f01ddf02827dd44b4fdd79660d38d6b8a3ee8d768434e4de17914e4a2b7c7c5d46e1509f3fed26b9c24e2c5c28012425bb3191ad81ace5a2d4a5990ffb435a8764c5e4409e8dea71299bc6ccb03e003323f5357a125ec9dedbb5f928414296b9642ceda17004211079cfce4cc2e2cbfaf0f39b1581d7985133a3588d87a82dfb50385ae9e5f1ac143066742c4fbc8c9f1f2ea23aa02b0ba40ed427eb544e8bd91cf632823e811bf31d37f380f0c7bdcbf88fa537bb90f582ef4d2652609c2c66667eea4bb41cd8682377580829d6e5beeb9099a1eb35e7560deea70181446a3ecbd8c9fbcc80079c3ed58cf9735170dad3861b1005fe3f14423bdf017eb6ccfe90ad5e3fc3c9335d393aa2decb0de5340c4465de83193fa3bb45a68dc98a16e2ffffffffad7943b7ee97a25bfdce859829f16a6f306ce1e62024bb3b9264147e09d92822c716dc5bc849c7992abd560743707508ae52e319b43e87fc87f55eddf48fdf04e0c9acacd0a0364514faa9b27da84656328a84b73ee89fb8a49bb39e4d0dc8c31037c9ea167955e908a8d0cb9b4e4fde6ef8a506c64a9bd89363d713f6ea79cbf9b4ea860150b116e1292a8081dad9f6878f122fccd746def6616f31eea10d27f14cd553aba961f0d0349a4d77b355a80912643be83c9b7e50a3a72f1039105cd0d2fdf482930bb175fb6b8aefde0d0599d0905b151e9fc35ab0949ddb19dfc0b9e037a835da6dda437f2cd8bed33396a9c69c2dd430f52c7e069dad9aef120d00", + "inputs": [ + { + "coinbase": null, + "script": "473044022050bbe141dd051afbe16eb6ae78ced380edb29df5d29a0f3f225d90aa33ee78d802207993449211f006bb85c7cea7a567a85f4f050931dcdd2888fd6383d8012b9408012103dc5bdbb3321d6f1db1d4683b259e66df141a4c76ce3af96492ea1e44331d3132", + "sequence": 4294967295, + "txid": "178df9874821d42f7f90e1643b40cd4faab25aea4e1d875147c835059c670404", + "vout": 0 + }, + { + "coinbase": null, + "script": "47304402205c09f935703b1a216875aef97696095ca8b1ddbd614e1dec9c8458f2f3d7d52402207df1dd8890985b394f250542858a53a5f8e3d922ce903e7789351a4be49fdc39012103dc5bdbb3321d6f1db1d4683b259e66df141a4c76ce3af96492ea1e44331d3132", + "sequence": 4294967295, + "txid": "eaa48e727af21ecc75b2944b77667ee0970eb8d3d3259d9a1036fb598dec98f2", + "vout": 0 + } + ], + "locktime": 0, + "outputs": [], + "source": "Zebra getrawtransaction(txid, 1)", + "txid": "b5e074309f3f01861311398b4dbdf5723a221e8893659142fb38036455e2dcf8", + "version": 5, + "version_group_id": 648488714 +} diff --git a/tests/transactions/zcash_mainnet_f15bfc.json b/tests/transactions/zcash_mainnet_f15bfc.json new file mode 100644 index 000000000..6a14d68c1 --- /dev/null +++ b/tests/transactions/zcash_mainnet_f15bfc.json @@ -0,0 +1,13 @@ +{ + "consensus_branch_id": 933566043, + "expiry_height": 3428183, + "fee_adjustment_zat": 20000, + "hex": "0600008098b684d85b16a53700000000574f34000000000002ed27184d4e8d424ba449ac0f5f4d3ccc3d31fd756242ba1f136960006d6bd03e645aebd9818851c57ddb89f263b00f4cc4acd7386aa77d1b1f05916f234a0c0ca14401f25a4c2eee8e32d501d3935be9b5afda694bdb22d8c007408c9ca63225b70b8faaecc00766822b6ea814b14b5a8088c5b6f8e02caffbc0bc9292889417145888b1494271f1e2889e8cfd90c89cd35d7c6629d3c8bb8d82f51dfe21b2142ab738737c410fe38a37a0f0832d8958ea15ef774e5ecfdda857c881ad1aca0fd38c006bd412615268d48d3afef06e740060e1cb17606d2573f78d680e9f8768e1424bcd5584df8613a8b9d6ab90706e3c437d91a8f9d35c60419423088592b81bf02e31dd85e64d2649853abb16e4d130ed944025c8e0f70a8daf3e3f9eb5343cce1f87140c66386b22b26e3c57aa74aa4b4c499529522dacad09f16a7acc4027715376bfdff36d7924065433e3d2a0d62009655fdf15b295a200e072a0ca3801692c525676a206d3b01c3bdfb031036eeb975cdc79c8d96405457dd853354bff898bcd57139662d9a714963095588c44b9ca118eac64f199e0f6230b439d8a9d71e0c139a2389522ee24f525f4024d16878685e74dc32c04afb4fbbdc6b777fa616f3bf0e87a567904437705099b8893d1e14e0747a81982ebf03bf8d29b8bcb6ac1bf936091ac447e673d9f47dbed85fb8fc4b27c305a65147e6da5eaa5c357c76de2a85b89787c5bb46331f0f6f713a2b7b8a0c1739a79a6b725137d498081c3d64b357d85a2f3027b0c6fa7956eb8382f89d112665f139b443c1bc8c28d4cf333a5f307858c697b3e447d45724748fac590a7b9fdd6aeffb6ad7cfd065f8d715cb46ce31cc21f1d2c921f952e5f5f52506448543f9c5a76c826e17039a486c1b5dd17a1d4fe3f7189ca7f503da0591856f8ebf6652a2d3fca354efd204c9c7c2358b5829fd861f53f2e9444bae1b94f77cd3998c4b391272374c4b0be459a2f7b530cb9d93c96be38a7badce1c02ea8b16dc521045284555ca70a9d1552d02362517fe5e2c2129cb4960068321de6faf29a2cf8751dd9112fc7575bde9d3b525a8f0751acdda40da2d71b97e404236b9425f4a63015e2c1df584a4590c96d62c0e4886b8a1177662f8c275eca4a69bd463bcb968b3c878ff863e17d95a951a15874ddcab513b80192b7ea6379177fa113b0450d6c3afc9b2e8b254897fca9f00a207596c94a93cb4d09bf93362dbc707f15ec22be785b97f618712149a52515035cb272131b06949f54ae94f1876021a721b0dfcec316beb70bbc9df35abc2ceeba236bb3986915187622facace78bcfd3517d38adf3250c204d78c5547358796ed8f47c6377de8cfbad2e123bc177f3a8d89ac936e2f51ff09babd0a2eb731df7fd41c48467ea4fc445706ca2b788aa90302d9003584157023d3b313443780e0b9d97bff5a9ee2dca7ed83ad1a33a8dcc3a21f88e740234ed2849c27e95dbd3e4962737f4c8e52224c079e03d5c485aec61a21ab86b1eeaf4746ca4041ca5a2292c8e147c0683deb42b97c14f843e1b230ce793fd796f42640bbd1b3692df1282ca0737d062c257aa7e082c79d45a3cf8636a08a47b59f6445e3b6db81c002c975e8d4d40526dca8326e80cac00ccd255e92bed17ac1c10698ee3f7c3b9a8ce88a25bf14406804c347d274a0862118787b622fd853c0b9f51d5c51eda4127524c74467edbc387c66f7e88dcb2a906b7073ffda3ef456fba75c4882c9ac3265cd4605effd2bffa3bfe194a6bb50e974c0c6edb06af083ef7b04a4daf9078b0a260ed97696527c4746922789731c9cf140b369d1da3c1279da11c10dfb88fe18de319215f324e40a8e3000e624dbdd562032b2a6d9f75f6d8fc2c05c8f2fde9d1556037fedcf66229bd1a39af80c880a5c919e27c183d68be2e38363d70f44a8bd419ef779e9258d14409fb1e455565b83917a92c008591a5c85215414ff66fff63341cdfc6f575b8ca40308e93375b2b109931b342c1917aeec5033e9f87640dd19bf3cea51ba36ab0fc5a511597d3df17ac29abae25c634d84c5f4b8419be6c4c8133ef08e34c124747ac1ab9df770bd7ffaa4b73af2180502f73ce232638217063692798ea3f535c228642938d6f8f279cd3256d9bf69e5d2ee65fa63ff5aa03cc2ef9daa3784270e923fd0d99469f94cf2a966fbda791705b47578970788f791b80383f5a80ee4dc578164b5020ebea6f89d55b56e27b78a871d040920be129e41f4d62d2333c3d9a4680d16580c7843c4efdfec9946e6462da32e28a9456dd7178103d60360900f000000000032ef86c9ddd4d9b749190bbd151664524ea253fe1b8c08bdbdf28767200db904fd601cf811bef55e4e2ea0c9991478094aef223f716e426a843df5ab38be8d2301d102b817279259c827c19882f544e498d4b60cad9d71332599c58fe3fcf17ebb920f9fe9cd1c475d45dec4dc5b374fa85e535ea48ea16a2442187b8dc1f27630d600af0f239c85fb4448579c232b3173bcde779eb4fe6626f858782acec9aa8baba3ae1e787c866d56a192b4f46980e9ebb5d551aa8b70ab4210528883b5ddd4ae8b1c0ada714e239166937e8edc7017015860e95be62c4c1cd354846ed844692406567ec698920ba9367dee28f6489abdd591ec3fa36ba5f3851e5dde21464eb78dc3d22f285546775641949b7d37c667aad009b80c2e6ccceb8479a5339ca6a1806af485d3127d561b330fdfd77c48c3a4d37207043bed538be504b4f1a72321b22acf2aabba7202946154b4d4b0478827fb4fc0f60a515cbb54a562fdeaef3038b3b4b342b3fe3eb578150ac780924e28f984856e48646e8d481380a50d1abd19dddfa22fe87f8509320926f7d0d6bb50d4d30b54cba9e1eb4d970ae2df71cb172c4e933663776021e36990a5932aaab89d099c1c9fe12123fd26e38fa61e6f037d5d442baf47e8a9fe8b68ca6041c0d543b5aa483324006212422cffbb0239b45a2d71f43ee09e1883939b2c9ecec22a5d1d92f6f6ea381793d530b74ae32329af027d4153c50900ce11c8270f420a5de4b6c85e20b0b73fb0982fa375a69bb09847f5c13fa7b42238cd44e29cd13ace7d8a3dcb4611f3819fe0df24f80430255bcc09927b9c5b2e584e6e08009f911c42c6febe867ba9eb0e0e8f8036d289aaecc21c810b72c2beb5d2ff0a830528d013fda156a052cf1f6609f593f4f5ba06da40e64ac6221476d2231602e9a085e0666bd059ed9acb7e1d9033ec0291b8884f4c60e4e7e833f84a2f8b6460813ddc85cffea121b473b0e53d94da2e7914a5da1e9321f4b17c273d5b0d38d5aba68484fdb0bd6dfb5aaee161b19a3a8c8621de253379993dd0ff107fd7fd78d5cb32eaaa6e55328f030800588ffed27c99b88936b3abb5c8e5f308dcd5be8151fb9afc7847dd2c5b66adfa0633501ae3e607ddf128ee8f24979417acae7cfe791c20956fda1ab0b4364d0d6ac912088ec49281c89c2b5622f73f73909da8dd7fabeb73f186b179165430d7f934546e1cd5aee81a5ef6e0c079caaa64b23b4c56f26e8ed5b49249a04a14f87afe27837e5927ac38e5efb51e99a9033e7c0619a408410ea35fe5f88cec1256a469ab09deb3321fd39729f93fce73815d223d52051420f4141896315172bb745f7e94ad2fd5146b7f94f5533681f0e80544e57cddd2493bf1ce658358ef24f2b4e03bb157de2386088fd57a6c5092052302825b12248b32df92875348494eb3c8abab44239a1984edd01429f1fcfdbb555c689fabf0a7d35a88a47c3538a44464f3dedaf40d941966c5b33bbc6d576bd1db798c3c4c1061b9d258f778aba88fb7e28bceb1dcb78657e08169c462f0c3838b7e84ad8e9aca30c10f121e42cd2d0c552342345cafadee1b1976218831e758fb3a694a4b5d7acd7f13ad0e0e19bf4764f5f7632712a5aaaee1efd1d473eda803137adc1ff11b5b83884a451a59ad06540a012f1d2b7c53a05e7ea1e54c749f68c7b78f529df83dce045a2273375c9f109e17a2cd947f71a5a0d9652d7caffd5fba06839bbcc1116814dd56444d97cd1e3493c7f28a93af2e7d83e800def6b31e305a17a90e4ba2303aaaeb08e5489d04bf90329c99114e3108f6a641649b264d1d1a9259cef8127417a09951c766fbb031ce129a8f491fc823893e72a3d1466b5308efb4d649f5337de21e74f7743e49e2b7c3928247b71f9706eb054a9aec3c3e97461bd7f265e1156290aff3ff8dbf6f5b894392bcfe586a9f29c46951f21eec6b48fabc74af91204c6fbe249f8c81b76bf5519da5a07a29567e2baa9ccbc5b5092aa46340f701864cfbb92857c00104317e5a90c5b9e7aa6c386cb812a462e8332ab8d6f792bd111474d166ec3cbd1a88d82c202c81734c39cdfde99c67d109ad84a9a1f454537c7747d59b6a827cb0917316af6a584f2e262609b17d375bbb64ad81e572b6ba3dfce03362d0d45b8e0ef5a9b3e918e5396a57397deb014cab4e549cd06fbe666e611516654f78ad305e5da9225f7f51917a58665d1bb65282bc1578c4c6a6b4419b05f258bd1c834dee298495617c30ea4d440f94dd912409ae0dc63243ce43a8364172b111615efccef20501094dff08cb4849b6478445cf8ae50b9ca03f5966369322852893459b3246438188de107c9c306bb4d1e461cb8aeac6224f2d86755abd062990bed45260d9cb20b0c0d3e3c51499bdb6ad657ef20824b05942935b1b60003e5e1f5483965cf63ca51188c142e886c1f3f228f1d78904d99312b264243fad266dd2555d14ad7410544275f9fa5c4934be766df6bab40e91eafee4ffa8eacd330cc405ce80193d211cbcf27c59ee8770db7b25938fd7333acaeb2ebcb81883ab0823ae66f6c7632c01e6546577426de5fc16a842f306f2228c797f957dd0536cb541ef3ee499ce3415aa66616c5567fb163dd6ba03be4e344a8d7d479d22abaa2aa7cf2b2f2e961bc2b12effcc031b2fc10b50b55ac3c7dfac1cd0732d1462e222423ff32ce115226f6c60209877f6a92ef9bd56d47981ad23400718d1aed7fea1655b8f48365b01da5131774036839bbd78835932e7fa1913745c95d0915b5e2010255ee4be3110f5f02e4a91d883d9ff286b5cc0ba2963bac8b5b4d449bd5463b0c5c877b6c8083c15a4d31191c3621c4a2042d41584ecb4fce5cb6c95a3093549a641a0bf000e3a3bad7511c2cd8cc1cb2ee118088f7fabb8f506c3fd9a7308b92d0a7c6e9133c7c898a0b47710f810bc189cadcdc3af9dc1e3439d2e908a76b14817e5c10e0fe00e1a49dc497c0017e7f00ba9a908e610a2b19e096ab72df587e2d93cc3a820ae9aeb3b9b4a6ae638e98d5605c2d360fc25f3d738a862d9be3c279a41c0122cf9c9dfbf88d275d031767ffe643046984484c95d736b98a9c36a833c3454342cfd1c004362e3ebe89afa4881e1abfa771e22fc0e977c8adb58007083ee19ba3655f88835dfa1382b654035864e027eb54f545478fa58c0eb4b0d895bc7d46d1b69ad13215db9c33ec7070f1ff0026d072ae2b1e2886be226514f49204a1192066eb12742d688fa8043b6869efb5d70dd8072f139ab5cc13e41f17a8ce6a1dd3ce5f2604fe9d18c3dfa6d8d340675f85e221e671b80b8f8ae396541de22f3ce31b31fa174a7d87ffd08ba95f57e7d6bfdd01f05f341fe58c6daeae65782401f100dce5cdd892418a387a16030f73c412fbb44d31c971d577aa1d1e284de7f210a25d1717f33d243be1c8281d9b7daeb971a82d5a46c62bd4dcdb20900c11bff290c41d3c43c4a3fcbf01b4c87d38e145966bee7da62264754fbea61046486d630323269c8f20690a4d424c49f04fdc01e5b8b84bd370605c2678727ba927ca0257b95565280281279078af87b20a9626f1f8f1f207d31e69a7557fafbbda6b332b3b6286d1e87d6933f46fdf4aaff469d72918717f3631439cf525cbf19af100047d2e485e81451d7458c33edffba346da5a12aa233b6268a4aa34f643db013013114ccef003aec008df16355a51b605634a52a939a58cecb531d9df4894f2a2af8881daaaee800d734a33975b7f2e5ddc8eb8f5ef329b8829d7769d602feb41e2d5988e27414488f789e9201edffbc1b16d00859481504ed181eb0007c4fb93dde751d55bda2aa4da460c68710eabeeea415fc56af038238493fd71963ddbf218ca59feb9e1b06f5053cb927f9e0d92057aee0981c4ff251fe4bb1b282262937a4e42507e58713c7c4638bba9795d77d19c56ed9d52d2343dcee3449d20be61c2d2fed00e38335f90deac40757d93b004598ddfe6cae370b41d81d50dd27a4110894737e3582e9223a5f4e6c90a465b46b4e9cc8e5f4ed5e7ae1dd1666e2a93168e18d4f1ca2a6c7f7387fa82f0dfc4e4c65fd1e21a5c04526c8694af9e1ff00c3f9a2f4e0dd8aaeda172d279b23f61fa80cd087b5498f49e78b41c671c9443f15302748b2008ef658aed499d9dd1d8745a8a0e570091376a301f463f1d98a1e3afbfd018ca30d5af9d30bd5c507b95eee9ce6b12d62a52627b3693ee0f50011081847d456e6f60fd8077ff082c3bf42225ee4a05324f7c25b4a1b6e1046c31ccabe3ba1eb7b5b4169668f88d739c1cd332d8cb55c7d04d2780f605f5b88d134f970107316b1e02b1dc8ca4b7639bdad7aa0fdf1cff43e6400b5c8b5c0dd02278cde30bc45a38a8fcd8baadd4ac7e965c8d8193f0b1dd75e10f2d46a0dfa0411f0cb4fcafeaa7b47e8f962e9c020072dacf1c68283aca499b9c7f9bf64de223e20325cbfc5cdac362fafd28445c7270f7143ac58d03c30af48d21d9b94be383eac885cd359259213eb3cff9b9365657e9fff160f8113f93da5630a1b4810bb1cd422e49ad59477019c09b7aedb6ae8e4b05cbbcdb2fd081f30fdd882dde49f3f765a809aa77e71d8981e262b96e689b383a52526ba235780c67b184543615a125b36e195a7834a1663a9c1f8b8a8c0594b4261c5c61c0329b7630dfc5a6a08000ada06a6a3c6c80eeea7c5d1516e8570d622dcee405b6b84276398da8299263fd10290d31b3fc262ad84db8b6b37a6dc52c47e37b703840cef2ae33ce1764934a42deeabae389b8648b6bd7e8042ad5e3146ae505b913cfd1a21a73b5587e10c1c42c23f5aff75857a771c3cde49d0adce3124f04d62796206a6b3f8e102682731a046f1fa7c01c3493dd3191571361736bc80e7b6f5bf68a24d0b5a67004e2eef3a29698c3f2a3d037cbc7cfdaa06f6f483de9aeadcaab812cb0203f22c4b2b39fae8caeaa442a3bcf438713827fde6946f141702c29a6dab1f5cb5deaa093bd7e94d33144d6b2086a74e0968c5daaf59ea72fd9bd5e8f55ebd878eb4ddb10a354c3ef810c80c9b99ae8bc7f1ea5e79efb2c918cf39655676c4ef45b393bc399c56d6ded3e739e18c4cd1859adcd5cfb33a42728d179b478ade0cd772268830aa90845c90c6d8c0838af8c98979e0b8898523fb4a0581f688f875cba5cbc01a452b3ba33f8dab670ddb0092904d1b31c650b869f7b88c42d4f15091954e300dbb814f2ea95a77211ce0b0b4839f644420e3c902d40a2dd1cfd9955ce16a5a294907c9f00ab39ef1c96f9723742a15ec2093e84aa6f44f9be63833153070b129c0635cdf5a58a36f22b7cde554a2ac17ce536efb61743224738926a3174fcf077156b6f2ee0949dd3f9a3aae4942e9127a318f2900bc5e39669f983b6f350c24ee78b5a841989d3ee7355a015cd93614e5fb7f2ed861c665b48f768ed468cd0f03d5aa5d596add48d0da5b8b57194e3c2c1f08e5c0025a64afbd7ab554cefc2e3d89f5b0e5690eb7cbcdefda20e041111ac5ed8084e0353d3f0caff5b4dcdf1736549fab771475e3e89f2a0500466ecf9c66ecc2dcacc2a061272dde9b1dc72ad5462672a7d14febc48559f3f40c39c42bd0ed58e84f092bad772401c9ad1e204930e979bb0efa33afd4952514656d3a15ada89b2ffb31f29666b571380faf345c846aa6e5d7a2dd7bb0f5525c31a8c9b94bc2edf4e6f82c2779b8f9cbecbc204471ba74c24472ed9144be140ba66a3cff52b5f5b20771e606435e04a2988913ca2662e6bebd0da2adee828b0aa7427b5ee41163ab3d3f425df33dadfb327f04fb70a9118f5bf49e88a7e002e24a60e727d8ba4e7acb54e48f1bf666a2cc9f3b9c8a811c8fd46e670e7bb5f8cbe5b577692d858e9ef3680b20246f0a40c6c92e8cf1734560f75d4a8c7c0eb1d17571e59a37ea0163d3ade220c8d853c9b4582d3d825ddc8829c6a787ef61b7b13002ea1bbca401c56258be0dd38dc8db90f03b42c2614174c15e91e3bd91d6b93548fbc22cd814e459bbf3ec3e19a2dce41d10f9cb2deccac04e96eca36c3d0ed3331147764c51b16ba99baf27457bf81485367ff8034f4ac20ec3e832458d4acc75650c159ae0d9d0c312e329cfa7fb9d7229978a17ff1b452831cff5980b9eb88a57933afbee84455f0c9972956dd3ec4213fc97a60a163a292d95a4dd9257743d4879949cde4f5969df4dbe1c76fc111832f7a9a66f4c8fedda71f4b905527d1adfba166ca10fcc26073799ffdf750a521a7271a84afa1c97f8433f4e0203a8182bb1d469c5551065d7810f1597d228df16f62cc867d25eea97105ba265deafeb539bfd0b99b27e313938340593e262e91294aa5911ebd6400a7743602a2aff7a324c4a4a4ca8b470d6f90e860f8e761404fea199420f238efb98e5c284009badc03e2ed32266528fb1dfcbcc4c4bdbca03bea9cd20fb55587b8add811a4f000110292bdbadaecd5bdcbddd44217c4f9610dacea0a89107056914553e8e9e4e650d9624a0016944fd74329e86dfe889f7291e59c6ca0d648473e8cb1f3ae965375fc591ef534973e9e829e62b33be147137cf3d1797450631bfe51e7e05c39fa239a01fdab6c8f3c2de57872931a3a1572fe010696301443e5e2b6a2971f86537fb49dd1dc40d47cab07c513b0b8bc0431942a9f93a68b61cba061022564b541c104bea65d671c3a15f07bd11b6b433c62eb6190b7df2a444d4c516de3ff05bae9dd5ff1f27b08bf9b5a23fc01ec568772db3c8bad390997af58f07ce84a06065da05b302dff2c73556f01bed2cc6640717128e27b36b5cd79ec52f433d1e04905f0bc40f86aae9c3a6c7d92df13a4c7c2a8bada62c0befb7e02dc3b32e61708d571b26f6280fc78f47c1bea2f41e71a3386b8391f668b7c0486477dbc8c621cbf4b783fa9a62a240e59d8691e02227a81661a99594570be51850e9d811a3eba2c7ff41d8520f42c57229d9f6a3c916e61efe5a41ff7905be99d4b5e5e83f387967e9056a4e2dd2f63ac1bae1fea818483e3d2adacb8f12c9ec717d73f3d3e9e41fb8d2e7e3d74ee16abea4cbe4dce3762129c273fa4046051789655b4e9c95c267f5335e7ab80119c13eee5aad25f3861cf6c1ed0f523759fbad5a96ac505ff034f0172fd761ce92c045b61b229df52a2f9c582277592df489094dce4456665ed5f1922f64c0746d20373d9247df45f73ddcf134c17498962405748f1f7f8fab8a47f09a24593d99a25d5b05769529e23bdb2c6dc452bd05c7fd462a83059e956402f0217aa4bd66fed345a9628cc5d20cb80a40b054ffc7ecd7a07b89cebad6787d06b22bf3be0edc5af99a739491ec0a2fc64112879da615b33da35d267b1e2726c45b3cafc32fc73b9fa17f6ce55f226c87840bf62b1ee415d54946bcfbece023929f9b31e1880d1e2595de88389a1cf033550953eae4e669287efac2d3d37f29123e3c170bbe9993b07ebeb95baf2197b26792fc8398ea479df0236b5dca9273d7b459fc56ac6e85262fea4846ec205da133bc3def711ddb9830fdb774e1f016fdaa403466684ed0d2f6b3f69a921be23aeb7805b18baf4db7d7d7be12ab384d99b8b48156637720f8e2b16a09da2f2b746ee73d2c8013b858fe63d9b77a2750bc4372e936ed83b5093e31bf06a5201b1dc50e1ba644ba4149b90183c37f3959c9b41c2ffd5aaf9f302e840f513d0a668236307f70e9fef642c888d05cb247b79682c7f948889f3e02e439a3f8e2232ec1f2f0410cd94b2ebfda972f195f9eec017900268e3de0dba4554a33eb810dac1d4951bd33413226fde5bcbc78c2d8595ed25b107cb2bc6b4eb1b7ae95a32b56f543325236cfb17b5fb06eafb4c89de97f8fe9b390edd28cdb3d7616235139957be25ea0335d169d2ea0f85284dde491a5c09856dd9da441667608c90e753891f4e79e5c24d04696ee61a9a721a3b5b379bbd6402f5ca4a9a4cd00f1f9ed14aaaef5e14998eb6301b0ca927782a0bfa2fdd2833037198e0829943083976804d006d1061e80092bf53da844fda2bc35ec0665c03655aed0df0bdaa07a4ecd343df5d77e0e74d0c87c05f7a7530c0c82c66a8fa54fc3577bb06215615cc6e3226894f65f8521cc3f3bcc127019fb6a603915b35b1b89877b242d4e386434bd0841cd867b8e9a1f7a59aa1be734cb404b8380284a013053a8778e71ad7e89e40b74479b8edb06cf0f4cf46734fa0ffa63c5df27a0e3b14af24998702e94b13e07038b350eb5f73d585b21140a535bef2ed570e0d09402656eb615db1fcf6d3e2c053147d57a657666b578a45284aaf2c696bb91468df258cc51a6bcf502117637f08064e1dc31bb604d754956cd73c6c82e1c4fcdaa8d49e977f38ca685e39a04f6be170af83f47ddc752edcf459f81fbca99d26b1fe46d5d40756e36beef1c03d0d21e305767630ed44513c0019373f489c37d9721ccb9f34241c2e0d0a7cf07e5f492832d01c7decf9f070bb913194ac9e2d2b58dbec80c7bf0bb951a59f20a0304c5c2658c760fd5ac135eddd043acaef8a9795981dfa33a8d5d16ec14aa211fff23339f076847bde9a8a5f2efddc78d724df39225c3f45d22b27ec4f58f0023ac62ca9df2c9a428fd2543ca8b4feed347d4bac644a687d56fa3a15caf4d02e536a5f0fcfb7d620faae434002009eccdfb55ff4afe9f94c095a420d133623c0b4c476a7c9476995ecf1d2770c0d697177dcc6a6443bf12009000f2e0561b3e8299eb3126c29798d2ef8bf5363bf716ad17a50ac1927065ee1459ba0273460ce2fe3388298e2d6e8e2ac8a9a7d4f6c85a79038fcf42eea2fc5e7a59f059b40909c680bb0aa1b153d9b3c21c2dc3004b1b53a0fef590de217fb5b5ca3a38520f74bfde58910018a7033cc2325880d64016a2b41acd1141cf80b29a699dfa9c9ae9f1e6b4444443d13347ff02c02fd34935f873f6612ceb04a4623ff446bc7209056387631559775211ca6e6be143b0e25dcba4b56714469fb32bbb7b6f331f11f9a7e2c1502f5b5a50189cdd3d0da168386527162ae2f3d9a39c0e9ca708992e32c71f251ee6883239d14cd2c179dc5ef500619fa9d05d71237b753b01ddc7123a773a8d0fbc7300c8427ee5131828e20a08211762ff9762363e6fd83f2fd23e9d5042679f9b9d68fe956b686f975e0963d515e22d4799b29d76c2578ddcff88a462f6b6138b5eb3ccd98ffde36251d2e5548fe4eeb7aa937f2be2401747a5b0d9179f46de8c5b5f6b35428db6e50ce3d56cb0954d46162dc16cf4af714d9934cf929b24b40ddaf7c99e0892d9283e88024d7b92232c1bd659f6c7ef44bc809536628690e5ee723770b5723ea91444897e7f4fd1d7ebea74f82e41f09585689cfb6416c41686e4222afdeaae63e1decaa177449036430f27b8a078f2468d421d76977fc92f0c922196d69377ac91fa8cfacbeba2f05f0a7241a5146693c331262b5682523d3e603534f02e073de8ffb4d8f14ccf3246c4b1a3381c48b32e0bbcc7e22f3c6bd4d4ec0c0f3a24f3fb930c060523a216b3cf81e1ce1513f3665e955a299a458c91ae042e8e912f838de5ca27dd7956756629cef1611b5c50b7aa3f9bb5d89d9fa9e1e712deb6c0f235a65877683f57ee8bbc399379e1d7f25b64b6266b2a1e1fbe5ad798f31f1d6d8309b29116c57bf13fbfbbdd3e9826173c382c52b600558fe7f894d63e2bc157a3f829aa50b0e6140e3789957b6ce64512b3275795fa6c1366d381966cb58845ae43efb2f4851055ae9a15669fc451687c8a81e33db4555837bf892c016369686db30a408dcf0e545b87d384ce59b83cb57085607edec37d66b8d44936a0d39bcc849a2e430422c95ccaa7a9e18689ff6f7a87b32a3bd6ca49435fc9507d922d56731c07623fffea451e7fa049b4ba2687f43b208bb3859ddcf88992b1bf3aafa9165cc7a92fc627c6a9b5c9552d2e8d269cb8bfce84731361b5bcb66717be7139807bb156f45e830c82210b94911ef06c8c31b047f3b092394675f775008620cac9e5f8d1e2a1941824507269ebbee20e1a149fcea5469d32d4ad234fabb6cb5c62f52e8d3e4ba1cf62b594109b7222b4199f6f426fa9b0d68111d2bd9e9fcafacfc0e2cfab2122d870dfc49495a4655d29089c9925b8a6f2b07e11949c19a4a1fc95cb36cf34b88ea6916ecfced7068e42385ba69c9ce8c5ad4bef6cee4456fd2a935ea593f174c01b54772325cc2b4c252170f14d63471df61a045795401cccdf906aaee93aadc6dc887d87255b153b072a042ede67ddada728dd7d193ac9a5ee1ecadffb1168f53dfdd2fcb234e21f0707a4e7896bb38ae9e78188a9e7da4e03c4412d4b7fb971c807c948745de612911549f34ac234424056b7ab9504c4658ec0a3cb62e707a20e83717c03cdab519f86231df3c371cd6a50c6a8989d4b22715828c68a9a9fd3bf641a2c997040d0af25d05ff959f86cce397c8ed2c4bcddf9ecab465cc4f71679a1e4d3366692fd7f85e70aeb3b7c8eb15459769dd3ab31c1eebac1c3f01d9f8437ccd3879f74d38e3902fb424d310fe316a5f976f8cfdb8739e11d18b1513d3637438b76a2af334eeebb129bc15588c16f3f086bd028ca8922ec02f3aa4d98ff9bd5c0e306e74cc7bb2ab4339ad88997d336f6b8eda71b47a958f0d54e0754d7aafa67eee179ac7fd0b06c92564c58eb9e7c3bed41bc4b06aa5c870c721355eb3cf89edd5c4f1e789d3a5440f7777408b55a6aa27a75b193342d3678c654ccf1adb34696e8c44e2d8d2543fb9c0189b35268f8485ca598ef583ae38453d58d0531fcdda80be27d22e66cbb286daa6e80ebaa5e2751a7abd09262becbf698e2eeb801ecf81079abf04665dd7e9995b30689bd66dfcdf3de26a18a57ff9ae55a0493aa023c469793e9a1a24950be35f2386b74ee2e20e6637ed435099f1acae3f284586a6baf1c2e701a6354a58fc4a3decf81455cd1c621e14b1311dee5bd495195c4dbd57c7e50e8d52554b7a76de5b750a5c9c3597fc409c3680488e42458d8ed03fa732cf64da67a9444fee6b7ba417551920dcdc16c381b73538bc051f4af1099fc1653e3d40bae952d3d03ad73946ed75c6ac1b31976617b035deb385223745a98ee9a189e0c389a991e2be0e08fb8713fa3d5dc42c0dd98a7ff4f2eb71ed263026541d92330e7fd7145c7ba9f8c4e4205a0b69c365179b14a5b9ce78010c9c68c1af5b49cb6af8c1257d137b58b17e4e68d22d80d6cb4778063d07af98a5755511b58b514efe7501ee18faeb4c0c9baf454f00cf6af59cc10a7054da4bb88718d23bf57a5de6446d2a634c85dc8c9076a8e6acc3019ed179c768a15bfb1fe793a3a51e4b9cc4743f5afeb249e420bdc0e3e733ce713c3579db15de6331837bfedcd4b1f6338b592e5d58fb8ee70dec1a15c448a8e865df8f648ae945e41a55971de99477595f3ddf65926159c6bb26b0fe841b1197ee5087939024114b3f0d1e4b504faa3acc82dcbb4bbf0c67b520ea8ebabaf9faf3b1ee35672c568fa959f1780e20dca1f54e7c8424c88de11cc9b7bdcf95b9ecc9507569694c52c46b664a41dc2fa9c9b555fd0651b5418f2c30c61946352f8d78be91b472f058845518a914c965bba5b8d12b36c80de0953351ba4f756cba706c07decb2e64ccb58ab84b3fe437629474eda2baaba3c9aad9a9d8dea7d31742b52f9d115674e6f3e84dedda4c5d9f76c347495a6796091cf8c3ac33af1e7565a56e5f4184e06a9fc39bab92ddbd689045371779b96f2851694a574e5795f944b9ad3768119092e04ec18680080260bec26a2f9a51d15a92141c7540bb778ea13f604defe6da7176e50816d91436081db8617c5e05a13e13dbf858faa63d4daf8b8fbdb11a20c700bb4cd1f4de3bfa017409ee20a2e8ccfa14760c00c262da649b97d931fb30fff677139641723428de4c30271a6405f7499c1221190985649bbaada535959f0d03bc5f6b86246ff9c06b6ad8b819dd4ba0448a0226d84957d750133bb2fd467a3b2cb26ee154ddce8f52d42d57166c2a8618df2de55564f2d199e84a6789a5166e5f46c2aaba782a6678ee6d78dbef45b73db8feeb86861659e5a09d4dafc3b0c77071e177fe9cefdbaeb4a576561649c503c6ae487605b3c872544d438c676969446e9c656b980cde25cb0ecc8815fb9a29f20055c579ca4cd42bae24b507c9b7bb37b7b1de2c1a34cf4aae80d0cf134c8696a815a7839c474faa605fb29a8d82baf86f952482a9382894263385e9c514a3cd75a3545282a5cfdee044662a5529658f5dcbde1c882b1db0050c8160abff0c5aa64e2616e00629ca4ba9e74411a8bf15a0e3b5626d9e46f851e38b8f8d7f3f1d009c4e290270c3b5a3a0496aef4859278ae58abe49ec096d3c51395f13e6ccaab98be7c47f41190a913a4517aaf3c2b2c94adceb48b7a6e371047d5170d2f56f7ec93d3208e235489e4b42a52434d4ca751679d909a821cdcf6245eefbdf0935200703a23ef9c80c7ec19f71d9ae67e6d7271d3f290507071a834ca55e5d36e0a2891234e95ca55fbda7f3892055ab000bf5e71af69fa9ddf8382e5a6ab543901ad76aaaf01f4c510b695ce1299e75195ea8f77c71d6cf235d0bd47aeadf7c166c75423a1ab97da19601f4a7b1693fd31d1f932225ec249faa5acb1a22a415acabeed9c9369457a9d87511af957909d4de1c3ecd7ce2e85ff0130218e498410bc4b34ee2bd5d4fdb9e60bbf4fcfce8e55a2291e5b32499bb2da05ff8279ad43d59b82e3421622a85e35075f5f1c7ea86fce0215efe2aac542e59dbc8c312755465275d5a249782c77e8011ab0bfc9ecf57e139fc13fbfa9129c7cb1d464c42b1d07c0bdf0ffffffffffae2935f1dfd8a24aed7c70df7de3a668eb7a49b1319880dde2bbd9031ae5d82ffd601cabfd6df7e650947b8efcee5710b0090580f4d6d08684d6b0cca4f1a380bc5d8bb1a46ed18986c6ce6298d9b8f104eaf9a7dcc9e180d5350b7066721454404595877d88c9413afbae1c3dc11f0fae5cea55df27b540ae6ba09fdf4a411613e2abe2d3b596bc66af521a86baf056ed64064ab948af23d5d7c3b67c770628c490a6ff60718420d45cf083d750c995a49363110b624d56004185e3edb2a98ea68ca6f7586d75967809ef596515865b43276a55db29fc8fa095f050abcd8862c71d33ca57fbd3c211c6499c388f42b8955c71792fced2d2897f92d8ba4f950b84211179992768d853f401bb5756246f2fa36ebeec2255ceffbecccdb2561c95dec4a68ba4321e8f23257455b8ed35de5d80cc734c3ee20e6a6d2e476ebf453c2b662a3e30433ada8e69cb2a2a2d0c03095b6b2d3ee36e8d44223832391163ae798f893a61db89bc4595e15e3b6bea1d737cac61676c6f777c380e3e3ead5e98ae2c1470aeab1473ccf7d69deae0c208f2e0f4346408e8ccbf1410f0e32d455d56a286599312b9521080c47d1beed6cbd74f3fa2a9b09ed776fb76580a1980f1d6f13ab4633bc5b49a915218e2ced84fc8badaffc8eb912ff233918545dbfff483400986cf37551f97d9d7eb5484a2113098127e0abb71ff57bff5fdc7e26a95f45ea015e624a36d807079815bc6059f02a11495fab2b01db36a426f4af3dc2c24410788b231c954fa204a502a77a4101707da99f6be3cad80920c005a3ddd387b991f179347384fa6fe579a3f3587bb7db9049b1795343a5cb2b7f4c22c5f90abc0a5cbda9de7616dc1796fc179f14e7db9d6dcdf86457a3e741bbb5508c99e93ffaa772af1eb7b8f61fe3b13363ff634ac74dc801a0da1efb07f3c05c7bfc88ec7083d8ebf764739886ceaf91c9ba482e2675aabd43c3a0dfc6507426e801bba2db7eb73b3153226b8dd0480e076a2e8ed4f3beb1f7ec1a9a60ff22e21052710eebff839bef708ee8e7a64d99c5c521d1d5f467a0410d606a0ca82b172ab35b2d5b055b9f71c55f569e3c05f391bb25db9da9bd994d32df6b967526f5932021af51b1849eeefaafc1721e6270c5a69f4b475a180033accf3f403a977bfca71ac542e246111c94dd65a48a9933df17bdef3992e2803f2f9d03774ddf9802821a1dc89b51aef4749aa0df7d06198eedf034a1010dc5bb3fb14bb05b035c697597d9c22ecd713845ba04a789dd903a24c2bce92ee3db3b8a2427de969e2bb6e38bc9f9d32a09dd08d4b313fdc10fec53ddda0c0dabaafcc2f80760e2f49b32742b1a70fb9e531f8ee567d41e6a1161469025622ead322de92b0f89762a28c92e7ec710d4be99566da0385a5049fc36e8ee921ba372884b9e94e28359a63740b0fac4e1221573fbebbc0e653af2fce7c96d68e6771f5efec0ac0b95e3fb660c653fd051c961b2e393fc1a94bce84ba53337ec6ddd0852b5b0b8250d52b92847c0df7268ba13e9250360b2913ca7bab6fa0a046f2882c3259db4945f8095ab59a5f38be07b07ddfb1e09f08e627012fabf460a6562958907ddaba4a5e57499d9b3304b22d5f753dcd9f47f68b89ad238f61527aa4a04e216871d0e964165428b59cf5c51bf8a30b7d7b647caf9343b198ec23888727934f15a454c08753d82b2fbca44e27cd8cc40f77aa543de9709a990790a795b1cb83fd4e2bc4543f7d1d7f1c76c58501f3629f134323cdc81531f7d6f09a51e1927b9c97e00d45c572b4670b5783a3bec1cdeec3e68ab4b5396970ac202d4b13439d09518e513f5b53f46bac337f10b180fc8d16afddb216317800cb65dca3932ed69ce701ad9d39562f74035883bb2ec75053cc43d3300234550b8fe1021751af52ef9cdad991d7ae9c1d096996192d68d95da280d8247b08269980c46ee84216a64c1ec1f70494ca13610ec36d880e3c2b85e0d0c09fa47e7335e212958bba205eb2500248dab3663824eaa1d3a38bec70d5b5abceb472da3e4038f507e0184770294578fd3dcd614dcc8fa6c5a1b3a13d4dd8d70e1e93bfc66c499f86839c3b3060cc8aeaca1a435a86b65469a0d5674b226f08bed67164b0cefdd7256f68da31cdb6d136e28b1593611ce7f5a224ed27b34ee936d447b6fe2ec1b96ebe8fadf2e86ff5aa9e2439125a73c24181218b7e7802c444624842f1c24d4b23b56c2feffc31723dd4292a7949ce72bc83ddf1baae2ce8e405a4dd83d64d74572e681b5b91ea267ff3777cb4ddb11237beb1eef4d632c58ecffca6c888908d47ded075f13b28c0803a72ea73adedab61133c06f3c71e1f2b05fed4e551578c540a87a18f5401f51f9cb2b2da48496c5c37894ca17ea251efb25633bbee95ad0c32991c24b5bb28bc9bfac3e85111563297aeaac1187bb96a4a8002bba442bdcccbc7682ea3b75c0fd6d26374ecba919239fd8b089a40dc97ed147be623cd1d2e043be42880aca2960612214252cb43de08ad52999c034725b918f4c1f1cb7bd9792ae3e4c19ff579a3f977bee05860a733f09b32f7a6a50598f77061cb7669c586d2d5157cd1830d771fe3409f17d5d139478f130cb6a4a8ae8b772c0ff570eb52e8f8cb821cd344964e41f7ab5dc23b03a888c7bdf841863ca3935c270a82703319d3a7f1e91532cae58fa425c90a9a013e3d00fe545899ac32e437d614482ff937cf419376b51e4f02e2eafad3061e304866e353cec870ada3969415ac4890bc80203021b40a845c299556a557b7ec231f1d5fe07f9de7cf5c05278e3b56f7d983cdc1d6e7c14f1c03d5f0b90b54551568669d6bcf8fcf6274f28ec150ce2b18e5571c5a8ac4626d3571e0475ec121192c7eb8f32c0c475d3f1bf507f3615632ff28aa9a6265f20c7b56747677451906bc919b3588bd1f88b3370d86a88bcf587395049f055716d4ba65d33a1074683245fd7c128c45eb67bf63bc01b790406e0adae18d699e434f31ffcff718e38433cf483c9a8226e3fa3419592811750c83c842f1116be30f8388ed1d22fab60b320cbc4d5cedae3ed7b0f03ffbb7e4ca0bf8c7b03bf852d799a190b9a5bb3c292e2b43ccc42ed44aa81974fa22911b686ca0b003134f0e0965bcecb60063a6830d035052f365d944bde40c76e52489ed1a0ad331ec5a27858495e94f9e88e1a320892411954fb60cc13ae57c09eda787d9e38016866ca733aab21e1c290a96dd1d130fee9826327feb9f3905dc00bf9bd41185f04e7bc0a87efdbffe10c02b182643a52f5b7b719562e99ea3bee47175b4ab1b6bdc41ab954f8218d2d5934bcf0f32ba82a8b2a3c1de7cfe246301d9274b0313b7c8e8aac0e84ec53c206ab69c0cc3befb878fa348a9168eeba01eda70e81deb4ecf9a5307840608c28c10584e004e64bfa5035a0dc01ce04edf94367edc748d3e113ddbb9a9457009eb5f620c1022dd40e0029827ea9727e76b870646b3d99bd57e7460b08705de39da1a9c6019a268a828e40d4e6ca9999e4c48ca44f9ca312be0a151ee804d4172778b5bff02af1be30464effddbf941b45ba9366ad574dd141d798162f2e76fa4a88d14dc02a3b2690334cc481135b8db0a52c15321b3c40ca8bc797ea8072b8d49df4e5a01cb93b1c0c4c79a900bb56da9f8d66e4f1ba7c21beda38d7fb842b408ade6ea36473acb4d5fbe6262529da961386b831984adb2ba95835d5c7019388ff211da226b9421c8783bb15b368503e38e278e6d5330b211d48587613060d11a6ce2b21f9c6c6212becb84f38fbe60be89575e53d85c112cc1d99e49f4aca0a59f7c261ebbe7dafd1b9ce6f2200e58e69bf6a4bddace7b8b07ed66ba09824b457a103c32da5a6914f11f404091fef2312572c2cdada43df0ec8cbb7f99d624042eafeb13fccdfdb687d86f081d52ddd6e8f253aa88bda9410f46da34e3808dddd4cca21139b617562c6aa0d8758fc212f4cda6d8e9469958aedff12a984387fb7f994f3426bdcb82b8c3fcaf7c949e9070273858780c74fb3e35bf7e614379b67f5865368ae5e93db8e46986952e5ef0c7e4b429665e91aa15f21425921144770a1bc73fb2bfab54984f79f171609031c1acef9925a112ce439915676474b042e2cd1c058793d31de623269ca5be4b8317263e71e1e10c154fdadded3d48740c8f0c0b141e3699613d1ef16c6dd8ed89f3bf3e1a3f04b91771bc5d8d675206c91c14763565aa05eedc2a9dfdb1eb1c13b0306484d9d5e0d03ddd3fa0db022d0a2c0a7805da4ee111770ab47840e7cae6daabb84ed4bbb38c1967149306d092ef6ecdaf189e1512a28b4b03f2097b4abda5b2efc9f7d6c3639dc516201f8d0264f2d92a1ece014e9c28bed381e658c485d569ec6541b58dc659ddca7a337779dd6ff19b16c4203f38bd7b6a50300345411d483a3c466619828b77f21c67c581e5f11cd8203a492bcda81b55a599ca401c6c4a4e68c7164104e9fd9e7319eaa09b9554dd09fc849650bd928dbe9304372f6b54d67e9a6bcfe4d86930d39aa41ea0210a782cf9a13cc108933a5adcb45a4cd369602e423f6069cc43b2ad87248bead8230332392e643ef88d8fc447bd4060be4a504918214941c33c24f2b4e4a361e157ad247d976cd44eda51d1639ad72550038b013415c43cf2338c3cc6649fa33c4b07175c90957caa2ceb79b01cbe2e815baaba21ff78c0e012d1f8e6e07b406dc844233a53c4c5264fb464fd40290264893ede85960641099c576b56b54ae335fe57097ca42ee8cdf832f1735aebe6e22705886442f18561252bae9b3dcfb5722cf9251d562df82779688ad50b4589f29dd948109e8c0dc258dfd6c68e83477453e01f9a754502c0b5eb88376be96e9b3eba0ebebaa910155db405a1b90c834d7dd83a879b722ce270edcba9f957455b23e8bf3f480e7ed8c14b7018d7e8a046a84b2812690ae8551a4dfd06160b4e89b748ec03362b908c8d16b02f14a2f408f35104f4df1741a43f6eb5a60457d2e4a10fcb029b266c12465dfedd2d66b16201573936fb85a0a74a31a85d692bdf734ac38792b8ba58d614478da16e785f8dbac40a8e8cdd14b740cb98f2f0baad9c772cf87e4b39464628869331882c59aaa5333486229eb60b0667fa002e017aac1d0b78f4fe8d27d3ef30110eb41004c640643e979d1259347b1b87b55e05157e07428019dab962371bcc1c5033bb7d65201d14973eb57500d9058d5dd6a40be4dac063247eda1f800f6c24ba4ccb4908bf7a28585bb1f8b047c85e8471fb736d55963b88c39a4533261eb51b461cdf51b9ce0d3ae19589b65dd30233fc83614e40ac9f6a832b81f5e139ecc3f129f40574d503c14d8e4d2b6a9dbe6ec10eaeb884b9afdba05e672622e1a9c146d18c31db9e0250fc6c393b51740ea7f33a299b16c9ba8e14a6e09b277841f0be31318287c611a2c9923858e6e699379bf36eefc68895ca49967a81d240062f15ea98cb7df117ef0390753b2b6c2237eea3eb64646dddf8cfb91d6d9072f7a6b1681bc0fb4401963a3c2e775504a5692074e1f881379f91c5a9e49166c50edffbecf7bcf1930af1f88933af20e0dd6bc8ed00f5d40cd65c5e7ee9d618f4519e536ead51cd3226cb41124525d4cbf6e23f992056590c01b03e84825f47c923afa3a213295d832174ac4d3debdb9d041f4527be8c786d86e302766bb406779f8dc672b8d4fa52393d25fd5958d39f4e1af45f141abf42654ff0e0e36f30f8fa7a5ba08c0b3c9436f2af5deed1779e5b4068e8ca39fb9be11126029aea9d9ba22b84059f9100322fcc3a47b3308ea5aa46bb25ab8ad8e6f54c2b5abffbca3b2d746f36618741bb03394effb2656ea23870051c0d7c49173f26bc5e8cee284cb050d1b5daefdcba0f0a13c05ceeadbea61bd2d4a2fded19d3032cf05d35897e586109f2b41f8043121d485a7cc4f75eeac762caf3f349e0405204875ef445a84dc038ad26c8ada30c75574edfd5d3387df3213ddefaea462784cd134a67eba41d94ce6227d3cc813af5ab17e9e4f914afd01ff0894b0c0d389da440459cf1e2a8200ab718299aeb0a2a5fe3f8a41558fa2e1e05ef6e329891eebd83d8d32e191257f37444cf2a7b285dcc8eb9badc3d984bc79e93714a35c569ee05a15220c4bf39490c6bb164b01125ab213cc7e40d0def20f8cb77b3c632bc2867a87c8171c2f8fad936c2718a210dc6d7d410aca54821c6001c11444a75479a821b48b244aafe723ce304c0351a66ce7d78273aa26800734610c84892587d50960fe109a3a28939ab4d179eae30f25676ae27fc9823087e2d420cdad4d9d2ddedb4612233c0e9e9f1d4da347a291d8901945dd11b9ecc81acf12fc24b47203101bd942aeb2cc19e3532f59bd72d7a7890e947164953a1756aaf17d93e359c17893bee2a8fb89f308f873d557232e92b1057a0cfd311164960279f93784c6ee8dead28faf7bf003ca1f33c03ea16d9dcfcf336a9181c02cd02f1dbf51646cb30d5688af4f5c1a9857cef87ac850995b143224cf1ee3ad07f5aec7cdb042f9bcb4276bc729fce6f0feb60ffadef01ecfc85365e872d2d969d8826c439cd370236dac97abbafb23b6b3ed8e69f5b026a9bcd22327e574bfa482b27ba9312f365c11326376b1234825f6e7d8ae926397e0a4caab5ee4e3c747e4d7cfb875a0169325ba9cb5c0341cc9f6db9edbae413aab249647f63b4affb06a58dead900dc16585c9672b400f66b2e549d2b8ec416e4c6247588add22b235e0ebfb83602d9691752086a5e2b52fdaa497a2d6b2e30db6b23aa2de5e7beb7a4c68cd4d29d9ccd69bdf8199f7a91d27c959dcd973c217810707aa65e8508dc9fe2a150974338c1f428f37f2ea198289ab2a913665630ec70dd9afc396fa96181c2ae669d68cbe786d21bfacaf8c39fb2aa0687a13e16a3013889d373b286369ecb7ec7995555e8a096403de82dacac20254aa9d284037b8841f759f3d3066ca2e0c081518a3415be5a5728cfc58045d7b73841aae436fb414906f6592e18b556ca3822b64911cc4b2a9ff35df84604001b6b1922ed115dd0a363b0e6d633063d9c193dd0bb7595579d7ec7b2c7f2e2c66b297cc5011726390e739012d9b518d330bd74d3f5ee0ec94ad4747bb3175eff362c23f3f105e6576a3c19c393ba9d857440e489f9859c18c26e8d7bd3e9196500e7a1eaba1e9278048b545020f850f9923de56194f9760c7379f4a095067e141f721f0c4d168b90788621383c065a646b5da1ad08a73b09a6910e7982a484f0666572f4640a2cbc1e3afd63f49f98a3ad110908eeebf3d088e1437d4b5877fe60200a73760d857fff32e36d624f64feccec5b28a4c26ce88daa0c1ed05e7834a2a1be55880a9b8b83df151430fe4fb4425d6c8c01c29cb78c095064689b573d28eac257820ebd5e7a6c059efc82e5ecd0c26d0eb1927f3a62861cc9df89815ffe18fab0bf0fec79e546e8d3f22134fee50995d9511341b74dfda14144b65e8b00b23f3e233566e2438cebcf47201b6f9b0a6bfe08db7160ea56c7b93beeb3b767566019e31d5b5016ab50feb7aebaa2c6f6ca5478372d63e2313c078c35aac2d184e331952db09548c6eb4487f40e1c0316e8007eb3cb046d790fdb82d9e783c9685f77cf086b69adc0ed3efe5ab5bf376ef676b5dbfba246ae0c528eb531fa6984b947681234aa08651decc5c0ab8ba0f6112ef0baa690336514b3d72b970eeab9bbde921fc85b4f17c6cf7317a009505ac0eecce314dd199048c27898347c13951b3fba1211092c1fdbe484f88158f8f6bc3163cceed928e695834d820cf89ba940dbe21f7b8448b74ebaeb055ccb19cf54a3e74098996ea6f9ab3c1dc2026f71a9b546020248f8832ab4e39cbc59b0b39a49fc8d0dc1529ef94397cb5ed40a7d20594c3952f0fddbfad9acc92aacc7e5ef7ad87493d34197176feb528b1bcac61696c83b7afb2f06cae325e5912dea9bd8841c3f6ef1e98f3c46f505433499d2bb50e52fe1caa4530e71db753b2ebbdd222ed2a781782270994dfca4eca80726fe20840d58b0962688c0f575c8d4425cb4da361d7547bd2d4f40322a2b377c01d67f7b31cf4bdf67c009fba88008fb9479f9698bf5f818496f64ea085a366659ff9b0b359e0ca4a08d96947001085d0347d8f3b05c62ebcab2874ed0ecf31185c2c5973f819d172d73c3485eccf9de4400aa495e5e59fb9ecebbfb0d44421d7a3966f515b9cb7074663c3dd28029d6d3584e3cd089824db46cf6f2c1320257abc4145c0fb93559d92a4139109111bf796a4c3c470568f45b8dbd0c9eeffa60cb94d4d519c91d1cbf0ad18ebd44f81fc763f057af77c420b5c2eaeaa55a676930e234761482432777b7134ff080af8f5b9c54ea5635b1540df7ca30e15e8e4913fe91702a04c4a74bc59c01183f91945c0905bb6811085c72d4041b4873cf38e05bcf583661211d757e8bfb5b48a168ba6c457a6947bb2865f7e620f458187fd8b94cc40b7b3bafaa156ad61a862961a0431fddff8b1b87311489a1d9adff2b011b432a0179b1498557a52b56939f2a9ca4d469442aec0c04c452f98b0db1eea4403c261bcc1baa07e462e2a666a51d2b97628801cbde91e13cb616069d09df406c3ed316f2339dafa375766823d2626369f70592f7d4f6e0fb688831d8af72bf93a09208bf635a3ecc4add08f84ff534aabff7de34854f40e9d51f84da8444d2c52cb82e13cdd5f5df0197de27841967565dbedd7939dd9aa725b5bc35549969df11ef2f47f8f4cd4969ec0a83635e6e6b48c866c092926de33d41a1c01588e1ec781428845a7f516a049803daad2c862504f61c7f7690fa9c3938c4dcd7c7d5ce45d91d8be09e8dd5a1c27c77b21c1daabdfd3b003f622b51d663aa558748ddefbf4b9fc8a9d022545282b0201ebd799ecf5b7afac10a2834092372d79ed23b7a75a51b722d6215cc7c1af34fd1c29d5eafd26164d6a31327db09a2a442f8f60fc7de0e0d94f7cd497900a561860566a2c268b340ad9df1c6beb1d699c02f48ee45d22c85bfb947399731e6a849a82c3dad43f4d43bb5e360e3e6dbba2b3ade52cfe43026fa8bd51b19bcfc3232f01fd780ae39f4a9bb89d2b4348c4b6f3f3ddc9ad704cf54821abad800b75630e8e883b1691cd1d330b91186c1240e86eeffcb5b0c2efc18781b34b9e900cb8fa99b7963d6db35552208f06c2d3d54a6b7c22cd81d1b16b25eff3cf852dd9dffee842e3176e91a27b94c842df7244e232f8cc6383720416cdd02c2df4a6c536f0c5f2c90507acd314ccfba93149a1981a2328dc6d08c740a237b565c960891010bda34bc2111ccf19e8132144de3a6de2c5473b0fb8ab55e889e5396d5e28661ef3a01f36c36a1c3c46f30c039f6adaa0d5d671895223702aa45d065ea6893f7d3ea25e08e4185a1ba0e94d3fb5aa3fd6d123bcfff83f2108158da15c4cdcc28c4f6291b62f825a1f85d06c287b11480f40483d68907add6db2548ec8a7e1a4432ecb34ca636e1eb5ffd1022779db8dc1b567981e22be2fcfb40cb0c81bba00ee8dc0b934939c5e78933439a4622662a91231faba18b7dc37513582dfc37f0eb398b4e009a9bfb52eeb5eeb9555c57f32e9711e61e8ac62b2055ba1e454329a41144c3a41abc61bc09eb7ce65d68f17ceecfb98c4730291bfa675b3c304bd6d3b39c324f062da4d6639df95fcd142769f8dec79440b3a0861eb275470c8e224a9f4f5605695ea9911a650713f4defa2c4519b83d09bd4a9be78322eacdcfd58031a05010d10f7a1eb8197a8cb4dfead30bf532e5619d37aea762200bbafb043387ccaf587a9faf05f7acbfe8e1e938ecc4d67d2f2b9105f86c8383fda7c415a8a39e35d03cacd2725847a29c2a74198d0cbc9dc35b0ebd9c9510829c8c1abe4c5559441b0a7b606945d9ef453988c7f18a29bd43c39b2a85d0f0737207fedf117edb539034e65f5f91640c897dbb8d58956355b9358c349a662411a11d93f27505136c16b8bff6ce385083942fd9260d59b7bea4a5aa170e2d6d094a6422379d14a942d8751fd7ae8ad0077f01b64afcffb5d132cd2ddd9c9e34de61fb6d0e901fec89952988274ff35f273e1058ee08885d5c313391426a1756a5ce7426648344f613daaad86e29327d553631d6d6725ed733501cbd036380ba01d75114769e47fe63745bc83cf8d9b768e18e9be7bacc5392683c34f4104168cabcd595b72e4eb4fec2f87e04c4fb3481d7ea7446ef6ddaf4acf82683bac50f3cf66d01a7487dcd7328ec542874055eb14a13fdce1683b6b3a1fa336342781d0fe885fe8fb800b8365ee45cd48c5691704ef92d0414b1deb6c1c0285914364538493bb4ad3394f843dec689a3398d2852a55057b48cd2426d71da17c236922dd0cd70278551c8d8d7c69367bd8e04f536017fe01f1af45833c51d232f2c552cca86b693452db1c1ccfb67e7b5aa0284f1ff7945a49c8981730f2c0ae0da6cadb00e2b83a9e8ec40df8848aceb7631507e74ba1ee954948c69893721", + "inputs": [], + "locktime": 0, + "outputs": [], + "source": "Zebra getrawtransaction(txid, 1)", + "txid": "f15bfc86171351c5841f4629c8cf52b8ca5d85684c6495456940f78443a3d574", + "version": 6, + "version_group_id": 3632576152 +} diff --git a/tests/transactions/zcash_mainnet_f9369e.json b/tests/transactions/zcash_mainnet_f9369e.json new file mode 100644 index 000000000..832fd5f9b --- /dev/null +++ b/tests/transactions/zcash_mainnet_f9369e.json @@ -0,0 +1,105 @@ +{ + "consensus_branch_id": 1412952880, + "expiry_height": 3364640, + "fee_adjustment_zat": -1626064600, + "hex": "050000800a27a72630f3375400000000205733000d35330a4fb1828f97270fca65ad8e31c69f9a42da6572b26e33050f2051920d30000000006a473044022017df42eb370336355e886385b31e15117d071d5ce92e6ea6bbfbc19c11a25464022006b6531568da5b3589ad073ea39eb2bc2b4ed371a38a50ad95fcafa8931ca5ff012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2affffffff3c322052becc5d03d2b88b7ec1c833267ae21332b90cc4f959803c90a122a89b000000006a47304402202529c46e7af2598eabd72e428ecfe4abdf26c78c722e3c47d254f9738219372a0220414402a3190019138d91198c588fcbc7dd90f3c217602dda2ff091ec30cdaf77012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2affffffff45961dbe48121fc6107db279846ab8a541af5e932a249de6959ee17b71a6fede000000006b483045022100aaa4cbab64a02366308cf58b2f4faea331d89b5932040614aabd1e4ef5852b0a022050bebd318c63f1a5718baab54be7197fbe73d3e653fef069b272639d7a5acec4012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2affffffff58e2619527da048e0fa5d2f31ccb62eba27054be51e9c4d0c0137deed57ca010000000006a473044022004cb00c778e74fecb72778aabfd04880afee0285177aeb02461d915ad1ffc6ce02207ef516f8a85aa7b2f090065e82ea8764f51c7c6170908e1ee9f575627da8103a012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2affffffff5f6f88925bbe28fc1cb5990e339726da326442f3266e740e9cac00941929a82d000000006a4730440220223a48e68b387abc740ceefdc0109e0076c0d9e89d84f771bb26e00d863b02ba02201cb81d29cb7272b987d434cbd6fe7d95bb2997e2116ad2a3fe3e0caba2de9361012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2affffffff8039d19b419c8b68f99cfd7bea60b1cd3c7c9b70adf570cd9918ce07c39039a1000000006b483045022100abdc8534f702dabefc80ec74d39c71fa51a66d7b782ec16872bd067089e038d50220700cff2159428fab90a7cc492d3f6750705c95e1fef37d31d0e9ad4d96754c50012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2affffffff84081cf9c23b77d32617fadf395cae58c5e5dbf0ad03b0a190496dafdd6b2d96000000006b483045022100f4c7a65a6014f2122e165f772d4253695a835f46b329f96c7fd77ac4536118b30220259785350382a69f1252b2c06ff4a8858ce41892e51cce1b41ffdd92dd85ace5012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2affffffff940962c353575a97116e786ae0942bf413986a724250ca92706742be1cd357dc000000006b48304502210089498e3fe90cf99f5feb413ff26e854b9d0a64ed091f70d9740708d6d70f58a502204fd196a7d4616eb4fba1dc81b3a7638e93b580b1f6b00b2c78f5134bf3591bd9012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2affffffff9ac2d0c751ccdca2f22ad96a6a5c19f7067d8048451ccc30050aab7b2f099a25000000006a4730440220139b08dfec76130ca244b8e036a2d1f4fcd9922f8d903f6e61d53e393bce6d230220138df6a30e35615cb91de5b297486c5d5700d27331329cad5193416eef864744012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2affffffffa81541d2ef3499656ea38ea50c8af42777b9af22223fa3dec3715e58b76ba6df000000006a4730440220652aa563a94a904cb18b8e23c0ebf9f62b02dea744eb76acc62fcce170bf26ed022061039200671db1c5a5a555d9c21d2c006b02fae856dba920f5f8a7ab22190828012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2affffffffb65474f6993d222333a9584fed8af0e926eeec2e86cdca6add172415c597c79a000000006b483045022100b2bbe8a98936786dccb000c0c44212396211bed0448e1c06da62ccb67fe7e7bb022062130aed98ad9fc7b607b2e778c46c197baecf5715e94bb768f66b561a026ca3012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2affffffffbde09671bcb79fc67a8a919cf725b538b34d2ffc50beb9f065701b113494bddc000000006a473044022022269c6062a95ce66964bbbc3f4f894bb999e4af4889e5e57339f7e50918b1e502203f08605e263ae5512aab3b38228e7e1b34ea21c93d4eb79cdad93b984f90c054012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2afffffffff115296314c76dd8ca7d051a1237ee95fe0ba5674c6968bb749904ccb19c90b7000000006b483045022100d70be4ed4a1defc295f6eb9d3917102fbc95d10ebb3e4b18a182fdb47e394fbb022047092b8c9292384d9c625d140597341d700d5bb747d8d9c2827a7948f6586d81012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2affffffff0000000268d1a66d89ffa751c68ae6dff51a951f45109b688bcb0980883c03f309c03d999dcb778ffe55fe7821213d86928c608f0c857d08607e0989fd204d77f94ff311b537d9bb01bdf5687580edd4869737a8be7b708c4308b785390799aed57341a8c3bbbdd10a8ec7af4ea674071edfaad8913f25f17a1f2a597951704e56306b0389d0002c1c243a005900dc05086719aefcdbd66238295f30bc9d9f4fb32d1a314f5c13f3ddc18a6f0eb5434c35dd98d3338a283ab23e1d6358eb829aa2c006879036ebe60648327ddd9914bb065fca5945b6b036bdc18c44e345322d6721f5c01c2b09827b1d97a1a7c1bf02e9e2402ff5c35ee84a42475a37e82c6a5506dd54eae3f4065c7d63f0250f08179b8d2ed5031da12cb5d92e9315e1818266fc2cda4abff478b96ea2574eaebee8d1082e86dcacdc2b2d67412ac20b08934665be7778c7490a461e935c20cb52f46b6216bfe4ca4cef25573186ec51d65511cdbdc603da18eb30939c19494073049f3b0c60513d567ab8ab8eb39d44cda9ad004b2f3df3f40ae88abd9166ca129f493402db6363e6ea530f28f83e858125683d588054bcbf4926a7a8883f2bc324823bf583353c4d126c8f860605dd280cac059aa07822ecca8d84591b8cf1bd2290b5452662c8620b356e54935eea8de52396de254d8a4b6b2e1f34f63693647374b11aa27f2c63dc553460ccc33e20fa57c1bbed8d499cec58a424e35867cab1e765f1e7493ad9ef6ee6dfd1f06aa9f647176c521a4ffef561906019f6e095144544eba0adf519ebb1dbcdad20030e6e030b71493ccbfce0748366cb49983ccf0e8f78cfaafc11d029c70843e1f6c8c0559686af36f9adad65b8e5ace644035f063235c653be8ac58a851152e455ff09c8884b9726d718f180993722b0e86ece3dfd2938326d0d1a67ff69702de57b92844a5a0a5c765845fb5cfce1fa63dd6d23ddc2f9c7498e12b76b7459cbcdb667c8d5c157219684f153ea06a35def91672a0f75feb718f9bac4f2c5b7146d16e219b68a8ee9b8bb0be43dee3fa19cf22d082d04d7078e914a2d19fbb53264a0192a78657e4387af65d2aa0ce68c3787f68d38c5a624308df950381e228ce8e499d32132a0d3d46b32fc53ac6a7b7cd504117c03e1278e78f0ca9a503362e44bf3101d497d6fb4b7ffd3aee594d690db911410b4910edc883439c6440320314b2431653240402487e6356aeb9f894be14e0ceafa17568e731a14519dc8a36dee284e05a537cd8f03b2e1d30f099b3bf7a2009d625fce6cb82de845b719ca5f1bf306ab50835453e912cf32a580826b37cbbf3da9722276662e8e7b04da47534e493f24f5f013ce76bdcbf4ba4c3af077d8a9ea3672d0bd8d8c5afa3da751ad632f4670d5521f7f8ddc50a72f4ab840cb22bbb8927646cb5c15a94f369bd078e96d4b62617712062e4c200bac96aa22c2b9356b75671d02ce674360d2c85d420cd9c89c3a9d1644b83d341903327a7d3c75d12a62a0b259df54fa13f3c9f78ea6daea3977f0f8df5d6232848bbf76334c1d129b82bcc742ed06789d4c2fd97cf0cf8d5f0967aebca1661b364d44dd5fea68182b461224157e8ef7aaee3b9529146e417d0391653ac51e6b9e74f8b41981414fc1eb1a57026f19814348047e444ff5dfeb1116639a0bfc5ced4d6246533fab8e9e6747c05818085862d3c34ca57aeaee7639c6a816374a1d6a59d31f1e373ee9779ecfc2d0ad41ddb015f7eca7a7b84c88798940eb1a98ac7e23e6d4244340c3cf943c387f3701e24eaef509e58217a0e909b1f55250899a174975c67486bda129db6ec3e1f80160243248ec86fd2c2b30f5dbb5adee550e1bb2443c1ac0b32eb926b989d84e1c1fdc562789d5348e59ad42ba2b48450b136c484f7e62ab2147c36197b462499c75bf09bcb03c42620264d05f2689a026c1d5b5b0faca8ba6e54d00aef7eccefde4a7c28f72efd4be37d6ce4f970545517ff0a4112ff915b87625ddbed6e1bb96449d93b7f69601d9521e23cec1aef560d05bc1830f0f4393f038738a12571c6b587c9ba54663230942b08f3a07ca2eaf0307c050b1a4b76c3ce41110b36ef800e992fb6472bb322c0746c1aca4d2fd54df6d7e0c8ef3d13b910da39b9925abb7adaaf896e2c9911ebb8370d3723d9e7a20d914669372293ff41597e8e37bb79cc099c371d45927171ecea243842720e03a9ce53e609ef549504a29cd10c5183e7af8dfea3847ae5c441ff578bfc7aa30567b5a649cf56276903d27a8fdd7fa4250977207ff3c0725cc9f80f0ca4d43168088687c032839149fffffffffbe190282db8b8050c8ce8854296dffd6516480e96691a5efb45a88f3290a1b25fd601c4ccaf7676110a12f09b81fdba3a83429a49dc0b43ba78e1f0b5b9196b816ffb7e37ee0f1ed5938d7fe9b11e10c602156e993b3074f62df9321de26ed5e9a790c33d83ee0b540a329a0cd1ff1b6d0751229c462ce97409576929ce8c27da6d68aaee827ebb488a8fc683e0d944e9de2fb9bbd42082c57de25e54d37b3f4b3249115474e43689716a649c85166ee03859c26d2fa745a430b5aa33a8f8a8d84c6b4f14cb9f5f07befcf6fd0e403a63c9cfa86f4261d2508522af8b6bd90a3d0c995a05f87ba7517766d368e5191f1857004aedf32092c5824bfe8c433498a82e82e6d1ce401bb6d8ac9efe71588059c5eee4ae5e9871db9be3858d0f7bcad9a060dbcfec0df377864cddae26310e88230be8d59c900dc32475874d0ee436b204b06d49572b70cc6925d6ed9964986d1bfd19d931af5ca932fe44cc5931794bd8db4bbb280badf7eca7a8d2976203ed72d565d555ee6c3133bc532171f42b997b29ef2688e0344e36d7c76f8807d11ec35f4dd4f8d8bbaca0a909cc41b3e5fd1ad2ac0f60b061c412d3dc5ed07909cdadb1ee434d7dcb5f0ba4ac3130018c1b0f08265dca00689267f8ca7b1503dedefda4aa4e8c72de6ba261bead1519821c3282369c687dac02e5f683e2c56245b2c06a85c24247b4c6a1f2c0dfc1dc174b2119f31b6e2af26a896a23572c9e6680a45ad143193c8a4ad9e5672a2bbcb0f747db003163186bab5ca568aac9a563d24f3b9a0c1536d57ae86933970076b1ec9569178d3860b6376b93f99820a817389a1ac11b375e5fc87c2cde7cfe7919551b8bde484545876a4f01a5ab5ad4b54237ef7f70eda6bd4400c5dcfdf180d1cc9568d3c12a855ed18152808baceb3d7bfa698f1972edf0bd3aad782a9abf63e4631bf0639910a3ac623d33459bf1cebe572024d3084b75f9bcf5a68f7bf9968eee997ee1f7dd3829cfd15cca7981324f773b2fc1a06e5b94dcb84c6d01b8c9e3707a6b07503fe18f232faa3f123bcfad1fed3f80f967e8706651f6f4a1bfa6ccb570b9aa8385dadb8cfb11deac5e4269a7fed9cc3dfacb4a4eeea93b8c28767da312550ff466bef22232b3aa291738294f830f1f73445e25f1817720c5df1597083228836cd55303dd4c8889ded2cb78b892287f167cafdc3284e99ded4ac415a79bfbd9bbaf8e69d277b9894017db8023906cb560cc8071de083bed369279fbcfa9feca5a9d61d044eea3f9ed446ef8323726cb2a7486b70825d3f3d70cdf183982a40be25f91e36ef12db0e30f48d5d83bd47ebeb719dc3a9e83df20529e01c4600929861c9eec01b25e1e7c0a28a2dc15213cbde198e102489b09f7016805af7bf0038add1f5fe630cd7de31a8f46df3aaf2cb7d4134ab65d9a80440019b105f1f84875f68cfe6de1d35269fae6552d5f64b79a5ce5718e2d5bde0e07f4a5e6f2237d5f02313e22804bc0e2133a337ea5bdfcc9d7430547ae9d466b72047c46a99887c6b2e7f58819f75e087f1498b689fc89f8b2906ffa5a9cbea57e69d91019413917beda0a543d62c7de24f583cf7e542ec5cd3b25630a4dc28167bf5d82a31c9b2d8e14af0d931a784ff54fe80441c407f185ee30210309fc78f753dff56a3648c81246a16eb0f49be6b407057d0cb52d147146df76a1ab41557f21422402c9c7ccc9098800e1186a9194dc0358819243c5d936d4a5d0addbb7beeec24aa0f3459645a2a1864f38199ba50e1730b5afe925e9c9475f4e1e12b4ac4cfeadc8dde031d792917a030b48befec6d93bc389e54afbe818783149fdf2f93f7d75d2b5f66977ef876e91e805d7f477cc5a2a74f94ab034d2dcdf4cf4e92307ad30f9644295f40b0e0501efc676318a807ad494f791339e0949c2b17a47746c96b530b48f4018813e9df46006c38de9dc6980178d57e582e8a4e35423dc90a3a083b1564add2143687cc00293101265200d0d8e2dd98b77475ddadb1d53b8ea581c51e4144cbc93d47559c526b7c417aa5ed34378749556f2861299f1ec58fabe7c98b0f72e9d8e56fb9ae6a9d8485b8786ec8d3defa4b522264858580e452833e2b9783a0dd04e8d9e1eb7297cd3e816b98f93afc22b11a7561bb20a94750f36d74815bec3cf541868d4c73c99efb9bc6b1c26b19203ec8e1197a09e43b79777a22b3341d19b79bb1f53b52c301787d85978ed04cd7fc65ea22881eaa2bff10a0c69b17206676a53a10bc48300f24a0d67593dc1d1fde1227d07501fa1b8652d2f63340f8dd4a1a641dbe1eaf6cc1ddfc933446d891776ffd76ae45c7f923251c0c1ba4e9e4b19534185d7a6b6ae4672979663d7dc6eb5c3620dc832b5174b571b724aa8b7eb3dbed7075c56fbe9652ef9276e78f0ce098f8abea8f00acf7427751b330c39264661bc5d71b4c1569c73ef468ea2555d1184636cfec018cd5c094fa390efe09542765d395ace0fd0cc446cd05f343279d74a608ae6b38697e7be500015ac4339f5139334ed6889c581f2b24bd02d6a30d4b16416c2de998301449903935bf38d4a150ffa29abd04489389a8509c8875c1a470c01e72011aaeac31341b425897b3d31a0091c504b084a2235e749982f60f5e9ab9f4ceced76d48c999248572e518764c40cf8d17503b8b34478cb426d0e6fa7f60abfbde6c4c44ec31076bc1dff1892aafd608b66f12dd9070372a129a9d5a43018ee3ce3ed7a20285386d80b12771cdc9e372a5df831ccd8f6befaef10b7277a978fba020f2eb0c7503bc1980c94aabb3648bd364dfcbb86dd22d7beae757665db9610fbda4c8a2a13d8cd87aa00ce08daa14ce889c318cdc3c60a9ecdea877e5d2dd3273d80da2151e2e54e3e11abb312833003bb4f9ba033255895cd84275631db6dfb4995b4e0e0ea9e742913a5ff60746c18486f870f266aa0b8436d6cedeb009b080eacf456f123b3336b333be5ebbbf4579453af1e5895371d427f463de8ecbaad38dc4197025a6e874239913f63d4ed2f0b0daf646384a094d3029fd7a2d0f01ff12888a593de3118b0dc67c14d715427642d1990648618996cbc193ac7716befe91fd3ad10c5a53183cd74b3c3649cabc375e8f4cd6e54dbabf68db696c632d4c3de8fe4832406bf0aa2177ce7a45cb37a983532e2574f968c5bbae5f7d573a9f43c7392f0892d40374613c2fa1ed6b2c0c049deac6331026ae2517adc75fe5b5da463bf8348072a9a57d185a2e12b333aef617097bc41b230e432c5e3eb1dbd44908bb6203816a410f2e5d4503d6c37ae064ab950e4825884331253072c2b642f8c341993c308ba95101f612550ba84f5f05b8086cfe06bb4506134d9dcd0eefb3c9fdfb28f62304e9587ce5448c4a7704aad5dc78085a37883ff5e962eb60507ab4ca35101fba6646fc76bf1f7b26c85d7869cdb32e686f6c3f01352d56620d3ff75fa502a437379ca37e2b24cfa848ad38caec0f2b3f474d94ed982c582dfb8f3a8d4303c00a3fc4c1d314134415e6c4e65dfc84ee1dcb03899e176669ebb779fa36fc1d13e4e8fee2b0c402dd3266c7e6d36c89f097bdfae04e86e4d9fe0ea20f736a345147ff9b12a201d523510a2a4bcf25d7c4f1ff82773d5016675e596d6e9a241ef5eeb11ded5b7c963d31c1781e653d73e039cc944cf3cfd6f779d4d903caea352ec3ac7ac8331cffa4f932fa84303faed77302a42705c8c76299fa61979ba42dff1a9f775531bc2d926ad1950de8bc61458a41edcaa291681d199e63f5a0f81a4ec2f87e1c99ff5127efd5e16ab42608f6017131225f2c23b92b18c912377b19e4f25f6df9500d6ba03212fc10bbaf3d23510a773cec96d5b9aff768e0205e06934a2e296ccc3256a9675213c8b4117002cea6f23ac27173d6a2c257dba8d1032d714a87fb471bd50276069f8d4121f066b0f422f5704556fcea26f2780ffe390447acb5ef38e65002058c85ff8ce5255d5f4d38f039bb53bbadda63c514a3374ecaecdf0431aa20414c6d196a1e44de3eeb583985a4b1491470981c199e6e091a66bdaa6a98940a1977eca2e7ea34ec8fbe2c73358efe14cd51c17185407f05bf30cd361186543cc076bcf9c6723aab3b5f7a6c5967b01323c79ed891d6d20219019585a6c1906b51a51c038f854b245f2c5181250d3bd9d3efe8273284ba3b6bb2956d58b1c02c42fcaffe1f1a204615e2c4a0bc78b65a1c1dd3be9ffd560fc57352089076cd22e3a5a44fedacda198daaee328b76970418b562f2d058ed3d5859294369340350d282c2de29744f7e68971ef4445905a5a76577210ec62f250c2ad3c050f538a0df3125e974c611d84c26ba464de60b5e19631524f9e02c364bc2ba654331579a916ccc89bc6f8b0c1daf4ac0050867acc6cb426836c05e1bbf3f72e98579abb527443498cb84513ab6c030bf9381fc78b2817e0969f64a2f3ae1be9ea2ddefe2ff3a5023526f3f4220032035d6961bbc1262372ba403493282d7b6b91cb7b430d2bc2d3aef0ac7753ae32d5b8bf760a0dea30845d7e3362d096dfd03322baa274be14d1829503b11cec9ddf63b482e0e23a984c908511f14160c3140b9f1cca8cfa778de8b7bda37a571031dd75f4b49a46a69a7fd1e6f3f40779023fb85b344402d56399ff5b455cda0a548f75cdb417d64f165c65ce8177ef36e0dda844903eeac7884819145a2fb12728347c23f179b92ac4e54636b0e7cb0b25762de67e7b0b537dd27e160fb9f44ac05e086737147d8361221b8b02a1b80b449f19025640090fd63072f9289455bf4b0deba3cf60e5a35f3ec58c93f8e29e1f664773f36b8696b75ff79340d872d49b30d260aaf0d4987ad2b4b9c3ddcbb49fb047198a53de4e066ede4422a48bc89cb42be62da65cb11b579ef113e0e76b423588df7e1688ab12c9013a22cc07ed8881936eb6fac57ee6a2a458805a400794e82b676e4e14e3bd020330a5066e134ee4daca13cf0c22dd90491b63c20d31f207481b420d41970fcced6d848ad56c0758f1cac9dfd17a927c6672603c7e86097f51bf5886a2ae375fbc1562e29d1c435565c241c3f06894ba021a6165a1ff7340f64ff6300d371cf63f92cf944941d75455a551c51cae67132d57c3076c1e00b0b1f3ed058bf4c3b0df4c6df38d18b9b8e896d27453079c8b691ef2f47d078c719d4d636f139030c496ccbb9e874619b1fa4b7644b79ef3cedf22f1891a3740c932c28ed8194f64e245e5ca810a3f932cb98cb7e897ba985bb736731435d52d0233addcee8870afccd8ce45514763fa79b79157276860db860cf9713c491d51cf0e446034aa65c24d3d4c5a55f92e3785115016601a0fae2edaa7721b384e71a4dc854c8dd2f3736d4276b4bc72059009f3951828875e675f4a9e308d277994b6fe25dfce59aee24ffe26a2bf3a80ade5633c007a40fcf228c4efa39ccd24dbbd4bb616c87c1be4e8c8f9b8e4d0284f4a1298f7b062d00c7650c8128853f711ad6059c6bf356f7b9bae00abbd9f103fdbd8ce25967eb0eefd3b4213b84c27e62dd80892d669eb2440fbf56e2219f8cef26925d492b6811861e09e30b88a6940858ab8a7b2060c53aa61b090322d1d8472432fa1dc5b1f07626a0761099f9a675f52ee659870dd8a87ba8afda54fb08729621fae7738dbd4a8fda0d13dc133754d80f9b788d0182fb547fe95ab088e3dd57aef31c192cac0e69095f29d99df01f108f2f990fa2d162cf5fa2c001219c3ed5d192bb6d1c8345a9f0aa1bb9720689ddcf775d488ef5e8c918d7ec8051b9ceb4083738913a826b3f941f1fa40c1553922ad472253ab22a65ba7ffad25f177d8be8806b661c089fdcce862f7918a076f64eb63392a36e9a610e62654403eb98199aff2d5eba0baf2cfdab214b05353e01449216064e3794a3973a9cd37f944893fd2808e4697248716fc93abe372bf5ebfd831d57fe365bbeb85c57634fa99fb7db070c3219b599973cb105f4db35a2b7402c558d0aeaf76b8552f3fe5b13947ab399f536e4e23589699c1f5460dc963709db89d2d7c1488b32d1e15d6b16d8a92bc7cc0516634cb9ca1c26bd0213575d9e275aae891dc98be003bac69b002693ed3c74f6d6e302b0aeb326e0358b14957d452ab6384f8b40193b1d19e571e36636051e496c5b585d6d5f070781d61e8d6d04f85084cd7b10c998c98ed1451f8db8fffd270ba9869ee55a1c08c5e0ba82be9d1bf1a127980eb69a6d3c9082114166b3ad2325b159903ee604c5c7be3597f7d77a02b6d035f5906a6a32180e246bf96b4e26e53593e1a51e367c431cf90d486b322194dd1f20ee33bf3e4ca01610adcd32119f9ec85f00fc3f008bf15ddf811ad0a4679b5c7ee345b06a7c8651187e43fa234f96b8b984c330565f3fbd00d1af9456c40e467211fc621364a16f66dcf5791838b75f82ef2e135775b2ef66b73d4cf68356681504d987d8e97008abef8205e7e7eb9f44a4ee2ffa04f5adf0038c6cef42d9f559ed37cfa9a709d1700e9cf45639f75e61c44a36819ee88260f5199890af6f4af9f787f1ecbeb5482800852d5a0ab1d1df30f435dbe1d006e9a15999970ea9eb41b10b93a8554dca18a5e2071c156c4f93bb1e312334fe5bf97abf5d5d93c497caa9ee7bfc845879820483aa480ff02bf98a191bc09186a3f281be736b5607f4e85d18f3b6530c58b7f3b1e01b4642479fe8422217558c5198372667493f32a6dfa8db2d97e37f2edb5c2c30e98dbe7c50288717add3c2c8ab0f81014904c3bed88cc74e47ae7041789f2bdd81a4a0163663932284ae59a0c42e3f2c30cd3bd192d721d3559c3e9f956198c8430b68e397e8ea0fb2a1641440b1f4d320525617e0a89f5e6ca84fe9b7accae5f16aa87206e0f20fad21780b189225f95e0abf59493788bb1939ed799ac27a6cd781cb05bb3a302bb1517ac7e8fd3d4fd519d8c5d32eeb1ffaacea05408c91196c00c66bd49bf538cebf66eb65bbaf20e1dd58c56dcf37626b151972d701e9e614f589c0f98cf511045525a21bc744ebf20bc2b20276c0c34e3ec3876b99d24d44bda37384ecb703af398a46edfe1d63113ccb7fd9aa243737351ef2b8e40c90d4342c7aa0a47528868d6d10ad1ba18c6b868848be95d33371e8677afbdc414584ca248478df5b13aff3d450a04d1bbb75a3da845da4eb35a81612fbb416150a2bb8ab75bc090a01aaf4c9e9d9919d55e7167e0ae53fb04f683cc745046f7bd429d758cf895d4603c83474c533e6ec7e39488fa85bc90f0cf59d6de1260e11926de81e78f42b1b0d2dc395d183de8d65de680ae8f6707a3423ed82b912d9d60979cdffdc33fb0135db6a4f0ee9d3b34202f50b9a201f9736ffeb9f6929dfe3b60e9978ba65d38c2667d5c2eaec110a7ed797b6ee0c80e64174d9cc123ed09b6de30ff61b92e5463dd54835f2255c36d957445c427cc72033af67a0dffc9245b9d0f69373fe0901335a5a6cfc022f7789fe6e4c41788d9684c5334a51de5027c55667c795b420b1064037ca5e0283cc7002d33d8b42c79167a9d023497b600c74526af998dc1c5708ebf369038c252f7977892cc87fefae46a39052c3194b41f7214f84f1bf3f260293cc9c880bccc00aa576f867fd4d78eca999befc8bdf84e4478af280a470bd0f55fc7ce565e2859123aba440a13a0471b510b09d61fbdbd63de01d8fae5beb28b87afc03698133294f4e974c53cab0526b58bdb4c4ca67d172830eda84993625562e1612402cd5bfe20f319a55bdb4e356adcbc8510b844dc2d29d0d688cb008b710b769c710e017b476f6449e1c2bc6b37ca8af35c1346fad0e7f2af39458161f314f875795ea06e6e86b5d43de770d0a09e8e8886f0ee104fb1c657c9dc6284419fbe8b74bae1087f9b23df802097c1e7f12c941c9966e68779d01770a8c3b2c13d8dccca6c0abdd67f1e19508b0a5147e0559e72fd02cefee828a0816dd26a1fdc4863bd20db2ff9b14aaac0d111eadd20e75361740015003e8570217ca1b49040ce7039c9714248d26798ca818588cab47f5914a74a7646bfaa52e4aa311403f4db1140e7ed58549da3ebe620cd945a30573de383ffdf7beb5139c235a2f8ade1253ad7c98063cf3ac8f99c442887453316f9af0a985244b2814d844cd2d514c731bd4b6c0ef7a0208adeb2554dbcb09f94996cb6163a3c923ecfff0651116b4d0aaf14c55ccfe38892025a9251b0fa41969c829cf83c4328f43454eb63cbf2a6e6f1fa46e74326960dc6141a2a2570b3001176771da87e440e42c0fa31a4191d89faf0d444397ffe0808a25bc220bff65c10893a6e853ecc03ddcd21b2f6f0aa4dd1119cb0b4db25874426436f6d4f0d3efc73e51ca9beb9da6611adb014648eee3a8b87c721e78456349afebab4e69b68e1e080c60656dafd9f6900401be68d6e1d6f8b42fadb08ec6bc49bdda5f5db652bea187498f60588afa7b042f45ca9f6d8deb515d9611a668f7078d74bf65ea4c6cbe9f391472ebe505c2932d6b93895b686871877eaa87bbcc9475a1f1abe4ed05d781f79ceb8e11f6c20e34b200ebbf5067e118f743499718d00051dc48e7d25518c8e199d31fae0742201173172aeaf430934a3d086161cd38e132a65e93c245009a587b77ee79bfeae52da7f9d13fabc475ec4d28bd29155bec45de7569a03d495fd1c317d78f6b451b187a9c512df2e36727e19f134eb36852f67f2ffdadd852b1ccf4502d82ee9cbc2725d6facaea37b246411d805350740f774e09e3bd4e566c162f167faa37545b378a3922924516b575479d6ef294dac6c10f2875dbbd0e78dc7ee2bfb107e47a03d702aa601a12f437980ac6f3dfe599a9006fadfafbed382fe26476b79f1078385b76086b35d1cd53cf86fd5dc610f6adf81e19c4ae537ca27efcc6f2c7a48f2c625a7ba6bf275bb32378dffb53d8abe88280d94ff4c9b8841aa733bca7f8620caf34bc776a3d3df9079d04d40d4800b3ea631a712132f707e964146afb894428e06900d47625cdf116fd532cf4aad20394f3a34c25cc60085ed369d5efa19432efc1a1e80d00c304b7177d922dc8c17fd4968e22fe9483b222fe47ed005f9d112ef17f627fff6d530e01c051f70909967671c325d8fd0d34661e4b617554a608951559023f89fd97edfbc3c18607f4509e16ed220a98386b320b8a1dfeb5cb08ecb114bd1cd8d12440b0ab59c9dd44c0c76847145cabf06a918fa707fd3860351d65f1b8f4ad1e3a5fcc98d4b493c64071615184d4113f556628946f6bfa5e008599bfca5b1438188b0a65fc8c68152641c579c7ff0f2decd2beeec75410e08ee21c0feb2bda6eb9b235ab653f812ccc1a18485d2cc7ce06e9cc2a769be7a528b8d4328731bd37d2b72f9c2c0453a1839b99fae7a560eefd41f4a0b519b300385fed423007c18f31af490de024a9a7995684396251dc59014309b825d8d2be29d14796fcb85a629ac4e5a5caebc61b0caf66c51f08beafa276e4638e7bb9833268a3a963f6f4ee3b1b7f6e9aeb77ee5602f66d034fb50049545679035b5046059c77672b68a61d64fca5d787a281efcd4ad95402c5abc334e31ba7821254a49b73f10c3495cb393802a34f52e67e57340d489be535b51f8f7e41c6845eb26f98436608c1abb8cf583a4362d6fc5f645055e0ed4ccde281dd6e36b288991b9eab13aa2a3cf93fddda013398be181030206a9aebc5f1772e148da8f1af883d5a3720e89eb0d58ada4b92cb99df527272fb88e357acd5c92da2bae686a24ed58bb7daaf2f3a40bc3273e0d3220cb4f549b11347a96f7cea9da35dd89410f50ca582ecba1d5164cc566a224dee19cd7f23e524abbb833556b8796b2aca7485e5e287a5cdef79c549ce07c811ae65927d81d1797b099c2de410ce0357ffd77e3630be1366fec4d84474401747c4c314861d829d98301e7aa7ba4fa9f3b067887b159c93889155aa8a4d75452c91905667517612e6d76135ccb4557f659d9a750e57105ca1ea61b0d92ebdb388aa6d000d094b634e4c66eb0680bb927cf7c447f0a70ff137da9c7daf3bfa7e85b894e56b1b02eec5f270ac3b5aeb4f635c67db8686312d82fc8c6d135f1ff0f5b16fde6594f3ba16fac6d71a8cd3f1ce152ae679dda919875983ced0634a4d013261cb6b9fdb78135554039bda2bd78b863cb20296b6136752c8adcade05c233b0e716a985cd85f7e83a8ec35232a5550ad76aa6e3146937119990cf8f1c51b3ee56201dedf22259b653f2a87198ee28de4f374742142609e3da12c16755546b388d56a5962770ca4fbcac29887b1941efbd0e5877ad25b539eb0e39e4aedb5d077265d2a7daf3c62b62d62be8f37049ca2530df6612a8322bac0414ed191c41a3689fef8d8042abf0c951ecc59ecfb377fb057ada050698a811a52ce14f8f9cc768086866430be423ee56892fddc87c894b1b24082fd6dec0f7ed99b7032998c34f09dfd760a0ba3a20eecd031fc972f419297643aaec20e56ddb6ea333a4fbf8a7ee1127514e9b17cfba86af18cfb2f60bee718704", + "inputs": [ + { + "coinbase": null, + "script": "473044022017df42eb370336355e886385b31e15117d071d5ce92e6ea6bbfbc19c11a25464022006b6531568da5b3589ad073ea39eb2bc2b4ed371a38a50ad95fcafa8931ca5ff012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2a", + "sequence": 4294967295, + "txid": "300d9251200f05336eb27265da429a9fc6318ead65ca0f27978f82b14f0a3335", + "vout": 0 + }, + { + "coinbase": null, + "script": "47304402202529c46e7af2598eabd72e428ecfe4abdf26c78c722e3c47d254f9738219372a0220414402a3190019138d91198c588fcbc7dd90f3c217602dda2ff091ec30cdaf77012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2a", + "sequence": 4294967295, + "txid": "9ba822a1903c8059f9c40cb93213e27a2633c8c17e8bb8d2035dccbe5220323c", + "vout": 0 + }, + { + "coinbase": null, + "script": "483045022100aaa4cbab64a02366308cf58b2f4faea331d89b5932040614aabd1e4ef5852b0a022050bebd318c63f1a5718baab54be7197fbe73d3e653fef069b272639d7a5acec4012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2a", + "sequence": 4294967295, + "txid": "defea6717be19e95e69d242a935eaf41a5b86a8479b27d10c61f1248be1d9645", + "vout": 0 + }, + { + "coinbase": null, + "script": "473044022004cb00c778e74fecb72778aabfd04880afee0285177aeb02461d915ad1ffc6ce02207ef516f8a85aa7b2f090065e82ea8764f51c7c6170908e1ee9f575627da8103a012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2a", + "sequence": 4294967295, + "txid": "10a07cd5ee7d13c0d0c4e951be5470a2eb62cb1cf3d2a50f8e04da279561e258", + "vout": 0 + }, + { + "coinbase": null, + "script": "4730440220223a48e68b387abc740ceefdc0109e0076c0d9e89d84f771bb26e00d863b02ba02201cb81d29cb7272b987d434cbd6fe7d95bb2997e2116ad2a3fe3e0caba2de9361012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2a", + "sequence": 4294967295, + "txid": "2da829199400ac9c0e746e26f3426432da2697330e99b51cfc28be5b92886f5f", + "vout": 0 + }, + { + "coinbase": null, + "script": "483045022100abdc8534f702dabefc80ec74d39c71fa51a66d7b782ec16872bd067089e038d50220700cff2159428fab90a7cc492d3f6750705c95e1fef37d31d0e9ad4d96754c50012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2a", + "sequence": 4294967295, + "txid": "a13990c307ce1899cd70f5ad709b7c3ccdb160ea7bfd9cf9688b9c419bd13980", + "vout": 0 + }, + { + "coinbase": null, + "script": "483045022100f4c7a65a6014f2122e165f772d4253695a835f46b329f96c7fd77ac4536118b30220259785350382a69f1252b2c06ff4a8858ce41892e51cce1b41ffdd92dd85ace5012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2a", + "sequence": 4294967295, + "txid": "962d6bddaf6d4990a1b003adf0dbe5c558ae5c39dffa1726d3773bc2f91c0884", + "vout": 0 + }, + { + "coinbase": null, + "script": "48304502210089498e3fe90cf99f5feb413ff26e854b9d0a64ed091f70d9740708d6d70f58a502204fd196a7d4616eb4fba1dc81b3a7638e93b580b1f6b00b2c78f5134bf3591bd9012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2a", + "sequence": 4294967295, + "txid": "dc57d31cbe42677092ca5042726a9813f42b94e06a786e11975a5753c3620994", + "vout": 0 + }, + { + "coinbase": null, + "script": "4730440220139b08dfec76130ca244b8e036a2d1f4fcd9922f8d903f6e61d53e393bce6d230220138df6a30e35615cb91de5b297486c5d5700d27331329cad5193416eef864744012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2a", + "sequence": 4294967295, + "txid": "259a092f7bab0a0530cc1c4548807d06f7195c6a6ad92af2a2dccc51c7d0c29a", + "vout": 0 + }, + { + "coinbase": null, + "script": "4730440220652aa563a94a904cb18b8e23c0ebf9f62b02dea744eb76acc62fcce170bf26ed022061039200671db1c5a5a555d9c21d2c006b02fae856dba920f5f8a7ab22190828012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2a", + "sequence": 4294967295, + "txid": "dfa66bb7585e71c3dea33f2222afb97727f48a0ca58ea36e659934efd24115a8", + "vout": 0 + }, + { + "coinbase": null, + "script": "483045022100b2bbe8a98936786dccb000c0c44212396211bed0448e1c06da62ccb67fe7e7bb022062130aed98ad9fc7b607b2e778c46c197baecf5715e94bb768f66b561a026ca3012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2a", + "sequence": 4294967295, + "txid": "9ac797c5152417dd6acacd862eecee26e9f08aed4f58a93323223d99f67454b6", + "vout": 0 + }, + { + "coinbase": null, + "script": "473044022022269c6062a95ce66964bbbc3f4f894bb999e4af4889e5e57339f7e50918b1e502203f08605e263ae5512aab3b38228e7e1b34ea21c93d4eb79cdad93b984f90c054012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2a", + "sequence": 4294967295, + "txid": "dcbd9434111b7065f0b9be50fc2f4db338b525f79c918a7ac69fb7bc7196e0bd", + "vout": 0 + }, + { + "coinbase": null, + "script": "483045022100d70be4ed4a1defc295f6eb9d3917102fbc95d10ebb3e4b18a182fdb47e394fbb022047092b8c9292384d9c625d140597341d700d5bb747d8d9c2827a7948f6586d81012103cef776d6d55580ded938f386ac5258052c50cd103a456200697dccf370882b2a", + "sequence": 4294967295, + "txid": "b7909cb1cc049974bb68694c67a50bfe95ee37121a057dcad86dc714632915f1", + "vout": 0 + } + ], + "locktime": 0, + "outputs": [], + "source": "Zebra getrawtransaction(txid, 1)", + "txid": "f9369ee68d2e9eda05692777626dc60727bfd2af93ff3a18053e702e38f12496", + "version": 5, + "version_group_id": 648488714 +} From 70e6174819c26f6c2693d55eb17a9986def64033 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Sat, 12 Sep 2026 21:22:50 +0200 Subject: [PATCH 2/5] Add Zebra RPC adapter for Zcash --- src/electrumx/lib/coins.py | 5 ++- src/electrumx/server/daemon.py | 65 +++++++++++++++++++++++++++++++-- src/electrumx/server/mempool.py | 17 ++++++--- src/electrumx/server/session.py | 15 ++++++++ tests/server/test_daemon.py | 60 +++++++++++++++++++++++++++++- 5 files changed, 150 insertions(+), 12 deletions(-) diff --git a/src/electrumx/lib/coins.py b/src/electrumx/lib/coins.py index 46702b23b..42932c59c 100644 --- a/src/electrumx/lib/coins.py +++ b/src/electrumx/lib/coins.py @@ -50,7 +50,8 @@ import electrumx.server.daemon as daemon from electrumx.server.session import (ElectrumX, DashElectrumX, SmartCashElectrumX, AuxPoWElectrumX, - NameIndexElectrumX, NameIndexAuxPoWElectrumX) + NameIndexElectrumX, NameIndexAuxPoWElectrumX, + ZcashElectrumX) @dataclass(slots=True) @@ -1397,6 +1398,8 @@ class Zcash(EquihashMixin, Coin): GENESIS_HASH = ('00040fe8ec8471911baa1db1266ea15d' 'd06b4a8a5c453883c000b031973dce08') DESERIALIZER = lib_tx.DeserializerZcash + DAEMON = daemon.ZcashZebraDaemon + SESSIONCLS = ZcashElectrumX TX_COUNT = 329196 TX_COUNT_HEIGHT = 68379 TX_PER_BLOCK = 5 diff --git a/src/electrumx/server/daemon.py b/src/electrumx/server/daemon.py index e02be5c75..d98a0b119 100644 --- a/src/electrumx/server/daemon.py +++ b/src/electrumx/server/daemon.py @@ -158,7 +158,7 @@ async def _send_data(self, data): async with self.workqueue_semaphore: async with self.session.post(self.current_url(), data=data) as resp: kind = resp.headers.get('Content-Type', None) - if kind == 'application/json': + if kind and kind.split(';', 1)[0].strip().lower() == 'application/json': return await resp.json(loads=json_deserialize) text = await resp.text() text = text.strip() or resp.reason @@ -229,10 +229,15 @@ def processor(result): raise DaemonParseError(err) raise DaemonError(err) + payload = self._single_payload(method, params) + return await self._send(payload, processor) + + def _single_payload(self, method, params): + '''Build a JSON-RPC request for one daemon method.''' payload = {'method': method, 'id': next(self.id_counter)} if params: payload['params'] = params - return await self._send(payload, processor) + return payload async def _send_vector(self, method, params_iterable, replace_errs=False): '''Send several requests of the same method. @@ -240,7 +245,16 @@ async def _send_vector(self, method, params_iterable, replace_errs=False): The result will be an array of the same length as params_iterable. If replace_errs is true, any item with an error is returned as None, otherwise an exception is raised.''' + payload = self._vector_payload(method, params_iterable) + def processor(result): + if not isinstance(result, list): + raise DaemonError('non-batch response to batch request') + by_id = {item.get('id'): item for item in result} + request_ids = [item['id'] for item in payload] + if len(by_id) != len(result) or set(by_id) != set(request_ids): + raise DaemonError('batch response IDs do not match request IDs') + result = [by_id[request_id] for request_id in request_ids] errs = [item['error'] for item in result if item['error']] if any(err.get('code') == self.RPC_IN_WARMUP for err in errs): raise WarmingUpError @@ -250,12 +264,14 @@ def processor(result): return [item['result'] for item in result] raise DaemonError(errs) - payload = [{'method': method, 'params': p, 'id': next(self.id_counter)} - for p in params_iterable] if payload: return await self._send(payload, processor) return [] + def _vector_payload(self, method, params_iterable): + return [{'method': method, 'params': params, 'id': next(self.id_counter)} + for params in params_iterable] + async def _is_rpc_available(self, method: str) -> bool: '''Return whether given RPC method is available in the daemon. @@ -421,6 +437,47 @@ async def protx(self, params): return await self._send_single('protx', params) +class ZcashZebraDaemon(Daemon): + '''Zebra's compatible RPC with its explicit parameter and verbosity rules.''' + + def _single_payload(self, method, params): + # Zebra requires the params member even for an empty parameter list. + payload = super()._single_payload(method, params) + payload['jsonrpc'] = '2.0' + payload['params'] = () if params is None else params + return payload + + def _vector_payload(self, method, params_iterable): + payload = super()._vector_payload(method, params_iterable) + for request in payload: + request['jsonrpc'] = '2.0' + return payload + + async def _send_data(self, data): + result = await super()._send_data(data) + responses = result if isinstance(result, list) else [result] + for response in responses: + # ElectrumX's existing processors use the legacy envelope where + # both keys are always present. Zebra's JSON-RPC 2.0 successes + # omit ``error`` and error responses omit ``result``. + response.setdefault('error', None) + response.setdefault('result', None) + return result + + async def deserialised_block(self, bhash_hum: str) -> dict: + return await self._send_single('getblock', (bhash_hum, 1)) + + async def raw_blocks(self, bhashes_hum: Sequence[str]) -> Sequence[bytes]: + # Zebra accepts numeric verbosity; unlike zcashd it rejects False here. + blocks = await self._send_vector('getblock', ((h, 0) for h in bhashes_hum)) + return [hex_to_bytes(block) for block in blocks] + + async def estimatefee(self, block_count, estimate_mode=None): + # Zebra does not expose a fee-estimation RPC. Electrum's defined + # sentinel for an unavailable estimate is -1. + return -1 + + class FakeEstimateFeeDaemon(Daemon): '''Daemon that simulates estimatefee and relayfee RPC calls. Coin that wants to use this daemon must define ESTIMATE_FEE & RELAY_FEE''' diff --git a/src/electrumx/server/mempool.py b/src/electrumx/server/mempool.py index 7fe0385e5..582ed7da9 100644 --- a/src/electrumx/server/mempool.py +++ b/src/electrumx/server/mempool.py @@ -40,6 +40,8 @@ class MemPoolTx: out_pairs: Sequence[tuple[bytes, int]] # (hashX, value_in_sats) fee: int # in sats size: int # in vbytes + # Net public value balance of Zcash shielded bundles, in zatoshis. + fee_adjustment: int = 0 @dataclass(slots=True) @@ -293,12 +295,16 @@ def _accept_transactions( # Spend the prevouts unspent.difference_update(tx.prevouts) - # Save the in_pairs, compute the fee and accept the TX + # Save the in_pairs, compute the fee and accept the TX. Zcash + # shielded bundle value balances are part of the fee equation. tx.in_pairs = tuple(in_pairs) - # Avoid negative fees if dealing with generation-like transactions - # because some in_parts would be missing - tx.fee = max(0, (sum(v for _, v in tx.in_pairs) - - sum(v for _, v in tx.out_pairs))) + fee = (sum(v for _, v in tx.in_pairs) - + sum(v for _, v in tx.out_pairs) + tx.fee_adjustment) + if fee < 0 and tx.fee_adjustment: + raise ValueError(f'negative shielded-aware mempool fee for {txid_rev.hex()}') + # Preserve the generation-like input handling for existing coins, + # where inputs can be intentionally absent from the UTXO map. + tx.fee = max(0, fee) txs[txid_rev] = tx for hashX, _value in itertools.chain(tx.in_pairs, tx.out_pairs): @@ -494,6 +500,7 @@ def deserialize_txs() -> Dict[bytes, MemPoolTx]: out_pairs=txout_pairs, fee=0, size=tx_size, + fee_adjustment=getattr(tx, 'fee_adjustment', 0), ) return txs diff --git a/src/electrumx/server/session.py b/src/electrumx/server/session.py index 6de279d4b..7805e0334 100644 --- a/src/electrumx/server/session.py +++ b/src/electrumx/server/session.py @@ -2422,6 +2422,21 @@ def set_request_handlers(self, ptuple): self.notification_handlers = notif_handlers +class ZcashElectrumX(ElectrumX): + '''Electrum methods supportable from Zebra without a compatibility proxy.''' + + # Zebra does not provide the mempool fee and recent-transaction data + # required by the 1.6 and later Electrum methods. + PROTOCOL_MAX = (1, 5, 2) + + async def phandle_estimatefee(self, number: int | Any, mode=None): + non_negative_integer(number) + if mode is not None: + raise RPCError(BAD_REQUEST, 'estimatefee mode is unsupported for Zcash') + self.bump_cost(0.1) + return -1 + + class LocalRPC(SessionBase): '''A local TCP RPC server session.''' diff --git a/tests/server/test_daemon.py b/tests/server/test_daemon.py index 0afdbaada..6e27cf4fe 100644 --- a/tests/server/test_daemon.py +++ b/tests/server/test_daemon.py @@ -6,8 +6,8 @@ import pytest from aiorpcx import JSONRPCv1, JSONRPCLoose, RPCError, ignore_after, Request -from electrumx.lib.coins import BitcoinCash, CoinError, Bitzeny, Dash -from electrumx.server.daemon import Daemon, FakeEstimateFeeDaemon +from electrumx.lib.coins import BitcoinCash, CoinError, Bitzeny, Dash, Zcash +from electrumx.server.daemon import Daemon, FakeEstimateFeeDaemon, ZcashZebraDaemon coin = BitcoinCash @@ -99,6 +99,25 @@ def post(self, url, data=""): return JSONResponse(result, request_ids) +class ClientSessionJSONWithCharset(ClientSessionGood): + '''Imitate Zebra's RFC-compliant JSON response content type.''' + + def post(self, url, data=""): + response = super().post(url, data) + response.headers['Content-Type'] = 'application/json; charset=utf-8' + return response + + +class ClientSessionReorderedBatch(ClientSessionGood): + '''Return a valid batch response in a different order from its request.''' + + def post(self, url, data=""): + response = super().post(url, data) + if isinstance(response.msg_id, list): + return JSONResponse(response.result[::-1], response.msg_id[::-1]) + return response + + class ClientSessionBadAuth: def post(self, url, data=""): @@ -372,6 +391,43 @@ async def test_raw_blocks(daemon): assert await daemon.raw_blocks(iterable) == blocks_raw +@pytest.mark.asyncio +async def test_raw_blocks_accept_reordered_batch_response(daemon): + hashes = ['block0', 'block1'] + daemon.session = ClientSessionReorderedBatch( + ('getblock', [[block_hash, False] for block_hash in hashes], ['00', 'ff'])) + assert await daemon.raw_blocks(hashes) == [b'\x00', b'\xff'] + + +@pytest.mark.asyncio +async def test_zebra_daemon_request_compatibility(): + daemon = ZcashZebraDaemon(Zcash, urls[0]) + assert Zcash.DAEMON is ZcashZebraDaemon + assert Zcash.SESSIONCLS.PROTOCOL_MAX == (1, 5, 2) + assert daemon._single_payload('getrawmempool', None)['params'] == () + + daemon.session = ClientSessionJSONWithCharset(('getblockcount', [], 1)) + assert await daemon.height() == 1 + + hashes = ['block0', 'block1'] + daemon.session = ClientSessionGood(('getblock', [[block_hash, 0] for block_hash in hashes], + ['00', 'ff'])) + assert await daemon.raw_blocks(hashes) == [b'\x00', b'\xff'] + + daemon.session = ClientSessionGood(('getblock', ['block0', 1], {'hash': 'block0'})) + assert await daemon.deserialised_block('block0') == {'hash': 'block0'} + assert await daemon.estimatefee(1) == -1 + + session = object.__new__(Zcash.SESSIONCLS) + session.bump_cost = lambda cost: None + session.set_request_handlers((1, 5, 2)) + assert 'mempool.get_info' not in session.request_handlers + assert 'blockchain.transaction.broadcast_package' not in session.request_handlers + assert await session.phandle_estimatefee(1) == -1 + with pytest.raises(RPCError): + await session.phandle_estimatefee(1, 'economical') + + @pytest.mark.asyncio async def test_get_raw_transactions(daemon): hex_hashes = ['deadbeef0', 'deadbeef1'] From c6f63ff2cd72efda2c57aa008b93b96286e158a2 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Sat, 12 Sep 2026 21:59:11 +0200 Subject: [PATCH 3/5] Limit Zebra block fetch batches --- src/electrumx/lib/coins.py | 6 ++++++ src/electrumx/server/daemon.py | 4 ++++ tests/server/test_daemon.py | 15 +++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/src/electrumx/lib/coins.py b/src/electrumx/lib/coins.py index 42932c59c..0610a465e 100644 --- a/src/electrumx/lib/coins.py +++ b/src/electrumx/lib/coins.py @@ -1406,6 +1406,12 @@ class Zcash(EquihashMixin, Coin): RPC_PORT = 8232 REORG_LIMIT = 800 + @classmethod + def max_fetch_blocks(cls, height: int) -> int: + # Zebra rejects JSON-RPC batch responses larger than 50 MiB. Zcash + # blocks can contain large shielded transactions, so stay below it. + return 10 + class ZcashTestnet(Zcash): SHORTNAME = "TAZ" diff --git a/src/electrumx/server/daemon.py b/src/electrumx/server/daemon.py index d98a0b119..79539ee98 100644 --- a/src/electrumx/server/daemon.py +++ b/src/electrumx/server/daemon.py @@ -455,6 +455,10 @@ def _vector_payload(self, method, params_iterable): async def _send_data(self, data): result = await super()._send_data(data) + # Zebra returns an object instead of an array for a JSON-RPC batch + # containing exactly one request. + if data.lstrip().startswith('[') and isinstance(result, dict): + result = [result] responses = result if isinstance(result, list) else [result] for response in responses: # ElectrumX's existing processors use the legacy envelope where diff --git a/tests/server/test_daemon.py b/tests/server/test_daemon.py index 6e27cf4fe..10b792704 100644 --- a/tests/server/test_daemon.py +++ b/tests/server/test_daemon.py @@ -118,6 +118,16 @@ def post(self, url, data=""): return response +class ClientSessionSingleBatchResponse(ClientSessionGood): + '''Imitate Zebra's object response to a one-item JSON-RPC batch.''' + + def post(self, url, data=""): + response = super().post(url, data) + if isinstance(response.msg_id, list): + return JSONResponse(response.result[0], response.msg_id[0]) + return response + + class ClientSessionBadAuth: def post(self, url, data=""): @@ -404,6 +414,8 @@ async def test_zebra_daemon_request_compatibility(): daemon = ZcashZebraDaemon(Zcash, urls[0]) assert Zcash.DAEMON is ZcashZebraDaemon assert Zcash.SESSIONCLS.PROTOCOL_MAX == (1, 5, 2) + assert Zcash.max_fetch_blocks(0) == 10 + assert Zcash.max_fetch_blocks(3_481_169) == 10 assert daemon._single_payload('getrawmempool', None)['params'] == () daemon.session = ClientSessionJSONWithCharset(('getblockcount', [], 1)) @@ -414,6 +426,9 @@ async def test_zebra_daemon_request_compatibility(): ['00', 'ff'])) assert await daemon.raw_blocks(hashes) == [b'\x00', b'\xff'] + daemon.session = ClientSessionSingleBatchResponse(('getblock', [['block0', 0]], ['00'])) + assert await daemon.raw_blocks(['block0']) == [b'\x00'] + daemon.session = ClientSessionGood(('getblock', ['block0', 1], {'hash': 'block0'})) assert await daemon.deserialised_block('block0') == {'hash': 'block0'} assert await daemon.estimatefee(1) == -1 From 140562d6faae1f592d60c022861553c7c84d3b31 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Sun, 13 Sep 2026 01:47:50 +0200 Subject: [PATCH 4/5] Tune Zcash Zebra block fetch batches --- src/electrumx/lib/coins.py | 34 +++++++++++++++++++++++++++++++--- tests/server/test_daemon.py | 13 +++++++++++-- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/electrumx/lib/coins.py b/src/electrumx/lib/coins.py index 0610a465e..1275ffea2 100644 --- a/src/electrumx/lib/coins.py +++ b/src/electrumx/lib/coins.py @@ -1408,9 +1408,37 @@ class Zcash(EquihashMixin, Coin): @classmethod def max_fetch_blocks(cls, height: int) -> int: - # Zebra rejects JSON-RPC batch responses larger than 50 MiB. Zcash - # blocks can contain large shielded transactions, so stay below it. - return 10 + # Previous conservative fixed policy, retained for comparison: + # return 10 + # + # Zebra rejects JSON-RPC batch responses larger than 50 MiB. The + # raw block is hex-encoded in that response, so the response size is + # roughly 2 * raw block bytes. These values are rounded down from a + # full mainnet scan, targeting 35,000,000 bytes including 128 bytes + # of JSON overhead per response (well below Zebra's 52,428,800-byte + # limit). The current and future range stays at 8: its future block + # sizes cannot be proven from historical measurements. + if height < 347_500: # pre-Overwinter + return 8 + if height < 419_200: # Overwinter + return 10 + if height < 653_600: # Sapling + return 20 + if height < 903_000: # Blossom + return 600 + if height < 1_046_400: # Heartwood + return 200 + if height < 1_687_104: # Canopy + return 10 + if height < 2_726_400: # NU5 + return 8 + if height < 3_146_400: # NU6 + return 140 + if height < 3_364_600: # NU6.1 + return 100 + if height < 3_428_143: # NU6.2 + return 100 + return 8 # NU6.3 and future upgrades class ZcashTestnet(Zcash): diff --git a/tests/server/test_daemon.py b/tests/server/test_daemon.py index 10b792704..da13fe30e 100644 --- a/tests/server/test_daemon.py +++ b/tests/server/test_daemon.py @@ -414,8 +414,17 @@ async def test_zebra_daemon_request_compatibility(): daemon = ZcashZebraDaemon(Zcash, urls[0]) assert Zcash.DAEMON is ZcashZebraDaemon assert Zcash.SESSIONCLS.PROTOCOL_MAX == (1, 5, 2) - assert Zcash.max_fetch_blocks(0) == 10 - assert Zcash.max_fetch_blocks(3_481_169) == 10 + assert Zcash.max_fetch_blocks(0) == 8 + assert Zcash.max_fetch_blocks(347_500) == 10 + assert Zcash.max_fetch_blocks(419_200) == 20 + assert Zcash.max_fetch_blocks(653_600) == 600 + assert Zcash.max_fetch_blocks(903_000) == 200 + assert Zcash.max_fetch_blocks(1_046_400) == 10 + assert Zcash.max_fetch_blocks(1_687_104) == 8 + assert Zcash.max_fetch_blocks(2_726_400) == 140 + assert Zcash.max_fetch_blocks(3_146_400) == 100 + assert Zcash.max_fetch_blocks(3_364_600) == 100 + assert Zcash.max_fetch_blocks(3_428_143) == 8 assert daemon._single_payload('getrawmempool', None)['params'] == () daemon.session = ClientSessionJSONWithCharset(('getblockcount', [], 1)) From b1321bec3903748cf8595ce8fc13c8fff86c9044 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Sun, 13 Sep 2026 02:28:02 +0200 Subject: [PATCH 5/5] Document ZIP-233 v6 parsing boundary --- src/electrumx/lib/tx.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/electrumx/lib/tx.py b/src/electrumx/lib/tx.py index dbc6b3ec1..a712f59f0 100644 --- a/src/electrumx/lib/tx.py +++ b/src/electrumx/lib/tx.py @@ -705,6 +705,11 @@ def _read_v5_or_v6(self, version, header): consensus_branch_id = int.from_bytes(branch_id_bytes, 'little') locktime = int.from_bytes(self._zcash_read(4), 'little') expiry_height = int.from_bytes(self._zcash_read(4), 'little') + # This is the NU6.3 v6 layout. ZIP-233, which Zebra does not currently + # enable, inserts an 8-byte zip233Amount here. Its value must be committed + # to header_digest and subtracted from fee_adjustment. Do not silently parse + # ZIP-233 transactions using this layout; add an activation-aware branch when + # that consensus change is deployed. header_digest = self._hash(b'ZTxIdHeadersHash', header + version_group_id.to_bytes(4, 'little') + branch_id_bytes + locktime.to_bytes(4, 'little') +