diff --git a/kate/recovery/src/lib.rs b/kate/recovery/src/lib.rs index fcc8c3a4..0b928d96 100644 --- a/kate/recovery/src/lib.rs +++ b/kate/recovery/src/lib.rs @@ -11,3 +11,6 @@ pub mod sparse_slice_read; #[cfg(feature = "std")] pub mod testnet; + +#[cfg(feature = "std")] +pub mod testnet_v2; diff --git a/kate/recovery/src/proof.rs b/kate/recovery/src/proof.rs index 1e867d5e..ef812571 100644 --- a/kate/recovery/src/proof.rs +++ b/kate/recovery/src/proof.rs @@ -60,8 +60,5 @@ pub fn verify( .nth(cell.position.col.into()) .ok_or(Error::InvalidPositionInDomain)?; - public_parameters - .trim(cols) - .map(|(_, verifier_key)| verifier_key.check(point, proof)) - .map_err(|_| Error::InvalidDegree) + Ok(public_parameters.opening_key().check(point, proof)) } diff --git a/kate/recovery/src/testnet_v2.rs b/kate/recovery/src/testnet_v2.rs new file mode 100644 index 00000000..902e261b --- /dev/null +++ b/kate/recovery/src/testnet_v2.rs @@ -0,0 +1,7 @@ +use dusk_plonk::commitment_scheme::kzg10::PublicParameters; + +pub fn public_params() -> PublicParameters { + let pp_bytes = include_bytes!("../../src/pp_1024.data"); + PublicParameters::from_slice(pp_bytes) + .expect("Deserialising of public parameters should work for serialised pp") +} diff --git a/kate/src/g1_g2_1024.txt b/kate/src/g1_g2_1024.txt new file mode 100644 index 00000000..7712eb9d --- /dev/null +++ b/kate/src/g1_g2_1024.txt @@ -0,0 +1,1028 @@ +1024 +2 +97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb +ae3f321e2ba24e302542a3ecf8847e8e820f9ca1b3a6a63bae25140f215344314e1bfc9c36bf2c3dcbe94dec33d71f3c +97695f2ffbdce27015ddb180c97c48ee65a6f4f1e887143ffa10a90f1ea6a4e4ca1986e0bf270b11e703f3f4285b8f29 +807175300ad2593ade55b142020b72705a2711e53573e2587c4dbe934bb7b1350e7b808b4cd4d7a6273616c904132e21 +83e8d6b123cc80a0fcb7822bb4e6f3daf9b622f78a6f002db4f74b373c3645ace01f4a729456c6401098ee6f4fce0ce8 +8e5306edc10ff8f66416eec6d46fcede51ed8de4ff3cc5bfb22a0621082231b96e1fbb62e6e8872079e1d8d8bc68ddef +8d5c70a95235f317738369922232cd1027db73c3566e50067f098317574b6991e4aee9089d8635964f967c84812bbd2f +96fe169d864cdaf674ccb5b03e4247a3244c23483005b7e83771f7062136712374823a2d0a0ae8c32f9d411d77f73639 +af0471fb787ee97d1481588b9525317ec0c4bbf8877da2d767176061cdbf01e254c4f8a626bd120f04578cf3167da856 +853847d5bb534a2a2aa915d7d44c9cb9b946b55d7c235223718321bc02d54348d3868487e8cce9c6531fbe96b2a79626 +9245962c288d3d0f4c3fc9c74634c58019b591ce6a5f5cd9a72c5a0df94c7d99e22ad0a7315a1feaf221f4369c0bd2d0 +8bb6d4a46b804145c1de9ff9ddfff3e1fe37bdaf329e72085ff5e216e0f41c5f2cba7473fb9a11351fdf8bfedc2a5c2f +8ad6bb2b7f638845f5d9df580f39f1a0789497ae711685025bd869342209b51901ca3ffb8a245e0429f2d0d18f36befc +93233455fd4fb7a410eac2cc28e734501f21133ef5ccfa5ec888170583f506401b5a0aaf581b961c6be660f35cadbad1 +8850f03b3fe1e402ae906bb3e6390dc0e06e77ab1a4aa896aa3e97148433c78f131b1fa254da302c3d2e3eed0f59af3f +8ec2c243115198badc714b1a8cfe406b883733bdd5fd765b043ca8c6d1c0edeed2d9b06db38fe6225db0b80c0e0f09e6 +ad6aa2730c4553552581377c80a592b52186b8eb9714f56cff4f9f372d9ee9a6c5c8b2074f73a93e603ab7edd85bf3f7 +b751d13ae7929af33443b2097fc618d301a2afda4212f51d0386dddbfc0c6d132bf8bc4e3a0f56556ccbfd2be73a1c4f +a8728adb2c9c4a1715729ed9f3852a753cb5f5984f740aef1b4d02e2edcafac10a3a0f3a78e1f9843bf29f95b10c0926 +995bae0724697e0d9181f82ec28d499777765d6100ccb0d8ec1d9629b1b8f6cb108ef25857d4fd4e029aac4c53ffa47d +a36510431dc45ecc4bcb2ca6eea7c3f2ed3175462011090442e36b5949f7a52c7daabc518498b09c3aba7cd24e2de36f +986f31ff3e6f962649e05d684d257091bc6f8e231ccc9e9f117cf6d596f0b06ecbcba2fc7b65d56ce616837fedb24fbd +806dc5b7fe845d2ccfa408f0a3cc8590103251c93f658aa48e3e76aa011f096edc8f78711af4dbfa6b495377f592efd5 +87ca0e26a5e2eb6585524c4a3462116631a58e0476cf285299e5fb8a67d5f289e155206413d39c03ceb0174bb87b9d89 +ae107986db909d19f2f8dee8c4925cdc4c7da9f92b3aacbd01336a69496c7bf7b870784b2d76ab38ba87ad5b30eb3fe0 +9371778e7b3029b2ba8ca10c0e91e0b5994f20a989b234a8260bc66fcf48553206d716e32db8d896b41c1a84abec9aa3 +aaf1f0659f29b8be0b59a28c291fb04b3df6664e6d895661b15369e0cce22f3c8af9c626daa3fbf71a294158ab6af0b7 +94061db27129d047090acbe0050fc1c09b410f024b72fd7bb7d66c28eaa4651b97d4b4167e1186d97a0be55fd5383762 +a7d5369a62be255a52cd239d68f2ee1650ef894964b1b15e032a354c0695db78f3e1ee6071abb97be5441aa3495ba9b1 +8e2dac868a69475ebfad50e20a722de0c4117b5e99ac28ee97667c73e7357b63fc69dd52ced9b196e40eb67833933d3a +843d74589c101afec85b76a49cc012a5e7a8dbaba8208041abaa7951a4d979879b919b4a80a116bdab5f1ca1b538858f +a76a376c12c7b3a63ddc9228c794fcf662b816badae842db32cb789bdf50ffa2f8dcb17f7cc1c036b0ba6f8d93e5e69c +97902efd2aebde4775de19afcf03b8695a6f676346b593e3eab915244f550e3868a1168e567044944e60233526ae7018 +83a708211746a51df88dc3d7d408dc53ab984b88fa2115f428cd54322ccddb161808fe1d42395604b819bbdebc580240 +93edde4eb94fcf5ecda8e0aa7d79f193bfc36ba6563906cb4c8fe770efedfaf6fe63542342556513ad4e93963adc381d +a055f4f449e0ec123016552e0e43d00988f19aaec494b6d62967904d64cf84ee97f74d3ef20d67cecfcfe1bfb2bbdb85 +912a2a175869ac93764a693ca45233745d23f63511e8253f97cc9ca81a5a930c14da48e6c6ce0b274bdc321f32b021c7 +8af07a8d36252bc9bdbe36bfdb0811c724a1eb06c5283089dec607f4a4e90bd09f1048c51697e5a29291eab5287c8313 +8201813c47c290051796dc75378309bd2e8d6439a84af9b729c579e576834e0e70ac1dfd476cbc044caee9f401eea516 +b9625583a53c3909f79589f9f558d468b93f53297d0c29b7af8ae5aed29b73888ff8d6d866514309f3f0c38ba9fad981 +abeb9b116fd54061dee87504df9d7e2dbe6202c4098f1a944c807ea2afabca92f4b624b4952ed7adbee8ce8bc2212f64 +aec9ec46b3e91148dfd66cc043224ec31ceb3797c624e350cedd364dcdb4bec9ecc0ca3b325cb61ce8fcbdad2cca55b4 +b0de2d6a82a19d9a0ec9dd49233d11c3affe851579777bf6cd0878d26887735a45232db2c8f423aa875c7de111f4127a +8947612ed6f96f962538dd856b1493653ed611d82643bde93f4b8c5c7450d81648253116f3d41d53ad90fb5bf8c067be +b70f442eed6e5187c3c8425ddf32f5bddbd9377f7ffaae276ff45fb529bfb3c38af2624a28be5736c4ef51b094ebcf52 +8c410a8a6f373e633ca1a8e47b1de489f18822fcd42a1b72f62ed99fdcc6fe4da8522a6e6a2f251276dab181ba9a1a4e +b2b21200a057e98718cc45fc6930f35fc8e41ec6fcf3224ca966e860329a45d502f75a757ee974084e6502efbb3e26de +8ee8187961e322a5b071664aea6f74bb033139232f7b2e4e2267d4d24e62e918ed42e08886a3f79d1f2f18c1b9f86c37 +a311d91411ab40e71e4b8fcac1003e31b043e4db29d7977cd4b6e5d6165649f332a0743f8c2a7479e0176a78e5fd84be +8dd89499268af187f23d5e0778fcadc308a285fffbf3e6803f4d358c9ae5ac56d419621dc3350d85c6502b23f76879c5 +b7eff65a1780815842ad21137302a7224e279dc1f8393636bb4bb436754bf5bf1c1f2dbefaf40745cca8b0e76e4ec2eb +af8c6bb81717d6162461bfc6ca128e5b06db075ceea7e8dd2088a9b3cd64ba25b5309956dd00334b6d875d8afd06b15c +b50a2c502526868c4724149e56b0cb03fd133f68113bca9d2fff05f2300f6c5552083579945081c866240c4c3feb6360 +80d1eca1bbd3d6e520a6aaacd3c91c4ae3d23f661ad4c5f9ff3034a62fb52c1dc82cf3e190cd6f65e140dbf4d7f87f9f +b3e25416ff4e650a0a296213280d1ce1ab9e989b241c2243893416b0fef2250ee3c508dcedc57b1b6dd79ad4b696ea32 +846c8b9ab2a464241c56176c18a14692180a7caa15c4347d5c4d1193ae28c7498b54f72b0746f97858b7dfd17825380d +a4c01a7fee6c6eb64de5be8d009069c12d6b2f0f217cd82c16c0fb8ba243bf24b3ba774ca9587fda6d6116bd3bf86097 +82a96e20725b7f5dab8f36b4f9d0b1ec7c33e5a5489f2ed2d3eb8bb9e95f3456d878b9312557dd7c117a99e16e3e99ed +8c77d5f88dc9b3b0f59647fb9a2e5b5971638bd8e065101157204cf8b997015fdd77f64b0941ca70a3f8b2f9529fc2f2 +b5db143b12195f3caf47a58037c598956040a3790b2f7f7316470339836e9d3753d4dd320ecd8258dea8ad3307e487bc +83a29591729ac9231d903231ddbfb3f93a70c8c6b2b81052b4e491f7cac94a55e105b2b4dcfcc249973c41a9356b72b2 +b3b936d62cff885764042d7861ba97b7a112df82288304191da59a57a3b7819041203bc545fe7d7c0048c809dd5677f6 +b267a43b1cbd64ecfa912e6b21b69493f801cc0de48564b400a882d64ddb862529e8c2f60db507e109e8bc97c75564a8 +889de8f480ed1711834b9c9345cd3f3f12b2e85e04c9c3b0af2e320cf651c3f0810a14595e246037cc5859d4cadea81e +a8edf47e4fb801060d8608013770a58f9fce90cd998b86562706872f745cf7dd19f39d7bbfc841d362d91c467f2ec88f +800e0f265b595b06af4d27842236fceebedcb3e677f3e8441116e23f7ef5746a6482872dca7094ac226736b49b1777ae +b5d5178f70da2a73bfcd35607d1fb442cddd6586fd2435ef4eabeff771764ac5f2da0e0043ab4df677f5c677827de1ec +a5364d239b673426ae93b2e553da577d633731edc3aeb22c87ac41984a90fed14556cc6e0e04204aa77bc74bf03faf74 +a86eed9dcc39fbc8c75d941a3e99fc55c1e37700e3ab006d779578f44738abe109f5b08f69c8a49136f954bbf79253a0 +ad4748b14e03b75769d7395c8530f52e1167c89da8f66990b5b1494bcc60fd8f61043fff6cd78c6b8805e14ca8c5f79c +81f1f276ee701c1fbc11201ee489bedfe005a489a5e66ce378fe455fd913853015480fd22ea438aab8f0a9b6cec7b067 +810585d2349ba6c4394a7396db8022b535e227043a246a9c8f1c149501bbcfbd5122203d744790f2ba796a6a2c2c6d6b +96d0041cc0dbfa63db712ae837ce2a18a024233a30ed1d30fa2590dc3b8695adc284668568bdaadffb30046d4f005d7f +aad2fa1e79ba957df5b425e6113cf745ef0e5d05c358ba68e3ffd9e84dae428a198efe886618e3da229459c49ec930cf +8b007fdf4bf8f454e4c83268ae10b98534a72665631224e27c8bd056d04a57f63fa0d4a3fa590c6b872e72439c7c3e4c +82896aef49f4ae976cf358b911b0e0465273364b199f9d1eba4f006f410ab19c49b385c7da5d7f53a85e957852f07654 +8dd2fc3812c69b39013ca2fdb71d974f0801c7708276551c61462de8e16239ad09cc15eb772ff6296cbf9f5a5bb8dc0c +96ef289269fad0264a0c8f6889278e089ee415dc11bac38de73ec2bde658f1ae112491803db2cf4bd5e4561c23e3c312 +8d0dba7c31ef3ef8c2e30d9c629fb2cd9c87d77c14e92322299efb76b97ef3171b2317cc34eb2f3dd1c4f23bea1391a2 +8e9db7bf43930a6a046cbc3bb4d3aa8c9f9ee662c82998d3675a00fc5bee40ed446bfb0a3d7fdc04e2ac5f526f9078fa +816b851f00bdd8bb5db68da2d821624752d76baff0110566775dd89d71a755929a650ad278f867b0996ee25855bb0243 +8a92dd5a07379d7aa9fee315c19e3a9fc84332b2be56602de7a5a269e061644cfabbbe396c6b451d7dc350b483b0a11f +8fc630a6f8cb24fd2152cb1f964569ff7b74eb9f32e7dbae33a6fbd871c1fadc10a793b5ded19fabc10a7c5cbfa60c45 +af69216b7058c64c0a8102760c8a38168a98d2a0f11c40be0cfaf48e89419428efa20ac62d5c5f419bfb82d293b651ea +91f640902a09c5d8c68acff42617c5af66895d6e9c3d783af6d6a5abff7a18e6f62866293bcd6b4de6c0aec68c56893c +87382aaaa7616862ed005d35d943a95109ec91decfb7d5fe4ef3543bceb3d744e4077341706e8147a18bb71605017851 +80ee00ba37a8efc17632f202d509c81eec1c8db7559548c067c7b94b790be5921a3afb226f13aa7f9875082eea9d5bb3 +a9d4dc4a7f6b94ccf7ea62f777dc57d3967acf0322f4b962d4c46c478d69d6c18f04a286cf2cddb1a6edeed96149e825 +830703a11e8872017b97632caa8f6ce5430ece3b12d73ce310b6e96cbd5a2646a2cc126c5b81cd0cb79a3849df51da8f +92d07dea9c39a91c0372a415cfbe881eb265b9cc6f767a3c90d564fac96625284c5cd050c75ef0d62451d33e83aa309b +8ab89fc205425ca7da53a3995812eb48c6ee5325ad185313abb9501af6365b7ebd9ecdaa0b3f54f23f7026fef44d4859 +af6793b168ac1fa1dccab79644142da12c3ef4eb23ef0d0a90cd9dc8af12dcdc9e7883a717d394dbed43bc7583967f18 +a5075f98ecf82268ad7190a632014fb0271df4b6aaf888380141d67af15294fd8ad8d9b75745320f74a86e778f1ec392 +858546d09e7f67de147313bc7e1ca8fff00c66787437045ddb38e19e9cb0169a95731d37f6e2e0ec58d1f0438b3307ef +927756304bfdaf32a47ed7f84ecde31cf812d666f38f965f1153924b8f68ff18e51462b52dfe0cae1e5d9cb43a4e3949 +a29dee18c3018b55868485124bda3a03826c11bc24f2fab99794b6e051944c25a98cc935a469750f8178af0109b9abeb +ac90ec4a46b86c5c803f929f4ff95458436db29e285f475620604506cffe24c8c277b611557a7964cb33a98b883fd9b5 +82e36ec5f9b14770e8bc8b7dcab2b5a044c954696242c6b12fe0f45b7ad2db6a6dd33241554db70d64910fcae50c2eaa +8833568231581b125ee9368d22a2166df3ef5c80f750ba0a09214c3b6608403cc888d029d023cc32992555d1293cef60 +996488ce1bc08cfc949f810976b3f591691ac7d81bb266a057e0d9770f5d1ed16eb1639141400d3cf879704da2a07e23 +af053716424df6c1ca18740fb86c17839f063cc585e5457468861f8fb981bf230ad7afe4aafd8588e14a39a390a7c13f +ace5613ed724e4a4c906d2b06a29be74f5bbda1ed0fe94e9f0e1509313cfa84e7080c9c7b14438d1bd71d38d0366fa08 +8fc81bc21816fa5bc5853d203e9250eb10f424230c0f7212a3a346861d50e02e3ed89e051eebd2de3160b427e4a07487 +a1f90c47f5a50a88ba21555d13d2c42482c56871485537c9b9e661b7ca3e7af27f8ad52f249ba8bbaa8d0b5f13a1d001 +a579c2bf15cc330e96595731c34d529d7cf0ba780082e0b5432fe78050118a17c6d9a9c77527f0d4eac4c49b2b758ec6 +92a5b63802d66f6b0efdca8194f88ed848099cca672281b3cfc707e1ece745c4a851462b4855987b2b72d9852c2bafec +b3764c82ae946bc27eb7fdb7e8e2947b4575d9de8df6faf70537de5f3997264a038e771f6d71f8d9cd256539fa359d0a +ac752065837ac473e03ab6b69ab97006198b0aa9f2ba1a8bc73662b9439a4101705bf3ba9de561485ed58f3fdbdc6f83 +a23da5f33faba5d41c429a737071fd8454ed4caf68219e090e55067ea36fa28d5b768e5c594a1ef3fd6d1e052e9a9096 +b692c39da980b47d2aafee08b544940e3f57d8e0383e06c2f97e7682b7449ca3507d9185396d66a9ffb04cb041b04550 +a41c562b3a046672cfc63ed4286de4af44c9b7ac8a97317b9ee7c235eec25a7a448d293dd19b4136514fde32567c4717 +afe97c9462f5b5714a855569dc42c1635367e7a6ec039d83eed5d7acaa296a0109c6316bdc636a35568bda9fbc1fb20a +92ce6a0c04fab877b6b0259d750cb02811894b0574c189ae7a1e0a0282273c3b8e903306870b535c70c1252622d78979 +b46d7982bf61e416bd3651f5821b687787eeb2c886433a542b5420e02e8e6a76231ac6a233affe31ee69afeaf0588b1f +b5eb895b5ee00c0c604179244a579012c352845cfccf90af9e99e2bd53f653d808f5a68ab5b3ccf51d6be13c63222c7b +b6a985acdb55522795cf213fced3eeecdec35cd0b5f8e1e311b5eb573d1287b0f8b0fe9c5dc0fd82d49848feaf16d4f9 +b3cdfa840aa06441bc82d8852d5249c69298ae8b7d37108ed03fc6180816290a8a3b4f7fe2df0a7e0716d01245fd79fe +b46310304857c15dd04302f75ad9ea0339d31377e461abcd7b0ce653b4a9b6319f730d0052316bc36d434472d5c4a5eb +b708675e7ae554c24b642e172706032eed21e0339780ef73566f02a44390d2da13e4c718c566e43dea43928ada79deea +a6efcba4c9560983713d7f66996b0db9a1c430b11392d3c904b40e7c59caa26889f52abcd69f8443e939aae20f8d2075 +83f0b00d597d3fef63ddb5406a9088525bab0386970ab7e9da09a89ac90480e258a71c21452273507bc4aa2d2280e389 +a474cc3e7fb8b4e6d9d33473bcd2a3d62a090c1840883fdd7774d51700205e23000a25cd85cba7e341539c56cdb623c6 +8aaf9ed5baca4f00952eade1f7f8371c2117a615abeb90be04bebb8760570041fd6811c1ba329ab887844ebe84e23c04 +ac4ce9d7ed4a2b7753e1ee0eea6bae2ce46df0093fc505d044ff19bafb4cd15101d4f6c47527105ea906600788663d66 +8c9f3ad1114e8167bea7655c51f69a8c8d9171b99040a04618e6006a901d9aabdf96cb6e54d951e22501ca0089191ae6 +b59ae999869f295efed4a5f6936f29d7fd7a326cb4bbd37350b8d27fa5c8164107e819bc598cf39b7cb97de7d3a56172 +b3b2eb0fa4cdc1140bab2fc5cab7d161d0b31a25cd6279f7f90e65f97bb49f17827760e7fa5924d3b8075d9dc124899a +8924b7a85f242c559a01f4be9fce5b8725dd04ab55a7fb7bf6fe77d4f157d91ef5aa0e801b2b1fe84011ce0205d357b1 +b3f79e2d932e8ccf3a026407068ba5b34e265feb829b0631556947f37471b4647edcf837c1670f073fbe7e27385a2a66 +85df4763c6e7c9f69331c645bda8e3c3d0e8f272c40db2117acd7aacf6e8760d59819dfa5f5718a795fc54a872e6562a +aa1e35cd31afe90be5998fbccc22e9ad64b29540a39971e3afdfd30fd9d81189bb5796b88db6e9b0dcb48df9d3e1ee4c +96066b8b8dc6d11627f15cc95b93f284fa43ba38ba2defcc005b4f5143c339d9122aa965b6d2a153d929fcaa67f83d07 +977b35e6d2bd3e3aa0a4b3c4c7b6c0e724199a6188d23b57901564476114982cac140482b881042f21e007cc164fe418 +b0f589b512ed5bb4a4209532aa28d4a29162181f259f82885435255f5ce026c0d2373238e3fa951c39b0ac16848a25c8 +87b4929b717cec25a84aab387f0bfeb6485393d146db1e76dc85a2faeb894fbd68dc3e55ad59970dfdb6ac94b2cd1b02 +860d7b40fbaef807504b363ddc5a5563d8df065bfb454df289ee560f14f5b0e539e317979d9a6eb111b0fb91eb33d677 +b4bf946f4ba558bdb226d2445c3fe1af2c4488b8a23c15398bf08fe95275482489a6bae76ffa8e5ff16622305dad1339 +8cd23a303b50d4a0f6cb4fb285b9cbc017e6e086df274f724eeb036203c95289753bb7ec645c07ea66c31dce1badd7a4 +aa8861cfa61e7d936c4cf5f9889bf54acaf6d996e3977de1285a7007527a9c785e328c25e215bac35b952251f8cbb103 +940a3c68016b24e9f10579f8aea0678c450c15995f7316762758f251904ae8a369d339b6f16cc194dbb29af0e0ce9d8a +992200148244242736e073b9ce62ff19402e4f93f824a3d469e601351dd79682dfef3a65e09df277570637d9ed8731ad +a9e8b308b35c0a7f525c74e451d4a221e6fdf13b8e6a40cc96cd55a607ac56bf74d161a1f689db3fa31da42c03b453b6 +908ad1c0ab9561990f5ddbbc9d8971cfdfae163456aa8dc83f10ede9b5c81e7609cd8bfbb8b2b9fe96421442e055b271 +86027b5c3d0816afb0ddfae2e84ceee6a7f5e334f9b1b29cf4c5679029845c6ed842c19a1fe24b9b848cca3a49c179e7 +b07d50b8937d53462a83752d7a9c1db33fdd4f5fb2c5bf99277211dd1671e26c31f13667be0585afd5ae070f2b59a187 +a9c47920861ed5a6b16d7b0d3af53f275f2c3b3694ee9c58c6bd8de6aa85d876081c6c988106c2aeafd83b33c1244e20 +a952b3df3cd2c134724be08cc5fe1a09a91f688de8fc3a6d9c4f7c7dbd3770277a43972690850703b0b6cc0580a7858e +8aafc9f4185df5d683add8f0ca8e629cb7374d54cda8a238e994d902315dc277a478be036bed175763991473b91b656f +b30bb0e8a3b9b1c8ff3470e9d1ddc3a912d1a797534bfbade452df81a03016c935a229b596e68e02240ba66b4dda67b1 +90970b3e61945e86d66c7e95244dc2810e55c0b962e443fe9656514904e7ddb3864ace7786e92bbc2e0c5a3684d553f2 +8f4416c46ea3f9af957ca5aabf665edd45a655a873cdb7d1410525750d1c75c9096d176c5ad7fa4d1ec6128ddc1a911f +8998a1077911ccc212cb309c2c83dbad8d203a8437c11ef46ee060d50b2f0975880d8e341d04997f3a2c262d24c9b35d +aa58f6b0ca52473de087649fd83ecddaca1eef7483947f8c1cff02870f6e8280c536256f260ccbe034b03125201cca99 +b375cab3c8cffa8d1291b0a0ac7f4cdbf36936d66150f4f85407b00eaf44ddf372ebd8dcc1a9869943cd8496adea23e8 +8bb0cbf8cbc3ee74efe55c705f2adc8ae75f0e67311a076303042660594c6625445a61a4759824c92e552b3099b4783e +b5f6aa9a30105af363c144f42b57f482a2cab64f70189c77b060492e592c91145175896d5fdf0ffa25069c239b281aa6 +9719d26c4df535c88c74db1f8d6f069e77d97d09bc7611aa0467e0ea28b02da598dfc7f144477d8ef18ad9c6886977d5 +a0d55666a9718d734ae2a0127dcb65bbf9770b8aaf589c58652b1321829d7d6b284b391a1b5cafc975ce908a92c5b264 +8d0e5c1b059ae564813658f0af3e7c642e7925bc9f27a129b227c4474543833e56025846293b5d4586bc8cd5b6b66d23 +8d8f9151890b725512f6876d1d36681ce86b98bb3129452220580667382ab2d747aaf2204a767d3803d7974c26e42e89 +b35df3f622b10cf05a7a33058052d0b66ce9bfca2626c6fc7a75284685d966bacb9dbbede5af7c299ac16cb74e0f41ff +87b5d4000412014e1500ad79127e0698d3a11bc85057286f15ead25014cb970236895ceb65eecfe8c7974e4cefcbf0b2 +a973cc6cd8eb00bd2fbc4eb13872f8814cc3cd1ebcfc76bdd937cfa138b3ea510fb84d4701778d62818126059e17213f +98802427f229185af301cb82b15108265188be56994721c3d5c35933ccb6336af7e6cc8b7805f89a6c08b1a2617bd6b0 +83e28197c627f91020a254eb8a62ac10fc3eb22461f6e3480ab72114166b7c016f688d0fde712de1082cb344cd5cf802 +b941868bb3cb64b74b03687c9f0934d171f8ba6747204cb19eb9c6cf5f759cda075cf35b1e3b3d597cf6b20e64a39d5a +abfe5f908eba89d4cd19e4182f48b29a2f90e00fe723c7b3de25db4875248d109cc06e0ae71c0d067af9f9b2b9e793af +90e155a3ad8d0fdcca15ed3948320ecc806f29264f9eb5954f01e5fabd9cdb4b6ea18ff9c06f071c8a746dc4acb43fec +8bc303f01bd0c1157164c1751c7012c102ac394c3e02851435eb01518aa76ce2da9be258b29a86c7358c428b2915faca +b75fa2149e3503dff0c5c258afcd44b84a7682505d734f589060143b47ea69bb1fe99d92a3597ac450a3935ca19a6ec4 +86a8d3839cf32430ecb33cf04f25d98078ebc254033157ce0157c5bde84913779a8244147bc5e7e2d7356d9c74de8708 +98cd7d9047c5ab8951da1ab01aee3a1de20d6ff3ecbd0158666dad559f77797a786a5de1a4278926611f65903efff26f +9895604303c8f13ece4679eb0e88c45a3ce75b3fec6f99e9fa6c59fa86242f5fadcbba60a3b666e2d98d3ac0f48dd1cf +a4b7e6723cba4556ed9e8ccaa8b3fa54315ba2276d0658515d9d5e95c1e0432b6efbb21864a7e8b0567db2203fe88801 +ae65e8f44107e77bd3d8f1772238d5b3aa866f5ce488c5e92cc61d306d9f1c9dc2bcf6965d34e9075055cfa19e75b68f +8a11cac145972e25b14d14ffbe3bf06f952659c6855fbc4cd094f45b5db960cef94a2ebb6003a54768b5cfd82ae8c180 +ad797a827901a0bbbe2d28983b211e4f2a0d3d9e32d44c5becec771f695bd4cb664df9a0a7bef30ce5b5e1efc48f19c5 +9529707c120b651e407512248f3384a01f822f9d2d3bd12f29ed6ab9db9722d1c460f18a6c26ae2eb718d3d11f7e615a +b1786e0a1f2e4cc5e3a47a1268209633d6eb1b472229519b91f62c8bd31d07e8fa26f794c26d751ec8166d134542a254 +8c1a9d5161313287b3be670fa6e6a0fe8223eff6cf727dbaa91052cbb44a4380777c10aa40a770e392905b4126c53dc2 +a9e905595dc3aaef8ef874cb6b2cd7e686d278772208a8a3cdf6f24b5c5568e66863189fcc136f44937dfe502144b426 +a3b6cb0fbee6bb46144690e7511e884231c6a5a52ae5940fb4fcedc5557d9d1aa762f55dc9eb1a8ca8bf0206078e9988 +a836900e29aa15bd092590b0e419fe570638ab8fc95d6a47926c49fbca2ca334805ce1547a588df87c642b5286c76b24 +82c19e77636f4311de7af38ce3e9c6bc99854ec7aecdab62faa892cbc4410933bf65a0af7ed25f25359be7db6b0d01ee +9743eb16bbe5608e7ce6b65e4170903e7c4310a63f34be19b3f89d30dc53f0ffd4b891ce526d4c79214e6b80a5ebd098 +8958ab4902325675a61a66ff105f0f5c46d770aec1e885dba4d1a638088d2a8ec80694ec60ce4c8cf1cc89296de089eb +a9b9bf37363f876610e73f1abcbfd419ff2b5b6ee2442297a3ba6a0c8d5cec139554352f70e5bfb59f86e8c54cbbee24 +a7544a1d6c6f588067462131aebcba284ef8a7b2962d1a7f2a59eedfef38dc539ab2600e35fd7b5f2b3624a60e035111 +94b691dcfe4e479866ae33d821cfdc11c9f55e6e7aba18cc7fe1f72d03d352de030543c6a0ea03274f3d6762cdf6adf6 +b3662b6168094f6c6515fbb7dba8234276853ae583a8bf40fe477dfb9da3cb54c6dbfabba46ba0536009891351f9fbd3 +abe1a9fe90f530e7e2c1da3f7b891752c03ec7410271f6736a315b84a75aaab6058a9c1fcb856b7d5adf2d07f3438aff +b1da1900fe731961e6819108cfb53e48866eeae4aea834b8f64f99ea6f8da0746c058c13d5c3077262a9795a2875f268 +82db70aaa0aca483f6ff93eef7c48272b0c0814d9c06bfc24365dca930c679057f057974791a7a66c4ead2306f210127 +95c31508983b431a49d14ebb5f0e7cd572bfda26624718d2c000d1fadb224adca4defcde58820d98f2d742be0ea7eb59 +8b926266fa93dfda5f88e652de84a09fcfbacd9032bc6eb856195205927e1e0486ad2365bf183c479d52f77bb5901ee0 +8b85f1c26c2deff4bfaeb99ce28a9086a5a940e4d03d59faaf305936ddccdb9d9ef7eff1e5b1361b0a32a3aebdabe951 +a9034fe508391f4114afc7645a4691dd428861417217c24874ab03b69b1e6840eb0c2288909bfc8d599f97c6f81460ca +8b9e9cfd00c975031d5fb0b3064f524ac3a46c28039c005f8ffa5114e8946174b55c7c9e008b20eabb5eca20d8dadecc +8fab56be77d316f1fd6663e16820e2974c52c74546308500b091a651b24748cac31e1a1a6a7f7584503fe41d76d53e9c +864f44793521f64fbfba68c73750bcde1c64de2068cd8901bacc312c44a17237f1f22042bfa561d7bea2d2a85e2e203c +926540a955c0d758598672ee3fb11a99c467840b6b72915ea5c208e0889c59dc4fae36ec0cb9679711acf275aed5c3e2 +b3556b7de265e7fbcf639d8a64ed89e4bf58cef8a288bd5628d3b95bd37273492ec09dc33d2ee69505a38184f2e0a75c +b2f3a28a3b6fb6f27125c6d7ecf6865c0c11c6c53c9e1b0654a3428cbd2a8f3bd8acebd62f39bf4c635089bb393c1a72 +a3b3c0b59e1907eca957da49b19a21f5dd3ff46d46cfe3cde8330f88f5132058e3c13293f66c9363255227721f84c166 +9922c109804f20f62ae0cc5ee8040a5d84c3f163418b7cf168de5abc6a7b0c822e6b90baa47eb35198b0d9b52545a2cf +aa14a8dee946dee8104b940c58eafafc5969cc300499f827fc2417dacc64199abd9c4a57ae640f7962a1dd9db45da26c +964bdc5b7b947c864fdf6c4b783e2b2daaf4c35f58afea3795961f5ff1335da02c11adc2eafb1cd30a9e1a5a4a3cac66 +88d691822caef4980da28ef171a2d546b292201d207da427829dbc153cb942ed24331ba4a6058c4fecf2a950c7c6520e +83d57b2ecb93c58d2cf05ac5013b72ebc610cf94529bbc08fb54eddd0f9e16156881167ab10da7bf57f0a5b7ab441634 +b75c8a68f7420c3d770121de39f581178735f97fa9fdd01064656d1884a164aa3b2003d2468d9c0af371af713b8e289a +b80bd1200fbc016912b1dacc27d3b1830657f204f810c17705f4f9f81022aa52e05a6b69a60a5bcb8cb8a8a09045498e +956eeb76e5bbfc30c4ab1390dee52da977a3be1e55c53b50cbbd2b85e768b223754f70395d576065d47e9097b90a502c +a8ed1992014cf4c11e11accdfea71ffd4a518a283ec6c582664c7942cfd21d095f1ef6c9addef183c7ab1118931dfdc4 +b0c0f234f622caa9d6ec60d1f9c3c64a595ca89baaf8486ebf07b6d2aeedf269cb65321ca2937ae94e9d14aa1f35893c +8df7b1f4f28829211193c83feee97e4cda2803d9e8a406714581e64780c2734ed34b5bd6d09f3a5b0dcfe9d5ec603802 +a3b84aa8f87be4cdefe3ccc39f4fe04fa5ae715714b4dde78eb7e242e82f12fd77e1008c2b7ba9eae616429202c39f6d +855a029c45d2a22ad29dca4a3c4ec683924b2f4d9adb505e924b71de0c095b073ab5929c9df8483636061b7862408226 +b49a92cb7b1d65c8e152b33949cbb0ccccd2f38b7c1bd078d84eab1b7e3ff00996d01801bbc2ce2cc8f5a4d559dc440c +b6280aba7d7fabb58e17c2a52963246ed581726678d006ec4e2ce88bd6f99dfd0f533b151c9a9cfd59a061def42179f7 +92bdc132005ee539061e5403cabe5646b9f58c94d7de135dee43de58042474fb1768011565f12d3cf72b0225752dfd7a +a3348ca09104bcbb0978b98d1047bf0df4938a5eab2f7b5d0404f44bc8446540d2b724d2ecc20659249d8fb26c758bea +8ad2d141fce9e5800f21fa4b025d94251d2dd6858a084cbdf987122e6e33a74c47c190fde8858b753efd07c432d50720 +8fd6c4ea2c948a03e98adfe087cd31bf1acb8819d94c9b558f46aae5518dd967e9ac804d7bbcef3cc98b58b7015260ef +8631b770dc6ca4d832333e9dd80dd0a69465b855ddbce9baab9065f475fdef97334cfcf2d7bde89dad4a8a5f4c1d0e34 +b64835593fe1c292342361bed556f52e31925c46106de5a6cf7ebafcde8fe522343d69d63004c514c04721494b11593e +9253c6b54a8530e063f8a2bf809278b67880f6449b573a9e7128bde25a23abe58832dafde789457c344b10b23dc7ea63 +b8dcb3dd9653a0d6ec92f88c2cec5015de5cd33615483340e41e283757d8f848cdb8ce3e2ce0123a330bf6ce46141648 +a1dfce1ae94d0f805756f86128b5d4ae3ba5e3e91b87d2a15c8c334310959308c845c3365a380f8cfdae9bf3c7aa69a6 +97ecc1a066ccdc83a92a22688ab98d6b3410ce5a395ee5cce53a37bdca0f3da9fa3b1d52733d219057e236eb4e30c62c +a072f0f85aeb85be1e8b945e81091f6cfa4d46b9cf30c23923c1911442ca4b4c1239f9f53ec48820e2194bf4d21f098a +8d79ac2e8b8f2cc9e3690cef51f15e0d78ae3b434c75d31271447d440584c16c1a0296369118a574035e28ce6b62a713 +ad94c06b74cc30fb7dd42cdfba78dfd801aa0632994f81aa7960089950c8db92819d50424bf9c44c5bf4bc24f79ce588 +8318bb208c3091ba9492ccadd529ee4bf8e10307002365831b33f58adb5d9f3bc52893bd8057ccbf5510389a99e2bb3a +b2d823225611c0c2bb01bca496faf8a7957f661228cb0ee6c0c5536cb5af8000ba43a6f28aca5a3cd6fc12d10399de39 +a0f3e2e5318bc54e1bfebe90f0b4a568b63b3c0dccec2dcbfb54a30bfc9763a2b0d17de2e44c48f7599ef8e607550d41 +a6ad2e45dfcfbfe88cb3fcb01ff768945f3e1897bfe48aa5c6d8adfce160dbdc81bfb49f64241418a22b31d6b1712328 +8717a8ef69ac0a61e3dd04639ea7f4b7172221f3fe570e745cbac2f0345b3ec54658806e35291b4facef0246067208f8 +b291390187c72d3f244aabcc1c58195a15984e3e5b8cf0cfc81e7e544279c0d2691afe13b19d3efd1bb3ee2903d76da0 +9317716da3d0782ced0ff6e72a92c2db314bb5f2d831c3de68175c702e51dc6fdc843ac234e286b457a9905565c531bd +a1f3fb56dc29a84c3df96ab84d7bab657ff34fe49d818c357ce750c827e6d273e63a42109fb9c3ff5bf21c1bc0efefe8 +98e47a69ae000b62414121df7c48224e5dbbd865b0cb9d5a5ec0bc71fc55ee9df718fc19a6647dd367a2a098a40b82d1 +9654ce283c25c0e796c0e89d52f5aa0073e27ef97d2cd50692db6d1eeccd9a0ad54cd2a40dced301e798bfca744bf040 +a6aa1b2e777c1d5edee9817682fa28ec6ffd73eca8ffdfd5deee8210dfce055900916a4ab8d70846d7e8c7a2a4f22304 +ae2f24d073abd32cc2ba2ad7ae1e5d69c843b8fc9270a22d76f3a5bf13876cf8de1475937e64ab5fc12c5063e0b9b052 +b266a26ca7f8e65c76b58c1d3f223aabd88f24685a015b0e37526f419759aac4d972282724a33c40a18dc862680cc746 +80a66d1b6bf9a2693b6a9f1e35347439ea7048c9070d66ad0dc62fd534f2907115abfe37fe4be0f97c86aa8d4fbc6e8d +ac512edb9d36b9b53125a27cd6f33221673b4d9d90bb02755c1eb59b06eed155ee066d0cfaa8f5088a43ea9741423081 +aec172b24da87dac6e6d7d091a08ba74d2bae2a030149d01de66a999e7d2017258e096de80e0ae5e9ac654e67eba0797 +8209430eb036316c49c686b3fd89603db6115be6ebb1ebf9fbe259e2be76280b4afe6cf7936b818d9176134b06e13db6 +a46b8509e52e7d4fe15fcbec10cbfc9ac01d0c104cd7ff871e5c8c08e40a4d3cda830fc65cd922bb8f4cda0dec7f6d08 +b9ceb1f7f8407b009735d976a363f9717213f2a753f8ec6eef0cd5c0a7138273f998eba66879f32e0a403db020c6cce3 +8b316b185b6728fdabd6e168df0ed611f3c58b473a3805ec7cb1293d39f954a850042181ac11529a5fe1e079850ad736 +83f2f22fb17c5295348c1b7206ea825dadf34313819c1fb55e8378315613266fe1803757095e56c09f29efefeaf45e64 +99bc7f49fb019ec2877739dda6c686cf7d9117f8dd3a6344d8f47f497478d2dd6a563b9cae5ea8faec74ad2653ea049d +807ef3a37c7e55a6d19513b63afd430a45ab6de37f3815d3f648a11146fdaf7b222ec8d1a004da6f9602e1022ab04f12 +a838016299beaddc5093e14f2fd8c0705e7142133d4cb6bb9afe935b26ab8e79b4f75df70b5df4cd6300d885a54543ef +b76fd879a14794ce73ba8904d360ba49f4eae39432238dd63e032feb36f9f5fef6c2ff844581e59fa43ecfdbd50ae73f +af9e464f12ae8c12d1aeb0aa26f282bf4c11e47cae0268fe538f0ad13027b7dd9ca7b5921866a7e0b300b35e7e21f7e4 +8674a880e6a10ee96d6085d7bb282147a80126cd5f017309377e158893e8c79a0b404a2786c1bb34f7352b804082f3b4 +873eb5f46e319bd090482ecf1aa6c66805acac43bb1173ab95fe2855ef5ac337bf07f4fb231526014d30c65a71e7ca04 +97a6adacf3d2fddd967bb4fb86a640c7bfbcc9d0496eac9ee8cae0113dae27a13b67fe926c37da5ee40a8d3a32c3809b +90cbce16bda37a64a8c07321bfe82a2912b7409b07de86d68978f5d82e98a43cef804d58eedf124dd3cbc375a6fbcd32 +ad75621c68c163d59a06ae0e66cc157f20252a75be03c2966d3393c66b9e3e3b4a842b5f597eef9f5b010c345bab9161 +abe802b6dcee4cfa10675442c03a24b38d8efadbb7d0d64fca739118d1c7d18c9272810328b9982800be4c3e95ee99ad +91b49c2072794843caaa03156749c4e6010de2972b9eed92c8f08f74a0ad0cc1c5fe7e740b4bed23918f1fc0a2b63243 +a06f22d4ad4db567a0603cac64af2490e60c86bec8756354b99aa8234bbe71fe34049e956e448bb742a142d4c25970c8 +9188fcf4e3a6d6413d2bedab29b9b85a9fb7e0ef1c6cd42aaba4cf2f9007ec67d90dcd4c660b544ebe61e4682dc53241 +ab0fc95d352363dee3ea16163a705d5634561c167597710945b11b3f6c3034fba302aa35ae95443370f3310db8c77003 +aa66311cb561066dd11b9a7832499b4f6caea7d1344c8f7a9734f52c41ec3a0ec996bc4a0183e16ae6f932da3af6a851 +8bf2900b1dc59c081018e0892bc4b1a0d0e7c1bf23e37840d6d82e5e0acbfbcb7ad100e5bc4d0e8af814304421a4d31a +a8d49dd52986d1029c90d5a0a4492b813adb7377ad93aea93297b81b09c947e85fadeaa8eadb7d2c5191ac20393b62f1 +a7372c7df0800ca59eec555492a309838879dd4ba835e3022ac293e7cc6e665684816f42ebbbb4ae65342d7e7ade460a +953f5c8cc9690360f88cfa855e1b8ff2f214a663bb8a7c35cb7b819e2612d8210f1ae915820585743a30a821f174fc45 +83fd4abccdc38076732d17ada1e3b6320a7c2114238412b5dcaeb415869b6691cb8d806773142ee58c50ca9da8d15a7c +97a6a9fa6d32ca8d5e4c1908382d847333fde3a58b2d6549b42486b115066e4e466665caecb81bc24595374fd7bf8845 +a88cddd23cef1c8333022cb24cfce602c7787c112c656d37e564d912267af2b93f8972e77134101c5d72e1478cf154a9 +af50fe8cb9f723d3986adb2476d229aedd14b1abefe15814d7b35e2c017667ca358e7b24c392a71ac59e145ac51d5de0 +8b11b18f4e6cf87bc84d4455d3b9073778b8d5708fec45731685c5864f85b904f3dbfff9a64ec922a4b1f97e717b6d30 +96b538f1a2a4196853d78cfd9ab2622ae731d76fa32bf8fbeea528c54ed7bf79dcd80df10a8ea49a987d2080236b583a +b6d7461a13c62d1186422df7a178ff97fe0fa8ada4769c55535527cc8c0b2d8890be56df10d0e8dc147a1d23bf28d6e6 +943300543306e2f3248fb4e0a9cec8b774c6c326b5427e95b1874f565c37908922f57daa58a81100d60493c92ebf4dfc +926d98f8a1b2f4ed2bed4732776cbeed3b525e052c8a873360446e796a3d2b1182b90b6dfc6709097287eadc05524539 +acfa46dc7a3b7f450171e3d3f7bb63309f757795b28acc77e6bf4cec81efe1b1c12c9d83d604d026a1f4d501ce79795b +94b29a50dd48b50287a71051e3ab0d3991f2377844b3f42191c1786a6d9698b6e5986040493759856743bf6fbe9ae104 +abb3d59d9fc9c4bef262bf59a3ebad5119b72a84392377d2ddb50185ea4ea35c11d1c3bacad9b0b530afc809f1846c71 +a8cab93febb0806443d1d7a3954efe63675e74fb0d1472f088859eea2bd16d3b3552fd13c26ac91824af633ea18fce6c +b30ffd219090fe6b68ee2066966ee868cb32ffaada8fe155c1fc36f3dfb4ed2bface1e10db0a48ccb7a50c8d36776cee +ad1acfb6505d0b4124adf46d2fb2d3b28423d57db80313bf470e10d7c5307096c3a1b95467ab982c22c610e896bc9dc4 +93c0ffe8207eb2fe4ed15332825085317db4f0a2ffc5b43d2eb5d5689ea2a9952385eac82c225b4efc5e25b5a3f0a594 +9011ca17679e8c669b6b47641a1609e37884296e0c4537ac7f2e055a972237cfb1a0525b452085ac7eca6e41f6553f19 +958eafa9d108bf81f4836addb16b2eb5f21ce11183389fd5f3bf8e354a9e726fb8085197802fbb79cad6ca851e08dddb +b51c5d8e473eec177117370fdeac1d732b9828d16caceb2f1682d78076c36d16b812fb5ef24896ac14b259b181545a4d +a7354cc6bb2604cb86b83a83f04f49194b9ccac6e45f044bc73d24026c8e983dfad9c090383a6e760af22405b35ef48e +a20050f986046d4dc806f1bca93aab60cdd736b749bf216b953fdf49c61cda9c31af10c4829b89c16e7a11b73c0b7ac2 +ab7e9d94e52bf837889d048e239ac66c2542788b7f65d687d6c76b1763f7b999f2cededd6c34ff6c0245b81c9b5e048b +8463fc4ee7e03a3b1c02bac2ec2db8d2253fd6594057508658ca7625e3e268b85c4ce91ded5976b267de8a6b56ef1062 +a56d9e92b75a4e800af8c16b8baf769b17e43e003f133eb304253fe9f794dc9f8dffab98088a9eebbcc6bf079e641917 +8b738ecc278e50c167f2e0f13d76f93bafe64b3bdcd4bab0c7e0e00cfdcca39d8bfb2fc1e003ecfb156823e9df62c3ab +859d36519d3db8a3d38dd495aef9992c9cc9cc78126cc64a544bef6200865bfa9972e95b046ed445f890f94909e0059c +83d361e911b1c6a75bafc8a5096b652826d3eac61bce9a887ac9b5656ae80de9eec25725fdb9be551c1a70ba808b692d +ac1f97fc3dde14823131320a40d2b16ba04f00deb4486598daf0c69d463bde5b09044626f7d068569528af279a0fc436 +b2637ed013e66ecc264199d41749f8d20c5a19263129bc6dd1cc5a194882844d1aded827ea948c4e9c278265afadd129 +97e0118f0b198a3cd48cfccbf7d628363cc94395f28359b375a5fcec007f0f7f9e39bcb00516f1e47a18a78d956d11fa +8d137b709677b8943c5b677616115166c79a119d18f173d398736ce900a947a4152221000d486ece71c381a6de9b5de8 +90f1f24c086ecb21d50830c5b580131c42d4749b6f8eb554866ae8677e61676ebc320eddd8be7be74a64fbbeb3072711 +89247e21bd0f6c874480e01cdefffdfd022537630f293e8353e66b2028124a867a06fdc06183d49b2187e3590f87f948 +91541978e072d19653ff4d69640fe9b230386dad98782c71a71191c62a91d1c6ae0d81ec4feabd2b33c8df989dc1e7bd +8999573ae31d634357e6d50cfda2305cc706846e5fc45328e95f271044e4f110846cc58f7c8e89a9526b56d570b3c625 +8403d013a559ca5c22584743b7d3c837440292a884c4d1a8b853af4f26c389952c14442844f74a663973b4a1d20c9255 +814d317189f146c44142aeec2c9fd50eb988e98830f790848f3bf4e5503a7f6d1eb3780945377cf06190789a57e8c44e +800f971c67dfce7f101ca71a09820ffbe1bb5bb413b80a8237eb6ea103b71a69530a86708b66c8952c5bef810c91ae91 +b1fffc8bbcd142b51f1a039d34227c27026eb7480352ace0ec0fb04a2e827fae70003c896e2854fe7e5cc6f0f438d2dd +86f5e96af50d34bd1172e9c25001d61c3d53332269fd6cdd42e885656979fcf6ca379dd1b5f71a5a41a69fe25acbb091 +b82522feae0ca4bb9c11acdc7d4fc32396692c8ff38db91cf83abaf1cf103d65beb520bc51b0fb95e6dccab42d0f7783 +89e25ddbd29a9fcf07df875e7009f5d758821d91a2741733736c6afe89a143baeae6d0d3b211d23f41215022359d89e0 +a8bee6230597744c122ba1b0942d86163f800f01aa5f8acebd546873311518727cc3b3898d0a1d7b1364e7169ad92c5f +8bfc0155ee454dc1708fb7853ec536caaeb950022ac07a53160ebe18cfc6a2f432d9a6ada6ba8dbd288e825a9f8afa62 +a3d2c2f7aedb017f6edfe14805ba40995c47fa06089fe4a05b40cb86fc6fc3a02e8422128c84182b713027e400a0fe2a +90a262616cc0d1f5f0a6334612263497a76cc9eb7a8998b321e2ce9ce8cbcb3b22d19ffe4bd2091bf0eeafb01c44ec59 +b07ce5cb6c58f79785b564a1a3cd87b5f4b672b0e0750faee60a6c1e6ea2cc0981843f717b2a2097076674178c2c12e2 +92f0afb2880833fff7a3af8b26e037d8ccdaa0c9c6230e2834d9f15c741dedc028ae2f72d109f83e1da2c85c04e50f51 +ac8b2e0fa29471596920b6d140b865c855c1fdbd751c9d0b8644f06c198a4a8c6f20754bd3f67354d03c4b65657a5383 +9564409f9c9f07c521bcd14abede65e6c5a2dbdb4edcf86f2bfeee38baef57bc2ed7058bc36d6f6fd0be8a283a1ecd74 +b5d0c87f1c3f48f1a0511c6e149db3e44a6b1e1b4ba4b8f0d43d4392b7e0c45e3e560b9851a17c5ed69f2cd4351a4f6a +86f3e468b0c669fb3645ea89007f9cab331ed010936b02fa977b5ff1fa0e605938ab4705e6092656cc2ecfa255a039cf +a2c322a107c278f6a707cd1f20631a9072b23bc0c1e24e9007f357e607224989a5b017755f96d942479ea6424fa67704 +8cce86b72c5333d8c8aeda5cd541f2edfe3568c8109b88e1e82b5288efe11328fa6f86b7dc63518b0c9e950574f86f50 +b4ca8c1d4eddafd8daa3fd441a6a50d1f1a7534b4c090700cf41d9aa072f528641126cc4c8ec4130d92a7ac096fec20e +a2f4b38a0efaa20423af567181f97f7a5cc4f49febedba10404f29195a4d4577c099b37a15f9e5479b0790a516dd189b +8531aca4a829d5025daf4a3b7ada4c8ab576b4a9af131a25a969351561993c4022d682c4f3464c5d822da002a3d9ab07 +b2cee18a4f43fc3abb391b0be26f1fae792395ec96b2de948475144f5c69b37ab5e255e973d921e0bac3ca5aa41f8ccf +a9f40d5c6c3b1ca9bf711f60751bff33c73b0fa7a165c7343f3cc19a8947c55202fc9bd39774b40be000efac8a04ea9f +abf6c5daaec4df5ff0f14489b04f3fa2d7b248d90da0616e4f182055e40b7f27fa2da614a07ed821abf3d714ea4beb56 +a2231318a4e318414cc0ae53e9df9da9c68a4242d8b17ab66840c73eb92bc8a80ee3220389289aa5e98db363f22220d5 +93164a340f4f2101db4da92ee6435d0c7b608df4cab6866d4649d0499d027007e4a094ac9e0651956d3d45d5f7ba2d46 +8dd877c9ffe8d929a8b37fa2d3becd58143df63eddb7ae2d4f9d195b044675cd1cf373d951aa81723fc51296f7b775aa +9682758a7850fb9257ad164938ae1c33afe33cc7c4a0df83610e49282b7a37d70eaf5503ae9bd9e62f7b6080ded07544 +b083a1c29760d31739dcd2634d34d16270ef5a38bff7e5b85d2e96794193521df3959a7bc337eb14cb1b28b87758f7dc +a8c6c4568441e4ddf420aafc517f866b7cb293d3c840c0ef33a2646b5d4ebca94927467a2135d773359c889555f15a21 +8e66e0b9a0b33c7a18fdc99a7c925425b99ea53cfb76661893e5b15d13510a7125f20d4d05b73d1fd78c57569608978e +8363da36b179d8b63236f1be9689082bdb52fce9691303ac65446974cdf76790e3f106aac44bb3ac2ea9fcb2f6379546 +864b19d1c940b04e281011bf576570c6a61c8c69983656674d94b31b20f155656e5c080696458696decdca385882857d +9158af4717d56af1fecd1d959950097179b008ea9eb8587bab996a569b96d61ba498cbad4c7f8c89154823212f799b80 +a819f84042bc29f958c749cc9066b73651aac203c81eeb862ea74a48474b31fdce78820cfde8df5f37a7a2078e14211b +ac9c289f6c902fcd3edb91469b455935caf223dee169a80c912aa9159df3ce518ac70636e916e2e2be30c078bea086a0 +8dfda7efc7fa8065667aac2609870bb4a4769ca3d4415469cad3a41b5bf5fe1af6f324efb08f9076e7a7f0517a698741 +af8a61138553b0d7cbeb8bd32abe252f54aa936077a1e4681f13ac5cd55915cdeee8ecf97df5530eecf07b3f773dbb26 +960d084d5a6c25da525bc5b8a7bbdc8db8b8f4693159c2b111b3c06773f59d71f42084fcd44742b418cd179cde8511fc +94d5f6ae5d2004355b339918fe130147e96d3ed22cad616a57fe486027ab3d241ba7e1999178fa0af6eb86cee8dbf0aa +809fa955332f1ac574165bf090e12390a2e99e26c00483f40353e001104a67e2b10c3575ce8da9ee5c9e74e6eb6e331c +89f0fb8438d69c5e94da7630d20ec6aba34cc3b8c85d84eca9822c4f0bad3d9eccb93c49d4e51833457c32b1f4342f6a +8aaa8659a99045b22cc43491d5c22015e5a0263971fea3d1b013623060e371ce8c98718195b81d409df6b9fbf50c7b1f +91d38f7afaa30a5f8b223f66dbd5b2915eddc967f31efb44747630e854d627edb5c5d881b876ca69da2cb0f010e3207d +a132bd706b3a04a7e18b844c3bccc2de25e2f810521574656913a21fd8e873c31b00e0da5089360e79ee4dd639dabfa1 +93756029464957d686eda48490fc9ef07bfec3e139611c846db4e7796d7e5f5b7d61542e5fea14230586b1b05c44e2a7 +b9d7a8e1d76a8be50c486f6d9dceb5d6a50b0012aaae5d8d0437abdd1a00469a33aadd2d6fa75c81fae4a91cd43b445b +b33f3329e916b17b16ed24baac7cf7a7718a1c1288fcf0559733f4d2a3c6b9fe6972b11c17d3fa817743ea67a2c86e7e +858bfe2e8d6b64ca54a34217d468b94b710fcbc0693b37471d6c749a280cc5310fabbcfef0a25071a19e43a7f4ad9c87 +a24c0b2f4b2baeb69a3062d9e13e72ebd7c6e83b6e2c784d75d4b9da8fbc935067d3a71d1b09096c2627489578a39908 +805635135e1132fbbaa4a8999e517dcca67c414d6dd10ff471cec5dbb9db25e672d986149058f4f594a6504993722294 +82f601e8727d4403640e615c0b44ca9360bbef9b4e4eb1787bc941faf711c7b96d578f3495229688b0c1b471e04ab2ba +801b76ceddc2e2fdb7897d9d7c54846051fe4b72b13c13569af3ded70199b537fd024ba1a7f753b026f32d77e0d22185 +aa21e884d4557a8a352e07274ff3bcb983c10e588a65a84ecb959f5ac47fa912f181ea1c67c97cf81c6f2fc7942f6373 +82c9752e61962edbd270b08c0ed0f2fc5f6bd1edafd4790a99336bb4e67a74c01eed391a42aa4aa590b7c70e477ab5b3 +907f0c58820ff0cb5c85c69044e858f274b3363bb746b28d57d6d3b0b822ada2dfbbcae92a8eb84159a09f924694d544 +ad5208af2d511c1b586c28af0dae744f75e5cf42289abf732c87c94fe5642294694317bd16d9a51ca775429e6cf79f62 +9576274f52557376d575c132e33e8c46275fa49bc657487e05de403612acb7eefc7e971466bb750bd88ee38a49dd6f96 +9451da57db8f563018376548d858e45482817299aa4d5ab6df5388b81c9b2a54641c28b8bd20691c6d869f0d50d088b4 +92da02dba8bf974ce53c54c63c461e17a57b26487e4af4fce0ef463d21952a60ca4251f77f1368edab0df274e6cf6f59 +b6e2a09ceb80c4487a54226aac1d1e314234d3d8819b1a42b0bed4f144cc50cc670d7b748ced5505c7ddae521dec1203 +948ade41fc1853cbb5d3e44b8da0b7c2b5456f822e9d1f63e72b92e0ca960e6de5fc6ab54c53bad7f24076d0e0792a73 +849f8e76cd0f80690e639b71734a351375c8360fe7667e939f9122dea06c6990d56d7b3ad16549af1e0f6e7ed5fb45fd +90b6471a1cc62f461d95003e88990fad055b5605d9a7574706fdb64734e52e4bf21cb06436a6256a8ed6c737c822dea9 +b0f9f0211a05eb7dca48b54c2fdd8c19c7613ac5fd0b5a32123c84a45b1ab83b433f680550065303277cedcd05c25e4e +80e29a2ba1ea77698ccd64f358c0277667fc973e782882e647522b6dbf20ad043c221e0826c2255d8bf458aba137f460 +a70534ea4ce2d55d264768cdfa05417decefe7e087c0bcd77f8cd274705b08c017f3ed5d1ad5145a71078083c4028f48 +8b8fc80d38d96a8d8c735007d61aa116f4b450abfba0040ab76ec68b0584aff86742588231395d8dc501c6782b08b707 +8c34a868392f5721167977052e4c6909d726165b348601d0e6fc9ca9ddea56873e5aea9f26d0fbe855d1ef26b7e146cb +8140a0f64bd6fd3819d50b96cb25df2e26cac6f38dba6601868c7d11bc52d3cc6abd0bc59064ac37a5b4c383672038ed +ac130dcc3e27a9462c900466389744d26aba955524b8d87f8de6c9071ce943cbe02fc563512cd4586710a38801637672 +b0f890f7228891651baef9fa3a299b64ccbe81c77906b2014bd4cd8ce122a8cdf88bedb8ff063c409763e1deed117319 +b58a35acd31973d5af8df6f4967646908d2c81b408bdeedf208525017f2cb097a3fdff30eef6eba30d58326a73fe0d0e +970b4338ea41f5fe3046b9fddaaae911639d1aa0f20877e16583a99a0d71b918b326fbde87f1c4d64997fea8a8ee1779 +83c4a0224460793442a516850cbc087bf4b05e46fff43fe87717cb8c39c7d32ef24299f0fdbbbed8b208a23b3bb8f661 +883d8cdceee6ee25684713ab9e55ee49aeea1f5a682a4cdf058e61820b898c16f65cdc01989e3b6d7280b335ff61b272 +a609679445fd2b62671a21f89dcf4422c08e706a64ebad80a4452d996cb5c4b9c21bb32f77d76cf8450d753b5b4c9645 +95bdcd065a43528e4671cef5e3caf10d76587d838afe3599a879f14ac796ec1d949bc4b844c9c27dd3ab2a0718447043 +89cd2767f9c67a03fb0e4d0fa67d707305b622775573f7856da854bb8b3749c7bc32d98716319e281001ac9080b14934 +b247e7bc722d2437ba056a0d62d7ddb527a699cf8af1a2fa56527b49b58b4a87013e00aafed178e7033010e452bea0b2 +9971bf3fc8ec92a6ce181417d4dd5c2fe84831bcc8db248323a544a7995df9d08ccacfe8be3e98b054686a279c2fbb4a +8df1293b5808bb9e39c7bced95ceff6e885307ac23dc1d7cc629a30cb2c0f85ff8e83029f2f66c5ec48cf7de3b2e2bdf +87ade4db7c15ba2424938866c66d7835b70739f6d1d9b165a45c9e4e640d01aae65eb9fbf6b835fa34b0d4c9d44e454b +b5fd506aa118a1dd9cc4c2bb0a41786264ed0139e5059f6495abe75c0a30cac8fff5a603ef45dc6c7b9ea0408bddbcd7 +8c37a881fb4e945eb7dd16bb2403063707e2f6c0d4b0368f863e7b22e67d93c0c220335e9e03dfb4f5c3f8023a59a38b +a41e07220a1d8c049130ca2c9e4396f101b0fcd5bd4863e35dcc7034344318f326c753e916e1f4549dcbdb290ad0292f +ad0ac7bd572fdf76fc1d4012c141f579697b9ebf1bd8bb5ef444af0b45a9ab318c506b4f5c4b57859c7df9c822eabc13 +a6ed7bf59f52e02a7ac0164eed3b1406c5768d76dd019c3c951e6148a8dd2d67c8d72a5320f06c1afbdd20de5c00f2f3 +829a12233a59c33bbcb7656affcade210f09e01904873b836c01ef7cf64eb9f994c92f814ebe86aeb398cfdc92c65e84 +a967dad44e0ae650ea0c8ac3ac0301722bed7e332b8890c7ab0089d2aeb9a7e02dff02c73bd42a4662cee769abd44196 +8e8d19ff30a23385453cd871a57fc77635e6894956e445c3eadfaad4fe0d675bba9161f7795dc1d826be84dc6dcd0c14 +ad21c264b975d2e053d7de489ee4f4863b66e5576aca878ac202f8751178006beb3e418cb2f98f3f45ef46adc07cae39 +ac923ca38c5a4a7a267ad03ea181d352dce35dfdf23b5455a44c3746f2417964b8fcd519d1c8cb75cbfa6bb4e9411b23 +afa664a41487d289ee285e22edd3f555f92b89aec5d4f59337f1a1302394e3d73b2501b472519f6d97e9ec4dc4ae361d +938faa543808232f5ab12d5b4716d7da508b9badbf86951cc281dfbdc5b1906a3d0a6962c9e199a3d6bc062b27495028 +a0e55b982e8dff27610f424e8ed0ff0e8ae85a39557b29dcd4cef4fda4d625e19d72af79e10811b0003cd357845e441b +a0ab6897fe8844eae63b2cf119843ab71b7414d7c61836092bc53c1c28f7ccc04767fd83823e7dd668edc63246132e47 +b18c03852b7f924afb1bf2c00194dc4d75ea48e2a88669951a3a2614cb5907553ba6eb3801d29ceeb2af418add5fab0f +9773f0d9d8dc22d387ca3cb379a0a45c09c4ada01d5d6911e2c82c4bb4ece75f45d32cb09e1cde4e533d9c6c30393027 +81a126df657c931a94063aa0664e932cb87fa7992b3b2af630de9d04b63f7f97e4eb1e51d2cc4a116e2c250f717d273d +a1d33b65ec03addc440e3732ee32bfb361ef5c5cda350a98cee952f60663fc77abd9400fd172bcb2d4439d18279b8222 +a7912d9c3382c8da51ff6b4ccd8b5dd64d8c5a98441764d42243addac9af7d2ccbdce1f98cfa411b7e5403eee508adba +b3842bd01f9fa2ce545448f477779b6dca180046acd288d41d673c5345fcd4a7919412511dd5f693242da72f018331d0 +a7349b57efffc27a61dca30f5ad9cfc45348eaf5fb7098f1a6301b0b6be8f4f3008a7549d9bee5942cbf27ff9aa0bb83 +b72fc9aa153c1d5b1b5858a7269592ecabb6d1de27c385cd0880956ccc0725c653384507daf0de276d581b69915756c4 +a5a4633c77cf2b53aeec25bd43f65838e21fbca7d8d190a808d31a30db810fd4b7e8ca2cd842dc3924fbb02f2fb74529 +84296f5b0416fcae17f9d88d61c70a17ecf52964dd7b062f47971f7b1fb2b0d42f85011134b2a70d8e34e513a8f90a7a +88270bacba62ea66e388f2ae97a12c54d0768d7ed8594462c19ca1d8511ea87c9fd58765dfecf0e6abb16ca4cfaaaa0c +abf4a6dd2721ae638ccea3e5be829c82cf8996380b4e6740284b3e65e3aa76d5edee2899b790e9894a090f1a7febbf5b +b39c729d4248613909ddb32dd8ca189ec2b1a8a2956b10466c77186ed2dbda1578951ac8b62a95109e68cf43f2449df1 +af8e0f06a3290589a685e85fbf5ad70ddf4199e779f9b7bcabb30149bfae2d33947865f34ee6202d8c9402893c052328 +b9543beae5ca63d54c32a01b6d6866632f3fea284036b5655ddc8e22fe3025fbb760d2faefc4235ce78c2d345249fcad +964d25279feb9997c8aab117c9f1934f8e1ff66c65812712f228ff82062c758796a31d9a7d16adb8dafedf6498311bf7 +b66da4a25fb74cd0cd11d5dcbf7bd98cb84643db53a2bdf93f9238172f6aefea049eeb956478a85e49cb6b2087b61e71 +aaafe85fb35b21a010d68ba86537db0e3b47fda8fa143ce9733eaff3b7759658fd19f499f5ac6d2d91edd11c0349feec +8d299e2c90e0ff005ed2e43d6a9fb49f7f3b9d99b276a4d4173f603d7a3c7c2c9694570681554542f234c5411c811f61 +b690cb2d6029f8b7a25a41d6c35ba69ed93f874e3fdb2c040b57dbdcfd4c7b38304216bef07913e96db7e9f62d442f0d +a5be7b406def0cb6407f73742b8046fc4cbbd7b031dad5d7627a6c2dc8b8085db6c77423b37397d3def328cd265c8c1b +a2909e362c4909def567d1bfe1272884bc950321c4546fd4e1fe76553783f1dcb529087859b91d8492df24591d5b746b +b4e59b18cbbacc747bc1a1f1d551ad68c83162d2efee3e41ff94e523ffab4da89f810d682d386e582d4fc2453f393150 +b87b82bc79f0d31da6152696778308f2f557f38e4c90fdd8008dbd2bfcac4f2f613d80bfb2c922d788130a0f85e3ecbe +a4ce91ecb901e44b813fa5948db747dc47f51bb479fa43dc13175066966280018d4d867d6584bb638dd6065aa5f86cca +8fce282ea479026fe8aa24c494b2f883aa5da59069f938a9070c8b9dbc5486409f10deaa8925353c418e77a2fd3403f5 +9480d0c0569de6df5be7c6f1af7755db6325921486fd231ba2a07d469ebdc8703050da1b294e7c6e8c5585e5db713b70 +8aabe83a6172f716b7bd2c34765867f84cbb0f774e709371aafc9dcebfe73cb4eb5e30197c47e99fd8df8ba8b9a70ad5 +b736e02e197528feeda23c62fdbba3ec467abaa37608b1cbfec98ccf96a236350992053bc446817b290e590c3dc02234 +957c5bb8c02e2ca1de6f67a5c92e378bab88f4fffdb4f8cccaf44c2eab445556e23327e193c6bba5ac0ca1dbe633ac80 +af41a6af1af05bac5ce8a96d58f4817f72d6b45f6b65706469d2fb1f3fa571589a7013a26dffd7838273dd454bb9590a +ac7d4d3dbedaa8973d15bdd13f7a732387df28d8622e19c31cb2d8e1ec29ee30bc61073a668531f9b64d447d17544aea +8e63ce16519bde5e09f26249cec0b9b25f9fec9e268a114265040c42db86c62754b724d8ec1dd1111508cf766e0c989f +adb9b97df5ec0baa430070b5ff0bd0cdffbdb901042e464098261346ac58eafaf606ffc6372b8be5630100d2e62dbf62 +b0ae7b677972c3cff616291b215ba8405855bc64680cd5be7bbb00974baa104749d497386bc9dd81d38980be133110c1 +8201333267da2d34485b5fa256b127bfe748b139a16ae49b3a201e58403d7afe31c7fee48d58ee864edd13eaf54f0f5a +95241d2c30be0e06d1143c50ee9976c6ed82ef9f84307f9f0db4a9fd705ef4bdd8e0583136c067adf55e6d1d055f56d8 +b1c38da2f1ad8bf3347a2178013760bc1a3da8212eb9916744df53044869bf1ff3cdf5a795a2fa21fc0de51be11ec24d +8fc5804adcdbbf7e8c2b6f9e83c07cf25650908d5433136e3e039be7b5a27d4e392eef874ac98a8132802877e4431384 +ad11542e8c2ced46d28cd029da8c82a302d9686668c1c1045ca1dc8115016af8959ea17606cb81545ca0fcaadc87d167 +ae5780ec3e8ed61fdebf8c4ffbd96c1e05a024e94f1fdb5a14e0afeaaf0ec0675dd13e013695c61c483b0e9cee62324e +8ede34927cec48dbf87b89e2727f40db0927ee4a2dbe41977a19235b56e693b31f5558a4069596b8de1162edd923ad32 +87956220a578c901588257aab7cc07946ce0c1f920919415aa0e458732c43189cefa8abd82137cd90990fece732fbd9b +adb61aa5b9eaec3e8758bfc52866c9c562657604d907ef51c0481169b8a3f851740eedfefb91cd895c011d6888cb8e84 +93e56f35436052b31883fe60e0b823bece66c1b0242596cbc8e990afa3cf4a5e98b96550a531cb57dc1596f8c771bf35 +8140a9dcf58b029397101d4d0b65b8d023c7efaabc3baca8a837246b8a1ac2f4f291897476fc459224a45dbcca067732 +b40d65919164e16298e035ad8ebcc283669e44e07c51ba3879292798e14ea58bed5d25c31287e96291275e26563fa740 +a05c9d591d6f22135b9a60aebcc104d0e557824c9c9e13591de6fbb8e1f7f3eecddf90e4d1abaa13508ac72bb08cecc9 +b22153160b0ac40b24a2a71fba225c1a1e3f8d0b4afa47ac1c2b253921c58bb0fcff07e8e109dfc61fc8bd3bee13bf07 +82d95627a0e8885919f5209ddd00982decc8d1f862d743bd21dc2439f25b4a15b50d9ab1ca1ebfd0e16975d32613481b +b0801c1b773c73b367f3d2191bc35ff4e80e3edfd8cde42911c5a6c36c0078dbba0fee9f1b787f18b240d5f89f97da13 +a6ea95553ff7ec3b13a01e1a540142ba9708ac229b8b25bc2b14c09ab538fa05b2d0f7d33dc71bdb18ee9dabc911d3d8 +8bdb2d1e0f47393ff25ef4a9bd11c667b02a8830f5d201d4c3c16e9f1fcce02bcd042ec5871d04af06ba5c13aa0c4148 +97824c0ee086978ec5351629b6baac192dd830a8b85e7b83f09c4aeec024dd168b9600be081074975bf59d4131ef138a +832980e93eb29e3d8323cf6f0dd1fc046359037422df0a148f3f7269d3d1aecbda30405f61e6d02da9f878ff6b2d48f5 +a7a30b7a9a70d68d7c2e2e12b548a7b57b32e1ac504da00023677fd78f4e974724fe3a348050a467e911424d20d0bf83 +ae18fa21a5936ea3289451564cb612cb627842a4b5f8cd3bb2223959f1b0e1c7d352a6481ecb7baf525d0a929b087aa1 +815ac9466ea809c11aa1c628a02f4dc7370b1bd921b1c5b096cd77c41cc69f856203edaba928447339d073fd2c681120 +a14a3f7042cf2ebfaf07a56432de28402e142480aa79cb73b89cb029fa743c4ba0d46938a195a03489a0484001c5efa2 +93102c051d6b12d433ef01ccbd4481c203b43e8c3c5e7b61ca33378bedd295ae200652ee7e0006b79f95c73439c3d166 +82129c4d26b919e877bb340ec8b115aee8f827de07de88eaf1b14abda984cb22f02105bf19ed67a8183a65813ba15481 +a5c292db4d3ae26e79e7d1ddaf0877acbff821491e84ca36de370efc10f3ab80fe2ec0cfc66d3cc729b0e1b7e2788f41 +a9d18cd8170dd3cb1dcc10c9a26e8463a3c151eeea2e6926b5c2cd182004a1b6096856fb5ef91f9f653727635d2fbccf +90337ae1e9592617e1955afd46a75b94c4bccc77a6a78ebdb9415c1f8b26f63f1c85cf6b524d6c2bf6627a1e6f8ef5ed +a9761caa535be91ac672ad2fc84ff2be6d1e82f9158d5cc7035507293ae81dfc94295eaeb04dd160c1dfac9bbb769eca +b1aa9cd55bf5f37850c788f3d4f00ef918d2d23bc33828776f0c58b40e44b16a24ea9dcd7f7679ebf54eecadb8061f0e +940a60c98966b5bcdc3edc48536eb9c1818da6ffd485fb73bc81a9574be737b133dec47b63d6e29cd8c23a361e0e0f4a +a4e680de4dab508d4771ae6db06546605f2593bd65f78662dde4730263af8acedf806988218eb0c7c1f77f530af02cd0 +ab571ca7278b721f93ee546274573206b1b9952c2d45daa55d7de6bdc138cb5d36150e7ed46857896d237b4b831b49fc +928890c61e009e3bff8b0daa02b7664bafef1785b420faf6771251cb707d8a53c76e49071e247dfa9ea8005ec8303c62 +95a367ea6badf66d0f63f800d11faaaa05fe64cb55526d66832cac53f330009499b32559c9415ffccbae56c608525883 +ae1abf1cd807b36874081eab6e2373c87cf629eff6e50aaa76a689c736fadbbbd0af14ce6e4dd095cda6d1145f0fc481 +977dc84cf8323c60de971668a8db05fd444da4b50eeb97d9d880b29dc246ac9f0f061bf2a383d01211bc9ad91280be81 +a406d16076a70d4a1f1a6dd38e23d34cccbf92e3c0a5c9187e59a9fef766d7c7d9db0733ca45f4a891ac7cd455c8c3b1 +a0663abbd33b0f5e748f01611ecbd3dab91fc5b114c91be64b131268013a9317f8055dfdd418d3276d31ce53d086e785 +b162e1be9cacc20024f607c7956f102a5820ee2f9f56ba0d32f05baa662a466a74a1d0823f03bde1ae72a6d71f2f466a +83b4ac48055e2cfcf0ce756b43e78a6f0ed1c5541e7526122b1148e9c134867d5efca0a9acfadbd36a57df939c282fc9 +862248b8cbbe27a5cb6a2dfb43b2e2d9ab030e0792dc023605a8bf0781b9aa070c794b6792c811a16211a376cdc289fb +8eae248787edba3de9e3bcdf231f8854985f2ff949d7f5177ee3c8fd5bd11c0969e37de70ec4e31d95677dff3f036e10 +8128163b3ff7419159596f44f5394d3e689c8e0e0579892f094349c005905320d6abf6fe9b8ca4bd4b089c3d6e4acc69 +acd4b3e17547e26235292692b972878c383a4c6b64e530189ffaa7db7217b618d93fffe710296b7578491d08d969b611 +b2ae5658b18154c553a2f2070e81f738194f22872bf8902b7abc3ad895377fa7b3f80f6de6b3a5abea21a940ac027483 +b1525f2f2ef8d2c1085b2ed1253658d839c35487b38d5875ad476e8ffc93794b2dffae16b08fc3aa323ca7ab11544ac0 +a53400c6377ce0453a644d9181b957a776d9a2592331b4f8a4a7de95f48d20372fdf8bf28e6140e3f72c0380bd119d39 +b5a7ad0d793e990d8963e201ef5c0094b884751405d40a4c402616af0d097b0ccefbbdea59f43addd1c1643d423dbacd +ae6b14d833b1acd5cdaee304dd6a6eb2a71f6f1ae1350854b2aecff96f9e065608fd0ca9a96cd33d757fe2e1e998e091 +80e2cd7243b864186a3a1257681d0a90606fa8b8546d1d95d2366c3d4da7dbf99474c01d3d5c43a6109256c74e6c9bb6 +a88a7df1259e657eb5ed462e107f3b9c2998bc72b7110e736ef6f4f6f3d9138771f18d0ed80fd5d0ebc8f7929d083e4b +a0e1a85d751e10325b615d7f94b49338926230ef0f4f8b8be662522a2c88da936079db95afb6e0946a9efd52a9b4c5ea +a675c04d985a2ea3ff94307a6b916ab0da621d5dda4847d05920b0767c937139c30ca1afd07d2f0bce8b3d5a43108935 +90129e181ee551a24ce6369ee19e06f45b231334659ce2909459647f1a15ec05de98592fe5adde04cc3b43116db9d0f5 +aaba2bea178ee9a9e2030a993d242ff6fe98e7838d1f82c56219e3554e88a7340a091fa18ab72f4c7cee7d6bf3b2faae +97b3aca94da90abef89516f75e01cbace459c3040d50aa1437a10590fcdfdde334731a1f7d8b5c65ff1136e12e897fc3 +979b7f03e234ca23ba184838ae492a19bbd4a79f146fdcfcedd5141936e0103895ac2a88de88e75a2ce380775cc51078 +a01a0ec1cbadda597be77e8b14bc14b0f46569f4adb6f66020fa6a5be7a89ffba6758c0efd5f0744ff11a841280a1464 +964b39b56d068b4a15935697bcef729f58337dc56da498d68ea8b1d1b7f76a54272ccb128876d1e4a07c019c9e4fc1ef +988563fbaa2263e18d428c54cfb9ca6a51cf8296befc2e35a079e15c3faf1b1424368615d1d8c1e2bd5e08e7cdb31172 +a21d160b61fc007eac88b54c0fc98511e4734b4a7ab99c00dbd1fed9c21b677b1a8dee4bf00d25d0a7df721794c3f317 +a89597d6c3c5d7f87795ed2e2226d8e3918b325b01485bd5f2dd716ab661e8c9c2b392012b675bfb102ae37301ede623 +aa47bd76a228096e32cf58bb0e248a8314e83552414b314b12be23df9fc9f2e3e40fb712a8de9939c5a0b8906e38d16e +b273523dcc5fa4849f3873192ff0b30bbabf4d5fab83bc2cf359d162ffd6637d9286cfe3d6abf198e73f8a5d6ad58fd3 +8f3e4bb4eb102d04c0e9adc54c23c62887c68b36e23bfa7d937f0919781ccd9722252f33a0d7776bb88f9b9781719f2a +8d55db59d5fe31012f44ab890dddda211949cc2ea8a3b167bea1d36624d8fc40f1c9f729e6b1c19a3ba744a578432c94 +a3d6ba805929a707ac68936cdf10f274404067c901854f0a32f3ca05e6c0315fd779dad5e5ee255a284fdd1f996e21cf +8bac2759fbc16b8d67cb0429b19a56e7fe33403015a34b5f3d1cd1b6b46f1214ab6af7514571fd23bea766e8a6aab874 +b4a565f7394c920f06b5a01c787d5e42ab976a51a650c230789a572d6b033703e1bcc0a40edf5cb8adfc5a22dda6cc9e +b719b9932203965dd238b4a385e32d0493acc7ae2308677667a53da99d1e9eaa2665d988fe4fc785c67e98cfd19d0548 +8178a1aae1bbc41dbca1004d4ffe4333dae81b221360b308824bf7f196f370511670f19ec14240230ea3c20e2a59f9d6 +8ef2627819a295400c5d01a60187a1a8f28689080b51e16a68fd8c08cb6ab08a92852710967a195e4beeff90fd956483 +8904d4f9cacd36adf844cd971229eca44b1d2649499fb59530f64ed572e1daa16f7b2cd2a35acfd2f9be1e67a4f07cb7 +b7024154b1e5b64ec3a6daacc4067038315fbb647d01801c673d9f202bda6c6662433e4d5a09af1e814926a08c5397e2 +af8dc032415eafd40bb0be547a87cfca0587933792dcb70d81fa15e9e3b5f8601a220306f6cd905ee0f77fdc368b2a30 +8ac617a7fc93fe1082af9d8fe5e02bf25ea759c5fc4a9896d26296c027a9d0b82dcc84ae98d86b1511e32d261ba2bf67 +91d9885ae9840d1e4237d6d2117b9fa5c459104dd6c6a6f27440621b789fc071d31f580b7bb576c825628803bea35886 +89491113904d2c29b55ce6b61488492fd9b910f52a052d0b94d95d2eb40a28cf03d90f2abd384178650d1d91b1994f74 +8cb0ba0f548f22cfb91bdac616785faafce5ac42272714a29fe496ef424d7edb8d15fa958b770c0da6b56ba77c949855 +ab2e1a0b4e2b8852c73388fadd115eacb38e565e1264aa2f063a7d5013398700e8c2c1768895cf6ac849d06ec9c6fab3 +86cd01ebb9f764c000891da7544ac4e4b94d423f13e039a8be983caafa3cce50592e4686ad51d6510cf767da420f9185 +a74348e78eebd24f80eee3bc542a18a74ea982a4f9eef029075c958c3bf42ca660b799f3b909c9c697a84a3da7795321 +a100c028c0ea67c5c1ecbb9ba01ac21834965db936dba128de480958fe869080dfb1900a2c7c69cde71ef9bb8a9fd4dc +b442b281b4d37feb8c8056d8e2514f672ab4fbeee26a395f09c1c9aea56c474fb9141d406fa065ba97d9444b01c44ff4 +b3df287390dd8ab99aa77ebc72a4871758e965ab1710e090cfac56d347d23099592c6e2a9186702b8c131fbae2748f68 +a12f9d1948a28ade9a065275e31ccb682b28bdcbce35f24161a067e5b971fa70a1dfe06203bfc716ebd79722d11cdc00 +8175478e7709b6282059cc0ddc836c79ae46c2b27e0da28834b77f5eb8cfa8ce599aaf4d65e708a694132d9bc6796aee +b1350a7c59046745ab9c0f4cf91763cf81665ede1e5f331263b41f3b138c10fd58ed8b5d243d2771babfd6b1715eaa24 +936ac23755a223fa121ab4ee69712d7b9a39abddbb400e53ab666f6af7db894cf4e0f7a8aa0678747fbf14f298e6f363 +b170c8ebf6c76138a0c358d40941b15505b6324ae47cd6c0b43d6c1b9e525b1961f6d53e9ec5b3030522cd883e0403e3 +894024007912e6f9e2402c88bfcac876f30c2200020c4a7eebdcd34faa69356897ada4e7a0b8d1d6f61eb08e1ba0a860 +a2bc33a7d60416824609412f7576dfb8c20cc3fe01a32aefe75a55464be2690dfc3dfd355a4c0c22f54e8bfa6e8bef36 +9357327660d4be2655e4c52c7537b9fec5e91a51e32da1b82e59c7713540dcb2778e3a5c7356c746b531e97b59dbe4af +8dd86033080af96d51a3ff31cbdf5a18758f52a2aed4ff11b8332832b69114232fa78547f7df13d0c423607eabb1c59c +b4e2b1cd6951858c4ce5fb181eeba255646d19c982bdbbf0898382344b546ad61ff5bb7a8f28965dd203b83984b25f17 +ac0e56c8d62f794fcbb38d635f4887739572ff07f1428dc1a7a3e6710acf918db1443fc3bb5360851cd125ba6616a91f +844c4d6c0c46a70da8d8e7907fccd46db78d579c51514537bf85be67fb8801bcd3b05838b46c885c6ac2a767701d79cd +82260e276cf6d943ee08e917a18ef675df0d599365cb98738189ce7ecba82aa23d25c1f4b0fbba61a7e8ab7f3b42edb3 +863d898f98a67e663494a614e48eadb8c1c5d14bdc56aa624303489af578947cdcbe8d80be042898a5ec26c3e4d073cd +a0d363e54651bf6ec0cccd31e78dd4c81760f1f3c384ff378498421489261aafbe160ef7d956bb91cdce87ade683e61d +b331d6eb3f13643fd9a5b0c1fff6d1580c4f37a30dcd9459c549aa282693cfd9b35b5bd0b9901cd41e8cf1e11b03321c +b46b39ca83ccac696b55c68720df4c746f08e37da7c06e1c2156c596577197e0df15b9e9f2789d9b046b5b5bd8f25510 +b0d0e1292389de8868c4f7a8c879d38a88f92bf0118b46b637baf2eafdf1145b274d137bffb47f5c59cc7c532c3ae90d +b872cad2f1bc75857a5eb08549a3bcfb310e27d47cdb7490947813143f633dc2bd6e852a0cad453301854a951ef1f8f0 +851ea16cae4a6232231f3ccd34ea94357bae832e186eee6ab57bf77b9dcbc127f36d8b558146099e7ee48d704b1e2a4e +b7e7833fc843cf82f6548258b2b92f40477d54a6e3b8595a4eb38df2bb5ae30a52389204c036dbff0f9e00a43b5adf45 +91afb2caff771bf8d150b139e84fe13a866cc96980af455213f370fe3fe3f0f417bf09c41e1097280b85e1eb33847a80 +a33c89c023fa115dba6c90c9d87b80546ac630c64874b7e07bffb8c9eafe09f33624caf370af79e7af7823091abbd18d +81a98f248f8a3de11c24b6b73d99652e56dfa760e7033844a111fc3c98a292a281e4ac91cd9453c92c2b26b01bbfdf78 +aeb42e20901633409b06e543cac4fd1c436fe0020ad555d8348a9f25367504f3645bedeaea6d8ff135b66dd50ba9b09f +a14ada772ecd66f782fa4eac3de7be2727b18cce199556a1155fd0855086a1459aa86cba22d5dbc628c07538bc675163 +840530cca6e1d1fbc1f16ac27f73f0e6a86b68e69ff4f5e5df2f0e4a804a03e0657f0a44ba218a8166c4ac3357b833a7 +9058d8096c6217e1177680af0351eb5eccc2a16d6546a210675d808946c46d9f395f8f155c626dab35e46c78006d7c24 +adf4c5a583ba22a7f7a529adfc60ebf18af397f5f07ed85a3c02a0450c6b1caea71b45f7fecfa3bda0ac61c845181412 +b119362f390bb475ced27943c19ed642d5b629c754f1e69884353bcab4c34bdc236df076d0341939c5aa20b21ba3a913 +a9d49c9c5397b0ec0fceb5228bd05275b046ba175212f32d82d73f6c43d334a75ecabe64c0b10ee5f1b8db13006f2712 +9764168d1a0447deb3e392ec56f55c42df460f807fe0b12619bb5e5e16188f66859ddeabba900038bde9388ce451adb3 +97dfb422904cf6d0cb8645dc122f5b3f28e7aff599eb9c651d2c12506a9bbd6d2da17eb28fa999d966c8356c11e08b2f +84699fff2949a39178315975ec902d10232b6891c3dd06d57820496503a9c4338da1cfd3b2fd40135f6995f776517510 +86b43cf8964928dea272ee27b1af515420e53ecd5bb789eebdb0f17be8c30e1db52ee442b5e8cf97ef98efca7989ec66 +82ae3b0f50c6420dc97e9f2ec6165d478f37ee810206d8517654fd2990b6a4f45d7b975f2f218613b06f9ba2fcfc8559 +b982efedc0e48ca2674ace28e8e013a8009a7aab649d81664d45557d4a4de980cf11e92f1df40400e84eac470a23ac24 +a43dd46efe1e8c7f9077be01654e73e8277f7bfdacbcf83b960300737a07267424ecd771e80447ef91c6d8455f604e3e +a87562949f85894aab48f90ee82882240fc0757b767c701f8dd94082127fe1d7d23fe70a71c29eb188c46a22bc1f4c3b +97bb0b5c9e21ff7c8678bc8a66e7208fec7c967e1bc97c98ce9bf8ecde4d1c3d277ca83fd3b4f31c62cb3ca21d7e6bc5 +aa012c09486ec1ee4beb6738c4208dfe232242b16df3b636d76c91639d92833f8c32f1ad362b9c8b18ee82e04288e9b9 +90eb28ca739111860ca7f9bd1eab7bb4dc72d626074279c40264a1a4ca8c843c206d4a6b335c05ed13dfd12fded2afb0 +84728e8e99578d1859a3adfc9ebc79151f50b9fd276a006d05468be9c0deb66ff6944ca1ea598200cfd76ad083d59c7f +801ef060263ee8c6f8fc9d56ff2d4ca5be97fa85fdab95d1c82914858888bc168de06ba347c88444f6942ca37002124b +b5d195b75a537e93a0bb0c6a863b19d70df4c6d45a741827b47d934c911e7ba69c5174906998584f49bda018f1270de7 +957e29c148bd5875c4f6be9bd230cf25462e48460e02c3055b3382ca908243ef619135c22c8cbae6078d0b07305655ea +8ad3fb31fbab9346690a2d7d54e2111923b358f76d0c3bff98bacffd1d19316208ae9f9981ce627ce003383661b71023 +a17a554e4a8d8bac2942da346f72c51274b067b15a71523c374942cac3fede9716ebad5a143ceb8d9f7800dea861f292 +88e8754368e4390c14a241dadb9d001449e011a686f9a1c35478d6664167b228911f66ad0924c9a3e415a8d2c9d4be2d +af5431dda3489ec8358e1829941817fb13d941630fdb81627456da13b5ffb1a1aa760981b0596ceb1647ab96562ef462 +9776a1e84e87fcd87c6754ed34839948edbad03abc26dbed7ea138dce4b35bd443015ee1016fd6919597fa2ba3df7178 +af81f6e90432ec7f53a76f33379ab26e5f01dc6a2e0af81e30bb2262b2669a716ec389693f7013b2edb52178524f6e59 +a4b8d60a9b5555fcf2775ee77ffc9a078e26cf666784a61b582278f86016b9278d756b41ecfd3a6f331267e18e33fa35 +b7d87ca5f9c091777a8db2113fc056a9f58c791cbbe35459c68af714ab6a7ebe376c89d2ffa3f78221afba39a75467f5 +920735208548bc795001d125caf099feac58ce30e9d61774864e1bb07a2111b6c1cbe7ab56087852b32f3a53ae65059a +b3b889e9d1581c9b3b0179755030b35781661661528a4bb6f8b9f74bf63dc456477e4bd6317903937b87087c9dbff475 +b2dfea553eae6a272f5056fbb860559bc8b507eeb16d70eff8c84883d39c1392e5972061e57f0b75bd7b194072b96941 +a2290bc9468731a1597e4db780253bbce0362ff342bcba189b69301fb3c2f6a8fc24f2b636dc60ddf99806692efbe42e +acf1f916a60866f1ce3ab51943111d5edf5e4da9c6c3d9f6daae86af1fa70a34eeac3f14ba83990d408a4fd9d4900b97 +9477ed6e38633cac7f33b7f1c7e860c5a6aa1c63398a94e735777448876dc9cd970c0e8aa0903512bf81c118186c388c +88ce4f6f74045cdd4c4c5bf31e54999205cc17c6819e032aeb92b668a15db95e065a9fd47796d268b73bd92907693bf5 +8b554011114114b54f5b33e686e91104617ad53acc66f8eb3da1e0a5b17e58d71df0ef7a5010d1d87db3bbe055efeed9 +b7f9cc8101b5383035588f0fd55c786bcf44e12bb7a17b7c31f2ef520c0ef7fec136e3cdf6636c54fe4b718fb4c77364 +91d0599d30426052cb8752ac10fc1474bf045d248eedcb027aa244061d3861758ab74fd4f5f946c3536665d14a3ec73d +8b793c9a7183fc606ac7b6afbb4f3700366daefcc21b9a6682b22f4bc059dc572e35d50cf0ae60ee4f5810d24415229e +91930745938e103b3af2e72cba8eb4bb674594d56a6473c4dc2793cfbbde52057778d4cfb63c0bba7611481ca1c68da2 +a961efd926d481dbee16f7c3c322bedb70bd136a0aae0cec7e39bde37696f6e8b5719dee944fb0d3f7b914fb53dcad18 +8fd4848f32044203a8f4bc363e1fe25777bb00010ce8b68860220f0db3f4e8c7028e8b5ed86f51170bb4dada05bbb266 +ae1a8038da6faf41302e4c09942ad7d953129c15b5399d43bf5d796062009fd1de1a3b414a0458d5bf3f9fc5f9d31f78 +800f63a0332f8e72c1a03e215b599e581b5ea42bdef31b33c82ebbfdad9f643b53184574c70f38f2da9f760d85b5812d +8140feec463a45d9425d90892249f503faff028dc901c73b3d5e880c23c1511825e6ded23a8a7feebb6e1fcfaebd58c0 +b7c375b4ee3d114bb9bd5a8c3042507096202d8dccd332c9373214d802ab25d98f66cad58dfd74e38657540c013aefb2 +965f9f1e7ec452968223977b03f72ce2829a07f869945db1c2da5be8b1d9c8f3bcff827ef082688b9ad9dd04cea88b85 +b0ea8e24d029e46e59f7fbea476f97a5ced59a95bc7364eaa8344d31a2fc825267ee771a752c5365f70e854f9d5660e2 +993202ce77b061b6d7331e0db655f20746d119217bc9f4ab847f86a01ca432bbccb644a86865f66a4544720188f4eb44 +8e09ba503c9ff4b6984d521b1caa558f1ec4f1ee1f7b6344bf06ab4786b31ab490bd8310c792776db0c59af50d272d79 +83409d572508229302258d0a6448d1db4decccf7272f7cf24de12c246535666cb6f6300e7077423aa5e332aaa260381d +b56d0f2c10d6ed265e7992952fa8e96823f3b9a4d1d91b7db5d4b8a9856bb84f97e4d0861645bff75f20c0ffad23c8c7 +a96f5cbcfd865abff7984d8c1ee8c80650667316391728b5e0a2d622ce5383d60d36b2924200490ddec4f148d77456d5 +a03c3bf6e098904d201dc76ca039f5017a7266d8ee2738f1ae04659d6eb363e14d6a50a25b2e5b3f048ab876480addbb +af15074078392616f16fafdb40b5106556bef78423654c21f59244778b1ffcf6761b50199d4a8bc48b00ffa8084675a0 +926200973f815d143d7a335eee17201c1119d9abc5ec98de1c08e17bde1b333a01658abe1b50461545b0b953cebfcbf2 +a8f406fb7916056cdbd2e361da7898ff33c96d2f037bc49f31d8b3f932de5957e4dc566bf91102e857c9b36df318043c +afafae58be5e0022779f0ba84fafcb569bab5562f3296c492600de01896e63d9948f11c2de06e12f6109d90bc1f82f63 +96e87f0a6912087838b67a76407e6b936e3c5973921b90abb677f66e8db21bf3d6e3331c84bf39ab98d876191629b1ba +a4f6b12878d29e0f586a8e6c94ade4259f7a3b2378e8b7527a3cf9eafa59c744d395184ad5c417dcd4da597c52b24aff +ad53851ff20fa8eaa0768a681a370c2eb8fe34660ee4d4ab589d812508550089c226445801a520fdd639f910cac75a1e +98aa5bbb6f3400f2b6a486ec64ec2a146801091836bfccb60768fcd02bc25101452ea55adfe6fa9df41d1f0f18f80518 +8438f4db523672c523ef470faf358c11b53a2c3615928e3cad31c1012325a8b55db2a247bcaae5bd8870ab1bdbd7c0e4 +a067da20fe4d0d648a1e560d9833dc68a4b0237c1805fa79a75226b3e9e53ec8cb5b3c2090b298c3743b5ac272c10faf +929883aa276eebc0e91a2e2d9edbaa62179235cbdfd4aeaa93d5008a9ea53b90c8f0ebba759284b2b073418752accaa3 +b45d8b1b9588905f604b084fee6bf7106160072b6d3c7dcea0dfef32cf8883edfe8b9c9e5e7813b5327e5538b6e47094 +963fc49505551bed55192b67cd5a42c222d4fcd926c31955cdbcdb8ac9d0f89c3bc143403db2cab9baef218062117216 +a75e499ab1c4aec63db0864427ec3f6c1a19c6cfdc06d094f940f596ea232c3b72ba2b58059f3b7768b88fbd8142aedf +933f390abe5484ef522aa6c7a86dcbb16ca804572b807cb55eabb856718933e5861449fc095c97ff7681cf712f0eba40 +a8dbaae051c24541274badaec1f1211fe0e6feacec199b302765dfaa06ea3dc31f9f47995f84944c60095f7b301fd4ab +b3028a5159ed3f268e44f74dfd8362e620160f6f34cf9febb8f812b6facddae22822a1b5400bf03cd30c62660856dc4d +8cb579725d6bb51c457f0b2bb9b08ea668f551597296967201d770a001d4c9c36692f88a59b99f48df78ba2b8da69a7c +adef0ca4837374a0e2d355d0212cfc1ecade90f3605f9a88d0bc6f2cca93ce040b847671038e473ca6d30af9872144eb +a6268cde4586b4c4f1b4e129ad1e51534340fd7ab55d587cb7c2d4db4d10cd066021d4ab97c17a255c5ee09c66780889 +a5692fa729d0e0158156f9d0285b8f08b6b4dd9365c15881319247a07af4e897e897dbcc368de68d38867749773496a5 +99c699a2034bd788ce582a36d9aafb97a2ccb4b22b72c5248f042fa2f3684d6d4bf349f82ab82d9452e6251283614c37 +b273a991919ec814f7c70d0cf086e281686c9148e31169f5ae0e4baeb743d157438ef5b913737dd2f858d8e84a45032f +a8df8647c4242842ac511e97e0cf16cea1c5ee52b51c56ec6986a7740ca4017a25a4bc57ce70bc46ba2dc463532bd8f9 +b0cc4d63ffd42b5b4c78f53def7e7dd3b191d7699368cca9bf5df22da80852877757349d3ac95df1e2575ceab9b9869c +9760ae1f301722e5ed8623f8d2c609ee57ea099eb059b8f013001b2052ab9bc3cf6b5159caf13336513dfcff9f11cccb +85ef087e5674e4ad4e4301234f27d4178f78544da9874b59793a5f6a135f7e930a956431822f388338d9562b71ee2135 +b910b55a97edb1475d78e79be7f8fe1296335bb941c6a3be58ccacbd74d623905fa60a9ef66934f96f7fad9dfc75814c +81af2cb57440481943e670533535cfd7e2fa38b75122856b791c6786301ec0fbb1cb1f764625edbfcf508a8823c4513b +84739eb2a6e3e5bd211c14e221624b5abc6610706aed7549b105dee33916d0681809e9b4bfc6568491e216a5a40f75d2 +95ba8c45f93084ff09a025492240a6d40160f263391d3c0a8a0e07189247fb5e11e4b911a7c589e0c11469d28496471b +8a028387899065553aea668dc1f87a0600c71e6239955268233c5ada0b18c7e22dfd892f1d9285a64c3485442b53ff4c +b9d5b97fc12a3eddd110c4c4978033bf1e6f4a5bfec257ce52a86da427393ed5913ff66e2ff121ed9328c9f65f8b7917 +ab1f9e9bd5d297261f8560c89a051b0c4c5e5878f9e218275e246f27de1e220eae5f468a561ee6f05debfa87acc3ebf8 +886f270cb12c777bfe563f53337776fbb5cf1ab0d30c6fbdb37b9ee90c3fecb8e902fc8758383b013eae64b55df4b739 +8d7832bb83c7c4ccbca4ccb1bb3ecb672ca75f0fec2fe53df51f35493aaf1e22de48773af53a386e104d9df27e90e9ef +85bdbe6b34f6da2572fecc3e8cf316471eb3a1900cd66a7f4e7c09cc19ca94ab060a18c84e892ba4082f28d78fb4a172 +8af656982cd77633423711f59a0e183c04bbd20d8eb9ece3d2f861d5464dcbedfc1af91fa6bcfade78b8628c5259e4df +87c86b68b73cbab47afee401fe6eff6c81a63e6f1747a03162ec85a59af0f81cb8b831742ab031b2b9e25a6721864af2 +98aa609303ed7797ba27904120c65892f3dc134aa070b393dd7d2132d62d5043b701eb8356f9f2968181e5cf09e05d0e +b0b19f947f2de43f583c22dcaf78b1a3d3610a5af4fdae07922bc881412057132c829b6ec75f18e9590eb3d5f44333cc +a4549fcd07bb3a8a52875311a748f5cd3774fab888274db876f278de5942496c5236e060e2bd4de2daad83c455a75ca9 +ad95f47b165d52556b5eeb077b887faabd92386ef751fe4cc7fe23d93df9a4c396cb75a187e55de6b88904b08d87d070 +a464536ab20546918408ed6e2faa4bf7e3a8f3b6bf79d64f28465fc2773f064829e1c9a1219e684a1c5bc4878a1b7f52 +a7fa2b33706d00aa5bfafe923c0ee9702a9b4cc11778011f924f6c042c5a0fd9bb051f17487d538023bd287b277ff1ba +9984ee2ff3519ba55c2b1f144eed781ac80bfab03f99c6df85aabeca1012dd964fb53b2966cdc9494b509871c0186100 +ab461ad3762679756dab90f337ee06e514e7141c72540f3dc915e5bbac5a421f55e0774b710587a726d2973c9150952b +b6559e8d6bcbabc79cbd6edcc9aae59a65030a2db1b4ac472c0e9be2a624169720d0b5cab149d856fd0f5f915eb0e806 +8480ff9f28560f7c67b14f5b4f8c4f17214fd6471231ac1b87ab2c4676c4f753b8515f7ea84fd0dd53ccc089664d521a +80ab73cdf335d295ca45e6a827c19285b2ecc9ed0a2e31e79c6e36682cc011d07380777c676d2c13531285c926f592b4 +a6d6f988e02a8177e2ebb8ca243bfcd84a20cc07ca516fac0dc1f1bdeb36c1cbc8a3aaeef178d800db827ca6e6cd3921 +af8ad11b106727381d33930a81b47c07893d28a044c4d8a2cb8750768ac3b6d520bff5b3921a3891c8a71ab004a66505 +91582069dc62a87db4e355a47c9328fb2e1b05b1300307d328381042b1e1cbb60829d9100c4a89170cb6683fd8063aef +848890ec3330d836d22a2b265567a5ac6970b8f4ad40471d9de83394485e88c075f69eedee00e278c94e34a1e67ef073 +b4a3a3df72074e8cc87325ff8283ff49485df1a1f241d3039f3ccda986125a4649e49c32fbc68ed7ae11595d13fe2b0d +b7ff88161115ce56e1813291c050ca06c7f9ec91ecd065ed37ff5a06a7c8aae8ed3ec75791c8830ff9bedb1bcdd582e8 +980d50a7122800eec11c37214d53f6fb9ddc75ac2367c0331d420402fdad84fd88ae1ad894c5a131b11836a364d47eb9 +8a7bcfdf4b9d8e5705b719879ca938977f6fb610dc8a1c4834c688e59f31d7ead7dbed7a3cb9dffaac44109dfc9d2edb +937df19e0aa0913b6870cbdfa7d4e7fb3915884078a1c82c9a6fe0b16ef32580ce69fd92bee5229080de79e4162996bc +840d9a1f2b4328abccc52ba3c4001eb2bcd3bdb3384063e3930883cf1a109e5f76b7b2044350b5ca25509fe9046e3f79 +96df8a0828a0d7623f08ba795ab904c4f0364ded800e44031802879a56b246f3e54e2bbf8399d342a497109fc9d8e3c4 +8d177c49d5aa5881aeaa76cc56b674b380afe49d32141bcfbf75b884bbe527834a5689308239e09938b9982a1a1e77f2 +99d852e784f0bed9a2b4ce12843e9576172b8b9ae47a2f49b7baf5276698dc7798c29fc610acac95ca53576a416c9d31 +b60cd0e0de30809e8a6cb76c27ff9855769e766fea0f937518adc671a38a7f065a06303fe088bff32fb76fa963cd7900 +ac04e993e8ba52fc2605dab83f99b41a15445ff2d2656247e91767231232c1c4fb920c7540381ae3a72b54bc9f5779fe +ad61ffdf9addfff686ee3ad20b671879242ef79511ee8f9454f86afb936b36d9b3882ba060bf1f2899a75474c1ac192d +b51e668a2d7097d40325721ed37cea59be4b4b76a763a74c7efcfb5eee8e6b0f45c5b9c6c20da11cbb7628f0cfd11d7c +9792c45a5b3734d4bb7c62cea667ba9fae560aacf90f0ecb938b70db06107355be268e6c2de2214c8a308230d4d232d2 +b6d88dff9399eff26943ec95f56425c8bfd44763e16cc042717ce4665cdca418091ab8e6b2bcf2274c2ef9a379d5efd2 +ae0699b0aa13a1f7fcf6abdbaff98187f6824c03d576a57aab4acd6b9f3b9a015f6e9ab94aeb090e1aa0fad8e8d2dc43 +86650e99ba23cb1c1d6950b9d15720f1498af47b26d7e550c80d59cea862db80128be858f92e02e3f70d7cee63fc414c +b215c7075f5faeb3ee51eb0bce56a95ac5c23afb812a3d86906f02490e79c006375631888e366fe99a34641f9c4480cd +aeca374c026781086457f71ababecd500862ddeb0bbccc44f5ee3313045e96771b8dc5b4d9ccad81e41c58ed16edce22 +ac5b86ebdc0d9e73dcc4c594d7a2bcfeeb89cedb9ca97f001bd0a187cc5300497085e7b6544b425fd47a53d5c31e4156 +a743d87997eecc98b9ad5f6360514ada33e2ea73476bf46d7343f7e5b32d8f5ba7ab2dd491d9504664e67ec978407aaf +b017f2a866d024ce71e27ed1b20f0b5e493c9ce32396e4c22c61a3082371bf13c789355156b242b5792f410ef35a3f82 +89125b6aa6a7d14a4e37879ef2e97a85339e65bc5ec074c354e914e53344187e30be2e89c4d1bb4a1d16d286f322e168 +a466bf238f3fcf3edadf8aeafd92740043b3759876057f24c04827ad6c4877537cbcdacf742acacfab2960c52aa04cd8 +87a5475ef40bd7e8c2f15f3f5f4527d6e69c16322224643a9c2ad3beb2fa42e72b56261a5182aa16333f7d5e376395b5 +8f3fd005b5e5232bee4ab0cfb045ee365dfcc37b83493ce5ab7d0556dff46cfebb1f33c896d4185276f9986e6cad2e84 +a4279a141d75742ac1318aa1a7dc8c7c0aa96a5a167669ccb80243548135403990bc115839ec2962e49d427bd1ba0a78 +8f3d41fb416a9ebfcdcf6010ab5efc0756f4af786b31e8320998a51275aca378d728fbef3cd0c792f2e29ec9ad58fb1b +acc980f4827a94b1ff687b28a8d3036fa890a12ee16a4358053ce343f92a38204d4447c9efca1e13dc04cf0c8364f606 +aa72543baece34e6d4060a6a4692bf2932b8b16792c6afc5597152957d997fd356b689d6e6396faeb93d85df4f638295 +82d100f51dab812ed73ec533bf12204a903cc5e064c6bd8eed16de9aff13f82dc98e7848b594217ab4a5da7e8f7fb5b2 +86a523669c04b67715bf0f0e2637b73e0374166b549fe49d6cadaa388a5c988da024a6222b29772f684ded039eb838c2 +a0e5f1ab5819c0a7270c53986dfdd70d6a4f118fa6513ef177ff0e05846cbafdc161fe94153ba9332c127c050c3488df +8aba7899eb9ab450cd2ead70b6e5d95e5c5d98ceccb73e77d9f04beaf46b20f0856cc0caa764a118539558ba9ae4c486 +8be8fc2069cf01f958ec298957adbc1a53c02f2a94103b93b3b054ab8fd019810afded9e786537abd78a50c77d0b3e67 +894c800cfcde35c96dd7f58d5cbe20ad935632dbe1228d32abdeb2fffb66d7d6db3eeab9fbe5973a07025417333a57b2 +b3ec3867cb63e03364d41dc3e41fcf70ace99721e7266c36bb3056b24580a0604f2facb4367cf01cc76d9962f3a2e988 +a2bb713e8ea44adb3a70212a24393bf8dfeb1915d4d05944c65709cbe57ecceb705c206e6bde02c98a9c301e43aa9dcd +aeb20701bcef8bc9e9d36a1955c4b7ea80ea9ade7d777807762f29b426ad00e1978ba6eef00cec668c2251de0f419d5c +8a7581d12d4a4e3ff3892601e6ed79ec34663fae9d668d84e8df6a115f94e679872f5c28cc38814f81fd9e4e878f019e +b7c07d7295989ef5410cafbec64f216c832d4106c941b2226fa00d098c9b9000bd4efb427d1e2e80ce051a7bf6210084 +aec832f8b6936f816c955d8636659a5d1cdace44a0fd3f90fbed3a5884661713e6e94aed01a6b72474f36c52407503fa +8042e5c0d7e620bcc9e263ede1baa893671a8cf29881c59337bd1bce761b2e9acf547bc8130a60b444d39f9154b78650 +a91977c01b1c62add057dd99892924934b35b1135f8325489fd6333a69a59ca57dec28d1f874f6c98adbe5d08e0e4198 +8421d65be8d9adc40866e77bd73e71a5ef48e2e4673146127d3531089da97412733412170e3fdaaa4361aac1a5e56f5e +946ee24d831c7b11ef8e669c222b477137fffc0f094888ce669cbbd3631159ffc09f7c9d9f742b49639945e3b9adc7b4 +979bb03293c292c91fd5c979bf8abb1629662e9413c01b8a87420c360a9327292f2e4c6e0ca9cd8be60f57dfeec03259 +b520f2d2f3878a8049f7de6c299759cfa959b9a02e737adf2d752003494c0d331d146ae4edade7044d533c580947689f +8d6a8c1dbe1759a926e0ecf107831fd4b2021dc08d374614cbf5215b57ec2bc5950ebf375d346e3c87daed54716b72bc +94ee68b9dd0f66002930c16ba88a5ea80b9de3aa9e45e6136576ce6ce41bb7fcb6b49c45f81940f213d5ce0249ee09c0 +85881202c05d89bd1b5d7532a788700838b18975cb452344122cceecef65c7ac715b0630d2dbe65db02ce7b680e97e35 +a5ceebd1008808caddbf6c75af39450f15db566d3dd32a30d26de73fbde39eff000d8395c00662c95ae2daad50abfea7 +a4b07595b6b6b897bd3be72c74e43eb6831470f64efee025a64608215f657df7d3ca189ec26f954aa02ff6b671786686 +8b16cb579a8b8b26726b3115b5c543a5a4f34888091dff627e3825a761ca0962fd3ac866a030341429c4aeb93ce78112 +a9a82c5682fc65f079ecf71a44ccf5f9f41eb9179dae27ed932444372d4e021355803b417a8ad7a7c8a586c5cbe30cb1 +93b34e109f2126b51b97e69b1737e957474c9d40f6b751c04685189bb133c2d382e6486b37440e261467db3d2f29ee1e +905f8369204671bd9562cf60a8ded58f662954442b10b71f4c45a0a36b4a5673bf7b65a5e4e87695aa660ecbc39f88f1 +955feba33434414ff9cf21485c6f9fc4b5058ad539c19143559400c9ab7f74db43237d9f31f4a88181cc20f07e8fc4aa +8a34c9ed9b8c41fa614be31c77c199dbb2a1e4d1bb16c160afec5aec20f7e7f478d63b9149c8a4d8e3c513dff2af9a62 +822980b7928288a9a5da9dbc1c91d60dfb4f528f81f08b6f1c0a28d7e9be82c6a63a46d99011b8dfd34a87a5a3f1d0c3 +aec7e6ed0abaff22eab5dfc580d537946420e3435dc41f435f10918c48126ecac528d60b44ef4e62fb85db67e0c8e36d +a1fd998b8b128db2279fbc3dae9198a409ca7fb9b36ed0cadeb84fe7082cb93f28ea4ee7a3391a841708c689d679f334 +a40de39679459a2250798282eb4a312f8375e1951f4ed32e75306548150435885e500706b00253eec9414ca6491c4c9b +8081a4bb86cd242e16529830c3262b0be00012b3b6f160263d46b04d2aa44b198613c4baaa64b36f881b6721a253aa1c +a6bc346e5fa4564001aeefe393f48a3ed7a368c6f7c7d7680a09edba7e6d3d1106f64c87c6bac96b4057df90f5d45dc1 +a98a5d97d9a19f043d958cb116da8e15567e55a2b3944b651191b008c13bbe7d0bf6c8a23379778294c9adab61d252e3 +b7df57cf1b44775bfc135cdfcd87685efd869db167df4ceeeeb7a9f08f6c5ed8d9b710aebd937823efa18716b69a57e2 +8fe10bd760aefec8105da76857162bcdec8179301734b20770407ecdd9c33edbd69f7e588ed5319d4232fc3268a00a42 +8cc02726b8058c9bfe3b0280bb21b9b3b6daeae513d6065ad7a4de0fc5512af9a66bed411135c7b94cbabfd24140434a +89d3829703505ab18ab307b76c950ec298f8ba6ef54774db9e69423265ba5c1004040c2fa281a2b18f7241d1b74d84fe +a47c71b9e62f1ee77bd4533a553da877e6971e4678cef7ef87e82176e6b8e27388c8cd36c3d5795cf10088d50dd55b42 +acad1f8eed5fbb5cea283de5cd02892e951e4bf3b35a52c5d8769648feab6ccd329e58bae2bc3ee7677b61f6f5e39d47 +ae385e9c324830dd072baac0303be38a3d196983f55c0d244f5798b662a1b1676a0c409a439dba0b1a25c9fc62def254 +84b496dbbed4aeeec4b60a79ec9493cd66ce08b56e5d150c2f18b733b791150193e377d26eb32ea5d343fdc1d868e111 +8a08b2b4f016078f58d83611df0c0098f245807f96c97cefb000423e368f868bd3c0b90c99666dd299e42bb27623af77 +8d7f4fa64e82d56e66f2addf1cb5e4e4996098ddb4e7b32dcbd596d1f9b5221b5d372f71031a8c2018965473cefd9c4f +92aa70f8d2df60c18cd4fabf6c7c4037a7042b8e98aeed4477e24ccb54b3740e09304c97b9127abb4a08851d2b701f67 +89caf48e65ccaa36aff775bf1f41f9f2da1bfe9f7a085bb70161f445e9d393be27e2f3434049c174eb34c69113785845 +93a94af1408216c57becafde702d468a7462750ab241d1c2ab08f37789c013189d09c1f2365a3ec37763f376ee9becae +8173ce1db7f69d66313dd5c5ed8508571f9391ce3db70baab55d89ec5e8dc3e77a3972318f7f3639d2e1b13b03be9cc6 +a2fe6d73a3d18fe18fb72247802d061e9bd0869561b704ebb1b1e0e9548fb6d419b86871e6959227f134d7a3241a06df +a2cad0f87e6f5174ecbbe3078858ff5dc27b2aa576962f157ce62eff5189fa13e96723c0d9e7aac0d40ea21e305c8678 +9915dd60810e435142124d71883dbfaf5dc08ca0b8977b3e7a608d0f0639e7a4845baab5ddc4879c9e50280366c68ece +95635be0487256d2616c829c9440dbdc3c601ee91891595e6d8ae346d24a592d955e4fc7418a9905fb9d54b428a43c97 +a2843546974ee2de4f6fe8225dd6874613ae9bdcf72000fd5176d0e0f8f5edb3276515513ef521d5778ad8952f338ee0 +8561d38a589c52a212979725faf7be97367d5749ce985f9a2e12c6766b29163a3da9490eca4bb32741589771500b4c45 +811d661a4f9eb427f8f4bc275978a6d491aa7cdf61ca73a9ef34643e0f3bf563ec656aa515e78397e5642d2581632341 +93fff93a0de2427ac7eafb4463a93441170cdeb3419bf77612eed46692797d18cc4e19dcae39eff352de736dd01d5746 +81dd548038d5b623f0b888b3dc60d6aedc831b1dd78cd4f0dbceb2d3bc9c0d22024f0b5a3b9ced7e81b2d46f7305d13e +a832557a3dd82800e4e94a67903f51683fa8297de37421877460dab87119dc025fcbc9cc170a19444dbc88c7b0457496 +814509360690552ab8d42507abc6060c65a1dcfb8842421541e71416db304546e652db76570d6bb48ed9e9b2d76fb727 +8056d1b8aac8427f342751c0aacf67f9001ab20f00152cbdf8fad3652689562aa8e9aef6023afa46b8825e8d94ae5bc9 +a2ffa37b369376605ad7f6cb9f22a2b4a7082319b9979c11d4ad6d241400bdd2290600656ee55e3a4b3fd68e16524e11 +8490c93af483972c67ca0e5785abc29379ce3c1c96c2e458e3a6107f0a014a57b5698c580c776e956954d475fe205701 +b825c949921ba71c96de22e94da6323719225fc7ee72c83732770286fa3fb5b71bd7b270c7a0afce0099ada32f7c6490 +b1885f788d7b67e0af5b20d54a45491556d59d370f04ada5e4cbb5887948dba99374cd59536862519b3057ff991fecd8 +b1ef801942d5fca30d154c9a3e0b86dc0e9c7c2c3f057e3cefb5f054eeda90ad24978fac8ec14f9b5224e65765d6b4ea +a3c839e07cdf70a9ed0b4655fad199dd442940eeae518c2b8e7646ff4310fce463ca71783240c884d030f8b3357cce83 +ae94cb8ba4cabfaf9ef30549b818316af2d26dc8fa1f50a6c8bfd7f04b498500b19741cacbf535e034f1f3d4ec2a1124 +a8a084ba3f2642c7bbc5b0f4ac26651cd3de919e13148fedaf6d5f22e7aff77894af196c5819078e2522ed23bb65ef82 +b3ab3b44f45095b933444bb9fc78b7ee11eaaa374c8ab360bd222f722d61eb41320642ba1299ec80ddc3b9dcd2eb55a4 +87dd0d20325b7dbca7b1eb6da8a12e7e47da16391823a89c93e1f2f32695adb434ad1750b59776a90421a015fedbb0ef +b11e01492c916cfe3d20e76b46612ebea1ff0cac57b0cb68cc07cc7c0faade09faa5cd606916335420ac299088743b10 +99f6beb2e72a6b0467519afa05a1dd7994d92806b807c8a2885f3457eed082107d36799391e17e0184223cf9de4e8fe7 +a299ad83a0fad43fe7f786e38ca80d3b44778b22082531e535eca364f849e4081bc686f1f80eab56ab6aec17ab744450 +afb27c4963616cb87eb1b2a6e5d19888e9ea85b23451ba2dff047764e2f6962d400326dc0218247089ba1a84c05e58a7 +b852d583bd481d6ff8eeb5e0fab4ebc1250be321e0e571548253e4e72127903d9be5973d751f89e7232d115373c9cc52 +b4e1b5e381407cbbb470c65b73d2b2b381ed3b175b4b54acbf0b95dbc70db08a92f4f55854c79cc8c6d26b94f8ab5eee +b71e65800851da58ff87023c23f7b5bb6ca95e9519965e0b865378d05ca8581c145b4d558d662682c55b45b8b71af53c +81730a16541f7968132853fed4e85de13af402556f9c30a43924caccdf86c5686846667867b72af599ece97f03d3dd6d +ad60550cf9e6a780a2c25d08fe8dbc8fe4bd374f443f6bed3aca1ef2961c7d05481a70f9bb676924fe620e3d61652cb7 +ac019af1f6e665d19c6a5a70258c32636dc19fbff0ef6e0fdcb3d094c6e529ac6c08ac491a9e98ee08ed61a7ea2d51e2 +a8eca7dfd0cd58c5e17854a0568829310280a4911b6a15bdeaf20574a9f7d9ac8480f18ee29ede483fa0bc26006794c4 +8dbe5cfb6bffa9ba5dab88c242c344c4989b205ed3085f335ed4bf3c49bed17d451af2a8dd67e8fdee3f65de15822dcd +a97eeaa54f35459567f09eec6265f8d929728cfcaddc66677f919aeb92952d929a6c9903fdd850dd13b73f4bce79d884 +ac6c99ae1efa9fe6b54d44a513a9180b2042adaa96fa5f6e340269806120a19f1daad47df8ba2c9711d5153722a6d499 +a2fbe05ea5a6f33b71311f4dc81ff04f6aa8168e8d8d4eee9853b967a1004ebcf79ddb4913e3be59daaf3a230db380d7 +a86f7695babc2f4b17c76c56b20074e9f9da9d87305588fffda5646417450e634ed6fdfe72c7aa1e8d1e97f60e7a48dd +ad915ccdeaf2588537bfa1e992d1e448bd6b9c9529e2621d5c413ad639da32760013c4b41a5d94e308996ff7dac64a83 +b1581b8c51344d3a942505820bc6ec336049ab975d36e000622356aa43284e7eddfa4b7ff5f14a19f7ab198213976ebf +b2f31236f21d9296c46803f5e3997f07c7113482db0cc0ff068fb8efe5fd66d954a7b9a82cf30943cc22538652b06625 +8a4144f0ba0c452eda1d50e981089edfa3c9dd9209ff905ee6a38d95d8359911da314d3482fd67f59d9891735f76e215 +98767ee8e595ce03e3d16ab567417be4dcf090c02d30245694a0d079fd66529afe997b34b353de888c7e18a418d85c26 +b6d8b173b5547392f2f26f4fcb2837a673e89ca55263cbb6effa4d723e884a5b8d38fea1b679f87e9df636aad6b46ab0 +841460efd32ba16c34c42809f96d56caf3724d1485428a6cc5f5ba174ca61ea0710a0f69c2f85df6a57635ea86e335af +8276af685010c8a0b645caa4f80e42591512bb89d719e366ff87813df6169828f833be9ea90127350f35a42532fd3a49 +a2a109a3e2f7ad38b9ee2b433589b01607a223b8add9e8b1c1a607efa3fa9f8789cb08667641b9ba410b2f40bf92a51d +a346a953c8e282763e931749a48feb574234ffda061ae39c590ab87d5ebea967c244c70881d083c5b6fc626189f734f9 +81cc5c413f1c7d445ea8fde9974e723740a882fc250b0bf3358efa6b336b9b99624c1b8e31b69327aa653f62a53f5a9d +996eba0227641ca6b6286e6ad221f266a29e1b9f7e42c106b5390cdd1ef46cbe21ce699eb097bc0d958855d5bf914597 +ae690caa7eca542488f5785e7c9211a398cd8f7d1218d459cfcf3dd29b8921b38c52affcc9000e742503148638735ccf +80e427e7fb66d50f1352680086edface5ccb6d85e80cae80feb82270a2d60ccf2365d642fce10787ec66702e5d16ea58 +91871c7cf195a4048007722fb955c7d155d7c3ad7d0bd21c878f387038ca2265eccafd0f68b38dabb117e70e101eea88 +8069081c12f8aeebf4026ed13de285079441448acfac132272c3d7798b4ee1335af03a44065d0430ad58bd6d1fd942e8 +90428887751c40de7656a7ccfb330dcafc09c1beb2cd6fec64f68bbd4f24bcc4cf6501ab4bce48bb562cde45613d2dc0 +8a43f70442ffda5f1aa1f51c9a920e1aa0771c1e391dfff2deee6a84575a6490af669e39c53fc6cc30dae0309d8ca5c0 +96169c79b628ac7b6af486efa5e9f1146e0660e87db6e533ead7136a3936313fdf4f7332cbdbb457840ddfeb9749c653 +8d48fc06a8965b810b6134b62f04a05a7d2f49a1d0b3978149a7feba4325532654b6c4b24070746f5d5b0b7c14f67dfd +8e0d48f26c8a56265b30fee8c7fa702424f1e26150b9674d0cceb48702649ba721293d465a1ba3fb1ac60269e869b78b +88e9f198fe11451fc696ef54769823fc32515eac9cda2d3213cae4d22fba325799277d6096a8883656c50f5a8696430d +aa9dcb2118c37ad763f7c0223156c78d6d9f8e90e304674036a1feb11a4fdfd7deaf778b17da8041abce0e36e0e36188 +8400c4e419bbee5658077a20ab04ff9786619b017d67ab82564698e1b184fb9a9af86d9c18b073ec40ec46cbb3fb3b2b +8142cbb7bc60cf21ccf0d75df4e6846c99ae97bae9f17ccf98c7cb191f1e81ecd2c14b12a077fadc68a2ed2a623c742f +981d555e2e68bfc2b5bcebd10e0370ce317c9372c8a87a5395a5c6c530a9816423b9f72b41d14f50e887bb6d0251bb2c +848bb8b2401809f2912cf06b03225bfdcf9ee9ea6904ce89ecf70802ef6c2c7cd280e06487d65771af9654c1b1e8deaa +8c580e9886e55ed79103ddf6374140ff05baf4d725793d638217e9e3e96f0736da7f7c5b6d8763db88eecf48e8de891c +b06bc33218c3166b23a9a6014ea12fb37e192985f3b10bda9162a4035123275b64b72cc0ee1810518e5252fe92cd5c04 +a6912dc81698e3df17f06ae3db6c33adfe817a2170b4f68361ce86109a0f0e9140a07e1782549da1bc4f2d37d0f39036 +b065d5cf0501d36c59bb8465424fd63bb558b7eb55583a6d162a70b715948e1b767dfaf05391253e021cd3d56bade1cf +ab152ac3052fbbd3fe0bea5620b49cefdff77b88657f3357fc21870711d792c5e3ac63162e7ebae0f1df9e0f30744bb2 +a390909e962c180bb24b61d7d687a3f7c7bea661e8220e168707f2e078e258c5a6169a851a770d133a05ad5186bbe324 +892973f5ec145ffdfc985330abd7f259d4a65ec0413ca3820b17ef4f000b281f82a9d51732f94ac88c9274d6593eac9d +87cb8a094b419da7cb68be45dc8f4a037d8216aeef3ac38835ee13035d59e7ab4659264d8677db575735e1fc64e3e36f +a98c7f03b1cc6beb2260769c3dc81488be867acd125d59442bd10f2fdc9fdddd8fcd8228da84dc31f0f0acc194007c00 +965d1e394475e014628ddc76104a78e13a5b817829dbd4ebad6b4b89051807eb96442b966c8217a39ea267e8b5a6b38b +abcbc991bfc91508e684080dfc954cd6dd73c195742a82eb0163f5c97cd1606f8738e9e4ab4bff2795649461dc84cd41 +a433027b2acc4aea933358792679248a096d53d4ac07a1ab7e4927e51c4dfa85c456f2423a406f25e47805419213818e +b366fb3ac327d7a00b72d5acb69be9d082b524cb3343016d1003db18ea00bba289450cc5005faac555374e59175b9419 +9555e58051ad1e2f6c81bd29d348f576a9d6eb26a35e8bc95c441d53a612f254458342da60b58c6be886d9c8de7bea78 +a7fbf7825c26948dd738c80887c3b28da185c734c511d0703dc78053e7b172e10a8e2a0f56fddc2be16e2bed461e71bd +b1dd8652d36f3db73077e76278a35e785bb5a4b8733f558aa41a17c89f38ead1110e1e8778e1614c22748d6047ce6dac +a863027529e486aab963e1a156d447977822136a5fd39bfba46b21ddccf073a3c91553ec253eaa82516f9c431e9f289c +b13d5aa7bd04893b0fe8d1a5f3e997013773bf2646e78d87d8f209fab9259cf78c9672b12137def97cdcf91b5808a35d +88db192dc90b7002f5eb33f1c8ff1334c2d93dda67f0c0e38d65736f2e401ac6379d9f5d9246ebd80902f3bd6d87830d +a4ef3cfb3d530baf4839712f8bb8a8dd23617acc6a9f2bc82be1b306c1c9cb88843ae0f69b98e77b1fa1d78286148e4b +94dfe56182614944ef448113a7f1fc4bc20eaddb2324ebcae6cc0bc10aa26caeb43dfc8863fbcd417ef972810743040b +8ab47cfc691b88cd36fe1870328fdc17ba0e4c1d0ef73bb8b5db27cbdc0a603808cb1857787b8033049e26eff623c527 +b333b7e76704003b95ed45e3846d8c2c5405b0ebe7d4becac24b167d0a050b2a408ec0c91519c1d1a72b26b5d7db1c9d +97a92f918f9c1b6a1d8497f15622a7554adc3245402e249c3718afad1b5b9aae6a4b6939e89fbaaef67b2e43a04cdf43 +b1953e13b6bd9c08c474532953777b0c51ae9cff100764234cde36b50f92d644809f38e029ccc7cbeee26be36870d783 +93bb75fb71415239557cdc5660dedc5cd7f5ed9def5ff525be7178f61699cd944b04a2b0444bd7006484f0f9baf0e6e9 +8e8cc63d85a4e4304d1800d25372e6faf6d180526dcc8c0630f28275de908d71985c0dfd93e785a76fd524b0ed0e4e77 +b245801c7f881612073e88c3bd82fe5475f4601e411b957afe6907cab7368b51dd020dd95fecc46328091b7773b14e78 +87b3b7259be35a056af8eed606649b135527e260deab897ce819802ce8d75775b40405c3f113f6236b33c3e6655d4d83 +b25aed27eeb1adf94bbc7be0d64995b4733d0b76341e53c87ff640201ce0d3cae09940175dfbeef67849a71bf21c979e +af968b423de43d997edf07ce27bde9e75c71ac049ae89241f3c1049b87dff86182c0afd4fa074dbc5a9cd4dd92ff69a1 +b3f8cc443a1bae1521372b530f7be5421961bfa0f55685af79d30471ff23a97d1dec0771258a206b5587e52cea67c51a +a1b90c3c86d3a7507c3ae71f632961765d93633ff16a616bcc0816ae3c2aa6d26093fe6f997d020eeb524b4e2eb366c1 +b1aea68ba326f7b45c8998e1a0c2287742f559f9c6a4240f844f3f280d1265dd243b1f1aa13c2753250f9208a18c918d +81fe26c91a274c7459edbadfd49eaf405f52966cec4b6102157c33c8769b51552b8f8a2d147b2b9d797129f89b400ec7 +a6e43a505b3568b529133eca1a8269b47ced62500c6945ccc622f81edbe80c931d9cc0661581bbe2ad1ef1422b758984 +b5ab7e184132eb1a19fd3c3fd1cdb71cc5e717f55eb64dc1daabc740bcadac4d94b9aea4535e2bdad3f2e31c317549ee +a49c369ab307427d998061b63794c6706ff42e9b0214ca9e86a868f96d04b1d72c31014c6e0973a17c89a992320b7732 +ad771162b073e52bc5cdf2d4ae6486c008a8247c1fe7315d44a273f88f924f13f4a740d2908433add5743268182d8be6 +b46d58e017457c4ff70c0c8af61d0d8412842c1b562eb03c585c015ca4ad285daee078f9280d7640f114a7770dc743b0 +91467799f773aa08984c2c4dc7c356ea4a12663e7837f218d5af7e43ed37219ab3179a86db09f8f7c3fb778b05666d75 +86e9698735c06d62a0b108648831429ab6bfe9238bc2f568eb573f0b053827e52751eca0c6a0a6af5a7f3029f827b86a +a141be33a9f7d7ba7fe00fe9f89e3a2c22dda9798797729c4a46f55a6d41bb1ac4e7bab36179093bef218d6bdb3974d1 +b2f65acfc1e0f759b614945f1d7090e33b79603a6d342abcb8ecc71f0613a744e509945accff826b3d0604f7a263eb39 +b5fa75141de48dde5cf790ab9996b24701119a8100596f4732454da9c578a615a5c16366fd3b947728fc2ab6fbb3e108 +84e4b34ceda4b6084b5a600025de3c0bcaa2dcce051133a17e79cd1d628dc8dee83419c25195cb4daf996e14becd9a45 +8c3e45a100cce2158cff58bcd3c878c5d5e4b1037e7a1b0e678c5280495a33d3e1352f5b828264f44bbec01aa1123d73 +811a384d74a0cf12084a8bd4819d5f11b4040f6853a68e38b170e7562d6a687e8689bd3807cfa79cef9aada0debd54f8 +8ea91afcb117af397f19981b19ce616ef7360b500f5b1b89926806fd2e77e71c4dba7f87fcf361039f8523d803ec55a6 +a62ac2eb9ae321f9e7c206bf6334aae5c90aaa095efe410b635107e33b9bf6fd74d0fc615e64ff79b6eddc5f085e33fd +a63e28db31064568401109f0b5b07dda7f3a7bea90aaf90502ef68011f49a81abb12ee78ceb600bdfb11fa414fb67bfb +81d76d092b6782cc148384bf146e7051ce2c0efdd82435c0cd0c18b4008c95af7fc2558d230e0d3ec9189e0cac0f0f68 +ac91904e9948b3e84fe0d71a208e8c8eb26067525752c3e475556bfa30d88ff2a73121a4be4c2425a584050827c81cb6 +ae3b570578d7fd3090aa3b20346c2a53ce2824de779ace37df9126ccd86336843f38e9ff0eb4120394777ec381fbbbca +a926fbedb146acedb12bbdc00beff9e828811f7b1314640f745191e8603f38225b64864e086e5092079cc35cedbb27ae +b350334cc65e42f4850f98911ec4c2d97d58cb9a0e3488531ea9c22475cab0a5928405fdaa00e1f40d5bd0b7bf67670b +8ef35ac01120ddcc15750a657728b530412231f4d217bb13de919ff4f8f52d1b9ee709d17ed97f86e2f341025994ddbf +affde3d143f29cf6987f5e90a91cb479c0dc5b109af954f36fecd173f12f8a438e67e7b8d9eb309c0c0082d87711e2ef +a1209dbf69e3b804210d432ec25234645af82d6da836cc629c73bb0d0a25193af93cd56110ee850aa17bf54363198fc0 +82e0de59a108642e92a29b8656db8c27652344d13737bac84578268edef23e199465859082d03725aaeada7652ccc7f1 +b3b35ea70fdb6c2641d7c13b0000be16eb8c5efc4332cd3bb8e2051dda205ae230ff01ec0832970be7d60f3daf350e87 +8c568232779feea62faddbf7121478d46ee1a7d8085cb33877a099f201cc010067be11107e80ba95308352805aef860c +976f47e130e1de9b12bfa9136ac49ff651ac063f77555f2ff09ce9ebdf52333c523860f0c792dba140aaf69aca99c525 +b5feb2412209eb2de3a2248b74c13079921ec3f477690931cda17f6c7dcff9efdf8636b1a7569f093b07a001cb43ede4 +8afae6e487fabd838c1582831cd8cb296fc8e131946042a2014b39134013299c4ce0e783055e8f281be665086dba185b +a32a9a65522d11cc99e9d3e8cfd191e1f8a10addb2cab8d31d5a6416c31a630d68dfdd9d9d8874f00aa69ece11d117da +ad5fbc40bacb73bb06bf1624513333dd0ac0d38905d795751579d44aca9b8c98d68584eccbb544ce7a6525ab7b0facda +abd4b7148cc8f16144f485fae0f828dfadb461839bdb86c492e25a6252c76f260797cdd1c7c93194b8e84958eff0fbdb +a7c45a03c4ac89baf453c960cb53a88dc6c6eae66ac69fec2a2b3211d2e7b757e1cccbf230b90cb9222b66fac0b9d492 +90a6792b576cffdaa0a850a6fea5fca7593144eee8409051e9875509eab7fd40934fac08e17fc65568656eac7b1e9de6 +a2566ffd99d37a7b793c642ac8fb649554f892e2877f50308d22d3a06bef840d2c934a7ac8506d1244f3c447d186bf7c +ae1345fd142e9206b840389cfb35c9c39acb688f9189526a869a0dfe407738a8df6c03fc7471edf857be7aa814ce1bc1 +9311404d7d3fd73292b77fbf4b80354d10aa99ac381b91c981a2a1604181a4b9a4de37d062f5411f26dd26c376739001 +b1e20955898b261132868cffe4cc2f29c38b8ddfaa184bd9eeb7925a4befae6772b91fabcba01bd4e709f34286259fa0 +8d83380943ea47aaf8b4ab8d45e4d18bd4e03f85edc8f5be1d30882d73caa4ed34783db87d261b442593e0f282842590 +a00f04f77d7c3f6fa785a3af449533a5c0630ecc9b7b287de88b7a05a04f64020e0d0d56d6e4b495043a783ef3c99195 +b94ac0baaa543c504544f735922490a493fe4a5f569555ec4146800b5e5dd94416bbbe704f1483a9721c1a2cba2f249f +ac113a8a047ffa95b9ed720b1226376fc3e2da50ffc8fa7f297e5a1c3092995e9f99dc8afbc76c20774f52745282eb1b +8bfaa0b1265897ab80bf4731ffea18f1c3429e1bc92f4a30f8b60bcbe9936997115c0affc4956668774c8da63338049a +92515879dca00bfcf22da46afdbe75a05237ae56f48e6c14945b21dc150df087766eedc219933168fdc36ff94757350b +87e49208762dd8886b602b97b3325f8a3dd4fa3c7ee1628c13e05148461d17f809d29109bd99daa5721f46d623c0f19e +84175e2d8c4e0123eb4e1a65c74e55f9e370e13468c00289ff69f6b7f081d63c1ddaaf129af71a095e3ce63184a8001c +8356629004c6b2748af416c0047752641dbfdd2390ae1ffd14fce2d9bd92ea0250e713f60e46afaad14e5004513005d1 +84e7e6eadf06096fdabccbad70ff56744e00315ae5ccc145ed3874b3f39928395d6cc175902fbbbcf7bbed77cb2ee13b +93932a10fd8f317e00bfdfeeb997b107d73356e093a2d66c2ee8ba13c9ee0fe29f0b1da831ed45c2017858cd5ae19c9f +8979b958bfda61d19615e9b46b848715299ac51f4abb0a38c125d102c5a05fc535f6164a5570ad86c011e7edbcbfe9d7 +b18148b9c75eb3b01f378f3272f1de0c5217b9865809ff96542c57caac758e260623b2de445d6b07a482053c1dc42089 +8cb5fe4df4b84b014be1cb91c0f6f8061b8e255ae7279852de538bca96285a9a27a067f606d33645e71ef354b6b6f0e4 +a9f354647c6c1302c4ed2e282aa858968718512a6c4c7389b6830d1af6ac58e2aa3584dde22d330f0d4c8c710f85bbb4 +83dafe6b6f7615c24cdf94f8adc5c6149d0bb5d7270a1357dfa077d8fe9c6fa0a69d8cc86b4ada83da4474b10318de04 +99017d697a0e247651b36ba0d7ce4a892aea57c6824687403acfb962754c1baee80fc7aa4d76fceeab2e1da62ea6a5e1 +b24a475f6c6a50382160ba63c7e9c9277911e62b87b897c14d2819b787cf30ff9b9f1cf8dbe54060d52e755e70ef9bab +ada2841a98396ac78ba55c59bc4a2cc11243cfde90b22c78974c82046c201e232c9370d933f7b489d30653cc9dbb1425 +873c5f0b4e3f15c76c9ea9e00e50351178cf0aded68c0fad31adfc5a863bd5caca53073802683ab304eaceb0b5490aac +91e7472df92a7f68997f1c665c8abdf28091fb4f00622b7c43d6e589bbc0200af32701b0c3101477b8c701efc225b21c +a0070d9af7471785b20eb4b18988813aff67cdea0038a2dc146b361eeca2dbeedd85458c03f13ec141fb281361dddfd4 +92dabd858e56351fe2c8f4d5b6871b183108dc0be27a8ec2bdcc789159c2cd5c81d0a5888af14f939a0243b7d784269d +b7a178cc4a82d05eb10d8649b040fcd43ad3ac64ad4bec4d928bc4a686dc18536a64a24459a6d2f97ce1792c6ec85a59 +b7d96018e15dc61ffda74d388d2e023446da3844ba304b5c963b051cc5afc445163f710982e4a2cbc3e48c1829cdba1f +8f031a5cef67b795173b2ce10cd06282ed0e325ea0e09fc40a6fda05695a2843db1c2eedcb1758caadb07b0a3f197fbb +81ec56daa36c9b933c66764cb1317981aad7298857175f2f3be6455eab1d5496a8ee4a6cd124e20524c843b968d5c282 +b7ae32a9bd813284b6721ddeb77438c2a29b6ec271e16dab800acfbb75a536e20ef9415fef06de3fe590ceed399d3e07 +959b2c7de6db837619fc09ca3413786b3f16a7bb449d8f3b8b63b212f311c4b49d27af4f4f4785a6e7ab577d5cc3328d +b72a50376bad995b41a76a364c6cc50a316d48da656af88f9a3fdf86f531c6bf98774eb33907a0bc076189f724755ba6 +8ff1e1d5acfcd20e4b45e84ad07af74e6925295a1989403c4daed1c03f00307448454abef6603eee6eb19d6e8a5cc73b +834ebffaec4ed349130dc4751ccb8ae7b6080e00ad93a7806b6cac39b2605d3e00b548abb28ccdc1708b7f12afe0f4e8 +a0e0636d7857703a23cbd2810442013647317d7fbc9be6efb1a6873ef57e22932353d7678ffb520a95f2a37b683143e6 +b6e2d0e70208fdd50221e2e96b616673e0e617c008498eb7749530a7f6e9b3cf4202598ac49a886648f69853f9b73531 +895c834c5d7370b065d46710e50391169859a4582d6684f73f607cea34419c815df540f180a6f1310b1c7bf1aaad3c67 +99d536d48b0f992fd7ad4671e273b99237dfa9c9ab3dfcd16cf3c2832ad104d6c4c64d34ce579bc813f21ff32fa841d7 +887369745dedc0c9f7cba6aa688ca7fcee6780ea82b83032b64ee3ac34270f70b499e0e09f2d6a4e4c8e38eef8317fd8 +8fd7a7575a739c02d56ecc930bde3b6984321bf0d7151619d5e71b70b898b508684a4cd75ac0d807a6a3334dc103d6b9 +b1cd2eaed0b4b38f24b8461a15a278806356a652d154d28a86b1c35ddecd24ddc685055d9d02adeb98a790832345a3dd +a26c3e4e41ef1735a0a0a5e7a72fc0189fc7523ad729774f1b9b4ca7cb7f5129c368e36341afc239da8c8da202f774c9 +85592624b8c461c6fb2e4e4601db0e85b44e770469eaeb2df59a747eea49dc2cc868092233348e88545093db83abbf1e +b100bc26017e5a45ebcf1fe8001a828e6530b9ab9b4751e501c7a93d64c627a956fc2f733c9a80265384d1a1800f3251 +98b6e550e45505bfd4e84939ed5d0eca45fb7021261f27c4674dc0a76fc96bf6e473247175bb8746ce9077c3a3f6abef +95cfe477d1bf654a0247c467d4f47bd9b468e0ab49d725031399ba6095ea5d66d83f874c0acfd4d00ad6334350c23b5c +b57da380f7dd6f1f03b63018d341dfa0aecb1438957ff097bd874be39b64431a15c3d1a539985e8e89ebf55238dd04b1 +901b803096cd16542e81d4ff26fa67628256fbce096203ee6cd5a7783248adb73981faebb782423016431fd160b9e3d5 +a0a4056c4a6aff64eebe2b9723eff61ee5f75b332989f8805229689ef3ed34ce551669440274f7c0572d79d5624cc78b +a9532de8be3203c055522f61a28e61e2c534b5fad921691eb2cb90885f50852aeaf2e0922d1562b347b0369da4db0bfb +8e722745b307cf98a6e330173f89108362bd78ec0e2760036fcfa9a31f47ebd0b471b2bd9b2bce47d49212baf5ff9509 +ab215e3d1c88c977fd25a3d7e060b9cc459145c860f28afe782833d62f23b319b5ea842ea594022e533ea7acc04f79dc +ab25724ad066ac4ffd2a78888f84c6ecc689b94e05e6def87bd5f913bc83b2107a9d3d539467ea02fc3f6a2ad7d86cb3 +997f5bcda36c46a29f93b3148f229f2f8faf014c28a9a9e865a9312e284a0d0fffe8c3773642f5c05df0c5187899c737 +b1b40ce86d6001710ce8d789d4134d1f1747d71dcaaa8a9f558d0f9dbb14f25169eb69a3b344e600d1ebbbe566bc1cf4 +86b3628df84eee4a155fedc3f4b411960f66cf7945e564eeec48269f8b97188042758f353804a3d7467f3ae42477548b +aae2d3eac80a52b70879c975cb17c77e2fab7b003dda095ed43fd07c706323e9a5aba0b39b29497be9b77ccc56225e91 +a18ac6108a81d60321c73e93a3b6ecdc72229696c10e802d720284636e6092499a9ede6390d9b682c697d75aec00784c +897b7f325f94519cab4a3165b79253c0e3e26fe8e1a8db0c92f9432ddaacaebb88a8e0418f5d04fdc018fefeb98ccf35 +b7da5bac12b9d77d28d880980f3c6997cb90d67e7c82e3d668724106613f372ad9824ce4b3f6675758cc850acfe1b329 +a1527a859a2f0b831c6bc78ac217e4ef2be40e0274d0b95a89db6df293d4a83823a7b3c69003883b7e26e0a7d463dab0 +918028e0ec6e30d858c44d0870f9254b8c9c272aad2717294f6c4d2b9a0fc34a9f20cbf203e033315c8680d313ba10a4 +a0f3f291e22b50ccec77eb54b91f03f05ec1388a8f386d64a9bf4a4359dbbb0ca92d80471027671835d462ed9acd0155 +b858eb73934904c979cbf2d4f11adcc90aa542bb2cd4646f40d4ba91a9898e6d5b329161a20879048255f0f61e6742b2 +8a535850cc85ff247baa5a59d8ee3852b1437fb502bf117a55be442f591454dabf6040a789e314a055f151d3731bd9ef +b10fc453cdbffc021446cffe57bfc9c0d966b1508fa0ad487e336ca987ea00faf20ad32d95eec7e54ed5e6489bd00960 +b7b4b599a347207aa4d8946abbd1735c9ea640742fc21fb5552f0c0ae38061995f367280045c4048a22d941de74368c9 +ae9f5cbff487697832c833eb800cbe1955f25fe28bddee5e054529fb57c460a8cb52a032b25bb5a02ed15d0a0f481eda +8458fe8e28ba0d2ac3c85a128265584d2369d96a7ef64b044693d1b6c95cc49e171ad26d8cddc06fde0088016ed11620 +93c360244c72f898fc7f6f6d3072faa6be5e19d93d7ea85c1a35b638f038b476ef98f5ad876c1d583a52038845016227 +98bbf38feee829d09caa0968a88a05db5966cac0cd9a139c782edccae10a62ab8c9203b5307ddeda0bc313ffe09c29db +91f4946a66fa7373b8588ae7ee62f2c7371a8dfcbff4d8685fa30703cfa907aeb6c57a981cb9d7495209afac0765d9aa +822c7fb47e2f595571a37add0f6292054fe3d3587d5a463d33ec021fd2f1900d113800b7bdc19e3f12761b9c15c9a09b +9342ceb09ce34c4a2f2d7444aacd6ed459ad08a0c7197df888e061d6a8fc2b2f97b017c02b5664a26e517c0c8a60f0fb +8e9e4b09324df12477b084fbbc8d480e516d0fdfcbb768d6a6a5ddb87bc62fee9726478c66b91a94fd8773cad7905a7e +ad8757f2e42bbf0d091137cc738f8a966faba712f055b6dd1a40b510f87cbe0575a2454ea92969f284a0ec970f327199 +a15e8daa112b57614364820ecf9c98d0c9d51a93d34a3f43f920523a6055ec2aad1a5796e2164c40ca921a3cb2aff8de +a8be757a8a71dead7f18afb358232fbb2cd072e513e108778d99b1cab29e78c9f2c84ea170dd4e413b9e7da76321a74f +a81036e8b3327b8823e6c0c3d826bfd9d50e4f38c0b50b9472e4a5ea2960f63553b8cb651167a91b6642a29f729a71aa +a7baa8d57ce521c18d389933ecd1d80d015637203a1d42d45814714fdc49a1cf7f584fc187647fc92b6d10a5b031a2ea +a5d2e85686447575b406647b272388d8a0cf6b5df831e27340c03b499da01a56ed2960573c7fa472fbc3571e73ebccc7 +998f36374286a1c81aed0982efeab8c8e3253d8ce88e23e39eab2dd6c6d55103f43dc70639deefde2c316cabefaf47ae +8cd60c39df7a9016bd45a45558a2bf4620e112c7b7d38d5d941a61152e6ca4f8f9a991f17af07cba7956ac651f8b9255 +a6035cc96c3a829ac0fd73cc3a63de7026b0e5edc7b9424b4b24f03a8147dd4b0101380cfce09488b1b5df340109a95b +81b5c7a8c6e69630a88c04208ca38b6ced4a86ed7cdb1d4f50227947670553d1636407d0c76d8c50b3cb1bf31030b8e9 +a7a3596f80b30798dd7c3175b8a4f78b06bd5ec154b6ebf070021d5d2d34d049bfec1d24a12ea2094595f2056024165b +a5c1404295cdcddd9b6c38c1e6b4d455694158155d10db4a6b660982a8b2ff7111319b577c027528ef820ed30196edb3 +8e6e96b76cbecb3c8d4ec4975b99b699e6bbe6ad3471a4080dd8f469fdb2c2fd37fbaf4763ee9c6fea56dc61e876af18 +9900f6e6361d8ddce143b7120a413dc47bcb17bb2e6d339accaa8dd49269649005be8d792c3fff2d53e200ce30f97e25 +b0da22ae9f9b783dca68885abe4a686e9bf153eb16258703ec8d24e046e0c30fcd416e359aedf1d7eb4fc67745e2ce2d +92773372c04533620470d4d9cde4ac247e3fb0e90dddb9a97e8e9b9ce64cc6547e1bdb86f007569329674be7aba16665 +aa9fb130a7bf96d2bc7991096c8c6fe25504f4769631a44cbe429d305b9c903648ffe054be93177366aec9c0731fee33 +8ab987e16b61e4d7279170e5b95704156cd229435242f2207c22c9333d4fb3874ee069160956e179eefd8d0c828cf75e +a6a88dfd28b9bcb8f548e2aa6ba629a7d89c4662b9485fcdcc307d110295da497fe947362702e5031e3f9f8d3e8e3a7e +95ccd78ed9277460b0bd0dc4f79dfe6020a639c9bcdaa4c128891303b96fd04c13bb6fcca52d2a9036ac9214ebd6e9ff +8006e0eca7f6b056478e4f91e1b9e6958387b2e96dd281c48cc50917684d5dcfdd653d865d4e0d3fa65cb0a75395282e +95134405ccf3f544a38e2b593d29ec69c62c1928bf997db3c8bddf407d0f0ec76d352fc6e3df08942716efc118d65dec +877d12c019c3565ef44507e56abfd7db85b2d97c3cf5c2803e040739fe8c02a4c6beae0f77e03b89c5fec9e19d3ade69 +96393cb1d82e7866964f027c42e01b6f8d103fb7db4f5a7de9d38b0f1198d18a58ca683fa413fe64cec2125f466c4783 +99d5441226add89625773cf777894d1b332178932ea5b12c258693f9a58d95d1febc781d34c1c078199d5ed55e3ff58c +a0b667b0b8b7920a931e56daa40758a962267550d8d4beddd86ad220601097d8865eb9f01348ff37397af98ecac4f586 +8e627adf7ce163d391a219ce989b1916fa890c16be43a74402b3e384e0d01c77f43da7889821c0c2a7cbccf0e0de26f6 +a68687bc4bdf4f1f64e02af1747dc9aaf417a038098f8b358d9f07fc2da2e1fb099cc022f3407c965c40aa2ce51e072d +a127335fefa337f6bff9aca112eda14128b0835b18474f8810eeb90aa54a82a3f9dd34163031180f80bb99d30b82561b +83d6280400325555fdd9ad4884fd208089d4edaabe14759313edffc432f9093c21a6ce7983084c6ae4225238303e3581 +867c7022cb59d869a3b971288ab3c68622341e608f8a506623a7e30d9eefe23b4cb3cbb2fdf989340cd433fd9199641f +a65440c84e503789d8d1400c9967f997b2df3a978421cdb26b6100d9b0b45b4a7ffcb3e31370ece3b706179c0c20911e +aa847a88a705d4f5f8418ca6c033202b9147e529bc564d4e16b04304d24277fbf08c1b595b4e21127fe7274743f34868 +b405d2b5760939addbef5b615b459926297166eb87cbddb785caf7c07eea531de2a53f99b67f6b4820fcc075599feeb1 +ae9e8b729e7a6bb0a8ac0530bc8dea47d885e9d024f3bd42a5d9f6858ed364dc9147ea80cd7e268471efc247aea78702 +b3faee58d88a7eb521384c1cab6a8e29861bc2194746e89ff3f06cc8f2bd88bba01d79a84fee0fbef4b3863161041149 +8372b0367814d24c86b0601c2e774671bd55150cf14b084ff143fccecd82c48b90c3502a2f878983c92441412a07f943 +b228fff80047925cf0e6d1697562252d892e8fe474ece456c8118be1112e077274e0419f0fef7258a2bc96c5948d449e +88d2bac67681d3dfebcc9c498bdb0e757b7e2ae59c28c0f1c2b85d84d759c5b82f5d25cb389798620a9cd3f0cf0ec9a6 +8cbe13273e40fd6cb9abdc35aa3a4e9a4faf89cbebe7bcd3af2828d974ae7e309b765105d18c523c4f3d39e98931417d +a71960f823023dd35d206b3c6f37b585719dcb569a9759959b4edba965e1cda81f90277169a9afc1693b44a926726abd +b4eeecf84ccde27f7da493b770b9ef9d66b82222550fea0f376013317ede262c2f45fd71a68210135d0557c9854874d6 +b73a699c21dbce97a0fd4900eff88051c297dcf42e11ea214e78eb39b5cf4eb91bdd7b5ced29cc7a2427bba56b7e58dc +b87970206b50901370b529abd78179ad31b7493fee9f4e4fe1f78142598d3e10a64427a84f088e55dbab71b18b2f7595 +96d9b4f8ae52ef12589dc9c0d5cad9515a50a376897fe0c3e8f848c2a0407ec63910bc0461c45f0ca52e2ec9c2ce5c7f +9082d02bd3a73ea4a5a4caf4f45c428ff67cd950ac39007ebb02f5f9a727e9b30c971c37c431c881a0944df470f12a41 +86f325166bb5a69f4227f8596166879ebb0e1f46a6504a897a262382dba5970a909a65b370bf19fd9af13c0afc4b1e16 +a54de83128882932d688f9aecd2647ebf55a66917927fcab9243e19ed9672c6cdbe6c93eb379e76627f039a17eba2548 +a8480b20ec15208870629658dc414c34d13730a3b24923765f48cc1472bf0a3048f9db3c20ddbfe3b2503a37c4439337 +866b57e7a743f0b249cb1a93c08f7bc0bf41b8910f061628c8d846f244c93af3b340b7dc9ac76560d8099834a7cd1fc0 +b392f34f61ce95b94d1a687d699e2e7ea25d131737a12a73d3535bada2c1e7fefc306383fa74177ff9ff641241d9aa78 +96dcd680358bcac64f668413bd9b4f0c3d44c2f90259dfbaa9f8b7ec9c5d05ba14d208ca760547a7f80eb261082af1f5 +b93900f078c42712820069b11e4f2df27870bc390ea6c926685c7a2110f16ab44fe5aef223ab46e4c3901adcaf45c6f0 +99135380340d6ea854f2e21f0f97ad71bf85d7c933df1bf32d2345a007236b308e4422f201f6fafaadfce085ff3c2b82 +b24c7b16b77ddbf3b1230083b257ab57956b77a79725ec4e4c8b746b51cb1c6149ff05a782878e98b264bc703a864770 +8e772f3275ba80c404927130bbb1b9408032f4b7b6af00a3f6bbd8961b7c93ddac374efb1dadaa39fdb31cd3d55411c8 +8347a85f25348e886e9cf34c0d7a078d8538dfdb1b5afd5e1f3732305c3350e4ff31686548f1c74c0c98f15aa899af36 +89f833b5b0e7ab3608564458b3386fb436efe6ec957c1f90567f74d94152533e7dbe8512de7b650560c583b9155d5daa +93f5a92c060677d24ca327fd82130104e7596423a40e8ae7d651ff9ee00091ff0cf9c34366039ba9eebf883cb29efc6b +808fcf87101e56ec91f02c31b3ae15ab54fe988acf83cfd3ff77ff0da4433a2b87c3ad3825cfe148a205522edea2633a +8d483cdd8435149fe7634f219959bd1dd160373860f33bd1ab24ba9ef60fdd1bc4653975a0bb09f302d54c1cf5c7015c +b4f0a4b661fab69e225e7ec8c91d84569889bfe3bd623dd5166ed336c60c519c4b70eb0ac29d58a27cdfde2aedc621d0 +993e1686acb1362083ed4df596241f80eeb38d5ff56ccfba5eb16e063fd133fda8be5a03bb7b0ac2eb9a09ccc3d384ba +a9296ba7f62f882f163d452ed1ee372b2bffb6069e428313383a5ccbcd406cfe3d309d2b54be7e911d32b7650e87da33 +a5f1217d2680c2094721e95ded7abd4db9eaf2967dd2d0cdfc27cd2302119aeeba2e55c6125f5fb01330fad69ced0fc0 +934d84b41cb65727360d33603178f7929e53bdf6c94f06b5a2c119b3a6da36e69ac22c72d6afd31f332289528d1a30ba +b630d74f25dddbcfdfcc9f47dbcc965eea043ddfdde46db681c0cfb8885ea9ffb799b408e75848af8b40753214a52dc2 +921efeca79df5b054c84894712e906305bb3466ae107803099aa0f1fd2ef0d93d026eadb2f7a8b520b95a39709195ea2 +a2ef81d6a7f3e42ee55e120a4036b6988e7f1c50ef7c753016a9a53200ba1def9e59566e25038180d91d36f9fe640e50 +b22e7577e5f5b37da732456f111fce2af85f198e1521068a4107b4dc2c106fe954ef9be283350f72c8cb271053ae79dd +93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8 +b16010f1b3d33aa5f3f608c385400979ed36dc3fab53d3626f519c74d7e1ebef62c9ad35796404ce2fc3ebb42167b5a1050ac27c3527072b81af0fa9a683e226da79275f2985c9e89a0db969b76e0b6be94fee874c48586737ad5588cf1e1041 diff --git a/kate/src/gridgen/tests/commitments.rs b/kate/src/gridgen/tests/commitments.rs index 48f12535..5503e749 100644 --- a/kate/src/gridgen/tests/commitments.rs +++ b/kate/src/gridgen/tests/commitments.rs @@ -1,5 +1,5 @@ use super::*; -use crate::{gridgen::*, testnet, Seed}; +use crate::{gridgen::*, testnet, testnet_v2, Seed}; use avail_core::{AppExtrinsic, AppId, BlockLengthColumns, BlockLengthRows}; use hex_literal::hex; use kate_recovery::{ @@ -86,7 +86,7 @@ proptest! { .map(|c| c.to_bytes().unwrap()) .collect::>(); - let public_params = testnet::public_params(BlockLengthColumns(g_cols as u32)); + let public_params = testnet::public_params( BlockLengthColumns(g_cols.into())); for xt in exts.iter() { let rows = grid.app_rows(xt.app_id, Some(orig_dims)).unwrap().unwrap(); @@ -152,8 +152,9 @@ fn test_zero_deg_poly_commit(row_values: Vec) { println!("Row: {:?}", ev.evals); let pg = ev.make_polynomial_grid().unwrap(); + let pmp = testnet_v2::multiproof_params(); println!("Poly: {:?}", pg.inner[0]); - let commitment = pg.commitment(&*PMP, 0).unwrap().to_bytes().unwrap(); + let commitment = pg.commitment(&pmp, 0).unwrap().to_bytes().unwrap(); for x in 0..len { // Randomly chosen cell to prove, probably should test all of them @@ -162,7 +163,7 @@ fn test_zero_deg_poly_commit(row_values: Vec) { row: BlockLengthRows(0), }; - let proof = pg.proof(&PMP, &cell).unwrap(); + let proof = pg.proof(&pmp, &cell).unwrap(); let proof_bytes = proof.to_bytes().unwrap(); let cell_bytes = ev.get(0usize, x).unwrap().to_bytes().unwrap(); @@ -175,12 +176,8 @@ fn test_zero_deg_poly_commit(row_values: Vec) { }, content: content.try_into().unwrap(), }; - let verification = kate_recovery::proof::verify( - &kate_recovery::testnet::public_params(256), - dims, - &commitment, - &cell, - ); + let verification = + kate_recovery::proof::verify(&testnet_v2::public_params(), dims, &commitment, &cell); assert!(verification.is_ok()); assert!(verification.unwrap()) } diff --git a/kate/src/lib.rs b/kate/src/lib.rs index 7eb670f3..3526cd0a 100644 --- a/kate/src/lib.rs +++ b/kate/src/lib.rs @@ -71,6 +71,7 @@ pub mod testnet { static SRS_DATA: Lazy>> = Lazy::new(|| Mutex::new(HashMap::new())); + /// constructs public parameters for a given degree pub fn public_params(max_degree: BlockLengthColumns) -> PublicParameters { let max_degree: u32 = max_degree.into(); let mut srs_data_locked = SRS_DATA.lock().unwrap(); @@ -165,6 +166,153 @@ pub mod testnet { } } +// TODO: load pp for both dusk & arkworks from same file +// To be used for incentivised testnet +#[cfg(feature = "std")] +pub mod testnet_v2 { + use super::*; + use poly_multiproof::ark_serialize::CanonicalDeserialize; + use poly_multiproof::m1_blst; + use poly_multiproof::m1_blst::{G1, G2}; + + /// Constructs public parameters from pre-generated points for degree upto 1024 + pub fn public_params() -> PublicParameters { + // We can also use the raw data to make deserilization faster at the cost of size of the data + let pp_bytes = include_bytes!("pp_1024.data"); + PublicParameters::from_slice(pp_bytes).expect("Deserialization should work") + } + + // Loads the pre-generated trusted g1 & g2 from the file + fn load_trusted_g1_g2() -> (Vec, Vec) { + // for degree = 1024 + let contents = include_str!("g1_g2_1024.txt"); + let mut lines = contents.lines(); + let g1_len: usize = lines.next().unwrap().parse().unwrap(); + let g2_len: usize = lines.next().unwrap().parse().unwrap(); + + let g1_bytes: Vec<[u8; 48]> = lines + .by_ref() + .take(g1_len) + .map(|line| hex::decode(line).unwrap().try_into().unwrap()) + .collect(); + + let g2_bytes: Vec<[u8; 96]> = lines + .take(g2_len) + .map(|line| hex::decode(line).unwrap().try_into().unwrap()) + .collect(); + + let g1: Vec = g1_bytes + .iter() + .map(|bytes| G1::deserialize_compressed(&bytes[..]).unwrap()) + .collect(); + + let g2: Vec = g2_bytes + .iter() + .map(|bytes| G2::deserialize_compressed(&bytes[..]).unwrap()) + .collect(); + + (g1, g2) + } + + /// Construct public parameters from pre-generated points for degree upto 1024 + pub fn multiproof_params() -> m1_blst::M1NoPrecomp { + let (g1, g2) = load_trusted_g1_g2(); + m1_blst::M1NoPrecomp::new_from_powers(g1, g2) + } + + #[cfg(test)] + mod tests { + use super::*; + use dusk_plonk::{ + commitment_scheme::kzg10::proof::Proof, + fft::{EvaluationDomain as DPEvaluationDomain, Evaluations}, + }; + use kate_recovery::{data::Cell, matrix::Position}; + use pmp::{ + ark_poly::{ + univariate::DensePolynomial, DenseUVPolynomial, EvaluationDomain, + GeneralEvaluationDomain, + }, + traits::KZGProof, + }; + use poly_multiproof::{ + m1_blst::Fr, + traits::{AsBytes, Committer}, + }; + use rand::thread_rng; + + #[test] + fn test_consistent_testnet_params() { + let pmp = testnet_v2::multiproof_params(); + let pmp2 = testnet_v2::public_params(); + + let points = DensePolynomial::::rand(1023, &mut thread_rng()).coeffs; + let points2: Vec<_> = points + .iter() + .map(|p| BlsScalar::from_bytes(&p.to_bytes().unwrap()).unwrap()) + .collect(); + + let dp_ev = DPEvaluationDomain::new(1024).unwrap(); + let dp_poly = Evaluations::from_vec_and_domain(points2.clone(), dp_ev).interpolate(); + let dp_domain_pts = dp_ev.elements().collect::>(); + let pmp_ev = GeneralEvaluationDomain::::new(1024).unwrap(); + let pmp_poly = pmp_ev.ifft(&points); + let pmp_domain_pts = pmp_ev.elements().collect::>(); + + let dp_commit = pmp2.commit_key().commit(&dp_poly).unwrap(); + let pmp_commit = pmp.commit(&pmp_poly).unwrap(); + + assert_eq!(dp_commit.0.to_bytes(), pmp_commit.to_bytes().unwrap()); + + let proof = pmp + .open( + pmp.compute_witness_polynomial(pmp_poly, pmp_domain_pts[1]) + .unwrap(), + ) + .unwrap(); + + let proof2 = pmp2 + .commit_key() + .commit( + &pmp2 + .commit_key() + .compute_single_witness(&dp_poly, &dp_domain_pts[1]), + ) + .unwrap(); + + assert_eq!(proof.to_bytes().unwrap(), proof2.to_bytes()); + + let verify1 = pmp + .verify(&pmp_commit, pmp_domain_pts[1], points[1], &proof) + .unwrap(); + + let dp_proof_obj = Proof { + commitment_to_witness: proof2, + evaluated_point: points2[1], + commitment_to_polynomial: dp_commit, + }; + assert!(pmp2.opening_key().check(dp_domain_pts[1], dp_proof_obj)); + + let mut content = [0u8; 80]; + content[..48].copy_from_slice(&proof2.to_bytes()); + content[48..].copy_from_slice(&points2[1].to_bytes()); + let verify2 = kate_recovery::proof::verify( + &pmp2, + Dimensions::new(1, 1024).unwrap(), + &dp_commit.0.to_bytes(), + &Cell { + content, + position: Position { row: 0, col: 1 }, + }, + ) + .unwrap(); + + assert!(verify1); + assert!(verify2); + } + } +} + pub mod metrics; #[cfg(feature = "std")] @@ -173,7 +321,7 @@ pub mod com; #[cfg(feature = "std")] pub mod gridgen; -/// Precalculate the length of padding IEC 9797 1. +/// Precalculate the g1_len of padding IEC 9797 1. /// /// # NOTE /// There is a unit test to ensure this formula match with the current diff --git a/kate/src/pp_1024.data b/kate/src/pp_1024.data new file mode 100644 index 00000000..3cbc04e5 Binary files /dev/null and b/kate/src/pp_1024.data differ