diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/blob-syncer.iml b/.idea/blob-syncer.iml new file mode 100644 index 0000000..5e764c4 --- /dev/null +++ b/.idea/blob-syncer.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..8f0a1bb --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Makefile b/Makefile index 56da611..75ccb2c 100644 --- a/Makefile +++ b/Makefile @@ -8,13 +8,20 @@ ldflags = -X $(REPO)/version.AppVersion=$(VERSION) \ -X $(REPO)/version.GitCommit=$(GIT_COMMIT) \ -X $(REPO)/version.GitCommitDate=$(GIT_COMMIT_DATE) -build: +build_syncer: ifeq ($(OS),Windows_NT) go build -o build/blob-syncer.exe -ldflags="$(ldflags)" main.go else go build -o build/blob-syncer -ldflags="$(ldflags)" main.go endif +build_server: +ifeq ($(OS),Windows_NT) + go build $(BUILD_FLAGS) -o build/server.exe cmd/blob-syncer-server/main.go +else + go build $(BUILD_FLAGS) -o build/server cmd/blob-syncer-server/main.go +endif + install: ifeq ($(OS),Windows_NT) go install main.go @@ -48,4 +55,9 @@ lint-fix: format: bash scripts/format.sh -.PHONY: lint lint-fix format \ No newline at end of file +.PHONY: lint lint-fix format + +swagger-gen: + swagger generate server -f ./swagger.yaml -A blob-syncer --default-scheme=http + + diff --git a/README.md b/README.md index f261060..f967d56 100644 --- a/README.md +++ b/README.md @@ -1 +1,7 @@ ./build/blob-syncer --config-type local --config-path config/config.json + +./build/server --config-type local --config-path config/config.json + + + + diff --git a/blob-store/blob_h8765008_i1 b/blob-store/blob_h8765008_i1 new file mode 100644 index 0000000..436a31a --- /dev/null +++ b/blob-store/blob_h8765008_i1 @@ -0,0 +1 @@ +0x1f0001fbfc0005fba94d19ce12c7cf62cade3ffc493a00010001fbe40099acac232516d11ef058c927da05f64e18f547487c222901f33b46ff31733a5218309e228eb088ae2c354690d735eae456eb607c612a81ebed4abd74870d097ac2c860264847f2fd8e596c080cbdbc8868f0239e51793fc53666ca68ee98a276bfb72f114aa4b417adf6af4248eaf09fc534e54dd632299a94c125f03bd3c4751a2fb91bce7a88cea86c2b21ab769363722cf6c37fcd300c3780336162aefda2ed74ea00fcc05ab1262697dfa96a58511526cfd9b83c5a287e1539add7dcbeffac3f3735fcd162bc6b71f8f1d8e27666a5810519d18b5f65b3e74c52ca4df9da230f631ec8367f61170bad6fba258f5fe924867199bbdb62b9451820a12263841bb8e2342359936ef229df706e710fbdb3eb1000fb4a4f21fdc9fed330d2618fbf706128d9615ddb218be0a393fec1d77f85f4f121917c5c051fb40de4e2c6c906cba23f380ef08b4a0babeaae8a5a5a090c393f6d86d3272f4ab5ce0bec6226397e961f05500b8f007028aee17a409d7438988b81701ecd0b59689d80ad7c504b78ab3231e3a483885692acee8bcb5abf4e832bc4b4af0643a635d1187ddcf9a3f3902a3a4b6f9227653b1ee2caebe2907150d9459fbe0cfbc3555f2e3998edc563cb1cb08d53649c0cc15d6c7af617d8ef24cc5b1037f402b698add3dfac55fe7f323a7e2801aeeed5491c69a061a81d996b2d89c409a45958ebccced70511cb146e0bd31e06a33b4f51556dc446eceb1bedee6812fbc6787f60b741e96c4aa4587f3ce83087e4a96e37b31c0489cae84f76d5aa3d79b2b7d43885f3580b745526793d397ecb03bfead0842804bf94d10e4b3d46922b0c5963d07bdead901c0d88b8273ae00bebf9624edf1fea62bcdd840b3c260fcccc8ba3f073c7dcbb6d50096039920809816ba15dd4afa019f8dd27ae4305b9931851f535db211e92fbbaee9e1fa3449b1fa9a766e326e0e0422d10fb04f29e47b19a4b62884763cfdfb4adc812fedeb3f0f85981c79fa018fc544196f7765280be8b276f122690013458df3819d7c8c83e04880999e9fd32d2131c753f2e497bb01f097b7522adeae37ad724341179cda0088d981146ea713460d16084d7075e7e73009817ee7879ef0ecb5606b18ebb1435a401f88540f89c8046543c1b9c21f3ceacd85dbb8be5f1018e271af904acccd7ac13334c768771a5be9d45c6f07db724e00a74c9c0220064caa205384708789f4871939935fd4dee73d2b57e80e83b646c4192053c608b91fc271ded26b907a8253acd96ce465120a7f51575489f2c2ff2128b0dc229257993161a83b54b9270e53bca6281361a18267914697b266c55cf8db64d2ca64cdb2fbf172548a1a8d0a05f966b326d69eadfd71dc12c9ebe225f6ce62c5628ea7275af15febd4fbf4d4d595d7b036e7773117711065587e65fd57979b267eb6f65ab1b11e87e3127a7f127e557ff19f02525cf4dd9f6b4b6f6aed56e5548c548d730953c0975e75664477d63b6ab49c600a5f455c50bc0ecd45f9be9cc8b8fc5ff409130d54f1209d9afe87e5c928c07e2636e48058c72981a1de8c93626e82d09682e122d3e1ce5579946c9f1ed8bb9d86e99a6416cec04e2a9ba4889ac8e7329f5f63be26a1db66c32fe7b562820ee4b649d1e9051ac3605d5dce1ab9a000040ffbf1b0ae8c955cf053a920c556ff10c68afd0390948f41153f628454415c6d79219054dc4ab57aa727b5f1650e9e88134fd7de1a2d29bc10ee674e7e8ff873b276a1d72fc3fcabb657d00d08c9d2273cb5d591fb1d24f2632e274521cf24c23cdbd19e662b723122714d1058235ea2a4da9e70b6a99c0fd9ac189b6c80d983ac4b513710e740e863338528007744811fa6dcfd5c78ccccfbf9b949ff77e49dca6a003ce5b7c6e87847f36185f30c331cc19801bd9e321026db6bfc9edbf1af7cbd221de67b790631bd21060def8a07fd5658ed5d69d21a998e03817e565e519d18306e1609870a3be1a3c94e447f2604ff598bbf9ba1f478279b2aaa5f54104de590a2d372850e67f06e99adeb6d8473bb4c66323429953356c2f2e8a5041ffe661093b99c1baeb37cf34a232feedf7cae942ac9cb7ea2ec4dca7bb831701528e7c39da8e7c3cb271bae81817eb3a3ec4c66cfb948280c6bed5053daf2d374ac56f1ed9239b3cf29a82ed206c6d7884455d36feb4f59817fc20730b5568934e301a0568f87eebc7f00c410aab506dcabe3821c0f45817114cb217c98e150f4301451fa7ea8581c466085683133f03d9feec172a9ca55e4c0967b389804cac472c1b08a17b4903fee2c8912baf155b599649740752a4375b8acf4d2086abd5281a7905788ef23427b1c2f27f73face04312472ca6fc0376e5fef2ffac46e01de9276310b3dfb026a2a358289d0f7a5f1a22b178812d7b73b43fa9bb87568a6d82e1c08bd4e9585bd36d1ea7cc2708151b53840e8fb6ee685e5581e9815fff4d7600218f1b6bd7d2653a969fd5f56e6affe743cfdeb1292bc625af5cdccbfc0a77e4b08cc5bb9683aa3ee906e3f4e2ae97e724f98582c0b76d3a269082a7bcd03203d15f135a7d8778095d766cce153c4adcec5be2a00512b927609720aa43b68d983196e72eef35021bd58ebf7aea19a95aa1eaf1c810e63cc6ca4fe85a78ddfab3d17506a6c260504e25af2edc39f0150e10a0cb3f160972bc3d0078d359b17bc8724510e291dc8ea92f146c2d61a2f4ae8180e9f83aee1eb95342438f1da0ced98009282d80e764006e7085033670c6b8e604cd6715b640e7fbb9601c39c9c019b0388b7f712338cac5d7c56fdbe680290f92cd7c4246451d72b0b2238310d34291c57d8c64500f5301ee4f7e71805f1f1adfaeff805aa2f210ce4556f2ca49df414b4e92f9f70e9d87a068b109816feda27bdcefc8bb8d2c2d3708b4cad9cbb9311ebe33847d82a775ff55b33a58c5689eb2b3fadcb85a4b6427eb3e3b62365372570a0cfd6622fd40e0d55ade1958ceff3190badf8b73685aafa1ae2870c32a9226c2668f1718cf12138c5eb23653d9bca705251ca006a4b59b6c8f73bb0b84c07cf604036df8e8391441c040ec6521b1f64582d38e4a2d5bc0788af0f0e1ca13977b5f0a23076dc13e6ed7c1aa6f56f39920916b055cd09237363b8e5aed3332a046fd9ff7e20429e0e046ed818fb5aa651d0680a97b3c99e854edc13d4dd6e336dca21bf38cb757574b1cf2180a0843537706d83120d5be539704b1a77b3b80f7c9946191c502e8e5089a0d896afd96b937f1d83ea8e1333fb945e9836e7c4255a5e3f82d041f2b41d1ef608355ad2a030ee61404d0b84de933cc87cc46a0f311e681f01b05f65f2fbbedf684639660e7356219b747a3e16b9db9dd8a47ea214531599c9fb9fcd10102318204af95ff42bd55b563ef0d3d9fad5168f407454261c17aea37883806934f93f5366f30b97407cfd293ca39a6eb38ca5b51050bd35a1a658138cdbf7061a6dacac408fbcb9b83612932805fecb8b07097cb3f8500031a920df80029b30136c37bf449c1f9a797c25a24d0ea88bf1713d72da6fad33acdc39c7dadeb80afc5b184d1922186ca90bad22b356b8f57c1b3460bd64a811839f3d507567d3f4b6fea58a6301c902c9a8f9a9e9d657b71e82daf966c9b60fc5d82e7653e3f38a8a690d6b57661f9647b93ac8a659fc190e2fead320d6312be65add6fbd0dc0cb5e7ae11b0a060d3aa8e32dc6907ff01c2060f29cd2b9c53ef5d069935bbb989acd119c647049f691bf61a7dd717b32b606ac84e45879bc084fc5e6eeca06cd0ea564816bdbafff86d5217b4a412cd7e3bd21db973d175030f08e75845591cd8fd9a2ee69d25290f03ab0a0a749fd5a98243e1568ab06d80211d2961ff24f4e7fcebc59e22f73c00334d4a372487ba125a53ebee4d28ce43978fd13d51750afdd75add95978119319d6b595613251e3f838482f3d67f5923fd6533c6ff55ec4b57522adf9fc185f3ad02b8ed931e4292914ea8806e43168373290b4b356c1aa65671c4c3e0ee6e701bed2fcd53da7beb948580a472a282327be0edb2b12d4aee965e1dd0f7ab23a19dd61d3c989d72489aa64709ac4511a13ffd3bba8c92905f68ae7c14b572f70b1de91a3775d641d6a77f7c00d1f365224eb051c29b379b2ca752a38d010ee6b0a53f9c388a01112307ff5f697c9f9b02322cf688fb9f39833521916927e538173324e9fde05cd732917e3a2e3bd4fa0113032cb5375bb202aabbbd6d329ae03e9c8742ede1728616f77dc814e9d816114e908af0fa2523c23e44655e77b9a602341689f830d11924c32f98c25ec95c21d908be7851b0f1c4f541ca156ceb4b8b7501675fffebd69a46b22267d6e422a2379f8028a98522da4d0107939882b30e83ee9ac0f67034a0b91daa84e5cbb5811bf7c1e06c8ca3e52e8734085161a3ebc7a2c4eb24f000d5a5e871283f515b9086dd8bc6f8ef91c51c9fe87460c303d29fb67718ac81faf065f14728fdb85b2168b8df51ebc7085216457b5e84dfff3de98b8b1b9d2b5c8279d04e1dae02b6c2c67e419c1690ce7c891a634bc5e15c718fffa072924b39529d8ae8a9a75279b24bb8bfa194aec30757e0c6ffb21e6f94d547c040b67913f7e1f68e82d5462f31172dab78d4405eb4f758ab6e380adbc786d17516ad3502b9ac1496d3e0eef962e3c3d9658600febdf42ec4841005c9175a0ab6cba03d5b7b40100b6346b89de051a3963aa2e0861d9ef227b8a0d6cf7c10b3b5d05954734d196309c208ac7b03257d183ae160ab3ec7d5818a9f11a25c946bc56ab064b4e446efc55b29aab751dd6c569a06655416b4a20bb15b37bddcc4b60ef778b798b96bfb83bb40e734013ece1dc5f1dec5bfff393952f22ba8434faa053715c022b7d8e5a128a5879223d7797324071e9d0c62098161bbe94d682f909a205d0e55414abc53032c66bd2088c91af8a092b1340b6bdfb4be4cf825f4ec0f8987be9f1696bd1a4325ada332d9d7232721e127d91cc666398b4a8613e3a425b4ef49a8a7756fd50694252bb1457baadc27ad57ef01f226262d56fcc87d98c29ad5cc974d31a2225e1913f1b01312fd0d3d8b76b9759b51a4221b5d66650aa18d4f84d87bdaa552955dcc1dc2cc624fd439e3c862954975eff232bd955aa2cd10bc8081cfabc84ae5e0d74ac279e4a826c15d90fea8501819c14cdc79a44ef5a351575f2f9986f52e773805f08c8f6e8664c1f84ff3248aa18dda8f4d85036625ded75a6597b5fbce39442e0084c5d8ade89628a678997d5535163eb2fb6112b7cbc18664334a1e371a52a97035eb2398761de822f7911326f60fda2c513ffa40cdc3dae926db3dfa912b6ad2229681991fc275c4ddd16c9951d7d3a57a6dd46e865efbc24dbeda5551e771536a68f97de126b8cbb6c1f0e2c6462a4e155ba447c8fe36288f49937c14a52f035468fbc90c38a7f9f783bc3f17f1814f625d8001a75c3c3520456e8752662741373bcea0d2e03ed4166e4d542b2b136f614b3df0134f20d94c7d674cc56d91214c5835fcc273bab0f67069254896ecc0a79dd139adf2eb190999368a57f07912cd5795bedfb4d867e55a6b988cd896fcd47578b9eac98c00ec2f49b489d429c0467c9b9ce3d16ccf88f5659a89bb8b4a32154d847e20ad0f33c8fad28ad233d21fe21310d130fd441a6c90ffbb2133aba12689fe28b81e65b203c67ec2f53871a87ed075df38247fb33290abd7702bdaf967d0f0410f070f61830b890d962de11b65ffa6522a78032bae5cad401ce9232da94ca8bfa8ab7d2d134a84ec9a1b2309f021b52b3d2817826bdeb03c5ab8efecf5bfe1dde82147f61c0ea572be4770d298beadfa720b01c579d253a582400edb8020e05e27d11ad9dc525867d76252ed7e472fd1975d0e4b89c2bb3040134afcebcd400dfb46c0508ac9ebdf1c1ca24670f1038ac1b53226feb82d4bab186ca9cf20e6fd92bf464f4d56a1aa05d631febd93ce0be0b59991c1f592ba8c7e50767075c182a72555af42ccd7d701fda102c5cc7ed50bfbdc794ec285e984f2b485c2ea986898f96aeed169440034c3b3bb284c490c663ac3a01cba940352a254440e4257a65629b9f6e282c326797290158819e6f766c3fefdf5001b04286e0da15066669bc25320c96e5b89a0596330692b367b49d932a00c0c17158f00586b940c024d0a5d5bddb7594953358b69b310bd357b9c1656bd64ead837b8163f973f95c2dfa0a511601a14c1e6ce48a50322f757be4a827954c5c9c01ae5343bd74a6a27b0a597eb74994772c728967ac0ef5e0558bcbc93a575d337a85a7686bbb2495668ce1b26b30ac9336c430a0442d5c8e37a9bc680f3522a7bbc28de76a4f555ef76cf25b5d94ec212b250199a1241c5beac0fd5a96a8efe1fdbebfa5467358a8215df05bd9e89fd8c1414773d80b9a08bea107bed9f4480cb1422cf3bf0a1bd308a6e636fe326a7c6609d22a0f233fddb505f5d686e9c3fc2ecefa0bb751dbd82a59b92cb821c348728a02e3533b1bdd3da014c6d1841c367aa92f00f6f9afc89728fb9cda0f6db811d22120322f2bc9be58d8da0f71191b92cfda4c5c41b04d9289067c522220c4b66dc355b800448311ade1f76a326c29f7d5a94ad40af750ec972991c0fc1fc7b60a20303e2576eb73b394ce67c1f3c54c6186b3d00280bf1b9f2db8a43d2a7b6d90e3dca11e81215ee778803695c17723dc5729ba23c6e1b45f10bb528a1b547f3cc68aa3297eba87002704093fc566ed4b9061e71ca6b4eb9a8b9f638ffffcf7df934a3932100fe3007edba72c215a58b6fd4d31f103651e82370e164ffd9480396318902632086d33ee3d183c570acf520ca4aa1b56679c699f93a81e22580bce7f3d8918fd3d49d5c4d7769fc88c60f41f0528111892c699263104ea91f0bdfe648b03015ca14fdb3d9c8381fcd6446e36de6c0199ea050d5f534aa8c3794eec42fa8f33ef5250b344cc369188fa5fb1eaa2bcefdb67346e9407eb63a3b90360091ad73d653cbbaebaf71bce3872b6c75f1e77d93ec6d57ac7acc3d7a90642e7e8e06e222f42967061c22a288177a684ae746e73529bbd1a6da32a87b5763e060e22af0542d2d18bfe61240e779ead81ea011a4f6806b820f81fce604fa812b0eeccce3cef9e206dc360fae661350ae6d336c90c6d8349e92b02df4cf6358a36c90f32363306baa67ddbfe344e9038b959eedc70a99ef7b8ec2983dd7d7849ec1931301e770c76d15f1391bc3650554c89b10a6a0dbb93d7636286d0b43f078d3f09161a31270016d18a77fec9bdbd9e467b59f492783630a9302728dfd850e418b99d07539b9669594ce92e71dc7f545d922b9a4d8e174d8ebb121d34da6e3cbbf83518ca846e86354e1bddee18c1d19211cfc4252cf17d0676dc93fbe3de64c0b514377e9886bf2a8d12574566ae7124cbc5b7dcb064f8bdb1abcaa6ac834d7bbcff0bc2ebd43a10ea2c336167004e7a850e1aa61ace7491a343cded046c77737cbc277c8675b2491b6523d4ab28dc091f6c8df5764d574d0fb7aacdc6f8dc1df39f067868f8ec85dcb0d890a67fa3792d5857b7dcc275d6b6e41f3270973fd621a0118f182e44c2cc81dc523ab8539e4ec971ac6fe9131c1d5de76d612c73ac66e82d6792623423df7eff4a20546f4d8aefaf787231a914983aa56287d19c870975288836f894624f2147ca39cfa635d3b0701406631889431039e04d30ec1aa06133242f9dc444c4501abcf83ca1830d376b4307332176fb74f237da055106b1651556cd7c5e1abd7e55bc6a2b7b3e7708c9295888f489d5296f569ebe24c62af71aea1d0c7c8c9d428880542977acd08103021e0b2c34cb5a97489da945ea8c610d6c96dfbb7c9c91be18fdfa9be7f696948a4468c654b17558178a30b4d896941267f536a542ed6ed7c6d86d95ef36dba4d859f87e35932e2de10f65c528c17c3fafe90708e0e5fa457237fbf2b109b6893cc203e6606c3a3614d44f16b566d01f6dd50f31772d99f2d7759688568b14d20efcd6bdfadd2f432d6c1f61f7ce910950be5116c6003f5b6db57b1c0268e3c57d559e561221b18741ae6e18d41e1f1faa44781b90442eebf6d3e74c66877fdd1bcf1fa11ad0090281bfcb82bea6153cfcd64431c4eed57b5e64a829eb7badc168ecc461f3afc6d8d4d8bdc9f27f413945d47b6195ba02e82f45c9cbf69c2215a10d04e11a4eca47c2259db881e70e18de26ea3ce892b36eab65674f89bbd0ecdf49d7713e433f7afec3fce44733fc17f3428da927efc32b2f17a540a5842448312dd4f948dd1ca0b521b3d4adcb601cf862d9e98b019453e8bbe34a9b49603729200fd93e38bca81a65a319d158d32f8aecd47f767d42ee0884491092c946774586d84d14d68f13bd1afc0e81da451f7a91dc9835f097d049d9cd92184b742da5ecbcbb4684135cdd6541463fe632262917536f7f0599aec6ba2afb5d0602877f969c483d7f38361843b6d45615a5334c36ee7560b3e6da26425deb209f1d56936ada18ceb458406d9b9e21616ea802b09365eb4f67f33171cbe3a22a6ca891384f8528802996f07b5446c29049ab040af2c4dca06a47ecc21c4d8700b7a9f512b46fe84924ea0b0126a8b900804f27abc81596164e613cd4290757ba04aa32f68c597a948ffb0d18751a5b9f9e9e268096467c9d019fb5dd42ef7acad59cabc9e58b56df664e6b4c0b4f38c02cd516e1bd3fffca67013b5414b935b6a0b75da24e5915ca0c9d20c020c16804ca590206fc8684ba574fbdef0dbaa20eb19d20cc98ea321df86256890749ef8b3d8334f46d9cb54f973e026005c5c149aa2e36632abb3683728b9a25bf0c4a5a177a0610ed9ac87a8a583f70e1563eea4225d99756c74eed3ece56e4e04c443162e03424e189ee6f811a411f5a90c0de5b7b16355cdacbcf799456c11e8f84efdbea0a2ff1e03946c4388500f0fe09f0aa3ed2626165f52272ecacb8fceec7fadd4e0503ee41c8263071d45519fb9d1cab3cda7544f12f75aad90d883200f54b27dc18b1606edcaefbef528efb3a895a377aa5cce3c8d864f6f7e667dfd91cc8bc2c359b84126c4ef32e362a924d520bcc3b1a898de511e789a93b267af79877857339ab0d987adcb94d8cc2260346e5670573c8bd4de1b625469303841b11785eab0c10c63f7a70cf6d8e16128c771791f7152d25ffbf69233a077d1f4aa487c2152a6155585324201c7bfa2e6448caa4aae8e2e98aa98fbe41c63d5cd93ec8660e144698fb0480b32e92877fdeb68a538b0c02cc7b5974261bedd2b25dbd721d9f1e8a0b208881c9673e96756df30aee4a4119e9d5bd58cf1b90faa927109ada2f2b456373ea0f26fb6d3917763f38fe986c26612a4c9db14c3b39092608727da00c77336a888406cd0d714e8a0200cb5fb94c09d2714a2db00bab749bc041a0551984062fde4f1859132b5e686d4f4375bc63e6c2617db96412ff24aae8bee67f273dc7f52ddfd5a303194ae5521565566fa39748147e527114e04f5227c2ceba063ee424eb32e80feadf5d3c7ce2d721321381d863c85f0ada11cb01373266603a762e94f6db4f58a026fc0de4d8b4de7a9f7a3738876622b4b95baadd9458b315cc3355efc632b3effa6e216c914cfd3cdc700013c3f9c151c78bde1491c04901ffceff223db44b13f0fe86103937fab79e99df49ba8ea8d02f00b08ee5547d3f1dbcd423062c8a86922604bd432d3d3b4dd05c926f237f0c29abef4e5b29eb3874695f6015837e499342783ad569c26d4b78b4350a417959443cddb17427a608ed6e99529112d4c166d28bd8779444f5eacb3e1b10566aa0b4fd4b591ce72105d9712ce0284060174169380092e49f2c1fcd77283e716a8466b858eb09b9c0041f97784cb1f79423e1e818c6b046e3a406c745a152d5d4fb6cf48efe812d360072c1bc9a6cb6b95e9ae66bd864e0a6c20872261e628848d58967a0cda27f83068658041e6e6b0cba0a0055efbb4c9f4b1fb6b20242c0eaaf9b0ddbeebaff97275b7a6d5eb023110d16c4abd5bb5f1e4b475c669aeed1d7a8841768e946a7b022207562bec9f1b1ba13159e46cd6c691a6317d3655e116f84fb571205608a6723f628efff210a67ae78ceb79f2072a60647bc75dad5602ce1d48219a72832962ac817a33aafa382c6bf4494077dfd6d41e786b312384f9d225dcd016cfa7fbf200498fc6af40f9c44caac48757c06ed217ffa0a7c688a24af18e1b36f7172c92e39e5da6b84404ae268073ff6d117861c9bc2e413a1953f2154790421ff0a4e34d92a1d0f0c0e673165050ae86949d9a3cf8d925f7dc645a3ff4f931e405cac1f255c21b65851e92fca0956f04865b9513cdedc63b55aca59a068f2692c5e9b0a4f6c6a3be6da2dfe15ad0f49ac6a6ce6dc7621e738e13dea4b2b40e6acd29f27af3cbc3e85cb2924c1aa39d9e908e87004117f98ccb8e17ddf0177767c51d1310c91a425c2ce5715dfc2efeba759f6111bc325f3583ff0b587e02f788c0653247d53e34359d230a26c76967f72d8718a7156c403b61f6eb3db1f727931df243b3b4b5a1ee71cb9b6a9ff36cd8e4205fd9afef649328dd19283058fd62e0f15190602f08cbf795431499d2f8460949c937b3d3f6abede3643cf7eb139ec074a3ee3d27d37a7e8b42bd9a02ca8a25f40804cc244bdbd7e615bb54196a2f44b5625800a7bdf9870543287be8d68a8c379bfe8353bd4b11bdde27711a98e93efdc009f88927af62883e911d43959e95cbe5d770f3e54729f437c057900b877bed3058b7fce01145b885d9d8b246595679e8116317764d6cb371e2e4d91a704db8902ea7e8929ef18761d52ddacf70e8975dd60c6d2c250ef42b6ed377f46256b081f3a82deecabdf313b989cae9b310f2d10215e2226cd6ff80279e2ada00819bc3cac6bd74681757767e46c7e4930be73f4656b4d01486e213497f63303a61ecd2f188fc0e2740f9434bb402e13451ef7c99d1bb919263ab31940eec22a5c73ba397abec5e353ce9b163152ccdf16d4dc622d1cab4aeb947e0d3728906c0518143b7ca8ab13276285c00984e0a20d397aa4195ef173db3bf3b602ecdfaa0823f207cdd05ea1c45ae23f32337b6c14b131b64492569d15e389ec9bb259386d2d4d0108233315a1e78c2c3dce83e6f5dbc6c8628aac1e51b01ca21d88ebb09bacfa1d27806121bba0bc62619668dc5863ec836518fa444cc078c9677a0773600b9b3f49a6b9a0df084ccb02b1c1245052ba95f82a9fbd7fabc1e1f0ecb23a00655a11bbda23e226fe856af21fa62671253723402062ab413b0cbcbc2e0f4791b370385d5e94f15be56f7a9f283086d3bd912dd8ce0b6dbf2405c5efc7e10ae1dcdb129c77863abbbe0135352f2ee6ca98639b83967fdded145b0330596e999311c40806bee3d01d3dff370302a26674069d645119eef03b1c20c58eba0b303dc1a91cf146e53a3fc833ce5454d8d2035142f418eb773236f3911b9356952c8b09fc1d21972c06868629b2f31936d341334c8e2655d987369a5cf89e796ba17e4d433eb98cb2aca44ba984c2891e18aeaa5e2ae54f1acf3853782df40de883264d950bf7e9af4781d6cacf66d79e5cfb26ed481f6dfe367e4e61d211afc680cc5fc42b866e6638fe5c479c8202210a8f8c3630a92263dd0059c1bef804e35aa72bb3147e01bf358373dd109f2041ef50c2f7d9b13ca099ac1c2822121fc7eaece67d06db58667ab5b52fc14e33b193fb432f87c022d3b017dfb93fb7bcc5a75659c537a6d3bfe31f2753849a5ab407a561356050cddac08c8b840dc1b81f763bb47009f3502b2210a4cb753d467bd068555df372bdddb9c273326ed2ad0f3431c93b2e26a35273758565a2001e207d2094e380e8925fd074f0f2e908bb5c456c7e2102a0efc48b12e5bade7c38f769173bd24e23a6294511318dac399f9b92492cf7185cddb0184785dd79c64c8e219d197d1719eef9639258850f656c6db3c205901869c1b3b398805d97effdbfe989342a485da76aafc65d15a970a975a72a9ceb261841da80502a063d3e607017e5cac88e86c984c17d8c0da07375991892130810aec6e8cc7d497a03c6fb28924fbd64c3ced99cc7f3a1a48f21b2958046555903c0522eb6ade43a6e70b4e9c8fa4a93308d79808eca04f8c05a2c35271eb0191c4061094189b82c3e86651f0babb354cb78da9abbd353accd275892366088511fbf6b8418578bdc0f6c710474cbae6d4f7642378ae398e6e1453a17bb05bc7603143a3d936fcbca32c5ae57261e857cf704b807dff886e28a899217164490c73a5ea495c42ebbfd5585917521dcef6e925c43b9994803ab82387e2f77634032055c1eccb68a10bc938e9e630e82e17ffb6552ff025daf1c156cbe763a4ca070122b216aebe0baf75769cfeeea68ae502dc2e8b67950c987ec0f5ad970839a341b0f9252dad552f09a8ca91f00f3a24ba8eb63d23baeae586144929396ce922716f2ab7bab566753b5c8b1763c363fcf8dc5e4ddeaf3fa6e720b4f586303f10e0ef8dbe35f81370cf35e7a4c9aec6d905864bbe62a9e2e794ba04e5e76c4927a33cf2339f453dad3e84ab61d6c0c27da0438ea4fe0a6b215b4a13aa727023a681d952122a09b444139a20758d47db1a1351e2632cac059fbf1c361511cad463639ff50afa319b2ed61ab3fadcd40ce70d0121031601e0e4108fdc5c98c40d6f22c6cc3f8db3c70550165cb7df49432e626040dd3bbdcc83f6049c1ef9eaf5ad13a113138c83264b08159fd38a19717f26c8a2faafad4d0d3ef1b86daaee13a872d04796ed963c88e87bf60b031d4fd82d647d6abaca99532a958c822b3d0c5083f2de7e48472e658ba6b94ce9e4e5286615c589d6182fcb8fa314d50bcd51be70a641d62c7e3f2bc9c80677df67d5a223a16a39bff3f12a23cd57463795744470183a78f5b59cb1976659c61f47cde3f318d151965900f83e27a666cd756826f0bdaf21fcf0a1cdd7a03a391e98223d10569f803f8ff28a310bbdad835d42e7e1ba6f0d30743d583f0d5d8bbab303c8775f71569bad8df57775defba403732392bcdb22d31a14610646cd2d2625cb5682319731fe2c378a29100320cc01906b01995ff7360856c220c24638a4e2570ea4d6b1c29562b12c7f0c8b3a1488f7b171a5c552ad11d76671282744ee0f6c9cf6059c99924bab12dc1b11a68d0fe1e253700249a6725567071af6abfa2a35aa9b12b95bed1333f0db3d5a7425b472e153f2c8ef3df38a378fa5a845c62932b77608c155e23a2383c3e42d50a4c262476392399eebf98d62d483610303f6764f3b346c4366e5210f4fdcae0bd8808098d07237f52f5ca19bac834e5bea452e9934d1b1f706595aeff8f4333d29773ab010c2c50560acc449ba8502d5efb5b238a18c2957ce8fcba840f7016c0af01f74b277756aede5d6ddc1ad1ad7ead90d98ee8f693db5e685969dd1b6a1bfc573f7b0156927d28daa59d77d24ae364b47c8ae64e28f25d58e22fafea707a375270eb1c4b60ed439195ae9b3edf7cd07de6e000ec19315a80046d4c7d458aefb041441f508a9942296d178221552bda2fdcd663b7c5d06f17fa7588a931f6a7c333853a2bc82ee39267b343d0ba9b7f71d9159511523af4827a0ab5a433b2433e138c00cc70d4c0a00acc5e1d55f7b5952f99b88af02c02cb2d7504a1fb62b8d3e413005ff93829fe8a013dad67a4bd7ad67409a775c653bcb0808482f70d48b83f1813c7328c247b9940f36854efc9e8fb4bf7486b1303014fb11ed2af9b66f2eda32dbfa6b718c88ccc2d86f018d39b0449d094556582e1897b9b98e9bac6cebed618d972fd2ecbf434bec2b49dbe8104f57f7f233d03fcfb7843bc7095e45271b3056d7d572de0681f530c36d31d89ab0a053c37bd01c3d14b52109eeedda20ba2179a66e173c26801bb108b9af603d7302922b1b1e4f9706df660ec61a21757322b5e195f371e5c49dc0f31d48dbfe1b19be7d063ac4494e687b3021d6d25f13411d7dfaf487505cb85abd66a757735ce841af4dec5553fe8338a583ee2b8069329321f90b126e515f002a89cc9abf519293dae268a06bbddfc8bd3dc5176dbb80fca1b11eb06f09a954f1496bdd918074e3f4a66d56daacd947683595b00ac3831c6229c81a41fa3c6e85b233ab24132571f2e78e4dbf203f9dae1cad77215e1174977244886e769f89a1e5f382f4230d2995cda43ca5ab67370d1d752f4e0a91f42d3115db21bd50750cc4a94e09e6e94e24216bc37c066b33354c452609adb02d865dd9efce0670bb4c2d48602f9d1738daeb4f251ec1a357b95715577b4c51650cab1d8ce9c387f4354533cfd8d00ae64c267b826ab5eb587e48fde09461d323abe8c2b5a4447380435bab4f91d7da45bcb9ad36f8225b671dac1ea7b02573e0c1c0b51dfad0e06e9765cdb98170e692568c68d24126b313738a25cf285d620723fb24db80b2871a0c4f7c9c71b13ea40f6f451b500bdf55c34d4c99232d11c6fa0e524471e2a691825ca0eb211d1525b0267dca1660099613cbba5d36e603a88681df5d6099acec10dcb93cca692a56c091b7efdf2bc444031300ea9a680008c65492e26ce2a1f1476988377f577c95e22320e67751686b4a284ef7e16cf3d3afd3811e5af6bdd2ee4adc699b7f61f03fecea71ab25e84e5f50a332368493cbfe2f58b9a9205e45ef7734e64b959b5bbb243ad2d116e46ddaeb90c5fda94267cc99c6843c32565c38d8a732bbda7c2a6afaf12b60a564a3e8c841ba62eab0817701427b78e509b1dbbb6acb42963df5951d2a3a137ef7d568e8c8f9bf8dc243a3ea99062099818ff83c2eb9b329840592f7b52aa3c9e0f3f2c8532a5c0e007619da7f4a587598e3f1543578942bf067873ca979d5cfb693d137a91a82cc50a20376900b715c618966bfd20a11bc478fb416eac77a25e6df88f484785f49e14fdb05178c950212a84112ff11aa3cc54a6d0efd4b4901337d2b18b6b2fa688022c2fe3c2d9fc2d72ef80b69ce610c4e61e03dab7f2427c010dedd3961701f1272dd3d4d2d24457de449c4df4ef9a42f422b11f4d5bf62bde63cf0dbe970112107ca41cd689f7afbb55994847001b44997bb5dce971a5e566f26e267716888f28cdee137b17db36f3906914022984284642176904644a4cc63f29724170799c3ad94891a8dae7fc2ab9a1484261ec32cbc8162a9149b9c015921f4e0901b5b404281b4946b7a982edb8df7418738779e3c97720fc4508a57cf95dfd7efd9e0d2e9cdd06c76034cbc4246185ddb457086a5ab732bf22b147728b8ce5aa2e4cb130f3a27207eee3ac03e93cfe29897d8473e3d2dfc1ff86e0ec1d0e80e46dd8402c0d2b054405b42390539f1f190173391b27720722b4bd72c3a461c88a0d09232a2f22f50111223a6035b2ca7537e86f07a00222ae19c9a6e4a6b549cd070afe0125ea2f7054170698fa8f840cc3805dfb84a8f4886d48401bcdea927275f7b60bfe4be9ef5922b0a89afa26177c2be2d094e2ac536f5e39a85d63d6365c97622ef8fca458cf41ba1c0ddb4ec9babc625facf0af6a52b42161fcf9b2ac59cc7b1eb99ad0e67eee1c227d0fb740905d6d502f95b8d24b3df6bc03eccd378e6fa30de6fb378ffe4aa31eeb59ed813ef32bc8cabb5285839ffb389cffe5031f6af53799f2108d5a093b9401a66a9b71550f97e1ea2f38724ed25c703389e2df748920c4a39f0ec0701f10183f586ad8e31a5f10512db18c40ecf00af1e58802e96f357639f0b4f5939d8254ead6571bc6349b6904f1027d4522fee6b6271b60a83a2cca5199ffb0959c52f0dbb55c099e9dd69f776c0fea8dd890bdac4ed441dc59258c4c30d95c0ecb82826f6f9c3265097df607c47c81e6f24f35795d6843eb561726be49fd0d4ced1f08c05ed01ccbb097162901c6a17e28434339a9b8d95c4b0b32d8786e7b3652e41ad62acebfd51f2aa8d94c919a43a36df8da2b116b07e73aabdf63dc0c199f1801693cd4d486cbd855f0397d6873abe35f5f57bbbdcd5e04b25893646b32f8e973b9cd470e04772a5971c3bc9c603dbd8d18691865fabe1869bf674124a684666d8b7933f123545372bc0260e99c637b7b39f36e40caa816cf2790fdbeacadfae391b0f14d40a9e109b8ff0cb92e636954e52aa26782f530f2773422555d645059612dc573430a40181558cda99c5ede1c41ea63394b4635e331690af381aab6e954d7648542484d70d629b7c7bae51992a6e4cbda0f251f8ae1c13a47c5c60508297759894baf64f75ce929576d7bf0cc061bd15918981e81fe0a5aec19e37f0e245211ada286f9de634a12891d6c6d357c07c3b4667e24e0a150a49d2b8039c52a699e938faae1f89116bb44d4caa3331801fb7306b22d7e70f96642a7343fcea5600deab4bc400c3ed5a2395bfc494df71b2984c2252b84f50cf8fb866231640186cc8923558fe217ddbb930c0a0e4b4bc99121ae1f197703068a098a72784a4fff6348013b8264dd6c7b126d0f119a2b36162ffc360de2e4787c6f62f08d5de8d34bfb743d20f78eb407c39d3dcba47db10e70efa02206de345c82cd578f3df9e90b7fae2c8de4f240e54f090f75861586c6a2e0fa17ac8c62c4ad4fb21a1c0fdb873cee1c534055e491d1c7f685ff667117037a972bfdf3fc57f1540c38a657f44bb1a29d963972dc082f483c4491594655d295dc30bb99e89c7353045c8092262ef7d783b55434c0d6e80f9296b0cdab9a79354a0af0023cdb5b705cdfcb54bff7ccc28df71d31aa4f9909630b10a84504de13e310eabcd8ec636b8a9d60919d322f2207b7c30c449aa49c9601b840c752ef37c73d925c44f7a993e8d3ebee13b37e2a3d6f6dbecfee4edb212f60593864d2e1f1313669e3db5ee8ed68453983d22d096458d0c56d8578b704dba91813763da6ea167fc94bb84a4a1ca3b4ee0fb38ec25ccd6f8bdf8627255328fc86649509356e1d2d2a2d2f6b29eba55a09505c54e33ddf2ce37a7f15e9b872d122dabc5333b5072fab53f6306cffa943f180a46c34c44215976994724d65493067355ae4986337a971cb00bb875b4bd1e344e82ac80994b8436c3f54ddbfba67d63ae6e1c8023126b89e198db3e2f7e5045490c7165d16ccbf652a0725dfe175531ad49471f40c5361cc152c72fae6976aa4c13663ffaea4cd11fbf9db2a97090b1f4f5769953b11ed851802000e3f23b2fc142c83cf7fdb6608d4e216572681194a275d05062903c5284c45c7d8375578a243b3804c1f15701bf178d88009e382e48608a82b0ef89f31e389bb99e0e63d27d637cad43554e8e5b7549666c992241f2cfd93dc13e856a6edaf07efd5be0cb2881d152a9054552244ddc94cfcef2be077731baf3ed5197ba98f58bdfb4438956d35c6b6a9be24c2a760ed2a5ea841a652058ab921689e4fdbb2cda6170686bbf69669b0bdcbf69f602154236c025c9ad24ee89f1a3b042476a1b1a4dce6b79c8896fe4075b23f7f642302fc1fbd4396987850812522c2784bd182d7afcf42f22f6e099d6df0455fb667053924b2a8f47f78827c168f168821095e0e83fc163ef868786d7b276789715a26df036589121f1b5825129370b518d37647409792e6b030545a35006d3c47b8c3889af4bc01e545e6c2173eeb4520609478fbe40e44722f80e0d0bf1ecb1f574ca7ed4c7b21521221c62fef49557908a45dfd95cbb5f3d77fda666af4b304988b4183934a8a2579c98717347da401ef0d516ab25556490ba798ba97f70e8f1e4fdc511710a61596c3d9049d266e1ddaad00ef25f79eff0188198357cda6faffe0df31bf9ef53688b8d627edcc1684d10f0f05418286eb6790d40c63ea854cb77ab1d4bb5af651b32726060ffdbb6c384b48a244917339c3ab2651445a56a7407cfa19cd1c274df4154a2e7d9c4b7eb6506ebee07ebd0bf1fdf6ee380845add785db7461e731bd9696ed2599b63452e235cbaff9e01511c50510d204c7881ce0390c14c0d6e0077bbae10b098a2f0ae1bc57b1d730667bd35b49b80b3bbc87adf1e097c6db38a164edb61c740e0e0cfa7c99ef1537aa765c6e2d5b2a34462c030f36478d7f96db376a57145a374e999a95e75d8bcf25815bbd1167eaa5677bb0e58c4735be3e1a1160fc002ea5a7635eff622d95616313cb3d22ede535bf20af4719cfb9fb3499ccdce92ff2effb8d0cd4cafb9245fc952225ed8f5d4dc02628a5699de4f2ec322caf3b19caaa1d526b502332f5233b608c38ee85e3989abfbcdc8239de01133f2f559d075c549c4edb72cfa4256e974b80f13aae35d4204dd0761257a225495d0d614a38541c8d67294587cb5688bd38eb667e836f0ae0ae135ab34b71ea93ce7a02f83786836acb9b172cc3498b76d9f08d6f2c41a1c53cc127ac63e417fd9b1115da09df113c0b272bcdf130fd03043eedb4b74715e76c00439cd27794dbe84ff7e222cd5ca0379cf55007418ba1011b8f1dc3e153c08d8c506c244cdd257bfd6ebf02adee598bdec10afd5a25933a8a31a728444313d4922a9359d4a894643a11192b6d6a6a5caecd5431a62afb6e0de4c72218083335cfbdd02037685ee45718cb31c38aa54c21d2f8e20a15baa6e9d7ca6a1a7ee9b705336d5cadc41b9eeb34483530b9d77215e7a8799d73b606fef10a51a70c00138aa8644413f33ab81b20292f6885f8bc2ad4aa03b79f0b8b47e41d2dbc6c5fc15e2adc4100cdbd82c3053e38a93d6ab662ada2baf922eaf88f629904c414be2b6a2d4a1e6fb02291211e642fcbcd219184c9484e7d57a6db360bc916680f76e8c44ff03bfdbf3aaef4bd922d472b0926d737e377a46c097e55e4c98ec643139a598cf2aa43c20e4300fdea1cfc6a082c572cb4fb3360288d344e9570bfda63139a022d453979c619f3264a09a5a09165da23952b38130e3969d28617e707b9ab41e996675237f5f4ba374d1eb9f2909a54bb7a39c2244e1747ac6e43325a53751a5546f45681d92a194f022285c8f9055c08fd52fa3cb406db8b23cddd2d1e88bce9dec13a1c412d9c90072348287ebbd4ed8c8e33932e1d4061c912e11f9b117350b1d7058299489f049c3a2fd1f0b4e7b48f7f7b18ab52bf4edea332ff7e6e8d620ae8f9e93e2f4a0caa0c194b4e1350df86bf3a13b79afdc5d1ca11b1f553f709b4518cbe7413da516a21f25f14a32cdc5a9e5704eed7c182ece6159ae4f6a2ec7a03bb20889999cb3214cf563407b317f43c2ec1c946c29f4531f164ff5c9cd0a7316fc690f44408ac1681823c0c086b2e68ba5361f88a15b3a728810446e0d086a6f11c5e88816456047b1adc7ee2db87f13d48edabcbdc5d0b3dd752380e82b3e3b4e3257cef44901bbb13727c187e2cd6b8aabf64d8657f89c431632360625f345e03934bb7979705c2721f8322f97ee325574dbb11ed1df97d12f645ac529a04a5feabdea3b38007bb9858e9571b79df643bc7b54dcff35643d591d69d00b92ab6fde29dd47ebb00675b7b7628d6b317b5013f181b74f4e5c488ce35e2c214ef3ff55b435e53e327ae2a729556e323d9eba9ea9c2185f8097cb3e434b6e9c4811bfb7eb69a98e308804b6077e6b14e8e997d28a78a1ba9a645678994e1aff00579146d5a6ac4b6251f8fbe6d07a7f6d989bd935ec7c9f206f3e049726ef09fd0cc053b2c38c5ea1bc996901fb48839957bc847aa08bae9550f723f4e7a35ce827c035cf151eb51280e95a731c115d18e94e4cd38c4117e7f2d23ea28765edfad90ea437942a74f30c21f42c02cbd69771b841d9100bf25e1141374d9bbe1246ea944f7ce4a6ce00ca778d102768ac996e608dc1c9873394b15448885ea741b3ef5c2dfdc5904b022da899457590b7d0617606eb78dcc67b3806fdca7e14cd6090a840eafe744eb074709d49cbda65bfaa44bc1d4ca9d123c33723c9723af6861dcddff10c3dc203ea6f3b260855fc0e17f3b83bc742ca48de22a5435de60d0b3c82dc92e1f02623d0186b0b660b4395154393806b7de7dce84b70606952ace799e9d5fd5f9f922116bf845cfe4539fe6249271d625a2ef8830e04f8482fcfc1d4b1df5c33dfb3a28433a438fc78f532e82e9e44aa694280027ae089928a467e49ac531a267f1ff0f266585429e3019267032b56e3b623ca022a834b651b53fef1929e1fd4f8eca260437cdf398ae4f05950bf14f2eb9242fb07922344c08f16c8c9a77d939204d33363f3947a59e0b40c99a69a1b305ef44b32695dd5503c407e1e274fbb7c26a2ffa9a92b06b3740b5e8d2655bd33cd5b1ae1b0e8cd4a9529017385ddb62bac12c3108f67f54a8653e9fcf58c2dbfe0754c3acae08a37d997e5bd02052481bd126d0508d44a7ce95dc7b219c669c1e227d8a31142cf61d77d535056c0db986c93abb0c284f7027cc220a5db9c9beca9e49f49d28eb4c5233ce35c1cff35d361f33055d0879816d8fcdbc4702e9853dbeaeb1a925170f667bc2e3c59da9198d560d5f913dc09d2e692600681c1739f851ea162edfc4d7cedf468c927db352d4d333fd5dd162927a89ecebc71667e2b117225fc06ab536bf1a444811341afb26153f7f567401fd9fd1cb31b612145b3ba97424bf43120dca3328431a0ee2d640a82fd6922f278c1c462ccab0c2551cac3c91a429912e666f741137476ea5935be40a2473ae6733d3803e752c1567f0858e990a610c8d50ddc84fecec0d7195728129ea25275afcf95001247359ff5921845ab3426018e338940e59cbef4c07b94c22b449d3351852b8b9a40b242a9d47d90e41254df2fd7b31dda6dd9526691a69046227f2b2933bcfe9656cd21d4b36f490b0746d1d0a05d59e724b63dc973c3e05bc085d063a259f29b4074dc275de5555540aaaf7d1e2ebbfc3e1163c053c07316b9ef2ef7556707ca3a170e68e85ab7623a1ea56fd44a8f046c063309129e32779e72fd82a7354a488a7634d92d963db3aba0b8489ba945c710d42eb386c192c2d91e74af66ecc3b6cffafc21462d86911e0112418a6e970821d372f793f0e0cfa5b380b120a5a8e7a2c102c69ce70e6ddc1c8a898e731f5dc917e09db18c10fa88f2145b7ca84f538142a7ee5263acccfe53a0b87cda988262a294388fe180bc34a4039b3296404a3a147447b5a798ae90e8b8c5a32aa0268387c67dbe1ac2fbaf6e566d5f12610ece10c8482cc5a7e87bc6cc998456326d667997362867e22a9e13eec8a4a435fd0be16840ce8c5e9acd377f130d7487130cf30a6a68eb62d00103dd57432160f9033831758c68512903ac90fa11bfab05389368ce3f6080709f22eb84549b18f00e094b039d354fba745ed7d692dc353a7be3840ab7af719a5e301453aa0cc2f663e5c0967f3c07b678f6a640f7ce477c08242dcf0d8a33f11926b1472e4e77b8312926056434c98393be4b230ac9398400596a9f0112901de45b5662e867eca17d9512c5003933e201d94b8d60dd117ed2553a73f7be61140385a1c27ea03b49b811c1a344e1c332e1b297a4fba4ef3c02fb332b06b11291a00d4592c1e98ae5640655334e862b0d0fb8b32e59f75d25d4126d1cf7f763abddef906593675d77a490e26cd590c098fd840029f860c23162d64162e8ff229d90c44933679bfb3dafacc3856efb069907e08e52ee4eae5fd65204eb16c84002b3651c2438d48a8350635b7749f5ca353a7006e6eac29a2c7ba0aee95df5c3693fba5225ba4b9aa5e52d19e55939d35fb02dee22cd85331774d9b1a2977370796de12eb662ecf6da5db37e215547a208cfe831c2ed987d35e0daa3fbf562626cb16b73284024eab6e0b49be5a8233d42ebb95db278b4a3c1d6efea107895c185cc25ab5dc993a410093f110b14a9e7b93294af8b06385270bca9f471d0f9807c08d21fd6476def16d5b97f7da637805d89bd37322651fa5239f507bb6e45313b17c419305209f10dfbf84400fe0c17e517b36b9d596900e0c86f708c53f163d9c6802ca07862f39c432f8d4b4ef0269ed6cd9482c04b5059d780a2fdda6dd263f42657caa26012c067f33eb686880a4513628ad3d990fb7fd837f0276baf2367febe6cb2e761b80a2f184701a2c20998a3718c45f44ac8c7c640502a99b422149206733fbfd3b7e93d34767bc7d29f8037e56a20f352aae279fb2a1fef9e2029798343bad919015294f8c0b03f18a9ef358779c636c991ee2d97b4c54ffd02d381acd214161fc39efa865b5931af8a56e018de912f0942e401ad51c031a132f5d0f1d8e056d71c95ff726d0e53e2eb0be66218eb703b898aa04173565dfb33bf19cd08d35a2766a2dc82fa46f95da13db7f41332f33a7814fcd4444a181f601a1d82c9191e4c2c113abb16e77b75a4c09c9c3a229b9533cbbdf3758ed647e2301a96d48262653602e33bc64d65e32841ecc6e00bed7bf6f9637b4c8ceec2c33bc3ae7635462a82596a33a761426fa8e12509aa8b680a1d34bc6e22bdd701608400712a8680ec7c136321a1f1ae91c3f39688a1830b9fd8c40d174c060e8f135948fdd3fc4aff51286892bd66719e6cf1bab356750ae09953445bdf2de94e12045eb4e1a94e0f0d15af519ca7b7abfbfd9ff950bd1279d3e5c4db929d28e4b3b57a6d49364c6443bb590a551d233cab3c1f816d2d5bfc1df4a1d8773ffac211a5a4ec810a06cc4ad1bfe0d9696f6f93db57d769f60c4cd8c39e89e2339c1e7261ca736c38c26bc7ab8aeacb8ac6dce88d165d1ad150d5b1d6181558c9fefb321e68bda642ea89463d5680508fab6e9cf1c8945d701da884c63b1b4424b8d0e2b7abb64ddf0ce5832d474a0eb08af826ad26567f1c0c004875679de135853032698a7582d4b035f1152bf4db897b1399c0c4e36e7da70d07e1bcc32f94a773c0efc7d105f7d3f165099265ab36da6964c6266b2b707cc0535ac40aa9c3e872839101392e30db370cc018b66f2d735cdea03d05f197156b99f543163c126c54619d476d0abd2370da5272e52ae8f539d4e0763ec074c87296efe40dac65a500e372a44ce010c99c4a644acf528507eec5a62ae06046155778adce5a69850fa130313215aa688afedfda8bd74947ff424aa5779a3bc12ce694634aa5c2564c4933e40aa2c71746fc5912f465a7d16992d73b6ec1c980d9a209704053350ea8b9b2e62543e6c1bd897f7b3c759f6ae55502a65494879692dd16ac1e1a74f7be4a01a5c48eeea6e7d7ab214c1c2bf517f0b76ee38918b70080334b5e00250fd334621fb52d78ccb8e1c7e74a51da68301a6a3410c6f3947945fa96cde0e418ce4f71fa883ab5a5637c55c871ca01c7ac68bbcc8018e5394e99a356c716781c39f831fe674834dd1eff9f2d7d08a78664f0a821e9dca7aab962810311c6f2c1d81270a942c0fa22461b6fdb744f50f50dd00784a9552aff219745b3c1366a80841f93e51f55382d4d03aff26d035882d44f9c2af8301dff3371a1755ccb3d32d7f2519715815e17a1bc5c4ea1ff4ceb899870f529cf5a7e8d34f44479fce1e02117f0d91dd4ab82466057bd7323bca1d909bf95e8e27b5b4b097ef7500d4795483b936c3b451aa24db39bc6aedbfb48095695937b0e28d548927aa6151f2c0f92e9e06d350a6e9bea40b3bd03711223d8b3ae4c6fae934b0e0d08bebbc939ab24df81a5d21c293840b8adb72771c34b31cae00f9db26d3934fa3a66958f0dde9b1b53da9b1c12bd62eaabe7bda1a7de674f1e2731789b4e1f2f754a204485bc5204807fec16905a6a7df93a8d929c93e03b61b221aee73b5daa4a041ef20b64ab85a0e734d78702c0a009c5e5d243ad24d098e581a198cc618079221e30845b891221d773fa51e066edd98ff26fd2d663281b839f78ab7abee85f1cbfe51851afb1f2cb2f6b3c88f8878fb88e2bc16d0cba76d4fe1553b6780a5a212a9cfef3594e80e461020dec6bbd048ba1f0f940e2c252ae10761968c74e676b9b0be4851a1d6168b93a803a8ab23c1ef2827ce9a515a0fd879ff4ee21f9f917288fbff97c95b2f3cd444344fb6c41629e5606e8927a3aa63dfa3b52c0942f033c3c0023e3a03398c46ade8dbccbed4fe898be22684a84c5da9dc1bc919941ea482723649487a399aaf4dbfb9685d0875624bbee56ceb271fd04b19bb8abf212d821eb54ac3ee1e7947becfc95bdceea6bd6e128a2299ff0327fc0e8e69b06856487155026e4539f21efe917c1bae30eb3711671d9ddf468c75c9b9cd86ce704aa6058f4f422518f1eca4142726e41cfde625adedf3e62b5553aa25ee9507774c9fc4e0fe5bc82f79f67fe1e9d56e651e42f2c73540492f970a2f854a76d882c8c2ad8fee62fa1a214e8f999674ae4962832b5456a2b9b702713d14d33ecefd4e8137843e10f808bacf0a5a90727647256f56a59fa683dc2fe5afbea679aad8ca0855f45154f33f83af1b6f2a3f3305f53999ff7c2ea631dd5391ed34799dfc843ad54246e347338491e34be210968f098e74bb0803268c6b0f1c65dd1a6a82789b0351816558245da1a7b392d4dc923483858efca82dedef5792b724a61c52cae20aa46e2be629db3264aecef71beedb1d53abfbfe463aafcfac8d3013128a6797d596e0365d1b9993c48c64f965ac26e3f01256581caf5d6c80925e67d6a0ca43c7d0821d24238e0a926efdb9dd5f15ba85098dde73fe6b8c71f6e8f899438472dbd60f4b7711dbd51140e566ca6fa1e161f6391efd78c110cdf4f78b3110d313bf51e84c7b141e3caec17f8e640cd78170653c365c9e202ceaa59cd1314a314f227b033a852f261cd089c73b36071adfc7103c1b0199b5a168d481e577fa4f51806ba0b6551914677207a13e8ee5562811ca524715ce5f917ff806b9c98b5aa345f1f5727d0f000040ffbf74da8596ebb03e38d029bea83698dd2f23fce2f9eefddbffae713ad29c6d6a4af6e4f8c515159fc67b4f51ebfd3f23830a0f16c1b26773c42e2323681d348e54666770ff1b221de035c6797095d50ab2367e0b9d35c6b8fc7b5b3a8ed2e30cd2a85174629c1d5ae59f4a5a37c7a6eab2648ce6dd9e41dfe212b3023a8197d9368f36a82fbccea5b97670884f1650c78dc87923283ad20ac4c83f03337686740980da9436b73dd75af12d1fa89b4e1cee4a858fda1a3aec8d0c2409b4cd3e827b2c25473e63aa9758694dfef2b34dbb263a1acabc4edf57c49e492c2b3bc00ec7f2c8d82b5cf881432b0d6ed3e90c2a63b619a74409b1808fbf583aec45caa0aa5b6a54b7358c697eea9e0c78bd37ed0ced8464f9430050d61c980114bb2c6c2089aac33233a82855569e5ce459cc45a8a493f09ce28a043cb4fd18e0e6ebf94080793c1a776b2892e10319be063df7f8bf452aee6e4f10d041c7127b35d3c1e8a225cff18aaeacbe79b77563c7db991ab38ccfdd2c997ebdbbe60ece5499cccba3097b0ddbf6005135fbaa75e2d5daa12367e528bb64f7de0e963d10db70214b637b300f2f8b34a00de7dc555351db31fbdc80ba81aeb4f7fd381e1c4b28d4c315251d3006c05fc0207af2a44a8daefc53693dd9de7e890bdc992ad880025cd71d502e14edca1d9f8f350204d40a1767fdbe1bbacd37da46ddb00422fa2a0db716ee84440a045324629e391bb285471d362a70e5cf1aa22f66a63950249d8f0f346bc03ae3c47b53578240ea7526cea5ec24453558883f8f98b21235e990ef4b43875ee00141b39275d6b0cda81d4f42f6d4f1328588e4b158150c310caac0c327c97f6a2b7c36c0c5a9f03d86329a9f9f87ebeb2c24b1f7efb000122d02b2adb33b1218570c1c5f48d68adfe7d28aa880ed8dffeb90939e898d24190e467231cd6851adfee1993a5545d011392eaa0275d4a0b52e19dae3f65c060c8cd535b55bd82ab15556660306f505417b7f9223cce659d74f7cf1cc1c440f7f66c6af61e21639ab66a1a048fbd32aeb25aa3cb910bedbfd3b50f2def036104bee0ddc4fa6d9d875cc805493036eafd5ad23f0c7b5c16a4e104be4f9d06519ad4b0d6a36b79d1759be75fd207f397f3290623ab207a1222c61d00a60256607e1ba4535fbc7b367759ae0ad667f3b2c90f0edc8d49c57fac4aa9dbba1370417324f9328768decf6913850a68b8f009f8158b60dd878bdb6412ad2bafcffc71889053d887e5928fb7f6ba0780a09a8e11862edb67fd383e9cdd808ed34de49224c8456a82b80938c6f5f7f44e28f31eed0ff62262ad181cc54e7645ebd2fea07f5fe6a30d5475fd17b758ad22a6596af00590387b1cf658d0c1592ef35eb032cbcdfc7c81ccf3c650fbfe4053fe32f589e0d2ccee8babf51aab58b60e8fc230d53286329ad45943e1ea04559ad16edb07caa72f34226e6df4573b3a8a9f390129ce129254c56e9a148182ea0056c3a5083acda5101978ff8c0dc10382e109c3ec1ccbe836b5a5746997fe39be4941c0bf2d674798734d8dbe8630031dca00324a61152304371d8a988e969e557491c7b76e806e7ac1e456f3d40e51b656f010ba88d4c17c7267b6e0c0ccad995f90be2fdf0715d6a7fa2636e574dd9b6c3473e6761f757e2aea66ff285ffbc83750faf096a1ea3b2be7afb08f2803099f8f835127f579b236aa113fac896293356a31b4c135621de128604592299532f834a2b40e997725cf6822d623c8d91997e9b889198b0c0992ad1a9f17148fde016ee0a6190cc6a3698d9d7f5adf148f8d02757135b57eafacef2429422165dd856bf346be9758d3e3749213f2aa82b8cdf6b2ba084ceee6067a30a9d3a60f5cbdbdd0c493bfae1089a690b20b5e16df13081d12fb820e7e6d9c7949445394e1eeee73c2e4569d4d89ebd9e60db7ba6ce55f49064cc4b14c72e6605683c1c1b2a9ffc03ee11f1aa38ffb41942761396ca01b6e97861e73aaa02c717baa2441e3bc3bc2d7d3137d3631b55232a3ac3f8ea4449b6623bac89b69591af062db8cfd8fdfc1f013c2a55191bffe7f288f5b07600a24b0331c498756b2a55faf7d243d953330a0fa7aba94eb7523769a5c87065962c828ca01cec1453c9e376856825173d3c25a341179d09c00356098a87ed5fff313b366f4c7a0e28e9e9357e8cf4061df80262acb3e482c6f3a3d689cf1628688167ac4d4391a9162c9b111f40a697bd1110a233d7d1ac09bd52c5ad1ec2fb2a44aa773c0aca63002743bae730dbdc1c9a0f7fe88d76abe2d552245efb44a2a0feeac8db4e1273f01f8f32e080b6e344b40a1d6155092e8348d7adde27d9cced1464e1b048671c44a73864b67e002c7ff03fc8f5b554aee5ee36620bd8acbe23ae72940e47846d15d3ad66af6a487a11b23e85dcc06e25a7f17fcbff53a32654fd2c26c80c43d5cebb39a30d2cbe24c6b3264e8ee608184d8202d3c4a3eb647d266ebaf5be6db99c0331d8059ce217bba621f75b28eb01a1d86aa4d3512746533a566aef362a2b1ebe258dc08a0b1956ef2ad0b6accdda56a4c893156c33992fa8b8df23e5f229714a1fb272e7c7a4725f0b5bb0e167698c95d1d48af94501207e254dca5bfb1c3a6a1dcf6d00f468eb542e1e6804c18214bce90a71b9a3521e9e1b9d4c182fa0b99f2381b8671cb5bdd32ecc033b0014ab0b6a6a410a0f4fec4fbb9d79c01074e301ffd8985164fe6bbf284ef86f241ded5452ecdf332a46734cd8a08ee6be248afd76fa156fbbe4abc525f826b243f78072c9e57ddfb22c96408fc58f1de4a15c85151d32a2d38b392600eb40f8354bae1b9ebb5a2a28cc635306fed58e8294a37b8ca2089c26a4f8c4183a88b5385e299d2b63f383b257dcf776e86eeb96a96c90a7dc5e2c8e9f70df11b28cd38f330670bd503a68a167e3c20ce5f050559fe31f9d91a798c3fcc55d09044356afd7382f8e6bd5ab5383a29471cef421e5a70017a3cab1506e7eaf140e9dda7e71583bf6819254057939abbc53f4d458909fbd62210178a824eb14fc1f2abce2349f6373aa433d45ba6a7ffecb3575298d164745795bfafc3f214bde291ba3d1d21bca3c049605d9b1675109c8e1c3676c28f48722f86d9a3f108a863e875fe55174f6964b3d39e250638d46200257d00eff3e69415aacaf0e2fa47f07867d5e9b711287b9f5349a004aa303412a2365e513ae07c977018ec3ebc5de3a448ca3183311d47706820a39a67d42d9eb776c255cef295597e2a7926cd3fa343051a54cb8ea53abd422c64801615353f1568bc4649debaf9321b478f1d02a00eb87a9449b8afd11fc3b6c0aca607045f74149aad0826f884ba4c74ea8e031372d774e45a7f5905c2423d05557b5a3d986a65e4fffb308ea78abcfa235f6463b0bf724a18f1314e110744e5df77fb559b5ccc35a1dcf3bd872f626a7f9643108e5a6216da7e2a6494e3ffca91d66e4c7b610c24e967db4522cefa83416134a03e24021d109a0cde41c833990f31bc9b11a5ec2a8e7d361599a7370fe5a2671102c910cb82d23f80a4a7fdae24e929dd5d9396b2fd86b576292dfbd4cfe7eaf1215c3c3bf1b74f0dcd7584a0acaf393c38f83dfe039c6f0d23e661568e97e0e22dd74dc4224ee52b961ac5691c79d6b0beecb9b7a36db424f6387a74b65469938ad436a36247e69cbc5ad001da01b225d88b955928c127183744e7753b6434211bf9f4ceedd0e59ef446e08f76e88da3d7b98f4d30414177742e077503f5e1621ede79ffb22b9f4217df2fe19178b2f49156145c9441094b44b844f613a759a0cdc408557bee50b3a6f98f3749bd386d25c5f92a1732d4242c14ec95b9a396b102fe3b5a4fc1975f9a841187db64ec10bafa15b502d1a9761a49773145512a12df0d8defe10ba79e7ef742c4f4e11510b5f8cc5896271cff72c0c1a6db5d3d2236fc713d75b6593dec67a2582f3c9a9689dd0727f8d747cbf5303f5300cc9f4306ee9e83f15a99b30b645f00f7e0d863dc352d82bdea59f67f959f64c2365d605c40eb7b408e2229773c5528e2fc4641db66671d3663a5b74fad67ef25f733f2ed0431f7f66805d77274bf69e56395613124462ec6690363136fdaaa0aa451b19b490546295c2cb17c1d8d4b1ee69d84f0b08b5961c89f4d8efd978c92d1e24213ae0be7216ee019af94bcdc613699ffd7c0abac22f59f3d16104e3c17c592e05e8d762a9c47f8f21a23032d290bc91e8100d109efdc385606f3d2c466a58a907be9f6db99ce45c140c7678b0a44b4ce79cf472b0f6813567c10fca580bddb20c5fd4506adf2ba9c6a4c71f09cfd10d227e214399c6162ae51ed3639a00035629db50949400143994870b558898d7bb1745cef12fc75bd3841d1085da5447913c821a6ad777fa54d6971108574bafa17d9c250ead823a4746370155ca73e61504b7daeff791dcf5fa1fb5b2addfe4510935fd7599b7aab01d380f60a0ec91c63f7f9d61711fb18eac56552208b59fffc649a7f9e4204d755ccaff0f894aec133e4cba961c9211138226fd7c93004728721783aaca6580a6c0846ec41c1ac47406a8a8b54b2660833579624645644478c87aa761bbfbe5a516aa75fdc6c9d12c0b651bf543f520f513717a04eb48ee130d9d4a3137d2bc4f70d84972347688bb3279e70f58e077dc4ba407310cdb63be07de6e4d43a10b09c99760d5b187779318d6ca0a6cb4fabe8968419bb361d70114e3b2cd9d5f1f2da9dc00c17e068103347644c18c97953080b824acd82fa90c239098808dcb574094ad0df8a14a41c40a619d8848c0a55b68996bac446bf257b196bc054d81cf2d26933947545680d43e547f1295ce423179c20d1e04e01a42e95e1c83ff3334f8ef968cdf052c0bb5000f8643bf77535dbe2b9585cfb848e54d3189b510da17440f0b051f6d4692270a9c25448849e95248020cd41f7ec8313732e721b8405c4e46e9ee84022dfb8a00181bfa09fa4952e8f8f83840227fa05f81675caf068d595ec1b0c2958b1ae91466c908f71df9c9b77dfa41788d474aeb94c3a64f45356ea5c0380477ca3ec0276343d0137293284e640de9b469be2cfc5d45e6cfc59b83b9b3fad029c381d43bbe0a2322c12aca4d2bc0207e84d591bdda848c81674f01e0683dd5a314ffe33a17f4369fa8a2a39a72ae3e826997f1dbd3edbf94cf53892ddb6f7e154194d30afca50adb5a3fda98c7227147cf54ce2def6202e6eeed2ed9619d9a694d48723d9a9e0a3790d384f2ad850557608552bfa36ea391bb0d6b4374e2ec40e8692e09006da3e486eb6b40df6be8da8c1891b47ddaa67156c5c0147da1fab78fc3781c57792a2ba8e4fd61256af8bf20243be59b32936477031a54c47fdf8787c1e904c707be1caaf996a1f4fae6d5a7e25ceeb345325a34a17f8a45ae7009451d3107c7d83c09b4175c17c4a02a3ceff7bc6457ef1a1d31a6ea48ddd3a7be2fb6f70e4cf62c40c7d0708bd2ac9064ef4b44b3f9286d1b0da0a7b5a74cfcd03069f13929a7549921209f5b1fc9136547793a15b8cecf0d38db8f6d20bcab70976eca3b40ba8d7cd3c5c690472a623434dcc927dcec6413fa1a4faa2b09e0c92c473424a159acd01cae39180df999d90c987659824e8fb44ef66e4bada4cfc31ef4be0e5982d4c141ae5a8efdecc37585ab4eb3d62dce17abd132b5d3a882147ff66d2a9e83c6421e44f11ca65826e3f71042aece25ce5d7168d2debbb1cb004077c7257801877950d7131da1d9fe1e66dc15d9a444f26602da8b0ecc375513acac6d369f1b7b4bcd61cee330df6c53f5dc299e0fda9f84db83c0555b8bb031835fb90db8cd9ca5abe93853dc250fb49068a08eec23d315cb72fb7429a019aaf07c032f344f3592e1f4034927481ff410688955d6e68b25deb12f25dda1d01064dd743e806a48f25979595589db69fd5049cc3560cdf184e5575cc362aa41601042af37672c01bdaf8106342755e3073328bd521e17f9e5f028cb6457df5e77aba16312e6afdf3e09ed32cdedd7e82d54efeb3d49648f0be049fb235b1bea5948dcf00046f27331657a3451ad97487813052f9e8a85af92bff664f925a6dde8e943fc21ec76fd7e54b5961ae51a55569d00e341870f4500e7e8346b24311001068bb50d2aa4b0c6b833d6737d1f5ed1722c13afeda17524e1d63393a4c066f79acb3c28959d86c59298be328661f756db65bcb55902e3b620a1c5d75e3cde66298f983779e0dde1798d8cf4667f6d97400e6eb5dbec99866795aac57c5362c5b91f931a58483ee53338283bb96e2b1854548056025fa88087e4a6342d16d80b2395ef0086e8820cc59726f9549f57fb75d233d06865584bf49b4e1be8fe453299a79e28621c404ff8ce00b044b1438ba15c2d05ba70d03dbc91a36289e228bc4fe2b11b289e688f6281aad8571d9f482fe5ffc9eb359d9a92e3a1bfbbc19e5c6374cf35045503304f91a86421409e696d269797eaf0ea5a58b7e8ecfce49754d6653138998b528da6531120a56221fc1eb4066e81e8fd854916c8b8a3ba0a04229ef42ea78b8046b940471e953bbf7aa4d04522df90dd36051f14192ac0102d8f7b4e27c48a10a1575fb58dc1f901445f29e40d404967ca30bb470533eeb0e9564ffb049a87ca5d35e68725aa73ed01e265dfd9bcc18c0b87c94a6f2913b09a5387932d9ff839ec72f49023086c6625beef924858bab27d054537c19d2589d56b400b2c3638f0c127c988cdd08c70d034a6df03079ede4b0c6e096c7880f382350ae4193e652c76db39b3f8c2ea4d4625ae1973a93b573ab93da428fb219a81f668af3759d6e37f79d36a8906533b75779b531e8e50bb7acd3047d9d8b7d9f415a8b43d859f710136a545279a6dc0181c93acbfd9ae36ad06d77de5965c43f308b2252a547f7467cbdd6502c032a9749408de840798315f84f98e62545741b8f3d0f01afc86e41795095ff34cfe53dc2550b7c732fad3e6abd0c01015cf54509832ab00881644b01bfd60e3a554f034e5284c6bf7bd580b3c92a2f9255d8b304de8dd219e0003c76f2398c9578c363848c6773a1d14ecdc9c9c8cf58cc1076522400922a7aa760c576c9a5662430caa1cf5e653fa0b430a3c9ad086cc1aadf6ecee3238697fd5838eab91a986682a3311724232609d7f7ffcb86a73b9b4fea19b4f0334c475d07b7a9820bf67614d10e1c899b16e8cff3e7d81c9cc8f3982fb07a8971e357f0d2b4ede2fdc4b533c57547efbb9fe076ed3320fa3fc3f34b14eb09e7d384963452c36fdd4dca34d9d2f6e499f41d3493f830df1f0a7b47606f7b83e5026ada0ee68d3af0b40a112646c19473c2cacd38c4787c5d71d25585f7d573aee1f67470421bcab4c6c66c4fa28196a44146f9ab19546952477cb2b0429dd803620c1a82476dfa92db4a65307109e5b774cbd428fd2dcc9c4c645bc27d23d9f79072ddbbe21c38d30b520ad8a85ed8715d09fb6945c7cdf63c0d5abd5f451ddbe08778e7cf185b9c28a556da358ac7a7571f9889bae44fddebd3236a506d3b51d2d7ed4533751921eaa4db2a92626143c135a183edb8b81b761dcb570bb8b95693c3c0e73c80b7d21ee91093b9b2190bb33c58f9431e59d4493682fb6264bffaf1258eff3d21dd3dec0d13e4f809b3e1d338f42145aec01428676ef3e69e7ab223bc1a6c06a3f2928bda1f024f195c5305f46e070368722b4a6e15db0a28085423dec058a47a8d1631629ca8f3852d98586fa943337001548f3797e49f1e11be60d2156f06c869d037854db57db8d2b15d538a3d1eddca4e58fe43b6350e9f4ac13d803762a136cf735f544af431e81b610a3e1b978eb0ae65130741d0668643d1bb682ca314e2c125e376a9e85e1cb99ec10759773d6030a41fc3f001c6a0ef2286916752fe8c7cc4d1c25a3808092f683e74e6d9c0eb1d22df60e5cb7e2fb5f33e57cc02a2eda89ca8c0d74bc23c07cfc8a0591eee51c5509a7a693e4153c931d7b80be59251acbdcfb42fd5524bf2742544fce04810f29069e670489a226061855d06345ca56e855a57833079aaab99bb5661b7f0a243df099abffd71ffef929f9971a006f6204efd13dad96f826a9e45b5e2dc3ae8e6c5bd3ccbf739de40d06ae684667f2476e0bfd6ef1d55c2ff50af3a61091928548a2d94e4a4315b0772f2e894b51f950b56df65fc35e8941df32b069e11e8b75163a6dcd50f10dcbef061d2e4765bf1af93ba768688e57ecb0da6ef30e71c76a52e72943bb86fc8e143fb357832f158e71d6f95c3072c3b6d6e23011756866ca2e23885950b62ae0a41f546b5bcbf8f9e7885a26f851c26f2303ffeb717be30951728140330252610500d2ce4b4233c83c831b64534ce69ae8b2eb7ca37865ebdf1c71f132fd98a0a915325539afd7627c7c34bfc2dc35b6d3f41837a2d80158a3081c7cdbb4c86de40c0d8881aa4ffa3f9a2581477a8354c9ec7bb022af49ae3b3d89741f1ffa0a84250fcda04a1e7dee1487882a447f2582dffa02082a6db24a8a9e4862abdcf1c410e239789a885cbc425cf278f572fc6521d5834d02466e6a769a2b3ac49e75f23ed7fb72a4d45ffe767d37d0799ac2f9e46a38794c921e94a46f03e780f52884260ac7492a685600f5c9a348954309703d596f734a23f99d5ebf42a1241083d00f6377324943c640e25c00fd4e8758c0393415476b5a63e41b46bedc77afdd7430f2f1a858c60a847ea36902e5c12a78249cd9dfe1b7da44e603f375993ac6ca34e5c6dcfc06dbedc0022031e83fe0a0805efe77f67d3b6aaff5e7a3b82f2d3f230fbd1f979ec6ece8ba2251a1e9f56a5c20828921dad15f424c46de0a7296f02b54cb578e006c88b3a81c3c498c8f276906fadb1958e93b17e644b2583b5641256bcec85825160edef7bf509f060f065979eee18aeb89d4895e1f1d5fb373723339b0c7c6b8857dcfcd9d910e3b80889807dc53f118d5d0409400eec0920a8f0677d7eec8d9c34d840a14e1edf19d891fd12a84a344562db53c107cc8f9c9e631c2b8a1bc794ef80b70851a6fd3d1c904ee844e6de8f3115ef0f4184808cb87264d8f6bd1a0ab4e5a4fa7eba61dca054697e349850f7a5d20690e00057a40f3102de1b87ef5454efd9160e405b87185c3fab711a262b299cf5b99cb7306bea22e2e1ad8d2b0fc753ffbf50cf7487e1d0f6c8e7b467af8cc5f89744ee849e74029c7d01d4aee1023eb7656c54b64efd6fcabb765a09f2e1a735c01dd80c9745039be8084833d429722665f1f72851c8537707d56c01ac55d69ecdf9795474dac07ee8ab2eda221d11ce0461d08fe0791c98dcbff259bade467515084b53ebaf62ec32694529a4efddaa54491fccb8ad5d1c302d08765cc81ff453c088220d1f931beb6d87b6f34e077d1bfbc5edf2e4415159e8e9e9bc09c6bdf482ecebb708a144fae2bab6101673c65a27a11ed4842bf287b046c4d373c3a714f03ccb678282d2252a632dc5e7e3a954acbef93e8399fc4b5f273b688e6f542de3a4bd10e643f7f51fee5630149f028fbce43c195223a3eb1dbf146d62f048255f4c8bf9b413b015071d5f8d856cad3bde27619ed6d5140452cb6336b2fdb7e1c6c9dfeb12c09d1f02b985b0e6c2b8797a97e58ad51ed93b803eeb67340dc47c2e0569801fb0a88ce4d3b640fc50e4dd063711603665af6d795b68a4e31a78e7a1777ecc5e03e1198873082eb207264c60da2424ccbf25ca49e57cfea8f9289bab99c13e5791496d5ae9975c50be4ee08b811e04cde24fdfc35d49688aace09a4ce06d19e06296be249e83bac0bfef94534304a664a198d631f0625522ff831ac956785c24f0938e850524b4aae98af3dc696c42b19fad61eafebc2ea54d1f7e46ce06f181733b022bc418f09b62fb1b4076dc11db8fd5cb335986162e1d171efd78f473d4f0eadc53883a5caef7946198cbb21c8fb7b5621eb80ee073f60769248b41b48e80aa04d19b2ce27e0115e94bb25b0b35785ee9b2cf06cf1f6343fd4f44204077f0eaf2e3665e9abbc08177bf1637dcf9ae0cd0c5f392a6865454d5e950b140ff40a75079ddc698990c5e6ddd8456677af3b579684619c049b56b43b4ece6ac7fe049d1ce4b98e22579e6332224f50fdf3d655d7221488fdcb7d712b7803d018b017f6e4b228f18cb9693ba6e104c3ed3dc62c661245d46a219d7b92d1e4f7a409387abd79b3261ed7cafb791f948348d97dc7007c436b21cb2f9955d32e2fa02128e0b7f40e71f0e72078f9fc3b8eedac33d40f84c0017f0b001395112936468d30bb3c2bb2605651c42699767aa4254ae5b1bbf2c65b4d5fece030103605a97a22d13d6eea7ba0ac2e95821d632aa13759edce60079d932890c5f5e243c218dd230f5b783d2c52cc6103ccb3fce474a8505dfb661b5e9b33271548cfe0474bce3a3de3fe93a7650d9a016c9db48dbf8483cf83a64ec5913bd3c36007ef8b419c060cd7aa8a6e63d73ec8f6c0f41f8aca56ff7eafbf486a60c9c8ab44543f871f105807ca23d79f2f8ec040167f9a74a8f588eb0507c31e175c48e493b07d9c300a528c9f05af3f3741bc6e70e8cae7d1c5a41a3ff93534ce208f8456ebcbf7771f1a6f60c4a6c71f240294c9238f8b883de07e08ab02e994436e4b497f37598e2a760e4b0db347fad73b25263ca457c021903d767487e95d768df3988fa16a34352a05d5f89f250781a71c5ddf9b3fc79b5c7af1955cc62a41fcf083754382ff1eecadcaaefefc3dc225629653bdb5c0a3578247de06fa82766ebd8797aae8352e8f6e75cb0d006fbacbad137a67f87f07d4ce0e648160cd005ee1924ba552b403f0d85b899b04ba9d1669b0818813ca5afe91e40bffffafaa504a18247a028a3381ae4bf705c6c8383c2bdcd81986b3c8aafde709fd288b51e5775787fc04e62ba81171f87cf1f5263487d5fb890d9302eb57b2d4e498312099f3e6d3edadb433b45c3d5469501ffb5541723c8b1c1a4852f0c88d7782d64379788402d1fda508966e51c5e77cb6524c462d4dd962836d0adbc83b596b0c74d8b89593c77c8e38dfcda869fed58b5d6f6f0258ea68d9992df801f7955427c9dd00b52ad0764c1b1b1dcbabfe6c6f4a0ac51f84963a5d27fb3cae05e9ee81cc9550cdbafdeb7500b33bf805c646695ef0c7f1c3fb09747ecd43bb6d5a273e93c63acf52fa07463a215dccb1b86bd37867ca5c0c9478139447d3fd6b85b488cd9d731e0997f8ba2b92af32ed4d25b80bf3fa2127532083894fe3c191b115d666f03159876417862ae18e720f2218d0776299551acf4c2aa508ee461f1332a88add7f5c2888d4ad0e73843087172e0be2de87cc5be4e3470fac63cbd638f1cd6f06653ef4e81f333f2225dc7df09ebb29b704c8717997bcec216924b1a843cc4cee9f9ad5f62282260aab893fa359b6066569bed7ad564bd9bdcee6d3cdd20c4e41f3bd406228fa3a17c538f5bc1c224ff3f8c5a1b8aebf044c15aa960ddd5b3898ec428f2175ed0f1680d6aa6758dad854c1793d2c28c01a9bf2644cef8227ef395d195875407f1d0dc63b691fee4b52acba15b59c64cea67da145e5395471ffb7d94bc0c6547d2bfdef1f630d6f7bc9c4f6916116315fce97cf7ff18eb7b89cb62978c96476a12abad0f52093453abf98948ba6b64e20a2bfe1ef478c0bd528717cf64f008498024abf3350fd9862b000ad24e84b33da071cecbc1c8ea1c2a8eaeb75382ac3ba32062cbe670d04ce6d5376a7f933dbd6cb84c21d5071366404dc3b0f5f61315e2a33fed1b820a39510d81368d7c5f554a913e819771dc722810a9e473238120b33385edb16367c6c1c6cbaf7e471fb210dbbf328cf79288746f27078c12ffb0d39637b19ea743eaa20acdd3fe1809c9e6e9b81ba8c236c0db2ff41115aaef36324954ec6adc12c4e8aa37d780b1cc1b84baed36d3feed843812857c8200d668a0de20a7eb77ff4052b4551b560ba3c9b30277c30a0d2a99fdfac65d777cb8350058c1d6fd7c257fe3f0dfb908c6096855e87041c8867a86af801eeed2fd93caf0270180b8b97dd128638c26c3576d0f017b23ef58ccee30b57326c86e9ded7c43305eed2be4e7813222ecff9c73b19e5cbc1102aae1510c819124dc289448e6d25ddd3b40324fc4870d4628899b745f8a60f95604dd00ff313809265f5c13d460875b02fb7a688f88c4cb3e71b3390d85b65bf5e7d5f44154f37dd23e16e864d1627024161bf023b44c04636ca0788761b2da99983a9430a8f1665c5485132df1d5d034b798931cbb6a0755c9f3a9e4ff14fa8a14143e9c010da4e29a1d419183e9bd14ca518ccc71b07346769feb925eb8618600a0e9573888084d1dd6008d02ea4082d1d975ac3612f08e80ffdd3d8babdb29487e294fef5f7810e76387ea113471ccf950a64e51835e36017a6cd779f7066c8a079d4926cfc7688464482d63cdfb237bcb7f6440285cc338dcfea765869fe57ff307fe2e68adde0955b98bb228848ca73266d0ed1aced0725cd59e8e98c52788919e9f9eddbb485c19379a411839d855e688a5a486bbc9c544c79e7e3b02936480805c915b04a67a96826a313307db6c667442bf09cec622c7e40b7af3d618a2c721ea45d75e17457bd515c0f38c4c0ce6d03f0667cb891429c54279e5c871ce4393cd465b1e505858dc39f37a6a61066c0e6dbb3aa8aacff60545bf0453f3d3566b555af92f857fa3446570f1115c2fa5c0b625c4d074bf89892964f29dcc1c07772e178625e6a563a4d9b0c63dc8db7d9fd42ef2f845006701d23669fb62fb7d407628fdc3dfec1f381ea179922df60a86d34c935b896d836634ee2948def936ba3f70928760989c4e487375d3d80cbad351adb6b4abf39b828fd7ecd92a3d796aeabd8f31be7942150fe0294035251f897d27e6bbf132c2a7c79e0a8a5e9b0c4876209c7f6e83f29f03a399866d23764251d709cf104665c1b61131f4c3f9a119abcb22b2a1f435bf6ad1344c1d4898780fdb24495a768061d148403610db9979be5e30c81c57227f5c61d4e4960e9b26eafe524bcabeadeed6a91a3b7548c33274f07a1724063424de4336079ca03976890154d62b6d4994adf8df94d6ecc2915a7ccef57873928bf4807bce12314fbac16c99f514181de675fabea69dd26dae0da7617857529fff834394ac3894d47efc7493ce9bf5fc14ebfdd0fe71e38b5465a40e0beebfe63819d2a66abbffeb28270031850b10164f540333df2690a727d697f3d3cd0ecf6bc7b3a0de25d918e4ac8503dc1b188501681704bb2ed6ff0d69fd0b7afa27ca14cd51ff2c96ca5ce64d46143883314ac4e5f08e29003f6f37783b08acf5afcb638bf3598ce882f98c262f7e61e3c6f56fbfe266c9dba7f1aa371f5a05bd5e410d6e007c0c83b92cc7afc8b75fe44fc1a462c5b43d289952afb6fd517e26e78e76bf132590d8aed9e5c25c79e548ae30adeb1451577408e9cd62c330fe1be3482300724d88070b30f1f1e1fc120d23e013dc2a03cb5d78b70e99bbcb225c6224dc856370b1be36584cbf900cfea7d9bee35c1005409d16fe229463887e06415459acb34566e313a6e75a62205168a7d53d48e09603280ae023940b1818387c7f9b0ed30085dd8197611ba4c4cdc3b5b785b639c3abd92cdc91c83adbc3c938ac4b38a2a3d12b5ec92a32270b9975737747f001c164786c5c6c7d0bd0b685dba04317019fdb28b5f16478847666e547800fff28dc09fe4847f577468498e2e83363f1b1756a67325967fcfb6c05a8bfdc33d96f63be36cef36158a211cce57f00880933bf9731e82ba499a699876808acf421b53a0a3ab89f362fee32ed9f81f1e9c8903d1cbf5531f373efe76b375cfdb1d49ec15b762371651e28b3f750c864ccf720a668fd805384bbb49994824e7c3ab34f0ec85ce43d4078f87a77f0d0c356cec2d209aefceea486b809f96e8ea78ce41c98c160e6777cea5e7f1b0a3e835bac0194800854a249fabe82181dedfdb813c5df343d32754d2e5d975dc12357881dd19b953c03d7ecff51d6cadc787b170cd9bbabc126ce0501ead81cce677f4aa93129efbbe076e91bbbff852b83ab39acddca56c533dba49dd44ce802b32649b1700b3a0c2d4dc62e544a35dbb654ad1fc29c944c29f7638b3add9a7b55fbcf79405c74c7060e5f7cc5848b56cfff217c9cf075cb51fbf8b1a378bb051873b72c82c9ce21bade88cf837d557309760124e5b3760c70502e39d9078cfc200b70032200681a3a87f0a80e0018c379b9d78c8245a5c99a0081774d062b35487fb2d652b78c8b71286e70b8e321d3d65876b8883ef56ec66663adabe832ec09b19662c14c8d1f1a7bd8dc39ddd14b24b662bb3b08b0498fb79c6365a56e73f0cc3015c221b86d7dafb4bdc62a4ee0f04f12492c9f972ed291a06bd1b5a2c82823a1134330580443263d18db52db2b0d9e6140995f8313064ee8484b4730823f345c82f2ebd638bd5fac24d7ccbd80310e65426ebf4d594150ff8334bdf7a47310bc7363804c357a9f923f32f0ec8013c92a3af87872f69dce09974b6bcde6df5e945f81cfc4cfe0c2f96d11e5933ecf48f8f01530c5831e0afc96bdc63f0a33012bd522ce1b334fa346ea6a711cfdd366ad777741421e9c2f81f9b88a2dbcef5d70fce30bb68489a6a6e2e848477f8f88dad972cd63d0e8761776d7dd826d6553cd5401111d86c29953f47d2323716280453d969511f05e8fc04916e1bdb2d8715c0a21accd5f1e24d7538b6f46f2854ba18a607d0b326705a534256cc89c497229c5b03cdb62b7568010f41ae201a5fa5cc10beedaba9e95e2c61fef0f5536577bb3e23e34fa34eb29a23ec90f2e8a093826ac612cd90bc39941e7654cb3dae3ad3173c7f9fce8f4f4111e81162b1406847f6d96854e59c750296246943aae9c5d2bb2697118f138a00c80e87c76c336ecaf5bf7f33efbc507bbd3458e0fd1afdce23276d0a5810067262a4a402833c7d38f9db4f9807b09a801404333fb71432957e333426c940871e6785e744343c5fe6f72248961bb7e0872a59c947ee86a5eb550d1cf3ee2a927b14a1d75e44743325d803a9600436941be71274df0bc9ab5ddc2bf3c9dbb876febec3a744aa756cb95e3972a928e1b412bdd92d0ca0890c7f2738874e55e9f26e752788ca016eed9da58e104a9a173aaf00f7f834abd6aae1541f6c71e81bf1bf2d8ab013eb02f56913d58b46dbe6bdbff4a60808501a0bf52b0374ad207e80d4bb4a87cb33f848742a78cf1f4cb620d881c9255ebccc83912620599837e4507db6b1cdfddd49f2006516387f59d074f08aaff1c80a3ea9baf507f80f3fc59876229a1b5b3132f1379fdb446642e353bc4fe61bd10ef90ac0a809d7b1139d203e4e6bbdd6cdfdd5e6d82d31d0c7dd65f2f583a8063e50c4332225745a804ed196b57ed27b927a0e6eae17abb9020a2bee1635a6bc58fb0617d60d6ebeac0b0583fbf94c9e290689d26ebc6753ae97f29bbb11c6cdbe6f7842d9136d92149e472c1b284bf908f5b4957d2c6b7fe562e997cf894df06ea14058752bdf5eb7596d793743e08e47879f732e28b4f4a685c4762f0ec31ff62c0de1d51d9feaf17a58282282dc6ed95d54efed46b39ba614dfc98a23687dceacd1cf2016866e0a45c9f50b041db4fb252eb81e4939cfa29f111623347823cf0c024f301eacb1b8a3de4ae2bbafd9ea45264d09b27a40b177479092ae2263712d30793103373da7a67be27234f5e22756a3734ba5e16550345858b27fab823e096d06713be9749728a192d6bd18e177db7b26740be5eb88bb4ea98dd57ec4a49cf805c638b3cec2c742167f7b6244fda9f64e61e3294e35003f235ef102c02e0f13609e29c70dec712eea0e6600614d260e672a5a2ab00883c0166b6159bd57d35a91672e400da94911fb3a1b2495f883cce68b6e1d869d001937e2623ac1823017a33d095d03f7a34ceb312c1ac19e31248573b72848730596277c04460da0325216d5308e39e427954eaa2a0b374b5974f3a777f22cc62664cf04752247a812ef5c630bcf99ccecd6c283f30a94f6aaa18af011207dd3eb09c60b13af413c52b23dd137092bd941a8b8d2c6f366e63459faf8b84153cd04156e030cdd8e2b16681136064f54b4a4720cd9ccf00a59255434854e2a1efa3de2a62454d38100ac1339a12e3a2559c079533299b579a0e4968292265b3d0bfb5c9a1005bfb5a25b1c392215375db03db2310d73561d70c83e89abd84f68db987308047918a2468e1ac0fa17b399faa5e9864d37baf534ef8fa3df59706725038ef3098f9d2712d3185e84262b195e0033b2b7d81761e4e5ddd25973d476fe0af20ed179bc601487e39d0d1d51d3820eb138ce1692d23912e1f6bdf33f66db28ef61986a63ac9b7f1cfd49037386bf32fb0718c379239dc6be18d8c1b8155e43064c9ba89456071cf9b4201b13cc3b960c1ddca5fd9edf094d9fc91acaf7bd482effc888f8146098882e773c5312b467c248c21f9983b9dc8ad6e6e6656ddfa29920731bc879b04492b1960dc4613ad9e57b08ef9958ee25f7411f960977059c39ba07f619ab45aaa7cb2f171c2f86ea0e25ce13182491a15c9026f791ccbabf28fe38b82ecbec32c0d818394c81077f1f232895cf2af238669d7b2fb8eeacb845654a85257a1f33c4fcca081bf1214491d0eef47ea77a09d224c7313b8f33944214bd99af68010b01073117045a5d1970d304e2371c8eeb3ee69400c5de11bf4d9fbcb05594c981cde6b72fcf153bf24c9e6983a06d9d7573b6b35ace87cba3195a9d96cadbf8669c68e50ddf4876c13ea91d82acbff12ed7af6f319cb0ddb9eaa9fc1b13db17d7bf4eab3b30be5d5f4113aa5c6d1a621ade11bfd16a06bc9e8acbe58fa4dd379ff4fab53556b569ac81a7490732b55efb167fe454c8fd90b498e8d318b24f3b090567301cb124fd1c61b1d31cd043869ef34dc63c600204d19c6f4ab78ac60fcd7c714a17986b2a1ca1fa09a76a9bdc147daef402019a9c9c9a08a4a69b45b712cb593814e57e656f33926df437045a6f378976cb828b24e7524d9f2e32220850e103e028586fe10dd6d58267ebb11f3104d4423d9ca1e90321794b0d60624393c1dc542a2ab54dd80a249c1afbcfe8ea27a79b6945febc7315b98a9df2036ce37b10b91d13fad3e9c7520b101d6312700b050d14e13e98d9f9b9c7de0c4aa447c2e2c212ebfcd571fd30593b6c00736aa8d111e9f328cab11cd4c5d5d295b68e4f47d429b95ef9f7eefc5a0266ee3cb601498691d6919b4e6ffcaeba14c54b964b294a3b414ae19c986c3827b7f3ee51bc5f07cc916f0f63afd2901f217155c1fcca223c253f9efcedf9e2810029096add5c168096a611258da5048033cdfa57350f3f191139dcd8fc2c00d217dbd2b4abc11b3963f203277e1c4b696e2f19a951025823c71ef5f382267d38ae2bef334179070f6ec3c802d10d24e19623329cf33d2a2ec7a9c684015a4756d76ec8d16401da4609efc5c74195a14da974434f6a8185023af85d459fdaed6a6bcaa6e7ee31f17dbcf8a34418fc8c29b9d53122402919104861c12425927a45915deb8953cb8ff45a862642ac232f4ca1836f897ecdc010c1aff47bec02030e2c8ee0aa859927e809ae03ee7243cafb5bf7e90099b1632ef6ed9f6dde28866dcf7b60285209ac90bee8a0f06bbf7b84f04cea50b2eaeb3b854849738beec980eed5e5ea48991113d49dbf0ba40de83e161d6cf281bcd73566877fa8ad40e7e54fe0107886f115dd9da50079a6e085271471c1f03b26fa31899a1ddd094fd5196548c9eea801e3c90c933eab21f09a7721923a1b7dc0303c43c632f842f474ce709f46f76467b7cb99ab115c82c342f0bd1cbb2fbe6be00246651afc97db4772e9fff419e1c94c1a3967e9e215763fe830f6189883d28d3815d1251e9efc2d4468048a93ffad912bd3430eace1508a6a75343b65afb21f01c0de068a215fde7e861766dae807447e94a63eef392e5e8c17eb6a1ab740ca16c3459826dcb446e9d8660bb26a2b5abc739bb19794d3440f139821a71bede72d7c3d26ca132d503ab8c63d8221e0adbb2023fd978e1ca3f6e024a7f22ab29139fa9709aace2414ef6941099132e9046ced55136d1798ed1338065f6d07ec13178c2e45982e692e4b7eebbd7e774c199ac643e8d16970d752434f4bf1b69deb13c5b866437ca4e495d596050c770913b695e3304d18d0f201e3b7df2528b54d2d2764dfca50c9b33099582736bbd9ae79cd62de39acb35ae1230632a7459e7637e26ba2f0b7420b81ef429d4708b4d50a66ba85ac725b3dd5ac4d3554a914b61a30bad6ee67f8d4af7abea066ff32cfa43cf99dfdee7d2c99b46d22fcff324034e109c53b3146592608d09c2096c416fbf40bc89671e72d37e1d97d92a30ff91a0b970b2da835c8eddb295b1e44906b14b2479e2cfeee4a4cf54bfa8061b8980d27997bf44f5c1756f49c720c0e5ecf804c8f96c9477f7f22b869ccbf00206e1ab74408907873cd7bb080cde02bc615d8045fbd7c1f8999f9d5839db28aa75331a0dd8528a8251b866246a8e14e6ca6bfc19fc3f04624a6d965cfc0068328f11bd9ebf49921e4799f5920acfb74ac8870156ca491538ced49103ed0f02014183425099509a697fbd808bda8f48a6d1186f77097fd6f7343df001656e96c61a6120fe83219f3152ce0a0a05e875510cc385994963b2b2cdf9a4e8b15bc8ba82c137b398932cf2b27cf5dcc367d5f7567bbbe54e54c7994424cc1a968972d46980ef1baefac9b067a3e99358d53393af77e066ef249c663c31cced0ed353ae05a3e3b7f92a86c9eab429a545e6cf58b2701d45513fc97a89cf058c8c9731cf363216708abad7fef08667e4a0ee0577eb107b498f5ecb11e4c0719b71131c3d64e013ba16b452bc64dc82a0ef38982822155ce208a1290ec4799d8ff9f989c88a001949f2c32a6bb0de3383390ce434abb9a76c138a6ef576944173974cca8872216faba330f23b4b58dcd9c191537894645056ee2383b1aa3f2d4dd6337dfa904334cbff1380b4adb08dd8218591a09a2658cd2f0c14d6a0ab40d32a6114101fa05c539d3774930b5076a805c33c7a187233e1485a93a9295881d0ba3bf63f7723010ace20d20b0f37f850592eaf904c08d4e65d39be79f2d0c5d5681bb2b929a2ab5da17c15f139c6376cd829a89d54f4444b138587940d6a253d3c1ed45c27a2b3df49a1cc2bb74a9a2ce268a01a714098ea71c20d6a4ec563303c6920e2d7e0f69e08a7faf3c7e6c169544108fe3a60f447d8bb7a7ff1a87067b2f40f00cb73f55852fbcd9b6db354eb0f13147479eb8f9f2c65f620a9902608af558481f531a35f741aa1db286c0da902d3b6b42ee94766739a36f5a1fba6d4be266710a3f382c6b8ff2e2d04b602f1045173aa2251b07146872081f4c8b7bd160c65c62ca1b5becdcc612cd7d5ed14c0b02fc80565cd154bb0ef4432bf7a6fe56d03d4ff71f8712f2dd84b677d9a900fef6d9f31e7ec6d5ba44b4424a16baf97d819e1e7d3ce49473afcf360483bf5e9b3ef2145ff72baa78632e06a63974d1cc4c64260c17d3fbf1ea22d8694c1e95fa1b5a5c9f290b31fd43ddad94d6b0c878b85e171530e272cf9186a09b676bd1ec6132f4bd09060d22de2503865c4658730fe9c60427a2e2ae2df120ac29615ee6f4e9b5848400f0e8d36521db0681af5f02ae89001419f8b907ad98f328f129e14157100f4eb7e1b85f66a5bddd5397d836454a3c2cb25f91adb29353cdec50b831f53d263e359ec19a0da5f4999595d0e54e0f01102fa49d9a88249905affedcde4af7b045628e940e9b1cef92e234876ad06093357ad5d5f15adbca6b5c72b5f29fa666bdf976709294fd22926e8091bc822ede3da11d36c1d57fdd3235ddbe107e9e69a5c301087e2dbc5dfbc61b63e1ef3f8a1a5c39a689ab357177d4a72ee30d9033b60fc4e6814129b5cf361136e2c717f733ba5d0fe09b0b18fafa0d6aca7ad6998760046c387b1de9a38eb764a1c8068d121435b4fd0c91a2f3aec460cd0ad88ae093490829fd33a08bb58941545ab89114a2c191e2ec85007c8e71c1772643e2d4ce2ed637da78b4a08e4fb7f822b78922378920a1d18c05bc91717cfcfe7a59f3440f0bb99f2f47f8be40399f2b337d0220260f12a316bf149ff1cec82f1f3e6bfa3a27c7e436b0fb7ed60506fdc50c13e582932910e69f5c1b05ca175cef60b1d2ad5a83a4a1192ac654f863f43ab42ea6dddb219e932416d6fd3edc9b8b802fa64068b511620cefc394969ca8c89036bcf3b1ce5489fe7bec85edafed0fbfcf855383f53e6d066ef641e09c49e8f60d386a407062d08d60f40e1211285d1bfb484e7d54dfc82780f20fedfdf7f47a393ca9f2bab733faa49c042302da0cebae623c81e07a285f5a11fe9e31d581372d8960161d1101991d71ec70afb4de3cc6912f69a7bec2a5729c76eb927ed5ca0bca50e7d27c31bee0e79e0af3406d8301a44aa4dfd356c5b7fd74a5670db61028e94c9a43cb910a1d2ae8a13716f563ddc9138c19aebc3a775b16ea3e57ba0535b7e0b8966abf00e3e99357b20b60cf4385db87936a35e8a8187eac759d597e376900e9b1119430647d1c69ff439635573d791b5807cc1e477c5f75b791511b2e951c63e4b16a41c40d304f1dbb6a85d8df7eb4c9861891e1e86a1179a9f9ad243ff7f179a161bc13b7bb2243bcabbd70e0ac5df5d346dd8c49a242ca649acc26fe85e49166f5a7bc5c3593f2cc8971c8ef8545ec14ea50d3e3975caf8f9f2c3517bec3783124fcde7d3dfdf93d635899d008831c39de3abed151600175673f301fc6f3026f59b952e7767b8338400625bd5e9443fd7712a3a178b73f7c87bc058d02c0237b1ebd7b799e6d4645f1da1c93887811190e5767202d00878a947023762ac8ea6236b2466bd0b0e338dfc84b076a74e2645971afc42a59c3edd689366307930f8ddb2b62ec8e6dfccf27edda44ed1031d171deef8f6619c92884252656f623bcc3f2dbfc7f03e38231a5dc1e54e2ca5a099e8ca30950f5dd8d811104e9668b83b5687af42cf046c125ace838aa96f2ce35f68b21168f155864ff09216cae8ac87ea64f4ee9ea4a82fd49239e44d9b8e3e7d49c019da360b98be385106b8824e6965351099d961efeda5f22239288913220071cea7a41755e5a374b193637c6f5a05568308ce1d4bfa7ef4edf5be974cbfee23c26bf459179b0648e22baa5c4de69f72563a663905ba0cf113c3f754cfec6519e8e5ddacd72682d6e3f03252ae8b306922703f81402865552af560e771a7607547800411c28ee6a2620d0438aae933a5d615e441af7befa38e92327edaef3cf4321b3c592f85b24df30d50aa32a26f246ea5ea9ca00ff7a0896331909777e96d41030f3597e88287a2a5e4b4e92f78c42fecb5f4756138af62e3c26659bd9ef06fd847d005e2573b63fa3c0144fe2bc8f9474c080c55393cf9f3cd026c54cbbdfaae8ca61dfd0bf422cbd55dc4c89407d375c9a054718bed8abd48ad3f633382974b76806eaae31c90d2afa2dbbb51244981b9cc2a1a4ff2bd5f10df6026bf931ad660869f8904d990577f9f2b3bf397175e4d0149368910bed31e9f9040c67bacc30fc688e257ddb2a24cc4c747a7c62d6ed11cd8cd8335e067298be508b60bbe32da794b7ae3c672bc31f66fd7a815c249679562e22d4e9732877447fc7661b41727ba94eefda09208fc373b2059e229f57e9c6318a42d20c7c5553e9aa1d6cc6e35491606e4332391d0270961c7ae72669e4b368dd79dc0ac8c4a235738e17964e7e8c9d7743110091922b8f25b0b7fe4c4805564c246b039d772a136a20d4e9929c106f8d18b8275df579587b13d1e9811deee4ed31e3c5781b0c196d2b620ee0d323136c6be91295e61d6d9c93b23b2338720589152c11b3b561e99ab525f509e432d23aae5d05a83ab4b38e322b2d4fab5ba298d3d470e853ac19ed01bd4ed7d75b67507efc3e03b569b5d73379a6761f4b3c3ebb2beeb5cf6051d05dd41e89ba18aab948932047c84242040690e2c78b5130b6e1a597e72d1f5baf006a3b0ba2117241d0f3256b89a6ffdbcfe6f5d5010060b29ce7b7c64cebf08577f798417acd742437a725ad91f9bfb67684aa8d5918f6826de3056ab35a2bc7974f57c41d6008dce5013a4f625b6bf58def212ddee3f10791ad4078cd7db390e73841f321af7a8fd9fd164fa87610bb718d079f31da265df95f6d3e108f39a289ba0c5345999ba4a38c3092159ba957d29198c9639d95f1d1daee8159444c0b83cdb94ba95d72261d022b4ad68005f55b1286dc1718cd50b2d92d1b41911f3eeef52221d050954cafe4338c14292e6eaf574008ec4ab632c1e9cd251b0ea235e4859c82b0db7095636704dbf53d2b3f3a3e2fc2560c2144ffb5a0db8dc5684a360cbd5c6404e12a398301bb5f6506e57dae67c4b7b5a681c4bb6b2e36131c87d66b0d0e96f70b62e5e223079b8234d7c72f46dac22c1e49de790a276a70bb63660647769a6a41b6858c17b2e1423f4ef019a4ee98214856d656f1dc8356de6c956a4428f6feb7afb36a3e6c4c6e9702eb34758f2269cc3d206e1b2145f0f5644483ae899675995e6d113d4f690f05b6c6849b43ad1dbef361cac16cccdfdd72df5177f74644ed1b5f0001eba3c1a69464e056da2cd13a4bb44d0561316463a3b240880c8f4d34b68f57017dd8a42902aa294041d87043502a45de377b2503d67375d6414f66b22ad74a0b3b913b9c521dab6a3c08982738c387f56e9ee45d5e86d8419e36713805a50c243f1bf6206262718ce0ed3a2c47c91fbaeae82d90fc5a61dd05015df826a57535bb4dbc4546137f80b662299afc09d622a8a1729a76b782b27beb3d92cca1fd0afd8459413364642542b706c0787cae642b780225f8469bf8e05f41b52c31b02962cdb176ad5db179c5a2c97c84a8773a25cd26602362e27fa3dbcd75f923e22a379492bd997052948616c853aee5b1c7dd1b1a2a149bc76e6f390c387c3cec0b466998c2a956a9c4d2e02b811f8707f0c42a78b58b99c43cb97922739adcef1472f8b45197b2141bb5384d9c9faf75bccd1d5f7ee296a75fd86fad12b2de40096dc985075a4a1a5f6819189eed1fb68ee339351f98b9a70d987f49303b768d3a37abed40c65f000040ffbf052ebf7987d4cf831fb6177483220776f39ed12225af69f6c198fe8c42021041b7a02d65000f628b31bae80bb42b476cdf12524c0d73fe36ac70a2e168a5bad15827bfdcfb1ea1e0fe25039c0c23d99b90d21645208991b9074cd3bb8e148d057a41446ce191457779cb5ed05f846a4806a4587c0daa8751885bb2f88ba35b11dc3d23ad0394ba398ff074563964c0921cb241633b910a877eabe2a0069b5d0b4dfc877e1ab9c5acca6e7bc20ce5b393436eb6bd2dd55fbf449115eab36c82e8b5176f9ede090e2802f0d3f8b84ff13b03c2cd060313cce205860918bc1f321c799dc5d285de98c0a020a5fa5a1b9cc00b40c8e5249f2fc5754a7cc8e84f4d07bf691d61c94802af32d647d5db69dd5c1971e7cf267457aa08d2d358c4fbd1a1bf37c6c3637d3ba4d20ac1ab30cf4554c980a51403a1bf8df755ddc5b1b55670a750c16a298883b6cc5eabda163bf953fd4e9000236792e34839f22050dac4b772f162d890e5896e6290145f8a8b68b6e4d20d11196b2a84eaa76826d6e357676f6b0958085702107cb551ac9bddd99b3534a2e0068513f332ac1b8b66ddc66f72fd3196b9fd829626ba01f4a1aba05bf5f9c35a0b62536cc0c5eaa9a4ff9ddfe1562462686dea24463878233351437f407bfc8e2060047d762601a0bac4acca219dca1b02039a03213ad972255438f0df290fc129f5daf2ed3ff6fc7f767bf9f1cfb91a5e9ffb9420682ffed3b4ace6c1aec75413d99905292ec6f6ea49960bab9071b8d353f473d3f36f2d3ca8d0bccc96a1a21a98c76572a8469bb7428239bdca14b03753084fac12c47620efa61547b465ae2244f82c8efad4f24af5e5ead5f1c9c0e33b5ac9884ae421be917f9614319b682274d7d15e37ae397aba7e799f745036ce5b6e0ab0feb8b8a327ce1cfa5dbd6438a63634536a3a732451be752dab63c07a865bce3e84d564003b0c1fd473bd0236abaf866cfb92edb94c2a650fe5d0a0923529e4c894d09bea29de3d758e13ef1aaf9f4e13af444f124e848c8ac937441d434cbbacbdfb42feecebea3aadf5b43af152c9737c1793dc6b3eedddd3c7c4716166d53067a3864b8c14e6f89576102d3f800a6ffd18454aeb8879df2cf0cf7a2db7138ae689d79aef373dfaf419d829a8d286ffbc2148d0793dd4390a677cdb73f34345eefe3b263f4fb0721a7fbf143a8eabcc98362901cf5a91a3c6344b0e4faf43cd607976c5c7ee6218f75357267bbeca04f2920c05a0abf15b859d116578dc602b8ae5106da2465b07b60a833d97e8adaca858ab2e53f7475e33269ac6956d3470f2cd8d57359975d277b4071e3c33dac8e6657c57a860bdb735f4b39bf63e9f2c54c8548c250f40703bbc05160547b8b8085992e4a14d0fe98f750f466a9a73d19292683249147c65fb454418631285ea83b986ac285a0d0b96d77d04a720d972c5f337f4555bd56bbdc9472ff5a2c97c15062754daf5d8fc69f31a08a2762ae24abc79d1e2743791516c23058acfb23e06faeaeb0efc56d89c0641a9ae1e97467e297101c7ff4d859073303e9b79620ee228bf94c46accce645762a5c91d77f3b394b3e5d50b5dcd7126792dbacc599677bef1e2a232bc9f8ba67c302f5d19575c176a724d56ab08be652e33f5e32b55c8ee188b0819ed314eb1373bbbbf2455cfea3ec9cf16b348819b7633416f301630bbb642e708922f01170d3d8dde6356297a310f86892aac9b6ff81b7be6868acf49569be5950f1f596031dd0424e589855564fa1b39f31beb9ae52eaa82fe5a8fa2b2b69c0c48ff643c2e7bd23929888f627f66c5ff6e70588a650e8da4bbf0d289ee33b4219808be0bb23fab2df0aaa3da6d6a9b4ebc83731104114656265429a87737cfa9abc8696af058e8f711240e5e3a2e5338b7ba1ec68d10a308b06d73cca4f053b9448c1f79c4fc0f19c9451cc9925ea3917c7265e42a2fe020f5ee6f5df8394ff5ba0d3e0365f196f976cb569179b7f517ccafd8306b0f9289985fa25998f5ef378126fc5c4ee0ba66731b3cb2c474844ce9d7a42683212f08f71ad894a015d1c9518385961f7823a5bfa4c347ba54b5b05812ac08ed277903bd496db660e9dd9d7bafbe275b0e9b0b81af401440dfc3e53a0df8e00d290b59d4f6a215220a44e187b107f032df0bdf45635dacfe3214587d31c3fd6129853ec051d1a2cf7dbeb1e362022e9cdbedc91ae459c9caac9beb41ffe5800a053fabbdc6d6f8d83dbc53094c67107d720fe8fb52d49702e050335f1aea752100dc1631544003af7a48e7af8b21cd9a4cd96150ab8f6dbed94349e54628716404a6d5b54f099bcd4543feecb14e46fbd62b8f840dde07dc077528aab2124538350fa8aa734d72b2b9db77219cf0899374ca4c2ec73a650c635009dd37830e2b3cbe3886d40dfeb032699925ab4a1b2b1c9ad57b1e873360f839370ea0fa9b16123bcbf99b41a52c781a3bf8cacc65859c9ab0a90e8e422a5a0093260e3d1d5134688239d196c922cff099757c68a30fd6d61506f3d9b00a63a9524ff905636e2da8ae0035d2bc2ba9cb723103fefe570ec386f2eb46e01a4a7f8cb1b41d8f5818e6ef8fa68ff3834c10c997212685b02f82fa04f9575d6b61bd2559bd0aa201263b7c1d2b693d8ae917a3a85ef237e135a4d366e7ba081b1e793812056def580e59203e2d0c3cee12ae2d19f3e7afc47995ac83a3270681cefa7f0ea16fc873093816ab10f1909f3558a362410b707cdedc9002af3c247b1a6bc807b9ae4ace3b64ab76ab2db41992ae64782d8436bf47abde0ea71676d00e5a8c1648a1504c143082c51cd89b013e63ae9774f225ab564cdfcf8aa4a71421789826b2b694481edc2a14173439d5e18cd6e94d6dc067e22194552ea40e5fccf9e72d2ca3120a2bf1af6280017aacbc58c64161b5bdbb23c527ff3c3debc87bec583a18a3a917266569dc0a3313d916ae68785643e16d94ff28fcdcda9a4c51af4b5e094627373ea19a0ab8e2309cb452ff21f10c3592248bdbe34c933229e2c6f166801da3ae3c252f5165203c58acc88540a45859a62955030b835ab98175ce86af30569e370081605e5310ed46b55737ccaa6f82b660cfa4e00a1808569e08c90bd9173f53293b62d992020355c2402bf1ff3ead6965ad3651b99acfeac407484ed96d47da314c6736f2009fb3e282e984c50a440be4d328c15d4d02d18986313b14ce2b3d27803f45a0bfd3ac07df188e3d84af07a556b5f9c9f9d75ace8765592f760f9d1bf7074fde0ee278cd6b1cbf52d071fe9f575ebe8a615048b49708bc338744943818d4a668ece8f5c304de497be4f1d6ac9399afc7671d8eed8b86a0f94f82302d310c61fd4503867a060483a4f47af357ae013aff53b50d849221e9d1aa00293bd5586d280da6a404983426dab7634d5e7ceddb5a39a73de1780aa96b0b3d2a05da83ad77ab45170f7d44defd39c58f0e680c9df2bbe742308586d15156a0503100c200c42482615e2115ebe51ebf4897058058efc7bd5311e98857e2af30030fa10ce710c57711be73946a303b326ef23b947976aa4ee51cab42ba589bf63014145835a9db72129f946d99285a882f8744cf59336e3ff7f96ec2879cd39893056fee7ee812d7ae50761e1242712c9dbb4a6fad16cf0809867a6bd443354d77186e55e125b2db68dd544d184ed41bcb471e8ed721a06c8539ee6266427d03923e3d345e9ecd21add880f5bf3aedf8d3225319bda9b5834dc0e694f9d81cef07179ab5889b503ee1299e43a922c4b3244d2a252c9fa4612630e7f3c78217a1f10847202eed479b92daf2a605c27afcdf25685502795c2c2111467c26d8d5bd6e3a6e8fc68d2f9cd7b31df06e7d73dd633b68dc4ce24b320e460d5a8617905d8a2361468292f76fcf60b44775f0d24a0d0051493bf8938781c9a3ce71691ba9323fa8fa3e5b25404218290d0e4d524ec92bf8b7bb66086d581ac1d48882515b79262b4693df60d9676275a2dacb63dbd34b41c88d4f6e0018b6230ee5493c7fc73e334b9327e1eb52ecf10cac5b0fcb46f0727b9e49fe7aff5be20403b5824b5801eebe076d7f95163d1cbc1ef45c9e80d0af26b8472853e132ff53c2d883bb3413efce1a2fe381afcf4b3e0f4c1a37f673ec4eb5cac24dd04a2316c9cc97b9fb2565215618f17c3a8224bbba29e060d90e3eb075acc293117b1b0b5e99cb60382c1c23a412715045d01214b3bfa5f453e45b5f0a18b3e9d9e5c7fd02e90c23dd1507baaa2f09bd73aead30f136ff1ee43f8c5de7781bcf7120db56b26c9971303ef2275751ebf91adb45f3e84907eeda295fd1d07de53770844d274788b0347e2c6bfd177efe6bb0fdc680d9cc8b3a595ff7bce2eb0643af044d3ab79ce9bc2526ccce33646c61631bf3f0a556e5f9ddc3939960bd498506680509e521a71b0d264c52e9f60af201a23930f8a905dcf975f141b74d50882b1e752ce4d3b5fef931a3a463a3274a2890aae18250d2dd9f818ebfe7eea9de401bbde5b4890c0af123b5a9eed9595952a4132a6e359203665d5b1131e2a6fa2ae0249dbe4f9250471f129112e5e7b70ed3a607b23bfcef1f58f5bda120c8487e795794d050a699d628014dc3c2171aa83a2347875224d2176d8277ebf2ad9d576082f93f860fb235125d181c2f5fcae25d0b400b84ef4e0d688278627d3f845a95fc3df78ab0136a0a4bb2a4047c6f7bdac0cb2d234eefa1da269db87c4053a9d497f23aca4ab0830c77dd358baf7f54f0e51f2d97d58d505075a0a2df10d1b7cc329a7e0485ce3a3d0d73641b65215a19a7671fe705943c98ac5ca50058e856b2699e06cde9d63912964c308ef89390cdfb3c3d36e3c1a12423f4095f601329e990c3f8558ca57339dd8f995369364bf26484d1d453b85d10c4ce3a9195515d25a1f75882ca44b0364483aeb390ce3e70e06c2ef91aa4d7dbb385caa50781d3523c9dda1d0c29020ab92e5b5b1d9f520c088050f6975634ee65d430f97f49a0e810ebb2253882312bc3d8858879dc7377d8ff069d59ba60413a21f2108bf1176b76cfb978cdaaa03192e5b9320c4c543c27059dc3c529fb6fd6d7225f9ca335064e83680f54df912e41fd165bd46d5c60b0c9fc49c43dcd7b70f11bedf8706c1823081adc2729452eadfb14a532a9a13f6d746f5a148fa3148556a737ed275f8096e895b7b6f08b23b3cd3f6c59bc1be46ee68ca3ec56531fed5f9257d9beeb7ae62ec1d31d3fbe12948f471df0418d027f980284bb6fcae856e7db829c6ab1faaf835328d2c34a05ed8a70e883af12a3f94fa8267ce3f7c704d2612874f545106b8d77afe94e6a165db30acc68a6d3ef6a280f07dc23fc17e2d3d95734656ac71d8f94819f5ed409813e48b34d94720b53786daf40a4a001d1fdba1b71b88a6e0fb7e5e45e18e20f8a4bd0545fe09321662922d6b7deafe7eee174a227ed83fe79d21dd03b40b71af10648493bcc022b3e432550eabd49a8a8cdf76371bf988710728f223bf8701998559697caff9fdd2bed020128b6c952db990693dba98e3bb0103217579652203cedd935d3ceffaa1f6bb6c78993e4678de9716fe6961661b3154d3af2ddf22e8ff69689748b936a25047d60f79df82efb7c59e7fa274db9d7290cf6f9368d18bca4c04b5063e9bb51f4232276f619d1b8472b8e2a28fb72015442a63f539f1b760b9e018598494b0efe7d1dc128e20495b32bb73964e22662c7cf191e1a90080352e78339dcb70f3640991f17ba8356ca1589c9025f5e5fe7120adfaa747b38e1a2cad4372923c51a926d60983fd7abe7d24e44bd9c0e883d40908a06eaa71d9b3e86f22eb653efe3e8f69452db5e238a4a28f84d94818c76f8725e383fa82fcaeaff3f8a52e2fb41fc4aba43facced722a4bc0b0351eaf2c869da3e95e2c3ea52882871f01df319a2b48f44c235da603b1d49b2d15f67458575e186b891010822b1da2acdc07579dedee6c7e1be819734909814b4727b7f583221a3bc8b90218e70eec4e6c6aac2e2175ff371b9e35bd1c7354be3460ab8f5c6f4481b2d82ddead5ded1de29817495b1bd86c7292c117aeef08fd8fadd79855f1ef1e0eb730688fe6e0f4d62c23052e95d92696dbc079e0d1d807837b2934a6841cb9675b396b6418f49f34e896e6b0d921f769bb0f7e98f5e6c0db282d5ee0b60ef0a447093c83201570c499e59fa6f3ca45901dc54f0ba0b71506ad202d0aeaad7854e705dc4ef37777a7cb68e77e367d163c6312fd0b11447b1ebc4fa63ab282bc38510a48895ec01ead9e616abb2c5ad4d301ffc16081e1dcdc3bddb7e9f03a285e36206802312b3601edfab91962a43d5e171fc289ce8274198b1595a4e4465a301419813e61078b91ef816c559c56971a774bae5a0769d3bdb8330c1431325172ef1252e954b1a3436b5c03078fde9594193379a15f92a7c4e89fb8eded12e3a339367c0eb02fe7f6c24d3f01c7ea8400c062dff27fa590ac5e12b1dc223bf56a5f31b3f9395e91d0a777234476b2bc6a0d09d43ff3d457491d4b1a814d48487ecb354ec83bcec4e28b69112524734d1ddc4a9bdd4e9f3bdcb6feb34af393dae2100133e25e87b48e5df585247b0cc3f57a54178b7a775069f1e1074a123eca633531e4725bcefb0e74e04ce6e16f42e7ca7089041da16a86c11ab254d97f726e711cedddf3b5e32e9a4185aed240cedd23953a824a0ee66fb85b17f218593fc3011c7de86d00b92c9bcf5566c1a450ab0b239b33dc998e12ff18a4c3adb7ea77f6216c89cff1e9f05d24c5ee124814ad07ca2c1d3c5218d6503486486b23097fa8092a03c29e831cc6026f1f72c8f645d1bfd892cef56abc1d2c9262a5f04d835e12c0e09a2dba80a0803c635558008897a7321c316b439829ff1ea13d0cef62f429b561fbb12566c7e3745a05a24477c4c4d8fbe06861656803b8c5f586fdee6019e6828071aab56d453f2eccb33359a590b08a058ea4349cdac45d03fc97de2b121e094c7a97b452aa41230f51431ac480cf81f5d15c7cd07d52b2b54d0c28913eaea861e8a32722fdb3596dbefd84f2cbfd68344df29218417291aa1036d7bd1ff23102ddb7b5a0f54042e7efabb2da06f8774769558b981d5a34bf6dabc0fb0ba9d6a423c2de4156a4a56506d22e8546ed32ba627387a4316d0f295b4dbd0613b6dc5fc3f18f9a8271cf4c88a028a3abc3a451ba91477a2b483e9aaf45314438acc0779340ebdc958adba5efff1047125f97bc5c432c83b1a523574a035e9b33bb5d90c26fc0c110aa23dda6d20f73403f9a14f0434b9e5bcf21c8305ced84275b2da1da1081384626d09fa0f19e279f28bb19321b1032d6c3b182929815b6189d296836c4ba918a1bb9c6a315123f14be2bd81563c9b856343aa043aca343324a060d86a19aadf88ab97781cc404cee87efe1fb7b118f968b1d2acb1411dc3b7b2f8581e9d96577aae2361456be14bd88df111fe164e5692ceb11ca2aa7a61ac1e7bf45ef0f872c524be7c8312cebdf4a3ecf08d96955c9307e3c9d557b1c0de9c30056322f7a30750ade7c2e571a8350ad662462bf2bd8b75ddf210ea51112cba21a12554d508fc94db89dafc9eebb3364ddd9eb0b9219d849f5c982285a08bc298adb009a798d11d546b3ee2a82fd6adccb6d1d3bd5388c34473a5608ce3c7f06fd52f7aa164d3dbca3ab080716c46dc676fd109802b3a012adf08baf1c2d400372f289dd10d4c081e7e372156954e3ad791b4e423ddf1b57032ec1af862a556f6cfb743e2c83876321a274c10eebab2a887b021222476cb4c367a7f05f28deecd280244b4a93d935e29b45f113816c02bf8a639039bdee4fcdedf518360ede8e07a1133775ffb3a85193694d8e0e743e1c91a898a45e9275df54f65f4427a08fb4fb585e7dc1087f86b8d0bfcc92713472f7bcc08167285f86744cb6c21c07c8413dd1ed3714f89932338f5ff446080a8233b9fcd22a72733843eba87d0dae9de2ddc1b6cd9b57ed1044a1b1dc7220ffc503c2f801deb7593b1616a6a71cf268c095b861de87fdbe1330304d3c9595facdcb43b0c904610c74409c6f53145b6ca241ef94a64d0bf7c5b69bb760efe936ffe5056b3c302e4603ff9802c913dc511aa906140cc3084f021ec7970cc93bc07e705f01a00f619cd9ab6a8cb42a693727904c4ed35915e472afb4f6bd20fff3b5c1097e86e847bbf8ff3704ba1491b03c6da79a0b0ba1052024a9b871b15698434b4fac856d537ba46ef36307265f1dc0ddf53f933b0b5fc41b3a84d275fec1584bf0d3ec8ba514662e59842e2b17c9a8031d054ec3d8cf53241a90d8031998a6fbe8abebfc647fc4e4d95b5f151df0505164324ae0fcc8a1f575fe80fc5af0ba93f7209d8194817fdd69b2741a3bcbe06800acf7f9c7ca40c2b76c1b208829dbc2f02b84d4dd3d7c8293f31b1cb965da1ed093ff6b62bc5819e9b75fe6bf66d7e37f95492e5ba8bfab0b826611418ecbfabb1a1f9100064de8ea91ed7eb89de84a25427a9dc1285a2d2f1ac10561578cfce8ac684e445fa8c89077db7789706f94dcd9bde4c235c995897a7f1b92b5ee08602772d9f65fe5be5e994bbe7889e38f6607716d5e23b40f80167a2e7ff22267c3f896aefb631b35c71915016e3c92a68f4d24d17e4a187b03428114cb818c88de1ebfecde645291b0cb6bfa8a0a5cb509592b264714f000fcf90828e09a53c00df4c8b019612a8b7e080b529b14496c5bfffaefa0f7ceb6696cfd3eb4cf5bbe4cb51133ac708d6f438130505a926379c71cac049d36056c14f2d20bd7dfb6ce00c15158e55b05dc51c68532bdb9d3eccd50fcd00b85a6e75e9855302d1fc29476bf9cd577d804b0dea364fc8af2b77c58f3f03a1243080e07ceae2d5587d0d6aa4ecf831f68a2dc2123ae54315c51cff7ad16ce04ad7d236ec1e83ee0fda8cb9be48104202f7552cfeb54d513fa70cc2cced422e5123a2a13653a2e3092606dd84814bf0e4de2afcb260dec37c03139e226afeb8dae402e0610102f9fe1289c6f69b56f9d8f3e2394bc41b3de301132d7141ba468e82162d679fe000a57adf0a9a2f7cdc41cae90f5dbe2dbf3d90b7990d2f9516bbb6d6762397c13e2b8b9964b8151f710dd6d53e30ce0169de848be162f75bcb738e1788d9d712e5a6493e91828e73f4d3bcc5586747e22c86918d66876b8d87e177f9abc2ea91bc87064b667596e315f3c808bbf906225ece2ddc11203d008b0de812140520d1e97f344f8201d43e0faa87496c49a3f034ab66c73bff1daafe1627becdc96bf0921bacb9086a2889f2f35c0e77cacedfb4db4fe1190dc2c41127c023c12814b1f4bf45f3aa918587709516709932ef9bd73774467941a549985d487dc01a7ba3702823f629fe5d552760eeadef5995270e0a3883b6e036768d4e22245c0a5f82d147d532f97016574208c98350148db01e9353cae6a47407d3b35ee08114a5f0997e631e8c5c25513d247fe9b96120ea7e4993c971d8103b6aea707697d780634361247b9961f019a1ac7047cf9a2e532e76cc38bc9f4ca4cda6ba57522bab12736bef83132e57aa6f90b31e3ba65d8bc4bac1486139d14285adc77ec8e96af1ce90e9c392fc59df08c8c253ada7f646be37e16f5fa39f23ace4d1a2cb297e221036ac40ffd6f60502c7227aea37494210f9638c67995737a0d8a2b5f6d71e025404c0f42cc3963fc0cb56700c15cb9927cf8379b7c5879eb7d1037673aaac42516b65af1795b5c6eb6ade2c6e6f8e5a9550614095b456ab27febf439ba782f0c2aa3431f36bc68eeca7c86bca0efd66259a17233973e9621361eaa4f262f3106023742ecf62981313e7372113030b95f125877e742b043eba0c07ef8cd583734e59d0385c28422644d2276b8c69b7e7a9b92f05c56de441278c923e943f9613b7384ef3fa728eceb1c1237e97d418539e452ed4b947c70abd6a67ea14698ee2e80f1f87d96a71f4d891f19dacb2c932e17a8d7c17da2532dfc7befbef9f92411f50c216107c7de232bad825a44f403fa1c7ec26ec69fa776cf872f56f9046a3a9c6f663eb317ee0059c4a9b73f653a330c2644a06a9e4fd9eee3c9f15fc866293bb13931560840d1cbd98b9d58710bbc32baf6d6acc671c909c2fdd8c95d5e2f1ed679ac08284d205648debd058dc599f8e2ea54f221826056ee41e95da2b202bc00a38e0f3217a1b427a31cd14dfabc44c7a3437334ad75785ec923c9eaeb33664d2f742478c10b58957443159d6845c7680ec6204bdc3d084d24041267380128e40624928398f27d35c3bc27bab12ca37f5b9ff96e3e6ad766ad395daeab1049e5cfbefe4cc3c2c363145b9582b59188c17a387555755cdfbb7318191da52cc149c5344adef85d7d044e4cf7ae3cf65a085263b6146fc1a8ff27c4e8005a2197b53074887e6b94e2a835586406015613c6903302a7bc84010a8d399ffc1d392a6b16b9d69f7b6b45774e3b797ec31c6164e88a1609f2ea8fc90df6d248280d7c39a06c794b019119e4230cea76bd7d6bcae3297f88e730b06b304af4997e15bd8e296c170574308ccc230c6f669a188fe7b364cc723f06cb3d99b5914bf7158bba8e2d748f2d366195307b6dff60c911d5273459fd566f23444beb23a2981e90f5a1dc283feea2902893e36c897a37371ecbda7ff44a4277f76a9c3f42c32490d5e6deea160d586e80ca8ac31e9524abc504b4eeb4f5995950db3ff162e90d39af29d63c570bfb81e3340d2f8f2eea48d81425c1a6c04fc00287e2eba82c0a2b4fad5a0c3842719f6cc6b9036f7444224b4877cb8c245e5a3f9b3a4ba11532bc0fdafd9e024636774b3061319915fcaf56c76faeae182fde9bcff5ad63bc17cc7d355d3329c0010c67a4bed6cb68c0735a2634f97bf6c2c5a3384e8df83701644856e67cb1d678446bb480270d254c620dc91a39cf320eb72fedf07b700e2d79975efd3bb7edf05824fad6e6230539d3e32bac6d35a656739ae8141ac2ab0e5760ce277edc0c014c7fd8a0f05805fed2ed69695e41f5c6392fbc39ac82f10c0c646c181a89ef84e61be40d59ef39cc8cc819d460dc40c5f4c7a9e34452fc2eb624349ebf9894df18504cfaa16e3d7ead5b8c73a60531b3bd35c3658950a314e309f6db34989311014b3dd6ab0a543804d73d74d19fa95202bd0d166e4b2d22a76ec6d98dd3402e63fbeb2d939f0201254bf0df9899a8077218f29c4e1924134a80309e7ca27711c8856a28cb6ea5aa44e41c109f76f0250805a23003ddf533a0838fab0c66179ac769255ec3bc2f34255d5cf8c01b06ed5701793cce57513a51d4eeba941933e888653235ac622aaf5f9f14d75a38dee989a79d4659e77f04357a0b540f1a8845feacf1fa945b778e530bdd5e3bbb6f443cbd5b1b66ee2600d4631fa500d3b3f116ea312826f93c68b0eb08c5a4f31cebd1b5f3661f578a26d08cc2b60722f5230339afdef47bd52c0c984382950463893e0d641fb9197f255d0b3cd9e3d935a9d6dd3218e3a10dd8a8d9a319e4c2fb4a39bd5365d9b8bb25ed69828d1e29f17f9d8eaee8da0bb295ca96e4f058c3a85102ecfeaa48545333a569cba5545d9b0bc8414cab1c29ed4289b81e43424bc646902d9fea29471f1d0e23575641c8a4dec6971bcfbf7fa1e0f955a8f718959398d00c8e7b5d2674102e30774cb95054aa53d8775427da1f8755db9a270150ae8aead13d3e6dfc743d606aa6d0e0348a5ad07f3989e2a946a3613180d6dfb730f72206d28cd5b740155f79e1f712029bfff36d67ced603b28c353fc371a0d14db2fcdf779961b69e2c7edadd2cab521cc88e150f223a0fc575520882b6267cff495c089e5b8ccae207aa59f07c09cf20a0968242fdc037af87a7882d2d4c529e2d59c03185a05be33fb6e7f95d630b76a6b982171fcd66d9885fe66cb6c96a96f853d8e926c63925308f7e983f3ecc9af46773bd9247310c3f13a93485a020e2ca381c6c1335e27a3c18c816989d1997889dcc1e668284cdf1647890466b207293693a97f86a406f2a000d5625b8043d255d8de86b915e7e9bf79a70fa2652d79610faf77277dc080946395f702a0935166f1a625fcb545aa4ce6b3683643293d17d49723aac32f01a9e23c922215b85062717f8c47c6acd177942c6581facf9233ee9516f9638fd1f7da65b7b0429bb3f1d1c59bb3a7c487b02e9b5a12d05aaa57cd2412e0bb773177733b8702386022a1665caeb0401a13f4262768e365bb29cb5185af9b58a0f24ca22b797a735d6433953f3c0221b76460913591520266521a22eaf5a0b0ed80a596cedd9b6e8c1ce3dffa46887f896680d8702f0cd3dc0fe89bd7d80ae83db3f4a3b54986a13b9df659be00c38ebfc9f51d7f0bcfee04d64d9d9a4078018e111adebfa874165e94884b99cf421e3bd5e3629167ee8e4a48475f25555d97f1225707fabe355b6acf5db9d70b7430a951b8af8a6679693f9e110ed6e241850392e183a7193e1ddd46df3ca3eaa35a2ae959961fa51bcdd5c95f31ec5a3d382dd028328ba6e1f870aff7e4fa1c7e296fd8a0ed5537ebe085af5b0e712fa4289970306426dbd3dff2c1886ecfabe69fb1e35b6569e275df103b83674e3384ffd1f25a64cf7d3ee47281a2f414a0ce3c411bdbb36c3b3f82dc4e51c8630c6f78f4d377374d8c8ae41524bbbc57ccc58a39d624af77f10756dd9191fff557a7d32960d43c19ce3471eaba4a873db0975366f77242e5fe70fe80a9168b77ede0af4503cf998852dc54dddd06f78f8cde74a8aa017a0018b66b6a60a225962567a09e41afdb4ff100d58dfe9fe1e7185bff6a27645f3e962f9fbbf565a4ac377997d411b767d4463e5ca0aef997f04cbbdceae9141512c4400fde791b1fe105a2f51f72ef72f1c1a86e468bbd26d2087eb6b3834d356ed7aa7cfe9303d655b6f859e5d0b2c6c204a17bd5c50e0046b86800200b7b308bd48b7c698f375db116bb7539f3579ee3e1ee8a54e9545a5458ed78d53cedf3aad1016640731133264ca44cbf102816ac9b4afa1fee9939b4982789fcb180ea2ca4e63d9eb37e6e9bd3ad9fb6636fc7609d7cece1c6370ab156f61e394010b70a047f104cc4416e42617d85c8a335a545f0a0f62ca583e4479854ab73168da4256036cb827680e19296451644b2a643ee0469b3d9352cc39c3c511417af3a9415793abeb6251e00ca434a43eb50d20f715d65a0c2ab426cd133b44caed2c37b48d80a820e32820878d8c02e84e0cc3f57f582179b220c83a868ec291ce49d7846840c8ab219ebdf8807d4251031889b06b491d99376caa494079e792db0ad98026a61f379b7dbf0ebcd404491a03458467a3996e41f77ae51d319e07e82b6719d4b18789f07a0fbc5f853446e83118cccc6c46ac54ef162952d89b54ffbbd7ef39aaacf50d83ffc9ef4213e5db11ccfa15b02fd783c387c8bb87842ce9154d328ea0861599b8cc69661942c5651c91984039cfa994056d128112d26797892df3a1c5bdec369a85e778c9fb76ef2e014e986cfcf7d14b07e83ba7dae3f4d047f24bfae4d03306152a2180563e3a10dce6e51b15bc8fb20fca5db1fd2fb9a1d47163779dd88c23efb63332e05efc34ec7cb52a9a2878329dad0e71e442156c164eb35af4ea1ee88a9bed5540bac702b9bb3fdae63b8e3f39571273a3cc6b3d7dac8ec1e83917428a5c9d66b2899711ee288db832ae310b33852d19bc8ab9352ca2539af7942db974201873741c8b33f749c3cbfa9ff315ddc77eb3a0840f205cc65ea2969ae87269fe980399d7ab18eecb9b14008b928f29c28b9183541f5bba22df5896dc630c647c01e042cba93a04d5f5ebe955bcbfc0ed80bd6a7693cb7e851606dea566742ccfce978c80921356a1a9f3a790b6330453c677e40c550bfe7fd59b9422ad9044e079be9491302d7e119c3864cdfebc601cf8f840509489f76138f809cbd77f3863116f2a5cb2385884659d31d085b8e9b13b4cec2762b3b1e44b7db2101262a4c92a9f2c76da36f6981345964b0dec159c384819e4c0db3d71f9939f11db303e26fccf2945ef26b255d1cf488a98c0658dd3d4dc9443bd9415dba5434b0b3c09a002bee162162ee6d7a92d49ace66e36bafe2a7bf46b7d904ce93e8e54bb988c0a7d63ea1c66346252453d58ff44a56ee612a5ecabf428f59ebd5dcf6a05416155c47fa206e0069f3a18da09df1caeae280a7b235fb81702c04f7874b6e9b810b90f86dbfadc25864ea14a2e1a3ec42830af9f0560d39dfd504f6f36dfd6557513364c02c307323f1059ba2340b2fd583a0cea09b9e8def60252372261ce9aade95d208108e3300d30fb474177285c2e64a0323381ae9e1e2c3640ef899d79bc305abfc9bd6610f8fd618013d7ecdb5267498869f97fa126f7bcea0ea4d05ecc74921cb175bb11b6b77f3a94b7aac6a7459e6b63ab8f7241554c6ddf3824cfb56a0c3bc876193c68ad3a5ed6cf56ac3adc86779a618159408fa6d6d789064f6030eba35b045628684dfb2ff3003ca94a354ebf6d36012f8233981cd19be367f2097760cda1ce3b34aed98f40594c09e2ba2759062527c8f2a65ce214819476aaf4de812e173922ddcfb69a8578ad8cbcf72b0d3d1688dae44d013e98d6d8bc0818167a7f2fb52767c49006f1d77a726f79b2960f5d637cf1e5b953f27b5774c59bde9cb837640865705071b4e4ac31b03d68ee85ea3d1f3fd2b319b61fcb3d39c523904f5dfa1d6d8a1be9148b447c07fec3ff502252ab86bcbe30708e3a4ced02659dbb567719f3a3a1226ac847b4784e8003b6a232763f7cea8eddc55f06e6a9c41ca228030902f1d648dfa0aa27097bd1ead004881a85b3278f6c24d2fd7d8df2c6bdcf5834a50a3a337532f89f505fbe65a96db8bc283565d553570c5350d629d2ea5e8b3a14018d1d927c79d4972dcb463cc9b37587927b7981885a2f6eb28d5a697b5b1e79a9d4a86c5af78db3e0dd681a45cf2944ad5abeefdcad43464de9d54c0f923ef8cc68b306d91bdf701188eb3231c2915c784161f239ee0a010e123da6adb0020b9f72f425fa6a0de5ef2d6c6d99101e1dec3a816191e372059c0b17fb10a40a882fc4481aa3cd585a2627dc26dbff4c4627a93c6ae70d7133d113c81c87601df81ef55e8fab58c47f54a2cb8f334aa90893c549a86a23a04e572464aea4a50bad18567851686eb17895e4fc4f037b57829b2e321e4e6b00a3986b09b0459c33033177dab4733e34552036605cee7e7696cb36ac8ce66d4d3df89dab79be0302cacd730236f569421ee02fd3cac18b18452a72a66b93b596cb325bf5cc7c8d1810343925bb43a538521c99e543fa2db452b6a5fb0ed5c8b3c9b7e847a520aa160e14b6930e9ac024536759c3003d1d320ffa9fb86c5332ba8ee6d6d48bae74384807b7cd356d4c3ec54ab35abb7b33522c3a20954d0b87a0036b4eae6930aa0cb3606fa786939278a7fb271e06ca0d500fd033144729a07271e7ce46a8d63f34e841f992ce417dcb3d2480de5695839456be3db39fd71d6f2df42c302dba801fe79a37984af2a07a5247005907983b73523c047bebd2bc34b891ac3af873d53535fb0cc96f9bcbdfcbcbf882d6699e605f94e6583d8fc4c702bb038b1265ea378d6ccd58d4dfcec77572eac4b87cba8c2b2c0bf9c94935115e7f850b3d003707255170ebb05a07dc05671cf28b2004b10d5046549762dcbb59214812cbf2802dda461f477a478391d02287c4c68f1d8646fb62d093d6555bf3142c7cf2f86d29ed268d3f9e2978d9841fb2bbeca8b3acb2464a7a4fe932145f3a1dea30478633885e21f7f11a5bcd97c919e9f510d93d80718d918e0de89d819aa35bdc63d81bf3485c57ee28f0955f40399ba3264b1cfd706c6338a84f5a9cf11ac8b0c7f11f283ff963636f936fb158cdb6d32afa1e8d6da79433bbfe32cfdd153748ec4d3642a011861e3a31ccf4e98777b2d1898a6eca1ec3fd431229d58647fc548bb727d5e9701087cbd2d3b6571599516955677b730494c402f9dca2a544f68aae9d0f4a585313647c4c5d2cbaaa8ef9fccb8f5fa2871242ca2135762cfddaad4faf2be1949033057d5aaec635c7f5524a88610ca723562a23fca916eb12b491b9502cb3815618dc2838d81cec0d6aed0e49ad686f928af247a739be426a59d48c272cec8b9132aae4a461f7ba193b5accbff2046f80a57d7cec0489204427de4340391a5c6fd4164e18d7be2cd7980217d748332a78a8d325be923caa2b42a868e416077ac250a21e2651d30b4ff64b54e457866a55d5b9004be7d6d1e5af06d1e72f6a4e9f4af7de049f1d52d8aaef30fa7bfb821fb69f020e6ddd30c8ba93ba9d2180bd5001b55e2395a947ca42a4a92bf2224e0a47eaaa6a0cbdcb018b2ffe49075e543532df483a6cdac069d343dfd0e00957f9c0498e8921c87c419c24879118889af5509738e353811bf89abd2216b9f63a61c360cc69fa9c9d483e8ec49f1de5efd763e6033f645cec2d10f1cccf3b52b961e5e6b0123db2c3d1ff98cd30198a94db66c5a5f302cf77c8ce53b9498c1a49ddc88d443c614bb049429f0fb02d55dd9e5a51b6cf7020cc65f58254bec161eef1d28a3a8a532e51ce16c6e64b233aadadb46866a180476a206b1bd1f11057a86993d408e19922e91d3e97e31624ef699050e66657ca4117f467e0ac4ffd4aa953f3808db0d968af01c5c13fad1c3eef00205ae9ce891c6a82e33ce3963c87ab40675d8f8e6b8ab3ffe9b5e96717662bbd2566298ef64b55d16ca387538bbf77559f9ea7dc56dc2bf6e066c0670d6e3b6b092cd11a1d5ef8fe63a5be0129cb4608df1f57efb8966408cbfdb7633f375344d666ec7583ee66e25187f50f3c6a2795dc0db5f562cee6b39b91a499021566bbd4e2617bda5e9f354901a14aeb483b2296172cd29cd7b4ba9e743ab8223b73fad3520d6f202926914dd08af47c44b119f0962b17fb06129c690f7c4024184bc9ecafce7ca958a793b3d8a573de674be66b485461bea340e7d330ddb82e2dc58dc5a337e9e9c9d05bd3be217c299c073d61e0cc0eccd2eacdc8b124982f0a68d3aa0f0aca238a44898f9c683de483595426e87c258f145fa392c8306f1920afb18ae2347196dac109e2cf03a1b5ad2d00433b0f63061760d0017a345a00b499308e9a80d37948e8eaff87ae2198c21fd971134c9db0bfc3a8404fdc5a3b4caa073072e5726767021915cd746bbb1e744aafe0d93b6ed4a7c0225fd72c0babdb3be6cedba9a1b7f39a1f3a4a4949a7d5b46bcb517e572db32774fee7fb1cfdb1dfe69a3dfa6b995e1c52c65c1eade046f353daf69972fdd9504c18f5fb3b50d98a011e405155de01ce17784cd83c64fb0f6de4df53210f1153690ae6df326a84b72b46bca89c510daf696d3714771abea62505bc41f7cf7fc2af63b3fb36f275d264a4dfd0fcff6ee776ae1fe627d41dd05df1685743d8ec2b91ee8dfc1baea23415a828edd7c9deb83d0304649fb0605076e43d515f552655085c22b63b2addd837f5ab6d5e70d753478a8a60b15dd2e8b5baa6786f1c5e679b7a3cc60ab21c655cf01740d5aae313c98055c2ce75f818faab7140f46de7e64206677f23bc67be4953619a707f3e98f5cae7eb17de5fc86e2d50c0f20ac068de0a5bfc0cef3e0c861c81048c339bbdd4484b71060711f889219e526a2920bd0296b0c319397e88c0d5b55e21e5e9cb2c0c05a492729e500b872450269f378961e7992431e356d736d98b77a7181870f6068637dae5bace42e3be7fcaf79ce31dda42c20f55bde41a286f494e0757f27d0769139f595d68cf6bec5a67267fba3e305c722a825d9048d8bab2d6a144078b2d460bb87811d775343e0ebcfd58c1fa82652826ef98d227fe070a4c6251e68fbc8eca3d9bc0d9a5b9b38661eb9609580321760b495199b456cd5cf06ef7a25e1d6b154b3df95ea32ee7da529db634e162ed79060e4865528c3febae2ee45016f7cf2d58f92f3b0b05d3d237c46c388fd96b983b45623fc1d3d0190b9ac59017710b4c746dae1bb0807c05500f8a4d619b855511bfd2daa8a9c56178f6597708360e51921663627b8d94534d0dd2aa018c4b9b3179059496d2f61ef3d5fbb5626dfe50502b3c29d69b55b0b70634d52dd9f6fb25fbfb769ef8699f051243070d2eecac2325a7fff7c90b176866cb8c40595b6d0902da08767f10673ee92c1bd12a4a31d80b0053b0b6e590e4605b994ced7b6915f26e7f98de55a2ceeb1e53a78835dcd2d593e4abe5fd1f633402da4a8ec703228895bc7c888325fe56cc2566116bbf6e780b542e1cb2c8a03bfbfffc16335f229a7bcdc5859757a354ef8e6116abc425f2b3acc6e305040b3be9e49a6a5797277b2117424192f4f9285947a3c9ceafdb285ea0a9eb85cc07fb77e109b54fef20cc3372a7a85ccafbf4778ef1228f9d924fa53e3eb42cc09b98e8f142e2fba30a7ee67e054a2194c214ec9476fad3f4f9920973a8e4cff9e2b0fe2c1a879ef81874cf4d03dc72135db0ab4bfb84c3b87fe34bfd53e41a2290dcb6436d4b6eb5154c0b114c680b695e43b92b4d55b59caf4535217a66ad9cd4a9fed23fecf66b0bb58ce73984c62276849a83744b0ea9800fa239b005a8592c2a3dfc48b49a8f0742f25e751c99dc26937246eb0985bf8b2a7deb321e8e45656198e9bda52be824f81a3bd8f428a41a8ffec38126155eccd849d6d0714cc14a09f853886602181b837fa154b1e942e6432443028b97a5bfaec323339ae329fc78616bbd815efc1fb4c3568ed2448df5fc1d65b63cb63fb803fd728f3ae02c6c54dab7bd7d97820776bd6fe57a9d0e2e4a45467b732fc855d5063a934fd52b85964481f7d628af2f965a0c30bbac1864a7e4ae7366bd895f86bf13cf90886ac7d4715ca7d695861810a535ec79fa46bb09634183020ff3425591aaac291b2d04f56cf6684a8bb72cb47852fb81d11533fc88d005b5a0dee2f55787147685f927d6c37eb81cc57c0ee565a9b18dc82226a5a92eaf1d84a75fee1590615b350ee862cd729be6b01f0330932499af7f08a450579e0a7119175412affbdf73feb4604395be006f71c03f83c1834f70598cc2595f59df07ffaf3720981596ab2a64651c4346a7a8af711b7eaeee7710638cb5aa191b085fd809d83f1c92e74a738961f1f335845b90f5124b537f9bf826dae0aff366db133914b9ae62351e1b1803f104bdfdef723d600cad83c13cd0361299758484c0f90ffb7d6dd78458188e9f1367b7b10002ec5304c3e2873de6fef853fef8f08c3cbd91d88182fda5993b43c220d6e094435b943c7a05bed2d6d3a25a09e0977b3d544f9b763e4909ed8b80f6097e49c08c67ba0ceccbc25ae32094c5403e574bfdb4b77d9e9d1fa5d7f9352a06c5d8c5721281041ff5a3c05d93a18c4bec8cc1e2852ea5ce2de193b054c67e3c297d3a1ca5132695418a2d42c31170f4165c286de3a386c27a8473fa3c3216634fe3062b041a2b1fa26b3d5db3032d5d885b81fd6b474e230842cf2587a879014cebca5ee4a607d836d94b3c4772374f0936643909933c0ab782217ef11e330323cd80c6a269321812596dcc0e39bc9080d715a233d44621e36ab205698c5055887a57226deb3aa0b9ab9e77a4e7747857d51a50f8ff08839a0987f6c44f2313428b93c586ff07f8ad985da4e798ca4bd8d8d8d0f9c3e11059f79e334d5c30955c00a23bd4461d9ce7f2820374fdae58c4d0fb7baef84420a15524b979b78761553ca8bc91e50dedd7c515178bf3435a24d8d095c19662732a0363c06511a69c3b107bc594711f26a0c44795c3ee6c7941887f7b11974bdecc71a526da6031ef1df6250f88621a362a86c67340ab02d07066b37433aa58268efcf8ca1d9211d684548448c40b06ab4bff7050fb673fefeaedd6d4aa43d41ba41e6d896c85fa6b263274ed5f181930f33b46d153adf26378addbbc8abfdb0a480ae308235e605d4a2a189b48ea1fcd51aa898e743b53f3d5e3704412e0758ac77e8d7ded7a5739417563659c5b2303db33ca4b73ec192ad007ecd912a0d489e7142b5608834ca57ef7692045432d78f94276b6c371dc4360f620b47628be5c2e4b93549301232b81cf547128c61d2d44fea303218ac72231c745e34affe5888bf9bc5f476834efeac6bf205c5514cd9f2d0e283d69e9882729c4c7c5be5c293d9d3b067a095e9b54354b49f4a704a302d8fb21030bac652c6f11ec8e78ca0c24f176ad8f75053b99ece1ce332615d5f43c74189044197bc3f6ab5f9cd958389d60efca0c64587a8b5cf25ceb272909ab1a259a3d72f761dbe0ec6e91be1a42816ebadc608cc6791efe10ac7c4426ed0ec0d38c59be18468e454e712eb4ff9d9f334f9613072cd155613e4d0b17138e59855abf7a00606108c620e3f1cd848a5e74450911a8e9481ba76a189287375eb3ff6c51d945a7934dc6b2b36f15487f082317f85ae6798b5afe5f201e4025a9507ceb916b079d6c6ca0eb5ba0ef3448cec6f5c15b54a8651ae4116e90632db5879b1d73cdb63bcd36d58fa578e60490c6dabe6d207436626d2a45d20f631ca092a640f45bf1d607e407da1ed6479f103a641bc66559639537a250b2033f32ff9ad2d32c974a99a86e39b622dac4797f050f5457154b439881097ed7db7039600b2b0049b04f68f5b205ee3672c74abec08a3abe74e797bdc24e085770d520b3dfd44543c3c353306306cf09d7d7e189b3a0d31e9e2a35c4ac6abe548a131e11abd6a5a5e99aefce316415040171b058fbf3279cf3352e6c56994ae6614e129bfc6cfaed79bb8ae3f5cd1153624a47af3ef5eb2f5484526e3cb13c693e822e4de72f7b71353dcf53426f9d86da6943bf50177c5b420f23059d4af3b41af901f3ed665677bbbe1bc93fdc9e553ea69a800c5fe794b5a5d4f324c19914ddff395db8f4e218e1954cd327119ac64f9c24f1af30d0fe5b596f143016ceaa1a87196cf1bdfd90ec2de5debcf28a95cb93d73dd27cfcfb03265dba27ea628f09f80141e669ce17ae0fb10a3423fff33b3d219ce70be80d56a6104bd3963a806abf1b87d983fc0bafabe2cf7871a504a1260e7a1f31b83d652949cfc5a9557ea14d34024641380f9fe6cb8c8cebc1badba5ed4c31f659c864b73951db9cedb8be292eab64ef6f5fc1e1fb48effdd45c87112416299edbb84ade9995f2c1bbc8cc5f197319614bc00fc28cd591cbc74c4fa1073aea382494c490f16228948422112e067c9dff16a5eccb499647b3b2dde4f5c5f2cd26c1830f6e97d5536429675bae117cf22acbf0fe61c163d0210ff648b7a1d99182585e775432f674a687bccc260649857182ec500f9ab4357777a1b23a62767cc226ff5a2a2ad7d347b8da50e70f5a9d4b8add8ca7d9195064684b6f82aea46c444051f83025ff23952f3886b820724c06a8b5604b1e7d5f2a942ee51c23818f060c8190392d79a4dd1efe94770c23ec4b63a5f7341078285cb7c47bd04d22c765ff598262e27e91c7889020ef3b055364b0c51e309f50c9372e65b6c6b6431ae60142127e11b55ad3c533d7cc1bd8b5214dc85c530f3443f251cd5e1e1d30b7793323e4b124dc1d6654808e35166130bc2ba6952b907abffeabd0dcc3947bdda5a6843d672dd1fa9ec580b97d21f63da6a9518a36207735cbe31ec2add29d2896d9f9191825c6356c4df94b8b2050c9ff9d449d91462f27821e5b88cee19c2253bcf675c73443c1fc134c313507175ecd133589d06f76586d59bd405cc880b81c45fda70da134ce7953cec23209256f57f5deeecd915e78a7b57bc2da7aea41759a9712a490d5b28771783b5016cfa9c90cb6192cc2ee3c3eddae3a82870f298233f8fbd553c8edcd28fa4c9b2a52e8a4c8f6c70ce7b5884d3ec6fc2e5770a298c68d5f4985e9cdfc9235aeab3ede126d6a0c5b185ce646963d4079bd866ed5af9cb86566396a7d27aaef9861093fd8be258675518befb3021f04c03a1341f56b88d7d3236382448e49845ef300dbe22da969b343963e9e8b55d8a85f9aaa8e620317265e57d3731f3c24df2e1eb540862dfbba5e082ea49bd7ca8f6d9647ec83e4899f455bd5c953c54c27aa38b3baca27aecb338c7fff6891914e21646c9558faab6648938241580721f66c3d535793ada254d3c7e88da2d0ab70120a15cc63b97d6c035731992652676fce3ea0fd0995b12186195bfd4ca3fd1aaaee0459eda39323628bbb653a774596e131fa98c6caf3f90cc27d377ee320bff08f69650af3ae4b62187fa9964d9b171f02ed9985feb4fedb149a320e312dce86f11e39066b1b29a712d5bed274b36d6524063001b5aa082a0db142f61730f430dba49f6efe11e04abab469e5936bf1770a601087ae0ec811e1121c9e6a13c37eaec8972d34a26e23bf73a7e1a982eb0c3508405b5a7df54dc3e3e708a7f81b009671853efd02567056be4cafe6f0c7b20e0f7ccedabd7823d155011420e30e6ef278ed1028d8778fa6bd7f1ddacf206a24c466f52230ecbe621ce8ca975def60e10d5f7342fae62a9f5f856b129c08bb30294983942fccc733210bc06324d0d5c76dac677cbb737b6be9fa84ca7d3fa0387e9af42ee82d2b47feabbb3a00390a51b66b1312d739aaeb3fe02fb05683331dc6944f0cb1b5a04d7c4c75d647cb6b0f7a4448cca297747a8ab8512a1d1a7a3708d57e14ab3f0269810ee22fe429f21f5571d552d2db7df4cd980b39c87836050ab14c389fbd7c910dd1597c1fd8438eb7f887b0708468e048c63f9b236f4632428437992ab88d6a19630d229fcb1b71972d25fc28c3ebcbf0ba3d25817ca62c1d87c3c3ef90b5292ce71ecb5c2c1f878313705fb6e530bab3dc979b079d0631cef2f69561d00a1100cdeb488d051ca699de4452ac70ee7f502af3566f285d34223e1d8868f486981aa31653c9e6ed51a3e6a6e17710f3f3b73434aa462be73528a6867d927282689454c2db920e810483789271461a4d53ece07f6cbb6cee2d02aff2ad335515f4d55cf859af0efcb7f8943bcdb62ed90f06242a12af276326a4b408efcef21d09b77552f632973fb271854a766bb3effa46ca2b27e2aeaa03f2d738161042d1820263cc856fb8dfad522e28a860f7d9f8b0555887e5946e1a7ec54d1f18034ccae611a2e2a11dccb572a2a046159d2263af427b2f31c25f1cc2e8fedaf5af647b47234059000040ffbf67e4dccd8e8a507baf52941e8df63c1558c3d76690c0db9ba7a7e5d62505564a9d3670cde124f2d8e98baa0451a21b9e6bacd8f8e3c501009f028ae7e68ddbf6543eac780174c0e46797f4617f093c5bfa695a5a5eec8482e6754c0a8ee98c748db9ae6d573d33b0337a6f815a8f10deb20caa4ba8cce1bc8499c2130820c62ba82498b596dbfbe374722dedd7e416292bfdb62cd2baf7af16e7c2686f067264f79feda9b26ee0706561e882d0c52f81a34f97c5820dad1e71877182d37a34a46030727a42d449ead00bc9b1ef8c3b3d1859963f094c4cc9df06eb94e9b192718b0f206200fd5897144d67bd8f5801bcfc674418da18ec359868a9db4900dc6cd0ce54847f3c192bdd0efed9a8922d83e8ed8080f3feb4c86fb2eb09c4765bf0b2adcec2e00be51fcfd31188908d021dcb1b34ddd771bfbdca35f34b31384ccfc6c5682c064b296cb0f130b756ed3cb645c95b051a5e8ee338986b6504b27f8f3b823fdb73178b7ce80cd71367f32dfbe2dba90ea5bd2eb41c681ff12e83d9bb9f31b228e35f8da586740c06f0c3041a4f0176dfaf93626afee80e7de764b4b939b4fcfa551d01380ffeac030d503ed4e7c9daeb07403461437bb9a76e4cac8f0765e7180b97dd2a98e889a609e400470271ac5702aa1da3462ebc1b3a77f10031f65e9150a9bc9ee1b7e05de6831a0fea52787ef3e84feb9bc499b87b53863354ae17c53fb344b025c8f9a300fc0704fdf74e1ad8a66cfa1b7cdf764183c6f832a24c6b9e8c8c73fb384cba498f23a8d64189585c03d7a9c51b83d05f447995ef69a67dd044945cedcbca8c7c3e0c339ab45e1405861cf5b0a5e149075be31af6b304802e149b23a4c376096a15231c9ce82f6300713792aed5cb2694cc3a782f478ce3ee18d7af40cf76ad75cf229229f94f39be8a478e625fed595ad1fdf3958c2c639fb35c949844b77cdf3531a5c6928a5107486096e6d3976f430f1a561c91f8c2b1ca49aac4c4b36f829c1507adaeb7bc4b77cf5ae9f7c2935eae9878598f51f97fa36bbcd5f662c88cd80433725a68664e0fbf847a440f414a756f580b41039914ae46c5c29cec6f0eca1b56b3febd32535665f461bd0fed6fe755c2ba6a099dbef982557e8614368d9817bae80dad38b8ad8bb774adaf929e339c205479695f1c2ddd03d06031f446ea197950f3e1c7282de8a3ff9ae3d7433e9093a97d4cf251c9868f647e2231a2e71c0c038fdd23d83ef6f777226711b75914928fdf6d1a5d237e3b399be230f8b4105d56d055381b0dc332e63c65ad024a912e6518d92802f102ae3f1e0b3788e5171a4dede51bc461a4d7f819f7d5bdd011755cd5d08788728d3a77236436868d0d187a98ef520130a61deec9fbbbe01c502945625ec4eddd1f570fce6c0ad1790d5262eb0de26c40be37fe8f2900c4f81ed5b9d90e49fb7e64320201adedcbb8148ca58cef87c72066d143994f0fb693d978fcadeb98b45f43ebd89241ee4fc12e44cbe6a7086aba1d3287d1c450032ba847433c05c85b2450aa801bf22569711cb93f99075afb663f327f2addedcf49b1572655d435c11be5dd7216abe5a4ae3027736444c2fb7f2da1711062d7e239cc3c28cf0b7e8332e6180b248a07850a00d47e5997d2d17ba0398843f30b55977f93416e8e65feaff2c560b0bb2b84423863fb7878b2eade4a8b1c8619d8f34fe5843bff7d47cd0feb626ee608d3d0e00180b70c1605daeafbce00a9f7925bc813a444459c50183ac38fca0369646bc83d490623eb8dabd2022ebd34b8aed4722dfe2e92342fed8cf4dcedbb43c38bce3b955bd7a013d54c9016aae129ab42de556b2ef217f98f3517be5503d879c63a0b266e0c97cd12b477391a0cad0e48d6e643006da33230cbf389df9382483b1c000e12f840beae62256590e44d80d97d11a664783c99cbdcd9f1943eccfdca6622b85d0b3d4f743dbc38f8c04baeed1f269952ec6d7a2abd6d5ea2688f1f7080136cf7a4c688303df8e72c961dfabe30416bb8aaf6213e1456e312fb76d084223b9105827e45b7ab53c5a1e2b44b1aacf6e770fc99bd07977c6d59a322726ee72a6c87f6d571df1cbf01c46c661d95c462b87b1d3466bfcb006e5aabdad0f0f02621d711ec371d7af54311ab5c383b592f58fea0b7ccee5ef0ead9448d41482d1a0f0e998deacc9eeebdbba756506b0ef78bdbd1217b5a7da9067bd5ab50db1d09d391228309e6c1fa84662a982c0d0b3216ee5aaefa33f0a535606c19543d111e34aa674555e8b67d0a4796f79c0937bc0380385539ccd56056edf8911cd6140edeee9db566b95ec3df1c40bfdfe2c17360604966cb0a3212086e4b8307df1d0a615666523a9354c468a0726d2aea6dcd9d2de8e309107bf7aea11a89620fa61cfa0eed08002e2937b8e12c2daf9bb0cde0a3a2d145ff9138b4456c5f6061871e73adaca47f8dc10c2cbf34dd765b5974787d66dd08fee42a5b3f976104ca72111cef28d0efa2ae0a6b36f7606a8f3b4747c516a7437086a34fec4d9cc93f94168c4332cabd2861467c7647eb6d921fd0d9a6b15a988a2db681ec97080d9d1b33f9e59428d08aa7cda4ac6a2695a26575189f996de279dd2362870443a5d8320b03b0ac920a06344884acac114fac78f5b5f7ae5464f417f06be6c9eba1427e1a1135668bf6dd4002e1de5faba5650ef17fe2b550b5e2439a266aa7a010d5dd0e1d62dba27af189ca29705cda5799884cd6c135dd4c8f453842ec4daeb8e13121ee0971fa6ff70bdb5ab8f3228e6f6788b8ec496e1344ed65c59d7ceeecd64020db308accee7419eb3020852d174a93b369c16ab0ba165cdb58fd0c342036cf2720d2478b1e4db15fa8ae5517556ded4785a4f4240eb6cdbfd50a24a2bc63c5358e5d85d79aa531ce2bde42d6cc17ab250db2ec3638072f0da9ce5d229f09a52fe2d4710006ca82e904405d13ed812e55eaee60d96e3060a5c7f0b894435daa0f377a720ca629181519e7fe60615a48cb6ff1f99485809ab28f64c97a3e2bb020672f2a2e6dc1c565f3fefa4c08104804f6778c03187f44566f680aa73719701f45b402b0a1f97cc5e800f7299afdf63533cea1057b3d589fafe9f752cb275b0806fefd03de8b9a54f2b6f9274c06cf13511d8a09ccf1e46781c60bc3d651b32055b678253a6b6083abb7ca1dbbc430656527b0e327aa0998ec2c7a384445352a5da303a5af6c7eb923580c5ab301fa8fff873f044f857d746ff05285c490a13255bfaf3f556d93dd4385bab44f6fefeb3769ca18c675de66e640bd8541b575328fcf8d911bd43a1cb871790722acf7862b2a2531802a9f411ea56173617f6338519f8c994969df3b9fe5962c96519759bea1903c85f689832b310899ade70d09abf7bc32ba554a19d6a7a134201a14df2734a5eac0b92de5f099f6c6627828381b58f8a1453ae708164ea159a4fa55bf16340c4f402113190b3d9ad87ec5202289cab3ef56142f006956facf69d61fdd44ed8c4a842aec77a314714771fef50d41a6c9e83d17ca6402c10a60a6a95c9126ef9204b7ce5d08b0ee8bf809930317234b97110d25f094467a36a00b5d98438b738c3b7e6a2c1b53c335feebf72030f4d0a22fc810e5d3109c3f499bddd8b31cb14a360b8a794d064f47480201c20d640bb3a4e022312cb29747af40e65ce5de9e57197ea070adb8538df2644cbb038674b49b8cae40d21b1f861aa00c184fae94654c8a186d867c76bf325f65762f34e969824958261a384f5e786b663b87427d5870719cf871f259cb59814c6d380a63822dc2f53558af491f704865830895d0ac67221109401ba484fb542c900352ae391a644bbc006e06edb159ea4e2f01b8307a55081ebe0f1c4efb362c091188dd1a5b637bac0ac775da94304904530173416e7d6292dfe969821dc9278201dbca996ba91588bd8572a741c1395a3469e5c152a487f0e77ba81466563cc6278a9e39c07be6935bfb2b4a281c8c20cbef9d20082c47b94d20b095b2fa76162219ddcf2a5ce824582fdc6d4e179efebc36a9054d376a7956721c3439bca2d83219aad57f445f0a416dd6d762f61946af1ee66614158daf40ee47f64c34d8bb1adf54c69a11030c40877026643851ba9f4949131d54f54ff61bf5cd09676ab43008032d5e0a802cec4ee16314de63fd490426e172d953d8ca24189248392792027da7d742562b887797a0d90eaa30e52e171566f263b18abcf0272435a3e9f817497587477ba879339b0c509b776760901a7227177130a27b0354bdd999eca124bcb7328ee042bd1d709ede9f059b6735a6e4cb0dd024825e9c0cb5e32efcc70b73c1ac4902d91d358f5d4e4b9b8c24989dafc623ecc190aba1afb4f00d0e663895cb715e6dc54651a6cce54892d60818aee8b6eda771f638727064e255e0a632698958cdca6fe672cc43727857b0e892fbde24ceb9bb99f950285633bc516420b03c8cf527b054e9df7a67d66f8b49a4abcb6c457f408fdc69005e65bdd9652b12087ade6f8109e11d9f7168cbe694bf94586b019c621a843dcca6bebe0e9e0fab98c6446787ec3792563e718e0f690798ddcc95809f2acc467ac1b49b227c1e03b990b2408130d6384b8d3f174c868bce301427f6d5452f040a145f59902f389f9d2168207418c1f00f2d7a27fa1b47fbe41a9a0f481c6a388ab253ee22593eafdc9924254eb2955d2b9a5d06b7f572750cf82a07edceab1dd6c757cad1a90d9cba569e9ceb9d38121bc61b3b11d915ccb81e6836769b4c7d1d679ab96cf11e7db01c92a7e1953453f03442751acceda4890b6da46835d780d25dfa51b1fa3a003e7190f14001296df851e41848388a832bcc81bb5ef3801d14258f6c5050080cf4fd1cf3f4b5df2250508c1a154d28bb87cd161ff3600a07b508e241343b34893f00205d8826f32b464829797e7c00e75b6df88d2d892b42148c9390cd3432082dda42035ec2da64bdd7c36c48ee84ba9166e4c0afc6c3c78a8f704dc285049dfd8e4fe1c3e8d5a011c867db45a56df99df1351b6a351df6de94c627cd4f0863190688d031763e729efe2172493421646a01eea4319e62234132e248a2cb3618d68acfc82f77056b8d00a87ea20137e499c0edc6e4858aba0e1f210b6dd513b2a469bd7275177ed031be500ce025f2c03d3e1ca9594481dfe25ce8c8876a38e2186dbddfa3d3d8b38a3ee633597bbae3f0890d322415ca3f28fbfa84a05b26af727d5e219ec3e8c950fca3664c4a37e47d9dde8ed849aa64367c6ea0de60218b6c65b39dcf97e187fb05dcba1bda438fb09a6fe6a6c8ae7f2f6a5a8d4b5c398e5b4da420bd823add8df85dc0920c421122c21171858358e6a3153c2fd0de16fa9ef97786872ec39c0bc4dc6bdea0c93602b1ac2682e6dfba64c936871032293a9c2055bdebab695702aee769f68b444251473f2eb648c8dd78b672c5655e2ada0dda8c9078c7a26e0b006789061b379343d513b32d8c36c58058fca850872fa983a9b46831d99676cf1a7533775e0f29423b8bde3637db1e2db93f18b0bb0cd20041b4ba7306f843225c21371271c04b507d9ab1430234d4ce18ba48399e356b3099620a42d3da7ef3bc1bf8b035281723b9c6f040e6b9194785af0eb9cf19095027ad0ab28655d344dcf1fd2c8a014307cb3d7ab1303d6e7c45a3330a9b32b65f28ddaa573060f886846f772555510b0c49643677d73491e9124bf8c3ea2aaa71260b2dce1030f18e1bce4e2418f9e634efbf7f75621b912f1fd4122bed38f60b8b2e61f27cde30e9d930f0405d0815011c79cfde18ef1916541e035986030c45f84c6e320aa60fa5dd7a278df661188756e6557182d787d960ad40be7926ec869b83d3a0ed36f37a1c59a544fc509e1215f65dabff00355e1a4c5b5c440dff923121ae3f2327d10c1286a29056842af9f3c765899b2158504dc1a80f5720986b17861f3b78a0dcbab75179e5cde13ec07cea6401a557aa2ecaf4c656c031555dfb975f8a14ed0b08e3f9adb151b7ec581ec717c49c351d6a8cca203bea0e3f82f6b0fffebc61e220db6c2945fe376f169076df6b3ddadaa325257b11dc332ec497276a110817a74e0c89f1af51ec5ee36103eebe34a1302d1e35d1418322c67d736d728a055c378ae773cb418bc52106587efa74db56de0a80ef0b1afd0773d8110dd13eafae09b22cb23b7f5df16ac39161dd75af81cfb52e1e1ba2fa0ecf9f8d94fda730396994f37398828790f6fcf47b1e88d5c47a3f28ff44ca8322512eb5ddb0f45e5584d9b05c054c641ba30793a2cdd354e482659e65464a022bf6a7c95b3595eb50f49f96b57e4ef8bb640f42ea0a2c0871760b4a104b5e5a375fb0d47a50983b60a33de4e39e08429677359f59e75238bb4f58d7380899f230d3aa2f436f78b7793dce1b468976f2a1ed68869d2a0fecd8a9dd71de6c67dd0e894ed6c1b4f6a93888e6cf9524d6d48e7f4f5a0e37cf655563495f25c836cd27dbe33de41b46f64bbe997fa44f924ac819d076c2b7488d0b6680bf37b6de5d1d90f12fa8e17ee8243f76ca0ccb2bbf5f0164c5a962bc8eb5a41bc5f0e90ce500aca13c155ccaf8956255267e8997e95f3e81e6db6e82769d9f5c61ab3f62d416ffcf5c3a9e8ba02a4442d601c89ad2483c4b77bebd48eb1d25d1036372f02e31c11728df212fbff1d4a97b72af0b9ec18c4f06d53a096056542999896061073b184dd4a09eed7833f912fd74b5528b6ca9e305a224714d2a89f20c70059f8f20923944c9b556e028702595d084b7ea489face1d5dfde906d028fa9e2922a5a05a61b449cf96583160706dc2afe3369bc9a159e62812c410302ff639497aced2dfa2d2b47e2fcd388b428a53bd46e1bc161e3d3eacb10265122709b657570d201c5a5445e4d43fb586927a86e69d851ed05331f4c8067f857a1dc3e45bd2afb193dee7749f5d1c14d0b28d5d28f79a3428e7116aec68227c97320d5cd0bd1dc3e8a7194b8c6055685f959395b5d6aa61e0069d1f34a64dc00278c7fda7f852d307376796200330bd960c7cb4edcbf1c64ca0507f21539f02c652582857ae22d21e8996ad77c9d98879fd264daa998f7f4a69fb375873299d8fd2cf2ee34c08d3be18bb55dfc4d23d7430f34edd0d38930866662dc5b0e84f70e230742592f2b2444bae94ec6db0e2eefb86f351f4b86d9c6465b4dd757bd9cfe0cdbc55fe19119e0ab000d8ee8ca248bcb0f280bc1b7e60c3e4061a757ffd35b4eec287c460021beec31234e1ba1165180841d787823a862c00be72dc24d6b571fe792190d6233562d837254d9397db85772019b0601375a2f3107e0d8239bc9a15a85fae55c0a426ebfd4d5b8df39cd6404f29a4cfd87c0e9138a9bc14383d42f436756e2fc388c1382c10e9da9c1f66643ebe7c97eab8ce0a59889f74db36590119744247f033687a3f40e76a860e002d00ad10ce627309b2ae28e795ba9d17fe9ed1ffd263f3a5780d4c69fbc67a2cdf223f49bd9db9f979717457d7451c25b3413150f703e531fb6819da9e6c8dee83c826b7c861f4dcf1d764af638072466d1d60d72351e0d281cc59f21e6534a2b7096e46542644e80d325b5bab0bf9eae626bf61c183100d16f63e2fd0da0375f24eb229ac848a4769a27154d3f4dfbdca59022e3ca2081c12728df234a9f78b213915984b9d744274125e97c7b0ac0b034c4494c751f3a8956e785e27369c6911c0ec1e40894064b086d75be74bf97807c39864fad22985ea6bf48e9fa8725568bfc4dc04da1d935faaad8f4043e7e257ce603425e34ba01ddf0928b9aadf98b5beff2ae706117a621fb537b51726142f74d68e2db32ed24a282a14a63b9148af4905f3a239f7a95f4b582e69efefa5468c300024c0b066a31c8163e6b0cf5def838ee226276920bea2f33da2660d0b739b64e52c827ac2223c86180c060fce5544ad4a815c47ad1ce05f69aea72b432e9b5457adc34327ab8bee6cdccc7531c4cfdf2797e067b0b79b8474e3aec7778d2d7766d331bd768e83dcbd21359ff90d5782e83c1bf48c51fe2d699f38452a580662c5d442bc05526aea63226586e38f8f33ffcf98f9f4be0ddd0b1361be770716ae365170c34b76b52914bded74f29862595991e2ca0a0cc826cf824583387c83d7a0e403bb4e7fbe1eb35f249c1187f9cbf6a1c8510c2f5194688d5e1c4a16d8e072ba919f019c6d60cc5c37dce9483f46b87f5d54b453147ddf0e7989799dbf529101f052bdbbd7cd6c9f4c4abc573f52043f2b7aa1ab9699765dc2e9e5fd890c8bdd407f3647ac81d55d3b15c835adefd56244b8740cff2e8c18e8ea3ede9137568850f2904fc9cd76fad7820da31a9bcc80a4810c57ad047f903e97de92d491653822c60097aaa5d265429a9740846fc630f017527b39812320f14191381e7d2742a2358b8d18ed077f1a40d98359dfce79fd3acbaa62a574f41423097a376a4f1e104e77df771f49c3927a2895f8f08c608271e7ff177acb03e55273677f8fb48a91b3f0b4764ea8886b658d2e7d631088741cf5377c56980a9f42c90dbca8974f52b87f05d417c8b0756e7ab3928759c056e0bf764f561bce038a8507ac36996083fac394a7ab9c32256235d68d1dfdeed0fa7ea51b0b8feb9e39c28ea7de1f14a1aa3d5bd4da0343c390c12ce66c5262b6686f799248614903dc9927a2e8a4a3f03a3e260d16ab0d3f3b59e50b3eb217dfbae4e820bd625117153bcf2cac430b4054d143163e09f3064806b1cbd97008759136ffcc23945db9fb3ba1567e6065b22adc176555ab9b1d60bb377b5fcd4455c35f8a8dd66e8e8dfde8fff18c1674c036732c46f8058602bb5bebdb1368c45294bc923b629bde12818409f4e926ae93f994d4f78fd4fa576705f6f7d315cd5ae1c962b2b29fcb39ad1490a68526da921454e9a92223cdcf00a22ad7ab89b0cc8bbb479b44344c7dbc3ff5265a7c575099275aa260bbe512242c7ec091a32a6f511a64229a83ff88c4d45398d601aba1b7d6a8b11536f5e9a98f4ba542083a964310d528398b63b5092e9fef59af33d3e583cc73d4995e4fcefda663e0eb6fcf32647ae0cd41010361ff47e04831fd3046ac40ddbd22b9e09992bfb66a8c428c3e08b52d895861c602f072903b64a020b48b6c0d42203c223e0f259a82399c324bc08db717dd2f076c5726ffe347ffe1c355163de1b40ff53d3d4715a6e0cdc64f0b7d5dc7f3564e74c8ac62005dae43bbc5db547876433b837935c0abdcb51d695804624b69c69c627c4180e55c3a1245db73c2607eed3308544f182f7113b54779213c74debf4cbb02ef58b8c21f63382123dfd975427c5450d070c8f88b382b2a5ca2db0e0261f7d44ccc26e5c1b15d1e5223498f67fbeb3b7994faa735461902a78576143fb7b1f9694a23c7f681383746346de8321cbca1f0280197a3ff7a1999e33bf306506a7079453f07b753e6b40d90d3dd4b99d3c0ed684e28ee15888e35b28b86e2a2853e184692bf70304faf4ff9f5e800565e158baf77a174aadaa671d56a2f6ff76d36103bad96853101a570a7b4c39f2abd81cb0aab144633a1baf7df7ba0c47b04524027032c8013507f3ce9f1ab0d0186e46cfb6ad3f7ff954f96d48e35f933554e7c036a876271da5a336b0e321b59c65223189b0b42f16dba698e45929edc3077a76df573b99127034ab613dd528030fc2609cd9245eab441255a35d9ca1156e543dd1cc9a71136d2d0e15a74722657dc71b0a12e0fe349b426ee072b7ed8f7f0164b403bd091e3ead0f0e623c89307cca6bd47eb5087b7cbcb408e6ea42ed4c2d4693ca4409329c5b90aa8b80fbb70ec82212a71b8da7899f2bbc63d0b535aea88378ba8b161a48f4edbc915703b53f75b195a9963f0915e7f4108abaf1279ca01e9474637205d4d2f1f0b74ba21b83459949e2792c6508613960754ecfe7da2309e7bf51e603735ba07d26b26a79e41ec6095525375fab40859cf165df6c41f693bacd9c5c26a5c7d9b4eb0458436c54db513d4a3a298392d4f4e8bc58ee337556a01c2cfa1d9b877bd2047f0064803a4dca31b35815bfbb8c9a4c4247cc8482ed1e82e7693ab56e999f175023f884e92f956ad0f827143a0e2ca361a2cd65cf6d0fbe513833c010cd7e989d77c106f11dcd89692378e57be76d030920236c83d4ecce79b002780614c460280d8242a96a2507815f89f42cc4e3ec86b774cb68b60c756c201e62ccd69320a33f855195568ef6edc7f0dddebacadb99c480e9462240fdc7ae20feb0313159dd6b193b452303050844bb984f966c573e6b819b501eb7a706542346d971c2c8f400dbba6aa852fde88329ad7f16d02e04e25b0ed0c5e30cdf040e7f5cc35bed3afbe3c52ac381442144bb0a4940f896781db1963a2aca509651277891b25975460d7352bb312719af764ade7e1484a394f0cd9a486af6ce8d34067b617986fbcf10039c1d842612e64ba62029af0394cf59ea5bcf547245479c05344fd4571afe73fc8712884e14a46efe73822bdff5ae0f56d85eb88cf27bdf395a010a97f9203fdfef723e62b19460ebaf5f13e1160e62bcf9ebef102700a53f431cc5de09a606c1ea0476012ed85531e9dffda377ad0631b9bf8305a6185e18951500d10d6f47f7fd853d8a3916599e4511fd229b195985484a4352afc41807ae8971e7581d201b4a6d3b0daa34f3d5a7c503807b013ecd7b3dd0f3f11c9c129fa8fb5ffa5cc49820cf43d8b9d90a2118c940ff68dc74399d8621d358cefe36bd12269033c8a040a68f23e7e73f172bb0b75442fe5db732e91281f949ddaf228d76c27decfddb21ff523f523748e03abf527f70b53af6d0bef4633f6474f7088f2cf0f2b406a9b5d207f3ef4d5f679e28bdcb3eb9dfecb383bad104b0a4360d5817f7c11e64e0597297d2251d56717e607185dbc7d28a406aa77077ee4d00015b30ad4c90aa58649e7589112e320c49a9cfbc0bde2dc448ebe068d1a130a50d34b85b170c935efe45b017d83f663adcaecea7ba6bb6551abeb3436e23fd9c134c3edc717a5503ee47465953b037f46cfb94b9032c2f8b82fadfa379f81c2f2d0a4d89b643c7fa9cc5b7e2611ebc7bdce6e2c78023c0d6896b3a37afc48e3c2a60bc35092dfa7633f02fb3bb4dad3f6ded5496ae1619c87737557c64613e7d01812799a86d5fd190b19ca38da83fd73d96fce8db16a64c46c383a11a27e97c0f09a7ee416134bf717dbb3d0b55e4e6a34b03108f3821b8fca7cf92b49a46641a77ec4692947c15696ae7f6f6dd13164699ccefb4b39dfc84169fa14151a539238c946519f5d945739a812a43034ab34347c55f3a8d02a5d524d3c80f8f1db203d99ad66e0f87df57446987850d2b969be18c92d9278c82011f1ec79f983655077e09fa015ff7e782a685e7304006bc63576436482dd66aaaa6771396d2ae79317bf9c2e574ed632a8c46f83fd52cc2c23d6650af35a5fbcea44231d59573c9173d65f00e9e2d1b8febc0e917fb5aad61ab2af61c53ab2c2d4c009150fddb651dd583098455c1a07b14943f1af4da0fbbe34dcdc26f371f6952e279b3e376ff2c964e62739bf696dbd486d61cdff190d457ce52affccb17708c03cae28e45831a2ec0cdff984016e918c0f0a9fde9a50a5ed4572c3333e16308b8fbbc0b5e502f852c132c62d00709cc3e3c1cb34a5054cc6d5598b38815d4b75ccb388d21df3d6378b0d623ffd2df44d41f752d5180ff1af6bff71d88ad291b088b4d3099371c84e71a436504b6cacdcab818874f418e8cc3597ec8171fd4c62fb9564a49033efdec1dce295f1cccde833b831bf4f2e2ed3d7a8547652ebca2e2338b4264e00f009a5b8325c839893d73d0811a391266adbecc704e8adc07cf529dc9c8656f300e8268e0b5490c2f457d0f0358292b8f1fcb177852f515593caef1c27bb9f61fbd59518474af3aba19cf98c22977c88b389c48c060456675285801e473011237eb9356a97b2f439442ad973ef7a6845601a287e52ec5440a059a86a704c9802758f2217e63f7b1de827a8dbd957ab9cb460ad1dc628ed8826d4b0afbcdfa131afe0f9052fdf8e5dc8879e1e9597ec20aebdd11ff36616a02ab57377ea4c88a0e8376fd75256608aa5cc517237fb78bd59c088b8fca2deb72fe0e52c815025130cad39202e7f40c6b3ef0f32d348a2cee9c8ec67d4fcae99a2bfd5e14da0e15342631760b285229026cd338d4e6c97a255959ede16b00b23dbd56eba99e880e13f7501ab5ab08f3d24d26e57f86e0a5830f751d57bd661614fa0951799ad8130e5f439f979c52517edcc06a85f3fb05766540c3ca3e7b1f23397b9640fad0653e1c94ede4f4b5dcb7803e62f60848342c96070d028ded6501c905032b527c1a2cf8c805e7af2885a8483c0b49c27fd97f4a9e94680cdf5431d01d91289678440f40d61e5c789afb913eea99a332979c54a3e2c28bb615118f6b22b6b569782915db1636b44079ddb033d5d2eff34c0ad70ef547ffb21940511fe09b97e8ff7e1dee243a9dd78e1cf94b1c5aeed263d09f4c2234444f91a936794563b67201ef018774132a25fb95b078587657a28c02dea1ca25a6e9086458be3fc09fb73bd917876836ff20faf085d579fddd3a3f4716b51636adff32b5aa0a0b4a319a7462228e8b7ca523e0fc5995636b0bd0462e811b4ce28f3cea757e0de92625cfe076317c23a68cb61f1a92115680904f57cfdbf91d3632661006a65e6473fae60575000bad7f0e600c04b43db1f03a02614fadbf1e70fed006007047d2b52300cdf3153cabc2b0ec1ca8646bf5aed343727987abd3d4e95a7899db30b98de02e7f882d9e8fdb240f2a8c4e0dcc32468a81e89de97843dcb967a3670e0699a07743440bc7eb249a3c42ebb012214ce5a4f0173e138dd45febba9e6e0369536c89f29b1d0d810029a1042de4258ec2bb2ec69cc9ca511b0b2416fb9ab85c97612d354d18b92aa143f86912981f164b0a33e27cbaa1f67eaf035c8b51e8b301a904eb1b2baf8052c9d3c2ee95ab5ddf662b67c9d6afdba5e70c5c081e42cc64aa29b280086cc6af01cf6c3586ba84c913fa168e73f355109ba43a2a659f04e7f5d4093434ee3d401b6f188b0d741e0154392e22769ffe335ba55e8887a62628c67709942261b4cf1ea5e9f8171520a1b9d28d3c6bca199515af857f82676c4aea46ec270eff23538c6bd3529cef527fda74681721b2af0d90e3b0fcdea0e80f73291d4706971820e0e0ce9b2eb13b498f8d49bbb6b065446db904e930484fa04dbc86cc3750f0c4eb068a1b09377ead68c46f0377c6cee323ecb58b6a6198046eae92f112d07c1a4bf5ef72d6e9cccff03dbcd21f95b04ff3b6e6ae30f286d188b6b92c278a53e42c634a930cf1105ecbb67990bb9a296aa9f2d5a3e64886cb543297f03d3456b30ba0d46bc76c8f25324bbc045d289aa65397d3b3e57e94e9853e28681a3683f0906c26155de40ec0a7b54a92609bcc0a23da730d3c600d5bf4473cfb21cf7b145c350df7a28d2c316f5f869ec233f51ca92bfc394ab00e52e7c8a8d3075079966753f5e43bc6999898024ea6db51a164ee426d43601fabd232c16bb402653689799e26989efd3f5affc7542652ecea6774972cfb27d20d594a84b31118d316c2f2c59f6aa86999e337596378c6f514148daa73113b8c6961f9d473e70d6bdc8667a4c5737c0c0a4809a4f41368430d976ffc0bf6e6759a62da29730b199c5a3231dee9ca18a3ece580001ae7cefcb93a9d403204729b9f9aee3e084f260ba064f2bb0aad40dfba39d7957264cc724a9a08c8eee3365c41d28a164ac718fc788fd13029e19e9f4b2b17754f7064623f22309926b0df61f6d5222bd84b0cd137633c798ada3f6244b7e984cd1820f51fc235b0d3763c6898ee26bc89e000420d1837a866c9ab13d81979490ab810d6f49496dfce50dbfb5e2ba45b36201eaf3a8b67e1842e06be6c208baffdd21ed5e16a58882078a524076e1d9cc92e25a43ee09bdf8db5967a0d7c7a61adb07714a804b2eef4e02bbf3c01ba24798304e6158bd0effe48f42ed242d4bd7a8c46d388ad3b486b78bef636efef4fab4612d6858c71fef78f76ee1f970187f869a2502d3fdcc0dff47e24b4a6c4c1d9600647a9e672bd4382ebd06351cb7225569cb153113f18821da4133897b6d25ce239466adeec034678433bfd0bd42df2932bb50869cf140816890a3106c5755e5b214bae2f57102a117352f6544a9379a79928069ac0b1560bf705eda2fdf46f650f37323fdc5a92bf57c628ef43151ccad4e64e49f2c73eebe89bd8c1e1cd1dce18e642d4ea9a4f6e3f197f776009f73b39c963e223d1cb67e38882bb90dcf1ef3fa1ef827bf91708af8cb0d422454f94597ea3b39f1f99f345a706a680ccdf4613c7106d0a489ffd09102b2fe4987b71b2fdd175eeaa831d8ba1f7f2e410c80438dd1052ec502fb2fc1a9807103b2bc633a4106553884e0dd6f33ae1db2deeef2505fe47a7c0f7a88de0c1a00953b5f4d54eed07ddb67517f9ce6fd6ca1d1eb62cc28228262b4e4694109fd22a11320d7c46651d3a9f4242d302d9ca605e0fc93d788d258296df79876c366cff96c0a7c85c5a27c139a334949497d765fecb7002339dc20c5c69416baa83cb0a73c9bb853a6d6ec227447485ad608949c71cb2175519250664f1b8a53c238b0dafc2869a46241c0fba5785133e6301160f19880a4450810549ac45a2a694c31b6a094486dca1efa734d5015194f3de632fdc9129e2d73b1d982f09b5cabefd90cb40f76944eefc9eb5164645452ac5c7f560dd26a94a32a23b17379a71b30c2c43a7f99ab6f702f1cc9c185624601a26e54eef118102ba1605aa54ea46f032c87fa0efc42a55ec28b9713511faa202477ba27e0c3b7e6636ef85a3e5ef1827fae4d515ba90f27d7c59140ff460b1b6e335af07216051734258dd17baaef2662c3aff84ab57443776d5e7701a4005c1cfbe8cf00420076ed6bb39cd2d523fefa50037767f39f5b860dddb42f0717b6178c2668f06ec35c39a6552f12bc8e746705b069cc81d60fc087f339d608cf2f793cc3d8d3f25b40375917e6ed6e3e0b250eecb243ec158abd4a8d063e52084146d07443b3425c0dd1748488c50729dd25cd7e4053cf56b8ef51a7a3c139428bb1194816f24b3b04cd371c673b779ccaa0570544d7c6126b5ac4e1bfe6fb320e45459fd753a6b93b94c04f1424d8c24f910174f210907dcf843af6bcf3ad8b35e9f7e1c9a3d7650bfc07e8b4a6e916e13e4e9fa40ec3c829f6f9ac61646388674d3758cbe3b1e0fb9c9a7ae01c8bf7e5ba13262ff71f8872551e9e95fe8733b7b1039e78117fb5fa46b8728a08d55b232af99bcb06ac8030931e00db956ac3e019ec77d5b132a3e1a7966a3485ef919c58e4bc98b57e9b14d89e822043627ed829d6f64563436b4846e3451730f3696e365037fed5e108b18f861ecb99b06bf3b5c2224242655c0a47ea9a27d6f631db14c452afb41d3707c38e6937fe723faaaeaaf20682750bfe9ee1ed53ca0ac73935c4a62681aa2cb4339cc2816ed9b93b9d6811910314be096dad8c6e7055a9b2bf3093bf8b100eef7c342895d0735b13443f7024e0f4264463cebd6535e61fc53f247a622418092d33a972f56e8eb744f4ff730b2288dc6b1b03ed0dc6a5e54d9a3311d59a1af473dfce11aab066a6e74951bb34f3bee39f1b115d3307fadd96e1c9bf019854f7972c8c78b0ec8a37c1f3f7f5c491162527f5504a6d10c5d1d9cb6621d6df01b107c753d9e632454897d493f1d0023a124a7fcb7f176a68c7dd801ddc83907fd6f6cf02a5cd43006d4809998de8a0813a9f78db6fea45c4e1420bfb3aaef2e61ce301b936ed41c5c3dec5df565eb06c058216cc8888404cf7ef17bcbef66a003777f13ae802043d1f58b241469bb2c0284acbfea80804e324840bb2fe15c5f429d8da1ebf5c320618b935d4c01752ed4ac7126ee0a3edd696d9d4d09d60581deff12a03ac622a1ffa8c73b79147a1142733e93ee19a702acb76cafd7a765f433a930a7a02ead00c1845b7bcbf06401bc28c11c68863ede44e0157a273ec81ad297e04fe08570fcb2f677aa80e1ab08a2a690622d511b7e43370170f756fa560e8f265d36a5cab66d1bd895e0941931e69bab4b202875eb6010548da96183f00795a3b93fdbba128d299eae87ae4e24224425f48a362b458e63c534adc9d6ca5aa4a4d277a09bcf5b803b2034708c177ba757abbe440f070a1785956e78be2524dd320da99f961caa1031a113a1c53472b59e25d3bffa47d688f85517b2a231d889392ccd7fe6497b7613d7828b6f29952a9e93a29dd5290d772cb03494494798b69e952241eaae152ca1a352a313221cededecf0d1998669b57e142a71df217f74c3b3d91e9249876ed4e73ed3b91ce0c37342fbbdf6fd313afaf44d99b15dfaf61948b8767fee23be0cef5e53392a25cdeaa9897baf5069ca41d82b139b8e7bb948b33f3ea20b1d3a7aee6c4850200a0b65f401aba87066f8c54524656623286587ea68461d86b85ccd9f32268c2701d6c880bffa041aa77c6328c759c3d9bf8a1ec3743e851ab256f1e8971cf800ea17bd1239d9cbe67ef278ebc14a40b3a3456d9f16357717366e3caa60c5823be792ba787858453fc36cdec2e8fc78a7cd749ff4cfbef8b5d7c3e3e63ad1bf1e123f12f8c04f7ee1b1c70509fd1e90fe89094d049dfa6b1da09228545cc66c13e1329f2db5b5dcdcd2bb8674846a57ff35f6090a319a2982e62f55935b06ff100032b8a502837a1edf800744549cffc8f8830ab08fcb20c138a05fb9f516522bc1fb4434c96a7855b059a9476799e25d9a790f69583d558763f3634dbb182b201005818076cc3d108664b207fe602c81c626ced92ab8b32d67113b07e90928146f57ea35f2c1a46ce818e446e6f31e1557acb74f307c60cddfc0db8f997c3316d396d29351b960f03b8f3183bbb80309dfc19d78ded236551baf53a986182a1591163b9ce0c014ecc2e47001656a6ed15f9ec5a6f0a997d3571326b704ecbc2aa2ff4b4cfdab8b9e9037985cdb9a829475619602c7a4c247e9fa33bdc3314b0f71f87515d169a6f6f86c61d7b308244d3da58c67ef4baddda0533014b0cf210399be592b51b0934bca108fa02b67cdccafad1058d8c4d372114dc58187a81904514971081071acf57047de580e2fc4a70b0cda8c93a611796b166400732da43019b3ac94f112db9a1ed2833304e95df89e33d46f88df5aa881f4046d0ec9ce32c7491615f54b794971557ce5fb71106d9a553ce7fc2bc129c00d9319e3a5491fa53bce90ad27ff3725e92b7bf107aacce514049e3e36628e0865611e064dba327ba6c4c82810ad12e06ba54c7e6252bd55e7336a71b1cbe8d4e9a7147562b4035d43b6ba50c049752784e59f816dc2c4dab44ab31f1bc7cacb74934e72415b1413e090bbec135db9a2bd7064513fb0a734853c613018a9264cbbad1b91f2be3b2756cee3697d2dbaf5c6c24d0db122a9df78f5ba5a3f14829c7f3f353af0623165ecae3ec2399e0f1c749d74a043c4599d42de33d853308f8132b04f91c490353af13601eb95fb7530bd34b7a839544696b40109f81d298e483669e55e9b4b3e60741c69370e9278bd2269c704aa2348de4c4e523a2a4d95f6667469c69c8a2ae34922c9c9f0db1ffbbc2e154271593fe72f68c512ea008dbdc0dea1c682f6371eddba106ba4023ffe74e3772c66682df9d6c2bb0291eaf492200ed1b709a319a54c1739e4438c0637a3c7b89015b429f9f4a32ecd789a0f0281162961b980017cdb51986243bf2327c6620014e0d28cf514a6be5ede678ddf7c01f60689aa2473569635c2203d501de773cbd0ecb03fa7cd82a85772a0949bb0f64dcf1010110e72a61ee9be3dae664c432ac1d104485f7267404a705bd930dc44a1059a473867591cb6eecd73f185851daab0563daea66c5db80713c087e3b3906ee08ac01b104e2f1324132221131f0236224e1c743cc96fc0547249106356df0267a58207f083e830a8a11e94200ca0126c33c4514d90571405f075de0406eaf20c30f12628b389183cc438d39b1e1564c97e1ea1997dd87f507b66409e3125b77772ac2d3366d988777f097cdd4321fd0fde2344b51505169b3fff266bec43a0b6a6271cc43e9d441fe95ca7b4c672ca30a5ade876bc385097446edc2535818681a0e03b9cd5e4e6b9f01d1a920820915ce2d7316584eccb643503f8a079d4aba4a0333a29520d7a1dd5fda10bdb3ed59ea80b405cb39a8155c8a51ba27a2ee1fc8df909ae46a4e6b455c3fe5f698aabc612db2829b1e03ae35259705d8445dbc385ef1acb9c319b401c77cb00c1e32fa8c37cb22e754dccb1863d3a884881ac645a79171ee4b3fe9b4916fd6cbe137885b37b0c85167520717a7f75ffbe6612578e2908ac568801705c5f6df4920ef2aa933a25517cc2a66b438f9f173bad256fc8b2092bb0c2d3bbe43cee2e660a521d72a582ada0b166c8116e9c7f704c6144b7b813d34d712e5d2204924a0a42ac3d65304376a06d30213ce4e15de9cfa7fed58b126873b4e9be4fcfb244db4e31a8ad2d5ab9d0473a8908185fadaea62d70dc8f2d696385f83f7e82b39241f5e4beb33988f4fc4eb54f5aea697c4b62f42229d838e3712241a7986ac0c2b0efbaaf25b512c66f475bae0846c4d6c08f20562a0d25f821d90bdd28177e31d39506407a15120068aa9ccc92cb99fd2572c98c46502b0528b3e8d2585be2a310d2d3fcd2a34ca3b820b00fa0b9d18f0064e1f316de0bb28a1cc32c6eaf9261d4c888e2adb39cc7cd115d147eef1113dc63fab6bfc50d3e314fbc761a2ef05b7f3870f732a96d7a0833db50dc8d57c7d72c56c8e5a23faeea9c108db269f298e5997600a00396ee0366b103274a87f6c62663417f5608f8e06c6353feb51731c8ebe07002b6551ff227a880a4bfa5b991fe3b5f25c30309dad920c38f947925802dc3585580bf33e47ca1f4a3a5d46668bd148772af3607784e1c5c499d4ae7653c9378c36286fbee37af74f3cae563851ac1b28c183d7220d2f8a9c7f3a3e5f6c830e47e481608d835f5277714b5a364931de89d860ec4046a950944de941d0d2d472067ef6bbee7675d2efc03659772ac5d4c4b9b2872b68d6fa7a5bb9448628c0015869e2518c39c7cc4bc1a34cf16d5bf4939c03ff49d46a91bfc5c50818521e13d245172c77aba118dd622cf3f56eed5c6d8d515d46f5edadea5390e22acb6626d2d128b10a7e31ca4f212746dfe378a7ee1840a51870a070c8298a40481b43ecce807301a9a0b75c6a6e234b6e4d48db1c5f7076812f52791c360a1557de798b59c2e37f170851ad106d7fa39a86489fb6dc2185269f797b0285e72d9d15eecc04d0f31fae14d7cb55a9adf8dc1087e70be3a22f00e0e8c3f9a5f5144830b39e3f22d906f1629988ff6c0924a27a3f02b48421a2bc33e2eee9fbbb23519a16ba47b8e3b60bec3ab33e9f7fb8dbf8db306e8bb1d83164eddf59a8717407f45ab1b6bb7ed1500e714ebfb35585e8138bb3fc9623799a65d597ff7338d472a02d98d51446dca52d10101e1dc8f14e675e7595c3b1f239ffecd7db51acfbeb315f29b835c73d407db8ffc86c6329de03f6a1b33360b09b680094a172997104a25444aa7ac36a3b40ed042785619ffc61acbd3ecc529d5e515b1ed685af9044a113e1bebe4f860558c7921eea18e69728d3917ca8f3898cf957877a82d805cc018d40ee2b16997dea5b6172b563d86835f6ccad33d2295413643fd0b33e9cb302d45c4bb8ffd8cb4de2d821242d0ec5b7f5a44bd5a134870e131cdeba626dfac309ca4e484110939e21d3770ad9ca3ad8576c65c6a12a9ad0fdffe362da9182e409c202e903645c292e9dd3ed86b018c3c56f15515302986d68955c739d65da137cde823df8635722252b98a01790a6cf0d461e8543d8cff40a363d955c81a112db1d0bd8f018a6bb4c79bc0e84014f52e0101409c3f3e4dfe15b0783bddfaf1ed1db48cf0e381111f5dbb8c4237312508e8edaed61a2b5db125f32a44a29b025013a3e8528d9dd3f7d4311f57ac6e1243001953b4002f190411dc4c5c74e05736abe56a35b8c2441b4688be7e94fa9d0b1eef610937ab68b80b11d7fd33c5ea67a4e6547502c01d7d9437ed525af46f79b0a1f5f71db5645b8f4fbc48c39b1dcc1b86abd2bceeb3921f58f1f5a1c15ea1c3f79b852850b96445ee6f46d5a452b662fc0f51df8d7ff9054445ee9e44008ad10b3bec171af745f38d185e870d8ad642d3cbbb78eb1124dc80f43abfbf143dd3c66874232352e1d12ae629ed63a196c8bbca4e40aa939f3cbec3a1b81910f585f7b4d2388cfb5d07bec991a229245d27867c2f7c0450e16851af426cd727e73d3499d5082b57cfeb282c72ada4c33f728c6dd761933925490350442b9f8627d4b2b46f1c4987975840b8eeec67fd7e7cba2e5d06955d292b3879032fb81de3cabf332f2018a30290d8ae7ea11281b3a3856a6405591487f6c4c6b35edd797d7c96d0370c9e8b35026a0df5b63f4b8cf19452c93da91f6076e79a1ad7ec978bc5089dcb3c2fbc7a7884be213b4969117af1373d3da0a88e1965167cf033dbcc89c95fdd2f96e7ed6c1626a45cf64e5dce721f85f2d1125742a548015bcf9493c09934c12bdd242a53d12ff51b4cf1e18f34b8e83c0509ab8f41345dda34e6705a1a5314027d56d337e81e17161d1ebda7e0b5d4e9c82fec66cfb89e6681fbe43f6976722efff14fbfb8605330e39b857c458a73b7ffe8c37779c1c4c4daacf66869e5c81cfef92563fb1079d72228bbee69422e1df424fd33dd51375c547c6622d9c5b72f5dfcc7e87efe78f0a53f2e99e7a3bf2ac0b24a5f6ccde447b309772b7347c23ce8ef03f663577d70da10eb65cd5b419a49e0f25c760ab02ac3853f64486d491accea2b4d8c089bafade1b6c0cc2de75c6f48253ded42bb4eac1271a6c9fe4b1f4ca60835374d00e2a72b6f0ab1b6d479628c47a6365b866c1e09da10f02e222631691fadad630ba0686ddfc3be053b1411b5be20c2d658d2487ddeeea59aa1304ea434c801f04b14a19c86d1d51aa80585db67aa98c21cb5fd8a06952d949c19b7e6b914916becef03a96b9818f8b40c6755c2f5a96f1e098c29435947462923b163280e79e7182745a464ff2fb4f6ae74b68cc69f6bf0893cace234c15a05200f08cdb149c09ae00681285d492dc77f4a6f1bfcb69d3d0ddaa4d9ec4d64903a60351216e00ca2f767a587a12bbda3a171af9f42987692918a2fd941bd875835efcedfa6a5bca840f5c4e8f4791fed42d0b3cfbf902bff6e509088398581e2035e4483e92342248d19d2a2f639f824296523adc8ef9f9615ebb1b9c936b78115b52aa0a2aa6385ec1d764db71631d8c6c29de80ad212844721fed41e55c6353061a4ed21b757ff41c33eaf135e999eab2af05a15872bd15fdc815a2e1c4ee40ac02d59ccfa4e628b7d6afdba01fa3f946af1fccab94c1f4d600ff913701fae115e95ad23eb2c79d40f5441cca870cf62851b07cfd9514d0f35696738eb5712239e13df8a25a68fcefdeaca1734df4312931670f445e1b879faad097e0b6f7502fdd4bd2833947f9d00582924341bb52af0fc902031d93c2bdd9d5e1fdc1a342b4907f120f0a4abeb0a92e7a434f5865b7b2289b649c620652a5ce2910bfdd928c7bae2db77804cd7ebb645e2350caf63c82521660c0f68a2df645cf66fdc3e124b427ea5480ef391fe5f80468054ca74960e54d3922bca8595cad861146ec324fb7cc1ae205689cdd684513b248924eaaff8d714cfa05c1a84804e7d7208ae3c2537ccd602ae74d27d676d51b6593354389b39bba26d0e165edc00fc9c87e8117b447c96d6ffdd1548d22a249fd71a4d629337a9c86495ef2a9cd40a050afb2c68e9c09ed3c4cfb0cbaf87299c0eabc787d1f00227e9c64bc31a9bb60e3a6003239781d3ad5b24f54f6176374d9205d4aea5c9b150449ee3b26f96a6d8a83a2ce5f38f322cb4628f95e19ca021e2a7b1b70e4db1776000ee4e91c4cc0815912570355188e999f8141cda52d7021668afdbbba9f45a031a908d3fbbb2bbee6f2958952693947afefd2eb99bc3dff0aebadd8a787478fa9a355e0bd2a7eddaa21e9bc1be7627999e5310af850ae56ceb1ead1bbae8436068f74aedeade837e0730469462d4adf9920beec5b3901dec79e5a53560a4ef743917f45ed24f323aa9131e9c2eb4fed5b930c8819fa8db5e443dd4184df00b2c6219c1d1eaf1ae25dc18d98d427fac5a7651e48a5fea866c81b09f3316a6fcb7c113497b78752b80a036c96bcf4ea99602661bafe481c7ab2a840fa07ae4601931cb2959e0d2b900963d0a8d417c3a135c4e925616a96e3c24524802f3d9c5f64e658c2a2f694475490454ee0199911e2ed8603a5277edef03876bb8b658e5cfe8b8762a0615cdab4339e418a1103911394670fb9fe305d940652070885f657bdff8ac64d8ecf2d46806c20368216573b27fd1813b26c545753e5c19693c89cf6dee305bd9b93cd8512576db8f2c1d9eef7e6135434da10e06461f04f1ef5608138df978418c511c9a3f590c2aabe01b5fa4af7d88ca17bcbd29eee779f9f904367a2f2f14069286fd1e983430b539458bf575597e83ec7b09df29a6203ff6cfe8c5579441775bb68e155b57cefca168d2b64368e5f8eaa969233639565dcf6445a8e1884095c4f355210682c7b0d2749310919811fa030e5cde6ed27c25fc696b9c172a46adedd9fe037bb77cd6cee73c8ede012bbea5f6dfb731f4894a11e7ea6209c7002064157c128d0399ac3765b4a4bd62623b5f261ff087fd409fefa491a425bb3888f3eefc1a271306c909238cd87f5c09568b24def7f9204f8fadfbf49e9091cd002965370a326d2db0775d008a3c291956491068519cf0c7fb5d4aa47e61c974bf3f2e7429b862957b5dfaf5194bf051b6d70003f09d6e5d96c8a9bfc6df8840a4a3cebb15f9a3666ce996f37c3bcb0ca4e340c6823deb8f4af4b806094a75d9e62be5822133ffab9809af26e0729878fd07677ff61b1f6a493823f6c8f747f9197a931609a84d6e0aa3295054253eed43785b1b2f89369dc1ff7f8016372d4e019c63c801f51c3cd068b957f1cccf494b9717bdb56c45000040ffbf631462d73460591e184a0305d2d69fd26fc93b670c882032f5eb4a4c999b5e0c669faf27aaeaf241312ee44599b5fb3ead6ca2ba40a7d54936283b9cf00e35c39465be2cc7f93f8426d5d392c493e232f6be776a7fc9ef039533471621724a8d22b266ef9f2e7b0f246708f417cc3ba6fb5e348223c673564064dffacfabc863977e06f66aa889f9101ab53f2fba555e2f22dc43887dc68a6079e63a8c9660dce5c18ac5549571b13b27d9833565a907327ae105bcf7a34e246070b3221ed66cb9e34fe277fd87ca02a49a5c8edf2b4192cf336c683299eabaae1e34847c2d3bbccff2ae44ab05d4128d1bcb83d293b2e63da4a0191c4151757b8aadf76df553cf7008427168bd6f1ef739c7ea163879683ada5f4a3673ab16b6ced61779fceb443c3a69d7ca63a03d025874d361441b357944658e7b93492456fd4d131d8eee3be423794ed0dc142ca78f8ad5c03970aa846799ed2471781c6498cd24f27f37b80779556d26551208bb78ce3e02b4befa4f5e93043347abf002aed916c82256ff1f845a32663360225b7f9a5229276b2f6b181fdd06a50c409b83760ddedccaac0bdee762c16773313e47663dae1bebf711debc37af5878a0c480b654165bc38c6d601a4eb095241b55790b60b93cae0b4a862a7a0da7b7935369cf95d66bbf1b76e6a5c3b8e78a0ad6ad572458ed74017c2c9aa2e6de1ab577ed05ae61f9403e49bb0c410e658211f965e5abe49d39ddb8474bad0f02eeffbcfc6109dc74c484d00196fbc9b334035894c014cdc11b4b5d8c4e241982d4749d81505c038cdd1470f3bda11ecbba3c26f7fc94adea9b408f84d66ee3fce4210a2d89883a18550348dd9c850eddcf155bf785a9670073514e6ea5e8686b28fed0bc59b794a0ffe5b4f86d012cc35328aa01cb85b8477c853ab98d52b42fda88490a0826b14e93d77db0e17113dd111254cd7fa9d9e398ac2ae58272d90e8991ef8c93a0cc97e5ee2851b93e192e293e4c73aa55e608e4082c95c860405585ad5e352a5e808d09d42dc6eaa8f2da360bb61a185610506c105190d4f6d963dc0956fc73c9f638f7a5f672e313135a01191a49b60badd41833e24f7dbf10e6580436fc2ad2b8d5b525269c32c0deb3b8112bc7248dafe66403fa51747b48a8081f3b27315b734b2abcba424717290c2117eddb6ba9f4c4f200d05c2a0151a17cdf852cdb16edb099ebebc98e212935c824f1d84af67956d3212a96bc77136b8272d7df09d2c15c24194254b85a5e7b44075ee4d7ab9ac139b4de56ba61b6392550b5e2fd15ae50bb95b1934b1c41796d029b6543eb1c6b61159e8a70ff6d8c66f304a93a72827a16fd3d358c8e4d673e035e560a9d4b1c0e10548573bb1b25ea0f0b48a77fe2e55543962623d83943420f15a34fe9cfb3110639233761914549ccbd6cb0c317c11ed699bb0bb88bce640d7e4a90cac1d653bbc38e739287ed8b9f264b0bd1995ffe4648eb6017d362ce2e020386c8f3e1a099cbdca03ff37fc18009e5d39fd6771c2a91289dadd7ed5f244d9abbe7d0e15f5b89bc94afb1d5a22beec98c8dca503562a9bea0d05c7bb9302a24a57c0a8dca2a54c4490a3cf6b582db5bcabdcb227ffe2d04a7070eda0133451b5cf6e8db91c9c92345d1690bb600a3c7de79622a1aa65db4d07b815f8a3f1303780d35807cb09d760cedaa6b440a00f313132e98dea2d79d803065f2ba28b2606b1e7380bb8bfba542cfa1924281f1dada1b765795f6dfd1eff239914f20b9f978ddb7de04c6bfea0b923fde52dbad2bb34f7df884ebf2b68f16e89ee91e6637c1438f45972d3dceec60272809cebb16de23c438f5f6b75558984b82fa072c2c1f419bbe82a5da5a48c63c9b31288e59056a56e188ef9751de93f58c7f30c10d5e85ce863a4cc4ce35018033080385db6198b38d830e5f06424260e28f31a7416309157bdaf75011c84b53f1e03f930608b2a8f24860040b5fb12ef89f1d16685ec643ab484dd24a959c1769b3c29e5e3c86552bc5fead7961e8f45c2e13b0168fb07cb2c56591e9fb3a6f727535bf76ce69269f7329aae8e5ba0a39840c0c72d11636c5addf1259c3ed8e1e4a86bfc5539e6d0031bedfbf4a73fc8be43753f8c02a7b7c2de2e2cc457b63b3e1dbb07e7cd8d9a8c70a284df07709f6e43715db551d4a8e3b0bd1704345221c574552f0ae83787e8b3f757af43b12c59e11a61d830b134765377ad6933e59fa1a29716951b05d4a3d361634172ddd933d1397c2e3b5585507d772b81a16c02a821165e965974227970c8b74a2d78a8caf2193b18fd78f643e6d1fc7ece802e5a766e5a3591f59e1fe0171fd896e5e73cf3f90cbd5c24c8e2ecf30d811b0e3fbc371b4198e6fc33dceb70e88befe109bd00c5ae04535d4c3e66277c6ea25ee423aa7096f187df50ca8e9e2ce9f0a3921192505fcb26eb04cc62d593fcd0e69a443c68bd009b71e3cfd10ef8ba7089f4c3c356d27849e8da94807618ce88dd515225869d7031ba042de76abfc7118dee297206789ebdad83e82f260bf34b5b50c2765c3a896d143791dcc091210d6e38f6634e9fd6f6b5c5863461dc04830d7df8af1f4da25fc22d588509211146ffd00672a155a690a5e403ee2b3348464e567f48f2084ec58ef3b0d45a95e91e4a9332c1e8e35a42e28a8f5689dc132ff3b388ff4e658f47d3f5789b2536e3844fe427b36fc9ccc58de250831a11d7a9c7d1730c1b5244b998bb36a7f05bc8a886e1c9d10bbb59a00aad6cce1f63c0abb5482360415fb558ee8f2a14f97a7c8a60cd48e0a826402bc042acc3df5b3599b22f4a3a369114119ce5addb30aefa6d871827a307f701c8856b46b22ce7030c9c881ddb47805777bcdcbad90e2227594cb9368307cc4ed4a9d28c100505f46f2adb96bac5772d3000a59266de09efa1031e15d258aae747a7f1a58ca7a59fc683f5ec178a3fc0cc75f251e57cd375b829ca69e08f109366351cb586a663d6fe57515b12384a40f3e551c568499102ee6ca225b2175f94fa1470078766ef12324d0d7ab0d9952c9a06d9ed710ea051554ecd1742a7d1b8eb0b5f579977e83f230dfb942ec714230ffa6db475df5c94dd197807229fd2c586f69be5f7c6f158d8b8f02e0a873760c3b27b8a526580c670169c80625323d8485aa154335ca1e63e888cabf307d26ecee876b39accca9695a1c1747037e47128d20f5ca6de9773bd714a12928f28517d9fad22e76692816dc5e995c15c0d948c8338c519fee2ffed7149cd65d3c5e6bab07abd0af6007e86533ab022b05d1fcc17fd7feddc6198578b7e3b2b327a78aac4fb5a098d6b9cdd6a859353b50f8bcfe89db0ac148d525c2be081c897f3e0e81b8b8de2eacd7ae63040c99230c986ca89c9c7f6fb593258a5aaad54a5cdf18b8ebf02f73152a92014a42c30929054d434d3d98067e570e56a6f2dacbf8a700fa0233d897e2f2105cb53f491fc1344bf29a7fe4aa705ac034b848738a9934ce8de9e9386bcdedf7a8222a9011d93585fc4be123b27f70c665f1fbc37353e302e2c9ba4ad2a9290067d8283610f15e59e187fdcb2ac2dc2672b0dcdbc59e7a271b7e041cd67e00db2b0f9df832f103641e29dfd112e52ea251f31381c498db7aa0e768e178400615dca340540e89f2af74f357d920d4ff29664ae71fb361d9215ca24fb225bf5a78d50c73430ba4ac27ed2e1ab266c7aa4f3463055c0715064a2bea92f02e63a9c27bbaf3fc35f21b60bf226c054ceef48b7f96ce4bf1f6b575d540cb7da29f0939841a1de6113bf3adafd1e982de47f12b7f3a062a64523e5c2159098acd7d8d49dd53f63b0f36c0e0cb76128d4e3131d3781922922fd7b8f1989e915af33365cc1bb51ff522bfda419875415f4c6448d5d9066d7be48324e56ff200166249cea7e55eec8315dc99f8a7aa2c7f441629b318a89452dfeb5e793a18949b4eb51b0315ed163826935185becd67ea53031d7cc4c307c9277c92f0eb3cfb55c8e916bab844a04d379e84f0a83881f50af34d3e8939e11e41f2c3dcbbc437181e0e4b32500da36330957cd2f17ef5267ef3bd331e3de45f2d8973030b2e18d298fce5d51a6dfe31396d87fc36b3f424f7d54565d09cff606a7f84b6620bd305404232a66535b6cf1d533437f4659e2f53646d516e782623473eb1aca4010e165f069cea7e8700cd126016b98717f612a6da89653736ed0305a490751e4fe91f47915171c6d8dcc92acd57bc689fe8b5b8f5388dca3540994e31eb5a2bc6914755b98265d2ca01f605679fff3dd6540277d48759f9e8c6e9977342839836b1ea11257d3937bb8c863a2ef0b5dc933b2985b58740ee2235ac55aee248591e43de22d99205d35ad49003eec40233ce4c37f17d9bce3f703f7cc7f30b8ada5e32c3c5bab55c51b0c27e3d264a306f9631e07508850abca28691e44c8189879caa5989f6c21d9538211822f2206e79d69f11749474d404d4dd0bb0e6c3e35c56d9803b660edba6b23d4b1479fda9cfdcf3ce309ba5c25b5871c97934b09e7a47dce0298f20f3a084c15811ac1b69bfcb46347db9d6a4753994b6e097ee302ce3e601603f29ca4155f91d3154211bbb5c3c289f031d1968757321dd1d365ddd45f9ae224312793740c13e29fcddf9006dd306a0662c9a34ca691a95def2253199cc87b2de4b4299003d691ec2843bce267db361045e98c42b2c8a34f026b1d14bd8ee7d1460be69766fcc059570e6acb2787e2a29b92af6c00d89bbf3fdf027d1d5d2b477fb17bf3d88ec0e55f08f37869ecdfb698d8a73592695e333670644e3c2c9550a67bb0a6d86cf09e76702187f75b548e9a423ec61ad7aafb608dff08cb9679e6d9dfad5a0d2501e88724b66fc752fd269bdca1bba5ad7046b101dcd8f85bb61f17b8737820ebb29d0aab00aed337d3c39970dca99bbf3f837b66312b3b244ce21cd9757773d9336ac6a700ac6bd1d3b38def4346deed42a27ea8a01a0a43eb1c44cde75495a433a02db0abf7fd89699a2fda4785e33df7785533e5024d3e26493de5bfef5a29b0adfba2873c26f67bb082c698b0bbcdf8ec8311530ba728564cfb720ca419a9f212476547d95598908d251ca6a8b392f0a40914cbbeff83356a129a418037e6910eecc4595c279e39f1805b7040af34c3a0d0389007ac04250835f79a566e328141bfcc1b7eb03fdd699215d0e868bce57bd464020145fe89d54fb1013d421d9296aeb65397efef71364f8bc8eb40c1584d5112a0069969a270079919f1c1c9a31d9994c2e235a3256ac816bbf835ebd3984ab5f9f47dc61a0c2858194c239ac1923b74f9eb95311e3e2ea1ad01594d5c77d7b76f9744f127091c0fe7fc0d8e30511dab7eee6f304b1479d6132521d1dd8f4764f09bed6323369aef8d86a9bc236981e630e5968ee6356e970be0203c14520a3cab2ff4f807b81b56df85d294f160b927941d0c45ac6675a6a802c38ac7bae638f6a351a19465288beb4e0f3e606fb273b363945d473b0cc2e1112b8dda678daea3600ab42fb0ead9fdb9b8c5802dda15dfe9e4910e784a3278ea6cff001eb74427a79bd5f8c4f4e6d62b1970d3f7505d62e5e4298bbb1376d173b73dcc27020f7170c674d0a93e0aaf54b8fd8265c716a0ceac3cdf5db10f76962836db6cabbca7edd8804d8a3bcc1311772220db0de3e8d82d0e04d10c2b6a3dae618be81cee8ca3532171f06d4dff0c182c73b324d0d161b5178ab18bf92aa24b5a80881e5e98d704934b56c4e4d4e84bed20e3d923a898f2c98985978b033feb11bbc91d7e98502ec9d612d58c0c610e2750e0489a7b79bf5477f16eb9304740c1325be945dc532e25cd5c0f6a37e110983320fa4051b56a1d75fcc78696801da25cc4eac10e982f478a1206641ca39dc033b8166438987158a6e272d99b0d8ee1112877d77f91b48f518a888a8636c75ed34a7da4d412c0c939a826d1118e38ee11cd9ac83c650d321631287314fb40ddc10993449d3bea0d51c181abd1e1d5ae3b73db9e0c867436d72e1ac403bb9d82408108c3c51fc3d8a53c2dd19c4f57b369cb6154cfa48633cbd2b2254556bed2c1335c331abdd1166755b2a0cc53612128cfc106bbb6783ac68f2b371b82e908210f2a4fa18e32802601731d02cae5202b65d42efc269d5f2a6a32186288e43d7227ea4234dfed4c2732f3db01814c1f5c2dec8b965dfcb2ef8f6b4dc7885e94a27faa6883cfe93b669f75fdc0e6ece5aa35a4f0d28f696cee0383357c443f7b20b95dae34796931480302a0f498420e14f6aa8af03223567973554dc91cd79d4139ea4a01485749742c99ea349f036424d94fa216245e2f9dad89c24862db28d1085223db173d6bff7d646fec409388d4441f0d3b799c7220d7caebb352932eb01e3292fbdea1742856ba8897200c1c07b7031b5cb320a80f24d053f667dcbc406a55a8fb208c89c7cd8544f7578fd423663cc8c16834a321020ff2c324830e50ce128ddc48c0867f889e31148bc42fc271bc13d417bacc301384b8e60254ab1179cdeae3e8347221b43b182a5bb3e5741adb8ca40358a640864bb7e3155d9c10fc36dabd89e913988cd593586a6cab2bc05949891691f077392bc63b36101992197d7565c51eb5b84a5ed8ace82944bddabc85daf2e20111b7a64a47252c4832a67032d60b56ddc644d54dc1afe22b0439ad02517b420314f46edaad04df27e3cf41467a8319de75526fbd51c8e91882a566ce0492c452e0764cd047dd318a201140fe4cce5ff8e44a7aa6690bea573b2a04fba4a4721a91cc9a29398784d4f2cab580e23832826eea414e3b24c4946d7668d5c45c91e5c09bb608d15044567176f796086d120fa7d980a767fbf8f41846a3b16192bb72b9fc05caffc974a4b3f95d881717ce90e8dde46fb1a636f8bcfe868711b832598c5e527236b1c87d61825eaae10aa2fb415d30af919b4c79f88602e59e385c9b75d65c4eff687e3521a19884010dc14c8b1f20724ee1e507cab810a5c1b028e0b4bcd6427c0cb282930a2485d12485023e3f1f61b7625eca5a92c8916c7ce6f646660175109f8f36935d02247fe0d9897f0f0a8bf1ae3eac12b4ccd4c4c3ca334ccc57f044a7e418129afbd0ea13c72407ce02335feb73f78b1ce69557441719475e7dff3ff3064d108c12127956f3364820f34f6f07fd154a846ec04854b3906602e455863b2b8ed225d54ea1caed4b24e94cf129afb28af1dcf0946858215a682a4f3c1f862d63e0660ac857baef4ee42849f364a23a2fe803cf94681e4251634a86b92f59bf28c1f440270c15579bbb0459bfe7e75ba9e97b61d720796db00b7080a3db8096c4a1677166992c1af3df38ae5e28bd5ab4270fd17ce292ec2a95bca03f81bbf9ad52926f4683ab14a56411c673030d03e833d7492d5434d841130b2ad84f559b7850b3f2edf926c2a6a90ba08013eb80a6f1c186469eb662ee331a9ec2352920f890e7bbf2ef73c76db8ea08e235137fa11ceb795fb463fbef46bcb5837bb6e62662d3f03d5e4dfc6392c3af98ef0f43d3d07dd2a2b7137978698ec567825c02d90308893bf9b6f29b4600cb05e7f909e0b8c8897e50e8957a441339d1416e071032cdc4828c7fd00e82b03bca41b7925f58b416f3d9a249ca44f34e6a68e3a24292fea74438065808609ab6edaf17d10c4fa0debbb9cc21e247b5975e7d71fc2bd34683457f054a29a97defca1e1d8347fedd141e2efff03f97ae81b4a7d29d3bf26cde496483ebbd4537d6c4d42708f011609ea3e87f63b336f3dd55d9971c21635abeecf065409023faa14c32f50addc8a81cf4ff3bdbe1e3a38a1de8a5e36ea0401ac460fac234b16a9bcc665e343e598b52078b149ba983be4686982c0d1a237726cf3645e67753cf0817b38e745326cc0013bd4086d5baf676a4e39abbbc331fe36ee3de0edd6015030b2b9986314171815666794054c1863f47a6399f79a218c18aa8a3a82496c8573441983a6114ae33202128a32e396a9ba22337e91e73e8325c316741322e223de06c219cb30a7f7e6ddf05c3066e6c5fb32fae6ff4e15673611da68c1d9d5747b2c587a353334dfd0176ce96c249481380af321f1453d7d15664f6dace77b06d288dda1ab2ffc8fbba7aa6f553fba001526e3ae02e602edb776cd280a70b7e5ff4d5367ba011e5dd0f1751739f88be01151d0d13bbf0254a96b6c3fb360c6bcff1b67544627a206809d14b21ed3985dbe2dd4261f79252393803613766a986219447356a1a988c61886d8c2991eccf79ceda880aad6248a9a4d718d93ad9782a79d41db524c297a77f67d2aa7fb103f56801bcf5b5f04827a0c33609348439155ca8ac2e5f6e33279052d6d2ad1fb18b98010bdf6663c656a99027c102f65ab071f90b2cce93eb581feebaf897149f3d8c023a184a5031a8e936b99b7313e9892d45ac6838d2245f74e4a00b0c943d114be19e701e13ca9be4d86d9148f75955f4cec7867278c2dff722ba518fc7d1cc18d39b18529354974faee490a29508478179c418abe7e7f932837b121ee4d113f7bddd4c8af2fa2c3fe57aef7814c6adf3810c5e4032c3486cfdeba68dc5002c0f1b75c4ea719d23a0f5f9901ed0373e3b17e33540fa03e174bb523ac53774a60520d988d3739c67588b38d839b7fd10fa5ce60ac84dd8f9c5314dac91009791875c93e26a4304074391cc0df3f0b13938db727ba6dc29abbb9fc92397c008824364fedee8f22c7bca78ead7a38860603ebffccfb72b3a697ebd6541696f1f3cd1b9eecbe6137ef26e99fd0b076ba2d82f9d3a719ab42a5ae9f5d583d1b7aa86c149a9dc01916790368cd6be2d19594baebcd251c8b105f8df19e9d4b209f36d96f6b93cb741a17b02a6d846fcc630829fa4e8facd02df452d0c9eac242f0f0c81ba01b487417a585ac367d6ad297081d9b40f601ddee12a1773534d4d27e397d4f7a5c758b1c0bbc9ffd9eb7531b9d78c9c3ce241b26cb6697c32a9b30efa5e3995b7c76393de8b48e4533b7b6091fd5581c88fbe13a1b2e4afcdd03f8d28c53a1fd57cf22151baafe3c3f43129b8b013a2be4e1a1a64228eb00e6257bf23803b66e22835e234450c00339cca67e1c4591f3d50349e2982f73f9421effdec7ed8ff0e787650029cc6bd2b78b574c70ce6caac7e2d50bfad71da95824b9aef8ada9b3ed9978268550bdfe5d2b0e1ce5be54a4a0104a07ebb85fad41427baf7e4bd52552085d2ce14a1b2cd38b0f94e389c653f8efbcd31a0e34c69ac24b0ff77ddc09b78a5a1a5a16afda972943281965c0c2462aa393d84eaa4d761e13333b3363c9df60943510f517fad6e09d1373892f16edc14b4f64f12cd453ef821fd38642385b83ee32d37e826ad8138aa8f571ce6993916f6656fad10428594e678b59f745afd94d07df473bbccbaa62b6bee03c8a44495f4353e1e90c158104bfd141edc9463e670259ce13d8529ed6db51a3ac59e54f45b208d1bb2446e33d0198ef2cabadd1781921ee0dfe9c5e0e6bdbe147a95b32a274336aa2c7e87968d8c51422207b9025195621adeb09362c1b6240a185ce70f26b1f6d0d3d0d60cd3c252ee4c27114572a16cd29b77ea8c52e175a77b80324f0dd7a233b07aeea525aca2d82c4276ee90d60982b2939e59a128db98b41f42b2aa7b1ba9bee884bdd262072b7441c3f1215b927a5a60c0cec2311846c310e10125cedfd95c8c6478eb1ad07fd8789eb240c8d837c8f9d992a033311017ca153f101b6ebba7ba1e33c77863fbb84b8087b05899d7ac0839ea93931add12f5ef0490092d57cf3a06a0cbd9164ca407696763fdebaa7de797ad4fd0be2c2379bef9da5f0962ca147a1473452dc6807973cf73f191a681749c7aaec51769d3997a9739367d5011e0ac6df789af608796fe35c36f8060c434aa995b80aefcd44d07f6270e390e94a329d461ade6e0aab618649115672563d1ba99ff4adc1cbe4d3dc05565ca687d329049de0d95a8ab11b1c5d0d23c23949ef0a0d691c04864e9cb3164fc6034d724c37632ee8ad2b5ddb828d3be2aed94933aa4b3d009660ad55088816e2d2c41ee217883325f751903e897f01769418a81352187c3c553036da19ec0faa4d00026e5d0b63a9d0678ec159260bee4cc2aceb1f27d20a0d85e8ccb0a5ac24841e462b297398d7e2f641f0ae1b025ab3b73eae9b2df5b1c67b9920a994b3db97a2a111c96e231aa4c91c7ea5fa12cce45b3181752f0c4f657cbe8323227942e24f9eec048f3e29ac32a113b7983c9dae809029ef6d31f9424e17f71195e73df488d4a09414cc40da01ac81c7e1334d9827c25a551046edb18b60f6f7d98bbc11765eafa4aa6906eb14658e89d51e6e90b21324ab0b0e9e0e2a67e8cd1816878f4308391fb5ecd31e145777a6cc0afae7628e5c12a67542819defa44f14e4e946004d1bbc0d3dcc38485883c60e02e6dcadd992200148d5a78abf811c2e128dabe7077758e027308b9b317a4545343b96c4a0817b0bd9d96685870daa97712ff44421f24af8065c333543cbc7b63ec72354599ffc3d5411d67f30d5eee9d06782296ae0314b3729f8b28e9faa3105faa450554166f071868640eb91ae6a05ab244e2828e2318bb9802805b3719a2de0c4b15675ad50066f4017993242ecbd679662c35f584a810fee4f65ca7dac24e0193a600e6f583fbdff9fded1cda17231a5660c574a894dcc771f0d23833427fb1816d700740fa906ebc8cf8a1e52b6ed4713b88c0a1b54f2c59b5f61b1d90599442879c7b428848cee46b842ab0f486923fc463ee4de583709d3772a6c5f1adb4ba02b5336ac9702bd87e60d03659ba8043ea66c7a5c034738de691f90e50819f0616c3ba7fd08e6385efd78207096b48f0347793fee3cdb4d126a79901201513c3831fd2d15517b3591ecebe1ccaa5434a81cbd614ef4a5630d2eef77fc2805913b79f2121295fc1e41b70d4c8497c730929e0644702181100c8e28bc891f8955842e41188bf17c55e57a623a66b9d671a1e82d1312e198b3ede540dd5a391fe708d2d1d0a6beac3d7b20c82544b01ecf9800f72fda8169c1eee22e9e592a60e241aa24269b2b445934189d547d802a97f586dbf228496ab891649e47c017dc8c8017e8296376e2f5989709ebaf667e4bd63538442abcdfb41440d2457737d322b9aad468d542c356c7c00e677eece6958965fb4ce37d9c3307f49b71ee200aea1e83e065be83401a4c0b030e4df0ef910fec3d73376f91dd6c9f9752552f4d2c29615e701e18723499498e7ba81a83e9749d7cf48c64c74dae25c4de3419199e5c4ca53300fc16328950ac90f3cf9c2d4f0d809c5affcfc8344bbdf4e904159190abace0ad02482366e237042576aba2c455330035e58b1bd4729f564430abc22f50457c456f26f323ac80024f85d2036cb0e3c7181c8b31cbebe91e5c07a426304612b389ce702ba6f1ac2c31778fc9ba3c7719a5a144b2fee8796f5c059fe8e8c1c207a61b0155ea4d373fa4088ea6376dc255851b054b9d7f2de61f1483f02bd1fdd8e71ec46b64770d0a5d4a938140fc098d77035cafec886031dd3fa8407147c6d880e73d0e594e8188a0ed3a5b8a0fd9508f1a08c58e05c2e00e0e2b7a02d16ac19d55a5c54fb3e6ec300a147b7d790f3ac2272063469018847f10eca3c0e917d780e1e60420e42f063e70b485bc1aef0539db1e9097f8a4bfb233ffa4e7195a368a37c2bd04c90bee359cd8f7462d883473f5a42a08312ff1883371a144b14e1a2e5b4c90d9cec33bceda14382989a7c117256b35e3589fb2281bba9663147b91edd1ff14c223116d95cdeeaa31ec9201ed4bdfc76c57bf6b85278e4d71a8a14eec78e31db8ed0e566c242200827a2079e7ead6098deefad02a3efa0bff64d5250adf41c59916f56099ac5a5c3ec40729238b17b472105b2e682e04880f25aadf474c15ebbe9725d267c31f4f4c184bbb62a505ba619fe3aef4143c954e2dad121598faaf15b706a72cc9ab602c23da6b3d45f68911981858f336a94a3b80327ddf114f0ac7d738a5a5e87a9710db6aa897d35d1e58fa346e99126525fe6b44a483b299dad07d2cab1ad8a62679c40ce913af3742921b86df5f17e121d536fe433242476b8bafb03eaf0ae4d07e01d74b2878ec17fc137fe20932549b8026266c0693c2f89cd27c5d9546306a4baf73d2a36ee8ac876938a5b110391c514a293bc02e7559b79c18ab42c078312217a274a9f9a694723257f8f510d31edfbb3c34e896f408e69af7a767b81f284c06ce55f42a38d4e4cfb6121f1e1286fbd3175b6eb7c4e0f9b63cc7f11054f973add496ffabbbfa8c4245a8bf331891fb70d9a84d2bc91ea78baf6f79dd938e6cd7ba0265e07d51e4f3a06292096b208ca0b45f6f6b36b9e7ca95460423a92d80404bf23c31691e900707f46229b5f53dce3af7a58dab118fe85dc1b199bc29112654c1d9238fc339265d613d0b03754311d9c6ef2ff017410c53fc6f57875a179f3f38a565ff166277cc692a1081fc5fb00223c6781b37cf60729bbac77c1dda1d87abf811e1b7e76accb86e07dbb4bf2f2f642ae821ebaefabd4028ae0efb2a94c42654398b7ec3095f49f304aa0868deddf821d3c0137817cbbc2142ac2d730f40ccac4ae17b95508373e02aa4d49e65a0b4cc75581ca1b9b870816c28ee650f652e0f01f150cdc32af27307db1ab6d44c21bfceff407d7efe895c5976e030d234af6832377545d53590f82742924a535e33138daac735dff3abf93b725f9b6b29a3da16489b8735b9712c17c33bad5044099f2bb5475d526cc2b4cce53260cb288c5d189d8c590390c83b297d50218d463912f0a363001cddfba2e8104d991e7778b0d9ba26449046923a1a8d8f04de109d5e32734d8ea2e0d4d51eb1a04a3c58c93ad7a4de5228e107d83fd72fc193f7955c0232dbfd6407eb53ca65edde4db9b1be62dbf7000043282f1e4321e5dec2983f115ce56ca7f6f1da21ba4bf8cf8e05d0acc9d31910e8db2523a081babbb8787e982a3b44b58b257713dc4cb5a0d907249f8787e7ecc4d3f4397e5a709051680013d63fe8e333a91fb744dd4946a9f21049ca53a6fd08b1f53f64f23373193a27b1d204ba8d2f639f9d3d0d2c3df33b92b696576e85810814207e1d9204396998b2f18d0025dbd091161e47bcb9bf3c26766e8e888eea4616056443b572e594540f1efc61d7379fff5cd3e05e3888b500991deba0b6def7a408126d89f65247467e40843ca7bf78fa3ef02884347f9108eebe8420425365ae3337194dd387c4de6e4d3d6ea0c5f6d27f318504225f731afe7c889ee707249d3d7d241aea1c8820a1ce845ca4adc94e8e9af6998a8697a71e82b82ba0aab40b19711d5fa53f412c80c54c828b66b40a943969f518c7f03e2379ece9cd1a697b38295d2e1e31d93cd6f5405d2677de77dcc0c4437e094039a8fd7cc131fb6cb8141d086320f9054bc6994642fb48f78878ee4762185ecdab512ac04b50e16a1b2448992c01c2a089c51a6baa8fb4ba2f47f7f2cb01e7e19703133442cf2cde1c1888ca1da0ed1123e21ad4a5018014a5ada0e98b166f2d4b291903081ef0d01730f8fd8f4765ed7aac2be67b78c97a59868deae21d29a610741848c91ea7577e1b2aa0d55c41b9d45426be3bfc7452dd6b2e8eb950456158bb0f418b54d0302a1f2672f64a1769c35beb7c6627463f101b922db990c6aff6f927e1ddc99f02051d1ce81e219fd904441c50c0f0c04f6c42bbfe2bcbb49a439069303a46abd0e60cf10985a5329c76a2f7eab1a327fc33b673d9bf59bda7e79717693eceb2ac5d23448ed54a227c779ed9aa894a9072b4896dda2742221e01a0e414c629dda1a43a165d85f521a422975984120471d84360e96bd5d24046a81bed42cb119bb57a22a7e2120902adeff440cc90e0439d5ba5e1834d7b7e27ab4a7c48c896aa70160a72c7351b5552cd6fdfdcc34461ad2c3eea363df8fc531c36c79b1d2eda477630632ea05f85acb764963d20d34f7cf7fffbfc2fc795801489fd36b6b0b35fac397ef153f4dd168467127d3bbd93ef18190a31af22103cc628f70f3656fe109f11543bf13ea730c15556ea15b334275030f5b74f816598a27fd71e27b4bac38c2ff25cee32be6061d347815950d86d92db14fc1d93bd5f6fd8d35da310a9cb4c2ef3787ca89bc0f76aed3119b906554a0d52aaa233b6e75556321e72eac0dcc02b46f321bedbb25d9ab0aec7e09c73416038c5cf5174f4a72e3cb7dbd6f64edd39d5d9548c08a00aaf64102d178647853907d09592b74112cd1183a6b33cd297063f3670c972cfa8599384a88f0d7f41852ecf8e5df3b934d4b80542d5e208ac0e5c17357ead08092c9ec46b85f7fc7727136f074048812b72a4474b624a9aed1928d0726191597c0028d1066cd377da3122b4fce5618f7e1e4ac17bad0930363c19d6637d5dfaed222957c4b335c4d6d70f629f27e6bcb54444c46c9d55b6321182f55245f71fa533486cea341ad63bc99c25d7e71420bbc3a932ae13d90f5d068fd954016e7f0c3d44bf8f16f351b9a8e997b9c262ed5d13231eea093695f006155969757df82ef06f6643250d95070b2c93d32da0b21cd070079a62e149f010ab6bf309027396db53aba1dd20e82794c3bb8daed891bf3ed0a1fcc489e44d1231f84968f64dbbd39729284ff9b298301aab8edbe5587fadbfb5b44ec0035e0449b6d2402ad35069c50f5134919e44f4540bf5e7bfb01946754a1076804b6639e25f0f6865c9da850604a6f6354678a26a032025657583c36577fde320c4e218a6477597d0295e48aa79c403751babfe8005d286de1681a619a8cbdebd940e21d1eb67e2b333eae3e0792e920d3c2a1672508ff443bc2d73175759dcfafbda03194326ff7b6f62584f40b86ecf3b671be457fdd8ca356731b02d3079d6a7853ab701d75d4294a798e5c621514c35e58e3e6a05999ccacf27fe9cb591826232060e756594ea7eb512b43d38dacfc4fbc5b81793fb916a1277cc0938d4a4cf7d3dbcbd8db0488a2ee5dcb2513b866bf850d48846962d2350fc2ffd5132f4dd89148606dce0f368dfae17fbe2a4bd7f917b35f263034966ffea91d0e091a50a3f1d2e985994aa521c9aa92f0032193a1c3d91074ed23c3fe19c10ce222d2504941064e95df949d10afcb0a7d4b1d17cfcd015008f5e3630e7e642157550109a823efe62fef579fa76755bb2590e78513d378e01ebb19c3278089a389f35c9a44834839278658e4363538acd6627a6eec4a5438b27f7d533d452173ea8257953ea130f0a65f91b3f57c64570aabe6c55211e9a9188093989a43dd930479a4ab46c3364d35585da50c88c1dd2475a65def5b9d7f281c9176159be10b58ea6955e40061b1e325fae3e583a14483fa15a603655b8e1a50b20f500dd96f4245b34eee70b364b1d106204497d000af5bc766b363216d4eda240a872d862911eedf9d91428ab7901872c559f1bd8ed19c4780b93f8bc0ddbc61d3e87bdbaf8be0837785a0c514b307a8bba2cf4cd148a4c29682aa4e2f18e74400542323ef5822dd7118f3718e18bb8ade87350302824c4d3e17860f143bc7707e76f8ea196fe2e4aec260d2d4ea5235f915fcb2a1ea7f2e73bbb3b9c2e382f5a2d5be75af5227036dfed3a1eaaf6a24448eacefaa17157a5cb6f75f02482c16d322e31262b0babb6d8e42c242c1b4e57139052fe3d9fdb6d9e0df04604fe235ded1f8172ee6cc344e1fa1e09aeb734aa1dc38500bfbde838dc591f064c2b0c23d0522690c54b03ff0c332e7838641737e212389df7a5756c449b9c7cb70ef7001f1896c467e738995529186fa5d91a2e957e27995bad5b52f03530a2f2b4e720b950aec803e2bf986b011337dd0a3969d91ff147f5f33a921c199edbbab4ad2c7253a95f9be5c8fcf5550e9a14e999ceb19d7a24c5a2da794011345ca71d6e4aaff997ef682ea1c8677c12346231ef0db8dcd8091a1eeac31f69d24b36bcfb65855278b3ff2a35fe574f15f3d6011acbb5d49a7f6ae6e79a2630715dd32b4e5cb8b9513aec0ee7ccef0b1079100ca6edfb83f199db479bd000d7d33df6fa6c98d092bad9618e0e35d0c4143bd5a06e2d2d597803c2bf3678c038bd4632c5a9338deb8279f4d852c6969a235a70f0c9954c12bbe8213a326f3a8db40252f825820a09cce939304de0e1a10417d966b84f4d7ff05aa6c57dbe00d2e33345e7e7f2399a9f8b7d82d80d10e7093693215fe873603a34b0b44b16f8768d7c3ad439aa12c8a72256183e61366920170f3f16eebf15fa4f34df44a69294630e4e4f83669c0f0d31c6d53bd4798c3b08b421a9fabdc9e45397787b2d92614269ad5128d051bcc19eb6dae6aeaec02261bb248ffc5a4c2a69bb5a821204247e83de13eaaa495d619509f243b1238b174ff55d5e739d61ea66d88168ac76563a3d4583908b8b2527e37e2f50cf2b0c2bf0d5e9cd9797112ffb4604e35331f453cd448854680033838726d44587ef8b329b532b533e63da45920839541265a1503ad1bbc92ddeb900de8073d5e6f2151d96fc778891932d3b4f3ebc89d69ec3ffbe1df851a42f586fd79e8514b865d607cc3c67ba55d271522a30408981befbcab9ceb29cc6d6663ffcdff6100fd1c706d842e4e64c5e35fea02d495b4c712e8fd214018d279f5cce1ea9ff03c5015a35e7923cd2b55349703290e106bb62c6a57c3c70c60e69bedc68f0eb3551c89e300b9e69545e9e0428b0b4711f721480e6f15a16f57185dc1ffc391e97d2658a18083423cde1bb536cfba4d77c536061cdd51728307dd2f04ff49c3f38b13ef32f4d02cd3c2e531ff21c371c0d6ebec14edb1960f44201a61e1c06cf20782b56133afa085e7c1daf8437e1d8a3a7cc18195c81299992bb0e709c2a52564aa2d311df28520f9d6e61d9188e6b8cede9affb70ccb00ab3062f0b92414feb505d7631c1a2d4b2b9d03b6ac044b7ac6765ebbc22e7bf83e4c8a3dbc69f960fa7872437a8acc9ef90959a5b40358b80cd226b87184093b195317165a049390ad27445038ffdf8f74533657b3d39886fa52155f680456d8ea480739682fff82a9d5d2d0990a923224f25d4d2af15a2f8f528c89b9e292126a9985709b58f73644c8c5a0c8e7dd55b7a8ac13c573b75f6c7150878aaab0886db4773bca6a907befa7ea3082a07e21e0c2e2f57583e05dd48db511f0476b73a32612f79d14c495df55d291472e405aae9e15b63ef5f5a29afa4f76a1414dba71d0fa3eaeb483d92679e153c471c90155b3cbca9fb58e20d160f183bda5c4d581ccefa2ea4eedfc481472600f4f759721bce70a8f113497d308c5da1018927d79cc74bfa174056e8f65be534a650211d43bcc9a6d29b3138b8de290270395b85af5514ef4199b7ebb7a14c2564f0a1a72d2261450e808e3e3f2c242c53ea76f028f87955caf8945cdc61e22378cf38cad6f6bee06ddfada3c0d3c92c45369eff76b8040145c13d3f9ddb8936a7f99f0f7351a9328ca65b91971052770052b649a391a9e1d1fd3305a103a602fe7d98a22e660c5718db8a93627d1fd8f2240534d883ad39577097e7b3bf22060e9009b5f110a98107afc0861a5cf77fc17f4d833e3d15c3dc476b36e92ae23c22797de4ec207df099a253c0a6736fed056443578c541a1bec781626104ca00d231f1042249014bf88ac7d63d2d246832fd9d886fdcf70c96060365e337e5038ef9860766a9e649ebbb29ba1ad062fb4a9c92458694c7ad2c2147bb4776d8929acd861c5d0742be84bd9a9f4c9d7ca25bd93f967c5f153fc473f965c354e1d39210079e22bc82edd21635412cbfeab701831ad5917875a6044d43bcf27b21b0aa42aad8920cc583224abfa7510980cda70af0d44d206e0cdc8698838ae41f90192576c6c54d32685558b1a2623a9d86210f588b1bb13b2d2bcf560470504321aa2cd0cc45d88a6f23e9e177c36ee317cc4f8627ccffe91ba4000a5b7bfce6d224039aee6c32318f93b732861ec3146c0f318ca613f3cc28843e2233249a5583acb8a3972f0f499607d93aa5f5217a707c3acc9fc4b10e10b34ab6e853a5a313f9c7d20eacafb1ba9096b3209b301967fceb2df246c553895761ae15861142207da365dcd3d0ef972ba281194509bfe1de5f70fd14f824fd62310e2d3dbdaa50cee4b8a3ac9adf14d426e28d483db71ad0bdac62d30312a2f3697081859da9510876959a650ee8c7e735b5a379249baeb92f3a82005ea78944565ec34733ede265d5ca2b80c0117feea977055781408fc60070152e6b27c577776a6f0cb6a36035fb3c396f5a3b565a92ce5f4a6f6268f85e82009a081a94845bf469989d3f704a239d9ab4593c96c7d63852ca94e8df786bc3d24d10ac30a5822fde09255512cc36614d23686025016784740aa5f99854030ca2ce2e5dd1e5bab518fa9d3891e8b9792c5f10727d99efb7a6e430ab3fa983123e3920f3ec69735af1a2488012a4e58e2532f9d999745cedd4fba765d8a297dd25b1809f56852c8d96215f0e827084efc62cea7e71223e3afb47b83ab57d2a1f49d17b43211b522faacbe6a180bfce7c3e555212343a051d1ab9a4fe0b40922bc96610b5dc5fc127bffcbafc8041ed929333e43c7fe0539b55baff96e362545889def857f8ac60003e3800f0a0103fde5e52fc7d2c1ffb72900262e19e6085ece21be758edacfc1ba0594928705f0946b8e30b3c9fc0256155ee10e6271d27662500892a78dd764b7c7eb5c561508d274a681b8532f4acabb2b4c6953c47430e8c729c6bf62d2846b3e90a75e3e640085e18eb338e5c19390b40e56d7cb452d2112c7349814e6b90207a97e160931b4a5a5c7d4cb9484475f288d6719a1c58b5c37d71bc686dfbae5b6de284326514d8bbdf4fd5d23905e05dbcad0a7b7bceb074fecf5bcc63db3c29dd1ed802dd027dc98727daba5a466ef2214e1d564496561968344dd0838173b7939fb4038b285aef15e9a9bb011df4285afa4234fb6980b3073982bc7600d5548fc118a0da2584256d11ef7a6444b75e1b3a56f033bc3155576870695c0aa8e8978648f1e5f2d7ef7b9b28fd9c4d9d2758c0167d584d8c2d6c54e84982df1d546f70015232e21024042492105f89fe20c0b1fc61ca8ca0d70e72e7ec9c05af3e089f1a63b4b95e45a012acb0fdcd876d3c4c4f7e69d744177062c07e83a43bbdb515aaa0b0e4c71f61675614f67ece1100fd28246d863da948f1548a7389317339e19db0d1c41a0c106c0e14bc4ad78b3af3e34bfde19bc78b888aa13894e4b81266031073ff2a145cd7ef42d5517fcb63ff82c2addb7ef1b884eeecb168254cfd7c41c045302a5a404268ff7b564334fea7589c5ac31f40c247fda5cef6849fb054e3c16a0125349c7209da6b52ae3e95721632b5a11ec7f6a2fc3a4740a687b9d95bf3d34f1c8987e70f93127abd097d12a8ef5cb6273cd02346662e7fb4acdfed54c0b6d700ac15886dc8948f6261bdcc6fdb5c5ab61884f33666f48262863adc2113813b5ac38ea81b0874698b715f8a38a4e9f9b9d326b14a6637c23839876c1173ab3fdec7143cdbdc7cd466e1a81156ecd39f7e742a80fe485fc50c07651c0953e99c9357ce7d2f8654bcdbbd8e0c5f7d1748c6087a9cd8c1b0bebbedf1d11b2077e43f1c8db328fb2add8c19ac72c142f63873e947bcd01174e58cba956bb5f081b8526448c8c49d8df7579b1577cb89fea39b029bb39da845a5e70d15d44941c46f3c375233bc651c3b230afa0f8aed8d307cc3b01becc5640894cccac59d50a13e45f8e9f19a4a180b28d834638bed47b91693b3f1ff018eb10d44b01b9d2314ac2d1f503ca7a9c7ebdbaae9fc1d7951161bebb352140ea26805d28cace9c1be39b9207ba091b089331bedd9c32d647dbd6dc379268ff67e50d491212f6ec23b8c9cfb203341d16f1777bcee284fd6f9ea18df7542eabde79d279a429f6d02ced328d9768610be62d6faf244a06a94bbe18f60dcc88c140bece852ac8452e0aa31a401c32128e21a96497d914cb660450f586e478b5595d796f4ebe44cc2e090d16f0fb9cefbd8da93fe487ed71bcea157eb03e5331cffe2b391d229267d724c342e05e5a45a83f1dce7f16b09f192945c29dbc9b7967238ab8e3c077c76b34850f1d2d002a4054757831b00e753cd61c2999658736735136147bd90fd66e101cc3a9f98628067d3c4761728fe3eb8b0970bdec5773f41713eb988b51329d07ddf8af1a425e91cdfdc01df6b91b0c4ea72f9093098d0d671c8e56726faa32331d03320c815b729c7a68bba58466cca39e059b5914578c7f7e82e75c6184772037d1416526bfd70d514f8023c64b785cf8db968c455b97a16d81bb306c446117622d9986eaf1a02aa056c3acbf40d5c6ce26c427326c09aca91d2fcbce9be22df5be5c32c5790cacb6f2e85b12ee0910ae5d72760264fdae57924a4f5bb0130ea6cb8402ee9bcdf2251c3351d841c1d0304c1595ef5d1a7c3dbb332fa3795122b683553e6ae204b03aa1e720f947c4e5c465d65cc031133f231f582dd76a6d199836a15311eb3ed5ff245687af357c261445a4785080068d2351f6f8be12801047b83f5486949f846d85351be80d6dd10d6ba0a2d5fd6e8e1ef382147fbbfd13adbe3b0b2f9938c91d3b347319d1cdc580053c8f25a04feee6cfe899d6f29532fbeceff57f098a08288c8034d47de80c1bc44b17fb0fbfb45fe3d1346c29302e001446bfc17ac30327bfc23350fab4f8b7da51cc49622f5dbf9d7f6f8ace1b061029cdc0c7ddc2530aa5bf5d00da656ed56ef3d3a3598e64d8e992e21925b73b9d323fa849e1fe3297d38a6ca6634740c81f4d83cd0b51c7f7413e44b2bf5c1b85ec3f09ba7487e7c8b7140d528d5c7f1d224ad35a9a1d2403b2838ff391db15313902eee5c7e61e0d406c901255193dbd0427c5f3aa6e0e83f15ca8c827ce2b264254a39536f5cc21a2a36f872684ac48818aa67ff5e32a0f95372b97d5192c7a05965ca05a17470994afb741cfe0d5f25aa82503ceb41e6246ab6836541c146b0a2aba0cd47cac1b2de8db5455afa6312a9da8524d29f8449d4c09d4d9763544c9d76699bc2e407cb8f489243c5ece6c6c8313d2b693b0c40686166aa4df1d443dcf9dc2303338055600e511b3a581d80c4f761111d8fc2ab3f786dcc6050c4a01c56b64ef73ee2b44e1c8c23d6856b1425892ccf4437b437267a36a06852cf43248516dc936444911ad45f291212ab47598af536caac0221736bfe2d3c236312864751a2810660874e027e2573472a825b9a1661cc7f031d7f0465de1bd3d6433fa11fb6d453b9a761047c067d1f6991f9a1fb918f6388f3d7dbf8005f300931affff7419415d9ad954c1415945febb11690b640f613acb9a8a9bca203116ebd4e7032c1d19fac83574b75a81b9ae80b0ba20e26faf63f7997f47ef45851f6fac467dd27599dce0be3d44a716ff2ed3130675a4aef48cfff3f0f416cfb1122d6d5728d6430d7930c6318e44b21e472cde0e5694b6ab9baa1ce8ea9db27802845d42aa169deccdc5b8e17f4d1826620a0ddd7291786c7868bdadd586c2922d1612d2cfa78aea66a7315fe4fc3604d221df299a8918d8048ddf44aaa2426c016b07c5091e2fbf19191cb42e77545d3d0c6c920827e6c48e905a7e2fbb41df12779db8bdc307cb363c67b23360973ab462cf603c5a9ab076a00c9191104b3b2866f40ffd2d04b3740adafa1f7a15f1b13945879257ef0636509190f21afac806b3701283c7589d18be95a87b6489dc85f68f52864b24f93dff57d6bfc3794513d995b95340e814995d71a32f6632fdd1705941d6e646d03ce98d2f4d45f8b00ca469525ba27a026eabc5d438c917942c7f6f0a2853ebfd5b3ea43e641278f826c3342000afd62c754c9daa509cb46aa3be0f2ab750165089bbf24f3f4007b611b5d0635e9f99901647c5f4562a51af3a56488221a923f31745300ce79e052709cd2be9f2716cfac26be4fe9c7310f7b7e54946c032080120f58e2d23918be92db3c3338f1577b72c0a2c5c2b3ffb7b89053d74e881b449c8cd1f0f517e027406795e802e1eed94a7bc53ea7a2510f5049e650b14a2c07534f23005e774f89f332e91c16191fceb25046be99f862734e580b762f1b4f30d11de5ccca9ae882425cace5a8f266ae22f175da33202d3132602ed873beb3b2c300828afcd760f3520c86441312ce757670ca56cbd3001c6b186c91246297a3f7658a37992b783ce3b5f7b972427d0c8d1f722ff3de63932c3a84039003082ee55ca9bcd629a0db827fe08f7eec69e9f9337d7c159820c92d3ea5c0f6dbde8e2bee3159d1a654c391674c770a8a29cf26edc3cf41f26d7ad567ea325b406797409e101b9f5ff4f9f13e176c457c36a79c8607ff4bfc86d6a77729e151ac07e1d834d6a2d339537fa2ef23480e63be17ebc16ff401766596e90d4fc95c01649badeb23fb41dd06abc312aa307619ee2bc832d19efc4acf588bcaa1fb3608ab1b939e8918f26a8aa5810fe1198a4ff1bfb1104c5bf8883eab0412821ed0d4057e71b4ab659ce0383ca04184061dc1710db49070a9770d834e15312a625b44c8dd3693b4432ed7b36b838c5c244f0adbbb5357a64d4ebd1971c1705c590b72c6a117c0133453cebf4593ee06fe45e58e5866394f58bea85492ffc54b291c2566d0e3987313507a2ba2a3d4f249b7e325350a3272814297ed23dd55d8e8f2f54a74f108dbe0bfb4ce3251f935013dfb7dea00592bc76573ab16d79b29e61f8f928efe53dac88bb731b7200082abc05afc7c8f37658b20cc9d797c77907e5e5cf0c0dd845fb08f3ee22e811949fc87c4e15b099b74964e61f94a3306ec7b1625c03b6e340de26d3d22a7a009ed70fa70809e10160601d823497f64370bfb8459ef707477cb23976d9282513c76a9cf4ed5b07a95c897bfd4bb0cbd8afa9ee18f5792a27f262e0ec9e6ab512a1823deb1e9810c5f5c3e5e700ed7262e389fa699155f55be9abf576abcf011c050641a8f9fa9b8423000063d986ae986781846b7fc40858f57cd7e9b1e34d0da52c939261df0b67f37735d7e6297675afcf56e1582629ff1f68fde49395f627e37929dc19ab85dfe187511697dfd29f1f614da282b945bb09aeba9dcee8d408d1d5e30c398326659858b6c3bce35cf9cd75104a04153d32000040ffbf67ed3f3f87079e1d73b7e79c7ecf09a53f81869c2c0642484fd9ad5daa1fb619ee18142fa54ffac838b1312e930ed433f7b6c63f863d9ddf9419204fb116cb3501663a1397cfcdbf59b76743ebf419f186bc0fb9e38e2d4a2283f80b04c9bdd5790720a5e77ec8e799d2a5852158915adac17d77df49224450d6c963e643808586693c0a9ac58e350cd36698d831a2c49d443566f22d49ef51c38b5b12c137b5825b1f0c01305cc0cf9251ceaa6a53b9e38f495639f51372a4334fa1635dc2b0bbba187f78afbd86920a989ff0c872a05ede328ebe78ad85241b85f0bc3e517ddb1832b6c728f50795385b916c2629d73cd53d70a9dfa66defdc65327f6f37de90f011a7b0c1b2e85c1af997f1efa5bde9560e67b16f00929e495ddfab5020e664812dc86440902d59451547e587db476f0e2f7b22c4c5d90cf365a8bc67408ae3de283ea1afd735fde97d25834177715a954d2e6be8ee0a38a0f90ddd00872e33f703816ac36ee7afd46e5f936e2efa6c8144244875396f2e233143bfdcd6b4d9cc32561557f28fd0579627748a411569ff26ba498402e813da922bdab1bb1e6dd82dbfd428ee54008591ac1bc67c5b2722b8e3f70ab8888dfdc34cccaf4442a3f737666f3baf8e7d7ec2972d7fb7c76b760d0de657d08c61f34143a33ad7e394b202b563376124dbc8381bc53b883f11becbd7a4e075fbd09a725abfb8b5f886513c8552ebbb652dc078c39cf3d2d74ccbcda3fd029872429613911d9ea7eb4b6d084ae46aec266b5727ae899dfc2949077e8810dcad59439e3d9d05508e69f7161b4d805a04c9b3205600f1d61b6b0376999a3307a569e5a1bd4646f8f9872d291ef27584c9022634f9208a1fa144acb9a709fb472146f34dbd74cc21f780ab721fd0066d1c5db4fbfda0e3a1855c8afde89d07446490d7caaa3785d11218fa8a13cd06215e8c18c7c46bcc6eac71d72991916cdab80332d98daea711d12c8aa83cfb86704925d564f0ac511c68429304b82b3d9d3693aa5acecc3cc6fc51cb1c3d029d95571d28b758465bf83984ce13a6dddc6cb85de5ed728eeb3c3b0c6ae7324a270338f6adc24b05b2680bbd6e88147305bfe3dd163a9dfa829a297950ec210b97515399bef0320e03854b3d3602b520351a0d42b0f412d31482082092953aaa935a1d10d000a48fa3aaa10f42dd49a438022ab4abd67c09600683ee53242188fa235a9dc05331917f03270b041277856713076f124d8cedc3959d8aafea1a40a248b06f0d6cc85f5e5f64332586c0ff17b45244df51142742ced01167ae0eeccf0c2f3cc5cbaa39476eb1f77764f326d24f2c26641d5d303883f1aeb7fa32d6018cbe0e4ed2c8a07b8a04e4f5bad8f2ea49f375e3512bf2d9753ea0f551289f0ff5fc3ecd66512499167e274d01b5288df8e35954e5738302ee20afe4bd1722a919663d22129ef3d0613e5b4ec8de000aca861df0236d49f8f5da56e1ea0853c2197a5b1fe78d634b25dd83f78bd31384ceedec4193898f0b605209e59116598a4299aa7708ef2db5bfc7ccf7d512b354e0d31bc31432a7ce9776fc33bf1fe66274690c47452821678179fa86be9a31d73086542b85cef34ef4b9228b710ec08c9b32e94c5146084225e9f75432c0e59dd5c6a0867a3e2a2c021323467739a14962ff18f75f80df4c259be03ec579a567464d625b9b7135c223e2e909280772bb94d552841a1574903ff6e0ecc5868ee5bd1776db771291826530e4dd8826dc1778f3feaede183f3f4808855314d80f8e2d2780e0d8acd628cd382361d435c36988210c81c64a3a2af252b1b9dc628a98f9c1501dae21b70144e8f2633d1b2e6a56529e665e7fe0f79c92b7e61ab9761b152b465e0462d79a29829490d81c035759aa1cbe5fa12ab5673d23df776e8c125821a36d958743a19c174d39fa386e09206c5bcbfacf6b9db06724a2cee627dfa7661883afde6365155a53ffd0222778064637ad7f37062c5d17884b0f7fb6025eeee4f18b86b6dfd8642ae52a2912103c0574a55fda6691b5a92c912bec8d5a23cb09fb1bcc1cd6d205f78dc502c8ed33fe04f5d1a2bf3682fad2aaa2ddfbc8fa24c4c004cb0e39a82c834dab2e5d05d804d2dffdb3f058d432fde958772eb9bdeea25ac6b484d5055ee2e7892a2e42c120555b8a90e7735cb05517ccc95785a9ce24599e2a5aba41ffa4863d3524f8e5fa960fa033516cb5a5ac8c2f3b93a286ba07334ec8941f83cb9ea73e272fc9d7656c5eb70f2176622e26b83743d37a000b5765606d40b25818bd8be92833155f5ecbeba08ea2572e8a8c08995d81052cb0e96fd265750cd1e0ce59812f991dd5b6a0d0a9c42dcf22a599f92a8c4a3470c428b59aff01c32a6c30fa61102fc56226b86420616b7c1b2ed0f623fcc6d25498d3adb3fe4d35585caf2d011323154a905175bcc6103a1226cd6381175ea86fcb258a673e5fa1e97b883ac50f1fa0c81225a10241092d86539a472ea8f6c28a6490b50f691b41cf9aa65985390941c29d0d052d7417d7f92a5e36a342cd9315385b069ccad0d97378e8244029b7edce63706cb594f45faa93011940cfce004fcb9cee0f6edaa27b280238fe2278f90d3514e467c5537e957e152af9c34468d315286d16dbcc1316b20bd3123f18ede56f99c933c6d3e8498446a0575f842b5c00a1f592b9cf8596319d57d723068dd7d30fcb37bc23b75f110bd50d32fab8bfdaa102d68ca1ccbaaecfe95c32c62a90da2b3015e810a72ef0cac52f1089329efc41c6861b32b382d24675d80f0044112132b5e97f3c33f3231c30638dd199d2c53dc6c40a3c0d05467c856e289dc67d524645c8c465425ab218e060dc7248e7495c95ea464bf3a90d7cde7b0c5d61ddf24063c3298ba1036f6171a714aacb2fe2e6d15b3eb2031c3cc688a20f38d710872f3f9b157252351449d2d81fa6d669a6f1ca0a78b7fcc8c7110e6a2a71e5a5bf76ccc453f30016f5b58837af9180ab23e8d48cea9e933b0a9b2db10d57453a5ca278fe805a4c03035a634532ade285b081d8a8c63cd572a194f242389e11205b787aedb806f05dad98347aa83230c05ba8fbf032c31086144152202a8a97371db954b409266a0a20d2213cb9465844014fc1a925050213acdaed54301baca4ec365630436621cecbd7609c5ca14b4ba36c5e78b8111ede65d8cdf234e5ac46b0699c482a6ec22bb98ec9cc75f3bcfb73162d4b7a9c202515424b96128b628f57cf84e66b7c2dc4d5cebeb55d7a1eb37a6e8b0389b732c0287fcb9f00d18c84a52c8c3dc4601de73fa8e679a9385e211d22a397e97f370ddb51232c1371229bdfa064f6c90c027e1877aeec5f4013f0313a072c5e663006e36599f1198bff2826f6bff8b2ba2d4dc9556e4eeba3668e1537010b42aeb413f82e3ad70f678fcc9b7b3e6ff3864dfc763afe14f044e3f7531331828e95b3df37edf4a70351ca552ba7a3e62af322465691e7f8eca99d288d070aed333f5a0b02ee5b94064222add9a2c57049e834f77730bfee5a006e41e3e26ab0dede8050aa18530f234fb86ddb255ce76637df426bf280c6ad8883fac75414bf9f49c61e581edeb42cfdab23791003d1558a3ed381c48b4584622b27d667f526ca1d11fdeaefa4a61b2d55be986e6e90993eb704220cc960752251a6363fc817df830994cf52993e0f7ccca41182ad805a93fa6cf27c1a2885a1b7162f9c0cddd0c7795abbec1685061f7889545117600829f07927acfb922d292d7e3720b975493de19901b281a724a05cf68f54ca4bf63c9068ade102a250b1c846fc4ca51d3e03a95a6b1d5fd7256ebc2102235747c10059b6fb0dbf39d24c40d8b547711c128ea768bd6043783a2043c0b2a0a98ae16583ddf053c9f992bae0fc20649b380fedeeb89165e79927ed407fab30f23a126b106514933ebb172a00b3f87489fe4ecb2ee4bea5dc5c07146bb9f8cede7b174fe87c93617a2c819b614b3c0771abaaa621766ba4b6d0121e108bfab9729ac70e19c75500192735751a79ade9cf1a15b21ace2ab463720a4645b96fb1dbfa7bb1f6e74bf35c42ff655c644540e896db7d4e13fd0f9742267b7e0e9cfca4d60a913ee9f6ab48b94613819f82c6e063d3a2b4904b84c1b113ea645fe7e1ee2725f42413710e25ede7bf01e0d875e3bd3856188b75fb81911109ff525666ce2c2a568a4fda99ba16f46ba4f141a7be46e82ee8680e8b5cc9119799a53ff81393b2f8ae66e357185bd343cfbaee8666b9f1308fc4bd3396672b92ce67a1a56216b5d13576ad5a994a2ad4a29411a9120b8a35741c8af408c51c6ea37c416b9965a40916c9a699e7eaa195b6bb3d6a57d4aedadf68aa7d22541dd870a6b81979d70e5405741eb3e5beb77f9098bc66cc4eec02d1dbd67c8681077934f685624c1e05c06d4fa07a06b6104896a16a7a9b67c2b9c95c16211321129cb7cef19b4dbfeeace191f9abd48d8eea68c9537b9195db439fe814660e473e8b5d082761841aa1d1c0c8537c8630f1394aeccadd3219b939df30bbc4c31001c78261e17a3139833d03d2d73625cbcc3a26aba128c202a51f434533ae9d612f72a9d8af90a23a85a6204b45e2276673acf59cb66bfece4efd83c9b2b3e7ec027b85301e1afc56ebdbd1db4cf8edeb06893f1a27f175b81973b73ff225d71803bfaeeeae6209e7bb24ae42ba5d51a5ed4811b68f498e462ce3b1c32d9c4ec92515d425f69f489379338a93d1b2414eb88322d513a650e27597ba5c2672312933b98eb1bf11564fade5bc3fa9756bc81cda29248fde2467a651985e3ad5dcec05358667feff4c6436868a56cf41561252c9304ccc33d82a450ded7620ac4ccd3e06a287e2b466442c239696b1e9442ceeb7d8d6e5c8ab3ca939b2409f9f142910224061141fd30467a2fd742c0d63312630e021d66d892cb97b16e148fc612132d767fc1a4cd05479d963abc48db380d7fb25c931e5e548354056801f23f080017a43fc67bcf14d7e5a9099fd95b31cf63446f4dff0f87f2fa3e4b6ebcf34fe05ec40bc3f6deb3234a74467bdce5c32cc127e01325de2a71a1a2054410d17be1e92feb17fd7d871b1b66e8c3b3afae8b916b4bcf4b6e401d47a16df7d5b68411e5a014e53748a95afcc64e46ba43bbecf5dab2ef1b65ffac0dfa867a572fa6233c9eec61b63d7efff1c28bb766b05fcf5604baa7a2304f7d41cff16e48da5222690f9fdafd03cdd9a965d72093548106ab8ae10b11355e008718b4b8699c068312dc53941d1d45434d4d18cc8f8fee1739bc5732f3b974efbb88361b573d28632f0dda6b3c76ab88bce6f540a903a009f85979591c7a50b2fcf41d158ecd1d23a81060870184fd622b1681f26212a43e457be68659c53e94c589bea44e070303088fc3784d129eb9ed5867b1fa2f7a5839515a79ff837f50dfb04de0ac4448c02ad36b0aa51ae9feeccc8cb36e8e8f204a567aee2579e9ae887c3ae36ac9dbc0cb684d46563f289838ff0e58e8c1f02bed328fee28a9f1773eaa9121e35a5800cda6b25f6428ef539f2636dce81e6fb2b7298c01dc9c19527a6722c67b21e8d162dad3ddaf1a4c0c9f44fdd7b4936a3f9a3e6741c0fc24e1733d072a20f8ace0cf80e96e3e6b859ce06859794a9793660d371bc5d1c419ecdc92e81e51c9809064ea9330c435438121a8d4d2c6f64083a2ad44676e4f8648fa7a1423b0e33373c406faa06d09232528df395adf78654adff180974abac71089ebd31a10060943353a25e5cac0c1e51ff5414da5eb6e1d16b46a261b05a50966c74ef40973eee2e4383be5524fb039bed3048a32746b002f89a6aecb238b2b3b319f545812f2b19fd3b9e72e16b0ef96c806a6dac13e39c23f3f90822bc5a70c41f20cb2bdb66315878e1303ff5c3b521ebe2ddf5560ceda6691cda0353a75be82040e64e6423300ee8d44e6a038cafc6b4c27798951603f86c038e4d19ec2a0f27a7ff313d0e1b2234d519e99e6d1f104c1812ac3f6780f25375da0403aabfe9aeedfa48063924a1760b68a27252a942dab39535c303114e3eec85612faacb99abce39d865cf194e6563add30010c5397279dcd3efd9e886b960b4af03dc9d043ecb9cf5fe4507655c1693eb16a1e21b30550012707028bd5c838ee389806817fbd15363a8611a49f115ed45e88203fa8f9970e1fb60a62ec371ee93bc8c2fd55c9a9ae67647341212dc411a2a52af597b2b41a34c60d0fbf1eea9a9b4572e595d027a94cabf0e44901d9a4c16f9b251362dc434c99181389d4f556b6827313e85b6d4c80989077f5717d6505714dacb6aaf78285282a68f618b029a72fe1d7fa4bdbdc498002ae73608c8b627aecff816067b26ee16d5a6c77f2b639b0503c00de6a7f202ff1780c39aac04446affde2a65ab2e1343cfcf8254883c7f2319c452ed22aec0ad2a3a0cce10ac8970bd87239a9380e64fc4fb3fd6076de9e7fdae12e9001259eb053e2761e3376ed183cc2865c6c1effeca52167ece79f39fa51630106da5535e19cce63ad0d3f371d937d2bb8ec4a8f818527f2890f7c81862fd17c10bac65330a4dce5f1e286371cc1dd25800c7847a54ec9e18f21ab502d6101b834a75edcb10e2417e3c1ae5e6c8da63b298318d2b043a6db2a7c896dfe7f944b2c86e0d050de9a04c7ff89f4573a0f704aa940effed1a189c1883070f9a42d6ee544aec0a302ef619673c6a353f3a00184e3d115c790167467f45eaa8b549d5b4837b008a153a0f33b5f4bb9f40aafd050e8634f037ce93680c0f3ce46c2206bc6a7e006a14a322381e89113ee30d43521d88779e63399e588e5bb7def44f32f52a64110b2809ad990097790901150d79761f9dc266e5247307a2ca0a028753fc5c3478d91fcc821ce10399dd8bc3e84099b5456201006a41047d31bbd8244ba8cd5566be277c5e058612f89533824a4e50de82e4ecbaaf15b894beacf172300f59ce968f0140073f905b555427d4553efec72e0e24fd8e220b79ac7eb004ab66bb0979b8292cd62c750b25eb8f6655432e12d6d70221121f4849dc0f96a55d633ea4f5011fbb42fd88592358b0ca22959c22006013304f6266775483f5fbd2ff572005cd257e54bab077b17a773d3c28c9a144dbb44e7d9080178e956e5a647791957d5e054171a1dd0366d70d78fbf6ac2095afc3894dbbba00440593e573e1a7e4574b32804f105ee495e8241d3340710dd89819d040fc435b801313ade54cd1ca0b43283bbd3e49c2de67df89e635eb75744d4277669a34d600bcb186c7666756b15030dd376038d2c833b37e95cfcbf02e4d995b1667146496dff25e3366c2dd02f020a2a68f8adc4918ad3cee9fcda4f60fd6b5b1f8230aa70175d9a61c7bfc834331e666185d2e12a2befefa206760ab7e45966f8deecbe5fca43991c89dcdb7e229fbb9e55be127d7049475fd666b1c3a4030ef85f0243fa695abfc0f43ffe53e0b73d860360ca941cd54cf423d8d177804bfb434b9ed1d229a1f3a9ea6c252f02f9d4ed34cd5a0ff25e3bef5cb0d2836006f679848352e06ced97645043a7275304bc08de10a0b557542f917e9a055b6ec284fa0c6f71eeb4c683848332a27413e3453c9c2840545bb255b6b779181a228cc159cd6e938f7681c4a9c2f064f1e1f877dc506c842313eccf3776fcacbe98a6243bf977a45d955ab64d9983d791f3d63e53b88d113be78455f1de872710648116cb0d882df1368a5c32ab69ea316112ccb2654097081840da5c4f90fd065643c1144037e3fb49e93d59b67e62cbf117bbf7746bae1a786f76b9b5bbd7961b2c013a520237321f7db57711a5ac9253d93fbda309e1b614ea360526ad657bba75408b67a7d25f7abf3afa49b3fe4c4028ee7757fd06f17b34f2e1c9140d6f3555b85c1528442a05659662df8e5ba6f0849b7a905075fe56d5e6c505fdeb0ce4811cac0ffd785e15c192154f78a5d7b099b06cf5d284c19d63e362ef1c6d4f2c07724e750d1cd1004aecf018ac3cf4a0112f03105160bd5a55f8d9edb91dcb8e1a03b157bf12e3375890e3039f983212cea7bb52b21d43e555c253f0b87590f5e5d268a4af7d8e526bb09d4b9a0c965300f253f65dd26ecf8c2bdceade2b5d410340ce4ec2b9507b47e64fd08f357d0249588c5c4ae2d29b63bc3226ad482c73ead9e6de95cb174f2b1898310f1d2010bbcf9b00a8688cd53f21679271a2049b71150624a30bf28ecf896cd069a6fe71f0878e4b4eae2e2219a280906d7bef5dbe7228b03bbc798ea24ffb8380e903c0dc2e0e61b8280c1eb65930e95474f48512400ea5b08c9625a118b7d1e23420a2223385e7dfc9b450120b4d06b7ab41cdc03af52f510c32674c6fd2a6052566c2ed8b088dd5fde9c0720fb61bcd8ff8e9fa9088091e90ee4b6f6327bb6c05c1e32312232bd4cbbf4b0bcb612ca5e701c980bac1c78aa5fd906ea01841c59153d2fc8e5880faaefd9c7c32fbad9f98e7cdb1b63ab93dcc2bca2f11d38303f8cf3309b7f568625aacb696c0bf00b3856c35d9e4cd0bc8dba77e013ea4fc0528054313c542b2e13a076fe5340d868ad398a8c807a2854d9f06b4abda31267d3d14527085ca02a87634574137b902b583b60b6b2d7ba2b7618d570518e7b97f8b1b41d6009afe9b1d551e8e0b92d8e9c0989ca78473a1dda5aa419422c0df7b4f50c0be843cbb7c19a3774d1940fda59f556372a564392c765fb98b9aab448529fa5015fcad8112e01fa4bd0adf96b9196911f1afd44b728f417111d1bd955b2c1552b78ab2d8d0b7f574b026daef3194f0625978d5139d70c27a6506d96de7af34902d929a9348384e0a81883f77f0521761463d424b187d2530036dba21c1ee1e6362925cf0a86dc7bba09673e9425e7c4570205b6094950abec2935d32fda1d72335a863d316d5aaed51c459203df2c44478e7a47190c5157d6f3b7e9935ecd8b25b7e5f9ae2e704a9194d1c00f1d1ee6414d24b717d20be3ac9b6f2058dda9c702666e8d77803acf9862a7c157f2eab3b819e046facad1ec79c05a7ff701cdf43ef0675eed0c83e2f131d4b3f70287a229021b384a7b93329bedcab036099898262e5f867338032c5b16507bd574995e3d3563a82106e8d5c7bbc92f206e14b2094797f821b4d20510d534bcf839d4037f2d896525b7f0d47face7a6a1bdf6053eb3f44cd5b54008cfa252db1a9a888e95f63d918e2eb98a88bce56e972d44fc278e1de67d708cca6919364bcec99544818378cdfc4cec0266a1ac7549165ea60009221c6fecad9ec8e394e6377970ac9be2390f04cefdc5e57b1123d5f8cf94369eaff6463da9ef0d8c0291e84738bcee727e556ba5c5883d634b8c8beeb96c31eef47447f1af31461192f80e320f68ba96ca0c0dd2683fa1606e77764b0276342cac0dd602a1eebd89f4251c1feac226a8533acab5d81189737003c665712d3571f4511ced0e85289d601ad6283393445469bcc248837eb07ca470570a13a2265336cc0b18ae11871d0199a520e5350f1fe514dd603982c22d74690d71d5410486c967cf0468ac023e79091c4ad4c0b669b5c5a81d4e368c946bfbb10011890027531b236ee73d6318abccabdbf71168e983f46746fe744f140c276176208323d20fb57c60932ffc7b11e6106190a370548c37417edb993a77b4dc9217921e25060dc1178d110f9d4cc0d2b08c56eb49b386ae4ff1f8927750e34ca8c494c21ad2dfbd5f57f9aec80055da9f74314c67174301d24fc4eafe143c8d710bf43d2d7f9e45cee171a2b6447bf1618188371a75272ae41ae5e3c6d91bf31e33ef260af27daa8428aee2d6d89698f4961ae78692a9ad8e95a344e7b62db6d0ecb685375ab7baae8c1a5d576cd6d7304c43add834a98b14684837528634cad01b28d52949b016ce5a9a075e6d9a53697722d02230f8f2aa0fbb97a3bb3fc1a58b3fbb3d69bc83dac64c239a49411541cd84dc0b36eaebed8d190c1063c00ba099671e23283c34c54ac58a941247ff3c915e967743d9fed2233897a6ac3bbedb81b7ed112ac696d162152a32fcc13d1b07c1dad1b24ed0cf311e691258244f67e2b4b724f7371e314be9d66f85e9c1f2c1b8175a91e10771dd504ac286a171d37f98590044a60d628601c824778a0566887d9ea6a7d0711dd3886c40fc89c65fa773c100bc4fa286d8281a0eb132d94f691132ddd0f659af1f8e70f61d5f3410a247500f3b0ff643d1d081a374324477889f0f485994d01c0bf61ee212e4af73f0432f1c0b783ac9528812266aa3649151a4d5d487731215bedcbb7f7ca1c9b521705305fbc9e2931df6d05672ccbd1225c44642e6966e52e4223139f18b1da69823ff3bbbba45ce316c5de927c189373555f270fe79cc4ef642c9f8a32cfabf363373388c3892ad19d61e469b47ce347abad975a087becb30c9896709c0bd4b7680312073a702e491df8103f7ac6de5ae6185072446a15f06e572fc501a2d90d33a7410a6ed733fab4aef2ac5afc018635dd6c5780c1aa2ee7b247a2ee69df9fed20e1e8bc70119592af177977e0041428c6ba2aa15b36c9f53b49be42fbc598f369223f404d6d4d47a55ca832e5a5dfe14922974e813df9ba30cf75eae62d92d17bc3e3d8e45af8b4f51541cb938820df7219da74d2e9f2a93e6143c033afef52aba3347e6f0cf3644d62e486c9ecb57d884b875d10493aa0cd9bb5c04f1e06779b210058dc9bf1b86e340509bfa5665a7e393bad301924fb573469c4154bf43b0d1082539443842abbb8477192f3a63cb6693a527b5062883daa3620438c6c4c90004710848e8c1799cd32973f59a2bc8a939c7f04813f132c30251dc61328222cd01a31ce43114f99d87d82036b35c65a092c30b23adebf8a84c9f6e395d6bb4753ec1ce26fed3bef09e7cf45d1d5875c666a0ec06ae3c5c6ed2bcf4b22b0552890d502787b8be52109c7c469a7515d4e2d6c0753eb553a9db806a4f03134d365415315d5e4c8522fe3321d82c9e78c89af8e2380e285af1731d352db706febc6a0bdfb9719f4f253e76721217454622b5993f124f8a00c580ad59fd3c772fe6261b8787203cf4f89be4c0d0767bbb7b4da65bec81909a6a93a0b3f513998b9ca72d17ba1115184877c980e507dc26e3db3fc44af5f3fa5079e7efd1792c72cb3b2957c3ebb46b7be7dc8e1a05b960bc2bd56119257f5ca9e0c0523a5f5339686b147cc500e21ed6827daaeedf824c2c2b9f04114577056a4b8732e474d556578a0b7df9341d27f55d8885427fd87bd973d9b5e585d28c2327d0585d42d9b236a30d857145ab70d7eddef9cdc16409a89324fff326876464b2e900c1c3bb6d5ecc13df4bc5059686da25698729b2f719e6085fa15f7200c490bdddb3c3e93af2c60e3e913533f84f7f1fb3ff77484cf2d0eddc8607fdb7185222e45bc9bc593caa1a9cf7eb95eba6c79bf05693a0c04dd78a530adf4cd00ebe2cdda6b7fe24a2e3078a69c6aa1f72ca3bd521b6ad815f1f44d33926027a8478a713cb51d6f169313af86313dfbb4fde2722af52680530c4b3464b80e270c2f9e2d156b9c2bde928320e1c666b0dca719755112cafa8f44da339b767353f802bbc120236190d9e1e31240125226eb3207ac3dce8d190596652c2fdf474c19863c266c062a449c9ff0c92ab8c8b05ea42b206a57af77b284438a58d4a57f9f9cd8bc728e28cfeda1800aa4f6fa401f0d89bd4195999d8fb7b71c05d4d6b8d5b188621f88d0b4eeb9420eeb9082089b8fcd716c2d2ea1c1da63f80b0b91873a3d3ba7889943b3916cd07ff457986a703b800335405b43e5b9a4db4312a1c0bf865f34e5d52396166e82ea7915f5d8d5bb80475982fc1bb4762ffa4320ad8755c8335fded4bef8d2c1102d4e200d4fd59264c71363bf5fe1b7c5eef28552a441d750c163eda58838f261480fbd6954fad1b7ba5f3980a13d9c1af1677a9a542051f719a71f9cd60616e261f0ea468e43cf3a1900e432cc1ddc6a99a8291d291725accd6c7cbb95132173b2b22e7080bff12ba5d9c1176fff85855b5842c8ebee8a07a033649154190433f142db2001c43cbc27d5d4788908be15154f0f3af6f51814fe28e3c5de3d90d1f3feafcb52c5fe8fae2445d4ac5cf49b1a7cf7bff91c5c04806a80b6f06c59f34792081e76a73519bfc37008eaeee5ebbb8559257240094c0af95d5c1be0f251eb769fbff440edbee963dc4afa7bef342170f0908d2053c77a399a523c28cb32aac61234469a67908bab3c268e9c37b118a5d289bda5c442e7bbba65ead7a8a34f56aaf0dc7ba6b2e6c6daf2e5d7ec35255ed155981b262ca241e7e7c79bc2a0fdb3f2248cc4fa74d16cbfe4e990ec518c50a9c5d3191c0bd1103aaf4c5f9ea30d2fc46ae66b66294a51aee9d0b4aa70b38b093729fe324c395b766ce8d2ea82a707333a9195cc6c5f4d597618c4293f9902bd75b753d9f6df3813a7142a4ea265a76023eb6671f77688b662a99c506043c4f0493d3734e40a2a8f4fcfe5dd42dbd13b4724caa45d89bda002ccb58c58cc5032f156fe0290313789c04d39898067deed5c861518f9caf00b038db296001c63874b400720d39295a8f82a5b8d73a2f37812786790c2791a35511ad1273e74853aca4ec6e79f1219783f4be85201db1a0c59016588388800ed30aa369587d081bae09e348fe93d729ad7643bec92f099c08ad50ff1396c894962d1a2636e3ceafb30e9c0ffbddf5b2a5875303bb1dcff2338236e555f081920f31930e290eb328b6a84e58bad0f4de523aace39713f2a0a9ac48b7fca53463415c01d49bc29be241f0c1dd5d6da78b528aef794906d3bc99cff744e98f778245b60cd1323c039a84c174f9983aa4ba174c49ba2906b4ffede08c142137f0ec71907ba6e4be8c6f73604816110279e91edee572f0244c05a2dcf6186081358094689c8cba95e63834d32c85fc45c120f90704b7cd0f81c263aaa053f712346bacfccc2434a3a8b69a51028cba1bb00b76fc5bbed917e0e854e006cce73f79387b11f25dfc081bf6b9ec8318cf945ed53e6ac735d636539809e3656c57fb132685f998217d4aeff0199d99ea994803d62f5dd2bb6c2529be7d5607322dd8012455d51fb1ebb2fa2847df67b1359a118280b5d5e30506a25dff83788d17e5cc80536c4bbe8fdaac0579a675429b780d6d0ab48b2eae1e483e5f53d0f590abad7b37caad873e97ff4300b24b390771f9994c2339b437254efff7220d520e6d686525bdae23b3f61c4694b3c703884f652561f6058d783b0b131230092c32211466297bdfd92927c67d63e123c9595d357cc8a61dfde53eac620201b9b687439e9bababbf1f9e44cd81c4b4478b277e66bacc568dddc408f32e8d4ce98b970ce9d7bc46f925699434510f010fcb9fb144ba2c8350fdce02133ffdef459cff4411ce3647ff9f07b5832705b9e3b60ab1c4597dcb917c6f096b53e01a2c63444f6d9b20cb9761b8b8cacbd03df887438235f181080d0a5e3b4109e318964560426fd2160e2fc5094a1910321024c8ad066630cab653f9f934495cb567548bae0e9aabd9c710def5533685bfe4933d3c91c9d4b90b1ce0ac1e28b756edf1fe8fe8fe5ac4154273d37b9d0d4e494fa711facc14ba39ff70221c6821b7ad92edb65840f4cc0a2977c10a17a405607d7749ef7e8ac10d17cff110b873fd3d11d9cbc0c02b1fda4e225dd1ef7023d805652d03aa487dff6d7696011aaf7fc970aa65bc6d2efa4bce4eba2a892cf68c1920fe7dfbc138b28059ce336395c8aff064a08014320959c9fdc206db87f51ec1d841f7088cf6246032103aaaa9c5f9031ded108094378fe403aaf212016eba6ce583ee01129b58562ace2e460fefad7ea27567e64d207db9503034dafe49e19981657c77c932442f72a02b68b6a9fdfd8bef9de1bd9f263b6c4ce8304feee7634241255b6971d84aebf40bddb7ded27e0130a19c42c969214b6349279b90fb08cbd62012652520fbc2d534345466c2b1906b8c5611000f23d2db8fd2255e3af51f175f0b07c33132741f2bf51468a1c547a29aa51d1965ae6a15de93e5c1b198f7ca67c28a0b098eec1b194926ba9f87020926797f1573c665d1a2bb2546d7973037ca5c90c705c8953022b01eee8cb7f76aa8e85d0d4e0cd36fffd115a8e5978b12994edeb92be8caae2ed97ec7c69c9cd9845aa88796ea8eba6d4415cc5acd652cfb7ca6055d2ebbdd04b4b39d8ec27b03178a9cc9ab20aa62c3b983f5cd83cafb8d25a149f3e83b7419da911d80aa5916c29b50d53e157b9b901a5f4e787e9e6bc530a9dc2360fe84154427a2eb6b06f477a501c34efa565d3a03a43cabaf867d715e9ea6420298b526f6eff00114366ae81763a7519275cad4fb0c1db39920eba9f7dca7a1e905de1d8c5e8886fa2752c449753a7ec131c77266acbf954636710496e5fe0978b7160e0f0661259afb29b0a9f7491aa9cc06578930f0ac0f29d4324c99a0d4569d8935a9fedf075858e1428920bc4c890d0e94390b1f5a92d21edb313e474a154fb1324811269ad0fc0bee0e42d4ab12926bade390e66f9936b08463b387f72efb5e26cc97de6a3e07c19e055b9c25de556632c4c04e42a36db1272f00e17d54a48b33faf206ae4cd2ee3597f571d36cc134380330f140a189c6826bcac1343f1aa134a34cabce6f04b9f793191e42fcd7275098242d45e8289dcabc6cff01fff96d2a986299cd38c01f8852945477d3aa492d8c290e780ef3f50f5ba688ed9525b30e6a7c6b2ad7417274250cc9d2d169292cc154195cb5cb7266e2f6bc10c99a852fa939fe9c149b2c6122d749de1ca01715dfbea42123d6ac7ed67c2451f5b29a2a993a6ba0e20d3f1d4b4301eefd15dae9565a38d3522644df910c7c99605cc519ec3bdc130ac940167cdb310070687861dc1d3ba9c65e78a9392e365cd5d9fb02976850e96b302be93fd56c6511609294620983f3455ca3e21e92f9b35164b019ccecb81cb0103807b327e76634a2887c2bc21074717ef101728ddbb25515de3bb8b287c9051805e7e7f831c23cb9ab17c6381d439a3d5c28147bdc2861ec57162df1b3e0a2667c0f54da3c6001ad0f62df6cb6cfe4eb4e2eecefe9ca65afe914993a3c72b48b4255b4b945eae00725c3784eab04854b21e937650258c7b0753f4f0b616e84df894e34ea812de304fdc14bdff613cbaad134191cbfbacb882420850898446dae52fed72af530072cb3cdf6fb01da714356fd40b351ad98964d26b9c8e81bf5a366c2d1817425c6843a1395572189e00606cb7e153614e7ee06242d2cceb827b6453c83310fc448ffca58294b04317cdc2fb1c26a503c23892d20d330d08b204fadde8cd38a59a36f38a732b2f0f492d543a32359050301c492209b3c2bbbaaf4f5ecfccf705a52828804119f4b5d4d4864a7853b01d731a7353ec7a4f588c11073c834cc0b3f107612055a2216d2581b2af48721bea57df0ba39f225df906321162e5fddf73308f84e7e99d2fd7acda74563c307580cf93c5615c62ff352e0e76fbd5270893750575e47f1e3f6f9bc33a8084c5b6ee5099ccb212cc3f42af52d3b0a4d2e3817d62f46c66abd2bc15711de1a64993f8b3d5d2f20761d80b97ff7d007ab5dc75c15c53aeb42a517c368c9bfeba2ab0dce3487c43d9ef9c033329239cb857eb933dd0bd7c13635cacc1c27f9730727252ea0f19d221604b15072b1718a308840fab9a0369c5f872b5fb8d5fefac23b565afd14bf3e3c7f1d0f2aee281795656d2f0b8620f5d9a2a0f9d67f302d6c6fa06104f88e3a1c48dfec4a6160daf92468af7543f10f55841d27b14c38a2a9d81bdc94d99403a8fd003ce991c596f00f5e204dcc6d29e0f58a69ba43ef795b99d5751a8e9f331a5c292756af1e5342914139dbbc8f232579f0fbec68516bf3f3f6dea1ba4723af90f975bc3eaa439fb8c580323216d4dbb741955d7a77628c638e28c00104111092b77e666a9bb86fff9a2075f040e9e0dd1feba39ce8a9cae71160e5d52f03fc0ae4ee3bf40ead60f8aaebdb6a2787134f94d130b53d0c9402c43544284124f62d4690d07a99c993abd86438e9a667708098e88a0626a160460e87144a821a2d06e9c86b4a7c5e6730ea867e6f482d18e195a92adfc0004fbbf563ff258d2e0c752f40ad78b5819dfc1ba15968d4c808f9116ddabb2035803c8da2bc5f780a60bea7f51a95f587e5a11f06d7374c24b33f4f231b78980afec52f5f6d7f971089d00c85565b217008dae1565f8f138e2f9eaacc529983f2dfd5d0db2e44bd165322231e634569033c9459938d7e2b5adb411a43a354fde7540031e3fee462241d4d8286a9e6d05cb84c3b8ec6c8f412cf2bf7a0cc0bd17c5a1102bdefa05813570253563f2b0f85546ff2de70b3bc311f38124e8e8782644bc28e89a9dc4716ea423fd7a630fa011c9f006c824782cc6c405b8e9f41907385c4cb9a035e72103953c47ba17843aaf8dbac7336672e619649484ab795efc5e8464d0b19ac103c54f2e4e9b8e9d51a13027a651d3acb047024d673784c6154e43313c45473e62db3271c7db465ffb534217e18b16f0cac46c724ad5bdff81197471683c34c901209d50e8807c4b4052d033351a82c782f3bd86c01ad731c3343f5e06631d48a017bc998c77d54d00f0cecd5b153f24b4df2669762232275e13ba445538dc6b4024d695c1698b083ae354001d1d699a850accd2cd5dcb0d645af1bac53c7d92b27c2cfecf1d5298ff6b34f976c31fcb27fce87d589451d5dcadf66434e4705e411ddf3e7cbf1fea9580e097dc0522e3ea71cf6920549e3e2e6b6fc4c3f6f9d15304f3d5a4a9d203aec8a10df627b8ec93bfca06a9ce541cf86b5a28901fb10fa2509bba8ea4ea83c373694e6f87d4f3a993b27999b5539c425939c334d81eacd1c67a7179e8af968c3f7bba95b7f2297fc69c7ee2fbc6782cb67db03215f97ac113b36f89061a5118188312ee15caf447f145262446d483e16a5f3e010dbb885130817610e30038361e1ac69350f07b1cc9f3acbc6b0a6e249c79320c0206b3b009f09bd05e7cc249cc2bc56830001167d05ddc1f8006077860e36498f3006553b91ec8b0e95a208cd2430e97cb6653196a86f108f2c638abf1e144d6722306220ce1007a79283c9ae5082835accac931dfea0cd1a8632bf85327781a1e316e911ea8a372d975cddfb2b3b159a692137645c63b4754ecb0ae9f8090d64b61eda3e14fa0c00d139c6a15320c652d0f8a64e86b451640ce9abf2fc8743a3b1d072388fbbee0b064c6360c080f8f2f919d998491d616f95b91ca0831a846a563edd2b91173e481f0a425a3f256e9f35caa9f434914ce96959d60791082613f57f6b0efab0beaed6b986179e771d1e7e5de25ed6e07952ccd779d973e519e5800f2c0cda40f551f7afb3af42aa414a21c46c32fd541e634a1ffda4e282094d03908c33da398f1500488c1bbdb801c2ad1e42684b9b609fde14ca0788da5757126c5b2663c658db7038097e4237a70f1ae58664086f762bccd9f75274f4682bda928b076ec9f5e6269c0a5623ee74cfdd1697af27ddacffca66d72d835ab04c81e9c50194cb8f0ef455740cdd84264ec7d1d9d0ec93bce6ebe2fa3881f2838bf6f734138648705f8ab6debe7b96eaa31b80cd89bdc6e659b6757e9639a4a15e3ba9c0271fdbb778720ec022c4ddd5f391b34bc4bc84b961b443a44ffee1d7462b55b813508019e1f6ca04976381486c573c6264e4dfdd60639959eb4fd0b333807b2b1d27c853645b78edcfd56d8b355e5c17faa2395104e2dd55bf9fac23cff37f0e2c4e83075343ee8c7e060084dd1aaf4f52123e85a7d27eec97654dfbf9aa29fb3e1b6b4a25e1a9038d67054589b4af965f4df84533c2d69829495275274bbb113ae889be32f94f6f21f971f16cb539f74cc991d063d20de8be5ce958c8b0022f2c965c1aadfb1f6953090011b3bb2721a73609c65cfb8ee0f0a5629eef03e76d0ccfea0eb53d6a8f93d3c362f6ea3e46b8b4047fbc2c0732e4a7fb2777716772170fb75cdd734c19ec3668315e35899e13ed303f97968b4e65d2339b4d266b413667110cc8d43f474d8aa590603ace59dd40d187925214817f261acf318ceacc15eb04482f884eb9a7ff94c32411fdb437575228414d068fa124e6b38f96ed720b1853fdd4cdda59cef055a8f98fd88fccd6de4bdcd1eea1a04f708a4fbf8be522e986884d51e293618813b6fedb0d605b065744527f3c3a47d2e1c083eda4bd199b141093f30d2c13856eb9c6b0428341ba5ef8424745fb9819592a1e68d0a9199aa4a5009ac19c1a5e8e7eae3366097a19de0a85f8cb0802003a971161ddc818d3c6bc85151b6345d9743f3a8664eed6f21cf16576cd15c42b7e011be268af1bc96014eb786eb45caf5486ee59a631b15994dabd1206567d097a0cde537d4005d5c6f85a61723d473beeb45560f738fd7bf7cacb5febbe6e6723672405e2b807cb9da42877754c55ce95073be6eaccaa77dd6839a847334d183765425a56ce12e1b8c8f566bdca1e03e6abab2747879eab94bd65ad8f8c36bad80f66a93a893fc5359184d13facd6c1559f9a5fd9534560106b13c6bec9e86c9ea951dc97c81bc77112d090979c75d669588184d29c901efe2456d6382ac26cfd9adafc2f57137a32734ede6b5cf1a12fce54c32a55e6d3d7ffa00ef376b881f57335a7ebd8294df22852df0b1ea5ad5fbabbb1c063ab5c27b0b15fbc26fc670728e32bbbbf1b78ee15ee150174cbda7f6a61c7438be51c41af2fb6623cb33d4f9e901841c3211a5e41da02bfa72d4d6376ca040fbfea9bef98f1781cac6833b3428ec409a71cf690c5f5e70152bed1734978a07b1777bd8729c498b7f9afefe2297b3998d20abf3f4333493341d49bb26fb42e1919c458b8f445d537e54549b37f9e91c5a41e78f19a5e664c7617f6e434dadca0db580ff6e197004c073aab082f893bd364299cc65135c5c9ca7bd7c52aaf2134e385e6fa9395be6f3bab079a48181c54c238800493ec7651ce53f71ba0778775edeff185f7f37b4220419cc6ec3d6790f111d87a70809562c85c6226fba4cf41816124d9d61c8847839ff9b94e9d235735285037d4a71e300e5258f5df3f7cebf803fc25dc650d1f9d4d7d2836ce0909ab0f162e994099dea6c254b46281854a5d74168b07b26a001fe7b1db7fb8d1ef8623be74180711c1adc87d141c5c8a6c296db7da2f80660f4f1d5f841357d88deb1010fdf5ff6231cac2f190aa6cd07394f05bcbad827d7e2aecf8d3053d7361f300569a15d4307f0d8fab7a0aa0653516a1953a09032e2fe3a3e68c401bf9d8043d54ac03f551b0c99a0ea51459a387d9515d0bd8419e289607f782b028007403035674dc2f50a747ecc002bbdc077c50f7263bf582ef88a28191ee849cdf8cf0019070802db4c82ff47b786af8238dde2a961743897b550779e816cefe18b0f03156dfb86b6ee3d077b695381f109fe7d2f857500631c018c7bb1907b0349e703c46373cfcad20fb4d66d30a0265af6050869f5d863b9a3dbbec3176563b9a301281db79f6f5e79193a2ee656e5368f9225c93e0d7b67fce435174c920574dfc38c59f8893d872653a4704dcdb51e82a9c6d9c9bc25b270ece92cf737fdde1b2356c5417178b548f4ea2032245b1e95ee0c0db6d188cf4536eeec638d4f1e22c108d2cd5b2690cca56d71335b0b4a1cb3d3f2c3e974bc5768eece9344a4488ed1ae3078e24a6b107d56accf340833492a4ad7aa9fd38bfc2496a3356125a40bd3b048e71fe9bffae3ad7e8851e77e8a83e64183c26e88a93fcc7a43a80a9c3691c5c23e0af4e58e6d8dd5c78b1779311ed907f0b0d74b2156a9afed909ddcd880f681c21371c8fa30170ac074e56d605b540b8c9ca4762e51b9d82ecc9933e96018e736cecbc0e4b26432deb4830dbb0a94653771005d8a240d8402aa48245851619cfbd61147d44f46bcd037777fc2730286ba500c56929a91be95a268cdc563740b940e21561a38c7e7b1a45aa0e8056d2a8950edd7f2dad23040c8ea6852f1afea4bad8b320cd772358f65ec61aa446c92041d4df1d1d24f7b156897bdf4e3f4a8f19801318a5abc2adc74b2a5d298932f9f00349f9fef60cc49d8674c35333f82fe3f5eaaca7947591c710b6849dc4fee8eb94b2055581f01be995e696a7309e44fe92bc1e4c18a246027b778b3b7685abd27fbd01ade2e552f248385bb420ffbef792f0e70d7f3c3ef376b42d7810bf4bab216092030d47bf296f423a6339fee9a41c15376f9037c5a714d51a2d65685d75a92c791989c9f8622c6bcd5e3090c2c563e905c6633b2099df4528bd54f715dd07fa44b923b74b49ad941ec20a9cf6b1e73386d2b1e0ef336253ce9671b06b0f479b1c567b295cf5a66bcb16043abcbfb480d017e4425562d5a77716b3922121d720bac837932c84fc27e1051a01c980d70d66ca287d7cfc95c7d0ab73dfe2ca48669709d4c1f6d26331899a002b33eb455e0ccc591b53177cd90ac2a18fe602d4943906555efcb08f4bb40e270a5c1ec3336ffe348eeb0d32b6699c8315dffe38f79fe4c0b95e599fcc1ac404512833a7bdf15d86e79f1e7627d92839fc2bf3a5c2f1c2b49106dc67b7e290346293ab3a342353e31341f2872dd14ad15f2ebc5a9fb54f4f68d160830f0591276fbd0e44e0d956cc0d783a50a19fa7c3b30276563b6d13237be8f5b893e41537b1dde5e85731eab1cd2f3c0288d087e0ae1f07aabff8888ad6bfb9698bc0aa13b83cb74e826f994fbc6947ed3588f2aaad722e0c131156103a052caba8478a0096621dd879a5b4b84861297b619ed1becc235a264950218f52b090c95e2e3719dbc49ed5ccf8fc6d3df4f95f19c8261d3e8242cbdc77c70a3160897479540c14db2cc668d0090b886d36404de316e744d84a317cb19421e4524101d4f5692728fa51a28a70d428131c232f581185f830a90d69c6cfa089ba76b9e58aba06332b569a2bd68525e660413480c306fe4859163c64c72d0602c4ff2a35b992b12e174b8afe7f41c94ade205372a3d71829d2552fe22ec86b61d1f18eed402fca902a98416d8b50b0a73e9e6c6645298cbbb1a982164f6e536f6602f8bd7d352da80cfbdcadce8b23c03dfcc2ec7448609cdfa9efe950d69e9b96e3b5c639d0d28a187ef5e89b96f326dc507dbd6c42c455c79892a27296aa78aa394d780ce376163c5549414fdc651f620b938ff2a57709dac53a7452d0cbce7786ee054c8fe55919f0e38fbc72a376d2137fc5d17c3b257931766d8a2db676874f76d20c9f696b1969f64552fa8866b53654308f209b682003470918c0caa7a6eeb3be0750d5492c325e2407ba006454145e0f42a7c0bd30853ebd2d0f130d167da249b2d009f3220f171a0655e1be6020294699a4052bc7a7f9692d16a9a7d260ccf782eeab4401064618c336089183f59dc0252d98d6745cb7d286e73b500eb338fedcc0caa93d68ee35a034c0675dd3f23f92bb512f783f2f0812c456836c3affa70206b29327e9c62ec3721306bce16b76232c401ab91ce7bf8a9200cf066895596ca442c62fcf22cd312739b446ee1f79616e996c38b3ff420954fc0e08ee1f27790812ca32643536e18b92f7f38e4aa13194b64db645232bfbd70a6aafbab4d9eb72af2314b454464f5d6c6ea36c72549c3bcdd5d90514f8678741e9d1028f2c627fa79739de05d8ad5d9d8e268c64849166fc2e6b3ea3fe00468c166978b37e669ec1b708a6553f8d52e199884978356a3ab2883e3dd19e11d35074924cdb8370c450fe286254cd0cbee0f910d12627a4afe33e49eed49c423061d80a9e674f77f51f723a1b624aa05775d510ba6ea361ae492d194f7e59ecba2b55f1a82a7b9762584e07a5383eecce9d257bbb455d5998a85ba06f5c315fc84f61261c0cb660bf4adf1ed31120cda957297df18b1fac87b283e912f9f5fbcfadef85ed728e04bb449c2478d6f48a7f9528caebd98fadbf26a786c68c39f07d1d79ab369d5048450d4f15d3bae3b3c688d72bd0260410b1a3730a9de22a9fa22b06917bdee2a8f6597931eff84c72f36847732520b06278de2da4ee02194d5354ef3a2802573b5ac6022b24b0ec8f0c966a0a87ef9468eba44717f450903b2a59c0140aca282f9a24d1327babfa28ab7cbec40915805f7104da632671357565d8c4e4316d09ae31f73139fa53c16c635e40c7c83e7743666d16d75f0b5dde8aa020e066b67050dc73a92658830c01e777f2155a58d8fd279feff33b2e3d9cdb8374ce2e04e006946de12fdaa69cd9c36dac954a32481e7d0419434e38146e584535cf9b12b326e8af8807e0131719bc1b63d82c724a5f2bbc80db451da06ce4df3955961f48d0fc4843324f4c38adf731b9d3e3b8bbd00b6f90fee0f3422ee6d4cc97b478e18b44fb430b00e688d58dacf5506b4192e3e71c6a9c80bc339423a6e55aab145e4ed29de80969f638d47eadd7341e6b3954decdaeec37f24f93e491fe448c2ebd0b6d3945279e35352c8536d460c50618a294c5426ada04c84725f2bfcbe6f13d2ba72055115ebbd9a8717e63d1749d014bbafccba44224c1f6e688e9168aa6248241e522093d3c0c14991d0dbd02d77c8c6eecd7fb88f986a078ac1f8e1173743618676132d50f5134a169f5f30a406ba419b6d9efb5efe672e2edbd9ffc00bca85dc66f1301ad683c1e1c712d6b2d8c1aee42feb49f035e88194d394fca5adc3321463b34808acf1297129202cc44601e8d7dcba1e57866411eed6a136d47b44badc0b5133fc854659b8ea576cf2ea11531fe3c5f2a7ff279d691f614ef6094b76f5fb81345c350766c9a01186c1640351aa62d35ac2de8937bedf38f49d714d613d6b33fa285a16e85186b4b10926293f0588b56aab43f0c4244e626570137806f04661fcb5ce2c793d498ea092c78ab64726aafa90127ff77812f7974f61f4b2460d930508e76c648343b3eb3141fb1699dde180f18f27e34f1bf294adb2c073373090e9e244aa4d8521b993536ec34d8a4e91d97a15a0089d4032dc225389bb3acc0024d7533fc62828b8b5f774ebbae030670127122bf21b44c5b62efa348da2379115471f2eb4a748e99e0eca2105deb3255498f4217e76e28126715c696acea7e00837aaedaa779adfaea0b4dab50992b547945b6d49520135225fd6e5bb319000740ffbf312b9c0e396916bb1ee8ab84db8ae3cc8d4353566b93da6d73af797b2bb430b89be06b09d17025d6b50c88349f536e6f42418a354da29f9a94e1cec62c81f198ba3f426aefcaed3ed57f70375c17b720c738b2d71ee3aef63cec1aa01008c3359a3cc033b5d609106c7235bc50d14d597704ebe9a22b1cf4ca1c94e9364d5f77425f825d61bc9f19c1bfd0bae55484ee89a52eb59614dc5fdb5d36460c75ea9c6a6a9d8c9ecdaac239f9331dae9be1fef2e97d3251c7ca2b016cf0992bd52936c62a33f9bc45aa4c9580c01fe0ad799a52c00a9424968eaaf2df58903189c957fc48fbfd9538d8a183be49596b94de7b921f593f49d387d187bc36af03c63d73a4ad25078dbe66be5ce113dbedb3093bd961b5708c5f37e9e26b3bf90c4c3ec2a3092c9385caf2e47810e92c9891e477f04da301f6a1b33c199a96ad01b258289c151113fb3b099b282d2eac562c089eea1df36bd13955dc897e6b2c0784ade6c67030244b3b276dac8ea743b5c400245574d44589671b3e9fe2219d2b614e0b3d2949732a5c2a4985970f972bc5cbc4129f53e9c04c2dff017a831224acf1b2f0aa92379b826a9435645984ac4cca9ff742ee67faae90db2239aa3f38972540f335b60033299b25fe406ea3e4ad402a1edfe3b30496e9a83b9b585422564b8711d430b774268c69c3bdabd8dc9cd50b69d4d7be61b39bf7da69a75000aad6633ff5971a28fed67a42d4cc38981f65dd40c5ff5239f6c313e017e5fc2860357b43f5e15654214c147a7634a1645835fe25ecfb4ba5e7f97dd811068413d2d6278bb703a5a56021a41756a981437ea0f9bac640935dca6aa64b30518022520f4c55e6bfe6bc524c608db23732f6d66717a58aa6d0b3c38128273ec789389139a9bf1532fcb81f3ad624029ca4de4bf47978f6805df5778d54423dac0c0f246a8bb87c432d4a2ba7995c33adde0c137f6dbc4f809b466626914537251c0943dc2c06620f5bb7e13ae5031e304e771ff9aee53455749d89e4f06421faf50552878b948567eadf089fab235ffcc2b8b8896024e2992b53a64bd8d2d85f8e30d948d47c26d75bd11c47ad2aaade49afd524d661717d5df6a7953c3c307262178ece3c9c15a82a8020472f42af4dbc61f26f062806dbe765b382e2c97a4fe016f6ae8c92be55dd6505c37a23e7a365670d6d1bbaa5d183a5ab764e1c6113551b4667791ad064c71682c65ce80fba0b6067b28d22643f1582f0a116399a186d342c1bc8b36083c158cc2a75ff99db5d421503b4b69f6669dad5a696769812bf1e761eb40a0064189a446e4979c02cfe7fa96ec62a98cd4b4da5aad7b4594ad4152ae3dbe485d79fb4806df9194f7a987d1dd228c2a51b812374862901945a8118594a030fa3b9eac93884ae80f1d7a4846abb5b6de7189de4996387d41312f51317c7a2d21de4ff5475f7a313ccbd111ea376bdc54cd1791b563e46c7ecc0a112fd9c5bcb36cb1d3e52ad7d32b1a3f045e05737a4577482757f6d9d0d63fb4b38d57e997bd8adb97c86b5761e7350728a82d3bb50db27f02621e2818eaa76e43ec227301e3c28da4759f48a811d10abcdf1fd95430b647edd72b209ea39696a29c63096f4b0534ff9df91c4a65a4d1fbfc73104b8c5703afd9f50cd62fdc01531426c4681741eaedfe0884717368795cd9ebc3a954a581c4e71a541e761c42f318a3e2978cbbd43f1d701c36a9d7b1e10cb3d1d7409ae657d07df47643455a72d4890d1aae5309491194a011e0687daebc7dc76704d743a0804032b20a5d7872d88409f8fe4b6653b6b1e53632b243025354b91ee68ac2747cc874da8823a7019220648f76567e37164f09b094a441e71ebe0bb3d8b124c7758890fffddcffe3bed20badb323df18cd79096fc18ec52647fb40aa50d0c3bd3236b7dd52ba884384bb8bf353063d4573ec9ecbd9821f2561c843f67fce2bcdd1e0ffbf65055880023378354115c18972640df41da122f8a247b774c8ab51d443bd82ca960cd943723dff9704c92ea149661c8ebdde3b449583eb4642177f5025e8e419d985c570d28cf13ed90df0237facea111b2735d4fd56a37844f7144b6254c29546d441912aacf800265f108c9b98b6df6c9a34cf3a323d4733c3536fb0f61ed24febda534b9d27d0848cfa57a00c76f9795a7ca6438717cce355c30a6f0086fa9ea7333390ea73f52f63b9526edbc8bcc727dd537f7f566b129e2041df6fcee48ada4722b35c4d94113cce75b5980b801ff634bf207bf9fdc573e8b2f71488f0a458cc539b3d5c6ef63a23389b0d71f6a26b9e72507be0b2c79c0296cfef5114eb828e03721b532a5490441afc92734a486efb7d940f4264390337c094c1cd5191010fb2ae3694b4ef6d4373e2c3660398ab60ef5f6ca5e40edf088dca17b459ee32cc53ad2289067478fe1e257585581970367560d0ab0cf066e9e9373a0f4fe8e2fe93905b768b53cb449e35aca25d032283afcfb4dd2f9dbe270a899024b27a4c6c93d6255e3f031fc24942baf1c39bfdd4c77fb78dcdfe1419c9fa57ec1adefa65411f42cda1d0da3a78262090b48b6064c964cf6512af665c8c47136cdfe378ee43553b636805b73c7b0e6351ebf8cb0c7bbcaf00611f35c192d72095376e1f0d21b487cc957a66ec616154b856c0e2be6c80d46c8443d9a403f863490ebfc0309224613b2e04e93b8e835062690271cf7da2de628456b62790ea2bb669dd9b7493a0365d1e7369104393740c0c3d9440b6aaa78d941d851addbdb644a63d2194b152f3ee3d4ab0f8a08b1bee6855b802ba5de11eb5f6ce71a7067073aa2e0e4821fa9a5e92224e6166ce38c49a79157e522858658ed55940224904b51f149d29117ce78b012d046f3253a72b0efaad9e45854f8140226ac112a4d76367375e4a81a90431546112496c2d42a570aeeffc04d1a740cc21dfa5a0c3268159f50de9e00a98fd9eae040b43e98330af1038e120193286ae91b05237685dc36ff8b19252771dfecd04012f02f94d3fd3dade38e020e8e50504a6ada48d7f0bf775376ed1f4c9fcc21bed460356d1a0d984c561e1f083cebf04c8bcbcf5cf197e44b48a91f1e106c738f63746e16af65f5a2f5947811ff54ee35d7800ef1b444c8615b5e0dfc17342e93c449996f5fe35f92eafd79b98aefceee1f623380ec0be63bcc600bacd0771a321603fb3e9364112632759c5fa12e4e2115fe7b36f1cc0fa85eb11465311eb283e6eb49d73d550c3c8e3b51c1bd5a2294303dd14d109c06dbdff81fcff670e36b3f6830df626a8f0396a30c00b4927a5c79fce8bc16867a69d53636723c4be862e00a63484d6d23e270c7fa4c07f659e4304a5c4aeacedac89d28128e89884d92ff9c69c4101081bc97c019dd63eaed7f02ec454ea190409677ea37d98074e1a8cb6b6d345c9e0de0f61a21d078f8aa6bfb30088cb3da7ebf414e10ea9dc2d2f9e65ba1af90dac8dc3a940fb18aa8df3a7e0b3783f92c3b6910f615d5deb542f17a22107a67e31e945e9a850bd8dcac862f9c6a03f8da9c1d5e831855573e593f5ea58ed0e5b677023c67516394520e5066e1d8bc93ed9524db301caeb2bd1b5f4ae448eb10ca4ad9bd892fcb60036b17457727383c5eb368aea30f32810d7a49a8405e411d115235b7f31193cddbd4874c2faa0906924c2476620801d3a6640ec6f33add6c1dcf083fcdd5579ee8ac1fcae79e444677fd9926792f5dcde8025959b1ced680f9e62404156cda731b6b0c6482ce5ec2b377ccca341af908b53872c943402c90739763b67db8c2e334ee614ca3b17cefddc548ae54377b9dba09c5e8146276b44149e3dfb01ed9aee81710bfe414e6221af46d9970267a50a1b4b06cb060676ce889ba98094c1cc1f0562cc507edee1b77e9bef94d1b2ea4766f17f3364f5ade4b66440907329ad4c2943d87d36c99beeaa69eba0e072addcc832d14b3acdd1856b58ab997ba8a1863cda2537e8e30483458dd5b6a2d2fc7440038bba1533df7535d1ef93a04af50eed0f035d02724b207b7e936ee050f6efbd6d5a06d86f227e72df0b58047d25cfbce30851f4826dc4b3bb055a413e3912127196012d274922542450acc719f4f29e681693f93c2b7b22b651697344204158e816784fafdad8fda171f72c0061e489e3d21189732b40818e517441d1f3c6bddca090d787274cda6dab7f5e61e646318c94d0e0480bd7d52b8a8ed3e07feab30318d6fabd691cbc061c1d1df04c18ba16f641659d92c5b3fd9564a21ecc2365ef3d602ecf300198979cc32507094231a23f18f0d281449a63967e43695cc381da1fbd35cf87f8d73713c1217940c1a56b3d74674a67a837f6d0f8704979744574d3b8d60365a2df55503c4b7d2fad6670528e3c79ff96b8871325f0e7daad466295824f418dd1db48230ae6590a28c43b9641d1c69ab9cf70d639933c5e3d68dda5a3054ed7b2a78e0c21653deef3179540c1b8e811d05293eea6f23aa43ac7a35689a25ab4574af82c4a713d161c5d6dc0b3223f7517d6b0a32a42f8f128b767cf2e669676806e12efd1de231eb2cdf204928e22db178e2009c703fe43fe1e59ea5940a80646c950e8795941b07ee1db0cc842d152c77b0520b1e0f8bdd2128495beeb9dd862bbb94b05cf8782f0b77185963d3f134b30cb6d6f83e8036af7b50956eff245cfd13e4aa619445fb98f538ae15155f1a08559e01b13a066eee4685cf54dacfc882b98b17b7b0b481ae0ef436452bf8ccb569cc1bf3295c7ba2bce1f3d538beb00450c07996cf1961d11465924b91aac4452190c25500c92c42d11b9de2fb62efa61440f21c0f00436fe691893c8cb62c3381cf3ab238e10df2b8577f552b23465035b63863332b561491136bab3387965fbac0c8060eec1d6624aa002cbed5a481268b1ef84df7f0368b113c8290f527339b1ae3721cb6d4c660ac4358367f4a82c87765af3fc78b9236b193585be6e8d7b443ba492e77321d53a36d6cd447e0fe80d3c370c7cfc5caffda0824cec432ae440593f921c05a50501c50cea0ccab9edc2508db0ac66c4d8246fc311dcc0681133bf8220b7403d73ad264b8751233c2e0c085286fcbfb676269c27946683c08313c2cb007b6f2bb4a2129fa410a331cab558f4cbca39c27849d7e9833b96ade93c85c0c015fa0c9250a8dec2cf0e85dcd9345359aad17b83d3c17fcf8dbca7cbd9a8410207cacaa56de124c9583b5a1a1b88ace47f7f8198cc91a2157cecafa76dd13510aa60f1a4cfd09304fc5c8ff1f37894a53c450e26da367efceebd168304519150139018a45b36cf059c2fe724058b4d7cb3707fd264cabd279d82e3a4b7329653deb099d91d7aca5aa35d2afbc2878ef5edf7a85b4f999fbb53d04ae255f0d951ab22e6b2b279270222e6b8dc4406027d45c2ca930393af0fa2e7750fa1db05e0e5c0f28f6b81a5a298f21bf3fb4c8c786835794d442e5df84400c24a211098e1903035dc78815bbe794b18f4875cb421c98adee4ebe75e1fe2c6b94d08da4470cc1885f968a25944565a99c04f60f21ebd29d12a2d459449eea24c538712aa431ff10b5203a9a1b8bd7bfab8ac462973a1cfea43d96c7946c44b4200e2ddcc4016ca1884b9a1ded8332ede77415cd5c583989f4cafb1f7080b2e278ca7e37ed04cd025cc2406591b25b6f5a8f222d3adea2bfcd02e190c8ec7c7c993771bb92353f1f864660e3c0ec2d36bb02b9c51da0182b8a228546633a47d9e7b773e1ea2cd9d4f906590c85382a790327c4a4ec55d61f24697418251e24d1950f0d24f130f7e2acaf388b9afcb663b0f3b4c55c40319448842c82c63130ca524955d2a6356dcd95f1ca13fdd72d892abe157ad1d83dc1e0d7d6af183a55eaf68403ca453c20707d760ce509f85444ff3c44e9bed0086466afe933b50040c780b37992fc37c682438ac098a1c32d80e6b7287ef0b480aa5a3cdc4a9a192149a51124344b2ec5de2d1f04604de41f5b7fd56697ee4d6c02879f982ba1ad60304aa0900cbf16543ea1b21288d306d54284948b3eda73a798e649056518c916e097c416368c35a64bb98f7a1fad92220a4b84a9b39a6663081757425f5464c8d3c6e481823e0648b7f3aac5f23256d35d8836916d34f9ab17f1a5a21f9f0f0c3586227734dd07a2f210bcb8c4256a903e3baf40cac961d780a7c72b87e763538eb5e46592992321caf41ff4dc0dcb8b649701d57c1256d29cafae76794a0b0d0223868c85220297adb1c8160339c6bd3e9df7590c156185350679ae805490887b093a2be48835a8d37d356636c2f8cdedb01b9f1c27d94897e3d27304908296e9783ee77b4c20046e185c6976c64603bbf2988838bf139826607505eb297eba11eeda1b7c22238c5214b6b213bb2b11e6cc3cfa92a2ac3bba7d6e8784136e915ffcdfacaa00291855a13ad3fbc5246baf67d56bb1961b9e1399641e413523085773c9df319c1096f9e658c428115c214b9881eb1fabbf1152fef3928ec0660d56b343a8001222b0dc14b2e899df3d1ca4c245d9b6f15ed228d7db916af82d9d5cf3dc93e45514469e2d1158312faeb26593d53b025a99393c46c3ce36f4b8577c509495d1763755366ae41070b14f7b866bdc17018504cc1ff661ca5bee1563304f8a50173d091c924faf3c09fbaa43a69cc0556dcade6ca38e3ac7b0aee557683878bb94be36d137d2b854c0bf527b1e37ad76adc9a37bcdd9a72273bd926669d6cf3fffc637401c69b90ea5e3c2b137d09c5e9b57b34d296fdc19e373cdd7c84ccbd37b7935e39fd13e50945d32f17f091158dbc5c2cb1797982ed131fa27d346746433360484fc6d4eeb47aea2a3bd8c8644a928bfe343d12e38b48d4052c64765712ac02f9668e84043aa2746ad770fa0900b96f55ae9284de7f2b1ed3b17429a6150f7380e1e8e20ad7000539fc98502ef30f4cdb777ba552b7c58b108be87d1cd53230f21cd6813f6fa757ec9024c1e2869caa468d881b1bcbdaf89f168ba18cded4f1165ffb2ae9139cf3a59ed5526d9795245abcd49762d10f1dcc83b6bd6a2b86232af2a3936277dbc0fc47c643e349a5be4f5553fd2f3d7572d339b2c8dedc363272f42dbacc30b55af89abcdf8971f8589a9fa5d6c772f94730a44a765b0d4191d937eff2bfc05d4976dd8df2cca12ca71cb1b8cb8f8f6995667f66eae2ff39310cf7dba23810e2b818496b5485db178605b5640667fcf7b18779851ed729a702df152216139a33294b3a4684e2f548003b22a61192376d2e58f1e9862347c0818b6ca53eb4c7951db25ba459ebce1db5b1ba8d628694d0b87d0794486a91c343b31d440c0e374e23ae13531c4539b00da6030ffe412240eaaab7cf34a7e64d12d201b133623214a8b7b8008502a7e10dc83d8edf6c52a060bfa9611602cb4c20995438ae2dd46ebc317f9c2e18a7d17ceade7d47828892ac3739029d1bbcb551e2519b1efe0a895273e2e5a74b4d7ecbc5ff165def2fbfb8c82db6f5d8f3eb019e677d46d4a3f6c6e3e9442339875444c02cb4f021f640c147634246ad07a923c0ab6cb7718b53e63a2efa3b7cd17d3979a3e6053da5dc931aade930baaf53e05af03dff9cb749391972ed08b53c70de57e4409b39ae2cbb3fe06934d009d723511d3bcce9a90d7dce326b37734ca18c0475973929592125ce1ab100501e34b3896536fbb536d2d82d7054ffdd26a77eb485e0e49accba1f2d72b268c23888b1aaef0a844a559ea726d61b4ecf98ef14718053778dbd0cf052c647830059a881fed191776da531bea0d9a2a79ef5f612e230a5953bb67a8df9eea103a220e2e3607f24b4d0c0ccb645b834433c60e36da8cfd40774eeff551d346fe7a65f3261188c3ef4e0946cfb4b3adec3cbea3cb38b3f358ad11b4be3c3afe9ee006131f254ab804b1d4cdab42ca989157b6371e2894f113ff905496244188e3b8f09064064d5ba63d4dad52b8218ae6a46b45a30d66fa2e2dfbb917095470e31573d5713451f07fc65d8b83bb3541499d0cb233f0d6e97e95d46715bead3f44c49c6113342b143bc1bce57cfde5c64394ce677c8141c45f1adf94142e7079261049dd9414c9754061b912eec190b16090e81166fe53e97eb20c8788bc98ccaaf55e82d4242c2354172e5a47c97dae3dd90d8a73d23426075200627da1fbffb6bd8169c606554b1b7a136d82ebb9769ccd3ef0c0f6b9c11ea951c5d93763ebfcaaa8162d114e78211d0a685b97c61dfdbab2906483a4407d921c6e64f86fa384803892031df0ef7f751d5e127959a0faf641b4c2f0cf51c6aff3125af85994ab6f17446e3dd268aed010e1defe6a0c24b2d49bfbc3f4e62ebde8e8dd53c38de804f42f0d0e6e4754aecaa960a1b26e1271a58a694696618a7119cea2d36bca178f8e77052071807a6eb33f2f203c97307e01ea79d5b67a0d6dcafdcff47aef6410f242c30ebd8109226e2ba88b8479ceedc622478253d7806f38b90fd7270974419c455d16b2b5f1ae0cae15cf4d0fe433824a6846e1a873653ea7212977711a5078bedd098ce84a001fdc43b886d971a41258469ce0f9cd399d6d5eb7f9e1b53d8c67cd007169db42dd3cc3b263d72e6e6a3686336a1b0a0cea93a7f9023aa2c24cf42516c16420a534e46991711c083096fcee0d87c9f56f6b86626af51ee9abb10d181e6dfb15bd4cb36d0d89409b659b343f4692d2dd1a766c28bbd255db81e734d230f60ca070957084b81295a3bc1d511f4899972bfc929ad08f68cf3f0d97adcd1913f17404ee1674992bd05eefe01e9e89ccda0d34086fd23b913ac3ce06be881573059fdb6369e83ca99cad2a9b5b17638399e2684e65988286d229611934b0334730137b0cc7591f40d259e84b3d57dd2254bc596c4d3ae199d6dc34dfa6792a0b7332af2ce9ac65fa22e7b2abb0a527d275c74397b315c8420b5aecf66f0d0a38bea5bfaa3718dc8f1c037740bb80d41e2b711832298a89935735f3da13991938568b8eaa7eccab42bb1329abf90d2732f70131978f601ed1806865da2ec53acc5427faca005f151b9b7d483df6cbb150ce3718529715fc643c7043e677cf3298d20b7dafb6a00d3ac1f718e0007c7b0c4d2229139000d3219fff8eaa0994334deb8ab6eb5382b5479c71de3370a60d3c26006a2cb1491d422089c4f6fcf108592ceaf264c23e8e9d380ab3c709471f34a7e197094a57a92783befed671be13fcc3e8a8d069796c58d65a9c1f2e0c89c85bdc3b9cb4fb5de6c397dd8667703157834da7b7cb7f9a97af05b7fbf7b5bce241d054d34f98b0ec6077504b8f563f7c39005db074003e3c5109d9945daa3cec43da95f56380364451014c119f2d28cba5e8f1da0ed07bc3cd1e1f9d2c4e0e198e366fc143be9c22ff61c71438d52c7042fa55f4df2451049f086ef3b8d71544a6fd805f6976ab40235f7493ca9b37e408ea8256b6b0a2efe7a1b0af87669c3f18073e9464b58f9ae2851f2eded91e311ca96b33d0443c89d30189b062c98facbc35dc6ef1956f68ef7f3afc2cf528a7edaf7aacbde976711a3e8c2001e8ea14d48a21d900f5ecb1e464274b8dec2b69212b4b63612b36fa9a1e179efbd2c464ccd1aa68a3052f6519c7fdacdc360502cc6ee067fce19fdd551019111db45ee00a2065757e4e51710c2c44ec9d9e1aa745b9ea5ad097af943f6ff43fbac07c07eea2723bfc0e01055d40e3c710b2143a792cf977a53694b4682de131a36afaf1f3c2b20327597b0b57fa41ce96f42de1b7394068ecfe88e86aa1b6a0281bba5598d1570da35cef2f3d449c61f01518024ec7a1006ab6a6b0404a7c3811f8e1311ce323a59d9b38304244596d1ec80443ea25313e5b2b4ede36176430ee06e5055b69c53c67c595952509439cd9e7060955be0e8f02b5682c7092998c740837e405bfa8e4d90728e269caf7abfac52b1b98b748d887d01895ff28fd45619166a136bd59aa7e3ae65ced906ca538fb3709aae01ae9b8113f09e6f631331ada5d5386407180c9a80152f2c863941b401ae141690e1c486c161e7a12891fbeb6fc02cbb7438b52ad81de9d830d453e9d116ffb17d1c5974bb6fc986344c494c34e09ea41785d01ca6f1864c31ad95a420e49bba2af72b9fbb3708aa99e468d2db1897bd5fc4d7fb0b07199af37073a05383807e828a5111a7a86e133a85c1ac4e8c50264017927d77517efb0cbf8195b1be4793295981afb3ce4a2a94e6ee56b1e1122cd4c293b5a2e05c32aff4332f4306cbc311110d2a3837ca56d4da6fc4ce527d7cbcd1d563c6a6e9a58e2aeb672088a30449af1cda7c84ba3bde3820036a5a28d7208b30a1cbc3a5080226a7ce23d879ca230c29a724a5f4a917b649cd54f5540aa8a0fa5f4f4983c16906b4a7b34cd09c34fe23470e16c7376989f0f6376c26021061ec25237e9499ebb5322b43c1fcd72968aa764757ce221f937081db8cb4bf682fb85aaf59c53c98c2a05c9325dd92708ca5ea819537b8453f69835e2a642d28f2899859fea2818e1f6f53e0b9e013fcc5b0dbd384b31d1b2882c06c9c42d868183a3c00f0fe4511d14d13201d4f1895e9871563ddd3f42efa1f7dc976198ef620e455362ed501ae3abc2630a2b49fc9eb7c5914e2b9d813cac981247459c584c2b02f7a5287977f71e093d1cd7ab99df6d705a65df65c559a0a70da98810c20fbffa6b95fcfb1c1d58497d0f92977a1781ed0d1cc09186cef59ccdb19da315a3fd4ed02a78eef35c5f4478206a33fc144363f392c44b6bc8c08561757fbda7216c26ed5043c39b98c7b13b0d92ad14857ae674dbb0b6ef975868041540470950954ff6f453d81f8c7dad6e02ba9d9cae752e1ecd88f176cceb6156a4e93db54df86780a594c86266c86acf022f107f34a27ca2351529dad5c1ed229c5af9891bea47a3cb73e0a565226e5c39351ef5f69a98a7758a6e9e7ce74c85cdee2cd95a6ae7dd1e40053535e155bf170fa66ac56eb57d3c5715b69fa8ecd47a863d4a445ef1a510c8154f16756694197ffa3f330d6cefc04d109bd6c57a8a7dc24de2a8162f038d05246d976a4c9908d7430b291c44aeedefe0018ffe33cb976d34cedf2acf228b461dd93dcfc5eb0f3c8bf8ccdd305a84f415acfa6fcff59aaf0afc36ab2d4203c7fd01f55d2a0835a208e6d682e05ba718c25cc151a057fe5a57a2c3c9e899f967106d16da9c272038af8482609a99be70a0d087ebc1022ce63bc38b335ee6d6764b2cdb998ee52bfd005356252bae00eae531b37907f6508e0fe182c7e1c776c04db0e03af7af1627835c3ea2b8983a405413022d3c4843e4ba85be3907c4e024c589458a5bca1d2e002428a68119b72aecdbbb48bd9c4d200cff03d1cf5f2d8088265aa203c430e26b1479b31964c8a3ae301d3ebff05c8ccbd70b6fa7b8c521475bc603cf6222214e843dac76c97d33ce9f9c09af490e5c71fdd60305e635412aee1bcec14811b7e52ed3e0882792d9a3e2274840f4419e3668411506fc6fa0737bcdb86fcd3a1c61927e58bad043c02e73b8447f76c065062ba4e6dac0a15b0165863dfc11028185d6ed2eaa634589766cb5bec4fe04ba1705d3777a8c0bdc690b263cb8fb3b32e994ee480c5282d11b03d6ccd6287b8c7d5547164509780e01dd912df96516b429b41d84eeaeba3f75387ef3ef9490181b5060aca3c21cd94b1379a873bc321926ed5754832a8b4b41e08ffc88debd68b38de12703cf071593bf400c680c05f6f0f18b452b70c4c39caeb3198abbbfe1311aeae11e67ce88fd2ad67af23802df539ce7fb7b29bc8543f49152fd8e1316fe140daa54c0dc6d6507b2cf900a129d1813a14e1415fa1fc445e7c7456292058c837bdb785d18a776c484b722521b34e8136673465fd95fb87c225baac97a4731668a13fae0a25e271e835f0ebf3be82bede982e4c1899f3540b570895d147bca3fe52feccca50225283a05e76705c7727b3b6705686a794f32bdc7ebfd3c2f3940bb179d10ee883f37ff042d4d04c69cb32bdcb89ced86e125771f395b4b5279dfd6e75ffe1dcd1a1456168ff0070cda3eb06e120ccb1d7f65db4864b96e57ba8dbdf8161018d60ad5846643720f0cb0e69fa8f79cbf4e3dc73dd00cadb84e19c273f1e615590beab4c14e89c82378f67fc089efd60cf0014baaa41adc8fd9974d838489b111d1e6a0454d74952bd0539f90cfe22e766189ceb7d2f4783c4e2f548203ec5e11287404f38298e7337984e3958b9c1458cf245a8063392b54de973bc15e80945b3ac947301f9eda2b353c354988a3b3772bfb2c0f4e45f6a1b8b1c4b7df4ae78d9ad1f695f5d2503ed727e0a75c8968183444de8ac8eb5f0cff732f8fa66aa9a89d32de1f31bc6711664e547541d5b962b4c4f47c217e84acd66efa686619ce22a9b6710a4d0b5b00afad8443b3ded45f3b6d0ab631bc04bd7f9dede0b464153ea0b3f7144cb8e6312c8056bbdc9239a9d16ff01b67014a316b1bbc54484a0a3824a950c3a8020b0a080f38ec368c18c7e81708d5700d0131b9ea9a69d4cec0848345ec0c4a99e31e44721551a1596a6e1cf3cbdb8a409f8e91b26db5bd291a4f91dd716db795802dfa345caa261582e3b86af7cec181e9a9feb230d6369c552219384d8ff9fbe11945b7a274e6263280610c64a7a1a943ba94d0c84c219277959fc6a4399fba993988cfd90021df33eb1d3705540ac2b03fc43823d5f80f457fcd67e29a0640463de384abd8a22468406014498beb7bfe10fe2486902400d0be3d1ade16e5e4ce3cf068f55ae5086117ab6b3995ede28f6d60f2a10eff806eeeafde1ddd219421059a912da00b8830d43386f3153a3705f9da0e58fff700162c37d299a65ef58e34f5e7744eec8b44e7b8f4cd026af2b1202b660026e3860b05c89d8fbb55e5620bf3783369252770a3e965803e991db9b909ca12f7e38b52de1132963aac94dc1c7c51053040f8be96e5164316cbc3a13fb8c11c8787179f497646ab6c801bce06f636b654fda12d0866d4eefd2798e7883f206bf0d3e84ab824ae45e70491d939f8590463e5115a8a07b523d867846b28b0d74298b69db640b48087835a619b037b1b774015588011e72b1cd19aee917bfa7fd67e28a4a5c669559984d37ad0227721951cef26a224b42357dc0aed7014753788f97726f55ce2bbcbc68a5aa4139f3179637265739c3e04fed638112be9095ea4b7a3cedf4eed4d1826c9bd6521efb552cf9d60dcccbc06f95e847b86a26ebdf9276a16822524ffed85fa92e73324f7a933421addfb435cdd953682e43353eb01f79a9f28722e7c0e3b28aabb26870864cb306cff7f3cce8521e2274739ef5da9958805c6c7a3581df4c748f7214f89c842a9be8eb41e60a54fc6e3abed032905776e7fd0a8a5f7bf01e29141143c58d7528487b3317cf4714a1a28637b5f10ee8e4718e6d8ced09a543313f318a80c3e81efeb92ee9712c4d64f4533a24518097244cd2708415dcb6d5bfd3f35ae84a16301946d77ec9542cd08fc3b29ca54752f9e28435fe79f258b9860eb32cc2dc446398e38934da3d3183845e41ef0b079d629e80a327fa60dc6000cd42bd150e26e9e30083702941d987d66ec09b13c4dfaff716f2a9cc78e07c7785a1b7b295714a8df6cf3466e4f902494216924763f1b1e78ac8fdc467dcec30aa7312028e094606d89823a3b8439b6d1dd1084fa0f8ad6d1a270681a5f98adfdcc3ee5a1c1d779074bbd9f95bac59974bc2c8f774a987f3e2d6708dc0aa6a5a1e1343029bb01b702264f2991de1b0860f28251261c2d27f673abbf71cd0c2ad7dd293b7b34407638570c3f788476aa3f79ecd60c789c60f0cd3dbe14f059c9511a3b6bb7fe28e6351562b3876e21c22793c74a30afaf22da31c15f677dfd73859f23b6a04ffb04a2e1ae9af3ed2125a2b3dbff28020785e6f0a574d8fe06208f7c21b37298e89c5c82e741e5a610291161a965657cd86583463bea4e6487eba4a53057d6d2ba0f5cdfd6bf99b45f07ae963ee0216113a1b75bea95e4300b3960cb0f6a9c8d2a4f588d7fa409993bfb601b5a391e7c4012b472ae63c290104fa6022a2afa995ffe10dbc7aa7cdd96bc0427ecaed2039ea7aa2734d14bb8cd473871216daeef442f7b8dcf769e4cdc51af0e09e1001866dec0422ebeebfd116611602c1fd955fab59bfafdc0b6353b7be094b58e0bcfb7a519e23a97dd25de12f9f61fc109b06ded324a1121db8e48eeeae008c9c60601fc898c4a7c6ab196308d052ecfc1a35d16908121d74432aa8670034c5fc50c3972e2493505438e84a16493226cc922c8aea3504ce9a3c31fedc1188b875fdb263b567a9b132000ae677bf935e7abe2f7477157eb7dae87ee1e39cf5e7c6cd64c78761118527b1ea8c02f270d5575f0014d8aa3d07e036cf6f27b54c03722d26533555915dcb4c7a0553ab3020661e178e13ae62d46009fa9f30115aab0de1429edac5c1a0b5741b80d350129b2d4c88e8704d05b2d4f1d23953cc44116b9488f5c279254e5425f2d2c891e3aba1850762dc05162f76b90ed676b3b48154456954dbc19048dbec8dcf32604377c283d27bf08d8d64b6271b395139d402ba1ec584a54bf9d427a1e22754f6d01fea6e8364fa23ccb3a1202a204190aa102883d3fe35b82f45e3403ac695a8509b5fde2fa973cea8c0b780f3cd97cb02c786a1ce0a52e33e0e831ddae42d1fe0f659eb54d648ce2aa9f4ee9063b3038ee1c20d24947ff48046d5cb77b03bc6b0118059cb968a696d9e97bafd0992f874a8c5a56f61d51366bf05d8361aaf4c3173a9c6a4f38af734137c51bab88f9d38a7b480fde7a7274de4927426e4c05871165c6e1b8bca10e60543631ba6ebe9e515ac7cc0e9fa12e6ebd0f93f341b7321094b93023582c638b4b6eb0e23b7406b8b372ae68b43c4a8a2efe5f0ab59b2612eed34a94eb0b8aeedcdcf7e16563fb47bd382e798f5f152aba58c7b1446df92486688661a593e434ab70e4907d901569e9b44f61cb368a1f329d1189f939632569a48b6e059db51d4385511c3e8fcc3b57a4c6c7171f1f1674ee3b32c3eac823cead04902d61c3e8cf58c22f0ff02996dfbe776abf12c8d82a1b7d3047ef0d2c1cec9923f69e1ab68deef45dab47d69b5cbfd123887799459771a705421195239493d0bad325721fc415a84ae071118af171141856cd2ef71ac409ed036e793aa8dabfd5872b04ec18e2d6c667eb17606c2b546027032bb13a8d39306c2922033eb002205316266818cc3cd20cad8848d3a702099e26d7a125c53488ee9836205b128c027bb163c5570ff74c66ca288aa9769122a2b7adb87637a2df62f65f13e14e756efa161b0f4ff2ec5109ece3eb1ac8ca1fd77528c07e5c41d8fa49b402dfe3123d2625a62f2952aabb18f6858c7b1692d413e4177d95780f7a28269021da7bb747e72580ea900ea8872dbd92a53af03370f63ede625dcb8470c078b31b0fffa8e20b02189bc095f973f7abf9407fe0677ea596438b5445dd77ed528c3a46d397cd1e492a02ed214442d27cbdc15b466d4d20814d816eaf79b00295d33df1ead12c8c1756782a8c2a402d4c4739ea5c8b56e0db26de780004d342cb321b6f4b78e034d02d83988418629eff731401a38757fbb7ef7b0da1694b73f32a190c100b09beccf9318bc6d5ca7c5fefa1cc89b48398bbc44fcb8f3b8c68c4c32810c7407bbcbfd255e0ae282d49d462816ea3b97add6401ce726a6d1afb11491e9ecc0131dc08fb10d4462a4279df12a62cee6760642be9dc001cca035c67ad13c897c70b4274e8bf4f0adaf043b7b9c560bb166e53632167c62ffab215d57b230727f1a80e1dce8426026d9229aa4cdf198462c8fbb4da30c2ee8f479f086b1c290c075a688b2ff15ed0b46e4d4f04feceb9ffb06a9f0fc12a9fd0c31a108510ff80c2622fa22c1ed6d0dd5eec1de22b392f0c95fa4b898f5baf89440284de03f1eece5fe418e66159eb243b5eeb535a7d452f300ce9536ab4b6346ced2d5205d0b1fd42f23130ff0aaa6b39932e13f40d2ab4f0b2fe01f4063977eb7958fa24221946ee6089940f90283df31a9b30320cc5229b6d223864372a4cd9dbb7de2ac2c4c16f44bf480322f617e208eba6ecbcb9c0cfd513088b569183822c24bb2254fedfafe2d0e9ecc5a13221ecc36e380a3c86357cdb5b8d10218e39b353ed0d503c4a1c46a29c5992424ccd1c123f21fd805ebe87196364d5675cfad353c7269552501483a72afdcda1d243e1af712dc5b99b267fa77da1193116be7aa84b3f1cee45dfbeebe44747f11948e098f1907ae6b534c990e69ae5d4f1c0bb564d01358f384ec952156be04ad80fb25ec12939371d15e022c82b8f1a98136c3e111cd1fc95798acb99951af637966fb5cdb3ec9b5197719dd9f1e957749e002911019a6425377b31ac119b0900c62822347c024d219d4b2ac87794ead59d2ebcd90d040ac5b6e385d71d1d85b344a9945270077284a87625b33c300c8ab461680231aea86a3a4a6d92fdf7453a92c7e0c1437de18f41d7e408d143bb979d7463193236e3dc130bdcb7e15c3b8a6722d76a82028e0e96c85c60bc577cea2230a26c0009f1f9566998ba3d7fdffab44162a084a2529dbaa848cde50b8e58f69bf05c3b66002006383f41e2c6dc905b2cb1d91c51d04ca76d74e6a1faec60538e0098055f5a70debd9096374bc662805cd0b64ad6d1366bff8a007773f27761f8ab59143abbadcc37f38ae4e35461a279839138f80ad31bd63a74afad5a0532d7834228dd2335c0199e4c6e45148736726e1773463c22a93ea0394d974099f78a60a236a202e46b861d867e943574fc64cd3eb2f9ba60e4cbb5b2103ce6c42ad9e5ea2a8f6ec055f24419ebf5eba1942264ab7cd74567377a47a63d5bdb703895cd5728d7e4220a6b72b2f8a92d3092004e9aee51e1917874025637bb4db6aaf63a8c098ec86b792c55b310ee9b6319fe5d9f8afb5fc2af8e8d9f6f97e3f6ef2f312b1ee593f53738d25f40af801ea664b0810ebbf5dd01b61d7387cf429de4ac0ac935c4304559ebb77f20fd822adf78d15d8a393bf4cf19ce81efa09575c265c0530cdd937dbb302120c3397af9523197cdae6e84fb2e99ed0642ad11fc45d14328138b168835f362ea0f77fbdf659df6013cfb9da9f865ce69b806aa24d110b92f325c0a9e8257993add8370f4b5b6c635cfb1df84697f265d6788f071128e1c3f30339b5c1b97dfc80bce7214a6fd8f2ba9c52f039e55caf69dcd4e305fe8cd9601ff58b249eabf602b5072591aa12ae7d5bc41883f36b044a6bc760eaf65946734b49e1fb816302d1a5a7d3a630a752626ee31902df66afcb5c53225aedd366b113af504f4037f572850731216a1393b0bb0ed9c39a9d36f49f6fb49c8b3c57228f5732195142b66d93c51d0d4c0c668386d7bdd1a1c477120fc6d03cbc096bb355c7f1a9f863e9d7481268ca9a398e7c1541ea06a5967c42e54ff2a3b4a11d935d8c8ea1bb86841457a44591ae05c45e3265f1a3bd3e3cd3bdd8af11c1c33f5026c7a7169a16d53aa788337452458ed5b78d7d99be640e8a97b0851f2844c6f3e05da118a4246725796bba03973f514088aebe4aa7c41f4f38047cd5e761c4b1540c31f5c16912a933961e90376ddc93350e2b4bc95eda0a009b95ec83b67ec2243cdd2e74d5878ca2ebcd74f0bc7f7cb4432fc526c42bdd04e40537aa89b0620482adc06fcdc287fde2425080ce7ae8e58bd443d03108e2b83ef6c8c691ba609726a3160e496036f9363d250d261a405128f7d46e6675bd56b84358a580d5a17ea86c60429af7400d949e24f2b5d2d376ddc02a1e5cb13cd28531b4a83cc952d69baaad8dc405333f0660fafcd9c5424b8f432dea8a63f7a5b8999811ac0bd3b4bd9c629f1c73766cac49022cdb19d3ba848afabe3dfc6f9f9396fe7c306fe3a4385b0faf89d2e3f7979747ef94bc6094019ef1f42457426e068f946c127c11746e1ac62ebcfe943bd90565aa2ebf1fdd2de6f80695ba6714190f56235ec121ca5051286ffe5b537195ca07ed681ec1dd7cf7221f37e91e0d32561cc0952a215ad94c611df0b2c3aa91906c3343715fbcfb61778b1d112cf0d17f3ba57ba252d562bffb2ac3252bd425a063f8c02c8ff5c438be050391a31601ea6d868f6a922d3ee5ea71abdcc6f53a49b3c32379b9b29df4ea7718f87481bc168ce40dfc80611582ea444f93a1d2979dd8b79bc924591b0f2cb7fa683ffaa9d26e471eabe1417e0a047ae980d25fe5fc83ed0c3412586434cba9d76b1667b4a5f4727d17128c73cc929f83e63719c342479628322c16749c3b614e7c229eeb7d49116897c0c08634461a47e497c6a40faf7876b2d76fa30e05ccb3e8379fa1b7912b967f32dbc8b4e38fad3ef3c57622e8dc3e6b4b905451b82ac1ad621acaf976f25925c1fd737f85c9fe332e503ec7c383ec07537bb81ba0ca9bc35d5c126f3bdcd7ff72565fc47ed7ba5689bfd207bfbfa911de53e6e0ae446ef941618a90d44fa78753ce359b429d25098cf7c6422ff92358faa2e14917888b8648da89db93a7300e823d22cd3f0a4a63b6a2c881c0655a621d33a4b5635ca50d69080ef53a74641bf2895a4fee78dd4ca92e2e07775597890197f86af301c570029c4ac424ed01d663ab0588e9090ffa6f9a4e5577281f505266132ddf9b35fd190d86a16884b6827097a261b55ad8b1da49d345722c16a58592b0d326ee6c04c5482d62f5a048a042a8e8448e2360f76c036abbae96f689cb82af9b84e028131705124573859be7c116dcb09a9b98a7a429160dc282232a555b30874c2532e828f59e4108d8b998839c9eeb683f1cc39fffe04ebbf7cb31c2db168633d6d5c969933724ce5fa2fe8006b2df2a2a2b26e6ccdb25b6ea949732b4e6e7ed7c80fc81714cb18a15fd111365eac7d33dbae9067aa132cba5949679d260af8c28a7ced4b7d517a3ae2eafd1f0e7056dbe0cd0a8c43a80d4ae5334090e6993e8b67199e9284606c7930dacb339b0f81c34227b1119ed8d10b7414e4d269050d1be8f7c996b7c429af0f85620df83e4d90e85bfde0af0bf7a555ef4584f72c57867a72fc9c679b2bc09e0b4927e596e94afbce2f1a7d00281693e522c0230c9ba849e8ab2b8e72fd494e3f6e2494af398d7e0a4edafaaa9f4a905d9373dc36eedb6f6c6c7cd7d84cedd9b6e10cb51610bdcb873fb8fd473c5aad972048be5988d8cde7cfe0be0077409fc06c14edb7b61e429faf5cf8a87af5415b92884fc5507c2c31f85a96cc51c5258c421294b040d097bf7159d6556ae031131d318518479c764b2626462ebde60a8d612e87f749336771fd53c45fa072da736cf557e241baa4334b01d4f6ffa1773d9036fa1af7fb475a3d9a99ee48a6e4b78a2b761a3375e27b04b6930a95f5e423691c30ea402c47e53c4153c749447d876adb04e9ce6526ee6f011114992368d56c0bf14e390b173e21c2b63501ddd8ef2c0c257b0a75774fdd2d394d877a35905d209288f8a4ffec54849b086e99c6fe4a8e41eecf1857b204f0ab9e710f53f4113bc7563eff72a51961ee9f0bbd787050171a31809d5b8f7bc7c4ec1eb72ddd502a3db37d572ce61e1fcc1cb6f4bcc7ef62d9f1934640120508f57e76577cf4811cb24211924eb04c184291f5e2525c269c4942213eaa474b8067b5fdf33c4e15333ad34dff3cdd098f58b71fb4f02d480ce742ef53640b2283dbecdb76c00b89173e64ad1e5c5efa2b4445012b09ac89a4475f2e608722fb65d183c4210ac69d1a464080f638a1657aee2b72a42cc8f1fe0ad8556d78d101b7e9beab88ad371f30da38ea7ab729c7361d9e2be9e424a763517a408d265b0d98029900d5e62a8d1539284f881b9fc031b7f90347fcc43b155b8fa9ca899e4f34f3d9d8678db88f00c912e5532ac4188e0127c412353b21409c1c4bcccec7b540120573faa088003df27bdf98c252646e4a836b11e2178180c61d13ba131c30d1118603790bf42c3251673bee8d38fbdc6892da245540083172ddb33ed0f039d502c1c58b99e6770bbd1835f18a912e7edeb88bc5f085d85eca34ecbdcd22f5ece4438bee199dcf03ccc7d8def8b3dc34eea8892e6dbdebe05ae7a26d0d532345be1933cc96f6b83a8fb6c4024f679928f960058c9b8c6fcd7068a7916b177e392ca8969505d8560a8ac51788740bf5a1a60fa200a64b8044bdc126b75f5bbbf96146374cc88b0926a66242f7e145b168ed4675a2205892afc74d2d703fe5ed8f22fe9e2de8c3e5279851235e0d62d94b296412473b76130fd74bf526559bedb90bb48efb1711d73ee0df2aec9f00b4f8dcadfaf3969004acb0ef5729b95a01d7dc92e12584b2fa022b2141b1bd004691a4bea92dcd7c25c213259d574e37de194b4a6c9571709e3ad2d0d6899706fb3015e0cb953af175855c7fc80ce7852cea3940bf672042ce34cdf93fa8db28ea9969269a6b5b87172ee3502a18967f1d4bb59c595fe7f25b3b0e9b7f6c0bed007781d1fc4c977e504c1d1a9d1622b325ffcb40ac62d3e6890867c8afe4337353a8e2248fce6c6c37273a4bd9b976d4636eed2998fc201fa71ec31f34dce001f196bd8b7eef7112f467296f7bebcde58fac4e2ef112673fec04ef9ff84c661fb8d91fac53d5aa23305ccde18b2b365a07db0a28bad0e82fc505c67897ea23f075018034e4332bdfa45164d886b84e0358835a70036d5da8bd2a68e32b9100de8630ea08f327efc243b84aa8f2b77180891c1189a9632442de0f29e0afb4d636ee7bfe9f49f0e965a25b83303ec429c29ac887b3e1ff2e668a3c8299bd7317f09a3f1eb4483abc996e6491159bb95d84ca3d2f23a4c85736793a63ac3749b975648e7d10f940e06cfde15d7c4ac5b8da1bdacbffe1cf4ae5322ead559466243f6bdbe8237f2c3caddce2ac4ca9f18bb53c1d70756b624fd73506a0d70b8e34c5fd5203a315f57e8d7e70b5ed17dbb2b30d6a238db627c2dc6d30e7082f6fefbfb7834b21cde7807d4c05069875a9313a98e3091ebe2062bb363ab47f6a59a6d6ad20616d3a6a2f48d590860e10bbe988fd8b54a3252e86641e1955261c888cbacc765848cc625968e5ddf9a5111247aeac0f515269e9be6f62225f5fb712319efdfa670da8fc0d0a295b4c488e378f45c1991465fc35d948e020dcaec6bae3c0cfff4473ec0e55040339f0579090d6eb0e542a0eade6006ab101d083d1be90922bb61b4d0b2f902559ac1c25b5da1e31a95a448901378397871e7e1391802a06e10befa382d0731507dc4a7f7a935ebff9668b5749ccb0ba0d09d0f7392996780fa80da055368bbe98dbafec4224967414362bbe2752badbea0ce817901ec8d632bb198fe933d93c8f21144c0d9ab0538eb717b038152ea2961a47cd5890f0401dc8029acd3dbf718757f455e3b6689fd23413d4aed07a48f814cab166d95de3a91d82d926a41b6628fd48bfb21049bfbc243159fc2aa1497611dcc0a9f430ae70943f340c2148432351c16387c3fa0fc66edac8daa693dd0c1eea4bbba44c017fd08037a3c78904136da937a546157affde4ec9226476bab12a31a52f3a4542054aff6ae419cf858817763bbbb45846afa3e5e0d8ad74c0ee0e89b37255b6bd861ae8cda8307408bdecb751780676e87331eaac037f7ad077327a099af16e4e7b8a71630eefd43ed664aa46a9a2e0d51ca741d19500b5596a1196481fb72bd91ec0b2ea2dad2a1ca4d8b12a79825c6ce2cc4feaae6e642e240e53edeccdf5d9e7814c9f4fe3b84e56e4253ebf977932c2df7bd0afb2920c2b0c13b274ba64285944eff062b6165b86f42faf8c740235a2c6668e36050b7686376c09061e2d17c9766901712c13b00e2494cae03d2ff21fa08f69a489f8ee4f0ae792d6ded8a18e9a82dab94c3358105121d11b9b1aa55afa97efd52b2b03bb208269fd5d4cc265f31610c739473414338e2c447331a34bccdefa39dfd5f4513e4ed90c96b4e6ead1553748c705ebe0ae81e447cb8c4a4e8e6048a2176704262ab82796d98a5948106b09aec3d99df29f49e9491c58e591e15ee4cd3b2684383c4e5aaaafa7f9b6d90e68555a25547fcff32432520e9e027751ff90876f2f583b6ef6cc5188fa6f627caaab524f6e5a5f0e139e832979d3d28d6e032581643819119b00998f30bb952cb9a4525ff5a811764226f17f891a153a597b413d81da15d80328bea9638f62f4917cd23c94d5f2c85ca93dbd005ed3424fa736b9fcf019283868aee896c04570d0798cb87cc173c9f7272064cde13648b39c8bc12fd60b84176548bcdbf21f9caba743c060b16b049b1081151c0c61a0d335d2e09ee72abbf3c02792c7d5977e3e601b05e236496f5597a0da389cff2bf2ac307a81a60955a1a644123abd9175e0d9d9a1e097c95947954395c5f97f4fda2efd04e49616e72b1dc1be883919f08ee70f14059239510cd91f4aee7647eaf625ea0b9c1e3f5c87245926d2ec70acf2a873f818b7d95ab8a91cd13d070b10dbe3de943e4e2f241369dba60e0aff2c6c11eeee10e58e4c912dff2caeb2445a064d2bc8b59222c146a5427f7afb356294cff610e410f0922132dccb6d040ccd66bd40162ee91289702a047dae94127c4e5f319447c40c858981cfbf9126379fac43d69e8e3e31366360fb3a369be1858dacb170f9fdf0ab3b0a363118dcceede8e436f6b9c635cc5c8d6ee497074a23189afc6d69dab93f6b402f07aa9ea7edcc58e5687884128c2f430a9cba02a9ee41cc0f80a16b95a276d63e844065d0316bd5f373fed124deb844b967e729f93bb31eba9678c81ee2d66c2506eaec4b3227aea5986a5e1715b26c1bca56ad91898649d2898c20db4ddafe283a787928a3699bac28af3b335b7c5ea3c29810037510aad947404a93200fefc272ccab4d8d6cf28cc6d0d92b9655d56e65debfc7be55adbc4cc559c8b84ccdc5bf1c95294baaa60dfaa6802b0dec48bb7af71531b65d48aa5860efa020ba6d539236fc19b04413161bb8741bdf5cfb4cac77d64e035982732f2b102c93a1dc1dca3aa79c61889bf55fe5c6019eb9775a0a394842ceb87cbd400d78b38d4b25d82e1abce401ac4ce082d8b23c82c150f95fa6397d54274e889488b4ccf701cad951e223318567c0663d5d8a0cfa5550eb0e46eb798eb2293927b63d817941e55e00a446ee5d1838891caf930d2288a788000040ffbf35b192b3f414cc4fead4907188219a7d5d33b0334bea3aa9d4a69dbb009b93e093d5e8606c09d311690d3bba6f0753fbb904601a487b32653b6ee0e93aaa004f7736ea763a319dcbf1fcac1b9725beaf7e709f3bf7b728bfbfa6c5a13c3807c6ac77e0a603026ffa4cafc47c9a0401dd0bbc779e775c31ef8c6f0964e24657f2185bc5a992f806f34729d8a45b65c88341e2d6a9db953b9ca36d99aa1891bd9ec11a8fdba1bb2013a15448e5c89292b24314244907a022ac72f31d82b9360ee650cf08ec31ff3ada484823286b512060ce89b2551d7f085acee169f30f418a405ededc243c6bfb91dd1df46837d567ba8df15bf4653f3afc2891a7b8d865d6c93a860e644a192bd0122a96bf6f1f3223af443745ea3b2a6fe37a7105b6f196e08604d6342f5345a0f0cf91b85ec8d44aab2fc108033724575a1a9d43609f1202203b0c5466ae4690088207c2d488b8de2ab8cecac1902c0c68c5b27a676cec2ac2269b48448974ab38b8bd7a231a0c3aa9c8719bb0fe03415fe1cc77dbd889faff5f96625d8fabacf53039795dc89d967d600431b0042615618c60f1e201c67f32e5be04fd0457d2ce7d634be7b66dbe6761e81670e433f7543e557e8ff3ff17f510617643036f0245a5141983684d0296b9d742d7ac3c1e805f9e1c2be95820629dc6dc61328bc180da05f88cf0be0322dda53ae598340e1b41dfbc1b83dc4c8a5724566c16518dcbe459d5277e3f6327100f57c0911a6a1405fe12ba215c7b21c3668a04963ccda8894443568a95c07ec3b11a5e1101aabb5229c539e1df10578757811736d0080cddd2308f0621d93d534052245f3971eb216df02a41b3b2e9dc8eb1d42b475611263f0b30f50cf9a89b951a345434bbfbb392e17f7bf538fe32ed933a18205ad5c428d455340f1c8b44167428b000c90ee85fc365467a554f8062a0d9fbe9d67b1ae7818c3bb948ffb746c25b8611cbef0b960aa02f2eb0a93db56ae8b7206dcc0cf7936d804cc5fd6888ef238f32cd97709538573370ddbcbf9e261a448304cc0fd22eb110aca08381b5c681042336f0edfc2174256d9122cacfb3de0132f1acfe435eb4f86c0b318ee5b8f12302fa1ddbed8d30e825630cb9142d22ff5017f2558c46900fc1be37510237f1981020400a5df0c3680af5440c0c27970e8b779cf1ffa89200686d558577eca9351ed3b3be5a6aebaeaf0915b2043a5a614b2dee5153124bb79f6ac46aa3d5903a1a0ebd0f8e4c22293b5bbc21cd207523b75f238fa2e36083bf5f18e55f524139383a13889073bd1bce6e8cb3d0989eb63c9ca5675a4aeab1e0cf63b96c5bc4d5395dc56aacac16a397415ee6d23ee84f52b71911d96ad15c5aa30f382051d71e1447ab9e92022adc425d619ad5bf40ccb7f5d3f2eb198213de37801deb2547ff08a33a3a784398b1d73a09481d46431627744ce1b78ad25a60ca364f08f93e09353b61a47ffcc96ba77d73846466250cda1c2edca7cbcd951aec661f3f02870c1d8d154c874ebc20af164c1edf6c423fe394e757a15b44314c2a644ca2c829ec35e04ec17af1a27756321ab22485ebab3a61618ec849fabe7d064abbcb2dbba606e620de723b8ab5f7be0cc3c301ce44f549e85ddf89f8282ba9db66019921200bc607e8844ec138233f9e023664d63835398b67487ac1193e232ddaa7fd9b7a1f80f6269142a45984f33be121d6ceff72de3d4659ea29fa97ea5fd4e67e03440e3f20557b6580874036ac0b8233b41b9e438ec0d61dee95ba3fa66130f8b79d19fa3faead530a255a5c2ff22a058421a24fb7ab36e9c6749e00b22cdf0fb1d934eadd93db5aee1c8965ee1e2b29b5a2d9a0e879a057d7963958e66e7791b5e40301e7848e32271d0d0777e02db57d7688910732b53803b8d90883a71f03c6c81eb001c1aea46d78b55d69ee1f4a0a35bee2b30afbbdc203b82a0e5946fc57322b5fc7eb45cd8ceecfa809717af3a3b9165a85daed6b4b34dae70459fd94e0010ca4907dba99ace135151064b443c3d10797e5a6a76d6b8f7db2623e26d2a8ad1bfe38320da6c391a1ab8862950dfc86c38bc5564d641d18a4c760e63d2c6ca702eac7103dac27c307e4c1e86605f4d119233d191dea20c84bd40eb96508a9340c9bd091947b4b1511bc7ee97dfa62c6b597b16a9af779c3e38e8023ae24c6c53b2c600813722631ea31c51242e9f542dc29f28705442163d3379c46848efac239706b09688c51092b277497c4126372ac15b6b5cab4ed030513a4010efcf754169b0dcf135a7b82a4c391bbb01b8cb6d00719991d1511f49372980446f47406220ef3e83dfa5ad9ab3c48a0afa5644973a227bed4cdcf2208bb195b4577412439979b550b16ee685889334a045259d4298eb59397ef1fcb7e301b0903fb41d33bbc6201dae43a66f729011f1ef014f2dc7b6025b46263ee686c9237adaeeceb1fc57dbb2d65f1c0c8febde0acb853636d15583deaaf5c78315c5a18e7ddb3031e8a7eeca557fdd7edaefcca382ccd5efbe124579f2367275bb1d1a717c900921fa0a968aa57e83dd46e8b9a09679d31b6a9b865b4eee08b6017a80d7355f67a105c30aee7f582d9bde53ae648e6465c025a88f6586dbf69d1799b0a58149f4235cbeaff4c08e7ccdd7292baedd21d29bde8fcd2890d4b0df8e4f8acb8f2962a05985de9a56e49d73d4bd765aeee9132510aceef2c8433e66b6b7ca6bca425bb1462c97ab2ebbffc6404731344dbc6c59897b8624227901bd66630605ca32563006ef25c0f54be4fa5576b2f68615177949b9fec3ac5e1cc8ed811158665357430ee4270f68ec169e7a6e3a6f2c72402f2a0d2166697f6875625eaedab03bd1f17e2cf922d3543ceccdf6021078cd46d54b123567512cbd1ef200c031b2f5e4a22ad00a3e0605a4f3bf32a9170fea1cdfa79714ec42bbd802b10799b6ef2411516bebf0b7e6fc4b77fe1346357f5aa2ce9d4a3d18b0bbd3c42596b4c1045ecde124b2f8d0ecb569ac090c0f467d2944a380e1f8ae78b1260278a6794c7850c9803931c195f2e04c7cb587a8be7345d12f489170ab081b80f1e2d675e8e1005881a5d8023030e711ba69a74eb1f360eea7c08758849ac440043d27a23b2f2343b04a6a4ed9bb0a899d7d834aed5da01ba24f22c8e6504691cb42b6516058d5553042f05d9cda57cb7ac80d7b8f073a0e87051704672d887f2e5e02bb794849ffb38db768d4188144bc2e79df4c3ec6a95fda4d53bcbfcee8d2b0e65871bce4a7c08e42c4f05adfb2ff87a355708663df01d50623c21e24a2bc05f5ddd5c96b028180e584f85088ee1bc0b0cd02a201aee2033fc15ea1b34e8e5c9447faa45839e27f7bfbcdc39a33d5de7680a8bdd1b0ec449430cb58c67eb3c61b65d167c3f0c33839c8700f8819f058291cfb4fd1fc8e05475cf865e81f430024948504b054b3b8e1ad6397e43e8e62576a2bd551dc306e448c45feaff40bbb059c16f9becf43f11f73a461f85935ab4dfbdeee5cbb18279b2b92c2c7cb8e54c81460b1f48e90a1f508f22c293e3310e70c971676850857ba7a2ae9061ac366b2248e735538125ba8ff902288c063cd852ca5f510378399c55423063909dcaac6dd1b26634f00c0fdc637b2f624ef1e4033d5cadbbe2cd07d44f92f94adb29f018f12e51a1830f1ed8c1c99f213c4788381e0f45d5de1ca61072c6b97e0db379a208101dff4e1a672d018dff222ddb9010a2e9aea114c0746734b58eee23b1a87d0feadd14613f3578118882b65f28c11ca2d1c3ef23d2b8a3a9d2a1ba77b9c925a7c5ea043c0b7d7649d9c9f1785cc3eb7016eb5ce452fac474b37bb86b564e98774805d22221e753ccbbc35d92832ba9cd1f0223ba0b62ad6e4564fb12c524c4a6949a6d8b23cc2c3c64760f13bbb4bc059d4d82bfb54a6b6b607638be67ba100a48f80cd0077cdee87143d7304c5aaaf7d72bc03ed50797fdf08851341ed0249e8e1f316b021db33541be4146bfcbdc48d16ff8b4171b041f8473463ceb8b8884c8e96776018d16ded9d18d2f6fe1b0d9c15c49506824c4c4243600997d4a0e7c7d70466b150cb0f08c02e4e7fcdbf9d330a805e2f0dceed668e66969f904055615f65385228490e485891483aa9e6954e3c19126fa7ee90f1520da84309bdcf3ad829c1512d758c459080eeafeb597f6c649a06b918ca737306590e47b9f90509baa7a20193ae68ac5f07ed9072ba366ead3a245c7d83d58d0fc3dc36c26ff3e20b08779395841dff00102caf966e68dea6fa537ab23c4f5715391d124d5b0cbf2d10cc701fe6417f73dabf210efbda1a9d660d17d36167fd6727edf95f1bc7bcb51a5c31681530f52c9058e9f96b170bbc8b47475e8ac41b184898600d086a770ac6d8b2aff9214ed8a311ff9e9f181a43a6628cb900d94470b1b825787157f025ea7070ea399358f5be651455a1e4ca8b6513d335d4ab880a7dd75a1f0b36f44b6aad6271792537085c9e0b9a1e703974105966400263fc3f089af02203991dead7e101e63436b13fecf7109515eb849813fdd681559083d259c2ca75f71a7ad705ff20b79c5dcf12e1a9714958bcf860cb275f12321329813594a75bdf4ff57294ead206ab29045b1afa630bdffa107757bee6f98bdaeb37d971c114208767fc061df31dad3496ce1961298e2d6d1e4e3bd4badb52a614bd88ffef5e4a99dceafb1283da6c47f3b38db87488eef091ba5b01b9a1fad8fc398d42f656a7aff3b34f3e53cc04b8bcb97a178ccef39a1357530d4395afdba1b22f19f35a5a5ba07b65c372a6484c7bd05c7ffbb20df8c19f5b2de7f0a8409929dbb9b40f0b38f58e9dc4737935f7a9bf70b4634f27c724ee51ddc7cdbe28a4c2204771b977d47ff597e7821fceb22c3f112900d8dc8a4c043f22138e981329efbb83932adf81afeb8de893bf75f191dde41f9f49782c7c227e0c008290216ad1e62520a98aa0e482798c00b368d08374e40b670818fef8fef1e2b9e7ced788d3cee1a39f5dd5c3da62c5030f2c8ca09bf620e04298623ebf41ef59ecb739f74e191f6505e3b714c102ed8030e95d27dbbb52c25d9077b953e6808c36d199be8ec1cb4c0069179485db4ba2eb51222ff5e549531624a3a662b2f735d999bde39558880eafbe02a2976bcec231ba72367e4ef584c6d17aa72af80ff698a24bdc9356c8aea191301646ba8fe264ab99902efed32b406331e0b4cc941127701c971a3be0ca5b6c2ec99797989057867a1891e7239476950d7965c0d8a08117b518a564f7342868cf6ea8adea01dba55b4808a15f5a888d03f81fe9d5cb0c05f45b4973392be5705b90c3dd5c80f532e3e6e9fee245bcbac07e49ed19649b49d3d27efb162ee7521153c8aacf30a30885ffa1d2dfba72d645cad8dce28a974b56de61e25af64e860d53f89460825406d31c499a7f3a77cb23917859af3944e52a8fbd76b4ac9a274ad06b2c02617d4a78bcc01561f710eb3a84f08e4c93c160aeaf6e0a2d1ca35b99bdec7c0371608495cba872b3e892ec4d671b78598088d8d05a0aa67ce32b757eeb3f23be42c84fdcb48eb6605af0b57294e1d8ee9b34c5158b5d0dccbde4149da3ff13c2a32a9c1cbdb2165e272032c98586043f177bd015e2320f09a93a8bad4bb3751290c25f5fa20f566616fbd500aaa2eda329bea2d9da85ad941281da63555ed6a6421694b27c3ba6a890bfb4ef13eabd26460126f35f28480498eb3449285bdc40e2e98a5e01b93f3b017fd047a932d03cbead97b4bd934935d208f135bcb983c3a148168bb8c143916450b402b26af9d296a52885eceeb893fce289373060f817e2a979eab7002da5cbc4d1297bec7b62ba4c89076453f38b238755d5b001a2b63311098f54247cd5b582a09602cc0a1f05ec15f50aa435c6e680b7600255575902c7551234a0b71a5c0e24909632c925289630a2180423cc0f483f4c14e72c11c1f5ce770e36053f6488a51fb53c792748f56934fe722f436ba71d724a33f3f8d26cb7b3938b162ff3fc789d74611aec6a8c4c0e71c515a1c5e18397bce8837f513ecf3cafeebafb1ba78acb6355a536564cd209db3522ad0b6644a5315d9e22a0c0c0471f2c70c32db1ac4749cd04aa1b799b8102ef07ea94fa68bbdcec4422b065517145edd634627d782bf3f016edb718e8525d0afb57ce805be3dfd5b4a681487d786379d52a6d2bb7177a6bc6a73deac5761ac060b14ecfc72f5197469a4307de813b63046219d9c9c263a63e5278e438cd322184760293168af3aef725e0421a3073c5281dfea3f066e49a90100b78b90a11c53d0a30c501c443646dbe60686f5868f40efa2fb026b39d1aa20c1d2d1c1d4634bf447f21d7c01b7e8b6250fc1229dba0edf807243eb7270548e9f68022b05828c09aa427d903f49e11b381a673723556b3b7143ac8b0e0f044b55e3fe252580e4d021f172a9c3462b20f022bdff72497911e8a9589fee6ee9f8bc4c6500f908dac77cc82193c37eca5e512fdce071dc443afefeabee44dc0cff019c50c3522558e60bae7e486d0b546883175e7e27500f7acc98c6a6ff4809f2436b3e5616e9a6ab43881af830dffe393c26962fc0d0e87e54cb2a5e3268062b483b62e8fc507758439d768d1763b0ceba2a9bd575ece749ad709ac890a07379eae66bf30a9b1fb9b933862330ca6abf5e020fc7318c2d9cac053ae27243b3799034979c9140921ad0d31b9d854640da38294f421d927fdd19e436ee4fec42294ea7061cf5778a4d0b3dc0d410f50204962894c7d698a437ccd38f124137b6aa201d48f21baaa101dd2def072685a432962d1bca3c6191fbb77932dbff9c0ff3c1c7f4264793a13ffbb032a528b25de81121d601d3605c5891189d1072effc602f8a3c725bca4073cede870e590dfa1f9b1b88e08360f03bf8bed54ff3d4ecfea58785372c9ade63f794a2470425ff648a286b16723740f7b94856684c35b6e8cb3b7d1c85d850679efc6e8c6480b71998071a2ace4351ee16f032e124f50d4b708b4bf1fade908ed631d4c82de2be3e1425a750c4aa022ec57d2a31d7447cfbaf41712cddd36ed185f042c6c75937c0d010580c41199333e45fe7a5fd4d80869ad6749e984f64d6ce85e6803d826c45ca0eb2865da37359aeb3a3949ffb8210593fee3f80b74d0067a74efd9428a06d9a3ad17987bd7226336bf832ff9cc33baf1546cb83b93ece47cb0be3260d7418b83bc8e043f0a21f22fee36d5695a1175896fd2310b4e6c175651440a97bb435ad1a0280367a52c931a00b395fba0baa0676d2aef74f930bb007eb1c24efb89500347f657c756ec35293e7979943fd6ed5360eac329b8d895d7de800ee9c5d5b1e091b66c0c135f54ca75581fcdbafd9f9b34183984725516235a5951d2233058320f6e7d444549ffce47dd28c7121d3059844af3a60fb3a4a26e8e1869fbdfebe3a952caa68c45554bd587409a1c4d33086683ebc9e39337aeb3755a7fc43969e1ec03d1da67521fd8da3e47fb11614ba5155794128d8c0dc1cc1d0c6ac20c9493a111439c87204e39022ac5dc60fd68024823c8088d6dee6481a8e99897f007c064226286a66964ef83aa3ab15e87d2f8a4023f28238847ff8404026d9b8f76d06587ad4c6beb601b9f62a0fffb5ac000eea4ecf94dbcc02b3aabc4a7fc0f1a40b6387a9f7eae086c9618125a371d2de5c29901d37365b825473a5ee291a3bdc3d9b53e9936c1e4319b092898181c7c1f8d0b15656e40e760ca3093d1ffae5371f7577524bd8ca8d0d9c31aef8bc91f9778a33384f090c00e85898d708a798492a47bf1dfb22dda109b757961106c058febe2d4f61bf40d4315310f8e912003b28522e31c3328d6bcacce77587c623fba71f720b4fab0d4dd631729e13aa7d7f20bcdfad201e0bf86b1d6e5b13ead8f667f0abc38d2fcddb8dee39665a911fb715c20c9123d3a589ac69b7a2922dcf4f2f52f72837a51b3190d64b44fb38b53a065da7e218fb7ad940d9ac57dc7ee48c75131ccf3e23c7cced0095b882759fe2326572488430a0b30aefdc4132a39188e9d0db0f4799d023a7c018da1a019d5a3f91e2df9d6f829c94d597a8cbfadfa1d2430f06db5827cf259a8eacbb85fb4f1a1a5999fcb84f0c79d8dc52d8f44c8bc7cffc14f2cfc42079b3b45bc13650712f8cf9e4a9cff146435dfa28372bdfae91e117c839dbb576d30ba3ee40bec603152cf3a88a5370b3067f1a0c9dcce15122296d92402195f60a867cbdde0670061ec7baba148e61baf5e134b34a2bc2c38431af8998852f445857519fd3aef70b1d3639b1f792dd942d25c257004f018271c1a66a2ce28c28d647d5fc6956e02713f16fdb7d26eeaeeab6f3f2a68d19c499befcf7d0adb90faca3407cd272a9f31ffd621da1412d668a9d49a998edbeac101ef474ebb8ecc69438f933a39b8658388121e0f073bcf7de988ed0b6bb0468db5c96d1bc575b52f4c04a5ceabff7520dbadabf6bb44b0f19d6e1a66df79fcc7c62a3fd23716e3ed6ce7db37bc08e8d21c67bb5221d1f6b489e4db6472731d632654fa576379f8cfa39f8c7e0ffc64932c8b4d7281b6644718ae7f77c18abb1d1aa1ede3e5849484fa4058571f4a51a38879989a0f6e81b94893400f05cc92373e1b79540eb750fc78612679c24dcc6037ff76590bfeec3bdd694e1eb3c7c622c0d514461115078e24dcc054918b5f8000a6bf1cd440a6d9db0fe789373695bb31be39d75f8eac1827190b3792f60ab37eecfa0c87cccb5a63159eba6c1657819adb33e1eb0c9f0737c63651534eaf80078761006f5163b6c2f4a07451d8cff57785772a4e04b1ae0c58325f4f68adf22cd7e844f3c547d33554fddf2cfa74940cea4151450438bc45959ca545d22d92e88e9d7a68e6d530164e3fdb0eee72add77cac2b5592f9311f81c4db786e90d1c7be83dba002df184ec8fae82e63ea0e5318c64d5654bf36eebb27571081b80298af1c22553b79380d6817b229618353af3ecf260ec01411bffcb8d9504bcbb06897d06d792e34320c80e77db7fe77365b16afb7ea52c17364d864d6e438a5e047deab9b691d94a23d0962d283e1fc153619854ddfebdee202c9cb353be60c90098b184bfa845c22f6edddc4b91ac33883873e14d174272c4fd0bd9a316dadc3470832391d65a66e3ce86a77b275b0492d6e1487f115ffbc0c3c7f35a7de7d028f3f55698851b99df789a9b27f18a409a571b806abf45061608b5a14009327a274e7c2e0429d63345850f51923589b210b8c200408153bd482722964f4230673579ee60b9cb9f5d79a11212c9b969d624cba6a06652f176a17fbf45a1f16b6301ae7494439c7246201fa9cfa25813d802b1518ab5e52b5d316fbc1f155c34062e36eed58ac18dc6a9359458a65e333670e4a6a41682e8aa6803b12ec880b6290cdd979d616bad7d879c0a18993c2db3573e9adf5acb033e9919409444bb794901e0ab0f4365d1fcab1922ea15a452e5dcefd7806cab02fb91a9e0367570197d081bf3665f3b9b7022f04853cc7f9052e93207ee7615a6cb51b2fea1b89374be38907858d43764f9ed827f660e18cace0eb7abbb3109188ae592389ce152d0bd0cecd144d28311735819ad474a125fd5c2acf8eb496717acdfd0ceb1d07703882b933e4e9da19e5df0a51b4ad3e358e6607a3c1701b79900bb4f0cea1450a4161006323d658f91f26989bbeb267b68fd421f5fa62b84ecb6678a161e5bbe12fd0443de717e3f1f94d8c91ae9726a4c57bd25ea923e74550ad8d1b6be0e9529d02140ed034e7fa7d3e710f45cf98bc45f92473c6069548ee72c0977891417cb5e2326b819ae54c522c250fa66eb151dc61de4acd8cc099deb3b94554f0c847e51123fe55ffb94dd02bb4fa4ed1d0493d885dfa02f5ba0348888ba3111f51d0bb100aacfbb25ef92d1fa5a85645919d60e4050333f7e24fabfffa18535d61e7fd12b5d04548ce638fbda6708b997a69ce02f18559cd5caebfc649ecfd31df397a5365b6eb386e9200281d8df2d13fa80fb40b02fb91d6d4071f7a59b49e066e6581ef826f56b62b4ac25ef21265f5841c66203b52464c0011d2a6259a8a41cdfc92cb4031cf642052dfb00f5eb6c30669630f49a0ff43653a6851f3f3149c351f8069e890af7e9ba064d3628de23b6ca6dff70e44a5a4549f0a3804c98a58db0383b85f6da048d66697f6aa98f3efa141112f2be7cd205a566644447c630f13a6818d2ed010f293ac82832bc0a3d0cfd3712fa8488063f911cb398f0d37b1fd8a1362106617b27b185f1c55912462252450497f5d52a2b9ce3e212e3e0589dc70a3769f05115e32af319774bbccf804b101c3618f828a23fe360e302c0715cf93a0142e84d65e9482c8b5828970046d51e6684c6c3d725b985fffda69b1c2faf751cb5aefc6350624cce05f0482b75abefd7215bf1d82be8b877c69160832148041d545bf2b8c8b4ab0924a2cf7fe75d5eb51bd244b6fa2133b4d3b3a2e032e13b0289a572e5740f0969da41f7253417a1da9a204b1906bbb19af0b15abdb242c233164bb4bd3c5ce7feb71bc8f6b6c6793b0e16c01b16573a01ee2d1fe4ff9c241e26efed3d09cd040a958305811fb397d6b0cdaa3cb700adb0f533f7628aaab10958cfe341378a17e87e24803c3ed3953fd881c5fa2ec5be8bf11fed3a879e6b2d223478a91515e07cb5d40f766803567a8dc4b2b85961ca44108e547acf29ce2c599e050848cd4e9f62c74b26c1c6b5cb52c7f6f105536672b78aa63b843d9a0efbbec17d9435dc939010fe80bd0a2fd9ce094641970c1e424af789ad95166222000fc42b7e5c5d60ce2c30434d674f2a932e4d6e4ac7e1d09dccec1bd5ebca22faeacce68e33392bb0201eddda078f4891e7c90ed328a573f842ad0557f7c1215a112f6466c657df3ca4aa01de51d48db7c653e0945132322b46018661152107a21896a5013248c42332198bd11162a529648bce8925c0d914a869e6c6e8ba084b0c900a178db4b03ea78d9a0cf0f1e5a39742f823c0e3898d871842a35eed2efb6ca1c8884bd447bf6d0988dd9193da687a5e7494e8ba3789fb06b603844d1ec5fa8ea1424f020f3a81497a59ef479f90f14312067cb1cdb51fc8fe2c26a02f4e0aab5de1ab817dc189753754e684ca70a18cc6311726b2c0f03a2cb6e10c3afa6b6bdd78e327c601be861fda2e95a87ebdfee69023e3ec145279b83668791b4e750fcd0e75cc6c49c2d42c94396abe69a970d2267357233f513684aff701397106f26b08235b8f06adabb057b44974fbe9f1b54fae863b7e36bb46c00866342b62c5b2c311b9927c0fc5fbed5ce35c4a9e6c9956236c7bdd8c25497d9df618310988afe4019fabf70f5740030082dfdddb71cd7e0d9dd03df3f755177db93ada5e848b1cb5d21577411d6d6e43eaefb5f2aaa6c8fb5d7156628e62fb1d4a0fb721637112c2a44ef460f2cf67b722a9a06e7604cda2cc1aaf59526a5e27bd13cad40264ce0854c6fd5e5d31e75d8efc63304c83306e4df5015663df36791804a6a3b5edfdacddc3aa8af8550a98fa9419d20f63d0e0a9b2d8d8933b079ef9126449ee8d980db3efa8f57f9326385dde33778da6a9d2c3305f2bf8a9927db6234e5c744a848208dfae1290af319a5aee5438a9741c6f672ee582cb9dfcadfa3aad210bc21387d85246011321e59d52671a18303297220c65ea7c24672d214336fd0cffa685717c8521526cf0dd394eaade23d02d4f2e985103cd6dff6d7085224717ba5afae22ba73475421216b99f43e558eb4c09ba2df77cb2c0bb7ed7eb3b0db5b656f7d6bcc80338dc97230f5e7b08a906ac79cbdc4000b5877c648bb03c4cbf6cedddbd8ec70edd49686d74fb0588e15c4935107ae27b591c23cdb09d19fbbf4e30a77d4ec76dec7b91921b2090b53d3bbdbeb71355a6682f27e55a840cce6020d481e16100ce52bd1d3f1469d7406d82694c3e032ad05b6a64b114af3b68d6b92ed96cccfeac8107636cc72e0f4d2565dc1cdf2af8adf44cda9f76800727f8059e18181fc76741dcf80e06003eaa5c21638781347e3b6d747b8aaa45028dd4c5103152ef6e018c1c0a450a744a5ec943e9fa27ffdd068387b1c71e060a603a1c83127462124b34a81ccd7ea8d405ce9955830104eda0618b3073c52f192fc7e2b585d78c9e853b5163c141d9743ea6fe99112e9917bf4c9a26af9a822b91c43a4d7d81c1edd0aff90ad840da37074e3319c80e0ac449bd1a378c026e297cae12593842824694d0f0bc2242de4cef9296f567573ed9f1cd0df11dd6ff35bcdcf0e9929bc7096a5dcf809b8b7bc25134e2fe9b5c192f6df25b28c16d120fd7a9efebac79a3ea5bc272242a366c54c61573075466b64e095fce9c08bd541b6cf085e5936feea6e08c0cc794db71dbcbe19a2069674daffea3f61a0b258634f3865523956574b34d8bde83efae7a8118a2adfbe1b6753c6a036300ba81fb25e2d961e1e828a9eaee982f90c93a0d0d7eebdb881a15818d1cc5db29697f062a97af2d8e4e79350edf37ea2e60360e2964a0033471820f176b7cf146c986cc288e44c4c1281000316844173683478271214a1cba3ed1533a0aa3dfe4eee6ea0f0ba254938d0d4c57dc6e68e770fb5afeacbb5f7bdde87419d58c95ee0a628f0de201df01135ea81655343108ac4f6cea05a4c9eaafa3c46ebc36e40005fc4630d1c641c2aba6179c46b5dfbacb32ce4b0aecf83e7a19b993f3f5a9424365481d5054ffa6e53400e40c0d84aa6da88d0d35cbb869e690b7a5fbd9ba2cbfc92221d8dfa81109ae54cee151e4bbba6f9c522bf6a79da3e61a36e366a982b4b8402735513889002ba62c3c6fb7fe035e064cc6392a51bbc2b649015926c9b06f89163b4ad34e1b6e2d02baa6847954e43d800b3f477d0396375197ff0cb1393ce9103af8d36e46e00b3bc5f9aad9fa40c1bff07f05c73f8124f67c96d010c29e821dce50248fcb444c4be02f64a42bf51d4625cb1815b5a44044753ac68c8b2f7430f9f987190e83cdf840111280ff5c5705ad28603367bc9a7d3c252211b587e03311ec4077f8794ef3d620a8c937b6a6f7c022005efd643760f497e909a068df1ab90a88824b81bf2100ca79732c8da32ae76f316e32427c4f9c0dbb4fcde184364f9c7c67b4d39f57f18915420b90c1f72cd5c2e3bf001afa2253f5e6bd99511b6401aca5b4d5467c8bf41ab99bfd4e69515931627431e48f4cfc9739c2c0ff0a848791cb3ede41acf6bd5512213fc4af1dd675fedb3e29f4cda8e09eafb1a335e25fa42c7b1d1f0538cb8258cc11dab045baa7416dd112e047c9f9dc87bdbd17c9916c0cc2fb278e147d0fddf1cc90a7e49887b9e5119be1df1b12228458dd0b3c4f524dc76d72f382a3f87124d47aa399267bbf2384209b26e53dbaf924833898fa74b8abdcb85a29b0a50569035e1acf756d61cffaefc9d3e2eadce5490c3a416a2c7d279fc9a3ad086a9a54d9b0b9250ba4f76e5525203f52b64b3c437335491b3bec1859cd368498c7b287435e81df68b5152126ba091f0f991bf5fe5c127f824711c8ccd30f1f61c34c9a08dd8efcc87dbc6847ef2b200b60f794a96b07cdaa3d9ab1ef76407af454c93799bdd195433b3435445aeff9e920b60ced5e2446cb48a1beaaea7a13d7d3e311f199ae7bc30589003fed84d468bf3aa5ed5223b5088a382aa5249ad885d9281da49fedd5cbd00b6ad5efd9a08cfad417643a10d93c7a28976eaec84f234aba369eb69facf064f732f70b2d5f99d3bf598f8f0cf85e1e9e7d400c213669ccca1595c2497d34d2676466a79a4c085ac579543e16aec3a206112daf7c8214aa75c4f1cdf1230942371cdc457eb31adc4c17fbe0328b63d46ac872a924da3b1df5c264ee14a1fd5b4ae8300a2310725675b284c20090b09427c3b1460559c19a0f7df38bd7ef49898385c23648b9a3972093d499202ddaf0aa6d2f3c35c9f8a24a64aee0f6b6efb416114af8de0e0184bd605f9d1edf6e9f772fdfce620faa94b5691e826f9f18fad80004aa434c1bc53acf345a3ef662bbcb6c9df7bf6a092b82ed12e5ebd0e5300987b8fd5a04dfcf94430e96255e5ff5f4f36bb98ae404e56c313434ee817a0b336c27e02d53a061102bd3280169791a468ee00c611e0059dac8599eee614fd986231c1f878128d2b71c0a900fc46304a7676f242469e0b8819e8be48ae1ab0470b4a94f3971d005f83ea3f0041eac8fe6282359cb3f241b681ac672216b24c6d0a8670898c5903ef5b88f5e3bdbc4766f44e19fb5021e8e0299e166cf87a0c6875a357278213a7f6b1a5a81336b5672a869bd8c96902d4347f55e3e6a6529935f75eafa55d82c3cc42c83480eef0f41d84a89fdf623a63f171ee9c552fcc31343ed88fe658a0788cd42a9af27b63973ba032159ef9115b0e5cb8d8007cacbd6231511aa35636bfa8cf5e8ba1510682a6caad9e1fb41caa1b65b522094fb5240ebc4c8974138944edd45659d28ffc61fdd2f96d10fb141a7ee2b6345df7d2f4019bb19471621c15d223bbb04184bd503a25c708f8361d974bf77b228e63b339ebafdc5740bbc6f6d0f98727a34b485685825c3d411a916531ad7beb1cdb260985efb23f374b85d04039e2e031c4390cad2b6bea0cfe4df22500d18f5530fe805a5cbaac9c2adce8366fa32692978f8bad7bfeefc3106aed43125a31adc65d8a1ccdc2434eccda2369c4c7d7b2e17d38a3acb8381d00dd37b229d781695c9c36c965dea93d2329bb71fa34e4407eaabafa6d081a130e603fed3a709f48f389667aa6e8e6a2fc3a6ba64b25b732a33c2ec6ac60afbe97f634ddf16c0ce9908147a14d582a3da6d4ff97d76e8893af155fa1eeb2fa42372d1913c2f2ee8705019698590aa583d23d58bc05285eb11c37d1bca013c0d4d916705648730847db46e22096ba3ab6eb297818c2467e21a3233605143b2be981dae4c58eb0a9c0282aa6e01d74edfbebf3f6b5ea347ab14e6ddd510f3a78ef8d5e5ad9f9ace908bcccc3bf23ef720656d7f09829049c7213d1568f3b98a2c49b14f887f2899adcafdb87e4eae26a112be98be4fcc3d3a2f3f9988a60ac7014dac64342d9544624e0857ef008c7af05343323fb244715715268204147318afc0b9a02d252731b025c4ac3e6c316dfed39ba8f8d9b2d6ac0a0351feb15dd258819e9516c3a2e2cd5b7c590363ed3e9c93c5bdfb7c3a34773dd268d8a8a7cefc351ca6fd3fe11d72ad6f7aae4f7acccf6b9178dfc47e80623ea027cf0da4018178ee931bc1b912d290724a8b943621ddd82370ebb8ace54a3dfd403389856e66e5f03501197ebc4037440e755aa835f864ee8a3077ab4dc83593031bc2b33cd824f176f3a66521cc187803b0aaebc24abb564243feae9adf3186d4c474de4bcd5bc30adba25fa1737ce7afc128102a1b217d5cb50e7160fa06e5631aec2425b6635f4e827145b358187496c1104170db3dd58d89f3e951d52b72d5ce9a97e5415f2da20c40baabe72326a4c51ea6959d0f3d4b50d7b4e66418a5cd8150c933aae73c0fd856c60ff219e0c0d71406084f4190abcce1bb635d2545c3e12d55190799ee2f2337137f549f5da8f19eea7b2da08a07205c7fa04c3ae2bd362513e968c3fb3bb4dd628ae477ac13b2f7587666df9195f31c55d165158305435b3ecd1869dde9be57eb18a7cbfc9c5ae653c2cfd94c9de252afcf4321ffe616da5bee21bbb373c916c39676dcba611d2b9566dc8f36342952e493cb3b104062a58175097e7da558c8b1899a0b0ccdec88f4cc98c052c08252d0152902ed553533d21f1ccd49ddb0aa2da1f3eda4d1bce0d8a9b7d373f6b9045754c22929af4826164bd5a7bd1206774be3cdaf06b2fa659d296bad331669b12998ed078a7d0f575fe22e926afe1ded2d84e0303d4249b954a6d196e8abf94705d387039f414b11542f4e475b94167bba02ca7a1ecfff7eea60532edbe53ca7d0bc0f1b23c0f6170b060ae47d60eed1b40566bf74bf41d1a6784b30ba12117ea68f121311e81f7feead090438b48cfe4c5830c4f751b788a95434eb9665eb731abf9319676405c942dee8aa4a93cd8069394ac3b1281c7c216baf289b4507d03457651dd0fc8307f10d0fafa5b3de7782b067bbad9c2ff72bc224f41249ea50f362132ba8765cbcd5ebc0e1f8bbf827be710e92da539e19b6af9c9710e505c787291c0ea9c3beed5eb786f3ae91744913bd9806b34f03b2e81d6e054fe5564feb303e07cd270e68363f72dc733af1e591d72d511df6de6fba6e12dc7cf1f598ab1fec2b9d908c4901de0a430e312365b0d50442a237014b7e1ccf102fc71d915ba16231981ee6ff70537bcad7ee8574ee9ebe512549ec5739bf03a2604b7e4bb7ae68276232514d9b72e9ca985010e4d166c73dc3321ddaeb47fb420e93f5f63a0c2b1d85be801f2a8c134a2cfa213e49fcfe8b26818133287e0dce0b097850b22ff93b858256256f38cdb63335853642e3aa210ec40390f427c82374c239d43e17021e4daa69f75335ac0e3760a66d564fc57e9e9593fd25a0034e1d20581965ec1220324ee8f42916348a781fc407ac2b7afaa6bb01af21d4ac242e6a0e6a8d16a92d3d176aea3d82dd501ef6133d4022fd87b5984b70e342cdf069aeddbd7e9ad43ce0eee8b469946eba77c8bb72b2d11b8731b3dda88db3ce5f817c11272968650ede5879826c0e3e009aa848eb1841fecde1da44c2333c2918791994675ae3cd347023f08d58733249d520fe3affc05c56eedd47fdc2e42fd743eb39c7b3ffbf3b02352def4e3809622c01a2cfdf296f069287dc2364a2a3fdf230570164d3dc1a46a752c3cd31bb467c4f0d68b51029d4737b76a1824b1a87dc41bf393def03030685da5b8619f0068a418743ebe60a560872469054d6be342c4a156801f55d12f3a58d9a7805341a47383a8d06a98eea40c5a236cdda0a93b4d20bb38c21031a8ac0fc8303eced7debdc58156ab48b5ac548c432cd6bab4e82e5dd5766ab6904a4b5d7e8104bee8c48b419b0a05be1f4f482e415dd132770c3fe8f3cd3ec111d79517c46e119b199c144632f01471e6f54c814f0a8fe13328ef2c3f0e258bf27744f91cd08437cd3a86b4d5578d3071cba83cbf35404fa4858ee31688e1ba03362805e880505ddfa21850d3e9f269c4346b2a75c8f69879d4ab94b204de9553ba3e9c3c324a86e39d649c718012fe2488c749959aa2552e150a97757f4cb00092d4ee7f8143ee3c6ff3fbe9b9733b01b70742a06c133a897c442fa81c53904371607f6b82b557f8a2c360b94930f1918d4d88173a0a18fe6e24487fd6392bd1e8dace02fa550c0005646c46a528ba7836904c089d7b1abd35515891a8bc0d22cafba5c432601acae3b117be7cacc9f7bbf071b16268eb98ef0a20d0f2c57e738f0d5e770e5048f1556c8477b5891288d9b7a7a33d32d25549216038258384e234fd2daab64749d41b8a06020072e977b0dc1dd1679d3add5bfdbeba2efbedf31ea101630b54f993916ee71a04b6ec277c14bf31625650de480d1ebe7c4531c1995b999a7b0d4022fec61ee37a9de377c80950ef521ace94b209593cccfad0f20160067458404c0dcc984558ad2873539deb13120674ef8328abc4fe3219a50092d23610db84de7563bc3447e452cafda12d6718f0458104137588b9320d2e72b2d9efc7fa66a93bb470ae2d00e07027646a010bdcf3114ee45f5dad49921902618b7a4a8bd0af965b4c31ce60eef88415c57204a1157168dde70fb3c99b36315e68144c00748f119e0a9713fb27d113f99d17961ae4e9bba2f9892fab3e07d0c7bccc369d8af528e5b14740c360914ca1bdf6f6e64c91342a0ff3008fb5f9f37789008ce63092e5726af44fdeca48ef80edffbeb785a8c8c727f969cabeb6614d7f447987da022fd503fd446984ac21d84da953c482de94ea34d7769d6163034ecd403f65a9e3692d3c04637726ebee16fea6b14622acbf6bc6c4e873069903509cd6338a908161aa2b81151827723f5be31b2f49e38efb6b0d2a6da0e088f1058792b759649839e3c268da8ef44ee3a17912ddc02b23970e3650a61af50aa31ea2f95a6e46f027226c4c5444ac1255e6ee0430f840e883924ad6d4f15652231d0144bd2bd934f8e1950bc413721c4a5ad9d7511bc8f66ceefa7d4f2ac138735dc10af7c54b6524207fe1932278b3a6f8634f44d3b07d1a1f0357cb29b72fa0cc6ea4a3ddbdcfe19671a366a3705dbb98d8a5bfb1afeba5702e1237bf35b35007d167601e1815dae3933caf0625556030f315482aa6b04612eb08c4f5bc50d0aa5ed3ed2e8ca54e1d5b9f7bb64985db701ec4eed0caa60d773349d46dea8920fe0cb42bc03afc8c475a7a9fa6cfee10f7358ba5fd685c31713fcdd74ed5f3d28f943fa65b66e8c6051080c95b9449d7c413f86de69108fd094421bbb10056a2c80a1f048086425b8cb7af1800b6c625c7f087bdc698f60416873275149e6e42274d28223b3d833e0f09fcb3b53e9fe188ec6bc6e45ef85d61ae6cf2d73c4a523a4b0f30daa596b38720d2c8b87175fa90a0621b5cea97cee14b4f889c28df91c08e7fab08be5e56100d730ef4d252d2b8e37cdfda63a43fbb51cf7cdcf075d15756f70acaf78286095f807797a079911a80052b7b85d76e0e26743407318191dc58f214929e38c767eac60f90a305962e933e57fbee586db075adc743b35ec25013e28ff4cee430b08f3da1605f6fffce573336f5516c7bc361a9eb77d8332151de90075e1953c762567026b3a5c966eba32f02580054d994a88ff4340230d1e83845bd2e3ef59468cf848ca2cd60b4bd4a244ab0fa66aa4ac5cdd1af54ff53f9700cb48feca81c110290d2b045b2b1227a26ad02bd2c15627f335b6705538126e086e53240625984dd86e4b4de0f93b5f8c191ed9aaabb8f477101a2f24c80e18ffa9042f500c6b2548a09853760fa2f1a32bdbc7285f07c8ba79f6827bdb3dc43f6c03771b207ef3c455ea05a28375d1c1c715370e51339460a4515021d13eb1aa327e86aa6e58063959cad1d6973a3b3e7f4ee0ec24eea2aa274e09a49305bafac302d7bd2c953cb98da3bdae66f5033e58342280006585f505de6c1f4231da0ff83a5e67fa5ca2d47005359e79a27cb937f0154b76e3416f2e86dd5b722127b184ea47c2a512a6758ee179877cacd7f446a94d71329881863ca49ad41016971bd6d77a3efaecd745438f1b97e8e117aaa685e5b96aab07e37dbcb02ba0120ad8d58eab9e069da9477f9e943103e84a2098724e7f8fe4dfa8e81070587a391843a7b451586bb065e484a5a6fa02fe824d695423b83f0566e32c2991a8c10bca01031eae1a2636886de286c4f6979d080846b0c9039cc7a15642b8e2633b1ff68fa963c6f33ea0b269ece601ba539d70f52b1a28303c9644004ad8efe9ba31e99773536abcdfe24db448110b351b2ee1f638ba842f331ab34f348c06ebbb0b7666cf9df314ca969d862576c6748a53cd58ab6e383e376f3406431911374a33568974251614caa3c26ee023e1c9a42a75025d39a8484c76928f9af847f33527c9369e7738b133bb1bc69dc898e9b2c6cea3aa04c5e8d1ac4ad03ca606d9b33051e2c1736f2493160b0c8b38d12e42ee8f26b8a940083b4190b80c65fc4a230cec9587284fafb950a04d8e194b6bf8853799b8dd50a311e1a38e19cf221ca413415220aa05288d2ffa62129c002a379647ff8d5b6bf8a13bf3383e38de3f5139c90175224c8ec7b94bbb53389593cfdf745dda26f42c4135f47708cfe37d340c1aae265868e9baa7c1543d77addfcd37b3347d84d9c4818872260e55812d181bebec1f83f5861cf74f37f1ae6b4dc959665a4cf9def39d518c65ed76b20a7c01723fea26682c7d1bddd9cd407d04cb681f9c2274d711a2ae0eedca3ee341c73b6e6acdbbf1be85375134c223000857e024880514c7f0d2c743e9dc295cb600 \ No newline at end of file diff --git a/blob-store/blob_h8775477_i0 b/blob-store/blob_h8775477_i0 new file mode 100644 index 0000000..28da60d --- /dev/null +++ b/blob-store/blob_h8775477_i0 @@ -0,0 +1 @@ +0x497731700cd3c3945d9d1873344ceac8dd3a2fb7ec5cd73928966103e95a9579572d8c1727551d061f53ee9937f08ef97fd7890f5f7883fdd4925feecc5d23011b8248c7e600c7dd9fd6f44f0faf5934fa9431774e1ca828d5b3f01da26a400f46a76efb3ea068f5782b531551367b288601850efb89148320f5e1e91f6fd22a409962ea0fa72950e5a1b6a898c47f4a19968a3f6eb0b6518cc03975ff967d1c55afffd2c35c161394bb985bafdbb2cee03f165cc25d64f175fcb98d454b7e54707e0b6fd6d5d4627dbf7f01dd5e43b665e9bf6c954bfb11a67d626cde3a766a66e33173da490c395481fd776b8ba0787789988687286c1fb1ad6605900e88f9312c909377fa0d20c1a7206e0a56246df28316faeed958b778e8778aa49d8d391318e338475b13f8bae9c4e2a33f6fb577d828baa736d988ce2ec5a62cbc993a3bd0ca6d671b0999ddd6a54496549197f92e42fc30785f14cc3b9ea0adb2be4233c4889c52549da852e0d354f61dedc17cf46ae59e4b8c76a732f78c2499d0574f8ed3027f226e9d261616ad010f34c7515a85daa8ebbe90c408edbfd59d440645610c4c06c56ee36a26a3db0cae4c2a1d2ca70c0d8069c6363235c2a62159244773c6b3c88b02ab674a37583a8bd724cbf300ea09787aa4658717d9046ded1e7216f696ef3a1b48c39148921235a8d04e49b549cff98c93dc22d3bcc76470602b5edd8ac8535c5cc0bfcb14ff65d13f6ca5b35a4b69cbc0986e35340d8aa7da1252c8e4ba17917870b65b3712118eb257be93ccd071f455caf7f0f2a00c0c995f8e8cc6075c214cc2d4e125cf29c267f36b1951df5604baa08a9c39d2941c1e0b813759b7f673b81b267538e98d6dcc7b705e81c52b3b69f0861c18db7394fd54c6640b9341e3b1c797fef209de5262264b60b22525b8abc03f10caf9da506a0db3bcb6636d8b2829bb5943067292e9a4bd5e2ce7d23ad556e8f55ddbb619ce50f42094572b957025f64a69c2a720b8e2ec2227ae31ad527e95115d708465cb500aea2155030ece7142aa765f428ac81e3ab7c9c6dbca8467ea8b7df7ff775946b7f3509dea9a0cb4245f6ad0f172b208436d94c450558c283cb162a5ae17a04e071468c1d5faa630033b8606f867d722e90862760b366603f03a2a2ddbb4e0626601aa0926c76478d974521584b8bef293cdd752a5b2c64c2c792b79883a6b055ff4b58ecf9ee9d7f44509c763708e5d4239b354b24ac8660765648255da437292bcb107dafad5f7f53866b936ccaa3c1d43040d95df0b80016686cbbbccde449d7db9853251aaa58404b4f801caa4f1155d80217c643a865c43546b44840628a76e17e9396610810c445f7a8934dcaf9b5995f688123b878a48f44f70425635176c2e33838efe368845d3d51ac3b402b741cb71f31995bea77718b30620b71565da2231c4d8ce967f6e02337cde00bdddf31f1ab726d343d9f5ff1836782d6dc531e9dc538fe4ad1abe9679336f0a038b2276d3d4a61d48a0e963714db43d3815cfef0eb2155c43a9d2a68c3ef62c863dbc1d7427289c1cd19ae0d472227d1835f38144ba2e8a26e0bfce9197523cd60c7b7132ec1a691805404d98f8e97f48d9f1546339ffaeed2cf9e1015aa4acad7b17fadb6367cac3a6037ddb997eb81d6f32c08b4806e7b5cb1da310ad9e2c8d7a9dab84f5fa526ce977d052a07de653bd2a3e906d0cc5188dadf6fad117d6b94f2658481be81629b16bd484df88ae55faef695beba903ec09c47cf04cc611a4d65ff40ff9f7b4267b53881acacf261a1c7e7e02d6f52d5a8a1889834590e21859357f8b39d021427997201a79644f3aca80535083996fcd64f4e5eb8afca3eb98a939522290bcbbcd4ec5df15d55d4c87b34babea865e461b5fed8bfa13a3eaad29f2e31fe00cd2eb25af8a47c2975121eba724d4f0bf608ab7ed488f638422c62627e2d2a800e0ca3092c4255ce338ce53e315730cdf51f5d271464097f54d7f5136d1f5866eb25f95cf1bd39a8c5f5e987685d93ec67d8ff56503aa25740ef988cda42484a146a696f4c31368dc58790a6530022509ece453d19fb78ea6c3daee1b4776f7cfd7157939eb9f833d576485c09837646e3f8445cad3c37eb9b8d88e83412207e9ce35e97971692ef02fd3b0c19ee2a634c2fd9342d86b8f8483c18d29b2d8915f56e57f93b82de8e4353aad7585471b609d89c0d87f1850796bd2512423fceb141f4434b447c8561c46696221baeda4a0bf416128cd223e1940a06a161d1ada637bbf433fed14e7e154ca3c65481b404065031ea8f9873c2f76159d63799c117d7defd8ea8d5bda2e729fcfd9fca49caec5064f9687d16e22ade1b8d48f4d8c15131efe21e7abb6cf2c87a3b918a39fd24e014d89825bbebe391e2d0b2b731d63851f41f0ef0bcd7c5dc74b217adc12c6218266a5bc1b40c05294fa40f66c2255f747a9314bca8b703f751b060cebecce67b4268595d91545d62587355b4890018d0ce1a4ac52796c4f810ae28bb0c183c7b4d72e843c291a38b5c9defcb313fa4e990bd665cdfddd638f55c86196205217ce9a7f96a0d822637a438b2c65299c3e6ee1f70c11d51d1a49e7ee1233a2c3cd81a7ffab76bda8d631be56358bdd2c34131bc7e96885ae0df2ddb862815556e4fb9ff620c9fbadacce61915b456f35925b7c2399e91b966849602b18203e67ab09bd40a4552dd795e7301058b56b5985afd59066ffec08287ae3254995a5923794b710a359db8b29a499815a3a43a3c6b0f35165ed987c485e3c6d59caf100ad727a1d32f8ebc1aeeeccc1f2ea42b9a0b36cfb4c9231e357f326aeb9d607dd6d378cb00130818a9665f0d2e9f3dfdd558a8b84a5b46125120a3fc03924223ca41949f7ed1708aaf9cbf0b8ed88233f59f3bc391ee80f584020dc8ffa00cf44acb167ed0e9f97eb3f499e0a9a3b7f48ba9666bef0b5cb1353d34cd7d334ac06c2892193068e0f8607724c01289968340e1fc9b8c24895cb2c9c8091322c0a63bd057439da78c5ca2df65e690885f2a63bd2cc8a2d16dcd413f5418775a95b9d2e8cfc80a8503fd0fc562da0fb7338acb8615a8b79c208e32a85d2d865cb96235878c08249be3b22dc721d8612ad92f9b480abdb36c1385118b2fe8f21b89a6d85be2249650f420827abd91ec650538b526a45ae3b453b9355b530afe999c113765dc6b334ecb392029a33bc59f211eed1b5cee61a135b8f6061c90f8fcffd1c392b9b214bb789c161ae6fbd6589813e71ab1ac38d1dc9ac6952e3b48b2c8cfe79f2324e7deb856e0c6a2f225ef7c74727ebded1803f1d101ef7cde05261928754581ce0bd729eda99837fa67bf823255149a9d61478a4f1576540c0bd86206a9706a7e780106ad71ebb30324650ecca529e2fa63b051f6641659383cff75a13a30e467b28a19e3b3e79a6165a9a73e024122f5707bb91517186eee8ecc76e38b36725dfb901df365df25162befac13de074a6a5456769e546a0c414523596fb53fd3327c015f5b756397131ce2c0cc9017613661a67e9af28b17042d5c83271f22fcffb5b23e27e42a10e7e6bbef9b7a24bb2568bdc9ea3682b2ed3142fac43acc8b4910c815cf268b20dac981dd0432aee1c26b0e6873b5293e8804add3772cd3811d4dbee2bda99639944d1eb2f1b133282f08553b2c9364d765589d22cd2a90e6420de021118d36d55759f980a84b62ec45566fd945669ce8539b7c5683b5ae1c158021d61879434a5eb7423ae7e9dff892f854346752a12a2c1993e44b4644e53516bcda71e90f31e25f92ab273190ff9a25c2e86ab3915622e0abce4d71732b06250a6c444c66506132b5cc5908d43e4e0cb0eb3d31beee102ec431302fa896652d9d8a330e94ea3e24e585a1d7cbda6ea99ce9fa00f5c248b895d1e579c2a3944539dfbc78540bb3353ff9f8c5abf6df00d5aeef70d503342beaa5858b148c9b9a649d79868cc80b3bb8de23dc36b68a8b194d9e955cd8a2965c1f0e5d520d1bcef5c852f9feee48f96a3bbc041eeeced1610a8f23f48688815614468281f5fd7a6b26eec00c8a03e62bf7a3818e03cc8d57392ce490285affedb323e68b3d87c3fb0982fa0b6d6bada49796d451d9a81a4483b4428d1840dcd797ede026903d55eefaae20a7c38693f3ab3ecd25370d3bed05b522501e5f568f8e82f36c89a110e8e435c2287569e868759701ad491ce2d08abf15040b235cda256b5d984c810d991a23a25f9ed4c26557d4a4165a3d186d65201250e1543e244f2fe1a121a749b594401cef63d91640c23c4bf7cb5d8ddb6f2c85a524e80ac02127f3dc536120706a185987974a25bada47dba1b4caffcdd47140416c04a6810d117b9ffb94fdc1945a7da2c0a8e5e77bf6a395cb0d93d20482940c7327470f985339090b66a10d7e587d86f3b15f0b0b499d9a3891645fbbee15e338eed695c43aa433e8c7e680a04e297870dbae8906142dd440ad3cca73c3524ee9e8a9045b7bbe323412535ec3cd84c577d809f4d5fea084a271b6c2e8cec3ff9b46fdcd62e633f55259659fd02f9f0e65e4472f5c488f1e07f0c27f301824982825d25319f86afb7231e5e2defb6246f5be7f3ef6f430646a8dde04e05f83914e3a2baefa78f5cf62b2647de7026a167cd7fd0ecdf78176ae1ab8420de6325ec34c3d9fdd95691953fd0628b07af06873f784b865b1039f3b96e34c2c6c81691c4cb924446ec6148bbfbca21e5807e5b59a134fdc5d99ca1597544a80f001b7aeabf80fb9e7bdb545bcdf6740f4df0a8c3d9877f91c80bfab03c799ddd384231f691ee476d19a1c789b6958f681a9a16cc72f3cad1a1cf8c68ffad3ec68217e7bd41aba4a5890d62cf4d2c30140818ae3f0a5d748853cbbac639db66881c05d51077e62b46062d80aa76b9beabf610540632ad3ee135b472be1ebe78e409228f79eacdc22591d8ee30cdeae32447beaa9b742ae314fbe58fe768ebf1b2f10ee638b03a03d1187ec4ab3cfdb63dadab9b8dd0c5b91142d755871f42147fea5eaffb061a13b2b86255d33860d336a5a684f16167fff53f7a60307576edd49a137b7193382a3a025e8efa17c3d00a019c1c2fe8b8960167e9c07066f0e6000d2f9778b2a32e300d0b8033182b44f00d69d015e4c68ed087a29b992a9c264214313ebb61385c7ea24d75f45943fb73bac484a45ab4c594325649a5baeed0f38c3495c91e69af885ad03898a4463e6c16075e1942ca46f3711df3cad2d4234bbf05d1212dc5cac5d436bfb377166e0ad9c1e2432bec83a7a3183f0cd7d6e8dcbc148756ae915a154053d8a14ea754bd5571a183bbf89018f4c4cc8945bad9c63614d19302854b78694ccf07e958b24f082538f8f0cbe03411b2b22ce80588d9e45f08cb74252014a4c020159070a48e8e762ec46aacbb862e344b90533931ffe255730f3a5f35d39922b1d36180cb8f32423d34b01d75a6f44ebc00723ece524e49464b01b945dd9aa31b0facd1ad5cbe98323bbb0aa4bb49ffb5cb9fa93751d95cd918b9f233be7d2db6ff34b759ae5653dbfc0e38b4bb45a208252e489e93662e1b40c2567c38274d655b618d8d74907d73a7989924d600dc4f4d492ae49b87279f4fddb4e09fccb4cc0ad8d274299415af7ff87ab24b1498873147dfff9b696be150c37d904350ef26cc4791bde85955f5b57971d237e8a9c9dbde7d40e73328320ff2749b54832161866c34ad9b6b509133bcb33a38e1e9849c1be2cf11fc718027ede08efd19a68f1956492b1190e20604175ba2ebf2bd4c099d21c6550f141c4b259865e16e7b6bb041d4b7b4733a0de6aaed9ec343e012f32f2738f5da1d3a4423b2ed22ec298cc37a730ae8e15208aba9db12330ec7147547df6492bd54ba5fd7874e05550220e145e169cd978b3913cce9b9ea9eb7ad9373ff8b001c0e21a6264fce00206e277e15a82a1c5361aa3e4fd5302bd79b520bbe2092067218de06751bb8ee8ade09372e41dafbb964e3dafb5b332b37c9eef2878c180a4707203bdffe1820447d1f9e964903ff98d05205020db97c91d3c83c52ae349e101ac710d8218ec2298ac91fb5fc22c6f4f29fb4c5badd14ced905ed158d85611b2ba80168b0d30031ebfbab11b059a84f0cfb61c3f9ac8fea6ba6e8a784c2de304a0b7052cf977c2eedc6d151d6da8e388934f6afc2c9e2a672dce07f46bf49480a61b4b611f7eab9a18b6c41ebad88dc8f61922967c879dcfa51f8290bcaa45c502f459754f5290f66ae03268635123a41158900a45beb626fe7b873d1776ee33b141c1c3cec1187e14e627c4e6e76c3db24033506629114450210245099c7f5467b057eebf3dde13bbfe745cd74db0ae19272353a45746879dd9074e482f3a527afb181c8bfd64ade42177e176fcd9bc11433bd921a811877f32d71ac4e7aa759018f4a2ee0c8c580dfeee13810f023f89c611bc796c24663ebbff64d5a5a520ff9c88281c6155b46666d95fdfd5e346e716224b0239aab7f3c302b7f31a2ae234ff9b58244d495e6658f2f192d839aa3a75c0e21a1d59419ecc4270d188a16270c1f226706466476b125c9f9a0d42bbb722b62739a83dcfd8245eabe3eab5b1fca1d403f5d25f1b7b4c64513148153763447f678ee5fe050790b186a9b050c4190d53288b2d43297087ea0e0756df70d32a55c0346f117a842594a0a85ad0505d18f4106dc9a0bd40b752faf6154524053595ac6c4d27eeb84c1a732e95aa14e3d6fa156dd9cd87ecf3c8117d49044e1fcf5024ebd807027852a9ba5105cd83565bcb76118e332d9f35c16f85f55467f3b121ef199f14eb4ffbe0917206d3620ac9157bce50ed613283ea8b3de35e9e166d80d239c4f80343f0385dbcc6059433cf522cad0a0faa5e8349a12bded929e27228e817e6db6a19697ee8c823227237bc69a983aa72b688ebd989a6dca0c05c91bd64e31de1114e247280546d75f463bd99da0ad8c93f4c5618e586034eeb1a880395c638c281d822fd7cc2777f62c7f04c9502ccd38e99959e9e7f67ceabfb59fe39f3061368c537aec047c4c0513018e2660f412b831268af0d4dff39b996abbe1f6b0c1f4deeac34f44a6639f37ad958bfd602fcf3e66f19d8501e5ac15a3eb0c5a13bd40ed60de26f4119d75372d55a4950f954e82ec5b21ac366c79ac9eeaa522de49b821d1793ace29e30a40906efff0247124b2ba1143ab47c389d8f1bec9c81eaae19257bfd9b62f5f2022df5600ff0b6088d8e198ee528e9d4ad0d1fe27dc17cfc2dd83e9f36b0703282906fed2b09feef918d477f8dac3e7cf0322d83e196e853a2cc3288e369ecdcf4b24ba351917349d13d2e970f76548416f5ef564ef3ace37d41158c9d74c258d4ad762d6a40cbb64035fef8c54403df27f4793e725fba5c4ba460a497be64d7f32de7a309b15f8704318e9c7008f1aa8620f864f7d6b01701edc44a48e3a2c1067f065e4259125dfcbbf6c29f034897f1871bcf39e30d31431a19a7f8677f93d4fc8935c6f83ef87cb912c8b3afeab14746a1fea60e0584bb332ab7adbf3f7b266bb7433e9dc5f40f74ed30d94e45f05e009d79b9d2f7839e4cf1756b26984bf3176371a26236973e9ab7956f466ecfed73b943cdcb3770c05278244b3686640306ca5e12e0a55ddecd3f65664a7891836cd3e490e153686651a3e938a49edcd52d965cb8ca2a0f834f71d0f5d818978fc88d70e48ff8a68cdf0d3ba6f04f8d5361487674c96cfb82d2c40d95a949c61208a0682baffee70be61fc25b46ffe9b3c7d99ee29f4ecb34f2543aca03a3d22ac4049294494de5fbce58772f414af3204c8d8d40f61452e2fa29df9633536f90d29bf087375b1a72accfc7176e97c4916d143051e84e2800a90568365862c94f0e4db945ee2ea4f8ae4c5b8c9a3078f212aee310a842a88e164d86ab78aa2b97ee688e1cef9faa814132d95a6ba8d4e0fb9e6f2f574c70e393b661001bda25788b9f1a2c86b354778169ec8ad6319e64f270d01589a428591d685179bf6f05706e2ffb18a5e7b297a91214fc5b9d1305badd1bc07e8555b98e1f04907b89fe9e16fd09c35d5808962e1f2654ff9ae8f1e4a190b2e1fd2160e37fd7a8fbc4494e4838ecc96d161ebb7b3ecd6d3ce6f1b2dacc121631c22d37e43fb93698351955bf21cadffa6b9dd6ad57016ef42334f22de046d12abfa96bde65b3168f5a3d3d4bff2aca50b9dbc19c8ab724241af6e5cf924011b478aeacf034e6f1abfcf1b548d996772970345406e019efe86adc9712d0e279c11ef4b1dae6e6bc174425be35f0b4a33bbe13e9a7d440d19ccba68376f69a8e9d30e2fb24a0b82a2b5539eb70318066da1dedecd6285fd2b178db006116f79e24be703a2dc73ffe52be33b6b059986cfb3a7466b49dd2282f0a0c9687c470b693511d4535a1c25a37d19b6af875ffa91640aa8ca5526adaf6910c965f3cabc49ce03316d29862982621e1495d54af8c149d0f3fd88a76078438e0022653ceed3d3928537084e0a0f3bf519bb3e862dd40714b33222f820116ad3843314b65aad821100c8e8f54ae1757387a855629a5fbf2e01b5b5c59a0e1b73ab2a39d41c3b52eea741f5319acf9cf96b075edb614b45650d3cd1a7f4c4c4d04d2749d5cec9354abbdd612b28f2ffec3123d60529aba37eb94eaada93acfcd8c86181fc492f0e33415c9f572c85415573734c3defd241fa505535c38688531ee2068cb755491c95062184751c5e4cabd85bdfd5f0be07e7d58dca698fb85e8a43207f4441a439cbbdc805b55826115af58382addffcba87b3645b8193ae6163d75dc1b8186792fc5494c2058bc84226efd6ff8bd722077732c4badd43c1eeb6c971fe3fe0b83b986a9d93852896129393cf3f266219c7098cc95587d6c469d6351bd472d1a17bad6a174f60da765f5bf973167ff910aaad3ecb45f2f4e9fa7ab14ee548e47a5d003a68703f733580ffe5c6ab219de6a620f407a222c9b38a727602cca3f6b0aab253c02e0213095b37077df70e09e1e78131fed6c90608c54ebb58c10068dff384c78bfe2ececa27c1420f76f3a8740353eaab3a65d52d91e3572d36b942e5feff8dea91368b1680a7ce1e59123eaff687edc29ebd73e683276f7152f857961b73e1100df93ccc43c36d821de73be295b12096cabee45a3d83a037aa931f2c9b16087157207382c80a90e925371bd925861e14649ce7de3816051a616428077b452c106024244a34cf859c5973c34e6ad4acf4dd111ff4bede3400d2096843f00bc51b5b021247f9c2f749a9aa0275916d0933031dcc96a1228d1ffde8c6f977a3c7483b7f6c74c159496e2600baf442885b7d21e3756ca0228d6cbbbd8a1b19fb4e33db7437e93a32659d5176ebdcb41c4d5dbc44e53e68863c6e28ab3b3ef0809d52f666d6a65dae26d6788ccd786a339405eb30f1f282ff4e0c68936d7f6750b52ad140ce04a12d5dd4aedf2fd6d1e6c0105448a5d4c99e941369ebf74031f7bb3145305d668112c39fd99b435f6e068aeb6a6ed05b8cc8942b2a8f92cf49fca150779fbbb22da8b0300499164e99af2ea3ec8ae7eaad7b436edb662daa3907a3f4ebdc4f0dfca88aeb10497746ad74dbd2f37271206c74cc2b20f3b47dab298684f3af594acec2951d5935341dc0ba86839a5ada98c9fe4349b553ec72c2d34b08524c236a50c7922c0080770c0118eeca52f5028bf08054329a1c08cdc4562e5b6aa165f9b5e6929cf3bbf239d7188c79684f97488bc9055b6a51793fe857d6c841f0368433be4657be69c443b19138f8ca43644a222ed7385d0dbfbf8e88cbe6d260fedd8a9e593b017ab02445f5eaabe330cfcf0f002c41283eab050e511edb544aa1bd35b2b1ff07d854036c3dcc352a4325d13d460033c1b6351a90168203989213f1f4d604675825de356673407e81a391aeaec05d18bf52b242244e1c369584e3a5df38d4777732518031a6679095a35e45628c245ca125013dfca65655d6eaea8b906f535f9cbd9a7394f013cdca4398e3291f164db716fe9c07992175c003e5ed886677168559b39a5695d3d7d77047a41ced7a12d9e7c6945af981b1f7e862558abd9c68d8cb7d63ba196859d4232fe36d09d610f73adbc25ad25f2e1de4ca804f74cc2172f362298eef9b8b5d378c235ea8701e3d8b7ebac0fc619b617a11f055d8c03d508c7eb575ae3d73188312bf98bef86c7dd5f5d9ec48cd0505caabe4d2aefdaf503bf2b61a9bb30f764c3bec1d1e6d45fa502f8cc23fa91c14353376ea65e54fcf136c9e3f21b5f4bdabce2a2ce51b2e36f96464a87a57cf9d12396ac27be5e47c7a175a95d6484cf3627a051dfb6c1afc95ffc04fc251b7ab9b560d02fa8edba4f18480261f29f4eabfc5911fe02067f5809eb6d7787ddac8976148b7e2f7bdf8383ec5a8fcf2b7d69e183f1803e56bc954258e48c01ba9d985877fbbba7374eac69ce7cc919e3ac0ee97f958d73653bdf8e9d65df5e77e14bf3f54156b9517fca53d973be8b01fdcc0ffb10764ed60811eb607f0d4432d94f16586a739db37dbfca9be24d2bdeb68a0f8e8156a03542e7fc60a26e8a3117ddfc2be9aca77198916dadbcbb4707411d78ee7f4507d31f2b3d4e8b2aed0ed3677a4b5ab09ad4bbbff76e9349adfd2a789ea01d1ce165146cb6c7d750277ba551455aaaf55d2fb384fa2f4f902c6567878ff8a6fe5a93b99db464edf7589954ef65f7778d00007ac95a54e13daa910a335e78ff601091e52aed898663681cacaf884b5b5ca37ea0672a8d118d319bf0c03111897a1ce65085219100aff1fba5940d4156a363e35c262c3860ba0c95914823e637ff6ae21e7ef5d69d09e29388464daf1026c9fe846449b0d15e1198663038e3012444c3adb4d99d84968e0587ed2456ab6a19caed1676259607d85074571630aeb0897359aea3c207aad599c3a936ed21e3acbcb3a6e5256158b91c9d376bd56a022f123c1426df4f72e0a0f955caf28472ed8b6bd4d25e06c2c8b37529cb96aea0e764f26dde6cf64f8b714d06304058e6a4e59514c8673123e014cab71b8536d9d481016a5e908fd7cda2c729efe14409aa70cb114940a0d818b8a3853e3bdabae883eea7ea23c30cc745a0a8b03fbd99628d446eeaa237b8933af39c4f0e3ef73816fc6b2951533440eb0e1c47129601484051e1a3db33840906bdf8c573c89e64025c9e9bc250355ea09155ae698decd2750e18e9859cf64b35b8890d1eae02adb494505b5a562b056769d871ecc4535683595d9b640aa49dee19e92e97f22ecc754324c3b58268f29da1929899b78146e74320ee84f170b93e9a1e2bf345eba0a04996c1aa715d88a09a1e9cec63bd1a86b8a1d191873cba5fa1225f57b74261f0df1a8600e90890c2e5802cc24dc3104bdc3ba5a5ff9bd1620199f4b55bc98d85bd699217eee360536dba1b97dadcc63620b83bc0dcf9d70ff6377776f6dfd975d874bb9e8ea8d481bfa0bec2136f36af3429b4ef8c6e88a0caaaae6fe08cbd65c162a60b065fcf8812d3a4d7bf8d32fff9162d0a3385edc27600ed20c0c9c721b14e22a8c409acd087f088a08f88c5eb38cd9ec6d37e8eb14fd9a47433eedb354ff60f6763055173f0250c9b31cfefe7dc263053be1f1adb83ed261acdd5f974be09ae5bad7ca0fd56b82c7c9a68ffaa49b30258d0b682b1c274ed68810adb91660794b72c00f17459fc56a526dbd72a7514881fc395f021a7a9317e54ac3520ec68eae0ba01f9990f41a70de156cec8d7fa9b899321065692580926dc8a7225ec9fd6e89abecb72564dbb4950cc842f0d002e9ee07e14068db7e48a308fa912c8fca37d9b1f48e249da068556e95873f119d5acbfdd60b20e407a0e2c57e6a2ae40eea25529c4b73721e350c6c69e77293a223480d96f4013e6c401241d95026aeca82905d458a32ae3dafb7c86e095564a2aa61c382a00f7b40dad99b08ac344680273b45033de59abbba92f52b33b1fc5c864ffde4552e58837ea8cda55630a45c24ae50f96f5af888239feaa4b6637bd23f8351eba0055fa3e517bd12d013a68db1261f6e3ef263750c3f0f2222b5b2c739b579e7154f9b74c76a689d656fae039f1561ed2c097a18df46b4050665ec820b0ce0e4c23074b80eaf6e278232589d7c380ef56edef4943763c3828db6b7747e61e03815fe68b8ee82551a1f61448c50b7bca865835c25a5892461e0115dba537ad5c2c3b76c47b35cf03a825e6a741a71aa2dcc1ff33b6cc2183efa7e16eda8feac464b47fd89a5dc043428548295a26370912bb30f68460ab5acf87dff925d353f93c777add5b29a452e2905feaeec2d7eb88854571c2007c0327444fc9ef13a8c3d8b94bfb95de53077c72dda6411de7299eeb95da8acf7c95e5f92ddb4878ee42cd5cdb910ab2b3bea562dfd12fd22b683ce5101690d0947fb730333baf85eaca1b1b9311f690b6c46b70edf6d519fb005c7cada82defcede572ecd539aec3df1bb312c2e64b1d069fc34c74777be7599257ced0a1195751d8aa82fc992b9b7f4985c7a792085e8754001aa30519f297fca057bd890d8988d8f2f406e95ee1df77e216379030df420b6014b10b0c4f67e5378c9148107acf78c15c33d9fe6d1dd086332a3faed44de98221f3b0611c49c8a9faf5e3804a125cfe0f200ac0da17a383a0087afbc0033c3a3a2153f22b934afacfd386f91dfab836b7cb37533318d4e0259ccd1b453db38a54f0e236d5da79d5496779f72b82f9117144350cd366135e57452ab3d941e0c237f5315a537a0160adedd485cb64fdbf61e9b131f041e141a00cc87079c0524f6c0eebdd9b47a6770b93904136fef3254403627401ed6c7e977f8ddb8dcb37e60716f72c554dc90ba8ec293f09eb6e35311a78ba84a1290363719908510917f636a665dd98d6e3020703ba886e4a5a6d71268008d32d8c489152164114ea1a4665e246dbe4a6d40d1b9ed38ffd4dab3aa8f1d6faae34bb8b32ff3f102cce6566523aaf1d6d6019c486a7962c9e92f9811b7b7890da1577c09359f34c0bf2a9de5614e4ca21e6c515ede8109e3380b7a04f7d0042e4e8184dc7b7baf7a7a6989c0db5a61eb99184128d7ae7fc811e7d531d8812566832ec4110587895399f18a207fda5f9db527c0c03e99c6e34ed2a5cc85b2d8cc563014e7b861e57c74fa97a259b13e1fc2232b79226a90956d7f1123704ac99fc4c13258d98acde3d88001c2c96681764413606722111154e75f323f5db8537d900e67c501496a9563228f93f6e25b90c64023ba9418bf5deaba4359425e26de6a58d2f44687483220fd37228bb94d951afa8eeb5c0416cff849a4d9954d27718a99276e974b2f52effc8e317c0b20a6bd469e96f39078f097f164dd9d671148e66e520c492970c1466db285c5e33034d0aa03cacbf43885b4480ac87a7e53a6b50ca2ddd43e4fd7b1e1083265d9e6c80ec3e978584f80d8c753abd1aa8921786505ac5c1e6acc5587727114a235f4ed157a009d95197662886b7864fc067edaa00deb64b356b3a5c4fcd050b532a3d1096cb42d548b6b3ae395c46f887304d2a369ec519d08bb2731ff3ee23b21beb92b323b042e1e43a499c4b3a421b7a959a8cb69a2a1ca573150793920064d4ffa652896c664f12b1c9fd9890a8536dce3caa2ea20d5355dc00bc97fa60faa3713599bc8643ddc5cb6accdfb0782a3bcc4f5d0aab3d8e7ba62ed70cdd6692a8908e3f99d2f15f120bf22d5ffd338fd53a7076eda32b185ecc117fdfdb6e510eedb95f5611909a18f1c80ff2c2f127b04430de1ce8b40c8f1b496cfc4b67ef7afb9a330b557e4052c74d67f755964b2493d9afaf27fde13afa076591ac62db66fbbd2c8d6df6256802ad413c9ce788b5129ef46717de9a23e56913c214683020862e6efdbcb4aa2f9520470974034131c27249d581e665ce7c95f355a172552b950515c168ca00004783c4a438489079313a536e049b59c16683b545082aa296d76798ec0227abddec0308cc30c2d6125671c16b8da0deacbc814da95237cc2def0785d32a7239fc7262c4e611ba317c0c8c57a9617aa0668887df9d4b0390dd5d8e4a585f1de826c81fe1301a1a7f1a5b0ed16d1597719047768e93b568c9f9e4940ecc8ff95eba1c56b220c4b8730691ca4bc4228dd7cdac1b98ea8746e908a314e802685b7ee0407893f99f9e895959b33d78ff85e9fda8900d80870c2dcf6ef493caac5e936bdad70171e7bafae7f6ea076cd4ef9f13ec759871a36dcd85258eb81063e4766220a32b6bcc9e578f1073500c7dc645ce89a7515b680bf47e8313b1ec9a8f76ed2401b891b0705a258ef8d4486f9af0d95b76c25bd05d6f2983f23f5bbe345b83e5fce904ad63d7006d81be2946e2416b4620ad81ae2061c75404da64f1e0f6b289af7ef05226e73a1e8c9f297d8caa9220a0652aa061a04591718cf9877ce66bafbf7f910c32ebc0876117b7d5dcc293a4d5d02af05bda0b9068dddc22690ca1206ea7558174d24bbc125a071df4dcfd7df32edd4a0903a55a497baf67dba09253d2d26586d9ee30bd164e0c49428552ec63e0892f340ba97da47030eaca153c2326b09968a92f2b87e6af79eeab07be2da999dfdc22fc7e03bf78189bff53671038db64fe1ff39696b456ced6c4b1d8b752ed383841ac4f4360451c14d6ed4c41665ad39de2ba22ae6998f9ff99a76c622e95803842fc69e25a1c77dbe3a240c51ba136ae4f1f06c0db4d6debd177ced1166ee73e54f03948ba182e39f37821464578d87e51a2f3c0ee0019570a855b645030dd10708e1d815e03100c5ec2fcea7c4722f9eb71cfc559bdbce9a183c7a38ba36ebe58415f29dadb1f868f504851df837a18ecec69d6fcf06ed49391d9d253bee0cd057cf8421990b7ca16fcf995e4f626793a8260eae50bed8150c8185c0776b40f30a81338d4be705d1b6407c06ca21a35791dc513c24d4f2b995d36bcc14112815aa95d8d9c5c8a2bc337b15a84df862cc05c82ccf6896f3cbd718355fad377af0951c8690805258089cc0e419fb93404f747d69e2e9df5ea658b511f0bac25d706dba822f5a87559d6e52afc7f38e1bcdf133d3996764ea4f1870a398d7b8ee16e5533763849828abe53593fc402cfcaf20cb8b97e0799f5659d4fb0dbd2b20c28225573bcd43e3b2a9ba44f74acf170491c1794057af7fc1b0d22f5b44abccb051a8c0c29d04ae5c01a918b28943c018f26551d606f5103199bf99078c4def50644a9c4e7a36fbc53d5ab4440e6c2ad9a6240d781d5bfc3f0ae18786092d2655ddeac161919fa41f69e36fc6a4785c0d2ff4c1d88085ca24fbf5a0aa6583c62027e4c63d8effb7037b61d5183a756ca037e97956ed01b4b087bf6aec21e8144281bd5248d8609b3b27ead372613d6cdb4b8ce31005e5f9beea39e902482524e15f1b3c63cd956837ebd5f3b95720abb85d2943c3698be3d9e7db0f88bc631495159b12271e8abb89212d960386887f2b647cff8760da3eb16b7ea95a28347c94f082c1749e0fb57b1581c130c21c70cbc4f3951e2bb29767fe0ebd16551a92634ac3508b59841b79a46460f6363905ba140708457d9c06a027cc0773bccab3e02c3077cce231b3b782549198ab473c7e4862ddc546ea47873f579072d34bd4a2f1dcd866f2ba1e0c2690f9d6f465c4eadab042ba3dae5740b3cc55509db223a6e8c6f7c95ee2896d33582f353372973564fefd39f94106168e8fb19f5f092bd3e91430997c2266fa6141798641827ada16aa491c3a047bcfac8e10e3ced37e11306009425bd2190e478a9eb48f3815645f13c6731679708b194d9eaaccaf54953783e329bb2e0b25e844d2cadfc69dc43052acd970d9aa045ad63a40c0f0f4669373c6bdf9ef4a03e6c7872846bd5b7630087a98514aa28653e81f342b0e4093cbb444cc313319682580b90520c5206ddc40628959ed3627046bf3a61120ad2643f1a7c986b06f8506dc3449ec865c61779c32012bd497e6b9803efbeac2015222143146f11fb30fcd0894fb0ccf1513cc5b811044c51519ab7028ee5a5cde709f71cd1665c30265fc240dae525d73dbb88dd436ba1ba1c45dfbee4a9c7f0cc48988d03d288986d4b3292460a62df1e0c5d16180933edbc768856e757aceb6f12870d6d6bffff40fe7389562cdf716d099821d1d0d8611479a99c362209232c0a174b462b81aa8e4d2f44862da19277b776ca1fd057a2b5d221d575b5383e2e28bb31f4e927640cb030a0d08d10b9085ed1f9cf93742c3187687a02df8578e55944fabf11beda1cc41448032280298a8cb83e6c29701a2971edb836651565da0fd7c37dcdf6f047b051c3f9ee5be5d6cc8ce4a6867bdd38d538985d6fd1137b47a1802340d6635ce42a464df911e81f08b9aa8ce7f0002b5e807c2e721bfa1636572fc6a50a7c223f7cbd7edb0528d78b6a55300320f470113814285486a7ba1b39dc752ac05caddf2d7da9f45e6aa2631447b8c4ad448c744d719c9102fecf6f73225bde589e8c6af6b49008cf5c20d201f4293e0e95ddf8b057c7046911015b4a4e30b1f1ac4c2842bd3040b37de001bd5a29746c961a19de24ff37b102694de1a4e542b0071c7b7262ffac80fd83413325b4eaecb269f155e322145585027102a75609c49a5494b66c2e66d8169ef62c0b3a7dc3c323326beb320095bda85cd8d695e6d19c485a2ae37b20d22dbc8e20bcec3bf5514e778d37c5e18a836a5a78085852b0a04945c151b0d08782e52ca6ea0d46cfc9b03e70c4fdc82e926e293f5626337c9b2b7a95528f595a660ce92272c969d089ecb42cac1f3b8221bb468506475e707cbeb3a6eeb043ec9c2012151b353b5890f71e0a59ff4572e3a064fd95be39759f19a8b0601c770be73e4b05dafabfe13f7c5bd16f56818e3c896c9413ef413253b52e0d9e1e4332e37b055dceb102450db5eb70a8e87e7bee5a31a2b47dcce10365812cc90fb849fc770f43b7b58e837c0029a258a3e1da11246cd2c089a46aecb0d91ef1927826e9a7d040375bcdb67b5139971c77db3b035d4b66c753b5f91890dc12f82c783260f2ef4add0915be9df4a8faceedf7fe241d4a46d800c0ea73d31aa8566c811fd6878fa940b489104e9ba8a5285cac39a8706521c17499a97aa70eceb2259272bc2ea1d772670e44a6168d1458e222ebb3e06fb9d0478e94133832cff19151844fffff5d35e75ba02aff6a49802a1c24c7ce2dc42e456955146119b70f92041a6321bddfd0238c1bca313eb2f989506ca8be4489789f4a86649f3da0c9a04c73fd3bfdaa953b5cc69996c12dfbb1b2b6f97e3909697c3f90621d68e3e27453242811dbd0f63d7952a332a84d01ff6b8c396d23145aa7aed265dd40797fd0572113b94434ede2fd2dea0418c1e9db86a1dc8b3804b7348c1186883f19e94e1725aecf5f29212b7ae66f8261777a559c55e434445d4342027ca5b08211dd4692d637a1c6ef426009e6a4dcf433d43b96fa56017390c1e6b6183b7580065759ef3b8d81901cfb0bf15932278e4accda3ea7c7be12e508499f25f2d3347ea3df3ce231069fb177f8a103c9354a51a6b35b232fe45dd11f39480285db8f1b34b7015cbdfbadb7ac45e0c3c8280815bd9d3d9a56526497cccb605428bb709bd86c02b617461cead80ab757fc05fde2b4db3aafd9f0434a494492a84b78d7d2053071345df3ec3edc4575a5c1e6d9d60fad1b73c4121a6ea22971f7e9713771c6bee7155774a4f5b496f95a80d7d7f029853dd065a1182c214be2cf9a1d47c362ae3f407bcb227a7ef67dcfa64b195f7c6308c18442115740cab80221e0cb7e5433e19ff8ba39d8d8c6ff95052171525604758fe3cf45977fb8e7bf888c0470bd79009ef78b36d85565c21bacacbed8a848b847efaa1c65a90fbe4afaa29ca7a8b0972f81fbb54894169c0f12004b71de083f3c1cac10b73d529519b2316b13cefe6b3034e29d3147a758fd0303af2686d745d33cfe3cdf5d823d23afc94dbbf8a24043313848776a6e30c92633ab0cbe9fa325de5d1439e901b1301bf2806d4aabdd79ed2963d0dde8ada584530294b000f36713835497d9c225900f24847d5f987665ecd458edca4dd958eecfb348a038a9e79a5057bb696965b1cb57de12565b2f53afcb2a60ee952704119ccd2febc57b49b5836a9d7f49d2fce23fedb8284d4623a2b17220f8aea856926d5e2c0ec689bbf28c505174ce7706bf3628a57389e9852ef0429a6c600528026d71f20166b4b209c34f25771127c55f0c7c140b3d6ba6ea680a22243cefc9845af14362222bebbf9e3215c7663a255ecd7bb3206038aec9d7684c99671fff4716d26ae9f2419982da422e22d52d6f81b7967c8d51e740a6551f4dfd1457ad5f9272b31b12bac4b4f52450b6662d4b76d762255a1eaeaac04630f0ca5338e1f13a200b8087d1d10d3551b40c0206dac2e8afc12db7bddc7abf11be9c8232a036594995df0b33b27c6963e675811a27deafddde93fe4ad1fdabe9a0ea1d24d67532dc6930a74ab0f3f221bb608b4d17e09a4b75482f9fd2e40bc3114927e9d2ce8c7c06b6338f17948d5b97204aacdf591adc755672b31e21325e4411e4391047f8fe9c805b7c6ca25e2230702d13c528d4b71ace5fa4c0a2b05d136f7d4ba93b2eb34aa17b694243c23cae8554d1f5ec9b71f826f300d5457a639755127b04c6fb4dbafb5aab1c8f536c53e884cdfe811fed5f377a42e339b98e615c708009e003a610d438702bee4c652da8bd18c73cc2812845dda4bba5f4dbeb15922c0df2770a7a82fd45ede145600129ce7e148efbaf8ef23eb4e6481e2471a89172cdbfd4a1a7b344d76d1a230c715cc0cab6e3b29ed0ba6df8217bc490eaf196a79a19e24d9e05d8157e7ed43567af2e24f20ecbcd3d1440d4914ddf70bc3e651e7eb4f46c131d5bbff998b2172706cd781da2e52d45318aa1f09613ea69e340609d12a3f41210d970e39b165aee723607f8b71d538d8bb433e058e364299dd146fe19f2115d1e9c98127b2636c68db142a497ae6b301e571b399e95c510924a69dfaffdd4e22e96d7d822632edd20547df26fc49992cb066a8e956806b85f852fd878ee08e4f12606de76bd45fb28f26b2637cec98cf32486cf5f86523f4faad14ba0d64d53cf6dc2017c660b71fcbf0bcae7e76bd0d2214c6c5c2f2792dac42d6d33244badb6d06eb42b9d5b1a586c800774f725aa336bfaa815e986b00efa4e055471325aa5d3546815286ff4542ba4802622677855a8bb8b377c48211c79b70e5b85abc8dccd698f154314d98d2f5eead7823c0566b6937554e3e9bee109507c2eec3cf517d16e89b80b609abf0b8043f07f2c88182008708c3bd9cddab6d18102ba7bc168981f29da7f24e66efc5c90189be5d39373ef6d15e708398819244a626a9a81316934ecc37970ceec1095585a537251c09668ee69d1ff80d85aaee95f908bbc50e386fe29015cf06fff4faea477d072ec3ed9503363fcd8269111b0654015c4244f0d6e67482bc4bb1e4201990cf91368cf0f13b73a86de580a643ca3422a13c8aee05d81d170bd09fa4dae9cb66ae544ad1305268e4181d692b015f767a66eea4ac6725552289ddb033acb36ab8e81af0a73000dcaf45b5cbed6472849aef5af41d82747422db3a2a0a76446d3a9cc4c35823eb509a1994fbefedeae38637b52374ff7fe3503a7105af0ba7c695d0fc4418f88ffe1dc539a1aba8f45a0421097f32921122a30419119b21d3d278ec6fd7b6e6108ca45f7ae23c2d9b428eabd55b7a1bd032732e9bf5fed175682f30f43818bc1618a794ce451689055bb57c1810ad08e43d16d701589b48ae92aa5d7840ccf65b53e151e5843c314120ad4e3de4449cea601009db3f4643c90dc58955791593d50fc26d5700f40a5b228b38fe1f512e5641a0a18716dfa19b81710f0ff363a25944fd2a1c895624bc9c64728aa93e97aad655e29075ac6a8591805fc816746d131783f472a5e461b3d708f5783ada2a493d4483cc97b842327f5d6049665cb29de02809e24a56e3285142743d8d4601fc83532857a87e27e121f8e94a216e5253e5ffdb2db5ebbdf36ad687ded7db962cfe60b43daf7b2cd2f60ac0a769a5fe7da0dac2d193a74f47a805518997cfd7d422333dbe8ee5c73d45f37c222013f832afe979785d1e31f2c220c149b594a3fa84a44550c78a30cbabb0c42cea4c5beb899af0859843083815a492226d645963fbc0975dfda808723377de045719b3828e1331ba61724dc0ec8d8cd2d9a1980f896439616cf1a41da142edbc4d4266c3068e3a66a45dc8f38582491da2b34eca3d302bce2f42a3194d0115b2755a8e05004411aba15e68a6719ba7f52cc8cfbbd486325b469bdceef4e11d19dd2e7596ec6a6a8005eecbef4fffd4f67b99a1210125e573b6b9991eaa212339fe5d5b7085394b1e1056506244a63ceb58822b9437f7201655542511edbba36436cc1680fe111631443cf93536c56228c28e9594d44309f46c9d089f3b193f0451ea8fef8c575fc139046cda2bf01bba218203884594482fa9f674dcf1e87ba3be206ff3f49eeef5825b28edebb73112804e5bf2030023b305eb453461f1291edccd2926e3c78a67ba8585ab33c9b514076876d531a2c730ca4b6b3c6877ce8f3fd57ded084ebb7ea30507565ee02e5b6b6424683494ce09ba08bbcaa66939f51f57a9bc61398261264deb12fc45796286ee83761a75b18e15481a6ac9028086a756e365787c911493dc15c6bae1b3b9e26253e8ae70c2cecd35980e40ed54a07766a8be66cc5d69622b064fa0df719e6f9b96260c40a511fb766f4dee75ccb6db8216b80a6e430be9078c916343af499be1cf9987343239d485cfbe20c54b29239599a5a8e48293eb9a24ae0c4961f5300ef3242df445432eb0aba7b459e44385f20321a80b49637b130d56c718dff341131d254f67164ec0471d4eafe4747a3c0760f76de04faca2782dbe547e108307bb15327e26a9b1f618a81c4d7d4dca4ea443a420750b66a3c5e654ea9d9407a30aa9482803a39cef45dc8f2a6093ec89185e1edc54ccf26f3bdb405a4bcb1f2e99ac0c6fb2e005e49e9acc20ffbc827e53f507f4c864efd513f3f4be907d843278b85d42640e94855816ae5d60b6b33bcd43476fb8fd82a4f7996a4ebe40d95f9e506a4250580c9a6ef74a3f747e30b7eb6c964c1e1e9a2b5529300604459ac047f5d6db54dac7c857ef8321ee0bb6d4af93baf6281d7d6f3ae2fd5a2eddf457d8afcd67823bad09e3e82941c25dc935ecc0e4df5475409c724a5e117d834ddafdc93d66853f54c511b7e3a4e2efc0d30b29e5fdc9d9587fb643247213064381b1a1450ad35298c8511ccc87d84b0f2ec6efd2e75897ac78447c7ad6ee9e0ec545e8bc5273f2685bca5a3368d5d9ff8e7ae1a2fdb7a1b6fe3cca3d1e83d468980a56ed6194bd9ed7f9765d034313b78263aa2b5448e42d956b00348219956b4e533ffdd6513f577db16253f7fdaa74b0bdb5c09d88e9887120021918005e78edd0ede84d835c4d7d710866e7e42fe486982964f753f9ad558f9cf5ff555c48a57cbada78320d66c80ac2a9978427d5ca942b3e0827582192d8f465580075157c7285ba1d05efef583f5f23d9f83fe6a662346e61074078cab5c7ac1f21ffeb892dc4acc3c47cedd8f04d17a595ad20be2f6b08eae7ce82b1b300a910915fea78b1fd49d9d1e60215c4fd0694c501704490cef95ec2746b367d2050f4e10c5847c5419713432e298b32434ef9829817df709643c9130a894a05052f153471a6c1aa9dd9f2c7068e7800999431005da90a015e48a1a43cd448ca378afc1af9f2efe8936cb5611436d50854ee8b4198e2b89c450744cb9fea945630ac104d686213923f756036ac1b802ee8c1aceb7afec3d876dbd1e38e6868bd798692c653bc9c62ff811014a80fc63566f5de9ec4d55b33e65d27e7b13d7527a3734f405c39e37174285323731d14452aaff585dc089e64e3409ee6cb8cf87c9988fb034962ed4327b13a3128ce0729f64e571bca4c244106df83b117542366ea690e6dde53af32b2dc8e04419ce0c939585d7355e43b3d89f65404d8c9885b04d5437b4e69e28c9f522215e6a39d96c37de35ab91e05bd8fcf9445ba3ef58c5eb32f9a26d6443422d19b0118cca2c62919174b2674bfbeeab3112693db07ec7668368842d08bb3cb5dfe847d3d2ad109e057c184a8ebe8fb370321e6eded37e06e8df4f72bbc54bd48df655831a3ff7e7a7ee39469da0a0cd3d6a64a38435d2c2aa1ed9ca99600faf99f46300aed11beda2b7f884f7e6fc5c4304e7202fd6469e2ac8869b27b93065ed95070285cce18c5232e9a74b5f8c3f292c22339882fd54554170007e5f001f86b350087ec219a1de8fdfc04dc07cebac2233a3c4f5b16c3f074b884577fde37ce6018bfe521b1011345d60174c9acb0b030bb050cfb5466c94364ecc98eea7a9ec3de7d8fb6437e1eab76388d1aaaaf83bcd8fcd8cdf11195d7212fc740f7ccecb22fc21ee544d888ac678a454b8badc3747cc46bb31f59002ce4ad3010356604233908314d92ca77ddf060d9ff77030a92b4c252419e33b8a543daf2e61da101b5203aa9c2751ba36e8e7bcf7cfbfc5914a38d87f546d94f668609bfc894a91b8329122d96f9db2be9f8a6f3fea38d148c9090bc1553804df9ac7248e343a45f80ce80e50143c3bb9953b1455865df7d641a7956b5490482d7beb5194467575a9468385a2cbe4cee937a2a25891751551ca53c929609e2e8569cb5514d5439d962e6e841cd2d46949eaa37fc03fc5905134185dd0821d8ee57d462875937fb1252a2b6f121994e96b4a95a5aad4f1545f800a097b6ca93a0f9aee691c3b21295a1d4a76a3fd16f732b05e905c40fc67fea37dc5947e3043fad7c5c402e27d079b51ed7189bb76881358c991e4755e4ce20db8e4eefd7f386f4106f1f5195edc6d05a40a407d829cbebfb5c561b95939b172fefe77e410a0b3ff03b6bf91bd1332071b20990011a49c4cd97d4fceba891e22533f7a2d9930d796b9432e7dd361ec071cd29b33b161f71337ffc1df299f90b7ac16c73f3f49974e233d2c13b6c2b40d5471be13fc88d5088813c3c854cc27cff1d0cdbc5c48ff59b762e06e680f3b08418c4bfad1c69f2ede38167e5a6b7f44c87feb29339be2ea80bdc9265f9c8436bf43a28f3cbd49215053df82a0492b33dc17cc08795345530198501931280439ef112a840de86438b33c0be2ff09168b1553723110666273ecb46c44ad8f1b026ecdb6fbecb99a836cbd25fe537f95c1dc93ff869380aa39e98da9bdb8597e1ff804517b74bd676f0f4ae94b075fa9bc98e2664d9f87d91fe85412911ac7ce58051f20a36bb4cafd20a35521d0716c09c2a377038c25f33f7be6eb246d688f6c9fb6500f7fb077f5914a340775ab3dd77ea3665eb4386da111cdd2f1f826df5914a6fe0babe51cfc839cb1d451e6af5c2836a7273527d11b8751f907d613db2806e874d0f15c686f2005593f8c2ff2701fe51efd77af249469b183de7255db30b9beed6fe3c3b62f8653cfa39b85f28d926b1d78070f6ff2afe6ba4f6748af040bb98b4c239b9d0228c1a42ace4cee4ddb9caa70577f85197c12afd6d976e51f6cba5c01d02a7ba7619c3799c92c3ade812d1f7945ffc5fea1ffd4997a36d408356e174b66dee14ff7d59fb3b96b27feb3ae7f3f7881842e872193754357bc38ffb96a5f1030bd7bc55830e5f6265f31f7182c2437570d376bf02f61995c7f65549c312e05d7901cc3dda2b3462741743ba5ea9c2eddefff5c11bb777262815d27ce33033d6d8f3d892d33afa2664101994ab0bf6f0edda5243f59891974163584308bbfe9a190a14bbcc10da910158363986c138b277c481fd95d1a693d9534f02761712e40428f5f76733036d62612681a4091fb375941f90f9d13c9feb232447734ce2a34738b5c52e9d8bc32a04b64cf7adec31b2c6dd7f642badd482114dd35cff914400b2826015bdc9acab95e08a6e9b10c1b9030e3e117f1ac1fc7695129ee99c83dae26d8308de884aab4f6c9ae675b55bd72007951cb2b96e1722a359c7d33c112946dc68fd42cf9262c9cd4a93b83aa340240f6a5ed8f2580a15d91629a03f751c445ea603ff3e86fa9ec5985c5aa42092b7fbbcc720da07f6718f667bc0aec2d8183972a5de30721004039d06536f876727108670a2fc442ce559c80519f747ed5fdee25eb4e66daa3d3267b1218b702fbc03b8fc50f908d3b491a5b2210ebf4ab436437238b8b37d6c77363ac518e68f4d5b099359647804718180c3a46e0499800f1d1b1e9ded78af8a5aa945870765abfe58aa4af10c8e071cbef3a8407b7bd10430c2a8d219862d235c6c761b815517b28c6ac95c971ac4b867712722c0f152c8c2a866227372f26d8bd4f184b9674913ab14d6794526b4849046aa106383f8011fae729523865289bc11b5225a6c0972393c07a59214037ee94cd1cc34a61430ee1f8a1549cc1a421afc738a7981bc15a25306f7c54fb32f06fba0b70afe78130b8f759308f6c059da640c2d27121be08b19919946c9271c3c5033d6fda96d734b121b2f25e06b6971f4fe51db2b9c80540310002fb326139100f4f8bede91981b1a2300c8c516e1d4448160c242a78220a7d50ba644964eada4cda32b70f1947262c32b5f38eb766fdf619d417031b77a30ed94ad00d33950254818bfae3c665a4bf41d8cb981cd8128e4eb9baf6cb93250fad4076d16bf3645b3223bc3398183f9d04881e315789c7cca0f6be4f373e97f5f47eb2c139f47b439157cf9bf58d513b3cd3c2867bbfee629433f630951d9e8c2740245b1773b9a772493eaf5d05a811d3cf773943db20083e2cdc7868df88804368ae8a412995713966fa3cdc63b3c3b5c420ec09d736c6b05dd4d0f97559d087f45f324faf80f4cb2397dbab386a4849151ee56986c647ba3a84f3dedb553051b84cd14a00c64a066f3d6888470ff993e6a544c7f61a4bf1109747b54dc82c76a5acd06556d84ec11470ad75e493e321a569061499b0f5728adb9e9dd36d2512d2522a260ceb1f1c3ed9fe5394b9a241fbba883c4cdf2c9f99b4475fc11cd0b19300771f19d5c04443ae76639189f05b9118f36f350636d96b4c74f39cc15f13a5f743536b696af351059105bb570d0cd5ec1298c452e136ae3887605ca930736b134c5d19f727a90ad4302b7cb37648d1b8d3e773cc166abbec51e7da849a3e704d2d65b815f7ac8327a10ca9c869e70fd93836511e634a66b575ab5b749b4bd2fd1c72e0434843c7688fd7dd55c832e13b4dfd14e1777d72b84a26c768c38ce96a890a6b76f01b47c583dafcebf912bbd8a80910f0f5ad1e4e28362cb9e7162301266ed466dab511f1679aa1d24235dc56dcefecfe10a2d156749347b97abb2de44830190bc12522f10a033cbfc76be9338b75d4f7f79caae28f351f03752bb8c383131037d0a446967df0c5e506f9cd2a0c8a6d5e7fb3ce2436fdded5037fed189827583fe85f28a5f3675bf1a2c41f6f0927962ba92ffa7cbf50856d6791d726b90fc19e22577080d7a9495a3ea20bcb3a6802523fb56cee0c067c0a44e64f87324ec13fc45634d67481d2a9136ff37bcd097e512ce1ae815d23168e4d2885c543711fdd46edb629e1e0a0c547996b292f40668b338181e2230b6eb5d7220f35b650c6a6f0a9d0fe496db194cd8bc9c2adeb0d6e2f05ed0f4dd45ed1aee9311e061585665a057c2957dd8eb95f335e341c76e52efb8035d51da6af8d0ec27354c65f0d2c9b56993aa8b1f0d764b66d84d6c889f6a667243343bba6ae82e96d5cdf328b2cd08d663e9b26b5b06253c121eab65f8029571417d2414a0d4215f447d351f3f95b23a767533d1121ad59019eb0a07ade638e7f3726e29c42d160a77aae5bc1ccf7f993b95495bc33b3a9c4ca2440e89d1064c2dd8843ef4f913bc6b7e5385e8d221ac406a58076e886da1bba5b507f13e2ac157ecc87700d71d43d7f135b3b226dd0fe2cb5ee40a503c2eab940f0999c789f2be25c0175e542a3c20e4d061c129704647e5d447290fc03eb1eca95495a5905fbd8c3abb17cfbba1c7499094d5e62079decebfc42d3ef0402ea853bc4f763f12b9e3ac2b7bcc62b728af510c5dde64cdbfca35f4b012e770bcca93b1327580d63169b2b4f8faaa4babc6a15416f9086d79290af1918fda018296cff561ea158f97b5b15dce43e2aa46f4335edcc67540c43f0c36e312be5948a09bffd4c45217f3bad9033ef9afd3d96f1241e3f9b53af2a2a6e61aa395517233f7cc95384c18fc7b840acd480551cfc6d4f781dfa9bb8a57bd5fb3425a751dc80a6fa7b28e7f68951fdf3a42f8568dd380265ab363ade05235e40df44ad9ad5b840e1dbf787d030eaefc685a741d8a814537fdd36a1943d30012054c15384d188499008af3c882c1d49c3c9f011539978557e3e3a4deab7c86fb1f055544d23c0c66f0e3c2782b8829d09bf3900ab09844bba67845adf958aca5707a913849aa702af50600ae1600dd5d2552e70d7e2b7563190a73eb19d438b46801eb11245d6ecd42ac51ee9e74a75c811e11cd17ce34ace89e52b6c4f9d3121e0edf95b68605255373c4e8877e24f2c9debd574c3b2312e23650939ba2ccca31457821b73b5aea0d954056119abe45d5a762db755893951fbb7c43a817525e60686f69ab52fb87c6e6c3ddc2d995096f84207f9f980497efd5853df7cc278e5b448747e0ff1d1c431c8b7ad79d5da935f7cc1989e7b01c5e94c3d024bd530b0c069ed00bee547539bce5a31a11ae92ff31a3a4fe6ad36de81cf7ddb7b8bf83825cf64e6dde069f5712afc3adebcf73bc4e6185d16e92bf27b5d697ad3558ca438343889a1be5db1571b6b068efeab118c3a064ccd1f3c240335baaecf9ac162d40f1a4c47ff27ef691953ca0faba1418a6d78768b98133bf1f58c1f445dd4ad661086f27d2675f726328abac850c2390f5e3bf997662bafb6b6aee1239c6d685e2817e1ba4ec195366f32c446c3b76d26e02f34c8f44c721b8f848039823d0fdd73fb1521b7f978e911a7d78a341afaa27ce8ca25881af885d971866d5b103f51ce48fdcaed72f68699b4bbf7fbf4a69cabaea1505270b860b39f740140a1fd243839cee9b9f9e4b1234822043bbfdbb999532c43c26f7452ca454fffe0a3b4ee08a56b2adad017f9271210a1d8938ebafac5c438db31708472f4dee64c5691cd86394911a0f6c70c06314be566a9de98b295d5785657bfd3cc290571812657839cd732b98ba7b28c665d0259de5f3458726e365a7f73e8550439550bf2438e03c5ac4ee5752c7479aa29445da223482410e7d0516d293fd513e1afc5d1cf67514d1715af8d61f2346ce454323134761e67f17d521033b6284752f9110c83ce53a452b70813dac530f5a6cb71b9bfd40ba7ed297d80041d453ae2961700884dd5dfcbc7e3c4dff768ff6a59d19c274069ba250ed5db575b7e830e4e16def26c46facb1eed33aa7fc7139f2135348301c838408dac2c4efb0273b836523c41b96f3c34a37a0b0efefee95f5c2b97e262d0165b54ae6d60e1db35b99baebb213ae467f34cf1321313b4214adc88a8ff54b34750467b3e3f0e38af8ae6f815c26fc5c79ad73dd1b96e6a32ecc18f9913742c7862deb6830038fb46e00acb1b5ce45c239797425f0c5ecddf4a39a546f4896dad9f5bc2b312703f113c8e20fd321ff867af74165514d75a063f3f6df03a63b1e8cea8d8ab2a7f5f47b78c4be0338f9ae42bdc5d0843ab26395130b90dfea6c419f29017c235ffde206cf7b7deccea67c7bfdc9ae4d54ca9e0fe4624a7bb3842e521c5d0b73afde3ab3033f46e8a482b3f6409e6cb1e7fa6505bdbfe924061e622df15604e669995c940d9a2269c492686b1444ad3ec76a6ea21fa8fe3a644d4e401b2678e51f7b2727533e215f6856179667126c7e62f82ade878391dd2496b464c1d7f46494fd22e7a1540ebfa1d41f51f2b65b90c6c8cfc9284c27f884e34c63476d8231cd505d5ed051451873a4d1c94eaf7429bf977ce037615786fff06d95e2fce924bbcd18bff196f9eb6ab82d4a41cf3c2039e4df8e2977e03511f4b70effa5b1f0f8a519e315e71aa2510dfc76261300c88a6954db292a8874668e8aee1f1e232035a8476337e00444e761a77179133bdbe6c56e1ecbad7966e522515ebf3984f0c4a6efb7bfeeac499b3109998ef8a34af9310659dde40e386d9db10c5a89e541adf9a295308107d5bfb18ad5d4fa39f644526e9d4e518aa553908bee3ce0c6267242b050ed9c76f90aedda789cd1a577eaf7b65d436062ce8bbb1317a94a65f321ee2e6c7cb2b239997e2367709e4c7730326ec9f257677fe005809da4a059417fbe7edad6625017b58ef1ac1e74fa89e34227e9252595fecac01ab3c0086293d1e6d7d19db5eddbfdbbd5538d11c8a7b0fe8a4a3b9ab2c447c7145eb652c332774cb05609423a570c372fdd8f35577e1d87e5dd003c4ac2bddc8d9b22458a8344aeb780915e0f6ab5f76b37a533b13af957ee60748fa0c836014349675f4705f64bc647da47521b8ac02855a817694b1a47a6b6ff20d0ca093b969f4440a3358b1449e8c2362ce0bc4457c26b770e0af4b62b079c1d5e358591333549a57746a1f6952b62ca87256a5f25c128d60303fec938ed29f28bec7aff91d1c8640b85884d7acce874ca6db60eeb5ea8f439ccedf8b37c67f17e01fd6010660ddd6860f8e9f099aabf470e155f6153075e428fd85744cffc42c3d08c8d8913db61ba671233fae6877393f9c86199629a4f0cd99346832e22af44df636e584f08bf92728a97d25ebb84e53d3cde10da0d6f44e9a184d6118d2aab64a170653e5fd2fde36de9ccc0a14112902f6aca63c837041b8cf238f87108d9891b71efc524985c94298b39a1b9e75e5ab1e21d5accca8ed529a293d5e6517fffb9f8d64e47cf48215433ad4df5a899e8455df10b245866f3dc2e1a04613e3a4e6e715c1532ee2791271119426985619e409fb02cf0ebbf51888b0d216fbfae80ee62a463d2cdb9e6214ce420f70994368835cb7c8498074a91caaef9fd3720c34a16634354fce000bd61bf6d0cfc9c457ec88ac636f85fe6c333c2478645f91fefdd1846dd282fe69adc229b89962d0caf87083eb25db77caa87b81ea6a34154d575d7111795e7529136a36a2a61e08415da66fe452a4b715df1bbaf92f6931961519010272ef244b28810f75b43a10ac37ff4f9f3a09f9ad7fc9bdabefb7170139971b722e517669a46603c0a928475d672cf955832f998e8c08632a13bc3ce392c907f255947406690aef412a75d42c014074004a822952088ba52f7f19da8ef47acc520e83793beab74ae342b8cb75b8711507f3b78a22213c8daf832edd5097c718f27611190cca572c3b6237124d8147e80ce2565c01b03724b96c2f3caf94754797f9952c27e8bab20591b971f762c0bbd077a24ad53cdb9ce3123a03dfe0244325ebeaa7272ca457b7d4bfa229579b860234874286c5358a59c37ea7799ff6ac8e2e4dd01d3b685be21c3f54bb5bec4052b3ff099e41586032a9096427f9db515783526411faa20ca6f46ea4521f446c6a1dd5c779b41c7f5c814610360d8374cedcf44234de4bb5f7a83ca264c678e7db11ea429a21039870fa14d3fae504d2f35b39807049aee92d2dabf754725d6f0a433d0d626bbd07e94c6ebcfc1239431d818e350b85315b9a4c6f44511d91ab2802b7605df04952707361e01145a118e2c0e33a32b6cfc786fe81911521c44a31723663238803b9e5668dce81bd474108a445ea0ec90a2ee2e92d8c8fac7dd75a69240ba0f882b181cf01bc8fe2dcc5a4310af235ae76afb3510cb5f5840b53410a6d0ea6140992e483bd7aa3bac0b0231e0fb554ae2ac653c6340f129dc059a14a088e1242d49bf4f9f3b95c40d60403236fa21697f289d76cac2fe12ca87a5a7a487291d2ad288a234e345ad9d58d8c020c4308b0becf5e172559944c118aed3f1e412bc5fe132bdbdab6ec83ab6b23a8b26e6ca5522b664308f4ae39c6b0732b628079aa00935fc9c97db4b10415a81e8c1b03ba6371785e1604a1d8a7be07f757378c03c488f413f8a4d12c45ae953e01001f1658d5614eccf9883238cf851536c70ec5f01979357d93e89ea86609cd66643677290a79db13239f9107a7851b6174cdfe726795f87afa9d66e0e6139678dc514c55147a439d2c4e7defe4828a98c0acc3dbf3aa982edc7e965fa21972f1a9578fe89f430d1e14519278199bf9418b16a74246abb37ed0f363ad65aa20238517db2f3c335cf38ab7fd2441f4ab064ea904caf7ce4adf607f1a4c3d38829ceb45a3371930c7eae14ec0a9b90de0961b527b74411d3f29a7ef68e863dd3bb1b867d01a6a23b3dc1227946fb3d0fb413d4d422c6ccf8f5fc22c42cac83192634b0604500c279f5932448243f7c2194ae06574c96280874b829a1f40c70d7a553c1b4904d77ad01c9ba49e80a27af07442b73780b4f16c0e0f07830c33855762a21eab04210b8e62eb5a6f8692dcf2186c4f9df1e700da67cd7648d4e95a6f3f5d226a54f577ebf720070fd2157aa0b14d76a13ef24afdaec7a3953f2bbed63ee932d16d476547992d14c3dfd4293634e3363b597dcc3e8a5c09b1536d6991271a4dd63b55e11031100e0ebc1064f62b71f988c6ac48e936503299aaa86acba84b1e55765f999321a23c1980b217759fbeb1f85c3965e7e5b5e14a35a34023f7fe056ff11488e4a5e9eddc0caa82a3c41743d8c12461a5f313b24a155deb222162614d4f6d849af3dab3d7a0af7a47a769f8ebd5e8c00636f29158a90988f6cb3e2613f8aa50b2047bd8e22ea4f3f94266e3e173c2bb48da485fc65f9c26e326cd53ccff9e66425b645e4db6a6a6ba2a7bcd594b02b054b2361b8f432b7ea7b4b435b6e2283eee90c922408d3e0815d16882fd39e7677c43968eca863cdefe6b3908c401a6760b4d95db056c90b3a332959fdd263312a86802269bb6245f8ff0c2713348fe49e379f89160f44827ed96f6b1ee727da831e9ed9e48978a08c2643c6edeaaff945bda2127ffdc4508e609bc538888d7737ea38013ef9648f3b644a41ef37f7434ef910695e3549f36b6c43f36de160fe7c7165abab3719d47e58ee7109306ef21d2cf8ce40609981b5bd5e362377c61a3813ae60280f5b3af2f6ba36904bf35e36dbdfae1bceba169ccd8d882f7a48a6b894493e7d50d70caa330ed6d1964891bf0bb6a05889cfab2bf803c9ded7f6faa523dd7a2ff03f2a5fb72bf4d8f5be661d273e58660844da247c63282a9124304519a0784e9b77c65b2e7e931af853a1ba20c11f1deeca835a5711b4f5469017f3bbd6109267d45ec80b48e73d684c98f9177d085e9b2e69fec4f501333936e8c9a6dd8da857da70b7e5f68470227a18305039538ae85c16ce0a80e07ed6cfb4ee03398b549bc5479cdef70587e516edd53df016101c1eb5cd4d273e8bfde4f01802b0b966667a341db40a71c6b82312cfcc145e769f1318fb5c9f6208b491b40c7fcfc16ccbd084cdcbb1b232edf243c6c9391db6adda43ecee0a1b03ab043963ae76d41824315c92051e50eeb8548814b0fdd980b855b93459e124fee2d33f95bdaed6a41de59ed7ddd0e70425b9a525dfff4a43f53992833bdf2eb6bc810edf5d322e4665ad4bbbbcd562abc058b61bda341f29e0537e5fd17ffa8ee8f1f6d62838299dca4a60290125526e7c108240be3db44697dc316f92d977e7a09d8a9bce38798955164807519e551c27558c5ddb0c399958d66926d799f74faa3a08d4e0017005b231eb2a30bdc4777a7c9ac38831b876e965a4687b1794a8c03689d823fa6413fb1093fccbe9665a8fdb23958a8d581726669cf88cc8c0e2b23f8488416c50edb932967925635466910d1c84bbab4afad3a69f2c02f49233cca8ed39165dd36b8f8874e58a68845ba122ca03ea1f0985b5cd618de91504205cc4fe026dfd2a2fe51576358aa3937d76afedb4583860df1a43d74b7ce22fc5bf2f4d5615efba09b8dedb735eaf21150fb8f8b9370ffaecc8784e35fe323f4380624cc126509ef21260f668feb9a625d59155b96973801bfb18dd38e776d98b1943995e5a08f59bd9d5c342f982f611329a8dc68a00b2f6c3b505377c6a079f0034e6a486606d78b6484960ec81e2a9379cdae3da4d3933d88cfdc93cce8b3e1e061b397208321cc4146ed958337027b33568d8ca907c542142923673fa1307434bc8721744f9edf5164129e2d893916742bf586358529dc524162e6fd6f9608e6565e71fef17ffa674c311763e3626b0a158c9bb784717f6e1e8798cec582e44abc02fbbe7b5f310cb2cb78eeb7642fc1cd30377c008552382db0d8a74603e8b855f1d29297cceff5c97f02615b51724e06e3126febf3235570dbc58691a8653ac0635024bfa71aa97d10b9065c40cee38c33aa761bd099fe7af989c5dc1d6bbd41f411f7c6cbd3a4a3f2fdc6f82a7c29da2268d37dff559d1e2a02fb85242dbd120a7d310985eb976f9189eb8632a20e13abf9a6505b70c9b8c99ced421c46a0700357750f213ed3cee09b228858cef075c56092dae80f8aa33dd8da65573e4d236d71dcacce5813deac1374b3283a219bdff5b93dd3c894af87cf4b81be08abb9eac9fe8ab2b635ed36222a463e7e645d36903f2ad329c7f97e43dab82c7f69fa58bc9b7605e8a3fd11a2bc8761d8690ac9450237830b68ea24d71b4c8ce58765c373dc87a81dd4e0e0b805716408ba80056b31f010fafa8dd7637973ac2b24fc7a56b47b45cacffcdc691abc5b1755cc1230656fa989fd1796a428cc44be6ffba3e8fe88fecb1e62956860da5fd0021b936a767415ec6e1ac87190b88f3637766f7a32c5f2b648e5a087905442adae9092e65e892e11e4acaca92dfb10851dbde26b30321c1cc632d49ce48c16a869d6ef7a6a16903c1d49593acfcd01675017afa98f70d5c8324e5ac756a6344cd980e5c425d7d2799348e6413742e41afabdc83c00bae25bf3b135e7d39d21dcefb2b1df1878ee1b2184e0fbb53288aefbc37b74f6dc60bb22bd993583ef6d2074c502e71743d336aadc725df7ccaf5312107859fc8823ca0ba8b285d5030529076be9a2809bae140b2192d33e661c7a8d8b446b6a7019440c00697b805203dbef802cd17077096d362857ffc105d3cda255a86b6f07a0ef44ecf455e1100910a65feff9f4ed355a6888329106b1c1782c1346ddec41783ccab6f2ab883e4e364456fe38bf9b12683402514acb21e97a627792903cf761b46e0c79a582bd4a60c160c79c17d6ce1d8e101873b0ede5d11947b7fca9483f131ec488b5e63a2e0bb529980c83fd8073c3511b217719745f9a8e8096ea7a1a0429f6006e3e2c5ee1d80dbe78509bf9a5865ed16ceb2fc6564ecb72bee2cbc2965e401f549c4b4bff05641ab7912372ec1f7e598c62beaeba3bbe4b3fd5a0d8c976288f68e45d53f8587be0a0b308097292042582458523062514c049238f190fce8a2c9587e326cffe4b157d0a99415a314ae42e768f02b50535401f298f252888ac832d8f9c674447a9b7fba59e8f066d1b011314526b4268fe306f6d1a91052565da638ceb1624f5d368140967dc0a955774f703d07f39518f55d32e2e3b7497bc78b5e16103915be987795f44f1922c8b70a784746db634b5110632727170c85ffa4d9b095d623e248e4e0629b9367d085d99435855a3ff4782f98fd8d01f9384858abd96036ebbd25ec8573a4d1e6d4bee00128253067a8aef8cebc75e2b1ca95655bd80518748d216f72c28b2c3b5f7f05174c9456765498952d1ecff98f7db6ee64e85680cf5a821d5d646312d11c90a44472ac9a0db0f5892c04abbb06b92bbe4de18209d2c7060bab096b1d72fcb580758041a9cf5f7f5e4335c22d8ce966572e63e5d9f64457d9027d20dd8ae181f724982b6f25ba7aec91f1521b483c569011a7a6b3ea3cc8ebb141438fd856a00e7164e4aa7e3071e3f8b094d6abc90e7bc0b652c08afce2f6e688361790478d15a4e7e2eac7b80fd5cba7dbbb3c1c70008ed244a7bde3cff181c14d584d55d5951aa9db552fa681e1a938dcf74e7f6b4bf1f151bd46f9696921ff2df34420aeda78ee33c7875667d9f6571ba75f5967f8a29dd234d531ad43ce4c98a93a59ea33274fc7b060bf09c8ba5b81c5634a6c6f6fa5b12efc5821a983f34f671871536ccfc105bbe0a32885a71705893518516413ebc2816fd4c2b3e98da2881c163b89b6a13e1ee18ba31cb2026bbfb742fd798e8fb099d2a740975c057c7bfd2885c8ad58f2028ab620ff7800ee7762c5ac4a1009e5a2544999d9126b2273a41f514ee1cf87af461c7fa7c0ea587b3662c04d7d15b072a2fb5927220a8d2028cfbf0ae7fa8d2bbeaf67db7d46bf27278ad4578922448f859811d06df80ff7a790b877c128d1400ad02a350ed77d0e98d52f6a2f4d95716b4291cce48cd39710a2ecb1a1d5f4079fa36c02427c3457068d97f11725d22eab1e500ced0ee8b02ad83ac2db2aa898616d49f1e2a50a3bf1a20b66804cf187266d469c4eceed7162d84eda970679f5ec3f593886a8f6b98d5259df8eba51a35c2ba540785ec754d3b0bf935ce2956fc9d323bf461b19d7aca691b6dd07713c29e998b8d5411c05282030b468e9df376b6c2010b30a20be8cae1c4e3e5f56d069569e8627db9be9bdfb9cb80ba6070ac427b5d233c4a3b25592b4bcb14f20f67a5dac27a1dd7d879e9ef3d16ae35f9df44d9841f666509a8251b692dc028588936a5b1347958f3a1381198456df3947e8bd41033048fde705218680252cb0ef5a539fab72c13ca348d2a1d7f01e241b3c8cc08d3af21a67e185503e2d27904c59791c6dd6f300ad35f29015764b253ee6b8835dcad49a86e89e5e360b3b430e779563e21750ac12584b13a5634b56cca325d5c329e91f31bb3a9f9de5cbb524dcdccedd29e1684621ed84ff13d18ef310112caac848c7864b6ce3c2d1115650a2ae7962468c0540597e2cc2cc8fd2b752e855b7bcd689222133d2984673146dcc29e2ca5a0e9b27a6be3a3c957f15eb7aa5ab425a32c6bd2e611c534731337a51df26321f6b0f753f8ade49a3d441bcf5520c525449b784ba1c2e8af14e24b41f67af759d6e4d28f1d0cd2c78d3148109ef13345bd239cd0d668f0cdc1ec6db70f6ad9e8ca4891fdc3d578d4e9589dd88bbbbc64983a6224e02e525f2cb44d8a84e84eaee3539d411931eafba832bfa46882c7ec238fe03a91344409bb062c64857ca02de65d613b7c3c4d3004e55428ed49fb813ac9c9b288af76bb75d661072f6e4ce78fd30ffe89318ed0d791c45882b67604b83daad86fbe68297a3d2c6d73c20dbe940eedb3d0535382c325f81a9318421e1ac8ef777bfca514dd5b0c54018f619dbcf08150b80251064fc723254df3183481e74ecd11a8feb889785e0be51bc82ee39c9477065df4aff3ba86f62505ba16be36b58bcb598afdca9f069c0a8563867c3df122f6bc38d56197936335d26382e9ddbb560c2defb003f95cc5a278df553b2bf7344579a0b9fb70c09670e2df57d7b1be6f837772f116a45249aab57da9bdd8f65cab339df040320861c1faf0f8e7692632cdb79e7ad3406b8a9997ee123cd040908ba901eab710dbd7d32bfd2eada7a8ad47c662b0ce8836923f4edc4491857a014e995ce0f4fa6dc3060435debd4471ae8bb3af41da55578f8b259c99f4446b24a2695fc1f681477d95b85aba617b12b6ea8222519d716dfa6d3fe1fc495afd5f4ee4e0eaea1518bfd68e44ced82f5682c41dc2a62ca02d144dc44a4af9aef83cc77ddd44e4ac97d4476452f56211517620ef873ebd57663bc848b3c884c8826b0c137c987ba0062388f325a5c2e54dfba63dd4ce2d763dd88f07944a223ed91a638ce418514147e3a072c5642078fb13d374bffca05b16130be00b53a18a4f5ab87bc61395ed9df6a7902f2339e7d358def27000f2ed26df333c6526bdcc2ef7198d567f31cdadbaf40053f0dbea7a500daf5b31c7ad079f76d012f4267dc6e8ea96440169240df69d1613a650a076cf120002b897d73780304172652441daf30ea56ffa096475baa2e0001a00222384ef452e5fc8e10dc19227b1bc6afdca0d489722b3298ed5b5f49d937d8176e458631ec41d3f9d2008ec08a61a56f8c975f7804950ae255727a983891728756aa83b55c2e73c6424fa282b775880ede33c0957c447395640aa9fb09c4730bd1def0d52a8c331f43b2b5ea86e473ad79bed286c0251a6ed1bba7da4e94f6f0e521480846d8e10701a63797c111e42110adf969d801133dd892187efd2d777dd58b80ca293eebe824142b2ac4ac697de0f50bae55e11bd76c4f8b1ca296e74b640e005d772c5eaab0ab760ec95b0ee3ac42d8aa321f9291080e52e810e96ac6cbf90daf26442937659ef69fbf0a6e6459ad46001108b04c9542b14d52379e556a90d9e29b4cc64a7004f78e9f9c07a64ed5df4e1a8e17fdce2cf5951121e2b4e64bc727e67eab1855fbf5ef1137645efe15c7ee9ccc541f9bd8c352603b851cccfc740dd993167c61e9bb9d080e6aa2ed48cbfd4ab0af91bfca1656584805b0b32da8a12311013170121de6a17a936415c28d06071feb69f1f25d85996fc646692058d2c78d1bc7f56676f0a2f335670539962869f49e07e1d97d5486de4b9ac901fe451150554cd3a5435db1d3ddbc0dfa6e95b4ad84a1d27e821b0f711071ed56371d8028bb1752ed87a119e0f55c3840a70bbde7832d77097a2f8c27df1d3ef3563a53334b5e40a1b97436f20f69e31ea4e755451c4879686dbee8a338a24992b6ae9a450ef9a2ee7dc5031ccf4ae232ab2eaea7837b7dbc1f6a6f277cc0138e4a5cc392fa03046fe54abeb5a68bbecdfcc0d68297053de5e8fa37b2a375052183e1ddb9f0fd6057458cf31cdd3da13f4210aa82be96ae7b1ea147b7f8e4df30278e3df2d3ff22a30b5e5b7e6fe0de20540b785a2fa773bbdf5c323079cb246a7f42277a43ff454959536cdb67ef3f2cb18c884e84f72fbc03166b2bf6e4b61e95c55d8ad52c732017a28d39ddc90080583325187b827318743069eb1658bf4dbc400175c6a452ab43f4b0a574e0bf842ede1d54dfa891343238b2b52756f3455356d52b3e0894a9b5579376cc1d2e5ef9b99163363bdfdc008fa2546836c7861525168786df1239f6010610013fc45af8aecb261c59832cafd49f85944b2f66b4740fbff629954128662d26116c24d0b0f276d9f54da72a735a9c81619e0c73b08ec38d3b62d53b19f9a185d942806127e09e84ae1a5307b26111e11853a9d3d3e8d3979a7594a1f5ca982792340f447ed144b6ea0c9d10c1c34540e67ad5010fc37f4255ba5437533c3729a892ece6416965608d09f60536783f6866131c36efc1836f134de14283734a86be78398bfbe6f0a0146e7e1a5e93e70cce6e18260bf71153b55963641ff7aad4405e29ea0b5a0156437644f7a6f41ecbb75506264df4d7b3d67b64ad48eb137a6506bb38f5985e9fe01b375aade4fae3d173c870ee9415dd0424f450c388bc99065fdb63d4865963f9fac2b72d16d1393cdd09bb3c375dac21a9f6506d93e981cc1f6b3c590d16a6dceb12c4486636f31508fd29595aa683caace649a5e2af6cbabdcb156944ce2274673c8dff80574602952bd484df74dfbde8769bf0e6a051e8ce6e95da92a9319237a7c0d343d0fa8c93547a3f0788a099f26266b4f51525b9d23a07e662e5f3dce0d373f9a10f8c344720192ce0719c584a7068a848b55c695c6dca097a3879d5b8b500543d46895196824041bc70c7f73c209eeea1475da80b3ac47d05dbb0f1a913241eb0c883369caa24e1d516f5de23d613ded2f5dbf6a2b0299cfcf606e465bc4d0626d1e3aff22a87cfb1aee886f6a2e34a881d8a6dc165b8952581241c1b25c656b39b6939d74499172f282d0588200c455621b82951b1ae2304f1e4aa5c89aa87529ca7640d740e53b0f50c7488b6b3810fffce4a0eb4b2ddcde2cd4c3932db3b578ad8f806a68ed3929cd9db9581e4dcff286f87f10f0350b0724dbe575d7dab25757a379598c12a679e2f6ed6717838d328c189d9ca1941855959491ab33bd1c2fdacbd290ed9a5ce3f37a346f66a9ca0efbf4ae967ed2eb08db318ec4be05b5e57dc671b9250b8f6ea2fe4a9d6ee23373c2746871f41e7ebfcbc3301a4ee0065e0b90603884de11f47e64e60500129387559f8880e429231d908bee55c2dc2fae7e50196ee0669871c8a41ab41c683d41587cdbd1bf94f99c0b497e4eb02f5efeacdbc3b2c4915adc2e7952cb4897c6f76d9cbfccf53df0a607a7be817585a2614c0aca577f2831fb5a445c7f5f8107044be0d9e46d62f8375d7f57c4b32c0904503c59e3d2bf0c7c61b8e5db1031512a87883138e9ece5cffca47ba42d66d549d915e78079d9d549cab022a4193772b9d3ea9209ead94bf44a6114a17f9e269aeb2030fa00f1209ffb9c17ff5b820a5c4310d4c1ac9dbec52d9167f017050a65bfaaad0ec866484e3420602309e3bbee6965cb14c38fc2be073aa9eef3f2e9bb413234c75e39531b9e0ec7c943e42a7e5dc8e453cc916fa2cd0dfd2ad2e276a6c22fceec56561c6b3e27fc3f2600c41fd0c1e69d82dfa6857944185f861f8051e462d77557b7503d07898fa740beaa4d4c908837b13f01399cfe1af8160e6db7c9dc58dccef80116ead4cfdb4a3ce43e7fb278d9d30ecd6bef22fda5e2876ecc01ff76d4d58564f152f041b3595bac4bb33413997f0adcc0216618064a46f38a3b4b4bc59c9793fc3a9b1a113516bf5b0ecd7978353f4bbcd62836287849491eae8ca5a30c532ee2c8d15f09163e62714a56e6825a9165cf060557927ed371194545603bf2cc80026a41928d364a31491e29f38815c6c47f8f498ffe81d0bd4a646c5fea58a82be5114a8872688e50e835fd057f8b41d21d17bce70f13ba044677f08004142b68dbb32f05e14f2f2703f9999d61090a165d3a96183cba9607fc2d9a4408883bf73f56bcb2ae22c7644c919c68db05a31be924ee24edb97110966ea2e516e04e6f567c03b4f85935fcd7a47914a4fc5971d1392dbecdadaf58f569f8254e96fbb81dbd9206fd221b3d2120d3e35218d66c260839d5f18870618488d8a93655ec2afb4dae89450f17285f299ab18a62de951390eaf296ac22ac6da128fb055e38110a6a537e59337a39ed4378c63b5dc7321aa075b84c28dba6b9439d40acc4da1d96a08ada2330045815895b98814b4274b23c839fa0715cb6a32c563dfaa99899f0f24e65aa4328d41900d4a0d329e009644b0ded2b1abd78f450cafcf132fca15b232c356b6102ba208f4c8978c0ef54c3e872fe817309813cc99516863e650ac61ecec44f33037918832741ce81e15c994dc8d3cabe2e5b043388a8500b93e3f918b135656366aca3f7a6154a82909ce5ed2483664a8fbc007b5370e00f40d70987dd88d833b6a922a7ccb304441d4df023f0b8defde77512fbf1243d49b6ac5a10045be65a6aaee9927ad825c1a8d73c69cc50b66541c61b48d41bd9904ae220f148891b596a53005ad06715b66ab34b322c6250624f5b67027ebcc69624b97c59075f9e088716501ea088d849461a4380b945d9226ca2f9d15d03b442d92cd6d559d3bb160821694463d4f49fa0dc5f4b69508ce4244b1fb2c85c00109bbdb9a2ec28f46bb92a1096ebf96abc998565688b6b03d43c3975aa4fde60ab07f8da527974a53fe36b0d2e1c72497879ff9c6d57bf63cb862d98ede11e8340c839afb310dc2853752d4aabd4a17b3f209afc07ef6a6c5e604af5fba622ed1a785656d7337d8d73b5ab6d2327da13c3fd8f1620f43d838b24307768aa45524176b26ae2664ca60a052c4f95dd6b4ff6da1e745b4962f5bb5e402fb63604ebe356580ac3f282e543ff71a044ec80355e63741a4f913dc73027e210d266a66bb25d1cc5ed9618cc4f0f059af5a38e88ef773d88495f75914ec2700dd4d66fe90405b908765372be1715d93b5cf5d572bb184417b06fb2458849da7318e94335b7ea04c339aca95d5dbd15b8ef5ca82fb9c90a87d549556e8868a4b690bbf0fafede5e09868d6a5c2c31de799acff9f63b572628169cbb6bfa12bc8237621eaa0b53676048ca3c4c025e21ad67042dcfe65cc0b824fc4789d2d72194f2e3a9fd1976113b8d76fc4c6a967f3ea135755a9a3acb9e340030779ec3c07fa0be4abc5a31c6a577d046b40dc9fc6f747b72f277e689f1124fd1efa340f8cdb4a9d30e47ff85a10e37796b1c72fb58da69cecf1ca1957ad3cab163a3ce722f1d977bb4a814c1bf86f1225e3e1359b71ac5f02a34e91b85c87aa5d728c86261de6ff9cccdacd4e67cbac800121ccbc466043da7cd5f819a4e35f06bceaf65d56f349112c219faf1214528132ca53387a201882a0c53fa4ca947a6f54afeb4aac967e70e11e6e235556341de64b3ad269cf5118bb90c43cdebb2c8bf07a7d64730742da25e910323f1be499f1081b2d8c5ca99db79d976d1b68d662adb5562a5ece9ef7b49597cda55b4294c0c74273327b922fd674ee968d0d0c6042587a3149c986266862b6caf375580590659238a43731e849d16464dc9e8e410662ab8587e116cf728d19f1876f2eb3226dae33acfc425e37a57700ef1c3a4ac5a5a7e417b24f45234f18d47ea2a3bd160efaea256453c7a97fb8199877b6a89f31a76456e0805cc89bef716a15d61073ab5314bbe620232d9bc9d1433d0bb8604800b0cfbc7861b0b58e1fa6501a041391e804226efe37d118c2a840790ef09896fc22b6e69328cdd781a210746bbb116a551988eb448ec74f74d88fb61013082bc1841621274aadce8a974773a4ba2653993a3bb63b84249a1f85ece105e27d2222da6bfc89a1e1fedec35225bd684185a6827cb9196b87034a72514f159c40583912e7675d3489d4c9ad42504c2f70324ecf187581d9faefaa2c58eb6e37cfd34a53aabcdf96d3ef26e084a00d2c94ab7fc02120a1f7a5b5e1fc970b05e0f9984376d44f88f70d21e610cc5e0aadd20bf27c9a14c4e2cea5a15ab73f043d342d494b2a4110af82d1a18973f4077a818efa51c4768ee5835b251a4a4e4de58b081e746166163695ac107035f57f1051726fabbe7c2241b384f38d36d4049320b04bb77df4a5fe93ff956a5398cc99c0923580861e6f9ab8953ba589733293a2f5ee1a4127b021171e115a66078ba9210617e5778dc128c125e66b07483ee25b1aa41eb4ff1ab6804fd20a45199d9eb5735381fa04161c0f7e1ea49f8f6aeec91a034311b1b67ec9141e815f17ab1fa731cf165cd245e5a1d7863cad806a816df4dbe2adc212cb247b559d4f906f1a9460b7a469fe3878597f00ac9a7f9d98e05e63508d621adcb13cdd108bfc4e58b15e0f3a8241b6fa01a71a12eb3215bff8b0d0a6ce0047dc03082f7b58bb271f3190c6630ecf906711fe8145286f45667edf312187919c30a66d2591cc99254fc0b9ad4999aa5a7cefed2054807a8ed0d626e23e57ddfd053076ba05705796a845cb22f0f18b961786b19355f6c93c1e9040ee09b543ea5db845473715cf7c5b14e4f057b3176dc6aa66c44a99213789146b61de33accb3c6c8f2e81f6e6ae3d85152978e6a1d95f6d6b07cddaef16d462ec3ed34a0c72894648ccddd27c489e85def4be9b2b3c28daa45daafaf1f517ae55bb0e97a71df2a0b0a85e6376199d25f136ab1d285c071bdcb13f08308aef52db4c6bee02887e171513caeafdb42d93e70a7d989e5e608d2981764d8e07cdbb9d4a5fa8839bc3c0b774b8a747b51d545f01be1ee0168c9998af1243c1abf3067d40a17255174e1622eeede0b95705046190a19d42fe1409394785e705a3b784fc1b23fceccafac6fd3acfebf0a61b434ace4b016f9cf57d005adbfc870bb0ed7e0565a9e239fe77ebe5aba1f71732c1990156d88a26d3872f9caa71ae900539136d1986ca7f5d37ac60139799d7eb428dd10678aafcb88f0d7d723664bb170821a6fa85013f82a2eb96225e5ced18744dd05a32bb3e4af7ff7cde135cb7693f685513918fd8d63a07a0a2640f1970802a2a95883f3af123b419dcdc4e64ed13da61fa17c7aa678ad70722ee3a2aa2f699a79459806889f28f0048fb6c4c0028ed706ffc80516249ed5a64936153f101314648be4a0d7a403bc034862f3d47515d5752a4520217a95f2f155ae4fcecb211c8b02748a23ecf7b56f4b4a4e58acd30737f1439a5c2199ee8d58429a9ff642c691081c004eaa878aef5c17b4f840ae2758ac8676da99f73a0486ae3da8f014d90877cfb6fb18fa8d3bf8a65d463cedfff127a94af716266e078bc79795813700336194965ad1e993cd2a9d6cff84b57eda1ff5ed013f102296a2db7516056bd9b8b17ec5e39da6dc2a6b0495d254d7dbeb73c510cbe568a252949bdc89203eb77447640c3c898cdf3bd816d597084e53f26a906ad4ce4a9c25a7288ebc782bb03b53fb79a4206aee2c1b420dc6b70b0e2f0f9f5f7f64b3aa472299fd625c1cb685d3e376caba160777b28084f905852ad569e9b2b5fb06efa0c6baf685e81720c1df4d87f9756e84b77d41d25f8ef697bb36e5aeed15b7941dc0693ef24f5a86913c038acec1f2af3b9d747506e192fc8415d05e55d39fd2ac599c9c68ca6df1c6c4d7740eb8c707e20c9ec58e3a16b371c767987dd34f0ea236b14640760eda0416a470eb2c70d135b46114e7fd4fa90d84bc0c30803ea64093945fbb2206d85ca413f1e4a71f2842fb9876694de7415e2790717eea47f55ac5b4935a2a050a8006de60d24890757ab232144045be221adde14d409a7b6d3b4e44a91bed3e00cada50893671314e0a8da15a50955c8f438a8abbec6006ce583552156c685e8de621b812791e2fd2f31e73604fc38fa28a2de01030e73223bff3dbd767150e193a5bfa317e5400fdab27099cc3b8dfc7b49710a4f0dcc1ef90d639b452e04ccd62d7dc405c0972b400f8820d09e352b8b11959b84829ad059c1b8268efda4efa49a4ebc6524afa095106b6232975a2ca4f5d4e8e57b4582906c9633615a703f8c95c8604c025dfad7d5bdd2102f4c02836f26c4bce647a52fdb296176e4818d2435055d302e3ffabe821152ba9d37b3423da3080d30c86587bacb6a1ab2506faa0f4ea1733819d4980a24b569adfed0635dc6c221c5efc7ba111c78fbe521f571d03cdbd770d7ac2454bc017d13239464d84be8288711acc2faa5363ae865fb3f259b8af6ea137926efee15aec818aedb03fcff3ac7fe77492a401def6c62fa4b91dcf5587a8dd6492947dba65616f7fc65192b5d1ca30b18a306714ea2c423e94d9c4be8e4b34374795d84cac59f4bc572331a42f974d842c4c66cd043d4565723c958742e724f0f7ac715b39885b1484ea37e3ef4432ecb39a691b2b9b6ec236a3ab79e54caf61578188928e9d4b0be39a82e51e97768cf5f1ee110c2a6153296dc99b0e549097abeaabf79b0a9b1957fc339136f8f7cb372990a6d0fc49b5d732f334111fa914764034bd54567006280acc03c11eb28e24cd053bf6d10fcc892b1a7d52188ef8bf5f5632cc5985194c7387eca3b5b0a5a9b2b87451922e011d12487aa2fae368302462d2117050faaadc670cc669a746b74c98b7c621313987e33b2a6f9aa8e41eaa96ba3bd0d5527695f3fc836874c739ef6fb7cef523a6780ca669e6ed174a0ea7eebd4182acb5c237a832d3c71a7d27af65fa6ac81ff544115251c4eff2b2f6b86d207e479cc76b5d70835a9405146a981527878a22fa7d2b59c7d3ba09b369f471a5341a32eb5285f6e1edd69fa3a23065224e936a60b8d7c925c062870f749396fc3fcdda06fd640c2668a8f13905c368a913e21e18daf1f84114edaa141066dd1f7e7476106ac3fb9bf0471bfda200491c441526e7f6cc913076f9474b13b1f84e1b0b2aa605662a7bd1177067d70c1fb137742eb6dd4125c0b3b5791b845426cc2244b3e20c21b963f750f27555fffb4598ea5d70344e4c1cf36f3e56f8d83d80be123768caedbb81aa51c5b0c37a3cfaea3e3e1317c0052e2910724521c5a3cbc5f797772716cce9a6a312d8e5b4b5f0b6bb39e57cfdf019eae77c00b03906829d1f769e64ca30c363f886c3d963c975c7a6037ede3413cb8afee36c43afeeac6c46247a9831978f77c27bd0b083f04280e341e99e0624be30a4012b41e33a53f6f46364f920249f9986bdfb1a4060f96915180506e0d7cec44d70f1715c6dcfd059a29335e09fcedd8c7adbbedfe016468462ceb6951a3bece0514eedcb55b1aa77ebc9f54e46c06baf6cfcc0be54252021201e55e3570d656192d6e2147e65a57ed3b2f7380268c3040e53cfc3b0fcf04f291f453d8e12e05d6b9a5ec2d6fa0ae73b944cc0a3c5ec04782a2a1f40deda253134c99ac6cf8ed649dfcee729e93471c54c168133adbec1f349ae3a3930fdcf71571aed18c085b10862a1cb87408e2bc327c1880a3d0f458f14b4e7b8cc2ce12fedc5f9f37f54b23fe44fc804f18bbc37ac00674bfa3711eccbd099a2d910ab16b0a117cb7e4eac292cdc887f1302bf688607686860e7817b13a5788dbe89c50eb87c1769eb86f469c018af149e4da8254bd1da64723d66c46a75774078d7fd5fa2c23a8981839e5f98c22fa5bf4a78a0e5d4dcfea078f85452134f35f8e28f10979d7566f316565d0d44dbee7078138546d4e0fc0585ddbb039c25bc16bc0a357f848f741f7bcdeafd0e8ef6f8d15e82760b0aa23e53ea9e992080ea0809ee0d660af4942cb91ea309bb301203e70bdb6bd4490289d7b1b3b3cebc1e7f9bdc3ce18d425140cde8e02a20e3a380ad96c15dbf85b2bf2a5d360667e9ee519740518d1a99eaaa51db5caf98bef3187636f991f741266c12af4ff1ffbc4d7916333f14bd9467700f10c289a24782037250cde781296d19d8f58647f683234eebd559efde8e12b3f3868cca17b04e86b8b2d2ae5fa2b54f0f0647a6262d7e106f511c3efa696269263cd464043025a9a24b85653fb847731b7e83e8ddc550026881128ece943920803af36d4d71eb6ad13fc9ba3757fc9d8cd62cf6b44ad0b50fba237209d609682e9c97ecd3f4d0e07d613ea02590c441187e018ffb8c6833a7e33c861663071b2bfe15e26ff4f61a361b50905baa114ef9e05cc6b9abd74ead7625aa9f091beb2eaabe1340d13087f8b5be9467fa77e194c4b4982cb64c86851558f16636a2c3c4014a9c781dc44ab6c73e1d7297fcfd5df883e5b17466e98c613849669a5249b71725d88a30470a7cb9361f27b27684dff27d52fe216c1455232b7b3a9aa353f164efad2bf6b57b477ac880880d82e97de93f8ff9393ef6258248683022a12cb44b477c0dafa9ab1b90c555cdeb130799e47157daee3f5e8270349b770c338d148a13e562b6a5d75f3c8ae6d345bb604efc1fcfcb7a86326a794fabdb43b622d63d9cf76d4c189d9944bfb8b7511e34711aaa91180d3c2fce484d4750854b32255179f0f07a6c616e3e152db2b7a42d60455e2e614aa506b39e66b42c83298a456a963424cea985f19a7b547749f89b436c5dff4efe97808d3814346961652ca6aebe1c3322bfd4428ac79365bd15fac438be9c21b7cd784b0d493ccfb88bfcc43087909c127819779dbbdcc3b68d3a612ad609f660b21416f72f3f81129dd5823737f4750a1ed64f03740a83a5dfe37f80f575df958cb73cf356a409f578bde4c72ccb43b2f005e6925f104b17ff8f0638e4925f8713e7fa0d358d62ec1c02dcb2b03945bcf16018bb4637ec5c629f34189d61a8d91755c2f32f97cb9deb80a94caafd03fd26d1dddb4497c84c885866eda62934319e64bfd1049cccf5f42589306f5120b37479ddbc67020799cf962998f215cd7ed3083f0756c91e29936ea52fe60f70fe2f9d91c7d465fe69e1ec9ba81bf1f8b48409660b38170121ef6892f4d5772248bcdc8b7a6baac1faf73451e3455d21fd73f39f4f15dafc116c6aaaf6bad368aff5fae36304ab39289483e374c02b9fd71847165d35f9f54698ebe9b98a2b4b52fcaf37e12a6225819bb2d0349df4e29a60d4dbf137dbdeddc87f6f5be157b02a6a79c48e73b2413c5bd1ddfa1718532293ebe40d056071b3f360eb70a99556067c8ca0931f52ca559d5b06877588643f5dbf562d2d2178bf30bbc7442dced2425229b07b25f8d15de9a6de6e69bf7dde056a1102655efcf70d26cca01824b1bdda81dfaa80709771dc7b6a344f5ea0d0c83d81f60097ae16203819f337fe24176c96a3d974e267733892fbab4547fcecb6e85e795fb02d7f540b5288be61e729626db63b924c43a1e1174366390534dccc31f18f114cb954a45e57098e2e2200bf12e8d4c10c42a4e2338eae94da2888a2d07b98540f11ed6fc8671c6bfb10cc4a47f3aced04ffe6cf3e6848ecd5d16cdfa7978a2113a0e768bcde1568c62ef7ba5bdea4a4ef0beb4e86d0b399fc18c6924635ae649c2fa28cb5408c3e0eba4f355e473519ede970383d2fcde0a01ea26e42110a0bb667f6528be59bae6c79114e5de2e87499e06a5005b2e9b53943f3575950a40baa390c4829133a604a08b5ebee7a7c6a3120d106d60a9ed6fea67fb73edeef14a3700adda90e28059132d95c3f96cf00b36e1ce4536ba060257979d76d07e12532a43a2db70c7313048e193ad812b1711aebbcdb96710fca78b1b0911784ba57696e6a6343799523b8525ae2e3609d1ddfbdc28eae4149a71aea40f85158c90353b69e4b6ef22b094635de4e6e87297eacb43dbfdab9f19adc5d2ea69cf79d313593a31afd8c061335f19f870af8c4fdebcd4e76b83ab0a3f59bcd6c37a86c232ecf3df734125f2927c7fde9a5772b883332d84ed78a96906124c9fec7e078612b8915c15b00b036e4e5b4b222fcbdb55f754f91a266070bc917898146e1f0701dcdb37b049a75b2bc5418dfa72361a51997fe2e4c1fdadd05403b65da41c54103a3332bb146b9711f62847eeb882317d4a2ff9a095c821c5646b0f79779d56abc5014d54c4c9acf1dd09641fe6a44e1cf5410669698a1f1c195321398deb05ffe00c8db3e3a7554767317d78c0cd2e5a21d3b3162977ea2455d275d734d4d3328153d580232a7bfac39e1774ae7a9e3a34aaa0ca4b4bb3e68017d7c351909486a1ad01fd94dd541a014ceac11f27cdc412c4449bfac5234b72bcc16ca656d3add1246132ef291b7383b353e182c4658fc1d181afce01ae114e8d6994585491a0a7531e704c9973a96c151a04fc3b3f03be8ec71897c58bbb29104b926bf227316c871db9780d7c3f0a1ba7cabce3fc5416a03626253d3e7ef0aef9500d9c2151b4ecfedd4c0deba935a7ff257c161cafa7d44d7bfe49e09c4ae98082a251748a282c1190efba6c8fd7649cf0ae59828c694725ab50c1d12f4174380895f07683e650de72c94a6ffcefe58675c459f824bec5713d0f9e9d03d5282d57b05ca45cc238422c9ff7a8b08d458c4bc543d18ad343856bed544ea6904f6ae7f38d44ae5bd784f37bd9418b58c2ad0cf89332362b8ddf484a8c84cb0e4cebd40f9b13c179f8eeb8800e367ee29988373da3a6410482ff79b472d58d599e9cc4c0144485c3fb22ccc9204e53e5da49331fb5279a3a04b2c404c797346116be24fcc69425c66930687f1519e986948228138733d9b9fc52f73c340b3512087fa061b3f601452a527c6a69f00ceec522ffc2b6b7e5303e57ecb4482f3087335a4e32e485b1d27b3b317315c05a2b0394c6c2bb3b7779af3ab5fa335c99dcce98dd964e50ffb84afe5671f60290c71d050a0aac328242f37a11b8cc3f33f0307897fef035e912a46c8d977e742ae6ef3a93c5cf9571fb5b8961e18824a80c3ffcdf6847a104155500887913266b87ffe32e9eafe70927b8d174ccf22396245fcad31becf4c56d6d64c2c05b6936a7f985a111895c29a016d350ed0314bd82261052dc76954536f608d6ab4df4a0217beb5b0d2b7e41bc6969e3795353db5a50f86623f99209c8c1204fbe3c93080388891024214c593a53963329688ffe6589e096c0e4c5c55d823cff017062f2d9062d3a9dcfc4d31db686f2ff1087afa8f52c8613a7764de6253882c91722a1c393ff74084c303cf228a9cf06e7833c6ddb41e1904014c038b1b1dbff1b914e7a58be3e0768082c5e1409e7c73c06947bede7e0337596f2b2c3be0f42757b2269565d4e4f18f38f8fb93d19e12f68954bef52be1be2326781d5d00d04755307782a2c7df4595cd55af90e5dbf76db7bd8149aa501ab2304d412545236d30834abf8d5500627741806a86db00a5e0987bb97c708b4b3621a755f7eda1ceb38c1fee895d34a3b1791a1685a556a8ba720b8a9b4e79850b1203099f76fc989b5c1f18bed75c3e1387361c6f3ab39383ef24d28e27e60b980f116a3ec36de6d9b4d68f5aff0e722aa2ed3f1567d4b42a7f148d0b25f4a42f3c893ca35f884e78e3056557319ebc35760ea6156ba8f812b044ea0f211d65754eda2e549fc6c108c5b0975de84202f2eba949596685a9b5c0a6940f8903babc1590e4ae846fb8fc42116b6b4e4768d6faef3703a38d9ba23c9c19b1b67342b31fc87fec33ef65874999e52dc62705fdd18e6858f80cb0ccad8c1ab0c4efec64320cf68c471e08ce735db444250c3c15b938339863204efde7c6393eba421c780e9fdefa17edb0db316f18caa328dc57fff1be881c58d78a9cd4032f7a5017e36d27d1766961be7b19e88fcd5b610652dfa270b8e5d23ecfe97bcaa48709e9bd364075227f5b0317e809a8620277e8c61cb2a2c708cd12ef6831d0cc7e457f5a210bd530929cecd1690fb30ad7d794aa51000101664d827c326513391b3a43b73c57eb2c49fe5d49998ff0dadd8d051cbf322ed35da2c25c6af91acb3724a19b49f471dd5e49063320e5816c3491e04b9bb7578d2779228f17b7c67de9c933383449599491cc4a182fe3bd4460dde461821e058cc5805cb4debe9a6e617074f434766355c09e268bdb41dad286c91d4b76691fe42dea87ff8cf2a3e31eb29561109cdd94f817772a28e056c58b5f9e43d920b5904d577dc754d88d89205379604b1142945847690269dc3dfc54d29b44c9308f26349cc7ecf62ea68283e98121388e08c36bf5fb293d221a812f576b2ddbaecf20366ff65aeee495eb9baa397631bae2af0911a05cf1034820c8acf9f70fd8b12c484f78f2328bad6456bb87bd0376998420a6f3171e0250be1a1fd19ba67545ca045fac7fbde9f8fc0463149e6e6367f8ef4733e0832bc2f5bf23dfbe7fcc683a571dbd0e5ca86809941817d80a95377db0eaa59878f6c9525a638e0d6f44beac6afc09659585ab7a4734ca990a8bb473472624b5185a10f5d462d4bcc39e755fb279fdb41257b32d071e30bc18d78e97956a3fb2c1d45538a2b6f6a61c8f5cfa23a1915fcdc33db6733d8b75059b77391e50f3dc01b1844656f471c904e8b87ffb8ff8c74ddc04d355ccd6a05f97259bed1bd77a2b976abc2a664d880c948466197eb836452280c807e2eb80657404d227742fc9ebdc9da04ea103119f2a443cbb92873e97bda6eaa58a09f6371ddae2333d7c293a8c20265aaea94784907668c764e87e6db9b5951338ed1832a1420285d4a249d0e96ada5048a3e6ba87874da81e2c2fb4814a3a7f8192a926d523b78d15bac738c285df96ea9fa9761326483bd75a268596d9f8574dfb9f715fba329b0b00c0eb403b563606ce47e8f6541d53c65788c83ed7e4198323e1393d108e9508d44ff3e831c24e7096bc19fd20e274981f8c68c00ad7c100572828e2463ccea1482908ee6351a2b0549b0534e4f19b28a9172bc85ed9310307ae3a033e5e8a42884cc75d9e7e938ede71c15adfa7cf67551057bbccfbe4809058221d4f6a2b41ad46d400882231c5d943b8b022efcc47c0a96c7f623d8a17589e537c4b3490b26f87c6aa69c7a72a6b5d7a4018f9ea824f9ca11d0537706ebe8a1a015ffe1d1a9b181bce4617ca873b7f21f59a2893137b7028d11531e2b5435b293b40d3d9d29e30707c182c94c4bf8d60713b19907562e93a3ffcf71f0dca7b2228fa34dc1c50d79e5fee48505a4ad92f470a73f8ccefa50a35a2f1791b1d603a7ef16434943a9ea0470fadb06815276a70b56c00199570c8c260760b7642b1524abbfebbb1ec5ed345b6638954c28afd2a5380c3e191d092b5277efc0ac521424a8ef3d449fbc23ab329b803acc0ccffcf3647c58ef1f015720a78c14d99612ea6ceb64d80a9b6778827491c204c8e54b065e0f9b40e59204550d35407c7d5278822872b90a8131467905a5390dcd0bdf79080553c68ac334b8c217a0bcc0602f88357fbe683e64b29e2239c9be4b1039bb705812ebb7649f88a9b50a970456ab67b7b6a457999c6bcbb40c13676f61502c6abcb17ba324fdfefa41f936b8e57220fc2a30ae3753d2961c48a130ad400fd5ef6dbb95429bd6203988462cee65388e1841aa4a40d30db98beb4dc2eee37fa908ef354ed8a256300f2d9dfeab944f428c12029c4e818432b215bbdc1138156dd35fcc38bf5491f55cd7a8ca3d065814a9c82c2134f846428b8800550b2fdc7d825892c605603aeaef266f404694145b404282b4c28d1ac6ef73f128225791b81d52a89493f44d1c0d5ab81d20a624c680b5a7d8caf6c52379d243c31bac5a145d447bd5024ce1238ae333c237f0e933b577f19ad28dacc491d56ea4c8a9adb7322529537971f04e6b5e2bbcf0d1565c453b6b415d60d9348747dfdac84328cb467b2e74d1de5fd3147670dae9f0a7258a2eb340d69e225d4b87b2f61279481f9422247f203f3bca72839a7ac074035d1e786f4ea9fb5f2bc6e5dcb79bdf49074a6118795cd6e0e44c08749d68b3e03ecee387a5beb15d80571b8b23c79b09cfed89a5065371d75be2e9cae4a6a59dd95a4fab9322bd3f2b64d1e686306fffb604c049562db0d3246f8069d8c77562b42d4e89568120e9b368133ae3839f4a9ed718cf377dcb59367cf438dc7304713683c70cf2db44885a465a27fca9d0fd7937d29c2c96457c1a2fb87ee11f64750ecda6c4e6cdba30425e1bc6ba7d8c11649a56d6492a5563bb7eb50f1e2e151eaf7ea618b20de08389d5dd881e910ec68fea9c2d3568bb5ecd667fbbbf6af21c30c046730a4e7d26889f1f002f7216775efc555a0da71e6c4d46498542d9f3aba7f0899c3e4cef490efff433f8687ad5eb079d4c0adb3b84d391af388469b6fa535bde577807d519a4ffe0266571455b143a28ff96cbdfaef88fab29a2a36187c24bfcfe2dd15b0cf183350690863911fac2ac190dafe8a1b24650812b2835454228b9e4bd7a8d5d7de892c4215cfb1b5a11d6a52bb0e0d90cd4e27b1df813a616af140ded9882731956bb6d9aa01d30121188997f98ccb02f92784d6d5850da4fdad1d1692e2f492ea781461e5ce8bbc20d2612a5d25ceddbd93c0bbec28652ddfde5df8a47d011fa4446424ab5ae9aabc945a2594b771affdce467f3a8d057af15a151c59ac54acde854756a8908c46cc2cd29eec496d5b6f6810b1a4fd4e551d79de21818fb8852e69c569d9e9eeb013dcc647d57096a01845de4bca2233579b7b555a4b6ab0c340d8587917bccfa81c771493d403d9dbbc47b48e6bb03b6c5df329528550e3dba98eab00e9712a9aa8c3b29723396279131c7dd8ceda129d41f449fb91a88c529062dac063a058940afd006cda1556fefaf85f92030239d012bb08a53628eb2d0db1678828686e16392b4f293dd5100e572edd6b8c0a25a5a91ae45ee018043bc9ac0cade3a87777d64ddcfdfa033978281c8453426247ed33549b85c029d95168928fe514758a245862bcde2d00f4fea14eaa5358ad01254dc8b5a80829db632ed20155d14787be1ade28974a708b9349257d18406619b3e2f7441b7920b9ee4d622532e8790742303f4dacf6ea7220dce35761398f4b8136a5495c49688b3487623bab570b488840df12a3c263f05b0a4cc393092d1f8c7e10175a27463a849d8d3af2fb8333eb85904462a2b92b58783796e47b015f0c6addb4d7b38985a2caf80a04cffb13f66a9214f9fff1aef8df2d93b82e0025a49e0118a6decd754f811d22f5d2ca70254ce74ca49f84de58b18ad68a59160bc1a41d94fb426f147b33bcdc5f3268f37ddc0de1adc6c3f21fb3c05695f0b936c6497701dfd8270fea87dd292ef037fbca6154e732686e6ab7a1990e2360323d7a315b53f747f990375c2c8c72b342a87fa5d78ed8a4e75ad32eeb81cd13ff2545cae16c27864c7affefffb3de09e7b087710414ba69e820e8f962fde782035d22f5c1cab7346bee7e8740400f94b52bc4e73c3d7c0be4a25f60559adda6fa5fe558a2a6f0f3f9c0e4a1c29662b6ed1fc6acfc271fb5eb297aec2913be8d6318e95fc3d8223612600f6591ce14b27ce06565c9ac75b7fb37055e505b926457592a011a5d9ef2b6bb55f3f5f7387307a43f37d7afc39c207b523b92c061fde505f97ade1f80a7d095794ea0249c86ff85512e9e8d3b36423f154d5a5c870590453140343f86cb2833ec00f7b109a954a2e992ddfca50e7be198fd16c7f85072324e61f575522b05b721018826c019dbec05ae16789273a6029906d51e42faa5645f827af8b4ff4a3d4514526c8ca473c298c70a44622c7abf4baa01e2db5c2637a4c41e95be00ed7ad76f39d5da007bd07f6fc6058d563e6cfd52f5c13f4ab4622ddde5569fd9935a8dfc82c8c62e3778baa07fec51e72c162f83036d968f762441bf3829f6533056cb9a9b584c0284d78d5ccb9201349d62e76c69e9f9698b2a6b9d7b11747c6e40db86df69b2e94d6f62171439f248fbdafb51d869219e2d0d06efca3aa86eb3b90c1545c76b17124902a0b549f74f0e2557f6d87bb9652a2a059ac55721c2dc7a3a9650111c5d1f6b0eaae05f789ec5ed963dcd2546e535355ab7978cf10e4b0cb4b13b46b2258df8e3865c85a0f310cbf844540c079369216d819573c24b345b0d0a6c1414d85c79b2b00b95c012ae7d67576b3c354ba169b77f9a099d22dfa97bd831c67d1caa54abab12a1d671f6d0a814402e79274f61d6719d749b501e0f27349924adfdda8e172603c7eec5463f9b23757906ecf25bff8c31a3ab0373787ec0168bf64d7f086ec9338e26ece3353590fb8eb366910c062e612deeb186d2836737ea712d91a4c92108dd247ec7d73efb1dd11dccc50c862300d1da3176a4abe4133784e1607410d3226612a14ef12371d2562460011ecbaec8eb28859e602e4b31dae535cf396bae536f52b499d6348dab61cc403a033aa4120f234f278bb86a7e728c363598ed5c3577c0666f507690c26fc8b2f212d16fd5895743d5e95ed468b959df976c63449d6b882720a7eb688af5a10c55655d70323112d0eb47742e2fd721f69fec8b6ec8295b746bbd42b9584809d8bd65648c20006e1346887ed75ef84bef4cacdcea6cc3bc9e9078aa5ec7b581183f1a2300a4a97273278bd903a283b10686f7ccd901636d4ff24f9ad9455a1014aa0635a4451dba98018a9812723d23462cac0ca001c878bb23d4f06ccef1119c120288dc9ac5771e5494ff5a4136e159a65f96325921b7b414aca25dd612d8548a2b41c122974f4e21a4d41845095272ecc233744c07b55123aaa65794ba3425bf24d90d03089326f59389040748309247be1afd9d3cea13c32948707736018e283358c688a6f6a2aebeba1799de871e9a9e5aa005e7d16d42429b7be0e3ad492131255e7da0bab23c842bc9d20f92eac11cc879d0c29fc3d5f5b1477ec1238278277154f3c30a70411cb357ae71ec522101c3ad783fc284bc26197c0b3b91942f73892435765a0ecd29eca6ebc39f874c221cfdd2d38f48194e46df6c6ed3722366bc12b0e18ca43cc79f369168261f6fb474ceb379784c15339290a15eeb76d9528ff758b1a0c142f2cd65b76558ff37fe6866530b2ef3f864d8a26399c0b26729be0da34498a11f4c8e7f5e2daafb387d2f4299af1a902d436052874891ff3f576904956a904936d3ea8af963f55649e8f49c24177172add900c4566c69147321bcccd5af5e9ed9e5f239600c8ecf70da454f7738327002391d5af19d49a16c62ab3a7832ea81341475692631bdfdd60dd9b54de7b3bdb6f33591d468ad331044984d07898feacb3803b98b697b88727c55f78e0c78d04dcca136ade0494ab82153a307ce1feb904837f77394fa0036a6a9b2eba776a4b793f3930f8039810817eec4bb86054d1177c73aabd55d864616ff37f96df5ca3e09a7a810cc254ab902d5d17c776fd4495004f20a02ad7a57113376f9e5d1995dc006ada7457a51694436adfac40a55d49d5b1385d58495c08005882d3538449add747114bf22fcec0808c84cf7945ec45ed1e8eec08274901146f6b84248cb3152be28989f6788ad5401ae55d953deecad9f86821c5abe229468dac6d1d3594df891eb07535cce422b5f2dd593cc4016db02b3de9a3675bdb721cb7be666f0482a2186f0f1af886c10f46097b43e251440e9d589d549f01fa34148c661cf9f4cbfd40acb58b35b9354cb04ed1aa566e673b06180d77b0d8336e42301cc6e72bf6ddd0622ed034e8042ed6781292f3731f087a49dbd3aa38a9304a196043ef7bfc92251f5aed583344ca556bcfa9f197fe02b72752a6a55b17b3f9b047384a12c1259b64e0bf1367938c9f6b36aa8da87746addfe9f07070924ffad7f099d15144b89123ccc51bba6302452a0ff106815d2ac374965d7429ca34e3d2b4f3d1d5f7cdba8a52a9408ae48cf9b057dc707208cddebd5ee448d2e0c7bf21758378bce22bbc917603ea3da3d28f0416852fa1a4a3e6826d48fc59c5648a13be58266c5af61a56a3c197dc958ad1583b1f3a14ad7d9cca7a677d3362888f022f6c421bbd0e454b376c8e7cd40d5574abec5166b00d0c25778d6de6397c6d6deaa86bc771abf0cd1495a6ac04209851bec01cc3505fc20fc5f5a427c0345999185926cc470fef5f828006655705e29cce64623304415dfbb8e3a7676595c43aa5fc19c5def8d80b58fc8524c41a0f5b7dc3fbaa5fcc9f27951bdd3f4aba8276fd292f0d4bee5d0da769b7e03476dd6ae6fa543334341c91e6dc4ba38a08b621a4a2992effb457e184d6be7de6dd32cabd8b28c9f02478205a8d8834bd02f9b36aaa0601a5cfa08fcf3ebb66d3b1c849c987f32ca6bff9df8846c1966984f49f532c8642dccf6b3f9756c4980665db4e5492c5d845cf13870816038d6d685bfc25cde395e4fa9d08656c647122687a4d902ca30663eceda38d2cbd7de3665132970fd587f83c05c2a1e1f6532391a49d6f84a9d41b18bd8c25d11896efbf48400fb704114e5c04b3da48f49ec47b3d2f44068a52164542951fa65ab9414036473e0ffe970de9e1a70bb9cc85c691096b9218f2743b2ad383eb0e9f6b23a1fba330a30045715ac225b81432deb53baa46a7f5b9e9f370e94e8f3d76a8dc9cad56101b1e115f1affac0d00a291c5e07d985b1b898659316bfcdfdb33a2f30706702e724654b18cb6494e6f6fdc73a5b9c2220e0ee2c72f3f15191735ff1bf25c2dc191f183e1ae60967305853b351ae675863bd4e45c9f356960d1d4bf833536ba2942dbb6fd8a8d20fd25c4d06704fb9ea323f77b7042decf7b87cbd3cf7323cd2f2851dd4e14c61fb17a3c62713fc7e7f24ce8e1943724dccb95e1132b847aab695c37cdd49f6f5d5772ec94a23cf9ff2e2b6be5f8d522cb7f52cfe729db87ed01c7196043a0aa98630aa9100142a70c7106320980cbb57cef41d46006a59aea96bf8119c291ae60002847f4f5e7130978ed76a8c7b7dfffb083c56bf301b432fad253a09d79363817c106c2d64b423befb143df7a33c9da845fde8f85140e3cb2e47295f2ecedb67bda7c91000e9621a1ec56503b12edfe5556e2952d53540b91daed68e21859306962254485f4ced904383d3dad2d1b04a5c86fa755f81188070c2f9f679cbc8af0599dd05664695f025776b8286a0f61de3572b1e2518b8f2a3bc770d97f01447c76923c65be749abbcb1032ce617f254395a90e3f9a4aaf67826329539b65c36db2a8e880a293453444d6b35a9fe6e74f0e040f2758898472a1a95313c3dbc47d3f54a75140acc7405d74d69e0536cb040f794501f52472282401da7d1e3a165d7019f8a3e3d071c9df342e948e45c8dc37d8e5415f6e2a89972ad158a3785e32a73e27309f746866e861274391d79b091790eb12961457d9366cdec9fb08d7d6be5c76118a2438f30a7fec0df31568668c71830ab44100ea015132764756299b25b933f193cf8f953c550e768ff3f84c5399e6e505a548e8ad93e1b0006a2125e82dc723c24b6b8a7ea9d5e2a23c18ec3794b325bf8fdeb2cf026671e018424917b1f696a3ee60973491cd4d715f4292231a4e9f0c4706c76789644abc5f4b2d744aee23726e9c1050b0d38e16ea281d51f7494af6ae29df8c36316034f85890881bc5b3a92a95413a31f7c10d6bb5c9bcd89eaf623db01193b6827e1e35eeddda751ba5fa08dc96dfb3242aacced5be6d6db0c7ab278ee1440bf05d5665e937efdc68e2ad276d9ec5737262d8ecfbd285323f80817ae07a2833a7a3e693672779f57bd60cc9893257a5c7631727b17870892745f5b4b95b0570acc33e6861544165a214432e435ffcc4be78d2bd0ab50e8f42dd20d26aff0ab84816411e6fc1f0655ac40b00ec8ce6f0c80ecdfefc113375b57cf29ecaeefef087c9e342701d71924923dbcc231f1fcda094dc07571441e7d82daba879f5df92a9b88ae28a6c480d99d39370ed505ef48a9f981e17d3cc6c1f0aaf005c8713245110ec3fdf8c92f3067611e6a8c351d7bcc6fb87e1d9a1e642e5e049b8e9bba5045390504ba618f7ecd5ad8d853444907f84363ef6a089a4019dc257c0edeb9ba9f38fceca4051d2f30469338bb712d76ed4e5a4ed72f00cadf7f843ccdd696e8e748bbc665e31dffd22ab07d7d58814b4aeeed0b72d916459694ca0115997440fa3083f04e819205b926fa666130b5f0700588ed40a8a302eff7e556b954bd93bdc9f47cb37f156b4449bbf777f5d598060c3c7ad2f693284abcdff8cda9f443ad8b962de9b0b294a6120f2e8b9661b51966b8456a57e02fd9981ba4147777a9b5fa2e562a950f08574c28e345db41d33d8864f63bc841c4154e700cf881e0c80dd6c85b24b2a7049c2f90c1cbd35034d05e716a08a23223c58cad06dec252d402fea277ea67ba08323ca22e866369432e2f8ac379b67415d9a5dbbd6bf42aea859d011dacca5d13950887e2f171587dee888813d0f21d72a56d5f62ea0f2c783e1cdda1cf6830b46e5d16d5574e93fd247ecf6556d36c7be3306e39249b7d27001383aefddb346528398ffeab0f04d5528a00a7b1aee6bcfefb865ea27f7c1c90b4e1cfbc8bb509730575992c75451b06b8c3bcb7bb17af7c1144248870ef97a0a32b411acc4ac2ec6275faa7babd95e2bac766938ef02d2a754117798b60ace153b5fda7994784e03fe4890717e4638dce8745cd22da0c959daf6d9b24bec6277a014492994fee6e507d5d75cb5177c75eb17336a8a00eef9684827ce476ec22a6274167580f65da053cbba2e2ff694a6617855a18ca1e49953d3bf946c4fbf0db807caeaca09e8f71f243e1001ec4ff65db19e52dce1e3ff83b2b0bbd5957a3f57f006306ca8ea90f1ae7686b42e648b7abc78d313f219f3c1584632ddce2b91ecf4164d4d04ab02a1f7724f7546f23b637ea26e502a259db6fa4a2ba02b7e1b003623696b7a6e672b8368f909261cd7a5ebf714e6ba643a2a6ab308c1a13473e461356dd8b417965215bb55a7273dd9db41f831d07d048b65fd89acd99abafb39affafef3cbbce223961c59e373d773b95cb60fa48f49d105668c299fb9e3d66e28b9832d34c6d7170310725fcc8d91face19e2cf96111508dea1bf151e1f98b93ef5778c184566e8421a9139eb38062e93352abbb1bdde187757239d4b13c6c85107bec14d4cb29ce97c7839c50952a7dd2b1ab15230fccf29aaef0d8585c9ac4be9e5a2986a50786ad762b93049d19c7865ce453d54f77e6cb1c89713e8d0502c9f65e788f3421c7d4e56c9ff4ca281faa90d30ce9439458cdf051a0758731627dd9a74e298e1fa38f6777322b8974e5dc32b1b8cc8fd6652a781df226a0c93c8ac0dc849be33bf18376fcae3a5156560ccf077d702f0cab2086a52c5bea8be7ece23c66bf694a02d87674e8743f157155a1355eb36212582e09bf2279d1d5c63c340e2300e225b5bfce338efc099ce115d61ff1a3ef8393a7246451a3b02c75c02eb59828862b2f83ef774ef36eed0ec2de3d2ac6f2dc266aeeb2f4bc346b718cba24342aeb0fdf20e6a6420a45f70dbcbd2bb38211f90e61fba8db4024bc7178677481040c3225106eef9a45ad7ffab330be7ebc601179d3fe2ef99bc9bf78ac8ee1dcfa2f48e121e8fee7f405b298485ee58808f8b0ca6e72f51a6aee476a00e47c2c5538294fdc8efc26040d0f62f1ead6068b58ec31d2c84eb54b3b54eddee739d6d45e222f185e114d61d68a77240773d42fdf143290a3919bb54638cc0c1cf9de8a925f6144c11c2c81d8bd609f0b0622b42f26b0102d2cc247572ccf1b27e2cdd578222b2f06252394244d428cd5445e3bb25938d891341650a4f4bcb219d54a44de40234811849206d6969a9c6590225cf9dad343dadf24917b74f1185d0882866257584b878aeebc3b18cef4a3f2fccf1396fe62c5cecdb62b0be14c57a3ec9a9e16916512d68c45f4653c890f693d0f932240633ff8eff8a03fb39ffe323ba221062859f7774dfbea1a69f23519b75fbb6f067234704ef19e488ca003c9fbb2330af2caabc550e5ba742f03ea17043e0fb91155daff03ced27c9e0bf458d723be001059edb91df5fe104026316f6ed1c2c7e32743a0c6a48af65b32560d7c16a34ee023b498ba54092cb0a30dea955849cf3353ab224932397a25c4cf9fe193324861de51399eb7afcbbca364ff27f0f7b00853c3fe4e2f53447811264231465d211c9033847b2b1c7fe767b951b7703e1b45f2492f0b8784226433af0c72b9486ab6014e0a296e77a9ef94832bd00b66f606df18efa07bab4fa0a82ac9b5abd644d026b293a49981bf9f854bddf457d526702f126c101e28ac7e1c4db1cb45c37000b5e28c3d973a4560bdbc2d50a07fa7417b588416bbdeba5427f8728a447b6b1cebaa44219ac2aa80fc6e0f501ee6b067ba129b409ff99a71a9cfcf5d7d53332a2d04a2627885a3f52a6f2b367dbb73eaeba6a45809e6e56bcc69d425cdae37f0b9bfc0e23569e4e35d0ece5412f60485722466603f4608bf70c4b99252861bafc8a100d18facb61d165d24cf98fb8916217e55312e3dd768fa955635ec96264a8ab31483abca4938d9f596a7f81decf4c83a94b16a4472d19b3d2566b4fb5f20ed9b356234f17b13f9f7cd430ffbf98a89842cdd9ea91b6b699fd1e1732016f5054b302f6f56f84b582c813e8fa5357dcc0c0c964958935b10a68ebe9d7e14d3f1785efc69a71a48b8cd8398fe75dff6b69d566411f5fe4df4ab0e61009931dbc2f0f1b85959c132a105904569c9c2609aaff5f9f65d0199ebb521f1fbb84a2e3a449eefbc07058e83e2828925ed28917abc050df16241eee621483bcc3a3697bc28509a71b0ddbab34a1c549983820ce4cb511493ae5416c23ce68e3565483265b71509a8e989bc2de8b54b5dc1d729902cfe3a8236337aa2200cf0a0ca410b8a4a8c2e55bccfbf784bfa216133215fd744c504a883db38e8f969fe793b6957be66f4723c716a3f2affad3cdbedebcf735dc5a4fcfc972598181bb93b9b40222294253bf78695556c9210ccfdaa530bf9644a8055c76420a654aa1a24b94e22d6567496e5ab97917fc01de186c4ba75fc064346a8fe91e63b171401b8ed1376e4d377e6cd55e13230cc35168dcaf3a2545313f832e4f0fcce7e1e5a21871db05e62aa4fb280e0504fdde51e1e7c89e6d0cba9e31607f7057787a9fc297623ad0114dcf1b5f019d4ede3c6e5ac988de1fb124328ba0e675de010eacfc6da4432bb892748102f37d8d51979acf792c266b446da6a4dca8a385e5bfb48d86d0990d94af6f0ec1a4518c46db7bdcda9e8934a3cd124625433c10a0a2e14e405290fec4782dfdd95ca8260dc85ef1dcfa50149a783132773598cd043ae57d7f214c7a00f60ce20cfd482ef3b78d1c65c3a1d2980275cfb527a8f798430d063441270fbba5982edb57a18e7aa6757cdcfed96845bc059e88aad20f3c0083575d7034952f995dcc373dd813b7b14aa4cb23b3919295fca9c8fdc7b4964435bd093227646da76f01b2cf6600faf82292a5679d3e45fe518db6ec3b8d443e89daaa1621270232a458d69ad475922b17ed26a9e36240ce8006c9c02ec976364f1e134391874be32157894b345a9004c6d5a35a04b4d737f0cc9c9143eaa0b563503400e1b3710e987134be588e0111015349757a51cb7ea197e93ee973f34866eb248467c7e34043478288daabd1133aa2db7424cfdd30280f411460b17e3e7812c6e5a2b4aee3bf229f01d3f9ceafa94dc5ea7aeb27be12cb3010f0fa597532012c0645c1d545471f8fc0b5e9636c997e5f93e73d52382e9479c9465686fec5889f216c084121d2fa2febec08a3d51962334fde7742d61797fd38b85ffe2348d0c2b3ec88b649c34d24d18706710580c3a8f5c3ff814176c3990d103513c1d4c7dc9732de18c7c42f0d0039791c45af4e98ad6f4798dc532305824912ceb6891f12c02980ea834aa322461e7c9383c01696173a2b5edc1fb1ad47b26653a913832fe0234986aa2b463f6b027098e77a562a3f9e77628921f46fb8140dcfbd0ca31960a5c5654ed1828b26389c78e0c1e04538e1f073f3aeeaea17b4fcad85cb56ead11c4fbfe26433acec27b814ac88d2c0af07a35ac3fc92c9b6e620f5f7ee183b661cf7803c2375f70064f1699a86a29a7ea42056b7942b2da43c3b1c14f4dae0221a3d6e61e2c154925d942a1376dec6dfa8400f60a6852595b6e8573ea16d5ed22b5403510bb1bdebdcd74f2e95c15e9ca993dcd28806ad806d5232425b656af23ce3a553e37bf0fbd4e912a2cadc093530023094921ce0a4743de2ff22acfc1216f0dee7fc9e4454e6b8fdb47503ffd7d9684b9b4e26370762303841ae2e4e124bb52f47f73771e5568c3c2a5e57ef5273d2b896150a0e96b2e06e1a0ff2093309c1aee988f46206901974e66278016eabc764887130bf052af01dea71723df3e150404c49c001d7a715ca80cd6900b1f103027db8e5a8df8f0de0533a2e6ed51248027e7487cb7a3b1a5970652af0b548aa40579aa620ac916f61691107fce27b3b8497793ab035f259818128e6daf5e3a5e604061b5c4d221f507dfda6b6c6ffde43379a55aaf44d32502992cb1f08e04002547147c16634b16a839d7bb5d5f9b86f27363e3fb3a7028378f99ddb4f700d06523752dd819c21fc54178ee76712c18c8be73e9c64459b4cd7fe3d117f6c4b13b35e1f3df03411a3aa1811d5d555b42a135ab04f88f0db468b31b2445778fd785622838c6814a2f6d9a8fa3c21ae09ad06a0bd2bf7a9dce721fae6c38ac257d41a30bfd677715202c6c37d3d60a0ea2837c12d895d94558451d363ec50195ad15b682cb71f475da4a6721e666113e81625cf7c6ca37dadf70b68fdd524543cdc2ea3e38f2803ddfe1be1a18e42421bfb6435fc0d48b34471edd844aad7ee2d7cf5bd86d1e4d28cf20de9dc26b4738bdf929fae265f9451c52f1e8455a55e0fcd42cfbda8eb334d33e517b2f6d443f98e4fe92062ec9ffa3cb4be85fbfa2864d7835c8c65fa7b0ebfaee772efa580a5ea0ecdd8346300b36ad694f3191ca4fbcbc1c706583ad0b20a15c89b8f33d0146c187b1157c9b9741d30d4ab6197f8732f14b6f94c3a22bbd34793862722914db4f8b3e6fe022239fbca6062f3dbec0d2f92958da7cffdd7f42122026e8292d861147858e6fa1be56f9576b2ac4134aecb6ac80ea47894dc0ceb9f24c58568c09a32d682dd37ce866f3b4c0a6f5d9ad79ccf6968311033d189e73d4e4362e6386877829aa28e3c293702de80991d0aaecc382d2e890016a1e971b9e7af42058a8ca0f441ac89ed39ffe8700845fa49b86cddf1ebe21130d70b666f41e7b033dc2ae044420d8d439848f99be575f1a4563bd0613f6bfe0c6ced61f56f85e0be91adb2a3819a83b53a8e33fbb5d8b2c2f347851fe76c2205fc856bd3ca939488b8b8a9a8fa7d6ba56c840dfde3e9b8ae640f3bbbd7560790f9309209b3268703eb833da4a7c8fb0c91732accd564f851dc028d8ae948151f6966df12b558349e8db7475592b1d3241a63d53985fe81522d4ac866f4e9912c6eb2a194c03654400f300eda84d04210f7e63952b67a284bb21d484120270a8e5e5c20e9f5b1c3e31ddb3e82f21ced8a39ac06f9db658d248a040cd6af8508e1256f85a1a4e4537ad60b016275f51d75dc7050d24bb0fcb5e7ce2775e70d32ff1c1e0d11125b304984f21fc622847114b6010d33d361b9418f410d4753b315c7e912cb1dec90a08de152b3b307bc4fd48e8e395afa77b29a86b528f5bc14b743e5cf229077d681caed77b0363d7cb204c6725715959a56f8436c56a9f33e15fa0d9020a4328715e05fb85e9e7312407a6c11c158154dc3411a22acdb0aeec25e2cc42acf7e1473f047e7de3096a2d97695e52b7bed04cb140bc06a257ed56e642891f6ba79af5035d7392493fb38de1452affaa51271875c2b7d5fa4faba9888c4e58f60ab1c7040a9d38e89997c090e03cd6ca34f56fb3191de3198e5d7b5b85d6e5d1ba1f5334becfc1554c87eedffec922d302ad68e1a3d2ee0cae1abd23ec9e9cdd99f9c5380227a6f6987fe0ffc3a07939e2f09fbb8d212845a46410934a2eb0ff18701b72966192500a6e959f06bec301c5c6f44f2888653a70a5886a3fa3499901a46d0cd4cf26910a963e23ef3e9fdb8a438ec63c0a23983e97ca6067820ee6f7316b2aeebc81f349a60442bfbf0af14e30c20e38590e07d8b7d4fa7d556b5756f1bd4e528447a3e29f2f1f7e07335f8a5744a897e41ed916676b56bbafc33d28436a3b51db79931dd359b57a3783aacfdd53df67058ccf99ad307b7c94836d3ba01326cc976bffc6661eaddba07a6d24ea9b4221392805180f47d40000d8f54bccb1540f0c9292cab6d34623d23355b6c1307db402facce6c42e2be8752a50606a36482a7020d8505a265b31f0af302eeaa28915459413ff7d6460ad4c86dcc8e8896631121dd2697e3aa42e866cfa6f16707f23f1de4dbf6e62cddc24d520b42a36626ac033739e2d9cdfebe74fa39a5f5b68170952706be1f16ea45f2378b1a4540ada2920913007bd23838987fad905e13eceb5506a00f78936b6da2655ff1066602b080e145c691bf9a2107b00c2feeacdfa62175d83f47dbb10e71fa03decfa58cd92e4875d6b6298c2ab9a331cb1eeedd61fd80965c1a73fc946bf97dad6880a7da6310e5da7cff4b72cef30b57a2ac190f5f0304d2d6d8cde95a0c548b9fd2bff67dd313207edffc673f8bac39a409debda7affdd95b8e353024269d710eb47bef0113b05ba9991a2138f6f21403cc6e29cd8fab3a8264bf9f33cf83d727952b9a91f317e30ec93d62ede81182d4c41fded956cc78e67a6b30d60a0ae3eb43ac2723f7b74933e6817b69dd3488273de1cc88295df1d095af92ecd659ea9dd382ac2a9426bde5d52285d9109541519cb749bb4c744dae1db2af02c434af0c76fc0ad7bbaf53c8114c56a01fe14fd0c3e3a58d7a14c4df8d584fcab98e5ed761299343823b1452e470dc7f4c318208f092e2c23c09fa96472f0270b852f8103395e6e8f93617cdc5871fb096cc34413a6a76552ebcd084c3a0ccf0dfcd554ee0f18410f1a718eedb8e3f38ac94ec991663cf516285cf6fefe704e2589f05799528a1872a43259ddeac5cc26af0c227cef53900a018de3a1c6356a38136d880963640eb6536f9bf0f6c7b8be1a93bf16604086014b50301946985e6317806a237344a53fb6af472b359300c5d1e04e0a536156b1c03b12a6f93c4816e28f782b193de9e3043b739bd0d5c95840a692d6db33a8b77897dd2b669f6c6ca3d296675d8943c50915bcd177311b7079e69659990ad214468ebe936a9c0772bc4d90e20ec1c1c9f74e0ab015715b692f2eb4c2ce8f5743bc04e7f1b819f0c28650718b1cbece01cafd5291de965e853fd2e51a62d364161f0663c5eeab79438a0ced70692fa00dbd5a519066f2d99b40cbfd22daaab82ba8b1cbd1cc6208ef46a921bf447807b641f584e00761639e06dd710c53daa881607eff31626d2803312acb4f329a916f8e6d929fa45b2dfa0eb4834b95dfcb027dae8a2544a66ae35902e17a0360707e391fe1bd7acbb12c7ff861c074b26a69e29e811d1b904819617f95161cf61c8ecc5cea4180ff2e1e9bde8bc6fed5e27f50845c78f229fd6b911de85230e6436a58a7d6bf523e47d0c329a9b38ecf1dab77042f9b2c65faefb11f43a83dda184ea2559515a0d4ae1fe10fd3e9420b062fc61118937518dfe52c92b9e1346b1eeb7a76c0923269ddafe774b960086f53135eff5d68b03b43a2b4de8c5609414b1eed63bc7896123a5b6fcbd0cdfd1d37b8d1fbfa12b7f1ac33e0bafb3e057a0739fe05b18eab1c4cc62ab962f6e4dbf8d9bc01294a989f969a6905e347136cd96bc67f2ce8f2a1e79cdd3be42cf6dea054573887d7df28a4ddf2873e056b09ec3df59cb7532ecb5eb3a553014a4f18d378981711cb09da22d72bfd0250211d2859fd75f87be7b9999a1bc814e1cd8a16993e4bcd0938b75cc3c732be8c172c4211a7e81c566eaaf1b0a4a99f25ac7083ecb4a4c0afa16623ed059a07472e842b8458ab7bff13fe476a87a248fae16e9ad78788e686f970a40f9d35f1f32535a885fb6a69f28691214c93689b82dcce5abda90caf7613d49406c78b0a2f52841445a7ce1c98a418d9eec03868f3cee28871b822654777fc7d27c75dd7355b1c357bdcf599800d83aea63d20c21ba6eafc024532fa16d5e8504793fe6b974c7e4f2f72064c7aaeee528cd3c6a9e43180f0b23a865e349c0cc001e8b2942d0bd83c38d0dffc6151f9a3e6733eb4b973bc719bc0a0d5ca9cccf53df21edcca32cd2b60fd16f15f3f338e57e2751bd5a3a34f8a494b1a446d4560ddc083849630dc7bfa950645a404fe1caaa0784c2d69df7828942c361fdf94e191db5660074a8383aae0ed3792fb611ae05217fe9335726305e0ce820b070462eaeee341026c5f813ccb653aaaedd4bf5c0d272a6423ccff51c003b6fb3568ec5fd7d2c88965f368a43694ef0faeca90d55e88eee53966933502d5353a34d07e8c9afcd6356683fdec8a7438259fb905f50b2de56f44c7e4ba5701c9fa0a3947c43c3c28980de2150c04272971648dd7b0feefcda5f496eaf71ca0edfc52ba523e48b68a494a683baddade2440e13376a606d197e18eb9f7807b1a3d90ede410e99aec3137408d2e5f01195a789688cfdbab62e513046ff0cf96aa36ba85f2c3cea42c87e248a861c2b9831545d3f24aa1773b2fe2dcb64ba8c79e4c2dc8fbd6854f24bb0d574b3db848ebf98f8c816af9a5289faa9f63322623d513c412befb354083c33060d11fa5ff3da87c0e414ce154738bf16b084c64cc6fb3918856bb1432d69510014eeb636f13f5f59fd9a2c610f8ad7eacd0452914870e035d5d4e2ae2a045f71fedeb73b845898c51c8fc1fc960e2e09240ea0a7a00cb50cae1c53d05a7a28828805db26ab593929d710e0569185d0ba97a9c2602a6c2a27c89abdc4ac831b86ea2949c79d5a782782d0f8041aae66b2f6b5e8693725c48876aed56743ae9515f8497104fc8826a695f156706ed93c4bc0ac2cb08ea8b56f653427ac270aaa12f5a6294accf793afde214db8ca4a8caef3d113b211ece58a882081da6d3721304d0aa6b2d5a68ad6c18f90b8b993deb48c7e6dc63e76e07d692452ed8efb3f40d9964112d8f66b25e6a76dda4a9de8b0d615f6eaabe8820d25149e090c0fe3d0f1278a862e173b8b6ba0f92e4da0afed4abffaab5be0cb09b351ee37321eb7936888569990b34a9bb696f7dfae229ab76b76ca5e515f3858732a202819cdf5818ab3f9e0312edc87c9fdc33d6abf257b15e924304b286ab3c19d5a7d643abb911e1270002496c3a0c7cc52dcc563e61e3a290387f272b1075e4a1981d975bbc5142e4be09fca1a82b4748f8fb9624f17ed09f21feb6de705147258dad987fff2bc5e45f17beeb66429f5a92466ebb27e0e56795f369650006eb7b99f4b86fc5309ccaa64ae2e77fc6f171e6dc48f7ed8a82c2c928168078ef8051c805461c3d48350c85e2a3a13c99e3be2cbf34cacc34795bdc882d6ba577f69d84550bce4f602534e4bce30b2df68a8a1070925808cc6235e919c49931eb4b12455ee734a55749436fb530c2606eadbcdfc832700c40b1f78635171a27df327a78cc39663f19fc6c4c5180dacd9cede4a5784b67780153af7daf708dfad955ffd58212dcc803b1af1a5207729fe30fbb17886119951cc3db77600edd5e5f8efc30926b1b2d2ef955f79c1a57e55a294147a8beda4fe98f29960d0180527df09eee677e25d06103207bbcca323de74897cb83b5ee0f4d73cdf62655dddf5da5234a5fdaeede5cd6f3278eedcd851af8a513c03687449023f92fc531472f4782db42e568e71f68fbba4ab20d906f71f58cd3a89fc2d4dfd005954e152c2c62b58bc791b4b3e85fd6dbf700b2e83df5b479182d66dcdd60793a5879b3d574978d7e5d9eb121ea4a9a06b3325fcee63b6505158e932d64e213492672ac3f06f72c5b0b8963470208764217676301fba9921891d55d24669f3f0dd46834d00cacbe104134301c82574cf2f9dca6d7210e49f9a1830dad373ded27156f94f5983c08a2fc0718b625159fc475754293c4283ddbd5397f8cf779622a48437ea99789029a9d0714f31714a1395bbc81cff01114184c7afadcdd265ff1f4ec7d39e67ea7a99a9252cc390cd69ef5bbbc3d5abaa59522546d4b9d4e9d3e31b97d442a67b51ee3eeade22a439ee29034eef0664ebad33af822321ff326f5ff632ff85264945666d2cf945855de49ca38088a9ad3ffb14fa67fd54e25d7fbf7cd68630d5bc31927db7e962063a0dbcbf985538a1334739f9642520755d64c087b224e86e401093b5c3b0f581fd7678b0e448c88552c8b5e4db6bc732e03bf78d19e4aaa76d576bcdc763cec55cfda11589dbfd3faab359c7278ef5519c17e07c6e3b203be8b39fc5943da991cb7ceded2fe4a1b385c633d07788e510fa22fcf98b2dc2ac7f02ec09504227a1a4305157b60e951a25a30a5498f63c5ecc47a616117f4d9b81f5f7361dfea7236e1ba93b0dbc7db35420a8bde6585cb256c945d20dbff9df334a06688e2ddd24917dd4a4870b09bd1999384a4c5cbd0271ef120ab5e0de2d0bd9449db8f3d2d54b0e74d0e44b9171144ecd9534eec4baa6ab3898384f16e42a1c533eba77a460ef1410fb4aab43733d0ce6bdb10204d4e871b40cafda4c9f0f2f4c43f23d90809a1f2feb24aac303f5f7af48b9914437bee58c354c2aa6372f804fd6482bb87240c8569d6345f42385d36b5a45bad04f902f5627806ff57da5fea5218a40c23490df8d5ea9c38f18704ce3fc3aec2dbec247ba5eb36d139c16cbc32be4979582595a6efc1930c03cfb362470f55c866694127bdb7221f90f01475c77855b016029b12e8cf44a6085966f71cd9b148287f97e26532abacbb4ed8d113c60b67fc277fcf61442b3e878dfc99c2b9f38b0d07ad971286eee25e0c82a9eb26f7b8be0b025b3df8184371704ecf6e964c2db36d57e064846b0e6e3e370573320ef28a546cd4391cc2bff4144a8a330b2ea9a967d365ac211f1623ea2d22343e22a84b06adc83e2868579556cc71ac91a3517cf0a744015bf4b65127dcc24ad1a8ae524534c67c8f198e57a516f62f3565918407f9e6c528d47f7f50b74a2a6a43bb860681144ec26440f0fd59d15f47c0858d9c6c9bd47d94763e02a6d66d9604c6ba59d99c7c983ecff71f7dd0db2afec6f4e17fb5780a9050140a05bcb061b00f8a0a9753ce61f91120db4352d79c71197eaf3f8d73d04be582ad7016643f50339c5b5d06b3b4f51054d653659a7ff88d9ed01fedccd504808b2d62e0cd927b8d4c64d48f31b4c4ef25f0687ad8f923ded477927f542e1c770ec21589a6760b56241c9918f1c4de9b20249b8cfb46556cb3c6ba6bf287c0a1a58938eeb5ede4ff5c61349b9b77bc231eab46fb2e4ed6f43b73ee3a04d01c4799aacd43d34e6b46e13b226cbb050e5a99088cc80de7e3f2f5db5b50dd801a3ca9a85a6840654f3bcf336db4cdf850747bcf92c4ec1dade4d239113592fec6933848b45baa876ab507254f3f5c78c0a8c2d63f7706673a5f10b56652a177691ada13971eb3e041f91b0f6b5bf74a8ba59e3be98e55e2e2e658710278872dcc06592577c9e66bd9ae644db6cd5ba1cfe4cdd2199c9e39c52a79e7fff75d169c30576eb9d8e1a2a593a70b596c84017219fc5176ae2fdbd9fa3e68d673a56b06829405ccf9c32dc1ed48216dde8f1ed8721f95018d2ff5e9fdead7eebd2c7f110fcef73f1ea599ac25bc492402e265e8df3f32f56c036832f4d766dcfc8490cbe612e55b4f996d06f11f0a75abf3b60559433781174aa5937688d7c1f5efecd16af271db5790747b34e40ebedf343a217f2e71f0bb4e3655b904f03da2ecee87387f2f1a321b2ee78b772c7295f9e9b4519ff9b204332ce44ae9f85ed4dc3c9137e59244039a2b62ab5328c2a7f3a99909aed302d8e273158a5fe3fce61721b43ceffc440c4a7d633d451ed0c866b7f8a87683f9da2ddd6742fd770aa22ebcb1b98c60ad8ddb2cfcdc440c4bdb03d3cdf6910200e0c97177cf056e701225554ec2def0c364bd33608e7c33acba7bb6d1395a7af2cd1eb1362b8d717fbb6807a449d22952e1af62cfb3c02c2d0259b9d6363e7b90056037428150139b02ddc48b9c11db39c87f435db23f198d4db7c6b5b33a988c778254ba131e05a1544a75d4933fa45c9a09539cde115cf8dd99e39fae02a650988597ac27a99680950d3b17fb9f240ff804eb8fa38132677584f4410dd04b8ad698f2c5fb7667b70c2f29b5dc5b419195be2d0313626822d861b50f73d8081a25d64365be4278073f7ca29bca3f2d4a72db252537a7017e8b9d0aaf26c8633f36255f0f1fe16bc3c8c76fb28b06d62d08e64ca24a89739844ce71949da9425448dbeb5aa6c3b82543ea8549fd69296fed33e7b26a6e5b411f0d0e3b278c3e33ef99c2470300136f75f5beb0fcf0cb70ede22342245707710c83b151fc367658e36cb9131115634a1bcbd58cb1a5d0856e4d7a48923913663a4f8d12581fa63c0e238153bdc4468a509f228ab696b1f55e95335527b9141fc1c62b902bbd0ae6768d8d1d596481b27cd4bf1abda1a19935d82f2f4bee34a8d7d68401e40ded067fac9dd82782a7f926e0a29de857440e9c116cc1fbc93e7080528f5a6420da00434c2fef492c26adb3ff559735910089b377ec2d6f3f087937b91e63ee8f1907d8930d5ba5dbcad7b170fafa6ddb892b75d804dbedae5476550fce7c305ec483a70c6047523fa6527101e83b22226a1e34aa35c73b754a200cb5252c08055c47bde10c745d2b1abcc42a29b859a8cfb4ca9bb711681415e43f557d66856ca88483571bba0f4cbef09393d02cbb13df52e4309d7f51aa199b9ee680a94f95da479fbadfffb3a5831a5739521b016f3f7b8d78a3a4d816227fc7e6097fcaeee9d30f408ad5ed8ed54a4504a2002fc80de0cf5b8825f68f47b00a6ecc9146b49404078aee7d18731a0f2a6471dd7a81ea95475ca0be286c6719ecb795cf0fcf64264f1cf749abf8a0d9914c670f30dd7c25f7df1f7a9954467533127ccec451ba9c72ebcd4fff4debfba9fb4a7e5ffca2b6761975a1288e1e997956200ad3c14a79bc93e865231170e0ba24c4f1e030c5b35a609ceb088600fdbc41e25502cdd85b9443a0b0ae0c9a87af47cd4e888c44a0078ee9bc75c62fd9506be5992e9c3446d4bf9a9a5fe3f3eaf57bb6e403dce157a09b6765ff7c394aae380a706bbf29e4b5790a841ce5138c8b8af799457ddc10fc0aa438f92739cdadb1a1eed5b6714bc1d108e2aa81e735f0eb1a1e8be00d807dd77d1318495dc19bc8881a996906a29b4eccc4d4d55b65cc308e1eec6b3114c494ea9901993db2353d2c67b653a143d8f79323f2f0d85d44b0343420cd7cbb294210b0f81d07bb667e220c404f5bd5da3a02c64e96ac74d18fb84503885bd8cd7290bf5f002454edd58120b5e647ba4da386d5187f5ec02c67be153a21639ca7524aeecb235e7ae93f4c9a1f543a0f2586048bacbec33d38b948112d3e915d0bf9b99d141b5b262dde0106ceb3ca0f9fb6ced9e851bd96731a69beb8fa627268db678f4baf3eb31d27b51b7ba874ebb47d2caf2d8bb3481445369c8a057799e0c2353f2b3b5801691fab5cabfff9876f73f2da586931b841a2cb071bb6b16062556a60245341de3e68c72ad44de226f4d68aff4fe3dd0922c83aa18fae23382980d1d8abdf260a6511a677b47c3a123f88053cbe6169c0642ea78141c7262ec1ec2dc5945e4c6f052e9e20f811398e99ee9e61200ea49194b1b3eea51bd4d8920a1bf71c981d73ddbb8f0aea25e3abb3ed17a597534a00d4a707a7bf7a96587fd8fc408ffc136dfb1ce6526a40a6b169910de37ec417cd157e64b47364edb1b1a6a0fb2efa5fc7106f523d35a31ca210c5e8e5596796cd7895fdace5978e6eae29997b86c462a42b894d8e7cf992a827ad968a0d54821a99a5353612c132d6d82743e549670480cc9dfe7f4fa0098427b3e22c3421e7c09603af4b3f81e7f00e88c3aac6785e38486d173e6da130f0e73e94a23d6334e48bb15c43c5dd2a468317d85639e71173286abda790339ffda24e621d4b2f6261c76c9a77247fd98b662525bdc07450eb706c05f94c2abe9361fd69148877e310f590c5ec9fe18f59fd0b8c5e7ff6063258644e3b77d09c1b8bb557dadae50feeabf9a96b95858ae015774860421224ed667e5d0d3e516c8b6091758a31fb50054c06cd14cf7fd523eb6de55841dd0fe08b9d761002e59323275b3dae490fe151a397934622dfe842267c8a92f4336418783f08833ec00b778e24587226f1c38f965caf87c72969dbaad1650ee1d52d4d7c577f4bd7ec86b12052a8589ff9bb6fbb1c21c0c77dea30f57b790718531c38cbd6fbf9acb305c8155b4cdd7c6963eba38f17be52df30d4b3af1a7cd80c4de3f12081ea1c6a166b2d0c8aca12fbbfa30099245f19284b8d4d9036cc82425ed4ed8e664281374b4e02d9fd0f2788a2185c451f39e821f27821d9060dbc4c219470456e408598e5558ce5a3f952cc0ea627eea2adede4bccadfed8f8ceb7d0ebc663302e1d02cd9db4802a3afa6ec403c74f50d5198e7123c34a8152151ea49c17fc488f229995223887fbeddbdcac17640256e9032f1989bc234148c9a45596fd38c078f170fa5c7a3d220a766a333cf9220460df50de14f15e8f9dadda56503db5380e75b17e72f1d489d4a26b5884da97ac53d2a3e423d864491e4f36650e870cd518bade3993bde9b0ef77758492a74621ad26d6a61d03463063fefe2037c4f344d72e28461eac552cc35b17a8a8408f9c0cef3c57391dbd02a3c02253b4368a9623ec737048e3f11bd6d6fbdc9cd099299ff11e080de9132ff484c5a037a4ca16a245c3ed9f973282b71f0785e00deaf204c865becf3153fc5af4c911eb2e10c770b42dd5a8d6e9c3efd3a7003a43c1e02c058040d39b22a308179d33c73961c129ba0c5dde0818405dd59a0c4403048fe7662a007e82321b9b12b712a67e7a413361e8b849777171631fcb34ca40a53cfde249ad9aa819bcfd6435071bf81ce706b3e3e9ab66a9fc088f9de80ff62e8fe9fbc66cfcf5f9c19162e300db600e01a7b45482aca1266ac1dfe084bbe20b7cb345d89fa73047dd3af1cd62b850e7e37b0bea577a11d29999d02330661620fb0f1cc10cef3bc995d59299b072eb6f12f96dc7bf263bdfe50edc2eaa92538930b46f9c5bcf297e717617d49339459f9fca07e00eeb96b4ae309c68c3e2f4e251f363f3a9a486ef3099ef8ff24489aed0d19f85695da7754585128301e37933af5b2ca201aa17adfd61a194b445937bf5615fffaf4fb12902b68e7af8ff71e886722cd56f887c14d82095dd23c98b15c46249d19fc44c2b3bdb4cda2c05681af26b317ad0058fc969148be663dfdf2955a57c3aff53cc0b7767bfa3904a97817409ccf6a0556020314e7229e07d20197ee2fd7e3b57211a6a34fa189ab8d06c5160e9a9e203f46807d5fcaf75152a51773a8622aea18ed012273c6ab7769e583b8401df84dfe38f66e145ae511c28ad9909f2a6bf25758e7a074cf3ace9ae22e840d0852619f3df93830e7b64df460d100d7e1bd4770bc111fba62d3caa144f5d58e9a2519bb9c47bc345df321766f8d2dc49717de5e150e91bdbbc19e87a2d7ff1bab77f53295648afff943246710212f46e5bb64ab0c93d865038c1d884cf68ac1ee6f5c9f93b7bf0ded5f3d903c5868675480385ae8119474472bd30008f60f794119aff9c101f041bf924a04268cb014273393e11f766fd046edc8b17c8ac50820a06f8d84c31033f7c01dccb7fa63a4732fbca7a21ec863243517fdb0e07bdc9cccd579882fda7cf4d86fbf84f1d7fc94d6ac80007accfebc4a75debf5c413a6c2671118506d2754a7f39566a4d713e9817841af42d81b8457fb6b0d9e16a76120125fe9ae3c12f71f72f781f8516562c629c8135c5ec49c4cffb4d8f9174fc6964f616f76dccfa3ef96bb72390eed7f1ea97c2490138468269f195750dff506c9b730187f1f00b3fc51fbe9210528f6a1bb369d445a93dc177b5bc8f0988068782168767dc5e3d8f0946e29408e131b3ba031285fbadc003153a618d1379cc7843be92f798600f9aef5579c0c0b4da362928f9baeb64d2716dc9d06d9d5536af5599e84ab2c902850c690ebaa785e5dc93f04af6ef417cf2ee7476ea733802af3bd9c18a5ae13fb6643dd9adaf21f7f43d6f8fc0edcdd7a4d6ccb0a09a51abbc1eb4b590484009a4fb3788d56d92c54feb05894a623507f957b74a4dfd69acce64933f21afc068f3cf1e01d4f2df205dfd5087fe46355a26d8d0669c66262697669c135c24c0476cd3381d2b56526ff000a457eca6bd4e91ee682246842699bcedccdc7f578da812080c891181c14a080e3fac1543273536052231de642d07753d60c18efefdcb148e5243ce1cae8d45e0f7a1f6791dfe89cbc898c985ef4f210040820f429c1eabaf00e3454c49363a6f4ffe808b1fa287d14fef0b8308055ff03af52f347f33d68c53172a004162d78e4f5113506d414e6c30ae2b1ed5101a9667d7b23fa4f316d0475ad37b770432bdd55f2f290dcf7a4cb7d2efd45109231e4d074fb5561d733237f4e9e7069693c8620a6126e73168d37b0520ac672c76256b7dd1ca9f0d28176e4dbb3a3b0248cfd971c32274e10f799193673ac266076978b80a6111ae287319c445417459a07b451cd9f66753828faea52491221ecfd6909d5792ee4c636062be3dde099e0387cd3d0d294b1c12dddc8986cb712b22ca003860c22eff6e525a258bc4083558153d0f1fc4a9b359ef149d0b88d49de53e8724924320aef89228abc03bb3b3a358c8c14ca4d068c4842575f76ed8f5d35fa98fca0c8adb99ee0a20df5ff70a2d11597977e5ee9428ba6366f2219bdaaa7bdec618558321befb6c8154a537aeee57f8340150afeed5c7653decd0e6bf8410e8a0b2ffcc8119ad6019c94bfb94df70bb406559744e129d7208d75ca3f1b7c0f8457e05f0b775d812ef6d17e7db63d550d330c57e63b14658140c04b436c0ec329a07c7f4d011002b5b8752c6b20209195dc6ac8995a35ff3c214b53d973f6840cbd4ac6a687e1c660415c2f97fddbcd30d666832c1230cf39ef62b0a9d0272727c30b93b15141125b0c210b2a634aa630b8e1901bcba5c3ddc235f9f8b47bc88fe7f80247dfbbf62c0a9b9fa911f92b2d256ee50898156cd3949ed8f08c09242fc6ded276ce3be58f11cadb044b64c1a74aee5b555838bb68b84daf607fc088f96777a3b6f7a3115d0a1fdd5fa7e6a86ff229a835853adda1cdb6ae037539fd33c092306c1711230b01700484b9af2b6ecdf6df3bf1401820ff9f7c362564d5b5a32ef5d9753512131cd399af6d9098267b3bb01ea46ef8af97d4d04c067d81f4cce5e63e614bd48b9b9e692b6bfa56be82232b118c089d2d5c40954f7df3e55465614ae85f5010239592122f8b44e82f820ec5006e40ea011747b938e93d2e4f5ad79b2a0088c227d6c240094bb3157fdda25c7ed5274c70f390203becdce6d72b91ab61e37586e49b9d3fc3df1316b683c4845c33f33e331dbab1e0c21bdfc6874f803feb2ca4c34387a9e6ff3ff099631a7de77eb7e33256f81ea1ca42e879fb21b75ab447914ce16eef975fc0b9170878e2468f94e0281d11a55cfa5ed9424d4fccbadedb1387ed0ab49b8abee80bf7608a7caecde8938c788d73e3068533b73808a54d81f6c7c301c715a5f822e9cbad6410bfc15f07def5203a5e728c74f4f15e9ae1d805ab838e8de12c5a5c30c692a12805dce79adc15d4afcc65c6486e3e6928a72ee727bf46ce46730ad6774892f34720e82dabf9b3f813c5ee155dde80be94b457b5e3b1fc06db87b9cba97f8d8394f417072fa205afe72b2aa2be905d3476e6e586ff9072291c7f88dea864fde78a7933a07f2171f3839ff0719422af1cb92386156e99fa060c0515b0413f3c34c0b0111a2193f1419eeae07504b2b43130d58a5366ce460eac65d935a90f17b8c9492964c268dadd9625325d4cf9fbb307722402a5ceee159e10648460044ac3961208fdffe4b64381411bf1d513f83e0d1d3b302b6330c3a5c91d292c2cdeb5c956f8e3f4c32657be1ad1e569b65ab0e68ddad393bf6c4f5e14579bdbe8c0e94939cb992b2dd47dc86bcc23e1318d74d33cbb36d517e5896ddf433d6975c6a5bc070fa5219c6260ae536aeaaafc0193a536240556bdf4179838f1be6246e551eac349bc0c0a791a4c579a46627641509e5f21a6105e851d23b333762097b439a2f42f23d396b8824410d0386f30b0b25c3d1e63084a9709e34e8a16d5097b3c2e9dcbd79e0c3ea3153bcd7887ae904f7f5d2306c4cc4c9a813aa2249566e36dbd1c19ed8ccf1fda2a9e5e3c5754ab4c3e9fbea2316c885645d726101cdcc37b3022598f17561bf828c233157580783c4e7108a07ded5fca5ea27a23743905ed0f05f6e6fb3767d28e5802841cc38b13ec7f36958b610edd79a781aedcc4bdf31fc7797322982d65783170c416a99d69bfcc59a5db6e7835c84ee2b5c82c67b51bbeb513a2bf255c67b1df9191ab3ea68b264b838efbf467f72a780e50ebf7b570796e2e25da9362e045e6ee0bed42e718e0cb923dc0b47f557421de3ff1d40d7f64aa531d08ca0ce1fec4a42eb8e32425f31a2288b1854b2d21719177859d9b991e36adc5052ffd04f951499f74bf769a2302c3984caf65acf6ba4fb77925323b22eca5571c8a62d6ba63a66d294bd35f7011272ab523706953cf50fca98b07a93d08063b99258be5c996df2b9a7e7bc0ee2106ac024fad62659f1d5d628a6a85d0af4ed660c05ec32e9fe9af43823ad2d31a512b296ea2f9ea7d23b6f6f05d6ce3aa92f742b0b8c7a8981aef63bba146fc9875642cb115a51f6fe9a3aca937abf153d1f89a40d7846844c00ded09310d62f7c34914709b68e5e1d0bca864764355c1cd0af577c3d95bb6069d925148d9b4d7e5af58aa4a2e6a97537783642cc7853d56c61b5b9f0d07c69c1a9656b336396aa408695c7710a7b1b8a4722ea52b7fa406f48ce162ce39702526d03cfc15d28ae66192bca7ec5c1afe664ff86b0d2dfbf17932f88d41a3189a5163748c6223920356b9678d5380f152ec22080ce0d1db242a31673f54cdbe3477190926c73d35d706602ecf7b6e7d203cdfd8004d3c85dec686ee2c6a6a4f6a1625e08af09c75968b4f4f8017f9926fbe538b05a454020d7fb1cb32453e09ac4ade4021cde19bd019c7c72e534113c8ac30e0a98a1c68c522ea824b201ae9fae47b67b4d01350d2b2862a0247b9cbdbd2565725297af1fc389bacf69faef3dd90d66014e121d7e4e008a51069d79292fd4c89a95a463ad51e2979db6aa092632a86e39c92dd7100b15f89dcec430db391c8771cd9af95b621653a466c8aecb19404b3bb9e4854d69c8720044f4c05d30b8ef2faab39170314092074fc4a9ee7152f943913e42261c50117663040cd9f685f5c9c4db12d8302e4ee6f448762d0646ee14f9a36a5f34a464b83fe36d780ad3995d6cacda763e973d3b44cb4e0b46c6d9899acc9036518205da0a0cffbc1d071e95c9e6bc06c422052ba26cdb7c204094f157c3250f6bb5d2f3b607bc01df5979d821f8fd4cfce242b3fc7e86afa6d9603f666c58a952a47fd554e3e6aa40e7e583b2e62ccf792391a8f5e430d1b1c6969425fa26b927b35178f0b072c2f63fa0995470cf76c2135bda2c4138dd30d5b0ec6ea260fa39aa40cd5c6201f9d62d50dba96e06a69be9a66d252628db89379c6c445bc2af1c6329259d57ac475518f90a09f82dd4e7067e04162e58393fb181e97c1a142121e1cc32afd5c7c5262f117adb7b8a116bf2114fde06e6fe8912f923542f72a75fa0aed09178c05b044176b5327c33ac3233c1da57989bead06757b46e3f44892b10a55000a3d6e1ed763805fb585085c1bb9e00e6101977634b4c5babb303f92700408bf0c64c1c719f71fbae931007016f50c34d93b6b377f5ba7fd13081ce01b98a1ec086f7ad1d371b26ceb758e132e32a93bacc862b284ba3ef18f68bf331dcf7bfeaf49b29482dc7dd4fbdb29513d9aff8998d10fbaadd20ea0feaef7649e493b473856f12a528f72e57eb1727ca27028cb39e2db8d9cce66e2765f90d4ff894dc023c78555baba3c55057a5e913a700e581dc67a5b39d8f3e9b64e4d614bebfeca2318ab961f60e86e00dbcc322f442a287e1980984ef2b9261a499834fe891a22c32b9e4f143f19e7ccf02c3594ae81461ef7648ef4ead98dab3ffc51380bc4b3b2a39e08a21c25aa358f705bd25525a9f419138e25b47296aa7d6bf649d64120e8c74471f8690a10cd37eca96fda7951b7e1ce92261cf4b1b03f8653a72f113bf47dee62402478eb55fd07e7944c3ba30bb6a16d102247ef6b8b72f4ed0355b02f76d92216dc3d8b687aaa7d88c351f83df5c0c4e4184cce38b7c73575c3cdfd8c334d0d5767aeb1ec983571c9b02d4b6cb0d816454655bac91c63064aeb4b2356cbfd82fb7cc601afb69eed41d8db84082840251f670aad22d4f625ff2d25317b21c10798ead6ab94d8d0c8ec054ed284ef6152b94206bc7c5008c68025af1ca8646aa1b74f1a44be85db0396f884081ccbec0cb54c226db0d88283abe4f69c3c13fec745410548bc17581f75ab9f834c7a9f592e7ed7186ac0f711cd043d7cafedd3b8023339656b80e12ad2f2c1df0b21268c3ab9928283d53d505ee0daf85ad272b629473ee43f2f3edd307b13905940660ab3fb2d4a506b9262e47f50775b3727e89ba0210fe0863b082fe932fb35109433fae4eb78607214b08f3733ef6c950d62da1b5b4e4b712f6c7cb3707d48794bd47b40730fe7b81ff6f820b6c6bfe606a4876adf9cee6ad8773d94f642b37d016941183e4098d6c23071ed4f9bc21db18dd4011497d497256bc83181d25db6ad5547da70f1a5fc3b16e66876abb21be7211d0e09841d375956044ecee0db8659d9dc075d4af89da905cd6ed6893e854ebaad39e3e5afba01d815db3420a399d2a1678443e93ea5d572a1ab86b32f3bc1a7adb08325aaa978ffb6d0a64a5c915957ea2ea2c4232bfc04029a6d1e6699d3ec4e4ae756112d188618ed6851a5e2a241101f3937bc6e19b6623adbfa289182f07b36b2efb786021d4f1d1f7c38fe693e74069805fc29f0150d46b8f7ffda9b6dbda7bf24a3c9919817cfea472507d21667da66e287a2acc1d3088ec7d5c1c54bd57ec4e7a5a0189ec1193560c76f08c2b908d18414348ec0a7922f16988edeedff1698586943bf4b61e301ff0aa4b2ed689e33f7e2765de32846b65ff9d0b133373caefc8ce19184a0069dfc08e55e1f42d82d1d9b12429706a9b3b1603f5e308a29de6daffdcad2f54f50882772481528e99085c024ea54c843e8929a399c586f3f1079fefd8edf7a7ffaeffc3d9fcb861ff0048e0a96713194f1f51516afca49cdab31699490a4dd4dba74da53eaf6e9dba4540f12ee2358e526c918d4f10d6335b97d62ed1e493b5c04af2127ebf9bc025af4389345c334a5a5ff4e32aec85df9507d7c815145fa8e5706fee17426dad82d4be7cd60d35482406d8a02e5642ad82cc896076ef0201e7cb66964cb7688550741b0e49364ccd6cf2ca7911450efbade0e5de029abd5ee5bd84a6c264b5a4b33f98f6721163a9b90f1359ca2718f9f8b0bf69448aa7dc12173badf9227a617bed9a7cf44b4d777171c2a36fea793217c838f5af7071bdba63ce535f99d10566806e0d668b0b0fecd0c91dfdd60effd9d7c152dfbb0bd6a5371a361b993bfca298af49fc576c2695e0d293e2797381492a6b0e2ed96f3b67f3f81f5cd3a4594eba3217008f54098c47f1d87b78ad6854bad295e0372f6b212850638d5e84ba2111a37beadf39d78ce751d9f6734db26c67487dce3b0b3e230ed1a16a71cc153477ff0d4c2c189f4687a327fe89ebeaa8030598c99f9526a7416818345e58a9766244e5ebb9234f32ae88a71f1b60024914eb0c0de82ef5eef9efc1ddf8f79bb3e10482f03c20e492f894d042b990ecd72548c3ddb2f7c3afe26fea40cf8d45940ee4a275d40863fa7f8e5a081faf51ef7a1c1303aeac341831db447bfa543d76012cc0c9a741b3397c07366ece2db3d1cd3165eb55a0deda80638eedd0140322f175b30d9f6d2505d8d99230d10f239329319200484084c3e61736687aa899a9399567b7645f29a1e9803ada278997d81a7fa3169b1f2a9286e63916122ed0114143cbf2c57248624467a4ba84b7881db324f7a1f7a903389a2be9723f158bd2a33448218a6abcf082ae4a481e4a525c1f06b6aaac0f8e04d29c157b613cb67e11e63dee665321cacf5cfba41aaafdeb86293c44298aacd21986ca7cb0bb32158660006c281ce5935b40ec3b0a0a04170cf31c0d9aaa1ac918843e1fa7b4ea0453016b2bb06d75a45e6e878113def894350b4322bb7bfadcbe429d2efe8788000fe812feb2251171da7c336bd5f06fa8a4a18c4c9b43f1e9ac9f1c69fa8d422b36a0a388db00bf8de095fbfda6c634f54330a470e6e9b813321bb99176e7f6069afb92158018f73e784d910c4a82e99ce1000e509333eb4db60fdde29ddec756f074a1acd10bd381cda3b762f9944491ecfb19a2069de64e52487da86cfa278c6a70246d810981c91d0a11a2f5e3b2b21c3c2017b3fae433e05c33efdad124e16cc855632012b86a429a38428a012bcb3f918fbfae995ac2b910121711a458ff79791f61955aa67b116d661563305c1c1d1eedf19ffc9c3118e86ed6060f89671f3831246b25e18d7648418d14a4edee77deabe3a2d0cb248b864f87da61a04680d369dece11c0c500b202096a82fa94dac388368e21eb652df7538ed65df7f2f98881ca8135eee23446654cfe7067a9a920be5b86b68533a4a3d861d0095fc7294b671be15037d24239787a75ffe3b2a317d4a5bc176f6b30454e3ffb4852e350c6efaa5369aa89e528528ef951074379033baf048ca6f2b29064531a856d971a38a1e6e604b52d37ef0caab2c416f9b771897a393424c77de90dfa625d200e4f9a380c7b66f3a6a5c0c97b7789c7d4676db4da5078bf6fbdfa43d59e17b16695c4edaaae4cb424185e1a9c668eb18e0fc038b72560d6cb7d1e8c10e20bfe65934f80aa4172d118f23e33c811dc445442f0fcd55728a519cf159f0acd553c15dbe45ef8074bebecdfbbbb4f56ea6207485f011a85833e1157745261f568505987ce74e8fb12f7a803cc0bf5d0ca72a598fd746a7f9da0c199ca559c6e4182c509322e452a0ee300d63d026c8a01839b771e34eed0dd86f7143e30bed3571fc50f92605a691f5c4fa0f3e7a971aecc7b9db2da5a611b0900754b190bf2dfcc8e911ab34dbe0e1e4cd1fe9e61360476e42647af374ae54b2f32ef0e34352b0089f6d4ad871943661960a87f21650a65a587fcda1a932970b3179f72a95402cc61189984afdc3250c6c26b15968acbb1aaa409ceddc3d93329a5834678df78652781112b46f9466accde9d2b8158dcd93d1e1c5e0d0433507b8b0011c3307d9e2394b1259ae039c0c0c6485b55c8b264269e378677021ebb3c1a5e192fe5a2b8d333d3eb8ec62427ee7b45111f4b51b7e7e4949aa9170b289522ad946a85ca0cd0290bd7bdfd5d67e53ae5f6b0af3c698fc1d93638fe0421b75e6e786fa4bef969a274dd78022dab203246b84a4f4b6aad8f36b7ee74a9fdf969df8abeb3e7d27712fdb384b85a843552d7a7cbda8abe1aaaa911964b8c905055e189ddaa3774250839bb5ab93e4329f6062fdb258f71d4085be91919c500c39d327f83198ccb3c4507ea7db6715c3263bdbbd97b1b99c23753722efd7855b73bf5d8770624ef897664b82c8c245fb7af5850c2fe775e8bcd667d9aa9fcea3457c6c3932232b502b359f71470074066621c5ab04c8fc843c0f626526e1e6e451631edb105471070524c3af6e423e92ca8bcec2c5f61578916dd307c253c869cb1822e428b5ab3f6e959a4c6295dfdca72d3769b4465f629c57ece203fd52706ca7ffba4eda53d562807d622f60a9a7c36c5ec77985fa908fa15f6b86ed9aabb71521e8b028fe3d275ca6b4f7b02fab31387cac4867bced7639694ba2b04b5a9993fbbcc189178b55b50c6fef857d1f1a5578b3548e7741530bce7ef3be0906a17667b8ef25788dd3d01b9de6e3e214304e58cc7eabca3cc95b13f462e569463b039c2531c481633fab93f11ed36bda45fca5dc4be4e989c855a7b1166a302bd8347ffc050c1e51ae6fd96b85d4e989e103e26095934c23248d4aa54fbdeb060821c59c6fcbf671f40c245aee15953586ad35cd31ff85ad3775e1f2bd1ade148f633f9219a7a69d4715b4ffa4f4c5271f8a2e0e7282c2d2a4e886133c091eb160da403cc21ffdebf4cf5e542613ccae8510147cd70d50b46cf36dcb21a4a384a72f7bc226a8b0f311b93c7917128ef835d7ec2e6d6b31a3d00d8f55b0d28735c211e0aafcaa9da8ffa8514965437839e31b3fac194239abd94f48e4f87dcaefb61fbbfe1e1c6be69ee2899472545f9830051c43f1db350e9d1a8001da2831d72e88a6f81a4a706ae87699024e956ce4e66d539f6d9dc513b953aa0dcdb2bbbe94548aa47a8b25a4fc41ccf039823f723b0359c09306b6e8404e40444ff5e57a36e7466f6b75b06275b453cf85f3df95023ecdb4615035b9e837ee6f47d8835943d602a35c3c1676c753a17fc4d60d8cf5910b6b962b994de0203c019f46458a33342eaa187fd459f1e631950f35d0cb1f0050849ef45161b27004864845570ba11b620f0841504cd5d4eba3e610f66dcce25e9b1f89adead38c4e1454418e3544cfe117c8f06d15f0555848195026f06a7a8ace59cc039b981bc1c3bcfe8405bc8e691ab1b50935dd463ca6f551d1ccf3436bac5773a0dd56535a1a66dd61a953dcb7baa198742a0b39ba55d2e281cfeef3a9d1597f057b3659ed451752e9ef76646afd8a01a9be4febcdd08d4282978d483b6bc66b89534d78f81b1afc25b82d0741dcd56d3cd32900066df455bfe52c8622c5fa74359f0108108d102125eb67a4c01e052f9648c507e2c20215d87b8245cce991e0f7e69ebb4a097b39353e512ae6637ce3c9caf2aad5bd8586885f3749f0cf660eea2f102a8f7776c0d4abe4e8ca7368f5e2df1d506f2e0676e18e99d9e96d12e6c6cc80858b3d5a34f495d415a75915e140722db8ac8d26d2317b4070800554cb24c6c627c9f47d6d94545907a5d3b52f3b27f17b627982d343cc7f6f08685f94e9faaf70640fe2dd0ddf5d613c826ddeba18c14560dc506667457cfe8f3a236b989a8f449ba0b94be01363f9b418e411fc1654a3532d32b4cc9124cc2314cbe4e71bf73b5fc4c516abe58e37383d46441d95d6ee3f0b9f6358a49bf78f4a099377db709b0416b517506dc0e95b9a03b749e1ca09c1ac0922cfde7166db383ecf8fc3e29e94d969597d2db87c1365580ddf60e848091c73407b83fb84b79e7f8a388309db1eba0d47e0110c8f20d8631524db34d778841a546494c17418612e4821fc3e1b8c501c5083638005dc0862408b86f0ca43cc4b8616dc965909f2cdea38cd486eaa575a43a5294241650d9b57532158371fba2f0461a7562ed679fdc226c109432465ecde0373d7d9df904401cb433cf002fd9384639b5d30e73336235d6fb55ba2bb0d54bddc2c0f79cfafe5eaef53294e6e3985f736526018d42f8633efdfca474ffc582b4aef4debcb1c5a88c426f66c264705bd75372530c73d587c289b1fd898db80e873e022f073856fc4d4cd30e17e7bf395d9f547253b7b4bf9607a6478e6f1e954e9f6b325b0a42a8a22a66c71d93be2fc356adb38bb3da8609369696626adacd0a0ba8558d156bfa9bde49e58d9444611fc4fd75f50bb0152e8199e3966e6ed8828e2483f9ab8be50d24f2821c1ad216c15ded4de3b4d6e5506136aa4899f24163feeb75be444182009c145ee261bc1b309db78491b26684c1225fa997404360380dd25a9103892def2599426f5a862bcdbbbbca196051b2080f85396d684c442f018acc26a5ec6eb15c55c71f678f378f9250b02418b8397b07376c028c37c4c2fdc9cb8a4a8d1adbfe3dc060f39e171fb313a2a0dfaf7ecade4e56c090cbedd04aa5a080df0c73b39af86e0dcabd001b8fa30e181f27da0c845c38aeeed6e6b0666018337bf0f15c5d8aea8357e75939f5835dffb224f67108917cf8ac90ad8dff99796f880589dd85fbca22331b07916e2f85dfcfc821b420bd472f057f96d208f7590610124bb72282cbf1579e315dfa2189013509b124e09c5397e9d90e707795a5ca96d82fcd3a6863a136272e7895afa20fa676dbd4e5602d414f79d16ec7e1b7ff7b572f8cf61d7d353e07119f18918e5543470b47b5b9abc91942c8ba849d29433791ebce92f2c9d3d4f873b82f8b95ad5c7634912c6feee05dc1f52f6754a41c6a50341975d76c7562c6194c82adc851d85a4cf464412fa835bd31518fea045f3a01fa1a5d226acb4d1c6af7722e86c2e3657248f74f4039d50e8ba6955e70f158466035cab829e329690fb478c9503d87ea6af622493dca6cb0b2f25efd57272301bea6c548289fe61651c9fd0cc2a44a74684d530550838a123860e86f32a64ddcda7cc3bdb72b0af63fbbd10b3ee53c2706033ca06152510b3154bf8a30b57abda2f585c282e820f80ab6a68bd97c76cd3fb937af998402381f51455b94c4681b66ad7650b59bfe0827020e49e7aa4eb8a9a34f008cf1ec201d005c0d60f5722691fa4206402645f2731d665aa0b4bb5c1a7704f8dcd708f4f8fc0d5a874d720577d1ef1f258d8b726cab2f2b4b781e7bcab2fc430f6e68e2fedc4cbf862a5f16f69e01f4e95bb4321971e938dd7042efc826b6f598bfb288f47baa90ecda5497ec17a9dc806f0bd215a33c2d3ea7fac78d74c5548db642e8b9bbb919dc2bfaafddaaade94a1a4d2c10e58636782703293de04957376c4d7ba97c6e3e270ceba1e16ea908b76971a66e047025254d2f6c36fed4cd9206952cb57361a96e27921148a6b2f049c7c6996aba5425ede558cd15ee0f1a32d1d45a76051566aba66bd4d533990ac00c4011202cb5d526bbe6cf8ae10d4feeb9e7a8ce012f4c5f7198d9f6bfccaf9043d425615f7a45c365a4ec97e77538c922e82cc1f8c0c70c6ae51cb8669f2f3ff6cf905deb17ce073ecc2bcfdc485ee977ecc86036c035faeaa554882a456e756c1fc0671075ed88b1c75939a31a374d5ec45e595612cfb075cb282ff585a44c90759561d421f4874837ddae0b767af129e8a5971f7d23050fbe9d835af0ef74773a24465043c2e3c5dc507ade9c44f141f4ba79b99808138ee91c67ab8af945ab4efe4763a8382cca3d4b9e853cc52dd10448ef49c8c96e52903aaa239368d6a2e33b04511e21f8759dbe429a9c76e8f64bb6b521f44a27728890954b17d499db984b0ae92b8bdfc8a4426283e494fe80dd43ca16ecba6217134807e2922226ebbe3e4f2e26c1ecbb0635201ebf5b3d28d3491303923bf63a7011705a242fe6fb5894354270090e438e71bb081c0e632a40625c12211f9e6a6f1ce1e9257ff1148f2258c6099e59fe2b4e7c8e5afcdb27e7f902a0843feef1a0b2738291306d010f9316b4fe45bc8e0c0c7bb1bc0436a32108e6d0a930f88c59c17a4862aca4fce590542769675f4576980399a0962fa490662c88a1fe2fb378370a7f7c0c5cf7b697127f94e046578c7479bbced61c4c656bddb4bfcf58c60701868ee8b34575b5c716dc2f1519b5b9892eafa6b4749775af77ca267072cc3b460ee76013f136a1af436daf8b66c7a296d493a6e8a627d440c38a11704e2153ac4e7c9d6df526f82044ea74029d092d71bd2585257ed7a84fdc1bc10af375396e52e8f6bccbe22f4708ad6136ec2b47bf83437155cb1afb3116912322aff45128fb64c122f7aa094024d15594ccb5116f5b56d0cc6a4aaf26d04a863a22c7715c2084059150542ebf02c29b438814c60ecfa39144eba8cc50a6e6acb7b791a12508c6df455f3627780030f5d59ca4cde64d3bb93e9cee244a41ac041334e83de549e2dd7caf79429f5e5996af0d86141f65ab2551e957f075a9a6623d746e4cb3fef1aa1550c92cc054c882264ae9d9979db054c64cfc348e8974c13eb3994681bfef2dae466cd0204c45d8595cfb8bf1b0fd25d80e863cd489cc1d31cfdb462953d92a3b20b14e473e6f5d373e4d377cae7b592c88ec4717f4f03c17cde7bae362fe5ee05b88109b0a6ca24d82eec89c820eaeb2fb68750db24a710062ed696002bd1591c7a9d1b23b24e102b89b0cb43b26a08ef5377197923693a4825c0e959efc8dd356554ef344fbf7e732a5a5329c534aa6576b3b77000bf460039eaa44aed7b8fbe3f22768017a4479cd6bf09410656dc61a30f6d12c816758239b1deb64c3037a785723656114c92645533589c98b97dee5d33a8aca259cd3db25c918b9511d6505cd787f6d9438d63f2084afdfd6f80feb794ae23dd6069626628df4ca898085ae0816866e1c324c87388391aecc63bfe5633c049f8a5e88730cb773f1c2fe95fd0770185d1ce6f4004d763cbd0057e70c462f8d90f30120682b850636185d050eb021354b7af1be7e4565533fd858d42afbf3752495afd8a08fe0a8737d74dcdd57633c02cd2b2cdc519bccf247e76a35687ea1a6bf4a359f1e95b1ffcf32245c8d438d4b5fd4fb87c9d37775aa9de9743b91316e125a6c523f5306c6af72b3b1a454051691a3f8713f0a0c32c03fcf1fa4883d85558ebd2f8e739b920122ddbd0edfa11188015a1ff5b0e8eb52769e3b9a6f4612b77ba128707df70d1824c4c5fee83739f1682500ad62b86edbf27868f783682d4cb2941b249d4c99e1aa22fc6a0eae4f27d72163e37cefcd888403d646ce0688a614b8b209a28c8d4e6195f148d97a57c06e6e7434f40ed520e5795efad8c62051f3a91feb44577390fb33b630e6873e425f306e7f93fa32f03fdb1621115c8cbc9e00fccdd9368efa68c0ffc493cb4bd76b04c746b8c1e8003d3a8a9c9922611e75ddda9601d9a57c2f858cc0769b4f25eac53b0c115c5677df5c3aaea7ce480f298ceae7b026adda3d8d260b0b023737541c0910b7441e38980696dc7152ac2c543ac737ceaa08660ddec36fe3cc4ff4339546947c31bde0931be04d1cb6dc93860592228f5f4fe0e08e8e1ec646355ebd0f97588dd19251469b175dbb89f39c7d72158d4a8febed7c4ddb7803856a9c7cdde8ce5b61fb172ad688a1e05040dca7dceddcdbb5da1a5c441f79a93230d70121d37637dcc23f9d1d68736525fba120ad840c85d5b2868b59f799b73618dba78e1992a84d95205d85d51efb97d993eb2d6a918789f5345d63956ab30b368886a8bcde0ea49731889a341dd2a0bb4aaa9d08ddaa590f4b7ae5e0f4ea241f6f5206eca27076606f1855d62bb680897e9f47741e237f8169e3a9ac2834d14a9f0e3d2192abb5c0ec8430571fd460b617be14908f48eb71202215b4441c9366f742aaff00477f155e2f974f2345ad6379d89c28b3cdc45ebb235e9f17027d2b59e20a19032abdc1bee7c7b7bbdd0174c2e9d15d4af002c7c9d7dd556c569303ebd0407fb07ebc71fbb3b61a2c0fabe58c43d0d512b0d79e4a5cf0cf32cc666fa7ed343c176163f89066f098bfed65478bd783cd85aa9c0bb51ac36742334963e1adbeabd59d98345b7a0e77038b721a633be7afe0025fec28eac8a6cac2a4282423ade2d7f5024f2a6b534ecdfa69103ae557588def2552eb8b006e826b3b718da2076314f424b9fd4f915248afc354fa0b7c31f396a9d4289adfb103d4ad2c2f52e980e3add87f0781680980b8caa2fa723040cfb7de64a05a416ca7b82c23fa82e46216f540b6d1851321c9db528a3b079a65f0daee8aff4388a5fe04656e3d1c3c96add40cee3eb4fb6006cf4a34745bde4dc2306ac4b122aa3617b1254ef9eada4d8bbbb577b40157bde0e688d9b2cd8e14553d8a111882b5a41711ab09b5f015091a204d9ba8a2c5601e443de5e1ab68434032ac33ff4a670a86d16c0af05271af1b4a132c72f2a43ae10498701a144c12d138c1c0ad3c349a7319626c897fa2821fbd1b0613d476596d94f6afecbb1b28c78fdc918f5625614c33a859823c4821bb25ad2c1c704b2a8fdc239af4eb7c128f2d1ac7b02f05da7fd59114f031df7ad7994e0fd3c8c9a0976230a6161bac67712470c95b83d7a30ee760337f0bb597c9827cee449f6fbf4cf5ec4c9a2ae153ae7e4de5d1ae5553a9be0e214ed9d4b043b80d301406fdb56bd966e4e81861b8886c2dd42f25122ae0d097688238eee8c95ff9b5aa9e1b1a6b53e16be113a9ee6ebe8bd25fa766eae8ba2b28fed4a473cd04bb988b4f830c59f40bb23f6b47c7bea350bbc4615c4f28c2045b1a590d0fbf3c17064eadf037f00fbf7644b894171726857a569bdc3df269f94893d04599146f21f479602ec4129f38f436d67226d1a94f2eeba37eae50dc366fa02ad3bf34a1ce544993351d98703c47aa5f865932458a0a7fafe8ac31f29a249cd438ee284003c959df96a973342e1314d729e7d4ec33bb8fd30b91e04a8b2a9503af6e49424624346295aadb892e1e7dd79eaee07d9478f9b8de3da6c71a0bcbe60f031f275f5100d9285155ee75ca072bf6f18b97c8975c907a8e1b152c0ad972e20ffe83e24a8c71a6f5eb391585d0d5fa5a55aff4b809310136380889309225babac318844efd5e2563715d99e7dd593d72f7413ccd38d7e8096df0132d3ad33bc970fefe550d7ab256507fd4ec86c6a59399ecf962f7e041bb51ab7344bc1f0a1cc4a66f27c8de175497a9a04ef2b0765ca61b9219f3597a90e2aec236833ffa059eca5d766777d22a6daf7b7a4b022250d5e8c7495b35eb79e3734962a1ff0a1c85c0bbe71965c5ffc4b958ec5220e010255de0eae5f51ba19077aa6531345cf5c9212d96c070c217dfbdac1a71a4b04f5616920ced7c236393a67a63f813d2f580bf84c60d0e1b3edda7522570480866fe0c77bdab4db15ca5726616fbb0fb302273392bd2304c209acd7452352a527f8b859472f4311154f004630632a89f16c312477ea1700c5c3408ba5efe3028914c340cd80f6c383264d366704cb4f36992fac70246dd36484cae322717955e7513ccba70763ed47288c4c16b1a877dfeefc4e1d71f9fb625d98cf1df8cbe7daf84bf2c59e3ddcf05a8f3ac3241ea5eae1b64d8b4c1d84ddfa78d0804fe3bcd12a24d1ccb3da1b52bf448be5c4a63084e0101b4cf9cb85d91349414330762af800855956f3141a37eb0e2795c3c4b90971c1abd58e73452ed6a5cf71ba8635cb7e40b25ae93596c6517fbd8468b927885bb16a56bc140825c1ab19a5036174d31725989e828eef5767a2c993e25ccee2574c5f7cc6d1b94fee4e4ca57252b8cd606aec7c3446866b889c7b534c094ac20db6531df568869be7ba15769935e2718824c4e761f277d3b6301bf5ee9f8e00da4a7b368ca137dac84997caf397f14640227542f5e8ccc982fa9e36a9227075cc1546b9e35eaba9be2226a7d75b9869263df2a14ab80a596afa42952ade0cc2988ee5fc39cbf761a1047141758bf35d2dbb121618493db51195287271cc3fcce7ee1e361395232f303805b41a8d936d8c7a9efdaa6d4fabd8490382f2422394bcbb72c5abdfeaa6c062b924c5f7d754864a76cfa5b820f2de2094039cf895f30dad19cf8c8104e465bc6d0971f8b840386ce6876aea2f15e5b88c85420c3e79be43f8b6296d703140caee15d2cb7a81a6d55add3ebbd471de6eb2845d5698033285952278d8eafe48bf8b7949a652179ec05fef43f6fa9312020696c92d2d5a18bb7eddb0f9f57d98e3dcfe43e39076b750980f1a83dc7992aa13e2b153d5308667d3c9a37a124c769c0a0eec201c233c8f27e1fcce7150afb76ba343a6f0913295e44e27802fcabe0513f1f198fdb8f5f4947bc2db84e10d6f4521485e20bd6b4f2713b6c8ac371e111c308803917dc8fe5ea598f72342828b42d1f06e76531fd41ac97343cd22cad9da67299ff34a7a6fbe8f449ddbf9fd9a399080ac126c9d2f9f181ca883db988a66f671ceb57dc44a5f4b33fd7e28f8a5b9f4889619629941134b6b5df757b8e8900355e594ca0b7678e14dcc02286e956e212f66c26e14bef67c05a089638b64ed7bc6bba700bfcc5768bc9aaf14c1fc4123151421fce531b57d45b046ea4f3236be91105029756668e1c846a931acc0cb24db32c8e93e624dea6f0bd720c325de95fbf7b29ce74eea93838fffca1efbcc2206fed483417e9f1a711cb4252c17a6fa58b10357b7fc0e66a598aa09aa3b286047cf8f28c67e15b28a5f88b17e49076351590ca324cc7a9df2dd3a555a9fab828d52e4d14ad1a78b9c2775cf3a1acb2b3e45a39443470be700cc0881329da2a4e864ee1c610fcdbb67da7dd20453a718c281f2dc46239e26dea7d88c32f99c50713207ddd961bbbbc09cf196dbf638225bf37325941004c2716d28680d260c02f2643de21465211a1ce1f470fc9275a16dca0100e36fdaf306196e5987a8a6949dca0df11c4e542e5b82b4f7666541d87bebdd98038ffc1665fa788ab9d95695163a78ac015d57f04ebed5b5f806082cc1890628ba08323919fe5d07e9f573d48ca765ddd31a12acc945ab0ba7e4ec81d7dfa5e3dc4eefa187b68e98d669c7458ad3aa855795bd812c2cebaa448faf57bb6739a3f85eed027075772a7a5e782577bee8b56da30f261a1603cbf76e2a008507ed13414f4af180dfe2083c1ec8c0d73525979bbbb91eda3074dd5605d2c60f99c219620983cac732f751c331ebf2b1090edf2ea595eb99e859b6d85218e7d4f1380a7e605f14881a9fad3463d045bb7da40cb784f1429fc76bfa17c76c70cc2d5eb720201a14b299ce09fbbe663365eb66d317674c604a81c212cd17b18be602ee41efd1c78dc16e9b04ec8e8bb49cf3fb9058be384619244465939ed60e8f8cc8247d5be47fbb1de37f682731708b6ee2e57e258fd775db2da38a9c6cc0c30dcf7376a669787428790b5f1dadc5cff63585158333601a400ac7c9a9f8b8b27edb4454b23cf216e15dfc56042d922f2b14e5f4541410c329018055eb36396344b482b148bb99bf745b280d4e9965c1300afd97d75a1f1b03234fb94505d507a4cdeae294c1c6865db5347cacbd41d57cce7aa11f97d7626489632e0adc67514cd9783a730bf939e35f0fc46c3071259990f878d0596aa23615964ae862f4ad82255e42e9d7e9e18c181cc62ef8d597a87b016963e228710bb9ff4b3ee55e8d12c8bb4109b74a37689e5d8c13274088fd7e5dd6c97335df8173f6874fc57f3b50573b471358ce9d200493098ff3b2ac476c5707df1c1f9e81501b9871a8fe6ea921d3725e4dcf30761d7a9f0cb940fce2fdc40523884f03a31a5cd3d9be670408a73d05421065a5a10c05e5132391d4b7ac3c15de1fd5d50747b6fc96059eaf7b234177c3bccecd142cae6fd058a52a5d060a59a8bd16b14555ff7ddbe161f9528dae62cae39fa4a34a4cd79bdaa1b0240fa67de65c9aa844eac2ce59ebf621272736801771055e33617e828069829546c0c5ce262377b9f5176c86c1868de33e11e07c78e30d0c114aa4026b3a335947b2871005134513fa907e267bc86dc6d99531d6af77224cbfdb6845de7a65a2223a3fab57518af9e7b5f172c5d7e278ec423a6648335f78ce10699e118685dc1850c7d2730c5735fa32ecd526a795d340725d03b44d468a5914408c0002e245ef17452b83c2804a802bb06b8f3f05b388cbfc1cf334e8831f51b4e7eb03860fbf80a609bbe722ae781dfd01cd1c643abda153767e2b9c6f29cdb4817a5e15ffa0c8746a00e44b16a9fe7e0ddaa5ac8195a571bf69b9455d863a6bda322b338fe398dc1ce0ee72382299b96bf2881f50cfcc10125abb01e2179f39a4806174a883c1eb25cf39dd44ae107823710aba9b5f9cbef4ae3326ff521b7d1fcb5f064408173263d14d78f1126b775cb5f843bf6b93c159c97498674c2fa4f9f94d902444c8d9cf50780c714adfd4b3e2eeb98743d1fc56e4bd5b9f9311400a98fd9222cca4e0c222d70e7ca06e10708a581fb3142476a900050fedb6db9f9f9ba8930f4e8bd1a13c915c09bd96461473cda3749c51b1f7ad8e293ca0843964bf06c0665e63dfa2bcf690e8fbf130592bc736b42eedaaee81d158cb3e298cb4ea7890800ade4d2ef2a3e9057f3299de2d914e1fb222597b2905ff2c752c3552e9acd382988161d760909fa33d2f74dff4bea1d530aac392ed7811a3fcff7a14b7d8161e384ad82d8ad8d2e525b83411122c6e3d341fb267a51fffbafe3c86115415e6a70b2f964d2fa121d48268b64c4521719c35c281e5be8bde7476d65005416554a422b9154257cd15255937ccaa8154e9e2f7577ad47ba11a846d615f890ff245a202bd93b7efadbf89c88631edeb0aeecad7d3dea8d8c6cf9516523d3e3460b07e397a47f4ed815378d12c17c054b20117332a56cc3f7a89997d43fbc966ee3220a18618c7bee10be9cf322db6acab6c6775b6a5ffd93cbfdd5c56607130d0e12f3f08c767848dda2d758f4cefad7d44b149d9f5492c4537a7481e6cabd705f3417c30ba6f37c6d129bd6ea54cb804566676c088cc60294d7a0d2c52b1d104756ffa3d75553a6fd99c7576ed7109eeab9297f1721b71e5a8947b8cc1b275e442a1545e63ae5698a6e7ac13a01b2278d31747b6607628655cdabc84d72f0961a3a1201b2f8c11452957f4dd9765391cbc9feb77abd5e44b5015f1fad933118ef2c9ef0d30a0327e0c73b41a92e9c072bbd63a83e04803443957091a2c6c20c135ec8127f5b9b3053b2ffed44c6741e2f3e26fd424cb33f457eb47b671697c55a5cbcc221ddfdf530cbf73e5fdd950fb542a6410e8355148076ad9b4866cc17221ad07381f4373bf57730f1bc0afffe3e81017f580a51a9c28dc588e5c26b884a26fda039443797506110c4edf87b5265e6717ea7406427c60f3bdf8c702eb0b636e3a9b31bac0b86ffc9cd176713cf5e1895da8b9cc8f9d8b27182b697239ac354305e60ba6afaa7756e48f40abc877b3f4ebd3b4c65c3f867a8151aef333a7709d045b41d264cb0607fb7ce048d006b9a410c1b479e9a7c5edbeca9f0c207315b8afbd92001533cdea103bc27393e2c3ce57755c8595c94a1f3269155a0903f496e5b972ff6fafa0e7b58e9b721d7c1ef503676938d3f7a5c1c6bf441fbd60f29f38435fa090133752109ba2bb3a5d623b1b0eb121a6916ace9b5dab0f695821fa3f6f37be4fed2441a91bcc138cdcd3f07a1a9efacb76aa0e03f8998ab0fdd19bf38cefab9cc304d8993d508fc274433cc90b627d1048238eda39076f9d1794d2d07d8c99f42e5a1e5010d30f69ddcc308bb8e53231df86773cd70f59984c5419184fd038e6642a1957bdea946923c3d2f075ec910fbbef917403ed26ae34042abfab0d9dff68c2843c808c1285fe56552cf30b6db7c79f511fc8b76227ba36109ad8787feea382e064d3f8a34edab8ab102b93a707b8929b7e4146fe61db31d6ca8e71613959d8a94c4b8b03f7c14cb15e253aa8c25e98d10480d348785382f857b0e14da4b463b69657f6e541c2f9e0d3e5588fbbdbdce2d8c43744c4a72451f69ccdce6018eb8401283ca1ee9ceaca75a9cb4d86457be7a4b6a2901c0e350d72e1232be35ef83484654d59de86a2505fbec7640677db8de1710d085abf343fdd1c0c61030973868172d3c44979e0f33985f296c24e04a3461d995a02fd91c4019694e6499bccbbd731cfb7ad80beac2883e33e49d306a227976252c5d86577753d76718f851b9fbb8fe90feccfae3fb1e5134919cb3001ce2a384fa9f5f1acea592ea6a1c372c5e6b4030b514c577d077644856af47778274a63165a14e1819d872c36d0509ff8e06d834f5cac6f08bce020d24010420cdf8d0ea801a714c84d1587ea2b34cd2c1fa09c6dc0bb73faf0cc352b9f2514227a59c4a5e8206603e991e5fa36b8545d51ea7b480e17856b88bbb7919cd08b2320de88c2ac96d39c420709869eb759466b775a111e0d228c92b357d4551da1091de5f475db2803cd41dc45da1c4942efd7432d82eae7801799eb8a87df0b94b0bbfa21de86bd5724ba0f083642249f901e6656a52b7cd355b8d470ee9f04e5c95af60784bd6472e71702cb5dc315bf4ec83e37b22357de0f6847953e8dc262871f843e03bb3aa0801b352d2cf41bca318f333400742bd3fa000460dae3a277baa77d10ac1f84a12b9a29f5989301c2517aa085538e08f4bf159566a282b1cd97abc7747a2beea56b90269ec428bc3cb79578e9fecde03af444b9c13bb2b0498003718c48039e870cfc7f07dc6840831493f3e78f395f2079db26f35cea27cf050bbc7984b234d1809fc9504156ab19a588a7062aa6b6afa76957663d125a919290a5d590f230d2a08fbf8122f6d8daf9afc806f2e5d419e907a4a1bc57c73ef039b94cbf525450f88a6d8f63c99df97c447d066d142a51e2fb1948d9170a738acd8d5d3a0fbfd337a63f1206499538c83eb4f7eed5f7ae4cfdc1ab0ec6a525c35763568c1d1006bd7b779056187248dd0a7075717602aed8dda153e29d01a8bc82b863d13346f68d9fc66cd7c341887d291da2afb39226679dd46d9d8a95e633915910f52a8085104d764eeb0dd436fa84d3b6cabffacc59e3ec9016f156702ff7c86ecaf8b874c0ade16ec2b2ddd430a6eeac2936dc012224aba4fa2a3caee6c4b2e6eeba32b0f26cbc5fbe95386badb771df16b62f08fab9e5e46a84d09c9d99ae348edb0430089620010e6acacf6fc3d6ec865e92433ff537006a5123e321fb542cfa93a8f1171b60afdc8454bb3b6524ab0539954fa16dac527aa67e96a31175529eabac40553da92e5bf2f66a410b9f81524fb37a039de76a5999ce241a14eb4876e0bf15d94c6d2a1c1b9dc84b58141fe0a420fbe949b9c375be79b4a537ef8f92a887324952a49b2f76b02bc2adcc4f4921eb1489bfca1f02e6bc43aeacbecad1556171c91a117c48807dacbd8b57521bc000f87da0a9e3b6800dc1d234f0118d0fccd1ad1578304e7650e6f54fa8c2501180bbe626df0275ecb3a9855c6e8d5ad07801a9ee8619f15c303accd460cf4c3e03f1a1a9c18840fcc8c90c0ad3ae513cc163239614c36a495b9ad84c10e706948c1e413622b4c6b60bf16c29f243c6254476d7a2f74c178b21b25da100776ff0077a7910409fbb11ecce0404d8881d451891d362ee636d4823d7815752a9598fc4363b90602ddbfb0c2e95558beba494da12bbb2b961b1cad229f833f428c16e9a2e9e5740d539dc48965f15c0e3c4daca80c5c99557d3bf291476d92b7fb11ef456ea87ad8fbf52ae71e93328d0fba92d741f7ca275c7cd090f3b1ad268e20ead6634ffc714911a3c16ae7f0cf355098551a5ebdf2502387fd5fd375e556cfb29e11a218ace84c810263111b14adace80e0431398df0d12983c1be170afc8c6a82aafbb3506bad878274042ed99e7b44f1644eb79dcda01201dc4cb9890aed3c7c40944e44d429df0999606568855af68d2e10685093318ff1d8bb7d3d4872bab2899d54c79242e18186e380e5d81483870f03937c5c0df9b0f1101add514581547a73c1830ba8145a04c588bdf4739b4a073cf8c2fe265b20803807722ce3a02163f8b7c894e91645e47d42b91f063735662994353317da2aae6a1944281649aa6a04b049d3910e2edf301f16805d389f521594650592c39a7b24b9315098a112ac5d8b9bd05cddafba0cf89b02e5e0e25b690f3e3df7291aae711c4c0cfe93c44fc43b68e69d65b9c4a55760dd5fd33b392af77624f74098c7cfb23b45b12bd6e5d58759899d6002a10d8fda9edac3382b210fedf577f7904656c7bbcbc84a3947d27d84a3cfe177839212d1058d1e62650da817476a0f14154461f0a4d637568af25b938d230cd6f08876a35bc347853b03c6fa8ef4fbdbc7d0d5a54e378a4fcb0acd089e45c2f6e544030627afdc733fca9883844e9a5bf923d8528540165b7c2c81da8c18e3db3e40c0c75352809d44094321e3b15e8081422b455cf365f65dfd974f5c7d263fc15e3d650c51f1fb3b3028fd755fb076fff85c1b627ab7a2c81a0d674359a7410207ae2308cf8f5e6beb84dd5f4c64e8b2cec977467c26ea33289236c2776d7b5eec408c4d3606a004ae243b2302c4bcbe3e1b2988f0b8c9104518ac2a58b68b7f31253b85d3dbb0600819e42e9d13a3634c376f477216e0147ed2088fe6d3f2809b067583c2fcab544ab82904642979f56414339307bb1efcd4e234141e1760b41e0b67f17775ee6fd34990e2202dd78fc820db2a256d70b3405b8ed69b768df627783dc95686ea0e0036747b8050f924ed104715628e4f62ca84fa4ce3737c22c1448982043990425ba2018200eaf5152a3ed7393d049748324d7bb1300d8d404a410cdda2fd344400abc2be30a27d3ece37db59830e7d1f13df97ee68c1fb1512c684c7c00e0642db5249313b5fb15da69850e4716efe473efc967cc098dd18008c6d9e45c1c723863fe45296a63eaf931e900878facc803753908408b9cc75a6882aee50de5638a2c698291a459dc8dc7bd25e57a4c99cac4d6c60b676fcf55f59b5053cda7c10211f6453394e008624e0a821850b529b5738af75c5e3ecb529514046a9453038bf41b7719dd64b7691f44255719d0f2302eaf9d8b53d2ef68be76ddfc846982c11e6321a571d3f81810957db80acb09ad4e31d1295d4f6cb53799e945f0ab31a6f645449c863032a3a7f15a1c9ef9e91a07675048aca29aa5ec6ff0987896154a9ec2bf962c984d1311dac5212293d14e09975ab413f875e5fe3c4c9920b835b53ab088cf59c0adafe46eab5578a497bde25d661e8a410ecff28d99ceab65f439cae6a69ec565fa89ff644c8ba5720544df16a228973260b8075fe2a4b1ccd43e7eb6d0607ed826f33d9e9779b46046b5ac1aba80e23ed379221f8f38cefe959af19d8bf3c090f573cdae46d3ad04fc26f1a985d88706530102576c0058e3823047a401284751cfe390405bd4cf6a0e51ab37218bf54c7e583d5d88687efd915cc66ebc6229259f0c34cfa87e35f45641913ff29affc25d6b237826c56f5fa53cee084ce9a6e1e39c476c3b42bff6d137a060685147955555516060fdf106526f5f99701ab05a5137c4d5cedb4f925babb7223f7417d36f599d1a61e53255a508c4a0181f1d4c231c05181d5bec790c8a6e31264cd5f0d3583af903048419f442d50ea0006437e3835ead331b6d7541aadb9cc7e8d49d5245e80b2d485ad97192c0e920664173b6be3c1bc02cadd5c4f9035dc84f4dc5d4d88457cbaf14de72dbd46f6eacd91afbe4b1644c248d92dfe7e1dbde1c3fed7a1b50b98059f18fd36f150650ae01976e7c7c19ef5587e02fabbb7f53e13a1a49e588ec6e974a6e13978e8e3244fbb9883ece56a9731459a5d99067110d4242721d61271c48d946e1924da426c67bbd964c38e9f1bc31af03d7c44ab2132e5ebd71fa26dbe773720409031bb301b1088466862b81a85413af62a49f3892ab3f334ab28d532d2010a5b71154189b5e0004b739c94702b48533720e259a978e5e26fd1c7f5bfa5deb3015c4af43036b7788eaae567809cd0c70cd0d739280881d5414e306621c60e5b02e8dda286606231fdd9d5d5721ea44ead45263cb829e85505672fcf4f82b62f094ec8a7456a1326f06973ba56d97ad2375e6ef87722a30588bce4ffc0bd731a625051a0587ee39185bf49103c02df316d70940eb9aa055131b9dc89a103161b7352a2f1d316b3fcb0bb15c36fd37996a52c993afe6c86a00cde0950bffadf5f63e6095bc671527396eee69e29f4fd825a7fa54ebb1859d63db95d23029ad83917469a6184889b4980bf98e7b70fd9adbc23346320e1681ca9cf9c5aba0820343b5898e26f8d1dcc5846bf3450f25762327a8c89fc0d4fce9bb9dd2511385e000cd549455f46b33f7422bc0cbde1299c64075c9aa2f1f91e772f3fc04a86dfac6ae86d9a8c527ca72d12c503f2add65b4f58507deac52ac1a6e36b0654f18af344bce424cc9bf7cb76e70ea0c3e3447192d503b11327d1051761502e556b739a516bf2b4642e192a109cd3797e6cf94bb1a091b3569065a48a1be71c965c86a45b6f5b49cd725a326bd9434425643cbc1c7e9d1d60e58d1b4265361ecaa21b0427a4e984a2a935fc5366b25fd4a02432f02e610bc20343e2a5f76625af94015c3a8b1b03ae4fd73e7c71aaf2e8546fe17cfcbd82eba1d82c45cc9e9645f0b4ec2f12098e717b6058271dd6bc23d83c4ca46e38038f1b8adf73a405d2071ab1bf638ea160669bf5b26e259bd376bbca19963a36a92fd67a0c5094401b3fd2e0a019aa85df11840c7cfe969f8b5f64aaf017bbd1c1c049285ebc6f7e026bc2314b2287ef5161fc32dc5fe44b75be01fee52f02d566d087fdb7a68cfc653ac4c3ca041b23a7fac7e6a87b3a73d716af42125584e91db29b9b1dd745a61cf87b8a2f2c7f21bd7e4743e70255a11cf696a0f27435cfca5e896aae6ad68b980c3f3bbe0cb13f8434afe24b5aad127982a4b6acdb22df659f20d9fd83140337cc636ddb1b5b0cd09a79ecdc9912f1dd067cd160919b7b052e8753e21f38e94b17ad71125143eb3bb5df2e4764fa0b41ec3a48edf370af3d8b97c9926acc0c96321efc0b38e053ba8d5614dd97bf35b1a0af81d3d0fa340d0e62bb57d4537037cc4518783d3a064da7de39306fc1f919334382d282026c6143996d94dad77e5150760c4d527381b3e38d9c4fb1142483fa3ca62361b22a8f896eb74235df25a99a25dba63c43098b1cedcfd12f1d5698bfdee4e5c25c16572477194d63095aabb1193cf73f5951dcdda7a4d54f7fdacb3587c009c2ad7ebcb809b415506b8d166c7125dd120b3d1763cb38726c9df9255b823e07d2c8110fb55a027148b3408f8a4a09f41f5a8bc9ff69424f32488d50ceb9890ebc8fae2a3f3e2648d542d1d8260d7df1549ee6bc6a51b4f22c181503bab188410f71f3099be324f736e383ce27feab1b50918f065e19a736b6d213a7033e5045aeeb4ea173ee4730268e2116331adffd67d9dd143877ff1b5979f54f558c817dee2e6d51b40ef6e870416890e0ae9efd6b4590936bc198f63cf42d756639317046aa03ca2e8ed7743880adef77f6b66630356e43936a77d4690585facc5ef7864600b2a7d0424f18aad360272b1d3ca05c4b9b465fc5bf793b3e95b9e734c6bbe956596bd63690ded49194c84f70c34268ec724922fa68e58c1fd337c7c74dc724cf5debe60592a63a036c5c7b1fa8653b99e6b9f2d796149cd1dcea9fdad1dc0fb0c8c9cae427ce9973f3c68eda17ec5efb7a044fae38de09f8a3591244ea31aefab07d1628a13eba11522abe45729c3d7397fe136e2a019b1c464ffee21bdef3205f5801bf22ad41df85049e98443f19fa4d972502213301e9c167049f39ba57dcb0a45ddc97ae4e335a4170b3a3671fc15706771f7745fbccdec7a9a190f54509bf623638bc09b18d4b602ec9242d5d984bad50004d6e2259646ad6a5375527729c839abb01579e572444acd46292296b46c954b63c3635a0d2971062573c76458d39cfde808a704433351f43cffb47c61089c8c7cfbe487a9a77cf3447a1f8efefa926012a60d921a045a6ba22dd3835ccbbf34069fb6948d322a8fe032ae1a028deb40eecaa22848f2b483bb127250b935b8a122451ff2f2ba7715c0bf9aa19c240dae4815ce94cbf4914bda3115f45cebb5dc3332560d1daa3d802d5c9b86d2aa523b0f378d48c665b01bde2bf2e40f97fad14851338671cce0d1d586e4984276fb3c3448bcb837d54d48294b010d5f4cb8f3e031be642f6eb9082ee52fb7593fffa91f287b3f9f8c7b5d4475d26bebf410b798758b70480532723c4910dd9e5910f2d352c82ab79a51c7d488a196d77ee295e9f2fa6433bcdde84e68cd8807a49388974cf50b79aa165e4e87a3e5d6eae0987c98e42b5c4874aed5f2067cba70495fae47f0366c00c33d7984d1ddfeac1750e97a064e038e2fa6460d78df13888bfdff65f520f1606a7bff9ac310be804ac9719b2991627f2dec840f5dab4ffeaadde01249d76f401194a6726180f65f93c8c572540aa0ab200055e20ff0fe61320123a6de8d026ab80cfee5929a33090d6da9b1a85afc5946a8b14d28f199f0fb88f0339bf8eacdc6658d0fd112bfa70b5d8ce73073b9a0fc11ae1e6fa795d436b53d5aad04353738d47ba5827f7a9938cdc72e724dc44ee13e76fde1d04d25c6e08b2918e843c64e8ad637309ec0951b5b0eaea6d2b3666b95ef89a93aceb5783d1181e19c97264f8f6bb6c498e7dff9040423c40ea816342c53d05447dc1bb15a15fe31141b2942e3fc4fa2743d508e85c25ef20d47fc7812cbe2ac4a6d6afce1287c91cecf6c4a340147d51932a63234ed3876a77b259b43bf2dfc7aff45a19165a23484fff62277781b8509e93be6e80d70a938eb187d123239035d0a21962829cbca2e993faf0fd9b7e19e838f375f6eb4c16364f3f6fe4348defe152cacba6fe9b3c6183233e38ff77559e400a61974af181e4bca09e49e6148ef70e3ee49b975f2cf04ecc4c7a3225528f538e48354301faeeb0b354f8c515b20bf38bb1956fadbf33a1daa9b78a80503f2fa0e599850cd42120e941c65ec87d6947e045f5796a2b83fab734d38db359751797fff0bd3e3d7cc90237f0a900b88fc6a3354e5ae0ca5ad2ff7ca18f202f5257587d7f781f7af1afd8adb2d1d69efc8e710d7cd00717cd9f748d9477e373b058912dc475ba3b6f657432e8514698d8eb4def3fad70c55a8afaf6bc1b1463dee0ab5f83e03a642afd260720be5a8e5a63afdd2817dca08626355d3b417a4c7b3547088f6fa30b087bbcedaa9aa619462a55e5702ec5dbdeb03b1fd71dea129dae85c3269d8aaee43f24cb078ffd57ede8fd1b0bd8406cdd4d513f7b345d1e4521467e83c225164d0d26bfdd7f2dbedd90068a46e57382a74131cb5bb31f0519823cf262a955dccdf86dabcd4b8edaaed9a43079209266d1b5d854d6dc3d5ac22b66d56922174b46648d386eaf3c406fa43aefdf4bf1cb6e129a18638e904d771f6abdc8130d66e031e1a9fb4a8142dab7a056fdb5f2ab8dce742d8801dd6dfd39013da08083334cf762c1d4f26873a87694a35f4a254b2e3340a01144871dadd1ca4aedf072c50f8f5b0727f242e95467a57fda67e81e431d64e2523b3269c2b4ac1c595c4b46cfcfd03bbe72216895e7289ebe75d0f83abba6573d0773659582b87c65d9f5726ea0c514a985b2dd95c958994f746f5d2f4eff8734863e71e88ad87b72faf1ebabac27fdb42d177b05782d640f7b98ea67290fede0f63669586e1d4bac24daf1d1618617d7517999f8a2d76f9c67e62ea02c4473d1fb47397863994ff8ba25a87a5888cf755931e64753449c7b4a514e01aa47a788aa96698cf6011625c961d7f9dc6a25b77870af6591ca53fbecb96eadf282d00904ae68bc4e006f04690cd482f8991abb6b0175fda1cb8e983b1bddd76d75c1e5baa71bf349e957b8e08d5491941d23b7bb05c37af1a45e7fdbf82093ed2ba43a87a3676f62a5bfed56bfce19a081b5b0cd372582a69b054d9fc14b49e32c4dbab6c23f51f01915c51b96e5ab3225d5ed549577bc1dd24f0447d2f03b8d66a6334b9260dfe0c9e18b0390a137e4d5163163ccafcd6fef187810cfdca7329dfe0793cf68df33abcb25ae0104b255c7553f62ae520d7bb29c75bbc5abfa82acdad10dcc04a103482bde33bcecd8e29d5ca5096224291a9874669bfe89d42d894d19522042a6ce505b1124b57a0b05ac8b008a921b020e76155a9c721dac40bc08a49b7c063b9aa9c1b9d0db26c773c00f6cc9ffbb96eb739094de48c86387e368aa43c633387f45f14c4da8d22297898a1465df53dc9da06497ca9e3b97413adfb67ff66d144e7ceb742772ce73b83741e5dad5ef0860ddb5a1f00e2fda0f0747526d4e31712aed1bfc19cd17f8e8d0b0280b0bc640672165f778dca5402263b5dcde9d235cd765cf58b2abc5985160bb0f203eea42565e9a169c80a099bd793e29995108dc25292363b769ca4f7e13448c34860310c92a3e65aff01e81f36aaaf8258d0632c10578ba065fba7a7ba55ab89cda4fb6eb0ce500c1ee050af0e91d941fc301899437c281d932611f456e327b2202b6d2a1f789460935cd2b5b63c448990f19aea56ad178193e5a4b9d5c07cf46c4f6134f7c476116dd58730e550dfc57184632acbe18b1739887c806cc695d8eb8f6245291add237be345a5e0263fd4b86657557ef236498b61973a56315f267dc489d9f17f833489232c8e81a36c7913454f08a89bee27a28fff791b178142e4d9d9f1e2319d35282ed7c4bb9370de86e509eaf7e0d49479a27a2c2fc32323f9f2774ebd2d1163e62bbf9010755d9a7df41687838f8988c9cbb327f4a96a758afb12a2c27ac5ad734b9e0a5e88f3d344e3118f9ccb7b23de3cb056b50bf3f4bb2d74a56891cfaffe8b979f88dd137d3fa5a7419f96526b8c755c0f6306635a229fdffee0ec9dbc48e97082dfd6db1018b62f4823d12cc3b030e44fdb568c76b64979383c7086d94717c7c81ea4f5aa4e4726b7d05c0a1769fff5775fdc3a2728bfb474ab3137899d86b01260506321b3d3121b71dde29a4195bb1a149a78bb90b77485b551527d249d33686b1b241f2402f4f1618f364449f14fddef7ccbc679d14a8eae131fe409869c85f20a680ff4a05e7c10783b4c4271460e129f194302a62c20ff903f2609f9442c09650bd3d2d0e2daf2d53129b82e5c3e37a44f2ba572a81826672c0ed03b1e468e366122df62402b981fa83350e575e6d5862d140313019fb711daf0f2d6e468f40a4e33c054675cc396133ac3d22fe338f6811619c1ed23bdb0ea9c77f69481db77eee79f3627170eac7b233849e00a239c18f7beb6630004b0c58ef222b03fc5e03f8ce9137874e6a8e3d67453f7fa3d1e164b9b1c5dd4db719a4aa403eada57b203626e14d10fda5e1a60fa69d555d45229c4565d8fa5d6d0e82567e222630cded3b576459f1f837862b868e0505c916425621e374cf4befbb971641f018526b8fb381823eed6194129586a91caa54724ff5e5574188cb30607ed7e9a6bfa852457f6ad05e15c5395861afbd2f5fbb56ad9692a7f7ad07d8e4ba8d2d92813fb106c7a5a2377c6bf852a8a4b595e6a271e3f96975363f33b26b771d9649d57980bb6909611ea4b7841d8822c387e5f7efa1f8f7830bfe7624235070a947a6d41eca16c0ae4561ff42672e0b4beaaaf50dabeaa0f5337fe0f10a8b28efcd2edccf39764bca73b4ab754af04c829de3eb38098369e915f3582c0beea905ca7c76b0ffb7b81e4ef87a8206458f323d7030b06fc66d45cefbb7d728d781e4e9dbb710e20ae3e638e92e1fecac4a58417f2fde10f1df63d6535c75380ef5fda864e0552078ec463d0955ab59e0b5ded1b611c96c61d97aa2341633b7e7cde0c0198658e057145439ee10da0665d5014112b9babb722338b6b52ed002c69408be937b2b46ac9a900fd3efd613b9953f938877a791e86827431a63988ebb53b41d2ddfac48027a4307e6f0b360add83e54348209471c479ac068b2727012d102a14a4124e28d180d166c49bbecad6ff8ff5c9f4d46fc9aeda74a848e90a8a0be461b22c5e7bdbb4b723fd301e15f66088041a0f6f73209ee7c3198400b7fc2aff9b5b040baf1f4eb10a5789059449459e2290f7c354a8a9bd62579ecc582996cd23509fe7fbe3a99223b13c6b014fd8ebc951e9719bc3159b246a782edd1ae7d4a2111b970ac10d01776315bd77834a1dfb693acbaf80b91c9feb3cbc8dc866e2d5c9240b88dfdaa33b71538fdfbaebbcba8f78f2f29496fb3f523399d9ae3c7d389dbd8046ece6d013310fb69e1aac361b50cad577cc438c660f35c32bdba5f6321cd894e2a8fac3c26bc85d07edf24b85d628318882f3e0479e943d66b664db8647808bc686187211042998725467da69ee165a87c94fb0615e0c3d19d4797ca41687d5bb51bc8655c71156c7b72e40ea7fcebf3d6f14e09fe1b398eb6577f02d4db08972b34f231495e64503156aa2348c935f04fdb3d1b8bca2d1ddeea74f765c804c3ab2d0846940a27f108b70bed21c471c221e50ab8056ea593dff6f3168671c63128c4a76767e01f5f82cab827913eb3b6fd76c1fe119e62897898d59d697f81231aee484ac7b3fe101cb351bc6f6e4cf0bc6418c5cafc607544f354bf7c9970adb1e32a6418406f9d204f502e6356a81f6d13833c15adc2acb0e13f9b82ebdb527eca413739d71d52941bd651f4cfa6ff379765696642b29ef7ed976c6e7053ed0c56c51f6e643c7094afb3f632e25fb719caa7b717fe0f6c2e32a20b2ae2c618f2451f19f0ea3fafe823dc5de0c915f71be515cee1048fee65555ab01da66ff8c0586b4ec6132e47c658e3f2c352bf45b9796947ade72aae071adcc75fa53ca2c213773c9a35e0c666d2a8ded3bde729d68df3052570cccb7f82824fcd7499e924a8c71937ccdbc90f18cb6f82243251a9d82fb30ad8616573a5b53feb2f7b1dc6b2bd7269c537c04d3917a78cbc060f92898c8b537658dfb5ced9423110ef0158c7ca0e8897c32683b0361b4d35d5877f44abb5846f9248d52d5d0227465a5df8595e087bcdd24df54de7211a01aabcdc2bc68122d22aaa1d95492e128b2013322d2c6de18d8e5ae619fed938cc5b8c72af287af744deae612691514003632dbfd5813a65d62044b5307a5785c423730003edf451832a0e5ab4673db8be0f0beecf112dafbaf66018539d615035074a6af9a59dce4e414b1e78563342d6eae269599264189f42364bc1f50c451f0da60499e0d521df6430cdda648cbcca44d83ca2ad4d375d73806245b20f7495d1ced4662a19715d273a1487d27bcc32e067d592ae66a33fcf8fac98eea75b67a30a75d440e8b6c7de05c939bba11ac33301bb26511dffd2ccc76286c71270008a47195f62ce28a75da1dfb91879f05002e1e390fc14ecdfe0c19ef3709a274f670cdd01d15ee1daa47ca2c072ec12009f0eefb2db5df175792e3f405f41b7cb3fc3ef77d3efb523939d14dbf2ce74e681ee021735464e4042f2c50b4c124c5ff74ad70f54bf577f049bdfbd599763ea52eea87749054077f2e12c5f6372ea34540cc23c2e659609ebc961979a685fc0b65feab44414e2681515bb25ccc622b3c0ee805c907545890d5d04ac880246408d710e7bae719a0abb665b023ae1bd637a119a2588c55bdc4d752f44810967f510adb1c20c653c7f1768ae8c9f624a18a6df39eac6447195f5c61c2d9fb9b87ffedc7347ff30b479475c35d5b5294b1fb0ef7bc9e192a2fef97b93fd290c49f72a945ad0e70785d9443eee0ba576fbc6ae7efb9571b0270a2ac380fd88cf45c7259804229d592879eb6aeaf31ac0fd4328d1b802419bb9fa0834971cfca389bc60b9f27e91091d20b46971bf71f2bfb70e9e1cc6e4b04edefe90ef4651bd6f7cb950dd390652b8a532597e7b0a2840ded13574cc9b63e54acfcbacc023d401c187b206735f47e920414734ee2c7c14ffdf8db2cb39bd302922d725f2ea3b1e8432212648896593f85d3206db9c6099e53adb50e2ad94fd674a0bd08aad2376c9686fc53e4a18af9b7d595c397a93f0c6d03ae84b1b859bce9eb0e15d776b928d9327f9b4582085dfffef69134ad6c5a4d33b77e376f4f8ad577abd09b1777bd6d504d8abd830b9cf09b80f85354cb76edcf8cfc2b81dddd4c8d6f06f498bdec2f7631ebd885cc277ddb6d3fd20763565d7b9a292c90328b1fa99cda13ccd3eec192c70e53458632ba048db94cf4f2ea749662157f05c0581778a473e06529e494aff2f878b37060036e74092e5e6605e3cb64ab56a3c264a55438b2b82b8f984b768af64bb2054a6e0605bf806a7c5ad9a62d1d6808df639ca4dc324aa353fc8138c5b43df5455d8fcafcdfd974308c6f104ba35498f9a26d3baa00c607a2500969980e9af62272533eeebd582725780424d66d7c097359fc76189624d45bda3718b5860a159bb849c8a691f1b50e64381dcfcbd69a92519cfcae5a8852d6eab814b89f5362c3c454e9ee4746061f2d02675ba7ece448d44f2750aaef78b7eef7853faee6c67c45129a27263614b7e3920f5355f12ef4e9df0d85444c39727825162e156fa10574bbd59a822bc735ecb1f26e728fc8814a050e47ba91ddb4ad79303f99992167ac07b500673f2c61552012cd9ac9755d2869c316103cf27bf20166dc631bd61f9c96cf370bcff7ad55620668012570b3f086b2aa50798fde3c9e3cfc5dbb66e90f351864d985557c176038a71a323b2140db0c23e9d779633024cc44bb0ac443f830c6c14b4bcefd802aa66da0d91f1bfd184d0cee17bdb17b24c925e520f1885b43446b1c16f4734bf296447152c8d2ae38ea86b136891bb2f4abc719e532da52bda76cb9db794cc176eded176ae58217b4b9882a9e22c22350279f29d7723577fb8b67360726511e4ee010273f60e91a88d621fd08891628fc83b7d549b4c26a7eb70e75dbe7c07f00035bf4fbbf6e6fa16f6e5afaf844d9279e7e1acfd2d11ee71b64994aced1b8ca02e101cdafce7215e2e5b982a84a6b295293e6d322a349c027daeda379e6b5aaf9fe3a863f2dca5a50d9a4b7b24f120ae75fe79d072336e36256ff0e000f03d943e9ccb6c88acaccc2699b8dba206fd6dde090d5d58c7fc64df62586cb658cbe024b72677d0fd0de2423af80b50b1a65861540951613a773a06b302962e0cf8171453631bdddd7841188bb6f46aeab2f8d2d112b455b7d64e4631186c1bd9680474d3366afd67dfe2b6c5492b299d7619dd4ef2542e129cb6e3c58b943f1601e187adae1d4eeabbb1bb8ec0dd2e8a680abb3c68845cbd340effe7a4eebf2ab8dfef093bc8fa6e1d3809f245ed70bd04ecf1e40ebd73ca9a975d49e13d8e9da204b883251886152111834f2e1d879e5606e247472d18bc9e26142cede32b77004e1655e99675b28ed559c7574e337e7192167185f83ab819e291cb08588d2ac0845ade53a4e90f66da779226933d35ad3dd82f1a361a728da329e8c34e4af57960415821649b4af873de0eb1e2335bddef2331d9bf56d338b1be4364bac8e279e9de6fa290c96ae195e75a84b9e7c4d12c6dffccc251f4f8e40664c3bed9877bf872edc68d16bfe635a600bb258b00dacd66ecc93d2d2cb4fb5f21ff87f645653a04c85a5d8d0e4d3f67488170e4755dfa663608965ffe61b8a6d7a323c51fe628629d38dc35c72fc42cb87a2be47433ead5ee115b09909ab9dc4794e30b42888326b6090c4777c458cb92cc33be1ea29f1c000a4d1929816ab32e0da6cd3332462e387152a207378572316f04f0b4f7bce06e2b6b475d5f4d6a62be3c120d24ff9d745704061e05719a1f56d47a9adeb76e30f8286b566f6636e86ac90d2eef6efdcc810b6e7f75821869b0c31b1677c9f9b4e5b81ebf0bd3b544b2d7aebc6dc966fcff44bc9b590a36decb9e89939ccc2e65527c0d24e06209ddd4fc930639e6cf837fccc4bb246bdafeed7e1a58cf8e3a3b8f5b6763302c820fd94d0b54ebf5e20416b0f9a97e65ae5a5ea4a587011c5a676f803dd460afb2d2cb0c30210ae53f826961b7da46184d4f1f7fa8581a2d400eeb633e3c016a29a221ce0efa6f2fe8a875c59029485771a2fad5c2d71b0343cd6b2c2f43bfe161d6d952c91fe8324136f4db1f99c8cdeeab3f9a370cb8f95bdde29b103adcfc6ac8f452aad0b2c40ef983d8195c1ad90cd1d424e5861b60008c6b2667ef8f9850771930000bdbc78cf48ecb3ebbf2da0a209ab309cc3b6de3c3a6235bb9301d4ba769e8f4d7979efd9e9d0d3f8337daf3120292481bab23588147d83dc8582030de57b04e4a71a8f1b28ae68135d50ce6b55e95215180c15040bbc1220d6ba6ffd66a281439d15e26cf28d21bc63cb774be053e8a4bb1111f85fea0062382b3605a74d18b87e5b78327a830161e6ba33dba61a8f8e740c4da577c2b0657a8e8b6482c3a5dea83f409645f94c518a9cd8b392f251cd6b1f635ee074f72ab59bb20e71c0a4a975eb9552c10a6233d6f7c06bbb47dd06582ed763f94075ba8f2a1774d323f8251e320e1926db3238f371657ea0b77b8c793b32ce772883ddb85f030a9dd4cc122e861a5f584708627cfa0013a3f4c1e8f676189caac2a525330ad56ecb3d45fe97ad9f8d2b6f0b7e6bc80f914c9e314fc15b57d2715772a59672478fc4dbad03f75dba41babf8dc3e2b708bdc49a27ef46bced99cadff2a1fc91061b6d115725683777c42705fbf0f54d35950b65a4656a9b6f1990c88291a429ed33a84a8eb9fa9afca927832604586f3b326b2b2893106696419dfe05a6f2d39ed99382a8abe80cb1b1acda087dd982018987f137bac8acad9d1d6e223b5b07345859fc7ea999006fe79ea15806b5d642bb2f86bdf9e78bbe560fe9430f7a303609617b6053c5e56e496f9a9f58fecdf514e74483cd76fe4eeaff6505d6e790673379c4a3345a9136836b914f12470a9c6c486799eb7819733fe681532576154e9d40387def65ededef6a41ca6f266095897d5c75c4920bb2ac993471825c3075f3ba89f31084443c0839752a8065a936503e47cd7400ddecdb04710118d363a8b47fb0e0d9dade71870ce905cafe7fdc68c58c794bcee91261118484adf2367a74cd2ef32f7f642223ce2f787e9bf919ef9b12dac01735df5606cdf041eb006096e028aee2a47dfc234607daafd3e2bec027f8f9f4865b3432a175a405d13dab1ef5be7f8a2610f376603beb70ad61f18bb736610bb310fafc97d2a6700550a1b2a1fcab4ee65602516fa2fc8003445d82e02ca8a53d990f31622ae5f74dc8123c216a90456a768f1daae414cee214415c5d43abbfa00cf7c01c6dd4f9ce36089f4d1582e319b81c1d827e473f9d8ed9dfe7f015591fbe8d345f15f64a2af2f496580ec654119f3ec5ec04e0a237094c700e5c74c868e87b1e5885b696cfe0a2d129261730211184f48576f96c13d0d8bee24b56b25c5926b11883631360c64286f25ff0b24352219342cb85e6ac0876af2c962fe7ed0bac0b629af6eb35ab5382ac3e692fc63c10d81aeb67662145ff70226b04f4f8e0dc6013d931b8a5d15aadd0387978a64a08bf8f3b4f8e27e21b919d06564c37fd8037f31a36d6b9bebe4f77997bba7499448135d8117a2b60cf6e8aae2543e059e41a9058539b9bc753dc6f1b81736f8235004aebd8c8e8da3ff2d67c664bbfa5c4d8f412b40043e1c2000053b2a95482cb2d1ff47721e3838c0c229297e7b3b9c1e85b485458fc9c6b77078f8e36635c3f93d31207ef2690f6bcb40e3f7332c24cf6b89e74ae4325388d1224232c746c2dd93483260e5706838a99591afe9b6f0fc59b3134c802e67e2dfda01ccd3d21467bd39a2754cccfe5a32cc3fe4391f411c23c9b256ab07891cea2717506ae7701c37cb7f228e0d301e07ddbd4880db80343ebc1c4f7549c719b982fe6fa21b66d4d509018094c6a97912eed9270aa16e438baeb47180e62ed897587321ace1b29b3cae7a91fc5512dbcdc297e5a782c823b86f2700cd005d2253c50ab2699f0cc9733718a823402e8f1dd04af5a4c80aa29c2a4f5b595b898cdef50939cd55525c08626bb4f22399fc3033fb6fc926b2f48c7a2839acf753622765dd6c5e5e32d5e605354ac63bae93573a010099c9eb8d4818165c7496d20ba35a7dcfac7bafa30d15e869bdf76caee0b81d00569574cea1e2be70fbdba348b9ef1d5dd9207c6db4268ebf760a97d8c82305073bbcff7a77dacb5ea41e728d6663e5bffeda7ea4b9c7ae817dda25d61af62335b71d2f8b9147d3201b3b136e34db2ba6ddbc0edeba296e6f7b1abfb9971ee6f532737817d1f11c4cc8adbc692bd2e4e8a233322d36ce4f89f36d217e9335fc6a5d8a6827f590ec3a0e61fc278818f3aa0bf113ff5774b932139706d5bbaaee2760613e2117c7020a5217e135f32c3cae8367ec07f265d69a25225b86288f2dd8a57bac63afc9bd6f52873849ea9e8c0a01d6930722167d0ebe22ccb0591bb84f864152b9b85efd07e9095ca946d1b869f21443c79c80f02faf3597ed62a27fdde73e1fa8875e00716506c5c8505f01e56493ba232fc7a5ea039e47c10050ac5bf09277d71ddd462ea8fc4866e8b3776c27722050235d061fd933b89af2940234f954109c27527e3bede665e04b8a0f9518895baa9fe0378d100a3de5ad3d4c77f9d3bdf7902f5b44f8b4edc6843a988318fa38f9cf00d845a74bf2b5addb9b4582f1a1cd39cea00cb0dcbddede22a7235f358bdf56e98e154b2eb92daff213602f10ab42fdd477226b14ece504e065b16b125701c76db7acc815123a9a9b075525990e01a3911b24714214e43a8537d6eafe7e0833d31da3c43dd46a92f0aa718ca15d125b50e55a03ad0cac4cf35777aa757ffaf44358f7158de40e45eca54618618abb17f9cb336272d82accfc86224ce01061696bb4738dea4e40ba31a029c0a36ee5c891330639db8a0baa6c3e84073daed6bca90c9858dd613064fee28168f9be0a97be2c6cecb39caa30dbab8d499b9292b4a078c96951508389363ab2b6ffdea4a5ffd81dcb649cca2af8bc8ad4b8600261d7aea9aebe3c9282fcdfd838815dc64aca7d327756084539b3c367f211695ce87c6d33822eaeb695521d86dd57c7ea82977f079da7445f5b511b72ac61b955a65b47f5dec0be258641346df3b1472a73a53629fa1708629d77f24450a825c2f293d56964d52b9d9320a63c5b5b1a9549d1af5a9154a553f96b2ace10bea8bb6648a27d7f1d1fa15a8dbde68a3d79e49230c930972e10022ddec5113a4aafe0c21d01739d24c6aac068f5c69a3c4eb73f1e092383c225a5420f2d980695cd6dc1ea680f59d1572d9b56fea3439ff222a9a02f0fc49b7c6188fea82eb144ce3d2a29230726e1ef334457e618104b05478ed9092517ffc78f2ecb91a078417d65850edd37bfd664b0a2583f2bd3ddae527297355c9c6e9d80e390f0143ce1bc045e36f2185f76490ec421ac077b8887fe6a651f2cdb75c82eb6604679e5ba8eb290cf4f66c9f69612e7df12c0e4302699e86b6861fb5cca65e911c01dfab778c59431037e79f0436b8a900b9ffb8e451a2c2ac569477f1592181aa6d0160cc65fe82c81d6d593ee85a1ad4196d95a03f5c019293c7d7fa54cd6dedc728e7af100a0a7495f9605a45b450ce6206c3cb123cd16095adc067eaadd42e2c654cee4ac98abd358cbb83fdfe6add68ba95f79ea1674d241f3b393e014b959f44e0a08010a8c3cbe2bf5c46b07e5af521a4755d72bbf98565c8fe47768167fbec13524033d8efdf51decac4c60d16bf43c64b12646ed295162af9e789f8e6a71f8a941c4aaf96985388eaf9df046c65b53ba374917030b18f6e3b2c2731066250db760cebeeff0990ecd23248c2497e56d07a7de9d4b4771b5f5edddd04157907d04e51952a153e506938f2185b9691fed0e87bcad8206411a208e5f5b50cf1c28696a432eb83f47a87f92da9607f2fc65adfbd42f4f2d6ddc86f2c19fb529ec15de2a591dfeb14970a9b011e308a064f849b37152c5810bf9123d96bc5c295f5b3f1a532fb6181f1ab763f26186ba4ae1b654bae646f10f6c14ead477957ead93504aac096521fe99b2b07d947e8ef082027fa095c9890cc38dc3b4e80cd3ea2b2f7efa70b915e90fc4cec5285569c9cdc4d41f1ae1df0ac2838e5281743ededae7016cdf7297acb0934162520e55bac69623f8576a6647baa65fa80b9e426e3529ec7cc2985d7dde8e974cde2c95cedb0453285a88ae25bfc11b353b365a76f9d22195dc5cd374c4301b38f57ed53f6ee7e5e4dcf6eb60de71f58dd7005677609e344c3942714ecf933522d044b65a9fe2b01e677536454ab81cb55e3e5bd171cee7943c29ff582971d9e498c26c641b74a70dd02c4210ddabac9fbd66977bea78938e92384c2abf28cdecc9e0d8fb50d29b135a5af74e6a93ec10e834f33027a2ff1301b38eba391c542bc0814f897d9a5f06345a691550e687dd348b88fafba36ec0760caf89869d99281aa8eb6d620bdabdcf94c540bb5c4566d9393c9fe6db7f45f7a6cc2aef94c3ce7d0ac47094f3a2a6db4a1039d11804f000bfd40b45b30c324ce6a540b66c7f07914d20f1fc6bb8201ad62255c4e25cedbb55be1a01fcdcca5269a1a7c78f2d5dcef56518ba1434ac76252532037e86c073be6401a5d1553a0e198a4d105ea2c3c264042be9f99e621144c23566f1c7b1202721ed795b9ca5cfae0da5a14e8229fe47800786de44b68ffbe60e283efccbd76ec78e29c28666c6f3d7591cb695ae6f3de224efcfc04d19a81f566781e58b33bf3500f301f180e068327441125b4ee0371a3c6f4beae81a4cab72c5d3d3f48fd1f14497ea14acc1197558866be798703c9648d1700d7a60f70c147b0e2637d1231b705568419b76cda26b2e19ca62de161653ce4074d65bf9d21133e50eb5f0cddc901414efeac1e32c91cd4a909a5e8339c3be8bd8b037d1bf699158e74fb97e684ca61dc3d1273cbecd9a4d343a0ae5d96f06242f7cd8e28834fbc87b1577b734ddbf872fdb304b9ca6a4a7bcf17bfbcf06b256bec5e7cf17007fc0128038c83f19328fc873892535e4e3f259da779eb07dd62dc36c31665a0afd6cbadd080afc318d58cb96027d26b7bab64710043e566ff27f4a5db205516220b5b841709fd5c2febaf28a49f562af055e092296154bff444e4a3df83e6e242b3644efea64c851480d8af27c716ef11a7afc2bf65e54f09325af588702303c8b43037b37543a2adfb61dd3e80510eb19d8a85bf1a0e7d479fc4af0b09ac845b0fa79c1eea5c26f51659f6deac600231aa897799c8ee58973fffb0c4d69a83e0ae6873cc496216b9fe9070fcc94ecb1a9b7e88c4124941a20ff328417092771d731d34f8ace0b930138347cc5c7c9c65be00b2b7f89de13a49182356a6e8d0522b70fb9672151543e09f1cfa17414b3444b8a488175dd005cf551b17b3e7737322a82e7a0c169065dd6bf60c615e6e5b28f2246cc7056a1e0228d125f040c53b742f8de4edf3ca6e5a61d971f9334735c65a8ecacd852165bb10b4a74ced648996b63869adb33ecacc5d21f4f4f27ed43feddec7cd9558d2413bdae139190382eb0d93cd04c7cdd99c1a3d501a9cc7091189d7cd83063516284f6ebaf0e062843b2561b7a1ffa43f620ab1f50de6d2237841fa18376351feb026f10867d9366d2d39e8f5619c2e6869a8cd99f3c97439ff64c642e9ba57acdaa95c0cb3e2510b5f10134d0f14bdbbc95f89451273bfbce471c65bd87b8825477ac2b8d07d74cfe4b23e4040c6c2dadcb99eb202f847fbfde410daf790467c6d8f03b359b486113c6603df33db6ff9d5832173cb00b555de12aad319c82540aed023156381720a4aa9eb2260d654265c4da4c6e9606042d17bff1e051125539a48dad9b9e942591845df6bdbfe0bf4998a5e89bd57273f60e4e4eaa9de25618e1f08c2a60903e28125ba5e1bc6fface9cda5bfa721f9d11795007fe3d814c0a601b3da3941f6bea266be7998e868ddb5e24bac0e0ab654b0703a04c95504bf34984208115512115bd20e72e64af83e426330f1323bca4d6036caa74eb1606132ab7c803b7506e023c39160054853c4f1d3a27956b47b77d4759288edd25ee1cfb9aaa55aa82719be6c778e06759716ff4993943015153550f6258f7cf2c54dc07ee2bab0357176a75198b3d3b11780e98d846dae2f59e093938ab27f833825516aeef816ef91b0e770477ab521708a3399b336d6ed2556669b1ea3f3ac614eb39f69ac0f6603e5ed4a3a3d2bc8034607af6cbaebe9447396feeaa1265fc3a5881995d3e1e22664e39feb3adf7de57059c8b9c1370fe1e50114cfcf8c5bd0fd0ae6b109dde0838ff2cbfff1605ed224b18f014ba88296973945c9dac8c537c579355f76e73e23f76420cad01e0db7269a6522e635479267aa0977900b49761a47de87bcac0bd2c51a72637a18111e33463c5cd1b875552f8e161d1ab192ef7352aa6e797954d1c0eccbd1d9a34791af25b95209a81b07c49ee8f41f37ceb30a7e3141c368ec90363a23e5007e4f197e8abf84cef00ecb83e44b61dead6a201ba7cc4a997833f72d03f68b40e639debf6df73050091333125cc0f79d18f23904f0d32217dc7e2304fe96f49275f387890f1b3e19fba3050b0b264f7589c024962d691c24150956a6d619dbd988b37ac949cb5568f65c48e0cd7c00e2a07fa5825dc5bc3d72fce3909ad9465649b4ae40c2e8f116ad9f4d7368cbcc5008600464de88e1f4feb851a759dae5e2d27ec1cc0b7cb60a0aabb4b8ec5b7e7af21b08a1ca246e4bdfbda658a3c4d3d2d724a069c164167429cf4f6e806755048d0558a39e4bd7218ff051bac778c6163f4224d142413b59351696e8f345abe156887d55d71c317ee37183cebb89ea2cddb9fd210048686ee7e9fa3e55c5d8df16552e40365e15f2664c25c6785ece8f9ca97cd8d5907660a5d23f3aea8bf7b65f3e61928fa4ceef64db22c50e35929115e69ff5a8a519e4fd586d86a03c5db9a5656f139c92881b7574d22a3480a14f5d87443e37fc938a87eccf2058c8eba730c08bf900a2511a8128f00071205a84c1107f70464efd2c604a12322c2fd391dbb0c9a297a9aee5f315235c3a4781454d009bcf918639b304857eb9b380126a8a7ff05028a3b145e95b417e01cd01121633a04fea1c4bed71cfcc0b87d37f55a9b25c635b75d08f41239226475d172875470a628ef262d1b500cb489425eaf4d3049d0db65717d99ef2455c72220481f73063cc73c8a2d16d39ad8b3747025eeea6283c70a9cd3d50e3513e81f19114c9dc24e2b75a4bd8240b5122414c0ec558ba5c9fdbc5cb5994af16739049cb4d70ea369e70347d37fbb5fbbf1a48c98e6cbbba53008216dbb503c1d751f40c5f84b84eef027284e96056c4ce27e5366b8ff06736f8bd09e0743ae55bf9f35372cedf8a5ab202ec1c9750699e25d1c7a240729437cbb1d75ae9bc951babd05cecdf3a445f688721a56ba50e75925e9b404490c83c8767beb898e5228646671de300f517c00a8ede67babfbb9b2ba12252428dafa425d9ef31892fc26a10d698acec95d5a8789239a2862817217430449bfe80c42595f2773cb45cc36f780c3d7eef5e84e16036e76704551d68c21f3a16394e21de731ddb8e6e0075b4aacbbc1c9c3266b3d3bba79ac45733f6d393444839bc76b4ba9d8d77a0eb83dd053f34b61eb4564be06d1635ff804465f62b6484c533cf9d1725ed6dfbdf80c35ba77c531c727bc9072917871a5efc71718992b89a7c83055c069643e15f54f4d3e57d61e492c5b73b0320f9c7194602998b290b4cc115d419bde29bb6fea0501bad8c35c9d9aca6ce403f7ae74f2acf9e208382530ac067909e35e06a9ea5d137bab5428f8df2233fa1f30e1607afefba2e5ade5dbfee7775dfcbc65e07324dcb57eebb317b04e0c790013a758810cda0190b21468fe540c071316a6adac3e9c15a19ea7efcec66977be9c3a3b508da4a02bc11690dd9329f6ac9e3e44a538ed2ffc2fbd81424abe0159a0107cf0ccdea20dc7f82bc0acc89c9f4258b44053ed37acebb45f2cdda1a3ca97ad149930c55fddc0e7f0db409aecae09c7046650b85616c92f69823f6d3b361672548fa9b4ded2d81dc45de88145791976c5c72f06d078d2a93fe8ea8c59d0cf6e914f6cb176c765e6525c87627515f03e4cc6680c1da8569fd17db828a2108a7fe4cb1a0099f990566b7962701290d8d36e5871cf9fd03a36d9b50e8e488d48aa61ba4be187c5adadf051b887b4819b15d1652bfc430f2eb44fb8c048d4d9588a732d252651ea40ba6ccd3e09c88027ad048f0759040b2d477a6820eb4fec5645684a2879c3c9d8020d5edcfa5d117e2124b14acbc2d5cf1b40817db34d25a5be069766a2ad25389b5683a50573d035b2140413a4a34086326fe7cd1814b0ca4262ce78549101fd9708a1716c67cec54d6e6b3a0444d3540aa6cf833b2340b57dbcd6f74d6aeb285f0b046a3e8943a49131f053f9febb2a27e63b67ab2485a062d060960f367017d8228c22913f6ea8b2df660082ad9c04607ec778e97b8ac728b982a3931369dfc90c31b91ac1fbceeb4fa7680b37cbe3cc3a3b5853b30b4cda2501429d71c46a41c377338ee809a49ac0fe360580211f433d7b4d948e2113ac4895c7391a80884bd30230d7b8d2ee4f9b681e07beca0e17b51661ac2829602e14acbe1ac0af8f4874d3f099d03f982ed76d5b8657703167d6c8727db8b2dd3a73dd85d55d91bba32c477c57a3e96a3ad87e06b4919da6eccfb282513217cfc3a361162bf38596468da6dd6ae830d7bffeee3ecac21cd30ffee0c8c3d9925bbe7c5d0e075ae3f4a213bbc9b74af79dc21bf2225e23a0ede8ef3e433c6e8bcd2075c7dc5bd07baf106df9d176b7634eea103f5695a0363a19f323df8c9d99abb118cfd96d6ce2b57734c2df96e0571fa5868d2a653f632ba5b92714e63a58e64d32880b8b09abdafeb1b230dc3dcbbd3fac1427995011c75969dc577193deb5051c581f567ac810bf57325afdb83813e51cc83283da006b828a5ba2080932b0cbb6970438edf45d131897ffae3b71e22fed130193021ce55690772ad8aaa89e61b977f926e264c6f22e78af2fe11e486f91e500b47195f9402bba46f74f8a2210c1955c9c1e1303e7bd2c8651f7fa403c85703bc54a431397d85149fbd872adf49c2c96cad985799505ec7a809d2ea6703eec6fc15d28f0f5ef33623faf5ae838eecf71255901030233efbedde7a8304a8fc958ea9673c0d46edbd1a3869abf9b82b8828e43b78f9dbf2a5de3de135994434c69afba6378bfefa4d16edae83152be774055a19333c9ff2ced28c3c3cb96b0ba4f15dfe19e322af9ed72a488246ea5aa6ea798b352bb8dd023efb40e7549a8c027826844ec793aaaf14afc8f3943b84e4fd2c6b6d06ed7644fdb6f5b065297492058ddd448bc2ac91490732f6afe30836e9615f205a205ca9325e2e6551e6c9172a4b6de4f2f73f6ae7ec8c2f4a736729f537a0b9293d40ac24489d2e3a231967383335c8a0ae28ceac9b5b21a150b4dab28aaf5c19f39d1617cb1aeb500fb942265d7adb40aa42ce2c6312ab4c95f90ab20ba84d3d890d831ad5c841ab6e1df26426f255c0fb59e89f418263e6e5a0afc63f832f10549332dd2330bc39f218771959e2545dd2de7efd2bd0a7ad2e203c410406ced463b77ea5bf2b0adc0b9ac46aaaf046d410833e61a49cb0fe8c81b9c19a1fe4ffc4210f7d1d12429b99c966ca45ce41dbee2b6d3a4ff13836460f11547556f7b090e7997343d3ab85889f0359aa01bb23dbf34f7f10090df831b9ca3424ac4086e830a9d6898448376d9b01f2a4a1a72287f513f34ee9c18043082bbf8e3a994f7bd49ad7f297e835c4a136fa37d62f34772067ad84ce35a2beb554deabbf9761e42ec881885b83236498359814956a17138e9c9c35228e46e720f4a75f09d874d30f47e97bf3f6e0d0e9814a2e81166d7e15838e01ac7c7c2cb2fea6f36c037c6adaa6cb05ca516a0eee630c6547faea987d19bb624b57fc25a74359ce02ab1802d4d4555786c9f07f2c3444c2721bea0bbdc2e304d75e197bc64551e314dd883fda67ab58f65c7424b0e214624c017ded63c8a86089df3db1aee4b02244d5e1cae5932e81aa8329f9fe01f113960aae0716e0b73432c19bd7a0405afe2f2df54c78d779e2ded8ce120012ceca1a3bede5e4095eea1ad9dbefdab511253f7d57cec687a04390e6e37ff8c6488ab5e4706ab245b702d2c40399f965fa813b165073ba8f674f98348d052a565f0cc07c0b073a4a2a9483ab5bd0ad872d122949d133064e619b7f417c256123af7a61f715a66db82f72491dd6b4eee326977055db94fd72a18c9ab6a4a761064b1cf50e1ad7b69d23c2ef21013e6c8475410d474822cc11b2f146f387409ce6504a9dbc34a8f6070d6b45246e3b1f49bb327426080f50f8b1c41f5b9e6cbac4bea86343e0bb4a30259723375f54fcecdd0d7750896465e397e16d9ab4a2186606eb082306eed32ac19b87f321729f97d0d7654719118e3aab7445b00904ff35b741b9462ec91172e84f4964b6cbb78afec5f609e3981709898dce11568db5e5e503ca69dbbc73c0402db3405118e4c3500e67fb6352ca2a1bd0449a7d059e320b59c496cbb89adcfca1edfdf43e896c3a6cd65a6ad81a69e5cf30046cad9964c215260045a54788642681981adb338d1931480f8916b11e5db6fb267b531ed35636ebd75287ad8b1600ec7c07f3583d86c85db01d9ac7aac06633188533e8e12dd8d5d93eb6febe4a22420552d8ff016fb1d05d34899da84dff4b041dfeaaf156795dbe306acebcf02e4c3107bd9c8f211e03e3cdbb69d9e47a92539c52b6a65dcc7d695287ba8118412f42e01ec2b804640f6a4013cd94fde09d7fc931bdf260d2149c47872157da790e9031c580d29b77cd0b8d7ecfe0df0074bacd75a60279346f75f090a871e0241c8bfa0f31aa6b874675eb524c52e4b17a53149a2991e343cf26e9e579f8daf2eea72e9a40f28ab060c94ad65ce79c9ae4e66b3943d145ec0f5b1cb59aab3872eed3703b37d4d8d34b7f5f73b7921b2f2fe5d783b0023805c963c145e80ea88e6eb4b2f0ffbb17801d33cb901c8b0a5d3ec9ebdfedf368af714610658b7ff29333aa3376c490957a74d3cf10dc7edf1ac433179a30f0bc94f5f81db5b1dc043d071e713b17d05e88be088801a88a54981fc9ac87c053b20817326298ce436c1a1055ffb65c9dac4f1b2b145814205e025a9c6b9040f5172a229d4e35ac1052b433168d286adef066248975c34917e4e076cffda6d096c8a62e72f911b5f30b46ea4f9919deb684181b95a5ae83a56fea84c67db2f893b2bdd380027706f2693894e63da1717d4c19eb9270661b4bd23242e5776daa80b31a4774dca2f153f3f49398c3289d2c0a4df672d220226414dcffb0f7e50a75320bb77251f8a37c013c2b495d01fd10e2c4e6a4f03fb988a07b99352f8f27c31ff617f603340e74a8e7055b3fca631599ee9dc8361e7a4e1e05931ff0c2542719c020b3b17aa3139662cfbe5fba713f7b8a9d2fddd8bf5fedd573ab277be96098ef9f8024758b2551b014ba5cf0e258d6dfada23c79767137c6d4908f3ecc85eff5a45148ce900964638bc851eb491bc7d4b600e8d10c07577fc11a4a80418399a9735366f82a32dda05cabe3fbf3dbec00f94b7353a3aab49a9a081c3c30c02bc939bc4b0afc241a9679af08bcf7112ea01a13c19e8af59db057bbb0974ff60b52e7c1d2c3b6171f2c195076147c9a18632239c0d6d184ab49c3e2cdafea207bce92792539d8a14fe13ce0a46cb93cd8b1da02dcdbc17efd404c7ccfb281c093708d74ebf14e5a05ccebd4e6bb4a40cfdc23f401e532555ff4f3bdac9bfb873e9cd74407ad4f7ca6b1ebb03b3923b6b6ca860d3dc7986201ecb446f85b41e0a718be20bf0034f2c5b76091ed935022fb54bb0a338cc6a080fc85f2766aeed2da8fd18da9d52422af6e68254f86bf08e799f709fb840d8c5721dc2f0137e056d6b385e35df17a71cc15b54f64ef7704d6a0199b7ce5d4587b66e3b757ef3bf2ee3d3a8ef7cb2a43bed38ea3cb3687940373318d01af5922a7077ffae1e42603345d391b753356c58db0d9ff43d5eff6e9774fabe01888c65189290a4477847291d9067dc59753e899adc90f8273a2503c734efc67859dcf67e0b32924bc22d1c952df509f3936b9aa7867ee5b2a42784cc755b3280bf7d517d1548abd4ff6c61e92f8b83f1a3e94e6d1802de5d4c1028cc7eccca43eca81e2f3a15036fe36d2cced435e052759a49c0ede7b1e57399d2f3ab16240b7e3f095841be62b14c8c0006d029b148c112824b88ce22c32e097cfb16485745577a966a672b33a95dbb54cae2a9092a79fbf59c7e633996599af0b0da48c85aa869012aba2def2eecb55c6bb3edda7ef034db2a39a5770404c1b55fc35f58291b6d96d7d4154e67604c09b1748b0bad2916bfe75fc2d823be5636e9aad53ba4435a29e28b7c3eae6d772750b20c4a06020775431a16a595c9b39212cde3f8975be03e5b7e3364c177e05276bc9162de515b220ca67b1570606efe8eef919b100e202300b8a7ff5641212501012e8cbb5d548c2de86820fb2523fbe86d905625d65168900a70c2cd588a03f091f51e02cdbf29e0851bc56a7a7b9a9aca9293d39bca81b75226410433321fc4a5c447e0b4b2c48f4c6eeb82d1fa69aada009956c56a150a4b094d3d3f610f4faa37380d1c22c973fd0587dfaa961e56c793e2a62de3f2adff4f6fbb512751ba958f2e4d74cc89aaf05f0251d66cf5ca3decb8a0296c7fd8d31b1a68eacb4708e51ff565898db4f05f87eae409bc91bf225bdc12d1d0f9409e35a759bfb8051416352b10df10060afdf90d6b3c64f09a4cc166d8de1d4928ab310a2cbb6643d207aaddf9536265aaf68949d978836081f542a085aa4fee5b14d51e9c4b082310c7756825dd34ef9519016fcf3c16b3931e0cf619b49f34cb15dba0ec80306d77ab47c444aef17343a06a3154b5c1382fec5efb01474c6b83737adcb7180b053adf3390604a863434609c7e490942bc4197bae9b3053183888af71d368367619e10c00b70d8701b9e22b45d014a45ef9ec22b03526461f796b91378a80b202ba6be313c926de33c6bb122a85c2e5d6f08b42aaa83446d77345ef975ad720767fe07d1ff5fa3a05ec2c05294f8c3852adbabde13066250504d645e8773621f3d240362e8723f1388557379162febd7f3ccd42da9da407ea1b3602814b1c9931dfc012afb98f451006701b02f4a4169f89799b6dc2ae4acb5f8bb3fa6d0d6761e33256bef04b1081d02a7d6ebc5d74b060b8fb63b965e278b3c2881e8124d965d3bd8a8c753f09ba10a312ba4a085b4b65ef64c55b120a67248202a8701d90c5aa52b64cd8df1c2259510a47e206cf05207d778fb660273539092b46815cbb01c0be8874f025a05a4de39bd72492c72bb34501c3d4fcbe8c5c727572cbb36dd6839b5f5bfe1a87d85531a3a27e933a6c2976796581298663883f732454ac9e22a201a6a8a710b9affe5b5dbabd3923429f54bf9ea5b54f9f722b8e1af77a6ac1853fdd04d4594f1c39b376c2d47cf8e4107fcbd3f098686bf2c56154a2ee7960262387302d54f82b13d7c0ba7d9e6753db1bde780aaf85f3ea274d49c5d797146b72852f6c6e58e69facf5b847b12f2f7a94e39009ae83527d9065486922e493062df9b1d87ca657244d556dfa94393e9e1cc1ad8be85774cc2bd57363bb09a168eac0a45b091e52e792a3b8c34fd27fc98a7db6971c36288e0f0587ffb0ea552bb77e0935ed804eb5adf1c19a78a290eb64cc6ba3983da63a4a14043cc8e8e3b92cb690c330dfed44356a6c70ecea5ffc726521301c6ff283f97dd9533a00d069f31562ebedd701aedaa473178a8c348480be714ffffe20a16e909677793645e51845440bf5f1d747f984499b84553c3d4853ea0f24a9783b3684f92c4823a4b1097887609283a6b5123bbb3f44768d670ecda1dad8494a08e6baef0999f6c4bdff376c6bbe6b988c959abd54fe7c04feab0f04b4e3480a35dddb5b8f0d9a53cdc2a276843f1c98c01d966077dd3def8924b488fb722287c428b61e629d4e56e5a154092f2dfb37444f35d93a0f531ada7a67a131130de4f151cb4ef46129f341e747e02985d74caf4c1475a99cc01a044521eeea2c99b71ec0fcf4519081253540783f972d166bf8270274fd7773261273a59978b37f9efb629159a3803a56cdababfbbf36838fcc428040f83e4aa58665b0156c49848e26292fe00acef9b6ce157b2a1357497a17d8d767634871f48b5192cb64a74bb5126208ce8158ee40c6dffa9ca6ec732e63210cf042aaa8dcc2f5fdedd1dc3dbadfb72e866a98b723eaec56b1a54a8b728c6a762e171c42dc96f24a8d45a39a8b5dfa5216337747c54090c7816c74613fed1fbbab97371f89855284f84b9af4e9414e308724edccd50935d0917f56193bdb002bfc8c518379a052e9793913cf6d96ed3fd8e58aa6c4143f1ad3c61066ce0b265c896c18b1149d9c3f89bc2a9a191916c848e7ce6f6735a9ebf5fb778b8e858d978a481d7c179aaaae5401aa6355a6fcd449e22be91675da9f6cb2accc59e6ce790d25592d96a1358fa0adfcacf46b290dc3081b2523cc3b0e6cf70d54ca64ba3656d346da69d1652f596924b761c711c186bacc20c537d0549c6d7bfbe3ab18de9cbe2dcae429b706a930c7e50eb60582b97a098951f3602ff5cc3f4734c965cdf376b3bf04571b70b996f390f5997f3a62618950310f8cb02af8cb7df19ef9280753e612a3a55f8158365fb117c2d4a01571851fc1cdffc14c4a6c6e5d5f1bc201c32dcac475488ca36e7b6b7bdbc6d85d8841afd06fb4eb121c461f38e16c81cc1ff4022bbc20635c8fc44b0ca818e81676ef95665af8207d444a967ebcf801672a484d8704005b0d9a9e1bb01aa086fefe2ef7d52247857598f1c3dfb9ea70a3c6d86fcd476057dd774a9345ab0a5b0af21c98716575275bba495bc5bf8fc225e5c07718de56008f14ebdfabee8b9b02ab80d8754486666eac9c12123a5ceed7eedf41a65fb75093a00d62c784414b6019ed9c76223671f838ab8218908a02138b7dcbe3a06d7d5eca1dd501a0776d7d955cbaa2c57b6ea89e4358c385b945b603dbf53564c624df168859661f87bfc41dae0c61b02b704b98317eac2dca2b804481f4ae63231d5ebd6c7c7c1a92716d592a1b11c4b153b36f924a23fcbfdd764b76e3ed1d65de390deb2beab44175048a2fb6a51c35629224d3f59f51cb70fb86055bf2e7120f35bb1da2a2a1299749c5545fe4aad82262aa82071c978e16bd3babd512705d5d8a5e705a78daf90c1ba21d78116969eb9dc364db2f84da1ba28c0b8b58060b15ad2ac4dbbbaf2e4b16cf1857818acc152b42cc960791fc86a9758c2d4387e3b204b64945fb5d967580e6a43f05aefdf63e43d5d13785e51ef8a93578201424138b4abf8cd51ddd64796d404b96ba2a46d84b782569e6975a676e75bf32919cbcbd8b2803456c89e8b237881f350b8ae1762ba0fa9140e18e4c85c3cba8a72b598a02d3330318bf613fdbb13810037d02de3d7bd3a1210df6646c0a66dd4fb22eed764177e59b8490ee339c456592c2ffff4689193bdf724516c0afe3141204f8adc6010d3d8d13f643a6e10482226a451371a94f41eaf14b34a40e74e74e8d940480758158e8a4c7bd27662316ea4a0d8a289ff021dfdba338f7f22f4f3e0d116f1000ddf46aed935a293b0ec0aa54a6cb92828df8f4c85ec83790b3620113666354f952c72d06c5272e3179b1abd3dfd36f7d0364da41d93778d75674977b3174e233c0a1fd8b51e48b58fdb3e69aeccfe1d58bd411d8d5f58c8ba6ee7284b35f7a7dd079a4fc076317ac6800b88e12525663167fb85b3178adb788109c25febe4634fe3b5046bc2dbf3e0f11cfa01ce4a0269c5808a2b9a7baaa2f259884766be788c7843e480f263e9d5384894a8e0492a7a61febf55d865a34e9222d2388e7e2daf0911ef79df8a06cd5c23d621622e499af635cbc5ccf1c5289cc6095c871abbd13df236c95d02e2aea427f6a87d38395de20cd99245d802a38f2fc0bfeebdd4da9878a519ad3573ad3a28f0f1049099ec0d20b8ddb64603beb6a4a871d283c158e1137a7a482909baaf5bdd7a1a6e46d5f9b71f779d07eefeb4bba6a384fe89cbf2c74332c43716f9ae725fd1479745e3949a8a672fdfe1cb04f948e62dbaba02c964c76dee44213aee44d19b5239e34d6dca6f715aec79b33dc9dc5c443addb7c4e24565dc1955287366f3ce8a2b81b7a727a80871fb2ae3d6da88103353c498fb43eff093a789dc9966ac3195fb1f98c3b8d3b3bc66f19f51e1bcb437c4c5cdff827ac7fef3b4d01e5cafc7a4c72b14514cb0ed0bc263c8261ede5bb22eeffc1d0950a2e70f9f6e53610e60f2d6be624ecb380c58b401550701ca70152e37d92c37c92d1cec1df8cb6f418d55a046997bb695b012544eac58a7231cbd1d214c348a558170ab9d8c6a1c91fff3c79134b63a1e9c5620b0eccb53fecdc0fece2b09432e5e8e38e8bb7b2cc9c094fcf98163025b89ee200dfc53e78c5c95a2f12788a9658994cf2a53ae5e4aa348a5ff93cb13eea18cb76b5adc1fcfc7294a8024519b66955f86a198d43eb1006a112afc5a944f2fef0cfc1376b8bd2c471d3b4814dc5463b5bfebc00865b053196dad3da59d4c4bd51205715de5aa6255bce3015b13e8837cb4f19ef5327171699e288218d9d3ec36a7182780c81bdcc35afeae86376a882591dd07486190eb304180c70360f1221d7d580836ae7b3fe84d402887c1b4c52626f36b674c37924e94ea547505f777d53932399150a338234687b42f25a3726fdd2e7a593a14c8e335d9d64a69166d92ed2a4715611bea1314c085c0092438325c605b5e6898d445c43ff4aacac6c6e11b083e2730c52e8b5e098437d27466f6eedaad20735fd145f9e91c709cf0f2f17cac51d271ceb2a0ef364ab404638848bca98934454d5fe8b0a13c78eacc858ce316bd9591bf4c01ef29e57e90a1899a5cb1bb794485e0fc99c8d60c9d4c05c41961e5edd642d9b8aba2ddfa72d6fafbfa6e44c173582550e692ddd172bb4d6884640e1029cfe0cb1aecc9693f4ef8cbefa443a05b70ee42ef21f514dc0453cf57b7750e7220394abc86f8dba0fec669ec7198f5715f93c232d6793a36614c642de73cf730ac8aed6f1106138e0aa3139d92dc03651c4d5a73950cf02cc8c5a678d71dcf69d01565d2dc3cc02a03e64e91a4e14d494b3af253fd84b09bc678bfaacdcff56b9e43839dd17a87360e84ee6471dfdb40943ca33e76873676f52faca83acefb2a884ecdc64bb2948dc20073f757837b67ce35d48cdcf5617e95ed1334e940ca359a535632d19b665391d8f280a005bd6b7c3f64e6130ebec18f0c967de29f37964b6a10cbef065edb2a7bf9eb0825c3245fe1d40a8e3d9c66fcf497bceb6f89858171d0ef2804f54d1ae4682ab260fe2b215968db3085c06beb7dc168d49cb66ab017361126f625220409c3865b3d892baf325ed8f491ab04c002ae331860778c08ba91b5409bcb2db032fc99064cfd144a2d35806c805d31a6b3da8ece8095ec8d22e5d7d851ae83c52056af767d1906316b98f17109da995779e9d324922522a5dd1aff26f76019fbde1c37ef81420c07710998248f211b48309fb40c2cf816a1375f75b292819d63b0b132966eb25318a4c4fec0e45ea9c700f012deec0f00d329f05eaef82b0de65827505b299531c42cfe2e4dc868851ff127ae02e6060025452dabc33be81077651a783c0f9d533e4c71e4086fcc0068501af99e47d84fdeffe54f23a06ea719fca090388a294aed89493f931cc294987afa7661e54fa050a747b0d19184d8fa9274265a47754634be66d5b194323d7777c233d11720de4eea4039e538f9b750893aebd7f2a6633967c1e6570ddd50ddef47517433f7fcfa2fcade58457ebb03cf426a817b6807818ade948fd860dba2d9f843dd019691a3c6efc1e83b27003f9f6c8dc2b7b46c3bc91fbf6e67fe89606362544304983adce44ceac7bc30981dcb57d88cd19507e0d5c540f3636c64f15e261d2697d031dac93b6080fb39f8f8d9a04ba4dbf208b43c2d360b1cd3e9aa8729d7281d70107c80ec19743630473ef431ee1ad53e6ddc6c93e02bc2d1cd1071d1da8562a89bc1bee9049a5d38260489463607917544458f8fa30283edf69e29d836586dbb463973416522f49295b6fa369bb059d2166a804df84f8d9b2503c82d25978f66a350cec7aeec39f31bd397131e408c332ccfc861145277f6ffbf5dea29353e92b00912cafe5e2ff2ddb859d7175c2e4e211a7949894fea7fc67ec65245ece0f872e52005c5375c46a8f010d6a253bedb6cc4e0740df03b2872bc35e637d87d7ffb645374b47ae6bb5c3a252ef822fc710019592b7207b2e2c8ed3aca47a6e0df15a64ef3e930cd270a435e5916ce34562284bfd7d09a839a92033efd15e7413b6ea8356ce77b73985b16f204c13d8cab4ac664b7e151b999124748860461b6309fdce277a4c38c60e2f782bb194ca0e1424615b024df366b05de490807990f7d05808f5808558fa9d5d464289e8d7d8756eca1ad898a31e552c6868fc1cda8aa69bb2b05011f2fe8cdc81f39525fb70416b720bd5f09139c3446c0db4e9cefe2b2b76bf7fdaf42f77cdb0b3d1f3a805a22b085c9ae76291837739e57f4368269d33070337a4ac7407b33dda7fb5ea466415ca5117f43f11645adc3a8bb6b71f412b33fdead02755d77543c6a86bba8f03d448011f22a857520dc7cc4909412ad60d935a9ec145d65447ea9b9dff1286d122a6d47a60155b5030e17b5a42567d15a86126593adaa88fd8d0124240146f11c3c6deec8f4bec0c1cf8e34ff4678b939455636bd77e29577c3b4e1931d87816e6d0bb57399afd61c32eb5367f707ed23cfce9aacb938d72f164f06f280d14149451d0b64c138296b71474f1e4d5ca50dc5cf8aa5177b8fd3b7b1b721b4406c57d6764fe103d6b83072d404b01fa48e3478699cde6340df4be209389f1bc9e96f219c6c2c74278d90fa89946e1a2b140e84e4624a908a460b8ec81dac52b1f83f8921766ea3de3128c8f603b56c05f67286993d9ff307b9f24d10f2b3cfd6a15bee76661e7d8fafd51fb38dc90d366f4646eb8d171d10484077538c30d2f4775ae35620ac6bce4fe2259a54717c010d8bf90164a388fe1ec79299ad868ddc016842b8b00a8541dde46341c3ce9c1754b792a9e4e133c80fa110f48113a281304901546548cce1a47e4a185fc0be45350e5d5310ac97c838f81b42ea881c247240ac7fc780fefc101825064e97ac51537d901df4324874df9f7478aa2f6a1d1a640d172f84a6dcacfa170dbdc33cf11f44ee4cd624848a667d77cdbc0a0a2bc171110570416c9448dbaa87454460efc557bf12ac5b81a475e1c3399e777346312d786211ffd3ae6690e6ad9a1ee89ba6d8e1fd210c7b696ac21bd663eac4bd3b03442940a4c77804c96736690b7ec39e2a1a46742b3e0d7e95d7d1ab705859645219b49d91aed5c2b6b0c49cd633dd4aed5264f3bd762502596b9978684898593e4098f513688b049d25f68f46870c5f51a9465c7902fe949718f62f5836da9643b7a539f871689fc7c1ebbadb7711a8f3f6218c5f106eb4ab7786d87fba4d8b0c38501d6ff0f8961c3b478106af3a7be4b59d05e073562a1979e437bd9f1d9265aa8f6e5fd145761867e8f2c1f2f9e3f63c9418ef41a3837f3a009000bfc8f511e0b542fdbc23a0961a3e1c5620efc7626c421034e73854a1f6d5a075ae20f748473d7b6a872ea59e8d386e3052df4e7c3667c9586d49d61411f2a9fa69748b2dce0cb428924abf6df933806bbd5d1ac5d830ab514a2dee39ba5cd2c4d0afe638cd6f18e4394147648e11864cb149a29a0f05ae417aaf24affcd3a495c0d86410004f0a5a2e74fa95102001047b0c12879083a75186f84ae7aa274b25510acf48e672f59e3edb6d4cdf696da5424b3fe04c886ccc756340da9b4c79aa719ead0b25d42d489d10c832b552868d4b09ef1c10d4ab65d4221c7a88681697ae3530149c2419d7f2407e36c3f405c8401ff67c8fd5e25704174261bbe29b50e23d273647615ce5b0d6f13ab91c8a4980f57144a3f806b6b9590dcd952c37e6b2388b16f1abd65eafda00996054f842c661728ab302ea904c150f01b79126a5286fb6357fb76985e820fb7504dd5e3e98a74fc94a02b6f3e23d20415973829c920c1c22f5292e45fbfb9d1549d44f8ba71da56b4399ae8fa7edea9024bd5f69c87acd095cd7cb714fb26b4399d8d20047f477b7c8dcadd1ff56b5b4fa1c1eff930ee4428161eed3646beaa0c272b6466da1dde4489fa4e4401de9dd337770e24acffd4c2395f290781b771d173d36b3c40320f2438b163f28b9871a1c763d50ea2a0b3195b04be0f90ebe7ac92104852f8f5f04fbe1f21082947bb35f6e89989720b5478d4f89d03790281c1fcb236be82497177fff5513ff03e06606d53aab0a0b367371243a9e06024946dddcaaaabbd058eb5b8b6b606a91568a92cd1aedd0a96d6a88175ef254f8f6f179fae22b262715411a2ebd3efb826c011322eb77bef6ec5e56b070f9c018843530f273d5a375a36a0a6d413788db5a33266be77894a64059f82285d17daf1aa9d73171cb47ed93106ae6307462ba3e4f1a145666aee4c46b891bd35c394dbd3afba00cb388c10a450d96e9b767f0e373171a4f723d5f35724e494f251f90c669aba638fb54ca43d317dd86f12a9261561c18a9e27e088d52394df50e74193f1ed1f7ab836eeb4297e3ceafae11c12b8ea0b4e44659afad5db5b2a009d97cddb5c2241100b576b9a57707d052e617c12dba2033d3cb4d192de03ad31e002f63ca336258cd52bbffce87a0719a183d98f3bb1e5b102c743d631e973ae1f30595309c21329fdcbc0a7b0748e557e22cb75f2a01689379c16e4d5f5101f61e2649e2d13511e77bd8578aba9f6f628e0bdfcd8607f6e0f8fead719e85c0fd8d94bae60654a0881ca9886790a26a6afa56af4ef0b88a9d3cbfe672bb38a3b1f91afd6f5440b4318a39cbb06b9c03de9a6ad7de7186a2b087564d3406a11fec5a84157ccf7a34492ce51fb2c498f8ed1e8a1fa69e406bc16d7da8282d16fb867272e3bb12598fe265af366fc5abf68d17e66bd746757e8686b7736e39a398a908e8f85603468a9022ba670547717e5248bb970a41d98657677b8e3033fa2abdeb2acdfe300c002b2b0e035c7ceb0c0fdf6ffd1bad9ebc48401aa967f39ed9dbc354a480b6630fdd4d6ef80c8d5e52e374132b9517b7ccb0a8b1d6586fafd5577c5e87ef726d4091730f5c6b538a0e88bd4d29b9d8640ccf0da38f6632f43a6d3bcda49464545a99f702731e9e65a7d99563572560656e6dbb38d96e2e6b549f8328cdb53ffaa27af5cfd44bee2f2db6a43459a3f6eb512252112072b6cc2c1bb6794ce8a9804a8424c393f96330b6a12ea0788fa4a1d4cb4f6d1f1462f1ebd01a0ab418b559fa96843c76d355dc3e5e2c2d155d5a2282334bf3a9571ae5ecdb64478f0dc47e3c95a30bde92026fb061cd6660f053a9a799977ca1134c7546a17544f866b2f0637f81b73ae5f7aa5b7bac616ffa2bf2c5857f57290a945393fd16f37fa706da0fad024ad2a68ccc87414a1725ca5f71a6a6f25fa811fcf4236478e2999d4d53756ccdd5c984a21567729d944ae27c9ed1d2e483db5f4f7157fdb182946b4d29a18dc372f66d1493ceb0b4c4504500004144b76df02b8362af793337141085866871efe7c4d8fd0d966182cb802d7ef9641018dcd23084fe9a789c26a15260e352d0887307e562fb83aa1298a4e79e0d514c5657445081e94c885386608d8799f4779bd3e5615c74bd2ac6ab96ddde052336d2aaca0332455f82f9807e50d03e35e7408bea2b69cbd0a6652387230797c5887972b142b7c46aeca482d6f69dfabddc9eb0e7c946f68c09cc094a6be71bf826323bce023848cb1f3c467c711e12216db85ae416444508c6b18bd6b172dc7b2355d7411698460231192eb7735509ed0c12464e9e7a6d8c258966eb85f9bb2999ce97392e7c2e808e463b4b16dd598ed4e03803bd043b864f3bad6e0ec516a7eaca43d4600446afb20bf5292a0eca13da420becc11f662169fceda02ad27a5e2179f5e213015fb4cf182a9e0e34ae303870204ab589f8b276289d53bbdebd8186a981fd36e93eb5d992e7f3118c2988c808f0b118a4a230841d5d94d3842b131599bcf849b345c79b4a34d6a5725574aec7a24a744eb317d1fb6c1a2b4453754f1b6c8a5e8b87addb4f5902276ee377ed838e5175ba528faad6a9db0a52875ec1460da82e07c2393315948eaf2b965e85624010cb971a4065be0208916b721a35e285c1691ed9d0da330428bebcf374721f74a5d5036000ee7fcaca2e133027b020e5106ab1e949e8801e66425d25e6c68299e693d6d2786b0209b6d6f0740f3e6595f741a7ae3023abb6deb35a022a101b6a6d91bef4755c7031d459fc6fb61439b37467352faf6d1d56a0606d28645e848739c05d64e3d7b1cc87ee212fa173d4f9ad2ec567d5dc0bfd6f5bc366ce218c02c5125aa770c52add59f2075cc540ca8adf44f97586775677de69b0dbeee3165a768baa8ee0f6b71245e1126bb26002f2562ae587870ddfce192157611dcdc496affa158c728b4cac2d47a8d1146b5365a63160cd02783b7f4d2010ff8d4ff052ebb5f9e20e9ea76e4baa0a9f3148f0b7e515ea474757df1e83088f2df9e9739867a19eb546768581a41b6e3ebc9d1ccff451f3b7dfdba231a755d30623d7e0bc6e6c34f0c771978183ad113a3af19885953760cf8fed6cd7c7b0be0e8f312bc3069aaf6420192b01f7da0ed15adb3752733ad01eb16fe407ed5f3f3a99855bc88b399d816495648b4ae741bf0d7de7a5b5408bf1bb7cb2add3b7cfa700a5b8cde61376a654907401c605d4d5445a11d94f1922a0ad1ea5a11cb0bc266cc1ae3719611cfbc205f510a079e80812b087761e135dc7aacdb0635718a0b58b015e1de18e238e7e44fe1dc56382b15a3152f05c1c2508d5fee6aa536c01a2b29792d9fc01574728285a8cb210999625c2d92a6f1239a40bffa00502cca5f5cb68446ebc153c7386c0880cc14ce841ac87f979a148cb9a90247bb9c997fb3e11026576ae5a248d743a3eb9590eaf593bd5194b955965ad6ed27f58a19b63995803d68e352cb8efcb59770b896b05bb077f2da50e67d762ea9ac353d0da269aec6f269bc1ed6d205ec66ccd3375e176c5e5af510a6a98a929381d7bc977c5ab4e0db1734283d5c1185002cce575659255f8574e706750eb22850f9cb7ee09995090a5b482df72936d3f006d0cb8f3074bc1f1aa0d04edaee6424a4bae35370a5b3a261c1fc522334d59b82688b25c267a9751d88a1abfcd521616d070980320b3a196e22427ed3e762a9d40387482c7b7e236b2502ad876d0e9dbd73e1bacafc782a5880b37e9a8b77e93c101c5a663d5c765d5bb4ea84878f3b0195ec73de97ab4323dd0d873d3abcb557a48feb594cc1b57541e4b588d322503e1636875f0281e919dae8fdd6af36ecf7caba8303831856faa1408958dd7698e2d615fd23376ee5704ba4013f53474fc77fc324e227c01a192191ba706d5d88d8e37df46a0ca7a0dcebb475e70ecf6cdc538f653c8e0776f198844c783616b030aa7c07cc0830d85d1b6db61e8dff4480f48ddd53b28ae56364700890f0e6d369bf8dd65f5b4b8f0211d331b60b52291c034c93fd914a3780d9f00d117812c4e437d2a893c841eacfddfb68c00ce6c137f6f30c8c0d3acecbfdb031805c3e56438bb066b03fe43e7334c326d52f6192dfae7593326fb137eb4873c2b87fec2c19f9b64e35d7406d668b3466b3e6fb12a47a7cea22e436622637125eb878c4e4a1e1a25b5c37b644153724d4199efebc9f8df9fd81e53aeeaedc826447676f1b5102928337a2751c0115570fae484843769d87331a2b879a4df635243f19fee2efc9179e9a8793def21b2d42782c1a564f9dee8b9f4094e85fea319f26f6fb0e15eec9190ba9088ca9690591e9dba122ef8164052fd3d731ff24c053097262c0302cff1524282edf3909367aaf78e6a31779a2be95073eed3cde15fb8d95019da76cd1cde23fb614cc08a5c73a8328f4f8de9f6872771d5d2da9f2f47073f71c51c57d6feff6ab0847c8c7cd04d2f8d6abd744d7f24310fb4aa8771e4e5b771a3f515501154779f8067ef8b8a5433e5d6544a1aee8b5f40d0d78753838cd70a94683b20e6ba57099dff694f36b006a2d7b12dae083f618cf9251a2a894c7e226b021b64e1683ba6bd73f9be585a5ce0c101e88a09d0422269b7ef53c907b37c12bd5d2b32faa64806b9b4fdd1b8bd4f47636d258af19363b90c0c0a53043b16f288b893904da530dc8feeedd32537e7f2ba834a8dbe1dc24ff6994180bacdb39c9478beb142c5ac58a8ca1b58736f0a6b3db01441f78273da62474190ad495bb807ebb61e008d735658b80c4f0ad90e235c22c77ec7cad20a35d8173fde6050f4673b27445d3f0144a7ac543ab8c238ae42e272216f90f6eb8c01052a8557e847f4ff8a8b35cfe98b2f4bc64ea3935f78f3645bf906c8e51bc6a25084aebb019e3271696e5c1752009257fd9410b2d6f85c3a519a18382040beb720bd81d2b0c9a23ebf5e2ebadb8a7ca2be042d444c56b22cad845070e80dedff0540cdf6feec2ef61ba98855aae2dd48c78a7f2a147551849663532950db1a435184888cb489dd2af5eb7de2dc8f45c5b26d72fe230ee4baeecd2d3dcb1e51dd5629c8f45bc9fb5cfd33730429f0f3a6bc1a588caaad32aea3fc0f567fbdd48150104c35557760cffe07168dc59c67f5d9b83490d1abc43ba8789bb0373e3f0f46f62534d035dcd4e5d5be27e3b1d229b1c6a1fe8221257d6ddac0fb718cf010623f5089e4296405c5bb95f8c68a7ee3b897361f1db72be0f60da00cb7eae20f6425f2137ea75b32bd557535537fa323181fefad6a5039a0c7d8204b9bb4ea202b03f0bd3b581862257e3487e5219ff8490d7d565444b73ebf53fccb1724b1841e3bb7d32e4a61a205eaf1d6c7555fa811e6280fc864ed93aada6131fc24172c57f01ec0d681ff75d8cb2e223fe96f021fc424551b16908ae1f343b282180a2c26a519a51b0988a996f61a35240aba6150e9eed81b96fae43f587751271728ea242b8975297d384ff84654a89ec81a9c008dd38d51b2bd15a85191e399713b43313467df170ec76c2295de7eac5b245b69a3d23fdbb04e94f06914ec7ebffa5e00cad9eada4f6baef1b286bc465d39c9feaf78427645a9f8d4a22707a8f10a3e64802082c597a3b6e5bec5fe20a554575a8415aeda6e8842820eac52f94a4d52599536e5f27e5e1361901fd56863445d645f9f8638412718da8a56c63c56893e01e73f48de419fd25fb189fe95105899aec4ce80462d14ee2d2823ffe6f3d1ba4289a0798f47ee61f87f2e8b5f2ce4f9951d61bf9b345185563522f56ce98aa71407f0a9940ed8638c66f0de816c75222180c97b600d27f798f671ec243714021550bc12622ada1a16926e3b922032d93ac098e63d636d9da4a15dd4dea51bdb4324eddcba8ae7e5086816556ded20f3a5174da2dbf09d66f9c9fc6260929a5b3a7f14a8db867a03a62320cef08b4823401fd9219821b36b51b0bcaee658553517d71191de6ef66ef76299071af9baacb5c50dd288cfce2e76645b2a56764ea34d74779915e51ecf2e6105bf0b6c130f5186f1de535d5d7265aa406f85b04a8f3fdcef7bd29acb2a7c06265b5f9a8e80b9d28dcaee980468d330dd694a6b24b41af027412938e81ff67963e40526373c0782de008f29ad7f6399db313b23e6b34be6291645ea39ad5070fa17c55fd7bd366118627327de7a97ff21f54825469f1cbafe46d8527f35ba567ffae5042bd8f7794138e99ffe57dd95510acac52f61316c0e793ca36c8264ee87937a2ff2593efdb8d9c8d73daf1a0effd8da9cb44f6fc1bf907379fc6aad22292465a79cc087e8cb6b14833417d932284b99f574630176b794f219430ec48eebe3b6025112c6529d1813bd17399e8f4df9b0311cb53cfe40de1f240c91a5970206598e16216365ac6c90403afad60ba0ab5a1d4be8278cefb9a242afe63fa2045a7e3c55ff2c158b51d5394a6980f4bd0f707b68235615dec6d840ba5f3be6d3dd1e53ef45a9a2eef47e30ad14154864e28e9170f5178b32718e1b215fe753fd74c0b740d6c7703b5007408b0864dfebcd1198f0f43347c27dcc26434327d8f136e7209a4b1d5d17da56cb231b0b899c00ab066ae63d5b7678ad6368c9fc3d92250b8ccf9211f173d767cc6d46a5e75cde2b4a778141be52e9ce09b6854f087ed1d809af1617336a9d71d9df218777c1a93636420d4138420bb2dba78b74617f84ad30fbc2209a9c9d30189e6f885e54c48c2a782709f37d4ea32c86c5c7a44071aa486dd1971e33b78805f402e7af7a98c1ec3c1d61476237cad05248c54b91954b10639c80c22c53fdfde1f4e5060a2ea019b06f564b19a8332c255d0781b9b7c0a154e74938d3122ff13ce07ac25e4c5434be2129ee3cb006eb497f204c558926ab40ec099f958a586e177a86f714d662b071216ad437f224da2ce9c25f5d1ced1a8dde888571672e8b4fd4075fe523ca03968166684ee47b8a4289f7a730aac892afb696a36a9030fc0f91fbb8c4df8703c2d7644770574fb3fb061e1422bccd967d93c1e1b897073c924763a80052980f660e1d3d57b74fdf54c54fda2cebac1374d97abd75306d004709b69cbf3021946216453828161819ce5659f53aa97135385ae89b8ae6fa8c35afc005bd4d8a2a18c05f7111b2ade1acced939f202ab89956057efe87fd1005b324fb64ea82f58fde7285a96262d19b15aff8c48a247cf06d2cffbc46472972fd5a148ddff857e14a73b3ea9f4ba1d0d35caa8ae8d39f7c7242404e0081cb0fcf23b4fc527d93e4d7021ab41e147113407a8d6bc7c16dda557e18197a985b1bfe34ab9c83e35a37a2f6bd9fb8acebe113386cb79b3d8d7e12c899201755643062646057a244292f18800074f4077eed0ae7cd4e0af0953773d9e4ba035f70e09d9033d428d52aca4d9571a8be4114a68d14fa31cdd04a824f50295a5cc78f493d7e36278ae7e238a380331043353afa043b302ab7c790479fe68ddf14500752f076c4054b4f86333762580eab84c986e1ff81fb0ad655ac0ee7ad14122a2c0c97ec8b8e1285e23818b067905c631c1968b410beecc253f5917c9d0860dfbac3670912ad8e8d562cddb70b991c977f52b2b1455c4f67c49d447006c3df55f9f71f07e141da7b1a714b623a961d117c2978af912a5a25343425e0d0dc72760236f2ea8f38900b4e7c80e3f1379d3caf08041c0f836dc5882b1106ca0e1be128c28a719da54f441872aba302a1bf05be8392efa4bd1e9e9ad0df7ff1ceafbaf5598e330b444ad4ffafe335a59c5763f1557d6967ef236ef9dd0d0ae08e47913a058de9899240cb90222bb096efb41fa998383428779b232ff904d21fed43d5d0ed5bb354be680c191c7b760f3e56ad097b129421c061056ea079cd3ce195ec0b1bde9dd1da0908cfb24115fca068450ae5c9373109a5903aaf6b5af813b857809151e8dfb09f778daccdb29098bcc7fccc6dc4adcb1bc7236e7fc72b16e7def4803a9a9ab5d38f2cde7a54376167873dbd620c2a37d736082cd93c43236c1299ed6e1294316b4461703183afcca27dba77aeb8e6bc21fcd052b0d72ed88b802168289e47393d8d7ed2646367d7292e41ab66333a3560847ad5e055ee93c1d863d3dcc9970ea377f31674d3fe07dd95467a8a7b3d585e5bc2dce6b144707bd37a03ed341d4406d9bb96b723dbbcb4d2512dc80fee5b5b7e6c3b63ca4b298273b1808df8f21a4977f4dd46f2856377573bd4734a5d0f2fb7c7ece0633e2b752826f1aeafc98ae861497dbb56a9e2b49b92402af3a163749db352e79ad330d2f5f8747ee35c60f656b64d8aa1c2a5f6a31100a1bbb7c9a1f2e005b6b4c594d2ba51779e2347f59d94740f5a54fe2dbc20f1e3d741430b258b21fdfcd09515764e1b3600ad6098d4682f322b81acb94f644091d61a68d84fac0c6e5316d067302fd5bd8e820a5b609347a6b72392afe4a34a4f02afc319d6478df2eb5334940820c3234bb4fc98ec5fcf2db3a58e31fbe48dfe7588aa1c0d82b6f3756feb01c0e7a34c903aa1d86a009d86d936afe5a7ed59f5d7fd4898a51d59c32ff81a8ee8e7dfc0c849f7e35d8bbe7af803b50398b6751a4cfe1b74d7f04dc8abbff764c0b15ee1fb1fad3977905f402b414f751a1100158644088d43a52593890624489e000d69b163dbcbfea42527aab40ac64cbb4782305e4e95f0423d9ff460664ade236dfed00bc8ec5ac9fdd64fe28dae3fbb0c0b4664f88748a5f1e72bc501e49dbbc39901f32aacbaedf55bfeb0e27b540ff6eeff38e9c5cd63e6baa3413a1780314abb0ffe8f680da8fb49ffd12d1f447562d582a9741947cf45b687b2564b9fc4f1f7055385af2fae1a25db8712cc95f642733b17fd43806dfd8461b26fc737f0df3087bd358e960940a229a48d3ed177bc33814d28a185a2fd6cd395b2236ab63aed6ec3e66885fd0e1c26371dd9545d0520c1848ed0a85eceb1c2834b8ecbb1b4f111f2a89293c5f31c7344d80332cae7ab8c413a156bd2e6efa8eca01efd7250a6bac6625ba8b009059444fccce6951d551b1e3954fedadd3c0ec186a308bf002bf1ef799635bb8f9855215d8f7013ec990c58202b2e8fbb45f01b61f38b6bf32887eadfc39d490c19d252f1c16a55e863d2a52d44dea624e131c8a3050a55a37dbf0463f5a695303c34b12b1385b3ceab714bac4a2efbfcd4bd2eccfcef737bba2a0acdbcadc8c497be3513b8ee5142799d7faba68d1a9f3211d7fbd0d7c87728cc09a376741dc1029e152ba21833c2db526a975b94c143e8539b23fec1ae70b9c10bdd14e7024767c4e5fa9143414e6459a9a816a2789f13651d8e86251a53b40c1930e87962ed7c81032929f5518899566984cd18e3a666756f59bbdde2201cf2833380b53956a2cbc2925adc8c347262cd7e31b10aee928bf6f11648204b2c8aec6c8abe8aa877016481d564d2c688dc007ea4583eaae49b9b199f1c9587913279b9744984dd7e45d16549510f0ad7d4c9480bb9b268a78db714c3648d3d6ae6b1e9bce98989b379e24c7678d67f356026c22d6fda219ba43056adfc6f4176840570d55ed1d7f419509ccaac2c78fe7d51c70f04516fc8baceee51a5416e6e1d5bc6a056400c4a906307ea407f2df667e3db193987c35273ca1b7f8f3cb535e85c800510fe13195ab6d169837127f4212ac4238cd451cf0e78acb7e78497aba42ec891f664cfafe7853830f7ad4140d7c8501af55e0dd17996d47fb04c2f6f3487efefe9a018268682ae3bf6ef115190ac0965899a8f530a993867d40a38a841832eeb2a8d9792fc12d68fb8e1c69f2b2da7f50acc97c0f27ac4b7b6c5a3207211b617898220986512a51749b66488655631487cc7d3532c5a54a873064c314088b74670af91247ef419eb778fcac8663d73c9b357393d904231e341aefb43b0b73ce9e278582565815bc06407d36f0a602c2bab27cc90d53338f7081e880189de4b9c772fb7333173f87723ac08c181f90b78d28a0c82a10260877333ab561362912e4c5e579bc146f68adf414d866b7068eb720affdf582ce0588c458134a56803532b012fbc6231841a91e71827a33a47ca2e1fc53f25bce9a06e54620912330ac99b83c506ff04fd3c8fc265641b3b8142fc22c1869c932cb03e27a225775bb6cf059b9b6d2ef0ae400d97a3a5c424ff7e1d84755cb2996d3d909194ac9f4fd0418ecf8d5b63f3146352d920dbd1c059071032ff3b93bbbfe6bef30971c581da62d6ced02c57515ce310e08ea9324a13d1fe51136c1c9dc0c7c529717e47c933a999b355e78dc44436eb16a86ed74e61487bf2608e2e817aa8ca1c842a6d4d40d518ab69d9ce072f48dd9c50bd9602ead32b69f4e4390d53898c38f4ebfe5926003e3421a24f06825b240d0a09a97e78d0642409d0275f55b2dd2aa777bb372cbc4973d8ca24b06e529d8ce091e76b6346e23607b68ceed511fc367782732f99d41195d6f58b33451c90df4c21f35d5f621157a8d95a3f37fb88cc4ee3c29720d87b49dd849756e38c0cb248aa34a80143f5747df0267213f9384384f33e39eff360410229ecb56e351316497caca18e0ab12b9c66989dac85b4d5191c7ff1a274abd59d8cbc611447e8f087094376aa8a0bd3be4dda5035b936cbaa9707f88d8aa9c8a8c4f7c49b03511edb2835882d3d6c9cabad5839757d645ed6ecc913db91dde03211b3673016b651f91211b09c69f061cc0f5e17edb1fba81563ec841caa077c5d166456e739a5d590db628d8d30e5f75d80930a6b97595a62837449e21569147a9a44552b1698c266445d68147bfa64c3d8337d0a0da25dbf1ab05ccc830c47895c053031525677a33f4259e3c47287540586710061044cc5d1f67942a9206bb514d0623c76aa788918527afb81ea9c55cda45ce1a9df11c951d2d990b6f22db8182d83425f1e20c76305bee6c4f82b7aa9ef118d4b05ec9ad205c88469153dc88aae46a7cb3dbc6f77ad5210c225eca263b8950fb9972f857b1a3d16c8916494048ff30e7eeac3ee9abd97bb912a4c49e3d255ea1596c367f9869d339c7c382b3f7635a097a38ad9d8b008b513964b43c9bcef59a9ba9e7882afbedc143d4ca1da0b55980be27b86685e52737af3b2fa252697a0bb6aa466f025c67da59d9c5bc6a54615f70deb1cb14db24fae8a5df4935a15e1feffb08909b3fbede261d2673a46a593e1ffa6e011803d64d993ec4e49b105d50b65864b5cb1abfd653584feeb4dd63078864b77ce5aacddcb1a4114a5711cca78a9b71d6588430cd7e3931a9798072c81b499994f4acf1f828d85b87716e791b627b21865c4e21143989bed6495a29028f22da067aca98f8f8b053b45ac51eb40dbb3f9c9f090e38e2d647ad28ad275996efe5ef72d83c94b9f6ac143652cd1540f08909500b9f8b57c0f993d42729b93ad81f38e13a421d13c3e8c5eec141bc4e5c82ec9642e124972df828443f1177c4b8bdb6ae657ec080c2d6fc93fdf6af2d1e88c7fcc6c25bd0b7068919cb03e5cb33a2b0d578e4fea648ee4688461d240cd6698b7ee1a24ca53a6b9f78ba3bcdca05bedf89f059f5c545d7a59bdaecbd32b1cd3448c445bf481f5e2ec75b45075396cf76619c2a9e81c4da5206e7d3396b0e0146e82b27aa2d7ce48e428241b9d3a9eb28e6dba7a22b1191f859aecf58cf466e568b0a9d323401344b7876310a04c04c19192c95c8943989303be0d1c4ead676f9520d14562a08f685b6b14749006d6dcb219f5d254dd03d75c730db2a2a4b73b44b494d7b822dd97eee440a69580ba06bb6bf1335df21ac7d55251c0884b7557ffaef54d260511b08718214b261aab490ec394e8bb5ad82b1337506af696c500a3980924009ad681ba56f1101e4ae78ca05cc38237ffdc8b4359910d5d8ce66aacad950e2988bebb7b7e017cefaaa144260220d05fed43b800a7558df532f1233402e026bf439db06df5655a5ec1fb677dcb1db29eb3567a4e8363a81f35393aea09ee0c51b1dcfdff5de723ed4f53164aa3b92755e51a9fb22844e5e25bd96b7b90c4a7f45d0025b265e55a66dc08353006db089975322962e81458722206ecd0d7573142123348fbd9634a65b3a213e5c829b0d9434430a6c6e9eed44e0b5121ee5959801a5fc7f44594059ca3ee96166654a0d42c8539eb5fcb1f3e989a39d6aa32453a340abe2504764bc8aaedd604f16fdcf02e51b87f266dcc485030141b75eb83e0a9a78a4710803c5e5c52c65f63a93dfb73bc8b4091f2ae4ba8d0660e61d949c0eea83e3f89a6cc89edc4d071403f01615645826bdf8f160df7aaf4ee8f9cb51676111f2c0dd1c5368819bdb300935bd214fd78869cf5371f23e8268363263c9e382af94b6136de905678a995877c9521041294ff7f57d667b68938f21117abbd49ac497835c512d9eb269f3bcaeba978cf6f8a78ecc6960963a75aacdd7ab4253e0b69c465c457165d4fa703aa9f33c1d15cd27be84739ae6572bdd66ae5ee7850acd2294e40248fc09186ca1030ffdda8eacdcd0d5c612a1feeb5746d34dae47eea1bf23473f846f9b798e7c7ed838fd7d009b93fb31d87931aa6bf9855efe9a5c23622835656c3db05881a5208377101c066d33ed0d57428df3d75cd3ef4847ba0d0b68b43567f05e70de83d6b136783f00825811a4ddc5c3a6ca96043e57199fbe29f51e4f68f31faa4e05d9d81d4859b7508d00d17fbadd6fe7ff7c4b312cbc3c9acabf6ec751d0e38b321908fd445a5633dd14a89181765ec331fb10e012389edfd15a2f8692ef42d5419b5e53b6809c450e970af2f9abdebc5b860910684706813b7e4005df3a99596bc6ae00573f7d75789c8df91ee1bc9a3849d4e294248965071c01865a0b11ae158efaa1e25e3bf9e76ab5384cff2f87db13252b66b0d7eab3ca3fd35212eb6b2f73a2c699b0d4774ed775b0febebfcb9b1b84715a7e965a4c226499998486fa30e57695fb7ab7486603ed61468eea5f90c9c3aff6abecb18d05170ede8cde2488d9cd31988ea1717d3f8610b8f3320c57a178480799e6ed8ad40e31421f10dc019cb8bf9507f4583fe8dfbcf389d37850846965d47806ed23332fb7437e8f57e6704813b7e243f2198e8bc4fbd04c83dc838e59577f616321423b6f967283d264984fe08a8b112c21f029a9ba0d63b5281b9c5f595257de9df5323b1ab9c85b7e6844b56df4a09735483ee2e4eb11e0776f546a35ebedbb389b11c9ac81f44f8a72ae369a5be35e10737fb28d8cd87a0c96cd92d1fe01bc496668c1b2486b308e5e721d4f46c696633728bba772e988842db3001a5ef9f10f0807b384807ba418e0e9f7ea41d04c7f95d8b8647339de1c774089a612bfd9ab52501bd839ec1d1ddf84bdd536b89497175378e7efa33f6d1c99f55d3e201772162bb6c97b832b0b20190f7d79cdf1a0e48dfb0fd804926f32bd167beacca4956f45a2271e78a87afbb0507c9bc789bd2db6668cf1c102bcd1cd95d789c2e0af652a903de893cfc9b3a339398bf224e16a5cf63353beb44371a8c73b9c0519bfa342f4d07021c18e4c656bcdba3dc5cb10f8fa6c49d5f64a9aca6dc4d88f001ae260d48e27d7d013804fc006d09d0c43db99c7fbecbb1af11a3d7154310d5b1d41316f87e83ec1f69b1308c5b78d694d19f8277fa69ecc07eeaedfa67c797ee03a289ee4d16b7ce60bb91d4a2b545f765d30a2dacea9221e71fef15c8eba11705d1e81254ed7fbb797c818b8f5ba64d9210c1a02ad63d4b2fb10d07767987cf2c43df3e813439e8192a37aa6266fa9bfae5bfa2a69dc47671dc1b9086f733e28163317be92bfcfedff42ecc44c0e8ea77da2a5ea5c0702c7b496d64c05dfcb59814b06d536087bfa4483ad6885453faa70f9b775d483add132a77ff1d95f86056a1573428c8a1746e70b1d18a22c92263b88a02769c8ecc299f980f5e3ebd4286c2710d9b60f665f687b1925668c89725af0316fa0b507a6c8432b41aa42ccb15229bc3bbb2dd7f54a1ff3ba10df60f9c2c74e57bf093b3d0eee2aa653360437c03c5df653ee0b21a1832e589471af1907bf6b34f2ef0ad4596fdee3fd02395935522e84074fc8f752fb94efda6a2ef30c29aa57e87bee6aa274a180e5227e198e2fffb603885fea9884142545bf84b5fd50af73cae02c9d6ebdb652f4aa1be5df2cfb720f006e25eb8702c626517ab665ebfb4dbc76ec76764b74b087d8c01b9c2b7c50e79ff16a124b51807a494887d1bb1cdb192124f4c375ecbaf603f30562050e33da0dcf61dcc5d3da3c6e4d260aafca954690e97e2a555b609ca4600e4b25cf7925a610d6eadb6d7446b0f4a907087d35aa5107bf0a822b040dacf782fd1f06fa06261a330c9e0f5adafdeb1134853209b0110e88f5b25f09bd17c6da1c71b30f55546b6504315f678b01abb429d093073041e43620df07d6a62a5bf56146d073dd61488874b222fe80ad03dff03d15e7f955616bb48ce11055f27d72176da14f81e249a31d4d740a3906aef91444f9f8a4f5ca2c1c4e5a2933f3d7a776313162b36b0a520233b1d972fb0c7eea05e366474ea0c0ef7577cd177ec965c339a90210d81a68a22487b80a4912fd38837c37197eff4c2378fb9c3eb1a210bd62aa225d59fd16459cf2b8a5ea92b446783f6c9703a46f1dc4827407d895f8124a980dc4a444e243f8875a7639b10c1b6e54494f176562e7872d3c018b807b6c0f00f3cca26f62966405fd554114de1ed6ad2feb0d7821eb82ac2e40cd8237b63ec98dc5d420761e2c6824916fa8530b17b931db6aea9e49bae2db0e7f4d2bf306e9b0be98bdf547d231379ef1ec34ef474bb5bcd39888e0786d86744da8b3c563b9c431448ab62cf9e0ec0138c10b8ec88de869f1945ffd5de10ba2975596ee22ec600d5e10806d00b548dda6f85ac8be17e122f5341f1ff218f50619f2e22e0ef5c0a77a862988d09a0fb4de193335d8e7f2f9565f70ae03f253d7d2a0e05135cc149584a7d8f9121c9a0a96b288b60e59cccdebd5308b43eeea9c9469873b440a1ecb640136150a874bcfe969a19a0174f8405770858352d74cbae0b79e981c71d8038a74f9443ee5ce6fc812fdeda1cbb7c96fe02a716dde5d46cb81c8c86fd5aa8e2ed2ba15e66d2948c9b298251c483f223f8634af571f0cf2193979752b91b1e7e4214501d044b66287678f463e84e10346da6b92941427d5d49dc430299606ffb3e19562b6e062db674f9a91723d6088519c6f1df6cfa8feb09912eb13d3669281b809acf3a14fb6cfbb5864d7a48668903fe288bab2a8c016bf11fe132f7ce2e61330bb64191ff51846c8040355a1b96a2c257b6d7e8c238625716f401668ad20a54d003732d367d01eee0d7dac6e0f68c76220ba2183417aca317f2d2dbb6038a930c0d423ca781e687b4cce264910cc41d354521f7c86f41109cf39fffa9d1d815fc17924fa8846dc30baca02973b2882480e06e0320b71073e926e4d07e0e3834e2222dc94307139344c4c325dfca04263befb27f9d7d5d7d4dc2301af30fe70ba055c3a1e8a1ef84ae08efd8a2ffa3729f5b85f61436655e93f1557768ebbcf4f510789e6996f3ab15abb52f9d42c378164dc689153e85f417f5eae04ad02d4b8ff1b0779466d90e5e1d44def15210f52c1d02f5016617a2b616dd2d06a281a85635c7752ff21aed464da3cdbed6f08ba0f92a552164926a0842031078bf79c8f08513440770715f427a99d3e83b7a01de8e5f5e4ca75188e5d4f57753ce7eb43912b28d170643fac137dc8328dea94cc3351d238499cb81b29107f607ba53d2dc725c72957f794172ca601754e2ce5fb29e2c78ede4d42d18f5b00024fcb58d83bf2d89be4df59792bab2c26bca9fd19351dd8dd92abc54cb421fac82f9c3613b83fef317a087dafcf118b0d815af9dd85adec075da3281c20703f5b46d395c41a95536033b85d8730b56afd6c95ff1f4952398f3dcb152325273c428275fe5e7adf9f15cbb7e69ceda0376088798662f469ae29a708d654a26f483264dc6647f34326b5c472cb41b251f7fa454df5ce94b9bb1d956193f07e608a05a223bfe6111657b24ae593d9f11ec82d2fd04af8419fc0edda3e5a807f5e8652615bea3b60eed42dffb63f317ee9a68f161040f46a784bd5df9ddc8ce5209ca810129fff2bae7718b9d3af505a475fba0d80149af582e36ec6fd9635d13941ab5754edff6f068f49dbcef5d480d06e49fc7bbca114c6fdfc532776f18b477ebfaa373904273999e5888f6962886e0e35a995a22b254cc4eb46667796e43f5c3f16d3eebcfaf2db99a445e8bb1eb157f7bc3721f07d08094b2890c3113946218eacb8c92cac849fd0cd065b49db964c37081f2583a58d791a36ad280b671d085762128da1704959c0435c5548cf73e2798d373ba88189aa6c56d054a75b034d3bfc5d50d625b4b8396c311c27eb1bbea8a5071506caf87dc69779c871a66ca1d29adac0d67c98c2c40f56ebe72f11480bf9e1ff8c3d3c5bc5e787ab822d2d7f4f4b08d855a58d99c592119466f05d1811aa2f6de192fe758edab4b2631c5b6c686286e42357ce3a12688126baf529b0e86c1a95546ddc75a03ba075c9bc26c3e88c769f800b0dd02b5e46901c088dd03a31557e1fbcbe6ae615163a35c438ec52b33c6d7c6ebeeb167f279ca1aa9d7cf9fc55cdcadb01f1f2ef5cec875d734bacd64cdcd300aaeb518e8d6f3c135902e7ddbf7ccad4b9ca019b3b5c262d0a2370740464f89c509f1e4f62fc9d7fb5b6dd6bade2a40c4dea190417ea6bca0ad22f54b2fcc7c87c5adbff0d8b06735184a418dcc95bdbe3ec9f5f2ee115e503a0af938bad5be1094e5edeab1b38fe499b838eda36490f5d40ddee37aa3bcd03afd3bfaa4cf61844bd493a153c1ddb3f4fc54c88cf32acf132e366d741005b1746eee85b5fd07fa5a715b2b6b7783b7e23e80c3a0974373e596b048cd5ebf83b96afd16b4193989b7688d21cfbbaeaef087776bb594ae9d26610f300b7dd163fb6bc6d12e62a52b902f9a6de4de47e98fe12492dcdcd164211bc7dd9afae29068c00a2aca8b706b78202062f0711ed42413957cc2f04882ba84a3b812e54fa4d191fb1cf329600ef4875bfadbc091beaaf695ec6283ded7e7e0ab42888cbe5320165280d7578e0c7882840dbaa82e39f9b64e4a194f2ce063549a2190ca5f117203aedfb0a0ccb544ad721f0385d21f1c4896229cef7762671e1dc5fbd6fc422cd03a27f41caaf405eb0af202f45cc9e6e04e8ee1801ec575014a2230741a966541c21639815f632f170d9767cf02d7949ffe05459f5ad3c9db76c36ca4e402f8a0d6ec1e9b65d346a4ee3c22a33b70dc0959af4e47828771c505bf3b955eb25bfb1a926d5640df9a5b5a7cfaac1ae88d0a91cf28691beef828cbf3cf570013d1cbfb519fe46dbf47b813a6cda54df95a11781eaf9989726b998caad08230449fd705edc4abd015f6b86cc2764953ca5bc280e27143ea2bafadd5da9d2d53702fd0e5986ba7fdd75bb988aa2be1962681a1df14db71f0c8b205f1bb3b6dc8f1329d30c6c200807a6bf47cf80018d8858c486120568bff27ea002d13b82f9eb454b79a7ef9ec22b2f182a8318826dc24203c02fd04f296b5a126cba8575aa3409682427e7c3d0af7c4d92e244fb5464e62745e9cf62d967699f0a905348472002911a71d342bf9623013c3ec6970bde7872233298e3e4a91adace0cf87923f3084ec25a5adde958ec6b6d2a534322054a9e0853afe8911e6cbf49afac7fd770681bc438f0225fe3091f53482b4884bbda29968dec03fee099cf361606d23bad0522ce7a32c7feb25a9323e589acd63ab6f1ec5d6283f98f801893bc0f2bcba33b2658bcbf536b0e68e37141c91e80bdf2a3bd389f278494b45ad21ef00af66c24859c6517049bc85d9f4cb63d5b88c0f636b20b6754e9861d9d13e7e457217927f7d490dfd5cbce9278d7903cd93e5a0b0f75b5df1a2e9e9a76b3e0706e2212350f1830b83f8cd233ba91dd4edcba02f291378721f50a3ad9877882422297ef151facf8e831f2ec89af0fefe0b63b330051ceb40160237caef712cc12bbefe15916c8b9d7707f1633cccc22b102562262a50df4edb77f54c2826493adf7a9da22f95f47625c6988a2e4adeb222806d899bf5201da68b9834df61f7c3761c88e01f66b01c2787d6061bfc4236002934b0790e1c8fb3fbc7dd5a6aaa256f5fc347303b75d32ad7a286e558b1a5053cd74a25f8fcc3f7e888108a9776fa2754bc92c1ac0f38e4dcbee9aa26a89c00517ecd843e4a6cb55dfe990c178f5911f61024f7918f888edc29f3dd74c6d378cafb4e4a131d110a960560853b7204aba385639b31a85127704d855d98d65765723183417427916c22e37b7cf34f42ae1e8d91ec10d4c89d8a3e725764355d5ab0c0384b3d3ca0b29fc6d14f0f15ee28f10444289a84d38e42e5a68baf419eb80922213d962c690a256ddff2c6447ed495ab65bc47a340a5862d3c3f5cf730aa6e64f3af2e886296e9df6b1fe7fbbd1539f273786be1d2c550ddf79a9217244796eba3727b3bbb01503f9505ad7aab279c644332e9867be543de8264a760b9cde00ee6f13976b40f4cc8c8fde3fbfd88e59d54e7ab1f7a3b4b2cb091db9ca4c8e3f5538ea1c896437a1e6365201d1d9aecf3f3debf5df681bdd3a5343852f5ab2f96b398a849fb4d8a26ae4ce9464584720d8323294a2865459f6e42e5143ed5f9890417828156386aeadf6d9945e5543df13255ad5b5db05f906b10fd6fd5ccc56238ebbc0195d2c8dfa00219b05842b876b45591495dfc77b02190c82942cec7d73991339e842c3506ec09b9e5be0a98be20205644e800a5e46e3bc0295f9be08cddf7ab040dafb00e5412af508f1c3bf021c8166cad2bbbccd83a7c32eef2da504f91a26ee52552f943769f191d4406dbf075a2e2cf80cddb84f57fc909d0fee1bb3651bd1b6130277f52e477efd7effea070cc02552385d2592b337ba2592d41fa428528fbe9a14c288679f20b5e66bd26fb6cedb53d5ac58c3d58dfb1386e7bb725e461ff391da7b15a3c5e2ef5a05d4560b22effeccb44a8737b16d3570fdc2ac121ad1c9ee80747561003ab43fcefc1ea2cff24264f4dfa3c98cec90183097f22a7f7aba27d54b98ec9ea63e1c0daf138e53b79fe27fc414fa97e9869eb0f7fa931292e00653ae690481ff9bdd979e1afd1a02f38384d4b0752c41bd05f6fca0b7380d0e392019b322d88c1e8d5c8b0bc19a332ef1c5236c42406bf3166ea4486557b278540e5f513bf54701574db00c9648f25c17a00acb4264eae74d1a6d0196b4e47e34b11c17311127db3e279b67fd504ae151bf6ce12e154b678ffd940aaa8d3d45361cea9dc8dd13a690b2a110502a3bdc871f6a3978063b45505b060b4f5ef413db4546401b8d427a553b1303a013760edc1267c40a03c3d44eee4fff025c0171866e2adbbbd4ebe4ea13ea321073f63364c52121f3b5515e8ffd8d9e45642f2f973dcaac7dd1105fd8bbb039b3829ff85197693c1bcf4d4c31058172aaac7e9098b6f08d0bffc629396de219edacf97ec68df3b58508d7cef0abd362b9d210441152b9f3219aea43b7d2990f330ba475c8daee07f859f9500a0fce59934e17c15a3af280e239ba390ef8e92da14e41ddc58813a0d2e146a27cb400a34981fb90e8a4c13a1f15337d25e2cb2000d3fa8246f933a6432998fdc112eb6d7e5f9ee12bdbe630fc1e0d446d1137119bc87f8f99bac901b2ebe586471ada899e672d593a43c348563f5011b37b2a20ac6c974f8e40a6b8b271a04642d235f9107342e99015787550f1ab43a6a3be7160cd4afa53cd5f2c1cc01a2ab0ae6a3214618061b230b3c6891813dfe87e5b5705e80e9b7149e5a732efcea2db1f9f13b480fbcc106cc258a356ac0c6c4b6d326f0909b4a24d14a32a8abee2549e32e42ce2e69db35fdf9c02781a17e45802549ff2043593fa05e1d0527b5bb85ed8a52567947d5c6d63ce4770149301763216c1a8209031dc17d07e9c87d4aef9a8496061ace7343b0374316be595a16a1a3e627c02061018a558345a9d6134d43645bc410ab8d3fb59c03f2be1749a902b2c1612de2eded68b8fcfb27b6124ffa023fb2190e7b153335f938e32bbcdb7d71d40c7c637e0f3aaaa1dc69ec39617a676bae6c209b002a16770097bbe556f370d3f27ba065cc13058edccf7ce9963e5372d553a2711e13a51a7259f937ae05e4375d4c932ea15a162b8203f373168d19e037c076914316df21e134e29d055423b5cdab9a9a39ee904c3ae029cbd2e8e2766dd49e33dc9f0c33f8028dceabb82690c09bec6104d8df85b305739dc48061b195c08f8106a4c83d361f835ee1cc5004a13ee0c6a22ea0d9538933bf5f929303b5c52c200f8cd9f9e6c0b2792ac7a0352c5120a3ba71b5e91c089eb1e5aedff60d7f3b230167db947d11c84ffce7100f96794c2bf4060b2cb2f3a68cc6e46b0980084b3029b8e535c4bce5cdc09352a788b6faccb470c0a424d9087e74e9150289b900767812058bd8145b677ebdf43e2192a7558ac816c9d90bfced98779b13da6ab4fcebd5a4ed917a53e5df9a209469bbf96d0a7a3820b49046c5483cdea6fc157734f39c192ef5ffaaed5c9e0280cc607c091f92f3076c2675dae4d98630198db0e75f62eccbe2f07af1e2f7a070c25a797adee42362595001851ef97bf5950011808f0feda8fe41a843b7daa1944f0308e99e1114e0338aa96b7322bf6959833a3caa2c56775fcc45b61426816e76d2b6a821db70ae8486b98f405052206cda06af70410fd10c124701e58354cd00fa7af0f2bb140395d7ea2a68a4709a200de242f58e68244ff5f127ddbb80ba57b8787521c2c6f01103824416fa03da1867c51ab8e50178881fbf23b3c795747ac0fa99914494923d51abd9c97c47a671adbd930404c7a61cd5aa801c8291e54879366cad81720fda603d8ece8a3d944cf105aec6c1cbfe1294249f57350352e6d5b479297c53955f36c20b899cfdf61b53346fa965b80a8b90a443ff3d50286caf01de5136d4bcde85ea77b74eeb9ae04a79be2db65d3e75d2ee25ae70219ef4d46c17bc32c75069e8659a5dbc314a3946c63e4bcce2d873daac38ea9e70c02fcda0393ee6a334e4c6c6863a2f7b9af6e9a1d5c344f831874a7a37989916064cc171305b2510a826a0d1a0cf56ae12fc328f974f8ce3264c99a24c42edf1d83a1fac48fe0ba93bd635360f6430a32bf23e863ee1b78a5e6ef792948acc8107bf6b6f8ed59e375671c94761dacaefa0e104511d43f839171abded294c40d0658631d752a325ab7f94003bccceaf7f2ce3e120fad1c223d4a9903fe0d37750fe1fe7442f8daa273d15a42aa45730cd088187dbbac47ffda3ae6b249497ce756b34aeb72a3279e5819f35b7e9b2076dfd6887d0f511c503d9f2d3bf95fd0cb2bdbc4fcde98ae12cbd7b7f8e4dd6348bb38211ca16c2d817d664117576ae80047f9ca037d5b585018f3afc189279b337ef9eba653dfad75372dac6562d397bd57f98f98f5960413b0c1372649b4e3af2c5e46a5f82518b35a7a80c7726810071b07eaae78aad0d83b821c2369900b93b3a2d1ab7cf203efd2335b4f401314192384f0c59fceeb6b8b266158863424a8802c41aa232c4f08e35f4640b07edf322c3b76f3a903cc3e862878c228a7232c3fd42fc7bf2ddc7326407c23193a3a1803b70616942b26f3af4b4b51a3b76e910abfd9e5f400e67351c2aeb11c377d143821db3b216939006e5f2c60b0a16d61dbfb1632ec6187061b1dc3ba721c8b4e63aa333c208a9751b61368f2063bcf175e85bf63c571061b14da78c45070f8fe68ef1b7844cf0e2945178f61d6ef001cf5f8b97f8997a3023099429b2ef2720311ffe5d7f092598cf7b29eb5da1af6cb54df4922fe6ffe845eca973b5259843e6e9a5448d096201d39abe965517a64419df6c924d776da1429b8c9e498bfdfc8072ecc1e6373c9b6e67518fb9c2a970721949ab7080d1c68978a65b6db44dd6030f3063b875efcc4876aadc5d67f6b24715192e728c8bac9eba45f82cef0856313e0ae91eeb231a23b5e3ed9ee34f3e4190a4ba35687787fc16c3f7bed7ea06c5cd82d7febc019a6ec5cf942b7a936023d3fb32c20dcc926fcd9ec5b55da759e589ba4b078ba850a7d3863863d96f69ed2c411c10724d72d603fa64202b8fb58631449855510bcc66e7b194524f12dc4342ad28d2fa9aa70ec7d9f1824b9b51f3886ca2695548c0c3ddeb6b9ace13ccceb9e747fb029fd30cfb8a77b65edf5e05d34dae8e00526d355c1f0e8dfd0287f2719e3b3e820da0973c3b4ae5b07ec413b0b9bee352550c9bd8c22932cf22adc473b1e25195e154d565b5eb248be30a8675af86adeaabb073c5a15b4a5f24015b5dab208849bc8f837cd309f510808d10955ae1b900cd08e9cbd2f840d2bb377729f335d7f51e602c7738aa8d6ba266772d745bf8495913d86622ba50e2add42719b014865383979f5890a1a7e9e2374113b464436da043bad1d7a8b363038ea09ef31ca8037880d72b3c1ed9a7e36e67381bdccb4928d1a5e3aec2dc423721d0e275851e40e6475373f2d701dbd946a4f210bf7b1673d1ca9cb83490b602932517a556a20b790a62db6536c0ce31c1d0a09714ff6547cecc9ef2c0983c3ff3e5c9aca9ffabd714d6208c921c635a7e52acacddc3e77ace439a96625ec7f118b8061cf3048dc749b1f54da1b7af38a1a45e52f720ce71d69a8a61a50a9c496a817c39eeb6d55bdfffc5238ff5a2368010ac1048dfb867c43586ce93f17403b58bcfaa37c377a0dc1b92c03552a43813561bd41030cd08d380c1d1324380204edab8288182eccef59db09b9d65e3783451c867738ffec0802f9022ea513d876f8b1c829da8b2669b107321dad06c571820fb05bf6bedf5131be40bd668a8338882972ab2c46a82815d1e635a68d221ed54e16c81208d2488cd1745d300acea21953e58549a57066980c7e3bb1ce784e511a6e193c50a7da0ce510010a526bd0e949c71b157949fa51d682b7aab74e9d935b0a10459f91c84c2ae2197a879d112bfc4f233a905ec240e4e28ac927dfd16210118b53a22477bfca36adee482e26f8e5c9e159d0307e4f8b77390f7d074d8a5fba2848454a2ec068cae9407aa79b04cf9a4143ebd0072b2ea3354c7a9f666616e13ab7d646ed2340db39023623a48ef3ad3bf05c9a4823ed26d1431127385a59c785779f9d05de213c35c266bbe355233b0487d3ff9c8c426e6b761ec3ece7555869505369bcb59e17a4a3780061794084e29508381a759c6d6c5bb3f1e5726cbb3ccfb973482136ffc966c12e65f66ca3a437424c9007144844feff28e9976a310279d2e69fdfd48f125bb47c19573a561cb451be96685df9d2306508c40a213514b07109ca4bc6ddcd355a17e7e6e480eaf9895d7e93ca2d3fcda30d7f21499cc1621f81f50ca3b423b719a1f8fdb9b482c3985c553219f6302c2b916ee341beab470c89fb537f77d0f738b0f98a5e6ef6a276d8154419543e42c7f8be9b538e70beeeb72160167b46ed324b8c5660cd9fcaa8d5ffc07f0a2d5cc7de663c4688017ed7991897451d3466748381ec9c8222710cf4d5cd83abbde15853d71a2baf1b3b57c08f6b028bfe2cb2e8c5cc089fe42246fc6f818e4e8c894d250b352de9fa219a0bffa372c0a97876acf490e052464adbbd19d3abb08af41ba0e8762b3fc445550a367c4167cd74a5eaf2f10793d7521b025ea7b288ca04143926c268aa60dbc43a8a01640899b495f887167c92e2f0a006a92264107e55114187df347d257bea67149bb370f73d6785ad3cf87fe624c012f870910dfda044de354357eab8dfebc19af6a8abee6a4acd192b955624490ca96807b66a7a7cb623ff816aa12480a708e691748aac9dccc1b27773caafca340221f1a80a6f49785c70075b76da318ca5439b61bb7c267d67e599f1d18ee4db6e292ea792d247cde4f63b4372d8d1839ef43696966d7358a58f9d19d9cbc75574df7645f89d1241f02e41635b7ba1088c7f4249e95981e0bb8b6f58c3b65c0446546c873c2469c7396a4718389bd84a758199bc3264b31f3e3a1b6e0a2e5b07f55c9d18fbffe91296064049bd09dd557cc57df739a1f3da51c96605807d0003ef17a026cfe5fbfa2085936f910c80253958930d0df667b2124118f73f7a6a262f6372856d469100c20bdc055293349b691155b1e0b7a6bd43ad05043c70b3e08c89ad1cdcdccfec077b9c27c0061f4bc3cd0783a5bfe2b5ebfa0638e699e2a4085a13d75c6d3ebe8e466769dba98223935d0b9e1c63646f03a109b1ecfac8cf910cb067e25599a252ab342a3a8d90f0f872b33b5bbf9dc006ef72c23b0c30c4bfa860b395444cb5597a1f6b2ebbc2c138cbb0cfccfd9ee3beaf3054c48f87d0b43ef06cd029bce2ad389d41dbcddd794492422c232d23e2d7c808829ccc06322b861e3f524634476bce620dc3ca257074ac913bc0b6acf7101177a04d75226680a0dacb76bc448da7da1b6d3aebdd7b8c752101fd9d672e71c22b79f6bb25a2fe642829ffe4a471560646413fea8dad10f9e2575e09b9fdfd59431e8588da45dc77266bb7eeabf9e68672017b817ee32c2f137631adc542b151ded8c822f9b7c669d94e442c05052d078c6b0697e7f01503cc3ed9416dfdc6d881a1ef97a77a32db6de128378d6e27afaa2d438d2dcb072eb633b249cea9c947175c8d69421e4d68b8d9919cbc0591107e40e2953a6595d6e381ab37fd757a08c8e531ff50796e345d23913f0d210ef36f38119553abe329f24c6ec93101c5faee36f38b60863e5d055a6d1c76a496c39348bacaf1e7463ba3aa9d781e08cf025bae42ed0898332a39b51fc99f5d3661ac1d806b35a90500b557c3a570c5bfa4f0623735be9afd01ec4a5137fac2a55e0d113629b5caa59afe3449ed60f3b5df3e722e2ee048acfa1fce63846b94df7148383ea3460ad1f00fc0622f517bdc7281235c830530bef3d22d292c984d6a7c073e13efc3c7d93cd3decad0dfc22b1a1728522259292291e6508ee00341badc7450a5b7485c814a60324e9fb4395ed1912ccc2b6eb1626ab3fa05549eeb0c22f32ebd439571aab1480c8327e72ff8807449b5715be9ceff961f20cae844b535f43efd674d36fd43761e87884efdf23cc252064d7350d5991a70c45e476ab847d14aa1d7b5e2965c97959355f4dedc8e807f7fbb826e8b74943e37dd1407a1fc5e01eecf750e1c39a43ae04103ac81b28bd4527b8fecf93965f95d11046edd379c34b207224bb765d61393bfbcc75b40027896d8caf35525a3f5cd9caa8a9a09bd66c101260b0b6ff36e050b22a1bf718ba668ca6a6ccf4048e363a24ae20cabaa01a35df66f13363bd60903611e5e051f63192285c243a8372a655d33984192d7454b0d5126b92ba4559adc72bf1f066857d036bf07470a97e525947be2840a1d5125d551dc852b1bf0822e54197a8f937ef6bc53bbb1d9adfa5a30a4374e85c073cdd84deab9a8cb225f5f0804b2595196f704d6def67758a69e096e0599851d32c1c43e12f14474b232cc4debedd74c040f78afff9875db91f65b1cec8c3e690a47d2149d356f78f6500e11c0c4690f8f5a3931903b8e1bc04283a464cf90632d8253ab018d26559534fdbdd2e9b48d30c9c36f56565eedffec62425dc6901f6107f6794b85034c80b1206ee61929c5d1e040351cd78b1a2b0cf9d78432b79e7318bf95b6823f2e338c248803595fb5d1d17af0de316b6ddb8cdb95aa135c881cc4a5386200e24e08bdf7b5ec4608d706c4d5fc9b21a27d2b4d30405216ab3c454a6154677e9877bdc7c6f87ae8b79f30bb88ca70a4e06d213d84d09bcd7ee835c0aefe93b6cad496d0249cc4751afa617a35d94556ec3a4d0b712e8647d32055e130217343aa16846c8c366eede92b8cd368e7387f65567cd2b0770b634ff868a078cbdff3a51c6a31f97dca72d08280bfc40185d63abb36c4980425007e3b4e5e26b541f3a7528043cceb1c069cf123454b996043d89bf0dfdf2d15035ca410c6c5fa9910395c21cb3bf6e3fd167b458f838d8699b1de5ce66b8587ec4bfe320dfe68271b48e9c1e63094567e0dd38f4f0597150782cc9510f3a5437f4636091522c0b212711b1b34de61d1f79cdc4eba86d3e666b3973dd6afe2690c060663d387a88aa284963fe19d2e1626024dc24f27648b4aec45fe18d4940feb35533e9f33b68d23f5977e45cf52ffb034255b03deb46f414bfad963f19c24976a8f57431b32a54bc3bb982ee6e0f461b0074451394d70ccc0816830a7f4d43516434b53d609ea0c50aa4dd1cd714f2224be61f7abcd16b41739e0916036a3f6b879619eb2bfae7ca4d3c4a29c84db9ed7fe45f2712af36608bccf922e3ce9b2ae65494546e906b4a409c5ac4e76c4abe889125a13e1b1429d399b07fb333b7bae1d5b356b17874bb39f384c7e6ac69b8592db4b2b66bbe72f839610087af05e5d0d4e3b1786c40ff27f23b14afe6c0f90484ac84d8fec51a0bd569d2e73afdd0fea525bf7fc3f840671827a9b5c6a44797440c5bcca2ae1485003985e6f5b69cfac2f42ffd77ce17890dba8bf889cea25e06ada59e55b8a9c684e26110124b9ce434dd7a439ee0109a3ca92b80b3cadd80e6949fc672241f5272dac77caf42d73152fddcc8430e6bab9851991659390991aa996e9cd0f124f7656f9d230e6db325d539bb0140e66b38f957ac675247e07691064d11d1af51303cb2fbee99139a11a555ffccccca316cb6575d8ca6f2d31e08f2db0cce3ccf77779d1ae0b94e4d4cf45eb8f74a6fcd7e654668aba0b2dec48f3e50cce5d0a55727291533f58babcf746ab44f1fdb4f04e47d280d8e5338217c66f7001cf78abe4e7e8ddf89b7e05c707c677fc2781f002ce2da6f2510191b1493db59f3009f00526201475bce846774ba881c92fdfb4012f8e9c0b8d9b52f1fb09e75e236eb1342056aaf0215d4b5a5726b462cca82f42c92ded034e190235f4116aba554b7b4a0fc70363aa0ced38516817c8db77b67f1374b65927a77f5e917ff4c07dac9c7d0436e65adadf6bde52621e2de0d9bef7a397454699fa924926b5e889de787afbf51d4fe401028f2b19011b51a5131dcd146f450033a926d1c6a6d55c058f58b83193d2e13b522d276be14e56076cff2ede2728049fc0b5603a442fb57e1c5b4ad908b0f368fe15d86a5b0f46a07d76de10bfa8f9dbf87e273de0b524673c7e5a71087e70341cbd0a6c46028452a893da483cff85854c0415fd9b7396b742dceb97cac0c97a7dc3c835ee26323236c63098bbe1a6260919968ea4019b77beaecbc43adfcc047a6d856122146b58a1dfbe2ab33d46fcaa026008af32045564570179c46e0d311d4cae71af9cf4eb4dbd9a2f6f62527e162c52fb116fb9f9166d2173957f824231bcc408ea1da2f4e88ace9863059bdb44fe9bddacbe0db85198a4196b40d0f65fdf486715bcd8ae487d7798508112b5757c0c6de784a8ca002b741de014a0e5c5582e5e026eb9ab7f1f799c6a7fb912fb714bb8c8e8e8804cd4edfb6f0b7f964a41d801c266a374789c565237240f3482e7180d3ef6858d72bc6bbf35858edf963596514a125940dc137812a856d70e9863d49b38f92b1edbb3feb38b083103f2cc3f1bf801ee7a0e42a2c3a45217716ea3a83b87b1bef29e5f1facd19dea2bedfc131ddf033e896a53f56b49f861da2b32a47525059f214a04915e89ce39987d11f148c7a25c709513d1c44cef8304b9b67deef25e67be87d5dd2d1fca3395b917932890cc04e0b13dc98ab3d7d869ff85a69dee97abb854d84af775234e39acd3403e9fb7f7c3865f735e4b8243374f5dcbf0fe63ca5a03661670000d13c9ff7d584031fa47f1890b32b2694e630bd386be3de5d9d46ac6ac17a95459cebc24615f251ceaed443f0063a4a793726a9ed3ca2a3e344fad4a89566b6e7cf255c25bc824638e5a8541d6af0a8de2dc43d1f69c9019b2761b00521b4a9ef12bf2997acc0ef6c22d9ae468d9728c3dc23046b256212cf8dce0f4df6895e5469b88c21f384ea425834da8eb45179125dca5fbd9fda38b7c9f89efc013bc4af3ea7b7b6b9002053cc32a841ca4197cffa26f30d7b5f5e690883a1b4d14d19044602f5535c04ea83baf7ee23dd3ef8ba20029847b8026088754ee388918cb294b2ffc3dd9885f2330628296538daca8a4997748313a1ad2c329c40cdead218fac15179d23b44938643d19e43184f3481f379f63fb1478684d5e4b5f67b3c7d7c6bdae7aad893384c7fe83e1a36b384f38ed9298f8664a832d5825b6d12d50f1ae88695c4ae351e03dd9ea7174b990793fb6695da44121cf5bf15f2a6773c3f25aefe933e23e123fd1c03c21912e3074e5cef16f04d4a9d4c212e97f76a2d80904b361d7e43f38941786afba2e1ecc3911b864b7959b95f1b171b7380cac78166bebbd8a306950e1ad8f7f6322ef93b4458f91ec03a7568dbeb14281195955be595423e43734163da78f113c0c3839368be3063df6f3e67e2ed08f50b6b937fa3d318ecc659f0e03816f2e39443f83559a0dd4ced0e76de8e0aaf41b188d74215894c66790413bd269991f59c21ea24575a22e7ac95a7fb8f4d6b0801303a8afb0720d177c662c1844c646e77ff3824166c6b9ca330e3ee51b50ca4af7f68dabd743afda401d309d62699f78d660c60a451301b65cef78a21fa5c0491158e086835623a4ca0d4864fe8b4ea9e0f01b72998d377786860d345e98997457b76b01592c85e0302b40680c61b9d8e1a81dc7dbc220a2cefd45a8798c7e94e904e696ba8c6b7bf9c5296c610184c36dc052e68f91533403dfcd50277ded0e7d31dac7550f34aac3eb6237ab0f463ffcf7e846bfd7dd7c68dadbff4938cb5ec4ccd046cd632160c48e5320446193df78fb900b46e774d6183062ec8810eb3ad8d0ac1b438ba73bb92a5de0f4feab82ba92d60903550f4c529bf2c7cb77ac458db32aeff2539244895a2b1228ded1ca7f91b17bb233c2d28990251855f7c94abc9a2d4d9f9adf3595b30bf7b8eb6867a9c47a0680eeb8a8bbf48cf9e86ae80f583b9a40f1a231061676531679432f05e8b26912a358afb6638802ce88b83ff9eab8c59c997758d77e0065a1536afd4239fdefb9e531ffe891b19ec524572c808ab8e4dc150a376d6f5321447ca9e512954739a09aaff789b12e75d885b1e0870f4410e5a531510c41d71f40ce0dff53779cc1d1fd6a3c480bf19c122063134cc8c0a5da4064d18353ab2d4e956478f13b66d4414d51752d97ac4ec0fd1137739bfa3511375ee693365257471e5423afa613138e314abd939dccb856858c9e8dae0d382a11d917a72b083f33799bec3977e27778892e8b370c99f2480da452b8748de9c433e85f2165631d320677ca038787977783a39f62530ef6e9fa1fe1712ac402a241c7fdf85252668b5b9703b1c8fdf60c903519588f5bcdff8883161503f524596d4a9d54804907db50f4bf225bab4ebac774a3d9354b02ebb9251f799b96cee1f5134afc183f29e722d1eff81284df1747400266552152b3019df1bcc2241187ac764c6c44d901538584ef269f5c4bcd43dd818465a34b4389172f2f4b69b1884651921a38831171df645f920770ac52c222d10a046af1212ccbf9ac8516139da9a7464f73151900e10d92b2801e3fb375d5340b3b10e5806d1a93fa670776c6860efc0d5f884663da11a429279160196b580e035fb8edc157d297ba6c72f616eaf1bbfdcf2602026f86ae558cf6556288a70781f829a19df1610468176bbc5b939eeca9b47613de7c2ef499bc86887db7db0219d65d46c65816d130f0e81a600fee66b0d5bf16bc3fe71bc2e5e5f77977360ab62017f187e73db5d8b0919325b99fc50d8de6677060948a06522cb467e78df8fdfb2cf647e8817328b0af82cc6c7f06583e0c5c0e3feebd0cf687dece5cc7c829d33b5b42375c1c138f4d4d3cb437685f84e151151a18f7eeb8db555a98f32371337f869f872929f842e86e608c4f0fb3b54245f36e96b0f2d30e0bb6dee7c6eaa45e2da68280199b6aabf7034c9bb1cdc486444334ee5f397b8eae10d04348ddd50ed5d517f915114714bc12780ad6c94d55500c850b00c0561be5d10c7274e2b4a52748f9ec1e52a8eb3ff8f9eaa0879c6c6fc924c1568c6733ec757a973a78a7c4405b6c087c43145303c8a055df3b7ddf687d152135b69f22f0c07638ea36ace94a5de550615a244be54425a0424d22160957b94ab543221c0f406fa1edf036193e88f7b5762363d0308545f9dbcd590d4be71ef5f4b1e74b4ae9bacdd780e8ecba7ceeb75bde65598f44d2b754815a2b1d2660165e04ed367399caec883b086f22e74af04af657acf111d4005013224029b73f15bdd3f241596e1985424e1dce966d61406740cc0e4a5f4a02d778b8db30586208794df4b902a2d7b6c0e435c0fb253aa22c02f0d94f32a6a1eec1d0aa6f591581537ad00cbcc299163e336bc10552133ffacca879c68df081e0775f86578ab16101599674835d565ba0b34a283d0b108f30fb33ae7e9787811cc82583212bc45e56ed27e17074771686bbbc87de9af0442545d3f2f9b87438e41f0fd2600e71d9660c60ab14308b365cfd39b383fe33daa7eb85d2138664544b7927d53d05f0a8d2570b9d163744442ca7e6079c468aed4d398ff4ae3ced15071bc7366e643a312599eedd4688bdb4131354a64e8499ebc54f9c64d0c635b58578b79052f77cf61a0421c8eb6c1288eef6f8b9cefa37bd2872cecab26c3149b4f8c96a21e4b02972917ccb6a46697f13c25218e0376f64a1595add1d47070caf0707750c56c7bf45b7c792abb4c827fca910dc1f8aaebac90441853e2185fa9f3a85910498283590c16fccf0c951f0a83d101e56911dc42f742be084e1f77a8f6eeb114c2f66c2be7d29b3c441545c42bc5bd7befca7a4b592756375c66cf83dcc7d3372564ffaddf8de60542815ec5d475b07a060475009fe8260c96a0ad58f19b1aa11f63f8bc051991759abb85a5d834b5ea09a630d0418270148705ed6168c7b436bf86b4eaa5dd3a62d1aa8b3f7baa8c8f19771960dfe56dec2746d8ee2d4e0452fd3eae67e9d57c71701b8e05ddeb47994a2f274d682429d39990259c274351d07efd6b09faad3e28b0ef1fefec1902458b10dda468d8b16b307e662460e85230bcba70aa50874df9d94fcf8963f26e5bd2c006197f3ae09145983daae3489030bce9a0f37e6745d4872f670da9cb77aec1c7bb2a8be5a855b75fefe20a1f2da10ba50acc12ae49a1e2ae853aedb6f957db3845c17763dfe142b0a5d8a42272214016ed2dee5fcaa5dc1c50b2cea2e9f054993bbdc1bc293921eb21c9d0ab6370a8495ac188b3e3635ea511cbd8f02f4d152570dec2a9342345dd42e00273beb0ca174774700f53b26f1ae4275dafaf574f673bc4ee0d613129d78c124af498334bc607e076482b57043f755811a753433a76450ed08bb6c0b62ee759758d8ec3802be0b59810f8ea8c950b8e8247ee65b8169b0d371b6b8038a72b391b462e54d39f4fe47ba87e4523e70a216ed508027f0278938f304dca36140b6929de57e3f1f631b9de914e1db5e0c3bb5e7201bdd474cec687c4e69f6e56d37cc8d55642f462a8ab3710dba89be9e06d3fadc70e4928248ea6e3d3f67918667afd8968a4fbd61be9ed08aca8d8ab185e07cd00004d56ce7674fb3651f6e7a85f88808a1200c6994b9a641bf9813304676e6f3bc8663720daff1776fe98ba0a607f31d140b232f55ebc4fbc8ce395b1f5facf201ce2597741102cb64f4fb6c818ec0d0b8413b410ac492e8b18d0300205faaa0595cca0c75fe7f34952095160365ef333c53f221c668eb61655ed0baa1734558508f1cb3fb4aa16ec34e2ac2e6a71322130725ae8b8258a70e997c01c29f9cde4368fc4f1995c30d200d949ac300f7ddb7207499906a48212ebac33edef5f06bed8947d4cda620b8040ee89319511559e33e3e535a7052859646879666e7ebfb43716043b5b2c654dff7759571dfff750d14f3d0bc20ea24f05bfb578d61531ad458973018c23722fdd98df898f566c72d200cc49050f4ee5fdd9584178e5ec9a5f38b77e2cbb911bbfb6bd1f89b0a21663e633da66f9af637289803e61295d2a5cd4dd2ddb73b80b13dd45540b1ff698126ef98a8081c42c19cb9b2b80f55105370211bdb840515b624d62da2936fc1bd4bc85469dfebf874d401feabe6c753eedbb65c6f85f05968c4d0ae04ccc069f51dc866d11855e427d56e32a7d56d8f99d2f06637e89bb9962af358687524e83e0c32d5c33785f8eab1d0ab2d94cb589e1a0edba9c7ebb3f52591df44f29b81f04fa02f9916be87841fa3acf304e0de08b4d05909fe7a753d6cd32113f74c42333ef390ebd8d5041b9a397d52a9e6b1fd4b12a5721c2d306b83dbda06f8dec40b6cec6ca82ac44705bc22be7fca41521ed4abd2233ee4dd08c9d51bd1b984b2d13d692a069c4807af749dd476130391ddefc08bad1057a38b44f0fd80a7f8e10c24ef342cafc7d8d01b88f88c2ece202e487eee453a227071c789cb04fff2cb061aaece6fb99c0e0bb45523bf400aeced4b884f72cd9d9c254db063721021f2d2246dd842a009e2584f2ab74ccb49a0fce69fd2cea6738ccab0b76e5a3ebb76f3005a209deb60e0cb3f34c4d33c4d678f42ee3354a5ec45f3b3d9ee7106e421671c5698aaacec50ed622c4718c8fd57c8a39aff1d949862c64c87a3c57208354c0281655550cf04fbb95e2fcbe00d0a649287df5093a079f67b755efc4d310a6950a8ac72556d275a736fabfd7533d42b3b6f7113a42f3b27dcaca87aa819ffd66a0aadffd4b7bced602d18ac1007fca7809036095225bdb42d9b1de3dd3f4a51613699786f1b8b83c22159d7a3cc3aa74dee162dc1a9d888056fd10d41d5a318306a8c7396cb63d45b88ab20009654e8344fcb632b9f18f2cf7d4ba0e15d29085fe4298420ec1158860463637d51bed543a5cc567c58cffeb0176084dc6cdd6e48d36969c6ac9b28eacd98deceedb6ebbb10827c3fdd6bb771f482d3571d91fb5dabf5d022621ef306f1ccdbd0b2b6c608560b7551ca8b1969bf9fd676d2e2287316c21e304470abff2efc5816c5d8a4ace78a05c91fc4edf1fe3f7759ca78223bd73abb75edc66d4e5d0060a1e8324c0399273ddcac8172001f880d631a2ee01801c66c162d5c979fc4ac9b26f8f954cc5757e4fb916cacf7b9ac5de92db1195943714d1abe466c80eda69a3dddbbbaf94883ba9aa0a522d4694b5a576601a92ba97d945e87ef0ffcbbe9dd4e0352d18e34431d3fe9b54a7c4b216fbbc5e17d61ee68a4d20d16de5204d01a5197a97960c9448ffb5990a1881dcb6c5fcbff935621a0d4cad86f773eb301a42ac7b17131cc7b8b6dc3aaf59d6b44d986c480a944374849657135bbe3a8ed35d949cdb42611cd173790c1d491edc01af611454e17b4642b931e0187d19a3e86bb83ecd4146f9633645fc6fdae76ebd2c205845f016f216bfda2673a11d3beac98f08b2b131ea872ed856e830156a91517dd74b3255c4db18625dfe6fa29da415697bca62374f6812c4b192a05801f9abb09063e282163c7f11c093b01aa483d8f15d6ea256fc21cd4da8ff2d285f8afa67780f85632ff7b543c7bbc7fb3874e8ee5a20cd64260ef78c975d88e88a4f21e348cbd4997ba0ce24d3968403ab44425e928cefa4e6a6b301126f0d9d3abc24068386533d3dc055d20f08afaf4b468b87c90b0d3de6f696a737ff4b8ef9fe7c84f6e3e5684a8f2599610a4585092eed03f3b4b5ab5c0749a494856b0f653c42baf20a765b1fb92484bcc241ac32be4ae625096e8ba7c782920e97543bfeea22b8bf9b52f57886f4be67cae6010e40ffde5eb8c1071cb47c09c81b8a6e177f59ef52cd0332e39717ee77f149a34606cc343d8b04f668bb767a8d5bd11b8114c840cc37225cdbc741060c701374aaaa7563c3e4317e5ed4e7bc94feef05f83c67371348b0d55dcec0d759e37703cd84de3999b6fda636d68d9250fd4c156071c00d800e40ae87458d3bfacac8f6a2c8562cc4e7465d11ddbcdab022787316794b273f39d61a0ebba634f7a5a4c39f20625b585a352a8485182b95adb14c23e799422d8c051e1d4abfea320e2b5f5f56b3fe54ac2598d32285346a463890634c9a65b069b388cebf2a1a4e5048142eb52a2635d01ff619caf35f41a24a47a4bd96fc8d9bc48803dca905d82a27ff743b266e5e47c7049669f1a2be7ce0cfeb97e106a33813c13da786217ae4bc6a6075c78aca14b60ca46b17db2f9e9950847dddf012879033be1958d0494bbbeb9e91a89ffb50a948aa7e266c2a68008ec8b3660f8a0a722b8651ab148c728859df5d3fbe654f1eb91bc2795083c1351846e21335aecb06965d0e4518ef22c06016ac5cb91c33662747ce128bb00fe30ff4e9c93060ea3660e6c56ea37c647cea5866d84443c4449fa4da1f6404486ee74eaabc0c1046532e96c7d5fd7b0c6e97e37ec0ffa2db962c28377f205ef47c35dd09864459190624a12e2f678a3e4c9cbc767c7288e661efe6937852df9a483bace2df24981be1c50240321a704874d37b4c4d9c8df991de8f3b6d9794cdfaa202c0f05d6ccab3f2a6a42de91fc180c636ccfb77605b6230573c1dc7e3a4beb13f83f603915576ba90b87625faaba326f2feaa33deed2b2ff727bcd6b99cfca969e248e4e90cd55039c96562d8fbef0d75179ae0e9d86bb3c58c865ccfa6e162c774dcf92d52e5727778e9ac2107fcd3638ffc4c74b2576e558bb9c7a066897381e586fdf476460b68225d666d6e1080b6bd6e9beac89a231c45a4d9254c593c1f59fe79012d05dec11b6d5c4ae87fd05276a68ffa85e04cf41c2ab7bf4fc3d8ab310b38d1c2f724836ecaaf278be538cc0b5e0a1f543ba180aebbb414a1485df6b3b542b4eed0401328f7b660f5b29f1622cd7511c5c8dc8355635d46221d49408ddd8f6a6525d52058cfb89ea06d989fd90dabd5e6d5f43d82712ffaf0e38c9bd5c02c70b47690de5a760fd0596ff8922431b686e8dccaa56f2fcf0a0e08a9b60b5dcabebd71119c83b4296eff50e98e11f7d4fbe244772c75d20c31658b17efd18e149a9b3664f2e2f0a1afd0b84ce11d426a4b376e078e4562aea4caa3addc3a82f986f4d4f4bfacc2f6a4dfa0a46c82a671466065acd79f6067d6b535f02f12089ae0d1e6b788cead65c45f77f32ede1427a2e3f0941ebc8b807b2d3f31291222795913e5095deb646836cfba2f079f6e1aef3cda612c37c33c1d18846d84cf7e219bc0b5e272a49875786e23393c8fe7873fb9e2c998e379ceb942c9736dc909afa92bf3efd1665c998eb88cc7fb1e3fceae1d5e7cffb6d935f4275c931bc259ec3e7c261db22d1d3f7ae835abc51d9c01611fb4077323fbc4795592f8c79c990a02cf340c42a5f8bcccdc2dac0c871d2556c2c339bdc633bf7e526d1e42cd897e18cbd43b1e5004e09fe67ed1aeb9be33bff4ff309625b84ed0ba33579f988fb72e6a31e385797f9243711333855a9c7e366e439640e1dfbaa1d6be531cd2238dc5db86fa118e97d36e804358d1fafc4ddff62c3a6150d915ec0a9cfd32d46326d3f591f7691ec7a0692e9c894e07dc339b655ea1c613f2a8932bc81522d169bd07f5f18238770e6d9b7967a36dec621f938355637781a1210e10ffce80ff780a55a3202cb8f455e39189b23ee96fda8e97b2daf10903577dc466d4f2054068e13b66608509dae7390827c9317ae20a4621e1b237297ddeebd0545ff2ceb98306c0d096230c5240d2422216e228b588742bddc97c2c527c6472fb05bd7a9d5d2f44bf550626892317d328db533d5a756f0c95cc663ee86cddce2efe2fed97c7a052a725d293b84563055edefaa31ef2a7e9f3dc7a5dd3ec9e868957940e094f1da0c182f1edff8f4150476285cdb0908bee68d8131309fcea11a666f4b6065210f147c3b9dd3556bee2ca719f4e5c2186d740057cf5b7ac92a25bf2be90007c9824d6812afc49769cf5537b6b1932af33afe6c64e5340c90eeb8d7d09cfeb09af1eee5721192a9d80061f037d633fb835d06c4a46c107a5775205c57d7edc94f4d2de714bc462e991e5cfeb13b2a2d5e87691e99e406e0423b9f1821195fe138f156754514b65a69daa93352c713e10c8de91fc44bf7659aa062e89496ff6b105227645152fab5dcd8f4626319d028ecaea6c85739632ff4d80e9d305d3ad95bfc318e438b4c6303cae855dbdc84c5f2072759cf376d60bbe963884d6f2192bcf302ca1a3cddcd45839c169919902b23b2d8a6a98664e3b8aa2a5c920821c278fe7637245461a32efea47029f7f99299a99c14df8af3c9934cda50d7614f172a0fa12363e809cbc6559f46bf96031690170e90e1607eeea30e76e7d8abcc97fa6d36e6194a3d3276e9167e90b26a8ef6060831e0e17fd896c5c455be33192a3889cc425503ff0f1807636ec940fc5ef9a5a8350a3d700c7f0790ee548452e53b354df8596479e8dc25685d48769add87c2fbb581fac2323cb56ca1450036895058402017641e875f843f34be746c6a9b8c337acfb7e8f6e996204bb62bfbe015398ab85a585490e130c82ad3fa6bcccde7bb62aaac5c50f6f7986551483ed11991aba95fe9154ea626eef23582d5dc473c6b9bf5c25a1b4e7342378af08b5603ec1bfb5118a8a1f4e77748ac19e4d75cb5e8ef422fc3786deca58d3e702289cf5cb90b142b26d755f53185ae601ca7b49d2f665cfc4485b74ff995a4ae344acd3e0d9348a0fd547e5106af40d4bf41b8f53a9079968c4e352d5adaec4ae494818c6cd937fdf3c75bd487c0f64a87c1ed6c25262869e6585c7313e94ab6f5678acc564f17d9840b1a776895ab928d3e61d28ecabf4ef01678730e82c19c690c9c78640a29f61f78e2809a02e68ca4e4c19c380c0361f6abfd79f0a945a6708a4d5005365c9204f2297054d6090baf0bda5304ef7183231c48983d8bf92c069b636bb3094de2cc422f3fe2e5259432de6cee13d1ec80115dbfa47d57639a3814bc6f7d1110418570bcedc0ce8da846de6f0aa7beb03a69769eef321c62d5bd2a37fef38064f0bca3aa9dad2646e4881cb7814017ae816a143ca936cb01bdc0fa698603dc729d2575083ce0915eb4ccca26ddd9054fab15cc0a6cfcc153984512cbd105c44a9dbb375ded4e2c11baceeff744586c1f0b31e27125fbaa49295fa1045dae0a23b61f7f508268e642f018341a2fb9e999fbdf2c563e7d484bf96864d7f8789d424068754cdd3f379efeb0c9df8694f7e1463cb3ffc699e77cb805f2d6e23ab02d6a978ac74bdb0a27588b5d93dd629f2400aa651d0391530c684bad40fcb08826873926762ff4de5d235dfcbf9ea5ee513849c694f568c329b633db4af1de126b2173142fd6b25d337172858de17ea46d0d6eca318297d2dcfeb561e2895e7e29afa191f8f66fd8b77b2417f3e8fa7246115f7fa07698c8afe8fae5e413b533089739dcd1d71a9a1f3ca51fea1cb6777de4f08040c18125bb40ac031366b31451e5dc5a93b5b5868b83d6ca0ec4aa0ff7187172d014cbcf069d110efa2a6d5d0a3137bf1d7e54e6c472c5ac765eff98eefcf4b9def665587f9b33432fab1c2d5862d3db54fc3459726bee913c3feb7b5fbb306ffbde3a5fda2af35ab5b9976712d8af3f9e3b7160acafa99dc566b984b87f23d5a207954f60ebf1cfbcb555600312f21b84a91f50529eb8179b9b4d3939ecd0de94ca201c86d79ffbe155ab7b3955d0c773223d92e1d91ac36f2e7c800a1cf4eb1b5963c5842a93181bdbeb885af622ad2794ae8ec464e48476225f8349d252edd9d936ccbe5bda450fbf1af62243d00b822516b68fa485c03dae579e2b2521b4dceb18e51b997d3c04c585e812768ff1d31da253b13aebb76b29edc5c4c1d72997c1f73cc91d3d173d5b9ff0571438da7f715ec80fac9d88c1f759a0eb56eb23c3eb01f69d6d899ed49a03736c7a41de8b99eb3f8aac5f444275480d58e3ac979f22c4ac1052202689fe75010077983c9d00d6b677b36f167d9f13a2dc404adfb31702e38b9d68fd9351ef4b6dc3dcdbc29216b74a9787b08c98022841929dbe332576ea115dba7025d5a7786df651aff17e5bd2696ad1b5dc3af27925d7ef248b797533886b6a3dd09b05060961ca84d946c343c3cdc098678c1e0decf84a10aaaba72b9787fb47a8b15032682549ca6b57acefcf49078302dba7f4dfdf0a9830d66a78e656d2e6d9bfa65c3865126d491d306d90c38d158a635b5e85fddb8c299c5c63a9ebd2e51634fcb266e49c6fd152048e2fc2389eab3ab02990c2f5860e2549ae68170790d35980cb1a2cc29ed575e8e9d28e5d7de0370785d939a376d64a10fa08b773a2f6f809ea64d930197ce4288b7027ee986998aa1b272473943e13f89bb9fa1e00737983a2677ac6d4209748fc23ebfca9f7f0a9b271ec597bbce7860c7467be4dfd9751a2274c30e3f4244b4c93fb461d670872ba73143abb72cac13134d2ee5c6ede602841781f85df1e7628cfd163dc2af51fde2f557c4aa135818a610e79389a981884264b016d49ba76e4d59a49045e762680b08d0d9bc2ea7850316d08d6b70390ba53b3f797086b67a59ab2e44f37b4e7d67f73a17414235e7386b84d659c40a6970e88ed0d725e6f73acfc700b1a969dfba61a3f0b0a9b48228df131216c0736835faf5fcb3805ee97b4e3cce3bf700ff8cdfc3bf6293819e57c830151e170d3cc51804fb82ff970a1e96f450a1d6cf4ee7e2f8faaa16fdef754defe16f3d40d72503681ae31d471cdf21b26a4eb37172d58efa3302e1519129fe09a2afaac150761e04dd56c96706af4e12bd0e011ba9e002aebe7e031f13596af885c11bca1f6657987c35fe01ec9bdbc1a9e11985ea19e795796dcd237e0fb34e25bb648cbb330ea036614328cc703d4025a25c2fac86bfcebee4e71a87964d2ca52a615f4e45c5a891400ac3729e26cd0ab4006e7bf0614319d9faa8a3a01136c9e5419e41b06b0e399da4767bdd04a2f4f03885762868b4ed2b2df6ad381ab0558440d00c61a765489e4191694b35d32f037aea05b72dee89b6870c1d4a87f40a879fa522342715917ad6f88de44431e44da5d1c19f2ceca3bd9dd90fd5b894104120a111d01f6cc12c1eaf59d5bee13a80c89bd20055399caf1442703ed2ca26b7e6422be3aa97220fd404385c96441bce6059c0c5423a658826e095936e3d7b9bbbc3f62597b1892753c401462f0c5f2ad7d89b9c45caa905aaad0cbdf7b8d196c3b342c6c0fd802ccac0c754d88fd9e9ff7fdd93e6b855b5f3a8355bc57966fea05a21c43430cadffcfa750f3ef0640a195035d98792b86c6d3828c508c0fcf7b775bb060f364a1f82215a5efc5a019ac2c42fe5b3c7ff49eb56564fb4a147c3a849e7e445bc65202ee6244e70b611af7d887dab2f5195e7304fcfafd9970bc36d2ced0667e3d953b00b9cbb54878c5218f8830e989f352026cd46666544327d7a043232e928a493995747dacc76138250f425787a9ea40869bec75e5b4757602f4e5ef465ed00e5b12b4f9a2b887dbf0a905635cb7b1fd0ce810677f0e26ed53f79cb012faed9a08b54914b0759ee53e9d643ce0fd4535669493bf1cd36590a7b7f82e0096237e97dc4e058fb51d088954cf18ecc7e1241673396378433cfe62e3d4aa576f5529ae6103febbaa8f03eaa95a8c887a48f8dca2c7ee3f2a09e5dc0ef87d34f0f5082fe122a3b8480923ceea5546fa0b9d43de137e88dc319ab41cee0fee6e196304e2b05412af4e67557125eeb507e00c37c3b309198b834c7356b34ba62e87f935f8a2884539ea51d859508a015ae1950835c54870402545a55ccc5019382105a1dec5794c04f0c8e23aaaf77fa752e3ea0747d548b845ffa711e0456d0cdb6bd6ed32148d2b36a3578f7020277d7d307cd83cb0675625f4377aff27c15c12cfacd1d1406fd5024019dd2f7dbc4b5193d181fabf9f9b1ed366caca32c51d6ab4db87628cdba51c003b0ce2d99feadbdb71df16d063a69168e4a710972719ec6e8c731e96061ea1c2c229d26965aaf5e0330b744f88509e9efe8dbea4e9234715d5cfd0a1b6fd119193290f78a9e52b3cf618bf8f43353e6d639f1abf96407d42d7114adebbeb1afb44cd5e29c795f94d24e09472d483178aa22e203d6b200b81c7bbc6a25b5c1a9813dcbab392e872465f26f150c8f805cd3836dcb08b1075340f11b4498277e922ba9a477f22b03231c158058ead77f8e6d1a6b1a79e2fdf47f51fb46f9f39c47af0b007dd70a1b484253bc0693352eeb0319f9c13ad4370b50209c3b2be1af3a7279968cbc102db9a8adbaf131d8a422630e3acdbc35ebb6ad0c7566a95c7797da3ccf4cadcc5e3098b903ecf303af1e1de5fe8a4a25d3e7bf707d6975116dd7fb8c35b3f7856a71336d4e2d0769db375e5ffb296687113eac0f42d463e93208629b80920868de1919000b990b00583dd374f70f5c00c4fd7ca813d0748a0ffd162003d14c43c8733b13fae4c360830403d31f7219e1a223611176fadcfc2791ef4b3a815cc894196a67ffd5f6d4ecb74996487022a1096724eddcd08d9d780e5ec61ee6a2fe8f960f255b3f63ed7bb2f8cad689e76647979652f0edb01369fa09702d10dbe900a8f99dd3c0f82da55fca1363d51c2467c55b943c76fcaab873d37fb0edfdff9c23bbeaa6fbf518ed6a7372258ab493f57cb279d4ba0b9cc37b686052539673c9f2c84639dba2f78ae183af3b6e8aa341bf5059f32a936fadc25faf21337d766f038ef9daa4c2c1e5540792def9c6e59995497488f199a11c17ca4558d5fe901d2901a4f7ad0bb70c0f25785064c791d53e978b88d1351a32b4b21afbcdbf8c9e43ba7891d0d3d9d4ac7b65faf3f56333ef8eba45e6a5bd9ccf7b21ac1b5c9078cef1851a7159b4c673e317667c0a6523d549e6b391b2f7a1f9e065c3eb3f4726f3365739d96ab645d3473504b0f1a606c5c10a436e64e9c0d8f587391ae461c13ff04ec387b7d5f1e9e4a39abc41e71d28a5ab38e9251967b84841f786ab78fd18c35f95c0c20d6e842cf1bcd8483458ace9fffe8d349523f5117e6a4be84a4e487a5aca98d45b66428f2d7cb6607241ce3768ccd13d573d9d55ca8aabb53691c0e1533c06152caa652ed50601e9f08859120fdef1978709e1abedbbc3af094ba0fa5e1690658bcbcf1eae0b8898f0f83f47bc798ed218285be10c8328f5fecc4c1bd99820f4f48e9bfcef4ab06377229afb297bcf6cb370231294a7360f3fa7f42cd1607cae46704569127d8248f1f2b8e3a443342628ca62b535e5f88aedfb9e76bcaa43db57cf6d905739e3d39101f4bee754d3560b16f5c9d317a7c7170db1c2b8a9686e623095809c12ec685363ba241aa58beefba55edd8b8d6e7f3b20c408dfb7389522463980e77b5140373d58a7fca2b2d2073a393248fa22437cb360e9d5ebb3b2e63bc9e2725d3484a026d8cd000ba4a5d915eba4ea563c6ca060e74e46d2a3bcbfb60b23b9d6c41eb68ddcdc0867e616d6cfa132268fc184a8596d34f46f7e2e9e27d311ade11b3232792096ef533eeb5cc0aaf50448770e5e2eee2fa7d3709363129f656c921d4920741575fedcce1423934c3e659a432021d0b47c31c43f8260044abfc129654e843dc5776aca949dde976cdd817c85cc137915aeeed60fb87ff0f91f25ad28dee4460ee09f72dbb155861c8ed74be8ca5c26baa08c83814c681e1d68030d6b0f3097b8ce9570539664cebc7c5c921fdbd5c419c6907595a0ee3631fe7976ab29d71a03c3fa3051d64debfe220ba0b216366c4580b29f5d83f9e898d7f190c66f33496c2063b3016533a6088ed9689ba99c6c441c0e6011583ff20af058d86cdcd324cc78c6d6fff98a132fc862086020a143a00c453f136ebd2759127c32c38d442fb35fed2e53f20a6ef51ec7a33bcbde3b176de2f91f744dcc9c61ea2d423da596fc4edf281ef5d5c6e6adc40af5a692d8313f596373aef04b33439c0363dee5a2d72bf9cc34b2bc2ce296cfdc3001b7ad0d1f56b746357873ffbae6267813b2eddb4566cd0f66051097b3bc66022d8a59ac6f2cc5b8c09ddc7283ba88213a730ccac208268c55ce7a4faf9046733f26469ed3d75c316d3c6160321c18780603417fc907d5361998458bcdd417af536632ea5e971727da60956b6536e5eef0c5cf5cc5d0f0d3a77faa148f25ec95d0846a904d67bbe69d825e0754d31f12225637bcff43562e9218a947cbf992b6692eedb80a57ea9587ddbc2363bdfa5c5f4479b5e5e4f268876276d407513c2907cca2606bb2ed10b086c0ee6e0f3448e4b0db58aea62ef512596f8f67e77c94f03b52d040255f3287e86b63f44186cc2154d62a3ed53741161f20d8c9eb3584b5f55e7c5babdeb39934d3e9e0e32b1e4d71fa9a34a142960ec8326b14a7561be7f1e10b8d44419e48c9da43f9ec35fd2a94cf0ba94caded45e8a061bc7de0996b4d0f263f2841918bef889f598676e11a63c2366bf8061d4aa39232df701948131c2878bc5853c86149dd982f784e88e4800890abfcec8928892d6910f0343a6e66ea7462877c18783642454ebfbfa3fc80e685e898e5cbd55fd2b568ee43f674d28b58d773c49f7d49baf36d7fd6f54e33514c990baf455a2f4c6a802b183866dc54c6a429ed1665733feb7f60e4aac844d3d0dcf70236db661fb8c6b70456c6c8f406450e9caea0251d38dbf19ba2e9b37446dbe74bd4cb738ac4e5b36b8ba7e5589ddd88dfa321ba270630b1205ac272d2387b3e10270e0ced48ac66689f9fc176579f23651b69d3a50ad461fd827035e7d3125a8433d057da2b3a2d79b0da5056a045801c2551f4f8c7e885c9cbb1e18880668909d34e293e0c8e40b7c7e273e5de282e3164d5a6cdd71fde931bc111f91da0bca2a4afc765a0bd04e0ac61535798542e513a7d496d31ff306ef306e3f7f64d12583b2ac418a90bc8e6a1f59f083ae21399f8de6c50ae255eb9aaa1f34b0556a88ac412ab850d344c5ecaaac97152e4dcfda2cb30d588a23c5fe837c51606a47bc6b65ebf3d7c5c033139751008cf34d65800010f2dfbdfe795a2eaf1b5308deec6bcdca35d36c423d1c880dce5de5d56fcab8268aadad32bc12089e24d539c7027bc632c6f524cc59ff1d81902d72fcc07c0e9e037f50d7ebf1e08d1f7291b960ff30ac01b3d2599d41f5ec8db192aa0235e085b1c6d8dc066249fe2328801a322698bfe64e6cf7c28a69f81b0b919ee6b2c3dbd288f8abce992dd51e388caab449046001c933328f0102fb134d514991997755a1421d160604ef0b714e8de3715e2ebbf5f17326a971d2e3782934387ad99096d3f3f18bd3a7b2fe33097817cb8e49ce07bda1c6c1d5679394209553a849e313a24f18647f9b202017af4938432ca8e55a93030f09b95818f9d13fc9bfcb78e68cdb201d01909e8572fa3da2b72f4c09e68bff1c6cab7ae025210979c6ec61f916d1c1340aa37881151923c479716eb687ce3b70cab5558bbbc57cb3b8fa13cf05dcf4530e7926750374719080239b100be601b552589e627c6f766f60e8f09fb268631beb7179463afccfd6d349a0b9c1f5f838d6581428d7ca6f559fc430a3eb40fd27edfc8daa4f13b1cac2067a29294aae59cefe90271e545eb68746ac326b7e2f5ae13313551130a5e5c70314d3ac83ddcd616799922c5e4f401c1ffb8863d2315b467797034a50d5beeccdecf7332d7de7341fa48e24aeab9de11f9e86dc3b3370818ba48314635aa4ab9b2e7d778402e61d19fccd9b5f2498870bd815892b2ccbe274084e26577ffea31aa7da5f4e7b0216695067cd0ab0453c972ea0155bb624bee51e344c7f5db802ebddfbee0bbc4b4d51cf9f2dc4855fcbd635ffcd5606722ff2c54c22bd2d8f4d9d6903555cfa2bfc8f20985d247e55a86f07bcdfb6d1c38fefc364082d350ae404bf9c3ec15c0781541bce14a97b996d590865a211e4c091c303386d89ad5131795a9f2abe25a44114fbdb42752c230275cd8b5c2773ed20116ebe16360e6bfbdb2d67d56111fa5f5d1272fe7ed0ef8d74bb90bfafd01f9a56403a5ed9495fff060698bc3d264be8100b27347ccfe01e9ac28db23cf0c8c52e4c3909519b21882499587666609db78f8a5a1902cfae135babd6a0c4f75f23a12a0e518de89c3f78ae270548ea7f66e6a3fa1e50455c7acbbc5123474fa8cd7524d96bef950ae44635725da7062c55d4fc9a595bfdceeb7f88402ad323f71b6ecdd82bf370ac952563e4392fe57c98f3503302cee0f1203980ab72db069bb192c6fc07ab178ff299c63abde623dfce6418e2bb816d37d727026664fed12430d91fb001ce647a0094f12f928e755b9bbc10bb3f9a9c00ddc9bf513a9c5ac7ec6dfb9c19c08baf626c2be10bed3bb20f56a961b83e02bd25910ba8c800c110d69f751745d7c6e140bc29c6be51b771dfaf66a6a7c96d7ee4709a87defc47f80468723f3b641472a412ffefec5e4030c5fdf398c5e1befa57edade4b3bb812e41d133bc6c45e7bff70c8248a20224fb63a3b7ef35b2ee0675505e87ffd6304458dec6ae6b78b64d56fa9df38cc190d6c05a18fe16ccefbb1d4019226a861abf2dc21ac23aea757d835093c5d6ab44f1e38b583709e6d752b6bcbc33920a802d2f6062566ac271259b1b3f05ab616b3858d4a3de0bd5852dcf443e1e2b9f72fa53a7efac6a9c5fbe51b308e3c3b86d93afa722868f3da650b3fd26547ef764c98b3b12604a289b804e526aea3e69be114dd55c70b5a9926400ab25effaa4eb5fa7d021f21f76ff017951f7fbc99ad2c611fb67d395be10644f7936ddbf450b609d9d279560cbb49c22dfd19383d839de4eba7deaf6c2a52e4e89bc13cc841d6dd742e9b2568344dcf76f09353536352e7f76f9b61a92e2088f33cbfced7ebd2c48709df8266e2fbf975f27902f4ebd287a99e9d13eb37e11d609354c31aeaf5d8fbecfd301ca5777f37799cb35c49fc6451d189e6c917321b67625e62d77ffc42cb359a80c320266b45232353305c0a3f30c99018d271498e7c773ea68c61122cfd83e680cd0e614ac59dfec857542c7495d9be668e48f681d89e30d596206dc562e44eb376f4699dbdd95da079b6586df3525f4ceec09f9a28764d6f0dc985bbef1e7546f489c87ad7e4962dee046e7054610f2167f21295aecd95f906c5e7171674997666f04f4ae298d889ee9a2c4149be21e0c3fdeacb0086989447557086d7496f15729695a64e1474741daa4f547608465b2f0e02784a2e5e168ed979c43a2aaae501f2e0f5c41e75e0529f0cc1b31ef0f70dfcd36b586b03e6761312e1b505e085a2e0f3ce63bdc2b43297ef748bcd994fc39b4dd55ad8810a734e73fc29050ba0fbaa5b79d3b56edf5fc3d291bbca2bb388fa9e41fdbdf98ac56b2f04f55b69f3da6e6179bda81d5debc65940a04a2016d0f0ff80a14e3884eaf07247c6849ab1baf438b801ac4cf2e76aaddff0bb8b54ea4d92bee027edb782ab8c1e3f0119a3035e9f8e9cd382a847fd7e6a15162ed5e9cb15dc253865b4d2f15b645f01026113bce838a867d52e33ac36c382d6ac56af335cbf71a410e6f7f6ddb288ca37914718dfff4644afaf16352d0fefca8d915bc2efa55d9beb6b4b6a2be8f435ef932ccb3dce89958106faa1d2d5f8a32ebfab5cbc49d96d6e785545c9deeda662f48aba96d3bebad325ca4fea35633308930117617f7c02c31d9a8fea6c35c2c2d07d60422582db55975fd46e55b861a5fb53e86b3c21d1a77e1dd95427327756a26573c3604423040a70b2bb8d54a4e0ca902ca2c3d1ebe99847b2eb5264e289b5fbcb349ea4fb61949cd8f38df292e8ebaba90534e7d6461b7ce74584d492f72164fa830d1f63299c70decef89e80ed94f333e353fea89232b446a07959e9ecf11d52057657763799320314c3b2a3b64a296585e93041608022cb3b3fe9df37318ddd775e9f5266c23a2f88c677e0188a19463d52ad9d8c3fa3ebbd9a6a2d973281935c25819374059910bf5fe2477ca093945004a4cb73c7cbf6a3edc76a91d364a634cfcc68d8d68534ab237769f9bf05ee6bb8c84f0f62309927871dfbef12a651dc56da8f5c83ee4ba59838196802a8ab2d3fceb2cca7b557df95ae34de80acb9fda4a43a6a09ab6813a99e9ef763934e5e4232ed6b4def9ab9586ae83c053affca0553f5aca332b49a0289d74d72c77f0bfd1da8ae205a18384c339542638d3f98132c4466c1ecf42a033bb272f871b85a441b0753ca90888b6461981723a0a1ea0aeed47519e63b8142a9933dc8505329f9813a9b6e0ddba1b946ebd2d527614d6d57728d9e78d22f3f19806131bd27d271ca541a8d4ef81878f620749258dcbfaddb39a4aa594b1f2eed5f3cc34dbf0a5c7f711fbe8a4901598961a1144f8a6bb41bf1cb5f5e3fe6d75c5c46f9d4a42c280e75b5909de9ee3ef0c89150d331117636766b29b1d81a2991c4c84139a5e4f1b8c6c08000e31575da5a74d540361385fd4db98d649ccf800e86e27faee4be51430d5f3f93dec258904dcee2ef1128f615bed47a7ad42d2b8de3295478b098caabdbd7101baeca97d2758bd17f8223027593634390f20db5134e9deac340ee737c033e4b9793b429fbd0123675576adb1a02d902ba29e27a41faa831a0cec98cfd8d26f7aabddb055a97aa54d7787208cdaa89d9ebcb9d2d5d110c3738bf9622d55bd5f769971ae5c0f741f2ee49148631b2c41ec7480851d9043ea65ddfa6a7de35b142313673302ec7d5712f0922a1f67605ac185434396de1ffef020ad112cdc0c6afb5c989405e70dda605fc7c6d2ed0b535ef0ce0e531264211e5cfb51aceb8b1594bca261ad3e972906f93f96cb1b16cf1840c8eff24bc2903ced91543bb335ffd70b3536f056be53355b4e38c3c20d3e4f2c4b33657dad729df4f33d320ceeed25a364e5c4ac13fd47a1d07942dd2092c3b60cd41d709a5b40a1bc7250f59ab64177e8b6173ea1965e7d5126d35d5c4f819b40316a6753fda1be8f4e6e8fbe5660f82912986d77a95a15805cc22ce061944f621021eda174476be17406d50fc88cd0d0e631b8a6316b7bd5879efc3f8a46310949415c0ad26a3c49aca3fe3934ab66c02b96fff125677b8e2e9de8f216288cc4c971febcb3100ebee44f2c48d4f1d79c7e6dfb4a441b2bf8c718adfbf6582ecf217f55ffe845c7acafe6ff668c107545ccacc5077f52579b35aa105166bf9c4fd539499b4c9c7809d3f879dc5328699a582fc0a173522ba826c0c1644416c7706e517bffb37a8c5064a46156b85d5f4791151a4a1d4393ecaffd141b7a62d42eadeb764d4bd556245c01716831dd6375a421ea449c25923bf4d05a734dcd699a353b9db01b1746eb28a25cc7bb8aa6f1f8abdabade5115f1a429f26238d69bd1498c2d923178823e4cc87510f0749cb0dc702cca256d7e343efac44a4e924a072cb4cfb0edb515ebf97d2a59af20b517b8e5cfb6bc63ea4f5c7191fb7dd137f154c871eac35b72862f9129f84a4b6a333abacc9c745aac7c75f18fd65aa054637c0ec2d56b988018b30125c77b425e5b03db721abb15eced310c288fa43f1145cdaa625efb81c157c1ffd8c5001c8993dd47ec4d8107cbcc706ed128e6bccbe596f679fa30c1fbf46c8abc0bb5bcfefe3793083bcc72d21f09b95ad37cfa09ca9f055c88efc195406db0f458ed1df9797229e2634432ba04027144168c20edfc1f8fbfcdd608bd72e697b87863d7bfe4ccc43969b11cc9e110b326e88fe6970250675885143c7a3e26cd5c83f040c3de96a7bd455a00a523459a88baa45c74d8b7b7e6362e1b62767aaca7ecbe510353d5c5ba5bbb4d4aa6ad71f315f022630b6e1d6c80da8b66e4f84f42210a57700f6c83d68c03640cadf4c44696cc3eece4371a8b229e4891ef6c86b4f7418923e99f1db07b7f42ceb5a20c82a85e7c689a51092f5c32c506df105782eace033ce7a05cd2aa970f228c39ef983801b33921052cc9c414c7d92936ae36f658a77ddd0cdd187d386adf945cc3616e26c73e08b3a4b032b454b385ba8ac8289da811da4ae31b0a0c403aa2a99140c7621e2aaba7883e0f917951d4d8978356b78f30f6711d70ff3265b81f6877a85710d0148a6eb2db45b697a7fb96ecd0f89a6bea87b0481e650232ffa9a023f33493d7653c0565846b79117532cdfeacd63768cec3169a6d8ab11bfe80e97a9945ef1f1608fafff85d5c4094b545a5d13969cf13b36f36f6d6d732f68f6bdacf67a3511243a7a3b154e096f4008c4c3aa455f2c2c3ce9658954022a0a1b6651f7af3ce4692808c21623654f5c5728733264d58f058c7705c669a3d5c4f27a710edec953de06ef7416b4f0207f630037d483a079d37f199658d7e179dc22d2de2ec8b8ac6b4456ed5d47c0217690e7cf81373bdc8101b10f9421319261fedf2e5c571f382d3fdc184224189fe9f08a4af4c67655ff1d8e2e6e48b1d24485d1a5ac28fe48ecf7d02a90b1eed0729412ec172af38f0eee9811af45f05058e4bdf42d37b7643dcc93f7a6197d8a2350545a011642dc9b0d506e4631017393d8517fde36b1506d0f0d8ff8d48c4fd240850e6fbfdbe8a4d49bf210c8b591b98e1547bf38f01c388d1ed68fbd75eb93b1c0b6bf9bb9c132c34d83526273e13b1c36ca120c28b187d4e7d864fe121f7da485ecb1b9222478ceac1581e2c3fb5dea04d666e8639403d9d524a421807d646ae619cacc95214f304edf4928e4ebe389db3bdf71411d38bc5e392c6fa57352c99bbcb5785257a380688ff864a44dc8a883a0e76967f5fb4f761534e0b8f7f9c24451134e4761a022d5835b0293ff0cda61e283d578a7d91fdfc70225d767fe3aadd0ca3ea303e925de5dde9241129fe1a70f77bf5aed691cbcc046998ce0139a67d0cd9968c5448d7e5de0b31687527af419fab441f7a9ea50c70d55c3d6133275f6666225c0e97556b0659593ed112c0eb3edcf97d7248795fb5f29a4414776881dacc463c78177c5eb180c53aa00cb5b37747e481df5584b15665c67492df3d6fe09d2ea024e9f2e994db085d17c799967762d23bb5aa30665b13a7ea64f0ab5fe55915c4381ebfe6a9beca42cbc58e0498e0a8d17b0e44dd33e38e4ee836f9ac5ec9fae498f164731ed01951d5b4490c77544e2a7d2e15db44c55df719b4aa6edb4978739dfacb06b71b1404e24cd6702869d212d9123bb207c6980e7ac3b8bca8b7bef39c024a6fdc33803ac0c24bfbc79febfb20f86e110d12d293bf51cf3a0ee137c7017176834b0ccf5b5999b5349fbafcd41035c72b6a892185e662efdff7fe28b53ef4ec5d55dd070aa4956b2c94f2066d439d046a0370d97ea73155189e90b98a3c6728be1e6605568b15146a91cb5ac3821a129e66ee4e5d3c712c7fe1ff82c927ec6745e12af4428574cc01468805682f384128caf4d514df479e6d31b0217daf99e1e9a4f08b1a9f25789a15762c9d937a314bd69c6f5e22551a8d342fe0ece65467a88633865b12013ec521c2004fa89faf0e2f49c9d6f9194723731a7e3eb09e6c65da114c0d88a859dc46dc5838bfd5feefe5dd7c8176ee9620dba07a0bacbcfbd7df22961e5d76de75bf3eb34f2fb6972141308b6a60d05cb7ac73cb27c4873436a21b17683f14c9780038e651fdb678d671dcf88faa16b33cc4b39132804b7ff3edb73c556cef002cebb8d7ba55dd361741d4678c5aec82f703f5bcd723c7e589c880864e33893e81d0d901800281875243762ceb82ed9387f08a2ea126e1a107947836658c78de820759f35687d76f828e4c7f76bfb3d7a6a53931ed10b8e7c92dca424dbe7a95844db4c164c4f7394aec16545106129c4e3ef444ab3b8bce39b2b29508871a472af2acc05c57721131d62f949fe322e7ebb10040f9daa9152cca593b22e5cad015bee5db58625933a4cfcfbc2dc810643fdb6ed7f2b53541b6c676ab25a167dd00acc17a8b00c9e7d52f4fa4df9cb95eac84fc7e866b8d68d9339d11379e5a164f5a90f9839c72771704d82e4c55031bf7fcc4875d5816a3f2f8869a37cac08f675266054011ed279d1ad6a7d081f63f8e7892299134f0c6f6e40062665695c10c9e192a7817ebf306de705b83a13eab8331ebedbe21d2a827d7f81a5ac09b2325cbdf39d515750f925a46f26cd6e9a0dd468216d5322117c86bc9e82e380eaf9ee5a5214022553916db7624982416c3bf9d23c7adceb7f8f74cbfde57140e61c8d09c16c2b61525e1e8f71e1c3cb7fde9c956eb0789e86c1d4b84c0641c2de9f570a116cf1468f8d13b38b92cc245ba7f097c43f2a0942c76558bdf357c6f9080ad4c38d33ae838e0f3aa8fbe3f2f5d2babdc95a8d9a365b66913fa708b7071ad4e7219a12ae1cce2684b0e9cee4a30048f4049afaf1832ef22e22a0ee865a57ac6ca28e74a270ae7c2d7a09ce9362f975e74ed680d7926b64185ad3a96d29891e506437b9e1f835a2f43c867529448a538af382ec89cbc9356532f5ccef3220b20321fa71d0854a891a13c0ba195534ea0eb98123c5f95f3701f8f0f308280ddeaa77c170e916921284d36f8b06131ed8119abc128adcb9c43f93e0c7ef5cf0d405e593aec385b78751a115975bed70c7c9e9fb2f19268d743f0a572770dc267b25ff1f19aa0cc9fc268131b2d917b5911c2161347cfcbcaff1c1e65eb6bad5713ae2d6f445fba57609b8f2652787d490eae6f25310bf3bf2963ab39d922e7fc3a6c49c9dcc866fd9471a5364c661bb20732bc1f810af1de2a33864f9ea26b9067a917f866377b3cd1122a8a520dd11bcb49851120d4975da61985218cbfe9a8b3c1e8015ba424c86bb30df82f9bfce6348dd8799b7eead86a3de429df32f59cd2bf847a05a646765b98860c3049f25e881612c4f28313b054a85e26ef71f25d0e6d43e9f34b706db99f996b938d32de69ac9d81a3616a3914599f34cf78ffbdce8588a4140061a3093cdca14aa16b3afd93b2067b324ee31b1e6b1243738422b941662dfc8887f1d3c7207d951f02021abb893bd79bbaa9b2784718d50852073a665b654b2b2a76adc390512b5611d7c9e44efa109673b31d63e805d9a2899a96e0a8923e435cee9813b4728c15d5d89779e663fc501967da629d456da4058b7c0b3bd580189cf5c470e40901a696105f437f7e41c05274f87c1832baf034cfea16f8cb18b80bf4daf39312847707a1789b5bfe481c4f8bb646dd37b7e797e206951e3aa2739723a3c6ee23f9d2d7a6241c784d4984687be2dd7e4106987ba41a651f45741659aa89f46878024534a18a95f62d3b38470d945d0931fa226a9b6239348de1dcc32130350d3b9bc84db5f7907c44b9e21726ceb4131ad1209f7a08bba0ef3e0370a52bc222fd50c7a65f2e0786294a7f2989962dab10f37f83f7f31baf60db450bd319f5338a40a46141e817a945278ffec297a7d246b3aff0361e6eb22b1610f5ee2ca92c4a17678228a82a9b002cbfe0f2d536573300814ac2dbc05f016647ab1476dc31cca7682a003c63e3dd41716759aba29a2bee6ee8b7c794fee0155ba645d4325d66db6518e0dd8613dee179615cc737c722116a8e7dd48a7374d7509f32c2452efe059cd3e9ee1fbb3a6a2f060114b0b27378a7f7dd342b7c2001a1fcf014f80f9180897549e27ddb0bee2d2c7d97b560714090accb4ba2f74263cd0d1524f238da4fc72b2c69230d43644dcbbcdad20958087ed37e6537e760dad983957a87b0a01fc50925812ff7388e65f9e2f1889b0797f914f0f5a1c12356345189d781697bc91366e5be44ce970ca2d887396b3c10f3e44d7d316552c982afb17259077810660a06efa48887b2f0621c9c3418fc6834f9118f227ac9ffb19230e16b22b0626591d1758279f3bfeb0826e253eed203f13b1c86a77be879db9647947a66ba9451c92e8ce023eb0ef4597a4f2dc6731b398c4ae57f89f6018f32a88c79f169d2c31e43a55e5ffac3d031bafb7a670c61d2ed9d422d69502bc31a57bfbcbb80efe25ce258172dd97400e1c5f4e2a11d5829cf3461d3a50550a1489fd88fcae55a75f82c6e8922c9befab63237c687920caa909805f501907d4a4c7706d56221c5b6a906fe666aacd43c14a46476764a15e80895c7a8eb849b5f82f8fc59cc99fc28ec3529ffcbb7c3a735681cbd1a970c6e548b56ccf89d18eb6994be23af69db491f34a4eb8cc113156dee58b6cf7e6c211d509bcffe2bdfbcc2a27f501a0521948780d340bede83d13555d1ef3e44223461242700f5d9b193ba2ff002ae3d0838c7b48cff415235a4cb50758a50c74ba8f5e0c7a495bdef17a27e58a1018f818588481e9d1045feed508c073da7b65c07c5c9e3645a22c5f39ea1d324ae1c3283153edfb1fc103f1a91a0bf2d7d611a3796958b6a3cdec6850e755bf69c0b878471f3c5df9d6e4abe7a62007b1697156be1cb936e33a169116fd6235dac4e7b6dc0a7c512bdf622c7d4bbbe3ddea54dbb6b806b14358be3d396aea059b2008fcdce2d5f08193814193325a0a9760b5b84b4379245de67a1d636a4a81aa894a89b3dec834c72cfa110f86701bead9c6fe15f3adeb0d75993d6e461d001fbe0fb0c3ea05719003bed5a32ae6b0042f872f5d81091475c94c0888802cd483313963697454d81a63256eb60a940a9b253048687dd00ae3850cef1ee13380d4b1f075cb53324f92dd8247c4ee86fc02ab44ed4e29abd7095f6b8da4dc1c081e678c1876e24e9c2c2314daeb605603a1d5f45782465fa29dc45e578cdb41799089a950e688591276442f032aa1ed25dc0d415a693b468377b648059f8c5fa47374adebab8b8bb0be6321143960ddabafa7628a0c97bb445a19a84cb1062789221b36ee19191f29864d7f7560eba0adefba153fa0eb1aae923a5ad8b43fb0c27fffcebda1c0c002fb9027829a5c787356e0b5219b2ffc1ac60bebdffaaeff56ab4aa8ed6d9267256824d6462f8c0d24e5b5831244faded1b0fcc8f1c399fed20cc8c059c0c5abae38a0e29d19cb5019f518700ba77f27690898b6c3f8e7f28df92f0b6518cde38fa78ac029c315d7e946ade6eb2a4c6d005fddbfa99e64fb3b492b2d5896e9eb023f1b0f8672d6a636c257c67a02050554133d277c4a10ab7d974fa4fae93380a9a45ab980ddb471fe7c0510611e08a762358cb417e3438e64c9a1b69b6dd32d0f4909eba8ab4b815d5cc8f70736efadcca5ade94a26402f1bd8d73422d7497573a98f2cc7312717e4603f548a10d93a00619b25da0351c0f803d653a0eb01839fcf969e89a027b8635eed544e3ea16bd3881d0c19dd08a1d11fea88d14576c4446efc560849343e2d20be11357a53f59d76aa15ee595b5aace6f2d68147623ce70b6d729b8e3a8e99d7f6242b736e4a1b1efd7a7a2b6e1ecb407376168c35449e8b4d8c56600caf0b8240f3b05798e3a267fc7f8c64c05c2e1474e75e37471305ae774bd61d2b363da6f616f229d65ab8efdb70fec238b9d87aaa0dc88052857fe4b7e4c1acc53b7138c0a53390c51c9d1b11909e5827af65ffb5af8a619a85f5527c020a728267ea016de4001d4cf928c2c44efde1db59e2febee5e75079241c7ac97da3a40fbf7e9d85b247c63e181ed45ecad3cfe7d9b1c19b252b800841105020f0852502df2fea087189398c22765a3a7b703e6a111e13dba006ae0215436ed7c78ecf087053713b83ef88c9230391562bf4f00504d57dd56c479aa8fe035da6118b664ff27d100b6396b040b0077969598a22eb2775e835ea17547473034c0f014ea21332ad98fc95940f8129d01b7f0316f251f5da627a91d2930dfd3d455260803cca240a217d66c78a20bdff09e24dd4c959aca9431ef027f9aee09a3f1005ba9659aa87ff92d214c10dab07d2c6488272108f9a69bb0d900904695981b9573f8c5830f751380149e2b4d41016fa8caa75437b961a8ce77c2f12e29f6dbf6b8fbf8a011ccfa3f3daadffcfb3f934efdaf8cccf7d653201338a102089166a1921272e90641a9570ad8427a6c1f0d500635ae93c1f8302fbcadefe376542c1e1b083eb255c40be20920545182352a3cebd4cf310770d3b90484f006ec3f444c2d0261d3d6190b7746988cf4e7228b680b7e65c433172b838654763bd8ab1ebe256c3832ba6e6a821bf713ef8e01ab67d1775ce78c144c8bd2e3493236626778179ce605b3e687c33e6faf29cf6a1196b3bcd31d5845727e5136f05a95a3f459956dd8398192971a12ce6e514837221ff8c464a398bc9b25a935d42ff1e43bdf7ec95ce28553600c416d3fe15abf9c4321243d66f09d051e1d787ce6e09b3ca409527671f8ffdbc9165dce9340aa6c77f0bb8ea20ed243ac901e68ef16964c15fba0950916d2ddb472c1d6e4a2841b33b2d7b030c5de355322669524b3c37462b7ecab0d874609706f2d9f95a2699c4300fc3bc579dcbd56e8331bd2be501bc0a0baa3413c572f342cabab0c1ef4fbe6f73198598f33f4d8ed5efd386bba200534c5a425c9dd763406271855074d6c5a053e16057c6f0d855df9722debd5d5a0f20a61fda4f3a53e1822ceca263daa4ecaa595eb39d43c59483cedbab5a5b81f2646037c4cfb48d86b707f6f10d125db0fbe641b179635a323fe7340e536a94a2d974a00623fca7f153e6edaf389b3be7e96d3212496b36a31266f3034eb95abfe066ac44687589b65d72670b93bf4926c722b094916cea121459fef953e2ab97debbe56e9a7147e0430071db1c2e8b8178d94616d7277e811e51d783469b35870ca8254ba66433e545c73edb14fc0da14ad08d610465801ab8c37c7ad7c0846697d5ac3e134cc016933c2455614b7b2ce5e96235d21e4ccce24d701048b3e21e7f3a6ed6fa8c8f206989888fb6f746aea146680816bc8de9de2ba1effcb90c0a8bd8ad4ef0d66064b4fc3457f0ca94c108548bc2ab4b453606df64c915b2ca3aa54e0f170e63a94360a660726b77749c185e0bb872f96033166e169b3154ce8079e473d63ed1f5b48950c1384c62d39e303c81b0205bc2eb508e3e6e95315199a49be3c7ce572f35aa970eb77075d8c8e57d5966a6a962a1b4b742530b30a74801bc1b21646d545150f528bdb677c9b0f2d3801da04f1dd9c544cca01a02bcc49c8b9d0e077e1b601ca0cdd93c9410df7a727a530bfe2439a61e66f5d1d15f5b7d0fd6f069641c459542182bb0778df4771eb031edc051e66da1e32bfecd22ee80bade10cebe4e81193385d6b7174f1a60390964dc16193474808129a9621eeafaa03e08b98412f10dd5ef37e090ea1265f401e500652b7f0515d1fdbe1e0987ffda066b13ab44956681680825e7fc37cce03667bdc12f64d9224b96be727db752dcd0e8e6df86b4c271e2de61cdf38e3e0b3a0e3fdb5d4bca43e45cdd0e71cce5aaf1c1b096bd4304ff99111f3eba5f09234cc5df18908fe0e71105244f65a1584fea63f66ec725235a2f4e03d7c281ad886ec47041355c558816dd7cb23473996536bff755ee8195fb912bb2011440753fa6fe7b727cec96057c6ba74893459c88e3085c77d575315dc6f2263e154a4e6a7c612d87000727d727797aa0dac7afe5586f079779c05862ad34bb829462e58e4567b5a1d1402579b3af5ff4d5ee3bfdfc6468b6d7a4e5ca681676d396a1497a0a5258716f25856592905e6e4e79719d7ac14a44c1a30ee4948a848e48444e75d79c0335b3f2de34b9b56c16dbcef1f00994ab18c1737b5a2afe96f0c9d2b703f9d08520920d2734b5004c6d2e62ac528e5d2cecea702ea191712e505df95de5816fa4a8be4829f96bc408aad931ce42743448bedd70a1f85b81a0d5d7eb9b369c8b1158381201d5c0b4dbe02da61f8f9f43e7aa5762d617873bc25c36ff2253b4e323953ad49de063759aad52475f17201d8c9f5ff089c7a23dbe4f24ff59e4cf2c219cf4d1f677cca483bf53d0acb4e50af1566016cbcc56bf6e1dac51372c4782894fd2bdc84f9fe024d2f16fe1721ab26762b4a030a3f827828005502f7c38dc60abb4f3bf2881ce507d0192dad77d67886b55b644af4cec5e8e2e79df639a56cf52f3f117de5037b6ebc0ef765aadffee65405299c9483aa79e66266d227df34ffa4d7b72304d7c2195c998fba55d8ade42230029cfface1a5c2649fea26bc3978e75be010e2ed3346fd20405949f22da6d69c6229fa6753fd94752f1c555f31d895830b90a92867e6466593834f88898c6d371d456d38b478054aaaed457ae7fe4beb6f104734e0e9bf4df0a0a652f7023a6c5bd786edf3ae3260fb3a99f64385f8eb9ef4c4f250d7823db99d7143c58f0515030221d875bd686d882b28a3ff896ee099249f2ed419bb2487902a84033b1e5132bff731e8c066b6bd7e34b9f749fd4890b3aae16e10f8fc202034ba12d6e1065aebae52d599889537ae68b28cc071fdb14f06fe7e768d0c7f33b2fb8e8c76dd5f0abc5acd21e85e94b55c2913233f85173f6c860c173800bd60f094eba17f036a9afc486f36d7d6fc98677ee50fcc573c46a643c19c7f55140ecb8fc7f78ec76dbf173ae0756b0ff177721e6b972177020cf3e30227acc9b3f700f68aff62c4272307a534925e44c019588136657cf98956d445fd131cab9e317cff839a6d8511aaead09fc43673b7b63c7a7cf7a8411bd4240e9a95c064d0ec681bfb2993821d99136e9aeab89523dee3bccafba5cd17e5046c2e86c85c0371651aaf644456070d36584af40b9629a386a946360bfa3dceb1b636e8dd2d3ed756462229fade49c6b67cee0bc56f08a4fe8e516bd9aad6be4e26ddba628071847cc4fa6f11c0502565504948b506110ff971a986676ae660f9921c9dc573277caefde0ecc9553fa0e06abea63f819e77ce40387fc2d040dd33c4120d1d54f06729c806acad505d473faf059bc19ec05f748bfdbfab3e96369b640e59cd3ec4b71cf4827010cd3d96daf2613f42dbc129d2abfe54f2ce77f351a4bde9370941aff5e370df0ce20fefa6697635bf8eec11ae974591f866c0be6b24fc99f0d65484d7e5088761820257d5220b9067b0def95e7e8613aa5c7309f91738eaa15705d97881102152125452419113d83cb20d5fc2d14e8b06c1038e65f76cd5991518690aa23e23665521cc11959bf97aae8cf05ffa761e84d0cc194a19665bac124c77b2fa7eaf698e5d196d96b11590836bdf7123f10a0280052cb4cf5864d2e7c97f76e3ead6b87b0e6c5ee79414854de822bb88ae47a79ca0aa5fb5b3a51e0b5303a959164b9ffb \ No newline at end of file diff --git a/build/blob-syncer b/build/blob-syncer index 957e217..f6bbcdf 100755 Binary files a/build/blob-syncer and b/build/blob-syncer differ diff --git a/cmd/blob-syncer-server/main.go b/cmd/blob-syncer-server/main.go new file mode 100644 index 0000000..965d507 --- /dev/null +++ b/cmd/blob-syncer-server/main.go @@ -0,0 +1,57 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package main + +import ( + "log" + "os" + + "github.com/go-openapi/loads" + flags "github.com/jessevdk/go-flags" + + "github.com/bnb-chain/blob-syncer/restapi" + "github.com/bnb-chain/blob-syncer/restapi/operations" +) + +// This file was generated by the swagger tool. +// Make sure not to overwrite this file after you generated it because all your edits would be lost! + +func main() { + + swaggerSpec, err := loads.Embedded(restapi.SwaggerJSON, restapi.FlatSwaggerJSON) + if err != nil { + log.Fatalln(err) + } + + api := operations.NewBlobSyncerAPI(swaggerSpec) + server := restapi.NewServer(api) + defer server.Shutdown() + + parser := flags.NewParser(server, flags.Default) + parser.ShortDescription = "Blob Syncer Service API" + parser.LongDescription = "API for handling blob query in the Blob Syncer." + server.ConfigureFlags() + for _, optsGroup := range api.CommandLineOptionsGroups { + _, err := parser.AddGroup(optsGroup.ShortDescription, optsGroup.LongDescription, optsGroup.Options) + if err != nil { + log.Fatalln(err) + } + } + + if _, err := parser.Parse(); err != nil { + code := 1 + if fe, ok := err.(*flags.Error); ok { + if fe.Type == flags.ErrHelp { + code = 0 + } + } + os.Exit(code) + } + + server.ConfigureAPI() + + if err := server.Serve(); err != nil { + log.Fatalln(err) + } + +} diff --git a/config/config.json b/config/config.json index 237a970..5d1f7a1 100644 --- a/config/config.json +++ b/config/config.json @@ -1,7 +1,7 @@ { "syncer_config": { "bucket_name": "bsc-blobs", - "start_height": 8775477, + "start_height": 8775600, "beacon_addrs": [ "https://eth2-beacon-mainnet.nodereal.io/v1/a24f28a0f2484effa9fea36b8e281272" ], diff --git a/db/dao.go b/db/dao.go index 32af68c..39c4cc6 100644 --- a/db/dao.go +++ b/db/dao.go @@ -36,26 +36,18 @@ func (d *BlobSvcDB) GetLatestProcessedBlock() (*Block, error) { } type BlobDB interface { - GetBlob(uint64) (*Blob, error) + GetBlobs(height int64) ([]*Blob, error) //UpdateBlobStatus(blobName string, status BlobStatus) error } -func (d *BlobSvcDB) GetBlob(u uint64) (*Blob, error) { - blob := Blob{} - err := d.db.Model(Block{}).Order("height desc").Take(&blob).Error - if err != nil && err != gorm.ErrRecordNotFound { - return nil, err +func (d *BlobSvcDB) GetBlobs(height int64) ([]*Blob, error) { + blobs := make([]*Blob, 0) + if err := d.db.Where("height = ?", uint64(height)).Find(&blobs).Error; err != nil { + return blobs, err } - return &blob, nil + return blobs, nil } -//func (d *BlobSvcDB) UpdateBlobStatus(blobName string, status Status) error { -// return d.db.Transaction(func(dbTx *gorm.DB) error { -// return dbTx.Model(Blob{}).Where("name = ?", blobName).Updates( -// Blob{Status: status}).Error -// }) -//} - type BundleDB interface { GetLatestFinalizingBundle() (*Bundle, error) CreateBundle(*Bundle) error diff --git a/go.mod b/go.mod index 36388ed..ae7f718 100644 --- a/go.mod +++ b/go.mod @@ -5,15 +5,25 @@ go 1.20 require ( github.com/aws/aws-sdk-go v1.48.6 github.com/ethereum/go-ethereum v1.13.10 + github.com/go-openapi/errors v0.20.4 + github.com/go-openapi/loads v0.21.2 + github.com/go-openapi/runtime v0.26.0 + github.com/go-openapi/spec v0.20.9 + github.com/go-openapi/strfmt v0.21.7 + github.com/go-openapi/swag v0.22.4 + github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d + github.com/jessevdk/go-flags v1.5.0 github.com/node-real/greenfield-bundle-service v0.0.1-beta github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 github.com/prysmaticlabs/prysm/v5 v5.0.2 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.15.0 + golang.org/x/net v0.21.0 gopkg.in/natefinch/lumberjack.v2 v2.2.1 gorm.io/driver/mysql v1.5.1 gorm.io/driver/sqlite v1.5.3 gorm.io/gorm v1.25.5 + ) require ( @@ -28,13 +38,15 @@ require ( github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect github.com/deckarep/golang-set/v2 v2.5.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect + github.com/docker/go-units v0.5.0 // indirect github.com/ethereum/c-kzg-4844 v0.4.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-logr/logr v1.3.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect - github.com/go-openapi/errors v0.20.4 // indirect - github.com/go-openapi/strfmt v0.21.7 // indirect - github.com/go-openapi/swag v0.22.4 // indirect + github.com/go-openapi/analysis v0.21.4 // indirect + github.com/go-openapi/jsonpointer v0.19.5 // indirect + github.com/go-openapi/jsonreference v0.20.0 // indirect + github.com/go-openapi/validate v0.22.1 // indirect github.com/go-sql-driver/mysql v1.7.0 // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/go-cmp v0.6.0 // indirect @@ -83,7 +95,6 @@ require ( golang.org/x/crypto v0.21.0 // indirect golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 // indirect golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.21.0 // indirect golang.org/x/sync v0.5.0 // indirect golang.org/x/sys v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect diff --git a/go.sum b/go.sum index a2313a9..ec8e4ce 100644 --- a/go.sum +++ b/go.sum @@ -42,7 +42,10 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI= +github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-sdk-go v1.48.6 h1:hnL/TE3eRigirDLrdRE9AWE1ALZSVLAsC4wK8TGsMqk= @@ -88,6 +91,8 @@ github.com/deckarep/golang-set/v2 v2.5.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpO github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -113,14 +118,68 @@ github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ4 github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/go-openapi/analysis v0.21.2/go.mod h1:HZwRk4RRisyG8vx2Oe6aqeSQcoxRp47Xkp3+K6q+LdY= +github.com/go-openapi/analysis v0.21.4 h1:ZDFLvSNxpDaomuCueM0BlSXxpANBlFYiBvr+GXrvIHc= +github.com/go-openapi/analysis v0.21.4/go.mod h1:4zQ35W4neeZTqh3ol0rv/O8JBbka9QyAgQRPp9y3pfo= +github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/errors v0.20.4 h1:unTcVm6PispJsMECE3zWgvG4xTiKda1LIR5rCRWLG6M= github.com/go-openapi/errors v0.20.4/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= +github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= +github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= +github.com/go-openapi/loads v0.21.1/go.mod h1:/DtAMXXneXFjbQMGEtbamCZb+4x7eGwkvZCvBmwUG+g= +github.com/go-openapi/loads v0.21.2 h1:r2a/xFIYeZ4Qd2TnGpWDIQNcP80dIaZgf704za8enro= +github.com/go-openapi/loads v0.21.2/go.mod h1:Jq58Os6SSGz0rzh62ptiu8Z31I+OTHqmULx5e/gJbNw= +github.com/go-openapi/runtime v0.26.0 h1:HYOFtG00FM1UvqrcxbEJg/SwvDRvYLQKGhw2zaQjTcc= +github.com/go-openapi/runtime v0.26.0/go.mod h1:QgRGeZwrUcSHdeh4Ka9Glvo0ug1LC5WyE+EV88plZrQ= +github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= +github.com/go-openapi/spec v0.20.6/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= +github.com/go-openapi/spec v0.20.9 h1:xnlYNQAwKd2VQRRfwTEI0DcK+2cbuvI/0c7jx3gA8/8= +github.com/go-openapi/spec v0.20.9/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= +github.com/go-openapi/strfmt v0.21.0/go.mod h1:ZRQ409bWMj+SOgXofQAGTIo2Ebu72Gs+WaRADcS5iNg= +github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= +github.com/go-openapi/strfmt v0.21.3/go.mod h1:k+RzNO0Da+k3FrrynSNN8F7n/peCmQQqbbXjtDfvmGg= github.com/go-openapi/strfmt v0.21.7 h1:rspiXgNWgeUzhjo1YU01do6qsahtJNByjLVbPLNHb8k= github.com/go-openapi/strfmt v0.21.7/go.mod h1:adeGTkxE44sPyLk0JV235VQAO/ZXUr8KAzYjclFs3ew= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/validate v0.22.1 h1:G+c2ub6q47kfX1sOBLwIQwzBVt8qmOAARyo/9Fqs9NU= +github.com/go-openapi/validate v0.22.1/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc= github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= +github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= +github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= +github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= +github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= +github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= +github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= +github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= +github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= +github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= +github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= +github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= +github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= @@ -184,6 +243,7 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -199,6 +259,8 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.2/go.mod h1:7pdNwVWBBHGiCxa9lAsz github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 h1:3JQNjnMRil1yD0IfZKHF9GxxWKDJGj8I0IqOUol//sw= @@ -208,7 +270,10 @@ github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXei github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= +github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= @@ -217,15 +282,20 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= +github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -237,8 +307,13 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= @@ -249,6 +324,8 @@ github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQth github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= +github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= @@ -267,8 +344,11 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= @@ -292,6 +372,8 @@ github.com/prysmaticlabs/gohashtree v0.0.4-beta/go.mod h1:BFdtALS+Ffhg3lGQIHv9HD github.com/prysmaticlabs/prysm/v5 v5.0.2 h1:xcSUvrCVfOGslKYUb5Hpyz98N9I8fC2p7DMAZfiqEIA= github.com/prysmaticlabs/prysm/v5 v5.0.2/go.mod h1:XG4nOU925zemOimoexcrFP4oA57f+RTQbp7V/TH9UOM= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= +github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= @@ -299,23 +381,30 @@ github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -340,7 +429,9 @@ github.com/tklauser/numcpus v0.7.0/go.mod h1:bb6dMVcj8A42tSE7i32fsIUCbQNllK5iDgu github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/urfave/cli/v2 v2.26.0 h1:3f3AMg3HpThFNT4I++TKOejZO8yU55t3JnnSr4S4QEI= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= +github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= @@ -350,6 +441,9 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg= +go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= +go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8= go.mongodb.org/mongo-driver v1.11.3 h1:Ql6K6qYHEzB6xvu4+AU0BoRoqf9vFPcc4o7MUIdPW8Y= go.mongodb.org/mongo-driver v1.11.3/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -358,10 +452,13 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -436,6 +533,7 @@ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= @@ -452,6 +550,7 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -462,11 +561,16 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -494,6 +598,8 @@ golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -510,6 +616,7 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= @@ -524,9 +631,13 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= @@ -685,6 +796,9 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gorm.io/driver/mysql v1.5.1 h1:WUEH5VF9obL/lTtzjmML/5e6VfFR/788coz2uaVCAZw= diff --git a/models/error.go b/models/error.go new file mode 100644 index 0000000..f4c6fee --- /dev/null +++ b/models/error.go @@ -0,0 +1,55 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// Error error +// +// swagger:model Error +type Error struct { + + // HTTP error code + // Example: 400/500 + Code int64 `json:"code"` + + // Error message + // Example: Bad request/Internal server error + Message string `json:"message"` +} + +// Validate validates this error +func (m *Error) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this error based on context it is used +func (m *Error) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (m *Error) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *Error) UnmarshalBinary(b []byte) error { + var res Error + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/models/get_blob_side_cars_response.go b/models/get_blob_side_cars_response.go new file mode 100644 index 0000000..ceb3cea --- /dev/null +++ b/models/get_blob_side_cars_response.go @@ -0,0 +1,214 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "strconv" + + "github.com/go-openapi/errors" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// GetBlobSideCarsResponse get blob side cars response +// +// swagger:model GetBlobSideCarsResponse +type GetBlobSideCarsResponse struct { + + // code defined by api,not equal to http code + // Example: 2000 + Code int64 `json:"code,omitempty"` + + // data + Data *GetBlobSideCarsResponseData `json:"data,omitempty"` + + // error message if there is error + // Example: signature invalid + Message string `json:"message,omitempty"` +} + +// Validate validates this get blob side cars response +func (m *GetBlobSideCarsResponse) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateData(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *GetBlobSideCarsResponse) validateData(formats strfmt.Registry) error { + if swag.IsZero(m.Data) { // not required + return nil + } + + if m.Data != nil { + if err := m.Data.Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("data") + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("data") + } + return err + } + } + + return nil +} + +// ContextValidate validate this get blob side cars response based on the context it is used +func (m *GetBlobSideCarsResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + var res []error + + if err := m.contextValidateData(ctx, formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *GetBlobSideCarsResponse) contextValidateData(ctx context.Context, formats strfmt.Registry) error { + + if m.Data != nil { + if err := m.Data.ContextValidate(ctx, formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("data") + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("data") + } + return err + } + } + + return nil +} + +// MarshalBinary interface implementation +func (m *GetBlobSideCarsResponse) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *GetBlobSideCarsResponse) UnmarshalBinary(b []byte) error { + var res GetBlobSideCarsResponse + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} + +// GetBlobSideCarsResponseData actual data for request +// +// swagger:model GetBlobSideCarsResponseData +type GetBlobSideCarsResponseData struct { + + // sidecar + Sidecar []*Sidecar `json:"sidecar"` +} + +// Validate validates this get blob side cars response data +func (m *GetBlobSideCarsResponseData) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateSidecar(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *GetBlobSideCarsResponseData) validateSidecar(formats strfmt.Registry) error { + if swag.IsZero(m.Sidecar) { // not required + return nil + } + + for i := 0; i < len(m.Sidecar); i++ { + if swag.IsZero(m.Sidecar[i]) { // not required + continue + } + + if m.Sidecar[i] != nil { + if err := m.Sidecar[i].Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("data" + "." + "sidecar" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("data" + "." + "sidecar" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + +// ContextValidate validate this get blob side cars response data based on the context it is used +func (m *GetBlobSideCarsResponseData) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + var res []error + + if err := m.contextValidateSidecar(ctx, formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *GetBlobSideCarsResponseData) contextValidateSidecar(ctx context.Context, formats strfmt.Registry) error { + + for i := 0; i < len(m.Sidecar); i++ { + + if m.Sidecar[i] != nil { + if err := m.Sidecar[i].ContextValidate(ctx, formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("data" + "." + "sidecar" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("data" + "." + "sidecar" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + +// MarshalBinary interface implementation +func (m *GetBlobSideCarsResponseData) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *GetBlobSideCarsResponseData) UnmarshalBinary(b []byte) error { + var res GetBlobSideCarsResponseData + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/models/sidecar.go b/models/sidecar.go new file mode 100644 index 0000000..43ff2db --- /dev/null +++ b/models/sidecar.go @@ -0,0 +1,55 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// Sidecar sidecar +// +// swagger:model Sidecar +type Sidecar struct { + + // name + // Example: Art + Blob string `json:"blob,omitempty"` + + // index + // Example: 1 + Index int64 `json:"index,omitempty"` +} + +// Validate validates this sidecar +func (m *Sidecar) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this sidecar based on context it is used +func (m *Sidecar) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (m *Sidecar) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *Sidecar) UnmarshalBinary(b []byte) error { + var res Sidecar + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/restapi/configure_blob_syncer.go b/restapi/configure_blob_syncer.go new file mode 100644 index 0000000..61a3f44 --- /dev/null +++ b/restapi/configure_blob_syncer.go @@ -0,0 +1,148 @@ +// This file is safe to edit. Once it exists it will not be overwritten + +package restapi + +import ( + "crypto/tls" + "fmt" + "github.com/bnb-chain/blob-syncer/config" + syncerdb "github.com/bnb-chain/blob-syncer/db" + "github.com/bnb-chain/blob-syncer/restapi/handlers" + "github.com/bnb-chain/blob-syncer/service" + "github.com/bnb-chain/blob-syncer/syncer" + "github.com/go-openapi/swag" + "gorm.io/driver/mysql" + "gorm.io/gorm" + "gorm.io/gorm/logger" + "log" + "net/http" + "os" + "time" + + "github.com/bnb-chain/blob-syncer/restapi/operations" + "github.com/bnb-chain/blob-syncer/restapi/operations/blob" + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" +) + +//go:generate swagger generate server --target ../../blob-syncer --name BlobSyncer --spec ../swagger.yaml --principal interface{} + +var cliOpts = struct { + ConfigFilePath string `short:"c" long:"config-path" description:"Config path" default:""` +}{} + +func configureFlags(api *operations.BlobSyncerAPI) { + param := swag.CommandLineOptionsGroup{ + ShortDescription: "config", + Options: &cliOpts, + } + api.CommandLineOptionsGroups = []swag.CommandLineOptionsGroup{param} +} + +func configureAPI(api *operations.BlobSyncerAPI) http.Handler { + // configure the api here + api.ServeError = errors.ServeError + + // Set your custom logger if needed. Default one is log.Printf + // Expected interface func(string, ...interface{}) + // + // Example: + // api.Logger = log.Printf + + api.UseSwaggerUI() + // To continue using redoc as your UI, uncomment the following line + // api.UseRedoc() + + api.JSONConsumer = runtime.JSONConsumer() + + api.JSONProducer = runtime.JSONProducer() + + api.BlobGetBlobSidecarsByBlockNumHandler = blob.GetBlobSidecarsByBlockNumHandlerFunc(handlers.HandleGetBlobSidecars()) + api.PreServerShutdown = func() {} + + api.ServerShutdown = func() {} + + return setupGlobalMiddleware(api.Serve(setupMiddlewares)) +} + +// The TLS configuration before HTTPS server starts. +func configureTLS(tlsConfig *tls.Config) { + // Make all necessary changes to the TLS configuration here. +} + +// As soon as server is initialized but not run yet, this function will be called. +// If you need to modify a config, store server instance to stop it individually later, this is the place. +// This function can be called multiple times, depending on the number of serving schemes. +// scheme value will be set accordingly: "http", "https" or "unix". +func configureServer(s *http.Server, scheme, addr string) { + var cfg *config.Config + configFilePath := cliOpts.ConfigFilePath + configFilePath = "config/config.json" // todo + if configFilePath != "" { + cfg = config.ParseConfigFromFile(configFilePath) + } + + if cfg == nil { + panic("failed to get configuration") + } + //cfg.Validate() + + db := InitDBWithConfig(&cfg.DBConfig) + blobDB := syncerdb.NewBlobSvcDB(db) + bundleClient, err := syncer.NewBundleClient(cfg.SyncerConfig.BundleServiceAddrs[0], time.Second*3, cfg.SyncerConfig.PrivateKey) + if err != nil { + panic(err) + } + service.BlobSvc = service.NewBlobService(blobDB, bundleClient, cfg) +} + +// The middleware configuration is for the handler executors. These do not apply to the swagger.json document. +// The middleware executes after routing but before authentication, binding and validation. +func setupMiddlewares(handler http.Handler) http.Handler { + return handler +} + +// The middleware configuration happens before anything, this middleware also applies to serving the swagger.json document. +// So this is a good place to plug in a panic handling middleware, logging and metrics. +func setupGlobalMiddleware(handler http.Handler) http.Handler { + return handler +} + +func InitDBWithConfig(cfg *config.DBConfig) *gorm.DB { + var db *gorm.DB + var err error + var dialector gorm.Dialector + + if cfg.Dialect == config.DBDialectMysql { + url := cfg.Url + dbPath := fmt.Sprintf("%s:%s@%s", cfg.Username, cfg.Password, url) + dialector = mysql.Open(dbPath) + } else { + panic(fmt.Sprintf("unexpected DB dialect %s", cfg.Dialect)) + } + newLogger := logger.New( + log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer + logger.Config{ + SlowThreshold: time.Microsecond, // Slow SQL threshold + LogLevel: logger.Info, // Log level + IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger + Colorful: true, // Disable color + }, + ) + db, err = gorm.Open(dialector, &gorm.Config{ + Logger: newLogger, + }) + if err != nil { + panic(fmt.Sprintf("open db error, err=%s", err.Error())) + } + dbConfig, err := db.DB() + if err != nil { + panic(err) + } + + dbConfig.SetMaxIdleConns(cfg.MaxIdleConns) + dbConfig.SetMaxOpenConns(cfg.MaxOpenConns) + + syncerdb.InitTables(db) + return db +} diff --git a/restapi/doc.go b/restapi/doc.go new file mode 100644 index 0000000..1b86217 --- /dev/null +++ b/restapi/doc.go @@ -0,0 +1,19 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// Package restapi Blob Syncer Service API +// +// API for handling blob query in the Blob Syncer. +// Schemes: +// http +// Host: blob-syncer +// BasePath: /eth/v1 +// Version: 1.0.0 +// +// Consumes: +// - application/json +// +// Produces: +// - application/json +// +// swagger:meta +package restapi diff --git a/restapi/embedded_spec.go b/restapi/embedded_spec.go new file mode 100644 index 0000000..9a88005 --- /dev/null +++ b/restapi/embedded_spec.go @@ -0,0 +1,274 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package restapi + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "encoding/json" +) + +var ( + // SwaggerJSON embedded version of the swagger document used at generation time + SwaggerJSON json.RawMessage + // FlatSwaggerJSON embedded flattened version of the swagger document used at generation time + FlatSwaggerJSON json.RawMessage +) + +func init() { + SwaggerJSON = json.RawMessage([]byte(`{ + "schemes": [ + "http" + ], + "swagger": "2.0", + "info": { + "description": "API for handling blob query in the Blob Syncer.", + "title": "Blob Syncer Service API", + "version": "1.0.0" + }, + "host": "blob-syncer", + "basePath": "/eth/v1", + "paths": { + "/beacon/blob_sidecars/{blockNum}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "blob" + ], + "summary": "Get blob sidecars by block num", + "operationId": "getBlobSidecarsByBlockNum", + "parameters": [ + { + "minLength": 1, + "type": "integer", + "format": "int64", + "description": "blockNum", + "name": "blockNum", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "$ref": "#/definitions/GetBlobSideCarsResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "500": { + "description": "internal server error", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + } + } + }, + "definitions": { + "Error": { + "type": "object", + "properties": { + "code": { + "description": "HTTP error code", + "type": "integer", + "format": "int64", + "x-omitempty": false, + "example": "400/500" + }, + "message": { + "description": "Error message", + "type": "string", + "x-omitempty": false, + "example": "Bad request/Internal server error" + } + } + }, + "GetBlobSideCarsResponse": { + "type": "object", + "properties": { + "code": { + "description": "code defined by api,not equal to http code", + "type": "integer", + "example": 2000 + }, + "data": { + "description": "actual data for request", + "type": "object", + "properties": { + "sidecar": { + "type": "array", + "items": { + "$ref": "#/definitions/Sidecar" + } + } + } + }, + "message": { + "description": "error message if there is error", + "type": "string", + "example": "signature invalid" + } + } + }, + "Sidecar": { + "type": "object", + "properties": { + "blob": { + "description": "name", + "type": "string", + "example": "Art" + }, + "index": { + "description": "index", + "type": "integer", + "format": "int", + "example": 1 + } + } + } + } +}`)) + FlatSwaggerJSON = json.RawMessage([]byte(`{ + "schemes": [ + "http" + ], + "swagger": "2.0", + "info": { + "description": "API for handling blob query in the Blob Syncer.", + "title": "Blob Syncer Service API", + "version": "1.0.0" + }, + "host": "blob-syncer", + "basePath": "/eth/v1", + "paths": { + "/beacon/blob_sidecars/{blockNum}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "blob" + ], + "summary": "Get blob sidecars by block num", + "operationId": "getBlobSidecarsByBlockNum", + "parameters": [ + { + "minLength": 1, + "type": "integer", + "format": "int64", + "description": "blockNum", + "name": "blockNum", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "$ref": "#/definitions/GetBlobSideCarsResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "500": { + "description": "internal server error", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + } + } + }, + "definitions": { + "Error": { + "type": "object", + "properties": { + "code": { + "description": "HTTP error code", + "type": "integer", + "format": "int64", + "x-omitempty": false, + "example": "400/500" + }, + "message": { + "description": "Error message", + "type": "string", + "x-omitempty": false, + "example": "Bad request/Internal server error" + } + } + }, + "GetBlobSideCarsResponse": { + "type": "object", + "properties": { + "code": { + "description": "code defined by api,not equal to http code", + "type": "integer", + "example": 2000 + }, + "data": { + "description": "actual data for request", + "type": "object", + "properties": { + "sidecar": { + "type": "array", + "items": { + "$ref": "#/definitions/Sidecar" + } + } + } + }, + "message": { + "description": "error message if there is error", + "type": "string", + "example": "signature invalid" + } + } + }, + "GetBlobSideCarsResponseData": { + "description": "actual data for request", + "type": "object", + "properties": { + "sidecar": { + "type": "array", + "items": { + "$ref": "#/definitions/Sidecar" + } + } + } + }, + "Sidecar": { + "type": "object", + "properties": { + "blob": { + "description": "name", + "type": "string", + "example": "Art" + }, + "index": { + "description": "index", + "type": "integer", + "format": "int", + "example": 1 + } + } + } + } +}`)) +} diff --git a/restapi/handlers/blob.go b/restapi/handlers/blob.go new file mode 100644 index 0000000..6c140d4 --- /dev/null +++ b/restapi/handlers/blob.go @@ -0,0 +1,25 @@ +package handlers + +import ( + "github.com/bnb-chain/blob-syncer/models" + "github.com/bnb-chain/blob-syncer/restapi/operations/blob" + "github.com/bnb-chain/blob-syncer/service" + "github.com/go-openapi/runtime/middleware" +) + +func HandleGetBlobSidecars() func(params blob.GetBlobSidecarsByBlockNumParams) middleware.Responder { + return func(params blob.GetBlobSidecarsByBlockNumParams) middleware.Responder { + sidecars, err := service.BlobSvc.GetBlobSidecars(params.BlockNum) + code, message := Error(err) + payload := models.GetBlobSideCarsResponse{ + Code: code, + Message: message, + } + if err == nil { + payload.Data = &models.GetBlobSideCarsResponseData{ + Sidecar: sidecars, + } + } + return blob.NewGetBlobSidecarsByBlockNumOK().WithPayload(&payload) + } +} diff --git a/restapi/handlers/handlers.go b/restapi/handlers/handlers.go new file mode 100644 index 0000000..848ed7a --- /dev/null +++ b/restapi/handlers/handlers.go @@ -0,0 +1,40 @@ +package handlers + +import ( + "net/http" + + "github.com/bnb-chain/blob-syncer/service" +) + +type responseWriter struct { + http.ResponseWriter + statusCode int + body []byte + header http.Header +} + +func newResponseWriter(w http.ResponseWriter) *responseWriter { + return &responseWriter{w, http.StatusOK, []byte{}, http.Header{}} +} + +func (rw *responseWriter) Write(body []byte) (int, error) { + rw.body = body + return rw.ResponseWriter.Write(body) +} + +func (rw *responseWriter) WriteHeader(code int) { + rw.statusCode = code + rw.header = rw.ResponseWriter.Header() + rw.ResponseWriter.WriteHeader(code) +} + +func Error(err error) (int64, string) { + switch e := err.(type) { + case service.Err: + return e.Code, e.Message + case nil: + return service.NoErr.Code, service.NoErr.Message + default: + return service.InternalErr.Code, err.Error() + } +} diff --git a/restapi/operations/blob/get_blob_sidecars_by_block_num.go b/restapi/operations/blob/get_blob_sidecars_by_block_num.go new file mode 100644 index 0000000..0ff0a84 --- /dev/null +++ b/restapi/operations/blob/get_blob_sidecars_by_block_num.go @@ -0,0 +1,56 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package blob + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the generate command + +import ( + "net/http" + + "github.com/go-openapi/runtime/middleware" +) + +// GetBlobSidecarsByBlockNumHandlerFunc turns a function with the right signature into a get blob sidecars by block num handler +type GetBlobSidecarsByBlockNumHandlerFunc func(GetBlobSidecarsByBlockNumParams) middleware.Responder + +// Handle executing the request and returning a response +func (fn GetBlobSidecarsByBlockNumHandlerFunc) Handle(params GetBlobSidecarsByBlockNumParams) middleware.Responder { + return fn(params) +} + +// GetBlobSidecarsByBlockNumHandler interface for that can handle valid get blob sidecars by block num params +type GetBlobSidecarsByBlockNumHandler interface { + Handle(GetBlobSidecarsByBlockNumParams) middleware.Responder +} + +// NewGetBlobSidecarsByBlockNum creates a new http.Handler for the get blob sidecars by block num operation +func NewGetBlobSidecarsByBlockNum(ctx *middleware.Context, handler GetBlobSidecarsByBlockNumHandler) *GetBlobSidecarsByBlockNum { + return &GetBlobSidecarsByBlockNum{Context: ctx, Handler: handler} +} + +/* + GetBlobSidecarsByBlockNum swagger:route GET /beacon/blob_sidecars/{blockNum} blob getBlobSidecarsByBlockNum + +Get blob sidecars by block num +*/ +type GetBlobSidecarsByBlockNum struct { + Context *middleware.Context + Handler GetBlobSidecarsByBlockNumHandler +} + +func (o *GetBlobSidecarsByBlockNum) ServeHTTP(rw http.ResponseWriter, r *http.Request) { + route, rCtx, _ := o.Context.RouteInfo(r) + if rCtx != nil { + *r = *rCtx + } + var Params = NewGetBlobSidecarsByBlockNumParams() + if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params + o.Context.Respond(rw, r, route.Produces, route, err) + return + } + + res := o.Handler.Handle(Params) // actually handle the request + o.Context.Respond(rw, r, route.Produces, route, res) + +} diff --git a/restapi/operations/blob/get_blob_sidecars_by_block_num_parameters.go b/restapi/operations/blob/get_blob_sidecars_by_block_num_parameters.go new file mode 100644 index 0000000..221be7e --- /dev/null +++ b/restapi/operations/blob/get_blob_sidecars_by_block_num_parameters.go @@ -0,0 +1,77 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package blob + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "net/http" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// NewGetBlobSidecarsByBlockNumParams creates a new GetBlobSidecarsByBlockNumParams object +// +// There are no default values defined in the spec. +func NewGetBlobSidecarsByBlockNumParams() GetBlobSidecarsByBlockNumParams { + + return GetBlobSidecarsByBlockNumParams{} +} + +// GetBlobSidecarsByBlockNumParams contains all the bound params for the get blob sidecars by block num operation +// typically these are obtained from a http.Request +// +// swagger:parameters getBlobSidecarsByBlockNum +type GetBlobSidecarsByBlockNumParams struct { + + // HTTP Request Object + HTTPRequest *http.Request `json:"-"` + + /*blockNum + Required: true + In: path + */ + BlockNum int64 +} + +// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface +// for simple values it will use straight method calls. +// +// To ensure default values, the struct must have been initialized with NewGetBlobSidecarsByBlockNumParams() beforehand. +func (o *GetBlobSidecarsByBlockNumParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { + var res []error + + o.HTTPRequest = r + + rBlockNum, rhkBlockNum, _ := route.Params.GetOK("blockNum") + if err := o.bindBlockNum(rBlockNum, rhkBlockNum, route.Formats); err != nil { + res = append(res, err) + } + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +// bindBlockNum binds and validates parameter BlockNum from path. +func (o *GetBlobSidecarsByBlockNumParams) bindBlockNum(rawData []string, hasKey bool, formats strfmt.Registry) error { + var raw string + if len(rawData) > 0 { + raw = rawData[len(rawData)-1] + } + + // Required: true + // Parameter is provided by construction from the route + + value, err := swag.ConvertInt64(raw) + if err != nil { + return errors.InvalidType("blockNum", "path", "int64", raw) + } + o.BlockNum = value + + return nil +} diff --git a/restapi/operations/blob/get_blob_sidecars_by_block_num_responses.go b/restapi/operations/blob/get_blob_sidecars_by_block_num_responses.go new file mode 100644 index 0000000..f12d907 --- /dev/null +++ b/restapi/operations/blob/get_blob_sidecars_by_block_num_responses.go @@ -0,0 +1,149 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package blob + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "net/http" + + "github.com/go-openapi/runtime" + + "github.com/bnb-chain/blob-syncer/models" +) + +// GetBlobSidecarsByBlockNumOKCode is the HTTP code returned for type GetBlobSidecarsByBlockNumOK +const GetBlobSidecarsByBlockNumOKCode int = 200 + +/* +GetBlobSidecarsByBlockNumOK successful operation + +swagger:response getBlobSidecarsByBlockNumOK +*/ +type GetBlobSidecarsByBlockNumOK struct { + + /* + In: Body + */ + Payload *models.GetBlobSideCarsResponse `json:"body,omitempty"` +} + +// NewGetBlobSidecarsByBlockNumOK creates GetBlobSidecarsByBlockNumOK with default headers values +func NewGetBlobSidecarsByBlockNumOK() *GetBlobSidecarsByBlockNumOK { + + return &GetBlobSidecarsByBlockNumOK{} +} + +// WithPayload adds the payload to the get blob sidecars by block num o k response +func (o *GetBlobSidecarsByBlockNumOK) WithPayload(payload *models.GetBlobSideCarsResponse) *GetBlobSidecarsByBlockNumOK { + o.Payload = payload + return o +} + +// SetPayload sets the payload to the get blob sidecars by block num o k response +func (o *GetBlobSidecarsByBlockNumOK) SetPayload(payload *models.GetBlobSideCarsResponse) { + o.Payload = payload +} + +// WriteResponse to the client +func (o *GetBlobSidecarsByBlockNumOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.WriteHeader(200) + if o.Payload != nil { + payload := o.Payload + if err := producer.Produce(rw, payload); err != nil { + panic(err) // let the recovery middleware deal with this + } + } +} + +// GetBlobSidecarsByBlockNumBadRequestCode is the HTTP code returned for type GetBlobSidecarsByBlockNumBadRequest +const GetBlobSidecarsByBlockNumBadRequestCode int = 400 + +/* +GetBlobSidecarsByBlockNumBadRequest Bad Request + +swagger:response getBlobSidecarsByBlockNumBadRequest +*/ +type GetBlobSidecarsByBlockNumBadRequest struct { + + /* + In: Body + */ + Payload *models.Error `json:"body,omitempty"` +} + +// NewGetBlobSidecarsByBlockNumBadRequest creates GetBlobSidecarsByBlockNumBadRequest with default headers values +func NewGetBlobSidecarsByBlockNumBadRequest() *GetBlobSidecarsByBlockNumBadRequest { + + return &GetBlobSidecarsByBlockNumBadRequest{} +} + +// WithPayload adds the payload to the get blob sidecars by block num bad request response +func (o *GetBlobSidecarsByBlockNumBadRequest) WithPayload(payload *models.Error) *GetBlobSidecarsByBlockNumBadRequest { + o.Payload = payload + return o +} + +// SetPayload sets the payload to the get blob sidecars by block num bad request response +func (o *GetBlobSidecarsByBlockNumBadRequest) SetPayload(payload *models.Error) { + o.Payload = payload +} + +// WriteResponse to the client +func (o *GetBlobSidecarsByBlockNumBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.WriteHeader(400) + if o.Payload != nil { + payload := o.Payload + if err := producer.Produce(rw, payload); err != nil { + panic(err) // let the recovery middleware deal with this + } + } +} + +// GetBlobSidecarsByBlockNumInternalServerErrorCode is the HTTP code returned for type GetBlobSidecarsByBlockNumInternalServerError +const GetBlobSidecarsByBlockNumInternalServerErrorCode int = 500 + +/* +GetBlobSidecarsByBlockNumInternalServerError internal server error + +swagger:response getBlobSidecarsByBlockNumInternalServerError +*/ +type GetBlobSidecarsByBlockNumInternalServerError struct { + + /* + In: Body + */ + Payload *models.Error `json:"body,omitempty"` +} + +// NewGetBlobSidecarsByBlockNumInternalServerError creates GetBlobSidecarsByBlockNumInternalServerError with default headers values +func NewGetBlobSidecarsByBlockNumInternalServerError() *GetBlobSidecarsByBlockNumInternalServerError { + + return &GetBlobSidecarsByBlockNumInternalServerError{} +} + +// WithPayload adds the payload to the get blob sidecars by block num internal server error response +func (o *GetBlobSidecarsByBlockNumInternalServerError) WithPayload(payload *models.Error) *GetBlobSidecarsByBlockNumInternalServerError { + o.Payload = payload + return o +} + +// SetPayload sets the payload to the get blob sidecars by block num internal server error response +func (o *GetBlobSidecarsByBlockNumInternalServerError) SetPayload(payload *models.Error) { + o.Payload = payload +} + +// WriteResponse to the client +func (o *GetBlobSidecarsByBlockNumInternalServerError) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.WriteHeader(500) + if o.Payload != nil { + payload := o.Payload + if err := producer.Produce(rw, payload); err != nil { + panic(err) // let the recovery middleware deal with this + } + } +} diff --git a/restapi/operations/blob/get_blob_sidecars_by_block_num_urlbuilder.go b/restapi/operations/blob/get_blob_sidecars_by_block_num_urlbuilder.go new file mode 100644 index 0000000..d946804 --- /dev/null +++ b/restapi/operations/blob/get_blob_sidecars_by_block_num_urlbuilder.go @@ -0,0 +1,101 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package blob + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the generate command + +import ( + "errors" + "net/url" + golangswaggerpaths "path" + "strings" + + "github.com/go-openapi/swag" +) + +// GetBlobSidecarsByBlockNumURL generates an URL for the get blob sidecars by block num operation +type GetBlobSidecarsByBlockNumURL struct { + BlockNum int64 + + _basePath string + // avoid unkeyed usage + _ struct{} +} + +// WithBasePath sets the base path for this url builder, only required when it's different from the +// base path specified in the swagger spec. +// When the value of the base path is an empty string +func (o *GetBlobSidecarsByBlockNumURL) WithBasePath(bp string) *GetBlobSidecarsByBlockNumURL { + o.SetBasePath(bp) + return o +} + +// SetBasePath sets the base path for this url builder, only required when it's different from the +// base path specified in the swagger spec. +// When the value of the base path is an empty string +func (o *GetBlobSidecarsByBlockNumURL) SetBasePath(bp string) { + o._basePath = bp +} + +// Build a url path and query string +func (o *GetBlobSidecarsByBlockNumURL) Build() (*url.URL, error) { + var _result url.URL + + var _path = "/beacon/blob_sidecars/{blockNum}" + + blockNum := swag.FormatInt64(o.BlockNum) + if blockNum != "" { + _path = strings.Replace(_path, "{blockNum}", blockNum, -1) + } else { + return nil, errors.New("blockNum is required on GetBlobSidecarsByBlockNumURL") + } + + _basePath := o._basePath + if _basePath == "" { + _basePath = "/eth/v1" + } + _result.Path = golangswaggerpaths.Join(_basePath, _path) + + return &_result, nil +} + +// Must is a helper function to panic when the url builder returns an error +func (o *GetBlobSidecarsByBlockNumURL) Must(u *url.URL, err error) *url.URL { + if err != nil { + panic(err) + } + if u == nil { + panic("url can't be nil") + } + return u +} + +// String returns the string representation of the path with query string +func (o *GetBlobSidecarsByBlockNumURL) String() string { + return o.Must(o.Build()).String() +} + +// BuildFull builds a full url with scheme, host, path and query string +func (o *GetBlobSidecarsByBlockNumURL) BuildFull(scheme, host string) (*url.URL, error) { + if scheme == "" { + return nil, errors.New("scheme is required for a full url on GetBlobSidecarsByBlockNumURL") + } + if host == "" { + return nil, errors.New("host is required for a full url on GetBlobSidecarsByBlockNumURL") + } + + base, err := o.Build() + if err != nil { + return nil, err + } + + base.Scheme = scheme + base.Host = host + return base, nil +} + +// StringFull returns the string representation of a complete url +func (o *GetBlobSidecarsByBlockNumURL) StringFull(scheme, host string) string { + return o.Must(o.BuildFull(scheme, host)).String() +} diff --git a/restapi/operations/blob_syncer_api.go b/restapi/operations/blob_syncer_api.go new file mode 100644 index 0000000..32096d2 --- /dev/null +++ b/restapi/operations/blob_syncer_api.go @@ -0,0 +1,303 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package operations + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "fmt" + "net/http" + "strings" + + "github.com/go-openapi/errors" + "github.com/go-openapi/loads" + "github.com/go-openapi/runtime" + "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/runtime/security" + "github.com/go-openapi/spec" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" + + "github.com/bnb-chain/blob-syncer/restapi/operations/blob" +) + +// NewBlobSyncerAPI creates a new BlobSyncer instance +func NewBlobSyncerAPI(spec *loads.Document) *BlobSyncerAPI { + return &BlobSyncerAPI{ + handlers: make(map[string]map[string]http.Handler), + formats: strfmt.Default, + defaultConsumes: "application/json", + defaultProduces: "application/json", + customConsumers: make(map[string]runtime.Consumer), + customProducers: make(map[string]runtime.Producer), + PreServerShutdown: func() {}, + ServerShutdown: func() {}, + spec: spec, + useSwaggerUI: false, + ServeError: errors.ServeError, + BasicAuthenticator: security.BasicAuth, + APIKeyAuthenticator: security.APIKeyAuth, + BearerAuthenticator: security.BearerAuth, + + JSONConsumer: runtime.JSONConsumer(), + + JSONProducer: runtime.JSONProducer(), + + BlobGetBlobSidecarsByBlockNumHandler: blob.GetBlobSidecarsByBlockNumHandlerFunc(func(params blob.GetBlobSidecarsByBlockNumParams) middleware.Responder { + return middleware.NotImplemented("operation blob.GetBlobSidecarsByBlockNum has not yet been implemented") + }), + } +} + +/*BlobSyncerAPI API for handling blob query in the Blob Syncer. */ +type BlobSyncerAPI struct { + spec *loads.Document + context *middleware.Context + handlers map[string]map[string]http.Handler + formats strfmt.Registry + customConsumers map[string]runtime.Consumer + customProducers map[string]runtime.Producer + defaultConsumes string + defaultProduces string + Middleware func(middleware.Builder) http.Handler + useSwaggerUI bool + + // BasicAuthenticator generates a runtime.Authenticator from the supplied basic auth function. + // It has a default implementation in the security package, however you can replace it for your particular usage. + BasicAuthenticator func(security.UserPassAuthentication) runtime.Authenticator + + // APIKeyAuthenticator generates a runtime.Authenticator from the supplied token auth function. + // It has a default implementation in the security package, however you can replace it for your particular usage. + APIKeyAuthenticator func(string, string, security.TokenAuthentication) runtime.Authenticator + + // BearerAuthenticator generates a runtime.Authenticator from the supplied bearer token auth function. + // It has a default implementation in the security package, however you can replace it for your particular usage. + BearerAuthenticator func(string, security.ScopedTokenAuthentication) runtime.Authenticator + + // JSONConsumer registers a consumer for the following mime types: + // - application/json + JSONConsumer runtime.Consumer + + // JSONProducer registers a producer for the following mime types: + // - application/json + JSONProducer runtime.Producer + + // BlobGetBlobSidecarsByBlockNumHandler sets the operation handler for the get blob sidecars by block num operation + BlobGetBlobSidecarsByBlockNumHandler blob.GetBlobSidecarsByBlockNumHandler + + // ServeError is called when an error is received, there is a default handler + // but you can set your own with this + ServeError func(http.ResponseWriter, *http.Request, error) + + // PreServerShutdown is called before the HTTP(S) server is shutdown + // This allows for custom functions to get executed before the HTTP(S) server stops accepting traffic + PreServerShutdown func() + + // ServerShutdown is called when the HTTP(S) server is shut down and done + // handling all active connections and does not accept connections any more + ServerShutdown func() + + // Custom command line argument groups with their descriptions + CommandLineOptionsGroups []swag.CommandLineOptionsGroup + + // User defined logger function. + Logger func(string, ...interface{}) +} + +// UseRedoc for documentation at /docs +func (o *BlobSyncerAPI) UseRedoc() { + o.useSwaggerUI = false +} + +// UseSwaggerUI for documentation at /docs +func (o *BlobSyncerAPI) UseSwaggerUI() { + o.useSwaggerUI = true +} + +// SetDefaultProduces sets the default produces media type +func (o *BlobSyncerAPI) SetDefaultProduces(mediaType string) { + o.defaultProduces = mediaType +} + +// SetDefaultConsumes returns the default consumes media type +func (o *BlobSyncerAPI) SetDefaultConsumes(mediaType string) { + o.defaultConsumes = mediaType +} + +// SetSpec sets a spec that will be served for the clients. +func (o *BlobSyncerAPI) SetSpec(spec *loads.Document) { + o.spec = spec +} + +// DefaultProduces returns the default produces media type +func (o *BlobSyncerAPI) DefaultProduces() string { + return o.defaultProduces +} + +// DefaultConsumes returns the default consumes media type +func (o *BlobSyncerAPI) DefaultConsumes() string { + return o.defaultConsumes +} + +// Formats returns the registered string formats +func (o *BlobSyncerAPI) Formats() strfmt.Registry { + return o.formats +} + +// RegisterFormat registers a custom format validator +func (o *BlobSyncerAPI) RegisterFormat(name string, format strfmt.Format, validator strfmt.Validator) { + o.formats.Add(name, format, validator) +} + +// Validate validates the registrations in the BlobSyncerAPI +func (o *BlobSyncerAPI) Validate() error { + var unregistered []string + + if o.JSONConsumer == nil { + unregistered = append(unregistered, "JSONConsumer") + } + + if o.JSONProducer == nil { + unregistered = append(unregistered, "JSONProducer") + } + + if o.BlobGetBlobSidecarsByBlockNumHandler == nil { + unregistered = append(unregistered, "blob.GetBlobSidecarsByBlockNumHandler") + } + + if len(unregistered) > 0 { + return fmt.Errorf("missing registration: %s", strings.Join(unregistered, ", ")) + } + + return nil +} + +// ServeErrorFor gets a error handler for a given operation id +func (o *BlobSyncerAPI) ServeErrorFor(operationID string) func(http.ResponseWriter, *http.Request, error) { + return o.ServeError +} + +// AuthenticatorsFor gets the authenticators for the specified security schemes +func (o *BlobSyncerAPI) AuthenticatorsFor(schemes map[string]spec.SecurityScheme) map[string]runtime.Authenticator { + return nil +} + +// Authorizer returns the registered authorizer +func (o *BlobSyncerAPI) Authorizer() runtime.Authorizer { + return nil +} + +// ConsumersFor gets the consumers for the specified media types. +// MIME type parameters are ignored here. +func (o *BlobSyncerAPI) ConsumersFor(mediaTypes []string) map[string]runtime.Consumer { + result := make(map[string]runtime.Consumer, len(mediaTypes)) + for _, mt := range mediaTypes { + switch mt { + case "application/json": + result["application/json"] = o.JSONConsumer + } + + if c, ok := o.customConsumers[mt]; ok { + result[mt] = c + } + } + return result +} + +// ProducersFor gets the producers for the specified media types. +// MIME type parameters are ignored here. +func (o *BlobSyncerAPI) ProducersFor(mediaTypes []string) map[string]runtime.Producer { + result := make(map[string]runtime.Producer, len(mediaTypes)) + for _, mt := range mediaTypes { + switch mt { + case "application/json": + result["application/json"] = o.JSONProducer + } + + if p, ok := o.customProducers[mt]; ok { + result[mt] = p + } + } + return result +} + +// HandlerFor gets a http.Handler for the provided operation method and path +func (o *BlobSyncerAPI) HandlerFor(method, path string) (http.Handler, bool) { + if o.handlers == nil { + return nil, false + } + um := strings.ToUpper(method) + if _, ok := o.handlers[um]; !ok { + return nil, false + } + if path == "/" { + path = "" + } + h, ok := o.handlers[um][path] + return h, ok +} + +// Context returns the middleware context for the blob syncer API +func (o *BlobSyncerAPI) Context() *middleware.Context { + if o.context == nil { + o.context = middleware.NewRoutableContext(o.spec, o, nil) + } + + return o.context +} + +func (o *BlobSyncerAPI) initHandlerCache() { + o.Context() // don't care about the result, just that the initialization happened + if o.handlers == nil { + o.handlers = make(map[string]map[string]http.Handler) + } + + if o.handlers["GET"] == nil { + o.handlers["GET"] = make(map[string]http.Handler) + } + o.handlers["GET"]["/beacon/blob_sidecars/{blockNum}"] = blob.NewGetBlobSidecarsByBlockNum(o.context, o.BlobGetBlobSidecarsByBlockNumHandler) +} + +// Serve creates a http handler to serve the API over HTTP +// can be used directly in http.ListenAndServe(":8000", api.Serve(nil)) +func (o *BlobSyncerAPI) Serve(builder middleware.Builder) http.Handler { + o.Init() + + if o.Middleware != nil { + return o.Middleware(builder) + } + if o.useSwaggerUI { + return o.context.APIHandlerSwaggerUI(builder) + } + return o.context.APIHandler(builder) +} + +// Init allows you to just initialize the handler cache, you can then recompose the middleware as you see fit +func (o *BlobSyncerAPI) Init() { + if len(o.handlers) == 0 { + o.initHandlerCache() + } +} + +// RegisterConsumer allows you to add (or override) a consumer for a media type. +func (o *BlobSyncerAPI) RegisterConsumer(mediaType string, consumer runtime.Consumer) { + o.customConsumers[mediaType] = consumer +} + +// RegisterProducer allows you to add (or override) a producer for a media type. +func (o *BlobSyncerAPI) RegisterProducer(mediaType string, producer runtime.Producer) { + o.customProducers[mediaType] = producer +} + +// AddMiddlewareFor adds a http middleware to existing handler +func (o *BlobSyncerAPI) AddMiddlewareFor(method, path string, builder middleware.Builder) { + um := strings.ToUpper(method) + if path == "/" { + path = "" + } + o.Init() + if h, ok := o.handlers[um][path]; ok { + o.handlers[method][path] = builder(h) + } +} diff --git a/restapi/server.go b/restapi/server.go new file mode 100644 index 0000000..bc93767 --- /dev/null +++ b/restapi/server.go @@ -0,0 +1,507 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package restapi + +import ( + "context" + "crypto/tls" + "crypto/x509" + "errors" + "fmt" + "log" + "net" + "net/http" + "os" + "os/signal" + "strconv" + "sync" + "sync/atomic" + "syscall" + "time" + + "github.com/go-openapi/runtime/flagext" + "github.com/go-openapi/swag" + flags "github.com/jessevdk/go-flags" + "golang.org/x/net/netutil" + + "github.com/bnb-chain/blob-syncer/restapi/operations" +) + +const ( + schemeHTTP = "http" + schemeHTTPS = "https" + schemeUnix = "unix" +) + +var defaultSchemes []string + +func init() { + defaultSchemes = []string{ + schemeHTTP, + } +} + +// NewServer creates a new api blob syncer server but does not configure it +func NewServer(api *operations.BlobSyncerAPI) *Server { + s := new(Server) + + s.shutdown = make(chan struct{}) + s.api = api + s.interrupt = make(chan os.Signal, 1) + return s +} + +// ConfigureAPI configures the API and handlers. +func (s *Server) ConfigureAPI() { + if s.api != nil { + s.handler = configureAPI(s.api) + } +} + +// ConfigureFlags configures the additional flags defined by the handlers. Needs to be called before the parser.Parse +func (s *Server) ConfigureFlags() { + if s.api != nil { + configureFlags(s.api) + } +} + +// Server for the blob syncer API +type Server struct { + EnabledListeners []string `long:"scheme" description:"the listeners to enable, this can be repeated and defaults to the schemes in the swagger spec"` + CleanupTimeout time.Duration `long:"cleanup-timeout" description:"grace period for which to wait before killing idle connections" default:"10s"` + GracefulTimeout time.Duration `long:"graceful-timeout" description:"grace period for which to wait before shutting down the server" default:"15s"` + MaxHeaderSize flagext.ByteSize `long:"max-header-size" description:"controls the maximum number of bytes the server will read parsing the request header's keys and values, including the request line. It does not limit the size of the request body." default:"1MiB"` + + SocketPath flags.Filename `long:"socket-path" description:"the unix socket to listen on" default:"/var/run/blob-syncer.sock"` + domainSocketL net.Listener + + Host string `long:"host" description:"the IP to listen on" default:"localhost" env:"HOST"` + Port int `long:"port" description:"the port to listen on for insecure connections, defaults to a random value" env:"PORT"` + ListenLimit int `long:"listen-limit" description:"limit the number of outstanding requests"` + KeepAlive time.Duration `long:"keep-alive" description:"sets the TCP keep-alive timeouts on accepted connections. It prunes dead TCP connections ( e.g. closing laptop mid-download)" default:"3m"` + ReadTimeout time.Duration `long:"read-timeout" description:"maximum duration before timing out read of the request" default:"30s"` + WriteTimeout time.Duration `long:"write-timeout" description:"maximum duration before timing out write of the response" default:"60s"` + httpServerL net.Listener + + TLSHost string `long:"tls-host" description:"the IP to listen on for tls, when not specified it's the same as --host" env:"TLS_HOST"` + TLSPort int `long:"tls-port" description:"the port to listen on for secure connections, defaults to a random value" env:"TLS_PORT"` + TLSCertificate flags.Filename `long:"tls-certificate" description:"the certificate to use for secure connections" env:"TLS_CERTIFICATE"` + TLSCertificateKey flags.Filename `long:"tls-key" description:"the private key to use for secure connections" env:"TLS_PRIVATE_KEY"` + TLSCACertificate flags.Filename `long:"tls-ca" description:"the certificate authority file to be used with mutual tls auth" env:"TLS_CA_CERTIFICATE"` + TLSListenLimit int `long:"tls-listen-limit" description:"limit the number of outstanding requests"` + TLSKeepAlive time.Duration `long:"tls-keep-alive" description:"sets the TCP keep-alive timeouts on accepted connections. It prunes dead TCP connections ( e.g. closing laptop mid-download)"` + TLSReadTimeout time.Duration `long:"tls-read-timeout" description:"maximum duration before timing out read of the request"` + TLSWriteTimeout time.Duration `long:"tls-write-timeout" description:"maximum duration before timing out write of the response"` + httpsServerL net.Listener + + api *operations.BlobSyncerAPI + handler http.Handler + hasListeners bool + shutdown chan struct{} + shuttingDown int32 + interrupted bool + interrupt chan os.Signal +} + +// Logf logs message either via defined user logger or via system one if no user logger is defined. +func (s *Server) Logf(f string, args ...interface{}) { + if s.api != nil && s.api.Logger != nil { + s.api.Logger(f, args...) + } else { + log.Printf(f, args...) + } +} + +// Fatalf logs message either via defined user logger or via system one if no user logger is defined. +// Exits with non-zero status after printing +func (s *Server) Fatalf(f string, args ...interface{}) { + if s.api != nil && s.api.Logger != nil { + s.api.Logger(f, args...) + os.Exit(1) + } else { + log.Fatalf(f, args...) + } +} + +// SetAPI configures the server with the specified API. Needs to be called before Serve +func (s *Server) SetAPI(api *operations.BlobSyncerAPI) { + if api == nil { + s.api = nil + s.handler = nil + return + } + + s.api = api + s.handler = configureAPI(api) +} + +func (s *Server) hasScheme(scheme string) bool { + schemes := s.EnabledListeners + if len(schemes) == 0 { + schemes = defaultSchemes + } + + for _, v := range schemes { + if v == scheme { + return true + } + } + return false +} + +// Serve the api +func (s *Server) Serve() (err error) { + if !s.hasListeners { + if err = s.Listen(); err != nil { + return err + } + } + + // set default handler, if none is set + if s.handler == nil { + if s.api == nil { + return errors.New("can't create the default handler, as no api is set") + } + + s.SetHandler(s.api.Serve(nil)) + } + + wg := new(sync.WaitGroup) + once := new(sync.Once) + signalNotify(s.interrupt) + go handleInterrupt(once, s) + + servers := []*http.Server{} + + if s.hasScheme(schemeUnix) { + domainSocket := new(http.Server) + domainSocket.MaxHeaderBytes = int(s.MaxHeaderSize) + domainSocket.Handler = s.handler + if int64(s.CleanupTimeout) > 0 { + domainSocket.IdleTimeout = s.CleanupTimeout + } + + configureServer(domainSocket, "unix", string(s.SocketPath)) + + servers = append(servers, domainSocket) + wg.Add(1) + s.Logf("Serving blob syncer at unix://%s", s.SocketPath) + go func(l net.Listener) { + defer wg.Done() + if err := domainSocket.Serve(l); err != nil && err != http.ErrServerClosed { + s.Fatalf("%v", err) + } + s.Logf("Stopped serving blob syncer at unix://%s", s.SocketPath) + }(s.domainSocketL) + } + + if s.hasScheme(schemeHTTP) { + httpServer := new(http.Server) + httpServer.MaxHeaderBytes = int(s.MaxHeaderSize) + httpServer.ReadTimeout = s.ReadTimeout + httpServer.WriteTimeout = s.WriteTimeout + httpServer.SetKeepAlivesEnabled(int64(s.KeepAlive) > 0) + if s.ListenLimit > 0 { + s.httpServerL = netutil.LimitListener(s.httpServerL, s.ListenLimit) + } + + if int64(s.CleanupTimeout) > 0 { + httpServer.IdleTimeout = s.CleanupTimeout + } + + httpServer.Handler = s.handler + + configureServer(httpServer, "http", s.httpServerL.Addr().String()) + + servers = append(servers, httpServer) + wg.Add(1) + s.Logf("Serving blob syncer at http://%s", s.httpServerL.Addr()) + go func(l net.Listener) { + defer wg.Done() + if err := httpServer.Serve(l); err != nil && err != http.ErrServerClosed { + s.Fatalf("%v", err) + } + s.Logf("Stopped serving blob syncer at http://%s", l.Addr()) + }(s.httpServerL) + } + + if s.hasScheme(schemeHTTPS) { + httpsServer := new(http.Server) + httpsServer.MaxHeaderBytes = int(s.MaxHeaderSize) + httpsServer.ReadTimeout = s.TLSReadTimeout + httpsServer.WriteTimeout = s.TLSWriteTimeout + httpsServer.SetKeepAlivesEnabled(int64(s.TLSKeepAlive) > 0) + if s.TLSListenLimit > 0 { + s.httpsServerL = netutil.LimitListener(s.httpsServerL, s.TLSListenLimit) + } + if int64(s.CleanupTimeout) > 0 { + httpsServer.IdleTimeout = s.CleanupTimeout + } + httpsServer.Handler = s.handler + + // Inspired by https://blog.bracebin.com/achieving-perfect-ssl-labs-score-with-go + httpsServer.TLSConfig = &tls.Config{ + // Causes servers to use Go's default ciphersuite preferences, + // which are tuned to avoid attacks. Does nothing on clients. + PreferServerCipherSuites: true, + // Only use curves which have assembly implementations + // https://github.com/golang/go/tree/master/src/crypto/elliptic + CurvePreferences: []tls.CurveID{tls.CurveP256}, + // Use modern tls mode https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility + NextProtos: []string{"h2", "http/1.1"}, + // https://www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet#Rule_-_Only_Support_Strong_Protocols + MinVersion: tls.VersionTLS12, + // These ciphersuites support Forward Secrecy: https://en.wikipedia.org/wiki/Forward_secrecy + CipherSuites: []uint16{ + tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, + tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, + tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, + tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, + }, + } + + // build standard config from server options + if s.TLSCertificate != "" && s.TLSCertificateKey != "" { + httpsServer.TLSConfig.Certificates = make([]tls.Certificate, 1) + httpsServer.TLSConfig.Certificates[0], err = tls.LoadX509KeyPair(string(s.TLSCertificate), string(s.TLSCertificateKey)) + if err != nil { + return err + } + } + + if s.TLSCACertificate != "" { + // include specified CA certificate + caCert, caCertErr := os.ReadFile(string(s.TLSCACertificate)) + if caCertErr != nil { + return caCertErr + } + caCertPool := x509.NewCertPool() + ok := caCertPool.AppendCertsFromPEM(caCert) + if !ok { + return fmt.Errorf("cannot parse CA certificate") + } + httpsServer.TLSConfig.ClientCAs = caCertPool + httpsServer.TLSConfig.ClientAuth = tls.RequireAndVerifyClientCert + } + + // call custom TLS configurator + configureTLS(httpsServer.TLSConfig) + + if len(httpsServer.TLSConfig.Certificates) == 0 && httpsServer.TLSConfig.GetCertificate == nil { + // after standard and custom config are passed, this ends up with no certificate + if s.TLSCertificate == "" { + if s.TLSCertificateKey == "" { + s.Fatalf("the required flags `--tls-certificate` and `--tls-key` were not specified") + } + s.Fatalf("the required flag `--tls-certificate` was not specified") + } + if s.TLSCertificateKey == "" { + s.Fatalf("the required flag `--tls-key` was not specified") + } + // this happens with a wrong custom TLS configurator + s.Fatalf("no certificate was configured for TLS") + } + + configureServer(httpsServer, "https", s.httpsServerL.Addr().String()) + + servers = append(servers, httpsServer) + wg.Add(1) + s.Logf("Serving blob syncer at https://%s", s.httpsServerL.Addr()) + go func(l net.Listener) { + defer wg.Done() + if err := httpsServer.Serve(l); err != nil && err != http.ErrServerClosed { + s.Fatalf("%v", err) + } + s.Logf("Stopped serving blob syncer at https://%s", l.Addr()) + }(tls.NewListener(s.httpsServerL, httpsServer.TLSConfig)) + } + + wg.Add(1) + go s.handleShutdown(wg, &servers) + + wg.Wait() + return nil +} + +// Listen creates the listeners for the server +func (s *Server) Listen() error { + if s.hasListeners { // already done this + return nil + } + + if s.hasScheme(schemeHTTPS) { + // Use http host if https host wasn't defined + if s.TLSHost == "" { + s.TLSHost = s.Host + } + // Use http listen limit if https listen limit wasn't defined + if s.TLSListenLimit == 0 { + s.TLSListenLimit = s.ListenLimit + } + // Use http tcp keep alive if https tcp keep alive wasn't defined + if int64(s.TLSKeepAlive) == 0 { + s.TLSKeepAlive = s.KeepAlive + } + // Use http read timeout if https read timeout wasn't defined + if int64(s.TLSReadTimeout) == 0 { + s.TLSReadTimeout = s.ReadTimeout + } + // Use http write timeout if https write timeout wasn't defined + if int64(s.TLSWriteTimeout) == 0 { + s.TLSWriteTimeout = s.WriteTimeout + } + } + + if s.hasScheme(schemeUnix) { + domSockListener, err := net.Listen("unix", string(s.SocketPath)) + if err != nil { + return err + } + s.domainSocketL = domSockListener + } + + if s.hasScheme(schemeHTTP) { + listener, err := net.Listen("tcp", net.JoinHostPort(s.Host, strconv.Itoa(s.Port))) + if err != nil { + return err + } + + h, p, err := swag.SplitHostPort(listener.Addr().String()) + if err != nil { + return err + } + s.Host = h + s.Port = p + s.httpServerL = listener + } + + if s.hasScheme(schemeHTTPS) { + tlsListener, err := net.Listen("tcp", net.JoinHostPort(s.TLSHost, strconv.Itoa(s.TLSPort))) + if err != nil { + return err + } + + sh, sp, err := swag.SplitHostPort(tlsListener.Addr().String()) + if err != nil { + return err + } + s.TLSHost = sh + s.TLSPort = sp + s.httpsServerL = tlsListener + } + + s.hasListeners = true + return nil +} + +// Shutdown server and clean up resources +func (s *Server) Shutdown() error { + if atomic.CompareAndSwapInt32(&s.shuttingDown, 0, 1) { + close(s.shutdown) + } + return nil +} + +func (s *Server) handleShutdown(wg *sync.WaitGroup, serversPtr *[]*http.Server) { + // wg.Done must occur last, after s.api.ServerShutdown() + // (to preserve old behaviour) + defer wg.Done() + + <-s.shutdown + + servers := *serversPtr + + ctx, cancel := context.WithTimeout(context.TODO(), s.GracefulTimeout) + defer cancel() + + // first execute the pre-shutdown hook + s.api.PreServerShutdown() + + shutdownChan := make(chan bool) + for i := range servers { + server := servers[i] + go func() { + var success bool + defer func() { + shutdownChan <- success + }() + if err := server.Shutdown(ctx); err != nil { + // Error from closing listeners, or context timeout: + s.Logf("HTTP server Shutdown: %v", err) + } else { + success = true + } + }() + } + + // Wait until all listeners have successfully shut down before calling ServerShutdown + success := true + for range servers { + success = success && <-shutdownChan + } + if success { + s.api.ServerShutdown() + } +} + +// GetHandler returns a handler useful for testing +func (s *Server) GetHandler() http.Handler { + return s.handler +} + +// SetHandler allows for setting a http handler on this server +func (s *Server) SetHandler(handler http.Handler) { + s.handler = handler +} + +// UnixListener returns the domain socket listener +func (s *Server) UnixListener() (net.Listener, error) { + if !s.hasListeners { + if err := s.Listen(); err != nil { + return nil, err + } + } + return s.domainSocketL, nil +} + +// HTTPListener returns the http listener +func (s *Server) HTTPListener() (net.Listener, error) { + if !s.hasListeners { + if err := s.Listen(); err != nil { + return nil, err + } + } + return s.httpServerL, nil +} + +// TLSListener returns the https listener +func (s *Server) TLSListener() (net.Listener, error) { + if !s.hasListeners { + if err := s.Listen(); err != nil { + return nil, err + } + } + return s.httpsServerL, nil +} + +func handleInterrupt(once *sync.Once, s *Server) { + once.Do(func() { + for range s.interrupt { + if s.interrupted { + s.Logf("Server already shutting down") + continue + } + s.interrupted = true + s.Logf("Shutting down... ") + if err := s.Shutdown(); err != nil { + s.Logf("HTTP server Shutdown: %v", err) + } + } + }) +} + +func signalNotify(interrupt chan<- os.Signal) { + signal.Notify(interrupt, syscall.SIGINT, syscall.SIGTERM) +} diff --git a/service/blob.go b/service/blob.go new file mode 100644 index 0000000..f15d886 --- /dev/null +++ b/service/blob.go @@ -0,0 +1,62 @@ +package service + +import ( + "github.com/bnb-chain/blob-syncer/config" + "github.com/bnb-chain/blob-syncer/db" + "github.com/bnb-chain/blob-syncer/models" + "github.com/bnb-chain/blob-syncer/syncer" + lru "github.com/hashicorp/golang-lru" +) + +const cacheBlock = 4096 + +type Blob interface { + GetBlobSidecars(blockNum int64) ([]*models.Sidecar, error) +} + +type BlobService struct { + blobDB db.BlobDao + bundleClient *syncer.BundleClient + lru *lru.Cache + config *config.Config +} + +func NewBlobService(blobDB db.BlobDao, bundleClient *syncer.BundleClient, config *config.Config) Blob { + //bundleClient, err := syncer.NewBundleClient(config.SyncerConfig.BundleServiceAddrs[0], time.Second*3, config.SyncerConfig.PrivateKey) + //if err != nil { + // panic(err) + //} + cache, _ := lru.New(cacheBlock) + + return &BlobService{ + blobDB: blobDB, + bundleClient: bundleClient, + lru: cache, + config: config, + } +} + +func (b BlobService) GetBlobSidecars(blockNum int64) ([]*models.Sidecar, error) { + blobs, found := b.lru.Get(blockNum) + if found { + return blobs.([]*models.Sidecar), nil + } + blobsMeta, err := b.blobDB.GetBlobs(blockNum) + if err != nil { + return nil, err + } + sideCars := make([]*models.Sidecar, 0) + for _, meta := range blobsMeta { + object, err := b.bundleClient.GetObject(b.config.SyncerConfig.BucketName, meta.BundleName, meta.Name) + if err != nil { + return nil, err + } + sideCars = append(sideCars, + &models.Sidecar{ + Blob: object, + Index: int64(meta.Index), + }) + } + b.lru.Add(blockNum, sideCars) + return sideCars, nil +} diff --git a/service/error.go b/service/error.go new file mode 100644 index 0000000..a60cad2 --- /dev/null +++ b/service/error.go @@ -0,0 +1,57 @@ +package service + +import ( + "fmt" +) + +// Verify Interface Compliance +var _ error = (*Err)(nil) + +// Err defines service errors. +type Err struct { + Code int64 `json:"code"` + Message string `json:"error"` +} + +func (e Err) Enrich(message string) Err { + return Err{ + Code: e.Code, + Message: fmt.Sprintf("%s: %s", e.Message, message), + } +} + +func (e Err) Error() string { + return fmt.Sprintf("%d: %s", e.Code, e.Message) +} + +var ( + // NoErr - success + NoErr = Err{Code: 2000} + + //CollectionFailCreateErr - fail to create collection + CollectionFailCreateErr = Err{3101, "fail to create collection"} + CollectionFailGetErr = Err{3102, "fail to get collection"} + CollectionNotExistErr = Err{3103, "collection not exist"} + CollectionAlreadyExistErr = Err{3104, "collection already exist"} + CollectionInvalidTimestamp = Err{3105, "collection invalid timestamp"} + CollectionInvalidCategory = Err{3106, "invalid category"} + CollectionMismatch = Err{3107, "input does not match Greenfield data"} + + //DataFailCreateErr - fail to create data + DataFailCreateErr = Err{3201, "fail to create data"} // Not used now, too general + DataFailGetErr = Err{3202, "fail to get data"} // Not used now, too general + DataNotExistErr = Err{3203, "data not exist"} + DataAlreadyExistErr = Err{3204, "data already exist"} + DataInvalidTimestamp = Err{3205, "nft tx expired/invalid timestamp"} + + MediaInvalidFile = Err{3401, "invalid media file"} + MediaFailToSave = Err{3402, "cannot save media"} + MediaUnsupportedType = Err{3403, "unsupported media type"} + MediaNotExist = Err{3404, "media not exists"} + + //NotFoundErr - not found error + NotFoundErr = Err{Code: 4000, Message: "cannot find"} + + //InternalErr -internal error + InternalErr = Err{Code: 5000, Message: "internal error"} +) diff --git a/service/init.go b/service/init.go new file mode 100644 index 0000000..8fd7d5c --- /dev/null +++ b/service/init.go @@ -0,0 +1,3 @@ +package service + +var BlobSvc Blob diff --git a/swagger.yaml b/swagger.yaml new file mode 100644 index 0000000..1838238 --- /dev/null +++ b/swagger.yaml @@ -0,0 +1,88 @@ +swagger: '2.0' +info: + version: 1.0.0 + title: Blob Syncer Service API + description: API for handling blob query in the Blob Syncer. +host: 'blob-syncer' +basePath: "/eth/v1" +schemes: + - http + +paths: + /beacon/blob_sidecars/{blockNum}: + get: + tags: + - "blob" + summary: "Get blob sidecars by block num" + operationId: "getBlobSidecarsByBlockNum" + produces: + - "application/json" + parameters: + - name: "blockNum" + in: "path" + description: "blockNum" + required: true + type: "integer" + format: "int64" + minLength: 1 + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/GetBlobSideCarsResponse" + "400": + description: 'Bad Request' + schema: + $ref: "#/definitions/Error" + "500": + description: 'internal server error' + schema: + $ref: "#/definitions/Error" + +definitions: + GetBlobSideCarsResponse: + type: object + properties: + code: + type: integer + description: "code defined by api,not equal to http code" + example: 2000 + message: + type: string + description: "error message if there is error" + example: "signature invalid" + data: + type: object + description: "actual data for request" + properties: + sidecar: + type: array + items: + $ref: "#/definitions/Sidecar" + Sidecar: + type: object + properties: + index: + type: integer + format: int + description: "index" + example: 1 + blob: + type: string + description: "name" + example: "Art" + + Error: + type: object + properties: + code: + x-omitempty: false + type: integer + format: int64 + description: "HTTP error code" + example: "400/500" + message: + x-omitempty: false + type: string + description: "Error message" + example: "Bad request/Internal server error" diff --git a/syncer/blob_syncer.go b/syncer/blob_syncer.go index 096370d..6d01e2d 100644 --- a/syncer/blob_syncer.go +++ b/syncer/blob_syncer.go @@ -22,7 +22,7 @@ import ( ) const ( - CreateBundleBlockInterval = 100 + CreateBundleBlockInterval = 10 BundleStatusBundling = 0 BundleStatusFinalized = 1 @@ -123,10 +123,12 @@ func (l *BlobSyncer) process() error { if err != nil { return err } + bundleName := l.bundleDetail.name + // create a new bundle if nextHeight == l.bundleDetail.startHeight { if err := l.createBundle(); err != nil { - logging.Logger.Errorf("failed to create bundle, bundle=%s, err=%s", l.bundleDetail.name, err.Error()) + logging.Logger.Errorf("failed to create bundle, bundle=%s, err=%s", bundleName, err.Error()) return err } err := l.uploadBlobs(nextHeight, sideCars) @@ -138,22 +140,23 @@ func (l *BlobSyncer) process() error { if err != nil { return err } - if err = l.finalizeBundle(l.bundleDetail.name); err != nil { + if err = l.finalizeBundle(bundleName); err != nil { if strings.Contains(err.Error(), "expired") { - err = l.bundleClient.DeleteBundle(l.bundleDetail.name, l.getBucketName()) + err = l.bundleClient.DeleteBundle(bundleName, l.getBucketName()) if err != nil { - logging.Logger.Infof("failed to delete bundle, bundleName=%s, err=%s", l.bundleDetail.name, err.Error()) + logging.Logger.Infof("failed to delete bundle, bundleName=%s, err=%s", bundleName, err.Error()) return err } - err = l.reProcessBundleAndFinalize(l.bundleDetail.name) + err = l.reProcessBundleAndFinalize(bundleName) if err != nil { - logging.Logger.Infof("failed to re-process bundle, bundleName=%s, err=%s", l.bundleDetail.name, err.Error()) + logging.Logger.Infof("failed to re-process bundle, bundleName=%s, err=%s", bundleName, err.Error()) return err } } - return fmt.Errorf("failed to finalize bundle, bundle=%s, err=%s", l.bundleDetail.name, err.Error()) + return fmt.Errorf("failed to finalize bundle, bundle=%s, err=%s", bundleName, err.Error()) } - logging.Logger.Infof("finalized bundle, bundle_name=%s, bucket_name=%s\n", l.bundleDetail.name, l.getBucketName()) + logging.Logger.Infof("finalized bundle, bundle_name=%s, bucket_name=%s\n", bundleName, l.getBucketName()) + // init next bundle startHeight := nextHeight + 1 endHeight := nextHeight + l.getBlockInterval() @@ -169,7 +172,7 @@ func (l *BlobSyncer) process() error { } } - blockToSave, blobToSave, err := l.ToBlockAndBlobs(block, sideCars, nextHeight) + blockToSave, blobToSave, err := l.ToBlockAndBlobs(block, sideCars, nextHeight, bundleName) if err != nil { return err } @@ -343,7 +346,7 @@ func (l *BlobSyncer) LoadProgressAndResume(nextHeight uint64) error { return nil } -func (l *BlobSyncer) ToBlockAndBlobs(blockResp *structs.GetBlockV2Response, blobs []*structs.Sidecar, height uint64) (*db.Block, []*db.Blob, error) { +func (l *BlobSyncer) ToBlockAndBlobs(blockResp *structs.GetBlockV2Response, blobs []*structs.Sidecar, height uint64, bundleName string) (*db.Block, []*db.Blob, error) { var blockReturn *db.Block blobsReturn := make([]*db.Blob, 0) @@ -379,7 +382,7 @@ func (l *BlobSyncer) ToBlockAndBlobs(blockResp *structs.GetBlockV2Response, blob Name: types.GetBlobName(height, uint64(index)), Height: height, Index: index, - BundleName: l.bundleDetail.name, + BundleName: bundleName, } blobsReturn = append(blobsReturn, b) } diff --git a/syncer/bundle_client_test.go b/syncer/bundle_client_test.go index 0581a6e..ee1442f 100644 --- a/syncer/bundle_client_test.go +++ b/syncer/bundle_client_test.go @@ -64,7 +64,7 @@ func TestDeleteFinalizingBundle(t *testing.T) { //if err != nil { // panic(err) //} - err = bundleClient.DeleteBundle("blobs_s8765900_e8765999", "bsc-blobs") + err = bundleClient.DeleteBundle("blobs_s8775478_e8775577", "bsc-blobs") // delete a bundle will also seal it onchain... if err != nil { panic(err) }