From b0337f38cdf5b52a4ba244c198834a598fcce037 Mon Sep 17 00:00:00 2001 From: cte Date: Thu, 24 Apr 2025 15:03:11 -0700 Subject: [PATCH 1/5] Allow prompt caching to be enabled / disabled for models on OpenRouter --- .../__tests__/fixtures/openrouter-models.json | 6 +-- .../fetchers/__tests__/openrouter.test.ts | 25 +++++++++ src/api/providers/fetchers/openrouter.ts | 53 ++++++++++--------- src/shared/api.ts | 27 ++++++++-- 4 files changed, 79 insertions(+), 32 deletions(-) diff --git a/src/api/providers/fetchers/__tests__/fixtures/openrouter-models.json b/src/api/providers/fetchers/__tests__/fixtures/openrouter-models.json index 35577ac0fef..b7f5b773e04 100644 --- a/src/api/providers/fetchers/__tests__/fixtures/openrouter-models.json +++ b/src/api/providers/fetchers/__tests__/fixtures/openrouter-models.json @@ -6,16 +6,16 @@ "body": "", "status": 200, "response": [ - "038a3f8c484dea01d0081d3ee77d95aafd9fae5d7849aac540480ce28fa4256bb52665456fd22bb9093480fe1accc0d30d06fb051fae3fa5fbc5fefffbd3de30963d7187584d8a729f7b4ef1a878864254980ac9762159b3563cf373eed5b346923d2bb243f2a021304c9da9a02054d4b4f684e843d1a44e5319825065a5222cbaf46554c68c7edc1e8a9586b49c023a3197f9eb6cde0890998a6968d66c5fb9e901512400dafe1efc25aa51315afcfa25e23a5a443d57c18b6ff4ac4736b598902d9a4014c591c39ea2459423fce12d60b3bc868b07b8cfe0a40944a7511ccdb37c6daaa345362b27d97999a5691cd533e0ffb40665efa245b4595e9b8b07739f010b200c5ed4ccbf3c4b35cc70fd4e700abe810ba2e181e8d5dc6750845a730d554e95807c20b0bc0625ec413d703f04bfa30f2dd2fb9aecb7afff2d30edc462bc234722e01d8c963bc11e616b7df54a35a81fb812a8b9eb770bb90e5dc5ae055601c186f40843f00d5b4a6035b255f00ee651afc36afa790d14efd8b5d04cff4f0395bd8b8115d829b5019504b22c7d056d8d2056dd898fa31d4d010f6f1fa14645216db8625731495fbbf0d50487d61ea11a032ad5d0f67cd54afc76b4419dd7a0e5d6f5e414a40fd9041e45f2d54020457602a2c1bb36b4f9182a5f3fee4557c3344deb36e2ed8e5d0b150e0ddfef6192584cf1e8a4378d5d0b1abf11f00d0cc1f7838aa4ef9c40a2812ba51ad8c17d963cbb671715ec09213a484664730d517519f00e3a0c3df4acdc4a752ed892abba1ec3ab045c37951103b8aecaf703292bef08aa80db2c5055575575d65a3b9a0615e5552a323b45c6302cd2800dc17d66b2d96c0aec40fbce053d69e0aaf2b2c136ee947c1a29300543aaee3a2f0958c2576c0938e02dcd680be60b61d29b063c6a3438b50242d31c176b7ce829c0c65f42b907c54a958e81fa358905208d872c34d3162d09a310542824315405f683aad9b5d071db19517c2581daf751e1f333561da080a5166d0c3dd55ca18dc107c051bdf3bd1f05ca6ec84b12c5d1a04c3ee84bc9261b8816d9b49897691c05f3b3102dbe44bdafd1b21ea345a47450f3f74a078de288dd30eacb278a98245afcbabf94d11fe3c88f7a5854fd2b39fe4c215a443a876e4a11079f81173d0e142da29a6810a25713b2e8cf713404aed8b5d1e24b1431bba245940e4a4f3f5842a4b2348aa3402525988ff4738f2d3defddd3f6655a397332aa18bdc423bc59fee738523fbca45c87162dbe086c4a8f879750782f83b7ac440b375a1b472c2fbdaf49c75789160d5aa13fc7d140e1259c435e2cf7acdf69ff738cdc1f60eb7d6be9aca59e1d9b3c999821788375d7a0bd490b934f40dcbbfa426a0157eb79204f26701b3cdcfe71e1f8ae96e77999a753d7f7d32cd065a0e072a2a8647c63b4238301a70984786a40afd6234eba2a62914ebe0898d6291593536eb8d25b55dfdeaf9bc0b7afffa71dbb5776edb7afff0f5a0572b8b5805e0f85c28f436901c940f063dba510434960cfdac17f966a280434ae8e016873e31b46074260270d13395a4b00e1360aa81f8c320524036cb70e9620cc9955f941341c44cd60b12218bcb0726a8240af8360bd59067208b5fdfd30b61e431d43a0c652a5ec5a20ad75d004921ac3236a206948a1ab61f2c0960e682fbbca0a7fd9d2723e994dd7de773a3442bd6765bbe2e2a8614b304031b0717422bd48a0fbc5499aa6699a2903c9804100ef8e3183822b2a49d34936050406bb75545875f41208eb40c4e9541dad0f9d997d602524e13191e47876a6934931597fddb41bebfeacb5bdf99c9922dfd2bf6f8ec7ef9f2e360bb85a6fe0970c8a7cb5dbd5f23c2fb372bedcd57a637ec94c91af4c5a66e5b5c6699dc8d12282735ead37a63445be8a61cbbdaed9f80035d18012a56863b0be7d4251bcb526b3781e22a2340f0724f8566b588693001d945c1d00dd24d6b8223d611a9dfbf6f5dfcaf9e9437935765b0e5dcd26ae3520873d0b81be79263d6ffdf6f5df58a90b09280efa07441830a234005bd11bdf0f184829b47eca16850441487a5c0cbf6430f9f2f5ed11b6de8b0a5b038581824c1a0349384607c1d91e2d190025534c514a376e16a8c074c31a63f716a54160c7c8f76ac12c01661eeb9b86029dcb54bec3a2bec607a84176a1f1a107a5070743e231d40fca3d7f4e23e25178d4aad89253ae60efc36b63fd3e5120e0ec2009b2745e90fad339d931c2cf787f731ac30f0fef6f40bdb750a1b54c778734ecc8b4f60748b3cf1d2934dc8e816c161a1f4018573bbbf13c3981eb4a4b7050cb2a1412286cb98c5d0b359531360d95e2a31a119d3eacba28f0ce50a84cb3fe998a7c369daf2ef8bd76142284ddc62e46589beea090713fcad5d8cbd54b4dcfb349837285ee445bdbee7a276f3a7624641606c6f94ec10fe44cab89c5cd64389643898ea97c4de02eb08a2f77280294accc881e2d4151f63690557e6eef209b3c427b9ab36d675c4b64f418ee56643ac2ddd16e85b5bbdc1e059a3168470102351aa66abf0e72f264a1248640ff44d6166b6310f7aa223e5bb66d9e0e1559d4a3d15f73b86c30060cca0d562a0dd0ca481192d48380388899dc64762d767b153c030b86ab87abdb47537a86284e80f20f85498bbcb43855a9ffd196ee6d674a9e9842ed3874bb82e534d058946e9bdc6a3ab5b716a5dbbeae59399dcea80b721eed0f9bbdf63ebc763e887a77c4c041e006da4cc69424a8205a65861d3c47a9fe5bf11c195566043aad29ab2ef4d558bdf1b37b76375e69511265d83b47c453590eec40f7de4b989505d01232d3b2de199e426e2fa3d72646c3bb3811097792722d8d95a51dbdaafb32f8de11a0d75f29ef2881eb068e7eac403ecc33f6a872183be0c46f5cae1dc173b4d82df91c818c4dc387d3189c952194c1b9161d06cb15ab3d02ee3c334d98771228f21990d0b28f1e2a3131360a3839a74e5811efa83b5e3c1c52c5fe42d5792f4747708d4f16aebfb6aa0bea9eda910376d528aeae8edb4e72d4830646f634765516c1acf618833208ef02c61a039dc497e9f1106af031b1b75a9e2398194f2106147035fb5b4fe3bcda11d4be1a7b724ae63ee1934e7590c5d9991fc8053f2a8504f9acf6959c8d4286c8d59c256cd4df9edff478783a681a1f8cb9f7e37c6a2813a6fa31886f9d7fcf499a1d7a9a4eb7ff40e9343bcf93804d6cf38ee42a8a5ba5e4a0034e94e197a39ca60cbf4314933f73f8811cf2992fcd7a4ac76d9708acfc7e20b7bc5e802f61c38ee1fb4fd836c02ecef332cf72fa761d74ba16daba9215ec3d703d28f0ebc70ef0c793b3e0f8a7402a22ab7969e8490a84b237ba3b6e3bcee5e81d708a6cd8a64ab5c5d04fa3199dde14e7de287624aca741d1182a2f6a6a4353af3e4dca37a7ec656444d019ae2fc4df081c0de3b93227607e88c7111ebab651f239ed6c6147ae2e0f81f1f63a4d7593ddab0cef08da5832dff27a730927e7e7c9e477822cbe3d6ae7dd6900bb1e7ebc3496ba177b03a88b946d84bcecf96aaa48c407f08550fbd0d5d0e015bd4005525875668457f85d27fb9e9cabba3077fc9e60c91eada500c29f291e45c3e8d0f19655e8b4329acad9c1c3e3e5c63361577fc1e9d2fef0e1849236896183da7d60518c61b3d93c9dc6322a23a09ad5f99d65815f302d688fb0276b8d8cacb4015e1e03b55fc5302a48450e037b8196cf44b66d36f111fc4b9e7431550576c30f4be0b143f72abfc5685181f862b92f2171f60a25f0ed78f07310fc30816534bc42075587ece24987c47ead51c88dc394669ab73bf2be428ea441dd3d3b76be9ec3e2f1dbd77f6b4f4c8e1d34e4a5069674d04147257f8d9763e19687f26a7b71e8f09664d9eab928cb785ea60155f9ebc8e672e5831d763e9bb87559e449e87f907dc4713c721a46a01fad80f7510a503f70514ee87b9b2fd015aa940a7ecc4d8207154db9df5368466bd64981c286018a936b910a2038daa307a9c687e0dc8f23f2092a92e6181ba08ca00ad67bd18a07425b50e1040f15738516f6a1f9a31b9c0af6b27766d7976018324f42ec38824189b434756158b4f102fb51c72bc58de0f0843a85053629a583b368ab6998911ce62401b95b39ac7e7eff0e982b317627d2e0fe9b218107521807e828d002623396b785678aaa3f3fd83b69ae493e46f0f16b319b7efc94c83f28001a5314865588c09e9ff4bcfc81d6b0e8fb28f1d09ed2b1a0413ebbf075dce5c65aecb1480a334b39ef791e3a1684e5f5027ebf793ee4b0b6d823144901b3740524f8896793723e110625e90eb2564584cbfaf81fd00f55876ab0a1e348ebe804e2e8e65cc9f21abc830d296a4b308cbe19a5ccca5cc7cd10de2286e20d1af4f16792de297a7da4d65d06cd36e74a7c3d6e8f02172e2210544bc9e011f1115d1ea16528e9f900be51f80dee58a81e6f58bcf4c3db47bb9dbdb87daf1d0f84d6f358eacd0662811a1e3a0c7475fb48f9136b0fd5b16f891243830f0bded260f1881d9678b7a320e19689ef4cea61c793acfe6e4a60b76a1c7bc7198465a53b90256532c23ed9dd3cc2353b0570aa10766eceaf7ad9023e08b58241999062d7ca9664196c99a52bf965ca1202033233675594579fe814aff3feda616aaa73b1555bb1f79650b3f487256c1e618519ec79b9fef9972564696a692fe01e5fc71a3d79094296cfdf8da5e0dcd4b631eb746dc01ed27baf9d3dfa64911cd5c2b941e9dc7bf7ddb55baf37b3bdece16a8dae2dee41a101ef838e942e48cd478a4505eca9e07b8f04751996d06362701eaa6c942c038b2ec9e5eaea52829865b8315f043ab05a8a52b01c5775a871faf14820d7e45efe386239e90fcbb3cb1baf6344012309ee9387f5d5753330226fbb22e2d3dcb9f676af9af8303fedc99d7dda93cb9389a97c4dc1ccb66616ab6cbaf46e4f6e0177777e0cbc791598ade0dae11e662ecaf93cc5369d78a8693633e30d4cb369b602fbed0497fcc17e597554640ed8ae9dea458f0b221a56c2299907144b156fc7161a3e806ae1aa7223a71d8db19575fa71ed8f1482852279ede9c9293af9c1ddfbdbcb181ef67cb57e8ae17ef370e3431fb7f55ddd2da1a28be274039982f7901d5452062610efd1fd33dedf2851f7003a68c0c11b780e79b5bcab19e1a4be1443e5c3308aa749f931289e16ae2906393aed48b9f21668b5293ae8fc8fa1c53d0052509e088f7352bf1d456d2eef9f528c7d26c17388aa670420a6fc45d49e469c6ab17fa9014385989eeab49044b0bb955a836a522f80dfedcaf417825e04ceda9cea73ff22e9dcfc350dd61f7b729ac0bde70a6a84702ded089603561d419ea4b0fda46dc1549df1bb3db988f41f4b0e0ce2c6ad6eb88c106c5ffc1a4ee762da414d9964981ff47cb8d1c6124e329d64c55cb5490f205e65afc6622b1d0f2d29b9dd11a596b65796473c26105a7352e14228d8b4c4d594c9413fcd7184582777cc91879ead75ab76e0619d029afbaac4be4ef48c3486e1a4d99a46798e9349994c7f4795dc06f840811ba6fad4bf239ff25831b9f0c97c9694bf83ebb7973bb4e9774d8f81a045413735895dab926433158e5206d92751a2334a6a6e1a896d463f04b24c6a533f8017e4035568992d9a2fccf8f284c8490c05c99dc04a6e98a12289e1fae232ad96a96eef2571ed70167aa472f68b04026960daa1657c7fec664f55b30647fceaf6f12dd1db9b7efe36d618727cea5399bc55b315d57c313f6330b8239b808ae0238cc65394451b3636df736dc436906b2bd46479574161e59b16f509a88675c7f328c8b81545a7b8953ac64f46a308e88a450d0351b3d5f859502a1f48a09c24d9efca6e1d166b2edaa195188a4932bfd3c29bd12abfe9d05a722df4df3e2fbb40cddf4fc61d2cc554e9fcde33e395552986caec2ab264da85fc926b0a09fcb0c1db636bbd1a00652e28ed8d779c48da26c56ae456ed3f9551938cb30eb68767b8414f45f58e9900ccf5cf09762a6d1d4c4245f4ebd73c9bb6f69f2ad9d3cbe8d079ffe61eeef0e0594ecf336f7d48284079a56beadd76b86f9f6bc67075fbf8edeb3f9749060e9d97809434284a52f05f5e75840309c265141a6c4848a7019f6f2c47a7c02a2126400b75a4151062c7072de987c32ae6a02e7e7ffc3c9d63b3593fc5304993e2aaeeabdbbba5e30dce5fd068558335e17cfadbd77f65064429dc816e42781e7b960230e58f29298374439fc2248184b83a5d2d133b8ab69988a1ff354f4b2f5c0dda6ff3fedf296469d48e02f299b5d4f7f832db92f4c1e53df2cbeb05acdf1f0a8ef6397359e479e8ce0f31f0b22b5a67fadd544b20a69eb24781b5d1f8b5a3e879e36b82abd3b315146219924567d6cb6a47701bbc6fcc2d5b32793f7af2345de5ea6132061882bc00064a6eefc0d56831d82369d886aa7d2115f0b17e6c3b1d545b10d081aeccaa50f97e1865ef6d6829a246308e6a3d4444fbd5425da81c6b6f4c7d56ffe62938bf3fa6323d9f8270fb86e741f85ab155fd6464e92d4db224be8ceeb02f92dbe5d03681ea217839ab7c4dc48d05ca5dcb88b75cb31e9b91b77c58fe3678596073c7add7b8417cae091e1ee76a5b2f319bcf4a6fc9c1d05b6606db305354b881b49a73ac71b304d3236a7a4deab94bee7501a4c790b1f504ac74c15ea2345b56b85bfbfb9e42fc47f204b03fff17ebf6f2ed2358de060cc72577856019f9ecd3fe9329f2adb9ea024d1882d9ad6f6aae65b0bcbc5ec0ddfeaebcf654ee877bd8fd5f7039994ccee7da8fd4ddfeaec6963a37c4dc0ff76687e08c2b7218d97803c52862d54cfd777b7267dd11728e57c204df83144d6bad983e93d538f12ac650a4c1ebb222f9d3f908ee6f377808ed9a584a39f4eae0f4873afa3a94df728235b2249313181d832bdc4d83ed11ce433ac7ae951568462de9fabfba8102d48cd6b723818ec1910bc6d54056a03d535c0a6824bd205621db380a34ed31e94cfbf39af70fe66efdfe7ef91d7807f377e00a67ea6264a824d4609de836639199b6fa22a888e018cc9d013038790350e4ef4e17adab0cc0eb4fd6590bba7a015855004c115bd0c111a5c2470cb489983f6b2ba6062f929823be324485315b770839156c2ce8f07884afa90aeaf0fdcdb3a295c9786ef9df3b33ddbf294bcc83c687f6ac261a2a5eb9acdc0ac45c7065eee42d34e1f86f0a64e54a1b9608b7262ecef3ccfd1744c39be7ec58994701937f5c56e25683aa609504c7b49bde9ae68245d95a73b72767b212d792908fb0f5e7afee6fdf7f1726c6ac4fd6b9a369230db01125a2ddbb9a9db4365520535a027f34e76aa8de1baa9cbd2bdbb9e80435f9f6699a371ab6e61dbdf13595e76781dd244ea301ac8c2c20eb0b93c9736d5b6ff5f994d7b4d3db09cdc2da741f3fc2de7b279d57e4b357eed9ecacc162abe873119382cd3df0ffe2efb867f8b08665b18247955c827df0c4455acecbb46de93beed97c586b670a96db4e677bc5b0e1838e419539f4f2305050c9423632e51f709ea11847e5574e70be354fe6fb2f0db81028908a4667822bed0cec1f868dc9a584b1f73354b4c9f8d1bc9541b32c566659887e4f73a730c8b9679b09fd37c298701eb39b5a8e0e1c7555d921198e91a9c012b37bb3d93c4d9d3553b32bf00ecd05e444fa51560bc35ecb257aaefbe63faccd6cf5dc1bbea2be4753982c5f25b5303b6ee01a51ce043a4c0a0ff65d78192dc32ab0f1de7de0472007f795b34bffbc4596cef2a4ef4fcbf7f61dbcc8361d44cc7330c8676df0af86837c8cd992e254d73bd4760bc1bf425184f05737b1b345b3e4659a0dc0d63d9d2010c5946551ce621b15da5b4e0372a9cc7803f9835074bbd1c9de1fcbbaf62fb192fc553f2d24b99d02a7a74112eaa01e625db952c9ef190f1e22b3e03977abbdfbf6f5bff3d0a0d1658577546c55ce34195ff80cf12eedb03b2bfd34a253d6c98ef617e5bd920d04e5384320cacb8f9f3f5b62f001230c4bdbb88ddd86804e060ce45454bebb06ac48e098b9e7e4ada5042ea8c1d12a04914c9794a6172bc3e07d461066c4219df031ebd9bd802f2092dcd8029ea38edbee39823f7f741bf1d0a2230e94855b4cf71e0ecb6b20571f0e37a5ce2c8d4a767584e34e89e0620bf04c886f95863dd964e8eb72900f7e54d2855b966efc1c221a4fefd15985f435287a13dcf78e153ac0ba868ffb5a7e015f40de9622a617fdf9630ceaff893c9285b1fe95889d28619dc0b383b44d941739e357c1bf465f9e92e2778a74826909e12c09923d2fe9746e8a4c2d16b5ac04cbe96187e57502d7fa87db347160b3e81826225599264228cb3b0cecdd352a32cd502676b84963f4dd4bc6bec7c09f6968f95b2f425ecbb0727462d2146007977be13d530c1da1d5aec2403158ac4e412007e3c2e8d2fc8b926c903e10a70f7c3d57144295abccfacd2afc18ba593f99dbe015ae13b032633430a38c157bf7534c131c1615df2f8393245f7efa675f4add8e6bc6b37ac03da24832e3a8f71abc330e9d37f36da675f79b0fd717d7cb850c2393c1cdfd50003f4498af12afbb98e5c57c5644eb57f0889b87de44ab042c5b125466cf154ed6ebcda93d2627328ed990e21fe41c2d999993825d06690ec59eac2122fbd6c79a8626b4cc10281c84dd553038b6bd8bac6204f7c3c9fdf28ad1d6afde5b63a658079412e41cfbb768d14534ca038d79a625d531868683167d244a2b1cc13bf58020ec5acb41f900c69e826903d604f78f3fc1d5ed139ca4acaf345b8aacaa9cfec555411c6ecd362849d637e31bfe704de2c2262630c61aae033e76b350863159ef3eba4790493cfbc13a4ee911b41b59f8a9046e89b46b8010c1af4f822dc13d9d948e5f2fb7e88f065dab7563dbb26b1bac28a9fcd9266d567dedcb46b5c693d580269f142bb3cb7e734a03a139d6fedb62d0d566146cc98467f24ea1f8ddd5fb4033bc9f685326da79cce95cd0f50405a44f876bcaf3bf4f50dce28771a000e5f9f7d7293b2fcfcb2728828757a1fe2605ae24c45f6bf2b2d930083a86434de002351d0238a813d843ff7a08373406b4d08227845374da0d4e6e960fa7cade46b15f165978a3b024f88669a55cc80ec8aa07a8f7e128fc87f8c14f8c1ee5ea87100b8a9662877a4b1878d658c055f90be6afb986f5f93dc551c650b736a9f5eaf669f24a43df7f91c0f7799a02a08edbc2715d57f17f6c220f81c410f8324dd2c979a2ed6d5fffa60615b54cc825a5e06682bfba6feadf1365a64c27ffab0b853211390740928282f645f5b111e16310b71a429f11ddd440816210f7070a6b40c44e4ae937e979a4149f86315a39aeab1236f655e8e0d43f1a12460ea283f90103ff27264b5370be2620fca9b9d6976edad96b774f8ae603060d6f63697adc51e0eab5e2972545eccb94b0b96102ac7bfd8bf93c9be7b9f50075190faee424cbe797a7de79503873733eab10e7e491f24c95db95a0a3574d5f357c389de064e32f4fadd190c5eecdf239dcee187435649c3a235c701510576a7cd863a8614011382939a63328dad35a189a5070ab382988a1ee436530aa03f029c28d89ee030d1695aa9877d491e5d854439adbe992c07bc71c6791d4ccc465e143514e318052f04296951261a58b674a88dcea30885fbe1e55745716e984a62ba63aca46b027eb9d1b21c640ccdbb819052585c60770dc2e557665e7d4118969c2843e6c0b6d993466b608b4ca83cd4018cb48fdfa9d0c6c48d1b46c34c25b3eb99d0db06be12f790e1a5e402804259d44bd73ab517dd3003b588eed280a799a9762d6afda3b580e812d4c62c8d37ca26ee51d43ba57b6c1fa153a5699760d6c0b14626135006d8f0f15a3cd8998f01fa9120e09743ddb2107e45aadd9b15476b2b201cdafc364fa81ff19c5d07d4dddd87ec2585e645b09c04784dd3f280dda3f8e591fc1cdfcdb10f30f259b4565e811b546f83d9acecb0f6838ba6900fdd4a5f2a386e2a7f850f9517f3c4f93ec9ceeedfa2f9c427ab228da5537b2fb4413b4a3650bf550d1f8ac236975665d3ec6ce1706be812c3da792b9d185707802384167b2e1b2e1d800b0baf16955bea65340aebf68ef23b04a3dba74383b2a10ef827881ee3e0a0964d339857b0482ea8b11b5626261822c854e855e813a126ae39803fea54cc10ee01dadfa3602265c69622a64c13d518247e5bfd228deba1c563acea0bd4f08fb8ba3c468520b26b141a2024830d730bd06ed9194b252990a872eac34cfa061d811b46284d421f67e8f11b5e99336cda2e8d80342056574f47040cbab0c475775644f46b91c7b68a8a826f8837992e541f21b4cb23c4dd3383200f8ff0340ee7d9bd5d76fcd9ef09e6424f900b227b999811c40678ff47c94ed0234c82ab7244318fffff7eae714968a413ea06183b20203d83e05bc273d20d95a2b2a292e291ea7f97b4a3de7befb9aacef259764b9a455cfa4d93fe9ac1716065a8303700897ac699d253028302ae28a3ac487c14ee3380649e9cec337b0abf126f511a1b6f412f75de3faa0515739fbe187623eab1ce42a4ac2ef8ecec923fa3642c6e3bff5a5eb7a4cf73d2bdcafbb3da36f23acd66da5fb7f28f4af73e795ce952e6cf2775f3e2b1cb0416e6e69590d7a9e41130fb66379d83af4a6aadb1bdf8c65be66032bf6c740f636714e43c77af292d1d3b5f37142f9b7daa0e3a0c5a0622ca602a058047b051318dd8695f253516395807fa943b8259f66e6cfd058717dce040113a5ae4c8a2ab40877903d41046e74b7988d2b525043bd5d1ed10460d869a91595fc3121c1d1cfcbb5d5e61650e130f4c3e00562840aaf8e3cbd7d6b40d1eaac955ccdd581a764d74a84fd507cb66dbf77d61346999256b781f88bc8c50833fca77be803f7c152c27085c5dbb23282b1722936cee8b7787e5dbe731322f9a59dfd10a4e80f7ddb6db417ad1c0e8e8c2fd9dfb196241b695b55c9bd056ca202b233655904f4112d2f8bb8953354385e8dfd3b8ca97e7861e4c53774cc660e03e23e9d8d29a09bec8dfbd3033a39434c49d7fffbe806d637391166b7e6eeec2257ca34c1b97b910719e6a80d798e01f3738cbdbcd0d438bf2835b1ca5d3f7011f955ae5d17ba5a70d40850db0a278dfec00d771dfb483ee67f84dbfa95728f4d9e192a4419ca0509a1bb3bc233b5101d6e695be2a029dcaad9ade774ecb80d01d49484e75ceb38506d9325c6d2247e333beab65f0ecedaed0438be48c436177b135b23b6c45ea56b02e76e096c0c7566f74461e43f2c70cd3cbfe41482a4059036311cff5a3b30f6140368610d811c5c32425a4e457a5692d0c5d40bd70534d12d09a0abe5ecd7e3d473578247fa68a9361f7662037a0c71b9dd5fbc2d59ca055ca78ff15403dfb2ac0da386fd865c217fc095ed03ed950803eb5db32f0f86114c6f83e1a639c0cd4001181e871e4727708d3ef0290197196eea2a2fc45bad2587c8f721e7aeb880df7ae9a633128bea495fd7c94b5f753669b0ee9c73e90ea15a03699ecf6edae8fbf091233fc7c43acf3653a34c45bc614142bb186caa85cef8761dc7e4aed011fa7899bb30a25d7f60e3ec7a5204c1d34c061589f4b9497789d862a81c010ac8171822ed0747cd4d6cccf2665e2161e18f55530d2df031b927dfef9c1f7b45123ac9c757b1bc1765d14306672fef6bd1a7601714dbd44536dbc520b94de6eac7b71974f68b122069ea0b60f2d58d454242e394a1e5b2ea2e62648fc922ec8044463c083851747149848d00461dddc0351b190592713e9a2fcd3e6feb9f27d629bf8e2627e637a7396292e77cfc07476cae600a642094e88c3d21ff10d19b59d13557c5a6d6eaab6af39f98675aa66b7f64f646ce20f15bbb5b4cc10c6b2bb8eebcb09e57a5d66992f53cd3f2615ceb0b8ddfb7ec8e68b951c4da9b6a1a3b500f98411ac4e6bf29d632c8339d03f1a5de5ca978ae087ca6c021d107eb5f881b2ceeef10eb43d06193a220424210cc2341b313040f799376b4866829025ea8a1a11867d3263cde9348ddd7057efd7a10c10eb0122f36f17aae0a58ef56bf5d0198b6ec967c1166278728e5e61a3272ab7d6c92bac4b460668d46ae16e5eac9d410f0092dd17c82c2793001ce52eb042dcf6e7f95071e704cef575bbcd9821d7d1c9c5209239ce947f8163a4a476ed9f1e1da271d9064f0ce23c167221cd43d47d7b28af6872c862f7bce381c2658c78929b4c9743e55c6a8fd4798e979f165fa87917d4d7f7093e2226b2f083d4b5ad0919b1f2377f8a9faf1f053f5e3aba9a7caf5aa14ff3dd72b799f4d95c5cb1d9f0e8285c711171afaa2456be272c6ae1a0b3174e4788498fd65d4b131357273cc68d738949822639c4e40df1ea46663c7422b40b322354c3deae5ec0c465a9737a9081589a62cdbdf48668690cd0cdf1f4bdaa124ba6c438616bb478f7c59cac914937441494c33a0e5c25bfb7458add651c01bce19a638b94f8d919cf564c81661f37565b327fbd93780a4ffc3a19d74ec3a96d35ab625e483857380fe7f226b761dc3f416ee6b57ce562637053911dd15c6898967babc5f3705eb9d79160e4b98c3ab68c2d661b6ef39c06299bd28be2770494c62ebfe6ff66bcd0210b0256bfbf2b64414598cdc55561be3934b647a75b5471ba49e1c7444815eded48debe8dbf9e5c08554a57e706bd867ebd4141fa310b8c9840c33f81fecc0edf7d6b780eee118d49cde2df3f63cb8cf2305ea84eb37ec446e7d14f671f2f9fed655b5cfa773aaf694d733daabb9c259837a3ece6045187cb06e196bd10d81276678f54df49e075aa60da81d1f28f94c5f1e9eae953d393c9a6db5e3c31896ded9e7f5a48c6be3c32dbe759c9842cd333dd54535b6c9f46a3e727a2bef15c0259f39a2f74f4e6f1f933149e99644fd877a9ff493a4e2c1c1dd6af9f682980ce7ee8db3bd3cdb24fbef7f9aec3135475dc83cafc680a866f60b3ab052b3a739521d67d7b1ee2ee22400ea7b1fc021b3c1c01ec45389e6413799a168105280ccacc0f3d4b28d57a883802b30fb73be43689fe853e434c93b335838a7f1a7132116b7643dbce7923fdc23198d1ef9a526e203c4576de7a6ba886d4e277a3da33806958c7aa9308d321900edbbaf73c13b5a4c24b40f4114403aa4e53b36659af626ce15eeb35866e440054b8d18cc57958b0f5a1cc97821ace989ffa3ba3fbe4b7d4dd4a26f4866e6fec093c1ca8421caa94aa8f6ed1dfea46ee0db52ee169b2d4c0d57eab9736594aa90c9dc9d819de9f3ced66ae7e8adf3e28124399c76a5919b75e04bcc6cdca6a5784aac97401477f8abae105e4903a37b3f76d490144f9019c3665ed8aeb85a34935d21988c56aa701cf68144db60f1bb89def60341e917e43db097d798935fdc892d26ce4d7e8bca2af95d2e361dad870bd5ef792a82384a7def2e1de330468dde48bd869ec4dadcf9d8a29bc3787de41d0762f2164d4538727de76c4a985ffaa0a534a1f5045cb71350d250aa0507534b0e35e36012273dde676f9be74aa65eccce2fe9ec8fe78cdd92d03a0e2c812a31c5663bdae143b6b90da45f36d1434d959a2d2a3f4a1c053641b7e1f31e203ccf5c7a9d3de1e1984516566554f7bf1e3358a6b98d94b20e79d6be5e8c6924fbb1266235d58245a416674a9ca777a68f54de84cbb25584b8bc109649ce2aecb22718fdb0b393f92f21273e4031fa111f2bc8db8122bcf95374516215051e06e1066b4ec10e29fa3ceff97e210f3bc26e1d0fea1e59fd8fe0446818c4eef987baf9eebf7b095bde2d7adcbabc2f1947e9f4ca1983cde01a5cd2ce5fa0dc4edfe131f9b1aad089f5df33368b81677511436bd80cf4eaef75cfcdc7fb42c086d05d92eb2def0b01ebddffbe4aa9c9de0f30ae09d0d275977ffb2b0f013aaeada32852d169bc6bede66019e368beda4e21996618c5ba51374ec936c43160c3a31a4a19b496aa0c18de8d5ec699d01fd9bf98c065101233d26a5e3eb9b9ec7bf34467c5b1de8cea541bef69c5e3d158375da5db02d4e40686f15b5038131c1cd728de0051a7db51b42dc528f61afa1674bdf9777ac4f3651e3b251de9e40185610374e19a9ad71a5c51093ac1dca78dd8af4ab1d522d94c10abffea027ee140e8052c02d6b611f0612979ecfe7f390b5a8f00229c84ec44d1cf0ffccb9d3e574e3ff2c785bcebb2834dc7a1ce2cff40237c559edd84b4fc77fa7cb2e979a82150cfab28be5fbfe16ec5b3b45affdcfd58ad9f0847058b0205df44a353a7fe4d91d7bf640c9f3bf687ab85778bfe421e56cbbb8797ed032c9e360f0feb8797ddaf4bacdf5867a5d45addcabb23a649edb89e7468fde4e1f2a5febca0aba2e07e77df4960e7d33fe7033673bf4728221dd057af863434a1e4097c5b790b0c79efc42a089bc04588ce6de6c6a8796753e8b11e069547fa8256aad786b4845d869ea41eb4181350a186a7b033b95be6c76b323fbe6ecc2c9fcff2595f7eace88282bfe747871de3901979f96c1c602997516884fd393e80c984fe0f767182e7f5d8467c4a463272f85e6dd479c3797ae343a63ce16e0fd4f0c1dbd5d91be82bc50bcc529e97e02deb9d10de08113b77e82cff688a9b34f894f5d895e62b557652cce0f8861276b17eb1e4d44d88242fab467c04968b006bfc8bda9678bd7ea84d60492fcde0c4ae360e43eb21daf6394945f114aa44fc28ebd537f1f1853e145acf8e69785d7249828a679d16415f6346734dd1a6a60c2bf30813f3f26fadcdac6bb8e4850c63348c9f1b1afb7f3efe836fc34770e64c8e9041856b44213cb578f5f22d50b929ce6d66a698967c28f601ee2f00a19a95b7b2a26647d1568c054d5bd4bf32f700738751141fa4d7c238e0b4dc503a5d836efae257126117864047f1ad4d43d402c7d63fdf5f7c112d3f4b032b00478150f311e17441246892f2f9b494ca75f659c7f7d331587a1bf731631c141e020bf8b95f42746bee7fe3e9602203d7f338d04d2c32ed4590a95ff3b42dba40108c5cd72abcd387d09e301d29388a71f2e342e174cd4c27efffe7a160aa5af982a698e972aecc861e939b03bf90b39e3048a9329fbef9cf2f1fb097034da0f44d563e230f1753b3bd5f62185eee53a5ce2b0ca20e3a198ad03fb1b5414719ac141683718a5e86514bd3143d21562f855555f48f8f3d513bf41146ffd44aa9afb17033a73c51c35e24e07b4cb70701f861bfe1627327e0999cc3ed050f0256d8d5d8ba7d2bebf5ea9b2bac128d0ce90d2113b0ffce6816447b2147ae2d402eb0defc7bfa3ef097ed3091bb42aea2faa69dcd77b0995cb23906a29144f9396720553a43666041488e56d7ea2b5ae8ced0b20f0c6700c982f2ff0546f02926373d2590c12a522206c0fbb92b506f88886f0c292cb8cc46d69f38eaf4827c13af9d73b172127d4452422f97264caa5d435a895b2ccd33ac1f31b48f4aebfb40e3a7bd40e1f4e4f9023d66449b9afcdfbbdb45654bd7e73181165a1a0d32f73f6474352dfdb8d9559cc69deb43b493ff9648624520b51fce14e15aeee4cd6e5a7a93adbc8deb94671a4c318fbd6693cfe679c4a3f8b683150f434fbdd368e7b3d09def0523532a3d16284017b2fe00a6683da0d2ff5c00dc70ac844ff92201884034201031e012ce70680567bb865eda8290799fce269602a19f70ff914c5252f5bfc2bf938781d3a9e83e193cfc186cdf73cb4ea3a7a05cd56676eae9d4ac9134e0efe75b2001337521486c26b054cc7248bdd763f19040758c69485644de4f8e027690e75a9140f7ebfa4047f21119431abd75673016a32edff43cb1e7a0c4e5777e3f21ff90092e4022cd47b48a186d29b6a61433f3880efb32efe1d9d98395880522fbff9429a5e6a60a524d6e02b572a8ab72d8bf9d0c7ac2eedaf5b6918e90b37384f4f526c0029b0cbe3bb751d3a93104afee014cc6d9515ea16acc15898fe3bc901171f1b7dc714b8f1c1a8af28e77b157a2d7706a22b0f0bc88564a28a558e3edd0375b10f2092072289b5f0b6c774f57b028c85b4796af4b0cbf5befb8a5fd2b26545ca19edea028607f2aa1699db7f44379955096d87d794f9aede13939667060d5644654e4a4c72abcf19d56da404a370d9ae842e99750318e694145bd8a098864b08d27a4eae8c47a03b6f25aeec71dc9cb723dbf9889ccf8913111b9781a9c9bb83ccba570f4af1a50062da74af7d0afb14d446e7b1a9cbb81559ee5f070e373c346c35439261f4b55d30a4a622dcf7279e7dbc88d965315ad9ef6f44594e3ae2af9e3f6dfbcc78e5a6d2abaefa91ae694861b0d8232d0c33625e0393228d74de20a6a898720f97284ed6a39581b7f71344db304652b6588217b83d2b5d441f1b783da406c0546354ea208b67b38120c52cedb5f5e37e6e7c352c760e5f8646fce20f7c572f021ba837f2c6e9ba87170dfbd8cc4b3a9c022d25dbb1dc3e7a24b63b8210410337d89264c9f7dbed8c9a127b2b63d7b723edb03ebb1f730771054950d7a761be230f79f14e6bcef72932a0c81d9bb13c99838b196b6df810a4851a27a5d3a841cb4bb70413daff2b2dcac93dc95f353a462218b4a1adfe0e9f204948fc2bc8d624e0830af7b775a80e39672e36e4f47d1e4c010317b751199aea12a47dd150ea125841604488c05aa544d08834e245784d200f83f71be934c73b43f645fd046f09c5647c30c1e71b3f478981be8b7189c4705f40c9e72a83e5a71fbebe8e37b49913bfee6bcc528aa3a34f9c3ebbf5427deea9263b91f5c91317765c56ba5ca522b915cd4a00a44a855b4f99c60f5169cad0cba4ff85c2f3a24cdf2f772f9bda22969611c1745a6a2d9fa3d7a4c3cec3b1838ae13291ef5c54015c3a3bababb1f83d6e8c96fd8d5287556616698e9e2272f9646dfc0cfd8d5083aab607593e054b18316c9b0b6581a7d6fdc138f118ee4a03de60b1eaf75b0ed861279d920172e748bf507d826116d57f5d810ac975adb466bec6adc33447db7ab40232957718e41a06cf99356164ba341eb32828b329b9af47a83dac7d6f4f591292b3109fb8d4525ad74df689cd57101a5a3496cdd64e517ca3274225a343b5a3db28e54ae8668c4a1b7f6f3f6f5c54e60c82a429f9bbf78263d12611e49cf61ea3b32cae74889e66b8ddc186f8a22f9a187864b8a2564dd1a41a47ec4d2a799da55096d63f7908c435ab75d981a57e6eed02d02b63dfaffd27d0cb883666799cb02ae81cbd727e07e48cd51c02560328d9b7f21d0b7f04c75a04ba724cac9e80c4e5e415fb11a659e22036a73b7cbe592a135ba2993194b5b716000d3048fdf925ca6f9cd916570753ea16501c9e4995d9b0f78ac22df57574f12b26a3c01e4fd06ed2ba7ebacfaed4ab5dc9903d3b36ec1d2ff30286b822c6f68ef5f9a1fecd82866ecd0a7a0f6cadabb31c0a011fd5b2c5e27f0c33848a65ab88578a230353e3c95f6611b1298d480dc8ee21c54e0843e1f35a5de5ad15b6540bf99b24c3d0197e4916110cbb4e04fddbf9bb54891cf4ffac59fa155cc7bad4d2c6d42b3b83fc054224217cb358d3f9a125f1c51c3d43c90d1810a60ae72eff13ed6c8f6ce7c195e34b4768099fe782833fdf161ac48028dc3f821f8c88ab127e189a8bd4cbde82b1db7a00d77fe0e9386bb0e7d2bd1c54feefedfe446e2c199e85b58cc7e1f63362ff2ddb3e85db838b6c67b907c80085a6b21a55496762698b23a95630965ce1ef6d2b7b135b4dcee7d2614e29d74b2afca030a9828a604f458f6ddefa09400a3654310f59e6f0d43d6bd0f9e91cc7b6551deedb8276d5f23975d764d321a3ad8ac353649459b2e4e28e40718d4fb0cd17a8a516e9449f991c2b0fe13a5eeabcb74f91cb34db0f9185c453ccdea62e54e3976cac203696e1655a0b6c2cbe9c8a6db8b6c98886d433e809ee999562a428ff1aa80cabe1ccc260dbf7bee39c0856a88f7b8bff57077c404778686524a7627087e03e798cfdc5788b6418f95fed8eb74ee6aa88cd2c4193a4babd1581d67ff435d1649b639177bae6e644a29a3026066e6023e7e3145463b6a26ffdd4e92e67783cfd6d0899673a2de92e9bc9807eebe789fa26598d01333959f9eff25f34ae7df7ca74027443b0974c24d378ecb33f19b1b3ae1cdee1a27c993f01f63a6cd8ca9f72d1b3ae19d511bcb3c3b223663274194942f440ec5f5071b4d25e251fd071b3ac110670474c2cfdb022d01e4ae685b8e7909a11db1e438fcd96307c08721e44607314d7ab4fc30cdb405c05eb68c36abd7d7311f111ba6c066a29ca763d98468478fea42b1c7c4c84e196ee2c9388257ed99531fa409aab0774b7cd91664989e2dd476d7ec2be093c43e3e20f64e7240125c1d9312331ba3962fbe2c629b7eba054ceab169271143cb7e3b1282939ca786f9f5090ff8ff0340eecd66fde95a8fd9e08d2524cb1bccdf02ddbbd34308b3267f29ec325647961c4986f0f7cb610e87d3f8ffbfd47f791a0121200454440243c3f629603423506c205906b27f29f59c3357d28cac3ceb75bd529a5f2aee0506a010d2eae26150f24beb001514d854644addfd1e94b2121cc743327d5e80f9e3ec0f92fde57f7a9c2da09404808c2a1d7f150ca07b0d056d65b80b526d6da228a2c1402bc395869612b2ba375d5f49c02e13795b04d93e7ab2e46cb4bd264687bb1461917bc1c8c7e563ef61ec920e282dbfff3f7299172a5fe92f8f4ccb0de95206cb894919e73e018f8446430471253ab5e5a45465f9cea64bee1df8fbf4ed2fbfa5abe15cb9c22bbdcdfd92acb1edd27303324edd7a3610a089bc94d687a5feaad2dc5b6e08f3aaf271c068542a9f3bf6d4fa6918c82fd14e471d2235df568afcc8cea01d360e3dbd5ab4bb869bef1152788752e41bf811bdc38e6591a5e9aaea10e16b19cadeaa85472d36a9c537ef7cfe3d96bc1c18aa39bfdc2372f1157faeaec16b8611dc788804b9cbbfb1111d98d8352248b61b4f314940a685d845c43b452b5c61f899d18d5344280a9423c38c28aba186785ca3c185d431e949fa0d2588e8210f685867f56d79eee87cf478cd80aa565d74f9f6015b8af7d546092b63031a333cc2e17d0c632d375cd0875026602085df3f67206950d8c740142e10d1f274adcb4ec862d57c841030cc32fbcdb8d7d493afa6b3a98ca963d90d54b189141296e2fe3d54efc1769be3f8f51b3418759c5a3ae1406179c16b879e7c4ab35e298e586be699e2043ff3fa756f78bbb6869fbe6713ccb9526cda79dcb11c43151519a8b2b5c015d7730a807ae9616ccf64915ad0b02dc4681f23560ce07a1e27877b84b3da377c54d67a7d269b60b1d6043e7952840c31c7964266838d00d58502c844efeb8c6e188df41b67b919b4037042045b3be25b5104dea20fefeb776f58147551f3d924ee042fdf20a09b399ac25feb4149ebd01e3913745a9ce0dc6d3321396fa6b47fdd001113c4334274fe1a675f808da1d1cfb564639ffc51a0436d264f87c4bae7ea6104306f30d373c810b2097b09dc8a1549977619765b618695a12733020366faf8ed0e1d4a52dad071fdba2cb15517f7572b8d0cc2d3b58b47741dc5919d5349a471bfdcdd812a36f063da61ec3b2f6a66e15eb7724e2510b933fb18a9411091b3a5b99010875d1732e3bcfbc256cd7d9cc96990e090335687d1fdcf35a0d24b961520bbe1ed2f6d9267394c78878806c747741c82b329d1c96dc65eb38c8d30cb43da70f2ba67ae61d76bc87217e115d34014f21d4bb52ad20a18efb977bd66aba0e8134c11f2ce8620e7c5461b1c99fe520e29d8ff26f85e4f870c239d9827260254a1098106c5f1c8d165d6022f3d0ae1b8af485aacec9068e95abad3d46627ac126bd300b7890d1813c45a94908e9c90cac58b9a120e23ebdf1a6167680f1457c9fc68c86bc068bbc4f25fb349a9238158ea8a356ef343aa2735e6a5edec78a237e28e9d9d51308aeb7ee7bca3429dd38f32cf9aa0a4cc1546f5c126cd441d1849a97cf52e4c061b52046ad81cbd2edcd9946cca3cce32d8d4815145a817f7af14670df8da034cb4ae1b7b26941048dc6ddca7096c42b62bd05f90d48394f1eae8040feda12c03d6f3f09f9327de60e13ef10859368554582d1a36f7346d4fec9932a08405b72366e925b2502112b96463ec35b3a43c65cb05c773bfb0169163b2504eecb853072d8898f8cf5316553e7a199fbeffc71dc98f865e74bc2e83b3481d3e88eed9dc2dfbda35dc3b8b1ef6bbb26fd885fbdcb1545229112888c0c9d32ad677de154381f393ce04782799926777bf6773b8278287646f51408acb5ad704be33a771d4cbcfc245272c9d058b2fe0e2e6cc7bf063b0a3277c6addc5d2a52fdbfb4d86b6fd7f83d1bb05bfd3c96ed729d2d11d464f832668e7d4cad101101b2417a604536cd99640f8a6ebe0305f775df3ad3b2cd42d6a55868193f6d0afd296b534c6de1e8dc2feb0f101cde415a8e3e0ebca85203b4b83161e4806c53d05ad86b6b3f8fce824d84a0a686c548e1c969fe11451c43342192de05e7e1fcc2c1f5272998e2aeac7d8390836789732ae01075b8d2c7e2f304cdb2f6ff1079066387376e9afd99b0c57e67e7e7f207a6a091aa12750f4cdc79ef6997023e576b664e8063bd7b6d4a6182017a279f75a37959c6086a02440a54d760d3074d1e0b20bd5ee651c7666c27957de294021633778d3387b8aa18c90c892578f3a068e4144c2f03a9b4617af63050ead7f14a49c7703a3d11462177f33326ff4c3f06b261bb285b8eddfdf128d89e3939bff6d5e118db05f38ea088e21d34cd350f2620a0f2889ea15b114dd373d3236db58d4ed5058c022b027cd93c89d97617fd0096cbf401185306169eac7b36aaed731e6f2f376b29f611774284cff618946176e705dc7505981970106d0114e190d6a412667bc6c32580b6e9684e8c345dce30d661ee2d4d495690650cc002b88b0cee00982d6e4bf4336a995c061c2c34db3b1bbac07307fb8df8bc59291fca5f2b2c5021e2d83f7d618742fa2dd6ee8b06dd94e1122ff777d3e85c8678f2ee05bd8765fbacc46ec2970d5304f12007918f0ff91f2baeb272b77c9f93bdbe2d1b22b0b88e98a216ba79ce8af01a283c6d9766a22d04b8f531862c91598733bd10e850dc8744ad1d747f8325f4a21c4ba3639dc40cb22ad813e1fcd8a5a8898b6202bc4235f0a2ef34226b474a032763a7fb44c6846237859ab43d4b6895cc7aaf0d92b70bba44fe6c03efa011356961347fbe8709251ad81858f28a0b24aee6ab58f8a735ec780dc2eeb614b18699e0f7bd17390b91ce1a8637e67f065a4289d2b87e0d7c3f1f667189c483e7d38588d0b49939284ae33b13f1766b309694b3352b193b8a0ac26013f22d98ab2cd8fcee4a65acadb2dfa037926969294fb3bada45311d4ab4b89fd6aec9fe45d8c2c49aa64d32b7d60f6127e25ef4c75af9eaeca4c516d90dc4c03b6976c0568aaac2864e02b9db31e550d5868303f4b92692b1547e204dc14812fe438887c99d183b6e8afcce7980a4d00830c6d8ed03b4dba601cf38f8ec20434e98c68f81942097a9aa701fd9386305290a948ccf10bcebeaf133828c1e39e02c0067db80d4cd54acb55558c1a2f05c140d0d16c7725b0c9691be37769919d829f271f22e96ab4eb8c7c93f70a8016b1353a18c97d6c516af6196ce606fda24290b73c27ece55f13b4b5bd04640f59befde63094c7c69676209c586c77fc1af71c4b3103b1b029d818a5c356cf31ad25d5e994777fec58a6a2aa646fd0bfbbdcb9909b1b2de975aa2e8394d0242cb66626689be027dfb4662d74ae220064cf0e09dc5dee9232b6e4ba544285892641b42ebc809b252a1b0eed11e5a752731ad7ae3f86b6d0ba8b0dd197238bb29adaca12804d2fe749454ee3e22e7437d0db3d4aad9e065ac0a60543b795b0e9a64a394936fceee9b3c601b0a3f7e885048a88617b885e028e0271a976e9772d1b6226401bf817337bbe3cb7c1e9b3f1242f31ee6f529adf2f1fdbdd28267896fb571267531d2d9783c1e8c2cee45406768283c1394b116ec06471e42828872c929c676fdd37c5ed2b07208b0d53414d1153eeed7617a294ab4a0035b51b70d60dbb51c0d9666591b87434901e3d5e2dbbe95b739cb9728504d3f534eb4bc2337f8781b415b167470a0ae8182cb1c69784823bedd05374f0b8db331d64dd8bd3af19c9c39bfafb9d8e4783e939bc14e45fc273e516110b8ceb1d15f6fd370e4128194fb599621c58bc9acfb8bb73ca6a1d0922805a0e58b7b61a18a96a52768f94c7626dc6566fd150d7d74780e4a229a2fa529c86f22ecf757d2bd329218a11bbf4a3ef642b9ee5bc6fd3215ab891f57dd64d410b841cbdafe9c90f149832533d2056910addf8e4a64028347bf7ba1550b8f50e062a6aa1efad28e54a95a9aecffe6259c235ce369000b5569d98c1f16698dc910066f7fce3153eb929a806a9b9d9dad001b887b428d66299cfcd0db976cfebee3abb9dcd43c421b10c323f897325b4806ce9a6f92619870845bf9327b5743fd4f52de451bc313c3533b751d88ecb38fc44f0c1b5012775b59ecbea8a3ab4add3953e2d81cf537b4a7e49fd47ec422623ead2031a1f817e5ddff629bae3a82cd7d31e67dac6497c3ffae32ca18f68d09b623fcd01aac2777a73b4afa86b226178fb672610dde964c8124f40ce36e553c84b2774ec9abdc66fab94313c43f5f7270fdbb0c973985f81714f70aea22aabe0dce14b494b2e3d95208cee82eb42c3b66ede3bc1308bc04060a827748579ae36b8ddedadedd0bae2cd5415dae63e59242d0cbf37797a31888989a330e7a6602bcb46176cfe4ad0113bda762f96df249f3aa0515f71bde11e6282153d34a5d92b7c363f06c6b80b6c23e8d3907d26f3e4893242e9751473e5dc86137c6ca2410a99bfa113630e5c04038e5c58049ccd5409620770072054625d0eafe1ba333edc1a7c9c763047b6aa4352dc5ad4e60b3e1b85815b4f64154f1d353a448567f0f5aa1e8d991a6d0ffd4ce3a22c498937f8be918783b41f1dae278767fbf9d1414f669c08946b19975a3744aff5e37e6f550f53ef74314995140c62b00e864b1513ed3d6da7a9282a340e7a4f46602868b9f3c153c126e421848006ca12e6652c22484ac20c4b3ef331ec299681ed07da9e5890955bc3f2e56216806471e3148ebe4a0053945679d34abe95ff11b814952aeb84b30754654c8699142977521c091d79e3dd4d15e27ab378c4e8482c2e0b0ff0accb30a148ca455da08e5aeb1813fe1a2217455a1fa2f2974b60c149a8869458e92d3d04e82051035aa63bc3fc7078735834d5fc61fd54aaa81d489eff75bedc3f0ac3b22e79fe187ca2218d547d8cc094d260846ddda839d10044de0a8e9665bfc1c113bf0dd01860982971e5a576851d347b8279c504dbb64504e3bf44d5544a6a62d38b84988be456330c8b94f1854bfb05a28dbd77a36e968dc1a925a678c982b39632ee16370b76d7b0fdfe6d40f112ee7dcb394796a6529c895f8aaf156b3576400663fba8e78c93502a0ebc6b7457f66378528798dc261ae95cd7a7562cb8e2c9870190d060254105f712049557f338ea56e0cfa9ec2959c2cdbcc78e57233636d9104c4874e61a2ffa4fa747f15391711999d957480526d9638f7cdc3ef2a3194637cf628028f949bac9181622364f90f3f3648b25847a19fe73e5570a15af330f328fa9a846667abc978258bbe4248bb26542500611481a3abb51dd96401095cb2c84b115696d0a8766b68aa093cc49c4d2b50e7893029e65a6bcc13593aa0cc304ec50128731224280726943f01eb8dfd22534a6b7b0529963d9910f5073ded3b3ae71d4f680ff065c88ac923a2817b15b446bf347bf6ebf2ad60da32959b0be556bb435824e36b15661bff6a6bf0d08870fd1d73e1ec8746c23fe3cc9a2c79560cbe3f8d53acb347c1146b79ef9c6aded252ce005d7ab0b91ad523c96fc029ae5b0f39bd6e08d34f4ca07d59463892636dcc7b6e699d0900dcec3b722910fccbeb58c40b9738271e52e051df726591f9802acba4e8d6aa796852a0448b1286c83751d349b1bd04d110ef16ded71184a278bb9bfec528c132dc9a984c7aec1f1685aba3a95068c56337a5b74ad8bb91582478e29c75f3cdf7a613a923edd8a577ba24721c26a6534b5925e4c0b629177e9588122420a16db049e930611079765753e3a7876ff384e2f37fa898cee9d0b26643e4b54c423adebce4467aaab4df405d623f3188787d76798d76dd8c3ad371dd377b5692d9b46e3b00d1cbf3792d73e1ab5b3cba5be25cba2cc9b4aa9b415b2cb57aa6d56a29265972fdfea4fe98fcfdbbcc7cb0fa79bb71f0af7ce201fed6911fccc09d155573803736fb598a2f4d1a33503e4724720bfbd97477c8ec3c3ecb9ada5ec62eddcd766b35f579bebf398de97e1e30fe7edf97d26f65f02d506c0837e7482878d7127d84544083ca27afd748c846000716f6a7b620d7f5c332943cad923d3650878b42d66b6a74be4d3bc7d334defa2fa339761399ac563ca19a65ed35bc3fdffb28a869dab552554aaf0b36afca31e1eb1e3de2bcd0cd9226d6e62591cb35827da67b7ad21788dd595d10f2bc11de026684ccaae431210ca73506d278d51bad82b0c9dd1f6b2c9165fb69d9b3868abce8640eb793ad9aa737f18c51828060caccf7c6f5b8d96950ec4a48c9dfbfdffbf259ede38e0a0bd3f3ee62d1abca2c1e1f7ffff966411508029312cb38ad2a759b7b78ed17a82478e87e807a60e56ba9d31f18c204e4a2cf899517604e89eaf8f6770d44bb2ea4cfecfb8644a47d74b17748a7902ede9998497e626f637210a939445c52ac2184f67cf84c8ed8b8665ebccd86babb8605eb293bacf342b1858f3d5b2ebb097648c92305bed5cadb222cd569867784d397ccf666b475a7a71f4659c7df20263af267db837529fe1106dd57e6082702923a4d62a46f25c05301425a84010766cbd13656ccdb6a692b02a341aa3690259adcb5a45ec2c56f7b2245e2a8c0a6d9c6fbb731e14d0e89a3e00f5a5d27d9c5e09f134bce3223a286e6d3e76a8b32e455224f3353ea49ba887b0ff9371a7cd9ae510ca118844133aa43910db79d5b6c7f8767748b4ce52da43cc83acefd0d76faaf6705e4de189cd8031125b1c1184f4cbf29b654ab0a22cf198955da9dab2eb8aa2ccd4aa5ca15ac0b63fae62d16e7efe8e577878ed7503efd0c7cef976433ad42ff57dbb48e0614316deea180920bceca84f213a3fbce47d67dc14e8c3e4af663186485d6cdb1fbc30646f538f535973dd153ad9edfade1b379e1cbae7e95b87ff69f89fb610f44bddd77b879f6493d3fbb7f1f76a7f9486ef93a5c67b8ede2c6637faf06942dfba3798d001e4bef0f0db097debc410775567175249b05bc12ba1c9cbebf0deb791acdac058ab581650a200b9b8fba120ce5411375f52a6390ef78d5f0d8dc5a455233565c7c2674052e47534afebce35d9917e5ddf46ef6ccccf7854be264ad3bfb7b68e0afd00f3e165f812cc7d83d94886933fddbabe2da85345d7934483869202113763d2684ab2aa66a860e7c308277db6ae43b41822834c6fded0658e7e2d380f930dd871d36f76ff29d755465c333ac0d39743606ada3c80b376fa50487bc1194729e19ac6567c10b0a3cba40625b2eeddd65b927f6ab103f7ccd7f4f84ff46d801267439a7645f211241674911d4d7139a9e5e2a76377f89edf0c3bc2777046895ca946dd346716d4efce962981af2b20d3e85233cdd5308d5243b299896000b732904f355c197aff4e045e9691a96a325417649d2587cf031379004ffadf2953ca0b24ac2dba4f0617bb30a9249cef94ba965aa932c5e545afaec1aa15a6d3042c09e7db55ef46c52ba1a990a89c9b915a2d70f1440d32f53dc8d830b21a6c52d6e3156deb33e2f048737e2f9a8576d3b9cae7fbe3c5de1301b69fa760ad68de94774a9f5caec78032f34425359ae0e74a8caaac447aa4bbb5436c43db48aee418af53b5a566414f88702445c6aae366ac7d871354bfc85b07592bee60ce1a3322d1ec2e079e217cc134afd2f1a1ccc8335e079762c5643f2fbe924361174e6e7100d7f33c04b5fa0a8a0a4eb3bcdfc167e781bc773e1424b9f21c5a503ff1191499a2e4844881c18be4f2dd80016304b0497db41b928dd9607cc5c9cbac6eeb0563df44a76ad8ae1c85fb246a41fbbdbbb14f4fa97ed9f6cc2c76965b48247bc3d1572771216c21b73f9f11e6458211f2484ac1551a31a8c3daf215112d71c77654803ed7d6c0e4482888a5cdf750ad5459ca6a4abfa32964de84246b47c3e309b75496523591cbd1ff3a5fcaca10640d3d816251fd43ee9ca8f62543c7527256322501f679e349caa94432b9cd48cc81187abb794a21a3975eb26c66ba82f29a02a4e1c71c3184bfc835e482675c499e7f7378c77221fee75bab15970677620bf61ccd77b006998abc0fcd4db6ac7a48a355ebaa9a7419ece537a133b7ca8484c838f526b32d774e1a610027934cb61d879d6c1d80d19fdab431ab1d0fb9d73416ab91d3e98ab144ab4e5dad2ac98e1bf57225d75a00c0bf7bbfbf31957e37552d55da2b7738e172baecbbdf916ce43cad9841e5a33b0ed132f0c3323e66c3bb97851ddb39ca6295e5c3e65752917afb29175956ef1d9cca422b71f17961e70db50cac0ce9377c5a39b190f472643371b0911e9ac8c6b3c131c98d25192ff5113c93593cbd7bab7107d6205fe48adf91e54411a8cb230921c1c51412b5436592a2f6f05b9518212f536171931a7a2a381df864fc75a4b9f3c794a22ce3dceb9c0459a9209db4ceb45e637c182494dac8476067c3463385c09c1206ec61b2f0631d853cee248ea1648a75fe357717b2df0478ede744e9ec1a3fe6849102e31332a72339dc3ba22a8c5d6278c51502b1c41d827199e270714bd9266701f46453cd49482c69e997d2d56b65f3b9de215c850b00c4c572ea3a7799a781e03360426c9a88246d45573ca3ceb3d8b8b1599910b48af0f92b314612fe21f4aa096cd93df76fb9ccbdb0b6e58e43c37469833c88427dff0f94165575f7a52399f2cb6193b91f15c12eec1ec3f2dfe62417016e9f7aa39dadf16800f8ff0340fed4965fb5ef930b662ca1a7c3c75639c965efc1129a253311468006231149c6902a4df1cbfffb66fdf8b54a7f2161220d3a722ce322ecabaa2f7a402c8939e6d900d7affe3ddd33b3404738ab0e41938b50710651caeed9c339b77151e0121521746c48b3deb5ddcac520e8b087c51b78f7ff3e05d121af0a8506ad5c83a805d26924d280e131f173100f5a714bb8a42d53561c8a29e2b15328560a97c2ab5e1f4ec8205c2c4cb1da4b2d4fb314178f4b2c5db21c3f7c118c7196b229c278e11106652362af04bf05b9331f7e67bd835aafdfa49bea6cd4aa47006a297e3e2b9c91bb741c17042d4e0b22d99780e3c91241f9e8236532c387751487a598d55b9e1d325cad2da0f06611dc221cc31badbaa513f1dd22eb5f6d6252c7596b86c6b9019046ef332b45a4876c2e2dded9b67d973532a54644e86fd330eba3c9e209c2e49e51391372b37ec1edc8d9041cfc4aa3b33a5a5ba533ea40f02ef9cd9ee627cb71fb79d2bb6861e92ee28f8bef903013ae3747f2303c90c7c37581c8bcd8105a9d817569ca532a06e41a8d9d4478354be8f21d392cc0d8df1d28bf0f8693d539309ec2a6bd2f637e0f48198ccbf793e9af5dce3ce36b361116493f043890050bea6a0c4b4ac5cbab52af848b71ddcdfbe6f75917d7c8bb5e3e8d3398cb66ee9577b36e07c9bd0ed11e69606d205f74d81c40d4b49044acf81dc940e51cb2cf256210fd372476aa42a5d608d7e9fa3950d4c23473d8231101a08d2426201ccfb6dc318f22df0ee799b5cb3b5c0d937eed01fc558addc827baf6eba82fefa2e6bffda5e2794a21059324175f896616a6280c37f7341562edb6ba508cf9f8e0d6c2981865696cddcd369e2aece25988e891a437c8993e133c0a1f91427fccc8ef8123113541ceab472a6c11ff2751c69071c846724ad128c6c071531fd6be990e90c5ff1a5f5e1b5955d07532d9ae06e7c954ca564343d8b834a3451b94e8b89f46919f481996f0522a1ae2e3b2dce556e3c964c32d6f9c460cae1c0d86e934b6913139888258bdc67dc935fb89d3dd1aab22abb66754a03db61142123a3fc6093646528af504f39aca7f367c161dbd4b1d4b91b3d1161ad19bc60cd6366c62065bebfef80cd645d3a649bfbf8b0213fddd5596804cd5235b0adc08726f447005f521c50c6c9b2eae940a8449868dfaeafbe40cd465a595d64ab98b8ca9760bef06d4ee9f8f335936ec46b4e9b95b631e3d7733db7d16076160cedc1fc5909d4039334d857ab55d10f4a92df95493acaae947dcba803c9bba64a53309825d3bbe57592bec4de0f78fc48f147ccc7c8bb9a56cdd40032ad23d2261862ec2714867351ac436ec09e81523074b84204ae938a4d1176871afcd7959edb3d1973528cf16a4b3525ab31624ae647f0307a98c23a16e6a7db5f873bc506e9e7889f16c7b693b846c52119ee10c27747b34fed3ba57198ef04be600a9bed61c141b2c1524301cdfd404d8f4a2299c797462b760f6c4c5916e03f3ec8c1ead91acae7772e77dd799319bb56e0f309ed75f66936ce82b367e30c578851bb8ff13c046e8ddc1f9c14581910ae1876a7dc476b77920977c89f4be18f2c86a70b744914d964407a1b040fac39042265e777125845d26e8748b4ede77f7b437d80eb2a873e6d7ee81384ae3648119127bc17d706506ab919bb5bed528eeb8fad5a8f3c36a6423b0e41385f6ebbe00591856ecc21042327602ffe0441b0f1a510be47d739f3735a80996b351e9469c57ecfa1dfc92242ffd1209a12337a79ea91f420b8aa9e7edf9a2d360141e1052f5151e37f78e547ded2078c92a9ba14594630e43fba70d919ee6555b8d53953627ee48d8fea60243a08e2ad2e864c47edcdecb51f3a2af76360188d852e75d57d978a1ae48b38db7d5fb999e3edf2f407a600a859e0e878a7a2dceb8244c111413287d17eab4870f9cfc9001af1a68e9c5ecfeb2e24998a4f5517849abfffd6ab4dec5b7b9bc01c5692184bd1741ab21b7906fbb0259979a6d02eefd8547036314c82c4b71338c6dbcd859bb7919bb75205cb17221e1ba764e5d21ace013e44a4966178aaf3f3afbd358a97ad1fb78532d0b5e310779f0dd57da6fd4f3402a9b339469a006ec617d625a85a7484345bbd8905ad10bee561ed8436371e4428ddfadc45716e9d9f6dae14d53ff18479a74da97da4fb0c08bdea693b92ed74ab404c2fb42ed3632a5a8bf0d9bcd47deeff0985c4e9a7bee4483c29da06d9fb77a07e6776fcf8382c104111293c13a72bca4cc319b79f0588e77b8e1ed8d6a6b398a12c6eb0953e326dc46c76eb449690f1a5d60cf3c3d5dd9c68c14090789dbb54607a62802b7297a01f2b2e21d6c3566c04848aec4e4cd262bf9189225a8f43ae72e4aac64299c07699a20e6608da35bd4bb9d2138c1b22b0527557c0a84b87f836fa20f7153a0dcf57ebfb8395c7c08333c00822285b43ac491ea3876944ae782d39c1c995525a9d007fd7bca2b5cbd295a50e6015250c9e9149b3c290655121ec22b3f93b91d411a3178dcee306a7489edeae45f65b11166dbb63bb03672bd0e799e503e4b942f92a8e40b83f259a2740f34c49640e9e141cf99469b99e415abf4a12a607d324fc9f255e172f5eebaaf39a7f1dc7142627b873db034624cb93d6e3091b5499828fe3c806a7849d12d9df69364c5d6a71629a1f143dad4ce7402b574ad2b1281e39e0a6eaebc6e8301751d4ba41a4d122f1938702a7849ce44c91400be2c552c0a087d02527395756592545211d3517804b5deb51e9cd84ef2a2bd8fc5c8ebfbf1681a5f4e5a968088fafe189017af1ad51b822cab58ee742536b13caedff9f9cbdd7e83d91b42fb8049e3776028ca88392996c3296c447c5a95d630ca0c25b1e0132b3045defe78edf9efbff8ad54b7d93aa87811dbe868232a2dc4ac12ff9ea8a2f8aaecb0b934d1d97018918302a1f1d76460a976424808a4934324717b10c6a607b8f123a14dbd2becbe27649007d90dbaafb085e73256d4cfdcd9dfbddd4cbbed9114ebc5a8feaf73bc817ad64054fae72e8a92e5659912c707ea59438af719d49be77d6b1313b18ed8a7b6f8dafd142e6fb747afc604e1592cc956bc88a221393d8898b97aaaef46e13e5453407782879581d22772da66c719d7b366524e0f572d230acc5ab575ec622feefc8038af4b43037701d85aab1404a92bc03aae7ad82e3c19843c623c594dc7d42c2c8103550546231d3ff7b011d1aa04904b503efab8332929a795c330d017ff22aaed67022d56ad71ab10296647ebb67ef956b8ddaea059eb22b57b9d8eddd22dac53db1f7bee686f9c5eacf83412d1a39f52b451613fd12830f0265e5199b24230f9536e6cbc79307fd597220e65986b043d977204ec1eca92882183d0752110a89a8465964caa49e240cc7c02b3e2e3a2f9ed2debd353a7f482c5187ebfb7445025641e04f40bed23139a549bb1a4f2555e2915da4d1f135429067706dd10a8c1007fa7aa31e202e27c999421bf1fe0713a1d122fc70c51772a91c73ef7e9a24f8ff77afe2a963e714c9b7267a327392b9864256652b0afc729f25c60e52834791f77b4063283c9a49089f77280fd61d477c709e7a4b6c7a4b8188537403cab8251b685f4f4d43c25c42bf6e3591c3a74dc6a2bbef698518c2da3bc866fdc80b1a221c3c46d01e343e134a1c7bbb6f01db6ec7f3091dbcbc1bbc9018b860ea2440652bef7ba6483b66eba7103ee476b24d8a04df0a89eb2c4e3e42497d19094511a2cd0465680ae69d62f0da3f98897b5e50c3436ee5e6d5e2333a768e415fa644988c5f2c4aaa83d6ee0cc10b962c819c66a435f1760ed566f46e009af016dd82fd3fe31b00dc674d77ffa56e1624e95d5e07c3aca66debc869dda6ed3990296e2b7f03b10cf4041b6bcee172ef694a04749874b6372fa94d19ff63e5e8f279df6c6ea69f0bbde90e0a321c80462aaadb8d853342f8ac64f64eea30164e23d9c19e5935607ac149af5d0073114bc0980494b11ddb3f489bee5e528e273743219420ecd1dea0fc40c42c7a844eba3674326087266731886dd33b47e52aa18bcb05ec085991bb20e7e946a1beeffc6d81a672a0f4ac82244bede93992eb58821efa227f3ceee1b2f8c97f2d19a999808757a6c5a53be695bab0e9b97c56cb74d809c915c67ea827607e34246e6718156de18882ac30614a972e8d98de5bc542d778fc2b8c820b88793db9b5f06eb484ca6eb74589f18392b8809277a6166672e7c6636bbf02345138e4680314a02d2a560cbdda7e2ff3667dbf60e40819cc25e4785221bb84cff3c91b0b97878639d6df4056ed44a73016f4a3ee7bc42257328bed57548d6c0118a72b0fa85b924c290d5da2a79a926cbf47490c1657dc93616605c6cb39eff5e47902a47861156783a4945ab4b7831ac7a81abb2f51295778042d2d8e172de4ae2bf5ba1c4a4368ca5ce2e6f1d489a47ce917d4df7c46ca8ed6e9f3a74e55d65a8ae96c1a3dfa6a3befcb336d96f43f8492c3b7aa2fc3bf1dba4bd81e7bfff2ded8234f53da9ebe6f9efffd5e7c232a7d94225ad8a34ac1f133d4cc42a20418f390c064b41890ef0a1a922cfad1a868136308ab350c50a21ad8d8bf1362de12b8ebf32630c31b14a673b3b8cbf7e7fe0ee977b0e838861b94c3a634739aa86ae68fdc6fc3d4813b4f2e1428f803f8a74282ba5c03c2f3f1d61c9cff1f4d6ea266f22b4bdcd958800106b298953505f343aa8dbad46a460b170d0bae384b06299400c5269ab6de1ac8dd6d9ae23d6e952c9f90d5507e3d9d766e25d0af5d52a050c13412aec914c1cc9782f5a4196484add136c08ab43751753fbd17856db4d7bc83f8ae71c2564b7a9293f8e44748a820039254f5b0e27523f8723af1f30d0809caf91d9015e57965559083e8112872dfa02ff4734d9836d96124683c9f35451bbc0f8c2a9721b97398e347c0d24e941b95692e921cca1952e914d02fd7fc087f8ff8050bf8e51b6a68341b655e4308eff2e01caa999a192d6d34e4517c40d9d52bcc919a50aa384c1509c0a2c5f25061729dc33991d73f0344a0e07d5b8528049f62d3bef0c9c54555e94593a6254d91ec1d320a1c420cfcfeac6e99dd47f8f9dd04b348224f9150d555d33ce2a343c8b921da81bb2401d930e664066421e421994a8537581c968cb391760205c70cd7cfcb4d95e3856564c4d5651d71769ec48692a2dbccaf4c811ec5fbe443e78cab36bf73ae927b97de5912cedad5c30c5250aae1bbd982c855c544cf9386c80b608475688810df4279b24ba7f68ac04950b2b556f62715f6d0761b03b857be3092bbd0307d5fc34a88035a7152603eaed1945db14ccd9683bf5cadc88a71249922336478d6ce7a12c2daaae74f1e8c1a81e4a58de217322d73dcf7eb6d12678f25fb47f4b01b0f7395ea7e7f275c25280d76f0c0280bf3bb18059121ee02c90f3bcaaa95d841b1e3c1edc9723c25b9ea7dcad1a027a7f928e7fdb538f179a21cc00db7c50566340aa6cfb61da233b4c91c239a73e5c75673e9d517b64df6f6cf5943e5d344ed8e438520955a10a2457aad4967e32362593f2366fa0e9bc2b9c128983e05e640ecbcd95074fb6fc1c7a0064888025ad5592af87f92d3cdd3a12b11c7ee694ff1c4f3b261f61f2b47bf0015355f7108680485032285ec3d6ad7300157bb769aa56a9953b53d5e68eed394ba9aaaa32089f594c4bb41b7478f06eb724257019d00ee9f047cdc023c92b679b14052a475ecec5d6b33b05c8c80bdc848d05aa8b6f82c31ed28ccfea60258badc28f2c40e545ac07169e3295d888f1e3dd2025716dd828a3c8b29ce56c1f582725f3bce571f1a921c10892b532771682faa879719d5157c1fdfe2380449ead30254985340b6afb6bf4092227a1d4a29842869e675f5bdff9dd156057de614bb0fea4284a9009df4c3c26b1d788202d72eb522485ccdd83144f8361fb1a53f65e88ec581fe6f779617cf813cc5993ded944184ecd59a2f01844502166abdd3e2ddf59946b2ba6a8372c8a4230615eb7bc564d95a9c8ed154b35b684a12be4ab4c42251defa7723ccb1505439a1f6172925e631e0cbe1ea5098527816da4f29dac7855c85c80777f81622a271104ecf6877d309d8929add87e46e33793439532bc14d0abcba7f4d009c149e6535520214be4f6cd93b6d47df726abd1b6d3671f5623ca9b6c6b38e55e127674a0a14c1e34aeab640c9021f6ef0d947594e2541ce49ea507e4bca3f4d063539505eae7c4107f8d20af2319774a5560a01a87e5851e01bf6776e0a210d824c65c5722422e45a7fb8c56e1c0bbaf821334855742d29916e862521b5acd3e6a45a26ef095f1d8afc1f95098057f045022812d1d2a27a0802fa3c2b7c0a796a5740e3696a8ef706a0e5278db15dd1534d20fbe3e1182bb7421626f8cc99840ead290e4f61eaa50de7fb8b1459c0fda6f122ad860a47ec9210bb87aee8f8ceeab0abc2f98affbda0318fb7d4f17bb3b01c4e1ca0bd536114d348dcec891635cd20055a5fccec869140b2964573514fb3d6068e009181bf8ff03402ed355af6f972f311ecb58928d817b3161234c4acbd6566337a01ba5956cc2253f7eafbd02620362483a4306f49c99016a40bb6e2a764fd9fda975eedcfb9aa45db7d69113f629c8376081ec49ee4a0828dd44a6d5f5f21f08c9e282ac3ad25dc87d95594adab5b4d75c832e68c9eb440c4e7ea3c4958ec43986d49d0e70e8d369dc20bb9b160a76617b4d1037f7319b424e77a6e920c3e8e5fbbc5a081585674e4690263bb4b9db6b0aed9a2d62375c246ec979dca761a9c2b5617344cd08a38e1f0bf58a71612bc19dcd215a1d67eeea3318dc325cce78c325afc6bc4af2497e732a3481ae602a751007bb751dc2361c9f76ad625c1943d304aa7380691549d10dfbdeddec6306499b157f20d5508eba988760685d4644f8ec266baf06f7f6dc6b4acb1bbafff1233a5b2568ee10dc8f2bfe88e97579ee8dd3aa71cc0eb47f26e21de1c84adab38f7043ccdf5c7c4efc60f788f730db041a38fce6df8f8891551641c1aac1d6c9acf16938eda4bdd1bbf7827960b99bc67d6a7615c4d79ad31d54e46ece03d1c1ab382c0b67a21a24ae6f42ca89acabe044253408eee973463f747a1892457d949b7b968c033a7193df8e96fe752d22afa826cc1935f824e914aae1bf82b5ee17915531e2980ace1eb614c8bcdf5fa43625a7469d29031aa9b00c37e86c249c077a7934deed60aa6cd8f6cc1fc5cdca0e3ba8a84422dd3daeccfe78f3a5d5c72f615c5ba9c6174b0a9fc3287915a650d4ff833f202383f7d8c3a39b002b6b601ff03e57ab036e036363ee35db3e76e1488cc5e02ff802b729632bada9ca19c55b48b119d22ae909401a7aa14fcab62afeebf9c316bd721d7ed3b873bb73f412d33324c4e2c13c7a8f89affc47dceeacf2871c2eae2f2ee73fce677717b971783e6a053b439ebd0a8d683b7b8af2d94073c6a1abc97bd7d0437cc1a06bd8218a2e4eaed770cb5457ed0571e5d0e022ee1f42837f3b3bb46e87910f25d84c0c6637f889295cb91d462c94f198e9f2cb52d67224b179f08eaa46617ff146edf60cf0cf96993173b8c662afec015c7d9e3d017adebc95d991035b7a98c13dcbb3bcdd4559dfee1250a95308b8882577e21e9c97f3411852b0184b71badb5190fabb4dcc42989f20ddd9a3f0dbfaa9af7118d19912c2002e423adb1490e3e21f566521457f3fdf772246df9245f195254ac35080af071252cd155ee3010de74ee139d7a12c92f90cbe4b3c35086f41339b817bca13844f5e5882eded4cff95be723b4c28c204f7a6a0a5567233ed6b3419d9f5992c69afcf7ec545f10e2200855f016978c9d735022fcda445d8e6540c0cde4f3f6c82d1d6d4d221b2bc814318500dad393900611d48ee60b2460a4ac6c2db62d72bd04af1101a85c5d4cda777056491018d2e98d64fa24f2af44725f3c02644cc63a354a7b8567769ac4b73e62c61a6adb42edf76338c0198e32cb0510c4298984cd9c038174d54adb2eb0d129b9c2b44bc94bb81f8d650e3dc50fed807e5ab7eb4cb8dfd0752987203e8ba113b44d2263b371f464db8a2e523a7e7e7e35383734ca44cc168ca704747cd1acfaae898059d090a8afe02a3d82c8719377f4a26c7f064060a6375fc2bbcea8ddbbdd364d7eb968d06d08bc06f0c1ee8d03dddce68d81cd502878a7e62f0347bb87cd16d113e7d951512f859052cbdcaf128ac54c44ec1b8747128239c00c0af13e6b30f599991d90157747f334dafae1f2ed3740a09b18cf20257e024cef14798378c7f2a3a6568746ec443a33d297e88731c08dab624779cea630c8327b64a22c80aeebc2951576555ba18830c958ed9f68c16a743447b0bf0507a05c7d57bdbd9e725a8541b87eae4377dcde35b14d4d1de2718e09f497687798eb0123546f3c1f454609032751fa4ccbbfaeb7325d268b5ec91040008233ecfe139a4a95f8a08377a0cb0602ed8fd3e6d13f74dd3a952ca99c1630abd8d8406367adcbe033508751b03d50d32d547ddef821db74e5b1488e54fce9756e490a677d4f4019a031719f98bcc9df3f1186062a00b7557793b8d39e9d3ba0499643246c088e57176d36de74b1ade363275b468740f08c234ee95e4be86cc214defdd919e5d76dbb4264ccf1d28e8c3f02c064726f128261c2cdc89445b02a6185fffc9ccb4321869c4d7e9d4e03bc7074601e4eacc4f2b1d64060d3aeec82417d2b43559d6de275fda328734d5bd741fb4ad71fcdbc0fc04080e5fe66a6d1547894c8f0e567d282f3706e7ccc42f11dc3c5456d6ebb11808f3402716c0a3ccb27400dd7013c84c3df5da380f567b9ba6613bd70a5305c6b7e6a4a6b21d6f953ef78bb69ded7e907ee9d4a6faf432899daf4d5d584d8039d563b4611c7c79eb244b584ea002e519992f800330ffc6a5107c5455c9eb5935eb9345c2140cfe6416d0fb29e3e7e03533e3facc72c7fe1f97c56454bcda97c4f5204f590991a5399e8750f204aef03d4fe415ab0d40df72f9340397e456d7269f5f44085e8c6a9c24daf0b441e2e4247fbc93e3029ad23b555424cb35be332c1dd760dce22e4c920e792f70c7bcd47874136d24e78dcc633967c2e75d0a4e1a0268adc1ede23ef749b8a8ab8c493ee6614bb0a10af403763ceed6bcce861fffcfa196f55e92d85267dc5e053ade368e73b633008f80e49e662e42936eec659f2462a7c73504bfc3946039c686ab7f2e56e2a48e61861009179225815c26f0e5a640c342f31f01863d80df23de5a765b07b798cc203157d1e7f26899b865b2faf06bcbc419ab9649a4cd667d5de45ad57dd8d405e6ee0ad79a96725e59d48fde5147f0902a6f23ed5825d82ef189e7007874f3c04af006d2895827eeead0874885429ba91d9976fb94570ca311ad19da16f22684fca54501c10899c7f959047f0ae5e52e2f9c6eabc33f20ab5e6b9dcdbe8dbb7a4014ac3a69160270a22836df03d5b0fe512b31b4f6d870fb8bff5ad21f9d6e8efd9a4e46b2a2a4a7c153c05d61d5642d5775548b0f4ba2e2ce47154679ebfb8a920b926b245174585bfe7f323f7c113ea9c723d096a26df15108a64e1260d5b75b26aa0583231b9f103f5bad8be7d41c7ebf1b75b8b3fb979cef69e86fe21fdfe804420a192ea2a88f15316675f766ec43e20e8ff7f1655ed4f726476faf17457da2efb428305c9a5ce58b3d6453969275681fe34717691f68fad450ca62aee47d90cc174459e4a9270db464b6b00f46ef9ad332547cce14b63c6a5d8b5eaf29abdc04995db952452f6f60cadbb0709721306a788730d00cb40ece629b5f27c0c409126e2dc66c4792710b43146e23fe11d4cec9d25069674bf473e3024c2334dd9a536c501ae25ac7fa23e30e7a3234762c037d1edd686f4a330471c830d8cc33f32904a4c2ebab259ae6c12152fb9ba4d66bba2f102e1cfbace5b838a5a3670f8995e170960cbee00e3338cfe0fcf4f4bf0cee3b58ae021c9c213e442b6237a228e830dba38acf7fb26a2a39dbc742355ed2e962e95fc792fe2333b2c5a3f69d4c6174cc0cdf0f5ccb31e8d1c1b6b820bf2f17a5ffe0c34c899f66ea38e683b0d40f89deea9a867a0ed28931ab9b550434aaef9c37764bfcea2c6c072ee031951759ee7467c61c3ce9fd4ad2ded2106a1158568f61b0b89bdb84b5355d4c970fda9ef1688cf28712e3be76bbadf314fbe9ee68dbd76873c2db441049d8a85d009423888158f72361d16d1697c16a68a4bde54b90936e1b9aecff545e1462ec047f6f5bae4b38b12886284aa0b3a877c8a49ef8ad907c528f4642a0dc6f7913a8082a0952d2acadabb285e23a5c1c45348b201b1dcf3122f6b0adfca88da431b9e82a6ff3ea7d9f38517b8a7704ac15c19dfa1b87c632db458f7381717aece4f3cd9cdb5f4757641cfccf3b71011ad0372179392a4b18bcfd4624d0d2f0c9d4ad7b79a3d66204003697f00b12ea350e0cad295ad108510164626a463aeb54178e00f142a55ed07b454989c7de77ae517f1726beea370b99f34925c4c94ec4215331aa38f81680f41136aaa36493ff690637b6376c57322e56fb0dca60a36cbb452d5638c714da51118533dbb37456d623ebe547a595b3cb32de16626d4ff5f438076a5d613d54c95ac844bc3e9974b0fa45b81c8dcb421c925d49fd3404fa9e5db87f64afd28c54c1d51cced3834efcca088562842cce216770ef75ee5abadd933dc9e107eff0781594dddca9d30e9d1223a0495af7b1e07965d333084224245fdc519ae22cbe4cd3ec7f584f394dd3f62eb7672d3fccd2340fd1673ca36e26781245ca7a5a018686b48a0c74a9fb27d2f4dcb594309b9f8e699ac395932c231700553fac6ef9400e577d9c6d89a03aacb71b280eb21a2f012b7420aa4c7a80421b559be4fa8250851a939ddffde2534faa3bc85c09c28931fd230676ea7ab70d7fa675c64e5e32f2df5a43b5423dea7e1a58238abb9cad5813eaaba9f34a5d4de55ee68b7edd8bcc6a4a6d56ec81aac391594f13cbcf7f9e806aad69185d682850d0868d0fe26a6074ff7f2f982f209ef93f092faac2a311bf651413fd1ddfdd4ce449fed1b49f218b819f34777b16d0be031f41c3399ed7148178e9791667e1dbb3fa1b433b5f307174edef4675a6c3fd0d6ed286890745faee950c8ac9c9ba045c5714406e480a8c2c6ee3fac35d98b49544e97b2c2d8327b5534bdea9b9cc1bc9069516505c42cfa247a8e829ae33b6f99881eec299a5b8c3f1257e4176f9330258cb8e7d70c6dd0dd941c894fdfaedd1a2518d19ce5c13dc3ab7f80a2f2caa9867e4f5f846a5daa76f46d906e599ebdd805fc61d7599e45ad90c1fb81c972e22451b764117efdf86b29b2173d45f04f2d5b65d763736407d86c99ba4077cf05c7b1bb5f3968c6394aac9e3ffcbd2a49e8417b22c70246e077ad66857221a7eeaab31384dc0ac0a764b33089fc29d6b9445db51e60792838ed178a5a0a44bc01cf4d9d95a9b5c70ed8c6eb90e5a4f992abeede8972560bedebdcee177f1f6566c8beabd8794e163a8e013aaf71ede3da92c4635c127de95f3118a2c7a066c54688f1bc2f3a6a1cec9068f10acebd7843e520e55374b1383733a3489219c048519891f36222b289a02020381e639ec143b58c4ac3eae7095a43392404a1fea73da4a1187cdaa24936b3c7e014dc63cc1e93e44c7ae8a655348075d46b0c651bf013492c2e563a756c0f08575a265d99c8bb632b521a80985794390302dac2062989aa345ec7924abd6c9d1eaf2a3209336d347c84e9b480eaef976b69035f343144c8893ef83e119783e83fad587c00ba10bba0e27d07b2b64cc33787532d963d75e3ff1b80776018b39ea48b84e6e13c15c71624e7aae62b8e1eb34c66945ce8aeaddd117cc7b9f5a387d0bbfd870745ad359913fe3fa3545921e8ad30071951635d5f142ef4a6ba8b5177657a922f004583268492124e2acf80e695ca20d491f26329a33edbd662f11a00850a291de2aed3452a271a7839c080e36593f6517b369617a289579da47522ba9c967b6d8ad1c27930014b95ceba355733d29e8c11e48cc1392ce77c6d4d34c35ad68cb85409f21d5a91647641d180c70e82540d17a6b1dd5960bd05154a96a5c11edcf90568890452a53d1c93d02cbf27ba67544603eec9efc1b66330bc92ad58840b89191de1f53607d9467fcbc77ae65b3ef9a7bbb2f2be8dc6a11d84afec1a37c3f6a22af71fe53e04cf7461954ade9bf3f7e453b0af79ac84f617eab01b892137b43f626c4a4aa2ac158106fcac587d56b0b7ec8d8cd43aa8bb3a0ab031b7d583efb358465f2e9f1e3652174cca0f78dfa5c2275b057919609189f488ee5d7780ef7da795f69372e0cffdfde5320f07dd804c45f356779c34581231ccf9a867c403777f2184db9e0811ce5863a0495148f6b200b9589965c0ad6c7b76e09a241e5ca65aedc7e53c4eb72a6bfe6624fdb147938dd6c60b0f85f0f02bb527141513b01b1106b728ed586d3d0d4050c0bed1303f7737c7091809ea2c8bf5e69c92ea00bd281504bd06aecd4cc71a886539e61c476061714cfccb5efe3f6c7ccf93e0a51a54218c1babd0a76e882e66d6be18e7f708801c76512f6db6e68408daddfedb86f7f43bc10e57c9a275875b241755c7e8a9ad8835dd17e7f4653240c63e7c8ba2d5a76edfb28b64e1772f52682fa0e34133f60cca0160905101e41414bf1e191e2c731407b7e7ae35c0bd831b00dcee7e8f329dcd770cc53fabf9cfc96b9e9f6b6145b78e57b103b27445000325c90305d584b7b842a7356e8187e2c36b85e3b6f2f000be6123b34513d9fc22c430da358e75fedf606c282ff2d15e94f34921611fac687c8a2308fa6b2329acd1e1b48545c15aba82206f2c68c62eee124aca8e174ae0ee61f5d14bad907eae6fd88de10611bcaaa0bc60ef89e4e1f510ef451b7f39926a8950afc90e69286813787f7df82b26e3efcabc7ae014aa27f06b5b3b4cc94a3128b79583885ae44bd6496641d99d8e7b7d0e612492667062aa7fc82a47b80b154e072b2c2cb208925bd3832e622b006d1c30d21ec42d6bcf58b805caed3dbdd53f6cf3e58fbf48c20c14eb486fef3cb3dbacb5af4d1b8a2ec083874dcb78c64ec8b89891c0ba908dbe494402436e7bcbe8c45518f89195c7b1dcea2196026f85001e43402b07fec8a070ed3fb7117d90a1f89f2d3724bf61cb8a44227f2974f358882f7e8eb37e4a3786e9f680edba0e46568ff5e6bb2c85f4c4cb890837db215d8811fc4c238acf3f61ac87ef1defbc42a15e3a2bb176738714ab8cb19a45e3c85cf1cce9f5903e866780bd126d2263cfbe11322fa07999a73ad10e3561ca9c2a1278748d9c4beb762bc382bfbbcee31d9e0c714d6d4b4dcd4d534f76f17e5e0c8dcb24e3d0ec8b6b21af49ef5e87553ea150a8da66d8971f30a365f7ed4f65a67893200f8ff03402e9bdaebbb49f70461156a7ea5712957eb1ad666cf42f248b8f9f5cb52406c4c4224d404be0e606e671476952373442a75f7ff137635ba72c819093a141764c668e72eaf53a43632b60d51abef35f165ed18498832949d935bed5698dbd6dc600298de3474049e4c6b9461dd14662b6808148a88ad8942ab9bf73f024b4cb85066e23286d2ca69e1f90de2e4a54caba74ad8b17ac04df98c0970eba3143ea9bc52302d593d6b2ad4f082adee01cdfd68044b118e1561f46aeddecac3b131173247431ec422c6ed55cdf4e35d4beb242d487f0a5d4b53544b577b8c4086dfa8aef67bafacaaaaee8d68a242fd26ad830aa37ac1f873b4c7a8bdc24aad09b949d62e875d3e17666935b667d8d3fd3aec6413734e6e5c0ad47e466cd82cff0263cd7b597c9026abba2717a7cd083853a24fde0de7094fd1b61379a44912fd3a1dce2c74ef754ee92281084747b18f94ecc1ed33e84ef3cd9c75ff371fdfbea6f002f2e7305b2ec331ba000d5c5bdef320fe18b33981d759346a8dba055cb499be41633d3bcafcfd4844f789998a4818f0d99b7aae9810178bd6d03befb4ee488bced5f5884862d09f2351e96965ef1f541151e7766a136e2e3203ad37ad3a89159fd16a5cce3987150fb265e339b6fc60554ea21a3035a375b5a27d854f3d7241820e0d3e4440b032156d7685541d8e69fc20487b0dab04fc88b9fa269faa6fe841ce65769ea7f0b800147d67d9a136bece6c4517278415d9b7eaf9da8c2e0e8140c6bcfed5aa3a971669e8b88fe92c7e0f1df6600c0854712d0d141bb6ecf66ec6bcc4fe4bcfb180c1b69bf902591c0d93ecda52696e42b2fc10f3379c825724b82a25b1eeb6cddde556e2818aa17a5988550b4c27773c52cf7d5976594f76355f5b97cc163e317afe484bc9a6cb5eaac58ea49b4a22d5437cff6ef8aa3b8f6c40900e81b64098ae3139bac171055a412830ccf9e2dcb2011aa029cd92937569744498f6793eeb1681212cf29036a62a637655627e8a77d37f3d228cb0803dbd69a0a7aa79c6432ee1df91035eff144f569ead90d91a35ef10094c3276f1c9a44e95ef4cf6671f65ee3146b9ea6a3dc487198c966ca31aeb30b8bb8344a5733df519313955759cc486efdf921bc1515f862167f319f6ad6c86e0c6efb850d8a39fe7ee9a818177fcfb7c7ae2f7f024469fcecfd39d0767cd5c34c5b5666a426031d37276eb93dcfea1eda1b50317bc97dea71ec4109f8f96a03dd1decc3745edfb6fd9f9ae5be2a2013c3cc29bed293fdff16cf1012b4e91276c5db7163f39c3766916ad4f72273c2c012242eb6872b35de306a3477748e94cccfc9016ad51e567aec143d0f51c1486b9677ec790453ce4cce754083e146c7c32fadce8a2ab400e25c0dde33359c79ca57c090dfe3fc704a2cfb4fb47bfe303f814f6522b2a3525f55d64a60b3ed46edb316cf4c5ac59dd7d013a304d06aeef258a28c5b995ea56c25850e46eca5a99829fac78bd38ad5659303d2428f287b6fb9e23505b212e58a431bb0a04f19b90b77be976411387885437e800dd8a9d11c007430a1985fe9c51490c4aab301be7503f7715186a2dc7447b919390b3b1451b0635d00c5bdb1904a09681fd74a3dbbc0abaf59345df9d89568f709c5534318dbdd7cf1bcbed32ee17020c10773a802ce8cdaad70457b89482413b3db37e519608b9faa5ea7ec34bab99e0289cdf42527c8ab57bc74a6877c1c3eb486e8d746f872f72309fa6b7cedeb39884dedd9f0884f1d3e6f0b91e6b13e457f6b6b4a3cdf4d3532c630a8d8170c05af28d3bdf65c6debc038d135299164fc754c13d26320cf20f9732afd2dc64ab315206cb78d3c23e9f1acc4bb88b78375d16796693da3fcde3a147817c4565c29b8f454d680ace88f3d8c738eef6dc610e960f518899a416d4e1c5a581d5d1ae9e34a6834749f284a5de68742f5735d338bdf5a1c3bb18d867edb4662791791f188135fe2ad8e22c5907ec8a4f8326da79a8561d8fb23b8e89994bdd4a2b2baffc96e905907fd59e78660ff401f2e85ae883de9cce79e397f7819b9c1e704962be1fe12de3d8b3432344b3c462fa32b42b761d5a9a2e9e7389505ace2609bc10f6880da53554c7a0e8994409083f4eed5442ba6ae837ca5c70b1d7189dc0a916c9ec5417d484b8856dd8bea0fdc91fa395270a54401f0ad8c861500a78a43c6fdf12093e60afdd0716a07ec14f9e7f7837d9ee5cf4e99dd7c7fcb0e8cd771d1b92e154864f98e22ba4980cbf0899bc86177f77bbd193afd959844ca6e63a5752b4cfd22b0d7bb288dfef8e9372209064c2926b3e1fe938d52e7458814d1522f02422bb1913efbbec544d775b4b92879eef5f7046f3dc4e7b6f4672d8c4aa8451d603f1bfa1e2345e72016fa865bb6098935a5ec6ec510bdaae8beb8e7d22f75524e87558868ed7c2a779e1103affaa3a1cc32dade691031e1153d1c8f5d5ad4010a0d47b5c1a9229ffaabad45a45c71f8524ac47a2f05f16bfc1e319d6f0f5c2da1369768c05c581ee345b2fe876d99aee3f30bd44cc487268b4acd20394d8aca4930ddcd2375e42a00a4141c4ca06b8173749540011d53c244089500c7c48844f662bb54367ba884f8f4a8336e3f87b0dde418de7df5f041adf2b32bc246f800812320d0d337727c918262e9a46d548649bc698dfb41d40e736aa5ee6883abba3986157c498184129d6ede694df7952214dce951f28b05dba4bcf7e943f7b838c3fea2dd10271bc29bdcdd33df45f98962cbf56b6bfe225c720886b7fbdb6e6d3388fd4b53e615d174a51575c6982dce9eb769190295962204becb145818234a15d1e3585bd7dd58deae65440615d60179a8492ca26c904495f0867ae98ae5a3f07013042014b4b34cdcf86708f0b264a2227d8bae166b8148400e48a2727e0a483d66fdb770c986abd8df4c40e0a875d84de61b1933fcc85acde21d1eca7b43ee800903a8e380553824cf532a2733d56e942c1903c69a45c029866435997f0bd5dc4de0fdd5376e41e7ad5ec04e90a5c426e729f007cd4541fe9c9e54361db65a4b0f51c7006d86e3c6a686dd533bf574ba9e83027a5225f35408a599f58ae03a7923acfccfb6e11a8efe68c457aa496b3f02e6a2ee88fd4f23a648b0617f60641b33d8cbe2f2b6cec88d794402d57fcdd01cdaf77764769c0412bb29af2a531f62365f161a91c505bf89f609051dfd2daad30a0b56453c88ef1d17721d08c0d1e5f5329595a8e6b52e3f16c6aa3121fad461cadd4236c10b0309b900e2694c2a8a52e9895fe1c76ab767b81f672ecab5bda445deac38cd4b3453e81c8b6800fb6834eceec5f0e7c9cd9196351deb667948f99d05eb347ba6a6c4ef99cf1eba754c8b8a3de7d2bb7db53b0c766e4a518c753178193ea8037580ee9ffd1bf5f9a8fcddbd789e9dcda946b856fca44380b54595fd9840b17532995a1d12b3625be6ba56aadf82b75c7b7baf23747ab380591dd013a3536887aa96256f22e922534d8962258b81682adbb83cbaef1462a622ed26696b8139ac594f74a0084dafd797216b893c47af0d8132c70851b52e7d78e47688ea7ef8e3884b48b080346ec904c924b40856d3b63a54c2c72c18657141323477e690694a9a1d0f5205e2f6dc6084da16c92f4c0e72dd08bc7b548b2ae958f3a41f7b34c7c7b02cdf67802e83a1582634a5dc6f7f0ab6667cb787a2adbfcfdc2bdf1fdbc4be0aa29205eec2b8e18d48220760d905e2fa24396427b7e151a21cccdd1e48d0c88314f9c1f9bcc7ea4ff9d43a031ef7ee2cada827ddb8cdff62c8344c6fc6a22dda99740c453ba2865834a049208ee201be0d8f36b4f972593b8d7a0eb1b7b1074e67ee71acb590035899f9bc97b0309d3bce5e233d445a1cae26bceb666c8d55e3df665cdf4670bda887506e3e1c76a39b0bb78cd0f6bb15342f5f1301e6d4283d1aea7159fa0889f869bce24c932a210a9ae943096cd2b855fbc8400c71fc4f6be7b6c1ad0119e5b4656869e3e3170f25958598091ea80e6fc7794795969ead77077eefa6e2bf397d8abd2b316260767183e93646c727c9d5f55651bd2b6a4d4eac7e1f9e0268fadf280fbd631282e8252b5b7bd0d3acd9e48663db3fcfff75c81679375ed647450c1418b13f25558c8cea66922dd76bbc18433456117702a3503543b625313d5abe0769be605e9f5e01e66043de186ed1e028e2464c6b3b2153534eb71c3080ebaa9ed1c59f9269d11371015741d7f683c2f0924fc1b41731edff6401af5190b590ba5290043bac1637f503c210739696bd5ffb91e68ec5f743215a9756efaff4091e7a6f8aad6e00ff3a0eb90fe58d511030c4c1e20be37e7aaaec705197ec2aaeb6bc96b5d68a451e6c2b03b54888b4846e758d86f3c7ae52d1ab810051f7b3ae7722696b1816709b20f4d84d1ac542711463fa335598a29769360f3215d4f1c715cc7a9aa8c29f34a57b92a7af5e4514d31576d6043736ea514d9c97be36fe34cbdcadcef509ee1bf5196e5d28935b854ed99620de312478afd5f8f9095f8f3f0059c3f30f4327c28ab4b60b4c1bb37e34b9909918840b3c204246e18bde917cbdc5dd47f7fb7ddc7e9a20036f03fa4a1369eaef393fcefc2694e50d83d9f8d111b123904ed0e7b9728949f5912ad5476249fa336f16e0269a64acb9f464298586d262b051446297e79dba35b90f58bebf2cd0b1aa308340f147bd2d9ab21c1b07a8f8d7cd83e47ea0c4fed45453eb3bd97f86ebcc76172e8703000f8ff0340aebdfaf6f5bb49d78c1603ea49aed84ebacb5df4aefa5dc11296779e0005b015fbfd2feb27cc470bd0389cbc55f5c474cf1036106697b4bb64956255bd373d6f7ae6a71014e0a2c281746831dd3f26a1383e0965b118aeecd7e5340904d9f5a1f1f23ea4b71594f4c4b75cc69958cd1168587bf24eb81ac85828698920ae45ae0b384d2a36a984d4c58511dcc410c644e525c82e3361edeacea41875538847a46203c5f5063df85a7fa78ed515a9d2bd6ef9e58f08f9d344473edf0809d44062bd769ad7dcb40ebe9955e072f65e83840e8ac363d9d4aef29afdf5b57ff26b04c5c6d4461a33f9a457c1f9ee1a3527ba868f0757fcc21dba342e97d430d6b7eb6070083acfb64ce007d5cdab6be3edf3247106e02a993c01ca35cb8d8e775c9d7b7b3864b50852aa6f0d5c896fb053e47dee048a57895a5df741fd7d3a985335bbda806f547048f32d85906cb82f63c031ed9ad45a306fb0301ae40d3e44539e25239ecae9e8f063733a39a4d47608da493d2b1a5b647a9c46de9adb8f6a4fff64c3464b996618a2edcf1a6d2f4f178b8308564012554e26f3ac12270fe77a52c3c3779cd917217422eaa862f8d876b60f85dab36811e5a968a999b6c593f924779a4ec8004f407ae429bf7415024095560f34074380c3307ba199a0716f3aa80a021121e3e68408c366f3bd345ce7106f4f78710a2b460326f53203323db44635d11a343023c42124ff794e7b54ca226e8350aec73910c2e3e584cc13d71c6c250df319242f91d8f96462f310c8c3c1448191193b3318c3e1cb2e911d105736689cb2733b35894ee728d1eb9523dcb978451ca28412bf949b8b54f70557cc01f8e41f5a7e92e245406d1053bb0af8fce8f8d7180d0c709481f59c795a46891e8dfbfee8bbe59f8256ce455d693e770a3d455bac1c096f3b2a62a8f641846857c6672c03d0d3494d9320a4c9c658c15603e85b6a041afd99adbbea11da768b777a998c657e23a3020c1a0d500df81d557c1503a788c07c25583f6cc7cbe16a20c9fdc95b7efd553986944f816e3d290a593f48631fa118cfcd61760e87f8a8a4b1d38d8ac67d37b98dccd0a26a1d0a63d219395d484b96a626be3ee8df6c80ab7007c217cad6e5d20c5da97d1fb1f19643e30102d20acabd6496825454f9632ad19703bf29475cb050b1e502d6c45fa5e16c85b4a5332830b0dc04e62460c1c6d98238c1d764d86a267a5bcc9b5258ba677aed44165c7133eadc4ad34810d9c3588901a1418bd518807b440b4dd161793b3ff69ec86643e00238aa74eabff9870f29f034b824beeb716b914389d950060c7b97fc414e486b3c388b8aefd97e011d82b021b13c498c9a762849981af070e6723ad003621e8a1eccd4c8be204b33909f282f5604e762f0c7595b580acc994eea9bae53619f3034e999780bf4d256a1338e99a72427eba7e04e2ab9aeb0a181904425c7041fd5ef85b39bbb715b7ed444219e3a474d2732291408064e5f87d0c8dc98c880a4d80efc4849fa84776f3a13e771e5a49dcda1db189e6a7d9b7aed0d9c75dab5c9642235acd7d9255bbbfb3139daa92622ed346b327e8470f59c2087524f1993264a2e8486c5ca1dc3fc4c79b8211d0033fb443eb0ee12f0d9f4647e08cf571db19f5c42441172722bc6511ae192f329ac5168b61b47f4d7639247172b22acf63333ed9549226c0a6160b0a2d458272e227bdf77ca8b07089b2a98cda4c9c75652a0934f0304192123f60092c6bb9b5d8861cbece49c21b6b0aea3a3c210bc98b666a7115658b584103e2c6eb64118d9e225e89452047d4488f2542d052d93654822931894673d966756ead83884f3413854d8113e044e8f0c402447ddcb10ff43b9f4ac04d1f5ce6e34040aeb78fd1889428f23f6e0c606087745558516cee6ddba3e7c03684ebd07a077f7867af08c8f3c88b8c585c1e2e1caf56a852f2c00791a6bca5dcc79f16e17735ebcdb6855b26e0cfd85ebdb5ba9acf6b0c540cb27913c27ceae895367d8827a20547cb819f7cb958cdacc9eba1c7a67ffa405f03cab5d26fd3ae96e1960c0d85a15bb67f9aafc4dd866a673e0bd3c6bf5a05d54ad644df4a9442e3fa2aff95830bb4a37c99398c7005e7f666ef8f7bbb38a435c06487685aa67853796f34eb943cc5dedbad1a2b1b288d85c255d957dc8dd01bb6423d910969193f308e7085f7e263a579e44fc2a8b713073711c1902543173c75b322ca17202c8b986740c922a371760c5c32837e7b65bfef269668fc210901281801997b0a9cfa988ce626d52c2cad7cdc7f7317c0ba9248fb842ddbdc68210ad2ede2c1d8bda06dcb8c30220b229987f373a11071d1addc8a46afe034728fafc3952ef9ae487cc28cbe5cf374fcd384a3879bc7456d05d9cde89ba21b0b4a6d0faaf86b01bbda8dc8f6848ef316ebc6425610850f40fe71f2f56790a22de3c0a90f7a15ec1e6a27e59dd18af283ff80a41b49b726cc99cb4b4615f3dca09552046e3fb0fde345210631606ea9c4c9e71a7164d6f82cf93a3608635f90b654988bd4268d9633da56420d7391ba55ea33f53aceba49dc0f116fc418f5e8a6243389a006ea954d9f984f24668bd923ba7e9721aabfaadabf6d0c6b3b60eae1993a74a26f5b48612c5c786ba8cf01a16b207af54672f016fc5bc21d5999a8fb31e2ca3b24efaa717b48f31f8120896f774bfaf21fbdf049c89f32eb98ad4025f8bf11f07a1874924ec6a888545e460534a2f6788061621ff99bf3e13d961612c86a8fc02fdaeb1bce8d9f2a2afbe82f67d8c253da5643bd7138c97c448b7683c72c5f91b78f588f2ad736b248cea2b3b6d5ce49d7fd7c1ba78263b1005afd5b830163b2f373be829f6e48bcb68afb0b920750e7dd2f7af14b58db36b896ec8fc60421ef12a9828d2035d99fddc46bcd4d4d0fa3187bb4fefda6ac27392fb9b192f191715af7315843113bb401ad139d07605b2394c1c725d0afe265592923961448d48b67f98700094bb5e55366e7d60aa575a166179e8488be03deda65183f33bf45066ae0a237cf09f84ac72a2d1af859b8e975ad2fee8a62cb0743ae6948dd346bc95de34f762d28401acc5c7af6ff9c2196fdb2605d7eeb1c86be4b9689626ba0d99062ee71a19be4bb2e1aa94d51563ed6dd6681c4e8b66027d236407f1247eb98a8c1e29edff4ab84cd378036506e4274277d646c9812271762fe8ff6e7bddc88049e6f1db6a493091cce7ab47f3044a146417d444614f90c8725cc98888866aee30bf09c6c578364e774f48d11ec27af88a27edf758475990f6470ff78fc9a01a83438583733d0e539468fce23af78f9b782fc43943b0382ebebd2165deebfe1244a2fcaf51359c977953664d59661597bc491ef781eea0a4d1da880a9cde61ce8b58a93be63bf040e6257879544127d6d93fa32c0ad622c8b50585305fcc4d9b8797f79125c27c50355a8403126864669e831bbf62aa21135102caf418a935197b61090628661c46629df375113d66c99c8c4095e460926289f8d45ca0104ae539e665b769e970c08de60f9de274ddbecac84530901d2ac1e0ff15982d1206bf296c5cf3a388ee0af83c9b3013b48bd6d90cb7fa8d9d464cfb4c5e72770ecfe0bcb4823b7899bd725a582b905bd6f897c9d95846eb87d627bd8baf8baf1e3e002eb3b8ff59c1497674a981ce19a81864509225cc7de445809ddedebd1035162c8f61dde860bb205435d0182ada95af7dd57d4f11fe70779a604d422d60d8811846ebfab2f8520255e128b42502eba8c82ec76e536baae830d478a05dfbfe0fca06d4430059afc1620ac7629cedaf6428314fd2c3fc437c1425d81c13bde42bedfb3f3620ee550350279fe1875bece193dc5b0349ee145eeef7eb649a364bb3dcaf4dcb100a14d01269efde4728f2cc0aa87282a56c346c7aeb0820846646f622cd8c03bef58ecf8f6f7728e40a8fbef7f177c19a2426b0fa1f5a6a35ebaa48b28947584e7bfccdd9f907a786d2424b7ea7281d34d129e9e88d6d0a42ba0ab8728830f6586747b282924c922e546383b0d43257af16ac9f5b71ed6a5e71f5fb72132304751735b8406750a2b387c2fc22848b9c7254b4481ed0ec40b7d4336d749b1033784babf214a7dbfdaa4ae20e053ded5a606b148818ab3810aa01880ab6e75bdd5945ce5e4dfdc18ee861b127913df65f49e1326174084c56f870d3575dd4d61f2c4eef3dd93f91fee32da2a2d9a249baf4b25609837a4be70523f52001974bc505eeb1b3e2eff406bd2c7d49120b7c5b20bec647b826ab45ffb91d678df4df041784fe3aa26c64ff79be5ec9a9e106b994989c86b4e56c771b10bbd20f3b8a51af16217ea6079ea695eea67c3cf03588548ce1c5d864a0023d7859be525b889bd6f35c1b9bcfdcee4d6c1137857b217dae9e37ecd494eaddce79f161d29c7521e55b7967401c10bcf55ea48ea6616540b83ccc46d16e93b4222c3e82f512c93a015950d1bbb5ee4c72c7f0295ad25735fae0caf1cd46e03465716b5968732c4c9720e75772c7c1f0f3954865f7379bedacf094d647d88cd2708cd4488e822ccbdf6b22a739d2b9a5384d936b32ae2853f11bb3bdf3b6b7535499b5c7b07e052f49aec537842960f24cdcdcb455659b5df1b7a97caacd6a9ec0091a6e2ab54f8d70f9d572b955665d0f6ea0a4691bba0d90d2f9944a2c950c819d1b656093a0be94db4bd972bed12ca745de7f09154bdf4ded56f4976206805d2411bd1ea4899644fa161b6885423d764e994f08d3506479d4b2f33a3a07fe9dc99ec852d4cbfaa27f6f111170d89aba317461b677f3bd4514ba3b81e170a03d234b2dbadb7d06f35e3e395cb27c6f1142de5786fe0d96d7000202ed8982f00582f05864c2a6812cff0024e5492f79c0c3b4d72b27afabb7d17455d3d090a6598265b112dcae891b48f24f86fff586f7bd0ec976c10d67a867682a50c39d6187561b74fcf05cb817dda68441c0a4423c4e244599dbe66304c431e9e9830517abbf41ee1c03ead9b8d48c052baf8cf97d9eb0caf47929372a846c34e2821de8629b8c9821130c4e1afb292a61c1e9c4c93e4b900ef6a4cb693fa86f8873fcf60819e10364e6307e366c9c7496c4a9633e9ad20c43f05bbdcd18861b84629437e5f414a241cacf159a82f3425367b0b80d3f731b3209504c370b4fed2c6fbca4b1ec4e13acea61f4190d8f02e1ca4e9d7f1cee9471a854fd604296dc172dba12308d67a3d4b78dd533f98460860f71e45b6f6f04a2d907b69612f60dac142c9925864e8220d9230b125ecb54431d042909a76b19ba71215f5bc4a645dc0fec6093973f379a58c65571f9a5923f83c5d7c2497e46ccfc763563c587858c151f6a18efc9feedfe6ef96e3465251913accaf2584834ff0c273c8dd5907c4459a8e5b3e14259982dd8c09c6314c8899eb10f38f896a7437b8e32486ae4c12d0438e4bf52e3e6370f1ddd1ff1da2a369a700b38ce265dd00ed158350624101351361cbe050a6ee9905d6d7aee7fbd88be54d52ec4620ee8c47ebbb398a45acb3e401cd2d62087289e3cf1b826f929302323de67aed2760473dc90a6f8172a4cba6762ed272ae5ff5e5da1a893aab04a9923adf6a2345e68ecc3a98107eda0d9418c020957b9934a5ecbbaf1a7aeb400c71b0aea585587121acce30b41ae0f162b9615bdd38b08aa0a7ee3509d4ba5839583505519da52fd9fbefde07c589194743c01ba1c641ad7cd5890b7541275d16588da0822e071df8c15f3ec71b7239f6b88b9a303f7c978b7a867afdd2c63340494b8cfc62d7c111c010d251b328a07cf7ede7ca3de02c475a2a5245621344d384992bb6415c060aee1937fb4d952da36430c014870b28a456f4443ff11f938cb4b34183a3c7753efeb1525090d5f1df5035c6a8d8421eeafdc9681b7575cdf37a7bc0dcdc7b249f2719386a8efa61364d2a8c90dc1a121b97b121b84957e4142b38297276f00f8ff03402e9d56d5ee858c8402c9eeb02fa4b40671688ee0618543d37dd17dd17c5fbcdfb7f6bdc7c7ba38122e3ac245b87bab5a0c3cf13f0798aaab7be0c12e7f0cb3230b24ac7933bb3f442e91802a26d256ef8a1d6c3d3a4939fd572b07a1560de99cc13bf55946d0491432154fda2964d301719bd47ed032cc27b380e9a482bcaf807f0820ef4133e6648f1d915a8eda4e692be7bb3018702d9013ca71580cccae17f46c194e68cbd0dd7b52d924ff0432c124e2d7813efd29ac9b6409dc056a79fd7a60f82d6d77de0426cb7f76d13f75aacccb9462a63acc812c9a707892530b74c73affee846468fda565eab9deab903c3d19c28b55ccf58c72a06221bb17df97e65c529ed7cfb1f77bfe6409972dab1bb1cbf84ae206a8f59e6c9b7c68452e17702562412e8ce0a05de37e8a00231b2d44408bea617a55f3a5744978d3b2478563a6dd5012361d451309c913162953eb91ba907921363945c0aaf215013c26aec6e7bb08c9d1b207ea065655359b4f6baa0f6b7044adabff92e90e63e65261772c3636a944b5223223dae84d86a2abec4287f386488cb019ed79e91e819287e413bdf11c27e4b5c55a1bda000b9b2421a0c636c96b1d57931c6faa5cd31481dee390b51b479363e3de510e41ea76c1198c478635ecc4fc6298b8fe1344bf96690704b3e8e334a3b331127e7fd7024220049be28fd17cd7f392d8cba383a35a3d936475a8f40c28a101e32b834738731e1ef0c06303201a044381f98341147b6f9a59a03673f8804466b54dcf53845be0c40e5a050dcacd8220762fcf8cab0db6b94723d0d57a5e1a3a4170e1c5967ec71234582432fe383221a633957cc9b9761ec14589ada5a9bc65e3561cd716b0ad1d1f51a8a0ae1ad134be5c4c90f30d8390627973e03413452018eaf3fc894809388168bdda738a981210849de732490219098e35630196cdfab4cf6d1f8049b687bc5de526761b2219d840888b9a203cde18f8ef715d3ac59d4f658b2fe12e1d1836d5a19309c251a61c5f0695ae8d7a07f247ffb04ea350174a1fcd8c6b40dba1c8f82cd3ebd63a802cac5f92d54ee0371b89b8cdf2d4cdabbc5a2d7fce4b2dbcba4ef98d0db793599b66949f0237bd6bf9c899c867944914119eb8e7a4261caef35a65766b93193d426374ca91c23f0e6f4c8a42f6f9ffbf1d36e8da7a093e789a8a96264e7a799ae3743b9618fd81cce03075e79bb0fa95308487a688c247d7ab5afe332f6ac6a3428af3abd6d173885be037d0dc4ecd75962750d5e96ec984cb34ccfd4ed520f27540f3ce1d727a6e4f067a247ee68364e969f12c976faa1afd690f0f514db39ceb151f70956b1d0055e8dd2d941ac1ffbf7ffe4d536f1d27a832d84b9a098eaeeb4c80e710443fd3f0eba456ea2c6ee4af87b69a733b7596ce90ca1b76d7f8c50ea644916cde1a9eb07514a031b4718e708f55736eb84da3df8d232583c0bb8d4b7417e78a9cb834eebe34c61a9a75ae4ddc1cf362f563c02d5a794cab180dd2984fc80b3e305254afec32187a7d5b6cb5365a695c623478a553807545ddaa9f765bb649b00f6f683b300eec7fb8e85a3c60438f6454251ef414cac5444e32800660460513a2ac774542dd1e3b097c40450be654e2331b83b26e83295cd5f47a7775f0663a9be5c60fea63137361712dc8ccc2353cbd76469ed41a580bde70aaf61b11dc495b507279b6065f8dc1abfcd9b5ee445567915c19fa3658f2053fddb316041e318e25967d81ea8bd591b5e3206670efbb8d6b6493add7da7d67549cebaa9823629920faa49214213433155f6d0b467370f3b669a010c9e51db66ddbf937678fa59b17149ee44d8056476f99cdba159731393ddd769313b34ac061d61c6b0b82849e746568ebc19788db6755f9062fb6f683438ca6d2bc76c22e870cbc32f9716ab5aa1875204e236b845c23befb46f01f5d21a33822d87746279ba59042d5132f022f1346a9e389d840cd2302e423e32a68344f9fe20ed26f3a37280e73776ff3be1219f2d74d2b91b6b28229d5081a742fa3d2247d919cf9d95f01bebb7aac0b8bf59c553a9546acbd7e833902c7f752088211cee60cec83e49e4b1fdbbb7307b5f404b727d4c7a164cdcf300ff413d84ce4e6e7a217477b05271f993abc9faa2ed6833b4290de7b411650c3e3b974ffd40aa779c7a51d5a45ac569cd607b9bd6501a7406a4e9f1f47096c532a53e5aa9986fb0338fe4f576e040cfdbeeaeafe6068b120cabd2f5d82dbd824d878a0e47ddf92f1029ab48fa550416a51899591d6f3ab2edb9e52fc2e18ca52a8b0b5944cf0e9e64cfbb792d52ec51741d269cd86f1751ec481c9162aa4189e9eb5f6ece517ab4e0378fbd2329dac327811e7bbd29800af3ff7f0108d3b6c05086b5a181830400819c8cbeac383bf3f96458474352e2e36a39d38cea2cc7f37e7601bf65cd192660c1a0f897c2dcc576c4f28b95e5f0b025830bd6fbba0126e68cc51d429736c78a20d4ab9df9e51465142f1632f0173abc1f00dc7942599d68865f605f36eb26637425dc339077df06337d0fa5cde9e2688e302b45b1c84ad5eed4762ba6108855e0c3312d7400d11a263ed51ecc260ca8a239979ee1b75b86c674b277f10a9892582c4e51e649e5d78d2cd9bd9791445ce9c2db23bd56d9ea6b10e649e595450a015b6768bf1960760c1e9debcbd0994507a27f7fc4ae4e8449165014eb1c33312c9b7e38a6998d84e05c08330fffb96a160bde7410ccbbfe4829c9ae0e432605647ed8ad407e58992f4fa626b70310b2e8d60606c71c7b7c8dada103c432cd428fdfdb8588c948cdbebacf90cacbfcaf5d61eb86e096fd5da86e06cb4903e4ea7025bc3c6beb6c912fd3bfedf12de633586c99402fa0ddea47eccb01f59868903754fba2f0d006e4a1d02e09f3f90fd5ac3a0d70043aa144253dbe8d1aa3d9ff39d6e3f5f71e73aab633ed812a24ee29e6f6eaf6b8ae36eaf3da44c634629ce57ee2163f563e1d9ce60e3b38f48e1847dd2cb15d5bad57eff1660dd1641a08555b2106a27b04885e59cf3971ed4672faa961088f468d26dc1c255950a892ee465145d2b72ac30f97f2e3798bb003319d27f4839a0b56e247d637c94d52502bdc43e3ce57949eef74e96a6fda04218b2529371251b19b698827c3ec565f812e7629f5936dd78d4c664ce58eaead6098f220a02413f8e81afe870b88644d1441e6927d5e0ce194ef08ea10e941ebfba943d6fe6edf66c8f9d31258207137b1c3110245bd079a13f2930b24cc05277850efcfcdc4c21f3b48633c86de8a1e37d703a533ddeb69b23de06680b1283cae2bfc232af7deafada4fa5d7afc9fb2fee86c131e5f0ac01215e2abb41e265feeb21784e848c08501fee813a24395770b86aac6f966e92f06cf30a83dcc720c6dc4853a95d8633cb91515fa7d57e490f9d236512bc5450157c1c39fee2f8629622e0360cdf69b0a08a522290b2c365dd53e323674d4063baef99a58282c031929738aefde490cee5cbeed034dbe4200cd3780d85412fadb7c859221a3847d7606eb2fdb401c4057c29024e82f3854cbc958b4ee6e1cbfc4b1732849228161f6968501c71916eaf6a7ee8929f0887dcb5b563a469fdd2c204cf48095c6c1b5fae9d85592371c5510c89b08a9cfa305d83ec87ed537d676ca73259247ab778d24f19969968e9ecf0ebc6fe99e227e7c9cea8acd6b6e22885c9125e8066753bb02c6112658c9304279648e88ab25d8d50700a1623da5c9ebffeb42707426466d96c89e9bfddbc4ca3afec8b6bce73018b2718d1dd21c306f2b68b434a17540601ac6e47a6cd84270799de2921c5c9a224ae344fed65b1e3e9e82261989ac86d3240c600cb3b51104abfb1ace04e2cfda426bb3f87930272636a6d1805a539d95eeb102e4317c73e9598add4253759c2ac34c911fabbf664a0c3f97d8162a9db0466ddb77f181ea0ef4d5ec7bdd17991c17c960a3359bffde9f509d7853774b597a331ddd5d49095f6dd2c18ca9bee66c3e32e9658d875ae4226f59fc7422675372b6bb8f63512be4ece8db7321ccb5e39db2a998ccff257d0b6998c066c8f18c48966a4d6d6d2be854ddefd27a8208ca30ec68aabafa3e06db2dc7b397547776f1a7c6da7ce3885b9a2106927ef53d87ad25733e33a045f2c12f793c3ff06c02e781d4df33ea28e420a9c6a2ceb430dd0d221c6c55ddbbb9f6fb6edb7ac6b738ffdeeb18e8e8447733f33bcfc38f869e9f820e4b7588ee7c3c6434001d63da97c7e3fa901f337b311dcd2c3f07eed33c8405a4d3143683b780c94489057926ae448dc30b0c33799710305def6466ddcc02dd42441c8d2518bf8138f2bd576ac64ee39a747965afb97d0dc5484e5b161c549b1bb1d91a1083bc909b255a8fab00be9b6e96b40d083ad9d64cef2d7169a47e77541b0076350053df7db6ef9d7bc775ffbc13b723c2f84c2b16c636e78a323996079a5fd9ca41264b0be688b605fab0766907550c8d672b898ed551ae2a29c1b4ffdd777efc910e8419a04db954af3dc35f26419c891873a533d624fa091b40aaf20b4ace71257c489569026e34bcd2c43093eaa86be7278d02f7c6f98407c79985562d8876e47c1efce7bc3a0a87a24da6436dc58bc1074f5470a30445186eaafb2cee3c8326c4a1dac6b5cafe8b4b77143b3f72a4286f6886b756b2b9ab8e63d9c12dd2d57f5c0055fc95d973359bd0cbc64b3e6d10132ddf2e2e97f27e74105720794855212e036d4ee39194737b9467e7754e5f3aad8dea164c6d64a5a21708b995c91717acb89c47f0f43d1d86ff90806f1abb0aa60c7c1275c6f796a3b358dbd46dad43bea3bcc9c7aeb9552978dba3e96d637417d10f72b9fd878ec4a68f348089d2df13320c22f9db6b8a9af0bc49f5639fe64a0e29e417b278da9fc1d9757b1c5ca2fa86282f0ba0277016c92fc3feaf3a24b1e0ada45522c3c2bb6454ccd2262d9b525cd2d5f3349ee4a4629c34923692521674c8266e8da257108b6b1b4bdabfcc29b556d0ef5e78884cca785d78357e126f75dce3a7077cdabc31f25d1d636935d29eea899d70973fdcc5245caf00de536110bc90c81371bbb4015a26066059781af7a131f805aa0204ba388036134397d359b156435a89004317856801f9f3176a1e665de1b06f77008867f967d3c0d03871c81f24c78e8784f39325fa4eb225fa66d7842423802cc3ff701a2629e686f7ae24c0baa8e2566db79e55d78131f61b035c1fcd32c86ee5fe5da5693c8d85254fa92117ab43612e6b1397bb580734898dd30e7ed53f7ecd7ff4f5c081185319d47b833730af98f21919c3aa4813253d9b16517b440a285e26d11c1b0e7671f9693594405cb6141510cc5a44751d0a249d924052f25ffd4b50fe4aebd359c448af88bab21ec47fdfd88b1af95960bb2bc476a07692f90718ce633a32d192600ca7993737c2699735be107a1b33f9eabfd66a1c50f51fcccbd03744b990800b12186afac1ae0a77a20459a8306df87e995b970bf0a5ad088159970ad07979d8022c5d57d6d3a6da35c320ccf2535fbb10acfc5d52687a3dabe80cd2351f1eea130794dd748ea5959707b9d89d1b0e1c638ceb5f02cc5821cbf247835baa7f80d5a3625a598b775b24fbd8613bb399279037a825b3897db1dc403262c225f054bb57289b1e2ee859fef6d478c6148e5bd2b27df135f0df8ff0340ee7d9bf9f53bdb13f22c23c9776f8ebd214b8e3d21af195b4aac626b5c49c6a5ffb756e99368776b5c5e548cfc50a249ccee9a03a65fbfaa9a769670ee02080a50470a163a4e4ef7de04e6426813a15c1e43a56eeeff36e992a8286c03ee39586cca1c80b0c1f47685e46200f510a06645cacede289b98266b39f2c91691ec2ec67c467170e68985a21e6abb345e9ac6c263a9d85e49fff34ecbbd83d3da489e2b26f4d0387ce2cec0f36b13c38acb0ac8da1c31dcaf7a23e44426600a2ce4875347470ee15a345a092d7acb7c4657443d55170cee8c4d98f503a8651f2fd35bc4fb46a3de719cc368c0680c115a60774f7d33210a9e07dad9450a3cc113ba84b2575e0400e9dd1bed9bd5f90ee29fd47c33c66499b71e3d4028a1d8f6de8fdd98bca0100f1c0655cd9e6bede609db7b1abb1fbb9109878195f3b9eb2c624ef76616719079b0a8e308b929a9b7c6262016c829a63928a6eeb613aade24e3a826477ef4a6e12a78e253e7d3c82f6ef046a9f8fd9af75ae5de932785c385f9ad430ab9e4e16ccb5b22705798ef682823987a61e9d01a475391c83a36d40c84e667c45d1aa1535d835a2f6da4d151881a144ff53cf4d2a28e71681a101554677ab1b56b85b988fdd260f6ed18e7073fa3ecb65d3c77920925d0204503260d70800912e97ee5013a389fd6f7bbb1f998008625f8732e88969fe22d22224f814efa56b0baa56801878c10d4e03a2102b612cbb5cfbdc57cc3a371ec3786ba0ef8e9101a8bb1fa0a8cb70f07e82b40287ec4b5d3721c16941dcd303e905434699e874b939e855a75c8f6fb938ed66a74f3aa6406cfb2ea391db809fe192ede1224bf792e10d03debe02be04aaca38e7366cf746120a594e7745d1370184f7ef28b11725ca34f189885c841cf210bd3f9a5f083b8fe514f012363160a6c0357b0950b6f2fd7b7074bc3e8eb31b03d2620878bef97575915820c653f5a2d062e77305cdf0d8859f3f46402149ffc36404de87131c9e00f200952d588ef441acd6a45aa315bfa6503808fcc195fc7d46add884fdd179fbe15f2c32404274e60d5d932ef66d1908e842e351ec0d89f012e182baa6243651e42bb67acbd4c81951b69bc41b3b7c1ffcfcca90082d65613d88ba000494d85a28313b95397a4c463b05b6d2790fb5da3e182cb417f0541909f4623584095988f5bc41301b9573fa36fb0d34ab5a0ef0b3c34defcf06031f555df0d15eb0806c58132c89b96304bef3a79c29c78b4c1e47e7995a4ce78a08d074f47271cf449359da67f44baea74be0524be8f8bea32b997afcf9b03ed563ed10aaf3ede19f8fe7be9e3fc632b1c36fc68b603876abc58100f83fca8d117df8ddadad7c478fedd28befd69c38c3aa51d9c79ce8cf801f15ca48ad58b9d58121e98d633eb894035c73495d09da21368e7f193d11b5823ebc90b0292f0c0291725974ef2e2e84b482f9d6685bcd4fafceff400924bebb6a3349baa9a53968b9066e22551b2316cc0be85d91b07cd9423c3155cb4531e79aee0557cb7deb73ab91f70475841552733d1b949a2e91464a8a56644b09c19b36e4921400e8c839fae75ab15b08d19f52178f722a8425a2a201d8caefc2e33fbeaca3d3226099184a1fbc83b72dcd887d50ef3b1bf0baf69af9ad4aa2ba84f676b26a03abc82793c44c54f51e26def5d58da333da762059bfd87a65fcf2cc9bdf163ab19a0ef876d0406e5a7b93d58b94e7c7c0212234535398ba6a81eeed28bb1a397b0ddee98ea383449d2526009ccfc84f4d98ea214da8ead67a061696c2566c16e20c3790fb160d9bc7e41cfecda9a10a0a82dc54ca34d18701236f89184dc8569fbf8e2132ddf428756f906079dc97be0770f9c7d369f06df98da8c0345ede447a3df1aca7ee4a0f1d188f266b4a902548928d0e9ced8f5929d3014a3eef89eee2eb3709df3a7a5cc527737ccb6a0b914ad9883994a73bc497e5e140ba88f6d0d6e98c1c90260eaa1a35579eb7e4360d84a068991ecad729f052a4aa711e01365d8a54d5acf0db5b88c074eeaea4e7aadf357a01405bc48ce4e75fe2dd8b4eac03024771785166fc85e90f9a55c989ef62ecf84b34c635ed1e5c5885a8cacab7477f54631cf3db0e4ed74b63ddbdfdb637e583c848356f7f4301667b6212486fb1b2005c61ea2c45e4536e48a8848e1a46e98a04d88481c100027ac575c5619f2e9008085410a555fd3383bb3d8471b0228c9f79564e1892585248d14aa05b224a1a215717bb27b493038b7449d31d5c658682339beb53dd47ada0578f3917fbb9f60ece5437c7f49e837a76397d0147c71eef183ccb82dc5cc5720fadb90467330da251a8ef7d20e0e81f213a98a252385d729eb9164e516855f3565e5460f66232b56eae25051b756c7ef2e84e3774a0bae3a7e071a7da0511ffc6c2c45b162f674123bf358cc57aecfd860ee49d6ac6adfdd13b953150c947f662802f08abba0c61047193673bf36c8c6ae3329ae0fa6ea82dbf8251ad43e0280d373feefb714a0716363b003503f01cfbf3d64f6532b64f5b27af5d30949e3c7fff83c29a4a0bb1d46ed3b23b039ec9999b4d00669cd449eb0d8f79c9d3d44b770a3b100c7b034363e8206cd42ab03c2ef20747646eebe26b88bc2e16d9f4d3a81b51a78e5c287d4af021cf6f24d4e7a2a0a48130a43d6e4680f87ce914f942742e4fd35d4c991e18275c899a981a13028c91888fe507c994e433d586b74d498a99399569e3b0d5c970048685828555e29ea18afb70579eefcf4e0816aad7c34cae72f808bc104e8b03979540f56941a06e686861e8f2d723cc9e1ad5f6dddfa1f1c7c17d187f2a28aae79ad94c696bd23fe697a16b3f4e632e56e6cecad10e3eb864a87eb612995b3c67061f4fa02f574092fb65651834dcea7f1a3c15ddcc3d867888217a23d21734c57f6c6bad13d51ff37899f2c63a0c266a33db74ac393e63b8aea4e20e3dc10d06a210688f9cf5d49e25674bf7458034c53e90ff4a9a802731003d05521d4a73797c2ef3eeecd71529bccbc1fc92522bb3bef504d00910caa4406f38d2edfba4dcf0c3b331a91bcfdba2a86b71dd3a4f469f8151e664f5a2bb61c9df9f40590ce21989790f284e9927d065036fd01a89b449bc3ea22fffac53094904b03d64b091abcd4072e1a53ef1428fbe64a1ab46d5a0c8bffb0d9745ff461d076dd62d0f25b5d8b478fc7859055356336c4684e7e4a089da91dba0b584c6c26576043c74e2172685cbedbf1bb35bbddbeba87d9da4ff0dde990ca955ee56ced23e6c7ef803968a67a41a1b075f21e6b9a44a245652ab8639688acd68a0dcf71d6a2484dcde489020ec12562cbd9c63c89f29df436cbec62a53bb67cf614cd42d4576931f3f84650b66637e58f9197b7962b8ff67bfb795c6dc8a609b8f184687e2441df1bcfbabb4f45bd4b77597f424b8e7a348a4965a7e892354172805e08afdc1381b6591a6da32e7a7b426736fa5cf9ecf9689551e52dd1196261fb9cf8d4db7d042f6ff7b34c986fa2d1ea098b1af2680be8b034529a52413211fd5c4bdd9079c0fe85ad38c752eb9437d72763110764d03b3c84aabb37cf054500eea52423d94bd257600a28ac5fe439f40559add0de28497c5fc2c43f4a990dcb994cec1f835241ac9ebdf0da3338bf00c02d6323cbc869acb46bb6a22e0a7027b4d6d0daa83db50ee8f9b7ec1726444e7c3a934f35e7505b10f58c4f38ca1bd25c6a0e9b10d4bebd6b5be6073c8a783184cd939507f501a24f01e57d40e670fee98c56992a5b041a860bcb64cde83e6aeab53b7ccefde7559531097d439630994e4141810bddb7cce7101022734a209f6ca3d5d33862e9eff33d006ec7d9d801539c614f679c4c888ff6e40700ff9b47cae25f06cbb3511fde8f5e5cd3e8d91a874b8d0e59b172780a248bba74a0ca5bbe4917ffeba1bd3856d4b16416da9a49cf82d6b6d784e1fa8fd7e99eace90c2e96be6db7a6c7db3d43286e64c5caa492af66ec4e68f54248ce3678f18c9ed81d29ead9966e971bdc52c71f5f16decb4983190664da0f7de93c0f811535fbb723875d623cf8b501fe25071d011aff03eb8cbe9b68e361d4a568405108f0e604817cf1853e9cc9b57bbbdd4137826680515052568589107fa84dc79682af20115623ca46b2fa76119a6011d760460b76be4ccb2927555e1405744c67edcc9bd9088112affdd5ff6a5a74cfa454965a695e3995d7c3c10432c91467becdd4709689bbc744ee14d938c0f908d1825b181c8e0262c04feab37f46f32c64b2385020fa73f4f01754f9dd35043a1cded8dbea6e083636883404ac13087f2b7b3c940bd8fe79b9487d505118fbf86bcbb35c9019b93cbfff6bb9ae73abf0973113f2cb22175ebe7b2e700c7a0642e27a634a28ab80366fca27ab6dfd4aa3b52ac9b4ce8869d224d333808711b0b0c284675429831637cb4c7a22d326d8b3ce6e18263071d26b0318366c3e2b0010851e14c4ce3d65941e66d43282473ce550c0b88ab2592f59a65cc0ee87d902b32f209a67a75deac8d1a347c01a7f04bfc511136a39261fc123e7ff257ff2aa1032924581b88f342aa5070f609bc5b452e209aa1a3a904f78b8a6001b833d8de25f428d8f2d0575e1a6180d57ebcb5a9a98a5c0bec56c6852759ff8dbd1e8e0a0a8f10fb34de1c647995ba0da288d26be6df567fe9189d74cb10db0d4b72eaa07ad154943aa2750329e3fe494f1132b19cfe71b2f2263c968ecbad59adec46a7d0fda75ecddccd5b43e8d13eff58bed8ddd1ec2173b705fa56ebe1379e7f45fdae5f8cbc1b1c918811662a896e72e8091b397995bcc8dd6bd03608ce891280d10fd7c8f4dd163afce8bf08ebac5a7fa25b0986b33e35855dff48e874dadf90cf05f92a184959587aeab78ed04e8559c9befb2baa73bcc4937245268af3b97869a784bba7a159a5b10c33346c07377b60342bcbedb57743c033c1dc45209417b2e9c57c37ba68a6600a185bd1f668bcb3c36736db1a0f97738d3467d34b52abf20816302f58c627af22c1f14703e6edfb5d2e5f15ab0a1b84342f07cabc84fac28e614c2e364f79f579534f37ad3d202ff0a658f58617e9727a27e6f9613ff89459e941fe9f9ca0b45990b4ade6a5e405195617a70155966399177616d0bc1bdb81cdc8bfcd5f8d2b95ee11741ad92ce80ea03c02aa07da5da78b22c91a7c3299a757cd12fb0c7ed0ea47950315cc92a953dcb2a9f44461be2fc317ba29834985d398c967b019ad2a59a50068946c12ec2aeee7ee3e6c4fffbee71bb3bf8054c4b44dd678af8a615b2bb84942e687703295dda242a4d86acc6662b49ae4cdcd5ea6e3830c25adfe61842c071705898451fbaee2c5ceff10f5935badad805366d0dd6492f33a74b3c9baefafb9de65599259c207f9954ec1db0b2641899e6b5d768967218e6862804242849375bc7724298dcee79bffd90b29e9b1d6132967116858a333ed5f8b3cec4bac52970a0230eb93667d667b108513fb28686900df5e9c883bb5fc3701fd4b729bdbdae55d2af212bb3b02f5804f91554b844e9e4cc1746dbe7666337bebc897a63b91f1cddf9406a53fee6dd79190629afbc1c6c52fb458bec709b2fc3bc5ca613599813442da9f4d5a2df4d441a7e56084d8128a2132f4d0c421e29969a3cc9f670dd1189fb81e7c06e519f4fe56491d010f8aec6a7277282ef8a23bd084107cad620d33600189d01408ee9725aaf26e439886f3549d5f90ff91023fade75e934d4f75bfecf8bafff57803437c9504bc964b2fdd1bbe3208c2a5aec2ea52a5ced1221343a4683a2bf030b0722c20d59dc29b81c504e87b9c8944e5ff005d336fefa850479d33ff9e6872df62178b824209faebd2cb7d11901a5bd048b138d75e1175d4190f747220f58306d631d888901138e3d0b74f77e783310d9cdc02ed8bdb8037276700ecfd64e1f4cfa19046dd90c8a6ed816047591f553417c6dd43a37838ea0c9d79e89a3688a61937a29396f42e6c0ce60d49d7000f4e2972cabf073e37f8558513e6d5ae0a18581e8b269af23811bd081bb78d86cf00d135c190fa582cdb88270960af5e95cc2d12a57c08ad47a53609b52ac3f6846bf5bb4ffce61dd9559242b58fe0dd2aa8b480fedc026152315b82683628c38b17eac2d9b4f8e13fa3b5ab81db11836298d8d848922feccc0fd5c7873786ce13b851a84d2293163249525c9f503206f56fbdf8f33c7766e1c5149f3fc60f7e0d977cacadd12cad12c304a25f98f5b1ccdade2e3531b8d69f71ad6c58e1dbd9ce85a5f9699ee5440c39efba0ad19010d81141dcd37714ad349d564ae4c61626bc7079916aacbfbe7471ce57aa6b24c583109f0e2225548ed44a2482f4990fdc118cb8ec61d25745ff4685f06cceadba1ee8da5186dc18bc97042f05d0b7c787e3c0936af6360e674fee5a9c7e1b8138afc275d9497ed91ace3a7f1ba8e9c0dbbe4825418bda0af48712b74b1d1eade280f3075619b52841ac1e271e215f5150604520de3046d4f4e19e271b6d4f32da20afdd364e5d8357dfa050e2279a09824c8ee8c21dd8246e70ba921076e61032bbe98a29cd45ae0c39bf4c200906f8e3e6ae59f09cd1b539a137ab3946d1067ac2c1c100e839f11a9431c50007af739938c3fce6ec4d927ff7f5af939ef3d19fe39a9f87675d6ccd0fda1abe84835a3621106390928553d3d7e2aaae31f667111276ef1f75c51aa9af08578ddee740c9c3f42de0b08d7549713e0469747f99a1dfd4f009b8737d75bd5bf93db47822cbe326797b4eed7f6ad5244306c3a0c7a7bdba3960f61c32f68c75117226a82b25c5c2f607d7ad07968458d9e0e3ec892b137cc1de3ae086b1996dcb8db9eec0ad3c68aba44847d2d7537c2581c3d6622c547d394978bd83ecb7adeb35ae63969325997241b7cdd873b1904707f797477f334c3f56c544edd722f172b9721c1e6588a241c72a4cc67ec482e19d9471ee94e400b0a9c809af2d7a001b255d96518fb60ba6360dbd566c5dd5ad8ab00ee53bdd48613609f4956cdae8e13865a3d470ad4f746790cbb68fdfc86febdda4e5a31a4cf495e02e7cb8fc65a0ce57b3776d07ea07faff691d4867a5ac6722effd63a1793564fa6da53ef4eef32471ee9cb1400e63fa7340b8b4b9dc3666d4c28a30830f01da734de47244c09ef67198797af5b55da83999812e76d165f1826c22efbed19519b81c3dfddfe56d12fd84f3fa08841a62dbc067ab3c28036f21021618b5275d715380c914b493ff79bcd24f464ac0c642bb4a4d6402da7d7997d91359445d303993a5b03b235239e7f465705eaa04edc8e8643c79843cb0f4be17d36bbe0501a9b62d479647dc861a26b35a9e530151dad5f1c08bc895de466ea159307698f3b03a7f155059e2124e033e4d33f6ad8b43e5faa938d631f96cc6c98d96ad72ee08887f1a322c78489e288282c2228500b7b6d16288762e6db69f7f3efbd6b172eba79795a3fb8d7ccea68ceb29851d246e132a0ce7dbfb6785fe2b5f25f9ca04583eff68b7b2a9c211b92e526dd04d0d045be9698a702ec5323501d7ba15daa95ae49244ffe701a8640cbc8f93bec4db670207393856971d000394509a2d26afc7372a1907441a42618ee2d02fadd305521a08b88172c99250b09c195aa69ba03534b3a83db90637d15d69428179c2b8782a3aa78cb120dc24f32434be5a8855e4bc7ea0b9506b9ed2131717378a8a2480dbaac0d2c1edee5da846181d6f4ded49a9f320916e55aa8da264b62e6c8da265d237855c29944045ea3210a9b33feeaebe7a287ed86c77ca2ceec5df8d94622f78316bd804517ddd3ed1acad1b48fff44557b3d46f08ab2379349a1130fea8470ccc1a0237077d1636aa779a3bf13c687178f8927b846f17f67adcae0bc2b24a0498dd33f7f0d03" + "6300f8ffc388d4a41e008dd0e173de57a9daffe9da8597a45a0c84c420fe485ab2566b5256f426bd929b4003e8afc10c3cdd60b05ff0e1fa53ba5fecffff7ed9f787497a6287a87a84dce79e231e891710452224aa9288aa548b74ff39f7d64b755525bda692a14a6360a0995c48d020283236e921fa20cce8312a30086ad62842e1c6cb511933fa717b28561ad2720ae8c45ce6afb3792340662aa6a159b37de5a60744910068fb7bf097a846c568f1eb9788eb6811f55c052fbed1b31ed9d46242b668025114470e7b8a16518ef087b780cdf21a2e1ee03e839326109d467134cff2b5a98e16d9ac9c64e76596a67154cf80ffd31a94bd8b16d166796d2e1ecc7d062c8030785133fff22cd530c3f5bbc029f8062e888607a257739f41116acd3554395502f281c0f21a94b007f5c0fd10fc8e3eb448ef6bb2dfbefeb7c0b4138bf18e1c898077305aee027b84adf5d52bd5a07ee04aa0e6aedf2de43a7415bb165805041bd2230cc1376c2981d5c856c13b9847bd0eabe9e73550bc63d74233fd3f0d54f62e065660a7d4065412c8b2f415b435825875173e8e7634053cbc7d841a1585b4e18a5dc5247dedc257131c5a7b846a0ca85443dbf3552bf1dbd106755e83965bd79353903e64137814c957038114d9098806efdad0e663a87cfdb8175d0dd334addb88b73b762d5438347cbf87496231c5a393de34762d68fc46c0373004df0f2a92be6b028906ae946a6007f759f2ec9e5d54b02784e8201991cd3544d565c03be830f4d0b3722bd5b9604baeea7a0caf1270dd54460ce0ba2adf0fa4acbc23a8026eb340555d55d5596bed681a549457a9c8ec1419c3b048033604f799c966b329b003ed3b17f4a481abcacb06dbb853f269a4c0140ca9baebbc2460095fb125e080b734a32d982f84496f1af0a8d1e0d40a084d735cacf1a1a7001b7f09e51e142b553a06ead7241680341eb2d04c5bb4248c4250a190c45015d80faa66d742c76d6744f195046adf4785cfcf58758002965ab431f454738536061f0047f5cef77e1428bb212f4914478332f9a02f259b6c205a64d3625ea67114cccf42b4f812f5be46cb7a8c1691d241cddf2b1d348a2376c3a82f9f28629268f1ebfe52467f8c233fea6151f5afe4f833856811e91cba29451c7c065ef43850b4886aa241885e4dc8a23fc7d110b862d7468b2f51c4ec8a16513a283dfd600991cad2288e029594603ed2cf3db6f4bc774fdb9769e5ccc9a862f4128ff066f99fe348fdf092721d5ab4f822b0293d1e5e42e1bd0cdeb2122ddc686d1cb1bcf4be261d5f255a346885fe1c47038597700e79b1dcb37ea7fdcf31727f80adf7ada5b3967a766cf2646286e00dd65d83f6262d4c3e0171efea0ba9055cade7813c99c06df070fbc785e3bb5a9ee7659e4e5ddf4fb340978182cb89a292f18dd18e0c069c2610e2a901bd5a8f38e9aa88453af922605aa7544c4eb9e14a6f557d7bbf6e02dfbefe9f76ec5ed9b5dfbefe3f6815c8e1d6027a3d140a3f0ea5052403c18f6d97420c25813d6b07ff59aaa110d0b83a06a0cd8d6f181d08819d344ce4682d0184db28a07e30ca14900cb0dd3a5882306756e507d170103583c58a60f0c2caa90902bd0e82f56619c821d4f6f7c3d87a0c750c811a4b95b26b81b4d64113486a0c8fa881a42185ae86c9035b3aa0bdec2a2bfc654bcbf964365d7bdfe9d008f59e95ed8a8ba3862dc100c5c0c6d189f42281ee1727699aa669a60c24030601bc3bc60c0aaea8244d27d9141018ecd65161d5d14b20ac0311a75375b43e7466f681959084c74492e3d9994e26c564fd75d36eacfbb3d6f6e673668a7c4bffbe391ebf7fbad82ce06abd815f3228f2d56e57cbf3bccccaf97257eb8df9253345be32699995d71aa77522478b08ce79b5de98d214f92a862df7ba66e303d444034a94a28dc1faf60945f1d69acce2798888d23c0290e05bad61194e027450727500749358e38af4846974eedbd77f2be7a70fe5d5d86d3974359bb8d6801cf62c04fae699f4bcf5dbd77f63a52e24a038e81f1061c088d2006c456f7c3f6020a5d0fa295b14120421e97131fc92c1e4cbd7b747d87a2f2a6c0d14060a32690c24e1181d04677bb46400944c314529ddb859a002d30d6b8cdd5b9406811d23dfab05b3049879ac6f1a0a742e53f90e8bfa1a1fa006d985c6871e941e1c0c89c7503f28f7fc398d8847e151ab624b4eb982bd0faf8df5fb448180b38324c8d27941ea4fe764c7083fe3fdcd690c3f3cbcbf01f5de4285d632dd1dd2b023d3da1f20cd3e77a4d0703b06b259687c00615cedecc6f3e404ae2b2dc1412dab5048a0b0e532762dd454c6d834548a8f6a4474fab0eaa2c03b43a132cdfa672af2d974bebae0f7da518810761bbb18616dba8342c6fd2857632f572f333dcf260dca15ba136d6dbbeb9dbce9d89190591818e73b053f9033ad26163793e1580e253aa6f23581bbc02abedca10850b232237ab40445d9db4056f9b9bd836cf208ed69ceb69d712d91d163b85b91e9087747bb15d6ee727b1468c6a01d0508d46898aafd3ac8c95384921802fd13595bac8d41dcab8af86cd9b6793a5464518f467fcde1b2c11830283758a934402b234548520f02e220667293d9b5d8ed55f00c2c18ae1eae6e1f4de919a23801ca3f14262df2d2e254a5fe475bbab79d2979620ab5e3d0ed0a96d3406351ba6d72abe9d4de5a946efbfa66e5743aa32ec879b43f6cf6dafbf0daf920eadd110307811b6833195392a08268951976f01ca5fa6fc57364549911e8b4a6acbad05763f5c6cfeed9dd78a545499461ef1c114f6539b003dd7b2f615616404bc84ccb7a67780ab9bd8c5e9b180defe24424dc49cab534569676f4aaeecbe07b47805e7fa5bca304ae1b38fab102f930cfd8a3ca61ec8013bf71b97604cfd162b7e4730432360d1f4e637056865006e75a74182c57acf608b8f3cc3461de49a0c8674042cb3e7aa8c4c4d828e0e49c3a6145bca3ee78f1704815fb0b55e7bd1c1dc1353e59b8fedaaa2ea87b6a470ed855a3b8ba3a6e3bc9510f1a18d9d3d8555904b3da630cca20bc0b186b0c74125fa6c743a8c1c7c4de6a798e60663c851850c0d5ec6f3d8df36a4750fb6aecc92999fb844f3ad5411667677e2017fca81412e4b3da5772360a1922577396b0517f7b7ed3e3e1e9a0697c30e6de8ff3a9a14c98eac720be75fe3d376976e8693addfe03a5d3ec3c4f0236b1cd3b92ab286e9592830e3851865f8e729a32fc0e514cfecce10772c867be34eb291db75d22b0f2fb81dcf27a01be840d3b86ef3f61db00bb38cfcb3ccbe9db75d0e95a68eb4a56b0f7c0f5a0c0af1f3bc01f4fce82e39f02a988ace6a5a1272910cadee8eeb8ed3897a377c029b2619b2ad516433f8d66747a539c7ba3d891b09e064563a8bca8a90d4dbdfa3429df9cb29791114167b8be107f2370348ce7ca9c80f9211e4778e8da46c9e7b4b3851db9ba3c04c6dbeb34d54d76af32bc236863c97ccbebcd259c9c9f2793df09b2f8f6a89d77a701ec7af8f1d258ea5eec0da02e52b611f2b2e7aba922111fc01742ed4357438357f402154861d599115ee1779dec7b72aeeac2dcf17b82257bb49602087fa678140da343c75b56a1d3ca682a67070f8f971bcf845dfd05a74bfbc387134ada24860d6af781453186cd66f3741acba88c806a56e77796057ec1b4a03dc29eac3532b2d20678790cd47e15c3a82015390cec055a3e13d9b6d9c447f02f79d2c55415d80d3f2c81c70eddabfc16a34505e28be5be84c4d92b94c0b7e3c1cf41f0c30496d1f00a1d541db28b271d12fbb54621370e539a69deeec8fb0a39920675f7ecd8f97a0e8bc76f5fffad3d313976d090971a58d241071d95fc355e8e855b1ecaabedc5a1c35b9265abe7a12ce379990654e5af239bcb950f76d8f96ce2d6659127a1ff41f611c7f1c86918817eb402de472940fdc04539a1ef6dbe4057a8522af83137091e5434e57e4fa119ad5927050a1b06284eae452a80e0688f1ea41a1f82733f8ec827a8489a636c8032822a58ef452b1e086d4185133c54cc155ad887e68f6e702ad8cbde995d5f8261c83c09b1e3080625d2d2d48561d1c60bec471daf143782c313ea1416d8a4940ecea2ada6614672989304e46ee5b0faf9fd3b60aec4d89d4883fb6f86041e48611ca0a3400b88cd58de169e29aafefc60efa4b926f918c1c7afc56cfaf15322ffa000684c51185621027b41d2f3f2075ac3a2efa3c4437b4ac78206f9ecc2d771971b6bb1c72229cc2ce5bce779e8581096d70bf8fde6f990c3da628f502405ccd21590e0279e4dcaf9441894a43bc85a15112eebe37f603f541daac1868e23ada31388a39b7325cb6bf00e36a4a82dc130fa6694322b731d3743788b188a3768d0c79f497aa7e8f5915a771934db9c2bf1f5b83d0a5cb88840502d258347c44774798496a1a4e703f846e137b863a17abc61f1d20f6f1fed76f6e2f6bd763c105acf63a9371b88056a78e830d0d5ed23e54fac3d54c7be254a0c0d3e2c784b83c5237658e2dd8e82845b26be33a9871d4fb2fabb2981ddaa71ec1d67109695ee409694c908fb6477f308d7ec14c0a942d8b939bfea650bf820d40a0665428a5d2b5b9265b06596aee497294b080cc8cc9c55515e7da253bccefb6b87a9a9cec5566dc5de5b42cdd21f96b079841566b0e7e5fae75f9690a5a9a5bd807b7c1d6bf4e42508593e7f3796827353dbc6acd3b5017b48efbd76f6e8934572540be706a573efdd77d76ebddeccf6b287ab35bab6b8078506bc0f3a52ba20351f291615b0a782ef3d12d46558428f89c179a8b251b20c2cba2497abab4b096296e1c67c11e8c06a294ac1725cd5a1c6e9c7a3805c937bf9e388e5a43f2ccf2e6fbc8e11058c24b84f1ed657d7cdc088bced8a884f73e7dadbbd6ae2c3fcb42777f6694f2e4f26a6f2350533db9a59acb2e9d2bb3db905dcddf9b1f0e6d560b6826b877b98b928e7f314db74e261a6d9cc8c3730cda6d90aecb7135cf207fb65d551913960bb76aa173d2e88685809a7641e502c55bc1d5b68f800aa85abca8d9c7634c656d6e9c7b53f5208168ae4b5a727a7e8e40777ef6f2f6378d8f3d5fa2986fbcdc38d0f7ddcd67775b7848a2e8ad30d640ade43765049199840bc47f7cf787fa344dd03e8a001076fe039e4d5f2ae668493fa520c950fc3289e26e5c7a0785ab8a618e4e8b423e5ca5ba0d5a6e8a0f33f8616f700484179223cce49fd7614b5b9bc7f4a31f69904cf21aa9e118098f217517b1a71aac5fea5060c15627aaad34212c1ee566a0daa49bd007eb72bd35f087a11386b73aacffd8ba473f3d734587fecc96902f79e2ba811c2b5b423580e5875047992c2f693b6055375c6eff6e422d27f2c3930881bb7bae13242b07df16b389d8b6907356592617ed0f3e1461b4b38c974921573d5263d807895bd1a8bad743cb4a4e47647945ada5e591ef1984068cd49850ba160d31257532607fd34c711629ddc31471e7ab6d6adda8187750a68eea712fb3ad133d2188693666b1ae5394e266532fd1d55721be003056e98ea53ff8e7cca63c5e4c227f35952fe0eaedf5eeed0a6df353d06821605ddd42476ad4a92cd54384a19649f4489ce28a9b96924b619fd10c832a94dfd005e900f54a165b668be30e3cb13222731142477022bb961868a2486eb8bcbb45aa6babd97c4b5c359e891cad92f1208a481698796f1fdb19b3d55cd1a1cf1abdbc7b7446f6ffaf9db5863c8f1694f65f256cd5654f3c5fc8cc1e08e6c022a828f301a4f55166dd8d87ccfb511db40aead5093e55d0585956f5ad427a01ad61dcfa320e356149de256ea183f198d22a02b16350c44cd56e36741a97c2081729264bf2bbb7558acb9688756622826c9fc4e0b6f46abfca6436bc9b5d07ffbbcec02357f3f1977b01453a5f37bcf8c5756a5182ab3abc8926917f24bae2924f0c3066f8fadf56a0094b9a0b437de7122699b14ab915bb5ff54464d32ce3ad81e9ee1063d15d53b660230d73f27d8a9b475300915d1af5ff36cdada7faa644f2fa743e7fd9b7bb8c383673b3dcfbcf521a100e595aea977dbe1be7dae19c3d5ede3b7afff5c261938745e0252d2a02849c17f79d5110e2408975168b021219d067cbeb11c9d02ab8498002dd4915640881d1fb4a41f0eab9883baf8fd09f3748ecd66fd14c3244d8aabbaaf6eef968e37387f41a3550dd684f3e96f5fff951910a57007ba09e179ec590ac0943fa6a40cd20d7d0a930412e2ea74b54cec28da662286fed73c2dbd703568bfcdfb7f9790a5513b0ac867d652dfe3cb6c4bd20797f7c82faf17b07e7f1838dae7cc6591e7a13b3fc4c0cbae689de977532d81987aca1e05d646e3d78ea2e78daf09ae4ecf5650886548169d592fab1dc16df0be31b76cc9e4fde8c9d37495ab87c9186008f2021828b9bd1357a3c5608fa4611baaf68554c0c7fab1ed74506d414007ba32ab42e5fb6194bdb7a1a5881ac138aaf51011ed570b75a172acbd31f559fd9ba7e0fcfe98caf47c0ac2ed1b9e07e16bc556f59391a5b734c992f832bac3be486e9743db04aa87e0e5acf23511371628772d23de72cd7a6c46def261f9dbe06581cd1db75ee306f1b92678789cab6dbdd46c3e2bbd2507436f99196cc34c51e106d26aceb1c6cd124c8fa8e935a9e72eb9d705901e43c6d613b0d2057b89d26c59e16eedef7b0af11fc913c0fefc5facdbcbb78f60791b301c97dc158265e4b34ffb4fa6c8b7e6aa0b34610866b7bea9b996c1f2f27a0177fbbbf2da53b91fee61f77fc1e56432399f6b3f5277fbbb1a5beadc10733fdc9b1d8233aec86164e30d14a3885533f5dfedc99d7547c8395e09137c0f5234adb562fa4c56e3c4ab18439106afcb8ae44fe723b8bfdde021b46b6229e5d0ab83d31feae8eb507ecb09d6c8924c4e60740cae70370db647380fe91cbb5656a019b5a4ebffea060a50335adf8e043a06472e1857035981f64c7129a091f48258856ce328d0b4c7a433edcf6bde3f98bbf5fbfbe577e01dccdf812b9ca98b91a192508375a2db8c4566daea8ba0228263307706c0e0e40d4091bf3b5db4ae3200af3f59672de8ea0560550130456c410747940a1f31d02662feacad981abc48628ef8ca1015c66cdd21e454b0b1a0c3e311bea62aa8c3f737cf8a5626e3b9e57fefcc74ffa62c310f1a1fdab39a68a878e5b2722b1073c195b993b7d084e3bf2990952b6d5822dc9ab838cf33f75f100d6f9eb363651e054cfe7159895b0daa8255121cd36e7a6b9a0b16656bcddd9e9cc94a5c4b423ec2d69fbfbabf7dff5d9818b33e59e78ea68d34c046948876ef6a76d2da54814c6909fcd19caba17a6fa872f6ae6ce7a213d4e4dba769de68d89a77f4c6d7549e9f057693388d06b032b280ac2f4c26cfb56dbdd5e7535ed34e6f27340b6bd37dfc087bef9d745e91cf5eb967b3b3068bada2cf454c0a36f7c0ff8bbfe39ee1c31a96c50a1e557209f6c1131769392fd3b6a5efb867f361ad9d29586e3b9ded15c3860f3a0655e6d0cbc34041250bd9c8947fc07986621c955f39c1f9d63c99efbf34e042a0402a1a9d09aeb433b07f1836269712c6decf50d126e347f35606cdb258996521fa3dcd9dc220e79e6d26f4df0863c279cc6e6a393a70d4556587643846a6024bcceecd66f33475d64ccdaec03b34179013e947592d0c7b2d97e8b9ee9bffb036b3d5736ff88afa1e4d61b27c95d4c2ecb8816b443913e830293cd877e165b40cabc0c67bf7811f811cdc57ce2efdf316593acb93be3f2ddfdb77f022db741031cfc1209fb5c1bf1a0ef231664b8a535def50db2d04ff0a4511c25fddc4ce16cd92976936005bf774824014539645398b6d54686f390dc8a532e30de40f42d1ed46277b7f2cebdabfc44af257fdb490e4760a9c9e0649a8837a8875e54a25bf673c7888cc82e7dcadf6eedbd7ffce4383469715de51b15539d3647ce133c4bbb4c3eeacf4d3884e59273bda5f94f74a361094e30c81282f3f7efe6c89c1078c302c6de336761b023a1930905351f9ee1ab0228163e69e93b79612b8a00647ab1044325d529a5eac0c83f7194198118774c2c7ac67f702be804872630b788e3a6ebbe708fefcd16dc4438b8e3850166e31dd7b382caf815c7d38dc943ab3342ad9d5118e3b25828b2dc03321be551af66493a1afcb413ef85149176e59baf17388683cbd476715d2d7a0e84d70df3b57e800eb1a3eee6bf9057c01795b8a985ef4e78f31a8ff27f24816c6fa572276a2847502cf0ed236515ee48c5f05ff1a7d796a8adf29d209a62584b32448f6fca4d3b92932b558d4b2122ca7871d96d7095ceb1f6ed3c481cda263988854659a08a12cef30b077d7a8c8344399d8e1268dd1772f19fb1e037fa6a1e56fbd08792dc3cad1894953801d5cee85f74c31748456bb0a03c560b13a05811c8c0ba34bf32f4ab241fa409c3ef0f55c510855ae32eb37abf063e866fd646e8357b84ec0ca8cd1c08c3256ecdd4f314d7058547cbf0c4e927cf9e99f7d29753bae19cfea01f78a22c98ca3de6bf0ce3874deccb799d6dd6f3e5c5f5c2f17328c4c0637f74301fc1061be4abcee629617f35911ad5fc1236f1e7613ad12b06c4950993d573859af37a7f6989cc83866438a7f9073b464664e0a7619a439147bb28688ec5b1f6b1a9ad03243a070107657c1e0d8f62eb28a11dc0f27f7cb2b465bbf7a6f8d99621d504a9073ecdfa24517d1280f34e6999654c7181a0e5af49128ad7004efd40382b06b2d07e503187b0aa60d5813dc3ffe0457b74f7092b2bed26c29b2aa72fa17570571b835dba02459df8c6ff8c335890b9b98c0186bb80ef8d8cd4219c664bdfbe81e4126f1ec07eb38a547d06e64e1a712b825d2ae014204bf3e09b604f774523a7ebddca23f1a74add68d6dcbae6db0a2a4f2679bb459f5b52f1bd51a4f56039a7c52accc2efbcd290d84e658fb6f8b41579b51b025139ec93b85e27757ef03cdf07ea24d9968e731a77341d71315903e1dae29cfff3e51718b1fc6810294e7df5fafecbc3c2f9fa8081e5e85fa9b14b892107fadc9cb66c320e8180e35810bd47408e0a04e600ffdeb21dcd018d0420b9e104ed1693738b9593e9c2a7b1bc57e5964e18dc292e01ba69572213b20ab1ea0de87a3f01fe2073f317a94ab1f422c285a8a1dea2d61e059630157e52f98bfe61ad6e7f714471943dddaa4d6abdba7c92b0d7dff4502dfe7690a803a6e0bc7755dc5ffb1893c141243e0cb354927e789b6b77dfd9b1a54d432219794829b09feeabea97f4f9499329dfcaf2e14ca44e41c00490a0ada17d5c746848f41dc6a087d46745303058a41dc1f28ac01113b29a5dfa4e791527c1ac668e5b8ae4ad8d857a18353ff68481839880ee6070cfc9f982c4dc1f99a80f0a7e65a5fba6967afdd3d299a0f1834bc8da5e9714781abd78a5f9614b12f53c2e68609b0ee0d2fe6f36c9ee7d603d4653cb892932c9f5f9e7ae741e1cccdf9ac429c9347ca33556e57828e5e357dd5f0117482938dbf3cb5464316bb37cbe770bb63d0d59071ea8c70c155405ca9f1618fa1860145e0a4e498cea0684f6b616842c1ade2a42086ba0f95c1a80ec0a7083726ba0f345854aa62de51479663530d696ea74b02ef1d739c4552331397850f4539c5004ac10b59564a84952e9e292172abc3207ef97a54d15d59a4139aae98ea281bc19eac776e841803316fe3661494141a1fc071bb54d9959d534724a60913fab02db465d298d922d02a0f3603612c23f5eb7732b02145d3b2d1086ff9e47636c0ae85bfe439687801a110947412f5aead46f54d03ec6039b6a328e4695e8a59bf6aef603904b63089214ff389ba95770ce95ed906eb57e85865da35b02d508885d500b43d3e548c362762c27fa44a3824d0f56c871c906bb566c752d9c9ca0634bf0e93e907fe671443f7357563fb096379916d25001f1176ffa03468ff38667d0437f36f43cc3f946c1695a147d41ae1f7683a2f3fa0e1e8a601f45397ca8f1a8a9fe243e547fdf17c4db273bab7ebbf700ae9c9a26857ddc8ee134dd08e962dd44345e3b38ea4d59975f9183b5f18f806b2f49c4ae64617c2e109e0049dc986cb866303c0eac6a755f99a4e01b9fea2bd8fc02af5e8d2e1eca840bc0be205bafb2824904de714ee1108aa2f46d48a898509b2143a157a05ea48a88d630ef89732053b8077b4eadb089870a589a99005f744091e95ff4aa378eb7258e93883f63e21ec2f8e12a3492d98c406890a20c15cc3f41ab44752ca4a652a1cbab0d23c83866147d08a115287d8fb3d46d4a64fda348ba2630f081594d1d1c3012daf321c5dd5913d19e572eca1a1a29ae00fe6499607c9bcc8b6c247e06a7248dde4586a00f8ff0340ee7d9dff7dfdce76384732926c53b21552790f52809b2dc996b13d801eb2c6916408ebffff5efd9cc2260d837c40c306650506b07d0a784f7a40b2055a8a4b8ac769fe9e52cfb9efbe26eb7bc925592e69d53369f64f3aeb858581d6e0001cc2256b5a67090c0a8c8ab8a20ef161b0d3388e4152ba8f82fbe612f75de3faa0515739fbe187623eab1ce42a4ac2ef89cec923fa2642c6e3bff5a56b7b4cf73d2bdcaf7b3ca16f22acd66da5fbbf2bf4af73e7639d2b5dd8e4efbe7c56386083dc2c68590d7a9e41130fb66379d83af4a6aadb1bdf8c65be66032bf6ab277b9b38a7a1633d79c9e8f1dafa38a1fc5badd771d0625031165301502c82bd82098c6ec34af9a9a8b14ac0bfd421dc924f32f33b68acb83e6782808952572645155a843bc89e200237ba5bccc61529a8a1de2e8f680230ec34d48a4afe9890e0e8e7e5da6a730ba87018faa1f70231428557471e5f7f34a06875d64aae66eac053b26b25c2be2f3edbb6df3beb09a34c49abdb40fc45e4628419fed33d7481bb602961b8c2fc755919c158b9141b67f45b3cbf2edfb90991fcd2cebe0f52f4fbaee936da8b560e0747c697ecffb196241b695b55c9bd056ca202b233655904f4112d2f8bb8953354385e8dfd3b8c19fff0e2c88b6fe898cd1c06c4fd5a1b534037da1bf7a70774728a9892aefff7d10dac6f72224c17e6eeec2257ca34c1b97b910719e6a80d798e01f3738cbdbcd0d438bf2835b1ca6dd77311f955ae5d17ba5a70d40850db0a278dfec035b72dfb483ee67f84dbfa55728f4d9e192a4419ca0509a17b3ac23335101d6e695be2a029dcaad9ade7746cb90d01d49484e75c6b39506d9325c6d2247e333beab65f0eceda1d0438be48c436177b135b23b6c45ea56b02e76e096c0c7566f74461e43f2c70c53cbfe41482a4059036311cff5a3b30f6140368610d811c5c32425a4e457a5692d0c5d40bd70534d12d09a0abe5ecd7e3d473578247fa68a9361f7662033a0c71b9dd9fbf2e59ca055ca78ff15403dfb2ac0da39afd865c217fc095ed03ed950803eb6db32f0f86114c16c170d31ce066a0000c8f438fa313b8461ff89480cb0c37759517e2add69043e4fb9073575cc06fbd74d3198945f594afebe4a5af3a1b355877ceb9748750ad8134cf67376df47d78cf919f63629d679b8951a622deb020a15d0c36d542677cbb9663725768097dbccc5d18d1ae3fb071763d2982e06926838a44fadca4bb446c31548e0005e40bf491f6bda3e62636667933af94b0f0c7c6130d2df031b923dfef9c1f7b45123ac9c757b1bc1765d14306672fef6bd1a7601714dbd44536ddc520b94de6ea87d729b4f69b1220a9eb0b60f2d58d454242e394a1e5b2ea2e62648fc922ec8044463c083851747149848d00461dddc0351b190592713e9a2fcd3e6feb1f27d629ff1e8c4ecc6f4e7dc424cff9f0d78ed85cc114c84028d1197b52fe3aa237b3a26bae8a75a5d577d5e63f31cfb44cd7eec8ec8d9c42e2b776b7988229d65670dd79613d1b975aa749d6f34ccb8771ad2f347edfb23ba2e546116b6faa69ec403d600a69109bffa658cb20cf740ec4977a73a5e2b922f0990287441fac7f216eb0b8bf43ac0f41874d8a82080941308f04cd4e103ce44ddad11aa2a50878a18686629c4d9bf0784f22755f17f8f5eb41043bc04abcd8c4ebb92a60bd5bfd760560dab25bf245989deca3949b6bc8c8adf6b149ea12d38299351ab95a94ab275343c027b444f3090ae7c104384bad13b43c5dfc2a0f3ce098deafb678b3053bfad03ba5124638d38ff00db4948edcb0e3c3b54f3a20c9e09d47828f4438a87b8eae6515ed0f5b0cdff69c71388cb08a23536893e97ca28c51fb8f30d5b3e2cbf4d723fb9a7eed26c545d65e147a9ab4a023373f46eef013f5e3e127eac7d7504f94eb5529fe7bae57f23e9b288b973b3e1d040b8f232e34f4458bd6c4e58c5d351662e8c8f10831fbcba863636ae4e698d1ae71283145c6389d80be3948cdda8e85568066456a987ad4cbd9198cb42e6f52112a124d59b6bf91cc0c219b19be3f96b4434974d9860c2d768f1ef9b294932926698392986640cb85b7f6e9b05aada380379c334c7172bf0a2339ebc9902dc2e6ebcaa64ff5d36f0049ff87433b6ad9b52c27956c4ac80773e700fdff44d6ec5a86c902ee6a57ce562637053911dd15c6898967babc5f3705eb9d79160e4b98c3ab68c2d661b6ef39c07c99bd28be2770494c62eb81aff67bcd0210b0256bfbf2b64414598cdc55561be3934b647a75b5431ba49e1c7444815eded48d6be9dbf9e5c08554a57e706bd867eb54141fa310b8c9840c33f827ecc01df7d63780eee118d49cde2df3f63cb48f2305ea84ebd7ec446e7d14f671f4f9fed6e3f13e9fcc68bca7bc9ad25ecd144e6bd4b361062bc2e08375cb58896e083c31c3ab6fa2f7dcd3326d40e5f840c967faf2f074adecc9e1d16cab1c1f86b0f4ce3eae27655c1b1f6ef1ade3c8146a96e9892ec6439b4cafe623270b79a7002ef9c811bd7f72b2784cc624a55b12f51fea7dd20f928a8706b7abe5eb0b62329c7bd6ce76f26c93ecbfff69b2c3541f7521f37c3c044435b35fd081958a3dcd91ea38bb8e757711270150df7b070e990d06f6209e4a340fbac90c458390026466059ea7966dbc421d045c81d99ff31d42fb449f22a749de99c1dc398d3f9d08b1b825ebe13d97fce11ec960f4c82f35111f20be6a3b37d5456c733ad1eb19c521a864d44b856994c90068df7d9d0bded16022a17d08a200d23e2ddfb129d3b43771ae709ff93223072a586ac460beaa5c7cd0e248c60b614d4ffc1fd5fdf15daa6ba2067d4d3233f7071ef556260c514e5442b51777f893ba811f4bb99b6fb630315ca9e7ce95516a8c4ce6ee0cec4c9f77b6563b476f9d170f24c9e1b42d8ddcac025f6266e3760dc55362bd04a2b8c35f7585f04a1a18ddfbb1a386a47882cc1836f3c276c5d5a299ec0ac164b45285e3b00b24da068bdf4df4b6eb094abf20ef81bdbcc69cfce24e6c30716ef25b5456c9ef72b1e9683d5ca87acf5311c451ea7b77e91887316af446ea35f424d6e6cefb16dd1cc6eb236f391093b7682ac291eb3b6753c2fcd2070da509ad27e0ba9d809286522d38985a72a819079338e9f13e7bdb3c5732f562767e49677f3c67ec9684d671600954892936dbd10e1fb2cd6d20fdb2891e2aaad46c51f951e228b009ba0d9ff700e169e6d2ebec090fc72cb2b02aa3bafff598c132cd6da49475c8b3f6f5624c23d98f3511aba9162c22b53853e23cbd337da4f2265c96ad22c4e585b04c725661973dc1e8879d9dcc7f0939f1018ad18f785f41de0e14e1cd9fa28b12ab28f030083758730a7648d1e779efb70b79d811b6eb7850f7c8ea7f042742c32076cf3fd4cda7fff412b6bc9bf7b875795f328ed2e99533069bc135b8a49ddf43b99dbec363f27d55a113ebbf676c1603cfea2286d6b019e8d5dfeb8eebf7b7b9800da1bb24d75bdee602d6bbff7d95529dbd1f605c13a0a5eb2efff657ee03b45c594751a4a2d378d7dacdc132c6d17cb59d4232cd308a75a36e9c926d8863c08647359432682d551930bc1bbd8c33a13bb27f3181cb202466a455bf7c7273d9f7e689ce8a63bd19d5a936ded38ac7a3b16eba4ab705a8c90d0ce3b7a070263838ae50bc01a24e77a0681b8a51ec35f40de87af3eff488e7cb3c764a3ad2c9030ac306e8c23535af35b8a2127482b94f1bb15f9562ab45b2992056ffd505fccc81d00b9807ac6c2de0dd52f2d8feff7216b41e00443809d989a29f1ff8973b7dac9c7ee4d785bc6bb3834dc7beca2cff40237c559edd88b4fc77fa78b4e9a9af2050c7ab28be5fbfe676c5b3b45affdc7d5fad9f0847058b0205df44a353a7fa4591d7bf640c1f3bf687ab85378bfe421e56cbdbfbe7ed3dcc1f37f7f7ebfbe7ddbf9758bfb1ce4aa9b55ac8db23a651e5b81ab568fde8e1f2a5febca8c745c1fdeebe91c0cea77fce076ce67e8f50443aa0ef4e0d696842c913f8b6f21a18f2de89551036818b109ddbcc8c51b3cea6d0633d022a8ff445ad54af0d6909bb0c3d493d683126a0420d4f616772b7cc8fd7647e7cfd98693e9be6d3be7c5fd105057fcf8f0e3bc62133f2f2d938c0522ea3d008fb737c009309fd1fece204cfebb1b5f8948c64e4f0bddaa8f386f3f4c6874c79c2dd1ea8e683b7abb337d0778a1798a53c2fc15bd63b21bc112276eed059fed114d769f029ebb12bcd57aaeca498c1f10d25ec62fd62c9a99b10495e568df8082c1701d6f817b50df17a7d5f9bc0925e9ac1895dad1d86d643b4ed73928ae2295489f851d6ab1fe2e30b7d28b49e1d53f3bae4920415cf3a2d82bec68ce69aa24d4d1956e65126e6e5df5a9b69d770c90b19c668183f3334f6ff7ce207df868fe0cc991c21830ad78842786af1eae55ba172539cdb4c4d3129f950ec033c5000c2785a2e6445cd8ea2ad180b9ab6a87f65ee01e60ea3283e48af8571c069b9a174ba06ddf4c5af24c2360c818ee2dbea9aa8018ead7fbcbff8225a7e960656008e02a1e623c2e98248d024e5f3692995ebecb38eef6762b0f436ee63c638283c0416f073bf84e8d6dcffc6d3c14406aee709a09b5864da8b2053bfe6495b74812018b9ae5578a70fa33d613a527014e3e8eb42e174cd4c276fffe7a160a25af982a698ea72a6cc861e939b03bf90b39e3048a9329fbef9fbcfefb097034da0f44d563e230f1753b3bd5f62185eee53a5ce2b0ca20e3a198ad03fb1b5464719ac141683718a5e86514bd3143d21562f855555f48f8f1d51d37711067fd14aa9efa17033a73c51c35e24e07b4cbb0701f861bfe17c732be0899cc3ed050f0256d856d8b87d2bebf5ea872bac128d0ce90d2113b0ffce6816447b2147ae2d402eb0defc7bba2ef0b76d3191bb42aea2faa69dcd77b0995cb23906a29144f9396720553a43666041488e56d7ea2b5ae8ced0b20b0c6700c982f2ff0546f02926373d2590c12a522206c0fbb92b506f88886f0c292cb8cc46d69f38eaf4827c13af9d73b172127d4452422f97264caa5d435a895b2ccd33ac1f31348f4aebfb40e3a7bd40e1f4e4f9023d66449b9afcdfbbdb46654bd7e73181165a1a0d32f73f64f47852fa71b3ab388d3bd7876847ff2d91c48a406a3f9c29c2b5dcc99bddb4f4265b791bd729cf3498621e7bed269fcef28847f16d072b1efa8e7aa7d1cc67a13bdf0706a6547a2850802e64fd014cd17a40a5ffb900b8e158099ff24502108168402062c0259ce1d00ace760dbdb40521f33ead4d2c05423fe1fe2399a4a4ea7f85ff4f1e064ea7a2fb6570ffd5dbaee3969d464f41b9aacdf4d4d3a9592369c0dfcf37400266ea4290d84c60a998e5907aafc7e22181ea185393ac88bc9f1c05ec20cfb522811ed076818ee4233286347aebce602c465dbee97972cf4089cbeffc7e52fe3a135c80449a8f681531da526c4d2966e6511df665dec3b3b3072b110b44f6ff29534acdcc384835b909d4caa1aeca61ff7632e811bb6bdbd95a3a42cece11d2979b000b6c32f8eedc464d26c610bcba07301967477985aa3157243e8ef34246c4c5df72cb0d3d70a829ca5bdec55e895ecda989c0c2f3225a29a194628db743df6c41c82780c8a16c7e2fb0dd3d5dc1a2206f1d59be2c31fc6ebbe586f6af985071857a7a83a280fda984a675ded20fe555425962f7e53d693687e7e498c1815593195191931eabf0c6b75a690329dd3468a20ba55f42c538a60515f52a262092c1369e90aaa313eb0dd8c86bb91f77242fcbf5fc622632e347c644e4e2a9776ee4f22c97c2d1bf6a4019b49c28dd43bfc63611b9eda977ee06567996c3fd8dcf0d1b0d13e5987c2c359e8ca124d6f22c9777be9ddc683951d1ea694f5f4439eeaa923feef8c37b6ca9d1a6a2fb9eaa614e69b8d12028033d6c53029e238372dd24aea096b80f922f47d8ae9683b5f11747d3344b50b6528618b237285d4b1d147f3ba80dc4566054e3248a60bb8723c120e5bcfde575637e3e2c750c568e4ff6e60c725f2c071fa2dbfbc7e2b6891a07f7ddcb483c9b0a2c22ddb5db327c2eba34861b420031d39768c2f4d9c78b9d1c7a226bdbb327e7b33db01a7a0f73074155d9a067b7210e73ff2961c6fb2e37a9c21098bd3b918c89132b69fb1da8801425aad7a545c841bb0b17d4b3715e969b7592bb727e8a542c645149e31b3c5d9e80f25198b751cc0901e675ef4e0b70dc526edcede9289a1c182266af2e22d33554e5a8bbc221b484d0820089b14095aa0961d089e48a501a00ff27ce7792698ef687ec0bda089ed3ea6898c1036e961e0f7303fd1683f3a8808ec1530ed5472b16ff1e7c7cb714b9e36fce5b8ca2aa43935fbffe4b75e2ad2e3996fbc11519735756bc4eaa2cb512c9450daa40845a459bcf09566fc1d9caa0fb84cff5a243d22c7f2f97df2b9a9216c67151642a9aaddfa3c7c423be8381e33a91e2515f0a54313caaabbbfb31688d1efd826d85526763cc0c335dfce4f9d2e81bf809db0a41676358dd243855eca04532accd9746df1bf7c463842339688ff982c76b156cb3a1445e36c8850bdd62fd01b64944db551dd604eba5d6b6c11adb0af70c51dfed2ad048ca559c6310285bfea495f9d268d0ba8ce0a2cca626bddea0f6b1357d7d60cab19884fd86a29256ba6f34ceeab880d2c124b66eb2f21b65193a112d9a1dad1e59472a574334e2d05bfb69fbf26c27306415a1cfcd5f3c931e89308ba4e730f51d19e433a444f3b5466e0c3745917ce9a1e192620959b70610a91fb1f469aa765542dbd83d24e390d66d17a6c695b93b748b806d87febf741f02eea0d959e6b2806be0f2f509b8eb537d147009984ce3e65f08f40d3c5115e8d2298972323a839317d057ac4699a7c880dadce372b964688d6eca64c6d2561c18c034c1e3b72497697e7364195c9d4f6a5940327966d7e6031eabc8f7d5d59384ac1a4f0079bf41fbcae93a1bff76a55aeecc81e959b760e9df199435419637b4f72fcd0f766c143376e853507b65eddd1860d088fe2d16af13f8611c24532ddc423c51981a1f9e4afbb00d094c6a406e47710e2a70429f8f9a526fade8ad32a0df4c59a69e804bf2c83088655af0a7ef9f662d52e4f3537ef1676815f35e6b134b9bd02cee0f306311a18be59ac61f4d892f8ea8666a1ec8e840053057b9f7781f6b647b67be0c2f1a5a3bc04c7e3c9499fcf808562481c661fc107c74c5d893f044d45ea65ef2958e5bd0863b7f8751cd6d8bbe91e8e227b7ff6f7223f1e04cf40dcc67bf8f319d15f9ee59f42e5c1c5be33d483e4804adb590522a4b3b134c393e95630965ce1ef6d2b7b135b4dcee7d2614e29d74b2afca030a9828a604f458f6e977504a80d1b221887ac7b78621ebde07cf48e6bdb228ef76dc93b6af91cb2ebb2619f52d6cd61a9ba4a24d172714f2030ceafdfa683dc52837caa4fc486158ff8952f7d565ba7c8ed926d87c0cae229e6675b172a71c3b65e18134378b2a505be1e57464d3ed45364cc4b6211f444ff5542b15a1c7787540655f0e669386dfbdf71ce04215c47b3cd07ab83d62825b43432925bb1304bf8173cc67ee2b44dba0c74abff63a9dbb1a2aa3347186ced26a3456c7d9ff509745926dcec59eab1b9952caa8009899b9808f5f4c91d18e9ac97fb793a4f9dde0b33574a2e59ca8b766322b6681bb2fdea7681926f4c44ce5a7e77fc97cacf36fbe53a013a21d053ae1a61bc7e599f8cd0d9df066778d93e449f88f31d566cad4fb960d9df0cea88d659e1d119bb193204aca172287e2fa838da612f1a8fe830d9d608833023ae1e76d8196007257b42dc7bc84d08e58721cfeeca103e0c31072a38398263d5a7e9866da02602f5b069bd5cbcb908f880d53603351ced3b16c42b4a34775a1d8636264a70c37f1641cc1abf6cca90bd20455d8bb25be6c0b324ccf166abb6bf615f049621f1f107b27392009ae8e4989998d41c3175f16b14d3f2e00937a6cda49c4d0b2df8e84e024e7a9617e60c24384c1e7afffe4d97ffa5f3e7f3d844b4900c9a862f8eb50003da829462b836f41aeb6366d5144c1406bed99869112dcd5bd317d39805d06795b1cd91106aae44c1bab89d561a10d8b18f8ff0340ee55b5be6ae7e992f43e010104a32a87dd4cefc9b22eda5b8cc8a1883508d00028593f37c51545757eff4bebe54e049800131011313435ab5b55a0d52d106680341aa0991f42acaa7e92ba35f28e366b4348b38e380768804c488a879b4169d62903149061521117b6ed117b504aea3806c9bd25fd722f18f9b87cec3d8c5dd201a5e50fff472ef342e5b5fef2c8b4bc215dca60396952c6b94f904742a32582b8129dda7252aab27c67d325f70efc7dfafed7dfd27a3857aef04a6f73bf246b6cbbf4dc808c53b75e0c04309197d2fae8517f5569ee2d37847955f93860342a95cf1d07eafc3c8ee4d768e7830e919a6f2b457e6027d00e1bfb81de3cb4bb81eb1f28a4f00ea5c86fe057f40e3b964596a675d521c2e73294bd550bb75a6c52876fdef9fc7b2c79393054737eb947e4e207fe5c5d83970c2374e1010972977f63233a30b16b44906cb79e6292804c0bb18b88778a56b8c2f033c38553442804ca91614694d550433caed1e842ea98f424fd961244f4240f685867f56d79eee47cf478c980aa565d387dfb801dc5fb6aab8495b101c60c8f70f818c358cb0d17f42694091848e1f7cf19481a14f63110850b44b43c5de7b213b258351f21041a6699ed66dc6beac957d3d954c6d4b1ec06aad8440a094b71fd1eaaf760bbcd71fcf60d1a8c3ace1d1d71a4b03ee3a5474f3ea559af1407ac35f34c71829f79f3bc37bc5fdbc06f3fb009e65c296eda79dcb11c43151519a8b25721575ccf2980d44b0f6377228bd402c3b610a37d8c583180eb799c1c1e10ce6adff05159e7f5896c82c55a13f8e4491132c41c5b0a994d6c0450170a42267a5f6f74cb68a4df3acbcda01d801322b1b503df8a22f0167d78d77c78c7a2a88b9acf267107bc7c83806ee6600a7fad3b25ad437be444d06b718273b7cd84e4b899d2fe7503444c10cf08d1f94b9c7d216c0c8d61ae259bfae48f023d6a337bda25d63d57772301f326667a0e194236632f21b76245d2a55d865d5732c3cad093990203667affed0e1d4a52dad071fdb62cb15517f7372b8d0cc2f3a58f47741dc5819d5249a4f1f0b8bb0355dcc0af6987b1efbca899857bdeca299540e4caec63a4064144ce96e642421c765dc88cf3ee0b5bb5d77126a701c12167ac0ea3eb9f6b40a5a72c2b4076c3cb5fda24cf7298f00e110d8ef7e838046753a293db4c8366191b619687b4e1e475cfdcc076d090e52ea2674c0351c8772c555da41530de736f07cd5e02d1279822e49d0d41ce8b1b6d7064fa8b1c5264ff9be07b3d1d328c74629e9808a04213020d8ae3915397590bbcf410c2715f91b458d93ed1d2b574afa9cb4e5825d6a6016e131b302688b528211d3921958b173525ec46d6bf35c2c6600b1457c9fc64c86bc068bbc4f25fb349a9238158ea8a356ef353aa2735e6c57a763cd11b71fbcece2818c575bf77de51a1cee947997b4d5052e60aa3fa6093665007a6a454be7a1726830d14811a3647cf0b7734259b328fb30c3675c2a822d48bfb178ab3067cee114cb4ae9b0626942490b8cbb84f13d8846c57447f41520f22e3d5d1091edb435906ace7e13f674fbcc192fbc42364d91c5261b5685cddd3b43db27bca40252cb81d314baf91850a91c8251bd3a09925e5295baf389efb85b5881c93857262c79d3a68a18889ff3c6551e5a397f1e9fb7fdc89fc64e855c7cb3a388bd4e183e89ecded635fbb810767d1c36e53f60ddb709f3b964a2a250205019c3c5e627deb5d3114383fe94c807792297976f77b36870722784cf61605a4b8ac736de01b731a47bdfe2c5c74c2da59b0f80e2e6ecebc073f063b78c2e7ce9d2d5dfab2addf6468bb6583c9bb15bfd3c96ed311e9e80e93a75113b473b472ea00c006c98529a129b6ec9640f8a6eb613f5f775dcb5bb75fa95bd4aa8c064eda43bf4a5bd6d114077b3484fd61e303cce415a8e3e0f3ca85203b4b8b166e4806e29e12ad86b6b3f8fc70106c250534362a470ecb4f708a10f10c28a305dccbef8385e5434a2ed35145fd183b07c106ef52c635e060ab91c5ef058669fbe52dfe00d20c67ce2efd357b97e1ca5ccfef0f44cf2d4123f4048abef938d0360337526e674b866eb0735d476d8a01725134ef5ee7e69213cc109404a8b4c9ae01862e9ab8ec926af7320e5b33e3bc2bef144821635778d3387b8ca14c219125af1e3a068e410461789dcd938bd7b10287d63f0a52cebb81d1680ab18bbf199937fa61f835c3866c212efbf7774453e2f8e4e67f9b374413ec1e1c7504c79069a669287932c2034aa27a452c85eba647c6661b8bba1d0a0b580aec897912b9f232ec0f1cc0f62b145188262c4dfd7856cde53ca6b9fcbc9bec67d8051d0ad37ff488461f6e705dc7505981970106d0118e190d6a412667bc6c32580b2e9640f4e122eef10a330f713475659a412866082b88b0cee00982d6ecbfa76c522b81c3842737cdc6f6b41ec0f2f1612b164b46f2a7cacb562b78b20c3e5a63e05a84cd6ee8b06dd95611224bd79773887cf6e80afe01b7dd973e66230e14b86a983b094079186839a5bceefad9ca5d72fcceb67ab2eccc22c474c598b5530ef4d700d141eb6c37b711e875c0390cb1e40cccb99d6887c20a643aa5e8eb237c9fafa510e2b536395c43cb82d640ef8f66453d084c5b282bc423df0b2ef34226b474a032763a7fb24c68a646f0b24e87a86d1bb98e55e1b357e03649efcc81bdf50326ac2c278ef6d1e124a35a030b1f51406595dcd96a6f15e7bc8e01b95d36c09630d23ceff662e0207339c241c7fccec49711513a57f6c1af87e3edcf3038907cf8686735ce244d4a12bacec4e15898d506d29666a462277141594d42fc88642dca563f3a929b6a2defd6e80fe485580a29f7775a49a722a857d712fbd5d83fc9bb18599254c9a657fac0ec24fc49de99ea5e3dadcb4c516d90dc4c03b693ec05a8a9b2a29081af744e7a543560a1c5fc2c49a6ad288ec409b839025fc87110f932a3476dd15f98cf31159a000619b539a0779a74c638e66f1d850968d299d0f0338412f4344f23fa670d61a420539198e3179c7dd724b05382db3d45001bf4e63630552b2d57553169bc140403a0a3d9ee4a6093631de37769919d829f271f22e96ab4eb8c7c93f70a8016b1353918c97dec506af6196ce646fdaa4290b73c27ece4d7046d6d2f01d9932cdf7eb71fcad3ca9676209c586c77fc1af71c4b3103b1b029d818a5c3562f31ad25d5e994f77fee58a6a2aa646fd0bf3fdfbb909b0b2df43a5597414a681216b76626d436899f7cd39ab5e0584500c89e1d12b83fdf27656cc975a9840a134d02b42ebc809b252a1b0eed11e5a752731ad7ae3f86b6d0b9b30dd197230b594d6d6509884d2fe749a59cc6c57de86e426ff728757a1e69019b164cbaad84553755ca49b2e177779f350e801dbd472f2450440cdb43f4127014884bb54bbf6bd9103301dac0bf98c5cbf9a50d4e9f8d27f911e3fe96d2fc7ef9d8ee4631c1b3dcbf419c4d75b45c0e06a30b3b935319d9090e46e72c45b80193c581a3a0ecb248729ebd73df8abb670e4016374c0535454cb9b7db5d8852d695006a6a57e0ac37ec5a01679b9545e2d2d1407af478b5ecaa6fcd71e6ca19124cd763d617c2337f4f03692b62cf4e1414d03158628d2f84823b6dd1537470bbdb331d64dd8bd3af99c8c3bbe6e7ad8e4783e939bc14f02fe1b9728b88858ceb1d15f6fdb70e41288ca7da4c310e2cdecc67dcdd29658d8e0411402d07ac5b5b0d8c543529bb47ca63b136d35a6fd152d7d75b80e4a22952f5a5380de55d9e9ae64ea653428811bbf4a3ef642b9ee5bc6e63172ddcc8fa3eebe6a005a21cbdaf19c88f149832533d2056910addf8e2e6402834fbf0bc1550b8f50e062a6aa1efad2865adca545fcffe6a59c2354e3690046aad3a3383e3d530b9230998ddf30f17f8e2e6a01a4473b3b5a123e01ed2a2588b653e373770ed9ed7fd65763b5b8688a3c43294f9499c2b490bc8966e9a6f92718820fa9ddca9a5fba169ee208fd21b93a766e6568ad6e3320ebf117c706d8893ba5acf654d451ddad6e94a9f96c0b7b93b26bf44ff11bb90c988ba7487c67ba0df34777d8a6e385596eb694f0b6de32cbe1ffd6991d04734e84d693bcd0eaac2f77a71b4cfa86b2261f4f6cf4c20bae3d190259e809c6dcaa790974ee8d8357b8ddf5629637886eaef4f1eb66193e7b03c03e39ee05c455556c1b9c3a7424b2e3d95208cee82eb43c3b6ae3f3ac1308bc04060a827748579ae36b8dcedadedd0bae2cd5415dae63e59242d4c7e6f72f762282626ed853937075b5936ba60f3574047ec68dbbd587e937ce8088dfa8a1b0cf72826583140539abdc067f363608c3bc336227d1a659fc93c79a28c507a1dc55c38b7e1041f9b689002f337eac498031760c0c18545c0d94c95207620ee004025d6e5f016ae3be3c3adc1c76987e6c85675488a5b8bda7cc167a33070eb89ace2a9a346bba8f00cbe5e35a03173abedae9f695d942529f1065f37f2b093f6a3c3f9e4f06c3f3f3a18c84c1381722ed3a9d60dd16bfdb8df5bd5e3d43b4e26a99282410cd6c170aad2447b4fdb792a0a85c6a1de9311180a5aee7cf454b009798010d04059a279198b08124998c992cf7c0c7b8a7560fb81b6471664e5d6b07cbd5a042059dc3885a3af12c014a555deb4926fe57f042e45a5ca3ae1ec01551993612645ca9d14474247de7877a3425c6f168f181d89c565e1019e7519068aa45cd405eaa88d8e31e1af217251a4f5212a7fba04169c846a488995ded263800e881aa465ba332cf7fb77fb5553cd1f5f1fa58ada81e4f9d7e57afb1086655df2fc36f844431aa9fa18c0946230c2b66e684e1880c85b91a365d9efe4e049bf0fd01860982971e5a576851d345b42f38a09b66d8b08c67f89aaa994d4c4a617093117c9ad66181629e30b97f60b441b07ef26ddae5b8373474cf19205672d65dc2dae1fd8ddc0ed0f6f038a97f0e05bce39b23495e24cfc54fa5ab15663076430b68f7ace3809a5e2c0bb4657653f86873ac4e436d148e7fa7a6ac542673c7c1808121a5949a0e05e82a0f26a1e27dd09fc39953d254bb899f7d8e162c4c6261b82090947aef1aaff747a143f15199791997d855460922df6c8c7ed2d3f9a6174f12c4688929fa49f8d612162fb0c393f4fd65842a897e13f577ea5a4e275e641e63615d5c84c8fb752106b971c6451b64c08ca2080a4c1d18deab6440451b9cc4234b682d6a6706866ab083ac91c447a74ad07dea4806799296f70cea42ac36802762889c318115180726943e43d70bfa573684c6f61a532c7b2231f4073ded38bae71d4f680ff065c88ac923a908bd83d446bf387dfb65f15eb86d1942c58dfaa35da1a41279b58abb05f7bd3df0684c387e86b1f0f647ab6127f9e64d5e34ab0e571fc669d651abe08a35b2f7ce3d676121ee005d7ab0b91d5291e4b7e026639ecfca6357883865ef9a09a722c6162c37d6c6b9e092dd9e03c7c2b887cc4ec5bcb08943b271857ee52a2e3de24eb03538055d7a9a1766a59a84280148bc23658d741b3b9012e8ae410dfd61e87a174b234f7979d8b71a2253995f0d835d81f4d4b57a7d282d16a466f8bae7531b74270cb3165ff8be75b2fcc07d2a75bf16a4ff4284458ad8ca656d28b69412cf23e1d2ba1889082c53681e7a441c4c165599d8f0eeedd3feda7971bfd4c460fce0513329f252af048ebba13d199ea6a137d8175cf3cc6e1f1ed09e6751b7670eb4dc7f45d6d3bcbe6c938ec02c7ef4dc96b1f8ddad9f5a3be25eba2ccdb4aa9b413b2cf6bd5b5b5a864d9e7ebf7fa4bfaebcb6d3ee0f997e3f5fb4f85fb60904ff6b80a7ee684e8aa2b9c81b9b65a4c517aebd19a0172b92390dfdec93d3ec7e171f6dcd65276b136ee6bb3d99ff5cde5654a1fcaf0f997d3ede96326765f02d5068107fde8048f37c61d611b1121f088ea0df321128201c4bda9ed9135fc71cda40c29678f4c9721e0d1b658d89e2e914ff3f62d34bd8beacf5c86e568160f2967987a4d6f030f8baca261e7aaae844a157e568d7fd4c30376dc7ba599215ba4cd4d2c8b6316eb44fbecae33046fb1ba32fa6125b8035c078d49d975200151790eaadda431952ef60a4327b4bd6cb2c5976de7260edaaab321d07a9e8eb6eadc1f4631068a1103eb333fda4ea365a503312963e7fefeff5f89a737f6386aef8f8f7987062f6870fcfbff7f25592428c0480ccbaca2f46ed6edad63b49ee096e351f40353072b5dcf98784610272516fccc283b0274cfe7c73338ea35597526ff6f3a654a47d74b17748a7902ede9858497e626f637210a939445c52ac2184f674f84c8ed8b8675e7cc3468abb8605eb283bacf342b1858f3cd63d76127c9182561b6dab9aab322cd6acc33fc4a39fcc0666b475a7a75f4659c7df20463af267db837529fe1106dd57e6082e854a6905aab18c97315c05014508148d8b1f54e94b135db9a4ac2aad0680cd304f2b22e6b15d859acee6449bc541815da38df76ef3c28a0c9b54300ea8bd27d9c5e09f13cbce3223a286e6dde7754675d445284f91aefd24dd463d8fec9b8d1e6956517ca1e884413ecd21c88edbcea76c0f87ebb4fb4ce52da439a0759dfa2afdf54edf1b89ac2139b016324b6382208e9a7e537cb94604559e2212bfb527565df174599a9baac51ade0b63fae62d16e7efe0e17787ceb750b1fd0c7def96e453a343ceafb7695c0e30d5978af632480f0b2833e86e8fcf894f79d7173a04fb3bf98873144eae2b6fd9117866c6dea7e2a6baebb4227bb5d3f7be3c69343f73c7debf03f0ffff316827ea9fb7aeff0b3ac727aff36fe5eed8fd2f043b2d478cfd19bc5ec461f3ecee83bf706133a00ee0b0fbf9fd1774e0c71577576219504bb153c9334797913defb3692553730d52a96059428402e5dfda820cea8889b2f29d31c8787c6af86c662d2aa919ab243e1334852e4d7685e5e3bd76447fa4d7317bdb3b13ce251f99a90a67f6f6d1d15fa0196c3cbf02934f74dcc46329cfce936cd5d419d2aba9e241a34140a44ba1843a329c9aa9aa1829d0f231cf5c9ba8ea2c5800c32debca1cb1cfd5a701e661bb0e7a6dfecff57aeab8cb8667480a72fbbc0d4b4790027edf4a124ed05479c4a09d734b6e283803d9d2635289175efaeb925f9a7163be49ef99a01ff89be0b50e26c92a65d917c0489054eb2a3292e27b55cfc74da1cbee637c386f0159c512257aa5137e6cc82faddd93225f07945c834bad4ce73354ca3d4906c662218845b99904f355c197aff4e045e9691a91a325417649d2587cf031379004f2c4e99525e20616dd17d32b8d8854925e17ca7d4b554adca1497179e5d839756984e13b0249c6f57bd1b15bf08a642a2726e466ab5c0c5936a90a9ef0163c3c86ab049598f57b4adcf88c323cdf9bd300beda67395cff7c78b832702ecbecdc15ad1bc296f94deb95c8f0165e6994a6a34c1cf9518555989f488abb5436c8375842b398dd7516da959d013221c4991b1eab8196bdfe104d52ff2d641d68a3b98b3a6199168769703cf005f30e6553a3e941979c6ebe052ac98ece7c50f7228d985c32d8ec0f53c0f41d53f4051c131cbfb1d7c731ec87be74341922b2fa105f5139f81c8142507440a0c5e24a7ef068c1823804d1aa2dd40366683f115274fb3baad178c7d139daa61bb722adc27a805edf7feda3e3da5fa65dbb3b0d8596e2111f686a3af4ee242d8426e7f3e23cc0f0946c82329055769c4a00eebca57045ae28eeda8007dae6d80c9412888a5cdf750d5aa2ce5654abfc71432af4292b5a3e1f144975496523591cbd1bf2ed7b23209b2869e40b1aafe21774ea87dc9d0b1949c954c49807d5e794839954826b719893980a1b79ba714327ae925cb66a62b545e530269f831270ce14a6e20173ce34af2fcebfd07960bb1f0ad55cda5c19dd8821d47f31d6c40a622ef4373932dab1ed268d5faaa265d063bf953e8ccad322121324ebdcd6ccb9d934618a08309936dc76127db0460f487366dcc6ac743ee398dd5cbc8e174c558c24ba7beac2ac98e1bf5fa45aeb502807ff77e7f632afd7eaa46aab467ee70c2e574d9f7bf23d9c8795a3183ca7b771ca265e087657ccc86772f0b3bb67394459de5c3e667a248bdfd948b2cabf70e4e65a195b8f8bcb0f3865a0656c6f41b3ead9c58487a39b29938d8480f0db2f16c700cb9b124e3a5de826798c5e3dd5baddbb106f92257fc0e961345a02e4f490801175348d40e95490aede1b72a31425ea6c2e22635f454703ae493f1d791e6ce1f538ab28c73af731264a58274e235d37a8df16190506a231f819d0c9bcc1c02734a18b087c9c2af4d14f2b89338869229d6f9d7dc9fc9fe14e0ad9f13d2d9357ecd092305c60732a723393c38a22a8c5d30bce20a8158e20ec1b84c71b8b847d9266701f46473cd492096b4f46be9eab5b2f95cef10aec20501c4a5c7a9ebdc659e4682cf8009d83481246d45573ca3ceb3d8b8b1599910b48af0f92b314612fe26f4aa096cd935f76fb9ccbdb0b6e59e43c37469833c8842fdf00f94165575f5c59e4cf9f5b0c9dc8f0ab00bbb87b0feaf39c94580db6fe75a3bdbe0216ce07ab91f419ca3a8cbbc1ab4f20c8c16e0d388a10197c7c473104f92b8052ee9c4c88ac328459c3a05582994c2ab950f6712808b4597589ba5962fb32f41db41a4763000f8ff0340fed4965fb5ef930b662ca1a7c3c75639c965efc1129a253311468006231149c6902a4df1cbfffb66fdf8a9254f05249054d658876101f4cdcc07926ce02dc0d7bb37a5cf1f7d59b27dbd7bd1d5821b0b4061a4560825ef55876d585061090a003836a459efda6ee562107458a60724cbf1c317c11867292b238c171e61503622f672f05b903bf3c177d63ba8f5fa4dbaa9ce46ad7a04a096d2e7b3ca19b9cbc77141d0e2b422927d19389e2c11548e3e9290193eaca3382cc5acdef2cc90e16a3d0185378be016e118de68d52d9d88ef2e59ffea11933a2e5a3334ce0d80347a9f5929223d647369d6ceb6ed3bd1c8941a11a1bf45c3ac8f268b2708937b46e54cc8cd4604b723671370f02b8dceea686d95cea803c13bf69b3d9d4f96e3f6f3a477d1c2d25dc41f67dd2161265c6f8ee46178208f87eb029179b121b42803ebd294a7540cc8351a3b89f06a9630e03b725880b1bf3b507e1f0b27ab73603c854d7b5fc4fc1e90321897ef27d35faf9c79c6d7ec202c92110870200b16d4f51896948a9757a55e0917e3ba9b37e6f7591737c9bb5e3e8d33982b66ee9577b36e07c9bd0ed11e69602d275f74d81c40d4b49044acf81d2940e51c8acf256210fd372476aa42a5d608d7e9fa3950d4c23473d8231101a08d2426201ccfb6dc318f22df0ee79975c03b5c0d937e1d02fc558eddc827baf6eba82fefa2e6bffda5e2794a21059324175f896616a6280c37f7341562edb6a8508cf9f8e0d6c2981815696cdd9d369e2aece25988e891a437c89986091e858f48a13f66e4f79b23113541ceabd757d822fe4fa28c21e3908d9494a2518c81e3a63eac7d331d258bff35bebc3ab2aaa0eb14b25d0dce9329ce5643e3d8b834a3451b94e8b89f46919f481996f0522a1ae2e3b2dce5d6e3c964c32d6f138d185c251a0cf3696cebc7e4202a62f51af7a5d4ec274e776b631559b53dad02edb1871092d0f9316e666324a5584f30af29f9b3e133f3e85dea588a9c8db6d088de3466b0b6611333d85af7c767b02e9a364dfa235d149818e9aeb20464aa1ed952e046907b23822b680d296660db7471a554204c32acd057df2767a02e2badbc56ca03644cb55bf820a076ff7c9cc9b261b7a34d4fdd1af3867337b38367711006e6ccfd510cd9199433f354a857db05419f7a924f4dc9aa9a7ea4ad0bc8b3a94b56ba9020d8b5e37b95b5c2de047eff48fc48c1c7ccb7981b67eb061a5091ee1109330c108e433eabd120b6e15040af1825582204514ac7218dbe408b7b75cecb6a9f8dbeac4179b6209d9578cd5a90b892fd0d1ca4328e84baa9f535e3cff142b973e225c6b3eda5ed10b249457886339cd0edd1f84feb5e6538c22f9903a4faba73506cb05490c0707c531360d38ba670e1d189dd03b3c72f8e741b986767f4488d6475bd933befdbce8cd9ac757b80f1bcfe329b64435fb3f18329c62bdcc0fd9f003642ef0ece0f2e0a8c5c083f54eb23b5bb4d03b9e44be4f7c590475683bb258a6cb224fa088505d21f861432f1baab2b21ec3241a75b74f2bebba7bdc17690459d0bbf760fc4511a270bcc90d80bee830b32588ddcac3556a3b8e35a57a3ce0fab918dc0d8270aedd77d01b230acd885218464ec04fec1cd6d3c68442d9037e63e6f6a50132c67a3d28d38afd8f53bf825491eff1209a12377a69ea91f42178aa9e7edf9a2d360141e1052f5151e37f78e547ded2378c92a9ba14594530e43fba76d919ee6555b9353953627ee48d8fea60243a0852ad2e864c47e93bd97a3e6455ff36c0210b171e75d57d978a1ae48b38db7d5fba99e3edf2f407a600a859e0e878a7a2dceb8244c111413287d67e8b4870f9cfc9001af1a68e9a5ecfeb2e24998a4f5517849abfffd72b4dec5b7b9bc01c5692184bd1741ab21b7926f070259979b6d02eefd9547036303905996e36618db78b1b376f33276eb43b862e542c275ed9cba4258c127c89592cc2e145f7fc3ec4f63a5ea45efe34db52c78c51ce4b1775f69bf0d9e0752d999a14c0335600feb13d32a3c451a2adac586d48a5e7077f3c01e1a8b23176afc6e25beb248cfb6d70e6f9afac738d2a1d3bed47e82055ef41e9dcc75522bd11208ef33b4dbc894a2fe366c361f79bfc363729234f7dc8906853b41db3e6ff60eccefde9e070563092224268375e47849996336f3e0b11cef70c3db1bd5d67214258c3714a6c64db88d6ebcd126a53d680c803df3fc7465db3352641c246ed71a1d98a208dca61806c8cb4a77b0d59e012323b99292379bace4534896a0d2eb9cbb28b192a5701ea469829483b58f6e51ef7686e004cbae149c54f12910e2fe8dbd893ec44d8172d7fbfde2e670f121ccf000088a14d2ea1047aa9bb0a354fa179ce6e4c8a42a49853ee8df535ee1ea4dd582320f9082ca4ea7d8e44935a892f0105ef9992ced08d28ec1e376875163406c5767ff2a8b8d30dbb68381b551ea75c87384f219a27c8144259f1f94cf10a57ba021b604e287073d651a6db627af58a50f5601eb93694a96af2a97abf7c07dcd398d978e1392da3bec81a51d63caed718389ac4dc244f1a70154c34b8e6ee9b49f242bb63eb548098d1fd2a676b625504bd7ba221138eea9e0e6caeb361850d7b144aad124f3928103a78297e442944c01e0cb52c5a280d0272035575b5726492515b12d0a8fa0d9bbd68313db499eb9f7b118798d1f8fa6f1e5a4650988a8ef8f0179f1aa5dbd21c8b28ae54e5762132be3fa9d9fbfd2ed3798bd21b40f98347e1f86a28c98936239dc8a8d884fabd21a4699a124167c6205a6c8db1f6f3efffd17bf95fa365b07152f620f1d6d44ad859855e2df1355145f951d36973677361c46e4a04068fc751858aa9d101202e9e41049dc1e84b1e9016efcfad0a63e1076df3332c883ec06dd57d8c24b192beaa7eeecefde6ea6ddf6488af56254ffd739de403d6b202afd731745c9f2b24c89e37df5ac21c5fb0ceacdf39eb589895847ec535b7ced110a97b7dba3576382f02c96642b5e44d1909c1e44cc5c3dd577a3701faa29a03bc1c32a40e913396db3e38ceb593329a787ab96110566adda3a76b167757e409cd7a5a181bb006cad550a82d415601d573d6c179e0c421e319eac8e636a1696c081aa02a3918e9f7bd888685502c825281f7ddc999494d3826118e88b7f26d5f6338116abd6b8758814b3af755bbf7cabdc6e57d0ac7591dabd4ec76ee916d6a9ed8f4377b4374e2f567c5a1fd1a39f54f450613fd12830fa265e5199b24230f95bddd878f360feaa91220e65986b043d972402760f6549c49041e8ba1008541dc2324b21d5247134663e8159f171e6fcf696f5e9a9537ac1624cbcdf5b22a812320f02fa85f691094daa555852f92aaf941aeda68f0aaa14833b836e08d46080bf53d718710171be42ca90df0ff0389f0e89976381a83bc5e4b14f7dbae853e3c39ebf4aa54f1cd326e96cf464670593acc4f614eceb718a3c1758390a4ddea71dad8dcc60322964e2bd1c607f18f5dd71c239b9ed31292e46e50d104faa60946d213d35354d09f18afd7856870edd64b5155f7bcca8c6965159c3376ec358d19661e2b680f1a1729ad09bbab6f01db6ecff6d22b79783779303160d7d44890ca47cef756c83b6eeb87103ee476b24d8a06de6513d65b6c7c9492ea32129a33458a08dac005dd3ac5f1a46cb112f6bd719686cdcbd7abc46664ed1c8f3f5c992108be58955517bdcc0992172c590338cd5c6bf2ec0daaddf8cc09bbd06b461bf48fbc7c03618d35dffe95b958b39555683d3e9289b79cb1a766aaf4d670a588adfc2ef403c0305d9f2ba5fb8d853861e251d2e8fc9e913467fdafb783d9e74da1baba7c1ef7a43828f86201388a976e3624fd1bc281a3f92b98f069089f77066944f5a7db05268d6431fc450f02600262d4574cfd227fa9697a388cfd1296408397476a83f1033081da316ad8f9e0d9920c899cd6118762fd0fa49a962f0c27a0117666edc3af851ea6db8ff2b626b9ca93c28218b10f97a4f16bad422c6bd8b9ecc3bbb6fbc305e92a335333111eaf4d8b4a67cc7b6561d362f8bd96e2b013923b9ceb404ed0ec6858ccce302adbc3110d5860d2852e5d0b31bcb79a95aee1e85719141700f27b737bf0cd691984cd7e9b03e3172e613134ef4c2f69db9f099d9ecc28f144d381a01c6280948978a2d779f8cffdb9c6ddb3b00054a0a7b1d158a6cf432fdf3e684cdc5131beb6ca32f70a3d69a0b7853f239e7152a9943f1adae43b2068e509483b52ecc251186acd66ec94b3559a6a7838c2deb4bf6b000e3629bf5fcf73a825439328cb0c2d34f2a5a5dc28b61d50b5c95ad97a8bc031492c60e97f36e12ffdd1a2526b5612c757679eb40d23c728eec6bba2766796d77fbd4a16bef2a4375b50c1efd361df5e59fb5c97e1bc24f62d9d113e5df895f27ed0d3cfffd6f6917a4a9ef495d37cf7fffaf3e1796399d162a6955a461fd98e861225601097acc61301807253ac087a68a3cb7701806dac028ce42152b84b4362ec6db36095f71fc9519638889553edbd961fcf5fb0377bfdc7318440ccb65f2193b92a81a3abff51bf3f7204dd0da870b3d0cfe28d2a7ac9402f33c793ac2ec9fe3e9adb54cde44687b9b2b110120d65212a7a0be687450b75b8f48c162e1a075c70961c584400c526bab6de1ac8db6d8ae23d6e952c9f90dd502e3d9d766e25d0af5d58a0386892015f648268e64bc17ad204b24a5eecd6c08ab43751753fbd178567b4d7bc83f8ae71c2564b7b9293fae8fe8141501724a9eb6124ea47e0e475e3f60a001395f23b303bca62cabb2107c02250e5bf405fe8f68b207db29258cc692e7a9a27681e98553e5362e731c69f81a48d28372ad25d34398436b5d229b04faffa80ff1ff01a17e1da36c5307836cabc8611cff5d029453334325ada79d9a2e881b3aa57893334a15460983a1381558be4a0c2e52b867323be6e069941c0eea71a50093ecab77de1938a9aabc28b374c4a8b23d82a7414289419e9ff58dd33ba9ff1e3ba197680449f22b1aaaba669c55687816253b503764813a261dcc80cc843c84322851a7fa0293d1ae732ec068b8e09af9d869b3bd70acac989aaca2aeafd2d891d3545a7995e9f547b07ff912e5e0294faeddeba49fe4f695d767696fe582292e5170dde8596429e4a252cac76103b44538b2420c6cb43fd924d1fd436325a85c58a97a138bfb6a3b0883dd29dc1b4f58e01d38a8e6b7810a58735a6132a0de9e51b495c19c8db653afcc8d782a9124396273d4c8761ecad2a2ea4a978e1e8ceaa184e51d322772ddf3ec671b6d8227ff45fbb714007b9fe3757a2e5f375b0af0fa8d4100f077671630cbc2039c04729e5735758070c383c783fb724478cbf354ba554340efcfd2f16f7beaf142338419609b0eca6a0cc8956d3f417b6487295238e7d487abeecca7336a8fecfb8dad9ef8d345d3844d8e23955015aa4072a55a6de9a760533249b679036dcbbbc229913808ee45e1b0dc5c70f064cbcfa10740860858d25a25f97a98dfc2d3ad2311cb89674ef9cff1b463f211b69c760f3e60aa1a1cc2101009ca06c56bd8ba750aa062ef364dd52ab57667aadadcb13d672955555506e10b8b698976830e0fdeed96a4042e03da211dfea819782479e56c93a240e5c8cbb9d87a76a700197981db6c6381eae29be0b08734e3b33e58c962abf0eb17a0f222d6030b4f994a6cc4f8f16e9092b8366c94516459ce72b60fac9392795efdb8f8d4906004c95a993b0b417dd4bcb8cea80be17eff114022cf569892a4429a05cdfd35fa049193506a664c2143cfb3afadeffcee0ab02befb065587f521425c8846f7b3c26b1d78e202d4aeb522487ccdd83144f8361fbdaa8ecbd10d9a93ecceff3c2f8f0c798b326bdb389309c9ab344e13188a042cc56bb7d5abeb328d7534c51af5b148560c2bc6eb2564d95a9c8ed154b35b684a12be4ab4c42b18ef753399ee58a8221cd8f303949af318f055f8fd28cc293c03652f94e56bc2a642ec0bbbf40319593080276fb133e98cec49456ec08a3f19bc9a1e20c2f05f4eae4941e3a2138c97caa1a246489dcbe79d296baefde6435da76faecc36a4479936d0da7dc4bc28e0e34942d078deb2a19036488fd8703651de5381507b967190239ef283ff4d8546581463831c4df24c8eb48c69d521518a8c96179a187c1ef997db82804368929d7958890e3e8749fd12a1c7df7557082a6f05a483ad3025d4c6a43abd947dd48d40dbe321efb35381f0ab3e08f004a24b0a543e50414f06554f816f8d4b294cec1c612f51d4ecd410a6f3bbfbb8246fac1d7274270972e44ec15311913485d1a92dcde431dcafb0f37b688f341fb4d42051b8cd42f39640157cffdf5a3fbaa02ef0be6eb467b0063bff174b1bb13401c2eb8506d13d144d3e88f1c39c6256d50552aef8c9c47b19042765543b1df0386062512302eabce92d7afb9bfa675e8809edc9de7e06400f8ff03402ed355af6f972f311ecb58928d817b3161234c4acbd6566337a01b2bac24132ef9d1d2de00b1013144ce0c18d0f7aa0a2801ed3a29385edcfd1763754dcf4c8fa45da79491efd8a7e0be013bc84672d61d01219bc8b4ba5efe0321595c9055473ac91612374a5ce9489c6348dde900873e9dc60db2bb69a16067b6d70471731fb329e474671d1d6418bd7c9f570ba1a2f0ccc908d264873677db8e42bb668bd80d17895b721ef76958aa716dd81e5133c2a8e3c77cbd625cd84a7067738856c799bbfa0c06b70c97335e77c9ab31af927c52bd39159a405730953a8883ddba0e611b8e4fbb5631ae8ca16902d539c0b48aa4e8867def6ef63183a4cd8a3f906a28475dcc4330b42e23227c7693b557837b7bee3a4acb1bbafff1233a5b3968ee10dc8f2bff08e97579f68ded54e3981d68ff4cc43bc29195b4671fe18698bbb9f89cf8feee11ef61b6f13470f8cdbf1f1003ab2c828c5583ad9359e3d370da497ba377ef19f3c07c378dfbd4ec6a88afb5a73b28cbdd9cfba38353719817ce443d485cdf8094135957c1894a6810dcd3678c7ee8f430248be62837772f690774e226bf1d2dfdab5a445e514f98336af049d22954c37f0d6bdd2f20ab62c431159c3d6c299079bfbf486d4a951a75a60c68a4c232dc20da48380ff4f268bcdbc15499b0ed993f8a6f28338c50518944ba7b5c15fbe3cd97a63b7e09e3da4a35be5852f81c46c9ab3085a2fe1ffc011919bcc71e1edd04585903fb80f7b95a1d701b681b73afdaf621fa23311683bfe00b5c52c6568aa9ca19c55b48b119d22ae909401a7abe4fcab42afeebf9c316bd721d7ed3b8739b73f412d33324c4e2c13c7a8f89affc47dceeacf2871c2eae2f2ee73fce677717b976783e6a053b439ebd0e8d683b7b8afcd9407bc6a1ebc97b37d0437ccea06bd8218a2e4edeade1e6a9aeda0be2caa1c545dc3f841affb66668ec0e231f4ab09918cc6ef01353b8b23b8c58a8c263a62b2e4b59cb91c4e6c13baa1a85fdc59b3abb67807f167ac6cce11a8bbdb20770f579f604e879f3566647166ce96106f72ccff23246595fc60454ea14022e62c99db807e7e57c1086142cc6529cee36e4a5fe6e15b210e6274877f628fc163ff5350e033a534218c04548679b02725cfcc3aa2ca4e8efe3fa2862f42d59145f59a2340c05f87a2021d55ce93a3ca0e1dc293ce73a9445329fc17789a706e12d686633704fd504e1931796607b3bd37fb9afec0e138a30c1bdc968a9b5dc4cfb0a4d46767d2673daeb335f7151bc830840e657401a9ef3758dc04b336911b639150383f7d30f9b60b435b574882c6f60110654436b4e0e405807923b98ac918292b1f0d6187b055a291e42a3b098baf9f4ae802c32a0d105d3fa49f04985fea8543cb00911f3d828d529aed5318d7569ce9c25ccb495c6e5db6e863100739c05368a810f1393291b18e7a289aa5576bd46629373858897723710df5a6a9c1bca1ffba07cd58f76b9b1fb400a53d500ba6ec40e91b4c9cecd875113ae68fec8e9f9f9f8d4e01c132953309a32dcd151b3c6b32a386641678282a2bfc02836cb61c6cd9f92c9313c9981c2581dff0aa77ae336ef34d9f5ba65a301f442f01b83073ac4a7db190d9ba35ae050d14f0c9e660f972fba2dc2a7afb642023fab80a557391e85958ad82918972e0e65841300f875c27cf6212b33323be08aee6fa6e9d5f5c3659a4e212196515ee00a9c8439fe08f386f14f45549a46e7563c34da93e28738c781a06d7372c7a93ec6307862ab24824ac19d3724eaaaac4a176390a1d231db9ed1e27488686f011e4aafe0b87a6f3dfbbc04956ae3509dfca6af797c8b823adafb0403fc33c9ee30cf1156a2c6683e989e0a0c52a6ee839479577f7dae441aad963d92000061c4e7593c8734f54b11e1468f0116cc05bbdfa76de2de693a554a39d3784ca1b791d0c0468fdb77a006a16ea5a1ba41a6dd51f7bb60c7add3160562f9e3f3a51139a4e91d35bd87e6c04546fe02736b5d38069818e842dd55dea6c39cf4695d824c32192360c4f218b389dbf99286b78d4c1d2d9aae0704611af64a725f45e690a6f7ee48cf2ee336ad09d3730b0afad03f8bc191493c8a09070b7722d1968029c6d77f3233ad0c461af1753a35f8cef1815100b93af3d34a079941838e3b32c985346d4d96b5f7c897a6cc214d752fdd0b4d6b1cff56303f0182c397b95aa9e22891e9d1c1aa0fe5e5266fad9ef825829b87cac87a3d1a3d611ee8c402789459960ea01b6e0299a9a75e1be7c16a6fd3346ce75a61aac1f8d69ed45465c75ba7cffdbc6d67bb1fa45f3a8da93ebd5462e76b53175613604ef5a84e330ebebc7592392c275081f2b4cc17c001987ffd52083eaaaae4f5ac9af5c922610a067f320be8fde4f173f09a99717d5672c7fe1f97c56454bcda97c4f5204f590e91a53d9e8750f204aef03d47e415ab0d407ff3f269062ec9adae4d3ebf8010bc18d53849b4e16983c4c949fe7827c70534a577aaa84825d7f8ceb074dc80718b3b31493ae4bdc01df352e3d16db4912a6f641ecd39133eef5270d210402b06b78bfbdc27e0a2ae3226f9a8872dc1862ad00fd8f1b85bf33a1b7efc3f8b5ad63b49624b9d71b90a74bcd48e739619804740724f3317a14937f6b24f12b1d3631a82df614ab01c63c3d53f172b7152c7304388840bc992402e13f87253a061a1f98f00c31ec0ef116f2de3d6c22d263348cc55f4b93c5a267699ac3efcda32b1daa8651269b3595f17b956751f367581b9bbc2b5a650ce2b8bfad1db8b040fa9f236d28e5582ed129f780e8047370fac046f209d8875e2ae0e7d885428b499da9169dca7bc62188c68cdd0b4903721e42f2d0a0846c83ccecf22f853282f7779e1745b1dfe0159f53a634df66ddcd503a260d549b310801345b1d53d5003eb1f8d12431b8f0db7bff8af25fdd1e9e6d8afe964a45294f434780ab86bac9aace5aa8e1af1614954dcf9a8c2286f7d6f517241728d248a0e6bcbff4fe6872fc027f57804da52b42d3e0ac1d44902acfa76cb44b5607064e313e267d1ba784ecde1f7b951873bbb6fc9f99e86ee26fef18d4e20a490e1228afa58116356776fc62e24eef0781f5be6457d6f72f4f67a51d427fa4eb302c3a5c955bed8433665295987f2183fba48fb40d3a78652167325ef8364be20ca224f3d69a039b3857d307ad79e96a1ec7326b3e551eb5af47a4d59e526c8ecca552a78790353de8685bb0c8151c33b848166a0757016dbfc3a01264e90702b18b31d49c60586285c22fe11d4cec9d25029b325fab9b61ea6119a6ead526c901be25ac7f823e30e7a3234762c037d35bad1de946608e29061b059cdcca710900aafaf96689a078748ed6f925aafe9be40b870ecb396e3e2948e5e7948ac0c87b364f0057798c17906e7a7a7ff6570dfc17215e0e00cf1215a11ba11454187d91e557cfe935553c9d93e16aaf1924e174bff3a96f41f15235b3c6adfc11446c78ae1fbfe6b39063d3ad81617e4f7e6a2f41f7c9829f1d34c1dc77c1096fa21d15bddd050cf413a3166f50d15008dea3be78ddd12bf3a0bdb810b784ce545963bdd9931074f7abf92b4b734845a0496d563182ceee636616d4d17d3e583b6673c1aa3fca1c4b8afdd6e719e623fdd1d6dfb1a6d4e789b0822091bb50b8072043110eb7e242cbacdc23258038db4b77c0972d26d4393fd9fca8b428c9de0ef6dcb75092716c51059097416f50e15a9277e33249fd4a3911028f75bde0c2a804a8294346bebaa6ca1b80e174711cd22c846c7738c883d6c2b3f6a2b694ccebacadbbc7adf274ed49ee21d016b4570a7fea6a136cc76d163ac679c1e3bf97c33e7f6d7d115690bfff30eac8706f40d485e8eca12066fbf1109b4347c32b5eb5edea8b5180180cd25fc82847a8d034d6b8a563442540099989a91ce3ad5852340bc50a917f45e5152e2d1f7d136eaefc2c457fd6621733ea98438d98938642a461507df02903ec246454a36f99fa671637acd7625e362b5dfa00c36f2b65bd46285734ca61d155138b33d4b67793db25e7ed45a39bb34e36d21d6f6544f8f73a0d615d6439dac854cc4eb934907ab5f80cbd1b82cc421d995d44f43a0efd985fb47f62acd48155ccde13c3de8c4af0a502846c8e21c7206f76ee7b6a5db3d99931c7ef00e8f575e99cd9d3aedd02931029aa4751f0b9e57363d83204442f2c5eda529cee2cb34cdfe87f594d3346def727bd6f2c32c4df3107dc633ea66822751a4aca7f03034a45564a04bdd3f91a6e7b6a584d9fc7448d31caeac6419b900a8fa6175cb0772b8eae36c4b04d561bddd407190d5780958a1035165d20314daa8da24d717842ad498ecfcee179f7a52dd41e64a104e8ce91f21b053d7bb6df833ad3376f29291ff961aaa15ea51f7d3c21a51dce56cc59a505f4d9dd7ea6a6af7329ff7eb5e6456936bb3620f541d8ecc7ada587efef37854eb8e86c1fa863cf94eb3f1415c0d8ceeffef05f305c433ff27e045557834e2b78c62a2bffdbb9b893cc93f9af6336431f0e3e676cf3c9a77e0236838c7f39a22102f3dcf620d7c7b567fa36fe70b268eaefc6e54673adcdfe0e64e33f1a048dfbd8a413139599780eb8a0cc80d498191c56d5c7fb80b93524994becbd23078523bb5e49d9acbbc898c576901c525f42c38848a9ee23a63938f19e82e9c190a3b1c5fe21764973f2380b5ecd879abeddd901d844cd9afdd1e0d6ad598e1ac6a825be7165fe685451df38cbc1edfa854fbf4f528dba03c73bd1bf0f3b8a32e955c2b9be1fd97e3d245a468c32ee8e2fddb506633648efa8b40bedab6cbeed606a84f317993f4800f9e6b6f42679d216d19a56af2f8ff2a69524fc00b59163812b7033d6bb42b110d3ff5d5189c26605605bba519844fe0ce36caa08994f981e4a063345e2928e91230077d76b6d626175c3ba35b6e82d693a78a6f3bfa650998af77afabf0bb786b2bb645f5de43caf01154f009d57b0fef9e5016a39ae013efcaf90845163d03362ab4c70de179d350e764834708d6f5ab421f2887aa9ba589c1391d9ac4104ebcc28cc40f1b9115144d01818140f31c768a111631ab8f2b5c25e98c2490d287fa9c5229e2b0599564728dc72fa0c9982738dd87e8d855b16c0ae9a0cb08d638e837804652b87cecd40a18beb04eb4ac32e7a245a6360435a1306f0812a68515440c537334883d8f64d53a395a5d7e1464d266dd11b2d32692836bbe9d2d64cdfc000513e2e4fb6078069ecfa07ef541f042e8826ec209f4de0a19f30c5e9d4cf6d8b5374f3cee815dc06c8e3a12ae93db4430579c98939eeb186ef82a8d715a91b3a27e77f439f3dea7114edfcc2f361c9dd67456e4cfb87e4d91a487e234405ca5454d753cdfbbea3aa8b5177657a922f004583268492124e2acf80e695ca20d491f26329a33ed9d662f11a00850a291de2aed3452a27127424e04079bac9fb28bd9b4303d94ca3ced03a995d4e4335b8c2bcbc92400452ed7ddd1aab99e14f4600f24e60949e73b63ea69a69a56b4e542a0cf90ea548b23b20e0c0638f412a068bd5847b5e502741455aa1a5744f919d20a11b248652a3ab9476095fc9e691d11980fbb27ff86d9cc42b24a3522106e64a4f7c7e4591fe4193feb9d6bd9ecbbe1deee8b0a3ab74604b6927ff028df0f1d91d338ff0970d6f55a6954ade9bf3f7e453bf2f71d919bc2fc5603702527f686ec0d8849555582b120de948b0fabd716fc90b19b0755176741570736fab07cf66b08cbe4d3e3c7cb42e89841ef1af5b9048ab057819609189f488ee5d7780ef79d75aed26e5c18febfbd274fe07abf0988bf6ecef2868b0247389e350db9806eeee0319872c10339ca35450495148f6b200b9589965c32d6c7b76e09a245e5ca79aedc7e5dc4eb7ca6bff6624fdb147938dd6c60b0f85f0f00bb527141563b01b1106b728ed586d3d0d4050c0bed1303f7b39cb781809ea2c8bf5e69c92ea00bd281504bd06aecd4ace2500da73cc380ed0c2e289e9e6bd787ed8f99757d10a24a853082757b15ecd005cd5bd7c21dffe010038ecb24ecb7ddd0805a5bbfdb71dffe867821caf9344fb0fa6483fab8fc6435b107baa2fdfe8ca64818c6ce91c52d1a76edfa20b64e1772f52682fa0e3413df6fc8a0160905101e41414bf1e191e2c731407b7e7a636d0b1819d806e773f4f914ee6b38e649fd5f4e7ecbdc74b92dc5165ef91e84e884080a40860b12a60b6b698e5065ce0a1dc38f8506d76bebed0560c15c624413d5f329cc32d4300a75fe55b6371016fc6fa9407fa291b408d0373e44168579349595d16cf65843a2e2aa5845153190376614720f2761450da7737530ffe8a2d0379ca738ef47f48608db50565d3076c0f774fa8872d01d753b9f69bc5aa9c00f692e69e8797378ff059475f3e15f3d760d5012fd33d85943cb4c392ab198878553e82aec96cc92ac2313fbfc026d2e91647266a072ca2f48ba07184b052e272bbc0c9258d28b23632e026b103ddc10c22e64cd8b5f04e4aa3abddd3d65fff483b54fcf0812ec441be83fbfd8a3bb6c441f8d2bca8e8043c77dab908c7d213191632115619b9c1288c45639af2f6351d463620657aec3593403cc041f2a809c4600f68f5df1c0617a3fee225be123517e5a6ec99e039754e844f5e55303a2e03dfafa35f9289edb279ac3362879199abf379a2cf21712132ee4609f6c0576e00730300eebbc5c03d92fde7b9f58a5625c74f7e20c274e09773a83d48ba7f099c3f9336b00dd0c6f21da44da84673f7c4244ff205373ae1562dc8a23553874e410299bd8f7568c1767659fd73d261bfc98fc9a9a969bba9ae6feeda21c1c995bd6a9c70195adac01bd673d7add967a854ca3695b62dcbc86cd977e35b5cb202f5f799e0cdcf4e6d0115832ad9186754bcc9601f8ff0340aea5daebbb49f744c8807a7ea5e9d2ea5dc7d2dada33020f203bf2eb97a50009138744a8097c1dc0dcce28ec2a47e68854eaeeff27ec6a74e590331274282ec88cd1ce5d5ea7486d646c9391ebfff7aa3e6f9500216552ce175ebdc942ab9bf73f024b4cb85066e23286c2ca6961f90de2e4a58caba74ad8b17ac0a07cc608a8f5510a9b545e299896ec9e35156a78c256f780d67e3483a508c78a307bb536b6f2706ccc85ccd19027b188717b4d33fd78d7d23a490bd29f42563cc9cbadab7d8c4086dfa8aef67b52565555f7463451a17e93d6418551bd60fe39d629afbdc24aad09b949d62e875d3e17666915da33ece9767027d9c49c93814b81dacff00d9be59f60ac792f9b0fd26455f7e4e2b41901674af4c97be030e129da76228f3489a25fa787331bdd7b1d62bc8820c2d191ef2325fbe0f61e34d27c3367ddffdbcbc37d0c77207f8e90a6321ca30bd0c0b5e5330fe28f319b13789d45a3d6a85bc0459be91b34d6b3a3ccdf8f58749f58a98884015fbda9db8a0971b1680dbdf34eeb8e36cab8ba1e21490cfa73242a3dad9cfd832a22eadc4e65c2cd4566a0f5a65527b1e2335a8dcb39e7b0e241b6ac3dc796cf56e524aa0153335a572bda5778ed141524e8706f5d04042b53d1665748d5e198c60f82b4d7b04ac0b798ab6ff2a9fa861ee45c56e7790a8f0b40d077961d6ae3ebcc5674714258917dab9ef7cde8e2100864aceb5fadac326e91861ef7311df8efa1c31ecc01812aaea58162c396dddecd9897d87fe9361630d876335f208ba361915d5b2acd2d48961f62fe8653f00a0557a524d6dda6b9bbdc4e3c5031542f0bb16a81e9e48e47eaa82fcbaee850afe68336c96ce10ba3d78fb4946cbaeca55aec48baa924523dc4f7efa6afbaebc80604e910680b84e91a93a31b1c57a0158402c35c2fce2d1ba0019ad22c395997464784699fe7b36e112484456ed2c652654ca64acc4fb166faaf4759c22c604faf1be8a9aaeff19063f877e480d7dfc5939567cb79ba47cd7b88042619bbf96452a7ca7726fbb38f32b718a35c75b51e62dd0a464bb651853a0cee692151e95c4f7d464c4e551d27b1e1fb37680218eccb30e46c3ec3be95cd10dcf8910a853dfa79edae1b24f048bf0fa7177e2f4d62f4e9fcbcdc7970d6cc8ba6b8d64c4d082c665ace6e7d92db3fb433b476e082f792e7d48398e2f3d112b427da9bf9a6a83dfe969d46dd12150de0e11ede6c4ff9f948abc507ac28563461ebbabdf8a9996a9666d1fa4423e161111011da47939bed1a038c6edd41a53331f3435ab446959fb9060f51a6e7a030cd3df3234116f190339fd3ce5957b0f149b0b9d14557811c8e80bac76732f89ca57c09f6f63ff908bccdb4fb473fd216bcba516a45a5a6a4be8bcc74c187da6d3a868dbe9835abd117a003d364e0fa5ea288529c5b896e258c0545eea6a84492f39d15af17a7d52a0ba6870445fed066ec3902b515e282451a93a94010bf09f9b897860b9a3844a4ba410768287602800f86143272fd39a3921894566136cea17eee2a30d45a86447b91939073be513a0c6aa019b6b63308402d03fbe97ab7791574eb278bbe3b13ad1ee138ab6862197baf9f679a9a65dc2f041820ee7400d9d09b5daf09ae702906837666a6eda22c11f2ea97a2fb0d2f2f678c3c33760349f1295a8f8e95d0ee8247068f6e8df46c875fe4603d4d6f9d7d073e09bd7b5e1184f1d3e6f0568fb589a267f6b6b8c5f5f4d3532c63098d8970c05af28d3bdf65c6debc038d135299164fc752c1dd26320cf20fe73c2bd3dc64ab31523acb78d3cc3e9f1acc4bb88b783759e4596a93dadfcde3a147817c4565c29b8f454d680aca88f3d8fa38eef65ea81c2c1f46e733492da8c38b6303aba3af7ad2980e1e25c913967aa3d9bd5cd54ce3ccc6ba16ef62609fb5d3989d44e67d6004d6f8ab608bb3641db0cb3e0d9ae8e4a15a753cca1e1f1233971a4a2b2baffc96c905907dd59e78660fe503e4d125d307bd3999f3c62f2f033739d3ab258af97e84d5a442c70e8d10cd128be9cb945e916995c6e9e23e973121f96c12c113618fd8505a43750c8a8e499480f0e3d44e25a4ab867ea3cc0517a3c6e804f6b54866c7baa026c42d1cc3f605ed4ffe18ad3c51a002fa50508d1c06a58047cab2f62d91e003f6e931b000f50b7eeaf0f97172dcb9e8e391d727f961d127df7574488653293e618aaf906232fc22a4fc14eeecc570a33b5fb7030f298f93d35c49d1394baf38ecc9c27fbfc74fca814092094ba6f97ca4e354bbd06105365588c09388ec664cacedb25335dd6d2d491ebebdbcc319cd6b3bedbd19c96113ab1246590fc4ff868ad3784905bca196ed82614e6a791973462d68bb2e0d2dd948eeab88d0ebb00c1def85cfd0c228e8fcabea700cb7b458470e78464c4523d757b602418052ef714948a6fcabca424a151dff2824613d6285ffb2f80d1e4f3fc0d70b6b4fa4d9311614077ad26cbda0db6d6bbaffc0f42562469243a365951ea0c466259d6ce096bef1120255080a22560ec0bdb849a20288a8e621014a8462e0433c7c325ba91d3ad3457cfaa83469338ebfd7600d5478fefd8b40f37b858697e40d104142a6a961e6d7453286898bba513512d9a631e6376d07d0b983aa9719c4d6ee2856d815322646508a757b38e54f9e54489373e5070a6cb7eed2b31fe5cfde20e38f7a4b34401c6f4a6ef3f80cfd172639cbaf95e3af78cb3108e2da5feeadf932ce2375ad4f58d78552d415579a2077f9ba5d38644a9618c8127b6c51a0204d6897472c616f5fb143dc9c0828ac0bec42935052e9249920e90be1ca15cb55ebe720004628606989a6f9d510c6b860a2247282a31b6e864b410840ae7872024e3aa4eda67dc780a9d6db484f9ca070d845e81d16bbf8c35ac8ea1d12cd7e4a639d0e00a9e388533025c8542f23bad663116f140cc99346ca25806936947509dfdb45ecfdd011b323f7d093fa244877e0127293fb04e0a3a6fa482f2e1f0a9b2e2385ade78033c076e351436bab9ef9bd5a4c4587b92815f9aa0152ccfac4721d3895d47566de778b407c37672cd2a3159f85775173437fb4e2a7215b34b8b137089aedc3e8fbb2528d1df19a22a8f88ebfdba3f9f5ceee280d3868455653be34c67ea42c3e6c95036a0bff130c32ea5b1acc4a39a535ea14b2637ef45d0834638dc7d7544a96b6e39ad478dc9bdaa8c447ab11472bf5086b0558984d48070b4a61d45217cc4a7f0ebb5dbb7d81f691efab5b3a445deac28cd4ab453e81c8b6800fb6832eceec5f0e7c9cd9196351deb667948f99d0be668f7452db9cf239e3d74fa990718bbdfb566e8ea7608fcdc84b318ea7ae024eaa13de6039a4ff47ffbed72ff5c3fdc2746e6dcab5c23765229c05aaac2f6fc2854b31e722a1d12b3625be6b216aedf82b31e25bddf99b47ab280591dd1e3a350e887a896256f22992253438962258b81682ad1bc165db7823153217e9304bdc09cd22ca7b350042edfe3c3573d44a623d3874080bb5c20da9eb6bc723348fa7ef8e3884b44b0a7ae5b14332492e0115b6ed8c9532b2c8051b5e514c8c1cf9a59950a6fa42d78378bdb40e1e9a42d924e981af5ba0178fd722c9ba563eea44999f65e1db1368b6c71340af53c138a6d4657c0f3fa94fb68ca7a7b2c9df2fdc1bdfcf9a084eea02e2c5bee288412d0862d700e9f522da6629b4e757a111c2dc1c4ddec88018f3c2f9b1f1f447fadf39041aebee27aea82cd8b7cdf86dcf324864ccaf26d29d7a09443c2df38237a8442089e01e64031c7b7eede9b26412f71a747d630f82cedcef5c63390ba022f173b3786f20619ab79c7d8632cf45917fcdd9d60cb9daabc7beac997eb3a08d5867301f7eace43d99a3e7fcb046754aa8de1ec6a34d6830daf5b4e21314f1d370d3992459461422d5d522c6b279a6f08b9710e0f883d868bbc7a6011de1b9656465e8e91303279f85950518a90e68ce7f479e15a5a67e0d77e7aeefb6327f89bd2a3d6b9e64e00cc37b928c4d8eaff36b2a6d43da96945afd383c1fdce2b1551e70df2a06c54550a8f6b67740a7d913c9ac6796ffff9e2bf06cbcaa9c8c0e2a38687142be0a0bd9d9344da43b6e379870a630ec024ea566806a476c6aa27a15dc6ed3bc21bd1135c20ca143b5263d82530199cc7856b6a286663d6e18c14137759c233bdfa433e206a282aee30f8dd72581847f2368cee3610fa4519f31e31513920230a41bdcf607c513729093b656fd9feb81e6fe45c753915a67d0ff07f22c4bf2af6a4dfe300fba0ee98f551d31c0c4e401e27b73aeea7a5c90e127acbabe96ac92b9461a652e0ca743057b11c9e81c0bfb8d8355dea2890b51f0b1a7732e6762e91b789620fbd04218cd4a754a41b02b5a93a598e26b116c3ea41bf14185c14f4599244556ca321379af9e3c6a92af551b38d09c5b294576f2def8db3853af32f73b9467f86f94a69974620d2e557ba658c3b8c49162ffd7c378c9fe3c720487370cbd0c1f4eab02186df0eecdf85266422422d0ac3001891b466ffac9327717f5dfdfa3c7385d14c006fe8734d4c6d365b697ff5d38cd090abbe7b33162432287a0dd116b2285f2b34bc495ca8ee473d426de4d20cd5471f9d3480813bbcd64a580c228c5af6c3a6516a8ede275f9e60506cf1cce1dfa0e75f66a4830acde63231fb6cf913ad3537b5191cf6cc6128fc6dcf1ded2770d8cf4ccef788cb3b05a60d070e63c3ae1665ac6e21ec15a0d8301f8ff0340aebdfaf6f5bb49d78c1603ea49aed84ebacb5df4aefa5dc11296779e0005b015fbfd2feb27cc470bd03870ee56d513d33d43d840985dd2ee92d50f8a5055ef75cf9bf053080a7051e1403ab498ee1f93501c9f84b29888abec3d6171311bb37024773668e25ac4ba80c3a462834a48435c18c14d0c614c545e82ec32036b577726c51835413c22151b28aeb7e8c1d7fa0775acae4895ee75cf2f7f47c89f263af2f94648a02a89f5da6b5e73d33af8665681cbd97b0b123a2886c7b2a943e50dfbeb3bbff16b04c5c6d4228d99dce8d5d0dedda2a6a16bf87c70cd6f3ca04be3724985b1be5d278303e83cbb32819fd5306f548bb7cf8bc40580ab64b201946b961b1defb83a8ff670ca6a11a454df9a7425bec34ec8fb3c08147f246a753d04f5f7e9644ed5ec6a01dfa8e194e65b0a906cb86f63c031ed11a9b560de646114e40d3e45539e25673c9533d0e1c7e60c7248a9ed00b4937a5634b6c8f238cdbc35771cd59efec9868396b2cc3040db9f75b6bdbc5c2c8e2258014154399bccb34a341ecef5a48687ef38b32f027422eaace2f4b1ed6c1f0af567d123ca53d152336d9b4fe693dc693a21033c91d2232ff9a5ab32005469f5407730001c86d50bcd048d7bd3a02a488a081937274418369befa5d3750e787bc28b5358311a72522f3349a687dea8265a830666401c42f29fe7b4cf4a59e03608e57a1c03213c5e0ec83c71cdc156d2b09e41f212899d4f16368f813c1c4c14189a73670673387cd925b203e6950d3aa7ecdcce8844a77394e8f5c651deb978451ca28412bf979b8bd4f71d57cc21f1c9575b7e92e245c8da20a67695e4f3a3f35fe7686048471958cf99a76594e8d178ec8fb15bfe09b4722eea4af3b953e8096db17224bced28c450ed83086857c6572c43a2a7939a26c990268bb182ad0630b6d41968f467b6eeaa4768db2ddee9653296f90d8d0a3068364075e0f754f115064e1181f94ab07e388ed7c3d54092fb93f7fcfa87720c299f806e3d2b0a593f48631f228ce7e6306bc3213e2a69ee74aba271df4d6e2333b4a85a87c29874454e17d29285a989af0ffa370b7015ee40f842d9ba5c5aa12bb5ef23166f39741e2020ada0d84b6669928a2a7f4c057d39f09b32e28285c2960bb926fe1e0d672ba42d9d4181c07253322721176c9c2388067e44965bcd446f8b755382a57ba6d74e64c11537a3cead349d04913d8c9d18103ab4d88d01b847f4d0141d96f7e2c73e11d96c002e8051a553ff9b7f584d81a7c105f15dcf5b8b1c4aac8672c2b077c91fe484b0c683b3a8f81eed17d021081b12cb93c4ac69878284a9131ece5c4e033d20e6a1e8c94c9dd917646906e213e561457029067f9cb585adc09ce9a0bee93a15f60943939ec15ba097f60a9d79cc3c2539d93c057752c975852d0d944954724ef059fd7938bbb99bb7e5474d14e2a96bd4d49049a10018387d1d4227736b224b24c576e0474ad227bc7fd399388f6b27ed6c0eddc6e054ebdbd06b6fe1acc3ae4d2613a969bdce2ed8dadd8fc1d14e351169af5993f12384abe7947228a32962d244c9056858acdc31accf94871bd20098d927f2a5759780cfa627e34378b9ea88fde412228a10935b318ed208979c4f618f42b3dd38a2bf1e8b3cba581161b51f9969af4c1261538081c18a52639db840f6beef94170f100e55309b49938fada440279f062865848cd803481aef6e5e424c5b6627e70c7184751d1d1586e061da9a9d665861d512207c58dc6c8330b2c54bd021a508fa8880f2d448022d93654822921814673d9667566a6c1c427b104e1576840fc0e9910188e4a87b19f03f944bcf4a105defbc8c86406113af1f2351e831620f2e3640b82baa2ab47036efd6f5e91b92e6d47b00fae5de520f9ef1910711f7b830593c58b95eadf09d05204f634db98f392f3eee63ce8b8f5bad4ad68d81bf717d7b2f95d51e8e1868f904c973e2ec9a3875862da80742c5879b71bfdfc8a8cd6cd3e5d03bfb8d1692e759bd6432ae93e196490c185babe2e559be2a7f13b699e918782fcf5a3d6817553b5913632a91cb0ff4359f0b6657e9267912f31cc0eb6fcc0dff45775671c065806457a87a56786339ee947bc4dcd5ae5b2d1a2b8b88cd55c255d987dc9db04b369285b08c9c9c079c237cf999e85c7912f1ab2cc6c1acc5313204a862e68eb7605842e50432e71ad23148aadc5c801d0fa3dc9cdb6df9cba7953d8221200581801997b0a9cfa9989dc5daa48495af9b8fef317c0ba1248fb842ddbd6241885e171f968ecdda06dcb8c30220b229987f37ba10071d1addc8a46afe078e50f4f173a4d135c90f995196cb9f6f9eba711470f278e9ac61b838bd0b750360694da1f55f0f61377a51b91fd190d163dc78c95a600850f40f971f2f56790a22de3c0a902fa05ec1e6a27e59dd1aaf283ff80a41b49b726cc9345adab0af1ec5842a10a3f1fd076f1a09c49885813a279367dca947d39bd2e7c95130c39afc85b22460af107af6d84f2919c875ce46a9d718cf14eb3a692f70bc813fe8d14b113684c349c22d952a3a9f50de08ad5772e7b45c4e7355bf75d51eda78d6d6c13563b2a964524f6b28517c6ea8cb08af61217bf04a75f612f2ad980fa46aa9f93cebc1362aeba4fff4a6f618832f8160f948f7fb1ab2ff4dc0996877c955a416f8518cffb10a3d4c226157432c2c22079b5246390334b008f1cffcf599c80e0b633144e537e8f708cb8b9e2d2ffade2b683fc558d2534ab6733dc9f19218e916cd47ae387f03af1e51be756c8d84517d65a78d43def9771dac8b67b20351f05a8d0b63b1f372b3839e624fbeb88cf60a9b0b52e73026fde24a515b9c5d4b7443e60713f28857c14491ae7465f6731b78a9a9a9f5530e779fdeb5d584e724f737335e322e2a5ec72a0873267683346270a0ed0a64739818725d027f932a49899c30502392e31f161c90ca5def291b8f3e72aa577a16617be8488fe073eda65127e77718a1cc5c558ef0c17f12b2ca8966bf166e3a5e6a49fba35bb2c0d6e9985316a78d782fbd69eec5a40903d8888fdfddf38533deb64f0aaedd5391d7c863d12c5d740b99062ee71a19be4fb2e1aa94d51563fd6dd6681c9a45b380be15b29378825fae22a34748fbbf122ed334de409901b94ee8ceda28395024ceee4dfddf6d6f1a59629279fcb65a124c24f2f9ead1bc808282ec829a08f6044196e34606221aaabbc3fc269817e3d5383d3c21457b80f5f05d4fdaefb18eb220ed8f1eee1f93413506870a07e77a1ca628d1f8c54dee1f77f1de8c738460715e7c7b43cabcd7fd258844f95fa36a382ff3a6cc9ab2cc2a2e79933c1e033d4049d1da880a9cde63ce0bacd41df31d7822f31abc3caaa013ebec5f5116056b11e4da8220cc1773d3e6e1e57d6489301f548d36c301296964669e831bbf62aa2113512295e931536b22f6c2120c50cc1846621df375113d66c99c8c4095643049b1457c465c522194ca73cccb6ed3d361c08de60f9de274ddbfcac84530901d2ac1e0ff15982d1206bf296cdcf0a388ee1af83c9bb012b48fd6d908b7fa9d9d462cfb4c5e72770ecee0bcb4825bbdccde382dac35c82d6bfcdbe46c2ea3f5a1f5491fe2ebe2aba70f9097593cfeaca1911d5e6aa073262aaa4c4ab284b9355e04d8e9eddd0b5163c1e218d68d0eb64b86aa061a4345bbf2b5afbaef29c21fee4e535a93500f18762086d9babe2cbe944055380a6d89c0262ab2cbb1dbd49a2a3a4c351e69d7beff83b201f51092acd7e4620a6331cef657722a314fd2a7f987f8284a69734cf492efb6efff3880b8579d803af99c7eb8c53e7d927beb44923b8797fbfd3a59a6cdd228f76bd332840205b444dabbf721429e5925aa9ce452363a36bd350208a19b91bd083363c50fdef9b9f6768742aef0ecfb027f17ac096202abffa1ad56b3a98a249b7884e5f48a7f343bffe0d4501ab4e40f8ad249131d928eded8a7a04c5701570e11c69eeaec4856509209d285ea6c502eb5ccd5ab0debe7565cfb9a575cfdbedcc410a5ba8b9a5ca01694e8eca130bf087091538c8a16c943363bd02df54c1fdd06c40cded2aa38c5e97ebfaa927840414f7b24b0354a8a182b1c08d504440dc7f3e3eeac2267afa6fe6047f4b0d993c81efbafa47099303a4c4c56f870d3575dd4d61f2c4eef3d797d22e3c77b4445b3458b74e965ad1606f5968e0b46ea49022e979a0bdc7367c53fea037a5dfa962416f8be40fc88cf704d568bfe7307ce3ad37f135c10faeb88b291e3e7f97a25a7863be45262729ad296d6ee3e200ea59f7614b35e2d42fc4c0f3c4d2bdd5df978e2ab8a548cc1616c52a940572fcb376a0b71d3469e1b63f38dfbbd893de2a6702fa4afd5f3819d9a52bddf392f3e4f9ab32ea4fc2cef0c8843066f7d1ea9a3695a19295c1e56a3e86593b0222c3e82f516c93a035950d1bbb5ee4c72c7e953b4a4af6af4c195f1cd06709ab2b9b56c6a732c4c9720e75762c7c1e9e72b4865f7379bedaaf094d647388cd2718cd4488e822ccbdf6b90d31ceadc529ca6c535995794a5f8add9de79dbfb29aaccda635abf86b724d7e21bc2143079266e6edaaab2edaef887543ed566754fe0040d7795daa746b8feeab9dc2bb3a1077750d2b40ddd0748e97c4a25960a86c0de8d326993a0be97db4bd972bed52ca7453e7c09150bdfcdc8ade82fc50c00bb48227a3d48132d89f42d36a9150af5d839453e212c4391e551cbceebe81cf877267b224b516feb8bfebdc58c80c3d1d49da12bb3bd9bef2d66a1bb030c8793da33b2d5a2bbdd3730efe593c325cbf71601f2be328c6fb0bd060008b4270ac21708c27391098706b2fc4322294f7a89031e96bdde3d795dbd0da7bb9a86a634cd162c8b95e0760ddc40927f32fc5fef783fea906817dc71867a86960275ba33ecd16a931d3fbc16eea1db943009985488c789a02873df7c8c48714c7afa60c1c5ee6f903bc7847a366e3563c99557cef97d5eb0ca74bb941b1542168db86007bad8262366c8048393c67e42252c389d38d96709d2c19e7469f683fa8638c76f8f3223bc42640ee3ad61e3a4b3242e1df3d994661882dfeb6dc6345c158a513e94d35388aa949f1b3405e7cda68e60711b7ee33e64524231dd2d3cb4b37cf092e6b23b0d58d58318331a1e05ca2b3bd5fe38dc29e350a9fad1842cb92f5a7425e4349e45a96f17ab67f209c9193ee0c8b7d9de0844b30f6c2325ec1bd82958b24a0c9d0441b2471624bc96a9863a0852124ed7320ce342bcb6884d8bb81fd8c1262f7e6eb4b08cabe2f24b257f069baf8583fc0cccfcf63563c5e7858c159f4730de93c3dbfdddf2e370ca4a32265895e5b19068fe190e781aab21594359a8e5b3e942d9982d38c01c6314c8899eb10f79f02d4f875e398a20a99107b710e010ff4a9d37bf7918e8fe88d756b1d1845bc8e36cd205ed108dd5634002311165c3e95ba0e0960ed9d5a6d7fe378be84bd5c88558cc8a4eecb73b8b49aab5ec157048db803c45f1e489c735c94f811919f131739db62398f38634c5bf5961d03d136b3f5129fff7ea0a459d548575ca1c69b537a5f142e73e9c9a78d00e9a1dc52890e92a7756c96b5977fed49516e078cb823a56d5a18406f3fc4290eb83cd8a6545eff462065505bf71a8cea5d2c1ca41a8aa0c7da9fe4fdf7e703eac484a3a9e005d0e328d47cdb9206fa9244645972146c624021ef7cd5831cf1e773bf3b981983b3a709f8c5f16f5ecb59b659c0d0125be66e316be080e8186922d19c58367bf6dbf511f90c475a2a5245621344d384992bb6435a4c15cc317ffe8b0a5f46d0608014870b28a456f44a1ff887c99e56536183a3c7753efeb1505090d3f1cf5035c6a8d84211eafdc9781b7575cdf37a7bc0dccc7b249f2799386a8efa6063269d6e48ee0a921b97f129b0c2b7d15129a73154d91c986744cf3417c96617412994cc593760ad97440dc26b61fb414f3c928603a2921ef2be01f02c87bd08c39d96347482d9bb693dbcaa118060303f8ff03402e9d56d5ee858c842444b03bec0b29ad411c9a237858e1d0745f745f34df17eff7bff6a50c6945c6e544b80857b7ea89862f7639c0745fbdd7303d7f861783a4d6052c90b0e677cf6c885c5606484587a8f5773f77671a8f788010b867a12f100dcab15b0c68d50b7a588613da326cf59e5436c83f8599600ce2b7037dd8535837c112b80b54f2faf9c0f84bdaeeac094ca6ffeca47ffa549ad726c54c759823e934c1e1494e2ed0ddd4f9f7262443eb2f2d53cff57e85e4e9c9105eac62ae979503150bd9bdeabe34e7d2f4bc7e8eb5dfcb264bb86ceddd884dc6b7216e42b5de0b6d930f51e4a203573d16e4d2082e63d7b09e2264221b10224889ea717a55f3ae740d78d3b2678563d02e28090e47d14440f2844eca547fa475645e814d3e226055798f803c26aec6e70709c9d1b207ea765655356b4f6baa0f6b74835a57ff25d21da6cca4c2eea6d87050895a464447b4d16b86a2abec4427e70d9e184131daf3c23d42529e049fe81de73821af2cb6dc901d2c4c4142008d6d1ad73aae2639dc54bda625447a8f33ac9d0c4d8ec1bd4b3a94a16e979fc1f8c8b08695985f0c03d77f86ecd722ec8004167d1c6674ec23e10f762d206821d8147f8ce6bb9e17c45ede3838a8d5a320ab934c8f48090d1c5f111fe1887978a1075e16002231182a9c3f10a3d87bd30c81dae0f0018960b52d9d8708b7d2891db40a12cbcdca20762f8f8cab0db6d9a211e96a3d2f0c9d4470e155967e8f25005824027f1c4188e94c255fb2ad1d7b7051726b4999b72edc8ae3da0296b5e3d30aa5f3aa090de3cbf9c470be710ca458dc1838cd64114880fabc762252824e20a0577b5511538282b04b5d26899691f258331564d9ac4ffbd8f61132c9f690b7aadc14b7a104039b0cc4959c203cde72e0bfc775e1147719952dbf84bb7464d854874626e88c329bf145ac746d0c76287ff477eb340b7521f501665c83b11dc68ccf22bdb456014462fd8aac5602bfdd48c66d16276f5ee5d56cf90b5e72e1d575ca6fd8dd4ed4370d2f3f85d9f42ef2910b902f2b93281a78e29e139a70d0cfcbcaecd626033d02303ae548e11f0e6f284421fbfcffdf091b746dbd049f3c4d634b534e7a5d9ae374399690fe4044709899f30d5afd4a3884174d1185cfae57b5fc675cd4c0a3428acbaad68de750b3c06fa7b99d9aeb2c4fa8aab3d5922926d320f63b4d83c83701b53b7738d3737b52eb91f885d749d7d3fc592cdf5435fbd31e1fa2166639b7293ee02ad63a8454a1f7b6506a04fffffef9d74cbd759cb0cac097340886ae5b4b806710443fd3f0eb8456ea1007f9ebb1ade6dc4e6ba5a3a1f234dd35bedb014a1486cd33f084ad23cdc6d0c639d23d56cd67c36d1afd2e1c293d087cc8b8447771aec8095de3eebd213434eb5c1bb83974b7fa31e116ad3ca655cc06693c4fc8733eb084a85ed94530f4fab6586a6d40695ca23778b55220fd8ab6543f7959b6a9b30f6f6f3b308eec7f31d1b578e0865e8251157cd0432817023989080d901615691045beab12eaf6d889e3032aea3087129f6174ca3a3b53b8aac7eb3dd8c19be96c161b3f921f93cf85d5b4206a856b787aab8cbca035b0e6bce154ee3721bc93b6a0e4f2220dbe1e8337f9ad6bdd89aace1a7245e3db04c997d8e99ed521f0b4712cb9ec0ba3be901d318e8378827bdf2d5c230eb65ec67d472acead57cc11b10c127d52418a108a998af7b605d01c58bc6de62844ccf20ecbb6edb29bb3c7d48d0b0a4ff226c256476f19cdba159731b974baec2667a697008759cb582c08ea7ad29521d683af10c76755f980175bfb81438ca6d2bc76c226878c3c33f96906aa5731aa409c470c42aed1bcfb46f41f5d2fa3381ab0ef1c9d6c96420855cf3c0fbcccd8481d4fc486e43c2a403e025701d03c7df23b48bfa9dc48725876f736ef2b7142feba6925d2567b30351b9102dd8ba8340d5f24a77df60cc07757f7759d62bdccea389546537bfd027302f6ef851004a3339b33b80fd22d97deb777e7766aad096e4fa88f63899a9f71eee827b09988cdcf792ff6f60a4e3e3179783f555d6c3b77c420bd7747e65087c7cbd2f6a9154ff38e493b40456c284eeb83d8de62c2292434a72f8ba384b62993a972e32c80fb1d38fe4f576e8400fdbef1eafe60885850d2bd2f5d02cbd824603cb0e17ddf91f1049ac4c7522827b598c4ca48ebf98d976d4f217e1780b214ca6d2d25137cba390bec5bc92a97e28bc0d0698b86f1751ef88189139584189e9db5f6f0f22baad340debe964c27ab0c5ec465ae3410e0ede71e1eb271274b0182a185c9040c1908198697d5873b7f7f2c8b48c2d5b8b8588c766a388b4dfebb2b07dbb0e78a96f4c4a0e990c8d7427bc5f68492ebf58d208805b36ddbc528e186608ea24a9983e109189472bfbdac8ca264c40f5f82b4ad06e01b0e94256dd68865f605783759ad1b21af419b833df8b119687d2e6fcf02c4710e5a2d0e3aaddef02321dc3074845e4c3312fa406910a283f62836613085e2485b9efb461d2ecad9d2c91f94d0c45241e2ba051167179e74f366388f22cf99a344769bbae9691aeb40e6c1a212055a6169b790b53c42169cadcddb3b410915ace49e33448e4e145916e1143b3c90483e8e2b8461623b190076c2fcef5b8662ea3d766241fea517e4e40427979aa18eda15c90fca1325e9f5c5d2e042145c92606059e28ea7c8dada103c432cd428fdfdb8588c948cf375d6bc05d6efe53ab507ae5bc25bb6b6419f1d2da4f7d3251a6bd8d4e73659a27fa7ff5bc27aacc6349942403ff14deafb0cfbe965981850f782fbd200e1a6d02120f3e70f64bf6818ec1a0448955168ca851e50edf933df61f6f3f577aeb33ae60396103312f732737b9d531c777bed31651a4f94427be51e32a81f0b0f3b03fb675f3c8513d6492f7a54eb56fbfd29c0ba2d02470b9b6421c99d648a54e8ceb96ce9417ef6866a095a8447932d0b16f4aa5438e842efa3ea5ad17d05c1ff739dc1dc39988986fe8b9403a075c3d037f847d94c22b04becc3539e97c67eef6c09ed473284312b3599d66123e31653903f4f7111bec4b1d847dda61b8f5a9fcc115257374f780691d6827e1c80af52e170814401228f969306b873c009dea1d1815ae33793b2979b59bb3dec4d674c89e091863d1c3180245b19e725f549a591650648dd8d3af0cb7233a5cc938133e86de8a1e17d6274a659bccd8b239e1db4251283cae2bf42372f3f757deda7d2ead7e4f68bab6162987278d680502b955d27f122fef5c4794ea08c48a83edc03b54b72aee770d5a06fd66a92ced9c61506b98f418c394953a95d8433eb9e515f87d57e490f9d236552e65289aae0e3c8f1bbe38b598a88dba079a7014115a44448c80e97754d0d8f1c434043b8ef51574141e418e93d8e733fdda573e7657708cd36791026cd780d85412facb5c859221ad046d7a06db2fdb001940bf84ae89904970999582b179dcce397f9d72e644825512c3e92c6a038e222dd5ad5f2a1497e2a1c72d716c748d3fca585069e8912b8d836bf5c3b0b582371c6510c076115f9e8c3740eb21fb64ff5bdb19dcc649ee8ddfc493d655c30d1d2d1e1d70dfe99e227e6c9ceaf586b5b7114c264092b40b3aa1dd22d418132864682134b24764551ae462c3805c4881ccbf3b79df6e44088cc908d9698fedbcdcb047dc57797ce73398b271cd1dd2fc306f2b68a83912e921904b2ba1d9936331e1c64b65142889345415c494fed65b1e1e9524592c3d4446c9309650c82bc531242e91796156cc4d20f6ab2c77238292037a6d68651509893edb58ee132a9e2f05389d94a5d70932560a5698cd03fb827031dceb785244b5b2630ebbefdddf0007d2ff23aac8dce2b0de6ad54d292f5db9f5e9f705d7863577b3919cd5d4d81acb46f66c1585ebb6b0d8fab588ab0eb12854c067f1e0b990caa5959876bdf20e14bb26dbc95c3b1ec9eb3ad92c9f1597e0fda3693d101dbd3ea38d18cd45a5fda77b0c9bbff04a5c338aa60acb8fa3a09d626ebd6cbc93bba7b6df0b59d3ce334e68c42a59d7c4061eb495fcd8ceb187c6126ee6787ff2d04bbc84bd4ccfbb441148ec0a9c6b23e0c80961d625cd5b5bdf9f9b46cbfb55f1b6bec778f75e348b037f733e0e5c7c14f3b8e4f84fc16cbe3f9b0f0102401db9a54beac9fd484f9536b0496f4b058bff6396420ada69821b41d3c3a4a24c82b49157218dc30b2dd3719710305def64665dcc8116a6240c8c28d16f11b1e571ae058c95c734e4f2f83c0be84e650111607c38a1362773b22a0083bc906b255a8eab0730565d33780180fb676727296dfb7d0dc3baf73021e8c5125f4dc6fbbe55ff3de7de3eb7798f13c170ac7e2c29ce6464732c1f252bb2e5f35ef0513acafdc2258d7ea6132c83a28646b39b398f92a697051ce8d87feeb87f6640882419804734f253d778dbc506a39b2506749cfd8938c9164855722b4ace70257c4f1569005e34bcd90a1041b55435d393ce857bc374c20be3ecc2631ec23b723fdbbf3de3028aa9e89366d0d27c40b41577fa40043156598fe2a361e47bb6153ea605d70bdaad39efd86c65b555c86f6b46b758b154d4df31e4f8aee7656f5c8055fe9a6cb69ac5e84b9644373ef0051b5bc78fadfd9b95381dc03ca422909700b6af79cf0a39b5e23be3baaf2715528ef2465c668255908dc7c2656649cda7222f0dfc3a1686cb77c4483f88d5855b0e2e013a6b7bcb89d9a06af9115f58efa0e6a536f3d53eab250b7c7926d13b40771bff2071b4f5d0a6dee09a18b247e0144f8a5d31237f5758ef8d32ac79f882aee015a3b6908e5ef38bd2a162b3fa12a04e17505ae02d8e4f0ffa8ce2b55f290d0ae94626159312731834584b4cb29cd4d5f832477252395c94923692521664c8266e8da0571882c6369de547ee2cdca36c7fa73425ce6d3c2cbe855b8e9b6cbe907eeae7875e647a9b7b5a9b12b353b6af03a60ae5f5eaa4801dfb0d9268a908c0678a3b00ba3428cccac6032f08d6fe203580b5466698c7120399a5c7ad59a156435989004053cabc48f0f8c4da8798bf786c13d1d82e19f751d4f0bc02147a03c021e3a5e538e8817e9ba889769764f48704700fd731f282ac689f6a627c6b448d6b1c0d376de7e17dec4871b6cc9997f16c5d0fdab58db6ae2195b884a5fb0811ead1d0963df1c5e4de03824cc2e98f3d6a97bf6cbff13174244613cce236ccc9c44fe5348e44c1d8c81a2a6ec18d9051048b490bc99110c3e3feab068cc022b58ce1414e3504c6b1405759a944d50f042f24f5ddb40eee2ad41235234bfb81ad27ed4dff718fb5a05724116774fed20ec0532f6d1fcc9680bc60980cdbcc9d93f9393735b990f02637f3c53fba9a3c57751fce0de0ebaa54c0480b08be12bab06f8c51e4811e6a0c1f6615865aeb35f952d68f11599ce5a0f263b098b1437f5b5e9b48da2cb303c97d4ecc7ca3d1737991c8e72fb02168f44c5ab873ac96b69cda41ecb82dbeb8c8f866936c671ae8567291689f14b9057636b8a9fd8b22929c4bcd9c83eb31a4e717324e306f404b77026b73b8c07cc9847be0a166ae5ea63c5dd0b3bdfdbf618c398d27b5746bea7bfbe5a26342300e142f5c54a25e4e46401f8ff0340ee7d9df5f53bd721cf32928cdb75ca76c892ba05f22e634bc13a6c8d4f92f172476b953e89763963a36264418b217160f602c8d5d5d543b747b8ff010405a8e37c58e838b933f71bd80fa14d847259c616c5677a7a450eb6c609af17352a52cee98cb281697290231f6c11d97633c6334a80324f2a04f550dba5e94235161e4bc5f64afecd3a2df70c4e6b25796e37a287dae10b75069e5f9b19525c9e43d63688e176b51b262732005360213f5c7b70e410ae59a3d550a3b7c2477445d26175c1e0cefc88513f8052f6f132bd45b86f32c81dc7318c0684c610a0057af7b4d713a2e071a083dd42812778411750f6ca930059fabcb5f6f5ea7c07f64f6abc1963b0cc7bf71e722881d82eb81fda217841c11f389c55357daeb5ab2768ef75d8fdd00e8c390cac9ccf73cf22e6786f6e1107b93b8b328e909992466bac1d62819462ba03621a6e33a1ea0d328e2a72e4476f3a2e82273e7496467e7583374ac56f6bde6b95fb489ee40617e6d700177249c3d9e7b744d95d21bea3818c60ea8527436b1a4d4522edd85032109a9f91b661844e750d4abd34a0c161883a104ff33cf4d2a38671e85a26aaa8ce3491b5eb85b988e3d260b6768ccbcb3f73ecb65dbc71923225d0728a9699b48c03449048f62b43d6c1f9b4d66f4ee763ca30ccc19f6341b4fee26f11e1790a34d2b702d5ad450b386486a03ad70901b08d98af7de92de6631e8d63db18ea21e04780692cfaea2bd2df3eeca0af08a6f809974e2b502c28075a63bc23a968d23c0f97661d09b5661fedf7d73858abd1cdab92113ccba2e7ccc28df3cf70f19620facdb38180eea883ad801bb18c3ac1993dab858e94521ed3438dc3618cf4e4b723e4b8c69810308be1835e4214a6f35361cb71e3239e027ac62c36b34d5ce5ad52687b85be3e50ea075f8f81ee3111315c7c9fbc4c4b176428c7d16a3130b983a3faeeb298374f4f0640f135df05a8083d2c26ebed0124b35433a23b9147b35a116bcce77ed981cc47ea8c1f626ab561c4c7e1f38fdf0af97e1982122790eaec99b775d4872361488c0750f667822b8f5555b1a1300fb1dd33965ea6c2ca8d24dea0d9db60ff67a654004e6b6b09e4459081a42642d12523b9531ba4c4f3b05d6d2710fb5d73e102cb417b0581939fe622584095188f5b441301a9573fadafb1d54ab4a0ef0b7c6e3cfee1ce621aabbe1b0ad6119d1527ca72deaa84597a47c91366c4a3934dee9397c9dc180fb4f3e4e9e844003fa9a595f48f505783c6b780c0f709615d66f7fcf57977c0dd2ac75be1cde71b03df7e2f7d9e7ee88562c386b31d39546322413c0db252632cbe39b1b58f88f1ec9b137cfbd38609b54a3b38f38c18f1fde299980b562f0ee27178605ccfa24302d50cd35443738a2ea18dc74f4a6f608dac072f0870c203a35cd45c38c98bd297805e3ace0a59a9f5b9dfe91e2497da6d27f368aaea4e5aae829b8989a36467c8807d0bd39700ce5420c21542b8538638573025df33ee1b1ddc0f7820aca09aa39ae8dc24d1640a72d8526b2258ce8c45bba4102006c6c14ed7bad60ad8c64c3a17bc9b10aa10970a5007932bbbcbacbfba328f8c0b4224a1e83ed28e5c30f66ef5c37cecefc21bdcab2eb5ea2aead3f99209a806af601a0f49fe43a478df7a179ef44ccf2a5fc27af7b1e937324d326bfcf86206e8c7611d8141f8696e0f36ae031f9f3289e3a29a9d595334f737e985d8d22bd86cb644750292246921b0046a7e42f86c2751086da7d632d0b034b632b3603790e0bc812d5831ad5fd032bbbe2404c86a4b51d36811034ec2063b9290b9307d1b5f7ca2c53b68d12a5f63af23790fecee81b3cf36d3601b539f70a0a89d6c38fabd21ec4709121fcd28eb469b2a4294880a8dee8c5d2fd9094336ea816ff9769b07ebdc7c5ef02c0d77c37c0d9a6bd18a3958ab34c59bec9745b180f2d8b6e08e059c2c00561e3a5a8d77e6370482ada49018f1deaa7751a0a2741a217f220fbbbc0eebb9a916a7f1c8495dc349ab75fe0a1422815749d9a9cdbf824eab01084376b729367943f4826c2ee5c2f4f40f797d38cb79cc4bbcbc14418b893595eeb99d51cc720fcc793b9feccffaf78e98ee6777e112ab3b7a1a8b73fb101023fc158002f34f5160af2219728545a43052374cd02640240e088011d61b2eaa0cf97400c0cc2085a8af791c9d596ca30d9129c9f695a4e189c785248f04aa05b42421a215517bf27b493038b743ad51d5c669682329bef57dae35ea0578fc917dbd8f60ece57d7abf25f66bd0b04ba80abe38f7f84164dcd662e22be0fd6d08a33918ed120dc77b68077b47f98950c5929ec29b2daa9164e51a855d3565e5467766c0f2a5b83894d4bdd5f17b2ec2e17ba105f71dbe07893e50a90f7e3476225f127bba063bf3584c57aecf7c6f6e4951af6adff34672a72a1830ffdc5004c015cf850a831f6558cdfdd6c01bbbcd84b83ea8aa0b66e3976050bf0400a3e7fcdf6f2940ed86da609b416d0c9e7f7bc8f48796c8da65f56a930949a3c7ffd83cc9a5c0bb9d46cd9b63d81cf7c82c5b48837460224f50ecbb4fce1ebc5b383016f2312c8d8d0fa15eb3d0e880f007081d9d91e75d13dc79e1f0a44f2e9cc07a2d7b954287d456014e7bf952929c8a22a70981215b32b04740e6c8c7cb1321b2fe1acae4c8f98265c859ab81a03008c91809fe506c994e433d586bccaa2152270b2d3c771ea82e4126a161a15c59a568d678b92dc872e7d70d1ea8d2ca46a37cfe02b82598002dd6270feac18a5283c01cd390e3b147ca93125e6db575efbf0fd05d441bca8b2abae58d501aa7ef1cd14fd3a39865349773eac64edf0a31beeeb074b81e965c395b0c1546d367a8a76bb8d95b450d3e3a9f468f060f7137638fe0052f047b42e498eeed8c35a37ba6fe378b1f2ca7a0c269467b6a958e26cd7714c59d40c2b93159ab870820963f77258b5bd1e3d2618d504d653cc0a7a20a2c810dc05039539fd15c0abbfb8477c7496d32f27e249588e2eebc43b5047832a81129cc37b77867363d37eccc6044b2f6ebbe18de754cb3c2a6e1b7f33079d15ab1e5e8cca72f807c9a837909292f395fb2cf90955d7f00ea26d1e6f0bac8bf7e310c2594d280350941835b2df9a233f54e85bc6f6e4fbdb6758361f60f9f4cf72d3ef6daae1a0c527eab6bf1e8b1b810b2ac66dc8ee8cdc94f09a135954377018d89dde40a6ce8f821440e8dcb773a7cbf62b79bd7f73059d9097e38ed52b9daeb98ad7dd8f4f03d3003cd342f2014d64edeb0a64924585486823b4689c87eadd8f01c472d8a94d44c9e28e030bb246c39dbb80751be496bb3accf97b263cb474f912c447d96b6338daf04796b0e537c9f797162b1f7607fd09f27d486ec1a831b638ee67b12f5adf3a4bbc794d5bb3497f527b4e4a843a39814768ab61c089267e8adf0d23c11a89ba59336ea16ef4ee8cc5a9f2b9ff31fac32a2bc653a422c7c9b135ffb7617c1abdbdd2c13a69be8a47ac2a48634da223a2c9de4a654114f449b69a93b320fd89ed8aa332cb58e79737432167e4006b9c363b0ba47f34c6004e0516ad293bdc47d05a680c2fa45de405f80d50aee8d12c4f7350cfca39ce9b05cc8c0fe71201584eaf90bafbd80f30b005c3336b21c9fc646b3662bda220777426b0db58d3abfd2012dff56fc4a8428084f67f4a9ee14b51561cf58dc51de91e65277c884a0f4ed43db343fe191c4ab416c5eae2cd427883e46a4f70999e2fcd319ac32653a0bd4f71716c99ac9bdd7d45bb7f09cfbceca322512faba2c6034ad821c0317ba6f858f212004e6d4803fd9c0ea711cb1f6cff91e00f7e368ec8029ce70a4eb9d4c880ff6e40700ffcd2365e9af83e5c5200fef87cfae69f06c85fda542872c5f1a3c0582455d1a50e54ddfce67ffebbeb9389657be6416d29a49cb82b6369784e1fa8fd6ea8eac690dce16be6936a6c3db1d03280e58be54a9e4ab19da135a3d1392b3355e3ca31776478a3ab6a1dbc50e2754e9c3d3c247b9466ffa1e99f4435f3ac73eb0bc62ffb5e4b04b8c855f1fc05f4a9011a0f3dfb1ce18bb893606a52e45038a5c80b72108e08b35f7e14caef3369b2d74236806183925655f1809f087d2749c9ef3654e84d5883220abaf1773132ce21a8c68c1d9cfe372cac9951545011c33bb72eacd0c2050e0b5bff2df7583ee484a45a99566955379391c4c20954c71e6db5a0d6799b8bb8de44e9e8d03988f602d783a837d292006fca43cfbd7ab8f4226b38202c19f73fbbf7395eda661a6c3e18d0b1addf6cec6069686007502e66f750f870a65b67f5e26e636a8a88c7cfc916569c6c88c4c9e3ffeb5dcd09956f8bb980afe6589732fdfdd67380439032170bd312494d58cb6e99c4f563be30b0ddaaa64e33a23a649938ccf001646c0c40a139e51a40c5adc2c6be9054d9bf29e7776c3708e8993561b40b761f359018030f42021cede5344e961442d63f648c7180a58505134eb658b900b38ef6932c3e80b48a6d169973b74f4e439632d3c83dde28808b51c934fe09ef37fc91fbc2a841c675140ee23894ae9ce43b62d625c29f100350d1ec827dc5f5380b5c18e46f16f45b58f2d05b571314643d5fa360d8dcc52605f533634a99a4ffcad6870b05754fba7c9ae70e573cc2d506de44693deb6fa0b7fcfc473a6e80658eb5a17cdbdd48a2421d5e32818cf9e62caf8f1158c67d39db791b260340e5d6b4ba762b57e04ed32fe6136aa1b9bc68977fa667fe7b085f0c501c217699b1e44de38fda7b61d7f0628363925d06214d5321e0208399bd4dc626ab4e10300614443a03480f7f30dbba2c55e839bf08686d9a7da02582cb49b33acaa35bce361576f3e03fc4b1294f0a2f2307411d341005f25b8fbb95677748339e8864408ed0de7c25013af4917af42330b627cc408180fe71b20c4f4cdbf60e011e0e9209e4808da6311bc18de32953503302d1cfd34996d33ec16da634bd3ef61a69dfae06a557e4222c704da19c6f4f2593c28e07cdcb16ba5cbf25a90a1384542f0ec0c919d48516c2884c5c9ee3b2b4ba9e6f5e2c202fd0ae58858617e9747a47e33c989ffc4224b8a0ff4789505a22c0524ef352f20a94a373d84922c939c283bb1f605e35e5c0eee55feec7cea3cacd08ba056c96c8fe203c02aa07db9ca78b22c91a7e214d53abec5afb0c3cd16a47a50295cc84b95238b329b44463be2fc317fa29854985d2946eb1d034d69524d488384a3e027e15077bf7373e2ff7d77b8d9167e11d31251f6992abe6a89ec4e21a513da5d404aa736094a932eabf1c94a922913cf6d74db178cb0d6b7d98710500e4e0bb3e8430f9d89eb5dfe25ab0657193b83a61dc05a6965e67c0167d3457f3fd5ac2cd28403e4af9082bd0354961423d3acf69a4c420ec35d11b9800439e9162b5f4e0895db8db7db069435ee763993b18ca328549cf1a9168e3a12ebb6a7c0808e38e4da9d599fd502446d680d1d411b1ad3918770bf86f37d54dfa6f6eeb25e4a3f82b448ddbee021e43750e012a593b35918749f5b8fedf8f2227546733f28ddb920f5317fcbeebc4c8339adbc127452fb458bb4b82d97605e29d3893cc809829654fc6ad1ef26240d9b16422b2092e8d20b158390468a27264fb629ae6745627ee00db05dd4e72b396a243405beaff1e9815ce2fbe4484f425441d96b68dad579c1e516fde5d8616b68f9820f2ea1f9f75e2692aa3fdf5decf45f61fbfe4010c970edc82413c608a82d16581c53ac73073d8789a4ea897c8ced2534b4c56f310c381ab09501408ee9725aaf26e439886f1515fe43fe8923697d5d3a0df5abb54fedcfdf2990e675cf1ca3fae742a0a8a7a77739cc2e156154a2cdee0650c521cb08a16363dff82aefbe5e24c6e28088b07d752cd0ddfaffcd406417b563b07b761be46ce01c9e6b58dea8f453076dd9f48a6ed816047192f513417cadd43ab7429b43932f3d1347d114c326f55272def8cc819d67d49d7000f4e253e655f8b9f16f2154944f8b16786861209a6cda6b49e006b4e02a3c6c56f88611ae8c8552c166ec11ce4aa13e994b3852e50a5891526f0a6c530af507cd0ffb49fbef9e99beab225941f36f90545d447a686bfb548c54e09a02c5186162fd684b369f9a24f47730713b62316cb28c8d8409117f66e07e6e9c6e6e5bf84ea10621744accbf496549eefc019036abfdefc75914461786a8a4797eb07bf0ec4765e55e09e5e81718a192fcc72d8efe52f1b1a98dc6b07b09eb62878e5e8e74adafc8fc7828a062cd7dd0da888084403a1dcdb7704acb41d568ae4c61606bdf4b5936aaaffbe7476dd5ed97aa2a61c524c08b9baa91da899c22bd28417607632c391a775018bfe8d1be0c98d5b78f19bc4bf1b6042f26c3f1a337ada770737b0a2c9ec7c0d4e1fc2bd384c371c79bfc27ddac3bb725ebf8309ed791b361975c900aa317e41929aed7360b4ef7467e84a9f3cb9422d408268f735e51ef797024d5308eb7f6e4e4211e677303df228ad03f8d568e6dd3a79fe141241f284609b23dc7906641a30b85d49003b3b081165f4c414e6aada7702fbd5003f2cdd146adfc91d0bc316d77e84d53b6419cb1bc7040380c7e46a40e714001c8d5e74c7adfce41245a27ff7f5af939ef3d19fe39d9bc5eec3533747fc82a3a50cd2858845e4e024a55cf8c4f8aeaf8dd342ee2c4127fcf14a5aa115f8897ad0ec7c0f923e4bd007f4e7539094e7579e44fd8d1ff04b0b8797ab254fd1bb97d24c8622b737a496b7f6ddf284504fda6fda0770e131af810d67f423d8eba10511394e5e27202eb33439b8756d4e8c9e083cc796bc3dc77d237999159c90dbbedd1ae302daca84d44d8d55277038cd9d16322527c344d79a988edb3ace77d33b2ae89ada4e94875f0f500cee5d1115c1c6e9d9fdecdc7898dcab14beee562e63224d81c4b91f84d8e74e319fb924346d69147ba13d0820e4e404df96bd003d9aae4328c5d30dc513b74b55976971af6ca83fb442fb56207d8a7925575ace384a156cf9102f5bd5109c32e5a373fd1efabe9a41542fa8ce4e5e07ce9d15883a17cefc6118637f4fb6a1e496d339fdd448ee5dfbeadc547abe786da632f678e99238fe4690a00e39fd376627157e7b0591be35d14017abee3b4f53e22614a783dcbd8bc7cd9aad21acc9c2971d666f185e123ec925f9e150d1938fce6e6b78a76c17e7a872c0e3275e135d09b1606b4818708095b14abbbae2262885c8afab95f6d26a12763eb483aa125b5046a3939cfec8bcc52160d0f24ea6cd96ccd7ffe395565c8a08e5c0e21a2c316d1fce544789fcd2a4494c2a6bd1a8f6c0f3942f4ae25468e13d151fbe4c0df4df4719b29e74baee3363b037bf155048e21e4df1364d33fead7b8365faa91954d1f7679d9b0e05ac72e608387f15e815bc29cda88202822284c0b3b6d0c288542665b67f70b3eb98c4a7a564f0fea7be79a69ddccc5809924ad142e05e8dcf5338b77255a2bfda9091a74e8dd7c614f81326433b2cca41b81199ac85713f214944c5d8ce2bb0fda5db5d23679e4a9479761386019b97e877dc9e6b7636e4a181607fd8fd34a0c95e6e25fae853ad2f55c7d20b8770918f6e344858026229eae645136f2815bcada7ebbd4a2aee056a4585f85d912650273a550704415afd9a141e8496667890cb59033e9687da1dc28b33d5c44dc1c99a93c57a3be7261c5c36b5c1b1f176849ef55cef8944998926b43399b2331cbd258a4ab84ae8adf9108ff4752046153465f7dfd624cb0ddb0184fd49a950b3fdb48e4b50964d10a5734f773e8137bebf84f56c6e7310eade856663299b9f0a04c88c61c0a6d0ef12a264ce9342ff377fc7debe231ec04c728feefcca90af6fb4602fad438f7f46b0003" ], "rawHeaders": { "access-control-allow-origin": "*", "cdn-cache-control": "max-age=300", - "cf-ray": "935777255bcfd7ac-LAX", + "cf-ray": "9358d8d15a5a2f64-LAX", "connection": "close", "content-encoding": "br", "content-type": "application/json", - "date": "Thu, 24 Apr 2025 17:54:21 GMT", + "date": "Thu, 24 Apr 2025 21:55:48 GMT", "server": "cloudflare", "transfer-encoding": "chunked", "vary": "Accept-Encoding" diff --git a/src/api/providers/fetchers/__tests__/openrouter.test.ts b/src/api/providers/fetchers/__tests__/openrouter.test.ts index c27907904fb..ad32c1eb825 100644 --- a/src/api/providers/fetchers/__tests__/openrouter.test.ts +++ b/src/api/providers/fetchers/__tests__/openrouter.test.ts @@ -66,6 +66,31 @@ describe("OpenRouter API", () => { supportsComputerUse: true, }) + expect( + Object.entries(models) + .filter(([id, _]) => id.startsWith("anthropic/claude-3")) + .map(([id, model]) => ({ id, maxTokens: model.maxTokens })) + .sort(({ id: a }, { id: b }) => a.localeCompare(b)), + ).toEqual([ + { id: "anthropic/claude-3-haiku", maxTokens: 4096 }, + { id: "anthropic/claude-3-haiku:beta", maxTokens: 4096 }, + { id: "anthropic/claude-3-opus", maxTokens: 4096 }, + { id: "anthropic/claude-3-opus:beta", maxTokens: 4096 }, + { id: "anthropic/claude-3-sonnet", maxTokens: 4096 }, + { id: "anthropic/claude-3-sonnet:beta", maxTokens: 4096 }, + { id: "anthropic/claude-3.5-haiku", maxTokens: 8192 }, + { id: "anthropic/claude-3.5-haiku-20241022", maxTokens: 8192 }, + { id: "anthropic/claude-3.5-haiku-20241022:beta", maxTokens: 8192 }, + { id: "anthropic/claude-3.5-haiku:beta", maxTokens: 8192 }, + { id: "anthropic/claude-3.5-sonnet", maxTokens: 8192 }, + { id: "anthropic/claude-3.5-sonnet-20240620", maxTokens: 8192 }, + { id: "anthropic/claude-3.5-sonnet-20240620:beta", maxTokens: 8192 }, + { id: "anthropic/claude-3.5-sonnet:beta", maxTokens: 8192 }, + { id: "anthropic/claude-3.7-sonnet", maxTokens: 8192 }, + { id: "anthropic/claude-3.7-sonnet:beta", maxTokens: 8192 }, + { id: "anthropic/claude-3.7-sonnet:thinking", maxTokens: 128000 }, + ]) + nockDone() }) }) diff --git a/src/api/providers/fetchers/openrouter.ts b/src/api/providers/fetchers/openrouter.ts index 9a8eaac4642..0c6cc98348c 100644 --- a/src/api/providers/fetchers/openrouter.ts +++ b/src/api/providers/fetchers/openrouter.ts @@ -1,7 +1,13 @@ import axios from "axios" import { z } from "zod" -import { ApiHandlerOptions, ModelInfo } from "../../../shared/api" +import { + ApiHandlerOptions, + ModelInfo, + anthropicModels, + COMPUTER_USE_MODELS, + OPTIONAL_PROMPT_CACHING_MODELS, +} from "../../../shared/api" import { parseApiPrice } from "../../../utils/cost" // https://openrouter.ai/api/v1/models @@ -62,8 +68,7 @@ export async function getOpenRouterModels(options?: ApiHandlerOptions) { ? parseApiPrice(rawModel.pricing?.input_cache_read) : undefined - // Disable prompt caching for Gemini models for now. - const supportsPromptCache = !!cacheWritesPrice && !!cacheReadsPrice && !rawModel.id.startsWith("google") + const supportsPromptCache = !!cacheWritesPrice && !!cacheReadsPrice const modelInfo: ModelInfo = { maxTokens: rawModel.top_provider?.max_completion_tokens, @@ -78,29 +83,25 @@ export async function getOpenRouterModels(options?: ApiHandlerOptions) { thinking: rawModel.id === "anthropic/claude-3.7-sonnet:thinking", } - // Then OpenRouter model definition doesn't give us any hints about computer use, - // so we need to set that manually. - // The ideal `maxTokens` values are model dependent, but we should probably DRY - // this up and use the values defined for the Anthropic providers. - switch (true) { - case rawModel.id.startsWith("anthropic/claude-3.7-sonnet"): - modelInfo.supportsComputerUse = true - modelInfo.maxTokens = rawModel.id === "anthropic/claude-3.7-sonnet:thinking" ? 128_000 : 8192 - break - case rawModel.id.startsWith("anthropic/claude-3.5-sonnet-20240620"): - modelInfo.maxTokens = 8192 - break - case rawModel.id.startsWith("anthropic/claude-3.5-sonnet"): - modelInfo.supportsComputerUse = true - modelInfo.maxTokens = 8192 - break - case rawModel.id.startsWith("anthropic/claude-3-5-haiku"): - case rawModel.id.startsWith("anthropic/claude-3-opus"): - case rawModel.id.startsWith("anthropic/claude-3-haiku"): - modelInfo.maxTokens = 8192 - break - default: - break + // The OpenRouter model definition doesn't give us any hints about + // computer use, so we need to set that manually. + if (COMPUTER_USE_MODELS.has(rawModel.id)) { + modelInfo.supportsComputerUse = true + } + + // We want to treat prompt caching as "experimental" for these models. + if (OPTIONAL_PROMPT_CACHING_MODELS.has(rawModel.id)) { + modelInfo.isPromptCacheOptional = true + } + + // Claude 3.7 Sonnet is a "hybrid" thinking model, and the `maxTokens` + // values can be configured. For the non-thinking variant we want to + // use 8k. The `thinking` variant can be run in 64k and 128k modes, + // and we want to use 128k. + if (rawModel.id.startsWith("anthropic/claude-3.7-sonnet")) { + modelInfo.maxTokens = rawModel.id.includes("thinking") + ? anthropicModels["claude-3-7-sonnet-20250219:thinking"].maxTokens + : anthropicModels["claude-3-7-sonnet-20250219"].maxTokens } models[rawModel.id] = modelInfo diff --git a/src/shared/api.ts b/src/shared/api.ts index 5dbed396a08..16b09e71467 100644 --- a/src/shared/api.ts +++ b/src/shared/api.ts @@ -1401,8 +1401,10 @@ export const vscodeLlmModels = { * Constants */ +// These models support reasoning efforts. export const REASONING_MODELS = new Set(["x-ai/grok-3-mini-beta", "grok-3-mini-beta", "grok-3-mini-fast-beta"]) +// These models support prompt caching. export const PROMPT_CACHING_MODELS = new Set([ "anthropic/claude-3-haiku", "anthropic/claude-3-haiku:beta", @@ -1421,7 +1423,26 @@ export const PROMPT_CACHING_MODELS = new Set([ "anthropic/claude-3.7-sonnet", "anthropic/claude-3.7-sonnet:beta", "anthropic/claude-3.7-sonnet:thinking", - // "google/gemini-2.0-flash-001", - // "google/gemini-flash-1.5", - // "google/gemini-flash-1.5-8b", + // "google/gemini-2.5-pro-preview-03-25", + "google/gemini-2.0-flash-001", + "google/gemini-flash-1.5", + "google/gemini-flash-1.5-8b", +]) + +// These models don't have prompt caching enabled by default (you can turn it on +// in settings). +export const OPTIONAL_PROMPT_CACHING_MODELS = new Set([ + // "google/gemini-2.5-pro-preview-03-25", + "google/gemini-2.0-flash-001", + "google/gemini-flash-1.5", + "google/gemini-flash-1.5-8b", +]) + +// https://www.anthropic.com/news/3-5-models-and-computer-use +export const COMPUTER_USE_MODELS = new Set([ + "anthropic/claude-3.5-sonnet", + "anthropic/claude-3.5-sonnet:beta", + "anthropic/claude-3.7-sonnet", + "anthropic/claude-3.7-sonnet:beta", + "anthropic/claude-3.7-sonnet:thinking", ]) From fc8e672c98dc69a9b8197aaf8405b30963e48769 Mon Sep 17 00:00:00 2001 From: cte Date: Thu, 24 Apr 2025 15:11:53 -0700 Subject: [PATCH 2/5] Fix supportsPromptCache check --- .../fetchers/__tests__/fixtures/openrouter-models.json | 4 ++-- src/api/providers/fetchers/__tests__/openrouter.test.ts | 2 +- src/api/providers/fetchers/openrouter.ts | 3 ++- src/shared/api.ts | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/api/providers/fetchers/__tests__/fixtures/openrouter-models.json b/src/api/providers/fetchers/__tests__/fixtures/openrouter-models.json index b7f5b773e04..a8fd47fe046 100644 --- a/src/api/providers/fetchers/__tests__/fixtures/openrouter-models.json +++ b/src/api/providers/fetchers/__tests__/fixtures/openrouter-models.json @@ -11,11 +11,11 @@ "rawHeaders": { "access-control-allow-origin": "*", "cdn-cache-control": "max-age=300", - "cf-ray": "9358d8d15a5a2f64-LAX", + "cf-ray": "9358ea26bac719db-LAX", "connection": "close", "content-encoding": "br", "content-type": "application/json", - "date": "Thu, 24 Apr 2025 21:55:48 GMT", + "date": "Thu, 24 Apr 2025 22:07:38 GMT", "server": "cloudflare", "transfer-encoding": "chunked", "vary": "Accept-Encoding" diff --git a/src/api/providers/fetchers/__tests__/openrouter.test.ts b/src/api/providers/fetchers/__tests__/openrouter.test.ts index ad32c1eb825..e6984f6540d 100644 --- a/src/api/providers/fetchers/__tests__/openrouter.test.ts +++ b/src/api/providers/fetchers/__tests__/openrouter.test.ts @@ -9,7 +9,7 @@ import { PROMPT_CACHING_MODELS } from "../../../../shared/api" import { getOpenRouterModels } from "../openrouter" nockBack.fixtures = path.join(__dirname, "fixtures") -nockBack.setMode("dryrun") +nockBack.setMode("lockdown") describe("OpenRouter API", () => { describe("getOpenRouterModels", () => { diff --git a/src/api/providers/fetchers/openrouter.ts b/src/api/providers/fetchers/openrouter.ts index 0c6cc98348c..99dc41faf99 100644 --- a/src/api/providers/fetchers/openrouter.ts +++ b/src/api/providers/fetchers/openrouter.ts @@ -68,7 +68,8 @@ export async function getOpenRouterModels(options?: ApiHandlerOptions) { ? parseApiPrice(rawModel.pricing?.input_cache_read) : undefined - const supportsPromptCache = !!cacheWritesPrice && !!cacheReadsPrice + const supportsPromptCache = + typeof cacheWritesPrice !== "undefined" && typeof cacheReadsPrice !== "undefined" const modelInfo: ModelInfo = { maxTokens: rawModel.top_provider?.max_completion_tokens, diff --git a/src/shared/api.ts b/src/shared/api.ts index 16b09e71467..3827a5a3b27 100644 --- a/src/shared/api.ts +++ b/src/shared/api.ts @@ -1423,7 +1423,7 @@ export const PROMPT_CACHING_MODELS = new Set([ "anthropic/claude-3.7-sonnet", "anthropic/claude-3.7-sonnet:beta", "anthropic/claude-3.7-sonnet:thinking", - // "google/gemini-2.5-pro-preview-03-25", + "google/gemini-2.5-pro-preview-03-25", "google/gemini-2.0-flash-001", "google/gemini-flash-1.5", "google/gemini-flash-1.5-8b", @@ -1432,7 +1432,7 @@ export const PROMPT_CACHING_MODELS = new Set([ // These models don't have prompt caching enabled by default (you can turn it on // in settings). export const OPTIONAL_PROMPT_CACHING_MODELS = new Set([ - // "google/gemini-2.5-pro-preview-03-25", + "google/gemini-2.5-pro-preview-03-25", "google/gemini-2.0-flash-001", "google/gemini-flash-1.5", "google/gemini-flash-1.5-8b", From 8639da00fa6b35274afe4ad6b2c1c84a7b85e1d5 Mon Sep 17 00:00:00 2001 From: cte Date: Thu, 24 Apr 2025 16:10:10 -0700 Subject: [PATCH 3/5] Add isCacheAvailable to OpenRouter provider --- src/api/providers/gemini.ts | 64 +++++++++++++++++++-------------- src/api/providers/openrouter.ts | 10 ++++-- 2 files changed, 45 insertions(+), 29 deletions(-) diff --git a/src/api/providers/gemini.ts b/src/api/providers/gemini.ts index ecc493dcd95..0bbd7705aad 100644 --- a/src/api/providers/gemini.ts +++ b/src/api/providers/gemini.ts @@ -54,7 +54,6 @@ export class GeminiHandler extends BaseProvider implements SingleCompletionHandl let uncachedContent: Content[] | undefined = undefined let cachedContent: string | undefined = undefined - let cacheWriteTokens: number | undefined = undefined // The minimum input token count for context caching is 4,096. // For a basic approximation we assume 4 characters per token. @@ -67,6 +66,8 @@ export class GeminiHandler extends BaseProvider implements SingleCompletionHandl cacheKey && contentsLength > 4 * CONTEXT_CACHE_TOKEN_MINIMUM + let cacheWrite = false + if (isCacheAvailable) { const cacheEntry = this.contentCaches.get(cacheKey) @@ -97,9 +98,8 @@ export class GeminiHandler extends BaseProvider implements SingleCompletionHandl if (name) { this.contentCaches.set(cacheKey, { key: name, count: contents.length }) - cacheWriteTokens = usageMetadata?.totalTokenCount ?? 0 console.log( - `[GeminiHandler] cached ${contents.length} messages (${cacheWriteTokens} tokens) in ${Date.now() - timestamp}ms`, + `[GeminiHandler] cached ${contents.length} messages (${usageMetadata?.totalTokenCount ?? "-"} tokens) in ${Date.now() - timestamp}ms`, ) } }) @@ -109,6 +109,8 @@ export class GeminiHandler extends BaseProvider implements SingleCompletionHandl .finally(() => { this.isCacheBusy = false }) + + cacheWrite = true } } @@ -146,19 +148,10 @@ export class GeminiHandler extends BaseProvider implements SingleCompletionHandl if (lastUsageMetadata) { const inputTokens = lastUsageMetadata.promptTokenCount ?? 0 const outputTokens = lastUsageMetadata.candidatesTokenCount ?? 0 + const cacheWriteTokens = cacheWrite ? inputTokens : 0 const cacheReadTokens = lastUsageMetadata.cachedContentTokenCount const reasoningTokens = lastUsageMetadata.thoughtsTokenCount - const totalCost = isCacheUsed - ? this.calculateCost({ - info, - inputTokens, - outputTokens, - cacheWriteTokens, - cacheReadTokens, - }) - : undefined - yield { type: "usage", inputTokens, @@ -166,7 +159,13 @@ export class GeminiHandler extends BaseProvider implements SingleCompletionHandl cacheWriteTokens, cacheReadTokens, reasoningTokens, - totalCost, + totalCost: this.calculateCost({ + info, + inputTokens, + outputTokens, + cacheWriteTokens, + cacheReadTokens, + }), } } } @@ -250,8 +249,8 @@ export class GeminiHandler extends BaseProvider implements SingleCompletionHandl info, inputTokens, outputTokens, - cacheWriteTokens, - cacheReadTokens, + cacheWriteTokens = 0, + cacheReadTokens = 0, }: { info: ModelInfo inputTokens: number @@ -281,21 +280,32 @@ export class GeminiHandler extends BaseProvider implements SingleCompletionHandl } } - let inputTokensCost = inputPrice * (inputTokens / 1_000_000) - let outputTokensCost = outputPrice * (outputTokens / 1_000_000) - let cacheWriteCost = 0 - let cacheReadCost = 0 + // Subtract the cached input tokens from the total input tokens. + const uncachedInputTokens = inputTokens - cacheReadTokens - if (cacheWriteTokens) { - cacheWriteCost = cacheWritesPrice * (cacheWriteTokens / 1_000_000) * (CACHE_TTL / 60) + let cacheWriteCost = + cacheWriteTokens > 0 ? cacheWritesPrice * (cacheWriteTokens / 1_000_000) * (CACHE_TTL / 60) : 0 + let cacheReadCost = cacheReadTokens > 0 ? cacheReadsPrice * (cacheReadTokens / 1_000_000) : 0 + + const inputTokensCost = inputPrice * (uncachedInputTokens / 1_000_000) + const outputTokensCost = outputPrice * (outputTokens / 1_000_000) + const totalCost = inputTokensCost + outputTokensCost + cacheWriteCost + cacheReadCost + + const trace: Record = { + input: { price: inputPrice, tokens: uncachedInputTokens, cost: inputTokensCost }, + output: { price: outputPrice, tokens: outputTokens, cost: outputTokensCost }, } - if (cacheReadTokens) { - const uncachedReadTokens = inputTokens - cacheReadTokens - cacheReadCost = cacheReadsPrice * (cacheReadTokens / 1_000_000) - inputTokensCost = inputPrice * (uncachedReadTokens / 1_000_000) + if (cacheWriteTokens > 0) { + trace.cacheWrite = { price: cacheWritesPrice, tokens: cacheWriteTokens, cost: cacheWriteCost } } - return inputTokensCost + outputTokensCost + cacheWriteCost + cacheReadCost + if (cacheReadTokens > 0) { + trace.cacheRead = { price: cacheReadsPrice, tokens: cacheReadTokens, cost: cacheReadCost } + } + + // console.log(`[GeminiHandler] calculateCost -> ${totalCost}`, trace) + + return totalCost } } diff --git a/src/api/providers/openrouter.ts b/src/api/providers/openrouter.ts index fecb1049f36..6694937c662 100644 --- a/src/api/providers/openrouter.ts +++ b/src/api/providers/openrouter.ts @@ -65,7 +65,7 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH systemPrompt: string, messages: Anthropic.Messages.MessageParam[], ): AsyncGenerator { - let { id: modelId, maxTokens, thinking, temperature, topP, reasoningEffort, info } = this.getModel() + let { id: modelId, maxTokens, thinking, temperature, topP, reasoningEffort, promptCache } = this.getModel() // Convert Anthropic messages to OpenAI format. let openAiMessages: OpenAI.Chat.ChatCompletionMessageParam[] = [ @@ -78,11 +78,13 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH openAiMessages = convertToR1Format([{ role: "user", content: systemPrompt }, ...messages]) } + const isCacheAvailable = promptCache.supported && (!promptCache.optional || this.options.promptCachingEnabled) + // Prompt caching: https://openrouter.ai/docs/prompt-caching // Now with Gemini support: https://openrouter.ai/docs/features/prompt-caching // Note that we don't check the `ModelInfo` object because it is cached // in the settings for OpenRouter and the value could be stale. - if (PROMPT_CACHING_MODELS.has(modelId)) { + if (isCacheAvailable) { openAiMessages[0] = { role: "system", // @ts-ignore-next-line @@ -195,6 +197,10 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH info, ...getModelParams({ options: this.options, model: info, defaultTemperature }), topP, + promptCache: { + supported: PROMPT_CACHING_MODELS.has(id), + optional: PROMPT_CACHING_MODELS.has(id), + }, } } From 13d4dc0c1f4225c798de53a127c7fa0cfa9fdeb1 Mon Sep 17 00:00:00 2001 From: cte Date: Thu, 24 Apr 2025 16:18:15 -0700 Subject: [PATCH 4/5] Fix tests --- src/api/providers/__tests__/gemini.test.ts | 9 +-------- src/api/providers/__tests__/openrouter.test.ts | 8 ++++++-- src/api/providers/gemini.ts | 2 +- src/api/providers/openrouter.ts | 4 +++- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/api/providers/__tests__/gemini.test.ts b/src/api/providers/__tests__/gemini.test.ts index 34e057ffa45..c5679ccf7f8 100644 --- a/src/api/providers/__tests__/gemini.test.ts +++ b/src/api/providers/__tests__/gemini.test.ts @@ -74,14 +74,7 @@ describe("GeminiHandler", () => { expect(chunks.length).toBe(3) expect(chunks[0]).toEqual({ type: "text", text: "Hello" }) expect(chunks[1]).toEqual({ type: "text", text: " world!" }) - expect(chunks[2]).toEqual({ - type: "usage", - inputTokens: 10, - outputTokens: 5, - cacheReadTokens: undefined, - cacheWriteTokens: undefined, - thinkingTokens: undefined, - }) + expect(chunks[2]).toEqual({ type: "usage", inputTokens: 10, outputTokens: 5 }) // Verify the call to generateContentStream expect(handler["client"].models.generateContentStream).toHaveBeenCalledWith( diff --git a/src/api/providers/__tests__/openrouter.test.ts b/src/api/providers/__tests__/openrouter.test.ts index 91de2739f51..92bc46249a9 100644 --- a/src/api/providers/__tests__/openrouter.test.ts +++ b/src/api/providers/__tests__/openrouter.test.ts @@ -54,10 +54,14 @@ describe("OpenRouterHandler", () => { id: mockOptions.openRouterModelId, info: mockOptions.openRouterModelInfo, maxTokens: 1000, - reasoning: undefined, - temperature: 0, thinking: undefined, + temperature: 0, + reasoningEffort: undefined, topP: undefined, + promptCache: { + supported: false, + optional: false, + }, }) }) diff --git a/src/api/providers/gemini.ts b/src/api/providers/gemini.ts index 0bbd7705aad..94e5610adb2 100644 --- a/src/api/providers/gemini.ts +++ b/src/api/providers/gemini.ts @@ -148,7 +148,7 @@ export class GeminiHandler extends BaseProvider implements SingleCompletionHandl if (lastUsageMetadata) { const inputTokens = lastUsageMetadata.promptTokenCount ?? 0 const outputTokens = lastUsageMetadata.candidatesTokenCount ?? 0 - const cacheWriteTokens = cacheWrite ? inputTokens : 0 + const cacheWriteTokens = cacheWrite ? inputTokens : undefined const cacheReadTokens = lastUsageMetadata.cachedContentTokenCount const reasoningTokens = lastUsageMetadata.thoughtsTokenCount diff --git a/src/api/providers/openrouter.ts b/src/api/providers/openrouter.ts index 6694937c662..a9162495ee4 100644 --- a/src/api/providers/openrouter.ts +++ b/src/api/providers/openrouter.ts @@ -7,6 +7,7 @@ import { openRouterDefaultModelId, openRouterDefaultModelInfo, PROMPT_CACHING_MODELS, + OPTIONAL_PROMPT_CACHING_MODELS, } from "../../shared/api" import { convertToOpenAiMessages } from "../transform/openai-format" import { ApiStreamChunk } from "../transform/stream" @@ -195,11 +196,12 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH return { id, info, + // maxTokens, thinking, temperature, reasoningEffort ...getModelParams({ options: this.options, model: info, defaultTemperature }), topP, promptCache: { supported: PROMPT_CACHING_MODELS.has(id), - optional: PROMPT_CACHING_MODELS.has(id), + optional: OPTIONAL_PROMPT_CACHING_MODELS.has(id), }, } } From 5bd308521d076b293240d7dfb582e0de70e3e36f Mon Sep 17 00:00:00 2001 From: cte Date: Thu, 24 Apr 2025 16:33:41 -0700 Subject: [PATCH 5/5] Add changeset --- .changeset/thin-tigers-yawn.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/thin-tigers-yawn.md diff --git a/.changeset/thin-tigers-yawn.md b/.changeset/thin-tigers-yawn.md new file mode 100644 index 00000000000..8573862af84 --- /dev/null +++ b/.changeset/thin-tigers-yawn.md @@ -0,0 +1,5 @@ +--- +"roo-cline": patch +--- + +Allow users to turn prompt caching on / off for Gemini 2.5 on OpenRouter