diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2a056bf..da5504f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -120,7 +120,7 @@ jobs: - uses: actions-rs/cargo@v1 with: command: fmt - args: --all -- --check + #args: --all -- --check clippy: if: github.event.pull_request.draft == false diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..237ff2c --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,32 @@ +name: publish + +on: + push: + branches: ["docs"] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Install mdbook + uses: peaceiris/actions-mdbook@v1 + with: + mdbook-version: '0.4.25' + + - name: Install mdbook-katex + uses: actions-rs/cargo@v1 + with: + command: install + #args: mdbook@0.4.25 mdbook-katex@0.3.7 + args: mdbook-katex@0.3.7 + + - name: Build html + run: mdbook build ./docs + + - name: Deploy to GitHub Pages + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs/book/html diff --git a/11.hex b/11.hex deleted file mode 100644 index a037587..0000000 --- a/11.hex +++ /dev/null @@ -1,4097 +0,0 @@ -01000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000 -cf51b65ad54479e394aef90d4b0ec4e4a1a16bbb6865614a4b5b8a0959fdd32df04eb3f6ef601be3d326c237feed3351de969ce6d634905a4304ba25350c6825 -c0df8b5bb243b3f355e8de65ec6843104a49f8722f373f67c598f64daffbbb0f6402073b425af784407297fe7670ae17541f41d410dcdf55a2d547c4c9cded0a -760cb2158f1a1bd48e9408de65e5a3a58edf256adbe7edaf5c2d22f86906de210fe01dc54eee266849c90514dc33e423aeed8fed81bb0e34d1fe8b822953ea26 -6301e437b4012c0ec158c03fd563530f88e016070b3ced1cac8a7b2c152189260c580f6e40477393a574dba05e88ed108f1bc55ba945e40a8aa639c4d3495d0c -5a95d51ce47300d44b06ed13c0f7d2ca26f7bbeb2a082d4780b3fd86069b212419c617ae1f3af6a97935be2e79b494ef9354bd90091bf656bc02e16ac05e4315 -2a884d7cb5939c831386ab83d51c98d33329160cdad748ac07184e85dad4d2010d0e6a758582ae5be5732cba258d9a8a60ea30173514202388a9c59ab013400b -fc4e65101ea240a3cdb220fc7baabda92f78c189a847dec1005a7e0516ab442b77353b9f2453b1837282ee0e8c634d19d82dbc8bf5a11889eaaca7d6297de816 -a70bcca575534368c8c3776185ef9c2ec7e565b7b5bd0c054d4b70c9d3c97a0682f7913e66bbbf0946ca9deddba6abf98a779f3d52cd428213985aa47746d300 -4d5cd78e6c3ec6470f214cea9a2a8e941bac1a539b58dc9eb2042d47d5092c25077761ffee86d963c74d162f08fcc92a2217c1f5f7d965d6cde70d02368d7526 -58c81d3ebf8865653b39d471f5d90418b7c0c8af85e187304dbb8fa25d344f156f96839f1aee84526fb96dc8ede1236fc30c4b4d4c51249e37f3605f59f36806 -8d1ee42fc5c4bac5028c30e13cda661afde1b677b3dbff2587fc7a33512c353005f9044da79b248c439891bd5709452fb4a71cf535b3e2a93803978165060630 -03b7d4e2558b951ea139c3ba3d3f0016326bc6c84a6b783d1918b6c62b821b13cfdd44d6ebe4f33bc04d37de85d5aeadce14e0c8ec4707f05458fa5e5edf5f06 -f49193f5b7f1834862811622786ae78f4f786ec5c5ab76a2da6bc65de891471a0797d1d5b182cf666c3af29c9be0f5fdcdd86482cfb419c406f6dc0918b4752c -120104b596a7cf06782dc025fefdbe91fa24572cafa03429ea15c4d592ab7c25d3f828dd6408e3417f33a0001b09cff62ad1c5688343abe76e9edc9fb52cca17 -8f2a17005e02a3772e34214eb2a4b7069913d22c014c56909ac03ae4f78ffe196466aa7f0a739ae980604e38826b93c64a3897988f4be1c423c90c4bc777f00a -5fbde038c2a5cc98483711b6f177d6dab882f11b9285448a9f4356aaaf33b2091a4daace368b2328b050173faf6994eb07666b5e2a253a126131e81d8c03c422 -903f94080f490a977fb6be97d70cae31b932c2e59d9512e492d1cbbf6bee370d9212dc60b872dd23dc806107b98ff83057e63a896e1773146f2abc2469897e1c -325ea4162c14d0e1eb311c7e8a72e265bf59122df86a344bffb71a3f6057e114c9006863f65bb10f2a7ca571b5d3cf73ae97fcc1f476e670120a59d3be91ad0d -2c7b9b07978f8ab8fc830323d11b014f0b5b0dbd8e0e304b9ddd6b96619279204b1145ed735a62caf67ac0a3ec0c4d14e6190a135e8dd9ddd541f4e484d56d00 -5c2968302d2866ed5d104d88d36ca027503ec9ff6f01abb93b8a3dc15451340e726b95ab0ef9a233afc8f0cef9068103f46d78f4db846172b43b428c64d42526 -dafcaefca74c62c7ebe898a24e70f0e293de85f0967ad3ac6fee67f37fe1ca2fe7f15a42553c2d0e2357549fd0f4b3888dbc31dead229afdb674f83732e36413 -a4ccd7b35fcb5e93f81a37e2418d8afcca09f4ff981b894a2445be2cfeae482c1ee63091a812760d4ab282f20c9a2881ee618533fab22376dce9ebfab9c08f01 -56a27c1dd710c8d57243e618ca4e7358c9a0b6bfa2f30bd4ca8102487d69ed0ef12d6be7bce1535fa092367383d7065359efedb098e96ce3d27e41e6f46e4907 -da687d9348296424acccdafb6e46d4bd16122ebd688a625097609a13ebe0bc1d9fbff9a461c4a0d27b36ec42364665e5b4c779a22ef271e8570dfdfc627d5d02 -174588114d144ba05f8771858c78659cb3743ac1b00349284c71589c3468691dbcd223888ef64c4c97e1472baccc0014505f1a3d35f23af31bf2e1202670f004 -1f023677bf5ef75ca6e95b4eaa66f6960f6cd35c5069e6b4d557296a4bcb5419cc50dbc400f53d2c40314f4cd77306778707a3aa596d39cc99de525a22783c09 -dce3c8b477b42d26ba4fae14e657d0d7e123df45bb1b59c2e77730df749d8c0a15b342b93136ef768f883de6b272e7d9f561b12e04ea8ea87efaaef6a34bd721 -396c897b8187fd80698a51199e0380987785e2a02f77d24116a0a9c72527c20c9fb8395c7c9c105a14e4cf2a3420e3739fe6dc1cf4fb43fcd56bc6b838fe0f0c -cbcdf86417250f66829ddf00f91cd91e968875bd739035c292f4d02acf2a3318b8901f0a3cf6b05c3f1370287437775203fd7e4cb82688b5d4e586b11524ba11 -07752c7568c080b3b1b8e30f1cfbd430b317449bca4850c19cc83fb18bebaa1872f6b0a45f11ded17b248d0e066fae882ed77b51c54851a70e674d21f8ae931b -fff894487ffedcaa8fbbc944e6ee9f7add01b109cbdf5577e62fac8ac2622b2203225c8ab804924f26ad6e98441dc837da27db4d2b86121683dd0bb5c2038111 -ca1bf61ed29ca5998ecd174ad7fd28ddcc49db6ca2a9cc0a5fc19deca6237a0888907faae09935192c10e3e70e93a3e41ccf1dc3fb399ac6c0fb5400fa5ef506 -0d808cd57870d0dcd4e6238474dd1c5eee96100250b37ef680431016d813a11f9cbbcb8e97daedaeeca7fd0e427163c411d8190fb3f4b020c00e57067d85de0f -a204e0a23522edf5609ccff36a301e6210d03b27d93f2cf786b0c52250eae2234346003abb24fb591cb68d0fea69d26c3293b0a517871f2ddf1af5f30df4b025 -b0fafe6e5f21ae6f8ace6dc8b04ecb52ee080956e1238ea184ec17ef333a0519f507b8f96f18f8e45cf6ee235c21930a4de711084e4f8cd1d86f374dca8c140d -820cd3876e6a01e1fd7c7e9683e92f37aa785a8b2fdad13c0c1f5a44f752fe1c3e6ba32bf430d2c6fa9bf690e8511821e704425a546fd5b0671d68436050b52e -2814d95902c03389b6c6bf018384a4aed4121c738ec30bea3ea35dc3b0588d19f5836febbb18959df8a5a91db4188d67e09e367cbdd5afb4fedf24751e125208 -3228f6d3a9b7d10d191badeebd87557e4595fd14fc6873c9a9f9de8890bd9c2729420b74fa5e26a3a4d8656340f81cfae61be985f8a6277af7b24e708ac77928 -8f250bad78e6d6fc7b20084850ba9b7c8d01074361f9b72e0c94a344e751a52a82f9ec588b2f523f87366916739228a83b6d542c677a096a0482f59fe7c36108 -ad9e40e332f817a261911289da8b180b765093741c372f70f05539df1cb224150486d70f6ab251257abf61beeed10fe504fc446a9b69e0a6c6da3b18a249b629 -8463b8c1f11755fca2c58c78b1a895254313dacbf320beb2038408c8e90b110d74f28eec225c6fe4c3f5732ccfb9668dd42a596b940856fe52ca8da1fa2af10f -c2b8aa4534f920a7feb2804f47d2403c3bc8622564a3fdb02e15f500935f4106d4932ead0e4b59af1f0f7c2f2b4cd00d7ce1c845ac5db11da98622e2f9d80f02 -05b3194c2740d2cd97de43384a9b3ad7afd844152d48677f59f76c0427316b0728c8653912114d2d272baca286b4f9ce5d21540e4a97b927168686de2a76a803 -ced37fd5288fee7c2b93bee4f955ed569b934afe36ca5db3c5fc456b18b02320ad76bc822bf89fc879e7cf31027391e16d23e509471c48603f95ac523de8252b -0a0aa9414ec986be02aaea3373931f9d4ebe2a22af01a1cf98488e66ac97091269b41f3bd2a5f9a77be504d363f7513ba591cce31166115f1d97e5bc7e071a07 -7f272ea2ec2fce6155ebc03e32e7efaa0f0b8700bb29753dcbff03e3719bf529f24a1b3c15f7cd17440dfa0eaa958ed8d504841c71bd75484e8189f4a3289e22 -04660e0cea4b097221af088d228781952775ab0c1a2359a7e62172c43ab4ce298a2d0dca5545595b06738379c435c77e010e135d62297377dc26841331303f17 -7320861aa86bc67b55535887860832f874ebd85b01fb3eec08606ed5e23d2f205058fbd8befb20f956f7e33be63df5f94ddc8dfdede1859ea4813ea7c88ecd1f -a40c8626f303a1d47223e2a7ec05ed8166a072231443b56cf7aa9f75fc326e0244174840e9933012f531bcc4adf87f12fec52891cee7ece4e3112469dde42625 -9988a0c0c777d7419afb7d6659c1765b4e47d8132a799a6d7e3fd3dbe9174529d3da945059ee4715a20d180f3dcfea71ad65d757715d4e0763ec78cb90433a14 -296744dd0f24c9aeaf88a96dcfd9d5171d4711a51824148b68ac073874ffaa236a5462567624efea721754d19afc747b84a9b472670d0834cf47ede8f7039e25 -83b04440e9d14a0aa0fda9696707d9e94e0e3ac905dbd3daab2ec01066a4a20441db185531facd21ba534373bc1b7f164e39603a49c28b5715328b60d47bef07 -8a8611b19cbda7b1232024505217589c367b5a7b131a7f150c79046b94e7522d5d5614abaf6f101d4965fc863934a39f511c55e2da5a3523b578bca939c5a71a -7b7432e4d70db370e4387c3afa89ca8e9453c35b515e61db9661b60bc4a6d20c398975bc4bec132b152bcf7f0d17f8fa66716b5bbaadc288860a887edaad8412 -e5cd0af15376e0c25c59ccdbf6f98b4beec2e6235757fa2836ef29d6e44387142cea33fd003f41113257b3bb27e058eca6f0ea26a6572d5efa0318ed86abe419 -990882797ef37794d6e4adabc867ca728d823f152311bcab4ae24e045e8bea02e50640f9fc3cd62dc1e788191fdc097ba9a6569cce9df6cb9b19320f4ad4840a -35bdc010ad80f8e85594e4059aa459e2e3ec74ace82c231bbc9104c7f2d6912ce57b913753c6249e8cb64daafe39fcaeb635d75a2c612cbd93ead7bd94bfc32d -6f52b1f2d3eb382987fd407a5f828e955425f53e372e9c07656c36c7013c6b1d05b3ac4a7baea29a049891f7e9e1d8ad8809742df88bb683ccc4e1aa6510770b -05beae053977deb854ccd2c3991dc671e62681b0193dcecdf187bcffbedb940a1b8ca11c9aecd9baef81dd45abd0cce19e74b44c46c64de0c2c2168b90443919 -a98dfafb7b0028cb2e2873201a565d1a69145c62c73a5db43655e77d3f57c820d36174bbbded23e1a3a99e8b3a8c35370419a4e504264bd6807a6df23b47d022 -62b45a4de805f6e2a7bf2ea4cd054fbe27d90b1fcf6b4dd4f2d7cbbcec5793271a2dd861174370df40ec1e74e335ff13267591f409f5fa77225e641f6f153001 -4df2cbd5c8a6b2da5db247af4475c4e308f4467d7a56793576c0b42e30e306221f9c97357005fbaadcb9662125e69c14864a3bd975217b167f03f8b6993b9e22 -6ef33379cebb7be64754adb5a69dcb82769135108ac50f7d8c962a8ceb590e25e6602eeb72413aee7ab79c01ca67117201b8860d46e28cbdae96b021203c1309 -c5b2f34abf924c081f02c9d054fddba37f7267a6604e899d3dfaeebb39e0e600056e3df60e6935350a507a82a2ec0b0ffaa91d106b04f9a0c149961a88290b2a -fd2c81fb65e4f38d1b0ed5a94ff30a374ab4d9d3a732def213fd9e2825cf671d3ea7051675d40146bd5ec022f046d513c15404fd0c4e9adbb0af25fa6de0521f -742fea0a16f2c4d08a477ace2e0f1b1343f94e24e7c6d1018e8e02439534be2e342eadbbf92078adda745499d7d0dea41af157ffe816650848864a843950561c -85733280aacdd59e59bdd225575de3589aede224f74eaac75830a06e8854832abe45922722c099ca8aefec462cfe3e146e54119d7b49e815bb526a190e257116 -bd4e007fe88b526ca3e6f032f30ead369194716a90571cb6d8ee0761e4cdfc29d27e3c92bd74f563f88dc3e85b38a8d17c1b19988b444103a88086a4ef85d51d -9945f1c700a0b990083b1908d85eeb8ecc806e4cf45e49d3daaf20df4153f31aa8d62ffa4f77e85f0847cb602a1274045398995131541969269a5f983629b82b -b1b7c3e39c98bba63ccc92636706695881cf57b3a1e7a02bbf585758e2864105307ea8c4adc7b07227a4742ae3381f44d364776fb6e1cc9234c11e92a9203c2a -59924015f3f12ace1253ca2cb170ad2ec0ec5c7afd87088f1cae96926878e12d6e8e185687619c7b84c72acb014cc60af84c10c3e87b960b3e5ba2b3945b281d -f1e47cd90d6c74e104d7796aa961060a1f8a7caeba1b8840dd9cdb1686ff1715a7dce15175113133e40a95e5575cf36c68101cc471acd131c847e15cd3d1012e -9a781c1be5b0545021b5248b64ffd0b502b82327cd56c2ed46e8d2660a3b3008455021745f9dd9028630b86acffcfb3725f19264b3050ebee737cd1d46fdec1d -8e174fc1c9c2f400b50e0020f80c31b5e62a5ae86e1d4bf8742308118417462a014b7c1c93f5a692ecf078d35d6483b4898b438dddc8cb8fca166d2563f64616 -e6d3ef193dcb37e308f76a99a4a185fd6d7be65a66b26f4918e1a0f59878d312029331434c448a0f5deffb8f2c6565a69a825f6cfa9d77f0bdd65cefac54ca1c -604802dbd788c0be91ad2a9b9b5c1defc026f59c41cf114d9c8b9eeba188f52c7a287fa779314829bbcccec81a2e94c21d0c1d6d0ceb1deb3467d4668e0fcd2e -0db6f1bc3dc226b468e33f606a0dd476cdc586542f68371e6841a7d9e764130c737a466d7a46a2ab35ac9d7192a0f184cd51c51d758e8595a31f464a2a980d2a -5fc3af8952e1ff1fd6cbe844be7f6594138b0cfee8c2af66855337ce450a1b0170b3bb7959f869f0b2fe09f6c2b5ba68624c54ba018d0c6ca7b436ae5d7d8e02 -3ac134343dc9a7b4b5c2b1dc182b0c1bfb6267d249dd2d1d53a52c7612dcdb161c5986017cf354f854c64870e54ce16990ae8a4b8170300c42eb0ad912803618 -6c23bb42982813a0facbafcbbe43b33096b80ce27750500136d0af7dc2b4302f113d0f3a44dead76907dfafbdb512c804e9976aeb06990fae772cd4ecc4d0203 -2da5cb9009924f628622349aa4291fbfadb31c9d3cdf3d2eab97dd6a971d390a843350f0d2d5b343a8506f6d31826f2d779600058d66d002ed5df761105df713 -712caaa5f7692450139da3e1891c371bcf09bf029a111a371ad8c8e8aab213172e34a275a781c8503a2a522ff33f77b997cb8dcedeaae0bbbb6176c09db9342f -9379d43c443b5bbf8621d9d3edd8d776abda7a0838c317874c1e100c5e94cf1ed465f4457269dfbc1afa8b4842cf3c5d60017ed4ea99a1844b65f9c4fd322705 -30208e1da53430eea1e8cfefe2ddbd21db42a33655ab08d458f3f4185bfba922abfc055b8831804647e9bc20bad35de97736e8b51000ddaae6ad25ec7fe09816 -e7161c507c8209075234ec82e701d0df42471c3c31c57b6c9243ffb79f80d70fc7a1133de2dbf60558b26530134e07e5166eb28c35866beb5a5a5807ddf76c0e -0934cdd38e3ac46b483b4a4f5354954941c1bc9d6ed53fb0ffe21a78d0e4e40143f966d0c2e31c747f4841d7d67ef8e9174dcdadc90a44047b8342475a32f103 -8d35d72c3e81a10c527b7e7cb3611f4c6d4d95518ea1f635c7d422d285658c25caeb5cc2002dd6b078476ba719eb65ad93f106430f03f9b024b7d8dbe1ccdf05 -ad00e076a3f7dbc6cb9ca8aa0a52fd18bc29b8e756101bb281c9c971b0b16b0c12953125df2e1e9fe5391167edf6c6704e135e0aa6890fc5dc720583642a1b07 -d4a45ee2f9bc507464bb01f3143b02769ceff16ef4d500d59606c2243558d51e5b8a389cbd7ac9a0a4f767d70f81ea907be8e461ba7c386c76c885fdee0b3412 -09f2167ef1c221145d5acf51f8c5a54d191b70f9271bc12fbfe19e237711eb08ec87e7100a92d3800f65f80a1689c72665f27229bdb0ed9059708b87ec015c15 -21df48a277783f13e65901b70d53b84212a96d43d5ede9aa3d5be5106e4d792106b948b31b33d54c5de1ad4d54ca74d5921beaaae24e9ddd16e70bf94582f512 -0ba4654b5530e671b6f236c4ae9f160360500b2a47ad1cf68ada396fa7eadd2576caac0634de64863d5324341b61949de226f6b23d648b0f90a09a9b3ec6392f -4645cdeafe54cdfc2af013e01a2a5eb5281e74d37b62195176af83d8eba78f16eac41e7cd6348b92dfd76c5d93574ce753826a9394012616fd814d7920647e1c -1dd713ca8a0d928b556d327f7ffebdb2ddb5c5f4be5d30b7a6ef5137086cd90df31893ced775ad633c26b3bbabfefa85d9e734db5f70f48b0059634bdfd53a2e -2c2700110cbeea229012449bec227671de832d5197096ac387be64eb81a7b302b2e0d93b69cf217b450adf4a8d7a5fdab5b8c88bdef14ee6af85c207daf30f11 -7c713971d759a67c30811e51e2b03bf52a331af029d5ab444d439a6d88666d27a1aa8e6cc1dc61ab0eaafd153e635b4f83cc5d990afd657eda9fb54483f05e07 -f3d7ef32b85ecfb8ecaeba647b23f698ec0c095284365ffc94ec0d91270e9a2db5c5930a5bf87dfb4824858b2eaab1143b1a355e051bad3088df4d41b8440527 -1bcfe11d10f923fba2bd367d670a5b8108c9150ff6db774386cd0d10c5b00011b1bae4861bc6231e34c176975d293d8dc3364f0466edc538106aeb36905cfd1a -5a26f604c8589072f0e9ce09e1c82ee13a8ce45547c258ffa5980cf7354412110e641fe959e1bb160682bea883ffa183ecb874d7b5acb838ad4ddd48897f862a -e304bd1a66db1e8c2d0585229506c27e5f4c89c72871434b1a72cf175d68fd2f87ca6b5f42fc906fe7df550122dfe26b316bddb4784cc380bdce963011ab5608 -1b07b81efdd7c7c1b625524275a0de7f03dd7739cafaad04599377cd7d1b94090a01e03ac0c1120e50975b371432bb184aa14e6c14cd6cc9287b1e1c511ca32f -3be4ea96cdd38e472ed85b4084ad68f1d8eebd1f5ce00e8b4c79db9712ed4e09cf49a9ea765bf390c722ef4238cd495b825db7286cfe0a1867714c530b5cc216 -9b3e67c435cac6815263c6659708116e39c9f59ee7394c37b09ff395ad8658170a977c477bd6bc4b36fe8ab2d68d80fa69aaf7e2daf0ffffcfcbea884127810f -1354cce1383d8015ab88b7a556c958f87c78c17ecfe78dc5a58df2744115621086864910e38027fdd163fa7e2f18b110659dbaf7cde72c5e4a94010e3b2a5610 -d302d2acb5cd3d95950d0548833661e4d03d5be2b87fbb14487068cb5d3e3129e0783d809e3f8281fd6c795cf7a8304f70520ccca2ae031782448dea7f616513 -8016285eecafefc6152cb59744a3bc0e8e0153a62cd7ae73bb8921420ae7310f8523b639daa1e89ab1e54211b64791655625448448122f082d771487eae04213 -9f75d8cb2cf682daa3e07fe3deec2502b9774c23b3ccc8bee716538f4767971f2d8777cb2ed8df2efdb85203f109b76ac69497d3e415b1b861e6dc05173f8123 -3fe519fb3ef1f41b977b68feaa76477843ab0f3ed9f907a42897311c573d6415d10d69180246f87eaa6e523cce945665d575dcb266b50ab2f9283769effe4023 -18936d9e19150ff11a75d022d803f87b783a14abe5edd2fc7630b2696386b40732dfb427832ae110ea37c8a2eadc2bbc12d475dcf52126e175bbb4e66c250020 -c5191b1f9240f426352a072dc32f7da5763bfdc7c0da731e08d7878ebf05b6110d5c1d5d59e2b7c0bc498e5756382e661c57749df1bf1ea93dd4b6bb76837b12 -1236b51010339cdd887b88626c836dd1905f6e3650fababa4ea6f35881cd27162086a8fe656f477f63ba0b06f9bbe8deff4076ebc0ecbbda29749651b4283e1a -7de67b590ca224bd5dd0db141df1686516cf8ed6af49fd81f7a56f26f4dd692a9f02dd3081cd81c51f02003dd0152ea1bdefc6158c65ad5dd49f2f510c81c52d -95513a4cab0038b1767fe884dfd55c51b285f9fcb87848729191a267e83c4f0c1d86b8805d3178b58a77e17f05ff9ab5f5b74113013c7cda5da866530a924d08 -1a25c8cb64b82adad89ff4062f74eac1052725532103e3f90f23b408af398d0e0e0c9fcdd73a6c12adf5325529fe9e104e277185a7f3958bfda82fd0181f8f14 -76674a8b91b7d4cce402d47947e01530178c3228aa8122e20b8dd4dd425daa1b5d68c9da1d0265f5f119b7e5070b22d7e32e87a78a393ffc940c2625e1d9d70b -b2ff1dc0a871f22910e75fa653a3bd444c8a6a61bdd3cde5dbf3d01d1233f3064ffb6a50dd6f19ce5f7d728bfa346ae26630b695d837e125ea471465d72f7919 -3955a60c4abe4fc5ca04277d1683e5d84b09490dc8091bc9e17ee6f6e443ec087d39bb2f1805cd437e7d5cf24955abfe68c28b4726bf2cf0d2292c33dbc0dd19 -7a602b5d10906e81d9010221aece39363456297b65a3b9b50bb24f5b4eb43f1abc23a8b377d5362ac4e131509730954b64d9ddaca0436dd46e5449608f576b0e -772bb1f45d0fe295360a85395e6a46ea442fed3f46bede63b956347b5fa0462bfc2acac5532da321d522f9212e2b5baecc8a422ca8a56e06c63ce20bac01c710 -cc27b7738f822fc17e600c0542f4433a1789a63955ed24a212be079b9c031f0d5d051202d30d14d8d2a14e5fb9dbb68f7951d8467187ad77c6606dcf352fb607 -986f0cd9c8fdee4c3c3a1ccd1891f23590116e5a24efcfaf8aa8c30ef25ede256794a3a532e76aee3680de58f107e267a99718da4cc4f693a4ae930d435fbe27 -c21ec9b25d94a4a150a3ca463717b371f435314dd8a1931b25412cecbe2801219e37b5103b523309a8be706edb7c36629dc8ecaf3afa53e578627caf2d90a225 -57472f28cdfb3a03357f4b0a2d4919a4407911dafa748040cfa73769dc73cc293d14270363b6d30503993f821f565c5c1c99c5ac6ccd16b432d451bd3f5cf11b -60d448d9f2ee263d38f5fab71795c90dd7e36205c496d870a9162842c1d5e11096fd9771dd494f303826acca27f8a2b0dabe31ca3b9b2efacadb87807ad4861d -d5d5883105392990f81a6ee70afde1278905df06db9947628a8d7b169819ea1c54f8750494b6eba8e9a57a0220b598c799447db5b171fcaae915ea0775c0e702 -28f85e1b37448ec6e076ef6bbd6a8be7167ba127105f9ea2104b9cacfce483292324686daa22c25c1668daff1034fdc672322225981433c59e94fe9fa4b86d02 -ed89955e89c400f72f4abbce7a15cc40d56385d4d6ad54966164211aa27f2902a7227871b4ffddbbe5667130e051a45c5ae4e4c9006bc8d603338c720380e106 -eedfa92c9d3407714f38a94cb9ed6309799d5514a6881013e3482cb6cda98518f0b9597260fc3da90bdf9d440c491b29b07d5f643f2a8e7dfbc04a80fce7e224 -1cb8f0147af4e92cfba42d0e6b3ad4e6d3a44fb15ecedeb133b4583d8cec6f1de8e19f32c4bc66848ceb8b921fe0612c2fc61826afaaf05fbf7391622b127914 -47cded25ae4f051ca551a6a5eb8575a59fbc2b8d06e9e3750a77d4fe58f1322b6a60f6effaf8bca03f2f043ebcac00f58ce5d0482220af7be4119b0ffeaea428 -94b81fc242b9b592d132389b048c2fb1a1ff9fc75ea313ae715834187993f102ad5c4e996465cf702dc991e273fece52d92b14644fc9a58d9fcab2d7ef0b7906 -24ef28785063104b27074effa952967f3431408f658d45018c75cc6c200c9e1d5ec7e1268c63460828afd3ef60f4b27cab6e8d960d8fad9b867e48394a704510 -048cb235295581bfca6004926d591a648b9e60d677c46168ecb0533d29a0870e7728dfe6204066373a3393e70fd45cd491eedca30669f7f1601b76514eca6401 -077ca9f9b3a63d60a139b7f1e13c09bdbeb09ceb0607ca4edeb2cdb28886ce067051bbe210c421d5c860f267411e5923d2e10f45c5132ffa064f585959ff3b28 -2dd979810173596381d0d3f5d5e7453343aa3b0432b2a0fd0e14066bdb3ea114db98c54a60a221c932df78b9dda7c29109bee1c7484826d7323eba00955f8312 -b2690e006d467776d52a411a6f78e3905f34482f107e8244090ee5aa1d5e5c2ec1d505572839b60c44074531881e45eaf11a4bc2547bfee9861e53a12f91e20c -c5c443b2e9350482363e8d93493d642bca7e840f8cb5cfe7acb0b908cce2de193c77f908aefcc3f84d7666d7827f5bf43c9df80f5f71e732485bc5e6eed31619 -2eb171b872a7d231b11fdd587b8322b73f35da2ad369c76ad1f3173650b1291f3630bdf90de576e9c9367227757e56fd576ed0b4a2c46d66c2030a280aafb116 -bf9b71c7d3a5c0942d65bd8e302aac30a470bffc5dea5e4b36c1722f8e9e1f0326d8e69a814041200be13b174cdfc5a82e27ca0030128a8b012101b5a97fe910 -5382a5ca263a101ebbbe5957cffc42b30f4e439b54d2eb92988b520334edd01f927376b00fe654cb09b11ea8140898009e099081dd6fd23353263ca62f532a29 -60baf96c0e5d75c39533be1e94abc19189932ddd7d535856030e7bd8edf3822ec6c97c81a8b5c91ba383da431d512a08e150171cd6980351266b09601c7e251a -97583eacafc00adf199f7e6b28ec1cc6f21201f268d62d7bc7e343c3e9da670cdbf16390d49f02309fbc74716b0764b4016968dc1ad0b59736fa6b7c2f77921d -0d6f08b788095c0e22e3bcc95ef556d10a95eeef7b01ceb5f4fa09b355b8a7036e04c8bd1a71a43ad88801d8d0494afd64904058e216aaac74936934223b3c07 -15a8ce1a2f2b3eb0b1aeceed75acef11bb4eee86776d6296717491a6a2bd6d0728e6434c4032dc1e0753f0166bdb3b132859250c4abb6da5614e16aa4d34e10d -05e566352c8c80f62878f24dff9925e0ca28a7d384dbbfe7965ffabe71f4e826776c0eb449440a62b52258e3ea41dc1a2b6bd175f2f794e4ee02b2e4d84d6917 -8b9d23a1896b37f5930a49ec673c0f79eaa3f53ddee8e0b6aa5cb4c47673e30696411f9fbdd8a296332881c33e202b6f26ded35662bbd0d6fbe9ef06bb910318 -a59f9464b4cdd755f024e00b9e4371df76da0289e5d44207f51bb661a99a5624fb8e22b9cae0fd824b17f6a52b68e628d162c1519ead4b30e1daf869d74ce21d -c74a825953f39679b3ae2565f77e479fd49c3cf4c30f872556a9318a0b5e4419563d5258b8d762eed4d39ac7122228051f96666db33edd8c46941fa41f193d08 -2b74f657923140592b7c9263c9c6c9d9124cc90af593daec82bc0a6db6c25c0059f777f043223fa77a64734b10c710fe26a06fe5d814e8cc85f9d4956f7a3021 -9c95d473db24768e7fcfb07a258cbe0231699bfa64ae2fa59578b22cb3a4021bf2d6a8089c6170581a493998bed88fec9752d105da4b6541b8871d754e3c801c -9afbfadc692c22ffaeebd2d161cbf24be95968ddb88d5c1186c2f2cc1091201097a53a3d602232400e6a398badf053951fe988e610eee0e772c8e2a93f3e112f -2e2ddf05baf5816c752e1b4dcac9e38f1eaab31c97b0d4fd8870594902f6aa2e7ebd8758809eeb95a37f2a0abe08562dcecbcbb8b4732edca9154dd6b22bc110 -6ee29d0f25422072ef660ab5382e2ca67221766dcbc36b3c7b14b9a80862dc11f37282122244feb8f2b947599154dbbac64486da711bf8234d853b16145fca00 -c74f16056af04e687acb18d617190de2bee615acb2155324c81007e76c72a12abd10a103a2e13e4a58a23893b0dc9b5a974d01963ebdc2b54ae2851345906f00 -9cded70a6e13bbeabc83875db250576e7f9c2d716bb3b4a323e4e26edd3e3d2e96335c99bcceae3d98e1f271e0db805e57bf35a0b7caea137edaae0d6f9c5e1c -a0888cf0b948f1ec1459f80805f26e30616505ace1f2d0bc40ec069574e49b05691e7e5802d79ee84a4312ce486714a85a7633a835aa33eb694f907ded0bae25 -94322b635b185aa89ce5722cc62f5a1e8ab60f3e8bd9a6aa00be494a636b5d02bcf660f80e4468bef6b099a0b6c6c956ce495276864a839af5b1972605ee8a29 -a288f64438bc7e51f41b3beb03c12919a74a4f29baaf89e60cae967afbdc8627b4ef3958311ed0aafa1a8b6ce37b95e5bcb14ef8ead5ec14201b62852c57501a -cef28b7afa40c49456e37e93ad343231ce949e566db2fbe2f53ce76be580d1032abb1e0aabc05c404665729b7da7ac02d81e4bb0a68e98cab231708a5ef29a1b -c74efba98ec31773f506d61c936a83b00622063930c024caf62db9243d83932a0eb9a92159ed4e455a3f9396ddbe38c02906b56e8682095195b319d6c4a83f18 -b8915d7ba5154f3b1c94c3ef017faa59cccd5ae886e9bbaf9c16107dbca4ff0de31fa191860d4c76b5eae962035231df60b681f8ee9b4421ff32509cb8fd951b -605a876002e832659ee38770b6908646c9c7d3c1bfd601866f9ff27cf4f5f41d530a1ac25cffcf6374cb52e40ea67eb62c3f3fd0f1ca2c1f17bf9581cd6df003 -218cabe20da494700a29b7c341d5b3f260f5c2dba51c79cf5eba536ac1da0f1c033fef21a5485e76262fb5198445b1f90ba39f66f00cfca8ec1e9c2e00d62502 -8ea807f016b8f503a21243509b77eb3012fbe27f79c830e53d60dd9a03c1c617dfed8a1a1b0be585c994501833e2d4562e8eac8170209db34b6eddc337d68e16 -db52d1b8716c5104517d5203ada2af23082d830bd2e6b12a5ab41b0b3f3df41e029d5f9fc25b748506593775c2e21bdb80fee8244d7d989628e515c0705a361d -08f4fb0bf33945db65f59d012690e77cdfdb6cbb72aaa632575dbc7f1e29b40b1eb725978265822b2b2ef004c260529f14f18669f3f37a56ed9ca060941e601f -c08ff212746fa36547005fb354dccaad42b2e733c63b1b2ca07b583d198502239a2ab0ba92755b5f2a9f9d99f64eddcd5649e82b8ef48169c73ef9f80372cd2f -4b628f38fa7c167c654181beb493b7a89b26d3601e9fde67ea83b4fb4be9680dc4c8e73fd1e839b695ed20ed2af3ad46d182417047372bb00423795c99bc210e -3fc04f3b357a1089ce3024c090cb3944951b337fb4c4cd6a0fc7772a5739f50145152dfd64dc4e11f609e46a066931bd880c9a779c40877d76cc4f8e6346ca05 -4091012f8f592217a48bdc132a19912a38da7478f9faad8310b285b886c1d12182d2a32dc80e6e5a3f592cf7d90db6b07be61c42f21b2af1c80ec5a311204b2e -cf729490c6e819ae45dfbe3bf7d514e3cb8bc4de6455488fcc4e220b55e5750d9e91bc52dee0d9c044c44669cbcdf7f4a8a10bb46b2b6f1b076169b240fde51c -461e8dfcd600a21e126069bb80e859c19561315914533a89a319a69e04e76b1fb25a5c09d9c860b8e0ed3222b23e0832d43d884148d4a1c46496adaa80618614 -d884759731e01a8e7de1c96bbacc2389d5e2b539af7ee2a1707f1419e74c0202fdd02f5b8196f232e6c2640929822c9723848738917d115ce664390c4aff001d -9ce48f409122ec1093173cf2913d7fe09f39fa11902c039427e12ab66d4dd4209096622ac9d3ebf73f65e9c02cd2da9ee8e696d5d182ea54c07d3c0357831b28 -420d163f8fb2b5ca5593fb1218adffa3511eaf2bc80928dfc7d19a7a1b9dee0ec927f74016378f4c5d9d12223a0591b69114a00700daf5e6e049ab128087d522 -13bd47712ed47098d00dad757dea248141792488fedae2a8b9ba4156f989242aafdf1002dcb11f2eb067379dbfebb473c5fc4d20c71a07eec8e773fef9932a2c -640960719673ceffdcaeb2864843f8ca2a51f161fc5b89ac25a8416dad14ca025c14202d260965d4df9f0adad5131bb990d094a56ae8a1b19c452664061a6d25 -680581e9a63e41ba75d3724c3bda842bb6ceeb9f0ebe0b70002c0bf9d5925d1e48fc767300631a8c96fc93a2ff0a556eb379ba8fc95c280fa1efb89952d23f28 -ef24d9e26b461c1250450719c5c16e0abc4d2382d1541644222e5ee752045a02edb1888acf34d56070c2e04d59e60fdbc8a58f7035950ebded650b7d8068f10d -f21c938324befb8f6646232b2961475fba4259887872000413344b1ebc26762253b1cbed76353b6e7ab110ea23ae0999801c09b14724e324b36dcce383231310 -b1aedb0038a87baa1d02ecfe950ed3eb471b1600b206cd493d0d7f0dc5eff228d18341368c236a8b59b7dada23c07c8a704e793e26780592f9e90ed35004d81b -bed8ef0d9bd757263f04375021db93feca0933c636cd442f879eb74dcaa8a22ac7adb3ebd12fd5b1325b1c648c801f7766df291e31821d1450f51ee532c8e00a -93cc1648e84df40e8f1c07aa9fb8dc020e8dfd01907b79fcce03e6a4d18fc51b0524da8f09d12659b4224f92f8d2a9b650e8f4941f09abc218c95c227530d216 -069739fc9543ab58a63e77caab4650f8fd3484dac2fd06eb93cb91e868081725102324e1406ca9078213d9f2c704a1cc46f719a13ea17a327b28e6bbdd59c804 -c73a77cf7e4f9ac82164fc5c333309e215a1c15b3ade739e89613f7890659b2d7009e84cbfed0f66185b8c4a4599f5f70e7c7df9ff6dfa5ae24dc4de584f8300 -1c8a11b73733c9d593b24a3030d6f2624cdbba3755c00c68a11d36538393a32c0488f1114de101c7967c7f3f4aef96102a5471a84bc2e9c60790467296559b1f -b0595167a3614ff9a1f8f5504fc75a07f47d82bc1d18dc1cd696f7aab0043202e70a2ae55ea46d1bc6a5bbfd8be1067839c0a030150135943f4ac826f48d120e -060bce92647779c8ee6be779a69f3a1ce9dc897a6e5def9faa28b646322bb12bd30d8b1fccf6bc343eb753d4f0799a7506848b17bba5ff7685f858324c89b81e -ce19db9907d3f082e3586bf765022475ff8b9c64ed587fcbec0e2fde8ce34c21cefc8aeaecfc15961764abdcbea24a6623c3b9cf72aba6501bd085fcb95d561b -c3e0f1ad67892a0d6c76c56908a2ba15749f5fea9dc29e08888bf5d790d26e1f24a9f5d7e991275c7d7d64e7643728d5139297622ae70e9afdfbaade6126c501 -4fa632cd20cdf84fd5eb0d7379d3f68a8eff097b5f2be74460efaafc234f3b0369f576d92315fd7be061302121d03c3c46480168e9e0dc273b6f82cd93b38b01 -2fbb02080c7ef431082fec71678f4e38de6634db7fd8a6941a71e192d0a4250c15104777afef70ad24394acf8514c7b9fa76346282b5a652b654f29df46e2205 -f4d3c2675db61ea011afa459313c16b4faa656665c45b505cc2e41c2f498e006561b452dcdd38015b04725a4997c763d53f9f63fa2457a494434e3ae3bbd200e -a5c719f1575e17f6538e7d7223bbb276adb3d81bf6571935302d1b6c0b7a48016c9ed5a22602597b91f15965d43141b042e97581adae0eb132a461dedb4bfe27 -fbb02abd78271bbc4281045a02c800406c5f253f654e7c10130d9a3ff582032addb51a8ded49c6d361895d4825430e7ee3ef7b40c59814b94e3acdff3d99e305 -736f49932254b33d678c5727f008e40ecb3880094dde56b28c832b3165ef4f25db2e8408a95cc91aa1e086aa9152a63ebf868b0685b5829d76786433cf634e30 -8351dd447baec6306ca10ff071be1c628bbaa8c2b3d039cee15fd93494f4c62a94c888fd676b4d913221180e2c092088e0dedb9ebb7c62a13d80979e6c073217 -8dc5b258a60006cac221911e0ee60a9e6a37e4d9d8df055ec1aecfba98dc5f130b330ca948eae08adf5ee4a1d365ea2646d88866c77722b89280e74a6b827825 -f8852defafc82a7f8a4bd1f264651380af6c55f6c27bcdc3655daeeaf901ed1952c542a7f269de7fbd01be6f9dad2f89039946f1d539b0702a609509d17ad125 -603529b055a33e4be00067f6c516c15e9152822f6a98b4dfb17337eb46c89f241f9c33a86c63d15f60d434319795040ad600713e2d1e9c2fb765baa4cf5ffd07 -1484d9e36cd660788c7dd70c73b85d4aef9ffb29e2ab7cbb5fc2ec4374a07f2ec7ccd1fae8a17a848980d3c0110bc6b93516cf04ff4e1667c4db770b776eaf1e -4891808e523ea67ce9a2997ccaef9a32752f69efcfcb1b846f3a5ee2ecf4111fbfa2bf57ce2a648cee33a49c9408c0a00ad0d07d230e3156335f723cd05a101e -59904ce0f8e4f009c7f686acd6e37df2e972add2ddefd1b9ca530839d4355a0c5e4f2fbc994a2deaf1c40b1b6f2c9f0849e37a4a45fe468bfba0298067d09a01 -611e7477e0268de6cbdbecd9bd4fa562722901e757df787d4218a59cab93be17ec3cdcc1b63277f9dbd7d57e2b20c7ad5c56b6fafea76e2a37dc4c574fe62713 -ddd86ab33f8f782d3095904f62d821b7eaefb281d6598ae9e5388e66a38b3e17b9459b57b3151d2db92875db1a84b660e963e9dec31fdbd5b717d3dda9e7cb12 -daf8596b0da958c87068ae8ca4e12893c256020b45a019a4661a487ff847f403c7f6671cbab1751a5ac7f2b3448becd224c0c21282f596cf54f2d746dcb5f700 -f1c7cc66254b957301054b339d7d49838e1520d43f8ba39c57f7a7bab2162b1c2ca8fc33bc0f8b96c41aea84a46b8f00364f61ea845373e47421ed8a87db9807 -07837e93aac311583b8a62f756d93c9e86fce5ca7bafe93d43f24714cde12c14808961508031f3756b0e1a714294675ea8b709a962f40944de9c43003247c10a -0f2c9e5d63f758ec86847c31790ac5bfa52574377b2a37cef68abe08d2d88d08e36bac9ae6e557e3121f0ed9b550388df143c9dd6a6e9019b3e3f6c93b79dc20 -0de33f8b592d2d07df0529b8fd6fc3f7ddbf4a6cd80668cf5474ae2f9dfcf40cd20c3d1b80ead2ee76117c4fd55fd6c6f02d8d2c332de16f4cfed1fafbdbaa2b -3d10a443a16998c6cff18c71aca4cca20ae1c307fe7eeeb0d4bbeebcccb71b0a738fdc205666194f25efaff67284a7de2f16835abf3d835623f654408ba02614 -6e19fa1f085628d0875fae1fce4dafb73052278fb3804e1da2918d424e21cc061c7331c3f82ec844b51164230164804dd91e7a8a502368e4a700c388e383630a -54b04e1fb49f599d6d40e26b0293c30939c8fc7c52ff73dd874ae3eed61231083f25970a581abcea1088f944a5994cefea1a48d6dfb121b47054e7d8f2e5cb04 -006d88f9b015dfb1625563e4ba9edf66135fb4b78da4b5c09d7bcbe5de411d2af2a50cc6e417cfb6d266385e39d3d9e42a4c0a25bb83eee6e7de38b1f21fa921 -f761f70a29a7e3df5f7536aa668f193b423244de51e0d4fc3ccf36737131f52fd7e7c1049bfc9fec43244df7c77ad462e08128e83b88ba5cb02b848fd3651425 -a77f802adf766eed420ceac90fcaef505cd7bc9dd653f0478918e4d6b735c81817c3cb19637a8fc191df9fc2865905a616d998dc17e0230a665f06aa77163a06 -159549a6cd718190001b2c4b7fb9b2fd4dc29ec730d2953e1e337a1da5d8e317c135a0944af8bb48b564940749e979c859c63212e6bafead40c8e2321400c62f -43d0529d89000b3e515c1e90036232fe80e422f3d1e390ff2d2d82ceb605772697d62418b875d2fb7ba37c9f839bb39687f5e652fba61b5d9c3d49e18311d71e -fc8785d9a1f3fc615f0aae842111b1335f03e09ca5a51f4c00080f80038d8102ab697ed506e3979620a08cb9646654c3add0538b9c4a46a5926adddae343931a -ed73d7c697ee1718a541b35d70b13b9996f5943d176635537667e9899f0951201c4dfc2f55934b89a44495b5e07fedaaedccfbf5499b4b57f9915acd51dc8d00 -ade379158b3bcefd085a54ade9e00ec057902c62292beb62ea7769d92304151081457eb34f99008878fadeab1e16c2a06197b98de56d543bb8f59ca097353b06 -809221e18896289b13a48337d70026d96892113b295fae98d782a4e7b570e31933813249825f7f426a4fcbe3179ca4128d59a36927d06e625dd3738752495e0b -631ac744ad334c0f3567714ba5cfc75bf28d726ac34219c956329aa9094c2d22ff8c6dc748f79bcf1b02eb070be00e1ddbf9d13ddd9ba1f9d894c403856c3924 -3989716174392353f9fb3c3811bdc0ecffb894aff757d1d65d0841746c190001e3f276993bae1e6da3baff6057d48ad8f11c697b70a91428291dd313910a0b0b -da1befb78bd53252b6cfcd14aaf90678f31d53ed05f6f14323c68943f07adc0f3161d94d01ff06369c2148a3c20c36fe2832895f3baf157640b4ab120fadf412 -fdb99d30efddcb840c29fecb9288e8cb3abbbd0d6b55efe2ac9a136539c1b11171c2ec14a4fdd1fb93574bea29b1d28cbb20389e33ff3200e248116cf7e89109 -11400df5840bb26472c59d18b5e2650b0879c0f5528a0e32285746e69bef271e34a0ca9c5588e028606525287668675ca4f77d94c5f51992f70f613c5b230926 -4d3e83caa881e8f7f3312adc42f89fa1062615da4ce475b1e351ca042620590e1f8ad157808807a69b967e4d20e0d29ecf965928cdb9a4b1a368448ff8bba628 -65c240a39eb26bee44ac174d84e5526f6a338cf90de3f991b581019fa9b9b21bbc53fd192c89fdb0f409b34bf704fef69fa1512492cd807fd1ae4ce6ceb30f26 -15c3088fe709dae80c49f6f6a9083bef17f5fca9e32a389263d1a8f7723b1018afb8d1b84864b458e47a45f700b057d5903347bfe311cae86f53165c5caa4d2a -8d3c70fb2a9c35886984df1dfb26bf1329c0e79aeeb814496b92f72ff9abef2dc034ca753bccb80e99138449cd7574c85244b9f3b227e0097c22a39cf801a61d -7671877e4d1975ffcb5f0703c978bbaebe03b775b484bc9b17206aa196873c0c55e6a7e60f36ea28f5c670afff91929cd3db11745804cc5f13354d052778411b -44d60ed293a9d48c2d2e939e3687f9809590e3bbb1afa78f308170f3415cd80dcba365fc4495fb036acb4c85c322aeaccb823dcc8c03d8c36114724b15e61102 -c262c9546e9a7799cca800200fcc83b9ea6794f852f0c8e33f574541cbc06c2135da7fcd2ecbd2e51be95f39d7ede4e963248c749b47f4676837ef90605e3e01 -73347ad9bb1dacd379b5cddd8d4f53ea9b840dcec1bb42342997ee7eafe2cc0c9929e9bb5d8e769cd6f170f75d2808a706620a903ed3ad49f8dd40b01ab26620 -4102a99f3d7c2e78d8da4232296092d2b80c999d22e4c5cd9c5079c973eb802a63ac01687f0a8adebdca44306a50a7b8b7bde5f58b12aa71e5cf095cffe3371f -9682bb110f403b954b11ef2010c792ea5de6ec1c6c04d2c13644a6f64a701117c4f5cfaf9d19efb64d41b9021f2437f43545fb8b777077245d6f6a0731daca10 -027d3cb9a4c75056518704ba7ccadd2ca21abdab8ead304d281251687cb38e2b2844b413f3ded572b59f1d9437f7324cda219b73011678f16970da8930da8625 -58d2211e217961cadc2e310937fac5a9dad2ab0fa276dfb28063c66092c6211c976a02b291e7945c6df9b5dd294fcba2bfe659e15a26d0c0dbf540c6a47b5c08 -7ae5f08c1ab6d0bcb2c203e2440919642785c0e9d080af2605b9fb71895bee27021a85fd8e34a75d1275ca8156d9215d693339cde85ab9afad91c6f26c852207 -5076792309e9e136f15fbb708fe3e12da177ecdfdd0b6f20b3e3a6830438b32eecbcc8fe62a3f211f871eb8c37029f35684df374efcbfd8b2897446a98a84c24 -6cace13f9f27e4ab8cedd243300bb8c650d0a46965c22cee0a073bd673ef1530fa5bf4b71a0bca423b71bb0f4e71f4ee7724e5d8c8afe3e9c8823d3e1d9f180e -a107d2408579726c7575c1348c15e4215712e388dbd7c9edb6ffcffbbe58510ec5dde0c676d9147b74bf51509ac866835bf99b9507094973b358d8a69ec0b32a -d9f4713cf343dc30e38855ad7bbbd9394314416b14f2536c8cdf9aea86f6292e9c13da54df5251d640eda6fb631239a28c2a11cd42fd30d03731b9eecea1cf0e -97bb84651af6cd04df38c2ea59311685ef0191d510a3646e9eba03cfd2f82229055513710effbe2c77cd3b6d55c8606a1d44821906abc26dd2db996e35636b07 -fa02f526c45dd4b7f94e9c1144672a689ad6e505350febf67d483c520cde4c2aa1c1cd1e842176d2ae43e75fd67dd626d967fcb364b77f7e626e57ddaaae781f -2bb14e408fe31bd12346326a52f16eb398ac66c307b1a2b13e8c69cb8cea6b022f755bb8524e718525c60fdfd79e2d30fb84bc05e961ad7b6a0372d46534ba21 -963879111f8bffded891b40ee328452b80f677ff003e1f7ab930c695c7fdb110e3c9e2f23d8dc27abbcdfd41f633f4fd3e3f6fff5eb6880a98f5d3b32dbc050e -38bf5f66123b15429520f555c7b9dd43d962287d778074eef05e4cd9e116981393889fe605378efc719674458106ba90d472b2b3e7d14651a1115f68e9137f01 -73daa9a0fb5f2bfc53bba3ead149e54a9eca57ca5331982684fee7f0ba5e1b0f59126c783ab1a0c9d52b9288c0b763e8fa172b6bf34b44db814dcf6404b0f30f -6d957538cfabe3510e86fa4f4702c64c97c3f833e48caf737c54f0c3264d001a6a33aa8a9339621a43d6b15cea3479268244e6aa13378ab66ec256d2c56b1212 -39a3c57c2ad9e169eedeac7f8455af831496c52991ceede5ba4b5f35989b3124058f34fd024c232d1a87facacae8747280ffa061cf9cf174b7a000bfecd3e601 -aa1f792c9f25855128f8680305f4ab440b35a8d48a66c74ce4eef8e1c0e86d22013e395711b158ffd8f359740ad50df620f203531fc1a9531c267abc3321a623 -97e2e4056f1b62546cc13a9f6cd1d61caa7c9c37d5b55b1d5a5ba46e7888bf23a99afaeba6844316cb02d932dbb18cf1642be461e449bfb6f0b295d60d90682b -3e724a99f059000f99305d305c3de9c03da23d4d1ff9da88435826beba1b2b05800f7a489b6633f29b6fc7a5efd2939e81a38fbc2832c63ed08cd030bb67c814 -a1832bf77e96beeb37956b10aea09dbcde461438494ad21f8b97bfb06b3fbf251a9fbbb80d4e90cde79067392ae326c7febeca95853e3d4a7da213379d7cd415 -b04a012765f2be96181be2e0e5032c81fa24e612273470a22f077c18ff0086112c4c125c038da83c8dd856859f7bed531b4e91056513f106c3470609ef224401 -9ae7782c91cabc694d045815f3de3ee300f1091f73fc1c8a5d4d5cd6c9e49405d4a8ff39ff68ee9cdc27190ec15b7b427461c1d043903316cb5b5f0776dfb004 -50fa746bf58e02b493722e980ca2c2923e9bc3ca5e54d6ec3356b68372c87f21590ab56cd05eb9bc6881cebd5715129c60e5a9fb2a45d17262821a4cac03f10a -82932b52b4c3502aea8ed89b06f210e58cc6ad9978e973dd2ec09b1b0e1a8721bce19cc44e88843f9da765c4513e21dab30e3091da8b70808d8b07564eca7211 -3d84a36fd01bbb52d5e9b5bcfca84fa0d86ccedcd7e7d3d51f02b4f7b2d77108f6c9264c62d652a47daffec74044e7faa06d7d933a8da2697130f3d06a700e25 -d99019410c4ee7713937668c974669b454ecaf966bc54bd64e47feed91435502c46ad605b0714af431cc07f5e95f7edabe0266c6b8f21dea87ec2c92c8b1841c -d77e0b2769b009a458bb85859185dfb10be81243ba3bcdfdb6c480ba9d00f91bbfa1043ac9f7e5eb4b7ed488492dd0a657007ab75fcd948fae4f18c1f03ff105 -7d98a40ad34ff8ca215e88e8ca780a835736060e2004690be32693e089955605b41c04f06b9f3a17375076f14f655d8020f42818f541d240c45befa578957d2e -3b33366daa754d4122c9961dd5957a006a58f0e274ccd46a9d684083888e7c0131847e6c8110a2991be992117ddc2fe2a4e05ac4f76a8290691b1fe5e398671b -f99c7fdda5fe7a7f35d5393198c004f69100c4ba1d3fc1cf3286ed9af0ff3204c52851fb72ad204eb2ca964b7f2082a4b6da359dafbe972884c76872f2bb4b04 -fa02c443d61ce48cdcd20f1a4bd60e2857e0bc0ae16f193f2719517f00d58a23a93da7fd3e293f808c8a9060187d1c5fc85b72c2152c570bcbd1f0f9b311771c -e1a6b6f999400e06ee7de79219ed4d1b7e03d6d487c6d0c21ab2bcee68ead100f1b4ec5757d40662a211a691ba5384fb25cefc63d8e99e37a090d71b9a069f22 -6546f173cc4352c9cd11f28ec3b5b332d53a1db3f27db589eff97f09a106f42f8e8ee6ace205962e7f5cbe8deb55ef94687566456e2c06ac694f0774e835ba2b -9862472eff50200a93d8931cb634d98f921472fe3f33acfaef74d0f44a56600fc6f35ebced5ec576c83ec8de1c7d2b233370fffb15b4595a7d37a4ca184eaf1a -78bfb42e649d9263c701a26e026d82865b6cd93a7fc36cd18b1eb1ae1d966e0fb12363b0a087c14034a60df6779c60129f41ac8c8750dfca78143b0e70006802 -8972dd57bac1388367946a3aa911a8917712d88e5e1cb50d7407e9e6cc2c9926fbd47609dddc9d6f972a82d270176a59c08d44e4a6282083cb41f5a1e3002110 -b312722a215817bed207c9edf17d81a469e68e8bc53bcf083e59b3f47454890a595106897e4ef3d0055afed0c00283c0cbff473720a5ac2936d335ff09c12c04 -6ffa2b4c79cb5f4eb1044d615a9ef046938d407db1b7165ed4078eeb5523c613dcb5eeea40ed021f977041bdecbb73d35fd6557d66b606a4d34a1c8e91f9122a -20a84f504afadbd70e2a99a71e38e5607f92b60e7fedfac15ee3cd71a519af043a10c74239c9e7a34ee3869c287d3d9e735d60dee04b211aad213d1c37447c2f -d6fe66d2eba147fb930e22581545f19e2acfccbb8233ad9d43ba74a707604a307f2b9f3624bd056d3cea7e9a9e545d12b6084100a0edbc5610db62535b9a6c13 -f33524f89fc0170aeb924aae2e382c3411a8d574476e97522de5f108ca54ac09c5007782e8fd9c684ee24a59992caafb00c30cb6c909a981001fd24de064292e -62f25460bb92b9ebf247ad47aeb7b758fdf4f1d77f867fbf59950ca2d45abf0a254519590f5548f09a9c813a47c84dc73685a3b6a11a7d2f31df3314c904271b -829ef7b392af9e9580399a2f267384240c9e32c60ffbff5ae195fbb77a29061385d81c52d187029a0af88e451c3dfa0d3bbc406e80b4d80addffc8cfab360f23 -91ce5d08545e868a46fb101b7c370e12dc82c971886c76b653a1c1ebc3ce2f2753611fe2b19c164275bc4a096b4fbb651d07ae6dd8688d8cd8e9b22735db7310 -ccc68eda320b1c3c22fa4c83753f34c9e414e43c8ec22421e8eaba690095ce2e67e7e03930f60b07caeba6bf07c7e353a3cd431f2ac7d4a941f26cbe8fd4cd25 -1c8fcafdf0a8f9cda6e4bd3aceef907ad3647458a8f4c353a6b0ccb0bd7ef70ed7d18173c0e809a0da6d99fccc47e00af8750faeb7b37495f0dc85c61cee4c0c -7a9333f1939d23a2ed1ae7a5b5987e070322f616f6e5d01d7b4554cd00e3422bd69e35fe17bb62c74ea74157894bddf568ff990f3c3701b0a422e62ff0c26210 -ca4153980910008e21840367a0eae6431fbc01c945b5defb149fe910392ec81e067efbf1c66c750f9f6cee18983763f583872c9e52aa870a5902d5b02df28e11 -86ac2edd923b4c209e2289f099504e36f3add2a77252e5bb1916eaf84d7c000f05f502a3ee8e588e2e0fecb52ebdf917061b87b3b478f80a86da6ef950bc3619 -97e52550357986981eb7f1beb04399a5c577daa70dd48408222f2d08d26c2206ad9665e64a7cb49045c82dadd813bd047f768c06f09cdcaf71f8ed97f9a19407 -46435a83efb0c6155acb6747a25d98a8df4a86c0f05a8b752e96916b7acea813dd4a32d2568cb4ae2ecbda7563f3774984c06160c3068ea1b49598a26989b01c -298082b419cded7a470dff80ff9cf1cfd8742e9eaa816680ce35b961f4a5b9231f17b767eedf0f02e7d4adbc9514a74c62d9cd95602827c5e1f658c9713ef00f -3acb2144ca546ede9135c7fcfe0c0ad82ae60a2af9ad05452a5b409392c6191119c146964fe65e39c3e0509d32f465fb652f4c87a57dfa126d759a92f054b101 -013148905cb3936a08feabf257f1656ca0a1c7a13fbb3bca1ef713bacb09082c30b7d6738dee41b0846d80b025ce08e001081e776fd9af3525b6dd4dde5d9200 -27c9717512267ff0d40129c0027be76e1512263593f6cf192c61f5383d910c2d1521013063746cc09a25d37987c774924fcef215e592a2dc69278bb9e12b5319 -4b36ec8138293283361fa0fc808a4dbf0cddab4dc38fb79a2913e258296401216585bcdb6725a1cfbc6217a38f0c48bbdd98935626f48db04e51284e83002318 -667d2872249a1a129053fb4fda4726c23d7ff1d67b96acad62910518d9430a02275a0dbf1919e63c5d2c55ad9bd84d00fa0443ca720ae0ee7fe5e9140703541b -91749925cc055369c58be24947cb6934bd138e6f3c28c917445e5ce1f221c516c78be984b531fb19a59e6537a1c43aab027db6250505780f37d8014e86f1f119 -2f271496c7cf9ae7fd7fb5020ad5fe5c11b818c6da1fe107ca78d9007feef31406eb47c03dca1ed742608e421b4016fee6ca45abab490c9755ff4f5f4215a316 -52cde98b568bb5d9e150b393ab40cd0dc4738a969a16051d90361e8928cfd221e4069f2651c0c6c63d53b3136cbeca5c3b02af55e3683b7a3a24f6948805a015 -12ed150a03cdad997e62cf44864fc7f4506717ebb556a5222d1af1081f19920d125babde8e4bd2c59a07425c2ac5268e410afdee2ebc309faf64cc5e35f51a2a -51e11f08f8246d5f833493b14e2a72c06bf45de3200a8d5042df7618b5fdf72b47e65dff9eb835f99c0fef3be991240082ccc80253318545cb8ccb3ed1a1d21f -0e54db0930dd2c9a4b0f96f5fc6062fc943789b98033704e33c77d7a637eb81d5b098263e13b9852ec548368d41466eb5716d7a936158f10a9b22db70c299a23 -7c377958a65e77518e49e48b16981078db6cf5cab0cb83d550c3ed5cebe4761cb687484e4f3689e50750f522377599959c4f08e1657a670063798fe8ff41920f -f899eb362584c914a40130f3b61ff1464207fcae7c4aede6d8e84a56b8526c22f2a19033e666b6d15c61b60dfa6455023c1f6b109dda846282bcc5b44959452b -6b2996bcf46763be3f2430d13305eb28714b61a485c5c5882ff6b925a3d6122f74b2ec9b997435ae04f14d840ad73f112213a3396bd5b52e44554a2acd58e600 -71359ca27d32d22fb6d9a624a1e8841e97bc6a74bc3d6914515690988e5e4d04ae50005bfa19ffc10c44751e766c8b3a5a1811737f651ec022e9e8831c9f0f13 -37ffc292fd1d2cfd67f506c40a70cfcb3b52354d4302061c411cfebf9e4273095953f32b441bdd91e996ca90b3d873cb38774404a8540cb99c7a5f6a2443bd1a -c58508831013560f80d8c562e825f9f9eebda11dc885ffc3f878da5ce429c722efd33300fd26c478d4cc468bf72e60e6b21cbf5ba5503e898869ffe63ca1d712 -55e3ba369866f65edc9eadb54998e608f75abcb64730b75f24dab5851cd87b0504b55107a094dcb71419473be3f248861535c4f12ee439e389442d4bdcfd9c29 -ee0611b3b82b38461191c8c505fc03964d940a4978baaaef348412ba362d2127c3134e248b2f0264a10c285af163898f6d813cfe382972095fab3b6b99f61c08 -69f715e5d5ecdfbf3aa66f179fb45ddc159655316213c1f5d366d2113559f61304a94e6abed47f2d7d2e066b120f1a60910265aa99697be5f17f9117d3c0f81f -3cdc28db579849411bb1055c9b26f5fa1a3c347b4957d596a1d0dfbaec8567010712c1e9cd3f5ee02fe2fb0ba4f37f252d48c92aab6054b9722d903dbc4e0d06 -1b7d292b98102ed83270ee79a31320497a1b3e22e383455afb444b785e7a7d22b4a9126554e6c4f5392eb06e9960af0a9de66ed0c91390e18eac39eaa6dd4710 -e3ae923a18a508775dc7b3f1093993cbffb1d75101cb771eaa9fe9515c0d311d20f67496951bdb474ecca8a8e24bbd82615a44ddb4707a8dd07b2f1cfc1d8213 -4d14704a8fb3d5e8dc428b5c436b27174b8f8b832bb42e48dda2a2257e64f1155d8a5a2243c3f8dd6f1bcd0edef804d75f5c9faf8e22bcecfebb31ebadcf3711 -bff07268e039a35b517b5c63f774524ffd91dbb4e5e8c7061acd7aa599f46e035c52db28214811ba6ad8177560ad10979e492fc4511ccf75a440541691e17a15 -c90a36ad5ee940bc0777590134ff2fa2631f904462a59630324e93bfe35284127033354f51b18a8a13b5414c935fc39a83ed9588c4bd8028a4fff5fc26909b14 -e98bbe1ad32c3a198d283ad2d8cb6bb46a87eb979f7657ba48eb9dd09e2d5115cd660a58bcaf3f085b92d8097f8275cfe5a31e4b493a4ee5faa83bcd2cd5ba1e -9c661367404a8b7941d0b9ef5172860e25fd7df8668e2aceaaa125128841c7196dc32855c805a0c0b4d1eba2911d899927d967ae525b0f01078c453924fac413 -b8137c157fb77975c858271beb846cf169e4caa17865b2c9cbddd3d755bef118f90a50a550cce202d5ecab9ab5bcffe1eedbf463454e0488d1b9e959c9ce0c0f -8b5ff60214b6796f2a4a992b42c603e5ad59c8017ae08a11a920aecfdd40162e6204edfb97bcb3f446c90c8f87f08dd0f1e2b5d94ee31454a587cd5d1d3d340e -b1fbb4b1530efe1d6cc051f6cf10305af2863887ebfb36474b4d5c9c3fa9d92005e447d45cd6108e3dbd2a446b82d8e4d8707bf2e6bf830832ff632e478ba616 -ce2c82df7c255eb96266b14f1512cd69ba053efac23395f0642e1565bb4cf00c5d434a9ea64ed954ee86109f8916d9a34dfcfef779699ba4affe01f68e699011 -0c7cc9f1694b80e46c5d9b6d9597f3f64aa55b70f3641880c7032d7eccfa5617cc24cadd6ad611176b3824c38b16206b2e00b1e658a5d2394c372ae82b7cad25 -60bf4c2005bdd640c8ccdf8a49349cf2a7e6f530f95f5511b439415dd2a47825ecf547cd2d13f481cf802dc0a6d7468fabd8eeac0d9884a443027878a041850b -78b5567dd2a319a2ad48f4252eb621952dd42f0b684f13b226dd410a7f16162771bffcd2fb8cd827fc0f57e7ae3f3d1c77197a721e2170491d86c55fcee66506 -5f3069fb9c97d252a0128ab69d21dc2fc6e671d22a88dadc398dc0924ae36a0c361beaf2dd07623c6af76ae4e9efdc22b6885d93ac13c1f5184200cc70d04603 -91135f8700bede439b88f3dfe69f7617a137977d63bc8971c95e60587255c400a82f8c676bac71f97772d2bebeccccf00e9115d684a3361f0ce88306be915705 -97ca5e90e551c1cc4db1382732bb12fc406ec37a1a8a5e034fb52afa6b04702a0c1f06380750f1ca8e8787ab2a01df16540a2be36949d05c84a604de5181d923 -59f7db8b720dc02a852ce10cd799acbf3289c1b2166d757d2ace566f61430c03e4b36e79096a932e2c0aa176fb1f2753fdc6296974fa1095fba88636b8632e14 -f7f696f3bcb331067cf2e65ff67d94a131ca782c8a4782ad03a558d295f85f050225ca9c40a5123d812905fe8feecfb6a621e25f57f30e7df7ccf60234d9ea05 -786e7ab47b0c13f86e47cff9161c4e63285189f216efdfad8291c602a3cf340ceb08790ba1a6440db071d9944ef4dd7111f946f4a9b77d84dec989426aec4d25 -c37f49dd6dded5505636a03ecd475fe806aac5f7b2649cb900e1c7d53d6d2000d6c05c75e5ed89d8736f87fa8bc772e63feb0cef3097b183d82d5bd5a1227c26 -552f275e13929fa51270f60d264a70e764e53e0d419bba9eabaffdc78b07910680d01457aac4db6e1434d28bb73ba862f67d6b464dccf6b5d7f7dfcd3f2ad507 -922fb4eafc2cf89795ec8ccb7b1825685f92ef0f0464fa47f11f053c3b686a0ea258c854e0ac6b56980ce3cea379a977f3375912015f648c2cab9642c0be4e0e -556b00101577bd66a293786989ac1c266edcca914914c9fc013427701ec45b247a022df077ded9d3921f56fd17f2e7629fa6f44982e3a5803a7d925a0f1e5505 -ffed2b4dd857a4a68b091763d101b5167a113c6006f71b5cd02be9ec713f6c21a0522243cbc9ae84ceca5d513d699ca92bbaa4d965c9c08286b5846571aacc0d -99b2ccdd6da77cf1463e7b829aa89d1c2eb663f2efa5714f78005aeb2ed50520754d0f93aafdec50a15d3baed6bbbf1f0c172040df8912fe780fdc1b5fe8cd28 -a6e7c7b06c6e79771460dbf14821ffba648486bc1ab23978b03d22a064ba912b8dea452c89f1e6785747e307dbcba69727fc6765185c8fe7c854d63b4735102a -97e631ca14e017b3f6bc7032dd4ad1f57e24d8f1d751ef9a5bf3d24016256f02ef275545f271cfff85745c97819d7357e0cd324b3d239156586ef2ae39d4de25 -5474fdfed19b3580ab488949a794465b72088b14972c340c34830b480322eb0ba7dc681dfe11a15658bd8e6c260ed12b75743d59692396a81ef75fe94ca65c14 -c0d5eedd8c53da5d18f318ebda63868e8b5d033d9c4d7a88e6425fc91c5c8910c4ae9b7237ef652afadb36fc70e8917a769716c61e53ffaafe6c55638a9e9b26 -dca0b64290820ea764b4ffbca04bce5d9872019b8a0e9a4c8436137b2a6ca80710630edcee57b39e20da0d85d7e1db2f48bc95fdfc548210d19b2da97fb0fa1a -6768c13576368c20a429be6a3c98ae79daeca94988f0bccc672b5c41289a4510e4a3260fcb0fa63a07c4d497ca0dc368fb0755690a8bba1f69899588ca30821e -1fe522c00e283365f4e9b69891e7fdbc4af96e2fb03328808b5c904463c0d616e4f0dbf63f28e59cc850acaee41f98fc363137c21b58a3151731f81148e93d2e -43c52789d70fc60c5e72b70600123b8eeaee80acd42358b2584c6954a9a15c2abce846922f4acf528ad3eaa70cb3eafaf9ab1fdfd928a6573b6b32f65db83d09 -4eafe6b601bd5db9ee1ffe2574f8529ec715036fa7b079403a040847d2ac7c033337398f7e372d51875b8d3046dcfec6ecb8409485358443710792239847f30b -b085c47f2612ef2ca217f3d6dc4f2544da788514410418602b38eca24b6b28045de02f25694a26d8a0545baa5771e48d7216d20e96165ac679f97fa83677e821 -7ad75ffd96f38b40097a663c321b61ad249c8b5a0bf6f81eb8afdf30a691b915ca10e815b5fa91470a4ec55644e69264a737f35bfb910ff5b8dca543ada57e04 -f239d9a047cd6b27ee1244846c752f498ec7e331011ac36df2277f82dced6b226192c7eb7bc3994c48a678b0def0665bc2931e90bbb452d058e958a9d68ca70f -e9d809e8e6899c8827d5edfd1bd4489ff316f34f0a15fe11c740405f342f6d0af3b3a9d0b5f342f0df21621eeea1ad07fc0ede29089b5627a488b9ec7007950d -b34247cb4d789b14b0734548aa1e6ae6e16755bbd210432f8433b10f15ebb6195752433bbe96461eb471674eb6f9c2048e7df22de9752b2eedf9418030baa92b -dd33b84bfd80ad8f006ec9e9215f63a42dd3de478838a84ad1630a85dcefec20edf8444502b10d27254fbf94f5c701516b7a7cd18ea6318fdbc13dc9832ef413 -5cd8303f69779ff305be44d30e653c5a0737df48dfb6fa9fd768f2de4663812b8ef61d550682dd72f22550830c765110df6320efa8ed48d3da06700114d14e30 -b2d146b9803811071fdbfbc54584d4564c5c2ff91369a4399c9f456028e07806077a8aee04d970c27a54330e72977abd91a5aab292e26c7cda8eacc9c5a1a60d -29f7d11aee3f61955c2e003c335058be263f2a1b258741da21c5e6a67c8da010e576c33d1cb75e54c9def4080ee8bf24a0cab2302b6c21074f733a9087626225 -ee199372bbd861bf8593ee28b52f2069e8a1c9e0eb5c157e96a473cca8e5920be2214a22645403b6449fea1f266a6088c167c64f573956427bfe32bbb18b0f19 -affe89569a945ebcda18287ee66ffac21bb8206ac73939c00884c16ef0eb6d0972641913010045627bf9dc51006ab39399daca3467c5fde277b26b46ea821204 -cc997fa0d30bc5af4f06ae518163a57163c1e7a35210ec65d584e8fd1dd92c2866e8b27b9253f0186b89b84d1a9b575749ae5d6ca8b7288db70b80f1320f1b15 -4e2826fc6e70453d8cbf65ceae956fde0fb5647d3fee9b56e09611ff8bc47f1b5487d74d7a0c8eb192690af68cefdfdfa441f4cdd7ea6c3b336a954af2035530 -8fa9368b686913bc442231d51042fa03084e40d2ca05d78e3c46349be13663239caf4faa8a2f5fdb17124eb7590a8b60bd8e086aa0ddb5a4c625ec2400d0140c -e481275d3697980df83589b27d6b716f048ee0e50b4929bf690ac07265eae81d6fcd54e424f68608e0029a049d5940e15b75cc25a1e60b42b606b10875477b0f -f9f0d7e7404a4b2d9178ac23d64d41a19e97cbb58fbf72260693c4b6eee31820a9ba05dfe6d3fc8cdc4c445340703aa54e6df1b068bc7a1af0aea38a14462109 -348831fb7b7023cb53b53c3021095e8af73537e50acaddae7d7e29aa29059a21ff1a88f02eb4f2620f9f742b86cbc4d9b6174761ff18b31ac54cdd260dae9812 -6fafc8c4c9a08721bed03a1e38802ff5df43fbf119d7346eedce55396399812d22687ea44b1579e288c5e472a443eb5ae3b3d6885ebbcceb9d0c46e8e3cdd02d -4a19d7dd43ac96c698eadb7e821c3fade36b9f55300cffcbbd5d2ead7a2f7c2e5a6198744369cef30291d606949c9abf6b79ef339cbd48c19fb51f13d13c1a16 -3aa074ecd743f7868e559ceb4b70706a1bdaa89b537c6ae1c4e81ae76034c62513e5a59fbab1cc4ebfbb38f8eb4141a2c74395fa3799203bbdf14f01fdeaa425 -2031a3565a3a3f14ee38c47de01aeeccfbe2c8a34c3e9f4f133436014355be061708af0f87be7b616822d229619a66a3ac25103d8b617c9f9091546cd44b8021 -8b84948ea564f5a0ea684112974c214294eacff5564927bebf5ef139d9ec2618f8ea0d309396826f05615feb84f7ab158ba18885c961992e85025664f70fc728 -e4900e8d8aa838127b080c84ee3e552bdf00d542b6b6e06659e4dab05a90ce098ebbdc341a89a40d41addc56745da241659ba17ec9f11fb443ed41544ca88621 -e90e1ace1e9998f499a4d216160b6a25994d3ebc6a34f293d2da3581a07c1b177bb26e3c6f3027672c9c892f154fe6918c01b16396f2548d628225f658fca205 -20ffd886e9e90b32760abb10f30f5985f3068345b67ef1e2292fbca5d6216b1fe042456e9a9194f55db542566b51ac250f5ed3f33fa887e5ef8f2ae537137f27 -14972e649884eb7f915506d68f2ca43860119f7aed412be3fd58cc5c1de718252e681df1e15f848d5d006a3df20d211fb20d0c36261a8649bccf3b5bb8ce8f01 -0718af68fd08161bb384d1ac219f1fb51f15af05682a9c934cdfb968f186661cd610aa67a81eff056e628cf86f603365750cc5784341324e18240480e6a95b1c -c96b7d925574f8359e0049a5782ef44c1c1120cc5e7e188bb9990708bc803f1fff8f7dfe455f239e9e18bfc6bfc4e882eff242e0ee08a391fcfc4d5d1e061700 -e71668e97c2f36b070ec187e70543448cdb3d8f1c58a6f72364f54c427dd772451a71386c17acd3d4ea70ed40130cce1fd396509058a08f77a443bbb61bf2600 -930ad64f0444d11d77b05f3c404f605fdec3125b28cc580c7c924a5ca372d52f26bc9dbeb557f96f2147732215b5e98440cdef430038b7ddecf7caa77c989a27 -9091fda522fe9f7db8b1b929d5b240f25837aabc0f5dd48793efd5369816e819dbd6cb8f6764bba75a5b677bb532f69922ea9c7049589f1743641f8ee937eb21 -855b6b079b02b4d2b98fac4c5507fa4bebb1792b3459f108a2b3405323b9321c5de8e1f7b3eb5dd96b2e734bc24011a92dbe978a8d5295ce3532a8ba3a90dc22 -57902dd9975fb93b549b7141d4ca858e3df4816c8b422793cc4b514d72af4d134dca120bb5f3c71599100f92b7779be555cb3237297077c3fceb7cb1ea76db0f -af8f3a9eb40dac262b2ce6ab33a25445038fad573e050c2311a85d7cc0f9b2062b4a7b3f5495ad6b2632d705cae49c89fdcb58fefc294b0e59f607c4d87b7526 -1c74d9bb0e607a1c8b707b428dab19138e561bcf141bfa32acf35fdc811d3b2d89a999b2f8373830164dfc24ea9bb136184f84456e132c0bcacea1de580be914 -efdd4b2a098c568741a80b8f754a1ceba01c3c4ded0b611bccf6261e725834128e4788250e3c08bf888c87a5ecaed6da0951b947658e8ca299c18eadc4ab121d -bbb69d805388753a5296afd91e8df1f5d5b314b3144a9b4cd710ddc194c5a62d743a3ab6d9dc358e57032ea336cf89a17a05ed3e7efba117c65115a61e87ec1c -5bc9880f4e193a738bb167348e85e2ad98a425c491ca9f5c2aa8d26d0788750213cf112bb76de39ef505f158ecc7b5b7bd872ed3a4677b4c467c601803f02718 -ab79df89d276a96f8905b21174fd09472f247a6a18ea9cfbdcafbe97c368ab1374a7d5bb375597d90d22784943545bd808633a496406c1b291d5b5ebeb46e422 -62ff4378c110c4ad57544f098123b9083ed71c870204a2606c022208a2f793098f65bef8294e2ae6300aa4b5c5213a95d5dc46dad9918e27d654924aca76dc08 -af34a9e288e566ea3ca595157035cddaedc35d5eb8b39b345efaf79407247a0f684507fb3623a09f0e3883d5a5de70c6a0c9c9f1488ec0c43be4d9af0fe93f2d -5f06d86a42663d9ed8061f47a7c10759f7410843248009c26380aaa72323300319d59e7133c987d8a9ef28bc0550b47d912ef1858e7fbf73e64110c9be0cd619 -c8a2d70b305458c1f0650693b413cbaa067de98d8a939b3e88ca3c1ea8bcca016f0d36ef075440b7d9fcad7d28b29f60ff4903d07c68fe2f613d2f53b73b0f2c -0020a0d6cd5561c56531db7749600bc4b97a34733047583ceef1b76adb4b002f1fcb41086ee88901fbf1cf27e02a8f67041305d879711059a16181a190116621 -12bc63f53eae2c001e38e7e5ee5bad01ffc27cb338233c37baf61eff20f0552abeeacc7b8e908403825666446c77792ed365816d16532fe0e59023d41d25df14 -d9d1a26a33cee1c5fb6824f4bd3798f311b4d081789b69def4a92d83b202352ae50734d5ec74ae761d2c60bc2ca8f83784b676c3f79d80e314d2eb9d59285e0f -ba4f6a28f2e15c123d9bc4495870e3ac1b2fa101a22665b86b605e00d15bdf27ca969d150d68bb563306f6f13f2262e4e069be985da0f6a94af69010285f0c1b -9058bee3881ef1b6a3d9bc9b32be2f12070b924868e76301d1a1fb620eb84620555c5d107e07eaf0c1c022988d3f9420719c9cbcf963cfd7bc23509042ed8b2a -0893799d117445f0e768f15955568ac45dea272ac36e3740093b0b2ad0448a0f84e00ce776a01dc6b0037c404a22d37579f84a0b67ffc707b8bf6686726f1d22 -2760572a8e3c6e63ed38ad589f392f098cd273bf9d966e6a6709d7b25d44ca1ee7ea594a5e0dcbfce3b851d25ffdd6aa191e61de3a397b49c802407f26082d0f -9cf1284d163c905a3dc21d986d536265bde294e016a875c1ddd28af75265762f4e813a1805b24667f24ab0b91f26d0b4ba86e20886d208efe8e1b32818671a12 -b09b443de46a3045585f8e3b1899ea53b45e134524b7f70ce697eb2db3cfff02aef8af430a78bb0f06fdf2fec06644ab51162d5be2251e1858ac5681440e2a04 -54f6582af30391c4ee5d64440abb3cfdeab588ba75ab3edceb99512f75c72f07ec8c2ccdc8e078317a4667e052a25820c8f78397bddfcc75165a5e76ec293806 -a4281fcce9641bc537a5c6ac36a2aedc0eb3e3165aa96c9cf8be982501961a13dfccf48f1f6a68ced11b383d36c50053b141e6009b46a1e42bc151f812f34b2e -5e4478ea104841543239fadd63bf5b21a1a180fe4ba83281aae8889a87fed20b78030b366cb0aee2f922e9aafee973ce0949a68996efe269cec0096b0e56b410 -e629b64a8fa3c01e50cfcb2cb069c1fb914f7f1992f960a93a3d76fc74e54b1aa6d8bdf8065d7cce757860452c838f7fd304d5a48148d15c3ec30f9db834fd08 -f875a2562d83b260616d92df1f5b9303bb40543c0d00baa4240ff89d2a236713fd01281976be5f79486f4c414de4c3b28068a3c72e32f6ab4a18e26756675b29 -d4375dc000fd93bfda5b3a9384665358a747134433edcbab1dcb7c729683b529aaf32bd90782898deb1ef5d8eb4f2417c78f14a13e0aa04fbed517b369c9622f -fb697581e8cefd884b202312d877d3e4d129dc5514f8d83bb768c05b496bfb2d0567fd02b35089ba96affdb1797c74751f120d7af5ab4c128658d1739f555821 -9f12695cc39ff83afff69cce908da84d92fc216c0d04db4c317dd95f2a8fab10e5272df4f74616604ea12b89ff44c5f65b4f47135abaef74e5412a38f0e88b0f -29755a06194d9ffa5dbd4304d609ce2d1cff8f122d8b969cc1f997b4a02f7026f997004f405ae93e1184a3fefe954235b1233dd23762742748a359760cf39f00 -6b8ec4210e7e02790dd33fe8da94a606bcf0bec502be1fe7349a85c1b058291c39bea49c5f34dcd5277515c9bf656e81c10a7becddd04ba4ea1d1eff04dbea1d -cc230a7e5c2e88e608a40097ff4c7f01c5474802c6a4a79dcde5a8ae53f2d20a64ec8499f39049ca7e7bbe9e9ccadb02fa84bc392e8f76b1764615af5c604d0b -aa173466f5b0e2e8d76c894ca0c20aeeee963754f9a5df61af66c6b322cd3515cc49c621bb93b6f18664b96583644200259eec52785d6f2c64636f9f570b231c -bf7f81e6df22e75c1d0cb93e21e1dc954c2b2127a363481da08379ce08984a070b6ea4fc211e25350856eb16796e85fc70b828c0ff91997811960425b5af3320 -b2fd6e02bb040c7792171dd309d04610d9cb1e3658778f035b6da98c2f74b01ab00475f6d3e87a7246de8855cdff2ecf82077fc4c9500cb93d080528a46a300c -17dc782a0af27f891a611088baaec5dd3c4b356663c21820e7c23ba2147d5e23a86f6acc69f8f425faebb9a2ccdca07b83a796e7efa88b533e9f8dd0dba6a604 -01c3e91453d11dab4157f8768fdf739603490964481bff2519efc5837aafbc1021623319417694ad1bafb40f055b783af0e89eec27b10a4310ff405a356d4e00 -0020a2f61cdbaef61c5ec9b6f01f10f0a34f2a517fb6df44c5a40d5209367c26c59b82e2976287e034949cf58b69e4cd9c583a4604c2360cccde8d6d6782aa17 -bd072c682328afa542a2f54c46cea6603bd3ea6ad3e0f32c59fc10dc49f53f28e718e70e473e282d1b60b7c0dcb078a526e88375ad812f25ce65f383d9f12d13 -e93c8190ae7b2cb1bb3464078ea54ed8bf3ba7b215695fe6b5382a2c33dafc27196045f0bffbccef76e7ec5aefb9da77d164e38e5f605acfe71ab85d2241f92b -86a913c7e17d6031eb0b21d0d143b04880b859039d2fdfde50360e90d69575135c7fd39966723087b0803bbf4a82738e431f1f74cbe701bd18d0555ac6b6ff0a -c1bf5bea494fe6857f3e3755764b3bafe7addd25355a661b379d07974c9745005f32e4eda45c92bab18fe38ffb4e3494a01dcc1f865da2733a070c84e2f5880d -73aac353b99b73c69ee6d04f69e5e64438b4c0b71866e55ce6fd257539ac0e2dd6390717d4cc3fae02f95582f88e5e0d97363b06ef6b560726e8948c8d59d702 -bda61b02ce38fba27cd5a2360192160de3effcedda337f131025788308a96c0b5ea93f724eb7745e96b023f061fae320eadf61df1db92895dbabc8d24301d21e -ce0c51c55e84e5baa7aa33431f8c8cbf31235dea53c468538de2ea1c3f3bf32c2625dfaeedd7465e35378b8930ddb3d30e4690af41b3e278c7d07fe273f47f14 -2b3fa2edd76b8d0afb468f6ed11c9c19697296bf38a9159522269fdcef74e421ecb01ce2a27b5dc5a1d45e14c20521848baa3e4c91610c23d363cea789fafc17 -e083db09c2fa71d6a483cf9a132e8751e3c669979f0d904de10d82592a7795078bcbd7ff5275c4bc2bd47a0f78c8869ac1ddbea8acebcd12abce594ccfbf7626 -4ade4a0f6dc9d25df5a7afdbd9cacf64324a88e6dc3d2a58829a22ff40b87d098686a500027c9bdb075b434ab0a800ae9d1eff0d3e53c91e1f70a04463fcca0a -3fca256f672af8396e2d0198ec100220be7a76e6e0ef384689711deafba5b00238de6add0cf41d327b2f23105ac46887c63bfd85b3de670fc87aacb64cb18c26 -c46327bfdb7507d4fc40086e08bbb789dddacad3fd9b9325416cbfa8f7a39622fc5332b4c8fe19d6969e5d805625b96b7acc9e15429692b47f642046122cdf02 -7e418bdc3d306c943758521fa09f3d276fa2fad93bf5936044e1e9ec0d73a52e1d5cba210c02e3d1e0b8e79c8b734fe1fa5378a772d84e99dd870fcaa8918614 -f979c62fd32cc7c9a264a881d0607b6d102c9c76252679f52908a0abca0ceb1b5aba8b276161b84c7ee30cb5df1e22de820847a2cd04e79cd84158ec1fcbcf04 -2d001306ddc90e628fb982c9b858a3782d573602416e208e13ffcbe4a2e95e15f037150ae902b2e9bce34d4a8e7c0377d428f63b17abeefb43f621503b25a51f -4111267cdcc1f6ba5c04e279f601e392eab10876cd4f281c81985a7e99b8a52c5a474fdccab6f2aafc3233a32d0e356595fb6102221f2f0c8ee6da084c3a9704 -8ae909bb2ec74b03e12e3fccbcee67286707eec5c6481507eeae5bb06f1be12461d5b15f2712d70c0fa6ee2ba12fad096764a40e1f762a9f30743118db3d9c06 -cd1c1ad017a17eb5a5bb9eba733c0e35725b540d64aa5ba80408ae2ea35db906afff4067d65099c270b0c66c578e4a6db96b5ed980f1bac12c43ca0768470c0a -3b5aaeb212a02d1c7528c5845837b6f1934966a9dba247ccaac1cd2376b3e129013ff547b37cfcbb7b6da94a6e03b07583a4918232f8ab8233f60e483bfde726 -2187551e4e9a848d68bb675aa49e1b7ae7fd07aff2cb3383d6b60ae5041c8d2ad9c832f2929e39d285e76ee4ec124f4720d28320e026b87a2a43f6d5ccc8d701 -7f98725925af497b559e5ed458e1016de02e5498d2247f142d646ce20cf45d1ba9e10b5b91d9f0bb89fb7f1362e245792060e43c4b90c0b116ffe5725c79511a -92b3fd35c6e291f3cdf244146ee83768f26946f3290e03e76921cc22980eba2ef0a4bfdbcccf617275889ace73a2c4e3450e99a14f38a20ad9afa29d81680f1a -bed22d4bd6afe63ec8e684b21d0ead7635f7758013ed5e724e9de8fc82ea0a2c78d68ecfc7339335edb03d009b77f21dd76d571d3dd9aab5fb1d01eba95f3d2f -390a2742c1ec9089b865ee1d6133d6ab099d9bac4601bc2e33e1a856c0871910b481abbb3d17efb8f4e2828ac9dfe33f2b9c96dac7f4e0ed9d56d1fed9c96d1d -af1e9c85f112b8f06bba8c33dbe241ab6d0d9e4a9af2f94e9ba5d90fa0409f04ca411fbb5c1ddd93bb2efea099e5ccfa0065e4f64883fb4808e5945a1af8cc16 -d381e74c3012b695ba86f1a5cd15a7ddaed520bad63706489aac4c20ed820f29bce62739110884c6fe6bf9aadebec8929813a29d687778a09e607d6bec20ff2b -9e4e8ee12ce75934bab0a46e63f40dde6f08ee3010004d80f2b79c3ebca6e91c75bad1021276e73b2ec97a69a1c265722c11a2d2225b63ebec68d932ac885b2c -c1d2f07888ef948a760452d76fa2b3579080e8be54f0fbbc468e174c3e5a0d2bc9dec047ed898fe7903e4fd08fc91c647c4fe9107099465168b340be86439518 -7a6774bbe31c454df9876278bb9c00ed2d814d0a887dea59be710589bcee982625e770d526969a92797adef68105e298340a67de436781c494f9318accc88c09 -31d3ac99e362b7a98343dab39af62bc986f8533711a9381382e3615f25514921ff4f50056bdf72730bf102598b5d8b9e7b153babc0567ac292b2340e188d652d -423e6fbba6817a40ce061a98328061e7f31ec80bfc542e6989f475ff6df94516a02e950d36fe1dd740d6e0c9e3a8499f1d50b0b413a1a281daa6189c4b1ac61d -c61a9425561e3485dc41c888440536ba7c74822e50688767e180e03bf6e14126bf3c21a60e5f573605093409a988062676fedf205add1b2d08dc75e97bd2a226 -7d179fa0b5ad64986c022edcd672645a452ad3488c8527557cce764cbe9b971b60f6d40127f26688db918e16bc34ec68723587b89781fd3b39e6f8d9f2723d26 -c8387b6fa52435ad49ab635c9ca32e203fa6f50def8ad008385a06bb75433e1207d2108f481ff93b6478d828617999b34610e2f68399a181a7c22aa781ceec05 -5c27c72d7d4e3fd0550c782c851bb9f89c1f92094fe79829551f4059e98a111a8601a4ca1acd67b107e402ddf5ea39c62353b5d98afd09e79f027d932d4d731f -59e11e7f13bae2ac50edab244fef7277d189e63f25e56ccc76865e6fa212cd28ecd5eea1a2bbf8762d697a49dfb6958b7edc55e776d8dbc9ff1f7fee0a0b650c -cf091e20b8d26f061f6c2b2ec0dd357318f6d8aa1ee8aaf229b1160ccffeb8088fa25e6743bd05abf03504fc8ef92b1e24196f481636921ec19585eb1e15d61d -eb4ae4c4376624582198c1dccd13172fba0ece97a3c96052908793c4c0bcb82931790ab8a4000d34a449a19650f266d4ed7b2c7ac833bbd9ddbb009722e5670e -d8d6c5b6771a88fe27fa171f162b8f28e728a73b60df28fa33ca0cf92f36322f2f3891669d7c4a799fe7594d93eae9db2bcbca11a2f22d26ffa9c4170079d10f -7a4ed56e52f9500d1d2dfe213416a0a423c25cf96e86441e502a60a362eaff2561cf83badc6292da75ec08c363f82518e4cd8796e9851cfd61f6e67e5ea07d07 -9e4f44519ebd1f2167d9111a2c30d85c3b05796c5d51edc82488ba5031ff180dcfb86560867ea040d8d4d4b029b2364a3318009d5acdcc28fafe54f23052ba0b -93a57f6426c89e150cd635cc8de558c01c8602206d9f479005f6ecc8baf4ef2622cffce1feee6388911858a19ea53cecfb7c1249bfa09d7592f37430c0e53e0f -5e07c2ee612f114fef256f096f2326b0182205b9ec3621ee0d78c1906834672b0465b8325db4f51a67519ced55c4a0d27d974019880ecc2df452a6a5f5710e17 -ec6159dda1348204094273703b1eafd43b6de5d9fffd38782dce73bc075e14172f4a45fac3b3adc9bc7963fd296d1ae1f1e8f076b42149bb8372706484d7c32a -4d9fc718b8d0947e380379779b5b31e70676794ff3b9aa6c4802459c1a643b227f13c5254ad50f9af5deb2e0c4dee47c2990a93ae4d3b868bd137d8c0d6cda2a -90a3a5af424b798de0ece1ec1950f7343d9c9128fd5b148b66e439bdffbe3c2b578eb0fe211681f430e7f0eb0a3777776f35647f658a9d9f5acfd7e8a734a319 -c9e29d304bd828b429c52a38273fd23eb9da814d618c4b41219449a5a24c431a4f9e698d6e6286ab00587adc03cbea0507df32388f7c96d46f0387e54867e624 -81ab8b333226618872002c34b459039842ce5c243662b2ee2a1d243fcd866c290494fbdff5e91259f409f45d4cf532d655536c2cfa0e4cbbac269616cb009c07 -55a5f57ddb2475d225b73220b9f3306fb8677bd5d2fb315195b7ac60b5e2692e8811f44a9b16b8d1b34954427a028a47fd46b4b3fecbc3da79c953ed6b389426 -de4e8eecde3ffce3cab4f29997fc942005cd49d251445361f4d50d29f8b26c13e1e2cee3841411e18e9f401697bbe81bad6228d002ec5c800c72f7f1de519908 -b5d39f13619365515ae48a00ff5f6ecbad15aa4f0045af156580b84747ee480acdd2f01c06191c17882c8872e277f8dae3ee75ae81e901783c2525f27bbf2b1d -8cfdc72b7a7b99879eb83aa89c6c939c43d9cef0e2b46701e0d0edaec5023c2b5c05edb20f76807ff39f84cccbe13d14b71d7018b227fceacaa33cf4d7664411 -90772adb310674c0c5a823cc80e64d04842cf83a9a01588484552038117d302a074264355f86c5c3cce0dfbba6843d1d9bbeb28aa5091410283ce295f6f74501 -c53fa995ae259cea1b526c903a9715973e9c5f3b8969c0f5d9bd147d1f3aff1606583cb86063adcb0a96d38ff586b1cd346726ada7f2354056426ebf8d090828 -03dcf01a4a3557b63334a8843865c97aec9665e2d096ecf71c11a40116263c11128d2f136fe07cc30c6976ae43087e79c18b00647ededa842bfdf62a05a6df0d -d02a7d6badaf35b11130babc5ed64c943275b8b5a1c2247d0ec56d863e9bb902de316a4fbf5ca09d538dfbf0a122921d3d5478172a69f4f4892954b2f96a1a16 -b7bcbcbc0f03cd842c5b68e7cb9c102e01b4e907c9809554d4e82c83e46cda18a7298ff80773d98843147bcdcdaebfc3fc3720adc0125b462e2e5ed0d58d8c15 -e4dd0862fcc34b109fcb584c233ca63670afa500400a62938789975744490529cebed0b5b85038ccf86625bb7787534a1ac9ca076b017c07434d2a94bc67cb09 -5800aa192657b19f98606e63de9f1c4bfb572cd8df890e62a5d4c7fd4a8589230616d8e8a0fe813f2ab94a1b8ad7b56a92a0df13b6f9cd4c869309dc15379a0a -06f0986154796317ef5948fa23aed3b25a47688b25e4be2dbea6d72f2ade932f525854704a7aec4fa4768ce4000c71a3eecbdce00e7f5baade5948297b4b6902 -df80f5e8c202058f0e0ebeb8e0490ce018385d44fc25e14a2a55062e85b166209fe8fe08883ded3efbbc28092717d675c2e91be748a567e89261f59556ece905 -0eb053d6dd2387293be4ce127afbc5b23ef21711419e7c45804b41111042132d76a5636d18ace52d205543ab589bc7c3a76f760f2eb89662d9b5a2bec8f02804 -dccab2a0338202cbac37324c718304f1df559c04c4aed74e8fec1cba8668950b9522d07674aa17b2bff27f53431db90930c5d957821da01dc73b9860844e881b -1f527bde0abcba3ff6b26f6fe52c964c5bf4a7bf0db046b2198a298bcda971184c791b2bfb49d9f22889f7f4472bf5da80c5817a45ab923cffe87c7a3d2d1e01 -c02e7af24c2ac4d599bec2b43b83155669a403d9d11a11e16f9539abfce6c10379507a20f39bf28646f2aaaad5db5593eeacd61abf154fa5a4fefac14865932f -cdbc3b4615ec0955d0ef6ea71705dceb5086f1480ed2f911b9c4c5848dab6f24cd9e112961721e35c05b893ebb35a4e56229b0ee8fdaa0698150dfbc73131218 -e47c0c27101a777c13c670231ba2383b6cd4b845b726686453761fe2e78cf807ebff4ba10ff78671481ec90047614f60d7f0444800c60a1f4915f5cbf05af512 -15628a6fbfd9f59226ab69f54d9d00022f4942fcb094fa974cfa36074ab09a0a8b0792e286a368e3b7ebc856c04070424c572693947574a30c37e074645dfb1e -79cb6e9c6a761d492347882f24db9291426b83cfec0cf6e7868f213d8c2c072346dc271dd3bb4617b768fa5322331a8e63f1ddd88deaf0bd21ee65317fe70d2e -eca47b79baf4b36d8a2d1c6a2d8359a6ea4f2260ff8bacb61e30eb925030b705489e1d45a46275421686b2d90f299e9ea3d8a11135053e26d60070bba6e9e10f -5b9627f683339944f86033343822580cede2571d30122a2dfe019c74e3e29b2b89259f887dd8cb67485ea622dd12ca7f243a0f97ca3aa01c6a99b7023104e416 -d5d0d417453c4639cfcf829df58167628c0c4ba13e5d808d70749cde2f7ba109c899afbacd941a36853116c6b098cc4351351f1556405e1cc25a6dbe529b952e -8fe4a51ff399d885c4c4adaf7c9c99cfcf282ac7221d9932ed921b9c24dcd124a3d20801e9c8ca4d15321370eae4040c25fd64b0eee28bcda9bd8768feae062b -66e79de03e34622e15eb49c6ce41d5a4d265c9bc25fee9fd5ab176dcb59b9e1ff5200220ccb76964a0b3d4dc46f2c3d0896a672d8ae4e85dc0dae68a0784c212 -01752dcfb932c4649ede7222800fbdec2555d74093b602afea0fdbd49ef88921128df16f4ce12afc190640be04341f16ba19fe225ea59a65724904540849502c -c0d17f094dc6c6bf6ee7c7347ec1ea27a80dba0881f8d4451dd57af8694cdc2e11d62b8bb4a1996a4dd6f761c08f4300a7bfef4c9d71d60665859e0b174b5520 -a5455e53cfb493f4561225759d8d2e85b1e099be8646e129e675bf001d55471573a1d3b36b3f2b64b65042734a27afb81ecc358fea0d3ef1c6169f0ce8c84108 -14c978b59a1465e7e23db305ca971e04a62868ec5517392c2256e462547aad06c2abf4f6af75defa92d4db467b294d6a9904d33bcb43347ea59df3202972af04 -e110e84dee589f595503aaa5f38090087466a9a596ff8bc77c10157babdd210ce45a4516d6c7161f7a04e72c773978e87c93b290e01d5521c031b3a60a6a7b21 -e444eb5c3a08e41d90af989b3af336d69234b48af49aae7e4baeda43fbbb1d2a40ca3f7b7514c4957e22fbbf9662deb5eb774a9d86d2d7e0cf7288230dca0600 -2bc287c02f1b5db287ae95c86d09bf597dfaf5b2fd464baf761bb648915c01123d3b5d1dca54a027b69839116f4993e3c88b24d8a4129d36e64b91f1f9ddf820 -b4014b7cab4be725cd7820a45bbc1ce5d302bcd805df62974722498c9c68f118ad03371b67cec46f01761387eed1839a98afe53940d289bbd499ed370f8d710b -0ddd7ac3bceca4046acf2ef628dabcae78356a1aa30de6b304cafea59d6dc31290d89433a49bd168fe448c636a920e5e61af9cc7c780f62911488ebd433d8a1b -da5621c82d39a30931aa96271d4f05101734d1737efb6b7a51ba60ee93f4a01810348a263705d1c67bb284e787af06471b83c9e5b7c97a71d40c8c9a1d208427 -74d1e28e8c78e48b11dc25a6ab160bc765d0fe4d48029a5843909b2a58bd5c0d9b8451d75985b2eac2534df21a894218d21ef234448ac26b0b5d2e21978eb813 -20a1a5a36b9ddb92412af85aafcf06769151ca9ba73aa9a70f10ff292eecb003137a5b44a4ae9a3807915287d367ae606048568cbcf614ddc192ab484372c30c -78388c230c75274cf6bac25950586369c71f792806144f82723be596d9090a2e7e0d0197ed7482981f40515daab287cc58a0c1e6f81560a89c6829d35ee03e00 -2d2cd71e03fadab42ac23bbce9046383525c0ff06984f7e0167c37e058e43f254408aeaab16a0b337099f5b2f87ee24161d53a4cc6f1c18276fd18dc8e307015 -06f0930c24c6661f866f88b170ea1d68407df3cce28a83794175f526d2e38702bd270a781bbd6e8d97ef898b976ee722b3aca7f0e8d2e16906fab309c3f4021e -39b4841a78b578277ad9e78e22371ba0cdaf5973ea855ac3a58cc2350f5d9d0ed4265abceb1dc6eae1125a7b1d432ecff2dbce28d294a87ec2ecce723666a405 -31b35d2f232f30d88f02bb8dfe6ed03abb1b75e5d1a8c457098bc1f4e81e6c0c4bede5e1e7e4a4e925a70540592bb7506e183ece975a069186aa3726debe8e04 -d614c165f3385d4f25ac9870b6af32eec5c1b741442d929dab8d5fed66c8b20b83018059862eee568d277cb46eae49930ca9cb64ec2b6b1b9df68b2d44d20028 -80d384cca61e100c0866c0f04df941683d6d24cc50cc3bdcf1c2d73780166326b4972e422b3496aba775f09fa2d6bbce8fd5b8a5153e23a047934692b93d0f0c -c29dd654a88c4f55fe999476a91a2a07c0ba9f7f197a4714fce962c25fdefd2dc7eccfbe1b7bcb26680321d84aa70001a7497d05f7c85b562be382b8de16df26 -6660757e52d894ee83749409c7080e4e31418dfabc81954578d39e1db83e5b264403c7be3a2ce1f54f6accc03ec665954a35516c4995b6fdeb68872d8626cc07 -29e1da6f81f0734df39b02d862882184742c31156c35f466c414c55e3137c32d3b609236f59d46801ced95e4d474ca9f79c995262ed48b359253335b959f1b04 -f8864aec0b538f22aa98fd770571472a1ef00670d8fa26b6bbe2df3a560eb71d4e86d53376d7177725caef482f0bcac7ab7de69e2b1923af82f856e8dc96e409 -4b40357e990ac1e0da3087c8fe9f0af095a69d38b76d9b49093f0cc6063e87194675f775f04f6dad360965e4cbd56efd75df4bc58fe858460be7759e91edb91f -e3ad656807c3a4bc3d79f563c8e854c8c124b7c27b956037c45b52e4646c1c1946a18f940dd3b3428137d702c5c8b8fb8b79ddd4e64aa155af0fba6e73df6b1c -67f0493fb86053c6ee2ce36eca0170a6cc28e9d3e4d482ba5f5137c64569f71e58fad54e737f36beae35a3a2bbd6db2593b979cbb17c0082cbc5a38ec5805019 -fa58681618c4fb3f0a2763611f4a355b458177be94a629901cf85102c773b426bcfe4e41e772c4c92229d850b694d81702e250015fae1f9333c1e77aaedfde21 -e67de42bafa65e95ff5c6dd36a8ce97ce1d4aa3a1c891dbece148e3cf8b1a72cccc13d2a94c407dd1a389d2fb13726412594e85c8f622b1b8583580af783ee1b -dae43741d3bf85c88e756919ae001ae9938002ce53d9b9c0d643346b0b359c09e8947f093e494d7dc6917075b6da8426e269c7b8403c817fdecbed6c7e3c6223 -3e6bba769a548e0ae740cd0f79024db1e14754aa77ed175ca4d6fef79cfdf523ccc590689d12aeb569f6e41d946ad4d1f7458c1eccdcfc94907e994b435dee23 -f39344ed75f4ac07be9f75fc50aee1364443fd05b1dac28746e5c35ffb5f93096b23b6aa5550e7c543f7a4229f2302905a46be600d94fec88e37045e8a5d7f11 -bfb58843dd5e3284f63ad2a52a2a32cb35459b106f903133d2e0e1462821ee2114ad9c65ea679f88127407dfa672fc1e433c6adaa30d98ff4311d682d3199102 -8a51e6a5f4759776714c6e71a36e3f2303c1e27d3cfc9f4544b6dbc3cb113b1e945dafc94f52e2a1c8dbceae9c1e1bd8e52b8351f80262c353a9e114425bbb00 -9c768ef87bd72e320ec01d8dd34b4188b936f2a671e00d14332cd7410242670d7f07881ca86045f78f0cb7548d3ec1789667712b5a53a5c2bcd95465cccdf909 -a23c83aa86626eaca5ed032f8c208b1f26cafd14774bd5f0db76725d1a1d8f2563fc873ca852f4c1795717cb3b27f59fe004b52ce0f20f6f75fc3e6c52a01b23 -b2b292df7eaa04504b8a39fb1f717aa08fa4f576c6339c9cd29cb6488d6cdc0ddad22a3dbf4d9ce469776c899b7af32c1a274f9ae4257b2c3f8ee2fc0707601f -0cc557000e38dd5fdef8379634591f253563bfe42fe4ed92e4b4ad656fe0362016cddfd1684e716bed5995b83cea6ba6706e312bf63e083f9721e79d66f6162a -75cb48afe21d00a3a4bbe7b8e747df743b439fb8492098685839df8103b7122ad7e0fb2b1a360869528119e0a1e186ecfc28bef9e232acbb3924c0582a63a20a -046c87ef99193445878d36ccd3cf3d4ae63679ad43327d898d933689240310220b6fbadee146e0c8c7dc49bf36ede17d4552401ef22f33860a8385082b3b680f -5b7c12109e380fbc1d60eacda960fde387fe060d93b9f75ec3f2940b36149f24ce0b15dbdfa3a33c754552b559497ed4a68f01fe9570d133132c3ec84a40bc07 -792514d8d704cac3c96a4d20796cbc2ca136ff8cbfefa7aace1b963c17e1262ff5da2761086a78e39381b316bb230fd572585ca352a079327da936316d047305 -a2d8ec93f7c8bde21bf16a9750e97392fad8d1084aa62abb433a0c0227236d1e14f7c53175552e042daab98ad01fec8925685e82f9f4883378b2929de2cb7f11 -e7b90d850303b4f152b8f24d34b5faf50b72672ece57f7964645511e06188b176e295e08ee6b724a0e675f013911bdede77f6cae35187a076f753667426cdf26 -87c69fa905ce0dcf707e0efd0ea0a439b9f6da44d334710262fb0cf029e38d2eda123df2a9ad4c2d3b90325f6f605a9292c0da11d7d451deb67dd8df127bd910 -88d7e15043cfd984f54a7f71d69ecab967734cd32d92d48085ac225133931d0022944962df9e10ac2f1b15a037300b6c9e00b85e58ee157f0fadc26b129f9329 -68b6c52a993ea2bb42af2f09aa37efff85770e8727fed43808c4c2ed18e219135dd4049b1dee52397a90b434fcb13bbb1d08dc2f4bc0e3cadcaa8d498037892a -5df2c0fcf048cf00a2a47bf1ffe630d88693efc5e62a97d4da60964b9192930bf6d8a2c5c025c906d5b10253012d40140dabb7a4428a76abe1d812425946cc26 -4de68c50a88d40d97467fdd60bf9b5cbb152e7c1fe21c03484484e8cde024e054cd98b029df5bb7377be84f9c1f5490dd6ffe8c3bebe7c82d51847cf5e08fc25 -df92dd9df16dd965dbf40e0a096fd04a15bb4926492ed16c15cbbda23f1fa9005858076c84d8022d779ef82d0c07dd651b3df48add4954be9c7c327168d70730 -6c6fcc3aa5f93e088044a1a1110f087080c5b43464f37c76a57e3038b87d221cb8d51e18739a3f98688e88c87c0faf5301dd71b8c1b81840893df84f44cb0608 -2e2185aee5bbd916fe726df7e3382604f8cd839401fdf84507b94b66418e54161a1cba5f89b9c0865609a6188a6c89453c0e20ae3c6674703fe6bd7f1d5dca1b -b8b52fe5f69fddbb0c52d7558becb5acbfda5e9d65254de39868450ce28c480f1b6f16cc187e5514b075ed772d68d3910364924840240c108f3587d118283f09 -a640e07d419771fe42a78fae0ad47df837264b85ed8d7a9a16b9a834bb2234248c1ef1211652185c4e48386ccf2ffee09208c982793f31e84ed8fc6962061422 -55193cd774e75712175cdb8df48924f27f73b819123e30e34fe8a1f8be9e1b25fe3b8e9dfa61fa4cc497c931010730262d57a725ce20fab121a539150bcc522a -bd0edf40d6ed1f00afcdf0ac3af75d077fca1f413ce3c2b2ee731c175465830da828a183f1a756369ff528f9cf86a65502c8dc17d4cfc827a1d21cd2396e6c0c -5de47c5afdc821bf1ac1eec371c03e1140c8c128e9b783cf72648ade751d3f0b413982d10a1dd004a84beef71bc2de8183fbd76ea955f69c5f3aed7dff006628 -8d4ce926748af770d60e45d7ff3f520d55a69341c827fe1db013f97bbe1df80a66cb3e67b4af7cf89c202f59dbe12a504a61c0e34b4f42d60fc553fa167e1f27 -6b987cb82c613301c4ec683d891318316b6b99e550c4156bae363f5ce19c1b26f5009b6d27a60422312e42264aebd164819ac486e0ede453e98f879897c3430a -df1ea2a865887e5262bc893e7db38766f106196c1b644e959559af9deef1b809e72fdefc70cb789fe3d58f2db28991376c8c33a7935861c0349936e876b46b00 -174ff3202c81c7b5972243ea6d01ff22bc9e2f165e49333700a9f3bee69bbb1ead0f8c0523a55a13c20655ebb755d167c97cdf5ee1badb5e46bfc0669941f410 -b9d23d6aa1119ebed18cf9c0b45bb4d41bec2d929245090911b6b451411ac9104695431aba046a09a3d0ccd1f7453015c9023c68dad5e1b28d9d619388a20e19 -736d7cc6456718816cfe1c784b032f61d9c658848b905d140405d235837c950864758abc6147f8463b00d9f95b8cbe08c6c86ebfedf20e799c2369f942dc2e16 -5814c448d67d2ffed4a04acf0fad948ba5a240211c27977904ccaecc0d4e75214a52d6e5df04a663ee83bae4d6fe3daecb16d8ba16b6564f829206b25a185a08 -0e4ff5ac6e6183d883022a802b1c74e16deb1f9538bf070b28c2c8c4f533741b298560ea2d2a51f093be37764b2a34edfa0bd646ed01b33a86e85b127795e200 -d8e5d51f49650d999cb6db4b5e283ac5b775306c250b271495f1a0dd49c72510be20da15f9d0f11f8e33c901cd5a16a940fb81f5fb5947100602e0f8abd2820a -eb3b9d8ca312b7ca90d71f04a14cf610ab4a8181159e7e3ef30fba35c89505304f2c8b2fbf7d1fdacd9eb1114615f1db911c69137761f739d98f00284654de0d -77682f544f28713714966d4cbaeaadb02ae38b2e963c05c3c567904b10cc220d057e1a63335dff39c11f4754d8391c367cafaa93572fcf0913c9de15b8604c22 -441e49ea46acc836da342c01f653bef0186c123082d454cf54f5768bace1d82ac12bdbbac1827ba2a3ee3e42b453b21a025f195e87b38b08cda8e2637d2ec12e -5b0793488f25229e96c64c019ff2c3797f0423fa528866188c9170a02eba2106b1177cba2112177382997059949334124cc1637a90b5df44e511fe0c695b510f -4715137f7e0260a85c949161444393592e553e70ec09e4bbe9a0c8db5d7665201c0d2dd5403d297289e8d48be28957670055fb0550b33e55198adca103767102 -eb855a39d4bbf24f89eab0ec1aa33c4a753378cbb9732a951f856ae319e2b5213bd49b15ddb6323cd128017a68b7df12930c974167c91d99111c77aa512fcc1b -ed46e535178761bb18e83e62149337fd20b9b02a7dfa46f3b80c452261eed815c4e8ed7ec6ad26a5afbf3ef1df9753aac791272d44b4675856534114b4c0081b -665ac446e77b031e43a760081d8829e4736408755d272c1435d7f4bf41c72710a96c4713a0d2e320d3c9ebe5dddfb5b0b736891ff605daa8ffe5d688700a132b -461ef155c6387f8323da6c6c63df7ce48f20b1c1facb3ef750e3aaed773bbe2bc25851b1778ae5692993af42586fc52dacf5213126ffdc0a0ec6b99823dcbb09 -30d79a8b50d8a4b60be3ba4a6e566e8dd212104c79dcda411b5542971fd092277b5e10df603a2b2fa35d31274ce08743f63e7cd02cf18ce3a78ec47f43ba5818 -dca5acc82b2e4d1bb3b5ba4e5c0f745b326bcb29b50f5aaf795ca46141a20917f959b85dd01b0d332c5cb14bd2b6d910f0fd2a43d847a34231f56ffeda0d9910 -7c495eb0d9cc2ab87ac3e43eff8974c05af52106daaf3c752fe62a9f4e53de13faecef5a08856ba233188554d40a2107818a466cf3e5a0c15e2dc1fb5f5a1e14 -52eee245f8b527d1e58ec3697718c79548c59971b59a17eeab2bded15453850d4903107618c9e11b9227c70ccfe99e096b16e7aa253b1fb109b19b459652921d -1e1a34445b3680f77c6988eb3b7c0a8cdb86d78da97165c05585045ee799ca138a620a256d1e5b40bea29d04ac52e25ba83d7395c5b031a4e0262aad18a31b16 -066cfa20294668d83b6a27928020bbef78f317501bfaf2112572a0c66d0562212d48ea88e1c86b8565d8ba0e353e16405d527e23546f7816e1394dc733a4242e -f2a6d3a72d990be0d4d3438e6b64588d2953ca85229612671ecc5bf17fbffd0dfd3f209985ee141efe91ba4e40877d4d81048eab079b1585ec2c850ead86691c -944b8e9fd4295ed096de291c459433155b3694598f00925025b80afada67fc0718ad3bbd6f99c643a15e0a5fe80a9ea0cbf15469690fa42fd07ece64b4562b24 -63f25db7e1e13b33f5736730f0d5ee8a20d6d62e5225b1b80b1335855b147d1d1e58afc214727a10571b4789b2b2ea25197ed62de9169b940a2d55e404878924 -6b0af3ea6c8744adde0a1b4af0fdc49d2bc027c666081e75c2dfc71e552a692651533fc7840ca86ceb012b26fcf51c427d393940bb113ea95f6b6757d4e2a813 -59c30d31ec9b5bce641d7f5d3e34d024c6c11db8a28e48cb3e45170fca42531576f3ea1e6b612e01f398447a37007cb51879ac00ab5412a30f3f02a012d81e1f -c44ff4fa066ac0d86721401b4214c799ee4aebcc615527e1bf743581a6f4f10c3514be188b90779efc590f3edcf5960214972d75c5abaa2aa63da0203e32582a -0eb750b6e71d47523324ed69676df0a405c06bd7f9f2534cca19c9619b33072b8f5165cfe68b1e3a0f075a6c6bccd94f3e370d82dfe10452d5176f392c393213 -c95e7523026551645888c534005d969e92654ee2586ab0821953f41067d034169efc90f902f7ba29bff2a20f840025bc6c3a2063569023ae79a8bca1ea58ff1b -93d129fc19f1842d6ac9d80f21eacb3c46d14f22d8a29958381d75cfeaceff17196a3723c1421b9adf090355858c5a1ed2d2f45d1a0a1a19384e34272cf3aa07 -f83210cdeef27321b7cdbcd9fc24774aea4e708f99436715ff214c1947d0dc09f4865f6815f59af5eb47bf45b954261b8cf50de62a7ec0d663285cf145a71e05 -2319a8a34bf937dff0bd6720d7ebb272953c47538570478ccde02a387669400c1c551bbd7ea365747162e8d7852508de967637261e8d6ee22e3cdf823f00c528 -b6c62f8f30a051d5403e85ba9b40616a218758588ea7e7bd5cf120879933ec00373da4a8bb74598df7211aad7ef6ffa53fd2eddf096e5f2b967ef13ed8c1f215 -8ffb12d27133606f06f1faebb0f9d0bf86ee48bbc46d51a14fcfa0a6e3927d0fe6957a3268126b22114a05c26a754cdb1f1ffdc4d7b487d9ce7b1be7d4a8302f -24f5d7e4e4c1f8f8b9ffee259e6101b0043dedb8b42404e22cf07507355f062319b9f6853a802f2e6748261431a6889ae3a62d59eaab0545e4842398d28ba40d -d211ad7ac06e1a8ce35e9b4b40b8b520f61aae981f34377d332f7e4a6faf2a0fe0bcfc0d8a62118c440fbe85ecba9ad415ddaebe87b50b569189fee6e0429c04 -357cca83db2be5658ad4ce8788d12e02119be6bf7006be07e858a1724e582421edd936d0cf89cdec2beadad5bcb4fbd641433e54c7a7ed9446558d742a62ff0e -41da3d2a967405d6d09aea96d644d514a57d5fc7c00c0f660a304fd64379f60f12b65e6d9a3c272d4a0e1b2c4368c9d7ddf43e8e8f83306434fd9da038d5b713 -18676b05b2c7710f6abfb18a59e78e1c99d6444b128a90bc9e6475e2e7b78d0c04055d24efe05b063022dbbea7fb9882ec5d2824ed56617f5c548d0a19664827 -970810d6c6331324c3ea158e0ae90f9f2fa14a3ae915a2ab9f58ad0e2266e72f0cf22c6308f67d3d316ed7dcbea24be74a25377b3524ff906ee5f4816bb2fb05 -ea817e1bc552ce202a7d3ffe274a8c2854d4854424561a70f54379ce40e6000393f02c372c3b5f11661b6c96ed0440f78c4acdb7238f065daa3b3a4a3c2f3d2a -ad977919d2d174ba9cdc0e85ecbe775752c328da27940e2d43b965a02161bb0fdc5088e0d1c6813dad284d47fa96b04b8ced912942e0ae8d56c61d9d06809711 -934173ad2dd2b7f0962257fdde1d47b587a76a93bb90b04ea3b0cbd7d085872e1d007ea36e723d929449c7b58040335ff2029d0c4c253f93443837e8b3c56128 -d83e2eaed2d84b6853f79eaef173e5fb4c0163c78b68595dac343db6e8a5fc0aa7d9ceb3b5b5aa80cb8289d247d4b72d292027f7e24f3f807e4dca584f06f905 -33846dc6f9e1f2c6037ad3672b318ca333308b8be0bde74bd23812db9270ea284efebd3299b38061a9049d87fdc99d509a11bd81a280278f7e8758feb769e305 -01c053b65fdc394fd18277f8ed34de57d79c738bf2fa0c7ea57ebbfcdfea2a13937dfccedc18766b836f8c2c1da29c379f9427461496542e9817688a87731711 -b162afc0356f24d5f4229c354a1fc2a588d0f2b05be2e753fd37d18958748211b69e645022eaecc3fe3b471524cb2be1ad264b404b3965de2087f53c4f988015 -d4f6c9a7c8784652bd01b0726d20c190d2bd9e2c4bab0cf75b1830178060af2d12f8dcbd9e5eae90a0de71eef01dab0a97147fbe558887c2dbcc9492522bb019 -ad29b401e5c0139c0e0d0ae2ae8d95868132ef4c10d6fc24129686e9f2f3eb2aea9cc87f73d74ecb0dcc04eb6fd0ed08be6440302ab907e6f3c3c14f641fbf26 -07eff24ae937e3633a3ba650dd3ad87149bed3ca59743ef7845a242e7400ae1e9d650576dae9f26a18d8794f57cad1db91de9f2c20e7212fd21d13cd3c04092a -096773899ab9ffe1780b1242dbfd4e1125fd0c20f62bbcf985a2a5440cf69b287d7616a561268ad93cf36ebbb3c3e03492293d4abb3850efdb87fe94dc024b1a -8a7e86e4541515b61088c56e3d604082865b91cffb90cbf6df76c85e6c28f30c6adf3eda5dea502c6a02d6f08c5e8ae102f6d0740b406e24edc974a1efb75808 -c22ed2a87ebdc8bb186353302a6720cee41a0320f01e435da4758af1cdbd9a01c70d97f2d83229ff69fa9c6a27922f3c2d659d4fdab67ee990b2117b123ff400 -b72b645e786c46dce79df32fd443c8be3e198ada73f26deec57641582e6408166490b1374b6aee2a6e407b6f05fd7c64d6dc9e5ee454e8365d01a86253c5dc0b -c96f24b986da5752e67d85eaadd181f7edae1fb6bf3bb6d8453dd589df60811bce2e3e0ffc00e920ad9fccfa63c4a9461626bda522b7d00fd8810d78ef1ce725 -46402f9c374b1cd761dce2894c3565b35cac141121f281946703bb484921892b6d2b048a681bfedebd7848d20e6f852be7ed058e485ca69ba9aa8ec598969503 -ff57c1f0ea47fc569037e067ab21036eaa1bd5707c35253fb559a9b6d1c25c2073588d9777f30b7db2176cb56f8030ac468e236cc3bd191c52a9a955a306a11f -37d7f6472c036e402ba896b7865a3203e4b5ec203f1227e2c13e7c968ec65d14add756f92b17cc66630a84beec29b9bd39589c695a568d576958dc681cbdf108 -020fe09662fdea51cdfc9959302b88fb0738dbaae46b5261db014d0165b69120ade51134160916263745fca17065c710d90652d61a8c3ff2e88967a0d5f27914 -8d86906a2c270a4980998771fb2631d8cbe3b4c1d8ab0c01835c4e96dafaf823255802469997fc806b07afa223ac6bd7c6cac56a3eb9cbf1d21292d653570802 -c895741599bf7d8d3cc260cafcb782b60e648b79c657a939360efaad67e16800eede1d0d80e039ddf8898d762d85ea9a721999d2500fcd16f4f55f30b520ac06 -72f67589f4fc2aa27e359a07150030cca7870df32ca0dd142fa8a15990e56e1529569141ef5af95f8bd2263804536606cc34671b93961be2713d0ce71a148309 -542d032a7811afc96a8458ed1c3fbba516c03174acb24e06c154b93927c30507ea8d17f28905cfbbcc780173cd84d910157d9ea120bbed228191fd6656c4e30e -8c609de0c970529bd8513633e8626f0b0a4d790325c1c2e2abfdaa0b56ebab2459d27862f8aead201fd6c96c0ca3a849967b28becf59391ba96f01250cc67029 -399ff36d1a2b7b589f0f1784a53fedd3280584d9e77d65b0665c746286a97c0200c49564b4b1333219c3f7e37b420c5f2b358f8ad801bfe6062f835a466a8c1b -0be982cb37fea1271303ec1e6ba57761c7622c81dbce4517d54fa06ed86d3f288b4d58896df0e31e3d77654712f9237a6619e1981c4ae6d8db5fd4c0f7219610 -652fe87a0d5604fdb8916f638d1c1051c6362660f41312bd50a7d83c978fb32f235a4fd5bce9f879ff7fddcbc6b3e3dd5d22b9a5135ede801365dcb35f547312 -2a6a1c48d8972897d098b96ae7c0a577a832834635c8a3ed23de6378a5d3892122b282407d5d70cf40ec5d565af2e76c561b70127b97e2906862de261741271a -40ce223ba0a85e74761c2a177bef7577788f903709e9b0439295c69a99d54001e84dc8c1a507206ecb2c681426726bfe122a34c70da5cf701f61b3802cc91824 -a090977f29b5ab538ed3abb2696180ec7d163d1d2a61170a4b27ff72a749e11a7cea5270d416a949f2b8a83789cf2e665bd2396199af4822dcc82d23d40fc00d -b34bb794de5cecf91638fb839a6e81bd1f5190908bd5c8248ac552ac529b701aada3e899ae07a8cfd4f3399d2a7eff3db70a97e8312257dd1176be6fa78b1e2d -c712ed4414ae671cfaf9eecc68e0935605aa548468f6c833705a1e0d067864248909785817bea559ee50573d980a8c69e3442802a62f4b5d4f8ff7c76b28a804 -97550599b2162beac38180f238f9a8a5d594005ca834ede649a8abd6cfdaf42b15e0547b3297f5e20be039455ae2f39a39988683131975e6c09dc98a4d25522b -12c02bcebca53ec2f074686593560790404903211fed56e09d4acf7e1c1aaa1ae5d00824a8aa68bb02ae2ec08fa795d18038dd1a45803b374cd5364c8b44bf25 -ffa86c1689564028d93881e84ab885a27b718ef874b97693dff6e3bdd912a30b4367e667e38ead55c6695d98f5f1508030c198205f28bd8c45a3fec368801d20 -1174fba732847174f1b2fecd66762ed54eaea6c46ad08e79b90cf0883abb4525b08de4bba4cb087817d6cddca58d737a9db6fa0948de8d0edcc0e7a1d01cdf01 -9a2ce08c97752f4d2993f122b5381d495f8d71c9d17cc611debc94f32e8b301e3e747b54cc3617c3f2c7de8c5a1e6a403f299a8d135a53f016c14929ed3c9202 -2875781c5d395fc9daceffcdda133d31fdde6b50d4a3c2b760643550ad0a0821b3f6b0502690e6d7060c7a72906f479f21073d6618bf759dd96c73a38893c803 -f8fa6259784907e23ab1c44681d43fc7422a93ce437ae9f11db5a5152925722020b8829d8b141efeb74d6caa30f652e3e7aa752df62916c3534e375a4467711d -053a9141f7f2ac9ff36ba1901765d39cc9d3d432e056539cb2a21066b137e1020c312f441231740d5b21628130e3b8a3e8964a48f11b6635917e87214f33d608 -183934165cf5047d1a55f2e8dc2e9608e20628ef1062bd842bdb58e0e8c7ec2d0fe35f3da7e976ce9cb14201fd8e2b06f444bdbc8f2f690e9086cf149df5dd17 -72eda9d7ebb673adcad16c7fb372b57427ac83e84fee57590e17f16738489b0859dd9f7ea288b949d57cc756357427b080b25b04d13dd9a971cab65c64101315 -0c2493d1f0b1246908d7759f4e8bd14e003c971f9b9fca96803ddde57b1f2314eebf1f352ca1d53425fe5c1fb5f2f1f891ea48bf24e3b0ab2da90702c1a8dd28 -0a518d74cdbc170f17bf43d7b9c6902192144ad7ac67165a550d8544c0a4cf1558cf8c8639700f118fd13ca26b44109c60a609a852050cde532ac4c5e2704000 -29656a5416a7fb729e9a4f5bd209a70c75513f1a3ea2c862e81622397af68612d6b8d5b53acd3777c9b3822691d8c317ee38e52c6d786ba4e19471b83498b42b -5e1e3dc70410c238b2cc507d21008f2c8c19c881c40355e3ccddf98796f0d503ee85e31e35c14062c9338734f402aa5cd6a964afd2a1d460feacbf6ee953f72f -bf29e53cc84b62061b929604829f16e02543547e8bb95b73f7d18f4b0216320f25e181bf9db04e591642cfab201199deca92dbc3aca6ff344ccf6884e798790a -56595d33dbedf57858b23b30a852a04efd1afc040e2b9fa40d4eb89fc70cc90f3bbce80fdb574124bb7dfdb7ebedb5f47143a7a6950c33e651e4231e234ab02f -3e6c49d516af2d2b808745af2068c37cc2f962159348eb9881202eaf7f8f8b2b08099c55c0c50c8974529de96a2dfbf67bf5b587a59014be45fbd88cd911a120 -cdecefa0ebe79a43fc96f890dd38b0cb64bcfcdb9b54bc610c21a945785f4a05714cb6538835b246e4c921f6d7e4a016f549f9e70d42c77037f7718379db3b27 -41f45e926ce61ed6dc55b0bcd0cf7d784b76d5ac44462526a8333177a714be03fbf1508d9b452c4dd0f21a5209323a77bcabeced50f713e6ef3822d1576de50c -9764a6a752db7bbae89a0491c9d0f9f04e6937740da1918be955daf55e1b452e2bf7cf6eddc4488774e4a7c3b2fe00b8c634500937b3719a95a3eba39f792418 -648044c7b7fb1554132d44b45d633b19c78ed07f5ea8ab22c8fc18fc7e6c41001bd4c70146df9a291a36b5c8e5b6ff6e207a92ec01696620982a3e49a2647621 -f49ff4cf8fbb682baf66993ad4089b9b105d67b17a4e93855fc93cf3a2e21c0a189c7d2113769bf5ef8cd27ff1f374dc726503a83be47544a458cf5c5acdaf02 -b3b9fac2ea485bbe7d0592ec2d4ecd8f28389d7c9018a24d6acbc9273522b009ee3d8be0ce507f2205d5f20e4cda08fe62b172e3bcfa119f47714723c3acf915 -7a98f9ba8b9568489b5bd4ab9a179dbd92548978b6f05802c84992933285fa115f101a7a326f96ab58b1e03f87aa3aa1beaf345212db654f1bfc3c26a3008307 -d7f99ec46ab26d07d7660fe77cb7fc0561bde21bac1a6d8069cb827475b91e0cf6aa107279beeb3ec1a01bde861ba317cc50d9647b96e7495d129ec7ab461c00 -60545ad442b9ab1f158104211fa3160eec4dbf31efa11cf4f48be42e9c9f072caa1724577d31bdfd5bf485c6fadfb27a02800b699e082ce8bcd96f0fb4d1252c -1b690e4243144186272e766a65ce3b7c73b28c3f177bd35028846477f204f50cf503a4a3a089b55973f3c84bc621ee9de367d0c8b15cba125ab9000f25559d2f -ee467e1833174d8d8f612c2daec086d2f4eac5eedfef33dd884bb7c89863a926151d5a75646ea2c578904867c450d67743ed6556026936bf0e020fea48b7d50a -4d15ce51b039265dcf62910de372e37b1a7a4f95cf051bce949a1a528f148d10688de32a84c0bb562f0f372849ca7b06cd829d55cebffeb27594a0999b7dfd0d -d60be4133d4944db0e4f0df773d3b876ea2318c5d8f4d3fdc1a36b0304f6dc15605cfedaa9361e6fa0d1f44eb4595188a02927f6bbc806a80f785bc2ea9fd821 -292f4f0835b8de6f8ef45fc3e111605861a5fb4327aae13925b13a7464543216d7dc1621db66a13f7c6ce522138986b4d356dd6d21816c96e62801ab9977121e -a8c9b74b56ae72fb614379de68d96c5d77adf7412e5e2c5d5820e6090a2c4c2fd410007eb5e8a72792abfb2967c237e18442ca7e4c9852b3ef63807fcb60e11a -350f0e9eccfde40fff50e5b4ed35bf1c6f7ddd7c1175b41d4ed7fa8d5823e02b80f2c8882e496b1b70901f2abdda190638d0a59a929bad46864c113a18a9581f -4e813fb4f0acfb07911384150d927ab9d4b13570d3613fc0d38275963a55f2054c6d8aee098cd5ae57fc1553b95d5e790085d86f7ea9b9df9a243c7baf6b5127 -4382af4481028f093ecf6aec74d5a515958497825d771492810569be8fe79721371a95e73bbd1c8a68bfa45a44885a5c7127dd76c11e0085fe31540047421c15 -64eeb4f253d5b865bd1eb540a5a54af693dae0815591d545303c3278337311302ed667fe4185d8eb39d4637172c6286821fef233a57fe0f60525348968ce761f -79e5b70e5a1271eaf569ea301a90fddc792b93c6024ad6f643308a7f1fac6215e3df720c01ab712a9a536be0476fb62ced9b09493a0eb237b0d89c5b70f8242f -6fe52123fbc6b91edbeb5b6f244889a1540de9d7bea3a8acbfa971a03d859f059a08a3b1ad6f3597e811dc8023f1456d7b19381b5d56d2b0da946615159b281a -7d4b4e661d37e7f381d3308c0d7196dc01eacc360206e6e3beb5a82f7a2dae0920207272f7ac0509e8563a5cbbe551e0584106d21b488c6224339e1f6605ca0d -5bb4f8b695994ddc14af8bb4783ee36a2e030aa215b14fc48f290a868968951cefbe90e69586d0443aeaff3920c21e41d1c937eb6d6560fc6bc48ee7d9508c1a -7777029a1b61d85a1e1e1c62b670bcdaa9b588a06df00bac7f0029aaada29b02e7ab73644cbe219425eb67fae4eeccd4c96daf2004605bb04baa230dd0992423 -9e92f9a8bd2aea56b2393150f7e08aeb356ef2255dc066ad395d68795f4705279015ecf3e34df63cd74b6ce639389a3061e02610250c00fc7961d095f41d4701 -f0688211f53c5d3c5c9433f057c511dbcead76f63b332247ce550e69bf6eb3259c339d73a86c63983ef797fd385111dcafd3467d85994a5b1d2de513759a370c -0ba425889695d2a39bf53decf58a97c435dd9f4781f7c71f9d3bade7a74246175071b11108ba572fafbfcc11bd0a2c4daa5fdf791d276ab918edc315d5465b16 -9f32a40995386129722cb84bc978e59107a6c43386b3f832744f4f04de151d0fb690aa85f8b1e09b1fd80306f197176fa12fe7f4122ff1036c2d00743cbf801c -b642a7ec399eeb74a5e8b869e07952e95ee27e152f909cfa8c0b97653ba28c08b907d1e4524f7b7e3eeafa8c9004da3eb2f7220e1ea609b49daf72d859c41319 -9fae96dba902c92b60cd15fa1945a236909ebaf2c1ec2271a904e16df6aad2209d1584892ac59db6813ffe4d7e635ee905df36b209eb2d5ec162d7c5030d0412 -20b6f7f6698e82bd25629e23cb23b8c58b9259c23da672071bed47d19e7dcc22aaccc262f53dfc26788b5fc262a5c62396c6a975830898e407c892d9b3966c00 -ddf64c2d6705887d499f8991753f6e852b07c0938a779a09287788fd33598c0f351ce4da548cea79c6a504181dc55471d7fe0129eb4cb33f97cc14b7f3d57618 -eeb160c4ca4f1afc1801f8a362c0d87be18b9c16996db82860d42b0a80c4182e68bda2d0532186e0ad20c961e4bd991647767b2acf9ba789afc0b68d3bf59f24 -75deaa67b1513f6fb5806fa58861ba0d4fe6280657db2c8217b81c2ca210e021a80ccce3e56a3dcf45c920e585dca9547b4c34c23dea3ef3ef771e26c57b9518 -bcddc800947d44095503775f70f0b2d1ecd9bfb8e71dfb87c3455a8002111c0fd856655c27d706c8ff3dc0c43d1338f99c877960b4f22c23ba6bb0815cf15511 -0bdc560c1aa4db98103323880a8591bb8202ff215cb955afe6780d30edfafb2afa4669be134870fda9215eee5480474568adc773dad158b1fee4626cefd7dc16 -ef2cdfa59b2dc5bfc359d43ab5c63a93562e81fd1f3ca4cdecf30af641ca2f2a0e7d206b89a884d198a9cd1e59ca4153e798431c7199daaf6de75ff07b809126 -6505f214f79aba124e29d0dade87064a33f47fc5587d049e0ba55a319bf03d0b7c97e75a59801fcde645d6d2f1afb4f13170817a40c092ee55761f1e901c9501 -334def2d3775128d1cb2902cacd28a687df117e2a25f096843ed83f01be81c08c75b510578f5c2c8ca02932ebe4c644bbf8fa583d983f3f39f5185ef6967d518 -f377405f33f9897c6879fc9fc214e095a680a73e028a7c1ab35510b7c3b1e10de60b740b386c174838b2a3502e600b508b5a1e3467e807780ff23e52116fc52a -28197d71bbe48f7901b6b3d08e08990515e934da06a3b10d9f4c0e7f5f3eac2d853bdaae6c4611719e76cbc0a4508aa2df0a384a94b9e60006c9c6fdab457a01 -77a01e0a71b500a9e390d2fda8daf1540578d3424f11b62e2e20f6e82a18000772a64a796297b4a2af971a72bede1b68f9d71eb6b58f9bfef1789b612ad46813 -c909a9b40d4ae0e356f642c6a5d38b8efe8f76d41791329e707436aeecd6440d03f2999d077648a46ddb04a3c9f58567853203f580fe0d87123c565f89df022c -6f6559ccb06d3b8e604618371f84fb0f5cd08807fe26309be03ae4a5d0200e2c63e949de1f0660de3d1e39fde5b705c9685c1e672a5dabd8fd893914bb2ed225 -c465c0f16f0beada5b8c5f67e8cacdfd26530bbe791ca7f108c1631f9d40551d401685619253213d5bd8bac4706e4ba0acae9f9a99e4f4cf2e0ccca1a0ce6401 -be635d037d402ddfb9838906a2ecf2bc1605456770584182828f3ffb132de82f1f4460cfd28e3d2e6460ff6fbc3540d1e3391f32a799759a720a63dca57e260f -9de4b20a2c02bf1652a4b83c8fcbbd52b4f62f9c9225727ef1ad0097e9c8b221fbd4250363eeaec52ce876b3bc4c1b927deb7b2420b026f0ac08977af27cc725 -694bbc4a5359478e6949270a38f0d3ac7cf340dd3bfd2a418291d592e27b351602605422d8f40e89564c61fe101fcaac35c0e444201c5de2f57932c6d6214d2a -553b2fad34c8cc3c5a908dfc5a2fc24515e40c36f24f8e484dfd6d0176bfcd2195e3408beaba06aad65e5e50f06dd2b3442615a329192592d9eef7ae44a3840f -8909dc45b1b9b8cc9204494717c97430f30546b0d6fc9930149b0bdae650db1e802fcb119c6d5c37a090416a05ab2a70024f3cd306f249f99d8a3d3a28a4a02d -a7a05f26f6eb7a4b44ff7f39a9116baf0e2b4ede8c0eadaad9c5c5fe42e017272ee4f7a154c941303e186807276a811636d18599f6039eeca571c14133bb1028 -f59f987aad1112d1913082704ccc74427dfb9db9898a2658695327989b4ca512437676f60bc23ce50d23afb99428ca4d1550061496bcd5174ac87b597ac0f624 -35254a342a1d8f9c132d7d92e3e991a2ec9b4178bbc17b09ae918dce949b06237c01c441ae4737c11edd337c4ecd81827c722da6c827d7980691db3def4f4d07 -71f26ce66beb07af3c5257e5c88a2451558302c115604f617219a43ec5ce6e11c1526a8406fdc74998514a95368c77a6907ae46cdf32b5d10a1aa45a597b3d2a -ba65838d6d373397ec89fd3cc1f95a698ba4cf3a237256d2f87e2ba194cda90f26f94a1fd885cb5dbe5fbbd39882932a9e6f89a21a1426b5b806fccd28219b1d -960fb8db3c130d435a407c8b0dd8868ee5c34397dc00b5332f3e02767a6e471c41366c2eb1fb52b69ae262a9b3559d25b7fee1b79a1b03cb3c60cfb9ec0f5d30 -6a43462387c125c1b57e0ba1698b1a8f73c0fe5866cfb1fa69a78599deb243212b9f62bc237b7eb97240e2e606e153e482b4c087c41036c7810935cb83fca31c -bf474f4776be1919f1c02294ceeaa2e15e3430dead96194c38e3a7f12d59fa0d51f23e165b64afe50e75753be47ede5fc7c4143940229c51a6051980a3b8fb23 -587c99afe161aa9ff5a64af9e5b4f835f9d00a61d428aca80eafc83bc0d11821cfedb73a8334a97cfe919cdf9bd78a92a9c6103d0f8da531d03f274c80d00427 -cafecd48e2da7d58e4ac2a89b3b70c43ea2d10135502a7a3c21fefa3f4d4972ac68d8d6ed49176db86f4810efea54f51568f0a036d7955897212682379ef1b25 -54f6313f26313d1639076eace46b2cc274206a82ce2337783deaf772b59b850eabff69f7fcb9acde3a7bc56ce3ec6d50005e25c1e7ec9e27438a091e1efe0b0b -79a2fe9b9a73d9d00710988ed211b292a288a4958c6e0a31384f61d7cbef022724afe1defedb1a978347677624dcd1301ec7121287b7b1dc6c0395e0d98e522c -1a69723026bd8c3fc4f33bd3a4abce9ef65d30694d3aa5b580566426fd2b922c4061c65fd6923dd612fe78aa29924cbc00385f3d3c82a8ef98585be85fab1f16 -6b76b6b1ff0a5d09ac886fcbd94e650b72e43b126995657e7cacf97b9ae179057a13b3a0d6df150c80cb7572b1ee8e5fa65613aea097d85bc2991ef303ee9822 -ba7ecab7103a0ff8621b9d50d6770922235b0a25624df03b2347b250a94446122c73c0d380c47bfc6202cfa6a0c24446c5545b5a35e923192b1f487e09a8d700 -219ec03bbfcdc962f297b19d5898af3d95ecea2a17a1e263881b63e956217219bbdd07956ee72c043fc576bb0098d658e845b765ee42def432724df04cc60319 -585ef5d52c87a11e4c48268a2eb2daa829b1b98f6c92410344ace3db30506414fc05c0d7e35d6f47ea89094fc932930f5c418dddf34ce083513187db6a8e7213 -816d9f6749faf538d0b3923307ad3fdb011ba5025cd75eccf44ac536a15b0f115ee89432b74f7170bdc6e1bfe321e4c63e853336e693e61c31f65239b5e63925 -1747610b9fa77ae9274707cf9d6d9aee12c8228525fe6ed065e5439498076d2739f56f25e3391a68a01d42c2505603d40a5d9bab7752e06f4c354f4911eef52a -6e95f96adad93be1ec2b2c2ad712be8783082290ef4f28cf70ccd956feac542f97064d677fbc8fd4b2172153eba9c3f97ede51072e5ff4c4d34198be687a0720 -10590eb2448196a21e4349fca5abb9a1db5586700de424f97fdaa53bce082a1a8985e36c7d485cc1dbad4bd104ddb58f7d8ca19242999c5526d166566d33e307 -a291c328f9f3b12e66f259e5a90c03a0f9dc686d899bffb51bab22a8d0f1502cac818d216a21d098de36b75beafbfb0cb15054c6c0faa19c98487c3f5d54c900 -bd30fce31549356b8f57a86510a84db8757f9c0b2ab9f1084f51672c80c9171636a6b4cdeb9a826720db65def77c33b903bb82b568d708276d32216206e19506 -f0db1ddc6050bb5bdb1311dfb1b5c891f6bc3caaa422e11799f0dfac61d63d17a2051396c5b1a01f177a04a35f5d637330438e5476433da567c4fcecd4e91405 -11b2b970520ac52032ee3dea138184f48f8903d45579a1c98aa9ccf4eab3551d0bb7ba5802950bb88facf2dde72a1ebc6b142bf1f8f5b3ec901bfcb0a5e9da1b -6c96ae96873bb33e6c493d53468ca5d7e6c9bebc126424814edcd17f6d406f0cb3ccd0ebee36e3d7b72e4711de6bb73eadef766bd086e7d4815dcc63b2c5d410 -828f1bc2d3a13848845e8829ddbf47c3721678ddeda9a950766501c34b9eda0b7b0a43dd7b53f6b80ab0899c65dd929abcb4790716101ef2455ab18073a9ec00 -65c03e057978644ced0180679a3ccee8e30dfdccc70a00b036164cae6e59c027a4d14e74d28815d10150187ae341aa4d17a78355830de1ddf505266750639f05 -af902bc9d51f2652e4241c8d71e709b01ea5756253552d55a8d8769746d4030bc136ddfd82faed08e88275b72333251730860f3c8f23abfe18420285c4af9c14 -62028e007aebcfb84d356fe7d65c6077557ee7a7ae71f8831a5a527c9d206c2a9c93f1e4fac15a4cfa4d96686fb19fbd73c2c7960f968e05bccf39c555a8ad0c -bbd711a522437534ede8a8d0822827fcbeeacb041b136282276ae252627eee194507eb9e7ef9727bc603c5aefcc5584db26490b4c5ff19bb98754b254d6b122c -defbf5dff51275ac2d0d6a1d4411ab7dd9d1a2cf841cbe2dae8c93d47a84421d6adaff8c4abc4fac138b2de73bd2680ee9291c5b19ca3a8b8e73aa5d9101d000 -983729f7d3d114542fe0a2d89f17d210ac9b0463fcf194dbc243517800ce1a1e5bd76bda468be29ae2ff1201fb972268ad1eb50daa9831af3728d4c841513113 -19cef4364157990c9c2ccfff3923bf687347c1af43d76528ec7532f58ad307145bf406cffea3536ee79dd7087e78f611fa104802e604a8c37f68754d1516712a -e227e7becc1552d86e3c83888b87a6525dd853939fa72179cdc4bc57d676820bcb77b7bf4b033c2fbb65433e0efb3e0e4c61b4e8cd35cbf792796aa169b6d026 -df48dbc4932d3db12f8975f310a8c55ff6254168fd4fe017018f06186d8d9d16538b60161f3d92d0a90f8fdd2566552364ab2c2bc6cb7d0bd8c5e8da6fbe9b11 -0293a0c6db17806f31598a26d30ad0e15efec0ce82b6d7d314250c577b0f1316742bb1cf282f66bba4960230e0a9615e8cc27f1aeacc43d89a59d297c056c400 -9409d17dd708a3320f7c5e6f5fedfaad8f7b0cc2bf6637d3f9a9768c43d686182c3fe71e89446206c90dc0b05eef68100fc249ea2cbac6ca3b7208aa6972ef22 -8ec6a3c195da25b373798a92dbf3401db56ed5681b2f480d7a714ad80e196714fa3f5fbf3f21797e3c73f542f2013af9e2ede548988f9d271613366ea27b0900 -7d9fcd921f80a09cf9b233f7209fba8a3032b3f1f0c0484c97d8584fc82d1919a078da23923df442d0c49803ce63d385b01466f918082fffd5325c92cebdd708 -44c180dd69c0bdaf785b57be1147ed4b748849eecb421535983172a4b4665511739c8316a6166ee3bb4a6b5dbba2975bc75b4e0d8617676b4c2e6fd501ea831b -deba01395f0ce1c099ad590024d537c1b7cb94653eaefca0f57c9d860184ad22977d60a95edd991a2a5f53500881c932453f10f063ac2a074e3b095bf0f93302 -6645428908c28c746c90931f25d4dad35b9a77206c20f380340756cc89a59228cedc2441dbb0fe078a4fe8d1d6e23a4bee2937e84ebf40c16d9369a4dffc4a00 -0db6aca5618983bc67428f0eac791547795a5fc9f3abd0face2e67c1bab6022d27dda00b23c4b7ce384bbb39d286d7e25548f64e2043d2d7084909a8de6f1f23 -bb81bd86fe46b922ba87fe2d90fb06862be6428faf6df5a0fdca47b183c5280e0762496313c91ed769b752b29630a186ee0cd87054a56f5e998788e213e41920 -ab3f4a83fdae9aff710b125f984bf03fa2027472e448eb591b3960371bce6b088e6cdabb9a3d85ebbe7dde5e713739ea19bb309bda1e5d484f8641f0cc236324 -d28ebd339d82c59389332f9f69ed68582dfb625ce881416d1714f751a6370f20383829532e81b1305b91380c2f83caf88b89081af146a7f92ff107fd0c9b2312 -1c97704d13b23b934ed37874103a868c6df9045466b85f3ae2d109caaafb6323111f42473da9034f2a56042539a8cb765eb43c7bf68d2352e49a5a32eb8cc729 -6998f4bf1edc350ba535de0a4f209f585ce19f0faf7ed0b22f0f1269b37157179797ebb5e2ce46f22c9f8e20912fa36769eafb4ab064cb8f5b681ab862a53910 -1efa19a855b2b3f5ef9024d6e5524bbbff48b560d219784bc6c21d5fdf335c22c24dadf2ab451a4c9c34722f5dd7b67956a35f9d3fb0c2513a626ab9493fc60d -f67e083393ee0728fa2dc7e9b7ced5cd0b93a970ad7b0a826a2e55f24553352dc32b38776fba046bb4419fa347887d1286d2e0a42d494699c187f1b495d3ce03 -ee1ade89c01dd3f9200d6df6cce319938c366700cc895eedcaa138f0a0e8a607b6e6c85f55adfd11d30e01db0b20d5a29f7ba012041d12eb30d8291d43ba3410 -53e5d5c7a467e7fc16e30e40c4b8790a9c73db904e6c2d4a431f5fff780f230ceec27e3193a9fd175498586f53819d33bb0560dbb2f55a7c57d3c401bd9abe14 -d2b59436054d8c547e15a3dc59e9d27cca7b6d6d2a522ac2c149d7195e99b305da34dbc5d28582881dcbb4dce926c8df679d755ed4ee0aa2f47afbfa038e9c1c -257df50a412954b34dbcc112f8ac29533ea0e8819673d5e34352d76b86edb1095ce7f52e1637a50407a740c3f74d9550bb5cc1f81e04d172275e45377ee3400e -d9e7869c8ddc9a260781c2d5e46464524ff95c7af0a03fa52ca17e94b649f60b76220bf33c0c47ec75f4c74f845ba71cdc79fc4c9f16191230ee1b24a0b7c902 -0ebace29705bd727ecfcda7234e7bcf93cc3b19e611ae978683a05de44bd55264368bc220c0da7e9af46c55d374ba776a0a492a25143944580a79dbb494e2110 -e9a054a034cee9bf59890689243525664444f38b662a223bc17ab7f84edd231675d37de80582c132ee01215839114b8c8fb2912c8ead8015fb4244e01bad5c0e -04a3860893f4d06aba0ddeab4c2bd7f3f45c1478a2cc0cb2f24fea6e4bea3a25bd9c27aa4b941aa5ac3178749c823c301f397d5f8fd9bf16c16047b34920e028 -bf0d30d63f57684d7bcf2d1240a1276eb6bdf61796007b1acb676427953cf11a6c4146b3106953d3b07460761647e52bb69c54454e7e3e85685b84967bcd820a -adec6034836d0e36a65b1e80549d09f7381f84d95cee26187895ef7b68c9f1170f5bcef3ae5a057cb07b8d761bdfc8444a08a863acae8e85ce23efeef440d607 -f915b159403e7bb7c72aeae2f2a7ca4ea866d0a96b2b6d185d3799bbf6ecb2248f96f08463d617a351a2a5aa3109398c185043c02759abef2ea0253b12752000 -8c115550fcb2315e93a80ddd72eb2a780716bd75b518eb739bbbdbff938b591920b7b22969694ef31c7d0e3912c8f7f7c1632cbaca9f3f4f265d6fc8687bb00a -8cc1d353dc979fd8806fcd2e00a549fdb161bc026bdc06b326e76cfc5a18130d094a16743209ca818b67c432fc7e93a9c0a8c4ae952d4a2e446b4c544f9f6116 -08400dd9047c08baa3afce33412b59235fe941b559540277dedc4ef90bdef510fdb9d0078d6c02d34884dbc2cfc7efb0693d8e825212bdd1b656f73aefb02a27 -e4d22e7dadb31e1d9da70b8823276281f787c6fe11662f65562ae18beac73b0ef1cafc81e31f012a74073186d2243c369c477340fa6d91bdfb7a1d98f285b626 -2d481fc25e14614e0d0ef9598084288d1f2bbf32e333c8772071db4b2bc9ff08aeab2711dad401fd5184e1413871e903bec9f548b6d1454bf391059334c08709 -196798685d30df8904a6ff537057e2bbd62658b4f0dbe7eeb996691e787a7118ed77c30febb8de3b2a98c85b36868d81e765ccabc7b983d6291fcd1483273a27 -99e564a31e11b5ca8f3f9e922fe37f4af1b3f3b96cd57c30214683ec86e1ee0a6167dd94e9d601f6fae422220c8d3ccdac051fe5f5db334dcd6c6cdff9211006 -739cc16fb8b1695d70254bdc53c77f95932c82d4ca5c49114425a84f68c7522b028bfe56f52ad15e6e1a1a18ed1ed5100d1929f33bcb7e764cbd1cb546eabc21 -236b948d4076b16f2260761ac031cd340386ae49d1e756fdc6b6282aa7e1f11db0a615b555f5a9ce0a56e7c0e74e43fb0ace44970cbb7870eb3dca701981e109 -6280fc74c11980877039b634ca8e0ecdc10b169e3c701984161583f7f7c57b2fa9fcf39fe87da13bd5e2113436ce4bf43242afa9a9b215816ee10a8867433203 -d013ff955958fe9b2d3cd36d29131ee6a29da146329e1b63ae83f33bbbbfb0015b57d039010773ed5ef3615a6232448d67660ad94a81b369fc38f6f1433c802f -04a67bbc3493b3901d336c201965fb144d831259f39d16e688884430d03ef80c8fb6bb60c13db3543618795b61a4aba2a020faa4d69dd61b44a90211e1f2de03 -cd97bb59a155bb3614dbd5352ee43859a5574ec8747d56167e2b7d137778881fffd7fcfdec7cbf2c82025780243658e1996fe96a269cf33d03340f04a37ed51a -706b8dba646f5b718ad0807d731f7a1dffa6f855cad256b8efbe766c92332f00336d9abe6e6462bc7544be35e8fc890898dca54a5e665d8b6ac4ef545cf26d2d -cd590880767d4c24bb711fd34d3ece2e3eda1a729134d31bf72cb1e2f80d200ae2b5d917451862f10882ffa3688ddc515c33010c8e4cb685c2534111c1213f0f -c326994e3dd2dd95ca180a4f1cbcd82cca5ad176d04d51ba339c5b6ecf3e3818dc15bb657d75a7be9aa5bb46a80b2a0519b612206574dd31a6b050097d455407 -330b09b25f12afdc4a10d71a2a6a4df9fbc43a1668b41effe6aeca00ac9959166d61d9f6c5840f995352cc09365dfe4bb8f0c646e10217dee85fca4d4bd7af06 -f3295689f7454109c595423872e5a3a430e200ee5073a66b9a955a39c9757906e347ecaa32329bd21a260591743b31aad9f4caf0985838a9d80a486f27f24a1d -531bf233f4fc71bee7fc8d73420289a4ca4cc5e5ba24ce10d8baf245d090612894d1469584e17fbb1fc607572e4b2f80a34c4b791656954ef05d76b3f4eeaa1b -3e251349fdec0873626e0aec02b70cc9c7bf6992dbcfa8800cdfb3742407f82fd36ec3e8f49cee8da573742339d3d5ca8d9410e745621bfd18b16fa2b8275723 -08152b7412506ea5e3a0c4aa558702a18dc187c9b0bd4dcf4a826146ff4bdf0593b4281908bd8f05de6551f898dd9ea9d64111009fe22abc3f49e598e8460605 -7468b0d2e289654696188cd9df7e1cab546f164ba053dd7c983061896dfe49263b340eafed18778805fdea85011a0de1ba10a307fe7cc5e4665581efcf675621 -c1355365653a6d64387a0b98c7137bfda5d702002fea50620a71bd7056fe5e2c53ce824d981e52f135208ff7583b4644310eda534a265befe27dc1e2f943681c -b55b4df97250248c0eb8c72c84aa421e1d3fda91d94b977eeccb0bd72223f720ae1c63a89a16db33e87db3bb99ec9c70c6c485c08e677a1103b9ccf00890f229 -34862774109dc1bc612a4d3c8f5a83f222b370e61f27a0771560dc7835ca72128d0d1fae136acec6f70d331e28a5c183b6df5887c1b6bc6079c836b840946509 -45a104ce6261eb2694765ac727f2ef177e183b9e1f28e362fc83c2198bee331951874715549665934b72bfb6f85d1516f3315f519f2ae7d5c95ee60f059caf1f -c34b1e989d4754a5906487f134f48aa5c03de85d7d8466c916617c7578ce212aa7cc76aaf1d132f0fcac45a72e7a6e0f24f3c536f75d6b7336f46b149f17480e -a5579652bbbcf7827eb974c9520db60570b5a48015d841c8aad904a4980dcc10bed361252b755796cb9d25db09652fa512e5fe33b61fd99fa69b182fa9ec7f1a -e741c9e459e92b185723b214fbc4d4780d0e93ea67d4aec5f1afb833eb879b119634f8c11e8b881e024ad2363bd954d5432a1d24bfee78da37d386a4b201340b -488895f365b71157ab0b1c75eeaae5598361ce58c21cc50143d61b3aac3236296e7268f7b0c4d7006790d622daffde9bec2500b38eda66f2b379636db1d19f26 -0cdd8fd14971a821b39899e42782fbb447695b699dec5005656b7ab01a76eb22073f5f7024b52c672ef378129c354b95c65a6e5c0d017de650f200a91bad8303 -8c842b0e5d1f588d3bdc8770282620365f8bc217854860f5be57b276b311cb148ac9dd406874b02fa46a5ccc0ebfcb1609cd1f9fd3b8232f1e5d3f2889785f0f -94266378d2db31a25a2827659f25cee63158ce0e6840a28a9c0314f377cd4405ddc098a22c75de2d4fb68c0c50b63e3482de79fcf658be7d47552cf61c83131c -68cf66c8abe41f0f9da259b5c3f1f1aea6651b7c8dc47b669c00893fd9840410f9a2b80de5b75c82e6fc0bfaacb9129129717ec3acc620bd263d374d12dcf80f -3de17022381155c8cfdc3d458e67b5baecfc4c76f73d461b527cc5109cc09d0719d2a049c7a9bd2b78878952c6a2b8db9c7e4f7fc29411620994e481021d1d18 -e3d677f2237811ad8c614843e3a78ff967ec8779f6a5a4d2aaa955dd0aa5fe2c4a262eb67ed7f9f19ba062c7a531013d750e92a8114b75088c90e95c8e88cf01 -3002c0ce7817e674827d34e54369e713baf0c91298bf1f0a9ee8f9b9345cc32e6d8c5d0b30db31d770ca8906a4aed49320c915c0602cb37e1e13ccb0399f9a1e -1e249802b3838012b13fa03b22267e652ebe658a6c8f13a8a0b6e108a7bcdc02f4b002bc50a1a03c745bc87cb35089d1ab4e62d0c7229747a4df8d3fb946c419 -7dc3a5a3f387aa7e3b0792de8cb2d7f22488ff2d139ef017781ea10fd4577f0e1436f58a81e76111ab9a5b79fe799e34e16d9b822c78f6fc5ae9f626287a3607 -f7180d4bc7acd8827357e898d9f3c0885ffa4f7e8f88d0a670bc5b327d9a3424eb17e23e82c181ab2f19a1d0f670abcd3985d77e7439f70fe5bacce066ebe112 -8790c3d97e7db974671d30a935be06160e65f2776a3afb948b5245c60e941b1dc0261b729b898f151430a2d04528ad4682aa675eeb2c650142a171f2fd450119 -bcb0d74977162b5b98b2e841244a75ca923f23eb54b925f19b3ac7c52347830989cf9faa78ca24e171bcc611bd7806922ecd2da55902565ddf6567e8eb540527 -65a7f1b8d2164324fb8014f074255fdec377099111aa8da27afea3fd1d7ed22fbca74626df5dd43cebc3acfbd4e307c6a2ea6de017e5504e218fc7c5619b8104 -f3e80b1ee07ffbf5d14363c644f3dfd8a260c3530dd1344973ea8c323dffde1e1822f740a80ac15be6679e583115f1dce4ae35e975c5fc0e50b719a711da8c23 -35eb9eb1880c59b6d4b38c2c9492f18b16bb4fc1bda9e25f90e25ae6105d2b0fa52c80eba16373ce1e788cb0936e0f8847225e6d10ad0a423c4bfc66a4021c1e -d03e9cd2287069429de5115fac11d77de0506b40a684559c66c882f655286d02f5fc64a018c1542b05b42fadfe36e184eb30cd10198724a6777d3e3b52271000 -0a8062c7750739ca84a9f514535cafee4520f928668c516d4ede901e31e6f419a6a74eec56c51ffea45c51b59173b80c219d0454b23bd74692cc8a918be6ed15 -d75eec66eb6fb890412ac3999440d73ac4304c8908eb89a5a8cd8e59de447703ed63a3db9ef72198030c268095dbc276d6cc3218cd4c30d0b9a1b7861656972b -785764a03a1fdc598308768d8979fcc217409b2cb1d40af7cf5780728321e125cbafaa56a8f45b89643478515dfd5b5c65f9ec17a3cda940580c89e420489606 -b10d3ea081eadbe27113584eac9b7c0cc64000f9d865816f0f8db569ee293e2e14db104c9e109f8f7648b23c7fa952ebda619a0f1524fc0226714c533a614606 -bc6248e5bb6fc1b34d8f13ee2f4350c4c63e0ed2df5345af144988761fb10827d1895e36f111b2721c0a26156f8bfbcd11037b3e44c9751e862006581a5f4016 -9f2e8b3263a58f791c4164ad5dd6e864abf9396fd3aa80086bceef8d2f8117098ba7bcbdc389e7d2cacbebe48592bfd722d534ce7fc52b511ca09a3290813c06 -ecd7fcb31cda2e95a5c0b2046abb57fc909a013a47a29a55413384cef231c213e5436066c47ce06a8cd77e479600395825905fd12c4c7923440c8398d788540f -08e877a3423d348cc672b23505e0c2b0f1ea4e5d4de0581a392e022f7796320aad454ae515b52397aa617bdef640c0328e86bcfe5fccb4ed7d37476289c9710f -6f403c597567d2b4f4be05b62e39f4565ea53283fca6ec0ba1b9f44be5645025c929719eb9534f718bacf1cb4cb5523a9f49856907a35e702b1112048efb2d29 -493bbb3cf20ac67a4ac768c095e2deced204423bcc0df7ded19e6a347fd0a4292df384834c1891f8c7f892cf2f7753faa3dcc3869b8bc81ae79a4a4f4d154d21 -b9923417f30f2a268448443e4f89c10c00e204d4d1a954fb83fc197c0d09421b6d3f940529d461d6597025bed1482e8f35ceb12d4208fe1b869afd684adf3706 -9591279ef41ad1cc366c8e01a736f7709c61b30bf2aad9e68e5770aa665c2b1e31fc01c4471783d0ba034ee4e535c36d6213898a9d0df908734b7cd173c64a0e -7e36db60a262b23f2c807f98fc5fdc70f779a419c855d3438029150ebf019d01c1d280b7f94aea501c0ee145533ffed941d5a7a132aa54af2491c0fd2aa52407 -be301ed4d0b6fe7470b26e75ed1690257b2a3949b7efec9b7ca962b7eab1442b23a9fc500ac367c578780111d9cf550a13b3ef767249267c78a8729ab6ae8618 -7d106826de1d12bf0c7d5cf8cc2905d856ea0dffea9953764f863f823a534b068fe0a0b5376d6d2400c297866f44e37675b0acc57fbd72e5d889c27b9ce29320 -7ed1fcfa9d0fe4c9723a989e1f55a49375358e4698a648bfc98654f4cda7c0148c12a0fa50281f8cc6af7dc12ed71aaa8ceb4f0a3007aaeee25eb872a34da30f -29057a5e0dabb8a56e37d9ec9c4699b1d125ea7e359467234748f9dff65ce51ed080a4bc68471357a53e7d341d65971443cd6153ba6a863cb095fefef30c261f -cc316e98d500356c6123a8a8b45314df3b1defedfbbe13b1a926de1081526b051a7c33ea516fa6cf86ea1c82809670ebdbeae3a106d9f921beb86be57cf71629 -e6a00fd12723a8de2e1c55f61475209042d7a557774e20a0ded45e6484a53a0a4b5b4a8fcd2b8a010961e337f5b0f089a337d9c969e78d0f8029898e94d4fa24 -fbecdf5722693bf34057800116ea330da57937615f814bac76cc0ed0ef3e582794c6f9c7dfcb0a8ebb5156cfe072bb3bba9fa07d82fe2b11f0e6bdea9807f509 -75698c124e2ec0009e834aa501833f92ef9c5e75129ed97c1b6a05ef6746ef1964251eeec56d184e213b8a748242a6cec82b7fb8198578e4ce5c4e9194d8d20a -6999f1410a4e7dd1c75e5381b82e2a11c227a223d2f6b137e925248930a3d81516e133a5e61cb858f38b3b8ce220066a7d1a87d107a4c7c2ca004fa5c9711c16 -dc64b9e756e36a3355a0ba94d19e3137d0b0e2dfffaef145b74146be42a3ee1b420e1ed4638dec5dbec1bd748011958c57b1dcfb4f84738dadbb805b61ba6c19 -4e87ff429ecd36dc9e3eb46b8dc4a668e07f9c27fe95c4f4dae1c9a154d5a20a9ed5af1dca879929989d20ec35a72b23c60991a881a13b936e0f67055d101b1a -ab28dbd977a0cdff8de1f1a8de88c9439671cbd1c607d66410c89ec4a4572a23c958b5c7eac0e6077b7b2f36e0d17ee92ac6562826743ea11034ce183bad0a2b -5acb075cba4d641d3a05a5a1a036dcc4a66bd11fe66e6dad3e77023f1fb18921e236d6456efdbc22ae8501d79cd5c31cfbd7b41aa846b8e37cee909d911f9f0f -341d0e2f62bb4951898bbcf64c3d056b5a9b1f5f97b3806172854231dcd2010d3a6b7bc39dbf0c0714f1ee83ea3b03917aac31d634444d1a762f2095fdbd4b24 -fa1e07270b760d93831051b73ff4ee242a752b6c35e5dd4322767ef34bfb6a0b4f0f2c63610b1cc1c025537e27f053b7796ea1fccf3e76730719e7f017333024 -7149766ded7412692e01ccda831c8a834cda716db4283b5385ee09651eccc72173aa0e41c992fb9a8d9bc10b80c94f8aeb1644b71256aff485db76cf04093404 -6f55ca1f0519e78ba72885bd63c48231d38c669634153307d61ff01071670210025c7d7d5723ad97cc7dcf0fb0bc851a63c7a11b81f55c89104ace41ec11c818 -6ee757f387d8866fccbdf504038e0fa10c8e0a919b5e78ac844f85a883e222116318f02039d9a800cd15b32800064c4fc304304e0f032cde786c0a3a1953f917 -351ca6cc1a64f6344dbc8cb535c0e8fcfc4aeea5c7b0c3ee36a57631a5f3d32015e562395c60dc1749291ea996ef6294800ce90b2e9d006a28afcf05687a0e22 -3fbe3246aab756606dcd59f7741e7bbd6c1867ece36025ff8b27489503e5b911791e39c91a0e48f0bf9cf9475c8f879d5b4bec91600977fd41b47596ffb1c100 -cd41c53e76955c497fbd29c48c2deb0b0896ac71a999f1798b68d8ae9b40aa16c13dabb2ead97ac257f8fac0bb226f2faf6038d0c2e179a12d3c71b5649c3e17 -02208003347c967604a02921b4e65bf0cdc461110a947ac567126925a854ff1c80c6c1595f0534c35ea553812b4f5745b5feb2bffd4b8871137ea2b57eac1e20 -726eb0eebbd4cf0cac3059bbb7debcf185124ec54ec687481c5a6901e23dd70858415c978ec6da7128ff06c8b57c2d6174f76478454dea44be65b1174e70a107 -79f7e103400baaf68c777b27d74d9dcfd6c992d2a5df4a99e74f3acf3700b90550d12a499208b2d3ea8315926cce706daefde1b1aa5b6d2aec7348741a5d470b -a64086ddfdfe73cfd85f46921681bb6302693767653b9651f7ed36614d991e0101437160174bb3827b3bbac50577dad72beda64cce716caf0fe896c32387fc07 -ca6090a5b9e62e01c305f31d8208e1bf5f921cca9a3ab9f750691b145299d507e9ff907c50adcd0d0bcb6afd170243605ae5202ace3e97ec0a42521698b72230 -5a2146b59f20e5f037d541b559dd017e364e764d264c7ad089c1eda2d94fbd24eb601c39ad0b1415923d2763c9b032094e43c9199721b270b114337f3450a700 -9055ca26413457e4a0793479548d1a2e1479450b4464f0cd46d07db0c936261dbff91b08bfb8af881586cde810e4acdced91266cedea43a0aea5e2f2537dbd2b -2918974d3abc6f1b725da1af16d398f067c59dde7e523c71c42a2164d8b1210c086463a989560dd59cf49d273dd1ca36b9f27b64d32dd29328fb52a6feb3b725 -f2b86196307c8da6f3964115b014bef1ee0017cf2ef2d82e8d659fd7d47f8403ee3a8ec008d0c1321b25d8976c9c112063dcf1e567e7189227a490ab4e21910b -a8e7aee5172c125379b324d1ef50c25c51064a6f5430e37ad3034a55383c180d92b5ae1f4470e81123e2e7a2c332221132d1f8ae121ed2a6c86bac1a033ef72d -0f0d04804c97a985b8379717fb91587c80494b39dc7df5ae9424ae15556a6b05316eec58fc4378612ed5ce73e6e20622dc957202de114ff2ba9b94a1cc65982f -a3cc6a0bd9929be206b6488ea2e0d3456b245059d1508a803732d9fb5300301425367c760854d174530fdbbb288616036aa893281c0687115cdca58e9d8e2f0f -654c71e20a20c67e27c1a334ceb93eb098b47114ee16f311f8b6777414bbdd22598be4f012159a6aaf078768ef9c7225f641bee6957c83a5c4f14fd70b9e7404 -647947a73c5dc81338066e4ad3970315ae57a23a7259073f394eb71355bfdb078898a6caad3172ac903b04ef63ac3c6e49946c4b5711710add21f2959b2b831c -6104cbd5e22b1b953d4f8c668eb4ae33d065e1ec8d7fda0d605f1ae43695bb2117416925f34e10dc994889b58356320a8efb373ebd770c3dbd50d3980e5e752a -642a230973dedaf6e250f4a4e597785d3ede035b8190f7c130188d8cd0b4d51502bc30d2b14c0cf825a04d95405cb89a2a7b009b49441030158029899bb1b607 -b9049eed021e2fb524463b710d109f7b35159f928dea74e3e01d0f34dad47012771d092fe2d3a3c26e8460d01286a9125078df21b2995ff8f7e5684a8adfc316 -741001064ef19c2ab7874ad45f79c3042c491b56aebcac09ee96042c76530a10fe18d43172ac37490cbd24ca4c0fdba4d7ef3e6169c6479a045f0e17e8bfa41d -cc52a38340eba302b1bcd46772a6b65044c7c5ce8af0fe50e8d48abcc2ae6713005e4d736c077d0a3e81a3d55f768c6c33cfee39378c2254bf691a482bcfb32c -c7dcfd4ddca3afe39e2c724d8343532d58e57895e1bac42c73f9dd7854ed1515f2a7946a2095cfbf15e8e318a0275491b5e8653956ce3ac3cc175fa3b232a104 -6e6c178fd19cf57ce57ff60c834465a281ac72f49719d16496447ff3e84dc8180b88b2da02d4a6f57e7e9fa9b906b3503bfac1906e921d330f1507b346127128 -f3e2ed27b5f427b0fa2b90c578d6edbb6cb6c5f2cce86139378f8284868b761abfbc0325a85510765842535ed8a5069e4ed9042847e13842a243f100aad25126 -989b624bf1a7cd46b7db2ede5d4a2b45531441962afec014ba5f74a50d3753153c259a28e61d6a208954d37c5a5a63fe4201b611682ea88c147a54d011d96a23 -d407775f985aca21881352db7512e7c3017e91e9e8c73617f1b9c82e19e79f1416160a177a2faf6d77f36a67bfa19f43656291c94e4979f3a8e2c4133773681e -dd0da7da73fed9717ded1dbac461bed5cee771575d6c6922e3a0ef4dd0b1a50bf8f3074f0940d2fc674b164c8e1ece4a43c7f2db61e0c44c28333d5d6af15121 -da3b22fd444a4a7cab4d13ef57da255c9ed85c82036f32fce7e09b05b8d5f01127058bd645fc8ec88ff9d6f8301db9a144cc17f87f2758b250cd29ac646cb12c -ea99f3591f4b0d2cf7b01077592304032213f64e034d435c84a3759b7a6db61740eddf2883a264009856a6a03d3e864d78dece99b54c149e09db7eaac8f7c210 -7bcbee5d3d0e0f0c03ad2e95e04aeea9f04f3a86a3072ba0cb10c70ecf9feb1fd1f7da3f5f710ff27288935e61ff9ab87cc55cf5adad3e1199c70988a09b4e30 -be65224cf160e67e2abddc12a2042b52f34a6e75aaca2ddbb89422f1649b200ff82761c4dd6913105371603c9c1e9bfea754ba917a77b177b2ddc104b31e6104 -bb6537599a6b224516851f307495aad9aa498ff91f2f6e52bd9ddb1a2248a215c6dae97c4aa996651cc2f2738825ca8aed5cfe4940365046237d8bae5becab1d -cf94aab9de438c727521673f209cb5e3fa497b44aefb6cd31731a2b30da1dc0da1092cffeed18073175cf93b874cbf61b4ceaec7bcc24738c062a9149438b01a -4b594c308abfcc5d2409cee8b9712b4917651af9e34811bf76250d389070f6117e8b6c3b7f51ace51f3b5785314dddc6b9911af471e3e711bb60d802f4a2790a -0d2a91ab45449b8dc596593c8f56b1aa6cf8c3f43aa42be72c440c2829547e18dcf8bb2acd068b7b480a6c4b5e2807aafc7b31015028c42ae206f972fb0a940b -a72948d3e75ed072609bc3c5c808a6000abe8127c406391968c649ee3cf3af134fbdc65e1d850cd60e0ab2745edfa93770489d7afaf8fd9f83c2b0a9bf58762e -09eb31033fba8e51003ed22cc76d78c9713d3232b33d3cb2eb7753ed618d4f03d6b6d997cb96e7a66f6dd3641136fbce0b6c83e4f3e985bc80f6aa555f994b1c -b85ca7c6b9fe6c5e861473f99509fb594037c222ce0b73786c7d1b6b063e361c3161118b469d7ecb5bcb826104c8e5a896c7d4b1cf468a51c1266ee09a24181d -1c0a6d3919d29b429467340beb5c9f071f66f16306695faa1c163071637c552ebefd8bc832c267e7df362321b60140c6e1401ecd5802aa6018c066d3ca490b1e -fd9f64df18636bcac4d1e60768c94faefc07f2bee36a52cc0e91f324da598d0d6244c823e44084da79a7cb7be9ba164d74d27222ab61bddbbc2133ddf1f68020 -1853b750255a4c8d8074bea4431f5cb94fcacb72ecea3f5665f125dee26bf62db786807d0261a9a1d561d42ae1917c594a1b16369c6f2907ed6d6d3942c89c14 -0d993645a0aa6852696901bdf57b0881d2fb6fea25f277f99a97f38581420f02d94a30e9301fa671fb9eb87a751fa13e3430ae3495a7e7ef70047d1d4efcd703 -14757b0b45b2c7481ccaf0029a0486c131e59f3fc4954ba100d97419e985652458d6ff1b7876e4b78b831be178ae126032d8526966dde30a9554d47ee873d82d -130afcf0718316d2d874796b4e5a78da1ac8496b3aca77b39457b9b41ef6dd204c2b43d3d2de0573b65a0ebc7edcf2f487b973e4cecbb1a063867bfff6e23f11 -b9b06d4a59b1662afa182696ad8f63dc502333235029421678e8895d77b5f502a287fd1a9203b91f07338f056b4f11eeff873d44a6199efcf32f15b8f425c50e -787cba0b5c66f6979a4c141ed29a4db86ecce8dd8beccf6b40223f446c6b09159cda2be6e375ffb97d319a2aa864dabec243210b45074a4d036610263dd2d426 -bcd19611ecbb4f78d450e0cb21412af8abcfa3070c62282b5f6e1f8e42c69a251e5d6ab82261c82d2bf1e23c2b16e89ec5b271a53edaeea289eeb15a0948dc21 -9bd5d6c305c8a97dce997ae0712da493586f0f12957f262134c62a817f78a42612c5f11ec081d922c877f64265386e08221e4d8702afe0ebb3a7c8e706eb4b0d -66d25be5d4602fcc3c31e7ddafbb415970defc30f8b2286cb909873a61e75605a5fa24c7d790b36b5186f71ab5d244308d6344a53bc018cb292966d3ffac0a1f -0ce0c1d809c675af34bea3836502851ec29802a8d70c65a1f17d0a1954334813e7006b6e612d922fe146ab821bacc9a8a301cebca988ab72d242b506a6d4cc15 -bd16554adb14c948eebea79ed790b0d3b6b4077261fb1e34d7d19d3c8b0e4806e921b1bed5848dfb21196a506fca3a721e6072699463514c9b098749b8500c11 -a723ea9e36b7de7d664be6e08458c0dda7586019cfd6d714edbcd60f531bf31a2fe988696a16450620a5280a4f8218e96460e47c978df7949d745e5c767f5100 -0bd90aaf03f6728e9492e5c90b37eb5649703a9a39c597d9bdd62db6d6aadf1ff05d944c569f78917d3f8e17d7d197b7bfe99778000c2cbfbfd31e4a31ea5b01 -d423d89e0ab13987dfbc14e165caa0297e9d678376a867a73e81b2b9a5749f25f68fc1fb7665966b48af91b80aeb7bcead0faf2bfd8f6b56924db29ce13bd302 -b691087791a008ddb26824e01890c7d3a9cd6489d0ec330b4c76cbb97791dd0a1465c73a6597595740542647726cf6ddfa7a49a0607650023ae4f40dab6d4d11 -f5a973a61315dd102e4d286ba3e0a68c71bef86a2945e3604f9c84cb1315b01c278fe02433e4fbfdad9a2638185f64180d9faaf2977ebd232839298791183b27 -e0e582ac6a3fc4f81a382f90e226faa03af5a0c5c3a32386f0508fa867772800c9910fbbf7d9ca57bb9aa5f3c959b9110f9410d3a671487aaccb32b210e49313 -48eedd8e3420fc46a7dcf348c890f554cd9488bf37588d7e32e47e24e94624088294cb1723ce04046d723618cfab34ec49f7aaa257d3f670ebf9be3bc497d01a -6a6e7064dab5d69dcf9a55668b3b879ffad8d4a5d8ec3b077d13992c7bc4780e54cc3afe13317323bdcb0e36e3d54933879663ae1f0606ce6c6da89abd2e880e -a7203e3b0732f681e3f759ab24c263a5a0fa0bbc5d79dd8f55beb5c0cf3aa713789ed66179e09f0d0366d8d950dc243cccd2e6c0c857331ef10115f3c522f716 -c192e7c2af329c5f94a7c9844261141dc78145d8d19dd7820fa20eb469ade52c75b89cbae996c37ec1f05eeaa858b6474ff8252b20fc4875ca89482e5c86c005 -83ab94856263afd1982ce04430ff1f9ee272f79dee0ad9889b24452611755a2d563f1a76e2d771f81669de9cb0f026275f9d245867c8030533344c197b5a3530 -26cc8617d65cf382f553dc23f21062f06e39583bcbc8744b941aff25c5601b066f16476445cbc9c244180efff2b763960c85bbcd8e55bb575837f7322f5d2e1f -bf954593eff8ede5f475c31af4c7b6c14a67bc999007445e7659c92fe813a600fa7658a2a5b2474c89296481ab4d44a77e5e64efaa12ff433c11ee47d4ef9223 -8337cc484005a72efc014fcc4de87c30d303bf344501eda122f86e18d787d4225aa6f51182dcfc1291ea30d2472ee18e4655099e26690576cd8ced7323701324 -dce2b74ecd348491e1f2f95b5019b8dda1b3b95946aa02aefe18626e53424220ff70b9f4f428cacbec2460840a76acfd890a44f7ebd77e8427557a5ac6c8ef18 -27d5d68581101550e906749f637404894e225fe23a735edde387f4d0b9bbd807591aa5aa4cc339d645f6f6071bcb68e232917b58998650023eec319cb23a9e24 -9c600565228cb946818871b32f5c4da7a7ac6d10b8b659e2fd82db9cf18bfe035a85bb718ccd37ae40b36f67285c78c758013514bed40f60db39dae756e49f0f -3bd1a299361f134a7417ecd772abad01398859c4459eede6da7d6f4c6bf6322ee72de440aa671240a9edc2efd272a9be46ef5f0353a2fc584d64e036b0d4f611 -ee66074c65ba81664930e26226fbe596d617585a71fbf3c51b9e8713a394672b6e6a4305f523f8ea7bf52d164b612ac9ca5860254edb9e4bb1951355a0cfae05 -545606ff39215426a70bdf1e0be0dc450f7085b75484efc08dde5143aace660956d6d02f7cd03731b4e77b3901b5a75e2fed7f18b4fac8e5803a49dbcd030711 -bdaaf190779da7908249f92c8e0e44ae420c6eb0a0b15cf28111fb5e62348825f4a8b7f0cad4cd84a8a188da46e54f8123957bc8722d17e6535c2eab99ce0a10 -e2b15e9d9c5a990b992853ecd5cf812cb11497487607b4cb4498672ac3392226f9736a2802179a8d82b345d629d36288dbe650f0928dba8960eb9af9970d0e08 -331ac0a9b0e6b0f85375b4c25288426f0b9a64fa1ecfae312ea35d2a1e4bd71e8b0f02bbe71788209ca801bdc30fd73c7db487d320f22fd45619297e4efeae26 -a21cc8d803d7e2cba0395494bc16c248d690e3ca0adea95214c656a5c879332947f42672bb65358dae8474efa2a943727216bedecd2c984e542878f3cd773a0b -20374dc8ea39b6af81ddf4483cbde675a7e7e2eeb0760ea399ce84990595bc00a7a9f18a64817a67930fb6b276ae68212e89ff0b206956893a8d53f8fce31c17 -ed857473c076b0131b34cd251ac35e119d9b3c27915a81a20d27a96c3c53ce26fb708139b63b4ba9ec072a0d9622eaa825912e6571981932bd218b4f7a4baa18 -7aa8877d9da1c0760e998ae75b88013420fa2cfadb174b1bc3d429e63ac49e1a7fd5db7fe0e70e563b66512c79603b46357316deb4dd8f676043cc9bdc6d5527 -a5b5d7813e2832644ea911bfc224072352786a04b4e0f33e4c382a881ede931cd9b22c0aec1d0828ef71d8f09d69219e05fe79304c2cd123413512e11f7f7e22 -a23bda4f2f4f7a9df043daa9b9e2a64dabb8c17c3c05a0aeb28dffc55c126c1a3b148dc498103e2372ad16baab46cdd25eec25b5ed6230fcfbbdb9f4794b6d0d -71a027f842bc6de07716144ab9b85935e27387c33a56375bc66832f8ed5e470723e8c7efd82a1c2cba473ff2896ce15cbda278b428b3404ec895db778a43032a -5ce4317359e884bd18ce1deb5fe7bc21c6592e8a88c46099fafcc136a2150908e5f60a4c05e0582404eb52a3541d303110c3200073fcf9fdf25ee97e3846481a -bbd58316dfde9a1e8b0e4dc47a88f53116ecc618aae4331de8a3502828dde12ffcbc24c5f2ccd36e2fc21f5ebd035d4c06b64fc1ee1ca6212a343e56e085f90f -70458088998f0a6fdfb968791e7096ffba20205ce44ba02792882d8fb6fff30a26198ca7d289942a1acbafd041d6f10cef8b9cde0ee7ec6db9a2c6240aa5d602 -ecfb77b4b50e475c38602efb53b586a4f6b0757994cfd3333fe65d2584c6db0e5e7a332e5025a4d708e32e974ac8f212d8a7ba974e70cc8df34ed7f5f5ac5a00 -547ee428935207b0277cabd9165bc430ee342604f2a8866590c9154a8d4ae80cca735959ab525648754a31a3e13183f7910fd6623285f9088d80789d68ffc210 -19464957b40433c8cd0098b20422103608e05e5d370f38326a686e3ef109271c038f45f303dde94d4255dfb795708159ebb61920b71e7fbfa42720c41d3f2415 -ffa4f6fd599644fbf53d61d77bdf6b9b35e664be5b718fbe1b32ce58adc8f52f695e8cf12904be46d34a2ae7924ed6be2ea478ad5c7b949231abd14fcd3ff31c -71770a7439a5b87caff85cc97adee689a71f8d380f206780a65df1111a50d212f2d7fd6b988c97f60aeb024c9f8f616b38292caf1e5b389c01b0c42c6fde8f2f -c111390a5f42d2ff6f47794618339a38b288931e690d23835a5088887f88f622b8ea59f8e57d151144b232d2a0fc5f17346ec70ac32600ee95a64ad1c05e360c -098981fc39a5779598b6b91fd72f147f0bcb0bcbfcdbe0825189b87a8ec1361018848f2c510e3ea6ab00533d185af01525fcf1eeebbf535271eece586ae2a22b -980c13ecbd71eb5f6cd17320c980e3cd87fee95c751f7ca9bc7b8f8f5218f40656648a4d331182246b8b84fef4356f9f055a72ad186e491f5bf30df9dff5411c -a8a00f87975e9e70052361e38f88475494e04adf51ece97ce4ab2d70fe5f4f24ad1efe795eb55e858293e89bc8aacb927b93e1c85b6791004f2668ff00021929 -ebc0a3ac7d8a5490cc9ec7a5e0181542856650165b31e46a63d4f5c82546820f1c92797e9e6ca519e172dceb487e1845fe60307ea9296d5f0a84abda624b9302 -81e097018a08c07781b42c84ffd85b6788c623cf7ce3582d757d9bb149ca870e873a14f95db15add9f72eabb1ed797746ffcd2ce1f1d31ef74e35eb38210cb05 -c765854dad8395bd8d9ae7f7aaf19bc7eccf20010b1f74473e26d5abcc2381223d42642dc605764f0f8c6a487da5f51cb3872006c723c8f923294702d757e526 -bb80e6cb68c682d3ac6ce5b2dc7ade4db21a62349ddc00b4e9d651126c1557148777236e2de2c0ea617af8716657cd1655d686ddbc84e1e0e25f90d2f7e13c06 -803a10853c7edf1296aaf1085d0a4de96bbe3391818f8ff167d603a2ea5d090a58199f66b5e5cb6e6a84532e1595686e34ed4008fdca57d0d0aa569aee510b00 -eb07c70b6fbed776ddddb8fa3fb484582d85af98603b5e7c125e0a3b628e9521c471a8901cab60da370de1f30091804145a12a2d8163fa75eea14133b04ab427 -c41248bc2db80c13a5bbcfdc9f88ddf6519d374d60d9be8de15d32b561300008b666fcb75bfc24555c96fdbb2f3472ffdbd87ac598724917ef6464fcbbd5e92a -7cb44318aa0fb7c2db8d7aebfda760daafbfaece352c26981a1ef4d708ca8021a5b65b0d96c306b49a95ad4856a9c0f354beb4cf3142666a3965ddba9867022a -eba83aca9623af1f18193c83983063bfb45ca3276526c351334a0201b666b4009cd7c0ca347d7908d6c5a1801316919d8859907be7c565a834ef9582103f690d -22950af6de69f5369b59ce3b1f34f32a6c599da021a6b1d2d497dd0bba2d50040d1ff94336556e17977d638efbc52732f3d5b22f4129466704ab8df4e34fc005 -49d5a61e430e55939ab96da0eec47b4613988a80bcda104f7929d35e186c1716b70f7258b0f7677a25cd0b921b7c68514a5f3ff47705cc8814e4995deabe4007 -4a304b8a0bf9d19c8d4395433f90e0bdae52f9dd1dbbbd843157aa7108bb531600b91454ca3932e9e61aa8d6d371ff3e1882e1f48a67c97983e3579300a74e04 -074a8e020e8a1a1daaac76c97183b838a648ab274bec929dc04da502a7c2752cd46c49b1841d52cd64873007581be475cc6f2986ce4fc5f8837a9fd8a580f228 -2c3187d6e8c1dd0f15a910f8431ccf98ed13d7fbadc61e839ddef6d0aa4eeb25dc1c3a83370bc16d890b99fc044c882d707d583dc206d098029a061d28f7d92a -f1b03584639db299f8dcb5a058b8db8fe8550b9f67f4440c4097080f16701f2464cfa7f4db3673c520a484f619f70f550c2205cc2777f6b978a4f094a5818e0f -34cb6169cb4dd69b57b96279bf4193064657aadae0cf04fa4b7859c406eb100f61a741acc0d1cf2b5fcff3497647b671d2ef43667f2e8a2ff5c6ee43526e0706 -c08d753e3a2c151a65331d348bbbc77f7f7a9fac36a9c5bcaa366f2e90f1ab000c99ec3616d1ba7908c28965e986b0e30986d24b94ee7337b6e0ef3ff7397700 -505b428f79ec52cdd317d7de1af2f7099826e7402a32d4a993f4624f30bd1c00f885eeb28c0bb61426ad7841f8dd6f7a1115e76367c0012cf9abec5d717d9100 -e0946238af82901992c64c38f31a7961b9ebc0d220611c1d22fa12bec25d250542ca16ce95e575223f43bd5eaa25f4fcfd05ae323f6e1c21499559278bc9b40f -a7d64ee36d15918d3ad1ebd0e9e796c8ada471502fc7d8d6e938593a510dab1a1fcb278bd720bf9d556ffc7e8fc581d73274d833cfbd8c2d494ee5e391632a23 -f115f654af9a5bc9c2e3c7d86c999772e048a948dd8952a14b6da954ecddaf15faab72f954d8b6ffec162c6134707724274579d38a717ee5169f1d2d0398db08 -fadcac2e861dccd35251eaaa4c64b0a92364c9267268ac32b0c036cf9eb3052f1bcb6a161065068b8365a046cf093e6f8bcc37ae8d0995451c06a36401d27114 -f4431686097012036986a9167024a9b44106e0060d4b71a10d3443c2872bcb20e82a3bf95af3064cb6f2369dddd7856fa66045d3b12ed7d9adfb1cf0cb26e909 -aaddfbdb91f18c000cc409fe8939f6b65bb02d321737eb0663426605fb13e00d7217ffaf1d73900ccf38ae4c796f6c5dd7682bde3bae07e11b785402f7484023 -59cf9105111f4cc9202f3eab964c586886549ba2542d7c96a3dcc1d85233811f3d98b83686a7b07fcdb023a251c6ebc6ba57e28e4070e8db795d65c83510671f -1e58fcfbcdd3b515af029abf3afc975f57b15ea5471d4a8e3c010711cd0f2a30581c2d44bd22755675bb98453d54425cf171a71515b6e2254b8746fda6afd62d -edea47cda7d0cab1677e63edb0d48f439cc60aca550964b50de8c2d233597b1eb49c56b710099b7d44153c836a51dc83489787e40bafca3f130f33942b46db26 -7491ff91ffed48e7f34855814044e2238f6d8915666e0684896599934382372f2d25dc8fa80e6256167ced22e9214d2992f42c412eeeea6043d8f68b469e0e03 -dc9ae46279aaa9f642d9d17df26b6574ed309bd0cb2abaf92e0af54654d0af1718dc7dee65d12070293077d40d2adf4952a962d4e6165e83ce5c1fd32b8ca42a -d67cd8f546974983155dc50469704cf7a7917c64b068db7abc2acf9ee1f88f2150e5f1d28da2fffa218714b2172c1a3e2cf46e3fb0d68748ccb8b6f9d552f41d -92812246e2b9c864e0fb89bd98e7c550542467db0e1fc5f3e6549251ca6edf2fe0a4d6aac3578f2a57832c71ba42c96498c438249831a2d69ace16ed9d10c222 -3ad4a6be96c255780acae40938bfc11eb74a62b0c43b6b605095a29197742c1416e30e44f230108e1ce4dbce16c0d6fffacefed73bf117bfe47f2e7520cb8627 -274f3dd76e6f274c2f933a83706eb74ba125fd78287c8d765e82c3bd6dbd7b0b6d86359ac08ff8a7fbdc1e416a0b77fa2ba9b9d58f7df08b086f3efdefe71d21 -78181312a07b9ca5ca0e4c7a6440c5e8de7314e87fb7a64c1412b2936ff1d90ed39a2164666838d58f79a70936e6ae0c62716b20771797287e9bf32735097d03 -c29c9c02cf3471ef7b182fba7c4956363bce8f1cc3425d0aff178907b7b2d314c107088a2e722b49d2b30a347aef6eb8044a74f958938360f0634b0919261207 -3963903f3a5935337288e46a25ec79b52c4242eac32b505c24cd65bbdac1d6123a13f93eb3dde8a316aee525780cc5e9225b15384a65967efdc9ead4197fd002 -4706d6c5417cb0877f92bd1852837062158a6a47a2dd04c89cb3582a93e00028b28d0694cb92cb966c860d58c76e98e28fc6bc6be3342b2d660945cde94b6c15 -32d1d7219275c8c9b542b89358ac67fee59775c45139c7653c46c687f6307b1e2338cdcb91ad866337dda1146a048a21b1020ceb32f25ba6bf5595e964156512 -38373e1ba6caae3d5fa3c0919d98acf15be3b31432dcdf0ff52b486efe3231232a35768f35786747b1f50d54aecca52db0578f18fb4fa4cb35eee2ca11061e1f -9a9eda6f4347466ebdf344fb24d373633f0731c2d82697a2ef53ce779daffa002f82e8723788d060577b4c5d8eebdca2b537766506b47dfd8414fe8ceeb9d12f -771b6c4d3b3b277d4c868a320733e93dab836fc5e8e12798d83a27d3868df11e4c24e87034961ca6164f068b744488d761d52e715857c5caabad2348bd633225 -9a04d71c64b781da80e428f279b358ac5d54f4843a99b2634160c5932bd23327f640c09906ae8e6d033e33abab9297a456d2a2b1faf778093c019df38919c900 -c1bb3254e0a2464a6add203394dcd34a39486faed3618f61bb599fa658c9372fd24d53c5217921fca2c80efe644a2dd56277ca16e1d639c1917112ef708e3e30 -c0af6f94981b34c8c2829bf7262d4eb6c19a0b24608b4950b30ecf4bfa2c3b0a8ba2db3114c0bb40fac5e20d1bc17c8519c03ff02559b1c3f9ce62f368448506 -9459ae99cb3d4b5501bcd5469ebc33f7f803b335d4f8b751a1b7f6dd818b1003b758aaa6f2e145f795e3fcde2ee70ad1555b681b00c90721d2ecc48322a25210 -0b56e6389ccae83ccbfed34f8de42bc843d9e660598428e8f0e929a165b360008d5e1ea44721132f84e5e33ce014924022d6500b442127d8a30237c2682d441a -7d0b606e80dc975b3d5b279cfb0024b990a14fc20aa48191eddf4919dc675c0f09a1ca4f5b4d758e6622d950dd5a89d2c2536fff7fda0b4c3e09970630e55516 -6f3b23b712e7203fc77e0945b1680bf85da23465af6d5fd63ea6c69174a8332953a89c671bfe887f4d7a744486bf39ae9b4ded55cae63ab8be9ddcc29d7ece03 -df504178f29c96621720327def609d1eac8b39f3aa3f0788f1e03d335d5b3703e476a3791b3d31a845fea6dd22289b5a9066d565e32a926ce82169414f111a2e -9275c301d541789d34a48e8a9a9d16352067cbdbb5b829dd374fef2015a67f0db4038e44529abce5880589cc2cfa77be9f10207b09ce4c8cf7c7aefa43998824 -6975924d4ab75eedc9bb207211cd8e41d74e3d27afa43cb79d4d5616506a11171d22eb3e0820cbbf50dcb81c5251707f685d489dc7d58ed8a76f140bc1a57004 -fdee5fd562a10d229202458a3c1cd81d696dc0f56b9ddba1291853d92d501f0585a595a301f676b4f45980e8de914064c425b770542c11fda34d942772d2240e -d4dc0ba1c3354cb70abc6fb870f7ba0431e2b0ecf504a94dc8ded4b24617a3184531362d8873dd55b1532eca9796a277326283bfe18d901ba040c29c2316dc0f -aecb7e7ecfe035bc69d8f8f48f6d22c90c1e35ec8a852d45f47d84c4b542f3227398f9eb321d958f9762eaa046b81a3cc9ea1ce809cac4060194f843638d8e1c -3cfbf09fbc84c69bb5659b8bdef46038c6ebb5b61a15945c56649f385901512f4c6d2aa374c45c6f82c70aab30561fdbfc6aede3689fb91a7da34b81352d172e -46a0b18c8d7794dcda0262d2b6341f04fa46765f32ea73184248fa021acf0900b3fd78ec95d59c375b3f918891ddc483759321a549ef518c238e19b7a669a102 -406c4ef8de35e9cb4731e43451a0a8ca7b9200f63c779d57f21a525ebfae9525fefabcba5ed8248a503863214a5d6b1940d98d75630f76c013a5a5f38d466502 -26347c0ef4ba5e728727541782044656d4427301b47b9eb2f20b14ca8f47c32f61e60523c0d691f0d16641c63266cd08ccbc40ddd717a045a0f932cefa41e61b -2491341bcd94387bc64547c7f6437d192d4eed0dba893f766b41444a0cea261ec5d7f32079b069fa55438429112fef32770e6123f1a8facfffd06e76a417d026 -7a65abea89b48019db1d5ab4f53d7b61e3caeb55714139171656f334ab2249284e7e338ad11842e4b4d2c5e4a36a243976478c14113e8937fb86b318529d0028 -1ca973408041c347f303301ab56c3bba770e1ae9323816db34c3e71111ddc10e1c8510ade74fb4b42f10309ac0929d461d76e4542b4f2b999dca55f8c42ffc2b -7f35c97b5be715ca7d29079353a1df85759e4280c6c106bfe9364b0b17061800796c421ffc2df2589974624604e4482da15300d929e3faa5cc7975ebe6d5030e -c00bcc1013cf5164fc6e8eeb2e4713c4a682cb5f250c16eff7f736262654232a34e6aa01825f2628037bef941af41f6cb260c3611c7828bc3b7e85c2cd2a882b -e3ea11d2727f6fa1dee976e9ac0c4a6d48891a18cd3073bc130027adda26700a692a5197ea1dc106dc56adea7d3f696f4c803f23d5c2f988f1b888894893d405 -57d83c42007a4ca78a70538c4005b8e2fc6acdf30447cef876cf47b0a8e5f5171c705ba152c2dc2ef59df5654dd4c55ea5bfea80443bf98da1663a18ac0a181f -31f4cbf144ea1be8512970fe722732aa57731b0d9068b68586dc7d77e77cda12d350b65d2d950a19dbfd85d49a370e668269b2fc86abb80e210f09468f2bcb21 -d0c1acd7bfa2c96089a0811db02e4f5091fe0950fbc488acc617bd002c331220e730ee99bb565c6342589284609dfec6757a406311817e7192d8dc99c14f2a01 -b2bc0586c558893bad53945754ea9fa30ea8834578a40d896bd56a59d4a4900c6b5a014d818dcdb15c5fbfffc5487a81d90b99e43d66da9f67a6cc7b24ab2818 -5c43307230552929333313a9d85c441723e53e6bf0d2ab040d2249e2c9daa01bec867fe3aa4e3521431437590d33d63dffc81be48253dc85424dd49d4dad5a13 -42d6c22015380aafe20a8aae93077f462d537df80a4ae582c8d815ec778eea16d4f15974dd19c3109b8518cb202456b63f416137afb89dfc88fc32b95918fd12 -76cd72c44d8fd0d717255eb582088934f694b317b2bdf4fc99b0a418eea5ab0734cec11f5db3b5b4f684edd4187c369e90d3c6271a88fc950ff1dba01c5c4106 -42b6eadd0b16a44ada87009825b9cba5e440e9ad08b9492b809046a841400d007f8046c16be02ecd3a5bf7e94726ff2e6597ee1be110705769b3808cfc14b509 -2f9b5cfbde705f0ce38ae457677de3939890d104ee9b129f6d968e2fd7c0830a6b88f499322b74b2a827d55cc7a5904e8df7fabcf5c01dac7c425d0a87d74e1d -e20aecdcd2c03d39ffbfcc63091001e30ee893448d4552ea13fa398cab13bf2d149a9623d5c9032dabb96974856d59ae5be023644f658e45195c415a5b103f24 -41b08df276ec5f0245326cb92ab59476f354823b73e29a4db3c175f9ce55cc23aa79ceeef16b50b765df2cb93b02aea4606e22040b57c6089e9c0e4529ec682d -2f24ce5c424fbeb751a3a734285403c1b44095ade198a90963ca6352c28e04212bef1551ecdba638d7b3269bea6cc33ff1ad01852e951dfea8d848c0b898750f -0144343213ce63decd3047b9e5f11a9dd7012ed95d1f5e5176f1b2852d39410c42570cd9d890a59199821a154a98db64c49dcdf9fb2b842a00445aadd82f300b -e2f5df4db67af04a061ff3c354860ef1c3b2f77a45edc4eacfd523a3f65bd1055fed11a7adf89c047e21e65e616f97fb967ea45d31f353e95b207c13844ac229 -ab7d359fffedcddb2890b37bb483d7f6eba51bfcb5e5bc315dd9f818f6a57a19f2a9367ee67bef132af220dd6baa3b9938a8827c08908a75afa9d3abceb0f017 -9eda6fc740ab3962245fdb9783765c6ce721a1ce2fcb718914e929abafc61518521d3b53f01932c3c2452b4d74ac5f20e59e7b6a78608d321aaeed94663e4629 -aed73533992e4f51d68bd37396e1d2c5f15aa0495b9317fcb9678d170f88782f9daa47143c63cd7c36837413b89e43c1fd051830332069e95f123465564c4728 -4fd71ca26e1b0084f13604fe75be6af7085ff77e8b32c640fef9c65dbcac381698cce70c7a2a9657242cd35a9007bd83c1b8eb3547a63aa79ef785f35edb1813 -d6c1be9e3203891fea40f37aa3f41415328e274fae5f028f6dcd0a2e6f5f462a62d698e123097321da566c7d18eeaf687e650ede2a04c8734a13a2bc81749403 -ef959dfba80857f6511e1551c80e263f65ea4b329c70830e76bc25b71551950fbd9a182aef2dac4faf0155f2bab084cb21e74e2cdcd8501136c59a170ab3a629 -1c4c2ae2cd4764359dfb71422171c2354cf5edb558c2660f168f8aae0b939a02659691eda9ab5160eef77b4525e44ca2d08551409869b590178bf605d658df22 -2eeac2662cb186f03757d853d1805ca184c27b2020b8306ae5e3204eac02e50dfc60a4879c9864de333a114da96e25c58c742d74423aae8a1f1b5345f27fc704 -fde330fde1ab35f7a11143b9c622015a00415ca166cb19ec46b5c84c786aee075f5171860ef0b77feefa5b20e844e699f884b07fbbcbeea5b4380b956fac3a09 -940d31abcd5cc0f02e36a0262c860a6e89b02a4375035344b5fc682fbe2131252e3a7c26a55b7bc678e75e3b5c43539f024d873a0abbcfcd3ba2dc485011561a -58c3527d715498fa2394fa34bf7ea13da408d45377505d771218fe2ba461621babb54c1e0f1265368acaf26206b64dbe30e18321f09d21f86af1bd28e45e6309 -7be3707525747c84b46c7039d7775d6802776d0713a35ed7b3f6323b8e99d825c40527669ff1b67c2aafbd813dba6ed679a5f302ae85e7c61bea9c8853948c12 -214e03b077c8c9f4b8ca6ec4d0c6f8dd32edc78366e5f36d808a76534dfd011fb8c78c0446159914097eb598f7c06d8466492a31453190263e58b8b236341a16 -ced42b517c98fd724b05bfe0debf6d3ada016f120caee504287f31ee5e5f0419fd8abce007c7173b432a66e677d53961a702283cda21e6296a66069377a23f11 -9808f2dc0fcc33fe21d9ec3ac7025a63eb10ae213d8f396d7233fb48179e4804d6a867219796edbc29fd18cd16510eafb403c149f3d8ae1a608e2c2c9c83ee25 -19100b1043278805d2da6e88100ed096ef3d0fe5f69ad16e9f894db3475b6e1cf9ef5f78854932dc6876c4ec605d83d1cc8fc753c20cfbf5fb2144ffc2490803 -d19028fce8490250120aeab06a88f2765a5cff011dbb60f2c5a5800aca25c405ec8f8417f51d870acae3394a254a2c96a5c0b45f48b44835dcc21b77dc91ec13 -6e2af825ad072868e2ab870d79e5373e0be2e57c5a96619e8cfdf19fb9643926ad219b2b6697487471658e72ea9595f44ca0d6e0769172395b59b5072e8f410a -6c0cc8a030811e466acf40d08cc0baf55840695bbff739446f1b597a39ee7c17bb54fbe7680dc824b88ed5b4992dcf7551f4097dcaf45306e863873bba569c2e -f6959d2aef80d217375aef87ee3bb944246a3a886abd17b3d039ad57514f5e11c590121d4aaae76b0932fb9c1cd10a4248a54b71617fd721b0432d6fb4d97e2c -71abe39618b8665236b4958a7e2172573853eff498677e34a18e0787917ccd058d799ccaade31ecaef9ebc24edb58199eeac2af5fde8d30a3faefc888087960f -c78479f1933fb919106ab26c48909e2ae15eff6f2f10f668f82669714dc1550907394093a417551a710acb79fb7ed3d73338ae6683ed595972af0a31ec922b04 -58a69f388065abf229481ff7957fcb490b59187252f08eb91c9927a065471f055057620dfbc28fde45e9093b95d4e0b1b5cd3b63f352283b7e82c1310ac30f02 -e9f4a3e7a880f739338b9a2606b44f203a78fec7d8ddd159b8e2dfb1e0847c0daccfce12474071cdf82322cb5f7d4eaafa4d23362fe531b7a9a21219849eb00a -30eed9fe7cce4bcdbca889c5b1019274965dceee092d9978d099cc92d84f2e087c3833866da42ebcb5a99abc6ab4e580a65746da6387a7147fd92840d7d8300e -61277b93b795136f8281e7f40a1b2b294b684ab6ad6c702db897838280fead28c2c09f4ee56a76c38de23a1015d4c08c8edcd4c1b752b730a5f3db8e4e68a010 -28043e94ea2eb15a8d5dfb20c60da5c409397d8f951e285cfa4390ee9b5837090a5e5854271003f496e4cfc255f47dc794e3297c2259f2f069a16e033d64120d -ccdc348d47f594ec1f64b3ff31b48066f3dde371dbbed3fe7025a8b2f60ba4170aaf821e757d4c051d733d79c67cc83d1b78536559aeb1aa04c5232320520805 -3d2c5382477727f26d7037a5cd2f09840342fbbdba8af05ec682f4199dbd791d2f0d2c993a5fb02a3497dbe7f694c5f135e275ad5b5a64d171f6b8c0123d9d1f -7db585b11357ddcdfaa45f3ca4ecd501d0e0cf5b619b5b8f2417bed5e27b371d13f36ddb1d0f02f89b176f64ae7b8bb6c6c530f2e5100c9fa87574d30f12892b -4154a68314ac688f9834c74f14b9036bd53216b05bdc80ffea6b2c1b851e2f117499b9dc92bf649c2a3e902c637bb2f636bc87e71ff9bfbc88367be81ae19e16 -18de309a920fc513a51f4b38acfbacac026c6dd0b05990144b851e81475f4025c1edcf81f03d99fb5f563412c9b25339f0358001a68732c6f0b3365a03094d23 -6b49422fbc99d5bbb0f8a1a15307056e9b34d38ce9957b87b7c08bf7cfdad709075454cb96cbf28b6f386f6c7d71cc45db8d68e9bca758232183d17de297a221 -58266d8681837b2fd37a7603a5663beb6c51ccf6d064836f4fe7b14577dee9255b95197be04b5de0ea5e1defca49dba964cf7c3522479230edd461ce19389624 -11d0eeabf67fe1b24403d7c568619aab16f0170d6bb2a6faa73418b50f9b7e10a0527d9c0e4573d3ddf8496ad9d98cf8cfb0edc88fbcb38f1f366f83d123090f -bffc4a044c58aa59d57f252c7a273c6d4141d702bb2e9d3bf2eacd0d6d3249132bbe478460e89fa5bcac65a4c5cae81ad1d6de3da8a77b651b6f223b183c7f17 -6c6a32c1a4178e477c2eef1147830cb9b92e0ba7fa8f83baf344c033b86bed1096c0c4e0b908c2754e1e79b7c983f31b586d596dea904e13aeec80c0fa69581b -13ddf1f9bc689f409ebeb073b7e9e48831bd89f68bb757fbb4f503b10a9e0d271131a560cea8fd7290ee0e5989e8276b0c144598a7b102b50a859c0c5398c027 -dcc49d30e4738eb4238c20c425940fba999db7ad76c120c8ccbb1e2cdfe46b0eb4e5748f02742b78c14e3cf195b9b7fe2cf6a15df298d7cdaefe799e05ea932c -971a7b415e7263440f9a80fcc3e1f9e7c7bf70c735e3728afbef80fa7a8d4f2bbc7c485c5075d1262c3f957abe13e0e424b4804c39ba1007573ac4ffa6ed7d03 -b5063e28e845d3469447796fe3af5e60e0de67551517afd95d161d63aaddb816328a70a3b6ca6724010de9da5d1782d46a9d069d80c6cff34a374c2d4de0b104 -3dc10dd46a9d1855d7d7a576b2f1715f6c9583266a033e465489eae90dea5020602f7583741751a5d5f2dd6f5bd01a6682b1f8de5dae16274991c5bc770a2826 -a1a9ac72ffb0be3695ac61a05c7273e67f876caf18bc06361d5c0612e19bcf0b8ba5f0fb9a92eee8b102cb79d8308921d6876742bc8a00a7da51703f8e6a8207 -8037182af68f98b211ed4685564f79c19003cef76a70a6efcef6b06416bd45069c1eb7ee17850877498c76a6e292f417f61b2407a0ea227d277f87759069dc06 -670097e597664e416c474cbd2631031a7e1496fb86967582386f16f960a48b2c3945ac1a905842f1fd3cadb733a2d1d924a592fb74329cd278d764457c2dca0f -75be8c1c78214739e1a66f19f61f1c23d6bea7f25cb3752bff99df84af935530365c6852a90a7fd75901cbde9fdda3726d1d05de0504872aa94b605a5f27eb2e -cf222f908caf7405635c42d63dc54c06e057c232f0ae98f7cfc402b58827b31af5a7fbdbea9f36b269337a52d1dfca4d05667b2ed4d75efe89dfd3600e5ca807 -806a20b7b0c274852ed2d84b0f8c66706b3845df7b84a3b177351631746aa80cc6830e66651f4fbe9dafdcae8518dfa35c91a2ea62285373ccadf4acd3f03c1c -30d574932b9b3c3060d8580fa8e84f63eefd1c8be407575e9eaf2c2269b08407c3956d80c72790a23f6525c29c2bf0d3e3e8515af49b44fa4bb1e937b3cde325 -35d2ef7005ff58526d0a1ac1adfb240c4795be634396fda5e6b92d05d030d319c847164eca22ed13113b52da2dcc5763c70ad4d7cf04226153539ccaea897e26 -ecd4b4ddb79f39c904d7dbff0d46d7903c9ba2ae3b048e0370f627f35945911ed9161b776de99a610cbc2903d65301a7babc8aea290455379dd1e3ca01d72010 -26454f289cd1bc1d067c893576aced73e9faf0b387211aa9d0554ee675122d24790008bad921161e15e5e272c9f2ef49d23041f1ac1bf3058f53c23305f2561b -803ea9187ee12beb9fa8c6927462ce1e92f48dde53f185feda28b945dcb6b7006f64151da1a79db05e6e8087f8e861548c6bec043fbf46cb891bd3a638f8d705 -ff9696929ebd27fdd9f5ba8d09a3bbd1fb3d02f9e255639e95cd6be0c737d31ff09922a3fb4a15718d51a16d703bd7953cb8c7092401699e3dcd28aabe26fe09 -8761d15bad6ff464ba4b031e0da6c63175e1480f97efcdc994491bdabf4c101e5200d47e48b9e760a4c2dfbaf971361432085f9cb55a59328fd8e94a2ff7cb19 -6699ca5e10b7f44e1ab017d6563920d6dfd69f0928dfba6625b27a6b4d9f220250f43f52239913cb16604dad5d93670ae1bb930cebbba6514f7e9a611391b817 -11c235de348346bb4f45c120f99e0683d135c260f94173350c1023924294ae2a6db6648194d8442eeb9a43f76a514e630ccecec18e946719b88bca5b1547dc2e -fa77d8c3426e35b4c0ec113f4ee249e5f3fd22eb84325f5ce20e0eb54c15d40b9967587e6888faaa6c01b76610edd35925fb3487207cd118085893c1fb6e572b -e9a05dcc63d9a20a4222bcc1489bac32de77ae4c43b08a472a040e953c80d80495f7968ad4c15530734563af1d69374189749ac3a9cc59a20cc0903ed3dfa40c -b4fa4ffa603d79cf8d6b39a4a2972dac2f1985d766aeb6f13dd8f2cedf55752840996eb5efdb8fd14ab78e0f7298e7dabbec7a4eb04d461898889b52e0a5ff17 -ce9f5bc3a2250f3216f225f4e9ba74592ea4a5d7a66619e89f90e4be8ec41222a86b59ac7a2bb1b502f866f8b5494c953b0d7642ba65745ff02c59df78a80c1b -8e10770c42f0bea075fe57e6cee5659ba3c8988f6a543329be3f18258ae8542e299ee0a5e0618f26464a37380e04351c73d2feac3c9a4e40e20bda37f427ba04 -662ef3e00b1532aa369212880543feffd52a8dcb2e2bd303a7d082ee683ba40e39ef446be7dc61feb24e2441036505f4b7f06c3932345da9a3a5ff8ea0281a09 -f4cb382124f95a3e381767955d85191bbef495a714c6084a637c1b8059705b070287d1cf2c9501e9b013f29295a49ee1d405099265d665ceaa6ef9c7194a5328 -e6ff385a6b384c124451031cb252a8e8edc97223ebe53b0a4a1c3c15049a4a251df21031f65254ef7271970b1828a49b87de9e264754902b83fd7544e99dd816 -5bd10e5453f3c56aa534844026c3a1ecd4098fc48399a5073db39571f869880455d8c549498b3bd11340b8d4f4992be65008bde01708cbc08e4b07aef6eb082b -d1a024e515b9e3d146727aeaba8fcad9f344f193b2cef2cf38c6d0ef0822742f90b5fbdb7c4983d19a40d3eb5a64a04be8df18637856645c4c267a771fec1703 -606743552cdc28362608cc6318a9bcce99f5f2f8dc7f6c49396726c8924a431f0b49ee488ea185ded506356f014bae9d55338e92240fb708e7e2857c8f36fa00 -32608030dd9ffd71d5572defdd806150a0e09b38c2b18004aeac6477e6f7852f82e0c9a9034a7d98fe1a5efb3f89479e6368fe9307d6606f18bd9f2bb2afcd00 -610b412122d15269bac419cece47d902707e468fccda3b6be5b7ed7a21be5116ee032e6e6111e227ab625212fc0959675b360d7a4ddd448190a63cd77a443b17 -371e6c4398532b2a1e4b91ae955573a1ede5beb3110169a456ee4b40b3d8592b97a33617c9c2f01e8355c4a8b3b07d52987d8526030b1f4a7b30bdb26265ea29 -822fa8fb2a5dc28351f23901da35ae5dd21290a91988402e2c2e5bfc27883602c8b5bfaf69c78007ace47c1f24b950feeaedeb321dbf31cf7889d50097790016 -b760bc8118f9f2f6e9d33974f83d414b9f05f75b00c777dbf318f91346093f2ab05b8f4fe7ef2d6f87ee5e1732d0f9b6b93c64df2aca8289802641072a7e9012 -f9a9ce69e3ea3d122ef11d3510f2ae2deeabd8863c50a7e5edd16f20732f8204b1070b974d86a931e6d2531f258dbe5ce91b0543e026e67fe90aa41b1fb6da2b -193a2ccac33eebef5525165366800a49bc8963e1682841c9c0665aa8bf8f7d1c8e6383bfd7dcb6b6ad5b5d43922593236d34a1b13f0a5718234cfa38d22f4d20 -c20e8fa34201d3524f227f09d5c99e185dc77480d8d08f3da6a40020d4111d039408fd9574550e92e16113af58267aec94d3bdaf64e4b9fcc041e3e56f782430 -e41fa9acaddc2e8623de93654c7f908911b9efc5171f69677249fed1a928cb1868a562d42818e73c623108f3a77e65e6e6ce4a6a6a34aae556ee66f37dfad71f -518d5dfbf430b3ecff1c3700fabb671213e68350749929c8389b2ba19179e31a50abad432fe2b1d1e097a723814824a6e29cda5a2dd164497082ad503e800722 -827240ab21349f81612c4eceb2e38116a1c1f8602bd540357b204a49cf2bb01c8391e20d8cf116a57323af072376f698f099c75a1ac86854f6f9257e5aadbe15 -d23a460ef4ca13674a1322ff59e5efc16e744321633849d1c1bde3ae9c648204fa0df5339ae526d8565b34790d32c19f5e8ac85fc3f9b9aa85930adca2061c0f -0657df01f17f37e374ac56b5996d3aefa753989207557c94ac35ad1c8a78d526986945e5c5ec7fbd1efe13b9e7f9feb55d37207f9d0bdcba761a05444f879d1e -757183781b64dcd5585a89fe3c03a0b33617db1af615b93d681455f88818e90a507b990860f1a68b51f32368fd38fe22832d0998f830c6c98f97950d3d5fc60c -148d59b7c1452e32b541b9ae89e8b0b0757aada43aa6ca50f50f1dc56a903c1fba472a189f66372074619afa80a037ace9dcc288e32fe620c207566d2b7b751b -22973434094197be3d0bd733beb6f7fc9969bc75b6ed538a5fd4d6ff726fbe2f48c60bff7b44743ed69bb86e1bf142d535eac8888162a5cc47d0ed2e8f16682e -d493152c83a5050ff88a2f37816e428276394f79003dac171602c36b45bb2827ab8186b84cf2f04c21dfedeca238fc64e9df2569f8b1d9fa6d2529bcbee50c21 -1b44bd044e97228648d59ffd5f3a5725665d2a9ae7644f5a45cf3baea996ef2676ef1370d35f3bbe1ae3ff51f4c0ed63d4fb26f0c140b7fa421865a67eac9a26 -ee07a0c7528c216ac9afec85d1fafdb3b2399aa5bb8ed6eccfdc774b4aae1d141dc46bb6e3c48a4b9f881b26110c26db73ce07ecd3b08b502f7c9c7f96d07206 -b08d763c9965b57de90787c5f9459b4660eb7d0ba053be3739b42f770b107c01f3682f07964f9ce822866095462192b33eaf0d9837849b89f1cc56c6236dbb06 -7b3306887f357cf8740d11519bd3578edf6d34dbb6e42214714fa1806c00e3112901c4c7b05e0217993a0b08d31bf4fcb34267788791612445ecc43da092792a -21bb925949170985600c03961027e3b6c2778b101e6c9f6323f19a0fcae8c90d200ad8f58abd70e90bbbab55492ee65209b29e85161f88cb19124c93ec380719 -63d8588c73db95ab8ab728a61df3cbcc073f69f1ff6e9082dbc0cf0b1641ac135ea6344e1af84a94fedc1ae8e1673c1afea100691f1bb472e40fbae5d4abb70d -a492e514fd0ada5a3cdbe12c6a3ff0e41aae774321d6fb76fba8c7e63bf40f2729c0cf4b741a2579f079906397a9ebac1975d9dd582aa62b9bd80151cdf58f22 -446754fe24b115a7a5e14ed2e432f5980a3bef89454fb9381d5efba4db3be1067b8bd91e723de2c826e84724239128f6bb959946bd259a2408481bacf901281f -6091d23dbaa6f9a23464248f9f2d13122fe77ba149eb8a2b4f9ec5b0d1403805c43d6c21bd1fb45a0f6b4f0eda68f76ba24c4531381a526224800525b23d5e10 -45666899de5b51a35aa7cc4876db855e37e0d21f700d1e333613bd74926dd62fee7bdd7611cd8921929ee6d4233cd59e1c43baea36da1e9f61fda92bea86e027 -9871ddbe8b97bff4dd034d28372c61a742692d65a96a7257ab76df810ff5012e1f4f1b75cb3dcb5b1e2945726404350d04fba59a9816af40d5cbeeb7670a1718 -5ffe3b9f51f907c3481a7cc475a5b78da2304169af9f755e0a8ef5d92b51d70db89428a805a0e62df933ccb536269badb51fc07aae1c44319e435b6851061d00 -4099a444617f41d9a73901098b3b01cb5ab14960bd4c686fe671d30bcccf7a08cd9640394a21e686b9887059b3cf491ce0eb86ea6c499f33cabdce77c9aec718 -061dbdd014e7b4e70e051d19ee0ce48eaa3ffb9f40f9657e882ed582ed808d09c86526f44e9c6f8c30edfb11161d85febad8b002a67fb435a1d0a9f9a4d41d0d -be6f64b9b243fa5f87ac1c102c3c1867cea8a8a4f271bf4636f07b2f40ad2620dd167fb6c3264a111308a398232d69368a201ee1c6ef8fdf154c8ff9a4425d01 -a5ba125e1f1a8f0314ab888cecf47242d4eb75b16d84a8907295afd6772a1b2a71ee9417a2544f64bbe33ee9c4b017e699b698ca684852dcc4661284b5d1f613 -010086a617c06ccb02dc537d9199a046a4b0085c54d530100e1b33701e5d4b0fc6ee2d89148bdbb52ff9ddabf052a797ad4e01d18c48b566778acec0af08110e -d7e7d65cbecd4d223feef6bd825782621f3acaf6247dc3ef3996be2c95be610ea50bf012d5c2c917e5332f61d4afdbb18f6688976a1cd307b4c526250a84a11f -059f645df652af4add9b5860661099d666dcf63cd96c06daa01b36d0a7624323a521f68212d02ad5f23e029fb34ba3488988202ffc09c4e0f8921c644019e621 -57f3f674d31cd808e6e5193b8f5c7fb8c1eb0649e2a510ddc18e792a436a6a089141cdb6ffccc2e564242d7c128e735f627757063946b9a280b8474794c9b522 -336e9f2ba45bcad6a323f7cb5198b72f0830def007d551fea1b80134d6afdc011fcfb6a40a6cc218c623a2e98b97953e1a0c1751239e147d75d675bbe1b4570e -f0af446d4c5d1b29ee1e43a355438c2a24fdee75c6d5a8d17a04d40bb773f80a673337a809bbe4b956608dbc999cb2c97887201e7338b05adf887c42e2f19013 -4ffb7621865dd2c2637ba7ad673e77db804c3fbe97d78309df455be605c06726bc6f7f1f5968c3e95c5862f00646a2eecb9639e28b26c0c58561602de83b9e14 -66ee596de588cb098e98df9666ea3e7003003c022fd4a955746b8971313b5706ee5899e35fe8c341c2a8239f990965e4d75752ddf2dc9946eb9a087b7237300c -5e8fafcfdada9a8842659c80f2fdc94c0bba9259c0fa16c7a94f39eedceb2a2714c907913f6132a878c2f0b37cfc96f7cc2366ff7aef7ff1496a7a3a30b3f509 -de69b9a063b5d6ed144253a47d9d108de25ca7650c87d3719441e3d8cf53bf1c71762bb43d82f8bd50b3821f0f69236288b48c3d461bb9728f9b231319cc8610 -c2b2da517ba712548b90c955b68ed0b288c8959714a847c4c92ec590a1950b13232c8c92ff63dd4c3ec2c52a559aa207661b9db832a68dd01c1b171fefc0442b -ef1b75860a8f77138d9d177444816b977f27ac8fe24eb96201a52d0479d929048f88c7560d87ed20b935b6e0f958b0908839a1b5841f4424295f199c0feafe2d -746543d85518f8c9efbbdd36e7f22165c81d576b9beb810970a9f9429920cf10e2f7e97a451cb17aa092da76a35ebd606040d9966e9be4a1676c798228185123 -21daed837d80c603c9e99636a86576833519590e57ab67c7d4ad29998ae80219918c79bb7707a7f8f5a89747891a1db513b093d1369a43ba5a360836d83f8c17 -ed9d638914093010b466dc3b7fefb79c128d28c5ef26f6da5e3bedcc41020e01aa279dd411d4f1e4c5cd50b389f3725932798067e9d6b6df534cbf53dcc64825 -6d0ac4c80f110894c00998695c3e85ac6c8734d6b78ba13e4fedc3a2f7ad7324baad562a5e70df722da46e46359a115d16594eccb28e25ce8ffa1683b5e1171a -1a36d8a3fe3870bd793f6c4aacf3a47b2a69b66c3ec1d9657a51feaaf1e7a82ecbb6fa9a71018db9e4aec4c94fc5463f41e60741e575e19c88fd68c133289425 -f8c5a5c4ded1e56cb9d8ee273b40f13bbe6abb7025c1c762b84906294127db0bdfa938952d90d8f4f7ac0aa2b8cf3cd089ed6fd68581b10370a3270bc4714406 -2fd615d8102202426507c5e0c77183854c8bbf8af73f92a6c97312fa242fe50754c88f155fe6b1b887794757e116521cf85797a8c26b2fb3451c3a6e9ecaa414 -c974b22761b1fe4b27fe14e6864ce85df7e4985115656917f6267d2a5932ab0764a2fed06be5237baec4c8135e42d980bbd7905e4f5bcbc17eaa2e2d30ce0205 -ff991fdc9a3d71f8578486d40eaab41c4e390fdd072c7bf396936bb702addc2b9ccf7715da5fa211f5f52f6259f0af2274e98f513b22a2dc533feb867fb81005 -7b9880a0c80c331c459c203514be3133e55b25581c1327649c6e5150ef33671bc0031c076c5da514e4697d06c4ee53e270d6499c2adbfba791fbed6f52309f09 -4f8d2c200c081f7dcaedf7b91fd013138e1c33b4aebacf667cb1fb5cc208a5137b844b5b9be45d6b94989056be403a0664746de0eecca4ed937493fddabb2405 -f0f5c863b9334bfa662df2ca5ffde0d3c5a6bb676a114a50952280fb0d0fa7172df881a11eb3cbbc8dca6c7382f8d3c7e4fe1a17578ccaaf3cedddec863be81c -8d40d342b6150617e0d5002debfd198a5759de566beb7f191665b142b8047e2fe83af57f6fad5e30c200032b70079f41b06aebef3f42a3ba48a8f50fb962fc2d -53af2574ae2ede0775f28e7e9fbbbfb3681986c2f919dc4540bd6eec97167c19ff982c30c8d708077189e44a1d89f31a2e6cc5fa12d3ecfe36f9289270def40d -750065bd9f2d56270babebd9c00608bde40a47349339fc51c60c42a79293331dcd707fc502089ae509e3b9eda6523fdfb89f5647b38529d9715a7e980e7ab72c -316f933d9a48a574cd38bc052113c0195047bbac7b4169a59a762ef21a8e101dc31b6ac229e93d530d36e2c762b571b95dbdb455b7987e18ddbbd3b68c347e24 -1110d79c6c9dc0eba7431db7fbb54e8669ada9fd5a9f247db16169d63fca86078695426d90ee9d45bcc14223d3cc077093c3051e75f7ba5f2423841587b93215 -94cb0a01e57013730e8410b3ee3e7838489803d23762a5df38a55cb359483418fa5026c5b0dc9b83053bca965abd28b825a505b01b38f49199740b98de7b4028 -f4c29719ea1381847da9fa155ca928c83670f70cadbc65dece576757544e2822f3e720e73243a30a6c4bec30a8f8754e2a78a65da09c6fcb38f0ccd098464724 -fc147d72883a266481facfbbf34beaad6d3912fea77694b8ecfd86908e16ca050a93a12a8b7809588a50ccba5b51649b9ab58744957b599adeeff1c1ac176018 -1435de5de6f680aef030ec9cc9d147488953afb578ee6fefe26de1abe15193280eebb95798097155a3cf67dece4d81891e590b07b1aa9abaad23a66a46b13006 -0238b9aa20538c6a9e08e54d97bad4a8b0f8ad5a545eff7240eaa7f9281c750ec832ce5173402abebc3213c519b94037e0152e7e544194039ec69dab847c2501 -dd38d1cdaff7385d2713c5a75fa3587c8efd5c21abb1960a0b858973a9912a3010ca506a7b23c7fb84bff8befc6c7dcd56b7cce6efbb4da1961122d007f71e0b -eefa292d5042d40b17167472bb0a9d26ea5f95bc0f483a60dd2836fbf2fc4d1b21baa12c9f0c7ad009908bc79ff459b38bbdc3deb127d0adc8cb80369b9e642b -7cba0a9ae61f1ae8df1e065949eb45572932f97d83cafabc145d96373c83cc2aa4240fd8d9e6805af7f79d364600a0b9d99d41374330709ee8b786afc6506212 -a34295bfa2d7ba31aa3f7377f1df928a7ac97d2f4477a899982846ac80e0402a0c262ede2006bb2104d92edde5c3d744e8445df93d5dc859808044d74910a91d -89234ce9570291147e68d26becc80e49253721232e5cd2b8fa82e4f35639eb0f34e3069d6fc84ad2f2abaa8a066f665413672a4e687dad938e2b0171e3e65614 -0b47babc0be660bb6f9b468dfbfce4c6de1cd017a3991c5ee7dd79b1e5c02b16ca4ea36e91fc9d4d275570f6ad2e4d53065b50acb31b9f1ae5934228a9a6091b -707ce01aa5581eb33a47f740dfabde5e001bc2c5adc5ce478d5126dc1fde150bd20421ec6347458469e0ca058db0c222abd7efa58973174875c9d5f02fab8329 -8473412c692cfc4e3881529213dc6e5efc69b4af1c0e8d9d13061ef40484611d43f08698cdbf266bd3bc39fa87ce4b7b43c48f1dbeedb4472b7aec311cabd014 -dc6b71086c700f013a0ec2d4fea8f8af2eb8e226b9313827539cb4d3e99c7a2c6eb0940887dfc83531c89b53e1fb9ddf7ed212aa7226a4b0becd182792202f12 -c87aa9cadfa9e09c5b36211f2da7417c3f3bd6ffedbcc8a2ccabf5dc38e97a2fd3b5341c0f6566519c77e3fafeb8c0c9894abcafeeb093d374674745c2ab7501 -5bd3d03b92d7440b41dc00b8647a3babd4446d1eea9f7ce4ab75e711f7db3104fce89d5bc05b06e8fea3f60fb43fe459c4b0d5ec91c3f32a4335ab8c90859901 -138e87d3775c7fa7e1cbcaf255a405ec4c3f472c2f876a5e70e69b8d5ca5d01f8450194025776308f049e6d2bee024cac5a305af90daecd0cf8fe853d23ac11e -b145cad801077cc1485a7c1058e29d375f7362a4a40abf2fa2b260285c788024c57c9e079429163e0a3a9459ef205ef061f2ba3a93ac9d2e7cdc57579da93e13 -32135da4e34ebf0b06737be05d86f56806f3ba837b327de34e456306292ffb189203f5cf6df732dae907c631cb51a6bea02ac98121327539b6f1c4e35d10f520 -9e6b243bfed53c659a8a86e34b0a1c84a1e4352d07104b79ca963a2f857fec20f1c315cbc8017e452f8c67416b13a4bedb3d51cc3271371a8f2d12c01b2a9723 -1229bc754dac7da14da727225f00105834bcaf770d828cceb083df339967622f976268d6655bae12b4d91f257eaa7820eb9004bd5502609034d27e200aac2016 -17d0620fe0051e78bd215fd40be9f9d3d6778e14285f06ef63fd8c918c77fd212d8b6f8713dd041df834c81b882a17a93a5d4b24c97a97361e7a38007488ee14 -9dddf6cfd44a768f8e2c57613453999cfb91a1ab27bd79b6cae44792e4c97c2fd383b56d2290a34f5038d4a9bfa4ed7ba59726ef207557f767b8711ac3de2428 -cf017f069e0bd165516542b53cd639299dd4563f2b30f78226b2a2777c5d830ac2525ef4c30bdb2ebcd4f509a16830471dbd3743e2a6113efcb5eb401f2e480d -3459befaaa3f6fc4599ab108cbf8b99c17df83cda5c9d75de7d9758f10d77520f67d6b5d893cf10782908fa55ee34309224c23b894059e0b0da51e84d6f42926 -8fe663b59788bd9cc739407a60dbd71217a0d8adeef5d3fefba6763bbcc37c23523606314c5bb039e1e96e5a63cc402332b0a83b72846ef9303214d1cf74ef07 -4bae48d83012514ec12d76e7d01ea9325bc63bfdc785a709fd74e1cb6fd3e92473e499e3a49d98a7a38d34e79dbc82e5b6dcc14bdf21a04c414f727d2988fe09 -39bd9d33fe406c386dcc1e939860e6cc07bf854a358680757947d99a6fa88110535254df7dc4e9391d750e24739577bc30755b4a4b3c89f80a62643785de2d0e -02898656a0dc2bbf865570fac053a02adbc9b8d49ff04ba5fec51578b2d8af1cb87cbed68bfcce5917e8d60662e3e53d526e95e8d1802042cddfd2f561db6c0e -b7234921ce972a74e3d031230d5c03302feeab94bbb14151e6e45ff1cc95d000e5c12d66c7c9d5e6edee1e08f3357c1b25ff993bb6c6666d81460f85cb339311 -8f5ecca241c521c842bcd51ef38ae57032638e56c59859b333a1e50dd91d8306e055cd810672bc2548a5c8d2c7b9711e7bc4dc9bcbd812f381776aa501198826 -8172ff535ffe49cf87655538d4249ca4df57ad2c15b50b31cfacdb90477a5328049f7c385381e5a274060966b7250354b8b80e186570852126f3d2374c783d2c -f8073a2a9c4b2a72d666410da23632d5ca23af058a5ea5c6145d934b97335109b9914cdbe6ac78b12c3daecc8b5c45327d82833a92a5d20e7c792bb0d83e3817 -a58b3d1193b48fc3005472fb9e1c537601f0dc5dc8000eed467a8efe73f911030ebf6f1e6d25897e686e8db9e6440a56e3169f16d9985b7d6a17343cf922412a -492f5192b8cedbd29d417e80c3b74ebf33f1404d97502faad593afcdcd3aed269419cebb6df0b1f7d61fc8907d0c475cbdc338cf03c6e2915d802075ae36f210 -8ed6eacff5a7005e2848e1f96716ef28f6d1fc122a884a7eb404a63bea5f1309badc5350d9a71fddfa6c44b906aa22419de81747a4720a61cb7ab38620360f17 -88f164c385caf624d05e8c739f14b28b59a661bdf474bd8558095929ee8a283061530f6a226a0efea2cc285f148c4d32f7d1232921f85a587bf77f4d0bd8a520 -647a2745e3b4ef9996d4a0ae2804fcbe4b6d964c5000602b609f364578298e0faa7024eb809fe07ebf5eaf1da6542df0df52ef34329728be91dd626f04b03e11 -1d7ab70ea675bd4b4c9ccb336ce910a47e80f800f06e6ad4b6972ba10849720a3bc52ae1efd5ec9513d2200c637694ee188f94f2f1d1350340942c8d58e2692b -749a2e9cdf3f17335d864d1473611420062e912374515093d7b6bf15cad67420f9e4d4c2dcf027ea7ea54fb889a3736f043d14b2112b1021944f439034d6ec1e -afb025cc0ff90e23b66b87edc02f375be06a6e7198bb967c69c1d101b2bb96103e510435dbe4f969c046a3cabf1d4274308ff30566ac3c12d43e6e82871fdc14 -3e5397122ab48a5b33fd44026aeb9d897ae308625e04ae2532be96e83a54580f20e1ec3cb530c59ec50e1570c783f6ddb2818fadd6c7476a5920ab5f5486910a -7474b3cb7d13a7236ca53436f57dabc0ddee33bfb861a871a36d2ba763a83c2f1b5390e6a3ebf12da8975660c9afb13ca15c200394ba8cfb4425cfc088ee3718 -7b8ae67ecdaee979b22c722f8df8c8d75b4925c73a34efe3b39e9b38f60cc91fecbc0b0d84bc8adcd43f49911c8b4eeac72ff713f4d2d45d53f7d5563221b90d -6ccd8ba5668d54c610f5f54a17a93a7ccd7aa481b58e61a1dcc226440776fc07938a6de7832956eb29b86b270aa5fdee4cef70e06afabfa616236124a1501417 -bb8fd54fc53148c638e8af3795042483f1b6a95c443d68491b8f7be10c2d300355513a571d7eb7447ef8d5339e97b13ea0219b0aa2cc22085c3879997938d01d -7caf3058fc767e6c55c8e9f602754a5816cf853f5b92c049ceffb670cc78bc1e1eceda656616240e1dfa77c630ceea8d9f8ac9df3d5b6f4074d49a70864e4f1a -1ab0d2bf592c3e68fe9e7abc8d53ca090f5de64677e43f2e2f2738f56d6efd10d2ef57b9651a0ae7a4194e5c6dfd802b539dcd6e37c019c39115c8797eeca101 -1ac131790ce2dfad8aec0ec8aa482e4fef92e27206d007878ca61dfaf31195032863650a129905c9cc5c40e2ab7ff19dce99bb1e24debf5d0442de5c3b29862d -8aa28413a75d1905041f35a66afdbae3bded3627eb60d8d52ca6b40e3ecd321a514975c62ca3c748bdbdde52573542a317078b1b8014ef4d43707c96477f6f0d -9a39a7c7816d00ed59b0711afb43997ecad371204e9848e523d9486c40e61f1143324c8d32e67a438599d5b3e5b271897e3ba22961b38f2d3b4403411b83ec23 -b07a22ea58265b7584941fc2a4927cf998bf3bccc001c3eb80bf62cafcec92115f705b7f0be75df2fe2e2ed178f4ebcad3ceb2ced03d9bb688e9fb45c33e280e -fa084f428d516b0566f0c4c4416d008116906a5de39b09eae65cc856cdae05230fb876d5f06c1a389c052aa86e022acb40ff391d5fd40bfa3e036fee7ca2401f -631354f506937a8863eb2eadcffec7cde2b7cf2eb9001064804fe63299780d0dbc0ccae0a508625b1c993ea8764d3eeeedd70ab1c2beac12ddefaba465288c15 -79ec2e36c0d6c8a3cfa12c2e46dbc08f11177f50940e301904f169f627f1460d39ea8a459ded2b63c61bb7e7d0c0d62cd707e942c75a10b2ddd4d33ea0e1111a -7855b6ea766e6a5c11a8fd1f8c4a97304936198e32c7732d9614bddbb9e60612d024ac98675964cf031628b09979cde08ec41b3c30af818999a3174eb8ff9017 -2748d64093c2466d5de522abeb49b83332b446c15beba399d48e89ce3e370c2f720eb570c864e5a3f90d24dcfd59f9672b902c65049407c003f47ac04164e721 -fe8c0cd4837eda6fea18b7dc82831731d106170c46722013449504ae54d55e1d7405a690fd537011ee32b96627eb9bc47abc3486016d8c2d0c7b4de527cdde04 -82633af89f56315cdd13d47c73dfad5e51d0ede772cd7e482068799fbe912718552ac605b8fe66ff7dff95ccc438181293db4d7eff4155fbfe027613fb0e1505 -785ab4e0e85bf087223880111ecf5a32538ad96afded8ba153d3a2325d4f78007349b41d512c24ff387fc84bbe840e55feb0f89ef3fa79d879fbaca408c6440a -595b28b533778a672c9dd89821470e9b88521e973fdbc54f1cb9e6ff3fb05d017e48085d2bd27bf293f64e983a5f8e3e307aa2b4625e44235364909b93ef8306 -37d79863cd12551af69d71564119406458e58f39fb0ab176a029cbe1d066551de74f735f4e36f0aa68245e9d1c4c4c061a924af64b6cd43fc946080e1ac0d725 -e2f3078e8fe45e6d6d8b5384cf5c49ed8b8d4e2abf1a29ef2d52de9c14f1622e72442aeb3db6bed2744eb740df2a4b639074a565e943894b3fa6ea2e84b9250f -deb4c77f106a7648de48eb47ed6909577e460ca9b3c70ee7f08d67ccfa168d293da3f2d33e89f632560983c7658bb7d5c8bc75086462ca9029e4d3b4df1b1f08 -ad37f8f05796d50bfbddf2f3c4e9b2ad2e332f07b03dc9dc1638c5b9437d5417960a88803d674d10fa0efedc7cef2dd9d9b1dfb0b443c0862049450c8dcc902a -f4937072f9bfd26374687a1ac9ce457ee4546531c0a1c3cd824d2847ca728a020b9ebe562e45c5f882c28118e62566ab96ab111db45cb575b4613f274941be0b -8e8a7155c7b69dcc1f7f8fb8a1140eb196339d913b845e92fdf75e24580f2617672800cff7ef3c32abc3e1b7d9f303885eb1bdbf2154b2141f5380c3cee4921d -a7feb431281f1479360b052fb87890f939afdc4e5b09ea052751a90337231f2a62f33ad71020cb973ccc96ead1db6f9fbc54e7e7a1e0723dd2ea0de8c1803827 -788e45076c9dd9d027424fa3871948f003c65fabb6e5a74485b36a9bedd5992c756896d5f7d515343356dd9684dfa55cafb310530b5d5bfb11146a85f2326c0e -b1427741a71295ae6eef130795ed66e18a6b6349088ef691c03fa9249bf5621485d3b16e181fbe8545628831dc0dc555735f490c7c979b4365251da8e54fc517 -40cb5baa5e6a52e82e1837b5130615ae93fd57252dbdfac9737d6e301fa5c926ab31e23c0bfcc4515a62413d35fd184f91749430bf573debd536e902484bbc00 -059ec2ab7a114fc2f9bff373e14cf45c8d24f25c327165e26446326039c06013270da6ed7336ebd69c97d0e7c242a2beee1de45da40a6a42ff4504677f725e22 -ca369b6ac94e82a436e2f5b09e609c683a44ba34846df949f9423737a994111c9c098c42cb7c420d5bf6f5f5b67084e3a6feec8e1e6743849ac80a83079d2609 -57d7a9dbe56e1793767252fe42b9283abd80ca72e8e72367745491e498b07f22e448a08f501d3b15646c0d05984d9c71121dd73e3e9ab3106aa9e2a0da9b9c25 -bea2cc38ed128d6c2c053a6c91f978891f76d41e99e6d1d2bfb4ac0500411530b794a3ebe225374aada582866b99516ec58213b62644f681e872f82eace14f03 -5a83f8db5a400817b05efc2fcb7184bd25568747ba2f66d337a11ebbaee5de127787bbc2ced16a369f06d70e5c581e1a9320d8d0148dd2d33c079f3d750f790e -9dd0fa307ea3ce814c6b274dcae500633797f6010cac1dd9cbb93116fea9e11be874866bdef24aaab347a9c9524619261520af01f250aa42ee7a3dc451d21b27 -0e20d1180643b26045cb70016ae5e8ca7e6ec00ed490952905497fd564111f2f07ac5603539aeebcd536f6e1272906b249cf3dbf84999cd810fffc75b0d7541b -7c7251472e9a432819551da61c9632b75e3ca14fdda5698e8472c7090edbdb0c459272ed7a8a0a1bfb326e4db870706955540806ee94a490475dafb2cce7e828 -43fddf54737d0f7bc71cde3fc46b8dca83788a1d79f6eb33279e5fe1654fec261ae2a3414e4287c2ac0dee7512abb2f12e6cce8c6421e78685d7692030b6f704 -1d7c801a6d1d5297822b92647e80ac6c80c2d89249ba42a5f80cd11d47b8002f9307878722248ded383da68a76343654c6739d213bc5d2886e41b7e2bed10e21 -a5f9e4b1e698c4293a1e7e2b9fefafff860240442fb2eba9646f88cace5218234d57e667df4e811a06bdb80bee8a20ff94071b63eba8c4da67c95dafbd951324 -2ae62eafe1c2a43afdd7e919e521b0f75f99c8ea9cb718f1c13507ddf10369245ef0de2edd1b62ed8b5e8edefbe02412a237b7c18b4ce83992d18f997dcd4d12 -328a7537a6580393bae48d5814e43d919e4a30c1c12b47c6d9a540654e7e3a162c732a35f0fffa774abcce1e538428fe8c03889d3d3d5e76a7d36194bb140027 -9039655862d4f5866bedec85d9215d9aea3b4bfa421948bbe2a83f376fba4b00fe77b021508012419f5ba1c3495b91974dca2abfacebc27e6bfa96cbb56e5024 -0fa532054d639491dc1d92ecdc1d90c65b36f5a2c13e29a6c050e972c51ef32efd7331a878aed91d592884da783e18db58f27009dd92555c89790e34e192ef1a -e8c6906cb4c7a0217c241497736bd91f87922790f68b53ff5f2959f961a0ae18500e3cb88ad1ab75c8f672019617430a33065410f0988c58b9e24c21d501042e -d09480493cef01768d42e0a625fb22ad70b2010778ceac93c0ba2a460d76c706b9e178974c8bf426629c1dda78a99885660dc6de78f5d03c9ff95ff77f52fa1f -d2d9d9fd2af7317e4b58979cafafb0d972310dfbf4bc9bcffac28a55cbf3091e7c17c42170f0d899b1abb8bdb79c8de69149792c40604d4fb3133be73b13c613 -396c2d17c7fa7537c1e47fede0722d935616dc7ba04404374439e6adaf1f461ad5dd317a0d09fd878a2ceb524dac96a0c0a7af155a71ac2686406def7d640e12 -d2f57c1c069ddfcb3986ef77096e981da21219aef78e25a2e3bfcccee0ac5f25c33775246eb30cbc66cdaa83851ea68fbda1bbb28cfde61efd67bae410726a11 -f6b365950f8d19a7a6f0c7a7718451f89d64016f79b671fd3d4229b8b92a631223c30cb5dc18b24ab736c8c50c70abe01b18293f94900173accf7c8d28fdf022 -0a1f010e85f438de16b77456032d5ff525edc9f19a65902d18eb562d6374952c42ee305e15be2723a6540ac4b3b46a12aadbe09541fa8a5ce94a8b05c729881d -8439800c714f2655ad5b8e07f8e4f3b844447b1da75735f94d87d7203dd8b700a2d6e22d7514370bb10ed4e918ff78d44ab628e87566d857656acfb3d2da0624 -56c97cecb0bb142a840e8b63dca1875386156ef11a93ea8de16cb2cc6dedf82a8f8930b64228df8044a06cb236ca7b3c1dba1f2ba61d916f304ef9fd42964a07 -dd95e39ee2bfca46fa4f372b9a068ae710fe3af90f9da1b9116f10f7dddda811bfdec98eca7a0c417e3def4d54cfd8053d8cb38b927a145d1733f3a774402114 -7a1ce955b3de23a94e5722b0fd86b956f94fec40989caaf66042073bfb5009001f9a0138ca2efa3dea919aa939b22b8988c39e6e3b95cd338611a1e3cecb012f -396431a5848fbb333041038e1f348604dfefeac5221ec1c114a5b21bfd7cff05f4f4acece3d33de3a906b496a56beda5280a693bd608248eae0e2f6205ae0509 -650c2859586a9a503b0ae15a9a941171357d2a2eba28dec6a4ad16d85edeaa1f1dc742bb83c44668c00b363f1e4ff928e5db92be1fe51c12667b9981d2dd912a -e276fbf0a9950c39ec2aab81f85cf87334e7c264b2ab0d9b0b9cbda505f2012ca6c99e32c170543d91f8c7f9757405026ea48657924e7fd9dbb1562cc9cc221d -0b28b3ac32be76f4f21312658b7dd0ddb831c8824636634127ab848c9e58cc1186632605cd97f5527983f708dbca4c2d983c6cabc39a8787386d395863bb9c14 -9f4f219601348ba10dda88b8cafe22b8adb14357a26ac205e6c9c7419f82a1165ab5f55673a642910a0294fb7d0086afa75165043cd13d77e66a3576e5ee7310 -e5498ad7f2f9368ff55f904142cb5aac3e2b2929fad59761209e75a84762ad2bc00f9d31d0a5ba83056fdc9b9ba20084bef9f1a26a4bbf5da00a37db2861780b -70eb21feefbbb6b35a9eb5d3b0d234f10d35be480dc53a1c6c7d6208c97f091d58372d903ac4ce20821907ce75c28c51f6e67800a5006d9913cec4fdf44d3f14 -2ff06099e528109b045195233f552fd3a417e525612a7c196654b3254bb4ee11eae102fe0b54ac5de0aff1798218e78677ebad42bb05b83a9cb5cf1ec7a7c00c -8262ac136794014a289505f8b0e916a9c5c10a3bbb5ebd3b791b07eec4c4201d9ecfff84c8e7ba4f481bdb0d01153b9346ff993a0f48603b0c7ec58889b9710c -de95ee3300d6e974f861307862dba1d7e5acbe82fa6985e7f8881768725c3a1ade37b945ad415c5f693398e0d32a556abe81dca64ee544c3a489d298238b9218 -bb8578b636a889ad4d4cb22d0a0b024ea630822b794b7bb04f090a7c43afdf0d17bb55d10aeccbf4f777d5268273fa5cb93debeaf2fe6c0f8f9c001e8ee29a21 -f41c7600d24c12cda7d15e71ac5648a157dd4d29d1a6a35b72e9e094bdd2150e261889f50b21d416d9802c5d8c9695139e9a37e6554ea2f608b16ed346493307 -95ccf540b3948eeb6201f282521df1661174e09355142d576f21c063eb1fdb03781c1b05b74d8249862f14f12b3fb52bb34b3ccd8b0987d4dd336e2e26cbfc08 -a08b7204b8b94286440b0b5b45d68beae20d9ac9f7bfa632ec66341c1850c40636665ef41960791d018c75b49274ca550dedc298eb58bb027963a3021f5cbd0d -188b6df3f783a9db0adfeb0a6217e875177c83cd9e85b5da47b29d83fa930523bb865fd7c079698ea4155a86bdc51054b6d2786f3522254c1bc5d0a9c4fbd002 -069bcac7c21edd1ec899be69210fdfda4dc7e266807622c59cbaa8f9358ad21917db74a512e6c37b957c085bf430aaa6f8954a04ff2129320309f10f1b7b1827 -d415b692479a0bc54cfb22f6737aa07936804abe008ff608250cdc7d4852e307f6a3065515afb88182a37098fe0947fb20125ef795dc4ee1385bb561cddb8f0b -090b978025b3cbcdd70dad6c5d8faca5a4c8818c0746128fca1b4c551557c11ea04cdc6ca7f5151ca74a3449f4bc6f55dd459c0f5dd0d8bafd6247a32b62451e -cd4a21c0f4d8990ec11ca046c9897d858561bce437c1959ba0b3ad3f3206e100e7be420cccf5b5f8bf5a838331d9fdd69f51f51374fd99f8758225df7deab915 -ac9bf3ff52319a48cbd0aebeb8c447604323f1124d37c89e90cf1135afae4c1b9d35932a1702a0a38a42928f366e97ca5c66e2ab0526ac777988083adc56f120 -8bc3f1b1c79d443c09c065ce62829d88efeb5cd1d0e27695262a5546d41e0705e485bae59ed9a371016f6e6415f69120dcd8747fc9dac2c08682234cc65c3c0e -a97e20627a70c14425ffee6b2cf888da9d89cdd08c370674b144ec7247895013e76751870efc9d0f48716911835e66f532464d80e2e819a4c4760e71d4907922 -715236fec06a507677e12293264e771fa447684d5739e4fe49ad994615aeb302560c17c009bc082a3f5ffe7176d41df9abcc48466dccf5c14051e0926c16d12f -9f4b8833763f220bafabc079113fa412c9eef3b197d4c196bf2bdbe60bff4a1516ed05bb269e76d33e164e09d1824564b21034d2595639401fc96ca6342ee412 -4f3b28648f06e9379c9b4453b8ea5d986822ca27d59aab1c031c0108d3988000b74a50dcc43aa4bdb032730825b1bfc96cdf8790cc83ecf6a0c6da03072da622 -dfa7bab5861c274f75764be80ff15fdcefa48916c2e608e4e50b42d8e350070073059a4265bd1750c39eebfe32b1de01ec78b8db3ada4a79de1ff6daa2787514 -6cfa173e790323664003c2f9ba78c37184289d7aae2af246544a061e9e4ad8095a0b61379885ad6ea5e3e7b528fa06e87d52fff7b6f8b6b3e35263b4382e6701 -6a8f19546bc2513996233268b2ec88b8d05c9cddecac87f3658768a00fab562a7d77ee782ff49b2de212ec91a41b1308fdccdab65c011647c172cb7f77fd0b15 -c54f1664d20d155564d6895e987a56b60f4cb6c824684c631f9a446b9d7ee6004718969a9aac42162472b0ec193dba3dbdc6c5c1b8101cf8fe79579310579614 -e77923c91190d20a4edb7ee6d6a0a14c1e2470b7fcf1001006e477ae6944d601065eba44e57c17c4e4c4e1f9159c8a9e5066d2f420060497a280f67bdb28981a -a8028ca6bc3bf8b076618905c5e8a92174aa039bce39e49b78e23e58ed359e0c79b130b3df7b41500dbf53aabaa59fb5dba17715ad5ffd51d82fe4d28ddf1625 -870206a9fc5011e66f984e32c9b4ca43752d85a9bcb44961d1e1a9a5092f52291dc2beadc100784f314645bd65648db389293e13e98c7be2838602c40c8aa712 -10a898bfce6d2448c2a2aaaf60c82a7c51080f0fa6bd5337cb6e7bc1324fe10e087d86f947917c3cecfefc9c13a0a2069b183123775920fea1020aeb353d4122 -b001feb76e647dddcb5c650df0fb913ae667a1729d5212b5bbc1c9e54e1ab614db7bfc7f19c873e02c45a55c4d40da00c962a978c4155037cb5cdc4095069624 -84d646f9b0e01de2cc712a397caa9e278eb6933145401901311651e4c7d8d709ef864f5b32260b659293a37426e8ef01532fc12c6fd723702ac7dd8785d9ce1b -0843afa55c9e2734e764e25fe40393a14f77e70fc3710220ed4ff71a0db83e056ed4a2d81ee3bef6c54380f0a02efe89e193af7d35383f388359e2c501221705 -ae53e7c1d69e6d42bc710d4279fad21174a629c31c52e6e3a8f3061fd4104a04e4f9629c3b764ce79635551692dcdc4a1816ce57d43beeb684f8a97eb215d616 -d418559bb8899cd6742258ff72c7eafc1dac25152804dd1da2ba7808014d4a01d5ea9ed212ee14f5e95ddf3f7e8ee84baf23aeea55e5604f4b54b5f9cc7a4425 -36ec2603c17433454b8cd30cfaac1fc1c9858b5736367a1f5a9368ab9cab170ab5d0043dc17b000270ac78148837ef573466317a5cef564eb88f7e2a1bd5d51c -3e862e2b1222778947ac731239b7c914dc32bfbd8dfe758a688be43821f4d009e50d38f591530905bf923c168ba79df6cf44ac52da2b34d2b397589576ff5d28 -b1b2dbbb5cd9b0e12968b4ab286ea347096fbee14d22e5162f888d9231059221a1604011e8be548158dc93eb9830a772edcd4ea6440df266da9cdce8854a7520 -6be6090af6c63f536f977c409089d6d71131377cea990243b6d1ae3e5a71a71751fbe4b2f15496e117364c75c365711ae17e6e4e87668b871ce28544db87a408 -b2786c6a3dfe4a72f6a40d86356cb5109369fceac0d7af70a2d2bc5df2cffd0fe788cd45fe46a7979ce0dab62f68522135c145f818e26f4110785e0faf685703 -2b4d41eed581bf7154fbc6b91f405ff9963320d0aa1ee6111e130ce912751030be58ccad5a268e2188957fb7bb2ea0762460a2e086853d5caa9b7eb3b0ceaa16 -eb4ff17350cd2411c1fb44ea3c858c6dc8794cdad1a16ed097488c5cce461b0e8a06546ccfaae73517499668856a85c300af8e252627c6fa3d9f16c98edad00a -3264678bfad5dad6177f2e100c7278a389dcab962ed77720a87476b7aafe7509137187ce64506c8f75e7aa1b8ac48aff651734384eae3fd5cc734a25fd69b12d -50e949e059b1fdf12a5900a3fa3623ba2ad7ff15c83e1608d318a213ec42f72302ee794e2d1e33e3b9e579b3c10fc50e7954ca2248602c6bf72800d187eacf21 -8eaa5cb7c8ad9962227d3407099e9399f9cdbdf8d43f3339c1259a403a784123dd83752cd48a4f8e1f8ccb47efe2d79a1c93b1713232e6a524c1c829ba7cac09 -c9ab0f527e7f6928fa9535b2f98ff255e0fe7e10cedd5e19cea55a1233abf62a67a0bfe672d34b25cefa9a37853638d67b409919810ac35447b52993b6a33710 -c6129e62bf9e26a6bc2619b699a52044ac6991c11689b6cf87ab60cc4cb9730b058ae27a6ea1eda12e190c943e6502e9d270aa3d402890a377531065202ca901 -c629881855d017ac0699360386a409901ed0d856420951ef168515a592883818ec480cfcfea22d9c2a9af7aa6b22e295a487ac208c74732017d26f0fffbdc121 -a844bf6eda129b42dc728460f33f0e72964b4eb24ff20fc941d83b629dcfaa02453e2fbc251ede5c74174070876b6a98d4463858acae2b72d76d7ad22d1bd62b -d152159c56e408aa6ac0b92d007950099a4e25c1ad63c5711f14f3cac72be1273da69474e65f482d47c4609af18b749b18350764c1f9b5442426a996bb873809 -697fa31c1d85ea50d4e811ac794e8ca5c2fa30414814e20899d6751992886818d483447b160b85fc45add557928e3d188e9cc4d366eab97bba2769e5574b080a -5089bf35cbb70f816b7a24a7592c0213e69ecb279880579ed4c3d6fb19a38b1a0bad01bf49720f2e7bb0247facdaff4c3d693425753e815f2a7546e2421dfe1c -803046a544d1a5b757e545136def11c0cfb035d511e84940a6a12e51d6901e018bae347759e0ebb81b440765e6758c4fdd7c01a3eb7d70126368886a489d6a0c -2e6dde319bdaefef1c837bd311de19ea0e3c395187e71cb9395f916e5166360244d92962356fa499e50dd40f3e4d8c335e8c4db5817eaa4ed41fc8eae9279f13 -7c1b174e5ce0c75db5099eebdde835ba207d7d21be2500910224339abd09d5287ebe74b6ffd11abeb9e19c2bf0e242ba2c40d3a07c8693e375cdace7e14acd2e -927fb7956a30608ea08bb0e6cfd5519396635d4edcd440954a9268ab1cb6ab1909b4a2cf4b58d3f24c0b730919fe0e1ead41aa07b09a231fb788a2c5d3f5160b -b7cf26397fd62c91f9a7283a606ead9656e1710d3fa6d05f0704d6ec851b1b21de356f44c7b2a542c1c06c45a7b0313596545f35138e6f6691aa7e5c809a5620 -d3b6dcc468d3c54419a4813df402549e96888990af6be262018a189ff5acef127895a7f74c2322ffabbb016b864b42f57f85a6c9e38d5228ff1af31cfc70a72a -190d856ec4060a955e39e22bc9a4c1b0fa70d2467cf3a8b4b0904bcdeae50a2bc94fc9269770d3764342008bbc5260a3f4d81577b097bfe68648e82d1febf404 -cc7e809394069194f2d5698264c070eee95a9e0d1ccc84890da82e348dbe49042f5c56d6e4d8bd82fdd04e82ee7d76efb5f0d6c90b3c3a4f2a5b955c624dcd00 -365464dd3d7e205c4e569b240e986e86074ab1bdda53888b67677046064de70980d331ab1864e1005b7650ef57a76a036b94fabf089291f6e9dbdd4f22bf9c2c -92fafb888d7e037ce23c8068e4e3017b269223c6e7cc926c4cef4783723cc8165c5f24f01423b182a0c06c999be0545ff3c6d53e04d63fd5819d4da1f0556623 -a3894e33b65f364c94fb5e335518f8fbb02cfb69f6e6749e5bc851d17d39250fa8908d7cae7e44f8427512fa95c1a0b19cbdf897b0f524eaa29e1bee776d6b20 -3e276cd496357fe7a6a0098e0f2945d63b66c41dabf0379bcba6876d8051302e19f1f11e7e780ec1828f1f9956a5abdc18538c89ad95892b7d16f57b4bd1f52f -d240a116637dc2d39cafcb5c988e1d3d2486a49f32f8dc1124b4b509e2b48b2d444db155b22cc5972ffa96e34961f049755c7d8bf273afcd36493d07433a331a -7974a653a1121a499c2fd6c3790f777404b46811e9bcc5a29469a9983975410aa765ab0f73ad9b92a4c5ce854041b0499a98294f0b52d99517a595ae3f7b8f00 -372c9534de28168a39b3c0555a0071dcd9f5eefe7ba46fe2db3ac33aaafec500f261ea6b7dbce5e33f99e961e2220358b71623717f396c93683d031887ac8310 -632cf5fd07ce79c196b31b31ff78aa1e2c34966cdfebb85926a080ea24109626048f6ed04c79d5b676bdf02a162087a67aa5381ef92dd7a82fb089ba7a35550b -b0464d9c63a54d52ab17ef256a532eb2e8b5f2be790de4c27d20904dc4f89216071d063902cfae72f557c391c1887cfb1b44a38408d066b6cd9a1207aa029106 -4f49948424fe72964124e3d604ae9ae9b688e12104abb78f531abb2c97b85b1f7315d4311d2aa82adea6a3a48e49c3bde466aaa8e62c01159d4e8bef44961319 -fb97c0e054d658ef3b739f410dafaffcc608fffcbed970141a8fb9f4a552dc147ae09eeff34e077aa1317df6e8f70307b9420c22fa205878a6b2fbc2daace015 -1d1468d10a6535d57b383e17ff592f31eced440b591847dd9de2c4506ca4822331c9c1889a183ba201ca2c1487325f36bcee60be08a78bb73f0036dc00259518 -2b03ba8b9b6a7a17e2f0fb4aba12c0792958d91c53c390374b4915e437fa8409ac96ecb35208c9d6ea6806640834b40ca907625646fe9595838db17354f6620f -6ab79bc7aa7af5723c74efc40abff396ad00f29bd5bc041e3abc8ccf9ac233235d0598844fefa71cfa492293a00266b6c15dcd2e82a70086014a5817f405b10e -6d6f09cb34e82a2b578647fa43c1c03fadfccb60640f38a059b64d4749e7cb2675aecb7669eb874693f6dbcf1cf9d70abab62dfb81e85f7374653fcbfe996427 -5d48488332d5b63c0c4a5bebaa47a0bff3ae63408e1a3d7542f5634eea4b3f24ece95a4eab39aa1bdc0a88cd1aa160650135fd772c060c3915f711245d2d1b10 -5851466b7e7ef1caebc0ea964ec00bd366b1e39cfe626a338af3ad1b29497b06d18a93c1bf04e7188f357de94bff885eea5493e598a7168cca6f6123750c3f02 -84d0f80f19d495fd51d1e17368bdb26ce96556973044c567a457494f41c0d7125d597e9a3ab084e14a1c3b399835eb77db3e044400be2908dec78587c1345c0e -2b78e7ecf75e89a0b28e847174c2aead0a78317ccb08509c7d820bd847c81706b31d1a3eb31f21dcae6008644ddf4389bb0717541a6c45d34ec0b1e60dcd242d -23e86b9b9721d188b67d167cf6040a9a56010c780f5aeebe5044218dfa52b429ce4de83a7d04fc063707e10fe515ff8c7d1c89a3297eb780066d1aa4576e502a -0c971ac1824edab8aee56137c47c592b960c119e5366e58fce0c79e222853d0503a450835c2ec83a18a8ede9b08e70663fcc408a314769b9639147ca654a4f22 -f00bfd63337f0f4e635e856b06769058b45c1aaa87a4f412d733d27a71d96611dffd22b571db53ef4e52859754a98aaee45c4a4bd3157459e195d6413ccab418 -0cd4bf8e470a66ab1c4b8677e0382fb55bc440b65f955fde0bbb0049bc87cf0f334c003a0bd432704a5abcce3f68d4f38bae5ee1e70cc8ad96ecefe6a954fa20 -01e48ceada4e84eeb0ed9db40034c58bb03c50baa656259241b349ad0556a51bbe5dee3aa820fe1deaae9f0c92e33079725b24d193cce2057ba523f65c8de422 -fb5aef3474e2237537f9a1985b3914d6d6475f127a13cd72e4fd56da1ac158214673208b94d86c694e64bdc56e311a4826b97b81212349e813e2ec6e9b053700 -67c83ddc772b8fadb93e24a6ebb51aa3ea6f7abbb32949aae66c47edf3a036216ef2dbfc0f15b0c9c22184e85f4aa70447032b49472e7b8e11fcd98e15f6f625 -d8212116c041789eabf9bdaff07c100cb75245d35d83e1d9f9ccd0bb5a53342f5745c46448fc9e06a86b4edb212457795de7d113e139e409293a2662898d8210 -9e0dd35639ff9da0731c35e08c0da72c29859f2bb42ef84013a3f203da305f2753c99065f6ee8c06e06a6f25bb0c7e75cac6bccfd816338d665da234d4be2126 -84aff48747c78043032ad3cc5819ba2ea34089f0ef2d0c5739a86c971d322329e5f0d516fb0355603cc4de5f0ae162c5e55dcd5b8eed1acccf416291b5c1af0b -0dec623db716deeb7fb77f1dbb27dcc4605757febd1b6e80cf78b99bf8f18801abc3942b6c73f1ac9299e917a48778265a7c910e911205d33bd6f0693fc6a32f -e2902a8b0631b069005e0f5c481b9b734ffbe5bb8b9a5f3add9a1928f8dd1d23b0405f2411b11090ca2854a74ac94d410f30620bb2d668dbd8faa12e75a40b1e -c00373d45b89153ed60b594b85269b88defe8f93195a5bfca8479fd1bc298e11ef69b46c0374604a2e495323c1a6842f6918d605a9e8376266474d004b0f071e -940906624e438b385fb0922a6022e9e034450576519a0cff10a70629764b24297b2deaef2d95daa99ad0380c4c4cd202336d1dd531fc25fb10f4cbe22c95e119 -a8010548e2b269f898b155a3d24f9b417270a3c8df832394283809d142ab3916806d4b51483ed9b971cf8782acd9a6bb928025a4c432e25fc0b725b426b11716 -02a80421042c63a66cc7ef7f8083cd328845cfd8e2d3338147822822595fe12cd1bb3cd88268babc4c407891b9904d31e1e943fec71ea1182593d8e9e8c61d09 -4f2bd8d1081b526bf713f8b343e965269c1570de1ac3ec50227252bf3a54a5139d2a71183843e2c314177870a38b8e826cadd0abf08af9d63137f6ee33120026 -f0e396ac9d6593194e5b5dc52e4038d934449d84ac790de357fe67cd3d9e9617aaa1a7c1b416f4fb64ffd939183c03e5605d77d82b345b0563571295312f2130 -a405d03620a234a3828168778c9a2eb06c0d7fa9fae68e73904a5166d3586a068ab60e84ea76b510ab8164347d33956baa18d3572c5bd300b91d9db0f5e40b16 -56eb3595cf29239df3afb04549ccd5e957816a8c102e84375a085680fd0cec1687f6d38c3112a2e6d0d9c6ab53ae58cc631c2c14e23f43054ba4134346712e10 -a4263aada72cf15ffcd0ccea32c2446189c27e73fc4cd938c4c381cea6d4b72350ed4b9c1b8ab6362fccd13425d0fa186efaa7c1899e4e9ae1883847b0d37515 -16d3e18ca42c4dc082a5fa7db0f8c2ec6ad3660411460fb6cffa7b32f91a8c07ba94818dbf891f71c9e2540bbc342df9077f5ae0317c75b91eecdce21e353a0c -45938e1f2b39412b149de8b55cefb454cb058e8bbd9ebdbabe87c7b1833e9916c15801b4caa89455e1f6b4d8db6086274743876eee42f022dd77b2da24f9fd06 -6358e3d0cba9c10dd5c8f9e6f0b223398064e0f3afbd7c9d3af0a6987009d80ede6066c41c794dd27c6ac2b944bbb28b396606d5c1f72f497eda8313b3366d16 -77b157cac4cc902c82f9bcffc0f11971e7c66e9339b22652ef968347f1d7bc0a364dc778639f7c006f2bff520f458567f5699f63f35560813b195954acbb242f -9c4b27002fabd586f9ed948925388e0e428125a5e3240c543f29d6183a67b01e3da8a16f747bd417774362d8b2e7e5042fdc7d37eb1714340aa89cab51a5c918 -b13bb21c510a01294aa9478567a02aa408f8c6600203e202f57799c2240f4a1bcffef4987fe7399394768dbad84219db14a3c96f94e33a153123e137fc85b802 -98d8ed362c04b54a82f0f1ebc22c9680c790f533ee5620fc19bb3c0d315eba2e81101fabde19282f53a0e3912cd09f16201e676287942d42b6988e874dd1cd23 -c14bfc9ae1d6a3d47f4e1f079550bc7b12bccedbb4ce1943042b3814a102172c0089e99e57647b621cdcee702a0e992aca26f0092bb04a255f9acd9895b47628 -e2e43359378104f675c0fd80f242555a2a7fbff8f91a8cc9bfcccbe0bf906324139b2d9fbbb475050365d6fb1991020afd10326ec18264d1eea2f2f203f43009 -81f83bd8ff566a441712f7c0589ac6cb6e291bb7b199e02c9498505387f3a41618b593da985d11b18d89fc81e3679abe69927449f2209523a64cf411d42d8224 -2008eca09277879320867a80e524cddb4966652c4382c2c514eef8025eb5012c1439a680b628efb18a6b684dcb28a6975eb16094e618980b2fbe767384984810 -d589dde5e09c0ab86cb38de83e81cb20bb9b362b84995c7f09d09c58703385026efaa2d3cbc8f6aed37ad55b1c8cf25e2e4d0cc3fe4e7a891b157a8a2620db07 -29026bf508e77ac5dd4a1c486e102d27a1b024608b5d47b2d4ebf981e9be552fd5adfdcb1720bc83aa01cf38b382e4b29f9ca0934f04f8de5ff05b9704de4729 -b6ed105ff727ea5374876c048b00e884ac52480bf18b74b168cce4e82bd2e623d17ce48e3130d6394acb4c37b419c771d0f8db281395776322263f72ec6d050d -a12511dd1e60853b76ce2707f8bd1cb5002d6fef0df0d9cdc0c95c80a71b3e10f0e6e97b389893e87eabec6aa23c7f74277743bc7f1f41d4645a296e4064ce0b -72ebda14dbd43a5d0e9107d825966971f336100123648b02d569dea3c5ad7b10f007680c54c5c2cae04f982334671e3dcd1b4079737c05600ea613458954a010 -e1e94628338c93617debfab2b60820f395574e72ee971817181c5677da6b2c197e9195f67507023e89bbb7ef6ecadb9139805909e1a23c549e491996335e720e -c6f58f56df69652f25714d06c5cf8e760a4479b1f9b321dc848f3e6c96f91325ca30d6f3380cbd4a1beafd81bc1c42ec7b3307d6cab75e04876c6b8969e98609 -bddea5d5427d0490f69d63533e9d9a36491e3df9908afba1f8490361d38c731e04d8530764b99b5af1c5747800ae087b62248370ff4cc7a75d792e567a6df72a -1e20e571e2b6cc128f02c45194bde1b2186643e3cd75c835630e99cdc617b61729381403f52bd772cb2b485fecf0b6d28806e0186d24dcbd41eb82706d3b9617 -7d350fe7f9ef6e36a0e2dd41c6304d393ecb07177a65721af3efaf0c14f7a229a9245df77f194ede87fcca3962d46d39c431986beac0d4f1ae3a23198318bf04 -3e23ae54a7795a17d8f174d7ea9f028d41d2fed421cb10c5112873810515981a08eafd90721f90e4d4ff04fc4e948375c81953274a9132d3042492f931654705 -d20cd65bb0f5a3d04e0ccb803a429ec35335ea992498b196e399446d8428e10d6115c2d98b16f9af692d838dd29016470996d89d057301c5692f16747adf1a0b -ae86f72ac7679ba99565bf53d30eaa4b6f00b076d08626f08764e3ed941f0f2f5bc590849e58aa135e7e6b82c852755ef0fbfbccc5959510ad6f843b7475c30e -56998325e3b71ebac8824e33e11623716afa6520a2387b02d8cfc45ca3ce651a8e6b07112ed5dc274602eaea3484953aee1515418fba9da19612896bc62a7c10 -f46c3a65980a561b77c945000c20364d41bd40754bb9a4d39aa6d489f493e20a1fa96158e66c7ec24b47673b80fba431db1758376705a105968e59bda7e9b511 -e76e7418f2ab756b8c96eb74b6da760e3daf1f156a34785d9f4f0470e461560a98b277e0738107513dd0c9f41aea01774ec6f6ec4068ab4df6c4f4b76207d22f -452e51a5bfc13f76004d47a6452ece870f7fcf8ed17e9528ba23698ac759db14ee015f70add2a219cc7abd89e8f509eb3a377a4acdd2fa18c33419f184d02513 -0545076c42bef073843d3a9e34c1bc020c177aeec0d8954818b041448cd2162b800835531f963363bf8e46b08cb618110687e5c25df1780097a7e25e17b5ce0e -82612e54c08dc0f15a6cbec10ef65d8b8cb16e7a02551ea35d6fa7b4aa4590120c3aa2ffc5d0cfc760169a7946f45e9c2ff8856ed2ecab4d5f8723acef66b81f -edd2f204915a1b1d29d6115611a1d2425a7a390e516f3063aa93155895cd3e045fa52873d8afec76eb76aa64594d64a037c81dc4bb25b7f7586ca24a887b6e2a -3c0dcdad9fe927a18257aedf9a91f36bedc7c9a332ae505ae29c3231ea55f705b9df83d791119f8c49909a5b0e3ac3dbf3e105538ff018e2b5bddb81dfe6bc02 -0a0ec547c9fb86da7b0a557a1a442e3e29f29e52f13f5e1f2298d2eaf1dc331fe18d2961e550bf0978dcb960cfa4bd2880f3796226165a617fc3ffad38683610 -9e806d5b9b209220cda12e5e3d2baa277ec837be375512e6344b4355f58f302a60166611f29ed5c75a4fe58b3d19bb5b48eebf1619dfb15de943f29b30fcb00e -87814bd55115187eed16e62aaf68cd12a79d56eb53285e471073ee99ae131210da2aba06dfde2503c2b6faf6d039e9b7756cade2a15c65ad44f9a6487519221e -a82be19b97818c1e944304ef9131ad792fb3a87f7616016cd1a88cc9cdbb2d0e417dc063cfc8bad96051d4878a8d1e32b279ab6e13aae114bd9142ebbc67442d -5f94aeef03bb4dcac77d187794b1d39ab20ad31b48b60e4717cb65a8206383110e9e3fe66100208c7bbf7a6c0d21153a30302d0ae37fcddcf2ea31031860d02c -02af4fb82bd7f1003909d9d03d692713ef289cc855e652a1dd6e80aa110f09074f1e4cef1eb125de9a6541c6b5e14a254c6d3db14fabdc6ab54aa0c350530f1a -57b8d0dd192f0331f7d65c278f5c3e9ee0c9ff884196581359af2907021bc903f8d7a9d5cf9f0db0a88f53dcd5b4380c27db3cc028806e8fbdabcde289579114 -8923c8b8f553ee25b56bcfb41bd4247b625010a125a43acef13c6b9235d9cb0827220eb424554a05f8a455c1e051680a5b1d96cb7a11aa29b595bd86b1ecee17 -853a0fb351f217af74d7d74bb52f78f5a782ee7889ecf9ab269f5a735175d5236465a7949b19024005c4459f3a02fbfa6d959aa80b71fb50f0be7960e42bef0c -aa3e56bfc20674219c1085f6df4436728aa0f6b8d7c9110842ac0136b49f281351997c5f178b00083ecf712f6098a38bdb394a1106e4ccbc4962baed4e93420c -c124acab905d797b6d524fc2f566099f16a7b8215c1b972f431d6389563f471962c2b18e4c4b4610acef5ce512072e9ae4a93fb4017edb2ccff4582a62106b26 -f113c7b7535df85007b7cef0a9a5303bc812457bc22c51dbf198ee490f3c9c03f0d14b8409ad7f54680a84c8f8542e6ffce71328715d3c57c0458be4a51bd22c -1197bca6ca6758fa7eeda63dd13f557441345902626dd319e2dde3263d070f206965b40aa24cf73706ef1aefa0dd0e5e4aad50f71a5adc794d369c4547c67711 -dbd793afef5bdc117f8e0e4c2479913154cbf885ca15f8762d7dfe0a96ce5f1c9e19e47b5d205003e3af20d74199c30fb7d3934fda993905d83bc39b5a77571b -e5a484470136d1c7a55a0f7d9f7c13cfb26f21b504a0741a9f5e4c047262d6049f13ec4856f4d2a522b2ececd40d97e195822faa476ac0e7f5d149d92d7dc509 -29be0e5afc3bf5e0cae5707de61daaba73a002e23da8eda8ecae4ca1eb458b12cb088dd86807258f2d2bdda9e68863bc42c8afe1df9fa371ff59f8690814cf19 -0f5929cf323706f8ce74691f34e6732ee57d830309d6dd090fd8667ec55c5a0526bc99743a5c6fa8c6bee3706f61ff1b8488153bc013e1a3c560cef7dabec215 -71fe8f07691f56ddeb9175e8c851e4327da0cd084b372859ec72f7e991bf362fb097d4ebcabd9f3dcfab7f55944921c001deec5dec19eacc89aab0a3c102ca03 -f8fa34a568e6ed0c67b6a8961eee71ba1cc1cbf42805f44c2fb54f8cc253180f404333dbdb9cb0a35d004e96a6157f0ce05dfd24306e6c7972e40160134a0d20 -d290dfca8ec9a3493ac69a0afe8f56f66b343310609b4ee0710d6d94d4454b04c56fb14bfc4f819d3b0a26a8dcd7f3a80072c0410a257acc15e8cad6d8631628 -d0064e62b3fae5a0833fa85290213389617062358451ab8181a46570dd7d0a2ae7510ff7a4d800bb547940c2f8155ec8efd374c3e10268707065e3414c125f07 -6b4fffeeb058c7c36d49144ba37c16713a3c7836c9965994076a918031284f13de8f60703e1b9abe1c2efc6c1d5cd3b29040d6944b6223bcc4c9557320ddf601 -0a025eb9fb424f64e4e34227e9c1fdf803104546e97c9bf221e1962387d13509e716b85653776af918636706ddbc9eb6b3d969863b85aa2121e701df07e7b42b -5d902db6254da076b29d551af8598cc1587d6c9cbf280087e70ac4fc64971f25e4a4dadd1d71be5882a14e11dd5d7a4b32463fcd1f66ee36ea74e44be0ac5814 -2b444bfdd3edb2214a09e90e3d6e385f169183acae8fb9aa59de66fa7518691b121b6a1739a8ea65b5b4afb424be069bef7ad6c876190ec5eeea5fc9cb45c20c -ed82f95ce4c281e93b1a6da31af9d982285e555d150de7f058c26e682b1418289f14b49213f979de1ba2eee6813a6f5ce1f74dccd0f6675e87a8a77cc64c6b12 -a044b4620f5adc316b1298b2a6245dc9f754fa122299b1425df95acce75ae7005de2c2f91885e39bb19ffacdf0cce67ea51a253456b24fa815f30b9b5bfb3e05 -5f8916c2c8b240b1ce3cbaa9aebf442a4bae5ed834c876b1c8ac4e04500bd42326840da1c5e8c4ae708e64138723696a777ff5caa12e112debf90a6bb46b3226 -760e8a751ec54d54bd68c5cbdd49866f0cfedf4ecd4392d8d55fb7527f633a28d5e19b8ac09d7a0981951a25b2c248c38463229583f9d3965d838ee48d46f51e -a76c5767860c8bc51a9b3b8c09da7c58b1094e12b7602a026076a05624e2b1261ff7e44576f5d394176876a0f03d6d59a191021db5e1719c2e45af7676011503 -f59e19027413bb1a1bebf50030132108b56a6d1973d062f583a51332ea2e8a258864c88a2c7aa756c44f400df9454bd7b65852f08a84f5295dec66658df63b1d -f99d63fb558919403e48865d06d450350f6489259dd3cfdeeaa34d4f6ba0b12ea113ee3178a2a3dafd854d56308e2eed868a464bf068961bd3785043e6b14900 -2cfa3f85bbb340882287d5b8236e906bc73fa33b5698ac91dd2ee98b25922513e96fe68b73d0294d7b20773533fb4e46751baf18835d9de389df30fc96e2ac1d -72733a9a9cd7e01a2a90ce3cb1a0de135a27c120df6f06eaed185229a0b7b5144a6157f82b5d88474c35ba9064de9f25eef789e360926e6847835493f6a58e13 -6482e86c7b95323bc3913212342a1727446b340a953c0f7047c86c8126c7542c408e583505934df063baad377aa251b77d6b09319ff1945b6b9c71ba634dd52b -39a4c85e9d73fa3f1d4c79fae6425c1898110e9329a6f09781855ff7ff11892d15c61c411824a9f2ac47c8f461753b64fb06906eb00198bd8eef2bb0dc426f00 -128f0cc8a2e733b110abade6881dfe6329dc8da5dfb1400c73a82ffe1b59361396fd934ca0d6c066ea87bc3569a3065946c672467c622c6c22610fd35e58f402 -284e3b644f757fca21a36460d586200499e457607a9059fb3bde45d87b8c4a0b4b4fc9f67c0c54c40f27fc854188dd43cfbc59a9168cdc24e6b451b51fbc5730 -3dd3d5a1e7cbd9691ea94a306ed69acdaf4a0f3a3e9d8764cb1870500cb64518bce8b4a2b16c9509633ec50dbfb493312e85d6949a091b443185a8e111a0fc03 -dda4b487f7615bc59284b7b9eb99a337fc768668ecf6cd2fa356ff922d3dd7111763ae9f31c790abdd1656c3d7e42a8ec4d72699fab9e3023d88eb60a3da8a20 -96a6c239457224905e7e123d5a6b2eee266ef722642613ed5df55b43d6f691245fdb1ee55b8fd0b70bee035c74bd95cb1ee7dde5dc6fb5d19f7c8fd9d3641520 -6514444a486499c0acbc85bbc8debd0192cea834deea423f3138e9412c964d0582c70be310da60e4352fdc8a8b1f683551fe2c758d4b90ae322064d1bdcde81d -928773571e0c5f12cadade5a55897164babbf1eccaa43914df43aa71ed246f072ef8a4f78db28a67c6963783eed279c85ce4cab2ab1fb7a3ae5ea31286b56e24 -8e8f412522caf0f6c5e855a5005cdefb4e7798b065965e701cab967043fef2017cb55dd3ffa70867c64ba5e99585e0e6dc39430492019ea01d6b3158b59e1217 -6b0300c4f5ecb5abe8838fbbbf71b24cb2846d56ffe1deaceb66f722a1f01b1a88cd1e16dc49cbccb4b57e730e2d3a25cbe888f8efcd7df5a00695f89bf2db2e -e0d259616446b036949a3ae04d718b971608dd3443c4d9b76c804c06f94007082f69793a7f89ff0875ef2ebf5326e2535dcc62a9a6a64aad89fda9ea294b6e2e -2ff9e651c2d9a40ce3564cc4bbf85a53e07bc71882fa452b17aaa710e07cb600fe46c8a75c73d0736606bdd274d66e7735e08fe9c7ff02b8d301dde1deed1230 -f48f8115be2cfa1ceda77076c13a53d8c515d8c1435fc8cf3a1152eef3174213e0be407165008f507ed25101fabf74fdf385b48a18fe43167fd396c37549fd0b -805ff8dac191c712d64ba57d4114047b0b38e94f870ae603290e84177f0027158f9e05d2d0daba41e11c9d672df5fb1a5945485ea8f13fe428dd0693f2f71b23 -b7e557d56d176f4dd79a6691128c0c8d6b8ca32bbe6fccf65cc5d562e8f68312e22de8de9a28c1654ee1d8d8b8d706a79951ab9588bdb00eeb8f610b4d5f8e0e -86b8a5fa9db13a5bb15f29f06a1593e2504e9076bb60b6b22bc5693b33430b284fd54ad427c922a26c1650f6149751288b6d1fcfe1dc77d0d3b0b8c8ec13b02a -8933a4c8a44db8788d7ac52450ca412ed15dba6ac6867b8085b78db009dc4720160a1b9ff82e2c69f91a8af70aff6accd64b85238a7d3ccdf846a8f487f63713 -b0f3ce2b90c5d679a91865640680d19c8850bf204b5df7e557c41eaf2eda14266a65ead72b32de742f11245b8b27b28237a429dec75cb4557130801dce5b6915 -b09cefeae039032257fbce7571b25ac9fc63577c540608ef8091e3511861322749f73a682bc3e23b12431fac157a3d112c7b128378e005ccc5c3d943b6170e15 -64d97f21d5286fcf63c6217dcc76667e376d03f4cad8aa3215e4b7cb27532b2e2cf024bb231733a07c9d1fb980d12a61ac7eab60e8d2060bc3387e79f2a36728 -caba7450af4bd2d1075fc5bdf08354cc1bfd71acb2afccc3d28598703a7e15124a965f18c21d780ac768007886b667e040df8e977290f7b39a2ea492028a0211 -7be3428a1b2f3ca6e67b9af343d8601172838619a61c9d5410613cfd2f45870d7fdaaf5c931bfee946bc2bd7a4d98fff21bda255539a012ca694bb536bf1982e -62cf5ad32adc20ef562f1fb98ba917b6732be4b07f0acca4bb11fd7568abed29c5f95aaed8db944d83313ce60c674d73702108a1caf23b75a47c9514af519922 -c25144c9200eb34cd30d1f58350575c764238328626018f7eff6610c87ce2e1a86609579e65d6165cdf770721074ca0282d44154f4678a01d1ac0f1885774801 -ddae7a0d0dfd1fb53e534a9da857bcf07d912745243770778f9d7db2b47ac612ef2dc76d2c102c5bef22cde7538eb5a46735d39590a06b5f75f314c109152b28 -8e4f6fc19f4ac800b8e20040d4c8ba27a0314cd5a29f42b252d07fb36374f30fa1569e78654a17dc5cab5dc1f21695033b60ace76a0ee9c7a37f0edface04f25 -f63b38f18c28066015bbfee9eedfb6c25ac2144653ee0db545206dc00a652e18dc9e8276cb888deb16f160ce90bed351a0017ff2b3f9d52b7b6e0141cedc1a19 -355928f31a61a7da85c7e9bbdd728630f6efcfd23f5cc9df25864c0a2e999f09c40cd2f387e47a73fc834cabbf6d98d3a7b81ecd9b99e6a4c11005d88bf38b18 -8a949bcc4d0651796d607fb1d323fe4b2d007acef58fb2395e074b554090ed0996e8432ba9b7322efd33dc90e6dd0c9eef37e7bd177fee02069c8020033ca81e -0054bf7cd20cf284a7ff4b6d0fa057003de28788c1ee6d393bf057dd9176dc0985aca66b7396663f479a63e4ea32bf3da7331d141033380a3dfba540eb2cee15 -716356e414817d3d75387bf53e4f8068095ad265d70311eae76371c5212abf0e744006e61616ac94d1b03bc9782604e333ccb2d5934018eedbe136662085c02d -c6851188f9573bf313385b21d48c7d0d2fded60aa735c8c6fb8dbb50b35040234c078e964e33a34d1e8107e0400f8fb540cb5091d1a4e361f9462f4f8d17991c -23c5d812d871911e98f6674cd4a3183c3cf351873542b9b42d1ead7ef0dec40a3d031c7f826e4110bb2f1e6e8fb5e5500395eacc3104b03c8bd3c3592d150027 -4ed9026c48241ec607f0a022e9efb6d06fe53db2bb054c6d7db385dc6317620d03f6d9cddb13137a2d5df38a93252243364d447f7627d59fd967bfe4193a6626 -56772fc2aa5269a5af04134306d14946f3b36504fcc7c557ba85625be3b62614e319082615c86c09f01fab5da9c7789b702749e3fadb3c8876a634695fb62800 -b7b6b391e04acc1976bab2a962cb36f22a68d8eac47bf68ddd1f4a82ae99930a1dedec4b8c65f0a0f2d7b620c2d16c6bf9d5ae541cb8af7a96cc629f7df2542c -08e0c7be574b7e58925de9a623a71c10cf0d38e3b0b2743ab9b668534e97be2939ed03135a9cd45ce9ec2182f5870690557f84501536ef8534a54f98ceafcd21 -efd604fe8701f24c7825315ea8632ef935a06f0f48e91363177d80fde8a7a41cf322ed9410bde90af20554bfe70ea9d90a6f047c3701ca97a0a740bc3fef8b26 -18ab89fdb3075d0551a595170f9a83726a27faaa718fc2947f943a002b39ee04196c4d6147bcfb13775d4f90fff6ab6069e851b06592cbffdbd74784d933e818 -5b07df945b9b8c56c46f2c9647dbb0815ebfe367dae645ec36c9d1a1d0252414ed685b86c5adbab9e8a4feae758bec57b6938b1441f2debfbbf6421f55f9bf08 -3b3822e3ad70d0c088f4b5bcea278259e27522f39922c11edfcad9a87509b92295217ff6ec771c74db1d4f2dc74a5a9e4eb67bb52613da8f56ba682483d7490e -855c88a8de464554048cb9c313929e6f547e9eb8e200d77c42631635871ecc1dcdb2a885c09e3955953c295ff3c0fd2f77316e43ca3534d02d1eb2c4bb73521f -3d3e8da63f216391c2fdc866085816800f2a94733d08017a21c70c493dbf8e168b69bdcc5c0bbacaa42532730c585afd1355838930d7dad54ae5ff0b2ed6460b -e42419e0362c9f91408c4556437b577e71fed6c7a67c5750ee1d29fb0e3f8a1beef2a6c5ab6004279f0f5bdc6808c2246c05003ddf2e26908b6bceb1fa2d5b1e -7a6f82ee89288f8d60527ee8a2d40210c14d61833b3a8190bd2ea29ac3b5da08a8652701c21582374933ec962ecd4472bd539d5488c2085af6f08372d722301e -0f5565531070360aef8d422da764b23b3f05b8432a6cd17a17d368a6d3079e1bc56020432c7be514db48b48f43d7c030094346fd039fdbc293ca34de2bedd71b -305c4900f68f380144a76abce47188a3614b970cdd1621e83c9b3c92bc11790e8abce03ee9f91b68aa4d728506a05ad156abf3006df20ec34498e798bb180108 -13d84d56f9adb1a7d6e662224ffe3885b9163d039c0d5a881f55c24afdd1942e9099af20343fbe63c7b6bca1fca56a7fed4f46339107ca7bb145b630d41d9316 -27300764ed2fd7d0eb77afffb3612035a615b7267edad77ce63a83955b1bec2c9cb7a3a53ddc56d0f9d39e2819d9feab00c161b152c1f6eddacf52e3b920e616 -4fc106dd5b1fcabe765d5d66361bf900a71db3c8be0eea114e5d31703a0c1411650c0088e1f22f53227f6e13822dc5490108911d64ef0b9064d1c4fd18f60521 -c0629402f862a4e62f1a0bde3d33be0927261e0ce0d5bba294051d38dc73c0177f2723d5ead002c351e92485710f6d3a84a922251b898bcfe9db38b59e5b4e29 -b1da930e05fa8f9c68bbd85f2ff2d4e6b87219405a497b158443cfde6f450514dca488e83558ef229b1cf294c01b802edca847c89b6ba46c13125c5feb3db226 -43ee1e1da80d4d388739598d472cb72b1795da2e9e3e10f9dafc798f8e803d0b9a3cb0bb0afd0b206c82e2817cb487b6b2040b485d77fae2ae899305b0e9c003 -fad7797e77545c64e88dd197ad29c5e21a2d04fedc660ead93e385b8da2d1d28325fa3af7b038e8e207f77692544d3016d568626534720feba3774680947d12b -50ba9b30c74b7f40bcf38e867db269f5a1f37134613cb751f940bcd58e678c09632722967e4749a28fb03e85f492687e87b37b561a1d7cc7c093e358d8176f0e -1ed47a15e9968faf3336643e76756a1c6cb47055bb919a54a2b6af4bfdefe22d472b1af133e6d6c6758cd66281ef6d344f2f3b65f6697e1413b0acfa4c0b4c09 -7a432c9099c4d479c8bbc07e9ed142ad01d0d00e5fb78a5761809f4622150a1ce8f4485a7f86e15fa133d2872af91997f30ecc12a9335e824ae9e0893cc7302a -3e096be99c4ff42df0734328b0cc11a4dff40d475666cf92e07d531dee741d014f11a80f65ba127fbf4c8937e461c932a0efa4c68727ec1cec90dc7892e20102 -928347fffb644216aab0550943a410668ff40a97e1dd5be9e5db95a664e9691871886e4f70b1f066f02de0905461e1f057cc42cd178e7fccbb2fb427ba9fff07 -8144cb765b964735a1d582acd1d0894a6679eba818eed0695e02a6613e158912198d3f2a9927f490c2e01f25e4a321567d3c8021a88e92caf8c3a81d15df6427 -6987a4a93a6b9dd670c8832c947947406a22778d328f5a41260a534ecb3f3b13aa7848c777be3bf22b010b1a1e0dc91edf7ad3c2271c7cbe5a9c3561dda7d514 -ba73d4626b4d12f74918be80f517e8e2b35c663097751edd4facabe9ead04b29585ac4c5c2b53739a167f8b50a977e47816727931afd21b251b36c395e8a2010 -12da880036d894ac644c6abae3e960c193d4986a0c33e95481fabd3eeaa1c0135b24efeb0ecbc661c3d475f76878c8e0af02e9660f034f5672e2f3fc48fc7a0b -57ce76a0f4f90f690d28e2290bdc94f1faf431729aa126d5a81324317f98fd17ae240701d74d4fd19a99a43330fd3173162ad01f1675b226d86d3f1a1d502718 -aa675813941ffba24d5cea5065d622fa6b51a1dab210830f21fbc8621e5bc805169576b2f2c666910920274566ee6b1ebd767138a37a1bbd465af947371c3810 -93bcb2fda0bb1759f1051ecb9436f1e38e05f829b0c4f1ef41c66f443c63101319d2b20bc02472425c04778d1d7e51c0c07ed1b4bdbcc498f43f6f9bbb18f316 -5c9b4aa6f648c5dd4266f46f6b9abe4b95611b7fe98470e2c6cfd97cbeea852f96b93bbd244ea1aaefb0af3e23ba04d2e432dfc4f56dc32110f5db3aef38b01e -b2cd79aeafcc47194b1755579fa946d3af8e3a5374696c6a7d9408cef7975b05468dc563d250ac6f87a002681eaab13af6f27e75135d42f452093a9e02e3d228 -380bb6a9fdf60a618fbab6ea56555b3389311f4c8d43f6d50e4f34c7827f123066e1132bbd74177744edfd2f6c0b2798416bafd6e6ac3979142497c097eaf00d -92771bac31c8fb952143a4a68e52b17989e8dc9622ff08de27ebfd015417d71c8bb28ca0be0129af7dc106da7b4b57fa0e2679204f609170b91e8650b98d2b21 -61644c90526a2522c188f6eb31c382c16f9510e303629c55387b23986657cc039b3bfef5d03ef63741734a691a8dbce890a370364a5b3888a1155e16ca8c9a0b -bfc8bb02683dd4ea5cd6df579ea78c0e3917a7c75af28ca77c00a6006fa6c70451bc1d080c25c15eee12b774ceb2fbe06d34a3525dc24d10aebc45868fe87d05 -9b4aa6ac4bfc582b0f1a03815c5e58804d3fbd45546c06706cbeb04a3e7c2202e9d1f5e89db9771ff7e7c1d0ba412d7748f842cda9b21fb13e3b1f60381fc42d -39f607bc9be052db8f494c163bf17e1fc7bcadb9f0603e3896125146b9c6c219f1d081a0778161dfaf1388ed5ee76c821900eaba3de4c1fe979f95945c80d10c -a23ab3dfd76dfb9a92fbad4e3d4c303118de03b5f35b54dd2d3918d265100a08dafd0b462ee827698468310f247346d3baf3c5c49d7ca6c79323fd809cd93314 -7171a11f4ccaec96e6bbad3e2b744e214b3f3e5ff2c39982dcbc2ad7b765cf214d7b0b153a5bd640a57a5945564e05b2b1e48818e01a9dbeb9129b936303071b -55f28142b6629de98e866037c227d204494b03c5570283f1727068d1f03d1f0b0393927e71182e4e81f22ab0ad817b1cf017bb6a5c85247bd127ec08cf139314 -b66563285c6e77ada82656dbd523c57bc285acb9b27021b0c33a735f5c3cb418da55bb30dfa07b36b7d3ba655d4ee1cf413cbb179a0e7c7ed242b10e51dafd14 -9258feb0759cc337ee70a7ff13b377a07cfbed79e0e3886af0da1aa5b46c0c12c76b9569e17ed7a194e9df812d2ade637199dd28610a78c9625a7aab23814f2a -4338ed45c14e4822383c934168f37723f788f20ad06893ad388e01e983926f1ebf8e0b766e5223bbe7963818a8104f16abb1852192005ec153c414824ff5460d -9acd440ae0e8e2f20edf4f94a7cf734586eeb30c3d19aa0f0b944d6ddf82512d653aca943fe5284580f8c432aaa1140dc07755302f9a95567404a04303a7721d -5ecb56b9926ebff6132fbad33e0df76c1b03b44db3422fe369e44ce3f9f1d304fc57feab9b2ecff04fbe9e0e4d19d284c6723c93c8096d007ced6f3fa544b61c -d3bfbf72d890b1da78e690af041c3bc90cfb95b86c5e73e0c287064b486c7d1a1b77407da86a018a127b68fb9ecad9fb3760911e4d63c54e4d563ce7ab7d3f30 -b9a3f300704177d4eea95e84c6423ff22deb3b06b36582b1d6e4d16523a440182708e5c68996642709730168214421045a9f57754ce5383245166913b2eb5f0e -7af8b30a62809892efc39388b23e27763f2c05fd1bb7f2156adf6095d98873081e7458ac884cda939c588369f8b0a6391551d9c2e237832b52680f583db0f42c -18d1b2e58fb9eeab7150e2d04946e3d699d2aaddd14a52af34683520a4e82415fa00fb04048170edf69e9b6a8c7f369b608254be73c83c2b6ca97c19c6e50c27 -d0a286834ae81b999e8d6793bab2e70a9bda3336217a61fd1d4ba7a135915405da9435c8649e9a1ae1d578743852e69b40cfc49347edc812ac7c3b3fa620871e -dd6b1cec48e0614182c947494f58022ccf391869d9f836ffc4d815f61f28641b276ab4a1287b1b3f5d00a40caa33deb48da241703e6a193a63b9055e675b2903 -5271c10cdfc308b75c1bc647a7bbe6f8008ca8357f64927cc11d4eba9eac6e1a6c633f13bf38d7db0c76866930de530c08f1587d51e37293b9ab2bdca278131a -27acb7751ca307a216d051301c829e2e08857ac5b38b5507cad8b6815c20340ab68327917688532d269889e208ae1a15bb79f8368d70edeff460319a86a9882f -0797ced482dedada8c8bb99bd3379e60d3db1c9086503645aaad9cb17acc2003be90dbcbbd054242985434f8bcce33b5233b3a0627c777de0c05937784efaf0c -5053ca024c0593982ea003cc54038bfc85e81d754134b4cdddc797aefed0600018481f887994c1fdd451e130703bbe313fc4ad85d0bdb4f5bad01e5431bc1017 -5a182d99a90869e76c0797326e3d54c063e3d858eb120661f20138e14cfc8926ac40b64a5902c8f73850bc332984668261c77fe0e5cf73407616b37463aa3d2b -9bc78b5876d7272bc7f30b3a798d52aaa2b0cedad093ff053104b6110248d909553c352231675ff04af7e92fb8fb5f334fc11ed935fd0f233f840acef85fcf2e -d8e128910e64bc087c4ce70014463f41047354cbf496442519e88edec439c10d2913a642d7b886e49ba83736d0dd94bad2c80124803f3c1dd454d78985b61f14 -1e4da8c1193184eac7a2139e198d65787b0fe487f682a176f72b1b1e4edae82eb1924bf4b4d6c015b15f57c6a349a9b99e99a2d45e1f33f18d28f3aadd12271c -e5c608d0cac62067c0c7d8903d94fd3f6e1f1e16de208dd300f3e0c6f835d6286aa3f02722278e09a4392625df1f6e9b825633345efc23fd0b0bddd144f06d09 -bb2aa566b596129f0a24fa5585115b277f3666a067f4cee134d7b59cc2f15012bf6af2d927ad3af67210c3b0a71fd7a183a92e82c7b09abec52d64b13d19f82f -25de0919e562feb9bff49ebbef554021d5ab93d2952128b96b3620ee0baef61d2559e246fd926d757d6ad1cd8bf768649afd802c317b0d037330eaafef98fd0f -1c5a728807afa0710618eebd9679c33f9efe8bf82fdda7f22f6f9ffa0fefa8168134734c613a47705e021033a28b13573e275d9cfc35d2712c397b25ef6c6f02 -6ba148e9b1b414db246b4401d772b912a60d0a0cc52bb2305f39a115ade96a2bef3dccdb45f5c0b85ff12f717f7e3de9d69105449029d795f5ad1b2b7e059211 -fb4eacf2d2cd31dcd1d100aefa06cf0eec2f9a162aaaafb3cb3e37ced966ae2932d7c8fe708bceb2de36479ac1c021e715b546e9063bafcb8690a8b7b6457e26 -5c956816a598a24b1766754c36442ef084921a0a821d88799d42218d0740212153c1f8e5e52a76eaa00480dcfab9cbd111735b2bac68203a7e2612c31af4781d -ff11e374d03c25f277a9e622298385ae1dd19497a5f37f2791cdbac33803be01c212096dacb3afbf507d6086be1918b6f7855da8134c5935566f9b81a115ad2f -ac8ba2dbc825de6edb19707d113529495ff97c135b193cf772adad453ee07f0bc93b9b8143cae24a414f9f6e184d432a37eb7103dbe5bdcacbb95975be11a70a -ad50d5553d23ec500d39347fadcc8784dd59955d957fafcf04442396b997a12a50ae84945a3597aa8a2fb837e1a40ff8a98c61b23bfe172ac60427bd27203b28 -4b217246e9a6151012af3039e54babf080c0f7c6ad96667e97628a49492fc023d7c136ddd44f03a27926b75dcd0fb843913a30d2eb1bfe7edb6deb7b0b5de10a -95a5797e6b124e9559bff37ae00018271c10a3fdb22d2a2085defd374a792123f968220c9098636c074b62caf0594f7c1f444f8ab1dcd50d827b910722cb9e2d -ae01de803f0d2ab7539ae65f8e3ccdbe5c2c169ad458573d4f845f084074b62be7e027d159b7a7c24f2a2a7e0eb2db7edc6e7a6c6c2c47152b3679b2496fb319 -64542bf7075412aa7845bf7a5568861bafebb3632df4cb27bda90950f4eba72da1407b549b513e125748a0fd4958014d11c29870a0da5f7d1355239b4cf54b20 -e5561d11c1ed02ec5e51aa5f643e2f81f30b114c7348cb87ba3569d98ebfe12b0a97ccaf0d0341437382d4e862d4c3c53f74c9685b3b595a2d792564fac38810 -4fd4f85f2a6c5a9a2676c96bd564fe8c4b035d76d726d2803ff65206602c5c046251fc1e5d9b231abf20545193f1e588181001bcea0bfb3b5f7bc46a47ea452c -a76d1a31641b8934f0c88e9aae19232d863de5e63ea5abfaa48325d21483c70df932f3be96e2d3ed9271c9ac0571e7213da07b5dc71a3ed8485016781512f710 -f2bdc22b23167a83571d290f15d04588c6b0d3269c140439d28179350d3b2b14517d440058e8a95df40139212fc85b662a70b974ac1c2e599103189ad367d004 -1d62cae8169263ec19e6dcb2536a61c6700abc651a5a157d6af247539121b4027abf2db0963cc2a92377c7ddf534699b0d589a68ee2a6f2df6733b2e25f5f412 -5f4bbcfe2a8f524aa7bb7f282e90d9792774afb324546a881bb581a5a9571b219ff71945ad11d72d568904068db8827cebf6e9cc1b07f21a993d13497b06d620 -9b1c1baaee48abc92da7046111713b14b97a87d50bb24f1dff3b8c7d22a9641ef84baf3517181d73fe84ddc97daf355a2f64279da10ba97cb30bfb69e5020e2b -1b50148cd86c03fa6581cc58e7ef0f32f8d8a9c746a90d95318eaaab2a357907359ff9e6b62638a146b16a9cdceabfa817a97f78f48e1bc229aad3aa59cc1a2a -2e74754aa143f9fe490cc5e252974f9e2ef653f9b9dfda12e6217bc3592bb225d17434688cb44ab3840c4a968173553a78a1526e048d56f7a9b76e5b45469d2c -b28c2e432ae740fa76429b0c80794a4111e45dda39beb9fe41ca06a7c3114e2c7b9955450462d730fb51420e98b49f2ab50a3b5648cfd1c21b8c07f3c325eb2e -3650784a4edae73615a604e02fd4c84420fb0b91cab372985e567bac814ff617c7aac87e0066d33e6c5236fbdaac362f6cdd1cc02e07d98bcc75add51c044000 -f22d38d992e863230e09edab84bfa67f25f8af1c6517743c9d4025083b8aac08e1811656c145b9ab44e106c67b4596e49d77a4c372ec8b93b424bab399c57821 -9038f5a91f35ba7e558df93fb8d515fdbacdaac9b829753b2e9dbea854bec42399e72f0aad4ed2ba6625ffcfb712e21d91bdd678939ac598185bdca27e5bb121 -2362ac33062dcceadb02de77e0af85423e62042f0f751b1dd3a2c69a14f5aa0a5d1bce78d083a1b8b724761e9377f71f100a1362f510c08de5aac160953fc41c -06a1c8a758ef0bf3adbe2da2bcfc3e2459787bca91337654e77c9e66c89fe22a1077bf9ad83281da0290d1b00c78b338144481ae5490786b1caf511bcf535813 -53b8c8c76dcd60c13ed2bc11999a1472a5aefa4de3165ae752dfa2053b52470707b4593fd1807e5e910c9548ae0a3632e192cd7756a93d3318e1dc60d2414511 -a12fbbd62bb342c28c0dbe8dcff2987c23ab3710f4d1028ad32486a8439ca8095a0d5beb668aabc03e51a5f013e869bd8edd85cffca585bd685589aad2a1a62b -5c87d9531e0796ad0342cf376488d4eeb8ebe43f7eb210a046d0c22d045ef710a637d9dbd6df6621abf9a4eee0a0d883896973280d615b7ebf4553f6d254ae2d -2dfa45ce984536b1fb9c40f29734b36ba2becd263c9ce3226b48e26837b0fd21ef9fb9d036b75a97903115851efd54a599b511b4be11ca5ceb9f0d218b5e401f -d76b2e6a3fd4c1b4443a2fbe797d3a63e4a9cbe79cf8bc60acb6a922723ddc184109b89bc8f2ef3047f01bb4fa9c3b83284505e4fba4af8ba9944bfb05dbcc0d -5bc48d254e2921231733a98d419cf4624c127fe0d42474be004b60454f64760930c4a12d22cd5ea4ac1d3a961ee68221a8fbea1d134220b83a9e41f7ee9e9503 -abee8abaa35bd3049a93a4863a3b43f9db028d2b02716b492647af6598c74b1b1dfdbf72ad048b5e5322a483421b5ad224e8f8d63f9ceb381bac4167720bde18 -6b1ea395c84928eb900fa863df8d9dbe43d40388ed05b20c8bb42a7a65b63c2fb9e1e7a9ba7aa2f90fc728ccd8ad2602037230419145673694131db59a2f2e30 -bd4b87d4e9e535247f71c96429f0a68d4f7d0278be174940ba2de0f180e3bc00f191905932031d83fbd88196cae62d15ddb3f8c24983667c803d434928b1b517 -5757d931ec9b9a7dcd6f35ab5775da9aeacec141fdcd35bcdd636db69e2318012fdac9c16680f32c17f682013ef0b1ed0153de2dc94ccdd0b9aaba74a09dd40c -7e071a46276c76c2633c0b947e124a73d31dae5b39c1d1bfcef8b885dcd50b077c3d1f0d4477ae96e7ff13d5f2d6fd41b64dad08ff7c0b10572a0e2a6b3f7024 -2b48fc54e9c284cc190fc4ac30b1b6936e646fefd682e8bc0837c5562e32831a3048a67a2e09c228a52bd1338264ff455de6140c1cf2faea78a81f4e1998a215 -3d027a5b007091d34d83d272a60f9f246a245742765da51ea4d3c2dc5632ab2bbdb048214758303465026faf6faf3872bdbffc9b03068dd9d89a5310a4b7b602 -a5c8da7c4b533acdda51b4a6773d59a696059e5d13296df107fc74889fcdeb0e9983b63da1b0798aaa011e4e9d6dfba4a1b8eff0b51d0c363e01df63f5a0991c -378e9c4f7a713a27b84ffab7618f9f2ace0314204eed0aefc2fd8280fc61e02eba4c9872e18ed9217d2f2a8dd476ba076bce557d0b8d43ce7254075cf3e01f1f -f2dcf2b9a79c9e97fe10ba13afd4cfdc08aac224b37eef252e2d083aae064a13525b3d1c41156dc8015c74a8d149b0485be675989a52b41562d82a350dc22c27 -ff78884ac388e2b574e6b91de6f6616134475d77107223688033c8c5eb47d709f6661cc5a7f712bf23d228317b3cc9f7b627afa98fe47963fda4cf73c87d0205 -51b4f9dd9f15f2130bf2bc724835a6385796c2d2df0c339f01f2d91e3aa1e81095700ddbf10d339caa104681d3abdad3620c9cd673347caa6b1652ea95787f2d -0ad1602e1b6a751b764d4ad532074f2ed25940bd10ed6251951b2719b2348319c2244801f7a229424837350af8b3a65907bcf3ebd71ab0b2e33d7e6f56bc9f0a -b0158d42dfbc2ed1d231c5c748722a418b27aabb52576e5f09402b58c37bf9259ffd940358824ebcc685794a0077b2528fbe26f6083bc45f1fe0c377532fd618 -8ff82c6a5f141f26e03abb5e38f12171d3286d492dbd96ded928ca7011404a0fd49c4c9ca54eb539acc35fa0fdfc975dc170186885b195adabb5c52b4ebaec28 -fd055673cbb85c9b046bfed89a5a2697871bdcccd303204876e2e8b7345cc006be1e7b409f429cdfca2b3df1e24d5a64cf7a34c97122a01286d14994207cfc29 -757c3a7eb5a3167f07ea8a1e4fdb2d3cf70315803eed92e9038ff93cec6eca048f687f132af95198675b490e0f173c94baaf94f8b1f4d65e2515739681623526 -f65341a544c661cbdc5fd950d0a6872d48dab96a3b3df751d66014b1a6246c032a480dfc8fc3a22af9c5cb7062b9f16284cfd94904354781aa094fd21da43a16 -671cedf49b1fdcc9d6708b5c4910aeaf5d00c257ee49f1f2837fdb869c10d72eca9b6e794320ee59e4a4af7952552ece5d74dd8d789ffeba1bc031b1e4bfac15 -a2b8abe8102ef1f5a93b57d02fae9801330af2020a2708a0c06cb68584358024d44a1317dbafe5e9ecbacfff5d28841063869f2652378982f34999cb112c0426 -698236c39f317533945fa0cbcbefd83bef02a112eb795296ae6725781bb9c801a5c5e3dec8bf88617bb1c906e1b69fea5da704234a0e4fc4dfbd1775e4911827 -af0ce9845bd5cbae0468e88bb0d431fce7821f76ed6802dce85850714969b11e59402c34b3a741eb551ebf9c7ebd447320034262e6f6a71d7e702d872312750e -1f448ce8a02c4b35fd3de239deb63053d604f8d0ee50c91a820a9ca93a96501eb87f5f7de258948776e56ab744970576156444c286af0c99f9d57717c9bc2807 -605e32a88f65506e5445650cb9d95f61a7bf4df3797186d233118812a2416b27b3848255ce934047a365c88d79990219aa412daf6512a721fafebfadd5cf0411 -f18a1a5afeefab63ab0b7e3fe91d9e7cc691bcf09786da60b38e77f8f6f5dd05650f0e87e4aabf244c418a337ee084b726c50e944b14400f77acf966a7fc7214 -52a4249cc166b6b728e14f30807dcae22d3cdea8d401f09286bd985246ffe02e1366fbdfc13335820c2433751c81ecaf7de529a2cb3fcd583502838f88ae2e1a -51674deb652234f9f61332af35c6c282cbd0ab9b9c0533dc17da740731f3970fd2e1d1ba40336f8c209da494b009323efe13081610b3e83e1e1d97f65ae7ae07 -aeae36e3da3f60cb4e2383ef4f724c94e6f0f79e7299a7c3c94101d938ed300d40a18e963d6bfdca631ab103d28662d41993649d51d2059f11f111196e091324 -e31943d735987abb1074b43124833ef684456871957614a29f70811891775826f502d0d0c4bc6b17d3d0cb3abaeb37b782d286e355bd8795951e5be6844a1629 -61f892dab81af39da9c1ca708c83afbacc845dab1686fd22a469db8c1584182eaeee97deb5b5aaae4fb68fda460403fc25bd5c672e5a8ba1d78dfcc4b0ed1921 -519a7f35b937177b83ba61d6b7065817bb6247c5c13a8d63221430c981a22b2bf03695ef2749e7a5fc08e0074210b065895d699f529e08a6f0e027f3e3e7e708 -b360fe9017b51972a24a3b3e8732c471ab6ca6c700b877b2202665459dbb852b64897f23fb3ea3c6d12352ba412921ca1665bc6cafd0f4f7e37b552e5f44e41d -4bf74461c30778064ae2d5284043c474fccdf47ddc16067dc94bbc3602a3282d7db912416e694ba8c2cd3986825bf404f51203c20bacc13b8751a9bc4b0d4d10 -dff002978b0b005400e3431a6b0cad4ec7e49963a37113ae21a260f0c0be9b26f2075f0fe23db5c21e75093f98094914bc1db923ba818d74b6ef6ec9611d1d03 -2bcfd313d25a838772c497af24dfe3e4d32d023c243318d1ec5ebe99fde3f02cad56763c49345945fee2d760b9707292d879d13d0a9121d7ef834e674154bc20 -36b9f3d2ff7a69f5aa29a9414a67253b4ccaba7440280dc11a6d4ef36d87971d18f6d7a01cdb3b642283fc0542d07346fbdce155ba4c58f4991984203ae3d212 -138690b9bf237c526e8d00f8df8e1600af3447d0a3f6ef87cc2da23cec8d32304967cb0bc46ee91c01b47445f29ece03a50223ee8ede4bef02054eb13dbee510 -d4a1da72e56a633bcc167b5cf2911039b734f8433d814fb3630d17ee303ab22ecccf685eddcfb39fe126e7ed5a59f05e71a43f8747d679d7e0b711d3ce233506 -d59f6ed76efff6c357093e6594a97018215ed24a85d0f0ffb32ed2ebd94afd27365dfd9aaa635659291f6a711f7a91ed260eabd2debfa8e5a0210a3dda336711 -24676ca61d6e8c9d4f039d49975cd469597705f0c6f21854716f9acfa71c5129f8c16b76edf7b513299e49ececeaffe01238780334abe2413045b81dd5f3460b -33d092a43be6b4fbe400ed32cbf69dd1a47173b50b367c2adcb9b4437e83ab0128597961b84f670f298a180b9796f4bcf800264910b4da0b4ab2c0342a197b17 -0004d36172080c5944edb8a44fdb45fa7bca863506b8743e0d74d10ce5e5b62c2a864231171e2a018ee03819b1a74c641ff9bd9a45e78fc0e7f61e66fb8f231f -198091e4768b159e68e099234ffc5d2d7ea4f4c94066a7e1e43d5a5b1b95161e2e20d5975450cbffff2bc2c72f2efa5c6a09dcd119b3d21a16f0d693eb20f50b -f4993795ef79b05c5d87305b6789d25039eede5406eba90322a5dca4dec67b1796948b69e60b03bf53a17c4fb2f927835a2c9f30b48d275d626cfee0831c2521 -22e36a724ee2da1d52d07ea6b11d6fa0d158179e6560352ed01f22637abbdc14ad69c4b45e5600485825a29c2c7c2fecdc9ef1ae5ab07f71fe817b85e5668d07 -dc203c27b8fa40f4793dcff5588a6bec04d8f0df75acbfdf0e06558e27cc380bd69a43e743e87069ab61137b4352e2b982c3a2feea3174d917fa866d3ff53a14 -cdef1cbc0b32c50752bd3bbe7f142e44a8fe489be347cdfe7c9d3fa440f598290e20975c9a2b8a15e856196fd1b14a522131739184c6bb0fd9573887c2029112 -ce13c8e2934859a35f6156bc79cb5b82f4eb20e22e3ad7e017bcc034ce979503406ccfe0c2914b44741bfa52ee448a5cf369e4be9ae469df67b8fca5ea233e22 -4b7efd3e0028c8a4dde04b699142e956f256fbf6e13411880daada56617b5816b6ef36a90ced16275ee3f5ffa927e9feb323a2a1f5fb611382389553aaec5205 -79979b18216d6867473d5ffc94d3bfa7816125bba1f3ea1dbfb11a96435ec5070431013a31fe171d3f1221e9edd65b7c83d498b7820233279cc19102f5a42c05 -4537455d17fc27cb704a82f550e5488124b38173ebde02e7e0c30310265ff22902afc8d844d33c82844185dbbbec5724ad1087006f569c10b2fa2a049153c700 -00383586498deb89a7c33779afba11b4555d57e65e24cb2090e60b7b54a0e904f5659a2fb919f29376ec3bd9a221ec6bc2f7eae8955ff02b27e260218d1ff810 -65ea54ed22a696ab3d137fd9312356bc24c0b413abc29271d656ce383b7ae6014855c0450685e7a4ef56561228e5d61c4d6178c2bda945dcfd09d4f08cb2310e -5a30f175637584adbd35e771630ccb277d26e92f880438a4a17e509788d79706ddf3141f2832bf0c80677297e8ac6ce16127a1a2308148511326803d0075562f -a7a3f928aa0b22a0a7fdce29ec90f9027fa484630f8adb5089601905a5f16b04e5bb3289a4fea23f54bd09cd4d7fbbf8d71b0e7ae2231cc52e0ea00dc930a307 -ab138f74467d83f5e768acf75f99012f75c8e918468e9a156766e29bede44923ff36860315f2c41281cb7368aa7f92538b622a7e6f01b792e2e72486d1393801 -6f56ba34fc46062952c5d7726b658ed20a4b01e0311ab37b80d48268f49c630df2e9618fafd79514d4a33eba9ed93d4b7d57987e46c0b341b6689ea73e64d305 -a1c890d828abd1ad1762c577d8ca5f7d38f63ea160248031c0c54ad56e59851304e100dd6a7853b3ae429fb029103a7bd14ed2ef41f3a415a51765a78e42472c -8d8ad7b5a340501416c35e07c8975d9d58be3aefb9a31f07c8d569e389158a1eb60c14293cf0fddcd4ab39e2f329f894dfdf0f3fd0f7d7da3f8a0420a02a7828 -f481bff23666d6d93fd184a11a1839e026c2b88519afbbc94a0a67e6e4b7770af394fdeaa2b18cf33fbebeb54ee138b3dd4a788837b0a9d0c0cea03134e48c26 -c1b2213ea8f962d059930a208a30df7130e5ff95c192d71dd0272a5ccc37f11b6e2c2db40f32c94cdcbe52b2d5864a4c7f0a542dedb1912175715348ef89a524 -2751790aca2c8548af91dc209045249a1a76933a7c7848af93817052fbfd0d0a7c6e1253598a5282523e27c5d07943e7bbc53c444652b168cdbd5362fe6bed1c -0179c082039b54023912f9749e052d4b4054ca7f830b840693beb6374b6a9e0b990010715ad7307b45f7546acb848c5121d52f87940fcf6856d1a6e3f03b2927 -4133023495886aeafd63b1e86227694c6307f8281519e1675157ae555e80a804375e6c1fbcbfafaf00ced9487c40e3b59496c24834696e4d149682ecf7cdcf06 -376f6478d43163f8c414ee93097947a738a26927d61733a729014a2d76bc4127d00afcd363e3961c04ad5c51ea223c3d0641b3298680c31716e6861e91588f04 -2d5ce0b159fa8c3341fb015dd9f1232bded2c001d72edf5d89187ee88b1df7070a8529a170e95e4df83dd018c394b31855c2bd62aff3b523d73b3b4928efe62b -f530bd7327fa4c7e6bb3abc4fd502bf2ccbaf7e5014fdffa6025f1cf97f21514fcd0429c63e149ff1470b819e4cc7a0eb6cef963f4512ac4cf0c9587ebe75212 -7bf33686532e53c19a453031f6e139ed8558fb7417dbc1f76912d93ba86fd716948625d4a172e9f8d270c1fdb2cc3a566454583caa27c29676553bd0b97fc513 -631e5183cc38d7e772722717b07b47d7e29ce9f5fb2d01cb71fcfba001525f02e279a88083c9424fc9c371b040e469ab238e98a8d47d3cfcedf1317b23341407 -87c7b81db21e33b8a8915246df336f70abd9d7c4d3d453b011bf963be979e305bcb7892eeb6fa888711ffa05dca0564651d8286b619f960946dba2be7a2e121d -8520fa01ee431a55a7f2f90e40af8e48525f8e62e6a6e1d29dff6588e2cda3005321ee8e5ee2788ac9e9b71cdf3313f6810b922a81fc59b46db73bb9752cf818 -b6bcc27e5b3e1a257a7ccbaa1885488535d29330a5282b65b0779a463e0ffa2a25228a12a8616e7f735f87722600e9dab7a8ddc224282b647e586993f93e882a -9bbaca979a71141602d0c9e93e7119923825bb5b8f17338686e151fcc1fae8049c37bc27993835812d816e515f7db6eb6b8caaf4a1a19a99a2472fb00dcb7202 -0225570fa47bd935684f61849247e2aa6cdc525964ac8db49e494ddb2fee670b088dbea759e04662dd03132b97d3e8be28eb3885a57790b0f94d658240da4a0a -79f73127f5e551a604ee9b1d4da6582c1e8a6d796024dd1971eb652479beec1e3077f41c5db52fe9da11f4787bedd59f97e2c572adb477aec4e94ee4bb350004 -915fe7ea3afcc9eef54d18820b1b00cc268333b8f1c3663c12d44af52f476627204ab9b8a537cd5cedc34780ec7e5a1ea17cd9c00bf21a88b3126e8603cd1523 -204684bae9839cc2bd727a16a9439cad8e639b1d25d3d6b65236bd414af08020f63cc77a1cfc1c11b539d9823553c9871b26e4d7641fa85bad48e10ea5395828 -311cf5ebb89cd3338e6cd2372f661a1f3e60929bb9760a6a2769ba965752b80a7dc2ae1d9b77f16757277705ae7717e006118146e9f509a895b82c18d7986f27 -72708b9e6a42d11b86a609a9cf1d2c8358f997213ff4e15536fb54b12b9f5f2e42ac2320b9030908a0e95316608d8883b8440c112de969ae227b8dba1786f113 -0c54ce1cac9be25f79bf69477ba763639635a4c13730f73e712480f51874d8232f74623f9c5bcc67e16d80561f691dd290c094d4e65d0259ccf2863f79d4fe0a -c39b631706662d39d0f76ba983ef3d6ebfc6e5d0120365f546ba145c283a8b01f4158ed91e7890deaf5fb5c570510fe17cfad116581d2324a6faab169f88b904 -2d53e0cf6afde19dc96d08998580b0266d1893dc625ae226dc905138f52c550ae51569facf8094bac85436bb27e5a599c4aa852c52693abbddf11b13bc0e812e -9b61b25cf0cf261d5293a5d1b00fa6e1cf02235c10f8053bfd9f9a330ed3872c21030e12abc70dc5f3b753d6769b62bce32e1fc97fdee7ce385db5933ac9b302 -cad03480fd98955ac702c66ff0f624f1f1158232d0d6689f6eabe1926d49e108ece6e5c7333db22087900909fd7993fac4515861446b95d742c0f637b5c83428 -fca017cb3f4b6ead8530d3d53650e96f28d542e0000797ef01b22e59d0ceb92a394b5391a06537127a517fa6827eb7da2e191dac62c06ed0fdb3185cb9768901 -5dfd9ea64c99be8f840bf744338e0aad506e3510faf033439f718631959a09209c2f8a0ab214c2d1c65ca1857ae7f86731283c7aa7709f42b02e56ee4742a706 -e878ee460491f202b068f55fe3db0595ff0e60d677618cd9163b198f4f47a4280d5cd352dd512ac044bf0ad22917ac1155220be50b7d479876de29b4d5240d17 -c8b3e1f475ee7bc5e1e86fbcbc60397d88b620bd3104078006c0beaa50bbf5250c95be01e16df133c68d88947cad59fa49b15092c0786eed651401e204f92601 -3bb210e3914d198791dc506070fdef774b5131024129d945c59a82fbb205c106f529072bb244e8c0bcdba69864dc3046bc0a3d20b16979a403d650a43acbee2c -554ee1322777e944ccca59d5652c61934cfe9f939a583fd549fc62f9c1ca0e170c7b8e660e37c19c363267f29a7d827ba6adf40f9c4e93d40d5cef67ca021d21 -0ad8859af4bc22828750335d4ab156b7ae6365826756e0d8e1f31ee66a2ac40bf072515d8b1bbfd50ac1d2a5465846c5dae929ffc1345716e24dfcd7096efc2f -1d6a73c4e59854976759abbabe36f625dabf76377ca9d921abe0e143944ca80f9ae8d3d5e685d757113da4a52cada9bca557e66964dd14e4ba8bb07d2c07be2c -1b774ca8a5abace6baf9fc39ab365baef86a46a257cee7c24817832996b68510ffff3e5b77958a82ef4cc61102fc61bdc3f930404e4a8cc9d171a69a387bd801 -e8158ce53e979b2356240382184ec2144cab344716abe4edd27b917ba7eb0d301ee7664aa3324cbeb05545777b86cea9a89166a61987b165ed31e1b68c56ae28 -85db3297518c0e7e221c7a1a8e9fb980094e7bf9934c30bafa9cfd505640c2109e20e7ca7e9979add5e6443a477378060bb98daaf23a3f26606cf06a11a0a026 -6b05a698aa7841a41b42bd58c58331a921df528c0c1f495fde77e530f5c5870fc5558ee9279685f8d92fab5bd41b08b3ae3a187a14ba862f23f49314c74a6d09 -291a501c964fa19d890e19970cba23634df4412ccab8e05553f909d10ba6f919a0b186fe941aa94b60b071872ae835c02351ddea790e1244d73ed694eaf6f42e -11fe7a12b9ed19d6a69d9b91bfa8aee8950e999a32a61dc16264513d135f650d729f84b1f4ef818121142bd2c5d928a1492bc9384ac6791b5d7213af57c5ec07 -8373323a4cc7dc66f13b51653b1fe34cfe9dd97138e9716ff0f3d81e4423bd14d6fec81aff8dc4de1ccf25e2125e036fe1f3a8375f8e3e0712616fbded67b919 -509512aaf14ef8c91e4da6c106f3c01514d32d52d466372ece0a7611b01345034cf73dbdee8ed643e519ebfdbf12ef1035cda3cb45b8f56b9e7e7cb15e4e7211 -1899bfbaa4711438a1e01caa4ce7ac0d92424f3acd8aae9239f5a864386cf0239364104f3ae4a560dab203cec2fa73d652af038e4f199f5b9290276e6332d210 -17d8f3497ec540652b6c357f07f2b4eb12a8221bf033fc03910ec224b8f7971cab4127362893b8c7838129270366eb912bc961f13c5d75e7ed47192dbf71a711 -cce06c1b844f68c70d6973a574456e75c1079d1e221d925bc775af9088c3b20bc22f273392ca70336cee94659c50193721406c21fccc2553debd7c66f8b2c009 -c4ac4d1503aece41b822976a1bc204ff8e83c85bacfe7de71d575f171a7ee9193cef603253f4b0233a2ee61c2e2094bbc463bee4df3acb036b6f29b36ec2b014 -0599a6359b7438dfd4f6b390536f234056613d704486b4699a5aac2b53428b1bb31f250bcb4862e02f4ae8ed4a404c59a7b379cebeb52f7536e3ef11f6358f2e -0262362d9a69fcf897e8336ead166d9355fdc4ccdb5c715e6a4f2cee751ba11d08142f04d5591ae24948e415f04ddcd26ae88efdf109eb5992f0c6310f8fa90c -2bda979d156cf9b9fed72a8bd02d824fe993b975b49da440cb09d68c91ccb615bbf51a1e5d6f5cc46c4c381ab851765d68d96ecd8e8454cee6f1ca5bbd8fe518 -d092bd9c6dfa82121c65ab96a5c2d40e02d11b82946ef37833d4ef41ea26162f620e9d44458e095dcfa4cdda8c66c440896b1cb6fb6d1096ed2821c700454b2d -726495c0ed82697cdf0513e00991f319e88422d69b9a549895aed37ced3dfd04a467fd1bc4e2c58d6249cdbe443f264e3e19f5f69d2e9840a38f3c9859355727 -5dcecdae41efd11fd9cd0c0e29a325641a881c14bcd9a557fdb98b39f5cd2c1d6619bb253726e294917eb3574cd8417e08210f29fd64c4a66b2a536d56924509 -3f406aaf39905c0f6ec797df58468f8068501d645b10cd0ee1968096ff499d1781ef71f7f6002164a4232baa2127c01e97a9ae7eb3a77da42c4e36c23404712b -7c048fff74cb4505c5e7ee1d3c24055abadf25f8d14ac2b2324a1fb691972f1504686b9f1fc5dcff6a06eb7f97adf885afd791ec9fd5e356fd09cbf46da6bb0f -6502b79a000c0971ea56ba542695a00dab9ca1e840bafa1134a71f64718a582053f3e9257129cd8aaf8bf3e917f7ccbd1b543ac2a27cbcc197a86ce67e081e1d -1770113adbb6476ba3912803c8d01a734144695bd805aff00fb88856a569f6121f83d7e320e01d804c70c5cd0ea5020f941023d038390d8f553c1579f9237002 -c440737317d810bfebd087a2ae6c74ce49710fdb56cc89e666d728e2d55d2420e9d76c8047ef23c62532564bd9370b63bd68d6fe12b61d866b8ae90013c8912a -562b6030ff82ff9e099b5038a4764a648f76593af98a98cb5e11eaa8946b470a2234cbdf2758af9b46cd231fac3a8a1ce83905e783a88804346bda645fd06e0f -ae490fcd9feb793d3117b0f55045705a965e704edaaeede56bf943c68710df032f6777c1ab6e09451eef5f7e118c7ea3a1c77f5eb4bb47a1676a655db206e603 -b4fdfdf2886df79fd25eb1a7e8ccdedc27fe2b9b397f0c817050fa6876e4682619bd2423a9388e748e6efaf94abae28d2ceb8473fd6c7f260583e6b46933790c -6ad2a502aa01776567eb2f6f8acec70a5dccac1b51f26cd635713edf137c34120cc299a150b9f0f93ae54f1877d2c0f4bb440b09a39f71861e2a09195fccd827 -6f01510313a49b9bad01a50e6d8b5f03274a6a62631898fa0f7cec42911ea90b4f258436892f1d45e17094665865c200a29a0c75f1266568a8fa34ee8c677522 -ee8ac89636f6be125cdabf0be1d7ae2574d4a7920aeb8e0502d6b3e887da8c1841e6d7f307a2f36917027135ef452bcb728aca42486cd1a5d13845509f6eb01a -7c20b678b0bd48d8855c074cee8a538601ecbd4312ef4a609bc16562ceb01406905ba4554c3cb6e6a2d373c6594cb1f951344517168a2dab4e53a4fd09f0860e -8e54cf4a2027ebe18980256ef18a838933de91f7ea3ffb72d73598c38c2f4e26a00cfb035ecaf03b2e16a208528e1959768f30b03a3a6d765100058768de1420 -aafd28bfda4d3a50606438a43de8cc10cb6135a0c74c2bfe5515a0f0bc886b231478e584fb1f883b681e8c1156f91a8cedd6474c88ab717f9587d523739c2600 -7e1b646f249c24cc71d156568751f74684a92f34af1c0f087a9215ed9bf6f82a14836379501481a9f30f2d3de3c50e3ddccfc43affd6c5f07c7601ed78b2bd00 -6695948d0fd90443e88259a9deeed0c69ea625ef82c23c8ab172d68c8512f825b1bb5811061185d438f2709c7455f51d7a3fd587a68c5c8efc09b25209a7652d -5d8cd9c54d919a0cf272ea1af240c70c30d3ec88108b5db436681f36dd0d5027b4b74784e7415862e497bc9f5af86d09f683ae79f52e24bb5ccdbef38230b023 -1888524c88812bcd155045575507c253756be09c9bc2069a05d01ebef307900a51d8c12c33fffb93fa8020499361399e114db973aa658a343d6694c25fcee918 -8ffecd08068f43ff234b7d5ebeb3dc1d8e7a8a0dc956b5c344b577cac659f720a6373e1a93ed2b443d51450b1ef6c97a7abc9c1aa85f66cc3f5b7605a9dec004 -4be05884bcb33b0e174b5c515e1116f73c7048e88c00fb89dad040a80a73ab099f7a9ac9f33aff1ca578c7cd9cc8dd161087fa5ed7d084fe62b5396c6e93b91b -134e69317c829e708cae8fb645d59a2f884b4087950ef2741c371398c3bd20164a9857a761d2665688c56d7e44db17d08dfe34fce20925418d32ec33b1039b1a -a2a006f8a36e961ebef0dae50da03e6961efff52831c5374064370b17ed2f41e5e1d3f46cac6818724b66d15c880ad87d4a2eb9eae13335defe865a9c2d7c924 -286eeee7878d6ae4c2f0bad08deb29a91bb6b926544a467d55cd547c6c75b21d04f4bc7eea0161a0ea1cb6db621630f92f82382eb800fee3ad8837ebc11a7806 -abc33ef164db74b5c06fbb1aea2ba7f4fc097bbb0293bf8aa65fc34549cc7408bbc53728969cbcb58f4b4b277905758d0163ef40a680b74cca74787d1f68f11a -b2430678fa43ef9d522443c0212054c963fc66aaad7cff309a3e86b2c176db1419bc71eb594bb1024781f46308a33d0f959b44242e39f0600ed79048cabbec16 -f0477d4e09a551dce790d196db16ca3e8d724b27b8eb020bf7fa987dce960c2257ae81795e17d1ff0796102e8919f8cef2d2920bd405b56eba04a07bf250ce13 -572787663b172328a2492a961d01b0a2219cbc5096adbc81acc581483237fd185ce643c84b3c6010746a6bc9918e87aa9f0bc44302d6212df11ba135dc3d740d -05a0f4a278628705a4d79bcbabed1424e1dcfcd70bc98f633c973494153c4312304d81464c7951adf106d62d51152b0c4e5e2584f121c351fd9a773a468a4830 -d242adcc9db3b98768dc0c9956b9d5e839a5d93e405ec9a75aa446331cb90d058223c16634a8ef63951f0e5d0415ab705aa58e5bb84b70ba28d111174205312b -f489f71c788a66a7c39a3521af678833a2f5147ffcda1938f4c4b1565890c9290b925bf61535e078f0df67fe7d5028babbd6a255ec2dfafad9b14f5c415c141c -d4d6fcfcd843d6781d03653c7a9b0c853e166738fca1bc90d03d303ba946071d59212df5de1edbee9a0e651bd45edd33973afda146f77ef15593c465a20f3f2b -f6964aac1c381e8676dd53cbe2df70d1a42f11c25f922db4fdedc6100768b52bdbc08b6531f6b9059a861f60d563379ed75c03f823a21bc6113d0368dfbcb303 -4436dbb89c019e0c88ca2ee7f20b2a18245175788ad9dc21e2ca2e3b783166244d5a70ffef57f5e38781e7dbf0fb86fd4bc4af8d6bd9e30d757396e95c31001f -3ab30c9ce97bcb59bdc4a2b48773c05efc2b066888f4c0c6cf6f6a709eecaa02bad801c11cad4345824b9b1cee850659d6359178f6c80bb393a54a866cc9162b -ad86b46bd07e0e2a48a5970a59741df4cf44bfbb18bd5778ff273e3906a73223232ec7cc9e0b7e2a0c3e5d07d951d33f8babe995065ffaab4bfdb76217f0450c -f11bd7cebdfdeb44dc832d75e479031f6a3674a7cd5b25c8fded814a0d104607c6f6409383e760f76a66a765e5ef65ed53f421523884be99eb74cbb671f30a2a -2d18c18896396d9ba5f0fff38eb6aff8b0f15b6da721ce4dae0eed30744ec308a8f99db4304b9d3a092f7bf21f130f58b7442d809e60b83bd1cad3c578a5d527 -884d7043bba951a447d635cab4ccb02f463e75a7672241430ad1acd990eacf1e096ed43ae19590c47e526b603f45b015c06064434004aea2304d40532b940f0a -a3fc0da74238bf0ea476572a0eb3ee1d99aabc6a3dc575bb4eda25184a88170110f5c8f36f5a650a40560b55b8f11b98587c7a17a041f3eac1da54cea940f21d -c98010e2318189e7ac53bf79698886e9bac133747bdab611b387ee9f03de302f8311d89ce089550a27b2c0740b036c2a2491638870eae2d1472f26d47fc5de09 -d881131e877881a56d28bfa34b1675ea481b411924e9aa5c937ee0a8271252024982b808cd1f3b7e26d7a8d4056412d0876dfcd0a3d1a3175f425a90cb8f8120 -8ae7a4499166030226362c98ac9b77490c1b0231daedc8d860c34c4857aafc1afef019b6b6e59e2b60346adbeef8bc49d9fe6e2d16336e7285bdb04047ea3426 -f8ff7e90dc4284addb9a5d0f37750bc4ede0b664bae0e5e59da9b3448da4ad0314b195a3c7da744b74525906daedd50eec64e8428b9ab08628df9d374c924717 -187d6aad612dab46fb7df91de51fa577d0813047409c1c996e7310baf4232f2068e29c3c810a91c28690902e0eee6c2a1c424174a4d53ad1749d1125c997a120 -cc275bc7c5b9bda0e553c0114c9ff5a1ba2c35d00f1b288e619cbc0642cc3f04a46f686f1716449c1d4e27afa455d14f4dcaa45e4b9e6f56e7763164a9f7dd1e -bd3082cce8c0b56db3e17b0db601d60deb6ddd340465c5fd26bd34efc0462b296bb8bfae0a38803021942d8d6bd09d0a18b673858979303619a69f213c273428 -3d7bfcb9840dc2581ea347ab45ce6d4d7b37dc577e8f7fb4948585eb38e1c107321bd471da7193003570fa97599f0f7501771de6365935c5a2ec1bf9e6bfda11 -551852725f22a85e6b11f72d476c74e3e56100806a06fa90de64f89036ad62241ff39865b46b3f4a29381e2a7894265f4201b0dd65f6b3355e80d106e2bb5512 -a028e9fe967ea7dec122c4c1b1e1a782d053a2db1bd921618a99161cc764091457638b10d35f44f1e2ce3ad145d4d14a7eca5fc8fa2623c9d263cae7f4d1031e -df57cb12a46e12539c05ceacab9cdfa6b0fc5403b1aa26d0bfac8e2468e38710432f55673d08eab333a46ed9058bb4e7a54a74380a52696ae41ef4f60d0a8309 -47cfec1f8dddfd11c58e91d7b46fc53ac917ab8d41b1d4f7d135447d1610b519b7bcd4fde429b61e7898a84a47d68e0d90eb7ab5ddbc7f6854b677bc1e64d306 -283070bc85891566aa8056e2424406e732770dd848d5d90eac62f40ef16a1b0827b4ee6b78cf4e82d1af6c246430bb588646897edf95c306bee85df37590f70b -a554f7e837077c6380ec8e553ffa339028f70230d5fcc5d464d510dd0ee74c10336973d7eb333ceecc567814fdc11a4f31aaecf2391c0925c0d6d7db49064327 -7d429c9e8a518569ed7c8c511cd50f7d897fcec61ad34cf012eb47402c33af1dd868c03933226e528ed810efe1b05d3fff1097bbfd37676feff7c9d9adccc702 -2db9b138fa5a4ae269e7755b0d6a5f0d11827e0919aa4ae2bc5b97b8b683e21f3883be722038c735b8768e1096159f257027026c1663ce4a8a6c5d7432b62b2c -0591d600e8cf6723720d4f9a6993cbccf46d4097352fd101930ce8dbe07bef1320523acabc4ad70656f88e6458795543d826f3265c6654d443432d220019572d -4b1fef1363283fdd4ed694ed59097456e00bbadde76b73a8be2767740d92ad10b0a881c679d3155b2cef785f932a060943d8fc1abd1f8cd7668e2210789d5b0c -2203cb90210d6e9a5fe1a4345dc421286d40e8fe20ba627f5cc9690c19a70730e4185aa04a672127c1acaf20caa960041b499c79a8522ddcfce7d2d0a3fd5d22 -eacf2ea951a97ebe53e13e2f2cee4ef41a26148373ff27a53145dda1faa53c305b770ad395c4b00ef8410373c1fe91f785c0abdd7f1644181956695ccce8f904 -bfff23f8e41e90486950bef78f630757d82014bd5e9b326cef43931fb696e1074b67593f60b9ec680aec8dcee6adfb567072e8e95eab204112d7c5d86620672c -af2e5cc84d9eed0e0b9ce6d29b3b6397bb59ceb167421689d97bccf8951f7a06c8d8f47c34f483ecaace24072aecbaa34ceffec98f590ce769db71efe4e9842f -480c3afab6f826f1fba3160d1c8c833a1b839a20b2c9b6cff74e560323b3f91f0531ffb4c87be89e81e7460dafdd0683633686c6f938e007b96f923ef3c2ad05 -89a684b8269904e580e85efdb9634a65ee8e701b377bb46e33f1065bb3a38415a80325f89e9a0e51fd65252aaf40b36ac288d0645d782367789b94febcbee620 -301a410e7ceb164717f32c5bac3453851d653d52a24521b99ef7d82f203d6a173968845d2d86ba79b3a5a06fd87ea24022d20e06e9f6724db2a0253b002eab04 -b6ddd665dfd0449bea1a83cecf7990e76e5519588a2dbf07be29ac1eb6f87101e90704ad2f29363870f407e2c8bbbf3c248e502e3e0be1327b1e4a99a8c94b28 -237f4730bce12846e1b0277937132ccbb8646515ada08058c81e776fee4ba42272158bfc7a1dce96073a6adb04c00ba9667a48645420eebaf035a2709bb66024 -1844885fa7d31dd04e33c9209eef36775a45b2b37f9e5182f82ca3086ea8e02810eba22556176d69770d4b05cbe5ec342e2f670c7a5e87e05de2d059b7faa81e -1904c65c1e603811474b1732ad2f6fb2af13337ade0fc79a0907604bfdd2cd128c7d005fcb70203bdbbec3bf3fdbf58bc42e9a95639a9dd69a32cbe626baef14 -a43bc6beb838f91e9b33d6ca1ea5a3d815ad0a21b17441cce43e2ba25482fe1942c4027ca25b6fdae5d4ea0ff101fe58ae6eac347305b2534e95fec89bd86610 -5e45b06e276cfb8d9712650faa1a0b8a2d84b0417bb3a5cc8834d6c399ffa92533ef9e49e0fa2d0532f7addfd10c28b7a7cb7ee1fb9edd4b362d53d71e2f5c1d -f1fb4b39cad46ff5216a456d826fb5a34adf5fc55d1cf47dd5344fa6ad5abc25ea4c61920f25533b5fa01a1025aac6dd02600b3f0732a259993ac107cdd3f408 -21abff4ac42804506701c5bd0cd77ca807694bd1fbc9a64e11240db8d48ccf1ad997c45175458128260cda78fe6dbbc8506069f44e651c4425bdf85315c01816 -cf046d3b5dd837c4c0694c6138f5ae1596755a31515a4a6bb7fbd738aa6b9415444fa857ca6853edd3d51b6a17f78355955045489c5a238b7c6d415ad09fd61e -eac76394437c3d720ddfe9dc097a0c25a5342d9442f90610d907b87742b5dc023bd83a404ec6d4085c8d72156d054fa908f14d2d4d5636533e6e1762b78c410d -2b5693a22d630eaf320235c2d232f19358e64bdea16802d7d7e6e4efc4ff8418c8a0824fc36d3e2f0ae900f1c1c58fff9fbc5ee3d2ceb619589d0d2d679dea1a -1708a06d797e8db8d3e4fed4365e69d38f6f46f7a2aff2849efab15c807fcf08892fecd889995a06028d990e15ea99d0745359f57399d808baef6651f669dc06 -5e1b72b26c11614b07a5240051377985b4f80375ec4b5038d1d4877da972d90de1c0fc1c83b005a44cba5c6c405a123ec283bc587b23f779b008fb4f68eb1312 -30710f5783a276ce8210d38fe488204c9c20a4a42315cd2d3f6cf100714a172e655967e5620c2c0844e6a73b16df768915ffd57523936434bdf61780269aba03 -1c7a3ac0f77b3e28a2bc2c3f50e7cded6259f90e863e4d65199c4775c3c750204cf1df5074255ae0693b25c40b6fbe2371611eef6d0307aa2304731ce4321a1f -a6796ca07e1002dce414d5d5f9a32898714dc878c8315a00e9d0c74c1ff8d0163b3336ba32f5ecc8fe6966f188b37dfa078f35b68f39ebfbad4d0bafa054d901 -c3d06427ba4a1a09f97300d968a847c4d6b2b463fb3158df46806957610ad11b93d040d6dab036322f6bea8e4e4f44fdcbd177aa7d97919f59b1d5335eddd11e -04c55d50a7ced1b0884b6c08224a81398b5a0ca88eda8c7d1936f4438f5c6324d99aacaa37fc3303c232e327f94b02fa5ea5267b7d508fecba33545ede315219 -c4e77285bf30ae71f8905462187fa29a6b521d62af8bfc545112a1d31972360ec24ea48ee978bcba6152c514ccfc54f2edad0c492d2249dddc386e28dd44ee2c -2944f21d77f94a453fa0752022ada833ef63b4963d06edbf08b25fcc6d2bb31ac5d2ef7807749b01366aa6d26d8ab12960aaf4d96d41137499039556aa95a616 -c17f29ccff4f9442ba05d2f7e1beedc75d735de2fe3e5b0b8304c8daca9e702f854b83446c7dc58a4850d19e6f13cd4d1fb3a3001ed5bbc2eaf1cddfddbb1b02 -4a423a9324519333bcca0bb684dabc3a2174c4723edda10a8278807b0a9b531152dd866e4d39ebd5e5bb0c7e542308d2f593a6d5e4dee6ce3667b20186951018 -84e400dbfed642438acd1c0aae79bf6264486a080b65d1e0431775f8dfd446242920201f765d45423d4782fe49c75760dfcb25ff24781f10beaad32b1d0dc80a -14c9be6d2c0492fa8636ef05d1bd1aa2340e211797ef60aed3473ce873d89f2737b386fb400914d2b37fff1156df6e27eccd1239a9fa5a5596ec5ee7f5414e08 -5461529121e6429f59d03364aa6c2ef4e3a3d832bfa34d1ea1e9c70086aa2b16d17c357dc5f1c13c190f1741c8f5e2cbada66c11866682eee6c220848af2f317 -68910b3b7faebe5fc80cba6a7262b62b0db6580545a281f66f9b36f64250b10d45a8b48b0e3ad24e75f2cb96be6b53d8842115680035887229a9b4faf419c120 -a75de9f9bf933501b51421eaa30cd5898e79398b3a1ca5ba8cdf0c63481e051d5b89f0c380a706f94956dc9e1cd04fac653142205d6b5f230285b14cfe97202f -dafdcc0d05350b791fd56617a3ac5ecad290324c59edfb658efaf76c284ed00334371c149904e668e1e237f67b8906e3ea3f22cb1556e0d57eeb5923b3912009 -7aab39314614eec57fe1753ff231886f90faf7fb21530eba4f6742f478bd3526fae49da038f7723293525a0ec26906eb1e4be90473836c0f4f05e83e8fffce0c -f9128867bdf2e9da7ec6e98c607c432a3ee656edd0181b6ca57ce917d4928f0a3eca89dda2726ccdf70e544343201944fd401c6b2fa8e1208502be57f1be592b -21815dbcd34cb513775221a1cff7e843f52a35f450a399fa35b99817d3dd491dc0ba53e10eb535f340ff8f2918a5d07e73684b2cfe2e9bd01ef3f9d88c3d011c -19e2d7b9e249e9b468f4d0a4e7961dbe95f4660c761c44da417b5bcd68ebc40ece3025965b437991e9b24e178d139bbed6c92cb69a21d5b296aacf6342f4c705 -abb92da7c4d90d06423efa4747680a905b89e70838becdc98e3b84211d5bf10470bbc5d1cf769bd187501bae795cceb69ff92202f44faa9d9ff039ce1a1be215 -2cdef0605af8a31e90be2476d11195b416fd36f7c3ac14139faff1f79de21c2cdf02bd735b671b094ae2615358f9136cac3a522d30bab79911aa938719d7150f -11bd04da837ffa7ecdc500be1819df3e23804bd879b5e2fa4e804019c43aa5132fee60de06b56b2918381f998abdfed546e66f2a3bdd0ba4e6176e24a80a1c0b -6ce954e45b21814c19ebb61aab45b87b1565c38e5e00d4ac7f6eee5bc06ee2093f381b00a9a2915076f444c845dbb9818f36b60eb0ae4e19090a864567887b2c -440b202d0691a94eeae7317514276f1e2673be316259660c359644149bfd0804105cb2b4984948b13a68e890f5ee6d3c76e9229fa618c5f69e3a6989e494b309 -22d2de215389d595828fb23e5edce457d2aeabc211404b8429d4ee0774cdd5125e5170d73841351100bcaba61fde9498be76d8d7efd93ed109832ace18053413 -401516687537c7883b8b55bd97ed1533eb5f3799bd42601104aee100c20a302827c30e3470ba3c0610a5c8b0a95e29b8c3d6fd197d7ea914a8373d607a615828 -0d3f4f8149f623acca978f857caa4b71ce5f558feb8f7d5470f32e3c84c6782f3e30a7c0da452305905bae37de049db23c4add2ae6dae1028afcc98560824721 -b1cd916e73a6787c4ca504fb68a18c90f352c49be8eeb53e98031f2ab965d414e21f3ea01a678a0995dde5c9aea8eaad48bb711fd6efb1f3de2cf75c03b7f31d -17c872aaf78ab898c5e84db36be0def358711d81b19c49165ae81e00a95751224c168fd93bbe8d7e7ba147e7bc16cb45ed134611f3f7aa6c84a906f34604012a -cd45bf72bd4945bb6f662dc6893b4f9a7fcde5716fc36e0407fd195aabee27040c70ec4d58afff4d2ec3379b367cfedf2f226cb7bf922ff18c3cfc6dea26c62b -0f1468e52c6399249813cf9ea67edcb44a1f6ae4095950a4ff6f3bdb92330b0a6200c98e2aca241479f8244284c374fefbeb924629fe0ee9e643ed1d1a0d7924 -aa0d67209e8b8aca3bd847e9aaa9bd38c836e3c790de38e91aa642d2f7f5a00b97a4fcb6e3e0c6566f16a4dd0994ed30a06ea0c8a244c7a347ab5f445688950d -3cb0a4a1f4442d032a39fdc86cfa80392530be2ad604e0750ec5f87aee0a1a27ee28bcfc24aed2c7318338f99814f21c9cfa3fdab8440139ee6677c128837522 -3954a60bbb1d93862516fd20de422d70e35ee4b361b0997c623236be6309f4270351f17bbd7efae6b5919b960fc28d793299fe4aee4a38289f7e342bf45d4129 -0e612495396457fe4a1c2acbd1b78305b8a36504bd1d55711a20d3aadf196b084dc8ccc327961d61098f701bcafcac78dbcf6a7fd108f6b83518adcf253bad13 -9fceb8a6ed67b479bb48468b3adf3c7209bd103f73cc184461c5ee5abac0df2bb350c1b2610110acfa282d20071a30b87574382aff160be4936233f28e97910f -62b3fab358895136e5006bab4326113237fdfb5841c3231d0760c86436eaef11ad8aba2a93ee20804c8399398efd247058a98b277ad99c252177a134991db10a -cbbbea1c8ffd9b765fb6b02578eeaba7ac99c2057263afa10edd31adf9a9180c1f66f557d3b32b72e1ea81ff9ce54982e871d6ba141c93eb1f1810580885b427 -9c284166a064dd8214697a102d54d97b3a8af0241f0e7cd811f91d7d6b445f2e46f47adf15335c713c34d14d7d4b566135c684f884c7fdc581bb124bc5827027 -bf0267176c0431800aae36d4d393f9cba27005afad774141949b1f07f8bf4c06987e2c913b80b8fa194ccc7afc47c1c51e1da559492acc695245c524fe51c10a -cef749083ca70ba4e7c1f7abb89fed32c284807e9946c507936c82d89376d613c7712b6e632d0d46737a4aada574e7210cb76ed5d5b04d01713f2d664ddc0b08 -b028c84d8b96829888d80f82a80dad636b208a4b17e1ac4abc0ef7c2c3b71714307ae860f1a237dfbb9dcc4c7f459f4a7b23d632ed5d174b542a917c93c59d26 -0a9e8616df9a37fa5751320a8ea0ff06272e9ba08a3e07cec5cfc312c70bd81b45ae02c59410895389bc1e6736f0177d9459ec522ad0c986c63908e3f577d619 -d5a0ca4fa15eda748b2c678a88b43ab560ea9c5a5f45a2652fcd80de8d1c621a04d069975d2e6585f3df61cd59cc10c5ccf194726abe29da9880f56691e4f126 -59d3d272238d9ccc92bffef30b817f6bd3e2f27e5a0b0ceb7d5b1c881a09c50ff541db7c49d940fee1d5ca64885bda19141ae311a70444dddfa7c0cb17b61219 -cbd5182b9c3b814771515b47840f32cc7f3a1cc71c5b76c13657b212e47a3c297c43f3c9c2ace2b5bb6bb1d1ecc568a836fbe5269f37dd438404a6e50fb1a128 -48c4cb9a45f5af0ef691a27c96e66c9daab732cba114ec414f71a16d6085a806da6d863b37abb7a59aabf6a9feaecd02ac06697135d4e6d4cb6221ecc6d35208 -d833eb176dd0d18747530656d4fc5d5424679dd6524217f7009ff6ed4748af204e5803e38d393f8019cd5e79432393a8ccec3c22e0f76ef03ce06674760c050a -efb37ae3f3c50b038b885e7b73d55571b5a48a3f34827e0a23537304f98a77186c6f4481a18c4f8d61c2618aaf0b9db42832dece455c98e9f718a3293bb96b25 -5f671871a583e465556f1b3e58f0682c20bb1e7f07e1ade4cdf5caffaba5b90045e6430868ba2ec6f3e558c2853e194697132d2f403587881f0c2e9f416e9d2e -4b3b18bc0b93b691e50498fda0f611da74781d38fe1d7cc3b4acc51779d0810fa2c40f47cbe5273a51dde670914ed8a0176ba6801551d283141ca14c978f6504 -69ad17fe5da09396a3a0023096f81573088fb1e7950e75666ba380dcc38282286c7c19f7693be5e97c74e1d3e6281f7fc07036242dbb28d878481053d443b120 -9c0d0a5c112794d06567e1dc1dde86b476a496eed6ad990ad6d5279ec94b7e06509209ca6269b82fd75e35c044f9a447b5c162432ed6618fc015fee1ada98c2a -46a9263e37ea68e94ed653dc34c832c7b9d4eb45ac320c176d98507edea20c032f93a3cb24233574b861b2ebe8b92b4901f209dc82bcec3407d7a2cb7e185f00 -3105343ca08a94bfd3c27d2d91433992d0cb75c669696504c86a4a1d6abbf714931c994410d8009569774ad9c3dbc8a6e5be7d679b94367a990cec18529bcc25 -39bfb653039247d2f3cd529dde82e5622aa495b80b2292c9d009666a7fad7a291b2cd3a9ee70505778907eb7b879ab4add5e25e6024f1cb7dbfc38fa367ebc05 -68ba47bfcb61cdbbb11d0902def4c05b2bdb043a72fbc642965e8ccc1e40e203dd1d0e491e7267f30afae52168fc78459eaa873d5ce5f0ae822f3f28ba1e5017 -5f86f7bf584886370fb94f1feecb21a3239940a9af9e60135784b8e9316eae130e8f4e3be5f303c543c0ceccdd003490c878db6020e66d497f5f75e989a9e513 -669b77241c56a556022d3a465de1b2577e7b42f815e1ebc597273331a0eba32af696ab321e2bb444d011b3405d9ba5793096f4f43315e4a7f13a2b716cd7d001 -6c63f290c7d89291c03033acddbd713dcd56576e95dbad6b054fff3845574522cd0b5b5e087d4151af85c174d8b05c92766a4b6deb8b63447cc342aac856160d -3989e78ee138d3ef725cc2d8d23483b3e886929be689db53a3fa5558d5c2d516050a28c041f421cebedff9c49d1839458abf3af5cc904776dbb5ab54f5252b02 -759c2f7c04af4294ca019b11d400a609aebb264deca2221e40cf3fa4807a331cc7b8c5e5dc7c802489f05fc8bdf5df9708fd01de70c0f10623ceff14a464910d -d9553afa1e99ce8d82fc6c80b498e2840be3e4478b3bd4e56bd1ba80302cf60924bd6fb06e43f4cbc25b12497ede19bd3adb768144ffc94e54093ae066bc3b02 -14aca05bb1b72b51d64dda57e1ce85c8f7e1fdac06617d00700ae2423bd34b0c0edfa8cc2d5f4180f47a4c9451d8a678ee4e2207d5c7268c946641bcae278e0e -edd933596d1c95c73708fb78454695eae5490a596b9237ba70d80c8d90c1b10c7dc85e317a82d42930074537bc2c09c67d78afe21a1fb4aeaa5eeb4129b5cd2c -29d923e08b7e952750606cf73f12924798486081b3c9926fe18a8ac26a08e311b8f9fc0f9f6167a90bd4406934e8f61f6d0ada1d1402df48264249f59e77751c -68282f1e8cae5bcfcbca125ec967ea96cc7326640d4a2dce8cde21e7b6d2420fc07082b1de79a455b5fa4c6c8193989cb7d1199cef9a9b8bcdb88f9545af7a0f -267904edaac094f4d5168ce02e8086241e99cd53c95f75aa6082035a01042414d62ddbf1769f0a66d44fe00c21608aaf58c52d920b17627614c7273e06f9080d -7e21e6cc9cee18ff272f1bfa3d792263d24e99885cc75c96d2362b37a0f6c41b16af368b99fc3021623f3f15577594c4df122198168e13e797fca68c26479607 -f699420939b7f05f7cb32e2f2ba6eca4ab19bcc087fcd1e618f0e926589972157ab7aee499b5d97f4af6ee46953d24b2beea07a361ae812aeff45a7d9e5a1d0e -dd62102d204c1138ecc3e28555dc47263bff364fc9434c448f3f1dc11be57e231c9e60aaf3575001e64b0dcb39d806d298e798299304de58f2d6a7cfabbb9021 -926d2de932eb96a8f79f47bf4043c7d9895d950c0a4984b5dda43ef7189ed507cb640253dbf0e899e97c59a3a7307f5a7b52dab834ddb88fa80e22ec87c4890a -cede967941ca116f51e397b8c01767d1df47b66e31d2f9c03a22ed4a5417001bfebc2d3a7de8daabf52629fc78cfa67109080f3ffcac560e8bafcebf59f0ed03 -b0f946520a25d009245c8da737e79c8e1fda15eaacd39420dc73b7fc863c031a35479e9ef0e101077ee163fec687c735343ccde658c4993461955e3f80ed2d02 -8e7fc88cc789967e0b888f8a96d8ec8c3975d39398aff059468f5747de2c2320d3ff17a8ca8683dfc22e23d42519d0651579cf7a164d71fc40f0154c57232f15 -af704ad7cb2ca8bd0fb9acebe5e86f7724f8bcbada8610b787ad380b2418001732c314efe4a1a4240918df0a47c413ac4c2448498e16916a2a72da631a831d00 -0dbdac90713c5c74c58cebd22c4af3e4befd23d4f5b69ff709547a3892fb77121b8a970d7a17dc1569abcff4b732173bd741279c4f7d32011a52c7267203f504 -04c777e4bb21079ad88f333ba56cb12ea2653172fd001573f6ff308b2a85f001f7976f62d8ff5dd3968c09159bffa502f572190412c82789684dfda077f17e11 -1a6abcce61ee0c9c99d8d665cfccf993bf1b6d9168657bdfbe2181bea0e5e91baef3fb38ccc3791f88de436fe39cd6b585354cc0bc6e8843d68f86f2c34d2603 -6479dc54ba71b0e525810953198fed7f19256879bd87955cddd9b6c26d9d7b2d70b5fd0902f9713039a4973dd124819bb2279ca0ac171f05e364a09afb218c04 -bc600fdcb3454be2bb930bf0da0e774b8a80a8b446e0550af2e75e78d60a981f44e2bc424251e3ce79a84ec3d0f6166bf1b878b71dc5c5e73653354b19394a0f -a8c704e72736260167db44d97181ced9157c23f3541dcab40bda6a4515683e07808537ce31f56880e1e61059f8fa3a483e42ca546aa1243161cc3bc68e9f7a0e -ac80bacb0443a047950592af27fd5a2df2076764acb3e9cc5c55265d1dfe6e2b71db8a3f58de440c191da6583f49a1ef41ceaefbf6dd3dbb0eb2c08015ed1b2e -8eb51ab13dbeb28c6abb21fac7b9706e839eebb3d851f487c17f98949e76e408740621845cd5e0a7696af9344736f871cfdb5b8716264fe016c0f13d0b134829 -b465795085e80b1ee8f4982cb2ae400c81a9a538dac6f3b0444f83e44de2f00be7b5ea2e54033f3b43868a518ee8c3df5c93f73f9f81460497f0dae09b2d4c13 -c6aef199be6c0f3155fc0ecca7096b4dca35ba60ab1c62a68b2c41a863ff9608e7612d45658bb262e5c6c3ae328ebe3bdf848fd2cc214f2cc4fdd6ba4916d505 -1b9bfda3c8ddf89475d3aaa6c736ea47ab05afd053418c098edfd01afb231b1c8394617714a0fa7dfef7960c1025664f7881dae42bf36f6d3c522ad4e9cf9411 -b98c37a46bccc7702b0e52020f09b3a494707bd46c03c132757885f9142cd707c3a4fd354f5623f617d0f3e88a2a7799dda0ddf7c4854ee8b308ff33f8473d29 -ada66c49163ed46ff80a88f5e994c609e7aa583ca477c2821e5978ecd847ed2f1be84729e9cb639f935f1656e368c02642a8c6599d165dca27d9b52288b4651e -a8bf0e75118b824b8db7291e22d94d6c81da45da4e1a98a0f105c016cf04a41cbe25665955ae35ac882ba3a686a06ae4204944e2fdc08941ebe7ee24dff70e1c -ecfb595c9196980b76077be416129d270850f9e69172fe6b80fb38cc593fc716ab802d03d0dd63922fbc52482a65b8fe87f20b1efe9679d7cac14cb18313ac11 -ef6f4be01edf7eca04dda21f6e7df40105fb388e3d22566a1b9c491b3c2c7a2b9cacdcc14bbefaad281d673feb13765efac081bb78f82074024ad99c0322bb10 -290b85d240ee82d9a4d58c70bd01b654af8f8dfa3199ba70b2974ff1ab02a81ad034d9ec32220ad955600d220276818f7ad5dcbe90e273a69a707f03b0956c1e -fb869d6a095a6c1ff3d2ef1b19d060e4bcd330625760de42de9c2059a29b78061b28e0d6cc0ed68166625c73e049118a74b4660f849b4a9f424c3aa76dcfbe01 -476c50743ded6ee05840480a601073d3960387a3ae0a346b50d832ad2e5e8415bb16124a1529acdb0b2ce940409d579d20c083c41d1f1f4e644dc0c53c7acc1b -270b9e8fbef2ff73e079b844063fecfe715c6865bd2f116931796bcca5baa60535cd2035e80e47336f1cb1868233f1aba047c6756623274d5d259e4c712d5606 -8f851a8dd039df29d57e9e9a6903073d7a0fce0e2a9a8da43df071fdb5b6da0e59c95d1d7f270bbccb2ae0b9032d5acbf0a580e91e8413382959ef70167cdd0d -5d0f7fd2ae203231a2bd6fa53df32f468ef843fc74d158386dc6bfc4626fef0c204db99298bb1e28b98b2076af90fcb23ee79eaee6ce3d0b263cdb07787f2d18 -2b82edca5c63fb9b2e82fdf7474579d52eeeac6ca3d0a03e754d233e81f143078b43f0c72931453dc13f4720d06e1b353fd6c7a52892bb2938f3218e1bb6e018 -dc638145504e6fc4c3fe9edd6ec80d452be3cc551ef19eede925688e174c2826808313eb524d33bd44138892d7b245dc134b16851a2fa1803a788f6aea347e1e -f8633746c7764e34212592815d2068949689e784a6889e6cd7b37a2de91d71202d0f56720e2fe75b260f27bca9b1bacde322467d26e3d1220211d62f4e9c910a -f488c1face2c0fb3bbfe760a6db8d26e73dd7837fd94ea8990e9cbbb2f915f24b29377d782abb2ca19afce8a8430f00f1e66174474bed0acc54a6c9aab5e3d29 -b024c9718a1d251be8f6fe6bb6186c8153bf4fead504ec4242152c88e9d3202defee9d8c2a21253b7d3dcdfd1a067f9e3c5fafd358813a83fbc192d7117c0b05 -8b34a38715f436f7fd35b20e0d2b014fd7a49a3521f15147240a170819b51516f06d272658bd6741e104b18f38fbebc1f47a91d1d5a98e43c9ddb1efed4ca72d -c77b44b992f990289788ce6e42be4a63c750f17fc11ccb104b03117aede0de230e8941f4e2405293804dad58a76d3e052ff9a61a9a2851fb2496edb89c41ef2b -153eb2741c756b1c73431237e23fbdec7270a42f1125f5c50a7cf02e97d109124e99b7fecd300d0ad6a572af81c9954768b0f5490a6cc14a7584cbe5ec346008 -22cb92ea35ff341c6c4edd0386d567a12d9c2291ac32a312a7cdfe4c5caa4f2ca8fda25de46bfae5fd66c2694424680e9c61e85c60aa2fcef9184d445c0a4b07 -beeffc8fefbd3e7bf2e4dcbc6f6875a7bba7b5effd21141adb922f6ff2f049089e038f63aca471983364fb3723287d7e6f8909813b62a580ae92c03a522a5b1c -0657e60b1f160e51923393e48660c94df13d53274d9ba98d06bedca743338417b27cb8069faa9638fdfbcdae8712a67787bb4f94831be268a771954446538c00 -8682bc6e739ba31b544f216288d87dce3ca97e29566f497e0f47c59f90632d1b84f3968fcbbb7629989dee5fa78f7fcaa2d791e74d871ed84f5066cc9345831c -497b5a2ef880bf882151f37d7c43d67cd0e79bcbb6d9f200e82c3b72c04325234979a91ffadff68aec71542011f2b5385381192f98dc3a802c298c2c8cac2625 -e388d1569e2363568d0887934c453e92333e96b01aa2943d556600b027dc5c12969a7b455820785f43abc98c720e0a2d3183a304ada3e439054a40afca42e51f -c554a1887ed00b808051076d6d679b013e9a5615e76080128a1c7d7c2147302559e800d9c2e749c73cb4df59c1f7765da0d99abca70967b6b404187d2ac95d22 -8e1ddafe4356b9c2e5d6e7b8e5d875208af7ff2bbc742ac43f5a7ba2535c8b2c8e2fb2fb642cf505c6a749f8a7f4190bd15bd5b4e5c1248aedecfe002e463d2f -ba88a5ac80c3d284c15871442a2aeb0d05807e2a1ce886c09f1737caa158391fc3b915ca0bc543743eb00efd44cfca3c57af42f19d92cac62a268ee69dc40b14 -eed4453a3e8c88e0a37f59636666ba57de58811b27f00d728164183a371d860765f3507088ccc974778e11260c97a129bf6738a122ccee0737da2897275c7719 -c0a3005a5389d623eebd880c8183745cb86fa3c1eefef3b02ab6e3c2d795c31cf8ff7c57ccb3688e293c826718195d7df9f72f675680935426cae118524ca60e -186c02183d7b234582f1d8d343de848a92402dd6e49adef02773294719b95213bbbe71c3a565af478bc61a525deb19dca9b6493490016650a51caf4503316811 -f2a25821065543eff568491168765a29ca47a1abf37850f25f6b95a9970f861e3defed88361e82e0e8b34643d4bc097e944f116e1f83a70b6606b17e14222a1a -3e4950cb8fb9fe0239ec03cc65a41d12bbba9d0680ec7fe98da1ea44e4460b2c3fb73f0933a6b868e40d77c7ff76a70377710f82f76b7000a1c123db9bcaa91c -f29dfc60c444aa6ca2c6230da8907d3b5eb11db0ca851f3e2dc99c4b5e7dd11358a95677f564f64fc99c5c430f5f35e2134b821ba054c12ccbed3f7fcfccb50a -3c407584e9b83488c1f2305bc38e475282d93c8126b8adb97f3906902ba5870f46f29ff32c8c56f0a3e957cb6b141012fd8e841556e26af7b2b9da7553f36b00 -4f469372f0848421b96f980c0c7996f7da8bd456309bdecbf657e5f19f3a9729f57c168418f7963abc1ffbb83bc0adea957e67cdbfc433f952c12af01bc5320c -36c73ac0a434b782d9049eab052453f5c8cd82a3d6c1f43903bd02fc89062f2ad519209a3844f082157b0d7f7087f6cba8302f5c91e52901ad215ca69fbc5c06 -d520ad8bfd2387c1131fc5621c1348a022706696b7a17058ddabbd770d4d0e0ef332390d5478c60fafc87459f96c5556f82d3c3152a3546e77a3541a57c3a108 -23f5a7b444da28c7a7385aab398ff04127e8cae4d7e26e98769a1901e716ba0d21063d341de3abc801e3d0c8a2bf3f4fb01c411ea043dc21899d7ae2e9c27018 -fe36ca1387581993bd919799f41e150de42251840e827709781791a39727151eda3910e05513e291bc808ef7c88c8f7080b07557c56d6f9297e342659251860a -096cb3029d0fa3e2ced7947e625a68d520ad2ac362e6dae9d12073aec247510ce4f35cbf8d124c68658bbd9d5aaa99cf34b2558ef0bf6700ec8a64c267787208 -2f24822a03833e82de95b2e6eed207ae8dce3d5dab6b5b05fa8f6c177284982c37d0e8728b67cf9ccc4671077dbff7db71e2f1b67f5889f7016eb5e4fd7b3723 -3c4ed86eafd427b9998c2c6d081bb5e96339080a53dd27452eb03d6981e698042ba83c6fc9f04b2ecd7191aa9a46f4a804ffebf290b535c5e27ba6c4b75d6b24 -474d2c585e149e01e7154a591d64e1edcc19ddf64535e52ffb66e83a8300410ddb64ce9344930e1abb712ff679aa5b6d8079a629f8b3b10218337144044fd022 -2ad032b1ca05f180207e6af32e92c85fa6795305d099c34e8240d976c953da1e9d9d314683a62fb183dab96eec0957f66eea5d1e9af471c9a3fa95b04194fc29 -aa13849a32bbaa874a646731301f10e238c4d0a56dde0fd8efa546b880978b1431671d2f5f731ce2ebcdd249f517af8083cbf1f7c385de5a0e367730ee1cca1c -0aa6807813d12c817c5fa335f07b60615e435cc1c071a16e6f25d4884ec5d200271b6d5a868234ff9072e41200b1ee934a7551d0552bb1d05062939c72290d03 -97ebb0682d65d66cce6fae907543ab99124aba6bfe7f6efd081bc91e84f2401957171a759fc9cf599148be0e005798c44ab6613745fc4ab3e3203d0093cdc31b -fadae18e425be5300f76f5937f9633812624111b68e20292fe2ddf0c3ae62f17ae805fac9e573910fef879efdc03113b1226c3ab01fd0b3e8b66f4643b459c06 -d65f884dc53144efc7eba1e4e2f348e742ab9234219bd1305d1873dc90504209d47aba3398b197c2efa4970ba319722690ad95011d0959d3116a6b0d0f4f570e -90ac14a198791aa546cd6b3bde4db2f8b3fa419a201f70ba1701a522d4db1916cd9fe07d1152c8d3608bec8aff8e50839d2974f28ab792b4b09cd47806650f03 -954e224ee19cfc668d0620399c4249074b9717ea799113055d635ffd6734902b8d8e3fd6758556dd7d36f97a46806d0327403f01325904a19bfb94658899420c -f808c03fb36e8cf8273b662c5569eddb82524c53b0d04103201ac3dcf5c2ad03c4aafff2824d93e062088a3d4ff86aa537e695e72a78306900d1bff2b6d7b228 -7043b13652f2b561c4b14abbdd475460b70dbe1695c96c3dff270ae8cc2024204a377520d05c8c50ecf291cd75433f7d6f719d5afb157341afe38f7199759500 -ff4389a2a7ab8c3392495fd4d15c8c294c22fcb1543e7dd9268964c84b1c810c9b3b47734cddf18efddd0330e596496f60d5aabf9bad94b6845efcb68e4e391b -731b34f14cdd4e2a9d25a6a72f0a99493b4f43fe57fd39f915eab690d9fc4726f5ae5c2a4c33d3e39189810f5811f89cefd21fd2f4b471908a02001530e3d30e -3832f01f49aca8fb545b1e62b2acac13ca52f9e4cc3a9a89112bf95156b4422069c0a8106b04ac7a6c290e6d72bf1b06749e52272e6c82acea30db3fb5c2a828 -1127307076005078c21e8f30b07c68e7f66545f1d0e20f87f63712660bc0fd2b144318a67391e9a3a321d18c93b018135d068b91e1f47fd97cbb2e422548942d -9193d15509a73fa4775aa8e4a33bf69ced2be6505bc90b596e60458ad048e01f4a5694611a5be885820e405ee431fbb4dc394629a4df0d9e57b55676d3515915 -4eaa2b28c8a938d081b9e7e31407644df473de1084c17c6df67c068d5549cf120a3e864a5c1834f540695d558750b1ec69690909ab82d5dcbf03705d1767ca2b -f0b0a0efdd85745637d1a692418da509e8daa2c1e0746ba7bb4059257f8f102ea5b2fbc2aa92df587edebff73239137ffc82becc53e1478cbe403fe30fed3429 -629e20534a58c2e5fb331f92d7eef183f82d2ee15a321b6e6a56fbbc0387670471695dad1fc698d74e6194e99f5238f7f95fdef434ce820e28d6d838f5259d08 -6e7668010d0b6792ad9ee634f426b83ca3df803ff70db5c22299868c9657c40cc86bd715aea68507a66c9283bd1ddb486695b43c0ffd214fdd8c1d743c5d0306 -405f28b6da666679795dc284d811b394d8503eb209aa8ea685a5658137385e11e92e23dee7ce9e9032e27ea8bbb72219d51f66934c5f960b5e61e6d518853205 -380c5fbc9f63976c2debc0926ef1b17327b55ab49c5f4333afdfb66dd7801d199cb56312cbf94493c889ec54d58ab454514587d37d7304fe8cac603e74ed242b -de5369d8945d9b6788e23e00acdd1cd38b6bfdd62354e65156cb79ea238127071f99a0d26563582766253684038849693ec29be536af7d30c0b3a9b15031d015 -a928a8a7e768fd9370f4b6bc4afa91e8ac037863bcb376d8411a868e84477b0107dc9189bd934e7c1597f2e121bf53596e132de194b05ca053f7aed389ec4527 -536bedd868063a723db9330cf642b4ff5bdf0a65afaaf6387f7f0c6c648e0d08a6e7edf5a2beff2afe59ec5999f12900094c47d1a2c1428b05a9420801168a1b -8eea631a1c05e29d15b78619b47863ab6ff6c6fce7f39a092f29665564a6e42fffe8caeecce8c55924e917cba8ae229e0e3f0a5a99dffc44735447634f45ce0a -c08c9e0a024dbda53334ee0fd99e6e6cd9a1586b697353ae3c85433d8473572c0db23ce42b044018a9572635eb2bcb9275516f2e6f17ff5ed8b3ac7a4ba07b22 -66cd27de7d00b37992baf42343f8285f3831c6f1de61f835e82ddd39afa5f30ca193434986f3475d64e86b3259101d8b286d0696e303a535817d93b8342a312d -70331b02c1dd31e15d7714b1a7ed0bfee0e27012123df74fa9ffa781f4cd56145d54b72bf8fc243ffe1b1f9c7ca02e645ec5dc6f394d8ed5a29df532d049f80f -d7f8f7065fdb233271f6448d960b3100fde2142ff06bd5c0b4c2c9a432659e1dbd4e75812130ee6f187aa52c4011d87b32a3889f99f475e801a802a25bc37312 -64da3b4957110dd41809a43480e498a001e9ef31c973ae4d5805bc5a613b241b94dbfedaf641b013f0359a23c3f4dbca748c8645c62f868e799ce47ec39eb212 -8ac312af4e18e3a853a1b530edc1106ba83aef8aed98c3c46ed34fbec033e51c2d86fd978d8398ee5858ce459e54e75f619503908037fb950f8bb5ab4168482c -15fa8b488b7a11c996336b11c66b51371362b4beb1ef91e8df0a5e44bc5c69100cef356596b4cea3a9b18916d49c8afd58a417790594f7a67b807eec5c54f72a -bc0984390f108189c6b65691bcf7b820aa2303385a3bc10139f41b94abf32b1170409ae47f8bc3464287cff3936d8836456d73e919167653691758b1f5beb908 -40a538a6e331a526123f9a04d4bf54535b455f3832b38566199ba2461d5719025fbcddf05cb3b4901b52d943b3d00b1076683492bbaf71c551befda7be3efd19 -8db14596fab7ce664049c7b7b4f9ae1306595393ea89f610263b5852e8eb323016f5d6fe9c1acdbba6a1e3cfda6ca0bfb04b13be7cab559f5966b9de8276c906 -5af0237ec0bbb4dd2dfd6c4c6b3bd83a871dd9d0b2c43850b57fbcab6e99d017fec45d813fc4941d1eebb4830c74f121fec6fe6c57fa5b30c3da9766fdf43118 -ea1469a046934667b2bbbcdff967c17be928b585c07276c734dbff70f5c911043e6eab2ffacaf62df2d62d9c49ffd966e9748a33110046ae75f55d918e493b09 -e019f96ca0c6f895d40d22f1c9fdc2e0ab2ade8135fec846b73aefef38ff0613adb72e10b1c6444ceab7ee65784805d5e6028fcd0f0dc877a01793e09152fe10 -3b7537df5743472472e38b1a1d8f6ca84ed49f1a961209e703c98c40b61cbb1b5b6c4023ed94a3ac840a8c51481b64389fa9dda8c2c77db5f7c01e469d973825 -e04fd650beeb3d004a276c5d98b09a1a511fdc802f01e95faa56e128f1901e16c31866fa09d816e824be1326b1aff6c63ac33829d6dae0624e68bb76aca95327 -80f188e9535510c6935939d75b03e0a2710c303bc378029e23cd1aed5c348f1f883131f34559fb13c02e82cb0bc26e3a946d3a5edf9cead55a1f7731e56ff32b -9ed30a1a5934d3c5594d4f2f433ace88c0be94c35aeb4d9d447574ee97a11f08ed39aa2a35b2d2faf6ea26c43901c499bb2d47ed27bcaf3dd33adb66d9ad452b -98cdbed312e0a91fd120bcb4ffaedc36045473fd7e24a02cad76957f9d9bd72d11892bff59bdd5e56408546aea0ffe25a173a19baef4a80c598700835d815905 -54ce703e711ebee0ce3cdcc47ea513b294e10651b2bd6ee557de475df2584f17e7bb8aae920ff74e34275d810e44c7cbdca6623af074523e17b213cc96821906 -50938f5f1b508fd9c9e492486cb4397f930d411d47501abd402e92a9eb65770d7c6956773707ee6996a74fa6b3d86b771fd7b88a1b4099183e60354a11d85a14 -229ba523778332e75d02ba0d3fc07836cd33aefc3306aa732fb51345602e6111f0dcda3c413c82ffe8b5ed8365525d346b66d5c5d6e97b9ff4ad9f5405794311 -7a873f21b5ace17038cec7b457c1f38e51aa4e900f036cea3f25969e00007d0f35905985e988d735d606b79a518006fa1cd44dbee709683f6eb9dd83c4bfb726 -df18d38ed8e3c748f76b51db2fa0ce32be1b28ebffac421aba84fa9cf0119c2217c3a5762bd3de1e8a279a0838f16baed46e2eba20f9175c468802370b8e790c -04126620d649f0db7ae16f92b69867cb8b4236f5c25a2b653f2da285da4ed421d4c6b775699640baf5b68248f3481c6b964db2eaa0afd9e7b0d8dde737804b05 -c2e07161e696c6175a1ee2b664a6a5864ef3aacd6b4848ef157dc1ff3b504c0607906a7096a951785e432f999b23bd5ad29d1b403690c56f3c1acfce92984f13 -fb120918f0bddf119f422ef326c8571226951613af406e49af4e1faa412a7620c3971e345584a87811fe9164164c39ce42c921da8c7cde06c89b5c07c1d04b1e -3664013d01cde11da516ca984e4db4d7c027f1b180d9fb3e896574a89c08bc240052c0809b750d1a35bcb6cbe6517f1e55918648343dc6ba71f101fd1a4b202d -697e2f307b2b0d3c3cd1796d6b90a351eed67a6e56704329152e13f8cbc1a80406cdfc9c4789a52caca58b514bdbfd84d5b0728088d9d661bc988e1c6b12fc25 -fe55c6509a6ee707e74c3ee614ae75f9f5f15884f03072392898de3ae91a750180295f42e4a43a53e6c3cc25e286af977acd881cd6972c04a3fa92fe8e4b3d01 -6fd66110adf247932c0c09b262ee23d260e715e4d5db061a0d7c99a446e10b1d14b0f2d154b50ab6c3f226b9775828a72095ce5a0223a89ef827675522299329 -08bb93243ce91d9a40dcac2c323985b5907fad0f5e51bd0b996bcbc91ab39b14f10b525eedc295422675eda1bfc91165697dcaa664fe4aa96e4a3a5e979d6e1a -d3a7eca805a05f74814f5b075f30445b6cca54340ca59125c1336c46addda52a3460698c7a566a1a393f846728ce59c36956c9fa14a6e99a02df572c4e57b823 -8564751319f6a0ac1fd9b76f843f3aab52af73f668f4e10c15031bd98286032846f19e222fbbea05c3a07738486c407f4501e7376da8b32fefd8f9c83008af1f -418952a1d3a5250c45b88d26e4b528e78a093d91e954b03fe79f1b65f6644002a9bfe3c30b939f9cb759769afdf7249e9fb722f63a0e7be4b1d7675372720913 -4aa5e5ed752c50e83a6df78dbc3e3980664bbc43564d41e171b72b94035432297dc4d7c0c2a5fa718032f191b9b5f8df05b407f95b6693678737c6e3ea5f5117 -e1f6eaa7d48420c7e81a5177ef65c89b70d332ecc20179141c9c55b951f7921850dc50ea6a61d63ae4fa7ab8b3a77d732cc8e86095459bdcdedc82673752eb2c -eee79d200b9f14f449e3b7525c8462a73547e3d716cb16415ebd008085ff74163b3a781e640422ac56315a627ea55887b487bef4b2d8ab46250067bdeda34713 -a407631aa69cacb245f218f3978c483010e58291a379611baa62a63811f2220d2d902b0c9b6ebf2cd4dd8f8fd681d3a93bb5866a1211eb5ec7175f9bf04c3a00 -64069dc39d8526c41d22164eb09432bba91f54d1f6cba003da40df7ceb5b8422f4576c86479b302f00d0257c1485b7d2e9fbf353a5eac2670cc0066b7c919c07 -23cca97add3c6bf0adb2939ccf4962263840b63c8219856b6970bddd61f84010aaaecf9ce1a6de1cabdd7df3d3ccc9e2efa20ca9e239c32964b2b72516ec7e15 -587bb0067ab6c9755e4d98e6333cf452ae9c174284aa464aaa28915bdad5f11f57c9dc109721956589a49955290c8560e7cedb6229f7556a4d480251ecab1d1e -8778b7e5e26a329c9a680bbf7398829d69f69ace54c8a6818979b32738bdf70d217fd26a97a8e15d30c676ae9d5f48eb28a4e4b43d83605b4e14ae82d5646e20 -21b1d397e1e3c065d4681caf66f1a8d83a027c8e37cce39d946c980361b444110576bc7f8d620492a170c55d9fb5e64de86f09aff0df867433fb38bf34b40924 -90c70fa31dddc02979c91c732e570d22019c172f699360644fa89e205636b21e9cc94e881f3cb9dfd111c4699dff365eba7c829aa3030f0a176120ad64711301 -1870c9ef7b0d75351e0935f1e7644b8c2c6cf5821def4d6214f0c8a6e3aece1e190da3b383cf0206f5002dc664e2c2fa11571d7027256d9f82b5c9b789dff826 -0d854995d3b8f2f87413d79eaba5fe8cd7d7cde1a44bc074cd22657b3667a505622baf24dfc70fa98a097aad66de76150629a73d93abed0cdfc81f906c443929 -bab6eadc335f7f173ff50924c5ddd600b5f8295d9b821651750a3ddcdb526904a0e0aca87846e1a0a3b9e420fbd57f01ca279b3021a85f16f79aaabceb78851f -77e1d7849b75f1c38420453d4229932d649ab12ec49b5c88d9cc4aa108193508911a2f61340b2ee8765f99a71332cdb0d731bee8d097f36466bc29355602cc11 -dedcf97747b1035d116391cc6bd8bb87e1ea44dd6adc2e01e7ac231a83076410f32949848664b0429c934c09e7b6e07fe01629f854301b249820552a89263a27 -e65e0b4ee5525398c68f5ea17cd1c27fdd408692d2477ba2ee03a79b2932b3197b1c037fac94f2725d60611337efa5a867d60e441222379a958469c16eeff713 -a4c9df4aa82b1a5f998c7ccf99e2b3d00622b9d0d47c823aacf0be339c3f472aec167eea04cad23d467f6247556e4208d57ba27f5d02e49f807fb598402b7511 -b33ea2642e62803e7aadd33b76876569b1fc39914a39e854a4b03c875d208d00ffa7361bf5d9ac3351ec8c2e515ece7b6c33ef18e67de847b396d7b14885e424 -7d59d5bd3d3779f407ba3e01c04cf250146ca2217736d27e4ad4becc7d71b81c4f3852a08275a9652b3c26113eee9004b56cabe6646ee730e6da0dcaed7c4729 -76e74458329bd29c7e87aa1f3f2a353d11e7718dca4158b17b342f8198cdc01d51d903654a5d2ef11c12ab659e714ea8a7fb90796b98ddb8dfb4df07352b6710 -f5b5b27f5d0a4483f483c7e0228faca4e265a6f5f2cbf993e4921388c107021199300d9e215d852f66fe7a3a2de3c802b4c47340864d8e75e1238d9ad374dd08 -86463d5534f3d8f453bfb77d5af2a27223cbd8e073f49a382113c0d1b908c42f87b03d888bae67018db1b9002f78903b8f90f76695942920f10885bb4ffd7c10 -c9d2f73c9852e0eb62d7a412022ef77dee0dd2c839eb79901fe6d9cda7212b0e8eb88427d402a71553eaaa5b80ace2b70414437560e93eea89911b8a6317ab28 -d95315dd2024fbb260469dd41b9ec798360d526390eb27c1dc59698620b91b2a6867fa9ff8237891d47bf2cb92303f22aed8002c4c94914fce3639f8d64f6e20 -5fe9659603d6d3a3d958794dc4b83e5f4abb38520db9b078fcb1a1125be2ee02a8bf8faafcff43be6bba08d7d5660cfa3ab48d294587dff1751c94b6a6400c2d -059a2147c1755d6f45167ca3054827244f5c9b6df8c67d5146da871e829c3909db8c981bfe69dced4559408f593f9c8665a4c18ce90335a7f6f24e6bee4e631d -d053efef87d9628c060e1eaa8f7466fb0948fbea60458462841b9231140c1617b960e4b643fd8c54044ba5b3486cc0daad4c4ca2d0c4bfa9b2099063bbc82930 -b2abb59f8532a2e7326eb8ff3b463888b64f97432f40d178db20d2fab141a906e53cdb2b1cb0497999b6c21666a61a235610491baf9fca582c7b50d56cba1202 -e16e9d8b8ca50bd029b721e0bdb953ed072b84eb8c77d68ca1f452338506841b2321a0600cc8aabbfea7a486fc2252b1fdb331c010701d206f355d6027b8fb0a -ba962dd88cc51cd4b9d8057a98999da3c85ab9c1f4b30aedfd316cd3c42b552cf58e5dcad338d9d0b58e80823d61d1f94d4853894be389944d7ff1a28015f61c -68f29a6e5a0efea3260f66c9744e30cb54e23f2240c1f64cd52282ed4a245707f0f472e87e9776a2f8dd8d2737383d3f65dc29de1ca43dcf95e4497c13778807 -a7ff3556d839c83ba313137733e149e36edebb5e0d36a2077885941dae4fd716ed71aae743b5caf70b7d7a6f0531f17d585178a17971c75b4905882e7d60d90e -6615088edc66bbba5b217c09f1eb64506b2557a1e119c45e797fcd66568b8c04683671d769d8f06c2437288103213d1a8a2faf59f3221aed459d567425ff8210 -bef387bc8ea05a0defa549b9eca95571725f230072355f4acfc848bfff3c5f0acb55d4b3b88d129798da1515a0549eddede0026f637729d21ae50a0b2106720f -264157d0935ebf97e821a21ad20b6643306bb8b13c2c6bce60967e8377be8c143b12c4ca49fa2daf6f61122d945e25e464119cf447961bc0cdeccd83918ebb16 -649ae953226e0e62160c17276a69c89ff70c41148478bb5e4cb05efcd8fbae2f016272e16e04d86b6e665f5e73352c629e805b9f97e628ee7b30f37885cefb0f -25109f81e998b78a2d048a90400ab6b7ffd3f26aff16df453930938f4e4d2e0fe77f760286d859b6e10504e79085d4f2c10a7ee15eeacbedfbb586ff40e91213 -508c50067bb2ae21838f8cf75ea2625084651a5d0c6f1bfeff0e92691fd38b2038bb125b631bb0d03f0f22028c4f4025447a44d3f1d3e1271bac84b7713cf407 -598764905591e70fe4fe4bb411f3d39293f71148cb0c6b57bce6c2903f26142e8a0bf6f08699079551dd0f6c3a426da833cd573df4a24187f3a749b0f6cd9c01 -cead80a8e992e2d929068f517d1309e40a2a9f55abbd8b9bbde7b982e053aa1afcfb102e6437995de9de2eff265f435bd75ae8b26eeda89d5b97a7f840c35e04 -3dc11179253ab35bb5f181cd3b157c240be9b4ef543f9bc71ad520f4b5d0fc228d61dda57e91f2a980a7c7473adda76936d96f30e3314b4aeff8f88c47027712 -e6ff92d0f92dcad637b25093a809943f29b611d367f1615ef6fc3b8356ba8f14e5f44e788a2fa7a61d227744b49a5b1073c32aa8a33908e498012b174f39341d -de8160d2fc43c192d72fff761e78b80263205feaebe8959305a4ad7e4a56dd0cc7d60f10b99cff82a305f621c783b659b3850ce611f870edfb66ab25a4960230 -85f11a9b92cb39158d6dc39e4ff6b743deba64e72af21c8e144f5f27d307db0823aa4b4e7a8594787eb4e487249fdd3b6332cfca7d7b5f8f1a1eca77c93ed119 -b2b3e493f408ab1e4293a8e6a729b58f390a5c625c5bbf929f93c4b4c800540341144e07de39924c9edeb48953cd71a5fa870d6b690c251a8b24151dc36e1d2a -b726d673a3cd41f91ce00240881fef70230753098448c817c9ec29890ab1601b3b37cf064782884f39833dab1fd782f0883fe3ec60082e93914489670d74491d -bbc7ba203db00817c77a59c0b1049c6382064af0d4bb27f67c6d7b61fd8aa52bcbf20e8b68a8aa48f87910fc8628af106f881569a172e76b57b72fdf31c30500 -ed4762ea1331f062e07659dd4543a8524482a33521d1789da77cb1415b87b101e12a595a1e470d25b1c0beb426c14d460781483043e4651d290df67773857828 -a0c4fcbc127bedb00ebea740ac7352b3c1120e1232bc9d93738fb473e9d51c04603dd535fd977ef2571262d296d46f216c60af1a910bbedbdcce5023b6e4b114 -4c915029173ed92700bfd7bc4fbfcf647766704e04992d9a97572bdbd8bdc106e45cc6c42c92a8802174afaead9f3dc00f5f00618b3ecbf9c5d98c4bd35fc21d -1ff08c08acf3f68a669078583afe41fdc98cc613f24d9f3c9a37873ce3cfd2169a71e127b35ede7e2ccba469b114788f9b57494ab7189d6aa018f62108e7ac0b -8215ac7ae17e10f42f4c857975b334a31b3485e1380181beafc60f5c7691ba2032954e19494bfa4d37b1fa7dcf3fd644c7618e515b565627358a0f20a2062e09 -629c373b78e6676c3c5910a511646e23a5964cfccd8c7e9b1fd8c8653160442b5a867066b89cf45fe070d3ed6832bd1ba2e67c79ac1890a92bef11e14835a200 -cffb9e81b55a35f7687d8bd849b2baec341166fa5832ed7dbeaefd37ab4e7f1e3713df1e7a0a690127d198b9abe0c0bc543013b1c059aeadd902a6040512221d -3a0ba6bea7d04b311a9ac2bab0df32ad8dd88aa58ef30a6156c3a6886442aa008ae4142df3c1bbd203f42c0f9aacbf4c594b0fab8b1b7cd97442ede95e48ae25 -4c994dc7c14d9f17681abe0dde1d698d36e175b689de81bdfeec9c3a910a6414352cdc4a5f607f57525494c1eecc528306174a53d9f43171704177893ac57c0f -0b8f6daeb4a73ce65ee592a94efe47ed23be98fcdbcf721b18682fa3df1fdf0e7c9ddac80995b5b519cebac17f7a1cfbeef7c6e41b86e4da780d671631f76c1d -6bba56f8fbd491fd91b5476cdc166dc81f90544c67f98f4be2c74516105d0717dc120e509af2eded686e55ec67ca822539161c2d513e8de97e66f010969ef723 -8d4db36e8bde2074f8a01daeeefc8d84079329d06ec339b1e26dc6703021c22385215bece4a3aa93130a2a1c44e458cd6aad77c8ed398f89f843179b9047a00c -64084ab0c440c963456be10536841f3855c5a70c0edb14535cfe149ee0a913237f1aeb238bce590bafce513cc6b0e217f80edbc6842b927f83884a4752c7e210 -3b35f31ff22c04cbdd178cbb6b0da372e675171e83fd69a48e65810e53c73d1887b732b6ac82b4947f9852f1cacd80fdff2a1059ec452b956a9d880364e21d2f -8ef976f16ca297f32198bf601b6e246a697d6009a704af6442fa7783fa95dd142d91040a8b07e54e5821c48395a64a4c5e78b59913f50070e9517e2434535100 -3cb4d0689c2b48c89424d48f7764de5123d7460f50b16c97357b9577d6ff2e23e16e0576619f5f501980baf06fa6fadde939f2e5ddff2e7a51fb2d7506d43f2b -a0814c0048b17767dd607bedee04a836dbe8bc8db23104717bf47c421d10741678b006491c806fdf5ae542a83b602e3d37cba5c6dd11599b76d4020a3a773f15 -060782d72fe01a6a40c65097b813defd862cb1eaab708bb8c533ecf90ddba816057626101e6846c6f57caf5ea35fd7a4ad59f9d97d52f36f174ac791383dbb2b -ea8953930d752964ed6066e3c4ff8e82d786b50d7318c0922fd6ae2c269cb11db5914bdb1c57602f66b9d86751362525fd0e74379647964d85ffdd8f4397471e -8b00acfa2e02ef00c987a2b39427513a1dd0e4d777ec31cd72c7725f1aaec428a010231d87ecdba2f9f75684262c8864d63e0b83f67b24676f8a4c19b1541a08 -a9e385c37eec2627d854ef66c7ef7982b0660c2de67a145ebe9a6c9c3e937404a02e7b1f858a2b28bb43854b201bfc2cd350beb2f92b002dd30e322c5de70824 -46e1e4d2ddfc71e31e5dfb26c80f9291c58c247e789e4a31b31736a787330a2ea12ab4e42fc63716a12b7415299b3c410b5b3fedda69c424e329bd6c7906460f -1a9a7a70bd9d7e2f6555cded27cec0ec754b54d42c45787ce252c8b45e833c2d927aa193845e4aec30d3eba573aeb048460f28ee3a5fb9c249691fa6e790232c -90698b7ffa4081f618a1c3964c572fdb271d04152f0ae905c4d81f0583a38e10bab8b19df3f1c4b416232bd9e441f6ecedcfd28de395e6029952e3bf380a180e -19f8c2b9828b036c1aa8b22e8dc0a34dda3fc5401874ab1fd7e3307a57fee40844752ffdcf942aa8cb1023c8900d4b487c1804e738311d33c4a0b4a98af52b0e -4e18ce1a2056046ad4771fbf82d1ec502b4ee68d521c5cccbf1339f8c23a4a15ee8bc366bdabcd9cd40c3ae2d96becce708c122dfcf9462ef8b292057c71c024 -b4ee06ca1236236800772682aab14ff98f78ed55a7e6069d73302a63962b4a28adf314227024a668359827ebc79c854e944bc5eb3afd5f271ae8bd66e648a115 -1c3aabef6f4e669352194824f7da82288e382119581a412fd626be877e739304b056225eeb6c87df37a55f3bbe2a904493e152129a9467262f2f44dbdd0ae111 -49bca22389c69da68d35fc55978a511cbebd6d1b7f5849f2bac6716b445cd52a50e52f92d38dfffeb6e57e579385512ea0e113e70483f9d7c70a4eb7c2969219 -8e919a921d3641cc9505e28c157b1c4316427dca5a9d0b9ae1dbdbd95e5ca30f5eace7bee20b07181d9a06a70899a02195c36f207d93721a918e851a6d25a322 -6db379cb03bee1c97befa8c5de53b33bfa0fd1020b0fbb437795fe4f3a13111701876d906291334347fff3383b0d62d5c5829ae6955d338c3f5aa6cf28beb613 -8dd6e231d9c26688b957d2394706ab5b1c41462d0748064a8af6419361d0651e2048a237a528e3f1d571f70c029d189a4e1c3e5c83fa3c7601cdfb1e47b1332e -3fd5e8ffd83937eaedfc023e42fc35987f2d5d0b89ec12422cdba971fdb8d72b8c66e90255588994e45754bcaffe18ff271ee0db5b83ddba83743479cfaf9513 -4cb87f1df93ff66f493e2e92a3f5d10ac542def8cd1dd70a95cf06fa0fe8080c61e426db412786fdba5845ff7b2c2505082d95fc41d0c24b4bb8559dc1e66719 -5b26a4b9e8e8d0e1da9601d78c128767a3864a86357274ae9cd2518e0e45f61f6697d3b75871ab682cd478e891f38265890e1583ed24f521149703874e3c0823 -e9ba9a727841ed3758ef1aea44bd79e04eb10a1b811fe1733813af74a820121eb3ec1e5bcde822263cc387f16daab31d716a2e234351bfc5ec5074e4b6fcda2f -9bbb552d3334106b2050baba32604952f7dd992cc4adc6112b2293370104a61731b4d18d75ba2e1e72df21c65c6d921fbaf27ec64b916430de44ff0573ca6b1e -7d287d2c1aa44ba5cdefebe7c8b2a71afd8d8844c0c4571391f6b5657cfc49248d14d22852361c9a449508736071c59502bef06290125ab1fd2faeda4959c80d -7a5a99b33ca90a0b9d132a8016fa9cd0fc3abf63f410182aa69ee6d529c64809b3ed851fa8686dd424e035a8008285f3d155bfd887b1e76fb4544dfc6ebe302d -9fb0f0a7771bba2c521fc7943872565fcc02448c31ccbb43debafd4ceb09360f5c149260fae23c096c5615a87c097cb8ed5e317fba70d89fd1159be23efede24 -f2f67d26ee7074d3404dc7ccd0f845cb88f0a74ca55ef5ffa96aa62ba9b03d1add3fd3cbafb0d67d8b0607fd7653230ecbe5b2e17666320369bd559ea7d58312 -87c3cbb0236ac7237d852a35625b5ead5018dff96f8633c1d89a813c9d65ec2c3e7f625a4271ac16cb6b12fd7c0a51d8546c0ce34e8d26adfb8fa1424434b61a -a27e2737ef6da40d49561247525009dc1d2eeda30e7235a5cc1ab4ab8dc4741de216ae92bf25afc2b148aa1d462320424ca770254307fcf0a0e8c9fffbe9dc06 -d42de6af62915ca06d67632d8e0f5e92aca2ff1ef7d3357f3ee73547be3530190071413c7c255c0f96a5e1491c11f5735a1a51272dd2a18a38ad083494989c0e -8883a1ca0847090fec4bd735d16a1c6cf7941977c33f87adc1ba80b5bfdf68021e8a60dc3f9a62165126176df17e327d481cdfbd3eb2ff831e83e2c30db8c816 -fca40e33279ed2e79765a89aa600c1d99bccfa7f6a50a61dbad9f0fd9882a10cb4ebf0de1588c72cb2bb83cced2ce0d07e97f8a12abd719bbbea5b02a2c4d20f -c9ce04e508f70ffc8a5d5d43417be57a2424ccb571e960ab8db154641732a9050ae00390582de349c5a98812a49ba6e218197fc65f081a2f4d59786466882f09 -c777255e21c1e10b73cb9b27fd0768e3e556e71f6b9a55501f51fbb6eda9502697db808f001f6b16bf96c168839e53953a9623889c839b7aac827eb863b04b2e -f77e8c232f400be062ed41b519f15902badb3f1b7687f5f905144e8430ffef2a37fee468217bfa209891a936f46ea5a3829b21cd374c43dbe665aca593424f1e -897efc1f1933ef5465490a5bc4db87dffd75f9e1a07f1fb2bc482bfcb524000a649371a539b9b733ba2c1837056fe7048f3e3c4d6a41d195e8407b935e5e712b -d6d56c497b2d80510c1556e604ec0b623c55cd53148700d10a11dea63178151088bab6cee0721d2843db28a9e3d6063d795f7c395a0ad73c1aa44f8f84eac52b -bf63c88f5085b4929fb0be680f0317637f37d329079ef8a50c547ecaa98c011591752968ffce755a5367d7270cce7d2168b78c90dcbc76ee15df5f7abdf53908 -a24badf104cf949f8dd94c2a68ed806cd7c655f4924cd27f4d9eb2f4f6686b0268298bc613b7078028e0f1ad4bb27c6d69c865155e72024c86c854e5cfc4b12d -857f44b429fed8b89c91a63cf9b2a555d935cabccb9737263bf6506211ef9f1eab934c84bc4b8f2eabb50974c826f4d5eba853c7d309316c0efce94ee81cbc19 -644bbb80bef69794e04814310fa23ed01c1ffd6a8de9bb8b5d54ccba1cd272236ce9137196d16197c961a0039aefc12f510aa0573181d592670a92806947b41c -75b035edf2ed9433f27af1431ae1519f71c5c85a0cedb632962c0739da4bfe0608a101c2a75290f494aa6019870fdab36ac841596ef625ad464b6b750e918402 -ea6795a9621aa04b9389e25f64e4711090e3caf9e00843f136ef6d39885f4028c0a0a3153308d4d5c1cb0ee9f31da5dc246eedabc5895e33b0c7927260a86c04 -4f77bfeb8ba55602687b5c7fd2253d470d7e3b43e9713bec6d53d125c433c21e79016dabff6f6d3a1e1312354af91fc7f167b05b16cb977357063ed326e50529 -1e92bf6e4be2e57937046a681d2bbff3361c69b0e3350c4bf74c47d74e321d2e16e4bf44efacf8b7497863328c9c7931b7989f1c5bf1a788e59e8b6d4a3fbe2c -83392a845da9a0f1117245edab6696c8b43c71128646302b40dd2b9be665b512409deb8ade7374bdf8ff7f7d1f458f44b8aa834fd001667d84fc5bbdc2642604 -aa681b0df86d8a10862874c67acb8b30fdca0340df4906b6bf3d0a9d41102d30cd6933d2877d62b307324f44734f25ef6df0ccba9704408ab4fe4f390ff8f318 -1c0654956776af07a6b7b08b20b927d6b4ee773b8800e562615446ef13d07a0aaeca27320b218ade7824d7c6045cac618e2e60c37a775e85b0a7fbe8ceb9c004 -f68a6e8bba449844bc3eefe985e085e8dcec3934edd420acc0972176b078fd0f06f69ee07d2e980ae9a4a10d5966de997ef8779fe899ca614fd26432c235842d -02344500477c6bcabc9d1c390833f5407c8448d1adb31232ed8f2ad837d2a21876a97c94dafa952f03176280125a7359ff3a359f026c8862190088b7d9f14213 -d60411747489b2c636bbde59aa56f0ff90c1487e9c8b7800dce714686fbaad113fec2977a0ed673e401188f2a7be460d54ecfc18979797fe1c9508a41bc93519 -350187d1a3ad187b31c9cbca167c253baa98e8f4b0ed7a492db179b6585f601d1c9037f4061d2c6342ff75e3123c705ce5a9fd38177f444b4a34e4c2c50b710c -7b750685a72127ba313dc7107d883c1978d70cdb1ea0cd585cdb266f84854b16a52b66c2321d151724ee0f32f6ddd0620690bf0818084f970923581d39083914 -5a5fbb91fa43c792948eb6cb17849f4dc3e5e3edf2178af24d7fc69e4449f519c2cf523dcfdbdb1193c45e729cf18fef1f46f696707b68fd228a3d902ccea711 -f2a4f691824ff66812401fe4dfd8e14076f747d327d5c04a0adda26e2fffce2ffa187dee560aeadf5875cc638b8bda624e60fbfb198896335d38102c3422f300 -646ded23ad24db8224be4099e6643d12ce754c8f6dc05efe4d74453c2e72c41a3be95743c682c446e864a64a7fb42ab8a6504efd0dcb65824032b8da80cab70f -55b939f290c3d28306f461213a7dc23dd909af293fd798d6bb144665b49b592937f0b3cac07476981396cdb408a6a289492137671c7961ecf9f148e99d82e621 -327ae1bdf5f4ab9961396ca9516b81f3b56836ae988200d71bb96971e63ca61e463ca7acbdfc95091d7cd22e23703de0250920af3abd493c13be0818a1f1a91d -9600d675c952200724add899d92fd7e0d88c5de82f4fb23221cad58f370825095180a0803ab3de34f5835dbdf7d3833ff2e928170fed471893579a3068f1732a -a49386b88c0d1ca6b82349f0e4326fdf5ecf298c489af456fb0c145f3851e2218d15b9695824c1e05901552b20e2a00666f399e07f275bb93ebf1a92fdb9d516 -1732ba8a2b4b816f373b7a7e2b75c7d56b35970b6635ec29184867b3906bba2c607eea946d2d073857c69ea500375031d09e668f1302240032a4ef50be69032d -0c5710779f0eae76bc77cfa6a1507a2858469bb618a29e1460de277f785b5b001cec2323a84ac5385a5ad98efd44b4e9f1d84fb5d04f68abb264fed4c7c87d1f -2ef8b34b421b8fdac730c287fe6400f0c029ab20dd29019e3ab8b7ff7947cc0a0bd7723e81179b90eb077f06c1a5c9ad24931f77374341d30437cd80b87d4b2e -33e5d859f0d2b257f56bebf9641426f1ab3354db22c159ee9ca8dbab1ffc0a02f87eb96e04f576fd2a9259f188e9769642e9e85783c95b90da2d3af801baed14 -a3ce50925a5c3a5fa9a5e20f1c4fb4073671b332e7018ef4aadb50260408cc2d23bab34c5c7f6bcd898689d8221008b5494e126741b91688a28d009f7639530c -053dc1f18828baa08e4d61cef5737ff4907021839e1a01a6e7efce43d14b240d87518bad97daa73eddbec93583559ab009fd9594e560540548903974ca287d2c -ea595570f81cb975d372fa1df174c9b505d7d6abec3f5cdf2f7cbaaebbd43611a42679917c5009b6688d7325ff52d19ef77e94e0b4c80e64252e745365683403 -1b278732536799b8bba549a1fc7725c3d10b5d38c8dee6c8724914c229f754119cd750db22bd96d788142c2f55bae72f12e38a9124161c3ad9a4592321823d30 -efede1a9274c250418cb1d92e6b5c3e65068c17ced90499da5cb8405f9f2150e63d31202ed85d3e8d21b0d47c4a1a13a3b4f275589cab4b0920b9d6e1795f20b -aa1e62097021b8251f456f7e5aabbcc2eb52cbe354b9c281aaf823f56c5cda15a20d279440ac824143bd66b4911eb2e87af03efa85b435235de4032db629ee20 -48de1b947886c4117cfb1ede465566ef0001a98c38c19171e5fcac422c518508a772ff537528b5c70f9bfaee91253a0acb1fcb51409441a468ca2856ca15ca16 -2bf20dc75f0ca12d6b48f7f762a25b6c09e1f258b74986e9c25d484d0c4d750e8bfbf45e632cc71a5fbb81f6c21c560044866d12942c0db758168c0a04d23512 -5df37947e24b6b042de24c85111dfbbe8384fcab39b6729063928407c25d1f245880ef1341b127ffcbd617c249db834adb579cf175fea9855891e10737ee5602 -a70afd53b1b70144d17541ceb2750dbb542465214775f40d1edde7cadccf7b1d257096bf8261d33112b46b2274652da1cbb51b989a5a17e2b6969a4d67f51202 -5b10a987aa416f33414b35e48a37e8d56bc69527bed27d0fea1b5024671c511d4a79bc2ba69e1cfabd4004d3e7866baf52ea663163971a99c28c5b9c3cb4b52f -dde6dc5057e6a638d7ac84570e728580eb99ca8839655ee0c2ebf0e81d62de048f84b5929411a6588b45a8ea4d1b2f76f6d7b00448dc3beea664efa435050113 -b9cc2e4b02cda91be5447078f55f5712f00a06a92470824b633a8899b87c470d80cc4176290ce56ff3d721de686550a06a1b4baed7676c09dff64a2cb195f129 -b53651f4d6d655cf25135762a61b66ae6d9a04dc12acea2c464a6b1389338d034169f695919ae64079117f37b05a5a346593fba25bc1f77437f218be11a1942c -ba419dd2128d3418c60df3ce8677b4274ea92f8a62ffdbb0e5bb2be31846830604cb5445f3de05c9082cf769341f0ef5eee5e38e69c4977d4e06a330d2bcf82a -b17d5c5234410eeaf68a526d1c2b2b7d20ec8888c16f0d5479c79d1a40068b1759b0e7a4064a734574fa11641484a71b2ca4c94f2e8e926301701b9fbc4f260c -f584b45c15f6540827238741e747231f75e40c86b5119e444f0a0e9bcf4f150297a65400f79864a7c34422cfe427bd63c20d1a00df2ed5eef39f3e80a9f99b1f -a9e6a220c842c09a83f07c38eefb38a169c0737e9c54c8fd84bbc7a8866a3506620aa12bbc7d1c1488d1316191f0d89ee0fcff30755eb01a10cdd5c78daa7d1d -d3b949ce3a3b5187f66ede9e5bd8169335023114dc1a13b482f683a2364eff1eedc9fe0b080921038426793428adad4e324d63685128be32cbf0b9fcaaf8180f -c9349a34b97ade784d4cf94952d8e2770afd7d239419f03441827c9449be7c1600f341396887b367bcaed7e7520f0a50e087acd2ec5b2955eb9eb1facec1f225 -faaad6a977b01d7477bdb93a7f63ade54e715944713cae3c1deb40eeecdd4216336921e02510b912f79e3c69a3986784129f02004348607b995421fdda93a604 -ed9bb9600c47f598773aebcf7775b58efe9bdb64eafae8705a5d4ca8e5225b1994a451e0fba696f475bc41001208692babd900ddbbc186f3dbc35d55af50d215 -edf692d95cbdde46ddda5ef7d422436779445c5e66006a42761e1f12efde0018c212f3aeb785e49712e7a9353349aaf1255dfb31b7bf60723a480d9293938e19aa7dfa6601cce64c7bd3430c69e7d1e38f40cb8d8071ab4aeb6d8cdba55ec8125b9722d1dcdaac55f38eb37033314bbc95330c69ad999eec75f05f58d0890609 -9ef7ae8aee7f9fbc35256c99a6896971279089a85221c4820437d3b5d11f44303de238193d44d835e9f7ca20d12c195fd39765f8915b9a9c2f4dee652d6a1826481e6b7889f6789738b99a35de19635877b23c5740c32256cfc0128f34934705023c5bd6220ec4c60384577f856abbdb3a5003fbef71c5fbad9269dd81ea7019 -1ab8e31d06ac8368e511350de475e8edded868f82ca2dfdeae009a85c4ae0726f38b8eb183cd342fd66aae23b56866a86ab559c53798fa196e580920abab1c1e24edbfa4619f85c432acdd5edb27411205221b0c942924db53cc9dfc5c45772972a473cbd1d466f27cde4167cc4243e603a77ec56da91f3c0bc7a149745ace0f -dde99398dfaeb75a937a14f5078506b1999d1166ee859fa4c4d5334499e75c26a8fdcb5e9153a269312bac6e48900aac67b794880371c60a0bf0aa4d959f4405359f117fb130442787accc64b2e79f604418208c44bc531de8ea4b9d2174830b0798b83f3cb133a4ebe26700ff7662ceb97e4c2b5b7e63933099df9db5d80b11 -2f69eb5ada7b0a472bc2e9583607bc350e171ff4636efa8698e583528580f125a2aecb22d19af18979408819e7b0786dff8d45d5c8b769dfdef4ab2d6688e32e00e81023bb4f495cad5fdc698fae21f5b2af9600d78dff0ebc42144cdba4f926fd9e1a1ee28100d02ddd5f26aca555bd24907c0d214d58c8cd2996830d33ff22 -a147668d4f32287947f754a56689523ba69d591f4ce2eb73ee8b8c9f35ed89054f6e9b2afe30bd5d55b43d97c2d18c057483544a2187c2c45db0dcca2f606f0f8f76bb8a7dc006841c68de7f2719730f80590f7e9c9fc367c31d942fa9df480671ec1f55b353c269af636047ea80e4c19dc673925c7751ebabbd58570af43b22 -766cb70a7d10cbe2ab0dd07fd17d1d61b9db4b13d04827a9396d880394f08b2dda21dad9e0d1c9eade50c7164a7daa542593c3320bebb9013fa0fe7520435a2cdcdee652d677d9aa4cc4ab696451fceaded3aa9754669b7322d20ee9dc883c23e0f907ad81dd929bc0b2d57d0e0ed05cd9d4481acf86716c449a4ed77899bc29 -e7493c9182b5097e9aafb3918581bcf544ce39c8e8e6dbd132428dad213ead17cc4dba3a3ca5778bb13452b9fa120496b9e99472f7ca2a96ff6333a09109f619f652d305182c6b3ab3c74b1dba107db9a91c31ec684ef9392e29b68de225ca1af03bbf5c81dbed137cc2792d6bc7ec489bf4a55873b454d4b02c23cf0a453320 -d14df7e0a175f70f3c42eb01b606526c310c220dea7242e16e3c37f29f39db278608f744a2d46d970b78aa6856dcdbbe6d2671c68453660ebe288f4c37a0f10f191114146b3c9b1b62257184d1ade69abbb251a86af38a603c2a37df11f3bd0f15b352a5e0b4fbc845a37755aebfa37b58beaf67e782d3d72de42d38c6326a26 -6f946c43e519abfb1cfe43d049566e60098aaccd9aeeee9898cdd3916578fd220ee5cf0c6aad347f12d7e87013173728f8b83630b526fb123636b2fd1aacc61f73add25593fe8c70cd5ab928b8f34aeb9a9f511393f93834846566a2f1467a2b9bc0d9d4ed0ed5c9244099970daa466da60b185aeeca9e11581efb08367d3900 -3751eda22a9f691c2c18013cc198f5df82a2836f4a606c356e40c7c241450a01e7a5aaed510a7b67e5ff2ad802f9d8f2488eb8ca1c8c6b27a7208af6757c932df14c6f355f4e8e764c0d2cb10f721cddd183df3b4b6e061b2bfcdb0bc128771380e5129c46a9dbfd62fe555d05098f32efc2b7cb79533b91d4cba8b3a42e490d -0b584c229d0e7593b29d58a892064ee7bdf0dbcecef1d980aad1df53c131b30b5e1d4d17255222b09d7d6c9b5ce2724380c6d24d76132c3ed13dd63189813a30948b764b99c5b313e32ad59b4a2db0965148f6942b22f29c1af674086cd09c0863d7c604714d47a02aca9bfba5de08372597092b2e78152d2eab9b1968a26217 -16b118888fb22e04da6a17559ac60255277982c24db577f3014ceada3349ae03dcfeb79775c7ddc8a35ca220ef86b6147cecb9281be50c9e62fe91f7be8703305a047abbbb8493bcc4e88778d7aa829b2bdda082debfeb513145bfedf9e3c81d43fd48a66b1afd60cc74383494038be88488c4f87a26f28e5ac91ba2fcc0620f -fc3b91ef53037e6d83d96e5ab06c54be273bc4ef90724cb323be2b59b1b35d0717ee904ba379534ffecb86b84809c07ec3a274d408809bcca1dd3914662a700497ebd53a9310d7b4e153091586a8a691e47b220485732ce54910b6f04a43712940f4a35452037a768277e370d00fd5dae49885d98cc9901bcb29dc5d4a9a641a -c58ca68bae43bf02e408cb6a71dfef64ccc14e595d32965c3142683f347cfb0a1975bafe52c045c88deab66aa56a4de9712a81609d2d5961ebfefde124645f030f8b0eb3d6c20e668f5ee12f54a057774e6c81bcc13a0ec66dc1badda722d117d6a8b3ef9cda21da2e2a754ac7804e9587da052cac49001c2826b449f988e501 -268efe4266a46751c2603afd81b64f5ec286146bcd45b1c74be6a4528f5fc205703aac9c3bbf1c456a208052aa97d5a651b5f71ab0a3c668addaa7903577311ab20d6a089b24cd1bbd4d16c50ea02518776805435427f2084a6176bfa27e0f08ed6eef61f61619d4a523d623a0cec8d1322c935749fb7de146b3f6b281149918 -593ec122c01afe2bb632ccb99fa77249b3631071eb4c12a839e968e01195a32c709420c1d1aa5732f09d8aa5aa43668521334ea771a0cb0fa9930a3988d449220d147f30de67f47e36f7d8aacbeef804207038d815aadc665ab8602e3d8ae423bceaf38952e556896e850ed55359bb40935a9ebb03f6510a220953cfa1071d1b -e1f163e1c79e1ee0266dd3312c60ca0822cdd47a94059be3da401d3c28b66320260806fbc8d984d4df53e43467f2b706dcc9644cd8840929a69e94b39b4080012515c32841724faa65f976dcc4680c5f069ea06d74b4921ee5a429059cebda05e026070f9ccf03296382560b1034b58c9e196a336bc9a1c44f0c8d640de0650c -95f62758ad67fe40125f1e245c271fd49ee96e588e83ef197f7f2ce4e1820625801b001758789dab25cba6cdf51b969fd7e1f0c015ff5c9084871ebe303f492458ba706e73b46be078c418a5a54e94614f974644230b3f6e7a6298f100e64c0b5b68527a9e1691b2ab004f1aa2d5c58af2ccb46ab64bfe929de5d7334b97ec13 -cd74857697eeb3e1c25d602781756857472b80429761aa7e2da4f722dd0c6b2ef7c1de646198ef942fec9727e3dfc8fa90357f78a7ed33815e2283ea02a7ff20e44c62322bfe41652aa4c14cce2eeedc60dac2c030486696567814ef88f5502001c2134d2cb9f7cd8257392cd3c886f5630db566ea3afb0216f669261f60e826 -5a2c9651482ec0a474aca572f3db8e4235c5785026f74199a3b18bcf80241d0e4aa2b48a8f413452582b03ffe41efe22c6850a7f69fb863631ba8c3394d85d131f1b743aa90ffa26379f6f73a46997e05af67add39571fbd5743ab1e40b0420397375533f8099ad186e40c529821f0882340e337b6e4250722feb29e84405f17 -9a9893fa4fad004d7da9e97c2e6c4347e804bb43f8ddf3b57102eccb17befb12d2e518cd668b7ad251a9bea526ae76c16b162b4e53ada6f747dedd573c9a620aa092977330723f7c080a6bf94aa44345b600fbaf9bf1666e37d948240d86ef0bffcc3cac52853b031b85b4737b23e5c15c2e90a1f1c7b734697e071faad6d410 -4f7d21e9fa8fafbe8db78927b10c1fa8bfad18fbb774fab37d315c687d4fb02c5d7e33153ed8fc6d1a78751d6cf9ea2785ae77b4a9cb84cdbdfca278252de90b5530abe8ddedebd2b0326e9629dac7553303be4ac5b84e876fa1db64ea3c3c18f49fb830ad2d8562c226b22a1e0fbb492c4f61d9765dda3e4a016e4fb8419a29 -33db6c3a90ca4caff4279a8842c7847ff431f4d6a237b82ccd2c52255d8d671221504c7d17d4c9fbe983765439550f4ea66598a36d2ec04403f3e8efc6c4d90bdccae0f7b9dd6dea3b631908e50856a94dfda8a49cd027b91847600c000c0d26ed551a46cae0fd0f28c7cc87adb68dc302bd0c557941dfc11ca8523812204423 -e8e3d5eccb24b3317b09d5cebe77223cafe8439c9b21eecc366320917fc2d027db2587b50f00b5a13a0195c8abcd8d771438970fd6dc076d122a623b40e86121fb2190a5180dc0cc0b4b0c127f2a62fccce1d583ca369c96d0b7999687c5f5199879ce18a9342072adc2b31c8bcf25da17d7cca8b15c578db14762c71afe5626 -e4eac2d892effe7b8bb497a0630f8c2152a21fef5dc2dbc377c3df031eace82f33ccfd4fe21689a4087aff02a4385eaba0d6a85e9350191217eae0d9947bd319bcc69b72047f0eb8664051214654696ea3056f82f11a6be5951d06d7fdcf9c2efbf4ffc2139c9162e596c1ea637a88a4641b11fe6a7779971f290fd2f43db526 -61c88635c1c678cb3f26a89b61c67329011a16a1b183c03b087fee25c1c87d010160021c7587bdb9bad52ed68fe67ac584e74869594956748e889fcf87047214abfa841b1a417b3b6395dc074a136066cbb314cc99ec2fa5eeb44d4c70f1d80f69197422751ebd856a112a489d28c667e7839423ced14c0826a300b2e4760328 -8c1e7fa84dc6e6af1af455d8993f7043fddbced1dc4d9ee6b1260a45620ffb0afbd1ddb0def9bb26db301b72da8ca5020daa22b89c907c9e82a8a5690a44f41b8cebfc08c84038ec92c47929d9c071c3752586cc34ebdfbb5be279aa3358e208d28355101b9d0b240db0fcfa49fd483322480506bda63abc987e14b8d5296018 -b7ffc317b22e41dfc7aeb9fba41c8d52cccb92819352dbd0ccc46356dc5b8b1a690f2d600b810fd01e256b682f27dfd3f25d4a6fa967e8f4fdd172c5fbc83c10fe7921c03602eb8412cb5e5e13ffbeb9a40242a093cfd6485a20d0744d7693116f4699b09f20df29d2b052010bc4e464bc0464501a4400935d5e36a050bd3204 -82a80a45c8c0211e6fdcd4b8d65702880ebf9030c2b0f135cbf7a258becfea1d7598b134bc240662d8bd639041166afe581769bae29efda2bb1dc3c8c925c0266fae2dc59c82e0d8e50a240ebac7ae2dcbc249424a403bc8cdc3e12648519806c95747ba0059cf27519cc7e37bb82610ea350ca8a6b1d4336891d75515654c30 -234828d01c2cb5b31567e0391b9546af89e8d1bcc58ff259260c189ab1489e1cd67c1989fbe087c3fa618be416fc64701631010e9c874705d9ac93c820165b1cde7c16152301c37e9917907b9137e08aa2f588d4a6d7ac5cf979026c4f27f11f8746a357d6b61082ad1c85f64ef953283d78fb480efb60acffb918bbdf283f1f -b5abda653bec9a50166ba2cb1e039e2668d62c4e69a97869f8a0be10adf17208515df5951730bde8921a930de11d201ebeb3e8d5fd80b2ddd3fb07157b3e0b0371dc725c35f9b10bd9349747b4a29e054749e9041a9a24d5286062902f037309bd75ad2f85acef0f56847b5c7e5f36d8655587cc5e39c67ac68b041a6c1cf011 -b752f4e03815b5e7c1fdb3ea81852a706c8cc33320d338c3b51bdd8a060a842caf382a8034c99dc33dbf9bbe6bd52144af3b2ea09b1b42fbccd59c6a1341e71e310da57b520c7a5f0ec521eaed104153ffb920f1a0b811e944976ae761d3e52be9f24c97c5fca03a39e4dd3787f9bdf0d315889ac37d21eff0e6fa58ed498913 -f888b399cdfafca312f0619e8423e76a0b69a58ada2e798df157e17166965a2f2d984e21041a67d4224c10db5cb7193474a9116e599426ebfb176b17f2e2ce146a7179c739e8a928b4d23db2b91338034caf5ea78b76529fe359886413e1091b534039a0a75600dc2db6fbd3b5e54162ee3adcd5795cb494e321c8ea9fca1f2b -0e8250674d17f6bc4b518f14a0d61abb9fd9ac47ea33cc56e0d756e83d2ee0203a4375d5639bfcb81d636f8d216d9a10e9f39091fb046a41b86027911078be03da2051bff5168b21a944fc600e5f700a0aa25a9d091e46a953b49b9f736e1902f8b772e90bd90942dccdde42bc96ac72abf3f87034b7beabce683c7d7b2bc71f -0d59a4a710a30523d33e10e00fc69a058e1dab2d1090c008d784bde97476fa1cca09aa71d4cacf5e8423845690b746c1d5ec9387524c3a0ea62c7d1ac5c810176d2c571aa6005528e1f9a35b29e8024a376c792aaa4b74ced3c78669400fe9252eda7d3e57ed382f91e975ad684f050a41806e297d75ce3b1ed83f0b57cdc414 -877d7ba381067d880675bb3b71845e94fc393365e77f672673f5d088e1a21a17d9d3b0cee5093b08603a313c0d54b041b1af193e3deb6a6c9ee9b2e4eaf0e7271272de1f056437cf2bcd4f93480fac201baf0f40c455d58c401f15ea0d5cd924602c8fdf1f14c8780b3159b7a32cb78713c98f899adc19ea57737e3bde3a0f1e -a0c09f87f5d564b0d0fa154b1b7a4de1f866f0412959641715105ccf42b75d1e8cbf5a1ef393aade0e48a184a87f1ff9adbc731b7765e02892b5aa6112272c1aef798e4b0b4b828cc3ce560879beac19f4a7dec36f684a4baf4cf2650fdad42d43ec270733293dfb2f2662d7933072ab539cacb9c2656f4adbb0459212680805 -9cd5b3e749d6a02c5063bd4ecfa4776b5af83c91c05d413dce12d333aefd4108358fc014ba0d90947c933e421832aea2b8efd8a91ee65a908827d6d18c876b2be8cf5483a2651bef318e299e7b51ba92c48833211996b320907cb4ac622b4e1fd33e96b873e42ed44fded1fab2a1e42c082e819e70c916a376de37376ac23303 -3ae2e26bab4ac0f38158be9ce337b7c2081a17149b4934c50360c32e4617310fff67c3702953f1b6b1965b2aad23f7f3df946472cfa3453e1802e0758048dc0563721ae284aafd5bf40f708628f167916e6c34426cdb19ad7364d6c9683e7112d8b657ae99103fe346b980f43fd3caca337576362388ae7e1366561ed7662511 -87bd09ab450d07165254220246a6c514e2049fcd6475ccd847974101a0d7f221f086d2eba74fa91f6d1e25206d7d03836305a6d87e3259cf53e05bc0a36839014476f75414474278667e67e43b9267aa04477002a52be6710df4086d6a25ed1fe508d091bf4b931fb2ef096896e5d085d91057324de93924c54db6d06fef0422 -916797c95c3dce34f3cb5d42971b6af740a305b7babb702dd22507a5b420272874886b41e6b01433ed9d5320b216a35940990675cb94e543eae3dad484de0c0ab1df800bf6da0d18553bf98d4dfba9293dff2afbfe17f12f033532e9a4e50e2938f60c66859cb42c560583533a31a812226e4d2b6ebeeb486efc99ca39924f12 -585ac02aae24c8f0489ab44a8bbd71c2f8870d745e407fa05750dce8959efc12e610acf9a7397afacf81c05851e6c55924bb075452f84d067b3a9358ca830c2480de26209138575069019a1d38088f2bd5439db597218c80c999a9a66d7db220b198216121a3d90db6ba4f8778dd00b05872d841b538127c9f505c40721c6316 -0796cedcaae909ae78494660993aa812caa4723ca178c1cf19c3ae7ba148b509fb29f1c66ae6e2458fa972a22128a00f8a7d73c1220a58744fc3db97e44c532fb3f63dc98d886ee66440822c150b7dd382b83932ba613627374687cfc6836b06d8dd02f341402ba2b49748e0dd80e60b4f9c3c1e253e16ac573fbda3a4449503 -9b7402485741317b44ae7216e242b12c909a81402e5b5e1589c47759cbfa36180a37e9e55489cc35731a23002965801514127cf7cc160b655e5410fc30066e13b39101c607b1a8bd379fb8d392b16d6eda9490aa9f8f1427871cd656b53bab12c384341bfaf383edc932a90aa484848618f86e14fe4b867af44975616feb0e15 -abf36338af25542a66dc1395d56a1d5db37e4405941048d92ff9d0f77640f32124648e6e50bdbbf0fe4bb6969c7202d6bf1ee10f7701368ab1f07be0df771505c6fc171fef83b5540b8918379f86548e086867a8436bc55477b9a73fee64590d9d3126aba11ec2a78c6994b64b405e1bad8998d77ef01a2599d4e7977385a51f -a7b49cd517a1b2b0df25cd3a7ef83fbae5d66ca03528877092278aa0ca46cb2a31e405e5f99aa022c909615b87b77d73a7ee44c45ad6b5b75a1a714e1c3b533016dec40e2231963a83b68109fa7cce2096bda3f963860ca63534596289324f0be9212f2751c66dc9fed5fdc5ea81f46a774b32b869987abdca474b19940ad805 -2378a6ae84502d8a7aa035ada564ed7e210354cad16d2f06fc6d3695b5eee206c34ff8524d3cdab8dce9abc65fcb2351dc66d564ec9ee39a2969364860aeb906748b7cf2c7b97419a8d0925f946fff8db891c3e801133dc13afc8c9be87a3101b7eb99a53651d3f527ccc8d1b031e735ba837e1fa8c46a0b63cdbd059750292c -9ac15217f2d0a42dc25f84549439e36ef1decb5528c36e1312b23d58a33819077d19cbe3d1587fbdac70b7922b37deece3d000395ebf4155b6079ce593310a2afd8831515fa0493528bb8a57e86fe275206b66b51899d118da74b539ab954c24e48c01f0b2bc2e5aa2b7696165f7a07bb82273125ceaa29947408f6b4babd22c -fc6e1cdeba5fac080f988170ad14970fc6be2dfc39a09f5fc4fbd23a9baa510c815471b6af9c7aa4f786469f955aa1158134f263774725cad4737d897d0e9225daac6a8bfd816b75bbf875ce773ace01aadd9244567842c290ba26cfe55e630e595bda7de30ff04da2152c143d732da6e9ad90baf227750d7c0f035b73285c1c -e4bf36bcf0631c7a48d0f4a4dbcc87907f06530b85a6bc1edcc18cfdc5ed632ea1cda36c1942dd6127778ba967682c69817f1d0af7999e500d54ca27b015312a7b7c961baad2d4857349d3172dba6fc4ee535300a9cdb9a6e5ed7d9aaedba72ed42d72a3ace893d28f81391c21ef4486f3505d3c855435a1eceb4686f7c46102 -823010e51b89eddd2d26ae854c91429dd89f3551fc7f8e5ba90a4e4be9395305fb1589dca33a25a9dd7dd3621235f81f471bd1bdfecfa6fc9ecf61b138033611962c9e35a1dc99f8ca30776a1356dca13a46fb145af5e8cc8917331879f400018ea34c1a203b5a864e93d31640ba5a6a517069cc4e9b58b43aed74d26cfb5408 -560837ce0b06470a8a314997db0406e5e237d215e5f2090b0c07d635a285be2a8c94d3dec87e9c804f923bc81477ef9a544ee0cc24a9cf8ed319193569fe6012056e910d6c68538c8dce0f97d7a108f8b2d345e111d25b341b865a98eb08b2104a8954545fd9ddb31998f3ee148c62452a5191224fef3a0bdbf24aa92ed2370b -3efc4f897f2a5ff09c012bb976faf8a953a0ec5b3b4d4b3730b7f8201e2d0d24b7ce678968177006a4d45577a34770921c7d6cac16c5ef50316ddc7a524e662e019df52f8b26e14f835e734790f030d400daf028d7d7ad2fca424eefcc05b80748ddaa515e3da374f5b57bb860a4c25a07ce4a46338ef4f6b26f3725aea74b1b -bc2fce9ad8907f2fadd2823c5967b1b82cfa8079f742335a12bfb3639005b716d8d279e1bfc93eaa474f94f8a9b5786d851186611b99f71fa6a01c713751fb1dc0e920fa96f1cd649a058a4d9c63ccc52416a1f6dc3a1021ba7ffbb1fb5341240682bbe5d6f74269b07ca2289250ea5e39052cb1f857b0337ed014b97c552b11 -1171876aad82acb745e176e08ca7091a86457976cb65c7f6aa16ad96f815c10b36dbbb094fc436dd85f1c39c766b230254216461f7b78f9bfdee063d7a061125f8957d78176faefabc7e4dc8a464606b0da0ac9576dea4fa3b29040c1146ea19811d06ef1c5e6fb1cf3176cb612e8a1512c68f4835db56f57140003c8c7b322b -37108292fb05c314a6a9534e8da72a229804394339022b683fbc4e5622d7fc0d2b2296c43b8a3899d50d256c2045cf3315cac65288d52b9c37cdd9b1e5a7ed1b16f30164bcbc1eb73b112bb10bc431f873f68713a7f0570907e8b6c7b50caf038fc1e0015e48c504c6e04c6c535c40d0502c803d0f5b46d0db1b76e3a7635e04 -8bd1467e5bef7003ac978d615480f8d9c2dc44919c5e0ea4f9ec0fca187a1e21508489cc79373b481a6ba10a0c9cec206fe9620fa5eb81d647d37e9b45b58813e138bd31df476cee7f3253923f5b4765d24601395ff53372cec33a0b5b718e1795ff38a2404c5b13ebcfabecbeb5c9a8c826d295115929f1bfdaa0fcc4c8520e -4b0a8ab9b33aa2cb20278587fbfc88bd0a8046fe2106143c4d1a83f93c3aba0bac739fb4feb8a3de0fe4d451eecf9921c33ca1e4ced65c142fab209ace320c1929b0283d4819499c1672ffe7b5a09c914dc0a5437d9c0478b5c049ea53d7170afea49a05b19cf87ce28cfec8e3a2cb229a3747c1a9727887b9ec8d77c6280d25 -9af86aa58ffee8c6eb5aaec0e1a7d9f262a9cb9033413273b21ace55581cc6176aa474268e44b3d8aa747e1d985e7d4876704effafe5618f133795767d03d72e40e776ae7d500016b5d27720633828ef6782a4766542055f0a82b81aee8dd61e0673e3749e95e88880ced6f6821607ce554e0651b0de3b4f4192241092721d2e -b0b440229bd8e21b39f6de497d40c12737cb1282aed50ba56c5dbbdd10373f1a078824301b47416c98e9243979e08fc429f319938d92a3b1513ba53d3174aa147099fa5017f7efacda39477ef5b18cc460fed11b426fcda29e1e58b6e18030048678c8bf88f23653b227b4f1adc9e0e617c21f66457e1a148ba77740ebe91d1f -98a2d7ef4de71ddb8c6c0ecedb13527f986e744c1984a34c9d81631e62e9ca11bfcc0934680e58fd3820fb1343d10bb21fbd9531f83a95194d3f6fca6664ae008ab69f7e8d2bed9eb774e5a981a7cd876ef6a6a34e12976b51311d8645856506f5924612d7632b171ef543b97fd27ded6310b21e4aa3803d5f20be031d2a4c26 -fc8aceb30bce3be985b54cbccd5c2bdab33c6e0f7bdf03342dc2ff86e445940f6fd4a5bf902572e5948c60b65cd0518770eff64dfd6e650a8ec67a6f3f9a1925ece5918bc2683d5aada029c52d8390291ac318fb9d44822a108fba081b5f5300d944d9a6fba2076347baaaf5f09191a6cb00ea8983ca8b56cd4c6647f727cf29 -dce7758c050f8d91f4aa5b9029d6d10fa091564c9f5e4aff7cd720e6f880b81de8e83c529b52c9b2341c551266dfab1a8d53f64aa4bcadbf1633131241efa4231289b9d376779451cd3f9bdab9d9f27f198aadd9da68af0018c74f6032f0c82185a40d7ea695f576a0e3f5b266d18a60ca9ab17c6f5c39bd35e0781460c25601 -67fef6585e28f5fab6a9f2c973a3612e2f3ff5ba64544acb5c2489712c94820fc0537c03c2bf6fd85fb0b71c1fdf8d5a73095a7d18463a9ec4222180014022055122f8ec627a5ddb5204a2d37061185dfb92d22387b5cca5bfa4ccecce19e6258052323d6ccbb13ace89b0f52887dec01a1d5a4fe10355146040d55e3d2f7602 -e396b00cb7327bd0d902741d92a81aa4cf4758e8009aac2ede256c1b18964b075a1836347360eb31cc49d7e692265f314c7cc16acfa562f8a1560f5c4172971e9af0807a34b6a6d74d33fc275861c0f210112ef3f5caabcbbca386560396b82261182bb8b7261425ffd92ec4e187e86b1f6e944b11f683338f09718bb731c803 -18f6a274f03409ffbb8115493bcb9718d6097620eb73fed966ca974fc7acc5157c44264864105a8360675b27269c63c7e23eb372b4ef8f42e8b6acf74bd59d2f6ff3a97a6fa9887da82f690ac3e60810638f9253f428db422cf590dda480452ef6cd5889ad155d53fef8518e6e1eb2962567469baf883f8e88add2cea8d2d407 -764a022d6e5bcd8fdb3fcf371b5f14f66e0d6bc104d5618e4b67279aeb29500d7e1b4ee690f07f05d8b3528936f2d18f1fb7131123241356304e0eb2955fee21b9f5bc1393e22642250a9493755771c14acc8baef4e69b4f27160c4c2854fc132d7b42bd87d293e053082d7d0d7538efac8203afa17d355d87dfa3fb71397a03 -b699e3ea5387b8a2502b25abd0cb7b42f8defaa9d8561fa25bbff73b73a0f116daa1b551fcb0171cc449b19bba58bdf977020c21013f851343f9736f2377b3290da882af058c5adc3dddc2c6a308e06765b673c09b33974fae5472552be914163d03002d2c65fd4abe0ae9c10d4a20d3f529b7bc189844c6958a30b745b26023 -90b04ecd58b72d6be8e4a0a60ee326ad0b71d18bc986c5a4579c5ef031945519bd50fac85baa187c55449d146baa5fe742db711dbd72021e2b41f0e4a928bc2a99cfe2b42ae2974c6242b56c0197843716ee3b178a9e7b0b0dade749de7fd51ac710a4c925f72c56575a8b4e2671cf2ea75a5ce2615d6d39d283d43581b55304 -300dfdd126bebdda2e7297797c1f928c017f4e238b79cd8f4932518b15f6172aa059994b8500d3f5f1d790c0d1e0a9ff60033206a06fc7a24e30bd5502cb672d6b967734c6cf0befa8272c23858cefd2a5853c8295bbfa03c067599c39ea2e098c576cbc17ce0a727d7ede6d7fdffd136bfef2e3df337cef128be58acecf020b -723d714bed35b076b84c9be550b5327814cbf6403968ae98bfef0ef787b91e1851969552542b2b864cf57073103ac13719bb1dbdcb05dbde933d0c748818802d9ded6281d2533ba32d5f97e522378a65210cd2944e29e05638f7e81720c6db265dc06478db8d0a8914f07d2b5d164cd0c5866c7eb41f03756632d7652e9e1f2a -199569f7c9ea4e12269af72159ed1cd190ef844a61d99cec94777df5d1547d15de7528e466b50eb097fd8b53e3d988b100cd0dcf25c91c49d95d7627a27f2f067a3c7a608f0e3a6c3351c9288bfe4631b295901d184d6a12f1b5dc1dc537b62c3026502c0d00b18c03e5ae3ee026428f0d1e59445f4000b5e9dab95e6308632a -7553b41ba1fd6b928b01683b96812d5464474bbd92af07aaad5a0a5ebe0e522c01fbdceda154b5878de22e14cea0361720b280150eefb2b58f3ac1583489df1c9c7e3c0cd2612e61519006e0355613901cb1baaa8a2303dfb6b8aace8af14e05487fcfe35235ffe8552016e939f55a7dc97983c612c487b0381d254fe84b290a -5d2c0da3ab57f57a3ae9327298061cb1f218cf38e20526b73bfeb72ffe1fde253342fca776cfffb8b9681788bcba8c293b057303ff3083262541682a930cbe01b6f72df551d2a135608c5a982ba5c2242ab5a3cf5c8d40f3f1199a2f4d8c8b267bbfc57c92265b8069464e71a901616909fb2661f73477119303afb02f0ad829 -c303c2dfd9c456d359043f0e2691aa832c2e1ab2299fed1343088a95f1193501d1bd8c80ace97c5135ec1b70af97762587dc7da4535516b4df5b3bf950baf401b0aa1c8a97873689b73f6c44d1a69efb3343d78aa6dbeb8cfa207e617c7afe23a8276a87296819133243f9276f5615faab7143705c7fee662c80858db28d590e -f97a5059ffc59cb94079f28579f121b4246c54ca13a824ac6117824e22536e18e6437615ebb88ddaaee05c671f56e340502a4d560ad518e4a9b504f77001e41bdccfdbe975dc3f2ee4f41d97accd14793ddb2fb1559fdb7e9cd01bd5c64eb11b918d65b0ff59738a3bae6bfee53a81ac619823e22d5f6af4214c0c86bd6f6e20 -7701b2dc284a0c36d7514c26c7a524f0745a4ca1fc5ad53b821012a11fc9031cb854b8e352ba3329e014ec193b686778eec8545e0dd6fccb2b99f0153f081d0eff14f319e019e0023668e8885d9c82090e77a3c6bfc3088c69d1206d040f02114031f7ce1febebad40fc8511e16b1ab3fb6b7cf43c8d9e2a0520d9967c86e821 -4b04926ceba7943a2e8c309c2de2b26559efae1b4e748b7dc8759264ccb15c25c90f595fb174c86a6be94db7f2e79ed5f410557d413daaa4a65ad12ddc40d00ad0154389c133c59492c7638fbbd24be36de7ff7ad54059e821fa85525c48380c468eeddd0b5a0a1749c68ac2382d9f622157c8295506f9ae65b62c4e8a8f9b18 -0b58384943b49c80d99ec25f27a41af0e8bbb0fa888362d3ab49e750a1732824b0f2050989b00aa2e34d806606f192e3e90abf0c4356385859ca7df9c8eb6e0d8905fa1b8ee9de5d929595007360ff557e988cbf6708be21fbd6874b41b07c01c851a0859fae505f3f87dd0769106d2f9c93c053127a5bdc7ec524b8ad30a812 -701cee29fc7b5f39204894d8a44305e51281b0dd3427fe852bd93e9e9e59ca0382f3bc5c6da80ab71a3a221f612674d067f5daec38fe4cf74dfec4f0891cdb0487ce419cd5080927e61806b662dc6ce77ea2989e84d2c42923b203d559403d2a0906347ed16b51d22dabdd0db31ceaee71d142d0b5868a29e3b835a0fbfcd700 -73c8db6b4b87499b7f9ba3d30340db5d1a967891e780bf1c91d5de0f9ca664296083aa2cb7930fc04f8afb633f7554aa9d294fdbaa75340b6829f4bb0009691798a793c59ea1fe979432312562062fab96969c462bed225c24b96ce4c07cee0661d5b361902f1656eb952f1646d80fce6f088ff51b44f2705abb8101dd6c132d -cf2deb47e7078d4de5cc2f2d59ba86533432b76b0ddca8c2d703bc3f40334e11fe17329f9a81aa16ba56fb8c1c5bfc5d908bd1404925355f022d4a6ef3e10917d1f442985ee6a8885dde4cd9a77e0cd0c77f83dd5252294b549b2391477abe2ad17c39d943765c875ec09fcab4a01d0435b121e1b17428a86bafd9c74bf71d14 -f3059cd1fc0364fdcbe4185a72d35990decb2f86b7539eecbce1d882e9147e1efdf58257954f52dcb655058350a9c70025a97f73ad44eb7065d6762d503e491c1180686ee572079a79c06ea79c7905fe44f71a941e1ba3c7a3eff9d182073c0e1d8e6cc7a81eb403bf8b7031e4ecef0fef7dcef048e8089af5467ab22d51301a -686548758f2cf5588f2b4d173378625d5062a1e8bd387d1a0a76b73e4a00da0489f1806257913b0985f0b2b71fd96858a52521239585d586051e9c973b85bd17ec3b811c434d0d22487137126c73f3a2c6288274717bbdf705a32016dc12400ccbd1b0828648a312317fbc023205a9276886b4d635df48d42df0d9b9125d5028 -a16c643fbbf32a6c8c1fe3367ea03f79b329298d6798bda072886eaf39b9c929be8377ee11b1d6552666710ac470bb4a63e83b0a05e7b1ad16a9c95494d71c2b03ef4d30433bd6aaead275b8a320f20e0bccccdf3dd5b155b6bd49b899c3aa206bfd60e8d48d022de8c5f129e5b8ef193dadcc974994a63b0cd3a9f886b8a321 -647728f6b47a17703e3f4e7c91bf3c5a1660aa40da68bd4e22465b6d278be4139db9d971a52e9961211cf64f0c90c3fc1f40cc5949f25b2b20df80d249a37f204e5ab0171d58a8b50d3e5d4584078ec4837bb143a612833959fb2f1e99b705074bb840397ea1f6463bc1c597826aa44d9e51c1eff8c8b9189f687c1bf018df24 -025ff21f6732e406297e46a9888922253d9004f073637959d408583009fc520cded6684cff9ddabf76b3d4d9e31dd41848cdb98c24d4009fd43f1f06bc4ef62e33847de39162e13bb7f85b3f70592e87fad0a62fcee2138bdae422a68c72ea1adaf1c3e89498c84535ce356338da5ed662be6feb5512822b71efd0761442b90f -fa9a1cdce14c3b53ee4e66188a75c6a437256c89367b6a290c3aaedd59b5b5070074e1f34a02afabd0d5f38d6e41440db2379a50e5ff57bedf7db0097cd493291e1ca990a8d8bbb0a718c867daa3b722b8e31b308afcb8b17dab43160640c3143dbe89927499e6a66c0c6b98cd8640ca779e0973fef064dc56038e35d4f15204 -675b7a8fbac4b9bfaa08218843a652cb2b84a4d804a6891743decf7b551c5427ee9662e1de0d88eb06f0ca17d1f7b85b0ef579525aae84d8c1e15abffea77d0f5bb8f8157f8848eb59d04424f99fd77af3f37c948f6a598c6117036d88b0f428609d038f5c94b52660f25ec5ea2c5c2cd03d75eeff21bcc668e4f497d034381f -ef45719ff7dd31989f474a7eb5fc82dfbb3133d65a7cfdbac1128cf0228a6e0845de7f5dc03f6b385fcb16962d9ef7c8883e00975ea870b71299542a48ce1321cf961f5065f6e578783b7fcb9c57b3e03f637e866d92fae48310c15af9bd221183f02ffe117c1b933d6357d8c08c8271fc0c68796b0cf8eca471e5f6b4089e05 -6e12740ccc66e69c39b2486487e6ffa8273985e1569964b08ed3494828b0121269f5d2ca71185f5c4c09ca5cad1f99642b7dfaba4969b803917c652299b7ab199c4e435ff23654d2c23b629e6d85bd2cd1642588ca958750f6f5ebeea314d42dfccf5b83514dbba863533a6611648f8f892affd7ec4e4f45ca787a72e91ccb10 -1e7acfb40ed8ddd7e6f4abdd8efdd019122cf40cd0e3adda4b06ef6ff191e510d6f483d481e35969e85d9c6be6420a6a23131dcd8b0072c5fec0dba36f3c1c0b893431b97815180e11e8240745af318ef7e94b023cad157c5221504abfbd0e07fee6238771f335fd3cc3bc890bc1bc57627ac834a917c5560fe66246de713e1c -b45a9d62a4f39b4e1155936dec10acbc2b923124273657a7acde179a5d9d6821470025ffffd105ab67a3500da88aaa9a7a046d473dc3d9e842d82ea699286c2d01f649f3f6e337bfdba5234cd1c5448ea683f680dcdb6c17c2172d6344567605c63c8bb19ab9683af5863270aaf25a4f0e35b970b8de0f4fbcd99e6fc69f8a09 -ef0df4b02bdb92f18e52d2eb1f4bbc0702af369734c3aaf99274438eb8659c233eb8d5da5f0cc74124c72efaf425edeb7ae001192b3ee71834bee12d3157112d2f39b6639708139965eefad5f241ce65beb1025a95ff9479c71ec43b0bcce823620ec5f5701fa1379cf276566e668cca4100710792c09eb71ee533603a7b5307 -c82d019ba9ebdea635e2c3cdaae3e92f7fdd3dfb67b4ce0d114d9d5e68dfa52b596707b85f347326c72eaadbe24b61b179da7ee66f4c20b368848204319aa1015b2f4d78e919b45a638105cdb1b96c7d20bc175731050525fdc4bd9703e5a9257a8f1006dcf265098749a88e4c16095993b8f75ec5a10aeed00bf51415426417 -d91950ba2f601ba00c380573ba09df4f9bb0fb3e3696ab7fa63677ce9612f514fa99269969e755ee5210864eb8e67c3f4dee0783e4f34cb191b6ed3a34d7f202c32bdfae728489ae51ed63b4f0bf13066837c22ee963ff5e997330f474e429289def4b670b70a5ec70a1d98e9c5219548680251409e288aa66f8f8cded04e81d -7ab44afe8c92dc54f775c443740c06785d792cc81bcdab8b04e9a5c36b736c1bfb9df847f141144e96109bf7cd77f284c975898887d93a242c75e8330dab5c180d6f8b74499509c3ef3a40685db8d3f7f97a10d8f93eaee6decf3793487b8f1eeaa50afd3e93f8d303ac9ce32aeae175c3406827ef73f2d68263f086a12fb412 -6ccbe9bf3bbb2d8cb2765a9d6f7c6c0dc4c992a473a0f7e03a6d2640b4e9ab1ba2192653be2cf2418934732fde920b3f5038367e32c0c0bdc1d9a01654ec44181069cd81edd5924fa66ed6705646b1b485bdde66f6f298833dcdd73edacd2501d7eea187ae8b5820b5c192b8687520cd74438c74512009e94111bda019fba522 -f9a232abb2b1e70533291e7ef6924bdde548818e6ee456e79a6d3936b57c8626db456a4f6cf8dd5b4388720b07b1e899239aae216cfe94b82881dea217c4750c2be56172b149f97aaab47076ab968ae71f06599b4ee5a1c2e0b0300fe9065f1a47fb570ceacefdb87f1392f6a5c1bd0cf4157af792bd810357d5fb9647f39907 -384b409ef547b86609104228b04f5bdb26126178b09d254483431c16c9579c1e1f6d41f1fa3acaaa0f29426dda57caaffa1f9bfd976d1383771b4dc2bdd1321d37aac86b82407f349c81ef088afd9c0a5d0d937b2b6cdfad9aa9c3e783d47017ffeb752c795be93c70a65427eb7a9499c974bfafd40fc3cab4c8d301b0bb4104 -4c4ffaa272162d91dd1b18e6a5230acd8df4e8781fcd74464f434c57135e3c18134eea4c627d9d0cb368f032a32aa7bf79d562b31436d57b587375280b5cbe13ce231121229daf8e1303327a756fb6ea3c5f14c2f69f5948b3de4a7185fc9b0d38976d67ddd4248ab2988a902baaf48add9054db95d706324d49c621891f1013 -a0f983dafb37a3e8b2ff4f7dacae56a7ac7b91fd28a2ac5dc5dfb205895dd5031185ebe843305c3d46ab74bb49f85efcbbd9b63d0d3e43ef061d5edc63164e25fd97ff1f6bfe5296af09b32231f0b2f5a87b675c15ebe05994524586e44c3b14927f9d6d7855ee566773c597a24305b327aeec8fca9369407a8eef1f917a8f1c -c8701aa39b5ca91d0ada9eae996b767e9951fe7613770c829a2d691bdaa1292dba4a781472b9e33c6a683705ec7648021ea946b69124e40acbb599d3822d702d8c0e47aef18d4024fcd016ab08570e585ed1909e0336584dd5d80c91687a0a1ad58ceb6f478e775d998b168286e62824b4fbd009b96649dd87d645869dc26113 -251823ba755f929476aa3bb81209c99349290ff97a96e827829897260ef86e1bde93670915bafe3a8a62c2a5dea2081b58b1f434d0a9e79f72563de6d96f7219c23e2fe628e793ffecc75e0701336ffed07871324dacbe5c69179ef45f5ae91fcd6d5a57857e4713f128653df9b716d5ba8eeb17ce88b5ab1ac0467f3cd8c01e -f7f7e9532e21abf05f1c7d534dd1ca9fe3ee0a1db843b738abd3d5d600d7021800e46b3a1413ce1c4d09eb4370f752de3329d4e9094f8053bfc0042330ba360eae1c81305908dadc4db81463d75693120d95c7700a6736bac0f0644a6582882ca65a937d5422353669550361e71258db5a256b25494e7b1c41e9feb5f49db026 -e0a6d76bb1646e423c43e811a4925b2dc42f72cd621d931059a25e8a32cdac09ae4e327adebc6ecbea5edc202ebf0aa154eb8cbd193d29ae463f2972baee411433e972825e43ac1e924152cfd1901b36b548fe20742e1883549298187be91124fcfe255d3d0757f8951d72be93982692128e958aa06c24cd1b9739fdadbe1d23 -d429482b023891aed9d5c4ed22515a9843385a81fe4090ce808f8635ecc17b11d61f8c9649aa6be3d15fd9066b8bf06f7f9ebb0cdf28baaa82885a21b7c16d250b541dc9d259e3b9ee92d29c3bd8a78281044a6c64579f6b0e493fddd47191254009ff4802ddfedd2af6236f61ede86494903b49f19ece7f2ef9aecc13e0072e -7530560b6fa78526510c514ac8e0814d342027dee094f26710aa00b788e8740e6e42144df3b49bdb37fb60abb62fa852eaf03a6fa5508c2a92270edaf2d67010e8cc64f558a3788af054115cb4c7638184840fddc7335f80d3f488c4b3def711de94efec3d32f87ccbe0ff1e12f5ba1bc72546e4af10d48e21bdacccf54e0d0f -749713b3097814c13cc4ec584c03b641338cef5478de9e9e6e0b4788f50d210da30b806d9c88ebd3068bb5099b5bcea65d1f09ee307f45fd29978e2cd631fd2aec74aa6e4b9ee7e1d39befec612f9ac6384c1568f883854e449be9a32284c11cf08007815e25ebe6334322aadbc5bb401c39e61bb43ccae0a1bf1b1185116e11 -a2d8ec234990090ce1e33b87d6dc0df61e14fc363bd41b90a86f57cb580aab2cdddd438e5102bb533420e040239d7d5286860b2c367b705cdf9330667d25d81dcfb8118d9d1b172ac6cc5e1805f7438f1011ce3327038284f4213ec9c752971d1c819a629f14ad6bcea2cf87d8c49be912b6a70f42e9314fcf57b83644520d12 -14ac4413554dca1d2d99b33d0c27a0d0aee067ca15ec7edc51490cc1f2f9330f0ac2f8618859d1c2051fea0668af258c42cabdb10e1aa17b42577da370023f1cec95dbd2df720fced9e419e05c7b4bf35b3ee6707045055a7242cb488607c82af55cd6c028f40300bc3bed238b0661ed5208103abd103a7983e7d0363892cc0e -0f9001f7a02b04884c34e449e780cbbbd402d29cbca5fe9c12062df69d29660b61b1d4af61c61689b9919b114f642dfdfa6e293066ced5ff561534c147d38018514ad2ed27be30acd2078cc52efe3488745d76061f128f1b7a5376ec18d378059440a4b5190bbc6061faae430c526d7b9c557aa8084b7bbe027502a0f16bb219 -b9af630f7730942c7aa19e63a602b6eeaedd41d1745c18263ea5d378806dc023a1dedd9cec6a11eaafe195316af83d5cf9ee28017aa489b0dd0660712ffccc19cd389ab212b5a8c8b90463ed92021a4b920423a267fb95040630c8a7f755210f747708db78858823241a9c1543bee36bc1ac1e7c3dce90c722b85b6d64f51612 -3af9e65989154bea7e5fcc09476c0d2c6cb615c2ed04ec9ba537bf1ab04c7026524fa57ef6c2ed4c490819c3668335f25096e63a077f8daf603b48727f928003bca4f47aa8833b58b3e980196df768e2c42bedfdf593bfcbb8ee6f95fb244d2aa097919eaceba31cc55a20521bd1dcc06615ee248ae7cd0e8c4fb5429982ca2a -87f9bc7894020084c332e98034c065057c3628fa7079869de97b4b9d4db85d2b39ebd75455d390e003e915bc008ac4ac5300f6a8911493534bd199f149096313d3db462d0d1e54bea3173ba536221cd37c7c81aea3a28f2906d199556fb5af2f41edf1d9ec605469fa5da1387e20fdcd51a57ec2cd6b7d2a8230f5184982ec2f -6af4c427c6331456bb500b0a24823457148d37cecf005125193d0a4c1271961ab1675e90018fe00034994a55d36e180723224531e7e4d07e47e557e6035e41084a4b2c0f1261bc940f85aa73ded494404c387994605782d06080e59c3caa27199f9483341d2003fb64b4e2369cdc70b9cc26b531aead033b1c575c54af5e581f -4ce0262c16849111e053979d757ad4e73c4d6ab49b79cc9bf4817c09ea6aab2437719cfcdb45dff399ffe64742d7e8d172044974404f9e0f8af0761f74f1e918073f11f6b901db69c1b2f3a5c4b03f8f9bd1116badf169d8eeebea95f3abc41a5df4064b7a37f40af01ef16f254d7a91c267753b80cd340bad1559478993d701 -77df76f9ebdfb63375e9c126a059297e203f87ad6390f37fb096c7056e52552f6a393ea1710b0ec054f3f52ffb814f7cb9b2d41cfb2867140a9d2dfa3ff418068bad5dcf1ef28c505f2888ecd5f03c2e0438be029c7adddff555bf22435bb0070776b95b00097106ba77ef0981be8f65b6873d6dfb09220f82646c3b50471516 -e71275df0eebe731c5602caeb14ae4c4a8950e9dfbe4109b125bd7416393130c9a45fe3161f1012743753dd06ff98c84adf1699d2546ec35805bdb5c76e7682ae9d227f91b5461174fa9ee28d175195d47b1e510baeb6216ba9ff7a0c2893105a54f7de1efbd5020b1ef37b9ff5780e53c9ee7e41a86013c56af0a7b9ad3551c -e2af7387ccdc4e9f894de96116fa3f3793fd5f4fc34fa10a72620b8f1af4e20b9f7481a76747cea7fecd60c368d2dcab579a4898a77cac2a7eee70e11f97dc282515c343829e3158dace58a6385e9adebc3bd2a2f3a5e5760a99f896d390ee23a8f8ec2df3839d39ee00fbc24bd9b99605ced7550df713782c4132eba581c01c -7aa74417b986c4c02add80683cc75e7defa302cef9433312d2070b1bcbe67b0c5af97db857f2b0e580c97877beed3bff0d9ca85a7727599ef4a496bca18e592eb74c52defd57c26b6ec23fca5cf7223ad4eaa1ab043e92c94404d76aa7b19d0ace79480fdee6706eaddab46e4af7aa2e42bb78cb4026e025f1044bff92fc6b16 -178915918699fee81c7bc69335a821eb03add55712e4c6a227e0577a316f4b2d31866d145123805e575a2e2c16ddd6bdfc8685d60f8f7050b45a62a10072832494f8c3bc8bda7af2a990e7ffb42157ed65efdee154a1f70ed8a3d8202f53c31331aff229aa96f09a2073ef4f959a2aa46cb896a09cef4ebcd94e15f8445f4208 -7489a73682f6632e00b79fa99c8f6ad68a46241fd12bcc21deace3a9c9492b11f6c4e098627518424c417e923999dea86f3ce672396814989b02b8db81a4980b6be9e1c095f57a93e362a7985322a085bb763a4d88125c2b7527f2b2ec341008af9ee9be21bf35f9085c453a3110e27356aad9bac47b5d2560546729a0ddb81c -f16e6d7cbb3657d012bb8f42a208ea4c25ba276feb51c0fed82385cddd75f50233062658d51374d61ef354ddcbbceefc767c0b245d99831ce479713137ec5e0f76ead0461c6bb9aa94d61c94a99775c7031bd6d0ebca96adf3dff29397302e2cbfe5dce1ee79b243718a85043d4f7e999fe834cbdfd0f47ce2725104bdfaa102 -0a67ea925e0faea5ccb8aaeeec79dd2220769a1edadcaf37e559f570165a561bf8ffc4a357c9077a7571f14e60ea7699797066826d0237a5ff730ca83594c201cf499a2d6b5aad7ff3123374c95f23514ea7894e58ad77298464ad4a8c5eec03628e5eb3f66814f11ed0b51edbddaddfb2546f6048f89838235ede584631f403 -1a6a20e7ba38e2367880c7327928b4c83708f3d7c513d9288ef672a8b37ddd1686d60ca94d830682b1ead8f1436ea1c3ad783033e2a15eccaac6a1e30e01a81fcface5ba2f7b1d71f6415483cccd614558217d297d5d4fc37b436494f0d5f1023db5f9619869811d11d7c6515d66e2fd3db87073cf75307ce0c0cd3118928d2d -7addb5f0787e8460f0e5c327ab371ecff98a36ce451777be1d3a02b7867d97022a79398afdd421762ff1059bc4000fe7378d9d7205df97d931f2a33f9229da1d4b59de15a20aef1b80b80c1c2f6a02a4217bc5c04ad3e5febb93df1dc9f8580199c460f1ad39170d7b01bce151019a1d42319c56be24b6edce9ea13bde5c8801 -5109a00c57571ccd3d046e7191fca3e57714425b2a6d5d473b6bc699631755298ac9f60112a7190b729289d84f1294387a4cfaa6cfa0e38ccd99dfe519c0342c4bb7a0f17fd096cf06c0e897da273d085cdfcab1892e5d87068689c395108d1e8e527d6884f41916e688e182acf0d1a73ba6dbe350a400fcf1a49da0fb1f7e0d -9694998b9de4c2b12e9ae6b08553276a19165822dac85982b0f5c4cade8ff32734e0dad69c10943c71cc7e6fcdc4ae7fa94359d07aee663af6f091a91c58850ba3cbfe38bc818ecdea34c75cba9a9a4c2e41e8aae0a623c5a4d39b70a4f114101962dafe285ec2cc995cbbd24afca6006a6c270e9a7c963bca6809236cdec80e -18c1451bdd5ff6248f40978ad507ccd42d855e8c3e7323646fa2354cb219f5211fca5d5dfed7d156fd0f27dc6378c0aac967ecc00ebef03c0754f17e0d7f9f06bdae9bdd9636cb2527f7399c56b36077f52a4826806d8fc9be14c719dad92a297ad6b74b41ac2ee9def9b09ef3f53f02cd116e6eb6a33c67c98d76ab26835927 -1829ce70c77aa853aaf1838c04da54bd3eac037a5535788c92bd6ac2e4a72703e5c626311931c1ec4f5adf85bde4964884c4bf109489828b4f21d59b4431d106b5871981ba2f9ccf6692a61c3c0890a787b202d1869a43888d6d66682295e807707e73dced50527231d280bc8c96622919dfcb0675ad1fe8d125c607b1771c1a -dc72eb376f9416d4135eeb3aff49631bc83eef9c608dea68136a8bb0ce05b71cfe423d8e3d983db5ab83f1afdc270a1b6fed9262845bd65c917b57aa1661f211aed7e544b1461e8d306cae9c44f2debe2a5c9931bf9edb679fc040656956d1008dfe2909ebb5e3c4fddd3dca9f30b446f03682fe5e665b4c76d75426f333ac21 -0dc429266a82c5852e2548a7d14184dcfb42700e8cc72e6d2ecf7ca11b8ec80d5035e9519a1beced11f28e8d42e56759322850beb85c68fd05428745761b9d1ab1309a1b937fcbb1b0a6d5df40872a3a548dda0b23e482a2c587abcb0d4762274ace61a5c8590e55bdb57f3cdebc21cbba8d940c48571375dda904f8bf63882f -2002dd3e0f8bb7a596d492032f54e1f3b3975d969a1a05d0908ce7cd838c29275785be995f0b2d819c55bf643ee89e93ff24302f6cc70c50494c4e11ecd9221ebf3cacac39d4b6f28cd3d63e473bc31ae84dc838a12a320d18157767f6c2900a7f1a96f3453a76aa6c34f2354c4e1389bc01412210be5bf988911015e5db1202 -6eddc0678332beac48e0c8833cf557d4528ff5c3694b52cb23c4503b447b3609e5b3b35b715c6e93ad383f53233e4008cba519bdc09018c769aad73e35864017749a71c595209dbda8472f7d0bafee3d4f2e44aeeda9fc431d2875eb54fa3f0402c7b2a67ef0d62b1f62ffa9d7aa3eea3b01a56a4944bc0e312c563b9b02ea28 -990da61848d158879d969dbd9fb391d04beec35c308699c541915db01a1b5f1374ee7114f6e44b09b7f6fa2cf80121c7f761c5c8f22cadcad7e3bf328dc1192e1571804ca60b0e2166c5f2a8e3e65b34b3ffa8ebf4d5913744322e5893695f0ba643c7c135fcef53a9c4fa5e8ad1e67d0e2a154ee9ed2f278854005a6e94472b -4a23cba2a3b2ce62ffb65f18d3db124d56846b12a1982ae9987f02c3552e0619840edba896d093ec5ab268e3659b4f191efcb876c8d60f5ce192bd0271b6d11d970ecc29100bd34478fb6bb04b673d4e80e30e888265f9c856c5a15a7dd8110d2d2f8f1ded3766dd09017d8380c69d7a4b898ca60b409e0f34cc9a97eee6f71d -e7b0ac5d039a96fe9dc297a29ef9ca598e38fbeddd85de931e3d337dc4ab501029c11b9d917b82920a20043bccc10294ff6dcde8b34f92c4436535b9ca5a25066ca98bcc562358ed1306c665ba0f9450d3fdebb8d3b14e54e73f90d0f2d84e18db202e486135286110f05c1bda518132e7094f4f22124ef6540f03e95607b929 -4286135d059c011021b916caadeaf7fe18faa371920ca256bfffb6ab846b8d27cea98d77a0e77a0182e8878d252af820f9cbd5b63e173ce1931f702648adc718ee2daff296bf527b671039f0428ad7bd99261f5dd7639f042fa80ed86e02cd24b94fe86e8b36f38ab0ae6117e247de1476cad17d13b32d938997631cbb550d21 -82ff294c4092dbe71ecd3b73653fa4a9db111af30911f77a10874a4ec4db010694a4e10b7c9c56def559069ced97893c8756d708b67c91b71899f6b4026a5c23fdd2e9e104fe5f7de52c722a0bec60749767e5dbed83c62daad713fa2cf670148af0f0692015c3e8715fb3c1681d5e27a77bd41e991c3ce67a92468f8b15710f -e701f948252792a72e10a7db7737cb043dfdacd808bac4eec90bf662ebf9aa203737742dab1c9e72fdfc2af0052dc1fd506ee4fb55bdda2c93e8589fa8a3ea180ae73210cfa741b9a2bd695d741f2b2d05c8100e389b9a465cdea6af5b182807765c5f7dcc382100dc9ceb9b3f73525e875de44e7edb628b72748ce97bca0f1d -1b85e807a6802d247d4be1864a75adbb6f85867f16c2303ed35d0040fe5dd7203c467c0dd740c6c83f72a6d3f22ee97ff4af93b15c41d6d9f23f2bd285db890e7abee6e710dbf5a1e37c67104f0e12b0b3c90be2f5c60a445eac7539c30a421801dbaeb31b89246aa4debaa3daf0b9681dbaff088901c36718b96c65ceb6fd2e -9a09b70ba7720e04b5f5c5f02dec47ffaa58ea86b15255e4d1a7ff61418f4b22abdf816c57fe075d27f5982c865188009423fb56ec6336d96ecb1cc61d6f170cb364df7016b43b3f5243ee60fb67b6d741e918efe595b7605fe4f28cd6562b27ba23192b302ff87160e24052aa186b1a5868fb43fb73c6de5c0b6ee2fe214003 -befc7fbf4c6f4b00fad332185a1d8fec2343b294dd4ace9bd9cf14660fa93b183e7baf697271877b5478db40d5a2596ee80c59ca90ae3f24acb94f84dfb67a28983eb374f5daf57f33b6692289a015bc0a6d0f168ec83f93541b23644bd37b0c328e3b56aead1e1b3fc9f3497afb8335f9cea476fbc77a0b6a5b912118d5e31a -9b9dcf25f51e7c8f195a5c0ea46340e5119a5a8397eb07b9c0fb6afb7ff219195adc295caa61a8e054a8bee6f9799f69d9cb94c12ba66c85491ae54737cad323598edd5fedfa87fe70552ad295b4c90d104e68678b1d902d3f642f7ed182e52e6de8878816f358a33f6912db5037fe328a55fe8b9c18706dea1f24df5d90e403 -9363c3bfdbf3982fab9ab4980ddf877d35a1fc23da5643488175d7c73debb510f5235c9da113c869fe0601c7651d1314ed25809f5f080fa17cf064773a82ff05c4a79842bed795ea8d6407f25a1d4a8549f78923a5c4fe06dc0457ca880ffb267a49086b187443dd8059eb5e8e37c6328124832ee2b6a94a16db63178b06a12b -8024210d12772c6f612de9e1fddc0289b7f80652d46e6c669673a682fe956f2d6dcc2180c1e7603bd5b4bdaf1da9c794fe74c8882a7000b97e019a0e6400842d66964e0b086b49dea888c2ced168c207e53b8f2b42bdbbb06330baaafcf2e52311e09e578f82ee38ff508a148e63347ca7c8cc1a008d5276d86bca5ccf78a011 -20782816650ead64ec34bd06f29346093ddec859eed83c4d1111a4ef0a9dac0613eef965e5eb508bf0c009a5f93a6606d3c3003efd6a5e70ea3241fc31ec8f13e4e11ba77920e6295ee767b2aa97f404f1da0d6373b5b6d0e8238dd7c9fef205f54fe820dbe4c1e362fcf7b988edde2c13022a1d3bf073583eed463ac9c60225 -a7ce335be0e61af495fa9322120b02d43fd1fb7ec468aedea46ff1ca46f8ff027aec54eb13955292e657838a7a0b61e69e3ac8184f3b86dd451b1eacf0213f27aa5b85f6fb85b09a7e6448d9c58db900537c3e3b19377c006c5a7438299586167737709c954e8569b2836d17fb59dd4e86105f553743642dd9c85d1aad54a227 -e4a170c805eed8bbe05614c1fe9c37e3c149dbfb9f21cb818fe9efe641fc021d7e038322d340e6d9a40fbed638b62a84d09918521be9357cec9b0d388c6df81c204895333ced9e4c3ee3ad710e560c8144316fd41cfe02cf597ef1e15ebb601849feed0cc4c7b06ddd637247eb982e6d3cba63d9e13b8513a6aa6071c9130c2b -ef881e07cd0b46b68fc64578d2b122a78b86de9e94d3a79881b44a5c604dca1e786283be88941a11167a478690b1e249e3fb594bd39a9c6712025671be2d862b78a8ca828439f92b02cfb1170bd61c6dc8c826d7e76d4527f0550244fed48f2fa39c2c3f03caa27adfdcc369603c47e3f8cf95e04dfb0aeaad21e2c7d944b314 -ac1609501a4d08c03ebe8e0f3e01e68e40bc3413fa022d6f2ccac09ccbb02e18f8748675d9413004a57d25f00a68afb1a6de39ea266cb505d677b938ce550e0253b084849a55c30139f77005fa2945127ac06bcf05420d33152323ff32cd492855a76a488aa300aedfa85c61f95c1988441e32f97792cb31d9db758e65809e0b -cfe4719940544155b7e2dbbff9f66778cd44a1c5b69c4a29ac63a20c19b43b05fb602bdc07d22a6cf5771e2173a58ef1dd7c7cdc74c881636b67d60b12fcaa1e011b75ae915cc93eb3bcad31b49e34657c7d63d79dca74fc3b7f53c19dba7b0e025da8999adab8298c8bb2c723a98acc8445e57e3a898f15bca17ae7e264f628 -bfb5a14ac967891fd3fac9b1ef18cc518886a2beeb44fd48753555f0b5072310c58e97a7556264c9c8fb652c68f3d79562f5f3b2abd2c3c6433f8c03f88e7d2c0b9c7499620cb45a1e72cacced936fbeb9ec23badbaae5d4615f26dde5e5e427c4102c720fddef899309a919bfd012684d1f6e6a4ff67e3bb9fe6eaf4af3222f -3df559628f6f4b5c793a2e7ebbbf4a48ea3156fd17e138c518c85b72c5164c2ab7d5cfafe746119d53a8f66d5b6d03da5d5d798e751b059d32c625ebc64524194cb0ad0a5bc54c7466778b64c6d4feda80f5e3323ba6f93062eb6594c5f5b424b5e92a4814986056b207081a7970056efa12a197f59011008f7b5319ef7f9501 -6fb4487e80abf5451d4a9803f681208de9029df3142486150d85085d796ae40340cd41f177e2424a5535b5aab3032e898d7df8dfdbc3b9dfebfaf4a6882b52179b6fa97892b60ac028ed27337be9a60f234caf39ef4de04706ea8f26066d721416ff17101b1e2ab327260b90313991f4360198abd2b385387cfd8b8bf46cb51b -035580c72c5db006a6afb766d55286538c642e8fcf40bfbe642657d80e910706da76911afadd2c92575ce02d976df6c3b83a0083ba4162f1f4851211bbc9e91e5a3f5fd771863f8d1dd6b0f25f889d53d2e496cdfdee6502de669bb9ee022600ab0e71f769b1ffbfbf9cdabd6e44063e0264212589e98dc046f8a16f2164c606 -4879ca4ee10c88f3f76aa66c615c733162acfe10fcf4e246b8a2af1f76dacc28ef30adcf7683acc0d7c365b0ac948e0e60f392e79373ae168c6f3d6d7c0d15058ba25f727ed0847f99312827f901e74bcd9955ac7a91c9336524606887028d0428653ea86651b981a73bfe94efa3ae25e274498a68bcc0ccd0b9c02617a5081d -e2beecb6720df6ecc87b16737d4a1f3294dddaa49e611f3ff44560bea3986c29d546f602d0345a82c12a45f7f56a18cbf248218a1a87558642a6c70a9914f1269bf4b49cefaf5b6b9a6c7a72f8fb354132e2a3456f19853fb5edcbb937eb9e17304c086960180d579ada557294188a91918a302441ffa9cae3ab9b99662de92a -3239be90fdb5a16e15c2c6399926e51faf2adc31566cd18ebbc2abb5bc27740c64b8416acd3fbe523af0be6da5f8162e5a0f4770dd5cf180ed6462ac21893f24cf644d275183f2a9d3aff2dcf0296461bc4481eb02b1ecb4694103af3ddb071e1d354cd4b56c64bc4734a3ad7700582206c23c043757d4bbd330d3b82f961b18 -8fbf896f293cda7bf908309c66da09ae31f2526a76091202e6b3e7f55d4ed910c89e2c15182d0ea7041b58694705f6f2deed4a97912ae7f2a3f9731a6f4e951f576c02cb54af4cdcbfea588130bbb5856cf0af69bdb3b60bebac75254c81c92600ad49ae95a514518f80f1809367db96c840ada6fb37b40a301e7c26308c1d28 -7b8b1b1a932d3ca40756086d3e1c647972c5b2739699067e505f172f3cadb6181722e3eeb02da82720f76b95363cd3e06d1e5ab5107cc5378ea3e32316e8100b7a996126a665c7084f2cba62b55e05902a4d048a6954abc9755e316989a614309b86c4f44a2db7c6a555f33501dcad7a9acbfd7d50368f665ccaaa58817f1f1b -6189dd4800430b956ed1ce221a913a1b2e93530bcec721020b694553d83d110748296099bd128c663a8459ceb79d9d80b42e069f94f9cd76ef1930b1365a032a59425bb580b5d25bd7b7aae78b931d273125fb50820b64e3f6e2257e73ea1d279018afa600f7348c99d453429736e40642d857e6d24cde44a559be166cf14c20 -046825b5524b6de9768a424505ba351b6b54ef8e969c09bd565d7291ddc6bd11fbe1d4cd1c59a907a578d5b178beb6af3437b98cd1914114d4455f7ccdf4af20a3f4ea2bcb550f72bb089b7db98ee0c5dadc6b9fbc72a74f794aee8fd7544013925adba39a3cd7d26986d2e702b515b96caa9eb6c8a54c94d0278a3987bcb92a -1055849e3a5174fc7fac9bce5df18a9b537f7c691754b7530de00b091772ea0c38a2f0470cbe0f0ac77cd29d9e3407d13999e0be158533d2a1e3da8d282aa60905b8edeaa1738c0456900f133d9f4dd4a55142bd5190f69d5f1c1d9d43b0e5295a156876f3fef65843965fd39dde34746cd8cf5893921f16c23b1f2b965b721f -f773090385fb04c2e444d84cd8cde5f85d9ea16b04b04f07d4ae8cb78bacb422ef745bff698dab4196491bea6d0b9687f6dce88458de9e4c6d328776090bd91973f55187f12da211097c1edf2513ab04093d1bb06716c8d3fcc5fca2391dcd053440bcc05b2898284d14d7b0beeb162bfa7334267660398fa3f872cf1906180d -0477d6e5ad0bb63bf606e55ee1915ed40bbec14cd67f9e23db715f5cbb038304d6bf8afa8d993808d37fbcbbe5e19e95e67bd20279c40ffa89d5c744d7453f21f3dd72aba10b228d614750842fac5a517b93a0fb019c162b964bebf99ecb57195c46d32782062df883a53ad489952aefed5fc4d0f28bc79f66878fe7571c6f2e -43697a22ee9f1ce4ce5c661c25bc0a97b4efc38de551a0d1621ee5193b64540851f22ece9059304f6f071a1d3f56b9d99fa48dc1201749289bb873ff0911a41d43036288e0d9d4164061709cabe1c589f0b536b3fffdb3a195dc739d71bc09079c7c8bdf6aa871aae5af3debdfcc67ef02716045201fd1b9c662199975fc532d -621df8e54b688df0a85a6b442f6a2c9965ac06297974d4cdd25f1576bb6a380d5f36e161a5ba11f0d7736ec0d206721dbec8046463a0250993ca0dde232f631f8e7ae5626ffbc452d32fd0db072f8e9752e923235dc241d75aa83ef8a5bb3423346084615cd1f32c15f2569de008080c489829f6455d3d3007cbabe0537c6511 -985a692195c302ed580997731ae427eed6a70925f6fee87432ec4504d861510155aa1c71972b0169d70fb9a2278abbd6bc19616a8a19ae71ee4eec9481239d1d3144e0653d46983bd2a2619460d4aa0193fe5218f78974bcfefd4e8844a4221172c84c5bfc8b710d48bf787f4ca9863a15c007a5ca84e141389212be1a9aad1b -f004c8b704448258f007ff65453e416757306214d210936d33c95d097482a42f6280253593817c65598aeb132797915e64e6bd316c45db699324fdbbdfdade148eae9abb466cdd29437785c81400a4b3e97d39a2c855d1a7dc0bd8f012c4ee11ce910221f7d769daa1cbfc67c1e9c5a9daab3d6555cd633a57bc81db34652c06 -b6097b74482aae8e8f9eca688f875b01ea4432b26f2e2714289b7ec32dac6e0a936417d9d811e45e3581ee642162272c60f340c96895783c9e1763f30cd66b0a88e166e2e10bfff31afbdf0f33ccea3924f89d548562dc002158f7a13bf9bc29802e51436d7d32ed420ca2f256d3478270b4ff702398a8bec32f2bc0bf0b362f -cf713c259e53d818c6e157188e4a6e96bb6f7e05fb0f24f84f26ea28c73c0508879cce9c92372df8088118c07c917667ed52d26fba28117b45346b3e58fa9b23abbb4cc7ca35bd1487b35e85941ebde9466dcc5247cbce4ce58b88a6292f2907e5f4fc9c6a0bce308a4fa9030be92fefc2b6420ca6fc5c0cb29e3df40134d722 -bfb48bfb34c585ca5b72d40ae6901c3e3011e99893d9b5acb54c27b7de81fd2ff170b0c32bdae6c2ac2ec67bba684a525caae3d77657ef541c5e45425422150e0e490deb0aae33a39882dfc67b43bc03c924ae5e6df5a173ff42c0f124a39527e2ae0de324b7a41d4ca9117db3d6dba0e35ef6bdccad09fc5567279178656917 -5b8349b0e5eebe77cfcdf636e8018156a49aabc7ae893d2fc42cf743e35fd304e33f1e0c8f8c01e751382af7bb7cbb3d4a5ed4dec89384cc975364ef570045262fb523ede9c8893214ad8522944f605fec17b320bc0fa8241536fb84aef77c2d6d3cb5a56b664aff3ac5010268f0e6e5b5c92d206656bd3a5a247d1c19365819 -e4a086fd01573728592b2336409351d107fb688c32a40e5b193b5eca32ce5e2f40c3658a1f6aa0027091a65930110df77974877cb4ac698b095480ca36e27113fe550b2eba33d695efd0ab165867943bee7b41d8c81b221fc3bf14d3a3e7c81839dabcb3288a2cdc4a6e7e1ab7b90e76dfadb5e1801d257ba851dc93fd84332e -892623de0c41f5b35b0645b3e62bd572f033933bcd4db55e6dddc2ab12e7ee2852d30d9cde3a2408c6900fc2e69657e47ecac71e02f6f362ea6a833cbdf1632b0cea64bcf8cba89fa387a4a67894486d685d9ae5533fda3d21c14a2eace317259f7e5525b045fc472de9756b4c1928eb42e03b513bce06db45e1cebbbf6f9f04 -3640945f8037c63f8c45101af9ca177c9b6c61fef1b01032c531681d836e941a9976a0d7c0ca75273dca0fd72dd8a5b65337d6df6576ea0eba5d925c0a8a082d567fbc82973fda726d5a74fe9c1063aadc7aec211c68aae088c2d1ccb442eb1a3c672b7008b555f2057f502d5727a550da43dff14c45a16d9980f4de40a48f13 -3e0e57b8cb75c2c2de4db9b4f0b228e7a2f4814b510438dc8287eb1435f2542f4a7bd99fc55e45b7e3658a3a20d6ff5fd873dc7af839f467dbd90d858a0b9c1b48c8a6fcb18732146766a809c4e28cffa3a9f36a6df5a42246d91a6266afd302b3decef57209ec4eb93b103b1841c15b7cbcea3cfcef7ef941123c62040eb524 -969da3cec818f54cba0b71c712f04c1dbf375ec4d3aeebf1addc192504530c30d1bc88e6245713bd9c844070dd10b1458ba65e892d9c83748267f7b2f96c27115fd60d0c85afe7273e66827eb8267e09b8f7b01741029c5fe739cc17a6fed50336c2b1cd219158f0a65794f072a2f9ddea7861bf826e953a16b7519f897b1329 -2286b57209e96ad71b93f2b12c2428b173eb9205a8509ae013528dde9f2c28131fa777ba88828d062de92744c8d61d405b5b65dc8039dd521d72e8717f103510ddd05d8852946fc2e557d2dded294da094afd9bd2af5a646143e26c3d60d1904ef637679e4ac38bf9a659ec4468a2d09f1d7d872bb42594471dfcb3d35330d21 -bcb22b446502e1271c935b62eaf65fa3bec76270268c55ac31b7ac20b8b8f41905b8a4885f7c50c5294a4ebe1bb94d49dc6a0f72fa5833b7cb5fce57b99f482ad9b7dd4c58aa37b022451cd21497ea9ea8104bf42c5734820de8e1e183a389145e2eaf3192c9f08fdfba4e762c9523481724e68cf1d1d2ec8779f66b6b586709 -5d86b4868528a559edf2e6bc3d1d5272dc8a3359506fd43e776a23750277c10e15d898fdc985847e233d0f17222c9d07c62ebb6f50923c063ee32eb46f1a67224fe3fc4659d4441457dc5651af618568742e622ba47a1087dad6ec069c2d752a6c9265b583c0364e2eaaa0f41c274f444e7f8c3fd414e953817761b572dc310c -c7d6aa097c262a0eda10b6d758aea9226acf4183151e384949ba18e38397201469f40af10423485a0d7ba73c05fc7ac11dd8da4c9967b04897a5de2107692719533121a859de460f45c625b1ae63affc1d8e228dce20c59ed3f8fda4dae0e72bef551d543b1cbb0f60fad4a91cc05e869671f153403d968b91bf0b2326681924 -488ef9c83e0bd476581a19695f6392e92094d1d790da3cc36e76232eeecb432ac0cc8411b4355e14e0d5253d56e7dfd94f4765b40c3278b3fad4ee1145a2a704d2dc07bb3c2700e1f2020d5e486a0f788d0310f2479e6292f731ec96f235691df6cfa2e6239037d42be51c46e3bbc6638d7d5cf0aaeb9c93137bd05461426e0a -689f41c64f953f6d331c25004e7f1f3373abbecb8bfc849746ff521ba8f5ba267ce035840932bf9b782e93145e0230001b51ccba29b4c6984a222ae0d7b75c251dc48d4579ac35bdf358d87eec5bb302ced8597c9e5dc11a028573068977060a13f3187c3051929f797797e07769f2d23e1ca1f20b5566a3775e3720c6454418 -6b8606c12b5ed71fbc601603f305efc149aeedfd0f4d9af12b9537438c34de2211047b34bcdf6bd5b986a1b318ce6f7c43726fb1b8564c429f42f592aac8990cbe3be18669c62d8594f40bb7afc39a90cdc59ef9d8e97063a2b5cdf1db8d422654d5964774903aaba3942f2c24946a2bb9008319811d9fb5f0a8e13f4cf31412 -0d986831b950fad4b7e03952634bf9403ac772fa3fc1fb3dfe8d25ba7c28501c4e1ccd897cc778288667c2456032c4773b752184da1bc8f705ddb406aca0d72ef114e87fb5ccf3a2a7f0376ea5ba9430fa69f51c06d30e3d32c81213d26bda1ec2c509b95137fa794329d990d3848225b720d31f0ff20583d65d074e2ae30414 -c6043e2e09700c68ee57e2939f1a249761142ef5df929fea161afa166c854d21f7d6623e6fb6d2c5de660097a86979aebc5d3f9ba9ae1e1f038e6bc4957125028ad65b86c70965ba4a7aa230106f8a49df156c0538964b241e2037f52efaa803621f0dc4e012707fc277d7a275544616a68e0c7579af5c5c404fb7e9c1ed4f1c -8ad935077c713187c61aee1327bf3454b8e29a68f2504054f36a086747f26d18fd0bdbb0116f409e230862f9f5ec42c92d4a88ed4380e373d5094c1cc5070927ddcfb941133e634a5f09c33eb663e7b8b6b986ae2b01526cf7a60d6d6834091fc14992a08bff748c122aad8b74405f9a89ead73c730ef1e2239bbeb130c34320 -7853e5e4b09e3faf3462e9671805dcd3b58845c1b4d8372896694d1bb038192ce0325ba2fa16ce8dc9d4da7c0b84bd8d306801dc8a3ba5a5b8abca3c196eab03b6d345082fffc14fd7bc48191e73ac358a6a8910ee1631e8e704df73b49c5313ada505068d04493697350df840f84d0df631ddbc570fa9684ce58a290ed4690d -9e3b404d2c215474b70004dfc29178e95eb24eeb679f3dd707bf94d4d3147919579a270342d1de66d80db3856b69ccfaa80b289850cdb3724c018dc98ab08029fdebfcaf0188eb0cc8fb2687bb303a77ea7d06621b6e7538a57201382bdd3f2a3da139276750e4711903de37a306803ea1e7e9b6b670bf78f7a83e0a472d9418 -d110cd29133a86e067af51f7bc634c6572ae20e2eb6fffa7bae8cefaa8524e103cd3fe669d1a388d1d9bac79450b2f1ca7eb49e16da2d3752f50f2dee20d140e08f014dd8b3b2e4949a8d9b57ee3d436b5c036df6756abd159afe474403498018bf913fe877b316411ebcfe504d7620b05be6ec1ff544f2a04b01c1ae4339b01 -91f6f0e46f3877d70cda8a8aa108fca2b788c06c6484cd4110aaecc0a2ddfd23047fbdc0f74240ec387f62c2c359acaaaa79a7f18ad35824ea3b55f937e4fc095bc05491a66bd2c00126e5f65401d11255d908472ee8edca8d6760c5a8afcd1fc922745cf41c916766a6ca4c9e9bd19efb0f99ab1457b6fbf7246a2a9846ee0d -f77185c9cc91310b9b9939c376cefda2a9bbe909d1ca0786a7f77ff84bff562e0d51bff6483d63d8880ba1d58c23cb8a4313b1c502abf0e09c91e689bc2fa222f26539f150ad613abe0188d5b87683ec219e264e33c9966a3fc11c5a20146c008f474ccaea6160421ee04ffdf1c764ff0575f22461970e503a9b0820aabe2012 -b44219905377945fd0c4e8ed100d41932a1ffede3a495352b3e951ee0e0b2d120043a66738a5492def58ecdedcfa99a97e5bb04d8ac8903bb15e6e71e218e719d00dd15a38be5ffe36e87517b6b5787ed2ec0f06069e9a4b29c4628ecd507a08b797ce9a08eec7e0e036a15c71c1008e763a9b301daa06b04d39acd62d8b4d13 -d44ec887b91aa390dc5821fa39dda085ac82c1bfb1bcd87104d3e82b7722b409de84d414f143de2a0c6cf439dffcfc2c2b459dbd38ef76b0232d8b67cbf79d2669d5245477e36cfe3fa6ece362afee1f0b7ac4282ea00a9b0c18255459dd51225e4d5fbf1d4ccc792cd4514c4f6c1337ac644053abea7e4b034d1846bbcc0c0a -e7420c1bab20ece7936f0ff1d022508c6c091b2f9bb5f53b2f389ab9063e3c0a4d98d8f8f87616b19db8ca6ea39c5a878ec30a3ec6665c65ff7533f309865d1620bba1f1c8a3517e66846ed1bb1dc855bf134cde63fe5d0a0d0a1ebb2afc7b2f8dc14cbda8ef09bccd0bed2b28612fb32c8b66ffce9d737d17ccf61dd954d51d -4f06e327f477e0515ebff538c3d5effb1fc2eb70d83b18bb45285de40b064304d04932da5fb9c39fb60da1284b4794fb28878554dec2b57c3b40a73d4576cf249f6894cd213b41c2f2719799d5bdded00adf60a4a628ffd6c041afad57da4402f58b17d33a7c2318e80a953262bbab708bb38a1bb169a5bf2af6cd35efa8f810 -64ebb43860ea723680cf2358a215da064a47057623ff3473eab20f6cea0b1e269ddacf9582cc91631ad1df0018d577220a310739e7516e52215c6cb6812e7a152832a0f732cc748edc591cd1fcc397abb1daf1e7d9d6cf604a0d8eb19c8c7f13ece691ee8365c7b3cf1dd8e0da38595c0fff261e3b44d9b4c9401b73232a910d -4633ad1038e4b256e82e02a46e76ee6b0104e566ab959746502a9ef7e5f53a0775c53dc7f1e053b38a14afa1a8a6b159a61cac792e14f8f33b789e7ee7e406282c7f6acfcf937e9c73fda85fb244832a268adc333af4f4df8d02381f0203dc294a86f760822de033677e5c61d6da79b4e62af5aba84224b9099379a078f66e1e -12f4fc68b51f18b3631ae7782acaaa0e4b7e9ae33b30830cb8dcb11f6c7af2228099ea66a85e16f566854361fce214320ae9a7ea2dbb040d6ed61d60874f0c0ff116ac25c78dda55551783c6b943d881e4337fc8f9b7ef6a56e4f040049d1530eb6631d723b441f1fa7b1ba96a720e55e55ca3a076b480e921eda57a58ee3c18 -1fc9c4a0e1fb1880bd05c52b2d3aefc7fcb223595bdf67fa3cee154d4bee680bbc90d576ba1d3199420ae73f5de187664655694d42d4633e7e9af946a0573c1e875d45c6c6ad8a20896502691e79cdb07955dc16fc829780af6c518437b659283bb1dcb997741a77cee9b8232789f9ad96971564d13d663e40597dd8d343150c -ecf4367d721b45d87d7b89134b1a8bf872afae4be3e7d36aab2b35049dd1f8211c6dc16922e5c7130861697fbbe1da36f122276def1f1b6bd35594e6db8153015a6d22c77c990612c51a7c2532f71d7b0d3956c3c1583eb775e92ae7a4475e27a0df2c19b46596c4434755640e082adb186fb1e5b0272fadf9cb81c681fb0f00 -33d7270785c7c6448bcaa20d697a1494ce878083904600b6702de4ed48dc7a0fac863b2670df44f21a33f2d371ea681029ee85e63a7a56dae4463cd418de400ad71cafc06bc261791cee2221e8aae10b42dfa7e0569e5422abe3dc3fb6c2261fa523d774b2a41741e1a7543faf11be03b1d71e7065fdaa731ee918eb27615222 -96eda37419e8d0c997674ba69499c9ad9ae416a7f10aa5b5899cfdab965609280347edc60268a2da1e680aa2cf2f7e606d666ddb947e8f67179ce89bdd8c2120cd664f66f492b59a87167720c454aa2973dfee3a728109837822a4a581221e15cfd7fd93ba83ca6cebbe4bf6c942ffd475e67e4226c6858a516dbf0a5aafea2b -62a49ea37ffb3ced7f36c502c9ecd4d66dfc1bff4dc7b27e82baeb35694ce60ce926eab914cc847cd111bd25b93dd280fb4d6528a9ce640e5d8e976520292603b984593ed552457a02659d88920c385cf35cef41594fc9cd5713317e66af8c1fd4eef19573963c03d04968f6edabbfacd4fe6b7caf8aca966b3a2e9e51eac728 -b447ec57cd88c7f3fc8b3c19520878ba752170f4acf3d938f5999f966e6aba276c020ead161d5bd5b5cc1db4a1fe38a97233a5fc2570ecd79986cfa62d1fe7043934556c8cdd1d21ae002fb95747f1294b976e883bdc8669c6862b951b696f2f0e574e1192ed2139b52f9ef11f2a4d471e37bd8ac6027a641e16d42036576917 -b01d16264e7900af205e9aee6f1b6630a2ad0d8b5c7b70fe5e126e051146830860bb750546825efee79cfd85d8652e38b47cba57b3af659c9ae087aad2d42210a0ed3dc541478457d779812c60261a8a24faeb2386505b95a4f25a895867aa1c8f6bc2927050c45c523109c81280e0d51ee748db0197d083392f96abe00e3429 -d42cdb5ff3ba281715ee631e705aeb60f0bcd4295e98bdf1b1ae1643050be6163a862943308f59b71d20efbb46f515048c21ed3898d463eb85b7030d9dcef11d845f7c093c330a5853838c30d6fb4b51b51e39b511d7813c71c2f5686884d42a2a45d91e04c7d2c9288bcf0703cb6e506081790107d4885aa2b68705dd49e22c -225dc15aa9a5cec73da7f03591f03830f166cd001284cfd93d64a7b8648f242cd81171d8c26a1c48cd7f3312c107b71a8ffb6245982a3fd2bfd8cbcb2a12cd03e0dc82619f09b6609eb07e47fdaf7f8dc2305d63319eeb480b586aac3ed8492470844d94ed13bfc101ef57a3ba8b3f0bc014378bccefc6be6eb3584b4c4fe505 -e15c1deadcf4c701413d759cfc48c3e30e18ac27ddedf716b2fe37d3badaad174dedbfe8e5da12190e89f8fb1504391db5ae566693577d856aaebab72cba582b9e2a82e2daa8e5ec2be03d49218263c813d08915b821d3772bb8f5a3f3f8ef105a0b44f932359fcfed71c0c5a316a34244d5c13e0923cf108fd180fe64f68105 -f33e03d71fcb5d13aef7be9f613de953b0b8a1f5dd1a26905e61a257c6f3a21a2fe357f5826e970eff057378c7e278c24601a2ccacbe053c1b8cc173c8c57a25a777d82ceb9df8febcff3af0ec8092b5a8f3f6e3701c9cfcc60769e8923d870bccb66f7c90989afd1d964510397ffa0bcde2bcaa25c77e93812c24769c96751e -ef858b63a7acc59e4a9e965d5234a5287e185f6c6154e45fc86abbe4aefe5b14f86c7691aa0658c5cb700954f8f370ceee75312befd52a8a982cab83bc4304010ebdf78a7123876047efe3a7af28cdfb1d4aac51edfab0c29ea238e0b2a8f30617c551c4ddab424938106768b869fd141b38abbab07f45f5603a0ce59e539401 -089b626d2546c72269823fe1a0c2b59e2574a8f2024777be938283b56a1f6e231c89e5cf42d77526dca5ec71dac45417faf6d6ce0e679a88803f2b2103cd301222ca094909fa7cf1dd1857eca44e00e5c97288ac8ebf8816c2afb230eebbcb13ac589d7d17a5e4d7d4004c1675c31b09d9078267c592ba44cbdf8f740bf7900b -164153721fd69fc5ad803ec4c9440e903f2c0aecbc36158d2ce75b4c73adaf2351c704e3f22c9d6a324ed6db43b16c770e7955bbae3c28697d9fcdec2cb7752d8f313e74f774eab74ae757151bcd1c9d9ed44e21a8fd3dfaacc68b960d464f1ecbfbd17216776cea30afdd21f1cb0db2168e9d2e432a6898a99be218941b1e02 -3416bfa68b6d770f3aa42aaebd47245655b54f7588a75c5b6e60dd04b32ea82e61ac0f1bf73c549469a2e606e236bc066f529bf0578a702e417e152da098902e01092657257acad2302541b5dadc7a610b201611fcb1a549d1f182572bbb21169a89e93b9e09a4947fcfe06007960e6286a7b162a689777c623e342f11786324 -e69a6676431bb8de684924fd89efafad11e7481cff252446ac04a509b7e636210ecbec5033fe53c682d7e952553659c378b72c30d411e6d13c5a123b1112da00b035d8f97d3091d336c6e033005497175c6fc535c4e41f562acabac720cd421de16e9ea1e994919aa0e10b2aacdee47bb2aa2c123e1fabdee01067e80e43321a -d6f69ab7ec9abe5ef38516978115d7a4f8c974e0d9b865b654ccc2b843835216d82a77fd7ef0e80db13f4bdcbaedd8afc610ccbeba60f487a5c4db04899d222a8c520c20b3f0dd39ab09552e7cf5e0e4bbb48ac0592fad1d6e6a2323589cc9001e0a566b45fb0ae36f458900286a6c96cb6189f9549e37e3d807b3a53736c12c -da516f1694a933945595dd4cd632bab6b8fd5c4c8ba94bd3087a9959811d1920bb0d11b4fe11cb9abe79b0b63d9035417a163a443c458d56f6fcbcbe5dc7321ba4dae93307077ad7d53ffb15294b1765fa01d99bc41b060bc6a13c8e4cbe7c1d5c4338070e2c3ae3f1defa888b6f577cdb9069c6344fbb807e49e20c06d87229 -9961fa7174eeb60e6584cc2e27798a8979ab7530952b7015a0d884498c6d6f1dfff1f2f466152279fe7ec7f5e96c7b5b6566d5f3713d09e3b3f40cd9c8923c146c4bfc17fe4625b16baf135d3ddcbf1a46f2f38b5ca3b2b36e9c7e680e6b06107aad5d2b6c15c8f65ec68ec9ede816e9c82680e5ea205e8595f5f1f2b605a719 -e34f456bd11dcf53766da951a75164353f145b300472fbd78fd1fecb64afc915d7dd44571ba6b768e53b19168eea6b4785f9512164f448418be2da8702e20b2db391279d979df3456933c8c3368bcbe1b9949316f17a605dcf5649d66d2a201a508eb6b4271c2fb736e6f374c36abae499b26e159f179177a0aedf2570b4ba13 -97c9d2a48cfe43605a6891353f41032f67c4bc4dcf6ba9f60b996316a7b4a203f5a0f297e54e4557ad6bd9b2745c1ca21fde6db49c24775aec2461150c562f1e23e1fa385b012f506ac88a9343ec551741c90b81202a8352a34f7c808223a80a7dc617d788a72c66fcb7b3cb5605ce7bbdeeb14750c7155103edbb6bfee02a2b -b2a73e6f107f3b41eb869c6e8224b38c70b3d9133dfe24e2a68fe7549199e825e8f0b52f5a9c2c47074e9e5b5cc55f6aaf95706a2e2d401594c5b745e9905d1ff308b297b7102c2a6e69888b5a39d687e393ac9865571813228a920a6bb8ac2846e4dd939d930e67e6d4ab8ea83e1683d0e40a382760efca47d49c2ce3645b2f -7968a96242febb2dbd79ef839501b09b7fb76a48f14c3258899a4eb9ff061628ecd3600f1047c128006efe85ea863265fe894e782e597b9f60315ee0ca0348172dc627d594fc7f90f290f615181febaf525d29dd79b857a465c96c5062172713bd046ab5e8cc17f8242cf323b8095b67cdbd965aa652454d4fd19fbb5c02ba26 -95fea3ff4ba7313b95e17174ad10845696643e6b79b3aa8d4f7d3b57358d3027f5e32507a1c3f671660f4254da05483eb5b1da1d266245df7d29e220f3be8a2bd6be06ca5ad17f83fe7c64b6e31adefad5c45ebf6700591531e382a44cbf42189e7a1fcf59072d4596b8fdaf9fa507c549322cee56ad60a95c53aea64d1ee501 -9a576ed341de034f50bc6c5e2dde207c7ecbd115632cf264b4af1bfda5e10721ea1391b41a0691ce90ff14658a8cb145a4378485b5b8a20412aa939746ce871a869871c38289db1baef03a4f50fcf2ed94b41793a06373f834d6fbca7671d71cc8fc6cda950d957152c07110d907c3c9d7fa7614a25d1af2481c82ae5f110f08 -c3867c545d9fdcaee4b09e7ab305386aa59c580d1ad2141e5c05bcaff6645c30bdc8fa4687c0300c0d9adf4f29fcc79de75b697f9f062958f8bcec9fd6a7252698b16d85e507d092754de6def9cf2e5104ab3bb5e3a3c35da408c111be77bb0a982cb920a216be149159ec8ca191062c258089f985f816dbc239b1cfdae26800 -da2520aa9f792b2ccd576dffc2abcbadc8f29d450c6ecef31beeb450cc4e4c0eccabf3c006bb41f5851a22051004fad9502dfd1dca19dd674bb42087d8162e07713c7289098d2421748a8bc80c34950156c0819d1756dd76ef9cc364b7ef4a071c478468355bb69809491052858bf4eedd125fdb22a9c6f1256f18fb4b6b3f00 -4cdcb7b7012444eac0a54720939faaf0b48b064c8af180646d0bd823504b51186e3d170b2db5c0c4457fbbd1f72a6879ed0e7b6d7a204d5b71b294345873602cb6467ce3db88843d52bbeb5016426929505edf0929581ceeb34ff49b19ed2e2b046f4a9fd7ab72bceb52e8fa068bfe38dbbf84ad9ba39d8aa6982c437439950a -b57b0dec5bae6448441b4e24342bd7557314d19face11963a6f027f68fcd3a25d5fd8364355bd8c62a1022ff5c98306cbdfd1bb03ea6bd5a55e10940e5735029b28280e3fedb4a27d3389c25049d9bf3d47a15a09169397263a1e6b6c8b4d0110d5a410e87271b942f1b2d6c2f9030e2fd158ff739d07b6347529b54b8b32425 -e868a4ea2eadea7062cca4d9231421b94d2621c9b89c16bfe6921cc28638e320905cefd5c35e2b0fcf04e4270af38430c0c03cf9f693c09449c8f914a475d32a37f5c05dba2d43866e4f04869d08df76eb48553a9d452e2238b57242da26a416d4d1bd62628d8af6c88b23f7fb2e1c5956310374ae0e14b4fc72bad912cd0a01 -8ca1b225892bfc054dfafc72d4438e0dfe9e4fe31df16a0b7f6d6929406b05239eb6e9f4d8c18464468f381b0cdc72841c7ecc17294431fcf7ce66dcdc9c3b2511ede8e024d289d767bcf87efaa1d112248769d9127373ec129ee52821d1e41f8c95e0f8c91b8fae9d2a22a209a73da9b4695758989975b1377fe4738775cb13 -20675a5bffe9c8da2ca0f5373666bfbd02b7779c6c30a3b19aa3149a7615f00e5f592e34d508133a786c04dc1461e8aeebd4d32a236d8d35df5d3208b1470c17fccd5dd430f7585be6fca45da243dc2eb90322b11d6d6b679416ecc5ca68c906bb9fe215185b278f4deeda475c8b5df572b610dcd46582d57c742ae87b53fb01 -a2163f17916e4d0f4698864fe577fe9d8de91e7465b83c905d03a8de3543fb2f9c61588729d2945f4b54c9533b61d69d271143947f6744d3712cdc65d02a5a17a64a3048989cc9d2f95958b2db57e1aef8981ae4f470f861d892d00dcd04ec1bad27fa892599115db682337be8f5d0b7f3bca38ad22843ed38bd24445595122d -8afb39af09077681d3e13a867c113753059a7ebda225b7e7ae67b7fe9e7e522f9bfdd3c3d67618862f8d3ae1d9439d93b33930049d5fad2583dc51fad3ef8f1fc07a4a020436181f5852e190ef2cdde3dc424f5772df1f81c291dae73797ac0602b643de4e22e3ba8dc8544b0f94fda8088946f64f64db361444031dd04dc310 -03d6b655ed7c01f19d296b2ab60b570a7249bde87447416eee123947069eb3137b22177ce69f10c9b77de46a805ff4b2622d81700896ddf6c2f077ca4e3fbe006df2fe99db7075465d8dad0343effee8a862b927184f0c0a2f4fbdf90d975219a24dc32f9414e177c508ad722028304222f5ca1c497fab01c273113b1c603f1c -050756722166ec41e9ea7ccb2246038569920f262b1e4f54611d2784d3b85c2631ce413ae139f64ae02c94d638c76ac19c98d0614afda43dd63066807fb7191ef6366501e71269b8f8a688d2f500caacc8db844362fe01b5c52000e55589042c3ef77f1e42f644e8da3eda27f4499aa100c0fcf42752c9fdb00ddb9120b4b918 -c6ee32fae8eff6d70761e61cee900a87096410a45ee135bc12d3dc6b8990073082ecee5aa905b1c42da35c7a56c72f65db8d3fa25107d8fd8e8941be4a9554018eca95d480ebab57dc57065ce6103644ca89261673ded90777726fe078469723b174d327c65c02d19881df12474deba7ccb81a17709be2567b22e921cffce00d -08c9d9091e7e7a418f16c2ea61de53eae53eba62d6815b6d1320e2f758a1021c194d755e16ff88c759ca547d711d826be0ef29fac3e9537c3cb9029a174fb41734d47f4c33fb7ca585018adcd3fa2ae6712b5d82c6ff572d418e8912ac389d2636dae4ace8af165164e0c694caad2b7cdea8a4d93c335b95b706806718a3c209 -ac3f1f7f00e78b54677333e8a65ea7a3e814645d56bada1e3b23d4f41f162b26ac64ca9c26f9c3549fe9298bb327ab898d77f1aea779276eb1901626f34a3c10b60e6a071fcdc3a5a5f779c63a009a9cdcea5125c1f5d154b60f971998ff950fb42efbb038eb3ecac3efe67116341c9ecfde8c98f7ccb35cc3337f7ab4c4361c -a74de2bfbc1366e852f4fb7fd48d3bc945095c18aabe9ca210795d4c0a01b21115623662497edcf1e0e080c29e96b9dd571af51bf82caa7e74cd678c0e02880f68144bf3c0befc25afd82c3f9242e1f452893e1c1d337548aa661357fb1bde0b5271a8627992ad671ad90acd7a2dda7748ffec569d2dbe8b945b503fddac9e23 -1cfa8890539467efd5e6e662027e65ad56a6e055bc62b1d220117aee0e40650febb55ec6ec01b0542981855ecee60543e5f024f45c25d3e768e3b5802323651d7852c4242d05d698d233bfdc418a4aaf5920e43758fd8259b4e69833df18f42ff620944a8a41c0dd67ca2fd729dc8d0726ba6c5c3e6ece0928b01ca1112efb20 -f3804010d10571159e140e562990675b2511ea497bb343d57b370cb82c777019508f75137128738e18e334c126801344596480c2d68fc1a6ad7c8a77f9f00209901cee54a870ebe0d337299273763557c285f962b2c4373101a20ec369b6230ee09ab27462e709e9dafcb4e298e1f4a4dbe59e74abfecac20dcf237409d21002 -e561431e55a006a9006e4c392afb187de33eb27dc1d1fb4ca85908fca4fd920a44f476047880ce7c379c25c32fa8e654106837b99a083a374f6c5b822268e62ea5eb70d8c4d60942919ffbbe7d261da2a815e826f9da13df57900a1a641aae2a4cdebaf0d6c84fd746a2dd5f95255198cfd667f66cbc048d66bb576b5155fd2e -6773d2ff2257eb32a688518cb7ab3c7054e16e1346993f34fedabd799550c71accd4e7f29570bb1c7ac4dcc54fdaafc6f439e7d822d0301acdfecebb977aba0b4fb60540f85314c5ccbcacaf5d80f2cd139bd57214d1fa57cd8f9537502241153f73d29ab80209fe5011bce9890b6546935fc16a434e9912c545cad9dd6d9c2c -62689a0d4d0e990765f30a0a41ad648acfb3f107de260efd2158af7466664c15202d55d16de2616e9bbd2de4b6edf215cbc35c22f1aec83193e5c4983104bc12fa15e949ec227a555bf2e36605fac82aaf64cbea0f2c03fc0d28283c7c257e269552de42fa790ee92ad85d1d4bbc2aca5e56864de1f9932d4bc94c30f46e0421 -02cf00623e3ffed78ccd1c4b4c1fb24fa882f2ea2efad0761788935297e2cb081cfc15b8e8267bbe2b2d889f8764cd071270da1654065b36aa8ac5fff62df21c085a891043afc6710af07001b7e0caaf89770372053aef5af604c2d8ec32b20393642dd366ee6f4f83e43d30168809ada489ed22d849aaa6f21a4cb9c7099f0e -a24f58ca67a9ab8a4f2a6aef3ff3ee3855ce271a3fe06e32fbcbccd87615080eb9dc97120bec9c6f82f381415a4b76de7c8f33fb699b7d7cdd5197fb1614b01f7eee59e5ea3bb4dfe9a983a45bcd41c0c69e630e6ec99ed8e55885792c9d6c08a8e96abad9075b8f5071966625dc36b8b9902643bcee10d6d6e7c7f97896440c -f9b5e013c1ddcbfa45643b26828bcda4d64cd3aa6e59e1c105e76e267e239416821250f10bdeea910ce3ce38a3065aa084dd6e4db075dab08b0f390e8dfd661a5322a23efe7286a27c9f2542b39b58c4f53a53bf59438b2c3c484ebda0e98b2528da99f7a9f9da4b5e1033cdd7fbd3ec54714c76e87fc17ecd147766696f7324 -a0111b9fc9db8c2a431bff40f0da9512dc33dcd035e3f12182860d682bac5e12b933f960fcb0ad6793d4986af6dbf70ff5d7d0135768396e92140c83b5c38d2968052cd8d6ca4328b57f8ba44a89b73eb76a119a164dffd29b84a205fca2da062bb2cb219b9b6ee65ed91f3a4ad7ad7d48eb9c6751087c55a66d554c3f16721a -54b44cf36624401703dcaa91c6b5019228aeb6a0df54f0d0c770dc9309831921d7f68778ddf516ed5fc0ee25aca46fe5fcb7d27b8861d0634edfb8c8ae04d92ea175df5f50549ffc2d7f1c6ba8f3a08b85c40301ea8e5c46055d221609330127216cfde519eb885cf3f0d86a25dcdd690e1628dc4ed43daa2d7a74045523b30c -efd9c245671ca365b98f808d40c2e8dd67a80cf04820f6e0624ae264133cc4052b0bdbe7cc4b9177d3643b173f7ef8174fad56739b29ac1dcad80bb607a9621b0924b9ce2250099f323b0af6feba647e050d9bd3fb4b00d5835e10cfd15d3c1e96e0890a52b7353c05a48d0e23ce5da4f51db8e7d4a2ae0aac25a55cf861f02a -4b8e404a634f7896767236c1b815a865ba236f655009ca3a886c664d97317708d9b1876aafd5f7331066c83b2bc8c0c2368e628fa94335f9d429f29c23ff851cc0c21bd8b4478a42e6eea5d792df79cc423960c30001d0db41ce3e0ea001511cd2248b92e56d6ae4d68eaf541c9b954e0bb885f683437f3b82c448e46e014e20 -b098a83d2707d10b61a0fa3f78f44d8853f179c243970a4b239c305d5937d31695f1731e1345d6d0c34837f4909fa6615fcefbda14ca2c6a238bd544778e6c011dcd1cc1ec666576003bc1e4efcdfc035261e9c16c878af5d38b76d9917ddd25f32bb577a7e2c11546c4294768f96d591fabe16b1f85bcdafff0689f35e38011 -c6c2c6102886218659dac484dd0d2fb22fdff29f61344049cc77cd7e9cc0fc21ff74a6d9a59701e7032608f76212b077b532c568adea4c7f60e25f551dbef1249079d7cb84c596e5de15405072995abb58ba7b2e9141f35ffb6b5b345c79162be7512f1ad1e88a4ecd348d5815fff6907f7a90e37c51d79ad64c648382cbf611 -e69f547a3a1e8c46d3542136d0264d817264fe1df5dae6170419fe5d7c578e1c86e9d780cdc12229bfa2dd67fd0d7d1918f369c8b0b693287051492b3a0a9f056088468f67fa58c7564aa36ef2979f6dc7cfc3943f91d23bc294780936e56113515a2410bc3137e40d3bc3fa845d11cccf41991eeafa62e1cd258e9256fb651a -c106a0349db8e86eaccb435add96253f493211f3e41016419e8de240a9b5642d952537e74059def63671ec8a7e6c9af9d9a6fc22264e061ca6d105e63f85a420925df1be0e393e0e3a96897cbe73106c8f9215f869352d57e84a60c974c629122df0c6cf3212a9fd37457d68fca54cc369a542fccb038585907587abd2578e19 -6aeddd7d8f8e95e2e77d24c28bf927b90c43985d56809ff911328e8a332d11182c13fb6db02abbc3a2f927a7dd0593f669129355292292cf8bb2956fa909862b1ee5af6c38a2a0f16cd919db45847fc9440bb3a2e69644dce502cb75ad522a008e9a77e79e0f12d092a524a760c9237b26fe3b6a815cb1f861e664521d96f405 -5e0a66f22819a119022b116b39f78b986baf16378865659c687611435eb063057a6528b678a01c95e04b21cbec49fa5070c638c3cba1163cef970470311172298f3fff2d224b64073164880368db8c0d71b43739ba99ec3340353d36a5104a2448d8b2aa6c74a179830cff5b5de2d400deff5ed8b24be898f0c7510c8c2df91f -e6ad1f0d0ec2e606b5e7f69db5ba2f56cdecac7f53d695485bc401a65548a41ed3e2b45af00f88e3341a87beb399211a00d5190f2c4d6a98657b02430c610e2a25cb3a00914779ce07dc74e150e9e07288678b6c8cbd314535635f2ee1a0981a4e923c92163128cbd22c1973b45158701f7f0514bc4be9ca956bc6ddc3760e30 -1673c0f236e940f1110f58896cd65258fc28337c207e24274f2a768e3b3ce404e29379db9f3cdd176d514cb4d395b65b0d8d1f23c702539a4937c0acf1f3d52aa338b03fbf6aa6aa8091322ffaf04a7a3bd79366ba14763bb35f3ffcc28a351955038e3bf3fc790cf40312d8ff26d19f909e4a65e2b14e3695a2a39e16741b10 -5e0124351bb7a4fea73c10d6450d6abd03be63986aee34f7cb78acca47e4010af736bcbd5c761cc4c8cff5a91a184174a7fde9270686d8c89a8aeba2cc212606e8ddc7a12b1250f849e1b8418f02810b6101c093f902b8dfabfcf5d385ae131bcdafad4eed2b11cc738f557f67724c07c92bde6cc75595a6838bf8bd73284828 -b1d35eae6b815ea8010a7ad1ac41753ff6b392c9e5b44ba592466a3c5eb34b0bc927805ca7a1547d9ea0cb49959d6f433a455aea84df3f93a8ce15a5ca94452f3fea1e05bcf0ac18737f7c885d2c7f2b4e6304b3498858b2f0d3120ec15d6102378996c8ce7230cc4f9f0758e888c7577dd8bc67c3eeb6de50c6e9f10cc5a71b -70d51a62894faebad7035a775108e88acd4bb606e76a9978bbbe35face6ff7006e430797c4678036379117c4747d2c25dcea4354fadb372e2ff6b58532026f0a5fa4327ce29fc8c0101f750566e7aecab33d2fd54bdf7e4ea7d23e695bbcff218a0ea666522580d5737f60ff3155a6d436bfd2f81b615b6f83c6932b6665a92f -aaf0ff0e534d683e81475d519d4c712b2c4220cc05184fd9742e07ee395a6b2295c3d6b9dcb5b43b8b7fcfcba54ad64fa2037d41f324c8979281ea7de62ac62d15fbb618ea13ff8f091830525efe25825b459dc2270a9ae569e481549ca49f0625e3863cef687c0f443caea0fe4d5080064142d4169019aebd8173d8e7670127 -16516f5d227f72dd878ad3f74b96dd063b760cfb3952323e32610cac30ca701217fcc3b0befbb4f08e342f0989b385c6d23852439a7fc3eab4fd08c2c885980ee6bb6f49356c3ccd962b83a71ffa7791a97d667ddb0ce3258b09f2be248aa21cf2806a0f4f2f553aa9acfc1b309c2034a31606d02b0e8a2a2def3dc444bbba05 -bbfa35acd2061c56c533dae32d99d8c15b1ff4bda0ce2cea127f18721ccfe82fc3b3e72ec4abd523c55f10dd6a82c4e19d2f87915daae8c972c07ba87c570a076b0b9c236bab503e95a27b5353eed58d3546dbcc53debd8b218a2f737a3072068e64b731ba15384188998c751f5b2fe351dbb9ef6deb0645cd0d21b864211b1c -26e4246b51b2427b78e803fcc49fe9c64adc885b00ec60f07dd7a676ec638011d2beb41be424abdac461e08977aa38ad14a048f73b8d20b3aafab3da1ec6ac2a5a806d5a98ed42929e228b417c2bd16ca06c6ed455d6b3930aaf1bc9642e3f1304e11c829e15fb5289eea83e9ad4e21812229682b6fbf069154b9a360ab34100 -6f20a3bfc94c3350c9c2cf543a15e16f6aa34b32a81b93483790a191087ff821ad85df1ada0fee37befd4c5a8c45a3015d37ff9963e116aa03b1e7620309fe2f117a28360c20e3195977d121760cb16d58b03249d933f97db3b49b37c10da80dcbf3139796c82ff69e9b08eecd11eb9a1b7fdda7e6dc6edaafc431659a136b0e -87cc3e5eade97958c67a8c1b3547583ee16565e5d5df619d9f780b670907c110406cff5b3b858227f46177ceb7979e482d4fd236fb2449fb7ccee55f549e1d0577c2fa1c1119e0b0ade0664576d2d7a06c6f8dd6eb65afc8e40b42bcccba0c241e8b5068f15e5cbb868440f4a51ad3f69749e700713f9f50eb551def9f2f4613 -66a802dc04c9ca1dc7777d9d2c611c733e79944a3d8574b2bcfb05a81349b612f24a78c18c8f2b10ee213bc6551d1e2654a14d9ddbdc4457250d2db1299d9e19d13e55aa19cfef654bba9fe7ce963b7331e08463e54f725717a43ecc696b1f14fd79153f0a79342f676c215a9becfd5ce2ed43d2aa922e5018176dd08f62fe25 -425911bb0deddcc98394d75cef01c1f0c802ca7fe78034a781eabc183439781c1932ba678d34e737aa27fddcd13a000a6d4d7fb01e799090c375158e4cbc94019dfe4d80faa2f649a61685259b91d67bfbeae75b9d18b32220535ea9a01ed9226889aeb75e6b95953a99dcb5eab4bb046d5ed3103fd757537bd8b26b25cdd406 -b1f768652ab01f4c91a146e23429f694969b60869a68aef164daf31e02fc7c0d45868eb9a3c36961d33e027b8dece3f73b15f247c51f8d718650a0315853832c6db6046a9cc76e39b1a2c860c5d177100f0b0dfd7e159210b3e3396f10fa8b08fd34fa8261ce0ac72ffbf98710e334c0f9b903cf651246bc673645d27519d201 -8b9919e80e93e87168ff6d87f9986f98c8dec7c3a689f93ad9926a83b0965f0b9b3a57c18ed84ec692c55e2f3626410a31891cee9fbc1fb1da7325c2989eab021ad4ad08b407dd939e2735163aa3f7c0a8d71fb9b0e04734666c39b496cc621ecf6a63fd85d6689c5a4b5b10012de79e5b81e6ea2b84053fb6f9a7c66f3b2123 -2753f94cceba4fadd96009e7043b288c6cf59d11450fe547937a3a815bc87410a0245d88d028c9cd24612a24a4801c7628ed372176a90442bd8045b8fdd6fb08cd6b1d92fe411820d6e71efbeb57f811a6f48d96dfe954b6ab7ba669e5066506d2f914e20f18b72d3af378a7fa8af6b796f6669ddb0bc8aca8d91e0aaba0691f -34fc1623bad4934f0b2abed706bb29ef90f4e75ba6d1350a89a859861af7f50bd74a128fa3c0d2029acec59522df05cb2f6867373793e570f972c0fcff04471b48a26e73fe754492d3cd4f8736aa594de4842229f4063e06952d3a91ebe8a715179caf85c58a63fdd18fc21729712837e78e0ad11f58127db449621a0c9bde06 -f5418ef89afbdb5a6e798b6aad154606bd58d062ad337d4b732a731fed347f0372b7b3ad38a543e288fed3692eb8b9a65af0cd32f86d8a8e8c64a0f2325a890da9c29c7237d2a80a975670eab7964f8096cccecdce8f62579ecf6424adc72008cb6f35206c9181655bbc59bb4105f864018b7b3dc02f64d69a411542a228b928 -c1ce1033f7e0c8ecd636fae24ce2708cd6aa516f20f0ca334018e47cdf9b36196a45027077dd9a3eaf64bccdc3c9872094ba71bc0f9b78c5e87cc61abe71480e4ff16bd1f569c5cb10ac30c91aa3082b0c1f191c6b30d66109ca20d43e9e012ff9a3e702ab968dbde654769138df0876ef97b652cd4c514ebd2a945b4271301c -d4a12c311a589b13c01ed5bd6ffafdc12e7b5ad47895195b09bbb3e290c2fd0df48f4f884239d97caec1f1e067539e94402e1a55b297a5216388389da80f1e28add552dcd11a4a3e6599e909572bdb1b792487063356783aef4a5fd108e5fc090c05d884baf0e8ff12794bd96ed46fa1e82c67c856ea7e5dfa1ae65663054c03 -164feb5b74d3ccddd8084ec0a53d858299c2554b231160e1f03889a1b358322e0b69a0b1feefa5d88bb7cbe1e7caf9d1892a033b925b20395240dcbe99fd70174333047bad7ff3e4e095032762dbe3fe0f85c4f6bb5129f16c63dbdb999b9e2388c0f1e4746d857bc8cc8a8b35c9ca0a210c1eaf29aff944a19617c82003500e -3532131339464598b3f9cdeb376d978192cfd020c5fa0a4ede901bfab40cc8131839ea63cb63d088e7c1e0cf19c9f4a51a7707c9f8b5caeffbe67f8717aeb42f8e45fc153dfde01ff5446dc543cbf0eba6f734db9a8b3ce8d811d7a7ef10190aab3cb216c6ee9125df397a4721ff284dc066be979bcccfd5acd19826fdce041e -216d3e34bef22de35c2b1a4f94a982d82f93e4a4d4005ccb748b0d6d0744a31d60dbfe90ff0295076eab41e4fa10facdcb914f3d7522ae524062ad5946c9a427f6c94f36e7fe593155aa775a58c90fe42ddec9f0de756e330574eabbff5bbf097a77ac71fdbd6ee191ce7f21e237ca8318c7ad622dfbcd363e9c62b2a0240a1d -d4307294c743862216309b4d28b7d63db78acfa986a9dd69c2418eb8437f400e55859cdbb08a93044ba88f2c29d64964bc13139950dbf9f12dd2b3116aa5f310b52cc765af824784be95457fea1345bbb161841633aa35faee91f05896e4210a6d0379c6f350e4be6939eaf8b87e9ad44252838e4b0d8fdb95b1d611b368fe05 -880cb99391d25bbc1ccc409094db634ccc24d11bb419aa4ff3c5ce6a3eb4532fe836eb73343048105260afa52be415a34bb425f26e9c7734106c7124e4ed8322462870a962f6765114822c5fb04ec3d11ff1be24d782950563fe07d39072aa02281ca547882cfdee8c2a71998ed65c5e7e7a7c5fcc4a50a74e295d2631725e28 -af5db595b5c5cc72102c5815279aef3a8fb777d34a1a0d91a7e4b3c72830ba07b93b50efafde3332649ff9c870d2d22d6ae8e04e15f38335599d8ffec97a6a2ccceb691c929af4d7b6ace20e2567d6febcc1878aadfd28ad456f5c66ec064d1fef27c6dd0be14567abf6d04b8a4d5d0830e6e530b58f1109d36f87849b29562b -2764b5afe357e1cd83980a0e637bc12308e77297cf751b6fdd913ada621bae232476b42027dd7b33e2775963628232b31f2dcfbbb7d1c6b3ad6fc1269a727d2d8a46b5b987712a4dba6895cb012297e605e83c5f2a4ce173bc9fc333d254c62e4c40dbc3d01db9a4c2f4d538378437f6d8684f37205b9d19cd7d6d8fbe5ee606 -453941dc0ff9514fb4b94c098128ea2bd157d5be59e515ab46281ae945773227f1aa26b254c9623c6cb74c77ecc501fe753b3f18c74da9d2c57e888e040d2819d2eac6f15b47846a7fa3bd8fbd0f06cca770e176987bbed117bbc291af6ac707eaff55117ae0106d75dafce11056b759d1c149038e185b7b4e7d10b6ee15c803 -863c5ed93a7440a9da5501c415a2bee0e262958f70fa91574812e68783ada50ca85d6fe85fa66297f56616c8e89ed87fd36583b415c8176b98cb05d7c7e14503cc062b1e0d67435db1a57e8f74699303182491ce8918d94f02a46d1e646a4d26ec57767ae2ad3381530b6adc17c1c10a2f58b7c9999b5468169e6deb8b7bf302 -b4e4dc44c8c51e9fdf07c277569ae78cf872bac17c8d91b62a0b9c85c2c2b20083dbd0ef8021daf3c59f780f5b51e71a5130f10084eec7f2cd70155851c544308c8ead1f43f23b3438bc5453a0da6158b71470d7025b910d189ebfb42c0182004e5c8b89dadf00a4e93dc73a1e923a51f1062720756b1eacf350d252409bd621 -2cf971af8c74caeaa0362caf2932bd52b47c2fe6b69b876e7354bb8813ab73163ca76046d49d8ec1dc7350d8df9593def55641ab7b1f4bec92fec57abed2ef28c17dacdd06f5487e9134755bb66d215c04a36f437650f26d964b52169eca3f13d913b7fd499f509f960de4a257b55ebb9edeb9faafa48121e3306b73ebf9f210 -d5dbd3992dc070b3bb3b5ffef04534e53bc2b22473dab7103582abac58f53b21da01092744f9a1054068485af99335ac9f78dc1ed21bd96a7d77d4b9ace635242d036c9554a679ea0dbcf208c6f210caf49e981b32b1bb073c097876c17e112b4d0244baabc7176a2cf855147c771b22dc5205b51c9455e8b16a44c658c1e719 -1897a70b4ba3c47475e2c2578f4290fcaaf54db33be2dbdde4be84bd7eeb360bdedba57e450292f167130a34a7a4c77dd4a912ace2c84924934e6fd8613dfa13f663d8b19f182c01f2bee664a3e99d156c9a46891d09651fa0d7b09a645f6413f84d647a59b296b25b87a5338f9b960091562c780e69f3d57d5017342d111c07 -0d326f79774ff2ac2b3ca2a62e5848999dd2efaabef94da119e0124dfe4f082ccbce8086a15cd2f331ff878b7250531c05d3181bec17da6ddd772375bb8ee21ee704eeac290701a9dd7bca4b741e6b5b19cd2233bb7baffd361e0f427e49101e47618a0d31028d7c395d42fe735333bf050d231684405f7471235ebcfa8b3d20 -ebe3bab7147da62ba3b13a132105b3729572ddb5974ac70bd5066b7714132e0a21cd7328106db877fe1b293eabce17bb07ab80a25e68465a59778cadc555ba17a86298166f9894cfb3157c7cf2ef06f88230008e59d87e7afdb36cba57bf0b27e102232d6d516831353de6b3c1686d378be8229b96d1b8ed00f5f83b91019e0c -043884f56d2cdf984cad0fbc553f608c226e6cac44de9165abb56da42937d70e04c4f9c8a761ffb71f86ccbabcd0502e54eb4e94dd285bb03775ada8d7d4082e49e8c3adf90651692abbd28bc0ea823fd3c9ae8aacb63c9e02c5eef39fee380133a29b3c9cd1e0c8a0689058809e137f1c74a262ee00b287ee7f436dcead5919 -ee1f0c2be3b72979929532eeb21c7aa1e621aaf28fde229a08843ba8f083e61affea0196cd0fbd3151d7c8af00f50d6edc924dccfc5417f4d7d476a0555705294da89e1bba59da97d600314f6c0e968d36b1015a7d250833f810078cacd70d21206a6bef9f11bee94eea2c15c9f679fe4768ecdd28f9b641e82d90336dd2221d -3dd0987b78876b8f9bb0ce7948d10438c67ff7474150eb40202205d0bce3750708bb3d5d872571fc7126da58c1f7b415033afc0c5dc1b9e589f22b270eb1a00f04be1bd0d46659da5af8cf70e31abc027f176989b6dee1bb13d493fe2c66a105af863cdc75dae3ea3830e117e89e456c78261db7e33a18e0c20acd109a952729 -857cbe4ea0264ba32b94f8b800ff3771dd06796fac4ef6df5c6933e01c7d620845395ee6e43009c2b609cb18fc95294e16b47d5be27ada1af60df68e5b305d07f71123d3a917352dd11ad3089091bab3e1ad6a6c57cf9e830b4ef63bfc616a19d301b02ef280e693bf18afc20052933e81f4b8171977c9b28254051c2805c42f -d1ddaf78df7904e630f2ab2f3de182192938c81a1bad40bfb9c6c1d6abf8e415629398b42d075b3e5ceee39a219eb93c78d9ac9226e24e09a448d5f2d85efa1f507ac15bfc2e3839b533c1d4836b37e6ae211c8ab789743fb2b741588b90792b15661127da66e949c6ec0d4afb0ee58f5794082c9ead29bce77bc0031605f329 -693d95a2d5fea7c8e5a01b65f19db7e9203a8fcbb705840c77f814c97ff76703025294748fd48a1303e41826470ddbcee39436660635fecc4890c07887f3e61b573c1661d3cb24960b3f44a00618ffd324a452d67e53ede8b31053d4190ed8027185417b531bdbe21a2eee1b26ffad41205e2012957c12796c5018e406221123 -28cbe58497cfb88c67b20e03dd371259bba8f881d23df1f80b87709c637e7b0689f922820d138780d3b4288ea4fd88ee573afc3563a956c6a6b97e2d5a680e0e55d6c3613ffeb9ab4f383cb2b50d053555ab2b9c86907f47ea0876a4e29fa3189205ed0c0f2718758881380b482b19e41014646e382eac061cff7d124891cc27 -fa37f47648a064910e3aa7182111874c4ee4f1d1c2cc99ca2b6c083b5ba59614f11184261da8ee8ca271abb6b9e3f1102cc0a621b8c7f2f11684bf423924f407b0569c133268e20c0cbe30cf6e438d532e4ce8eee70c1bdec2521263c8a94e1aa028ca67370dcb237cae9877fc3a41acc927b84ba9060e72959abd6bce510d08 -aaffdbd72b45ee9c744409f64c9741355a4f97e6d7cbd48e9099a816297c5628e10af177267c57eddd7883246bf72d88de1dd384a513b751f50793a3e94d4308c447f3f51e3e388e8060a91e8c9847971cb9d4f035c1bcd015a9cdeb486845028c2faa44270784dc75a16bfcb59a83622c861619f448b5faf99ac2747ccb0810 -43cf47c76cbc7cfe35c9f8148eab752f097e8e0ffe898fa4526a0e6a82c6652128c1b2394980c24293f7c6ffe33e6b1ddfd9a8251f82e70e7210e488c6a9691b9fe22b278c9a67fe7190394c428a266c3b5078b131cec284908360d66ca0401e9d136d15c3aaa1d604000541b8b95ea4997a471045f1f59dc5eb0afa423dd814 -83c1e9024f00adfe64376c8ab7571f1d388a76310e88b1abeebf112a5ed7d7163b4abb65e98c4fd9b2e9765209f3aeaedeee8485aa8183fcdf09f60cac14cf0ea98871ac71ebe019a612cfbc66227e9d84e05d76846a597145b9e57c464c302124718714b76480cc9d481624c8eacfc45027aa803d71700d6cf69380d1223309 -de3e348e7a218972634129d5b781f16efe5ae37d04762094c861879b82a4d62dce4448a11533800eb2d53c1ccfb2168e6f884b794f83161872cbd5947de20524eba87d05428cf69a59dbd5ee4c5aaa5550c5579ffc6a6d652f4f371f899f9508a4582c5c11254c52b33f8f68896d2129888b414af475881147c37042283cf607 -55e77d442ac25a8b0b0ffe777380d2f6f4fc79d67e083bff4e951fafc639d01e51f3fc041e57e0989b96cc5ccb8c2ab51514a83f15d8afadcd6d31e601e5a1030490d999ab6d33ac6cde805c5d85073149ee6aa8d6028f08b6f44fdede87900cdfc201409658950850bffb7a2564f846787e005bb7f15bd6675485558d5c0727 -27561999e6e43c1724b03bbb5bd50940fd8d509eb45b9c50d2285afb5d615720775409577ff2229eb8ac5080841ac5ab6fcc999d743ab12835581b2f9fc4d42bd0cee197e39f70762134eb4c89837757bec8351ea28fd0ba8dbda655e5162d2ed4f69b34941feeac1eaee0e07bcc13d46c4434346080e0ae36fb20435dc1ca28 -2fe2c874ff6397f09b6dd1f79e3f1871338ce372fadec3d7e0d58de4c7f036253e484a9ce039559e50fc435ab55a772a71784ec57c3b96086f5b6cdf1e33b80c108599d0ba332d079986249c383f1b02301e5204e1c322826dbb5fcdd59e1101707bb084d9bf5911146d07aee4e567f62a1a7172e0512b2c587fac4934aeec26 -0162c8cc01fc81a3b1975cae0a32b54ab1b6b1c2549a7b2187e11aecbb10002281fe02f440fd4f6145392f55dc6c700da95afc38258bb20c65e0caaae5520329c77107e527dc719b433faf83f2adad7745d8666661ebbf80672d6ef78790cb293e5e9d8773300d2e38bdd9400ee08d25c1bdaf30a395a5bebb761837c9912713 -15a597fd478a7784e94bbfc40a0e2c9e57fae812694534c50a9ef093dcf2911b8edf44a24d78206e2868a5ccff8e2929e233fa797d8b4ec478f73097b1642301a00d018ef8ece24990e7b9847480430ea28b20b3b6fee493829768e4c295861d79ebf7e0bdf779d2fe410e58c87dfe3b6c3f1790866fdb70f72dcf7fcb4de41a -13c57773a0c85136bf8ece84811a0d263f0012b8e8ac71be8a14d04e1745dd1ba7285c1b273e7e275fc7ccc00b8200592cbf6e211e6005d2945fc76d93cd6405ea84ebed25fb53bf78a28862b8d5e466a3f77fa916383206c6a913c421364906262f1b758d53b5f67af84b02dfb4b511e8532ce150c85cbc659b37e2eb87d403 -0d8bf6752403d11fd14d8e8dba1604d0e3fd222c7266d8c39f65af0b58279f2c408316b53b12e0800583a2e416162ec829ed906b423f8847c632fc3e83855d080dea42076ca3e32822a897b98add7a5f148d4ffb757ea34391b29e5cda57ba0de1bd0a9a2b674f04ecc02025e0c5eacaafc673b716e329ad2f03e33b077c8e24 -f1856783cc2184e10a367955667b9eee225dd6204c8dc6b2529819a27747a617b665b91182c2e70db19c2d13c48c9de3e7a43fdd8a67ee11d6995d80ed57b70e0f8591e9d726ff764f5caca229b9232eabac1e62d2f8653037f40c7acf99f128e55d0a6122f2868216e4d3492fc90001a2adfb54f6733c7919b437fec6b1480f -2d84ac67888897ea53e2b7deba848ceec1346a1ee78b659d6f93a87723b919199b025e1e27e3414069ac20d9f22640cc8691fc1ef15fffeb417e78d31e0e4a11d1e677d20c25c5b8712994977e544c553d08658be1a96b6aedfc53436792081b4db479d1bcf58b2db12f0042a0f97b371be67908ff2bbe9e3d1e74da9d68e728 -447d28b9208ed411ba9b077e598893b0f806f55652592c59a5335055a7d1681133a53733e04bc9516fbdca4a878eeda2e56024d6b12e4ce13ab8faef54dcc32250ed5df92a19f20c2016275d035c5bcbfad7e8774092c7317bd57f4e10db591c3b6d9bc24e9c03825264604e56faaeaf074e143d507433dcf55d3752b7efe628 -b1e0e2961ae5ed1d27d9a1cd14efc73cb2674fb7cd883565164de42d8cde6f07f6ec5a93a12389dfb7e438b50b8b6a4b7982198845072cf1cc60f0e88071e31a8d11c59fc85d9673f2a234b1e739183995bff99192426833c43d0a7885fb0828ed1b6438789b567420b695c26805b5a48d15a75767dd553be63c284c2243d328 -2524b3d5f600515adb5a2f656f7451a294a8d55cdb31b9c2cdf6e56b0810c70775fe986eacf5908ec6e926e085e99fe56590fb4be75fe6bf6ac717b0fadadf18c51abcc52437073f8ac4aafa33284e5fca52ed9eea049d782bc235490253311cb0cc0062e8baa76bc8675fcb33a52b35d085faa155edc9db208032b1d7677d05 -d318ccb5452995c8a32ca78121a65c1b18dace592329ea2aed79ecf9344be8140b003d2befe0e886fa02b8cea98cccd3adae5af355209a3e60561cdbb6f2a40e31b4f0439fd97d7afc653e7e7dc3615a796d0c40acbe32251095ef1b975ad10dd411761fcea30a02723798168a4f18377c8822ae0acc4e5ad14139b8c23bfe0f -230aa3ddf108385f82458e8cf8b4bc62eb27488ccad7c86b4de68234370cfc264b1c2894f500cbfce36cda078bbf28db5f29a42bcbd74d7aeda413c1f498e321a908b753f63de7fc0062a32c5bbd14e423f0c17f18bc0777f33254076458ac2f5513e8e53f1d3fc590c887093215eae3e5ae1392b358d7308ec948aac872c21d -e44fd2f42b3013a8404cfeb1c46c81133a2f5dddb8142aeb755661914b78b9037ab4e921ef092473a4b09814f6f30a854be269b0e104d6f6b69f87e9b007fa063ace8d83a7fd2dd6f215a00d3b83e82f96ff045531722cac999ddd26dc01072ee89b37dbc896b3ca376c91f1c6c84208a7053e84d52d2c109064b3b30c633601 -71b1e9fbe6afd5899ac0b29d4aa80e6c70055a1a46064e5b6c454c00ba5e9d0004915086755db2ddc12fade648727c59d11a28d75237069f5c18cfab633e9025853d891133e15e422bb9f64ec6f611172db1e3cb29d2e5570343d3c91197a42498c9ea97e9616306ba94cec5f08f9df9d254e8cbc3534e37fc2a328921b1f019 -642f9a0c16cefcc59a0a90a679bf5efb0fdf3a2002024cce1a31d424437ca31317aef78e449bec3e753a8d347f0b036b9172bfe3514f7aa14560e67f4602770b3b0e610d053fff47760704c341bc9e82ca808676fdd7ab13ac65c9290e263e2fa6d310aac5081f9c07aa5c10c7e5f26be250c7b82f5562dc827bc9dd84ad692c -15411922ea3f1c21a78cccd982010d5fcfd59967af9196c6cdf261def97d4a08bf870d184e91a8c30b1ff2c851c6c9eda2e6960d924f984c0cbb08f291d8c6064a7efc6775fcd7dd56084d106190739f95a23521e212e6dd6354511c162d95052922ae674c4328eaa5534d934314b320d8d34cba056d50b23b1836cccb04122a -f2cf634b8036f99de75da50210c0666ae1b185d404f303312b5944a4095ce41fec27b80faac4114507b1047360269085f8e396b34b7b856b682581a662849c22cb056de6ea0f37f0a824ed382f8dc3cd40a324caa37724c8b70c4e4578647b03329b8a6d524f846566243393db3a5d4354c84bfb7f3741242f61ca0f66976910 -79d8ff4eeb8c435d1d1c1589a56eadda4801c160b23a41af020ba5a03f30a608a3c0e5efed74f0caf9c31a8c7814c47cefd13b2a72a0849114684473e630e41de36822902e5bcc50c579a032f3553d52b8a473ef81a260c67d0912c5e17df90b3a6bcb21ec6454ba781993ff494b5c7fc3755599b742bd8ca18ca80b63ceb807 -b806e79cba622e1d0d880b03adb9a5f0a0fe08358b7514a1e4dc70c5392d6e2c8cd8555135598ea8114040439d956777f88da4842a7a16a941ff08f4e93e1a19ec41f80f64d023b64df2bf398419f6aac5e527075b7818e854e7dc815124250bd7b2a14d0d2a6b269c5841ad5db55b73673b93dc2da64a0189e63f0636e8ae26 -ee207a6deac433536d65b11b00902088e2546b0fd723685317541bc8d586c91d9a2a62cdfb68d8a1eae6cff29e0dc2f5a70c2dd2d989e62a3053f14165f963025e355d7ce4facdb7ef5d06d106faff00074c69eac6a8c057078ffcfa1d7cdb264bf26f6c7b771cf0119a45859cc0ae43d17ec15ec633dcf40e527828951f7e29 -2927e1f0a5d2b005b9406471cd8e99e365f108b0a50a3e3099445880edd7b226edb1f38188bf7d9999d9f8a5f1bac6e590207415f829e0cca3ebfc87df8c6601e3c5c41ea52d79cb3d4fb99eddf4f7286acf29363bc80058ecf798d2dba3e227a9a2949a75755de52bdc14d76257436f892e70637f08589d706e67c1a2a45714 -d8917f04dee351ed9b09aece4a7e2361c6f56254f1dd71e00f6ccf89e88b0b2d68b7344fdf8cbbae8cd35f699a456fe595072076491ba23f8860b6257210f105daa7996771907ff1b28568354c5d3462e4200b137b3073e3cae4a520fc044104e8ed1bc9d593897f45c9910f3f236d7cd94153271f2181a1001b1a2c7a585817 -4fcbeaec4dc081d99e27b17002529f609c6e8af8281b17b42e5a3320083b6512cd31002206b104c1f7c4dfe65809fd9c793ce5b1c4c9daa584d216518aa6992e6354f4f6a4166aea28585f40d7fbe1c0bb9c7ed3562215c057c21e26a9b84f2757c4108707b1fcd9e9fcd34956f7c80d86717fba58257e7fcdce2493e0b73f0f -a4de56bf3a40c01a6cb805301bfc2b261f56584b250eb4e7f5748baac761212a17db09f7efd8b922b919208efc52dfd430e5c069af9ca9e33787c4814b59e9130df69523db47ec16805b4200c5d22892e6cee8c5bef05b00176ba5ee448b4c280b5d4d3180197e9588a8e261c60c5c821613081e107555b1d596d83033db6a14 -1e3b48a9004d7aa7c95ce14b50aab95151db5057eb6663269c0ffa09f90ff507e10e1e0c332b267be88e8c8d9d5f675ba203521527e8772798d3dd7f6eae9729f2ec79825622055e3a8d2fe2451447eb47d5eeb6df122fd13a690a8ccc37582af69d5fad187811688e88c62efb1e8b963eb058c062311b497e46a4e34725da16 -c860b4c65a9ec42d0dee1d6fe48d63452bbdeb741ab1deebb6021f5a0d625e17ad7935bb671279e5b7ad36c520ecfcf6f1df91da1c61a9bf9d4fe0d39db75315a4acdede464533b91cf7499c0a4f128dd01650f4306709e8d28c35804f0bf8039fb8daf00d8ab86179d374043ee20c66b552710bcd7732845a689b5bbb5b8000 -605be7ac9b23dc3e54bd694e7a0e3149f01b950be50dc7dbdba8863b055ec51edbfe88baf4ada44dd4f4699b1e42f25b30d9320998140165268622e7a0b7f711841bcf45b86d6544acf45fbe6aa4a6fdb931854da6c360f1d41568ca69f21e13b407c59dd84b81298fe4457998f0bbba061b36d3f508ae2f6c791ab616587916 -373868eaf8febbd7606dd16486aea26f34e8f28b9633446fd84f9f5ec3790c14cd53dcb11f0133ac6bcef624455293f021013aeb03a25767db0a6080cbbe281c1c7d9e25751830ff66aeeecf3e90923e744c3b34ba0e7e6930e41975bbdd3500e967728be32429d2d9f048829f1746dd503001ac31d6b8d5d88c9ef8ca6eb913 -7e06a3baa394c500163a7be7a2b50e5dcff255cba96c6b2bc8518344ab8b001bff85c9039bb7c84cd4317418bc44c072cc804f5ca4dc5a864fcb323338f41f0250683b14eb8097de4f139645b84bdda6d5373859a0a171c1fdea864288feb817256d516fee435005b0251de05b8c05ef37d573f54ef75d2dce620939db5f0611 -828213f76d311a7a6ace82cf320cb041f8df8fed19eb43b23246e76267e80123dd8233eecab5bd92d6b382813cce2624350a2d200192468bd22341752e8b3e1cbdd02bc1d64da2f10545aaa2b0d018758bd8941ef5f4fa606755ac6fe33adf289ec9d9a2458893370f5334c2b8a99b018baa32dd85e59b1330f097c752a00c26 -93e74b80b9d767c7d654f9420f6e7dd4d7f0cebc06e3ec7c79b2e9d9b08ffa0c910cfef57c0779dd68364ba9461e98f5e9ed5831b9b10fae511afde59c7e6115b2ae532f1d1813778282a85217eb66061f976789b392e45bb5413d296184fc1890f31b2be4f96979d856f490709b085498195ca9e65b81636a875f58aef4eb16 -75de910e144d0058618edecaa30a82329ad79023d620c268183a164a36be7c0a747507ed0bcb274ca63e4af1af5cb12065101e20849fe2e624ee11095ed15813f873791e62b4657238a89811668d18a5adb896e23a9f5c821da9c4697c85ec01cc03b2d52ee4bcd4326c4c9bebc7537998f8f50a9af5b3fa16630b60f56e641d -7f73f9280348e336f2286d7b9d435bdb10c74b36e4c57e59e6d9924e1dd6011971c8b38e9cdd585f9a577824175bca8320d60c29b5ede726465446b49e1842028ed7f21237591e0acaad34ae855f0a0cd80d4fe2bddf03cf4ed2fea42e2014307a791b32c3bcbc5413c0a141301f6c292743ee8c4554576913fce6488adc3508 -1ef325e012e3c82539cf4e33d78944b89f7e64883a5894557ffb705a77fd8409dac4a19419382f95ccfe6f2dee885a4be9f1b4898667578282839412a30b140fd8d2498384d603d4e4082127752d52d6cb8f4415f23e3f0619927503daeae209674b08fea579140692577d9498b329ca812c946ac8d5ae0708bccb2620783321 -d5d606c8169370fc7c69a8ad7ed4393f34d0a184c796fc3107dcdb8d6f04b00b7617118f3738077ac0daf66c2297caf035019b3e48d8cbdefd5009b101bc2c1c1774ef533eff0b19945f2ad66fd447a263e78aac9e47a751a0613c3a5f873714b026b31f04d2fadef27951807dd6762a04422e39fa479ce75cb52958257d851e -3062f982d0681e06665889fd06ea5e62e872ca344d1cdb6d40648162a1d6c90dd804181d6557e9da6384daf2a29b6589e3d087060e39169be86a1f21a59758056617c9044ef7974693da88ca0fff697f70cada2cc313ebee365f71080522d70358fcffb5806fc7305c99b3276deb687dcb2c277462697a01194fc0d0ab959c0a -d43b28a67111768b3fc16c25fce0a389896133113ba15aec7b2b786938a6382f8b8edae28269681234ccdd46352f19c724d233f713a7e9670c0fff0fb0092e21937982dd96541984ca5663bb0638c46a07d9d56d3924c048be49fc70464eee2fd11bb65fa33314d325c1ce8aa306a2a7679804bb58df8634d4233946a895552a -e85912416ee1dd02e57812982ab9a28a3991c17c1cf6ff873cf055380458ed1dd4b888c7c4fd0b35168fecc052e00dedb2d5734ee984a1a279e75a213e41712ba1441cc5426f8e71b7856bcc6641275ad260c6b7911d9d5bc8cc35a63f75e70e69e66c92f9fcfcaf0144b26cf4c4a8e32e32f320c0e62f65c7f28a0aa5c2e70d -a31e71d88cbff74ed86401c1deab84e67b7046c413ba4781d6bae3525e741f2e3bf4ffe1c1543cb3ca4e64f4f2080c76e85186abfd5cbfbadce21737c0e5e3161901d3dd9b701024d8473a262ea0eb01001a51e11a18b86547b34a088b63921fa7169df6339b6790e0040dcf094487aa54ff5c2f5c219a16e87935ce09545e1e -6c1d632ed640d51542ffd4faa065a890e154318f2c89d20a0276187f7ece07220f26878281ec4b0506e1505803a89602fcb5e94b2bbdba91a7cb51a01026721fc2534c190b0c5b0302773da56154516fccac397d35c41c9876ffd52bbb3d9c1c91f03d002fe6ef28fdd258af77180e631a1168944ae0de64dcd72636bbdf7e07 -998ec6336c3b880abb81989018e38bf0196b3b43e1fe681f5e66b730c05674230e0f28e2b5f2b206683411982c1145e53d86b5c35164f2d752151db54983ef1e9407c4589a8617ae13f7aee2133d75fdca6a151648f68d1addb2072db58906176c4c27b5368104b2925a33d2d90ffb841c9e3ff6f3a743010e4420340b6f4602 -6de260128c60539d879c9be529db9f4c1c6cff3d6e6de3841eaa9b0e10bfb7143db52d5f308ad8b514087fbd03b1ff029629e535dd5e67b43bd0421a9d54be2c91e57039fb10704f8d5b1214051343ff1ad82a3a32e45e2f9d7fd8d1d940661c49aa90e6c0adb245dbb694dbb6c98dcd3a4408d8dc7412a2ef4692758ec2f70d -64f720582a0b05ab084de81156a8aca30e2b7337d2b887d6d894335cfc29182cbd772065d14867d0d5ffd6906b7c1f142ce9dd13b90843de25d921791007f01d1f9522c18f2396e5194e168453da1306155d19762cb07e8ace95defcd4920d2ba0a211e9d3c72bbc689a5198b8ed1c4197a4936c8d770c3cb4fccef8f892a71c -ef214243461e4d45f19df1945ee567bdf544e7e19152ed267b7d8f4c8b251802d3dcfb7f778df3f60724714e494beeed410ec8e3c475be90f9e431a54d3d3d040724a3b05297c44746a644c3f4db35d8f895277f307ab1be156f95fe3499f5047e4b0e25cc43769b8256098bb4ae57030527f9f5fc4708968d3e9ab6b142d32d -9ead0cccddf0a0d78b308a3fc78c62eb24418183bb1b7c424b3926da4ee54c0fea52112040356341d3d53dfe3f18f3d82c8e488c23317103fe4b8e4d304f3a0591160c269c4497f91b59981077013b7f673cbae98b6ba741fc5991acd94ec60bd979e734486d7fd6b9be81e8a4c3460acf62bf97c31c4ec409da49cfc94f6217 -33f36d0844b43c8eaf544a2e6b249fd5b2e3b2ec4cfd4dd8574433111709a01b7d89fc61be1aeccb275187245feab3cce78ab87536e4cf6bd3f465fbdbbb2d00235eda836a92e7b4995ded1764601310bd54e00d79f0691f90ccd919ca655e24e5d62092329d3cc6c70c6639b4306d1354bb817b9ff900a39489b7905f9a4f0f -aaf11b6459012c863bd13d418a5a9327ad3f13a45fc0c2de95cf04d54c52dd0dcf13cdb6dfda114d6dc4e9d2b0289039bc32c6fff7383a37896177ca6ae7620b6a8975c68fa02432d7522d25705186013b211a00edaede65605860ca5d2c9d1e643b614d8d8d41d5583a5f8be87e801546e4f0a287edc763cdc3d353935a4812 -e15b721ee9607a2d706193f0a14159d35b63ac2e85a224148511801bb561d003a84557844b18683851bcf3d2d0be652fca8df0a02874b89924c91ef1ff30c225d49e25ac6cfd393eb1670906070325c283fa13655f66b04827e87e9531e4a52832c6552d6e347e5727abb7d9c4979dbede3368101f8a79b8cb14d6d76d8be61c -1a7b82f92510383c866b41cc1636ff5820214a13f90e26480634cbd37aaf5325c4fd32b92062acccc6a8a05dc5c47a46796b7a597f37904612526a41ab87520afd5afa4cf496849c6e3f142f8dd0b47d66b8233ed63d25a2e51582b823e059181eec563180a1b1981adf46aca9736519533f4ca4df48119b26f5e350c4debb02 -4519f473b8d51b884d71ff0b12f8b614ba238d75f5eccfe3598cf89c52a06f13c6e1d692cb3dcc41e48344dd8f536b1fce7b6bf8b185aec3502c628decd06227699787af1208449d21c0a191785f9a66157a54a01de85e1faab9187ccc67341ce8a2e616231a936f2914237faf002f1dcc09b2f1b6a019366e3faab6bdaa3c2b -fc47d90e335e8d6e3fa37da635a0e40bd80e1e9da6e7b034f282fdc3b78f501399e90fdb9446af7854aa0846e5c61aeb20f1204ab881f33850808486b5942b076bc179d48ed8223a0f2a98cbc91d07950bab08ef8159949fa884676c37a3e82cd695717fd209ebc1d0f2eb07304b7ecf8e505f3180941e17a5da74b219741a0a -c5063e60a8235823b560591e21717c8b8c7fb0fbc6e4bf4de6c241efc1aa20247d509c23ff1b77402c93fa45a8167cd46a353108078ce8afa047a42c00d6cc2687f90635b3fd36287485e7baad48529bf8032844e954c209297b0e72e0eb271793ded8179e4ac75972921d1be8ceaef8137b281468ea7c40d012872b9832c103 -d5bde18da89d3038e933a242a0862965c287db749f02cb30f7f0737affb4a108b170d509664820cf33c40af6017cc9d8f11afce10b4d2ddd17a89492404bb3215ff2775cc478b959e454ebca6d3296e36b78d1082b94c5cb420c355826f8ae087eab86c91be68aa0032bcf81922a78fa93db712fc156b78e7993e6b7cff8791b -4e1a3c81d667e371917b2fcb8a8c16d9944cdc8fece60ce938c95b8228456f17731920d63756fd4bac39362c5e3746e6b2c463ca2768bbc52bec5f3e1a29e42db63ba26e98646bc73cf316a99c45a56de8a2f5f68df20ebe70f8cf9f2df9470abf625cdde3439055b2a5d0b8468179582c300aa53388e63ca68526adfda8ba11 -8b87fea42c7ed98dee427dc54c217e0be6bbeb84a43d399d95e9aecad5edeb2199d9ebcbe4cabf8856690e2b70bde1253ab8ceb333abac96b99a25ea855744073dd8d27aca9e8084b35a69f5740ab20a8f15ca9def9f92d66009e0dad40ba32d1d34db3168930992eca468a6ce37805b8ead7b90eb98af49b8216c02ac9d0601 -0531723889a9bcd18e8490ee4457ec4e4ca5b3d1934a5411fcd92f43fe1dd31fb64ea509d4fac5428131b887216d638427da4f7e6b120e3e8dc732ce5fcc0f2677299ae9c7b53e8b890f158dbf8ca26ec63cb0529c20b62cd1c8ec386ace56108ade4a47b70279ac48c53e3b8173e25a5655b6eda9f2e8d3c3a2d7df9e5e6b0d -13a72e11270483c6446559a6cb3d6e7426c3950d2b6de0e911221329496d480bad9aa9f2e6195b54c62e2e157df48263028cc1fe54f8e783d0d38e233e2e4c14e23ca1b128f22d9245687c80b0bbc8c867a74059ec0e2768967fbb15092b1b0a21a699da900555314724d66f77a445e0a75b3122c3e42d9b0f42633cff59e807 -ce531037cc589b50e511cac093dfa496b65352bd38357720238cd9878281bc001fdae84fb0ee0da1130037a56053ac59759fef2f8dee97aa6b7a8ca43659f11627b0ca6e24b921f16ebafe47fb32a9d45aca618338218a8dda2e25d766e0d71d6482109ae0a4731f986a1059e1527c11ae7111f010766377b64e9fa108151f0a -7ecfaf066c68bb2c315fc6b85a126db7225867a90af922bff6328fdc85ec18047885722c0c67351f8616831569a84f07ad3e6337f5b48d1da900390b82d75f1fa562ac19c2d8ad81501f420779c7eb5f19bca1af7fc3ed969643580bba627e2e7b5cfddacdf1d1ecbe70271fb0ce0ae2ef672e6d2e5124e37b6eff754f3d8911 -0d71dc4567a914a665a5b5cd9bf3dd8424ab41b5441366f8da4a2750f6d7b524d92de6104fbdc78e7f2661e4062028e1ec7a865a12802fb97e2e31ab2410590a577bee0e61961e8b640aa7685e1d4536c67f94446d767f28da4836efbcafe02e130b7338166a0629309b59bb4e7c8b30e2435613c3f570d4988a9f5f8f90972b -b201c08a75e7c36bf276d77dd24caf2b4e2206276a6cbb61af82fb18f0355e26a0bc699849787a40a5a41a2b02b58d66e7024c4ecf92168e468924ffd6fe4a0e6f9d6e088835b178d583fb88d68263272b7791fff7102d81c2cbb81985defd1905ec58528bd906d5f9db916d243d70be630f5a5362ae762d41d71cf473f96e06 -2a964374ac4a82e15b6909cb5d197144ec8f50334ca6451419b43739fcf5ba06fd52765b85a478e928130576bfd741c839fee515a62543e0cee7391d2a13052ef2dbaba920f53c659f354389e95c2473eee756dc49d60f4ce9e3c21b26aaef1e8b207704e4ef576bc57202b48fbc0088853fe7cc04707ad8774a0ebeee9ce604 -e35ec641f32f0e484bddce527bac0d71c70ff42d6a5fd1ddd17689cbf0bd7218cdd2a38cb0c121ae426dbf2b70bc42003ac034727981a733658b29a9f5da5608a171c7a896ffeab651abc231bb757129613cb4acdd85440470d84139d0208c113c9a95ecc4c69d250461f56353b378b2b922ddffdfd4a75d3a456d712a566a01 -7b3661ba755e34d993535d1cc4eb654ddb4fbc28b57b6cee1de113d1a19b4904fabe5bd5696aeb35bf32a2149849e8895bb0239adeb8227de793cedc86038f045dde27f081605f90c2be7acfa45565eed8edf071c82548f63d46279a3de2f8221e2ccd03bdb9f968dae8a052a8c4c2d1c1a9ae2b7cea6d8bbc87675811f94d24 -a584f3f8b231154007e1aff281ad5d59c2521047d18aec5b5147c8c4cc35c22ca6b2fd53372bc8a220cd485fa944fc0d323396530b8ff44db2a843b88cfba711d37b41b16a16323eaf48295a3e4a9b8365588f151a1e0fe9fdbbde3f458b722a58bc22c38db2db06d4c7451aeeba26dd4a3bbf997b2792e160e3b5626e49ba22 -361bdebf09b7757c0db94678bf2f96dedde912d56e2711023f82bf43fa122f1281a73a9f7d950a1e6d932145ea75f80eeb6819eced3a98e72cc25ceb6ac81e0a5f97487a44d547c74830496f62fa9bceda1da2b8336a0758877e80f4a3bf3d27ca7282cf0c345a1bff36b56b10f31ecc9fce200c89492c974a43c4c8a475a729 -a62615ccda97b289fdcc82321ecc8b25027b2ccb608f9ce7d7bd1f9df13deb176e6aa76428c80bfe4a8bc76cdf8be90a5d53c4be44182d973247acf86ca3b328796aeb893601915b0bce19a0e643c7aa951cbacd80a98e2e36c4a3b57eab3b09a9e6e70d9cbf1d1a242d5c18a7edac08dbccb50fe1d42e285921906a4ce7511e -d6221a387e76bdd7c0ce140b2bb07932659a644509a2c08ddc896327d019a2100bb74106436e613297fbabbfa3a2eacfa6804bf85a0ee0da98ae4629a0525f2959f02e30d36b4aa02971bb3e48d72fb1dda5a19da77d33b4c9569c1a1036e40459384bc496526519923153b2515741a69fec65c223cbfc23c7b0d66bafbf710b -3d07b6adcccd4ccb82738f3e21df1ce50bcb69f305369a512492a2fa52fdac0004fe792f0d7dd1adbbc74668721e4d8147f8a32e7caea3757c92d19273f61f1674a610e59045819fd4d358c09c7b308bce1bab9b5feba93a27dffe77d4d1871234df73d3592fc943d48725c40ed867f591b04a0fb9235f3d0e42ae90a7b83d12 -668f2d41c00dff3bb21809ecbba8abae6da4461469f6641968b953b244ee141a0abd7af1c8ad88bcda0e3c1dabee1bfdba91426d78b595eca4b50700a1d91607910722722b546f67c2dfff151a7294eb7a70ccc2d5a662fe16be174b3ecc34267feed2c435afd8cd7827bd4fcfdfe8235fbb231d0eac4781709c8cbfeaaf700f -5fb7cfc1844825ec315b37c954f432cc5448be230f36b1dd7fa97524b4c8d612ad30d7d5ff521652a9208b9f15b5d4b65a7ee02bf9b70af13459a652297ae92a1efe35abcbb845f8a52e29da34995162b7ff29e784e4162937410fcc594985128d9e146a8520c2cc7c5066d2029ead14ea85d2d2efcef44b3459726416eeb21e -7134739cc8de46e7b7ad4170bd5b861a736c1d8b3753fc2835f7fbe440cbea1a65acc3da77f6a884df130d1300789476dd4a0645e98fc9bf6f0ae5d748b3312c65aadf95b62047b9b9468e8740d047efcb0c163f3dc1261c269733604067b32bebbc5fd26e509c260a676455ee1652cf80364e3b48755e4db19e5bbcda0a7007 -6bfd1fab6ce75598f217750adb9f1a2db31ef9546a28559fade8d0faf819352de2e200d0b6bd1471eb0f9b7ae074a286f4d976cd85330ffadbf5009bc8292f1da0d9095130a4a284f14594ee2b9de34e4e30ec8c19f408f2c5e0fd4178fad62d139d86760e5d6b47b6fca403e6c69d682671d737a7cbc04506f98601d4c0ad14 -980f36a1114cc4c61476b9cf9ecb070eb060cbf4d01fa4592b923de1262ee82444317f71462786a63500253df638d4ab228cc0329b897c654dfc9c102d573420f7cb929594d9627a3c5acf3d605e6f5bd9fbeb33df21015498b0f48bc56aa60f0c5ac5769a0815f09d144ce14df52ea4b00bbec727fe683243b5aff5dc3ff12f -9a02ac0b7ed338f3e7c23fefbd249eef40e9f21f70bc3d471a583fcea81a490ac885c6e604b2909daa74efc0a4dc216423991123147daa77cf669b5b15c7dd2455b7b71f7a874c21fa50554dfe8134855f0cd9a3f594b7b87514470d104ffc0ef3b87aa4ad98b84e8979f8d3e58d9122dcc1a087d8dc4282e7632705f0bdb220 -b301825ab4ed5f5507d541073215dfcd5fcc3e160e128bf7876d15ae754bd713e55b055c7ab1b5cd4e715531d5b704e2e6f1e9ac2bbc4d2f6afc8e35af8166263e12466e851190071c4bafa3c9f2b3d79c1d860086ab00526cedda570bf9f01edc4b8947a8cacc5e2859224bdf1ded1d4a1c7d2f55fba57ab1ee3825bcb93a04 -7a0e9624ebbabe520b3276e6052d7207830ad9cea1ba2f2fed6a798b35a4b509f81908a9c88da7b86e2530f4b7ec621118f7bf7c66778c77e11d2ca576ca972c9ed02c9f5dc718096f9c4f8aae1422489a2080c1a0845e267490c2433d37451d0d0c75a114ad3b6e5645640aa3936cb999945132cdeb969d6937fb98853f9410 -c6521f878ed34d3639ea2408ac1a819b53b51e7bdb8e6373b379f109c45be82c082f888ddebfd265fbdfdd3a2be25e61c0bef53b053d167fec2204716510890d8c4ed4fefddd02b6468b71dcfdfdd198575b1e9cc0799713ae99e90ab21e68270f0f9daacb87daaf90cc0d6aa2a8487f1dc3b509b05cb05deb0b3c0f5564a918 -05b51c8a225d528762d12a1c95245df45ec31f9ce718d0cd2d735db92bafeb1e13fe0f7b273c46cedba00b6c95eeb169c3fc089008186668eea66bc141883a00f31358f9a8b49b9361bf2853e67a8d10753e1540cf39d6a067836dcbfaaa950db38f5041529a26500a4e3eb649951a51877de1722c5dc95a2824b46892845717 -c9fe4079c3a08a3537572a1a9d544380a1bead63852218f7968c74c31ec6b10b6de1d9c43cc977f9a8c376515816524f0b121828cee3eaff4b033b7c932d182340efbe232aa3b2abac4c62b7d8d11c5a2d729c1b6912e25da5edb0a3bc617b2f178336f912edf5820835a6bb4b35fb12bbed434df57f3235a56f9dd859d32805 -6d08cc3172ec81997ed4e91bb8d9b22056d902b41f28e2e585afa80f7145a32ca147794753df0022e3758e0aa6b624767e07842974bb6ebeee5e6926e699951d5ba69f80d8237b4dbc97b5aae8beb698a9d7257b6f521dee54e3930b8dd93c1de367d8e28fb0bf5686f051d7d988f7aa60e9ca192684e3b987b2230c887c1a10 -d3d54b23c4ab8e2431d5626f7ba441f9df3459e1973f293f46dbec9be829e41aa293e59ba062967f5fa042c4c4750c00b0cc67b29c1e363282a7f57d157b47290a0b94d2fd9e8554be1d3f0eedffd524432fbdfc2800f8611888b25d7b05190b08019b043c262f3dd4c97da9bddb200122a421c0cfa30c383580a0c0486f6115 -00b5fc71cd88f7f8306d355dbe3f526b42240d1c3e2c14d7209fa49a99cf552e19c6e01c0295f524248f145cadbe2c617cf410a4b22c2f175f9444b54fc8c305df5a1f152df7f44d0e3afb7f09a250999c76c74ccf604393f9b5df366adaf313aa0c3d03877b2a3b1707b2231a6415b787d3083410b660db4de7ad6741ee6b1e -c582641e6ca606856bb0086bd3769a9f1d831df81a5d7d4123afddbf38b6f7004ab5235d2ccfe63936c06bd9f73f8dc1a50c0085e0c1208ce769f7d0f9770502a1d87c471891d6722188565682e3961f6d7ca9ae13ca97e330321646ca00e013d288cce8e72d07e3c95204bae717f5289f39871d5efed637c0c7af7fa6783a1f -bd3e8cbd3a4ef807f6713ad3dfc05778a0a8f3b1fbb60c1a435c6fb99fada3021376dd837ec4aed56612fd65c6a4e5978db51df2daba9b32a742546ca96b0c03376138ec2364d10bac7a65cbf5ba303066494b41f8d3da5372de36abba4e4e10872c4238419eb4e61ab06eb912b146bf323ad4d1c70030f8062e7fd4666b9401 -acfaea26e94889bc54c5be341800d2098eaab8749f502ca86adeff9377e9e820b04b1fb1ef88601a09d5784098c36ec7b6fdb96fad3b591804122936d109bd1cbdfd50cf332db417536ba53b4a6e98948ad29702c2b50576b43ce65fc418d815ad52ae17824accebd668141b8cfe0970c050c6effd0f786c0155a5cec87fdb21 -54155781325da97a92f5bb22aa99f1de9e9e7cd4e913d7e2fdcafc392918e616ddf2dfe9bb4b8b6a566bbfcdbaf1f7218b570b4b5142082e5a21266f9a2a03178920d2c71225d7da1635349f60ea0747f5d44b57e0622359fcb72f663e87f528904923d2041f538b42cbdb33d853007ffcce658a07bdc1097d452d93e9500d2c -95b34fa5ab63a3f233b2dbd5496484852515c16e3daa1adecd605f4227087b17c8799cedaaf7634bc1ad89c11683b06b40fd74d895ac221b1a729700e8a74f0ee35ffcb43576f7256996759defb9ade293751f64853d8fee540dd734098e512b1e90e0315f779fb1adbc2cda5a4a17aea73ed68fa032aab0132ad3a1cc744821 -e1f1999605c122e2d81819777fd8ff1ed8298c7f6538823032e4e817c625440a0e05682b79159876c7c7c80f41f83a888190455c03d57efbc70ad860cc419820e992bcf8ec63d62b4a5e02e12f55909da4a969f2862e288655614c2d2f48e72e012f9abc051c2dba225517ebf0ddec00c623b504d108133da56864fe0871bf04 -c092e98f7e060ed6bc5c7230714b0160e17e5d3055c050250955fae554758c1748202d8329eb6f0a9002338929d5be12a22752000ce0d2b2d698175f6b4dce19171b51b5462ce723bac33bbe71b46212bad6ab366fa131a9852686bd0d778711bce69a005a9f95b465459b3e6c83ad2c5473f2f3283dba31ee2492502ec3cc2e -4958a0be1cd45e01645efb2ec1c22c3a650db98ca2657c0fc0f9735fa802c10c04b5f07f6fdc78925b447886438de0e8def84a2b10ec7c4cea0f6e7c02752715147dafc63524614b3d93449a068e983c5460490bf7891033aabcfe4df46f9d0ab69f4edfa26bb37da90b00f44b9582169e891bdff0a5ab30208bd769b5c2352e -baf165b276945565d6be592ed2ce50133a2170b16c6f48bc582a9af3f02e161a753fee2fb664bf0343563154d1f73458aa28b03e524e200f3e0364269041a1287cd4edb5a2f4ae334b1f22ff3203a99cd1f3f4ea88e9906369b5bb1be0960c2b17c40faaaaf0cb8bbc4df776346db29ff2fc45a7c55d4ca5181b36510aeb9623 -1c9186cf5fdcec0b9a2609eeace33fc6fe4fdad7eae77636567330fec2d59f0ba37e8f114354e288651350063a486f38e30dc671466159279aaf80bf31bdb31898608530c416e702eb1fbf55a78a220efb0db44ab48b827d23c5a51ff307491513a2534672ed6d7e890503912afebd9551d2d8486daae8ee3c8cfe6c9b4b2811 -aa4729595d12f1514e2da0a546491e3126f8f2ca800c76dd2fe2bc45613c46163f0b919b2b2098f86bd97e968d8431d60ce905b01482f59ba1713e6873069f1c5e81b8fd05aecd02bd1bd3a8236fbe9b1d501f9317a67135d3a92cb9276ef61ee08febd74e0bbbc77a3233e43c096b7a541597617d5728637c589a6cb3bea41b -d541f9f81a7d9390ad119f3870dff35c24f16b051bb6414218752cd55783430f963b201a8101a3013d6f3ad1e9fe9ef058ebb7e99f1ca28a10e33642c0f2b500f7f3bbdf494db7eb924d055ab3ab378d9312cf33bc3055d6e4af694c5dd08321929eeb051f207a4c89aa6741355b32083f2501fcd3e32b97ee6c588674de0404 -4f09487697bf1afe215dac2ee9187809c1dd5bee163672cda72b6f9111061f1ceeca36c2d6ce757ba7a7108490f1ff208b80f5e6034140a5726c9ce7186fda154862c20f885470405fb4e9bd533fb561a24c82fd57e14363f4dd828c9bfd9f14661dbadb90d0408a256dd075b5c5b3150b221166f7315bb129ecb2d5584b6d18 -699706a4d12bb3d0359bdc98d3b56c99c7a8112433eb3d1ffe0698d0bba27e038a005d1e873148e545be8bcb057ac1aebad280f8f2c2c0ebc1b8b7633fca3e06734502463b7d1002762a94ba765aec996356efb81697ed7185ea6427fdb6362047487e758e7ee3549dccf7bd8683e80288599c125ae4ff68f902680c7d8ed803 -33279a9dd51d1f1fa8451061a55b7f8fe9418e8d3f546153f8730fcf4777cd1ca027f0411bd99a8dfe5fb114224f829b12333159af28d229d508ce0984c53a0064f2d3333be5801755daff337d07e710951a7f1f27479372363df7df64938026f432ef3ee3f7e67160addb05d293ee963fd8ef1e3c32be2853d1246d1b9a231c -cd50269b2513bb1c671f9c44a0fb861087de3ae60248b3e5c86d3d345963d600ced534ad662b0ed1dff07edf33fcd782473450d9a8d138499cb2142c2c1b7d15e9777800eaace9907dcaf8fb9d1cfc19e1f84bd5d4a301bc0452f7020a6e8412d0c8a9d5005a64eda1b0251e0e8e79dbb2b7c5fd91c1069f3531ce86be28c90f -c49258f061380d1b786a5870e52015c70abbd4a04f58e139f7980022d15b6f2ac5b4cd1c67a78565d6b3b44ded1c42d96fac33c5295d2d1e9bdec0842148ce245b5ad6b6da453518b95a4b010f7aba635988b2327b1cf0be3aab7b19ceea1203a88cfa1943df280d4b9a22d968edca6864e4106ab775bb94d965328489980301 -50d9236c47211c312b4501d0d6ce697673777a73399289c2d624381639b92a292723aabe798106078565b32c993cfe4dd904d242ce94bbadd889464d6bd9471f3c53d2e4ce63ae32a470f6f9e34b78b80fc58334a8470e2904c2451ca4c53616b7c1ccffdcc29910586fa9ba0afc145e5ab1eb331fbdaee3a0785d2580e45609 -6727f720d5a471d9119307cdc0f4d6c17a60d080867ee162110fd21869a86a179824d4bc5df951d16b280915e263c3d477f0b154b47adb6176cd8dfd2392b41e3689911efd59f05e102370bda8cf4f2a169071fd08e52dd980bb91a6892f1a18845b689570b968a57a90ce25d173d6a1a136feb0fb0877c12ad165cea4df9c2b -49b207c892ab16ae13d0f1eb7ac93c9b440429eab55e69059e6291b66d9d3c0d8826b9e75448fdec7600bad5dec400194dea032be8a35fa49eaaaecbbdf0a5237b5819a4da7b2a6d83679972e2c6b51ed23c94871d1db0ccc2c808c1497fa2159f0a0bd5dc5d64251c3cf2293243d60e37244600513fd0951620ac82aa320d1a -21ba6c0c4a98a641e97a43a9dc23a2c9123c856f4bb5146e9c7607e6682fb3266c5bfd11850979f7ed9b3cbfa4e3d6b0407ae0ea8e311bd7db3bc0f0e8f968024f464a0342d6cf8260d7908d9115d84ad7151d1800af90c7025489b3edf3bc24ac8429f04df9a6b8f840f5f55e56f69caa9c477186cd098ecd713a04c4395c18 -7f15cc25c81057f781ecef069fe12afbbed997d8478ec0b141ddde5fc64c670d5405207ccbac23f7be0d94d90ea9d5e7fdfa6e34d92ed76166e45fe45b5658281bfb7dd5c060983b299881e69671b8cc1acbacb89598651dd2510921d48ac815cd5016042a56f1820cdb4c11ee4e6bfbc118621c0e97dd792790de3081c9ab09 -df09e2ea94ce10616ea9f0d17e9447d062332643339d3e925e4d4b2c12e98c129f428fabce3b9ecd465310b330b55497a87aa2d5b90fb7016cfcebf70d79dd041e7aa364dfc9f51cb7cce1b219b89baee8aabf4f0f5c4b7e5a954db340a3331d923fc03e3d81403df0c90839c2b23dd640f7fed68e192bfe512884d5847abc2d -e50fd1b57930deb2ff8b1fccd9aa3c0f65090011f3ef3b6ab1cceaf3e25aeb2829c5c3d6209ce3d35e15d65e17aed0cdd6202bcced55e132081043eb6f7123096cf4f6b7243dd5d5e5ee399b5c78c8c4e224181f671f1da626c9d3f6efc915124e914d33941c36d52105921662d509c2c7a31cc8375400cd3ccde1e1b698b91f -bb787839086f2a2019fc80f2b07d5ed43dde1a90c4bc1cfc00aedf27238856114534e2f36f73a32d128ce2358791c40422e40d95c826b926490f27003b00cd0cf074dab5dc9641ef9c551a9c5339d65ed768d3c7e56d5dfc929e6834c1da940ab919e75c73cdf9b230e9478e2eec9a7bc25eda91bb69f1b1bd75f6e211481b28 -515ff74a23918028c3019c869ad346e609480aa9df7875149c68df092f31202ffa797ee0b540e5827f0eec876a5baba52e0182445fd108ab6b617c026a5d9d2235a344c7069e0254ad1b24ad41f66d2811a27eb1d2136b8d0400bb22a769bd135572b5e8f75898f05010e505010928e344fb358ffadbc0d066e1e30539df311e -a7cdde5f32d2cf3a7f52a62ea63f678df29425e5d799c6a1b336746e2375a41ef55977426497934895dbd6716262966b14cc59178bcc7d67ea98a783030d571943f9a898ce40905a02e6c8f4f3fd94432e6e77173d7b333a13f67c9690b53e0e3c6136f9c5a289be2664241dcfe0809997b579b6f3f631e54ac685c316ebcb2b -ca544b5894a3bd4197eeeececfe0b921154fca830f635e5b556b84c4b991a92225c23e6e305935d8db62397213bc0735a5002d6d384d5c0ce0e8c207a2419d0b7b4cb55954301fbce9e7b3b0914baef67f4202daa126b9afb7219874dfb4461d5a13f3a39195fda2a68caf7785be1ff1252d53b4c5f26cf080faa81d278a5a22 -b3ae4a0048a5353a8965fa39b93a5d0ab8f2f31e5992c49c3784c49499719c03f90814b018f0476abeb3065d094346d007666035a846f257639bc2e04660651b0b2bb268d530e8be5efe8ac866a3613919c98b65eee11649a135e12d36d6c90fc9af018535521d7d00f6a132efa2361ea90166513b8f4080319520304e112502 -b8f04a844a88880b6ee35ff49a41d6acc2b0776e9e75d2262708fd7217b1f1163fbc225b33a213f0caf040f06e78d8583dc27773c7769953376456983d6a0f240f415fb29bc7efa10f60db5be75c9e18004afaef8a592629e44bec840bdffa0fb46e1ac495aa1b7c92b6b568a4923d5ae583c93bad723e8a92bef08da299781d -686122efbd52dde6503e4dd771895fea556297b7bd74c36ae9a791236dbf1029a6dc06aec13546b8cf59ee376fd5b341914d38c3489360ba9039d772434d4e255f52cc0ae2738afbc9d6b573c1f7b470476e8947e1515d576e1090b4bbe4542f38266c8dd3d5c7f034a3d459676cc04afd5b64d0728b0d65faa81eb6b1571429 -6095d1e2b794e1f7b11bc9fe352f8e51f20b88a062b1fc81f98527d6b8c0771ded9e6be7f1701cb8b4a60ac39da5bc8a0592d53562c9fe2ac16384e2ef1c282519fd21f9b97bcb5dc3a83caf3299fa216e76d89952da663d4d2a27baa2e35d16ef94ff59a17d2bde6df677547ad0fad8b50fe7fa436583eeeb0bab5c8d263802 -b9c20d5cce594ec9a8bcf9ef61923217430bb5c0a3d44347d73fb6c0c4bc9a1bb7af9ab14c38365f7837d074e2d26d519f18f19c12e13656699c71ef1ab1bc16ee889da61048f526b7d421fb360cee6f6aaf2e1845214543710d7e88ed70550cadd7aa06a41818ec5b0e3f5f9783bebc65a90576fb440a1f47b54cb09f407e00 -119edceb74be181c25185057ee43a833215f3b6cc898d084dc15531ed33e942960c0137fcc9eb4b94218603eb8b8533646718d82d711cb127ba7c852f4899d2b8dff9e8431b8f4d9569efb1c5c78d06efd87b894883715384f1d3b20d54b9909d2f09d801cd23e513da3699a71c33d9613f0c1c7f5cc4eb23d3b30de8d2c0e2e -0a2c7ea2b7aecf16d8ccccb61dbf4d850c1207a519341a3ee3ac353fcf9f20019aeb448fd4e4ebca4594521bc063eaf11b622740683cb2128fbc79b73ec53623a5cb38a010455b37ebd21f9dcd4278c134e183c20fa8a11aec8860988f694c1fa2e382fd7dfc30db56784f7c1d76636fba47504d6fb25c0f9586e5d2b5fb482c -c79626f384557610861ac208bc91357a65c120033efb3241a1d0f0ace65502292b545a7358543e80a87fbdca5575ce749308c9c130c599a43caf26b283e25b1ce795116e805786b88c8c87150121d5c46cdccc4504a57984033c9ea5c9719e161adc2f85e7e29d6ed340bc138f7dbf439d7216e87bf18151581fb55d27366605 -4e6d628cbfaa0d5e06fda951ae1bfa24a5f907e05c25c5df86cd6ede6c9dcf28bd449eb85b18f763b19487c6e5dc0a4a83b80c15d18d8f842fe8434aaac9b3211224d6376c09c1f3007b90c236d64eec27a6f21b9be2d56beabeb7c1bcb8272d6fbd6b20bacc14379acfb29a351b645226a4c019b9989810bc6c8cbc1106d80b -6fc920609db4f438c2e9466eec4928ccfe80f4f0073d03442d6a83304b37f70d8d56c55c8020d867da5ac6611585779364acd997c5d56dd2853b999674d94d1bc91aefeda6e28d490721b964823cf78ec3f4232dfbdcfb5a86992f0a5c921616c4b5d70c56835d4769d19e881f53c6f5b5d12c505de6d06ff7911c26944c7027 -f492bd13b7f5da63a6b0fbc022cd18eff7c3d123b56e3d6270f89cb0205c26017cc872db7e05e58e6ea6e15a5128b5badbf5a0d52e8edb018c4ba919d53f21031915b11eb4cd1ae93e46741d91765093015966a1ab6f18992e23b9bba71dfe14f8697feb6c2d53b95607c3035deb6fd3814f0f5e70f72266a86806359120062d -86ec39c2c47a1f3fca496aab99de0b4def2fff700ade7fbe94cbb3363a1bde02cd826dd472785b1fc76b710e25091690690de30a8a0b7bbae33274bf4ba82519d61e4fc8a6801e4d2f576467b2d68cffbe0c522162d8133ac27492d8a8173714ebeb388991be7b0e73138adc9013db2dca2d2c515611c995893daf1b4e1b100f -4b4495fbbcdffd97ee055475247ced91736afb0c5721e38ec4f6b2ec430b50023ffc33f6ad2b0a2dcf825045a8752503eabf205cd80f0728fa47d815927fa115ffa2876fa97627a7b156c5db1dcf37fadb4110bea851e15050a81b7a2c5c46015ba0ccad7c7c40c2827dcda47221372381476804f3b0977127517038892e4514 -cc640cb1373c54d88693e65a9aac6973ebec760759dd3ee805dee59b28b5540aa1db67bf5f6482116811fdad037880f2130c078cca95f545a87253c37a54542dc5cac97c16f1add11ebd8fce79822178fb8fd0822c47a783db2e920d74dbdc153f12a7a2c0f7875671f957db6ec682c67f1e861424a6a2d9f1348f4ee425e702 -ca4ee67b2ad1b37f0e08d63fde0f71edb40a0ad4a1a099258cce77c16176f20bae9a5e82aa3ecfa6d0d5dd464db3631214db2480729b43c4a66d31e8ab043a272ad0851b4ef466467f4ca035378ae29a75ea97c826a23d9bf84fbace17d487234c01eb65fc62ea9296c22b30e127cc5408fc192a3a88024eada7935d2251de00 -57e4c2a67243f20c61083b785bfaa1df8fd20b986b65354483fe44defcc1d32885f911623e79d564b830e20a8ed3b8ed453906203e37f72052e00445dc21b80f06abf455b38ff5cc095bfa135d314a915b53c2df9d5bd954044e55b09e753203a71d9aa60f086f225e705ca28b4ac29507e0d386e66e3d1af7311874ae7bf103 -0bd6a26f97e95727a9182a860febd7d5d12bf666a79825082fe30875badb6f1fe0e908fc37ff3c4667928324aa2e81e97a32fd5883569f075af591dbed10422e03e3ffc0346e0d4834cecfdb4b217bd3c638acb84a2f3093d7f7817959f9630e4ee4deffb35d9c1160d3503b76592dd1797d1cf634300f225634bfe8969bad2b -a06c133f553e718fe06c0cc8bb2d1b9ae28cc0e692b2554226cd82e528af482d86a2b866c1cfa4c4fdcccd89240487f2c112fb4b33b2080766bc5463d55b4d14ec249453be61f1ed766c70f56cec32ffcb6ab7734145d3102e16beca2ebe9f269e16cb8d9579ff255fe1fddc378f1c174bfee59b7d509c4cc400d65825653c1f -ec609330b090624f1189ec960e0445ac35e7275f1fb5fc16faa9c676f0fae9273d53f46d846ee97381ced94988f5dbdaefeb093a65d36d743ab26bb5d28bd21a50a88a61d43e1c9dc9f1d040ee9b6cfba73ddc463ef0bde3304dec5eb1d96f2df9e049f05dcd2462695c07ae624885e6e808b4e4cda407fd198ed02cd017ff02 -b7a9dd665d985c63f174cec4af3f3f8a0079ee5fb540ae65ab88b7be5b930c016abce2ff7571ca6a42244efd396445346f188602150c6e2d5e24a703b6599d216def908d0105d6af4e1b844c6cae01820a618552aeaec236658e6d98c00889197eff47fa26887a2f1661711e6b0a0b206b0cc02e1d88c15c0a76eebd575a3806 -a06f87781bd707dc97a4e8b72b720c77cab66e6f7b99ef2fdf52b3cb177cd32eece4d44bae7fb2c1dfb8494d460f6520c73d4a253c672620205340f40c8f6e27f9569ebd71ddb81491b04ec087efaabdd82b65485089ac47b419f8d43e9ced2de4f22d596655e38b55db30dccde243d5bb632dcbc71a79ee28486825a2e6b42c -1e034ae0ed9971200c3da8de0da8d92357ab66e4c7cdc32c4972594b94913929488451bcef36d586c3abfbb88563d6670c75b3c7facb19e921e7d8d8970ef817d748bc61391619c3b19719f5b1e0f2087ef32e9232f6e0cc28783c9e61af6021628121fdafe0435942c133bd118e519247f1ed2d6be8d957e770c988ca23f70a -8fe369abc577ac8ed8c1bc9a0ac79884db50014b02d929de7fa2ecf0c5bdd42cc53bbed7bcdda56b229fb3058e2f6f01e39dae3bf0805df1cb132eea48a82929a8b250df463f85b745868695324f5fb1b3d5a4bbc4369a65b1c80b317c67621c15cb94da463cfcc74e9dfdaa4feaefd4fe4d88e8db1548c5651c8e47a9202f1b -768bece55e360af8a8207e13ae096a157df02ba01c3d9cfe8d01d1479345c726a4b290ac602f5bc4a9e9478a4c128a169f09d6c8926282004571de8b90e2cc2b91785c3b4d71946e6a6d52b027a716be2d399d3bf011458c83b8ab58bd51a115f5fd70c39be80cccc36d6a2a380adf8a60ca7bd3c4f9c51cc78d6216d04d2d0d -40c997ce3e54b9404596197423f555e8373be78a7d4336348d0cb89cc3cc8e07dd7b00bacca0d693a57909dd133beee5f52b91933e44a69838a44e79749c28149a170dec589486a1556e319ed9a15aaec0275ef41817a34c4a8a5feb8a647705df6678a468b3da7df51df82f9a3eee681ff4797e9b4a3ec97a739d6e61ae8b0f -35aa48fdd6d1e8185a3c66f10c0a36d8b964765773b2c8db54975a91272f77191d75d757f7c9426465c0ec6de4368c75fa51caf8dc6e125779ab142e59a9732d61a5765980cddf3c633b2c9c3269a70f53f15c5df7c3c2d8277a658b06e8ff00eeb3be64a8e39d1747fab7c124f37a9a43c5789cc349663a3e1276ed97710e28 -b4280e961698252277e96116a1239afb78cc5c401993be50e757f93bf8f28409c06af9c338ac30816a6df0379273e368fa4dccfab642d44015568b1e4b201a11f775b5603048efd42853171baa156d4ccccb118c9a12b1b656377c95cc76f11d13b8eb9b767d59a4f56cda58de69817dd486c510d9abaf1c24338a4eea53e624 -33ce0779bc19b1a3fb6eb34f3ab6ad8387872ce32e1d55c0e010f8ff4497191f170feadc7847b982c9502e387bf4509bfe096ad2abb065b3a2647d5379ce401bf5618b147ceda047f37c700373a7595835275a0fa77f816ab992c2c0b0db9305980f27a9743ceb2378adc38bd0f4b3d183a77470775cc8e504986fdcfd7cda2f -7685d5d299492c03fd64e673c2fb87981a7b6496b2e97b8b043623fcf24736073036cf36991a70d70f9d67f40f76cc2b8cfdda7d60a67f0707bcdac8ae7257149959134e7875ae7ca6ea557cd360baf3d60252b50677df9b14fcae845f7dab163b7de2bee2a33cd8e6a27839a6995fac4da7bb8356e6049d4b58eef5720a3f0a -5b3f0856d7432b424eeebe10b08ed6412fe0de12501195e828a0f0352ebc46093441ef67a102865bfca8f6d5c1d1f8c1182be2b82cc5456aec4a6a37130eeb2308ae0d4020012336b68784988f5ccac76c0eb927d37758a3f7d8a266f7b27501b0599952484e9140d0249a95ad5dc7399d7ac14156035c9fcabd099fdf78d10f -155afce90b8f7de52145f72411051d238e127ffbf753763b27ab7a253888ff2df3eeee4d1a97efc4619ecdb71e673822375016f2acbd92998bcd9cae7f2b6d14981d7c15ba574df90000ea2a0a06311db9ea3889943ea4c8e3557aa8ae1c9d0dd64fc8afaecdc24b0c90f6cf1285c637ebc83d1e36f376909226169debd2932e -08bfab394855e408a5ee88b8b279962b3c1c80a6675f2333c6b7afa1de4422078bf4a4b981c4baf7998ef6fd7aed8e0595a7038399e876e83f3c40eae9a04721d36ed5534b530b63ac31bdb8243b72416eb7fa20cea0947783ad4c15f0625224c1688a21129841f7bcbb184a3f329d34f65403183938853a9b8f114897aa3730 -8c4b4d2f4b10d6f48c2f5627a8e84a0dce05c6294735b5115667b8eeff677b10cc6c7e5a781a1554caabbeefdf619ce7a744e6dbb7540ebffc5ed4cbd8c58a01ddde3d348c7276604e2ee02655ca3ccf8380ef29c5ce98aff3df72881e3c6c1bc0592e09e81cc0df12f11f38879d022abcb740163841bfc46a3723f4f076da29 -8c783d9341eaafc9f9ec265434f4346e00d37db8da680779585b021c1316de10265a0d57b86a62c13bf7db3cf238b825ea6f333a8a80e36d351f9cdc578e4507fb4f3001b64344e7d11c4d339f918bc9f41d57e3d9c12feefd739abb89188705e08aa07b12a92dd1817fa6d895278739c6c011269689c97a41baf610480e4a21 -bb22a43e9bf4f3e98b02f6b1ecb5ea41f09e53cbf1e92136f68e6cb1f5d21129c5c9d587f5fd114cf80aa2cddff21aa40f2637abc59629dc1e3e0b5706e4580d3119d4d95d471b2501e6c24803db1c1825b2b446c5d8a0712192936e667a4c0ff490f29cc17e15b2a28d7f9272ecec76f77d8f12928aef41103ce500f9d64008 -6cbc43d72677cb993726b9e5bc77785e90fed0cf7bfbf130f8774ac98d36622abc69592b2c0928c241beca652499ca48fd095e02847b29bc1a7d3c1d4928f92ddba11777966705dfb09e23daf91025692b5a8329999182143612b5e4d8c40105cf3c229dfe5cb9190bcad96fb9c1a3e9cc5593081a0aea27a2155d852dc4d909 -6526888523800109142bddc01d32f0f75bc9e38732834ef1c96235951961952e469af8d561d08cc954810b901cfed6aff1a657dfb93d53711505ca64c9796105d9a3ed97cede5db6b53a80eb6ec85d5132792fc898e7cfcfb539da6fc1f38509c0b2685b220deb8d880fad7a8bcc18b6292c4ed9006a505f86532fc567a4b814 -2b82da1c5ff32b0875789b5cd0c2ffab7f97b7273c3a9e7ca8ea543fee1166286504115e31d7b3793f378d0d4914d1a06e54b6a958cda999b35ca4b9861f0c11a2972e783c09822d9ac97fb7586cc2b51d289ccc6f5ca3a839445a047a87121164d9b311e231a7f75c32b2a1362d1d0e2df52f0fb3aca17abb36597ae09c5a0e -182a540c641a39d9821afc1e5ac9cc51a382297379aaf19e82a2852a65adcb1bff56a4c01daf70f104348c97ae2cce9dcdcbe8770bae2d71db16a3dc9a85e82870aab805dc37ccb2de647a43aaf20a65d6c5ea39c1795268549f3dd9db8dcd108dff05eeead29b5c29dd1d85015828d5a5b139c1d8472930372c4f1facd70617 -8124c578a022b71ccb152b5ea788e67b92fc61ba84ada2a54a63ed83fe12aa224a522fd4fdece3aa43f2b6718e0c9cf7b596d975c061b931beb9ef8b7c4dd32ef965847ccb984fb02d0cbb033f723bfef166cbbed78661c605890e5e4472b308436c7dff5b9d72bddced1812f2c84fd0520c5ee5a55bf3cbc69be05076877a14 -c591a6c0c4c7ab3b21fa57807b38ff0d9320ab467c32736f357335b43f79700fb56bdc7266360b406a3163585f142eb5497756bd746928ce029e2dee5cd78202d0d2453c561b8704e661ec424c06d03259bcd719db6d46065bdf74d521c0e02f2bb3505dbb84a25d9aa59b08b51fc9c2a2944aaa775ddfa0ca0fd5b122726605 -b7dd10ce4762c6a4dd25e9fb759e7aa5352407e79fede7f9ab316db252ceb32889c5ae42ca03668f59f4100e38ab7d425e430645a825330fbddfde748fb66b15ee5b02371c19303dd5ddf00025d6b477aba5c35503305570c0759188ba78591c2d1cc348087eddbb04f624aaf3bfc3ba4a5de4af829ba4812168489106e32218 -97fbb05c37a9d840d919a4a3fcf4169053de3f7229097f9476c8d4b290af7617e7bfe12b93c5dac824e21bd2116a39bdc12bd43a04e5a834d601c820c303b4128e4ef432a34527663761e6eb3a2ab438f0154c377d9d5a0bcb916a3026de4a10ad36ce7076fd691b6b7514f9a24f6a9a03ea98a4b8e660bcb18d0328c3302a08 -95444aa6f80b61639a97ca496ae2f974a8c426dabd695a2db3d5a04080d1522dd9875c62e641723cd7872fd03cbf38036a02a7f4c09242feee61e96d0c12fd1c9ed83e59cbe3a8dc6aa632a05362d4c726b4eaec66b6819f91b2b52683751101253792b56e6f769c690b010bffecdf9cc4ae4ea0d358ebb1f2d851e7657edf1d -40a76f32ae271b31dbe50d304b7bca9cce9ae5d9c284dffe4e7ddf461011fe1130cbaec3f6fba70dc84289042e6c6a89641e331d16212ff2a124a65c56978116215a94a97590e5787818e565017f8c2afb83112908bb3a7dc8d8fa02aac305187938481fa1d22d2b2660943d82e1aff29948eba09fef99f285b22a43bcec6612 -4bf34a474e38b88d8bc3d223c795506ecc9ca3bcd1d419ae913751a49b12a00e1c8ff4821d9045ae1b1a5d31a3dd424da26bd5ef4381149fb612e3bc2f28520f31f9cf7985b5516d5cdf61ba7bd2af2292486b8643c38eef13cd956c8a37f208cc701d0468b11dacd12e19edb6cc12266c6608432b9cda264e27e6eb7f069103 -76b6804d72a9da2fad06b5cccc489e7caef554209783dbd4bc1ed5d77ee3a11ed1b0052ffdea75f20e5f89a70625155285cf87073b261e34cac7ad08edf70726f1d52e4ac430f7d7db4eba3fbc69097ad177b645f2e41cb487bb04626e4b402036eb2c60951bbc07111d81d2e61cab07f7efb0a5d0897b61557586ec644ddf01 -02e2543642a1d7ca610d464cd4620ed11c577977308e26bfb3526da2f0242c18507ec36e5faf7633f818fab122a048be18e2b536debd91915512b411d687a019d3835e4db6831bf27e505a7b57f9fddc88cbbd483af2916e607695f8458fbc0b21499ab1d805fecc88a9727a1efac0990634578a07a57f89941205f076066b18 -3c0b48e5cd7466ca8b942f4fd89b7f662e74631dd8fbddb8b56480305296cb1e10728062236f92099f96656e95faa5cf17c387df2c321817de760e87313190086335a15bcb68077cec37531175cc3376fcc1db1c025d524dc9c5d86a7d8b70290a811c3531a0ce526ba02eaa8f857b00167584873d03c80e41ab7d5cfe310e0b -edc35c0595309b196ebee1601e0e2439b67886240b5c4523999169ec5341422415656b9aaef9496db8efa36eae43e391eea4bbc0f6e826231ec5b02c53bb9f2bc1aec2037d04d609be8913cb35e81939c838463b0015e1382910c21e9e095e2af3b6e82b200f9142028c5bc7475e065ef218851e4e2bd3a75c6f3ce06796771d -bbf8a715e3708116c632387fe50502732b1f8a8254c96ba1717eabe2c637a509d21e8a9363ff2fe8e4dc6b29390a95acb0cd6cb754382a9f91ccf9e6f9078b2538758c80795e266eb97b0969549e902f8c14708dd8838c14f9266bb6fc46f80e0fac982918c1f529d52a4299c3ce9453916dd8ae638f19990c4c9b47912fd02b -ee0701fb4157df3487cc714c05616c86cceaa2adbdf097f736f693cee0b736066cc033e11ef440aa91b5a72f8dbb6b6e3a3339e2bb5d33cadb32336d8c9ce9108aa8f52a6256c96a96f56eca2be52cbef0119c5b798df437818b7560fa7dcd00ed3a6eba47d8945474e06350bb7ce53fa45741eed9fe4d4bd8f2a1097819f813 -46ca35f35d54161eb9a51301b31e8db4768dc8244400c7eb5df11ec05545ea1562bd4ff9c84f1309023e5c376ec3735ed8f7ac608e7e0b918fae33778e14121063b9ef9a3f223c66d5e3a74d1286b6d067071820f9a85be0c0b966183e48660cab282736123de7b85d7e439ea4e7156f66d6ec4347a81fe37f12a029d4f4b709 -b06ee6e594ca3b708005747f468454495bfd7aac369614482a4dc6704f2055102cb7a071fc93a3449c4e15914a5f88894469ac4f95420432edc36ba8b52b771345482eabc3a5ab2d0cfe66e93033b7c305c9dfcdf6d89c71d222e28e338fc618b681f60624d166df65a2b678f78c5d9bfad720c2d6e5fc47a71c405ca145c00f -0456f17f13ed5271111c86c3273ec85df7147d3b8c00328ce62304335fc5250b738db29ff49de9e4023fa7c3669c00d6e3e8e77b4e47b848ec018e0b5570e60d457a4008085418d24138f436a3996c8219d2fe1ff3ca6d517721134a7d744f113bcdb9017cf23d0a69774428a50e91a50ece67b1bf7970192951c30b33d5441f -cb20dbc81c4647311227395166494625cf0b07f559c8f322aed720102653f61bd5b30ce6aeafa40bfb6280c7a877592d3e092c59183bb7160e9d180bc89a95224085a939cc715a087ba17796a60937127375d4e8a658c35d21db0933c5c4d10fa175b9ddc4cc3f6dd7f61a324af7d8d2a0d56d72ad5affe2f9ba65aac9f7922f -95a6cad52926d45517a4702b5831c8fc388a2648bbea5718095e1f125534822f1289cdd57b1fe8bba23fe0f78fbc7b1263b8a873e38914b65b8cd6d67880541fbec5955fe2e176aac4a871bf5dbee8ed47250b1ec359097dab75ec7c386268130fa869fb04e1facc18080fcdae4beae5f4d27f0bf33b2cab6fbe92d9484d7c10 -9d0eab60fdcf9903fc68c3a3e209e66b5ba3a90198a49aecfb40b9d448cddc0a2212c993077862a907da602688927eeb47b23d04f7b82d978153b707da9d4a1635fc5f16ee519661480d073cc9b3ae02978375676a9f76c4a695417508ee0b23a9d2e0b737120c4814a1623166e481b85f92108b4939a07fc9f0730787f8e40a -90c5ff110daf638e7122cf74d6a7cedfab2cb7cd38685c8cc8548e1e15919b29b5026cb5b2e985b9af1550cfc461fb8ebe660a75356f5f7ae7612b1f54f3580593f9e3d3fb7a140bd0c539471fba2b28dd851b0023106b5d3cde32ff39908a000667b18e978274d85f10adf95514d0312d89acff513e316dab997f3ee44baf01 -cbb22f69824279d66c4441f8f898bc040e4b52b66a056b5f91ae2027310b2b30a97847ed86480dd99bb547a545d1dd51df19ad26e77020dec70f357bbc560a1abcda3578c71234f137a836241cab3eaee622ea71924702bcb1e08039f306501e0b054dc3d6c7f13cf89d7abdf2a54a99b2196dca709b37a6d3d9d34eb433cd18 -b73d313f714398877d652cea5629a116bcd1515c0aa848bf21b0ef4260ea2511c650a05f7de999a9412e6a0389dcccd95d2560b3ba7eb7110f17724ae23f2119fc55c00ca37d2c9cb229cc080cc22c16cdfc804777f76f158848ec29b6f0e329a9979dd169768433eb115f9fedd2f7261aa4c0a3bba1a70600e320affc5f3e09 -d996c5d29a617c58e9651e163f91b25fd4b150c93479cf47f81c3567a4abf41e924f208dda42b4d725dd63ad6159e8997c7b34ba3f17aa9dce7c70e42bf76810d5447c9e19f58a6b29b339eaa3824137a8b28ee34e913c31b026d39533a4041036142ef11a87b60b26988c86bdfa8fe41b9ece2a7e2c534a4ce8113afe72ac13 -e072766a66da3b49a4ff41f77d4fac79f23722573d96c387008c928fe9bbd01301341bdf4d7cd22e3195322c17d50ab2aadf4694f3608187c654b6a2faaea02601e6119f7e358c46a7255affbd8fe517a63b4783798918989a6f40db2c76c2130ef86bc94d3cc85b9a3b69073b56f467e98214b58105885ca47412742cab4510 -1a6938eaf38a54b7e7d1d42afffb0bc54d36d3074e407e65a6fcc6d5f1983c2bd928523b92a573148ae7643de722c3e73eac660d65f98672d8742bbe45d25d27d32cc29552de802b3ef54f8f2215fdb7786c40a770a107562ea7fe66b1d477213bf2300ee7abb4b8d6c008ce9e004db065bb58bbfbb0504e937ca7fa401c070f -d4e7b1d251ac7dcbf91f7e646e81d55c171748f26e8934153a55a3fc6a9bd1262edcee6d36a94a16cbb7473716ff82f2af259657435292e60652859200fc451dfb89636859778d9afa16e18c8c35d2e68270c22e3c626d012da6c3bd0f60351e070cc384e24c3037cda2472a750b362a8a87bbf53155c88d8dca04861836ba26 -19e3874b8de6df65ab6746e77f35580f1debd08931edc2a140eeb8b26456590a94d2385e815a2e3f319dd5aaafb8e21ff5ad1a4d657b94ad7c848209fca3a11e7680621a973a8ecdb1d71470536a77008636eae10765e3c01f29e7819ceb47083bcc17575280eb786833e60bbcb0301ec67bddb5f2865997ee96f450482cad13 -82d76dc2b0673d5b58c67601ef56de1737511fbd9059247459682f30728ef20e06739402af3fb6c21185badf3d700fa3d77fb6785336bfc1c0521b24c1c277109f7a024cf4502e6ea2323bd8f0a0a23d0e83f62c2ef113cccad2d6955b850025b9df5a8646cd7ed156f73fa30c850f4e5eb5bea5ad4f1497cf90e0f9ad77bc04 -a1bfa11f28bc0301f1eeb6a05c3df1e40e04f44add8e6b3e18dffffb70e32d0a994e293f30c6575eb3f23e52b67b7f2bea40d811095d23c2aaf36aeb78db7613dddc8ad251f352668d54ad63e6512a9cf981ffe92eabaf30b9c7bb4f0f961c119bebc3760272cede5d65bd2c7edadbfb20109a81a06420abdabf338c8f720514 -291ba0052fc8c254458d15cd94f3e9ec4d557ae6b1267f764a8410ef0ef2a3017c16361f05615c584cff4c9b4a4a51d33abbfac359c8dbe1af972739d429911a5fcc7b4b43c2a6c363eaa96e02e77e3fe48f467182b72317e7cc533786e0760b47ead1d49b7db83a71e5476f3047062652b48ff474afb193d2a94e0a2671cd0e -9572b759bd591ab68d8112d57487512feb25fef41d87b567f6b0447ba1ac5e04d847c766bca4bb8418a6debe1a27f2fcb6a420f6751cc34c0ad2dc98ebd5132ba46261ae87779033bab36c501ad3baf4be307f9baeb81795485ba2a33b279f16ca6ee81d391b616de0846c6c5bc638b8bff0b62440a347439deb76d0027d9e03 -d1c5d88ec9b467cbd0667c0ea51cbe9c588f8eefeaa577f339214f277d617313a5b5700986c5583550b3886afebd200a46b4836fbf70f3fef2be3eb8cfa17b285eb5d5babade6b1ef8049dcbc207561bd6032770618f17a213a4ebbd05a9cb134eafa6f3d5355c2a282a0e59c086f2bfa5cf67aa1d61eb4f5e27b75dcc53680b -a7bf63a4a491f2effeadb3154095c0886047af90f47bc5451c0d899b1b0aab1bef061412ac50f2e4e4e28f724550b3b2cd543d8efd2343106a07b52724648f0b61e654acf777547b418d232a2fdd5dfd1d38375d99acf0659a0a5802cb43a617f64236003acb449008d920e99f69d85be2b3f0aadaea4907a620bb59fb3e0628 -eab14b2ca1ae59b3d8ca39f3f99a243e4af00717515083422af742f4bcafdd0feddf5dce6fe07792cc057a517d16ecaec7a69cce1d9b1d75e6a1f86b15b8fc20f6d821089e21424b18898348d6aad13d95f8bb31c7f47ba594b02465f80b781ef7f346255c20062874759d75e7929a237192836f6243965ec6ed79cd336fe427 -a5319d4034f90b53b782bf5c138a2596c385010acf672c4d2f054288ecaa391084b65609b5725fc3306b16d9e34eaec0ccf644e3e59d1208600798a45f8b0806ac2b51699704a6c51b1ed9cf72c277a569e1f18399d524294f7e1a8f37e9650bff3716d84953761c64ee456725f10becb15aed523f8f14adf65a4650d586b729 -f7ac72a8cf3b5bbeeea0f4e976b1ec6eef2d94ee276fe15fbb1277ea0f589f0d5d5a3e1fe2ca35caffc30dba59d8f5b320c4d030d2aaa0eb13f2cd59f538b512b3a2a08cba4465d81855fb3a7c12dd190bf86d122aa56507a7a9c8f39a35611a39168791c69d135e0d250536fc9ae964c35d9bd0b196fcd8e31d3a4dcc05d123 -17b796359a38abc5d792834367d116a41a3a254c57c3a921e78eca236917fa1ef7a889312afb0eb9f7ab502cd502b5a522060ee47bf4249e892b7e593be9af2463ee93a1637fdf7bb4cbd5fe9aea284b8b33159843ecc188742067a5cbb4951e367aab5ed506b7c65e3581bf28031a20f2f6e82cda73b08d32e66e45d3472602 -f299ece0f8041db8f884ad88614ca643df418f17ba36d3ce6e41ec02b692b81351456568dbdc209b3234258e896c455a55e3214cbfa33b48531fdb38d23e462b2b45feb8da768dffc29e0613d536db87d52f882b27c1ee29dd7199c5737f4b2bf923a4c500e8b1ece7f119d7f8ffb0de4976b73b71710f053f6f3e0828ee6a13 -3784df5583e18781a59df5f20e498ce6b361ed6f3871bf46f4178aa659758d131cb020660b2c097f497ed74c805c7f413b1f6ac0ee575ed05189de7f213d8411fe36088b20078eae18957d54266be97b820e4927af1c9e80cf1fb111fc754110f2a87b504fd0eca9c7509aefcdb0aa315355fa27b2f18c94efe12317d164a607 -a145f716ce09163d4552fb91d9b15bd5dd2b9a34e880fdfea5f1f26d87345d0d90f5b139b55ebd97d301eb9c4ef7d6645f1fb50e35d3b717ad5254bdeb49f128506db38c50bbb22e357707dccb34eae3aa3edc3ace6779c2c5622bcbb5430717a317f945d995ef8486ec30f065d7199ef810e22c9f14d88b1a71899035ae7109 -a3806869ee0c72608d2e1f7564eadbcce173d2230f27ce92a44c4b9ac0614704fb3ff3f7dd611965f84c2be19bba3057a986e2fb687497959b38ca1ea42af8094203b0d6973fac5314082becdfb3326f81526c886b6adc9fd183fbb60178b70f7ed12c4dbac046c1e87e0ae7d6410b266e1c8369c483df2843d0a59b7b471e1b -46a01cdc9e3a029171df37a5882c17dcaa0a515fffd15d096cc08acfdb5a931aaea01d7d4b7ff06bb82ceb0e5c075867fe004d3436a3cf93db4db01df41f83050c72b6730c9621006886a8614092dad2f75dc634fc3d16d1cf40f23be941d42f4e7e171920568eb1ac874b326345d1dc8a96a259bdc1a4e2250c1e1698edb51b -3bd2f5a7dd7aaaff89f6148349c5d64e523fe193a80dcf72c6d96e24ede0ba01d2ba64a82bf99aeb261b9a3e20b6cab680c100e9d957cf349b7b432cbad6661b91ee5f69b17133aa77124d8a8ec2d36e23af058561e8195ed1a6d48d60da6d1f003924db39ec1f357fa6e9557718c0566bbb911701496f7a08b73e317178b318 -4111aa019b06f5b5c20134bc1dd908297b1e6165a643891d8d62dd6db4d5cd0b2bfe12d6493db6fde05627d3df3a0d3effd9a6af6fdff0c2da48d4370d2d541e8d39e2fca0f9e1a4c10c17d421871e8b0323dda1992e7b57bd128e1a614dcc2b2ee69f9953c260cb4bd8b3eb45243cf1494c937d8112f78adb39e199d298c10e -e758ea6d95ec8f331eb56ee52d842c08494061df7a0bb979a90c0ca33393d419240e4d98ec26f07930212b61396513e0f9de867c3cee2a56fca992920dfcae10380eeedf1d545a2197df38c7cb6833601ddb91c24dc7286a255fbc41a4bd671a9c4fc338c6c900020c57f8d76ef556584bbe9d9061fde041f8a1cc0482b41201 -d089b1217d6f032dcf873ae174f5c46f2433f2af0557646968d32e6f18d7052697e6b0bfa17b8193225e10b23464d075ffc0fce20cfd49170b8d93afa0695b12b4be3649ab5f9ce85e7c271123157e1f870a42d03374c403ce921a6e53e9662266bce7efe060f830c3072196783af0184c6e7efd39eb68121fc1bcc8e3d80a03 -a5d1d307bd078887b6f11b681907acd543d3ad7d438389f4bfff5e42e1ce2105823d63dcaf0925e477dd1afe0c8210c3ef94362908d436972841e014414b29300989c7e4daec3b362b685be0e53e89c923946e7d330e58dadabb5fdeb1996a19959567f5994e8d1a3c5f673220266616a6840a3e440a769e1e61a3a61ad2f42b -c40a41f5fea5db6da418cd557ee7e080c6fe02b47993a362ff415d79ed3d732c00232c3fbfb4accd93a1ec148f11a4a04a7f15fa3a289b99497cf49af266a90168e35a3a94c3771ef571db2e9043ab91107c7109d4ce1c130e65ccb806457316d7e975748f1b1d1635b68433e60ce51a02d5d35315168cbb3b6e5f2609cc3c1b -a3f4129b8583ec437ab7bb87f2e1cebe465409f928cf085ad61bd3b143198e2827b8f407ed7e82e05201cd75d37b13b44d9a87b0f21970b9dd3970e5f0485218764c158adb6ae1f6c8da122ba6ed8f0efa7bcc1c4073fe4c5b9103bb93a46c0b6ba46a2c388eb33490eb1bd77e544070f225b856ba1e35d0ac9d08a1d9c30511 -6b2df859ec836db24de841d173bb11382adc8331b941538fa64a90cadbbcc2088ad8729e99827fa7623d77cb10687a869d4a3d81a377a58239781604471b452422b4d6dbcb1bf8828ddd389f0da8dd47baa102b1475a9f7ef946005745810210a9ef2649c5c697ce2b66340ac04ab0992d065da855929d779d13324cfe9bc124 -0fa6a9cd03f34b162b2ec7d7ef02be6378496a9c6c33b0b5531152962c926d14e8f809eaf7fd7d4eae4f5454570e5b5181993a821a80d962294d311767cf260c2933d38b5c40a64f6b4d8435282c6b73caab1c9fe3a681b3ec9b11d45b6528116db52bac5d41510e923cd5806794e43ea166f86310dc4fe7d47647a910484711 -7620432536619055e1473c68f717905503ed69876e2b9bf241da8f4521c3af2cf9098de973a5de34223608b9e070db7e5178e934bed916913224801d2ce2111d66de2db06c2da0ca9807793f7f380aa3dc4f8cf3240814b5fe3e00bea0192c18d3436d90e3c93a7d76927fb0e56c2dfff3bdbe96f0eac5232bec8a4f838ac81b -454dcbd420782bd97a774b9531e695d8a125e2264ba3ded8efdb847baf344a22ab6954e7b41b24c4b85b965597272200ac76c5440b930ec36e45620f1a401b0727fd40f45077cf263fba3d7708f3529193d87ed0ef1b41d1031facae770b35270e95f9f87f7eacf2be74163262ec6906091bcaa7b3d3838e4f4cfc51f4861d03 -6ab6da2f83603ee19c03e677b1a528d6316db3acf084af75f2fb1aea2b0dcf18003f9bc92f2d125fda3d8337fc295fa73f0bc9041f32bb392a6bdaaca4054c11211e8e9d38561da29de7fb9e0f42cc92b59776f98126a02094cbd6126faedc0f3e1c43b4eaa740631c35ed2e7a3e462777387d56a3ab0acc2f3c4a95ed922312 -f116a9a7c53c568f1c1deab89d596d1d2c9afbcdd90fc46e9d43c184554fea1ae094e342aa76569e90917f1be8813089a4f05e1df6b15e5c7d1864145c7cf90d18c994521245c51ed0f6119c577d4954a577c08a647cac9d4efc4758db351825dc1e5afddaa8c4fe509ace645f8175e17149a8c4811688bf5f34e1cc4070942c -59ce82d29a910dfd980cc90cbd40fc3514c1e179a88d98d81c03176b9b04ce20c4bacb5d796d56288ce43e3da7f84429be91fb037c2c4ef7efb521ab3a01332c9a9bfd64d5c587fbe87f9a69249f76e4872f44d1861a5550e5903f45a483b628213677aef5dc5e0c658afb79737a56f0f84cd2ba4cd057744e8c36434c930d0d -8edd477f99151b083982b0cc5276d52ce83d836122301c98a649b926ce3f392c16529bc48f6831f1c8693904e9dec505a8af80a394ceccf736abaac739eec322eeb15716f081074b01c908582cd2ead91c3eabada61c8ec00c0432f13c97e61f541c68ea7845b77c5a29fd09a0bc3b45104353fcca1571e41848416311eb1c00 -dad408e0c61788d73f5fc17440cf0def6f5a75d297842a34ee345be8c80ab61fb9045e11d619505da63f439d5041dc03320439ab5a24daebe7ddb76387ce9e2b6362e839ec633c001bca7f804b0bb9ce3fd2f495a99d393755bb2d791c8fce201ec1595ea6b8215ff45c68c04878a4d12fde17a2539d655e08a50f2e4cd1a92b -66a498e8ef7c0c417db8935fc1f99981a44601569a924840242ed26ad1c9ea0553f37ce3b806ae9076238de47d5f8103d8f533699563a73cd2f76516d24b362102d17c39c5af9575027b4525443f2153ecc2716328424717195dc069f61d931d7d7e4e4e2d86da518f8abb4bc749753b9b753978ad884f878efa4e1e7cb2ba16 -a79f0ccaa3f1fdab737f129d61ce909ae5df7c5b45514a5586f6499b74a7b616564698665dd8f4933459b3e9fb964c8c00dcde7d9cd1d859a1e956ebb2ea3a0c75de73eec8504a485117eca598c608fef95a8e90f45c7ca239eb6d8960e9672a335d127d742e02b0d00e22ee89340c6d75d1291dbbb4541002c6c8a8d3fc421b -830c64576bd77ef283d14965b55510c090ea9dffced813f27ab9631aec1c8a1ba6bfe92da6e1ddc37f9b60d4be72ace622376262d4ba8e330a00b2266707d52ecd085971bca13812cd3cbe96d4209bac8345be77989ce0d1b361272630155a0925f8f7c84985d7c0ed8e89090b8d691b91163ac47f20544ba2b3d9da6496a30e -4088280e2dfb7b096e9479f4b4538b3ffba40cc60a73d3621a7fe6d7e38fd716949e25cf4bef5efb7796c444910149494cbc8d2885a9abc7feae7de171068f04ecba04e389cfc0e41cf82070c208dc2cf6a4d3f1a76160c8d3caf94b59fa452198bffe77a5b7788f105831713fc7c17b1e772636d6197ce4c6005ae1a84fb609 -7609d5747761778156a34588955f3c018b049c60dde681a8af84e2fbcc950703345454b16e54fbce7614f7a2da1fd153154b52afdceda7d72616b12199ddc911a4546970a4e93f48bc96ca9bd00defcf7e6d0c4a344425db9a3767a7f994cd079f505a76ed6e8647dfd2a8bf32c92933faf330ead7ce05c59184af42668a950a -2ff8d46b05f830c0d3b156f9ec4c858c4398fbf78468d27278c91f3a6b8138268ef819762eadb9447e9efe77ee5f14aa34baeb43df4b28bb5a35187a6303cf1c6d4775f01f4a889fac95767f9c29b913c4217fbec883238866f238514fdee020967cb6963b922cb65c8fd68587a9a786a1ca79b4491e022b193d5b42f74daf1f -4487c61c6cd2c5265ee274f33db0c6999d04df198b9b1fa0c13eb7e61da0f6285aae3840a0bdaf388fd28b749cd0cdec5efe9bf88b4b3728c2a1d250cd849c1ba6452b4cc3dd7357f9518bd543b6695d555a4812e1e014a2f863ee3a43aab72454c655b1dd6914926d885768365c30eb31570f7e16efec33477d89e4e4014c27 -a1e12756c2dc505c5ba0ae1c2ba2df96d60746741d42f3026e2c9500794cc2138a6f4adeb63152dd482a0f469b275ec72152225f80c6c88cc2adc0939a6b522610ffa35759e5dc2952d0301a61977de18e8b4058e71f8efce4d2926b322773037c9fcdce8a0a477d20a216afc04977da32d262e944c78347020b2cce7e42e904 -112fc5d64953729d3f20aac173e4a5ec186bba6c4b6d2ccc1cc4d5e286cf4306641a364aab07dd5f88a50405084eec08ba3f5889ee3071dbf1e23e57f47afd10439ce48f24e7686c2cf87f26885f0b8e4b6315bdb86076bc92525d2e82e20826c8c264337f0038928f988ab2b1eb2d18316bbeb55461385c593934ecb062bf1f -7087eada93103b0ae38ab0c974a86b158c41dacff8f95922c1d5df74ff123429c8afe588aebc514c322e71f36308ff21cf206f54117db41c9b30a4a8e361be053c059ffef74ad3a4a65fe51f5ce5867ba512a32c605a54fefcd7ed80959f15215e510f993cbb08b1eabf4e6363a446ef6d915ef4acf304373be3adbce5ccfe1a -4db23a8989ed4aa650047f683a55fe2e18c6834640ddb395542dca9ecc4aec1fe84d947c4ce1a9d9892f9061ac0964d019a388bc58e6c938a878f62a70acbd00705efc49083213f18f1d2c0190df3a1767c7f9251acc3ce3eec1c778147a7b1eff1dd4f93a8c9899fc0a687ac2c13e1a5e241858931d5f7928f8b49b06780a30 -452f9ea04f4847b553552c5840dede054f5e71f7b07a62b76cd36cb37b24452fa72af7522b26bee7ed0eca6574211196a4cdf66514c7e6a39f27b2d9243ed72da7543d58cdcb03f0aaf4a48f17bb4e42bf8577857d0376e18e2e7c63ae58e42d8cf5bbe4a1a564b9040842c0087a516dc357db084570b99528a808759e03532d -5ecdd77d8cdf5ffd23fe6c7488b856c82e5fddb305bb88d266c8c764e816dd022b679531ed3080bc3f3dc84f8ca7bc861dcaa3f0045a706bf011c96ce57d5324e1b6e19296ede7c04802b57cbbde6aaba3162b51e27c160252981300d3f8d22df6bc6ba9eba855b2f16c1b70d9ac7bca9fc0e0156114ea69f69ebd1459778e0b -6008e041d8868462a8361068346eef7999ce2c50ff495eeb5bb36f339b600e0b823d3a6d6f28452617286e9703c2ff143524420e7ceb038d4c72117cb23f801296d3f18b77d163ec301c13e8d259fc180defcd8ece99c2859b8675ac27754c14f0ac04e6d6ebcc3251bec5f8cb9f16cce194b1fd8595f42d4f38625f222e1311 -fac9336ca9238b306ef71835a4500d387a757c1c014bd049e737e55eee0bcc052b08fc42bf813f9741beb2542ef0d33f8d86d716400540ff52cdfa16b2233619ca89d514c0692b75c3f62e8a5e3fdddd18c39c5586e0fc42946dabd93b22250bb776704ca96fe4596ca9d76fd7d2aa07c4cd23a1099fd8b30cc1f95bba40a114 -fa5dc8f8463e00bab0ad21dfcda4cbe39acc59718d1bbc2a6cc2e6b1e5c5cc046f882dd1f25d0bbc6f482aa68862caefae9adb85e17af0b7b0fe6ca5fd38dc0081bc5405fcf03794b4d852e5e9dfcb8c583d53fc35ee65c7cab2a94a6abf7e289731e5b8f3218d8584b2cc4c5beb69fe689d3f6e38ffd65b76831f7e5ef0090d -2c91dd6c02cc5dcf696cf22ef52d7dce635f31481d89bb9fa3549202cdd8430408d7f91dd7102e134da274eeedbf00d5e37a69d3029e3a5250feeb9b7e19b428b6c8a6df7c21c68e51c4ffa0102d2323922bd5165cc568e967233e50c598f8263827c88d840dd7d0878b1d3975323048ed758dab36b951954ad96daa6867861e -b88552cd2eff51f5b976b495b32fe372c53f90a43364dbbd7b6c3ad0a1155202f813ab7d2a209d80adfb86d47bb615af8ced893fd7dfac47bc61d1aa2a187a1b990520563681e9a1bc2b7b1eefbafabdfa915625c63b4be7fdf4749ceedf6522cb6cbe92d90d18fdc270e5656dabe9ce2a94233a1d69dd21ab3f74b1154c3b2e -39b0336adb1656765b16a7a248d8a7f3ef8b7d6dec819cd314c8775d5162fe0ec676947048b557cda3fb0277c1e16bd856d445bb805af7a8bf9e0ea338403b2097bbb3d5367f59d8428dc8f59246827b10bc9db4e1f9ecd09a73a68797584301ddc07c41816a4ba2275120f740357bc1c8acd3488347b7a6d50274217ee7e614 -c4f0aa6906b0736893a63106806a22eb88ab75f7538229296cfacfb0a615550f4ecf37d3bceb12fcf115a27db7ca9e6c491246a207c56ff494fdf2026f951f066bb7558611b16381482e5d72f76fb6a7e0a7cebcb10895badace50ecfdd4ba26feec30fe49b860cdb1d67cdb86838d0583ba374135d96ce759611afe34eccd21 -78b8d2f5b6e09852e9c58cb2af4184c6cb29dbad21af7ae48413eb2b88d49217aeb40cbc18d0db67bd1def749c9b828c92b77ea2dbfb66593e52aecaf623d90bd42a3fe56c26253dba1801a5090ec21dcdc1275c31737db0b86e7d1ff3428029033d14215dfb8d354d2ce2016b6540e6a1eaf432ca8093231a384d5bc556a105 -9c9f540c0820e212f328e955df389c7e46b9ed46a97865ce1769ddc951ff2721baf0381a2630cdab0cf19ceb3ae5c567ea3f33c36b5e77c83a044e1c40b8032c1e6e55ff5d184c5416604f78b666c320c5c027013196910f20feae5c7689ba1f0a9a3f4bd9688612f5c92d4e6c085daeec745f64a917ae1cbc03df552ad4890b -899694e4a5eef137d59e5daa9a66043410ff2887b975b62cc442a7163b52a2238218b74fa44766c7407c5629e127a4057f865995dd62f981fdbbb03c406c3b2e6428f71891a444c1bff439755193aa3a228c2c1c265994e480a7e6f41c8c0215b65f1d6525373e88c3a90870003eab76d14788ac12bfb2c9e4f59b6eb1022e23 -3be820e8cdcb232631ce181e98183c79468cba8ed32424e87c19ba8a6040c7024f4f14e5008a6e8aa61d1fe5df22bad20b9acfd558fee79f11a2f2f1fd37561f3974cdb54205c9ed68d85b9ebdce1262de1949071dd9d749f8d43bb37d14bc2a24607b1e73d39869e766f3e2c1231a8ecd67f65c382111d560df7ebcaa61120e -4d286496a49324d0a4df0c6bb56273a9d1a0c4e7e4b3e11b64f7cd5ae317871bfa69d705a1dc866e2b4580a0da989b92225305b9f13b4d4776636cef995ca20fb90eed58399e2e5acea11cc30fce5e3fb865415e3896fda33f3631edaa7d541cebb1c4905b0057d9a22fbf4a340003a3189624d91ff9e7488fa8d4159e2de612 -19c2de93cd3ad35ff4cab8f5b8a39ce7e0dd7b8bf718a1a997eed07c6f343222b19183adab6a29f0da4435079cf80e9d2de1ba9ae3e7477c69dfec312c666a2ea6cbae00fe387414900d8cf576a4781d0ba15a0a65001572721995d79de3d80010d9655d4dfee34330dc8cdb89827a110b6dd4e79705e5d12637d716be6eb21f -05f996e23a7a77d35a4e4c1f0cd130dcfd86a3941b45f6c6cb3aba24e3327017f46d3b76bcafe417acc6d2983377620a0cb8fbd2bcca01d676793519f72e04233fd360fe5f78c3b4e507bafd733bd9d7b2c149a7a3c30f2cb5916133df91640f34bcde5e7f56b76982643852e3687f064028cc3d0acdbd0fb5063f05fe40d524 -3b90b9f9f0a0c22df45ca1f21224df5074aad3c18e2cb7922378615cc66f6a07b14649803b5fa7dff0a0f1e379cb34ea7e1ff4476f74c6fec2f70f387d6c2b286266f3e922d2bc5e7ae142ee7d166fbc0aac5535f4b3e32d51669cf16842fa277d52378d13739bd6924160ce6767cd6266cb6bcdf23b96fc429e35ea88b36a15 -8c77a9022be3a93ad51501a87657edc3de92210a3bdc1f67bea8db7094429f0d5280d18082907cb2d9ed5d84ce45cb6f1280e0035a7cb1e18516814862da6505bcfa8eeb737b53ab983bacd523f8c8df44ee45ebe25db88304c2e7a0dca9c610ec4076ad050da371a70072f159c1ac8e304dfbf06aa38c6430aeb056a8900829 -7486b49adfaffc75e80ffc427e243d639635d6006bb32509f7a402cd5813b32993d33624427a84a8eb16a774322f95197fc05189b1d56f9a10e8af85b94b77038830ab18f17ca3c15aa9ee8f4d9a60e46aa0fd2eaf31b329fcaa8eb2d25cb225bc619896b9067ad6df9fd01dae27580a4fafdaa504f0af4f6f63c55f0eaa6310 -eaa448d9b2b504083b652df95ee95840d4bc9879183d9fe7bb3ae97236ba860021c1f9280c992084a9b55371b5196bc932e5b5fc4d9c3744fc97dc1c5b90eb0328c3ac90fcffa2541bfddfc8b6903d4c7d485e93dfc6aa0923a93e495e828f2f49e337a9ce230b70e5a7426863a0e48449767983acdf3704dde931098aad5527 -23a330c4fc0174fabb347bed76b2c2461831ee3f4476e21cbb790ccdd16d572164eb4baa702308e1412e4d20827f87064b1cf4f78722fc712ce0a3768c515b20a39294a0fd93e39e1f82318d0d973bf6c286420162cd5e5a2d0dbbadedba2f1dd90301ecd2b197a4ae732435ca75ed3d4fe4cca3c99bbb3bd077222b2677162e -bfc1348fb186b3a8d36c40338d1194b560ff4ca0a1b13d96b8a3e617807ef123c8971628efa795eb0f94d7ffd4000bc116f9234992dbc5cb6f2d585094b8902e58185a7fcafe8da97ba6000c69402ba87c401589e898db7246d44c1614aa5d06a4fcb549585f4d8cbb0c15c1899fa43130debb13b1f7c4dfd7cce89b421a7228 -0e165938b88a22abe75366b269990221faeff4224ff850c3bf91cca0cada2c15c9b5b7e06181c40cfdb39f9863a07e99cf200e5a14e996edb05267986f38d92dd37a1683ec50562c3c03fdab69bfa14c4d1caa10dc614600820fdd0ab7352900ae4cbc726901e7a904eb41344e212c1c5df75ea2be25128de2ea734e1f377f06 -694787388612932649c8784ddba9a4fa5d0cd37a386054bf202afa1da1576709646b0fcfb8aec2231c4bf4a221d9f0795702c872021bfaf44941738e3574c62719db12e072ea4a970863ee3c8c7a11af528da4f8a6e216467112384ed15a3b14c243dda8f7e83dc70a85d4041ab498afec2d01503628372c5a15c16e3ab0352a -7f73e9cf88b54edf6d47e1bd00d280eb173c4743273193bfdfaefe6c1beb1a046cb2ee043a2ed9d3b15228f3be27b9eb25edd114421ece795bd3b40fc6bea60c6860e850f007f2f43c69b70a28ec1690078b02bd3220409f389963d28dfc1e027ac12b7029d8262c91bb3065db653ece63f8fd1b68e38993aee2df33d62db615 -689c3cc3be5ddbb062259e6fec1d7c2b64091a192a00ab1683bb6cc506ab4c09f1c71a583204ec6eb6a36fe194cc7cb512f5363a53f25a24bb51f30f110866265f16f88ae8f161d69bff76a0741505b5036b7440a303083c98fc6e86f989fe210d41c910484eabcc50f9be2351bea755cbf7ef276c19f019c2fd9891d64aa510 -c1f24f3375ed93029dfccfc37334a24e2d3915e35fd866d9454507f040076c04f236d08afb2c553deff41222dc45aa8d76950dedd858d24cf4be52a8ce619e1936a836cd43c756ad41bf875cd3f4d19efe7eb6d4481c02c88b31e492ec3ab52c93e981f1abf0a88953f1538fe0ff5a9ff3fb49cfd05436a5516bfedc0e0ae62d -838ab542617fb0e195c2a8d9ae991a0aab0c88e6e9008dcc7d2f0a8b96311b0a806039e4033733ee761426fecf063a0e57e303db2586679cae4acd3c210add2f36f4c366f83b0080ba6a2428467556ab06805d8c050d1270d0ab993ff0e6122d67865a9c655e0e6f923a7d941c19725bb1a2ab74892b9bdedee69c770af33c1c -51b767cd5d8e743d580cb853ce0ae2ef9f5871f21e2a6cface1b7886ee6e03010ac74e4371d87de3802a6e3911d6f4600589aa27873c9df25cc49c2e4400fa191f6946e9bc6aa8ae23cf3d42b1a465032f54fc03eeb4601696f386dd9b54df18f7a09c053ec3e158c4721d7c954c941e233ea6a34e1a44af3feb0f838902ce08 -3f38d35b7b0b09f2953dc44804df2663622c2d5e8cb7cb86d05b5174901fec067ce716d93bf95eaeddb1422761a27cd553ba99fa6a83b4698507111c274adc08e2e05314c546bc632c56a22b569db66c07d2001f09957d9c0093a0e7a2d7ec2bd6773662f51270c27bc8315cfa95ca0951dda61fd1855edab5c63c3efc269215 -78d95003b12c3c47983f0201c57adbe83a2c841db625e832028516a9157d662a9e34eabd64400d63d698b2878b6da1811c6f3db9fb2d45b80340bd7db3491a085c420cdf8154d61e8e43ee420ae031ad87d99ab2044e334ee17debd08bb2980227c6fea26b1b031e5b6da50df249707cecd5644397cac9c87a20e305afbfb62c -e1bbf12be412e2408a66eb31806b566b96fd0973b48b8e63047a59b41707ee2426d4500163984b9f693bf6e7b487c15e1c18d54cb9aa80196961f68a194fd302c1b59bfae2c982cd675a4129b84a5a438f95afcc9343be427258d904e4a5bd20c0decc3a193445200b53d0590d108260387cf844bceac6a4cb0454901f565e18 -a18dfd61cfee2c22138e65bd75ef36ccac1d6f447dd81c2384584abf8bf2d51da8a4235c67249a4cff1ce9f7fbbdbdb7b6481a56f56ab56bba63c046ac5f2328f30160258fad450bd38f304ac293b14a1f0cd35b7eab440c7df4001b9c45af0b4ff04f872596f396fc05963908c217c4e106690007d551dfa1f1af3cf2746314 -0d6b96db33764c3aa1e260dffee5c0c947553214291d1179ea5d26f3eec3a602317b5511c7d2fc2b8c16c53ccabe34a449c27216877e646abd8ca47a7c8d832d5c28f75294120a6e379a2cf6b486e802c9873283239e09d74aca14b3bac14915e0aa9cdbefaa844aa16ba3d039e80bf6c286fc1873e57375762c0c3d23cd322e -77e43f2c3fd103efc1eb960d65843bb5014dcd18d43ef737d97b8b9f88cea728d6c4ff5ec72b281cdf87a7dd8dc02998ec57896ee759771280f9e30e23da2711ad80a6ee0ec30ef2ef141129e562773f1fd09db80e6266b4b219338fb5b5cd20317a8946c4310277e5d9c1a8e9bc7d62cb082e9bd9a5797d6233fed3ac276a21 -f27da7f08293581d9515eda4ce5668523303e9ffa13cca9342834a6f0fba1d1e679827e971b5c6333f136c4d8d341ab1782141cbf54af702dbd8156980ec710a6c368f89239284476aacc63ebd980cb7e429942d49068fe34559b100c60d6d15c0cef024e5fc1e488606045dffc39c7d0bd7a4006d8493fada457c8ebc646d2d -4dc5e911e879436886c45c0ccdca0610a42b2582be402bcd17a7493f40af7f26a97e15169f76d189718a3476cdf1bb24a5952a20ad8ab221cdae004618705c275823e2137d27c9f4a3abba07ec3c2aa434c18659286a1a1ea8a518143bb0de270f9a6176d6eed9bbc75599df90c3cdb3b1d7e727cd534bbfd08295a141e9ce00 -c6b1cffdab5bcd72da93ac62a3ed9bd8ac78e9441ca805fcb1d0093a621563264f54cb080ee40694f9071977610e4d72706618605d650b95b5c75068d4f98806c7db866af65c1a53b7adaf5aa7ac70501d86255a6accef5dd5f242db08cdec09a5ec6154afbb9cdb815813ae3e40491e2a3da434a5bc179efd125feb9b8ecc2d -cc0f494005544be339c723658a6cf0a57fa1bf89f13de83977d31972f18e8b1f28cc8bb3765e50e473c21a5a467fbd89f4742661ebe3e3be427b0876730ea604dce6e7bc6bc836f1bba7074526bd33680fff3ec12362f84ce44da8641604ff027180ff5ce6e4c33f8f677f2eb323a43a7d9daae106421956a8d49a9ddc8f1a09 -349ff8a43defc4a9dfd705b0f1f32e892f8c2b64b77af54533f5999c87903c1b477ed7bfd947bb50fe83594028a38dc48a3bf8089c784ba43a4c1101e1f84e2d507000dd39710786da2bd0af38466d6eecc054a5d5c21b9fe4b5a8a7f94f7b14ef2bfbe4bbbbd412d383037c5bc4a0d72d0539ada0332618de535f01cd2e4a17 -1dad259414337d58fc6b3cc9b8ea477dbf7f4d59cbc17a62e24b70abf9cd091166c73e8b8ec2549488d7c829de16964f53f3ad565c90e7ebb3c0af523d476918870aea0997d6a2e38a927a6a3604046f03289df4a3cbc6e8081d1f877df0612bb642e0f002d33a315550eac44878f94ed53ef50fb07174122453fa57ab06f224 -e0b65243da95f378fe15088fce8ab212586dd97e497a81083655758a2f888213054328065726289a1e6f8719873b5cf9a9190b8cc553086e9f07603c149e241199155b3623c4da07e38cc241c9d4fb530aaa64881ff8a36c881b95833cb7302b84bd32539d1601f9479953ffc3055759a78019465c3f4c40c9cd529439dad420 -fbdbb0c02c01e55c3315e14459ad79e99d5466175ddda7a270856c7723b2000a7cd47733dbd8e76589a831e63c767d1cfb7322754dd9b15540ce3d6be54b8024163c244b713ae8dd7bcaa5aa5423766872039aa828bd8a2fd305f0f8c5a79b0e11e114cfa75ba351f9abfb92d665c656efa5f45d66dfced5f452992bebeb4d25 -e799be1e17e9bb3dc486376fc6fe36a2c9dcb1185f894fb471046c00579e020f043ae11c4e4bd5994ca131bceb70fb43b618a733689acb418c83a5b1be7eea0ca59dd6e2f8589989fb36f1da6fea5a37674921ae7799f1ba12d115b562ab6e0cba2d650e3e7671c32e222772a64ec675d1f254086e6e2191e8dee4e06c069924 -29c2eaf4a03fd487bbe206a5813694b19e8d41107134ad29f118efda74fe4411e59b9a2bf4ea4c0fda8d467962a287d1c920a1f921ce1e0c26ebbb84f5f65f18633ab16d0dea34dc2f91a565ef9f1dbf1e131c226b4b49017fafa2733dea10083343dfc32750722eb713cbb0ac4838dbaf06a4d11e5c2b5ba0d64cc727223b21 -a05927b9d0dfbde3c5fd6cf341e6acaaad876855c90f605d9381f53cdc556213f29afef51b767c4fc1276b7c78a637089500d6b91e59b4d41a5821fb821dfb2ebd0493fa4777401ed3bcfaa572f419014c5491f25f2d581828d4943634c64b165014642bf2d66e10cff66d15abd7c549a55569f131eeb77c79184987bc527d05 -951193764991e2a60858c69f8fd27ab3831b0dbf5743763b6576373af0dc47302e4f2e84de0db097545c916272d655fb9c5d8705c93489a6b2fbb0c37142111a7a383a7a186019155fb3677d8b55cfa2841be85f48f205d5ddd17eebfcc4572a39a534f2202da816954d8d26cb3fb4845fb07dbdd4b379e513d766b861eb5909 -4cdbd5a6774ba33917e9756e811552d3b9af2d62ce11e5c364338e805619800fa1ddc4ea84cc5f1ea599038015ac5972254ff02ad711e1e66a5b920fbdbbb22adcbe418389a7436d46b469103b45dcf63254d595c2a4b3fa670d42c016e097159e1065a33797426c587452cad79c06d990101bd4bc69bc228e59b5a47bf7be06 -65e0fc460208f88b745103b48d5d442c8d6d84a8fa6dedc3da09de38c1f70618cd607ccf8ea5e663172b187af1a071529f942179fc04c03c6321725aeebe76065346acd5ee46ee38a944770ab114da98ad9baea010bf3db760d9e3e4b121291a69034bab51f0a8091806e36bec05fd1d55a2f971ac6f2689d662719b86e03b0a -6cf53a73f34cac29861e2d4ae90d3f89b880dc418ca46c90817051a7e19e611259e873ae7e0d4b0f5c6ea3a631e0f302dc8224cc2290b2ab622dde0e4ec14a24284a82ddab726f6a41b3a30713b4d16821568d9eed2998265fc547924d661a15126937fd6bd7e0c1e775a68cfbb3e0b0322e7c149e03e87651f8382956762a2b -8888a46f72a03f2f808bf2a4703291000c86093f2fb04c3994e9afc190aff60a65ac2fec6e6a83fdd6a9fa1af1f37d4fa4a324386b3c996d71ab91b7cdcc5c0e00c25fc383ddf098e028c434f2dd9655b92e98bca699c7005c17f4cb50f5070446019b5be11ecb9d9d580c751a57f3a88a461e574a40550f9cef475363386426 -c449476fe9b9e6d70fd4e2c1fd56f1f52086a3e45c06d74158e3db75d6f5672bc91a0a0445209d5103e466cb209152fedd13afdca2e631cdb8b61cff06973c0388282f9d55bf38820d2d256f3092f2dcf7a03fff04aad2be125fadea703ee92514c59e0c41d2f9091d42dbe6520becab4870c8b01b75c03370cbe63a6ee0712d -f42f1a05c92e4e5b024eb3723eecdc689c826947eccc52542c7edf55066e98054ebe66d5c6856d999d6120f2e4a3412f727141d442eb0dfd3eb5cd8d3f73f92fbade44f2314bcea40b5a7f6b842241dca51d4bf671f538bc2566b001109540204ee996f2f2013941adf0c0f0931b46fdf361ab630bb15d2f3889e0e464bf7618 -4a9bd915d614fbd64a7f5b3d22d33af41f3f7e5c548fcbc6b9c4bfde191e701def514c6bd43361446e81d1c4f35ae69667404357e5b692a307711aa15d3ca302c3b286536cc98ff38c61d139acf94e33cada359083b7a4694deb2a7e71c18c2d1a9bab4c508898f01f29eb5169330547dc7c2a2421b6c4098a7d6b6e58cc9819 -8ccb1358196522e44997d44e637bb93f259a1843667b7ca7749205e27b1b0a2c38275f79d5cc6d66ded9d980eb6e85e6ad56f0799736df3113497325733d090fe0b5dd461ce101e392a0a60fc7242c7d722b86b470d4b02c16481dfb7138982335a81fcb235a1549cfb3cf33aecf90a771137966ae9678ce7840255d7825a60c -f923037a6801a1a781afe259f1ead3aa9fe0874beccf0e1eb71e802fc9515325234071f3b12b757d3eb4bd22edd7bd4ac82052f58a9b389878e689e7c980e91be07c6431a81ebca1e42b522acb37c32c7a1100a488e7cb4ec4e24f7e6f118b14a3d44d2bb3bb3766b4f8693d7938fbe5980d121236ad409d8f14ac3eccdfce1f -dac9dfc15875c3190a75c88a2897781e2ac26914fd7588fdc37f1168f612a707c9f09d0bc45e7ab98f4fe6ad3d876e870eccfdc88de1694d1413c16ef170fa1b0785a7d4eeb76dac715c50ee356787fecfde2095d8d032ed4ba9e54b45799528170ad1bc2484b8587042c56377cb9bc6f3adaba523786c61d875d0870b7f5305 -0e7d4bb05b0b294d7c9310b44a0bbcf6c6b3b060a9abf860587db632f49aab1c47aac22c5d8d35417f76292907b8c81a81380b71faba76cbcd70da5906f21e1968e25a183bff3105bf4e5f26770fb8b1a0660dc4334ab7a52522d02417665909c06cfee08c2be06c1d89275bc11d311aab8af440fc8120e897cd894bfe038323 -83bc9c9e9c0396c6d28992dc993969eb2b3e0387f1ea4cb74cb0156c2f690c276d23666c1168e41fa00ac0f5c8adf0d44f53738d506b1e96add836aacf21e40e45e2fd0507621178a0683d11a0d3d35b357e6d1fb3b0756be6ace7e2714fff2d5c212fc2059298fe5c683907174caadf40c1b4306e85b8a417a28fc1d5f24924 -966b00fc4df18f883495c13d31191cfe32d8a828aec0ca0a6ae6ccdb02a0381ae47ad7edd47a2aea2c854dcded49798e81620a312519aeecaab5949747b3780cdb8bd3be12bc05fdae17b58bddd93a497fc5b1176cd018ded7abb67002078915001b54a72b00d81c3037db0f4c4d65c73421727f2ab6ea11cf6dcd8760888516 -d823e5f0a1b3e64396a7a4b0be09b2128385a2b15f48328161d972379bf10a0cfa5dd56efb9fa119b66e589b121284c221eb1409e611ab0a30dc6b8207f0e622ea8693186d036cf48de7ffbe69c38f34c3e38ec1877d17bcd6593af0943c74178687d648df776db12dd29200bb869ffba415e93f34b0fb8db6fac6fc307fda2b -f6081f14fe480986a2e2a348592bfd12b73a75d179557e8b4d61eaf7252fec0860d6ff62930c9df074273f4646b4d3086d769cb1394cc56e0b2c6aa13c71ce07288ebe533effc712515e172df67434948be62ba773be1ebb11cff1404967f02ecced4c103ee61977c823d4271421c827aa219ca4de7f8e136da125330d22511f -47c9c3dec1b2953848f5c3e5380d56d80318cd179a6776e9916b4b58eaf9e02fdcd55ba515ea661fe4530a79aecd72b8c4bd31dbfdc225c4d534651d14f6ef0041986179bcd1575829f9191a90a49369e7740f25b695e941d51fe387f246120cd242882dc4c7983f72f18d1f0e9bb7f5f625f4a251767cd90e8390d6febb5327 -53d9f6036299256c05c328e9c6f2f96d62b33b3f34ff922bdcf3d8e906b44210042bd1d3244162235f2c35874160b0144f5f316744fdf7d91c378345be4ee92e027ef59b429d3ca0e96ef9348124c77b9ca18fe999b88fdae78c8472c010de0de1341b030aeb7be3b080438754be56e18a43594e0f09b291a08ab05a1819af2a -35fcc59e4be2d34971e108e5320c845925b661f389e7e814d1986516320f4b0812a4b5e1e0d27066cd8ef236db853dde6bb104ce3bc0ca6bf6958d03895162285962b211781fe377fe4a397bd02b45a2c0f60c7e16025cb48d89e2f768f9d72b385c2364391e2e49d9e0f14ba6fff8bf38fdc351563cd7533e85aa9f6448912f -5374df2d8b363f3bc573572d9220aa53e453ae399c62b3542b0f0f87421621088eecd6988f7d0c582e7bb13cadea4d41b24d5360c4605dcf2b5a1aab09049619d686d03381090d78dfe31f47b0435004191c48bb69c193dd437e7d18e72bac2900e942aabe51ae9579f67df3266d91bbfe46dfa55107859dbe3af0b4a3d30520 -666c5258724a547f1ed91db5aa405ffe321ff398060781641c2b46343eaba908388e8901c0de79bad6f591a508f9e36f97bbb72d3462e427d4bbdbeddb229407e2171f66d17b97b37d2169ebba1a6fe95458017c475d9d740784b18dc7575201912914282f60451988e48204beb82faf790cf62d76703d60a75509f6bf934a27 -f413b8ee4fa7be5ccdd47f80a6f84bba23528bfaf29908f111b68e5467804f1eaa5530f7e156853096f994880fa7cf3aa7726570b5d215a96c005f31cf0c6613f0ec73ad03e216634d82bc30eeccc714bbf1c76c83401d6c71b9b55e4506f8184d38547cd9c3a0c5cc18bdc1966e6516a3bec878aea31009e346fd0f7e3bce0a -da4754c1754d31a6054b8a44c8b4d5053b69716f2d0d9b5301ff2c8073d66a1603536cf45b3228b786d3ba1c419c01c6ea6ff65886ddc53ce0c33c6dd0194a0d62af025e9270760cf214b89b6639a5c74b3bd876176e63d5c4d4bbd1faaf8b1315257850be6dd43e9970b9f5a4c01bbfe6c38f7f4ad3f710b0fcc0bd2da2841c -61952f9820b1b9ad769197b3cbb6ca62eb0e01aeaffbc8a3f095c29a170636230ae285c5ea975c1951b87d0a44543a74597dcdf001dd3bf9fc3032f82bed0f069911d601d925e54262a74d6bbb4c186034e4d522b516bdca475934151b475430f1ff7b75bf6674f3bac75473fbfdea989e9039443f5876326c65f76b11efab08 -6c3c25db0677d8736cf8b3d76abda5c5bb11bbf610f1ba27ae290b41b11ccc1eb4a77160ac1c49f01ad1fd3996f26d4115407112276c101ae2ab4d4729caf70a071df1b9f7ca05695907263d6b03fc2b54755a31c469f7182ec6fcaaab77c92f723dfeefe13429e1eb5c4b84d5d9da0bada6187165b94c3285f1bb8acd05152c -f96a6d224163777b68897d2ea26dc8c5e978d65975984545359eee82cb3b7312e4171947859ba5714053dcae03e1f90200301a9f10ab93e066925b837a2cf216ab05470221fd0134fa92109736b934316668ec65378207e8f210875c5ad78c1f4a51af2b7ef553b7ff4e3d802036a09cc66a93c880867c1a1fead12baedc9e06 -cb927d86d4fc93acd11b7248c6ef383762d99b38e57c0ab62d2c7a5b58a55a1ddb71296bcda682ace10c91ae8fcf1a91d3e7b0c564459e1fa62a9d16b008f62f26f6968b0bc985b8095863dc245a2fcd321a1f9647a7b84036ebeb4c19bcc8234bed2c9136e0d8086d165926079aa29ba9068e6b3b404927711592b4cd7f5d27 -763c0129f3410d0c6c767339e4178c0d5e736b61aec79040031c25eae9ac7716675f576b4bf671e8702ce5f36464c49a84c7748e18c1657da60eb67c414d512fe7646d8b9237c97e1605d8f10da7d8bf213da31698075329fcd71270d54f0511f8e10205e599dfd41de81c163028b785ca9244fa8eb3bd3abdd2d9de9aa92122 -e41fb793b9272b31702aaf9d295fcd3106f06f602646f13734bdb46936d51f1051c5ca305d7b43a501acc10b6aef76914ee9662c2d2f78b3af9e9b76c46126150d1119aa504d5e16c38992c02c6265c7f9cd3627458141307a496f523a58d51d46b8c1067884ef4cdf90665f06c523d13b139531b5ee3193792e74de55697b00 -5c8e9c771070eb2b0e5c21a9e433fc39ec5078b9369be60355d1b899750ea908ac51c1b8d4c370db3f559b371474b0c6b7eeeb6c7d452d34af95f6285bb89b0cd37ace51776dde60e149ec5e415c47f9ac71d0c22585ca0078ad340e58e4b62e816ffd2c78b097759293f89ba4610762ffacb40f7e3d26f630b6bcdae26ccc10 -3342c023f25774f5f7aca770ca8e2a906924f4a7c6f170fec27f04c602cefa0e4e0e14c1757e90ae38f2332f59d34d4a3cde484662288c2aa5319af511e46f19da2176078145c36527a0297cd27a611492ab87bec1dbd09fe06cee84614c4c19e4cd7d8ca3ded0802a1aa5bf4e0f2ec91d5fb5426a0389681f304879bb6b152e -38527203a761fa1155e2906968f106f6197bb951194d002c229eabd07475482452655d791be87f92138efa23e9e665133be59f3f68e178cca5db3957af286608cc0e37b7b857b7b7ab382ade697ab937dbb664402e46c5d6ac43bbd3d4db0b2199d6b1977f7da9981767b0c2ef8ac378e234bdf364e4c0984de480409011f62f -f59ef6a00363e2083840447f97871d48aa9942b81384866e5b1c109db7ed741c497f0266354f09fc913440f33e8cf05b3d233943c72e0ab08535991617175a1aeb0d4c311855e171a25d8f0a8261e3e387a1a0cbdb9a08cb65874b72f0be640541825b1e50ab401adf41b08ddb6394f9881dc0080797b77f8af059865a8b8912 -d12cdb1d09eca7aad452a9e67e69248437d91b442a4217e67a1fa7ee1db5ca1f30f22e55388e2b07c9a90620866042e4552b37f3bc9fcc1852ff7e61cee9c024f3e29f6f5a7eaf2d62cd95cd821daa505d541536284b417753522a017fb54704e7fc1225f1b88fea2c69d7e3c4ade35ef00fed4f717973b323c71c05912be512 -f7ae184fb2fd4f28faa1b8308e6a185d02b38b80009cecd1cc93ddd6e9123b0caab77a683228a5af5ce9cef0e76e7e5196e26847d5919a5a94bf280aa9c1ce214bf0261f193de9ce00674a24b3ffd0095fbc30ba939af0baa3f305beca5c8b28e71049a4a4fee9e7041864a852aeecd721bd8800ca0989c72b31ff2a9edd2d28 -b32f1a0d100a556bd7fd94e0370a51e10f349fde0afb0413a3fcf43631f3fa0b3163fa76f46a933c83dca8f877556ef53b968d20ca73727c4f4aa4bf9b9ac411c3c767daa5bcce7af1da70fe47d7537d0eb1928a2962721df1dc090ade45c5163bfa7823884583978f7d1dd82c2c23efc3923be96918d84f89f4d38b23ef1113 -262fa54e309a461b48fec0a24bd375502466e9bcde5d352f94fd32f85324911f0d6648803a7bf6b59445cfdaf70047c6abe2691bd54f77aefb0564ee0359572a78328749e9ed43b8d422ac65565e02ea9e5add34bd2b4891716974ad1c6b061b1e059ea6bbd7d0d58422a9a602d78d25c077cbd32bf1bd9a45dfe64a51703704 -ee64ebd97111ec7bb3be064403349ffc6ffb414c31e3db3da4867b1071c15d17d77b80d6091c66c75aacaaf3ea38ae8ab9260788f6892ea8fc998fe051be4b1086eb61f402ac9aa79cc8fefc54a08825588183b98badce854ccb0138aa002e1412cd22fcc8283a0b280ba1c337e22b20ef43e8d11ab6834e7a3b1e7e69d2f319 -18fdf81db93e6add88777adfdc2eabf43d433e35b416cdd1752aed0bfac5321627e8e3ae07ccc7be1fbe8633621c26352b96882adca1e67811ff92dea090241ab3077012114b2cc1fa78821fa3fab7231c2354df1470949cd2bbbd63fa21a1157f89cbbb09d6abed9bc34105a19181aeb627d116ff0a81695020cccbffaf011e -ced0abaed2d0b99602b2a037c6b4d8c934e2d252bb81eb7faaa9285e85d1972bb96830624f02db44e219a5510316bc42bcd4ea9189139c4f8f7ce9806bb1f72b82564aced93096adf7f84a85bfcbee8b712179f286b3c213b4115df00591011134291cf155f4600a49c3ef7bf9a9fbd8287754315a123dd63af5d436559a220d -aa315175ad76046fcc63b03972479c69b43f6148c966da4d3078534e01fc1a0dd9e458e218597fb1681f7d2adc77d77b46cfff66062f2e7f02ef96d9f3145b1f9a30c624f8d42497cc9d0eea152e5fb3932a550bb51d4d8ddaf4a41323c2e70b45c0c35a2733971b7e8c55b97fddd8809512beefd358a0d6a39a9f16db4b0f22 -19378e17d6f2cdc628207e8a2cf23934c351994a151772541e7cfcebef32220394e37e2eea83d62bad3172a42e51a648a545ef2acb78d4434746504c8942be16b055f52d93872db5e737a8b9ab2a9e1b41a796bddd7a5561bbb01fe2af44750299234ab2ad62cf0ca115542c712185856d9a3d8d3e5d0821298845b143cd9710 -e30c8db6d537449589e97454d6661d21631483324c0fee55b354da9d0c96352b9ba24184b48d5cb7b20e3bd38ef0e61cefde6972ea442879bf9534931cd10002f91ce58877840fb3ae0e2a47f7bb68f064bdde35482e45433cb7b26343f3e026d31affb43d48296f86cf45e717aa392c2e5e181dea4b9a16499194a391417b1a -0bb613d40ff35fb4979d378ad7bbce49710f702b237a98f8cec507c626fb3b1e7929cc94d274eff99eacf6c182332f67ed6024dda2c83307b3b536c3ea935a2e65be5f48fee9d895ac98e58ba03373a2f1da639966e92862043404332a119e1e74474fb9a426651cd1e4a40d83bb43ac1da0ec7ccdb4ee6189ff1ccdbe567422 -5c466678b7d453e8a0ee86473b3a726dc5ad37d0447fe3706c0f61c9015127000552c0531f3a2f7042f5b820ecafee9221cc8c522fb4f7790ffd564d133f38111dd2ae4dea2b7f4fca59aeb12eac85e839f289625de3a0a6a6e22cfd75dc8e2c524ee79ac9acb91281d9d2916edc75a392ba620d659ef4a5fc7948180eff240d -b003ac8e859ebdcf7c616ac427b6c51e31fd4d00c93d35fc72b7493a74438e0ccc76c2b9da359cef5ffc69df2abe5e3b142d08ca6c20da056dd84abaa94a3200cd1232fabe52a2ef4deee68f0a5ed085d4ac859c159171b4cb86ff85907f0913e73ce35a7b69fba7afa7791da8670d8009fdb6729d018c6d80b34bec9c3c9a0c -39b5e3008b1b834e279aa2805524c633537455d560e49560de80cf10bdb384237808c3c344eaebc7846d2451f769b023a32da879cb44ed0ed953abbac14e4d18c4308ceb13d8f7764164a6f6a468dc2fc140f758d3bbd3d3208b0ca4cdd38419fa762ae78148340dd0271919390ef6e4673aa1bdc8e21aff0658d54c4b39f600 -fd94080e4efb7f7ad4c6f3cbbb04adce20ba87f53719f3ab7fe6c0d47d737c0fdaf1d170b23546a036bf91fb06d2e6ccb5658bf825d74b6758f49a05cbd6ee1ca436c50d9560335beb7026d0001d4514a306106923838074a11421f651ddd50274f9a8352aedcdcf4ed7f8faa27f087b2a40de566c8dc02c01810aa35ceb241c -b84114ab403cd3214086de6579ba1877cbc1ad0326ff9eae36f40ee99aa8fe2e697cf219d90bbe6f1a315c46d0a748f7783b689e631c0631eea855128ac48811eb2f69591789093f29cc068afe5b79e1f47c3946f985c90ef6bbe8ab8d831f260be0fe5476aab81b486266e589fb05afad654760bdeec480cde3974b2d7bd717 -23a83909ec523124d56a32ac4f85a323b0aedbc5453e7a8b1a62325b1c94f510d8b2c8f5f7d2d3720b08042ecedf108d28ddf5276aa0407818a0bdb418def40957aa663e23e5cc88ddc9254c3d1bfa8349c06c6218eb9628fe174f6d45015e2f79b536e6bf4b21398fc65c0e7bb94e7e76e8cd53c2d31e556ce148bec71e1d1b -0123c1ce1165b8ef1b0fc5d08067c85f4f790bf535636de224c54ad46849c71b5f644b44c44bb9363552058522d932c13546aece3d17b502b38172f2afd4251a725038c2086fbbdce258100d6402ae5d925b3266e4133664662d1b54de00290f53344b34c867bd03ec295b033e52c8caecf194b05ec60f5e2b3834a29eaacf01 -78db79c2899b33374a1318263151294e7691488658eb07d3f43b2d03d320fb1fde43a214aea9b76df3e01968eacacde8f005663ece1c58a8498bb8631ad115134ad7ea3116fb06b20bd94a4ab373d98c9277f8c17edef4bfcc8ad1280d26c610b400be581e5aa22715902944809587635a857ddb8cb72536302e14e3b4a83902 -16ea5d73eafe0936e1409c332c8865de4ce9cf904353ab2bfea790634c4ff70a478035dc348b33d9eae6894b92656ffc601e2a9be2f15d0acf2d6c2202024924d7c527a2aa6e90b512ed1131c2fc046b56c1267df093c99c8751ee2033f1cb18470863799f604aa1cb91ab454bbdec6fdfa8babef8fbe32ead0dda78af0d4d07 -6790f04cbf8b17e0e807df61d555c464c9a3501459a9618ba94e0f8029239c247fbabba9af55a43bcdc1f02b0e594d1e4ff0a21d0075ff5396e0e6535c81840840ffbe87b310460362bf0dbf0e72a1b287a94d40e575a78f9d02ec6858ac71254524ae01469cae4180588fe80ef1026ca6654e42f805726dc11edd8bc612461e -c6e31a600f9303874a2ff3721981158b9b205c20a7d68d9951e53bb98fcefe24f825fdd4b0e0cb5b24b723ed6d1d2ec277f59c5cc3f47527e3190cd96012f4216fdfb9e70793d47f26ddd8bb6b01d94131888455c46cabfcf0dedf683f639107810187f859e6d91d22e62d16a522f58799d0823ab6ebbeebd661ab71c7805223 -cbd2d6acee4e9619103410e8ece3aac11443dc335b68ecf64f266581d334111fbbecb0986a2d237cb348564013549303812a47fabaca31fdb59b13b6569c4302862eed966e9517fd3a12a2bacef71deacf877450b0656ed4e95f23af78a47025dc00707fef0cef93093bc0e154d640a454beb5369a0c4bf25ca06b64cc88ca1a -f3472fc1c8371143d818a53ae88f03cba915c7c73ab3f825dca4bfdcc4218c0aaaef866af821acba118654ea32ac9aec8b7d75182f3536515bbfb81ed1fdec1980c9d0b0fcc83e592e850b7f6d586cb4425f7091b4c0fceb54b96903585c53119dd4a1f5662928e3bf4c2293d1e26184af6a9a1a3ecd4028114ec007bc240726 -97a00a2060f9d2876e19553e77750fa2d9669af78032576df2b7e4ea0bcc061072152eadd32652c2a4bee0c505276a512be32459455baa0272c982ec5d365d03176d78101a39dd7a3fbf7d6c2c3c05444c32f458c3fba1a17098164263166727988c2371d3535cb2a713e54f2cd189a4e8875a7e8adf2e4a206debb39be49e15 -bfc9d0285c5de0768690346eaaf9e674cf21350600d57342511cc22c5702a525492591ba4600754cd62bb1b459ac2c0fe82dd45fa2b7efd52e37f7ba239a6b1ac185b66ddf832a110a3efe8963b69973da7a6a0041b99a80905c10f62985cb1c1e449a3635c91fe3a28101145b2dc8c227f3524996c779d3626dfaeb960f9b2f -dce1e5305b6da0eb36ebebe6b7ec1fdb2e074084a28b2197c43aec17d2aab12c0c33ce89f869ca10a6a93dffa97b0fbe4c5e59cb898724c12ebf06b881ec121ea22b31c22c5bec50e83bb82be1d428d63b51f0f43dd40b44fc28c5b1cf005b2196ae9cc23891ea88053f57546f5130d68380bedc70fe8f07d21a86950db45016 -98bd894f3a4750e3fbc61a0b9c14e50c259741548de6483d46e9e3930262bf195f5011c090c1b3c1f3ebcb5c0ffb5e5372725e4e79e4fd97eddd49b50faae02aadb419b934c3980e2fecb82ab2edb357fe635fc4de359f522729bdb19d14770f8c92a3d171ee96f628a0e311d41f02293b4463d6deb76234bfe8b28fb12dbc2c -c8686ffa09f3a3b5e3d88c35496a6fc99a9e87d2dc3fedb72b245fb22eece70961307ec3f4d1967359d091f68c4dcfd50787f7795f7baa8b625f98c42def7709c6d14786cfb593dda2095c6f4c80ccd1dd6df12b4b1de5ba444db45b4adf6d11c269f9d1255cbbee4c7d23e2d14e2d6390d8ceb0cee51e9b0ce0727db20b2913 -07781be238fd8897f21c0a65fccf3cfb0b08d66f8dacdbca67b122c9e2575c28ea4c196daea6a1c883edf467f0eaf8cfc74d58e697e016f5a8f465667eccf820759c1beb2ff06874ef71b25cea65e6ac61097990fab512ba44cead4b14fa6014905418a8c3e201d44c784575a2a624b43fd261afa1420ee00b9cb9dd54e91401 -13857f861cdde2d2b82cda34b87934f0d4f86e39489c9e77d0636c0e9d1cf01e53d12fb9be63617a380b319972b771d5d02b0610235e73de0f959bb2913eac23f3bcf87996af6eae876098902ce2d70b7918225c59d0212690919d1028ab87008d5e5d91429fa951a780fad3c81a85ee0587a337d94c7ede4216511ae7d0c10b -6403853ff1fe5b26054578d0761f65101132b6ffccf5f860d06dfca2f136bc123cb45b6f41f91534b2ba5309e7c51c94ed57403f2941edc76f1f472c83c81b1add6b0b92c15a1d097820960a111444c2d80ffd0162868b4e19baaac02baf062887775c42c552f74dc0d2699e49ea1264a87a9275346c18a0d5d7f7bb30b3552b -cce761a472e9aae747b0c638bc8e8466a6a3f2493cb3f5e6db4acdacbec05e0cf6519d28273741dc8676366f09a6681ce76163b444167b2eb4565138662fde1fa2281472b2358b6eedcbe6c05933259c65c9145210e2b1b70b86688106c7700d3ee95476716e2cdbc3c93df95fb6107388fe230c49645d1335a763bc82548815 -7ae6975f4f68b02c48bb65c81a0ffc339e1bd91b00e6fd6cf383e6c980b66301bde318496120831a0374dbf77e6d149be1286942384219202fe0b2761d0ba10c5ea5b66cada4c394f4f3036528dae4f7b16a21398d4bb8d909e0f80cf44410151bf6c2d927e6783177d308dc2bf32c098aa3f0a833bf0edef523782004f6c809 -320ea2a4602822818dd675d62c28f9a411a88ba9e4fa25d92b3d7d948fc3f42885c9bdb1033af0e507b7777a980fc29be63316ba068c433618301ece7b11e4105d0648a647ab0a24250b595838e11f4076974f7ab67f270c386d3c9ecefa602617df6e1eede521a3e011a043c3af8b14d5a85593ab855f358c1e014eab6d2d13 -588aef7bafec7d44e197438cee6f7a604626611d39023dac2a0481b9edf8ff271cb9c7d06b2688017b89b0eceb00676f27b8445f238c171bee5cbf83ad23fa0d9d15ebdaee86af7e45a5321db4fbb67ffe5d6974bd66019be9f8eb06d86c930f51dc3113c9d2be52d8489d2acad5a5388a89a84ae2862e8b9898515ea718d106 -3ef37e0efe76d2ffb404589d5873005f23bf3f8505fed9bf1aaf86e852118e03394bf819f56933d3fedebc6a2e338e8ae9f98827622db33025688c761626091b13653ad5a541259de33c537cd5f74668e141fa3a3928a5b1a71bacad805c820992436f40ee9d98b74f37c466f59b49575ad70c020fff08dd82f19bda56858814 -0e27b8a04ff2111a03fd7e9070345cf35e9e222055fe85cca6a98c73273db90d5cee9b5eb527a164179caa2e5b59cf7e8d44fde8388ed75b118a50a7bbb81c2cb7f16580e71e9e28ef599fc262feff6e3eed7d82cc20cfe21bcdf627ea6abc059d93c6c19f0f68a7714ba965a5b19320323f6333aab6b1c6872b0a444749bb1e -b8310c09209298d8267a4d72a9debff8f01876a8b6408cb4ce12e9b2ecb4101ac7e6adcc641bfaf913592ebbf11f7cb938cdfb1319457240e875d8ca08cbaa2ed3ce75abfb94c5fa838f0f7be4b39004d39fadaf027eff6ee30f5e01c446a718b6ddaf43dae5d695d0e4e60c0577a9ded14628b4f982847f30a25282b885d71f -9670deef0173a71163f438fda7d7a8bf54ae26347f6b3b9c53a4fb73858d7d0fcdda9c16e68cf6967d1f89638c99f86d9bb7c25e6263505605970cddcf93b1145c28a577b47d0e2b96ef1a53ac70f333155f445f2479e92ae5461d11d8db4c2a8a1c1032bbb08773d04786d9436fb7f7d5378d1ab227319d1ecb8d69a2518e0c -292056d941a686e62f64d1ae38b9903338624f992ebefc22bfcc11a9d59d4d148fd080a2865f1a053cf642998097b1fba4cab4fe0cca76abaf450b4ef247f306ca1b031b313a03fdbb8233731b2d69952a8b72c7a7dc2630882f8e09a0a34b22d63257467e312e4ffa4a632151c523ca0ce3bfb99a66a5c6224cf2d1f17c4427 -6a0445623174fd645870065df66e3966d2a236d75819f1725d6beb51417d6610ce38f1331f656fb8837d00bb83622c1daad7d0302b83e1c18bf55b8d2536171f7843f0533993ae87debadb2cc5f762403640f9e5b39573d4796bb7b8475d7a24b110ac8068edad4390c590c6d1b7f86a9db32fe29473f13a3b4c35845a65ff2a -26e289bfd201fd436ff7b287b29c2634df14e2ab6f6f2d683f6e78046761e1209cb27cfe5a824977be0396ac9870c2b2d8637657e06763ead34691c1a0e4bc006d5f265a08ee922ba30bed958b40aff1bb307a288b774cfdb184a9b5260f5f13555ffecb6a41b2f59e2d8b1edd1f6b94c2c5a71cc1a4580d8512b339153de413 -f2a88c9a2a5ba3e7e8585c48815180ffeabf1c32b53e032ccd4d5c927961702fef122d8b979cadf460c75bc9efbaa3c2170f4e02187fdfe9e3169ca21f5bb12d434295fdd506c12c1d0c46bbde788b86f98f5d52c8607fff5d85346a9bab390a732a3ed4d47d8092048913419a605d26c998688582b64e266f54d56b47a29a11 -463eea23c16ef011a6c0937fa62834445626932c2bc8be27bd507edd3c2f2f060a31886868cb0af2dff836dc7a983d0c66bf22ae6b2d0880a56f5f73ffc8d62c3a406f04403fcd54662ad7af0d78ffbef8f4692227fe98bf25ac85675e0af108d7195035481bb7dfc70299bb6732917088bd0ff7a73c93c6fecb21de8f474908 -b80d68ffd2856ef85b07fa960d38abbb95333bbd7d9889d921d6a7d42233b613e405dd31230efa4d40b1079f2a0db63bd4e483d33f2eb29411890e869706a22ea21bc405af6604c870238cc6fa71726ad1164e50a9a34c31849d636f4da18f29ad381efe9d0f56fda7469b987c67fd47471c176021d1dff144e28b44d07c4f18 -5b13ae8ef0b7d6011c6d4d5a99d56e3dcf73d66457df5b7b36385267879bed249486e897d05e2266c1cb6b48c434876b161a234a3d1962d75cdec920c4334b2a7623a96ca6313414cfda82f5b9eb68ca9da328636fd7f931dd6d0a5a41260f2788ec162f516cb987833a2d3a45897d442d67b8e98a1cabc2c46f02e31a623421 -2e5f3d05002721f488ea2ee1c0e3a3b21563705e85757bef50b92c299b3ad02ec83dce61d1bdf847b7ae917924634bca7ae6f62e20dd3cd9e425a0088e2b612c331181281fdf8f4a229936b69fd003aa5f5ff17b7dc91817961fe65d673dd00595fd8596e637b1fef96feae9a3749ab6330e9d4bf4d454929e0a62063e6d0c25 -322afd8e458c224011e845676ea62e7030cc458ae6f298ac668c0c9b04da3607bb2271f6e14470a5399ade28ba97a5d89f0d3854e496622243cc836d78f70723894748d82ad0fcbb2b32ee8d6eaad77e3fb74f068cdabf087d0f065b5258912d8f28a5a610dd7ef050d9e4e42105eab56718ab33426bf981d973e2eca473ae27 -d2d8efd9d158a276e2a8c8244de201701a8f6c8fec78ed98ebb8589acfd02809069c8cb4bc708f71dd1c66ec8f5bce652c315d4c284d7376884efc104523990e47bae480b1d7a9f850d980c302f0627106736ca0888b91901cea4d9632760f115ab6d88c065522cc35ad1210a37abe93f8a3d5395a5565ca7d883b377844fc05 -8d76df154a78bb10efe816d4f8a2c75e2f6ebb84c2772803020f0f1b302b6a155d8e3fa05841e9237c3fb50ee3327b694d8a8115c286d156a1b206ca71218114924eef2956efecc784494b268a574141bedeafc7b0947cbd8f7f0e81b6827b1ee208938ae0990c28132f882d56ab9764a46941f34466ef3d59a169faf9ed8406 -afe8e3724dcc3eb163ad16c7a28fffb01b35ce81709d5f5cb89dea3167b0851dfab2dffefc93444042d86a4a9e40a122f396d29d99fc8cbc8cac3cfaaa0af0203982106460e7c875dbdef5f0f4d7e1a5f1e272faf1a91a779c3c0620ca8dd9053518904ae321d6a9802f705d5c7e09e64de2e324cf2deafeb20ba523db934212 -0f0afe36961d29701d346dd5e653f985ee8c95cda1311f84288570526dc0aa0c47bdb66bb721e1f96cd003026fca4135109e0177edeffb85c5c93ba0388a1c15f499abf4d6e8234ef9cfda8cf8218c9d2bb077bf8859565b6ba70d97f640b20a0aa46d4d04996b4d9acf40a26aa55b072a76b3d98b19a33fbac0d2deae954b06 -4e572354b714e178eddbfc05617fbcc48b722fa6588502c7dcc19db7527f6a2661803d0cc24f1926e751c42b7b3c5f381d43f0938c530f0dc9861ccdf8587e09a2e323683037f1aec55a4c4fb08b73a58c6f09199f395fa62111359fd0a5c3056f97c5aadecb94caa06867726b149e1de15a31da4a630331dd3787be23feef14 -cad4071919d6813734591f5719174c467982e0041ccbf0209d8a0b7b189d9a18dc23c4239b2d7d998274d7f27ab3cb064d29ab1af4c6c328673d8a9d287b070bdbf3a14e8151fb99e06b8002cb0df60e5f6e7332f9025abd97181ab307d780142f0425bb0b08855ccf7cd681b2b5a92787d9f29f6fe7f8a3c672a5485d9e7b17 -dd0e53015f75658a6970187be7e792a86b03445de5b715127c455bb09816930725dc57040da1b67d59314370854e6ff2dbc197fb0b528cdf7f165300fc8153010eebb5e9ded02e80108079f914417ceb0edfde275aba9a6dafec4b73192617296d79c89917d2287b5bf81235c7def2cfe2568042500422b4550371916cdec517 -cf709cc4583ba30dfca2d65b32652d1878b1f341bee0f3c29d7518436ef92524a21884734fd44d446cc206e83b7b90a2fb2aee99020d63beee3bcd1e39ff240198bef8ef7adc4a076dafb4d364bd35923afb55c442a7836a60976f4ccff0a325fac6fc0dd74de3b1ff4638aa13027f22629863eb1f39c3a4c1a83aa00449c214 -eae1184f1157cfbeaa684ee93662d6c52fee7f1d0fed1217916134d6e1e702250de2299168f73b474eb81175c0992dbe47ac9667b4d3ed18897382c5c0d82d02a51db0fac6a811b8cc1babdf0c303b6c98790a066e68b88ecc4aa3459d36b105b59d8b11e928bee3f018f7abffc66a02dafe8416798eeed9512c910f9b3de422 -c15ae97337e8f0d699d3b6cfb55c7d8c5dee9daf74b43c988a30ad2ecb3dfb01368dd011623805d344ccd1cee4f3b80cf2f9d47e352568193594c79abd60fd23f1f45c23160b7082e351225a4372aeea32d950bc3a35a60756f3be9d96514129010e1d5cae83b575e7d335aaad6a95c3a5cc5be0be5b54413d5999e5b3fd8921 -3662cf05838c2701d1eb744c9dea4beeebe05c9d92002381d1163fa719c2e2175a1c8bbd6704231557f7a221e72e329f39318396f446c538c54cbbc974f102263554678300e33fdf83698cd56e11a9e447b54f7dbadcfd8e5e3b42e7288b9b13e2dd06ee6506395116ff4b155fae70de4d2f249ae64328a53cdc4597b3d60724 -5c3b578057418e8222e3488758fd18d29b740f590717afc661bfc8731a9bcb05a0025d500bda8cb884a3e9afd1fd1633ab71f2cf4170636527d6c7a8a42dfe0029597fb8ff24810d604bc668206cae4f0c5362b07e14c1bc0f95a7aed094df1d83b8e19e8cee4a2ffd0dd490a9df5977573b3853ab776e2b7067d49f8f54e612 -2dd1ec7cdeed1538260d4a33dfb9f2d23328c688ed4abe933ac68a3742b836250d723316de276d1f2784f3a3b3d47f194ccceba6158141fb29a0ac217576ca2418f1f3c4dce91afc0f9177ff75a1072d35c1d3d646729f88088bcae72beb3e0ca7634c1ad765c46de855880c6a6c928f38736a014c063304c1b1711f0a0abb01 -dff3aef54359311e8b4d5585cfd3c1583267ed8b6c2d70bf54bdaeb2340dc312a392a6ee51a09395308ac710b4dbf15651483fc509e8a5cef67055de91eecc29aefa620241ad632a3d0096371ac698ae1c6d8ca54b6d369bb0e94d06304414186ca5cefac0f9ad4e1a3a719ac7c1646587f40ab58ca5c33ea3ed69c2e6ea4b0b -2b88757c4a89bb1fe90ee992928071171fc5a2816f6ea4eb83eb7de863b54612e64862db171964002891ea8c43e44706de3561185b51c86217066bfe32b3502b0af0e465fcf91a8c6a47ad421cdd2eca73cd94d35b615b32fc4e3a78dc43900283969ff1d888ace9e425e64c63eb1910df92734931c4bb3d0dc964d152d31224 -2c89eb8b9d367abb615f5755735073fde0e2fcb7ee2dc2cb20a73d084812fd2b2bc03c06e9c5d89bceb26150650add735e4ea047255d2991e351ae6d300cc718dbbb030a86c166cdbbfdc61b374dc05ce07f98a27ca84d024b88fd301cba622eb2252e5b20921f49ff63f8f9903f2a6b905b77d36bd48a3c8cdeb8f5ab4c0129 -9c650f94d74adc3c07dce3d5b5faff06afa9941746b21c254e97b5521b205e15e0ac2d144866d209dc7a5e6aabecad2b35a5178b7b2c46d7ff0d2c2a2d69201820b5463a6686602b21df8086b9772d81bbf507ea3c699bdc30871e4ee7e5b80e77caa96e71cac70bc3a11fcd6ab6189bb933275bd00668d68c85351ec3253909 -ee4140ac3c51ee685835f413aa2eb5fa8b2c758f35879bf93a0266d1a1abbd0de7846229dc0a5e9392f09c72b9729a519be770e1849824e1fe92cdc37f2cd318f239a68aa39e4b5f0241570bfb80cb2db524efaf39a11b77c8d16ff1c44c692c85f4fdb17af9559917b9da62c5dcee9f43e3073be64b6da9e2f1fc482b4b7926 -2d5c9396d1d82276007621efddf8d123a3e9eb616cbdf8c9b16a936f8e468608781c7c5c79a4abcf3c28d40e3f37379fcdd782616c8d554a8cf872eb4ea58f261bb5b0a814178f4db96e40766ec683cbb14c7b927743532c8f2dd32c6cf2b5143685e68f1113d3053d92197c0001916832c24201fd481a46e3d704fc4d94592d -0c5dd012a82a53208250ef3341aed84ddd2f0c17a1d65db25f609008e577fc2e00796419b1f31faeb50958b91e770a37bcb9f77eaa255c4b1aae0f139cd5962c6cccb8c07d6416b203db0d865a8e087fb8d8a78f1c95f346145050fad3fa3f00902182371bc56416285efca46c230ba3f48b9b07660b3487dc4cecfec5fb3012 -3b01fa10375af88ddb12ea5c50fb70caafbbd4e72cb53bfa18a9906e553eb92da8736346d5a4e886790291ff7f6952feea98c8f5be080d376bd0d70558ad20171125202e074540e0b78228d01e601217f327d7bce825cbd1c12e922d2789f11f80ea20dedb44e7c7f852bdd359e8f094c2b57319aa96adb67083abdde1919502 -7673a4d9382db2c76fdb4a6183c1903053b477baf1683a75aebf8acaf69241075d970a9ddf3b184ca30256173526d0c0b432edffd7a2488a3cd4478a709dd119b43636fad3377f6f9cb2f9e471befba803a303f90070076ee9cea7c104709c1bab2cd3f5d9894fe6d5f00215bfdd190a504f6f82b2d3e1c309651445865f1402 -b5e52668df3585790d7d25285bf87d35b4f362955c9c51166cc16810e6850112dd89099b97c154a6858d7c713fda281e7b4de17e1594f19d129f2a1c6e29e1006c0c2274c7a87a468cf171e926d815ae0226e849c7c02f14d7cb78e20c5a922aae7528542353e3b84f071de9980a32c1a4608a69a2a441314b8d71d58b328b27 -6d362bbf2efb63e12dbfeba777b364084b8b8debb55092490bfa60631fa4ef169cc1b069c19648ab5e91901a5067d735a2ce57b92a624fcd90acc25ae1f5941fc1939ca3af0ea7e859407374e5b889a6cd1829bf0bfbf7e7f9bcd9b43db2730a9f8cc48ef2617948f6314e23d1188a631bfe6e12d82f1a1fc976e895d0dc8d01 -57585a2e07b69c7755a9deebf57f482070a56c281d3f6712f3a5909f22209a22a8ee2c9b0e7352612a2588e4d6b881acaf56f0a8b828eb3ec71db7b81586e408d279b33efbb26ce541d1c3992875d943a96110e15d62e77c7a267db6e958c1108d93cace1fa33859263acf0c661c170fe3f282c57b7e680c135417efc8f5bc01 -561abd7f1880ceb570d4fee4c58b9ec22b3bf58ec872d51fe867376c8267fc214f537debf29a3e8860fe403a23e866c9059c5cac87968db56e599daa48078810d9b023795025126196abd7be22f3a0baf512298a99b06106d45de15d001ebb2825152adc7f3fefc65a2c6d10440b90de17c278bed999da6719d93c52d1e8b726 -1402cfb78bf5133906d89b67f83e888c0eee658d31b569749d24470741697c2d73ffb9e6fd8539f99c1eb5703b29abff3d95713a65265a9ffbfbbc77b7b5be1ed164f3070def322063f836d6f55701ef56686b5ba5682186d8b6ea3fdfd7e42a8e2466a920dcc71985b5bc3671476342fcc1fb12c218e2380054e8f8e747e80d -1e9ef355de266678aba1844eb2fa94ba7165cb14f8c19746009bd74db8b6a211e79987838b4aab119d63b2df153046152013d2e6c1176945945eccd5308bab15ecb6d06dcc770b4db4edac2a1675d982dcecfa655a200251afca9e360b235b14529eca8a3fafed3a955c231bd73b96d0bde88216710c5b8180dd816461e4c22b -f2a1fc4ee33932621cf9a6e58f28c29dcdae58cf9f4dcf933d2b3fd1a801692995f207cde194c743387599316f0973c983be869fad2bf4a58c46fd583b2571002b4595f3ef74e4367afc6a2394be39957d723529f69ffbb710a06acfe0282e30f3350a01b2eda374a1408094085bc7e0e74b561f782465d5aac30f4ea679862a -8c4707d408f7ee822b2dd24ff5f9d328d64978b6905fd6d3dd8a90962d7398011ad3b3cf146b20b763bbbb6fc96aab023e6bc1f5b09f596768d30cb4a6d0eb0d787f1083fc537ea708f908fb35aaec53787d60af6bf38bdada72f3bac03d3225b84fd99e1c9b6c792c718dcfaf398a4a2be5d5e963a81f9141a57585a0662510 -bcb5048b2e4fe427dc750940b3bed9771928c187c5ec08793b0c2d1fa8b1bb0f8d6131c294686d4ddb40bf7244e7700e1a2f068412ee595aaa68c9c6e34ab02c5085e16e25f2c2adb77299e436e78c397b9ce855438961b3b2f5e6c170364226b6d8512332f7971d4bfedd07a77745dcf97200a65205d2695461af46a4861b02 -00f4e2fdec4ba753663314578b78513dbc7c1e1c78e60fddf367eef90baea2036a5353f6d3c59c82eca10f840c0b4ff778d44423a443320e2995f615e03a29047492bca700f0fb4cfb61bea357fc7691a1255082f1d2a51f079d2598f33a770b707484e09af91bc9210d3dd127a74920164dc7dcd3d37f393f99a5f2a4ad1d03 -61e471f3ae11bef841704fae8d5bcd0f23055cf89025f2fda76098bc4d4d5715a962abe3695bd3b2bfc8b8f3869cec5c7cee4d423412b78dd7b25714e55f50254886b9836ea226cd50a450778e114ab4670299a5fa1afb6d7e6e0558fe24bb1cc060ec3de1a0dd3f331e008da96dc0a82b5cf3c8f75928e435843e3e163b4c0f -ef6cadf85e69faf5bc63adbeb3713499dcf02771662ebe72df019cf71accae1e4c60c9aa683253fb209864b513d06d058844e50d186daa06c85e550dbeb10411d08e3654262c953c9bd8e810d52b33a9db571a46a7ea198afbc23e03cd03441bc4839cafbe195f96e80942be3ad8a0dd73c21f8ea912d2c6c04ba636e48c9608 -6e0160d1026c0825933a86b1fe4d18d4aeac159cd95b3dcff35bde647cdc740dcbcf3f07ebb6a051fe60d339079df7d22910cb7754636db7f799f6901586e711002b3feb82c30814647c3a92149461441585ada5217d3733b4b90574a3010d0a89b226447b9b1e2275ec1aa9d1040b16da8c26b04997715336f02a65511ccb04 -5c06f470cb239af45c294952024c37f59d2bb1cf2b1f7489730e679b042a2224d4cd1e564172792548f8ff6ec2614b244a9dd70214f199fd7e6e1fefc4b4442ac02392f61f2db3e0df243a13368ace1f1a32b40e4afc8a7c24839444dd68441f8ff530d66015d07b024580a7290df0612b45d0062e7c7f3702498b06563d5306 -30f503e72ded1f5a0407e4f406e9adec276b1101b2edaa5ce2523d13f1735010b31c91dcff70f1796a0c893452626f5e97586cfa6712d658cfc8ef44d7eb9b0569d86bb3de8e4019346251013d9e8a330454cc4fee974802a263fce29c1fc922bfad808334985862bd4a9ba0bfaac236906c6f1fa0087fe8c22d018a76469a25 -53739eeddcd5a9a644cb34e8a68f6237d0976cd7a9790d0959ac1781dc288d058536b6877bf47df1ffad7b6748c2031f6b12b0a2838a379536bbf6d07917d4027d0186b4d4c21290b0f8164bafecce60d63ba66147a4184af26ea0186b59c122eab062b5af1f282c8dd706afd724e84d58f6fe723e0cedf4dd93cc774dbee720 -9434b57c7f80845f231774183ef2f505db712c5dd5450897f026d196d18f0a26ffa291e25c0fd6b34b35dd73dfa29829ae43dddab2f7ca2cf14e81f7a5e0a20f66ac056dd16739743625bcb69dc8cd000aa5f669e84e97c9a49ec0ca3543c41d12e70dea7512b3c6481ed198ea8d110708c7e310fea4dbb6d85e00b3bb5e4305 -f8187cd33e8330e3fc851d1e5c0f46c378772d975100b88ec2e2cf28fa6d0d0831cb7cf6550957a01e2aa9317f6b89be826f6be4f2b6a39e91ab803ad21fcb177d062a80a01d1e47713e3f500e5c55c697521156b7a519577c0a33afb6009410ccab927eaca02ee09c614b2c960afce33124b21370f4905cad5579a6f3a7e728 -e58ae6b4f18d019a1dfe70f0443e0b9dd5de03c9c3a76780ec70ca2643d6b1130c00fbc1a014cd2247c9a5adb24c9e660c4fd0635e8f002e091d96da748c9b13635bacc0cb7d146bfa3113d79195ebfe41eb0d8a8c695cb4d4ccd0729a0ec70c8a8faf4bf28ab9ff4076f38bb68bbd17dabd79daeb960404eac63a0fc5aa6203 -98f5a9ad4c00b578bc3891d41887d9680341ed50385d08237dd3435adc514915d47517c9182c877e3bd57fcfde950fdb9107e42409f06f5463d04ab1dc80e42ecaee7fa1af127642324e50418c73a3faf58b02c955d6bac42eba7e1f1e36d40d70ed25d9476b21e8584210652fd4e778678404b37d4a4400e3ab53c3613ca304 -962f680efb7a578effd47c5d9e20957cfa88628e29ae5c645b061a94409b44255a35881fea586dd4bbd34b42eb30a00ca20cad31e320b328c674e420c4269023b35904c31a83368849c9cc89da62b41480e150839c653ad9729fa83ab5d4d51f6a253468e195e859b68e58d969d72dc5958f3708413e6daaa096803432ff4d21 -3acfe47de49c1501d540b09ee1492d76e6398189b41181ae48fe1974d4ade0190fb3841061625d875e0a923ead869f51a3d4d3e4a7c397faa3e7a64782dc6716c97c39ebb20b68e0f854f8cd07e0c1c15ac11ce5f081952fa793d2b01530482911e7ba9f14387722a3e8bc545b668feced063dc21e46d4722d2d41a62a413604 -19bd06f52e903f0f0b0e0786a3c43c56b3a80b25175f252cce5d2d5ceb83ec0ea9fe67e34328d8719c924ed7f6953f031f2ce2103da0661ce989eee9b7ee4b1ba3f096f076066b4902e15a8ce1fa40d425f1496d438f325df5bcb7d5f181a512cfd6521de46361bfd8525311802ab401b7d298fb58542247f574e598a26bf003 -ff8979b30005ec888ae18eb843576d5c47bd3c95256b7632789a8d48e45c390253c6f86eae5ffe9b46963e87c8881638ef0241307c10752e22eb0a60e1d21b0815c44399523937f1a70f2ae1b4d972c10471a3c9cbf924cbf6d6a2cb61c7a7261632aea6b2a5b5428d697f5eee17eafee4a1bb19bf87a547b851a92cddadfb2d -22a0c1af361ac5c6669e07d97e76772b0c64c4533086d4c758eda8cd8045e91b0bf22f61ba4aad6aee8d6fdb9e2a40c99e67d5e81ce78c3d3d795ead9e0e62126c3edbb5ed8837ba6c20969b6df25e958df6fc0678893e53fc09f95f521f8c04e722a2c535d60c2bed1c923884bfe6cb54b4cd2885b5a99a258c299bae1dbb2c -ff2510786d5cd45e42ea5613b3767837dfa06050dd548c5eeb8c83d4f5563b1e465718f2fbe76b3c435e214b822ffc9ec2e47850b925397372a035e0152e691cc548ada1daf4e27cb7aa30723ac1bd445461ff58f6d615b765909c79f268141d2a8d728a93d2d395d4b7ddc1c751f052583d906250c72455f98082c3d14ced13 -4882927af83e2f21876f705af8ab88cfde972d58c31ee056ce380f8dcf37291417c503a8ed45dd0bf4595dcb406ddcea1622cfc8cdf07dba26b2a761aadc2807c00cc98b391bf6a6d8c2d9896ffd7f1854224be81e7ad8e32e45e984d4dfd11d910a47611916ded48257a0686e7fd9e9586b26ca42764afac7adc0371c66002d -57d04625844af06f67fea1a48a5f6ec6cc1b6ccdfea38667378c3167cf17fe2b97529452d64270fbb5734d4e90b018b2ddcdbbe997a733b66d4f89018d4b3e03927dc64744494bd8695db9d7dac5c09dca12fa43324163ab7ecad279a09fe719dd3f52877b9957f0af61fc6749703b08c60224d08d08918c7a93de54618f2406 -563af72720e1d073f522d105ec1d5c9ba80a6052ccd26609a5f48ffb18d8aa1e35fd5dbd969981a12022f340a304c94cf9f19b52dcd7e078bf6d47da991b6625133bb406cc0c98652f620636dd7099527215472b65d7f1385f03e31ac5ff672d2b432e885cc63f110e4a354c7aae78e6d7ace26e9e5340bdd4e80a7ecd043415 -5e4cea9530156a8ec537c34351e74700527f317b7b4dfa86ab0ace3ed501691ca1e089ea172aa47081570c122b443f0d9dfd7c8d688dbacb584f2a27425a3b100e25d8ae21b6ded7f93bde1492982109f8f57ac9fa19d2adde85264550fcdd09f5834e1b04c36ea8975ea48cf0bf52885fd606c2f4cc6445645f6ae03e662901 -175e464a11297adffe7da419ac67ebab01af999d180313b9bea05d540dd2c6238c637f4492d734b0a5a5d5c01f47295bfc9293bb55f4260fea3b8a2879ad0116c6faa350ba08aa3b49230410012183ce4036269024e1789f573f00bde67eef2208ac76da2b07b7c0f8dd20fd89552c5306043a8a3a93a8db3922fcf96df47409 -29d2557d65078e9b7e39864b4ad45582842bc07d8505f04d613ee0921d523319955cd72f2dd13a4a45ee49f890403338d3da1c126dccbab5500484d89ff1df211c871ff4227587da3608c335d1824c509b13decf9c466ef77f3f633cdd5d0101bc37db2495ce862b68894bd5a5129164acb1fcda5ea2c444de012c4ddf179122 -3e7af64623eb48e022f65bb22d6faca229e808761c8ae682291e43be8f6b641c1305daa8ec489bc8680f7d2568b133fd30011207b2707a579030c177ac1b83010f98481a5068ba0a17530efd4af9a2273f220a3cefc9c2170db325e25638f5174705742ffc1380aa37503cb4c5def12c160da6249dfd4208712641a00a836b14 -2c5e8291718e093336e4c8a4126d011daef2cd4112920095438e27b93b08c42969f409c42135503c8828c5953bf26c4ac1e60af6ee56b35dde66f7da4b5a0126f27af48d98651675201be6adfa3961acad8b608451fc91f622813de14b0e4a2dffcb55ea5524b7f1f53dd237fec8a9c49f4d8664965be873bce5ae47a3e67515 -dc408f4d1aefb4fe85760ee8729bc453011166aad258a2e645306ff44300b7164d16da9a2e45f3ba861dc93b6a3a0f5356b1a60856d07120aa2ce5116e1a4d1bd19173ea94b5cab0c91f03c9c2539c93eb6639817bd31b40a71e48199f31951bfff2b4052aa8a1ddb55eeffeb4f5e90c61f5166f322eb31fe088538c15e77c02 -a1cb5e8bcf9f9ed3e0a3fed5dbb20a095cc21b9881dd507e1a9dab26d56c7129b8770340114a6b73f740cdb0bc41169289ba462f7043ad2ce9f8b3a372f0f611d8d46eeb86ad3b6d197d72e95a8d9c94265621a4139db1b598a952b7dcfdcf01388ab4ed5c9b554eaebaad6c517bd10a9a45e7ec86f850ac5340e0c08f159d01 -81caeb0efa3c81791f5cfa4e9213d99103b883ec4858290dc20d39335c71d41420855b5970855e1b44c87f44a67cadb1e2d6b1b74f5b9515c67f7d2801b1ac2d2dc896a5b6804d33a30a7e6f58f229a8ff1dc11532f626284acb6957f5d61d2a1654adca417d3f4955122c619953c1636786b06ad25ebb980ed6fd745ee70f26 -9ca4f12a765abc38ed0814e241bf3fd441e97d7842f5d4de44e1b99ffd18d52fca3edfc16afc413c324426ebb19315d710de7960685568120e5d323b37112321002bd1dc013100f0f56c591ddb454413cb5122e2892b281cc813c109a9a2ae161da7111a1a8f2f6decc551b2d247074c2bed7867162b9050a2ae13d3090de110 -d25a46a3e4f598ca0d5619bd421ec8a1fbbb8a20e540d1f8dd24a6c8df923b1db0b63cec7efe46224449d10a41dc32d4684c8e11a45823609da40c1687d7aa1572f80018b756e89046c0c74314ec661111673bfb14d7c7d5505a1aa055fb0730fda9aabf47ecba0f4112761eb9d96df962b41c74f6a5a71806fbe0ea08d20b03 -290a6971ffdca5ef699fdfac80ffe1fa9b409e00ccf889299c120dbb642a6821b1fba03b907c1764b5d2e490ebb655baff881dc4df32ab5887f4b20a41520c21f516d93e367eda41b4dcfe594fbb68891039284697d1489626cc5174fe1a5f2212eb79502c41eaf388ce334d60fbb3a11cd9e19b85296e660d80712f0b518918 -0655efbb3507b31652d15ae5c575a2c43027b0054a5b7e8653e76d4c666a7705a08291f0dd34ec8fc1101739957bec1ac076c96cdb58efd85dacde8c712b7e1d6a28990a8cf7ad4f8075baecdaaa1412ae3d2819200f57c3d7c3437717001e15168455ad1ba780b529a551b7bcc53c29556e9406b1ab7ec0673c8c2c6e373d20 -cb30bdded38996fb4da5f8ca8398b24dc45f55c19c5561764d51ddcac730c02a0504d8654821a72c4f6548466c70081f2dbcd42ed7c973a242fd2bf2cbf65c0b03796a63fe92e1aa955ee73f5eff5f068a7327755b684456e27a2409d2200d2213204c251720486c4d47b2982eef7fec45d2e822abf85f444efadc221a1f6321 -0ac1445cdfb8f617b4ec922f7698af2586e287107de1c60eb637e6bbc6c0591154e2fda7c1eca676bce89620fa8fdb0358f68b6af3599ecceb3a25af05ded7085d3870ee74aa2673f7cdfac01b8ee22ffe114272b8c3f0da384527bdb6a680001ba0113d73b95341aa3501bfd1ed4075c662f2788aa559c10f9b02fcd7941a26 -091b8aa8e9a81f5218ba400f9eb314c750f7dbc766aaf760fc2a003a40d0ca2f416d7dcd65fed94f02a075cac5c840514c40a0633c99e653027bc421f5c07d18daf9d6769f4cd309e039772b0ab8c7f7050d3f8b92563f20669aa94fa358aa21b8c3b1b9fb5233c2d1397a6d2d20d1c0b1789539ea923f2ff14893b8c420ee2d -185d39f142ab0a956b7f7871bc9fb62cec9a252bfd9af919468c63f7630a961ee3da363e729f577fbc180edba352495d15ad7dbd15c61ebdf2cf3d64ad18661c6331790f1b088c6f8d37abae1e2bacca25e8031fcd1e8707ef59243eebaf521e4791209b6defe2e25e52357da2f0e02865bb6f33f2ace9f3b67f2c152498072c -e994c7f69d1cc85ad8dfd90db535f8498ddb85354506ce707cf2a2608b4cfb1c58bf0b4506579db22b18c24fb9a6c2af151a3e9621315df2e9447d4ce7fe25193863116ea8b913440ffee15e241ae1231d320f14ccd4e2b9f976904153c5722c6509b5251518b82db02f6eb4a5433a535baf0c36f261c398dc4476c0b01d5111 -8fd6ac9ea80400a35e57f6f06804b7837724c2f7fb33abad6f441d9069ba261ff20b65fe33d01ffcc56681911cea4be1df34fbbabefa3e31bf0c8be96738a729f9d9b62c8f35c946c79e89317007879de3e1a270c03511aba27dd8aaf02f4501fbef72d5d2405e2d278a097914ceb345bbc72aa7b3fe5214cd5092980efd8f2a -dd8bece3d885cff304f6b7847ac4f7de60d31da5c92948454d0a8cfdd93b6d2b0127b917e8eec386c9365f9be8597dc39659d6e6af4d91d71d95d83e88945a2298680fd0ebe257a5d0f2de1d1344229b04f07c02d64dea4a41a8951cb5b3f31b96e0550b21f359c59a2e022af3401ba19aecdc8e46186bb736597392e5c32c2c -d04ecce0a43eeb54471662d48d10969367d3615238c2fd8683e084173d0b0e14290afc0717ecfc77ffdf062994950b470cdbc5122db89c31a45a83e01f20912520ad943d7e07ea8b78955b96bd0fa03fb358834a8fd21e89382f713eb5e60801c2cefe6bb8000c8329490db3eacfadac1b470719dbe5666bb250b26506289d07 -9a34894b573229577a53aafff8d9af0a20ba983c0cd148221472298536204d1f138ed2bc79b3be555cb5cc648a2f069d7989c9f3ed30123bc0895eeaae5faf0e06cd2be6fe7de4772048223cdeb2bb15c7236a6f4d23303260214860ca544e17b2d386cbbf12d9add4942ff39ca2f16161facdc8a74625c902b274a7affe1b1b -c37fce062078aadc014ef401be6a7dc73c4c742a3deb95365f8b81e0e08e7603127b291e03ea23b0a1df05651d7c48beb349d08b7d396d9f1525a0b21d9afe180981c1705f249de97b20808f3b191118526926753c1c8654f5a650eb07ecc62604a962263949f68135bdd5cc80001e1aed07b8e795595e3bb0c60dc671084c19 -95ea45ff9087c8d5337571d0acb0185b0110c8edc4ec53c43410561c08cb8b28e871cb515ac08f38e3d675a9880437021072ecfae81d167012abe8ef1b00232459f204397a840cdca3215fbc396dabe3105c27088e567d95da4e22ef1af10b18174b8ee404b00830367a9e106c5c18762605aced46611e3f40d31c6e72636f02 -16a37ec49fffe01909643e1dd71c12403737fa371e39981d8706aff9141d4d01d0698e76092965df238d97a56eb193eef413dc6e94b2f785a69937080fa2ff0a1686951ffac091bdeea3344abb903e78d3f8fd1c2bdb170a8e5cbb893c26ad271f94475cece98c49d31363102806e23f09297d5510e8272b09f2fa9994a5ce0a -ede83e8877e0f39df24f654ca48709466d912cce29467939f3a3ecfb87411910d526d8d130cb41847744b84c622206f70f60b4328dca28a0b3623b0d15ff33078d6006ca601d830d0be578054fda1746e9d501d47f46ae0f85240993e4d4f01636e8ff5f111806338d2266de5a2e6687260aa9ec80fc20ce07b89d47b131482d -061cdd1775db882f290dd4310629f928b8a2deae7df22436170ad0b5742f521ad67b3bcc055f2d6c4283de2122cd500ff8bf80d93079da49afde99fbb4eb012f45ef8da25b4f3a063bb587796fe44877f2438dfbbb0df15ca4301879e8c13e0754e0d64e6b948183c3e796965ddb4699aa73409c1b0da5de30866bd2f4d94318 -cc0f66547f61d5e01ff085de10c802b7b526bd0d72b781e44b4f3b5e82bca20c68a487fa6ee472998e51400126b3c2cb773e5e42db5c2d0b188b5299a688f60727f06ee5487cba1432f8ab9c32ffd886e26a8ac26241701c0ee8a876dd0ef614cb77840c5c9538369f77f151aab54760d950692eb59a27580b4af7532f70a407 -04e79626a7d103e988cb3366eb077220b5145d83c9e42358b01cde3ed9c16722e7ec726203ae9ced3abe4a6b79f45ea7e51c3d92915ec9bf03be70f888ebc32c6ac6f4a233a8109313ff5e0de902937978d3623da2114a608dc869d1c14fe1037fdc73d87a04d40766ee67be35f2dff1f917325731afe1b7bc69cf3fadaa6f25 -4d1674c16e0b52c18349d47b9a208081b526ac2d57b9e5fa76921b3c89901d027c8e938c5c786cbf62451f02a534a885cb4b0abab02f46a0ae9247930cfca012f7176315d66a0bb5cb2a057b95e46076a17dd7a44bead2234812a55daf630d2b317bf09f87147219115a32b232b70edaec9bd91a5182a35f3de190c826c3e907 -9324be8f600c7047d945cbed8e5497c16eabe5048b0be57f6f258ef887d2312fe5f775c8c759d7355d4800dd4793b30c7d49aa8983fa67e14c50d3795295d401466a3703ac1d70d230c189941dcc0e5aa8bfa97e296c5aa88af93c1a57f31b03d56b43641b093c25ff78c2e6140883fac5133baf21701b82619e2be49f3a8129 -74e8ee4735acf064bf3934aa069e27b3d9b11fd548ba2740aa5b1af34364a70e02255a0e251145c548ca5290f95c3c2e5ba4b55c71e88ed4a4c25b81c35dca2adcdf6946c07d5795c3bdecb5b58e7ee485b9930d37dac428195258afe4412e0b2449f19f69661bab62c20345cb78718bb045d6e51fd548ea1818566924ebc10f -6b69ee2b0971bc102fb010527805ee1c4f6e42566a77d2a604f55d3221d7582215fbdfb7044ce8686cf24123cd53631ff748b296bae9f7ce10946caf1768de049c386c77fac0963174c30353287bd78fba8d97a47d2426913f4dec7567451516cd6f1f0d098bbd7d1ea8b545b025daed9524311215e3c3f1cc8e2914c3c86b0f -cd57ede341cd440387f7ae40049afd8acbda9e4719fd9d9b14c970fe281b13067939d2d4d46649f79d21979702358a24aa272b0c3c0338f7f12bc3efcf526a0aa6a85a435c77e92bb998b2d6acc133ebb991bb9233ad3273b54fea5c2f1e98262caaa6ecef3be5de2d9aae234a0a575d5c0e955f6aa1d26868faa441f16d5b2d -52019dcd86bb242361bedbbb212002b8fc921cfc1202b87bdc65189caae6310ea77664a7a96f1eccc4ec8b5e3f8fe0e38167b3e50447c46e13de0eb1de9a5a24476b2059ca6515f68f3cc7631ab3ad684ca9a2ba83f59747e8cdb18629a576257e78b97dba81cff84b0c097732929a8c9f3f7386d05f73284fbb805567a62500 -70837b27504269ec8273204c64c5f1e73a26d2bcfac1dc8b0c8891555e7d681da99e013625d2e77fc63137a1ff35f76fc53aae48ad8f8dbfb4793ace7268f621514659f6e00a5b27c2755d5619dd552d9974190d34ea06522fc532cf7e82320dc72d9ac7a99f2a7fb334f64c7273fb2dd42a0f540ba3fe9ecfef10bbfa4b0419 -9b93279f1b26ccc478d52aea4c458874fe27961f4e36bd76a10edb669f69b00c32471bfe6fb6838ad051856cc62bdaef03c3e3399df96448fdd30fda0bff022cf6478ce57229ec1b7dceeb182e0824a57d57a2e8e198f3441b2744218506441fa7791c7573fa218842ef1f10c174b95cdbe2b4757494c1fd0214d4d49d63a808 -00ad50f5139f5931afce4435cc962008c938a8366f30eb46a62f73dd79640608caa9d59d5854a099e1f89914aa940a336cb618faf39e2e16fec0a6f9326e0209f6d44e624515afdbedeeeb01c052e05998f93f60c78c4778ae09b6d624caa522ea64202548b40315ad11d8d18153ed7ed4b7c64a629c919b32d05332ea747824 -ffbad1cea1175d88b1f8954c210d39972a7c694283e641e9937ba74db470e720ee958bdd2d07abdea79c410a651d4a956d3a7d4c02724e361c5fd6e0af018513a423ccb881ac9b1ea43e1111ea304e2a8d86a23986f66254fc09eaa4aef7ac17c3008a43ff9779df58c1e7623ea3ec0da84cb7abc0229c548b0b8a8ef5e4272a -44993b770a9d698a26f872259c757440c104863e9b8ab7a046493d9de025921dcfb488fd69437c3e555e032c9f400e6e5361b83ef2e02d81cf28d007ce753c151d1ca1ad36b9f43a61debc7b1b0293aa6d897c49d42263f32c886f93a054411d7a34688fd4a1cfd6ab7c6af3dd46d193e496beaafc0e54b738196a65a6392e03 -d6f963bbe0c9835d34c252d8349c049c6f14c0175068dd4165ec7472bc8fce2b5513042dd4ea4bcbbfa17b3eb4c8f06c4e6ae6348524a635037c63d2db842f0a785482541f019b60c4146a797620d1eee8829f716bf6003280307f9648e2ec0ebad13b8cec1302843d5c29f217105857efac3fecf54312d3e19d015a938c5900 -9d0d8691032c5b4e40d8044303e886f8d8ba9d7ae9ed4708ce372afac5eaa8018c80e0d29f0aa9b62f3f2976da9bf6b1236ed45d0f1257f80f02a49ad47eb2222df8a39d8580b6e7c623a3b0e4199ef2acc01d77903fb79ffd7d4bbe4e402e1dc922631cf1ea03e53a412e80a94627d5f771d81d60b64a9aef4d6ef2a739900a -99340ada7724d7ed0ceeea7a33acd0d541ba0cf8dd336d79e1a14f3e02dc29185d07c6860d77fb9ecb365622a8785070039803b198bc8e7346d27772214b51081bddfa655bd00b9833666bbbb55ee01667756a800217b3142a7c81f67818121a7ea087a49cf165e8885aacd8bd1ba8c197e7a6e0148a730f9d0a9c272ed28c29 -b3d079a248f34deb37a079cde933df27c33ad93cff2855307c780e88d1ee33191f2c31901391f55a29a4b2ca2384c1af7ed4c9a7b08d23f22d76edfca09f462bb89b095386f5ae0e96b92c6c0b51069a3a467e949f3de77fb30354b85fa1892d40f730cca6ab0d1ae19119c73b6546e4df393dfb97da520653ee45c5d18d8e16 -997ffc88e986794126aaad924e0cde8eed6110b790502ed945b03f0ae6b4452857b465831b89d1f54afb1483691549905b492ccf3bcdf3bfbd989a8d15176223476322d53e7ac1ff1da699f7dc4f45caaafdf4efbe99b192ae1fc8518f417e21276aac288cb5e2d07fde7844085ffa90842d4f4fe18255ae63f84de79a85d81a -6e49689c00a7a31acf4ef20e9b84a800341008e7f2d5fa8ba7bd4462dfb3fd0475014ad06fe18e4923d6e556f080e0a5a12e36735b8cedacec8c21a478f13822791deb39337843a5fbce3db1e868e1ff1420dccd47f4545145f5e35cc9253301d7a9b6f6ca493245c632d86b7b596d1467931817fe45f2b900335f3a5c97d621 -be1218ae6b530bea9cf8aaf52c6b48832dfc67a9e186189c3d0ff5b505d93e18c51a65ab4d131c572e2d3e30f501dcc837d28dada791b738bbd5080b90b7530aa1172f3d62d97b7797e496ca820070ea5bb3c6ac25bedff89b946f5083ba111c3a0c02c3840e811f2c1761720e28afff622153b1c6af894abf15760727300411 -59cdfd8fabb0a936e94785cfb039f00f8f9e822987238ce52ec5aba4365e6503e0b4e83d590f5a0b806447fff5c26ca27cd65d1574f3ac9d4f7eaa6eb0261608b648447ac0349cc3fe47741f024604bf0620da91faa81dda3687dfbac146e01a352eecd0dd5a81fda8c1011a68e874d4cf23fa4502929a1c84433fe3c915092a -6f069cd52d4cec43480bb6865ce7bd8cf759126be3f840cdde36cbaef78b07264fbc1abcefac14b573a0adebf28a1d004338a8b5a579717b4c1eaede1742001b1be2ab827961e00c1dd9c541872f4b807a8afee29fad6100caa8bffaf6ae5f11890f852aa1439c665db268042ff782670a6cc236ae2a45e175b34b0f90a10624 -2d24ad1d74b365077ac02f0c65297eee24df8e392a6820218f08d53da426e00258eff20f8faf14736f094b6a56e2a624f950ff576916533950a92442c5e33c02b796a75d358b56b9e0e8c93eccd0f8594168ccabf06e0d3f64e9c551c885f902d875029d41d40e97592655b168d303b50151ea5675ea7a791698e400fcd8c91d -6973544b4d96dcdcdc7bf0693739d9060bf467ebffec9251d09719df570ba105809482e64ab0ad69c84f1664e28290e59a4891c27e8acdbb2beca1ab6effdd2928b209718cad9e734edd7f8330ab37d5eff1e17ddde6be8fdffbdcd3a0ae052c5dfbe05866d052164883a71a972fa64e86e517eb835b6d8ae803cf00cbe57323 -de3bb68c760f76f5799bc322839fd76fb4952bbb335ef36d3d38893679609f175525b246de8da7c6e8022bcd606ad3f8d2e1e618f3ee3ca1e9a2218455f5f41e54814eedbf30e3c43f722d5e58ae41503ef61f1f408fd4892b450783f19fb71bead3f3c5aa0b419a74f7a2238165aeb5eec106fca47052e874656dbbef4ed825 -da9bd33feaa706f259f35d1b4459129f0544200257f3adad463dbd9df65ad402433572387d358586e0775f6a4e10b471783737e45293c79eae0af7f3217d801ba3862faa7e42a927103acfdbb38cbba80dc1957915bbee681d09555f3a7477265d78f09dadfa563be01475695d3ee3a99d456dc3ecc6dec02f1a525708dd3e1c -f139abd71e62bc56a3abdefb37d0f25a02195280a7779a6957d756a5e56708038bfdd0d01df456459b1f67edb9d300006e5da1934b1b148699a6c90a447e200c734c51e302fba0ca8368514430d85c03a3c35dcd643550cd5b322528e1019624f5ae21cc509c70f33dc28637f2f3929f4eb55fafd3549f29f2aff0aabbb9d72d -d2669d43d4eec76bb82b1f7eab4cf47c2488b4e04644d896b3b897de1995820b4b1cfff77191be9e45495ec03e9369195ee4528ad70df97abae3791b8f9be72149fe7fc5321576e60c98f50c0e6329a82157939f553fc3c1357e0a8f6a7d1d228b20d3b2e78741694e43610fc66731354f5c48d260999291c1904c46f594cf09 -71facb4e9ea608a2ecdd234ef9f720cce4b40b2453d020b2d41c70bde09e1b0a0b3d6fbde657ead918fb107a9472bc35ce05a75321cd39e310bf8b5cf348af182a86ab6fd1c5d11529bfdd8fe70087357afad72d2b70bd2ca7aa95848db3121e909db2a9d82a0386cbd53b5d83124d00e8deea51fba20e12918051db60cae41a -d4fb27a9a6e27ebe233d3067d0151788f67e8769c4d77c89ae5f5040e8203b29a9c670984cd7616feb7fb7e6d2a34aec581696cc0b138fa254f7dc6e1c35372b1dd44d4fe961947fcb139e3e125654565060ee52bb5ea63311df051dd4f2da29f9ff74f7172eb94f569d4adc233b94b4a8ff46eb69712cbb15f08bacb4f00508 -62c564252029c97cf8c7371e2f369a9b7b20ef3a610ea1286c0e15df32047e14b43fed69219d36c56ac05d9dbe7785ace0bf9bc3cae4a28c990a2030ed0a5c0c389bf93c41cd11bdb796853d313258d9f1377d4e8b029c6633f134adcc88a72de43f92def305c4e91860116fc4671b10494cd2cf1452b2ecd252500d8c391113 -69f83fec59891198f38351f2137d54ab9f8fc807fb7a2c6de9e0003a0175572232f436c811e6fa1f375b27d865e23a09cb6fa3cd7692abeaad5596051349760f47cebd4efbb22b874003a06acd7814be7d13fab05e5e2326aa41f3e583456203e8b12e5042108f0020da5ff5bfe7ff41ecbb60b73edbbfd52b898e071f24fd04 -ec6e1f44f05ba49aaec06a32ed025b19534e61d03fc5db48343b35567f6a14038a169800831c0bd142ce71a53fe18d7e78fb51d300a3f9720d695b9f4de1930fa84ca7c348802de0f65b9aa333a9012dbbed6a55ca82e8db7b77a8e5caf0232a97f2ac9442eb46619d76cc964ccdad264d395f718ca86b1ce0846aaae076400c -7d932a1e9310a07aae0cd0b58f0aba934517cc01572359bc3708260a8da36d2b274364c6372ac57802a53f64e5b2b1c947ee33c7803a5e4ea846ecbf6a14371df4aadbea0a8d432a95f11bfa1a61983e76283bf5271a0ca2bb42e9ccf037ce1428df9a8af2cbeec12f19369c82f445c44be0fdae6d0b4dde20e22de9186d480e -634616ab192d23c151d239379b5e6b88db48ba1eb57f35402f6752997b044f12dfe60975692996a4a6abb0f441c56648af733f276d305bf0a96bbeca7ad6351378b6eef6b528060e3b7b07f9570285a6999db767272adbb3bbd0bf55ad8ae20e14571ff55178767e96624a534633973b8a1257d3b91c12d9e5e047e72b911a25 -13ed2682a2e601b1e242af1dca2e0d3328ae7f7e5b86decccc397dde13315008b121e6b1ddc159ae3dfeb6f749a6190a29cac33dbcaf610b6a5109bea01ace1184f07d801ceef45d228891032b6372923f5b4129609cd9f997505d0e4083af0619a00503dd89fe0592095e287352a8732f19eefda66c90c8d04532bf632ab915 -66650bba06d79c337e28cc5269916e1dead140f4274aab1fd9ea70ae82959a2ec73a8322fa2f5d03a753fd068b3705794fcf81a026d9d0416ff09bf86f343415603328e87941bb3bcff301e2a90d9d5d6c87f9cd7db8e6896d026c13192c9224b747794c3a5afe9368cb44d7a21cbcf79dfcf5b40f26cbd72e1b9d39f1c5ad20 -9630660874c5015dfc920d1c7636ed5b6c066ead2f4a38b3f9c4eccc1ddd501df4fd4304ab068b8241dc9059de2051a6fc621c13954180ed233ba4d1d4a79f20c04519530b9f76300de2766434bf58d1ca03e9d656d90b75f74afdee040adc2ba61948ea8980bb96861b383e9cc413829c816abf1d850c0c7fcea5c751e88f09 -f0e7791d9d3cf2184419eae5db6a4d1caf10d53726d01a15f7d65146b89cda0348d8e5622018d911d6d25842b93f7fc60242caeade9d1daf5e1b9e9f29a367081f8ccdd4a4297cfb90e3c95a29fc62ac8febb5fef3bf84b6af5945e6ca21da1b3c3ba94df77020b950ecff06cd123029e2fa1f5496fa6158c8332928c2ee572f -d5c29285a0b3e2e38bab9662a6fafefea8f40e751a23a210e41c99785c6d43050b9ea07680a08025084178ef208019a4a38a57a4e7892d4ccc3cdc3237f6e80e05c1f518a97a185009efa3d3e1feaa97c3bb2e1ee98811c5cccd59799927052c2a3702a15666a441384de1399b8f525c3c6ed929896575869ba92c2d0228ed2d -b5ad6de6798b9bbbe7cc5f5e698c6216a6d549948d584ad020887a0483fc86056bb5ff975a6579372300b7172d3af38debd3978b7db8f98ee7a0412774b2ff091d0b48015ff05d7e541fd3f2d7db0ca68350e1febd9cf7fffc12ab1fcc3aa30ad2179f52b58988ec70f4ab1a117be28d0ddf9ec294fa355a9f238295d83f0708 -512ff34b39b55515f9246536456113da91e0c4487d57d8eba43a72b61c042c2952922850db68deeca4f75c26b7aa0aa925a9a800d8dd6393ac85986804ce7f00d63c47198085a7fdba584c23a8c5b356884e239b50e51d4dea79e1f497dad42d7629b3af439f5310af611a79ddd1270fd0bf3c9a13b02f664ba12937dfbd740c -2da566bbbe9f688ede1f3c732107b2995e69d0dffa2f583710d9718eef1c7c0336bfdf1bf48612125b4012eb60ce87fd1550fbdf5e0fd4e055fe6e1a843a5f09b887fb161f7d1dbe141c7656ce147515c8f343d995cadae31c0bbd845c451430c1bb5ed36d4d5ac352d17d537a2d3e3e6ce9f4fdbe1a900f7aafd2527f276a2a -81aa55f57b68283914ef2505cbf1a7759cf5ea021d9e57f6e0263af976c1c403cf80ac8598a6ecf985477edadb0e60afc114063e87e2b053c1b248165e5ad22c853f3b1e9ae68bfea409cb2fb346e7177a91c9b53d553e5a951f496967a40b10e6e46bfcea55f017e7b47309ec7052b94ba16f9d452a4d63833a3ee5183d9a28 -2dd6c5a2ab10a54c26acfc5243461e1cc103af8e0e8ad7aeba1b0e392f205106eea8cfcde2688556b117872753d0b279715dc48f51d963618f2a3fb71d6d7615b62d1d58b4c0977217f670f7749030f91181184d6bb03468ff78daea00b9cd1f079055e32241ab537b3749387babad9f0a2d8666a9a52a26f754c032f8f9a610 -57da6898dbf7476c0956971cb6c1b07ab27c82bbb59cfc3e91c5f3cc70a5330ccdb44dc0cb5fa81e6bd75ccd58d05e4be9054774d644c617284175a50c675a06894b2b4639f682b8df830a894b8c3ea9a34bf65223b623762d143436b09f0d1a0cbdc7299d9d57fd97ec6fced0e5b5d75fb30e5025c0ceeba4f640cca8a04b05 -d3d72020acd9f0751a322bfedde6baedb3e1ec32b1058fbb78743268b275ad00c605cd772fccea582badd30ea4ea40774d4e16401b910ad6b3930b5b70555311e554e8d642e075fc259e6a3ef245767a1575dc797df2f2926e0c2c7650fc96066a837d1ddeb89192d24e1050c0d093556d9208f43757af5a0e926d23647c2703 -16b3f8db6fc3e6b00d171637f1f4008c55d98f9e40bf37b7d1c8fb0c7648c9212c27f0d7956ecd3b598fe001a99046e987873d3774b6923bc513b93c788ad21a85068d8b06cf813f143e7294aa2acc587d0dbd1eae5b4d8767b0cf7a1f534c2a10a1096182b84b6e1e6d15f32acdc6fa64bfe24bb39fbea9a0289ef3dc780f15 -3106eada528c12e376ea1b830db4cc63abb9cf1c61da76dc672156a8ed944306aff4988f26f2a9039f5eb6e461b5bbea4d4bba144a4d7aa7ee42ab455fbe272be17fa5c8b2a61d79783a8c586ed180e7adaedc16eb52d71297910b8734f8de07fa60e72172bf5f00ff5700a2faa7f573c602bb8258e7e5c992e11325788e792a -ae423690a51fec04e0fc674e7d41809ba15ae6963f8803a2f4d76fae5159c327c699cfdb1bc053db3373dcdd8ae8204d1a6a3c5622cf395a001169aae9ebc1248aadc0e91a30633818375f64ee45f4b44ccc922199fd9f3328c039378b832b0c6b4c56b249af0be014a973367c0b511d704fd8a20285674f43b0c7f802a4f410 -2a693d32bdd812ea397a70da2fc9e447f3859b4104c8546206de7abfcf90ec0e680384fde5921f4300dc7f82439b5baf40498071390f3e683bf5423d0597be157f23842ec3675c86db65eda72ad7d8a403843d2d319ccd80c8b749dcc759f018280aad514cca6052d4b0ca16f39843cc3f24f5a59298cba2556a789f701b5b0a -ea51b648bdda5dc07b4ac29c340f13b1e38298252303a83ffeadff87ca8c560ff1260235022ac9bfa20752d58ddbcccae510f013ae93afcb194950ee0229cc2397c4e91c258743cfdcd5cd5b6d627549bb3e3a65ebf328fc57164a46696e742ee140c249af55ae56b425fe3d3952d8ec780bc14612978603dea3f1bc3d471e1e -d5ca6535cee39cdecf7dcab40665e047c5c6f527833793ec6be24029aeb86607071fcc993a655cb00c842002198786bf8945ac239ba9803f62eb5daf7aad0f0cd5580d351ca708db9967e0dd280c0268889404b5161fab3287ff874f17e8701c41c7d103c464b010bd00ee9911a6cca1c008cec954843b5de18474b161449a0c -557bb95bf3b3dd98ab4d079ffae967a773e64982b83a5def12bfe25a341c162ab73fbd4f8f133340e7aceb3f2e6db12aa5d61932f198b69d4423eea0ad59880468e2c497250a5f2fe608d966f4d1e4231c91e7f0feb07d9fff5fc8570c3d0816d18bc9a620f122f2d849e15c3ec8fe87a402d36405e2dd0d104cf816f9102510 -a7a554d5ac802a267e2c1b5b79d212138032b5a41fc302a1c23fabcb68162e1d335827939f658969369bf9d8727fcf104892b0dfd026b65bea3a8f7f3433cd08aa56ba723a33886c0a529fbcfedfed7822a3fc8ebd6398a801b3bc239847eb0076842e90579ab056b14e32ac584b732050d1128e8dcba6d34b053c74f3f55302 -c5b67ea6faece4843cca71b820a98bc046fe9ffb71cd9cffbce4d1ba8c592a1a803b0ced733b76573e7eba7ee2f3059881f652a69902f5c7c2a583609dcc6b24658fd55ea11f6932d6dfb91e4cf07ef4a59d2c1e7bf3d3ed5c608998a3b7c52591584cbd91486ad669bc52e511fb80ccc4cc7db0bb9b0211ea926fe7ab146a09 -e9120043976d7bb3bdb5e8295512e2d35bf6592742c864810eddec9df587b81186835a567329ad102962f8f8536bb7975422057605a60295fc354d987a632e22a3ce3fe2b0f909f278af3c661a1250a6933254a3e6571497b09a8fde27f8ce0e6dc500e72d9e9e445e36800adfbc1d3df63e2e7d370143e96802e6d776f2910e -715eb9009c33b268173313f21c7c90d031735ad4c9cf55ddf0f820c66093b30f67488e8d8a834bb4c17f87a5c95acbb3734050c639adb333977ae12db54f591619c1f536174c69d9dca650847239866fb07f0b09c264ff1210962e4765315d2d8efa295d7c2f8bb153ce0a0b4b97bc0ce7464e989b79a705d6fbd017bebcc90a -b76faa7dfa6aa13bbd7d3f32dd5ccdc5085a2a68ec61c1325c9613e3baab882f50d4706cebc00d181b322bcab8f7172836fbdc5ce3b58a1348bea744cf577313f215f4e6a7b5d86842fd50d5729228db1864fdb6d7dd84d58782cfc10c164910b296e31ef427dd8cc1b9d1bd08958c2597802ab73c5d8058f4bc47fecce51c0d -7a7a321c0a70fdb023bc7bc84b038f7075c1ed82370f82337aa15d09a86ab72fcf84d2a8a34d898a5fd282d165ac291d79699f930dcb314b50a87e2d5743f40f514579651c545beff7996ad67eb5db4fa89ba0be2e46939d237d0e3305e9ae11cecf21b536dded079b365e26b26ebc70f203b24c55e5fbf27114f0d06ce97f2f -8fa8981b7a5ef617a8487e070216ff6391575fa4c0e3ebb170c366d44e39e4259145891e94307c849f9d5f564e082f57bcaa4ceb201f2bf22183a055a889852954b503d5aa1d9a8c9c8aea27c827605c6fb70e3e8161a44d1b0ada93506a68290e667dfc48918f64f03407ad7d9818e3727861b57b290fe502941001fe6dec2f -ac2e8085abd50c63b841cba7ab11325e55d87932a7792033588b7eb194e61127be42f45dc1a568e9693f7b3d54df17bd19849a11bc0e05cd9cb240c034cb1b18e9a861f24acaafb68e87f4114a4ab7ef95bd0e7de7dda562f095df0754fc2f1cc00dd236a13463b6c6c80f680f09e79ac1111fe015ad570ad373e7c5717eaf0d -9cfc97bc4a317e771d334ccf70a00caab671f84e892baa7941bdd255c983ff18ca0218fa1da3b73f59423470d408ef0b3400e0d8f089e96016a2b234484cf41e715b4f81499ba54b1b3a2d40ea58d4f1aacc59a52afa1deb212eef4da65ac81d8423e58a1a78512e4df516a990486ba68759cd16808cf492bc2853a16e802615 -0c8465888af7a82b9b74f9bdc7931bdef71d7cd652cf0e57d6677c62b58adf10b7aecd15983f3c280b225c89a2b27155f42a57cca1735fe792831a7ea6192613c0e117aef415b2f0ddac2bbc1065f5a8f8ce5959ccacc8326b9ec1c87bc4fd20419bc3e4e4c334ae78f715145b38db75e91526188ac1e6b09d5d2f073a53f309 -dac45348fa6661dc3050a24edbe4c7d20c6d62d1393d597e909418663b759e03dedd93a6781aa49effd84a7ac8da3a589f96a2b4d543cc58ffd6971706d1462ee602c46cc03571de0d7da25777279ffe735b0c14b116be5e2c0f518d236c1a0f58b15ddd0aec25476667e3d35d6295580812f13599463d971eb7ea54bf5ba319 -3f63d1cad5345c074622d8a0ec53987a62176ff8fa210d9a2cc60e15ce3f94072e1573aba6aa5881731c699dfb6877054aad2ba423413ae6dad6812688dcd9085655e68bf9dd7afbc614aeb1db1a71c37c0ee5da5d249728875a2b00481b592e19276be090efe09390313f8616604636f88af5a8df2a75df4c81f7ba5f23821a -e692b1230310c35727b8c41688dfbf8f3420cec0dc5345277462e754d91d611b0a7be46727be40cecea33d5e31eb19e40e4583e88088ac366458d41e0e706c097039b32cbf32e834af2519dcec22a3d037c7366de1bb83f27a7ee14908965f1834a981ec7a79b8acc6323b0ea9edd05575f1767b9836f494508e7e7fb8fa0508 -cef02972be1e9eeddbaa43c6e30559c49e5a603f8beecf646b050f20d996730fa3b621358c1562be7f0d2a56786324f97dc7e321f37b814321e7974633a3a9211a5ab7efd873618ce8d3f9f1d6f83ce6e1322e10650aacee17e4d4d0c6a31b05195b0676e04555f01d23297dbe22a33c4514b3cae01dab49f91fc49c8614ca24 -9b9dc034b5a6de6d205e8c169f53c5c3b5af86cc9e836b64c38cc4c32b232a0ca66fd5fce4588f2e14ec4b3a3961198cae96dba2de338b48263546e64310c40f3b636c62341bbff75463db9023e995f418af25d7ef0105b5a397d1cf12b056269c06097f0e02b543ccd42d20d3035e045993d047a4ba19f0785ec4cdcf75a325 -37cf7d79bdd6487a03aa3e22a21f95e81104330a9f61c4951a91fbb9befb8b0561c19207b0088ee024e6b52fe23fcf4dd0347e12abc72605d35195a612147f2c9da069bd286f4d4e1af8dc9101aa663acf77f69db3cb0eaaab3591556ae3e40f2a447edb0d51b5c3d1dffa84e235dfaab403080cb54c7de3d0ca395e3c1a8c0a -784c5f730a3cf3977f7cc9ea1d106270b20076b865fd90bf477ddde1e2589825f554e7092256b207ca71c315c2114e81fc835c3273f7a7e427b8e49282a6a817f46e3b14bc7f11890c648b6b1d950c9a19ea02a484d25f17af56e349a0581c069914a2a892effb60e636839037e15c3ec58305128cf632eb8e1d953f4fcc662d -000e6c5ffe27bd55f4e1eb543f3f8efe57a82fa07b20a16dc9fc8e8a9d013f06624387dc5cfbcf87a3df798509f75eb047eee479f888d1da37b78c314f9e5411ee316ff0d9c9b62225f1288db6d888018ea0065a24989affef325d7e6f008f1da92ae13893911251b566f3d15624e98acd91d56105819378664dee3257240b25 -99287be60681a198fb580911f1bb703d72b4d95f3490c2f6c50a73c3a06f9f2f94f16826eba615da74a5ce22ac9e62c5ef295edb4abd756571e2be45415ad60a117da7d7bc73e9fe042fe0780b7526660ef52a99023837771ab7105f07409e072e9e888a24ebe5fc8ebeb6cb7d11ca73ea68134de48723d5b2bf3708e3c95730 -573879cd26201c4ee5f31651faf419c8481e8784153dd0540db7a9690831791ee6d4a49f77f72e589ec606fe7d4b2a8501baaaa9d90ef00e218b635f76018212523c8f9cdcf7f4406491cb923839b72ae2164efb5b326e48c4484e63bfdf6d03858d269c41490ab66d2e7e4ed32d84f4afa027aaa5f8b8af696f2f9d08d9771e -b0c5c5b6e10312aa0e228971c2b11d1c6b11eae803ca2fc9455a3603641b2a0478869f6dc9d32f234e76aa1e280107d4dcebfd9eec38ec9387f8adcbd30f201c1ac8b67ca0bb59c1b46215cd79acafe2b6a5c6cb92e1f5ada2c69dcb6203e027fec324ebb977dea0582c51119fccbd6ef5af0eb0e731680fbafa9354fc159b2b -a675e2bc57ac37eaf5570ee6917800e3d0d9333505bc6d426ca47ddb952cc220de88f3bdb593447f52251a72a9025064d7fc9c215bdddbca0c12f2eb2b8ecd1ca765e69123946363d64e6fbc8961acd5286aaf29c3bc8614d692927ee9a4df00e7005235da84f265c2e7a0ad1d57d72a1daab09d5506235b44c3ff81fd35c108 -77fb601cb23c7062c2a21da0a4d869cfb2a6df6be57f7a18380a9eca30df7d177c1e62df029482475d3776365827c08c410b07b8e5a34b45a1ea9c7b33c8670f59555147764457920eea929f217603147252f230b5b8dbf11bd94cd05743ee13e7f38d209ff03555bb1531f1b4345925519752ad551a559db9213e3742d2ef18 -3229a228fb4eab03b29e82646ef0c28e43a01f45f08daf529423387f2aadcb123e4dea64eaadd8218f743200ef8f0f4d3d413337c01a7c9ae9c334995a7606114d19739a6f8156cf6d12e2bef99fa166d38b6c53a53a6aa4db6e6cc210489d2e0e94f10bcaec8f21c885a822c064ce00e045a9df57048dd85117010b40c4a103 -40e94aff939c85306a59937a3506e3fe435c4c7cd57d7f3738f5fd3c1287bf0b71e17789c77d581f0af244e9a14020e55f8a6ef5dddfb0c23ec51889dd4790041da6071d84b1fa9e580dd92523f458baa52276037a6afdc1a6a3b5bb1ad0be16d25bc63cbcb88a95f796abc4df1db0f922906c3056093bf1ef010117cd154a15 -ba710ce19d3100811ce4c1b44847c494e3b0534eba90298342f20e0fd0e1732bc48dba5fe953019a7c7b8dfb282bed5c62111a12faedd2b70272ab70f27efe0eb5b6df5212d8a95854fc535097fb36a4d15ebfa2a5bae9c7071161ecd963c714a5e5a15dd88d2a78ae47f08d617ebd630ab8c5b272fd3ca1145bef90c03a661c -fbf3cfcd90e2bb84ef77d43815881220850786d1f90122e8ea0ed420c0b5cf2f176bd55c45f3a41f938aaf43a716de051741b35e269a6d2ae0a385300e3111206dba66e72f27f1a43a046b385eac746918424db02175eb33f9f7d22fff4043281b5326f98254a0d28cced29b1f0d651759c12f839776a9e445b448c2586bca1a -d87ae525d7b0394deecc3f3beb69ea0d8e45738bb52a6934aff9493fa5acc30b0841ee59bdc700ed15a0bdc125154d04e7c47b414fdfc70e082ce6bab359532c07ab43661195d524e2a86c9e17e696495c7e81b39015deec4b7fc2aefea90f26bf45e465a5348474feef8f3c9ec00fcdbf01e334a192196af0ca50d15ad60519 -8fab593ba27410c88e40a688dd7b3314063911390def9f225dac5aac9b83201f7dee4bec31101aa329394c0f174776c6b8307029dd3ca19fe5189365dca58f298044eb377c5dfca49d9e5df693b6ce30727d7bf646bbe748ad6be55d6391db0ea521fd6a58b27b4f99e780b572bdc27ff28ae9cd52162bc4b603e24766e9ef2a -f4c48e02e2b1318d04fedb2e2387886c68de334f155f8c706de1dc7e91f052226862a2d44e731a2a6635f05e3d9910e0dfdb9703fa1f25cec9cbf8905cea2627b631eb237eedc8d807a1ae30403fc1e77fea9c5764f6885a8541273a40bfe6110a43cd4d5cf3210c272c47fd1ed3335a4d6879cf67406afefc310f041b2db32e -c4b04602c31c0c143c5aaba41fd896a147c660208a1e31bd00ae0fe3afddc926b02d0d84131524cb997b39e6f8251a6a01ddf51d17a195c24bfacf5df1168a053e33cc0738dc91b60d11b5e698a3aee91cb02daa0bfb027136d02d9887b23228c31b270ece51d7057ac84ef0f517a332c9bf4ea44b94247d6f7cca411dd6c70d -45b3624fb5441aecb2ed0cf2d875c7209560cfcad1ad07931797156a2558630e98e8d35af6f01b3849954dd040d89e43a2141a597fd595fc5c4ad7b2f054222388825ad5ad17a007b2a19772e672a7ae16a20b83f02415811a21c1527bf62623214f8e7df00299c8ddcf251803089b82d8a8928f814d35ca374a0a8c1ab6dc0a -c9b2b42997e2fa557fb2ea51d5104e6f283f43c15e75a52b53977444726e07155230d6fc7464e2d6d846812b51d20624b9e339812d9bf93e1440e38164f01611e0ccb86dbe77dad67f7d70a6fac1528ca8c7abca2840b9f2fed313bac1cd0b245c4bf294d8c79f7483eb511c56706c398c8bc28cbf78c3433d1e82f7f92cab28 -f065262e14358b60ceb95226fb0d764ead5855ba54809782baf90c3ab480332d5732a3e98460530b346cea4dad4bdc4747205ca6fe9d02a5ce546f0da07d330756b7a38b24bb6fec9b9dcdbf04c4cfcd1d1e5378f43772b3f6018ad3a54c31112eefcd9fc7be555cceed5529faa49f2a00536deda9b5ba606c7d36c97acb5401 -4d4abcf450f69929a4963a0d5430f672a93dd70da515c1eca2fa6896b349ee25be6548b94156df36f009dcccf86846835acb729953b8278ef5d1d2fe5d307a1e3ddaf409f27a4fda53767924caa0fced43c0bd7c784edc41a4f4750d4636ca0a92fcf5b2e08f9e1c133615545d4d7484fc3dde984b94513681e934dfe79a200a -311a3f7f13981a0400808443fabe4fd5ffc0d67277da187df88dd1387c468400e777070a5f839183497c154e907dd98487c77e07221f98e77e8c46859ef1260148244d8460e408a0c1b5d421e6d214816afa2f4a071eb7060a44f897b34b5914f8b9a5d1a6504c21afae83018994ce637a464555aa241392507d661e12685224 -0095b00029a1a888fc6567f6d2d20a148814027e44d3fe298e2df0e92f036f0356b621cb72f9194f57f2f76d7a6ae23a282ce7a533e3c19e134f3e5e3ba77503ffe06a2902f16d4e3310e86be903004d1cda80d384eb0a790280ffddf91032083e4ebf4271dc51a2ab80a294c3d3b548fc8da1199a25ab315ff3044e62d5ac27 -a296753e3ccf5dcca1e334bdec7fb595cc68d0b6a390c9af5a6743d5e01f4508469c45f52e8b742cecf4ce5842bd4617ae91db6df3485b7bd0c4757344b2450f7118e1928502b05ef32e270ed6aace651b75f1195a8afc8b985e938585741716e99b81cd55d410c220cfbe0ed77a2d70ec313404781f7dd5e55347532145821f -c528ab2e3568429665ea8ae4991d5bb29023149e4ffd31461668f0022dc97914e5176966b1f45266e659206655b4bc8c3443598bf3f3c849ba3944724f7ee82cea7b844b920174978c2832befd3331207fcbf6876dd38beafe8d9d31e45466134ff54f2efd305e038cce02e79fd1f39fe239ad0c72859924fbdc03ba0677742d -0e8980e962934dde722e8e9c7f36ef9543d92f26e933350edbf4986f21e086112ece16dca7b5f9086ef2ecbb1c020c6ee91e547ebf6d7cc6d6c4db6b5861391cc3807511f70bcb4d0095db778875e5cf6bc9888424e825ace7136ba15b444415241f33b449082f512b430ae3279acfbbbfd5e951473d926155ebbd50545d8222 -41df62f2bbf3be05ede03e0c47d8a3867bcd195d3f55c77d85256a1487718f139320b8a91426bcdef7bc6da5ba310c58307d090b7a6b68c8f2d0d09b03fa8f261e006fd7761189bdddc1cc8f2f6b5b7af0bf2a1fb14677f177e3f28fc11ea31f6e49ca6e2041ab9158f8666ef18d2f413f8b55aa50958b60a10878a8ec51250d -c505b69ba0c138f52c0d480393e77bcf144c02c4ca7a4874528488b64cce84219de50daca857ba9e61e548c6598b8cae254e178dbd90c4148bb25443e9c5ed2fc50a5e8c8c7f55128cd49b33acfb1448fa41b09a19a6373bd2a489c8a940a924447462eebdbe7fa869b1898038a8c94bedb6036422c6ffd5c313c0249f739417 -92748a27d67e4cdca26a80fb3234904a4bc3256167ed5e687841be54cc9a22062a0a0ef3bcf1b25b28793c57e39a03a8bf66880556c30ea9dc0dbdb75099e927d5187b71a6ea83f1d03f779d5d5f9358b409b3873886f84560f37a566acffd0b7a411a2237bdb08369fbfd41727d9d7cf0c7348b5d81613d89522352a4865e0a -a61054341432d708270e94575ce2dac104c4961e79129c147466dad3c4f1e8127d6d980f14f72c86e3b02653749a2005eca4956d001593b68d7a19deb68e7c0b54fade79d2aa6f1eff6782b6dc9531ecc30489c1b7a1259f5239c8e5b471da2c81d6ce96e931a1c6247a4e30a0b20a6828a1d35dfad15e74e894cab3a17cb305 -f284ef7e82ff83ef7fdcd89acde32acf86cbf554924b0556b752e8847c7ccf02a2790eb8da67548815639256ad0c06555bdd176e8cdce1ea85b35be4016b071ec1b6b747e3df61bb0ffb3e40aac34306a3dcd84d171fc76c16f2dd9fd632f52e8e0ab53a6174163e5593bbce6ee05d0f4c95ca232ccec657cf2dc5f08e87172a -7c475ccb1e37eb12b1b2ff1da66a10bc70b9b7023795b7feda40157b3761e90d9ce75068ac999c67019067435e2eba161b4fb2c75c19d731177943e2bf01b32c78f0a2d98b7dd17176551a40e9ef1dea18d5e833c5bf3c18f70b36507a166527815ef8ea12bf54dabeefd6fd38321c679e8143e4018521a999772a4a59617413 -2533f469f9319e8b3484315ebfc04bf4be31d4d802ec5c8146ed39611a08af09ff8d96f51f08f9f888b5d6adfa4534d99a3e47d17495f7e5fa0630eb1904ba2d427c1f264039c15b1b5c216cd695711c28eff8c70e813382d0a321bd2563c322b815761db2c58baf52bc5dd1994de7cec51a4218dbbeed661d767777b3b17a2b -e7fe658f1306565bd62ea46b919e434188812764a3e29ceeea076f00173aef27d184a29e723fb3d71b0f39f5238364ccfed16c896f69364819083885c2399315096c62aeb689ee908b8625da9a03ea240b8824d71a4a82510177cd847f506c09d61112498c5baec6b0c5549971b3f7868d93e6e65c20ad3581cdfabe9f6b1622 -1d69660993ed1edc6531ee46a1f3301976f9474793e3d575a3937d9763b2d8123625af53685aefdce252f339266b42d888f4aed9e87afda7c014509b176eb00fe9010a20aebfb1b52e15f3e7f976ed0b5dd894cbf716e6f2cd20a1d456ff6c225425d57fd03e7b00a56ee049bd38892e528474e1b03ee0a335cbe3d678208f11 -e94a495af6bd04ef02d7b8da47f70a52d1c1be616f2ecfcbd61c8dfd232a8b11d05ca8b840396aa994dac2834fef66f568b8a954bf2e82079891da15ca829d1dec1cb7c98226acdefc2f0a083fb5a92e4d1c75d7f2df51ae17cd505c9e18a222ae2e5e3f7fa249a790258a3586fd4202b9e0c6461184eac108d1d2fdc70e1023 -dc46ae5ca796a4c11f44fe20ed92b0b4d97f1de2aa6b8514adbf6cfa0aec411a7163915cc268de26f2287fbf21d3beab0199de1d35c0c70c0580dd3690a32c1a4fc9f0b97115b2958e8c9b02b270b9b382b1fe4ef06e8daa415d4e40196331013d665f3c0dfc4bad36f6c541b541590205bbb4055e65d597cd0b291fa25dfe23 -b9f54b3ffd009c9ddce21657da1db2ace47566baacf42bb52705ea63b014422c6323af54c3cfb83df38a3c1fbf15b94584f8a8cb36de330eec0e197b55173d2963df4b4aff0b5e7457ccc6df58a2ad7420cd235fd3121783c10b50e751487a11967901515da654618a8b9f8682876f14ccf0d9c644e6a763a10c0c97a1c5f505 -aad9817bcf26f7ab58bbed4d771407c5ccf2afd04f34ab41040599e84ce34e22654603272ddb263619678ba1344a859969787658c571fb74bfff7c3365d02f038b5e64feeb2f902f41714b055b738daf1dd8cb90fb1c8900c79f61e58f2ce713df37844548ae1879af2f35a37cddd713dae021ce6eaacf8955728d6cf890c42f -25aaa062cfbd104b5a52ce9e6eb1ef690a80db7fb22e4c33ec87799580307e2aa2c034b9a9d39a756c8956cf268d3d39596a91081073cdd16996547d06ba99048a89f8e8e4721d4415c5e35949f0883f3c83e395960052e3f8e10c851c9fce0a5dc9e9b4a54c650e360da01d123d627b5a0c98bd59030645c0ef82732092d21c -b3b472b3ecb2e198644761601c11f83da8e0483ced2015eb7333a05c582d1c081e4abd21a1544b6a0e75f8c3939fc00e4f43ac08e51559c36b0bdc283fd3161a939c775b082a55c18b930390ff86a9ea3676ad9942fafcacc206c8ee7533f2136725179b37af1529839af385233307500beb7040cb92f3b297320bf49f587d00 -f53eb81d3fb9660f45f9211b8a7d85becd994be58bf029da85122a640453ea092fcd7e79414a8a8725a102feea5765c85f03552bc2df3f1992efa413c462cf1ec1990c29006e8ab752efa676aa5e4838073776a1a38cb5b6ecfe9296e4051c1666b6565bb33d3dd8c17d4975608435c5bacda781ca111e1f3f0c27119c938c06 -fbcc56917a0b7b13c8e3996e88db9b806947fb81b1a03b18bedcd079fd001922519a671ca5fecc0feb8a81998ad1d44f72a559ccd45d61727cfbd73d296d971a5e51b11f058d505d1a9ea2433b10beacc41f96e5f428d731426e1b0b2c0bd20353cac36907f78eb084458f0d11e6d15d414496f5c9ff86b39b59b5de6578e32d -cb70b38724fc02f483cae0b503f340257bc7ca7c54e9c865348be9d1064b9b0fdfc23023089737375f1ce501784fb25e5f3e4bc223cf030254d62e8e7cf7f02205708fa14a5e1ee703e0a663a1f19eef9fcd545c3050827d8ed9d633f7f87c1ea9343245c6f93ca1c2690ebdd680068c8f32789ba59ee7f907e1fcde46ad7803 -b1586a5872d0cd8dcc6a0f10409e0ea1c392b0f5b29fd9621a00292f8fb02d1af174c645f37ebc76bb4b367dae95ff67f2263a4820454832db78f2f3d907a51fd55e83b652a24abda9f3ce203a96aafee3d9cfe40698316fdcbf0205bae349256e418a0fa7969998cdcbee18beabde88cf0300cc67f9b8a547f6452734bc5907 -233abbe9165566d2f1931b1936e4bc15ef3b376274f1a5ad557ed4e83e6321209bed301a95129727a482ea6e062bdcb217b280891e1c5140702bab4d851b2c30cb1064d70b5d8deaa993e7a08dcee17e7f46820b82f4dd7645db0281c1587a139594d812ea0cf26c83bf8e11515fffa31a1dfd819e8124c3492ed77aa03d3216 -1fa1acffe7e089eed6916afa18416d866ae582df6a7830bca65b5f08f487d92ef2421bb6fe9e7ffb73c00497965e183794835bb2579192b1baa74694a930b4097228a069adb533d049fa309a35bb559808e9bbb5e56cd999db0049f672023a1bf67d39d495f6915223a4641e38db589545da3785bf83b7d8f97814d523c1e71b -b61b2957f9681c158c96e90454a3b80e53a5c8cb4ea4aa0f0f3c3710d9ebe810d57693581d08fca312c3700a0d1a663fd88479467320504f1737d3f37b609d28c19f7427b0c66077103f3dd77fc9dedab0b73ca5a56c16e9a5fc8115213d521f8cf47d92225e943b8393371f81ecbff68832605eb57ebff89ca76e9b79878724 -339166e887465275dd6359ec57a5206d97fd4e02910814694e0c67394c5af40b0f97bf135949003be5283794fab59cf8e9ae5855669bd49570fc59816d4c9825a31c4ab2f72c446d20a9e217d9a059bc276fc3fa556a64f7c54410e815d4610d46aeaa5b315145cf6e7256127a1933944ee6922f23e3292665de612b41535310 -66d437cf1ff2fb33c12144e82f42a8d34328a56213cf342360b13b4b84d4d703571cca9f656579408cfe0563aacc7c057567bca09ec6421ed01059b5c273ac095cf02365d7850061680052c3f5c85b4570258fbf7e7d587803ba17dbf818282a79db3d60a5cfb9ce60aab7425ea2b3577d774cef899f6b938ddbdda3993e7527 -2517d2071c5aca6450c3c98196608f952749b6092cf2f40c951dc2582f78d61fb5b408bbbf2dc66dc23a6e510e52850e163e33508a18e5291ca49a641941f32c116b24c1ebacc90b621b6fdffcaa82f7cc327852788f6ac57e86da55d3cfcd13703a29136ab9de0db1d26ae101770742927b25f6193c67555be4e480a1f3b007 -cf624ef0b67b71177bae810f29607e9ef3581d0df4457d52197147dec2256c09ba406dbe00a7cf1a226f5c5621b6490c96480703b242961b75dccb77e541f1233e1f01fa3f4c70b706270f20f78dd6b5289143a63a01bc6e9612032ae6e4a11ddbed9728d5ea7023a6cfd2686385a7c8c179c83fa6f7936b64c95f8e2433c81d -083822eb7328d39aee99c89138a442412630683e5626a9b78055ae9d1b68b32dd31eae7d78fa5811b339dfda939a78533e44ae433bfdddf6d5b853d1104fac14b35a793b46fa4bc2a4a042e345258f9f4b01313f45cadbb8415ff40ff2e6942c69f749f88024ddcd31881f2d5224c3acbca45fa876e0e0fe04549a4d14a03d12 -e70007b16c6cc6bc2ed1bb82368dbe9622981da629b5502ac7dc5a32bb6904218cf88810c78323e784c63b36f71836806da7224b7cb7b855f6e6ad28bfeafb0e2a02e7b2d6349e63246cf7f380f0727e88aca75e2a6e29b80491a4d9d5382d08bb6b83d16fa2de9ed2cd966db8b2a3b249e75f6eba82ea02ae677c1d48cb1f13 -1cb0420ac27d973b50a5ff3bb58ed9ddea3fa9773f46f74e73d3c70daee6951e700685a4e511c21947fb84406a75ae7dc7cd5c7c4af75b1687b921fc58c02a22ce45b1b03c56d88db6a0fbede47e11de04e47fa3956c115cf3c0f8eb3d2d1a0cf8df082d718772989b590c4a3c8cfe6bdd0bfefb3d87ea442d70ab3b7c931c2f -55405e2ade9b05aba4f0bf87eefc122bcda96e2f5acb4c0b94143d559e7f6e275dfb43f58de6e2e54cfc6bfa7049a4cbaf40d89222029cf657540941d703fb140bc95beb9cc202fb5917af810bf7032474b7da3f086aa3f54ed285bbe459b927bab9abd67863d9e8377a75c7cb461c28535bd8b1fc0b438941ffc77e64c54e29 -0d0a696ec828c58887022c5cfe3d9d20c6ccd78b8d8eb25c0d2a1bed4cae031047851b5fb111e074e00ed3178000bfe30783c7d1c266d2f987ba21577f45a30291a13f99d8500a3a7555ae2842ce044e712755844dd9a2baccfb607201c022065404defab7fa698813c0261becaafcbb334c9d2c99b6af0f3ccbfebd9fbb3720 -0743cbeacd1fb9df88caf391b18e07ad82e8679e699f81f2a53aa6778a7d9e2bc19e28bce80d1b5beb4d679b729b678abd98b3fb474015ede58171e41fb3730550a08ed63d58a91f0552f668862a7cf66fd80e9009dfa6545155d59b780cce1ac066f44be25ce59cd7b485c21b272a577c6a2e0672b04097d6876eec0f2a5722 -a3def2ca94a267865239b4307f2106f2e2a68ebd59a2fb9eb878bccdd9ff0f1c2d732a1f5435dc2b6ae5d633c1d884b93af85542ded403adb5d0c05ddca0c402ff6a05e238a0e2c7e14eda1d6269bbb768eadad2759bb0b3f8a83a7ebee88716780346c697a95a7aae19e3868ac51d23e17c44f7279afd47b7d016cb062c4e30 -385685012b353262b99100a6de40344b4bdfc8d8140c08a79e327557abd3b71292e72ed0154ad5aa500cdf9a8485959d1cdadd58c8143b5e1faa8c84ab0d4f141b386be2c54bae304dbc0badb7d703f28c131dbe49edc41fde131fa1fd5b4c2cbd9dce9fedca931baf56a445b87b24034a7515704703ef47c6b2d49acef6751e -adc5f4697e5042b3ae1879cdf1c7a90f156685da6f0b9ed251b5b9b9ca56d922ff920331fe205900368e48e5cd3d34d44b35c5476eaccc4699de9fc2e1cb6e090c6d18aa9680e3090adc876380b5452e681daae9ccd60ecd61088ea01de1f0275ceaaa14d6fd6403eff70932296a67b674031203e73e77688c97471f03c9d517 -034297d47f816c746dd614c1fcfc07c3c58530326cba49a6b0940652a8db50291ad5bb91bf193549be59057c08ffc74ee810ce244260e29f88455a9a19773e244850a7030e8cb3bcf15be3034de2a11d6771b678ed07ec1a02094af8f9dded239dd93b48eacd8ca653bf2b6523ba4a14fd96c2dc2e33eca79a101ae79f54db2e -5a1d6e9623ff0009095645c39c533e413fc941286cd3a56cab11cbfaf4e74003b32be188706d2c693de8ba5ca8be050790cab3eb4b3a6854aa0c1c3dd17f2f2d74d61c6005743594c00375b41ea80cc433e799413a97408d7a27bd2163572618120f4f618710b8307db617edac695f3b7e5ba1ee15cd642b12f2243da70d7c27 -b08902d49cf8216c71ef28025a2b3914f33653f69809a9e17023b11eba0da40a822789721cbdbe84332fcda75d08bd0292c7b8d6e16d2bdefe917fe2e0079a0ab1a59bf3ad768a9baef4e581a924decfd87d33329f14ee3999916688a0a3701637098820db834ddf5306fe6b875c9a2d6801ca9260339390e93a458897d71719 -2646353673970f34e4a410923beb5ec664842fac2f345e559335ceddeee88a16bae344847c474fe1b0a3f75159f8f0acac211c5ccf53d9e6bf7959f95fdbd61b39bb66d035e6014da32b689581dfe3730aac348a083b1a94a07c6e388c43360edf5e199c9ea8279f7b811e7c3e2eb2bb9ce94963b7834523c6b83ef2fe3b720c -9ede03d22a8abc5bf8bbddf92d247eac9f64659be3ba13781d76223726cf812d591a029efed9e277d79d591046ce9c934a6b84b3d8118a48d110843083a8da02a796ddd5367a8e06a6c43bfa119b9337109cc0727db32d8805a8c22ecbb64e280a6d764203c3b0810e06b6bd586faa96f7c2116fdb70d7c30412096377205809 -b3057b777fb49f5194676e164b92f77b639a0e6fea932552d23dbcab120e241827ea6b549d523cb0374048219e09fd384fe1e4d16b30fa5799313ddf002f94169b5452687fb81c192e765c1066def6c9b0a6cb9b70cb34760dbd854dd9639513eaf8f28adf25ad74a6b53cf593272062817d85df0933cc550745e848a022a727 -5c125ddc9a9807748f188b140c3eea2da939f4d1d849452c77cd9f03b424211b6e25fa4f287b7ec9fd48a4269f5ac1bbaba33285f4685e33aff9d59175468f1fa964afa8f437bb3a11b977af2e82baba844bc1d98a2cab8f211d670d917ead29e12c033c25a32719d2cd81fb783cdf5c01990fe8cd8110c0250fd1e06b8a3529 -ab8ef35a46b2a30ba3a32e91ad182a7a2517edb789da0bcd2ca96021b0fa280cfdd221ca6f5ef3f29d24012650e4901cc770fe90c50b2b222dec2bfebbf2d229c3b1d5e37a76c4a15aa31c3ea7410bd18b77403e00f9b1cfd60add62e07f930aa75144e13dd02c3699b449bbf50a6499b87abd01d2fcc6f30c0ccab3945e9a23 -b29f8e314e0fe0baf56e194a54703cd7e0b6c083bc3e11e283b1f9ae9b2c5530d02f2a9330979f2c10abbce6d449f7204abb3c2b240907c7d80dc01581f2821526ef83a322ae4e6ed6bd244519a2f918cd8c6577e745a6f2eb189baf595a852f7edce2e153703edfebf94ed1a00895b9fbecd1cd304d651d664486cb83cfd516 -f9c938fdc7e4437d659e34b0ce9eb0f09f18459fc16bf46b236430b81639be00619e85efc0c94169c1a152f45e383402c5264b018969b2f467bfa15a7974140e4df3dfd603280f04f2d288d09c2854179a57d018efd732a76b0461e5d4e3711e6aca43daee187166c9dae3295d095f2f211ef915639a4882f1610ade24244019 -2d88f1fa2b97ca6a2c1049654b708876e4d383d5d78a18b86047263bb1122118d1d006a3e76cdce2cec7d94afd41ed52f5be81bf28862d8e6a04b566e891ce1021b457645999fcbfc9c9b31336730fa013c229d7a12c4b12483ad99ac9f74c12420ac14f3f958bbd9645730ebb2d8497f7cdaa4235319bb58fb0d7f5959ebe14 -de03fe797baff9964ea57ba1ba3e6c7c46035d100eb3d61ac44d5b134df0e327d57458fcc597153af6a24dc313c2067fa51acada26d08158334d555988eb6d049b90fc4836775982f937071cc79dc5696283d420d628e2c7f4586a7d8a935819f316dfb3fa2f5d7419e7d240a45c373eecda74e31c336aea1f36410f24ab4328 -2e6d4cfc8eea42730a655a3d6385aeb69e6d7cc175c38b860034174cf386401381c8c4dda35ccdf51037ebfedd5fa65de5ab232ab840ffb33cce1b54dc96390904ecb395cc3913c2701b3e543b0de36e2c78f21bb5c039789b2280b6f16d180350dd46da1e3b9e0e6a3161d236c4e5cd62d0cd6e9c740d8e68d4dd15b17d6429 -538580d303aa517d12adb0dc77beb31853ec6699486650c09d9b97925a4dac071fda80c7a7d6d20e0116453968ca50378e846a8fe0ec4879b2e5e6b62f71e91a149b63ce56c292c4863d27bda489ac39d7b882269f659fe413e57392b1435b0170a64d576bf8d35af6c8942371ecdf58995a308be7f65479d0ee070875c55814 -eb155d35dba8fd0307f30e478fa37c5e5d4cc1ab716d0457165675ac32b7a61215ee91c5a50a75f8aeabe93f58708fa64743ab6ef532165caadc8a6f2407e512a0d0f189f841400504a9ee1f411638bb53f1051058e020e266206d1da781c628ee7b72436968b77817bf14edd19090da08228401f05c5a79b62a786ff1d14201 -05d8f56a98768ac02c4e4e7b883d802a0b072644103135d2b46b605b94234429e1a54c56324853758bc910041a7877ed832a49b051ff8b6f39274fd20693452fe940418912e60d71b5c82f6cfcf58d0ff6a90efc784770a019200606d1f8842518aac2265b52e2d37d7cf0fe78529908f29287d8ab35b49260307e8fb2362a2e -db98b647aa22b533ca9c73c0905adbfa6183ad4592367e98a993ba729cae891d695d769939d07b3526b4afd2f991f2e813aeb13085501a10c19c82bae9d6bb2065208741fc57b4e0b83aa4b9a44dff57450139e0dea73dccc12e083f95f52f0cf75699af1b9a90f6315c4437a09d3b9fbffcdf35c72d790cf4029ca971d8cd14 -2c080277d1da2bb178ab06437602a4ba7496b1e6015d0c8f132ef90106f70f07b8140ff92dfc058456750c3bcb1228854e595874dba31c70ce57d3af894acb229abccb137bad67853021bc724c5bca8e4e60d088d5c65ed98ed3db58f0fe691936abea330cc762a14126c0fccc01dbb9d5c380a9be124b5ff817e459880c182d -896749f203467550ce3fbb59d16a5cdc3942f0bb09ae9f5d2950f3a25e57b4005d9e54c7ed6566326201b5d00e9184c11cdf658c97ca09a5f8a1d0969dd1f02f7002dd1c9d27fd591c0ad6be471099852ba53c8f18087cd33fac2840cdaa9901616d077b12cfcf17af7d88d25f566806b3484bc3e05c6a2d9173998a6a498111 -674dd0df823250a03b44e89645c4370ea02d650199dde87a3c662ee7c2d76504d7cd6e9adc8f19724033fb422365cf93ab6df00221afab11c422f56c14b4b407413dbd420e0ea8d72a0fdd6dd12fddbcb831347e0e7586497e3a85efe3e6d80a2be2d56927dc2453e10c5f252a01aa2525e1c58546b7428c7c5fd903fbf38012 -300b33fc17257f03137e474d5d05297df13ab69cd1141a92e8348484858f822d377d762b8cd640b36713c9cb4b3cee7ffa378ade56dcfcbb62a56b36d08b0318aa076077b61de691340176b25d824e90a4d755c5e53d71930a7188aa2d8e961d81fd5e8bf813643d6f355e75b013747a592d30db0888422a43ddf25729408416 -53cd180a25940840f4ca23c2c910af60bd440777ca55aab1103388f22e4be914ea2324874287db399d35f009d7ce192003bc4bcd10e28d779cf471b25bfd4b0de720b89fa9b020f5b6f2df807a5bff4f1c57c72e49cff67bcf38b27220f8ca13676ff848fe26320e2ce075400855a81af101121b3366a6e93976949921acaf1b -604104fc270e9b22c43b6b29696a7231c38b2ba8b04ed379be2862c31e1bd32aed34c117f6bd5c06daa96b0ddc4fc1e645b75ca81368301d10427e571b4de91addfaf0414296d4e83c3300058e15d566abec01c1b7b0e571a6d1b8464ed0cf1c99f1efc53dd12b0661aa6500d66238dc0dafe80aa0023d4510b25c69fcce8c12 -857073a5d4d84fa0fc0ee988c8c730e2ee89d1c2cc461e5149e13a4734b4a114ef4390021586c83e06bc469e9c7a91bcfb4b312582deac70f9b72ccf518b412c0ea8016f8adc02bc4671d5f25479e94aa72ad336d289a937a029396874ecc51a606a611cff4abd98201d41485b3c336d2fb9beb9d83ccdfcac80de6653428f13 -cfb7fd6952c53063f616db6c63a640d5cfcf3e182f549c9bfb344141231d000960e57124ce31fc695e9e27dca6f57704f664c95d8bfa4816959d59c64dcc610ff0236c14303182187278ffd2401863f239e60daa153cb089afbc16839616441d55f981f0e2e36f304a991d26b2db658dd2d12943a35e10dfd1dc2da0d80dd301 -a09bbb575a37c35dd50733c48251a9c20fa732f7ff96662e120a5476d9cc082055b3dbb1b01906f05d191951d4b4883af20539df43d2330f6f8e5071e6eec62405e33495e8310d0e56c72e247b4f74a5dbcc38768fe5cf458e7c2d04703f3f03a19b53353909c24eebddd6a7321340c327c5bd78dbd963dcccec7024c582ab0f -43e3f2f5ba9c10a8aef420d9009cb2899713c5db15533de6f84324725762d82f94ddc6da663f5c233e22668a234d6ab66407efb3608f509484fcce6a9c1cd00425c5594bb2b54234a69a1effab6c218e96196b83fb5b5821c3101dca3507c809fcc754548caeb8751ddfe48f4878c5b4bd012fbfe92dfdbda47e8d8fa4c08e18 -4ec71835f356da422db876a25ee8bbcddf7f45ed7c2ad382363aeb561740d2030432b7cacad16037744986ff4f4cb1b703ded75098965bf49b4b36c45f5419063ccf662313ff1a2b0c79ce8725f08c7b44b0a511ba6594073013ee864912c824e562016a344928d22d5812e1dcff8f7b92d4aa544b5c97fb742b78f0086d3509 -a414d10bb793f9c3094e18577e83d5e7ac753172936f58bb392b91e24b1d4704370f280aee6ae5f438c6e57bd16f6245ca6b1b290558434472100ac751651e294d9d2c4a355e67aceffbfc016eda16bf52872c7748ede57407bf44943e0bb404aadd62d220888b197ed9dee64d5fdf12efc2e0021ac1fd08718e1ceeba74480e -6277f964f7900c3fdab0d90a0f6422a9cf040ceb32c835224f02d88308ae6a0c8664b29fced3bceaf54a87a18685be8ec60eb0c9ce3e6277bac8a32550fc610425129c411f0a05afa289c866d23701f9d4eba0ad405ceb97331f054c5bf3950bd29eac078b823d20a17bf184cda24f2c98492f0a000c6fddf8be5bd2cb2e3b10 -36c184724925b848699628096aeac8f1defa1594aaab039e47581a4a6551bc16dc1d3a7d87ee690c562960abd7bb546bdec0868d6ec6ed8307b131206cdb990331a2ddd6f0976f3088ff0123d91e551cf5cf9105be0081a941c0bd0507e21825ce74ac8d53a92044da08caa15e6bfb492e1e15671940a39c6d648e238a5af303 -333ffb322e272ba7fa726308e178b1dbb45cae155a413a546188b02849114912457145aeba0b5a445c5c2c8817dd056020294222f01aab64b57a86355d726a2ba8988ce71ec6d7df3344cc160fd1f96d34768f5f5dc74e7d6a129fef8f38c82d975510628f5b495a09f383946e212ab317cbab2d063aa1529f8892e2f0a98013 -6b23cf61b065ae3f0f352f850b4fd6e15ffe12152e94970fac9a8ffd8522942e644d3a131b1db829067902948149e12cdb1a584db003e8a14fb7dc87f3903201ea22d09ed1eb6b605832083a48b6e5343866ae5f9755986577150edcf15ca1179bf15fbf2817d697f14ec6ebc29ca09076e5505baae58f3dcbbd3afcda46221d -016b501758581cf3d1bcfd838efebb0b025369e1a29c24ba7b7c78342d9268287213ebea14868a58298d7b90c22df4ed5d36cca0ba462af3d00fdacbe1ae45090c0df4ff007ed3768eadaf4bce0628d1719f7e031b03c3664fa8f2ca9b89a611ed0cd27d7e5680496756bf3a84a7c2b929626bd73d63a0fd5da4d956c0b3f018 -fe412beb96d47db44e945d4ea3143a5f1f89aa207a26ba2c60d63262535d0d10c0509859709caa7b54cb8b3196f3abc21d5dbe896919871ee138686fa1e3782a9130899491bd9b3acd9db2ba3af1f45d62bbe1cf0620540041a523e1ceea0803b71a7a768b20673c1d925bb646a2417ca27825d4f34a3ca13d35567895e40b0b -a8be721c00ea3b8b41f6d2fef9656bda80534b6e19a2e8e0733ed86372dbb827c67429b3fd287e642ac38882601cd4cbe6e1a2fb6a1656efad0a9e1df65a860879cf80f83d835848cb7fe71880a992792efce069997f1365b767ee7c28bc442d145c4fe2f4ef90cb34a72c8fa45ef677ce6a98aba21538ce61d196b955f89b02 -eb873392ce0c987dab7c0fd737252eb77bd4770b6c19115faaf7c88bb4521f22f5b397c1d1a63c8bb8229a50985eacbf0f30659d0ea4a9759f99d49790ecf0043b81b639686fe5594c90319b20f25898280e2d904c3b68d95cc62fee333448262373db1604ea18d2e4dece9417f809d9ea42bfd5555f93826ddff7ea3239ee0c -2edb5054300e966805457c69566f6868418401d247f169c092c023e47304b10f3f383db6b2dbabe27e32c7c54fe67f69a1a072b69df50ae1ca1b7299facfc0026f59a36b98a26e812ab64a73439e7162c2c042cb1e3a13e3bf92aa63aa4a051cfbe10f1ed4367bb21d856b4dcbd017dcca1b844de4f5151e5534c0dbb3e3b823 -4adf0df509c6d66db2546d5f57aa03c1cd0613de2a4d97ee947ad5aed35a981b418e230eb223924a62c59da473a617924cc76d18d460c36740a5b105c361f127b66559a662c948ebb5ad40f3b9735cba7777b42fd894cd4ac953ef5a63c6c30df31c8234ad66a8c0a6fa39f4a4c7de642d48574d9d2784dc6c2d9afee59b681b -6c7a76a93ff9e411a1cc338a663ff755eaa132526a86194bc97e33c128ae790583cce039df7f1cc4e351d50d30c49517a7e1fdfbbf28efd9b035723625ce5f16c6954249f6577e266b2cbdd784915aa65e8436f1f895b05df8ef9a6ec4bf380fd19787814db8a8ab627b42908602edfd280274ac8e6b78697a28e8ab58f50a1a -b03d8c6cd0158825c003f2e4ad39a835c191067715e62f4c45cebbf9cc814329b12ea965feb82814c8bc05607a1b2ee604057459059f9331c86b576c86b71108aca9f9d33fee34b16f5e87e014cfdb118ad3dc8b02d513f817775d8b03c3ba0a64aebf8462e47391edaae34580fcfa3c5feab6a4bcfe65fe910e5d522f85fa0f -f205899db7aa9ff9b773ec8d146890df45584e5ecf3dc228dcdf39f9ff76c71122962faaedbec0d0d76e959b69606e1d3ab16ef8690a6f41f65777b6b29b5f164583b101f22dff1022f3fa35143feb9cde44992a2735702c21a368b7f91ef516d16c2aabfc348c4fd41207fc088516321929e39da552bf8aaa142f24a2e20b02 -40ed938ee9976194fc993812d4b6fcc2e4c76723046a6cba023d546f93f0f32b5ae68c73d0febacc63a976defd00f450db540cf3d6fcb6fd3660c097f5c9a32e3fbb696f40cfebdb9fc5883db6230d9456acb0a379c9bb8f927a71f22a05db1a22a4f8bac6c799b3c70e0987fa9a5b0f548eb8101852240d197a70a4b83fa42c -c7536f9b463322fc2c95effac0789e0302c675ea3577d7078ebf211f80d7fe2cf05ca67a10432b3b5daa7ee2c9cfa12e44c58d046d79253d17f4ab62d19490090e3d03b4d623638fcf8629c5bfdac13485875483f3903fb5ae1c744178cf6f2577e0cef7f58fe86dc29f878522ce105187a037a781b2a2e79b3e9d1b53c3380a -dc96dc382ddd94e6a0464c666f7fa82e0db7acd43c993d841644d5dc32eb3b24cae87498c57379ed2f0227f3ea0ec5596cd704fe596f72d007f6951cf572b42826a7875919021bcc5afebd9318e5125388e73c4e30821d0ca76945b4b69e160fd900ddfa5a69cb47fc7f3bf83753a7fcdfc32dcd8566643f185c1c5bad7a6c03 -38622c3232e9e48e800eec3221421170b2f3cdcde157bb2f2bc937ce2814a619a2222bff9fd9cfc6e1f548e24bf26db60f1e8dbdacb077efbf2c4947bf157f07cac39f5fa2ed8b7ec3612b0e9fb9b20e577f7e6a26c8c8cd46604d91619f7c2fb9fe6aba1809a28ddd92cce2664fc6e30393124a8d9506a097abe333e03bcc1e -ae48faf54e093df1b5202db6bb31f30df69ce8cd7116ec0e18d390687728210cd79cac35948cb9af85c4f2d164a72df70afdec8e83c3ebb048b68fdce189cc210215f6b754d3e7ca1c49ae2b436498cb6c5cecf8847bbabb0a846333e6efe41d5ee8a5a4bf9de223d84c64b76d914a670cb32b9c5c8153572380384b329da612 -aebc3a0ccf58808717e48a9f8f55ae8da7b49d5debe0fb5ee5b48eb2dae04403c2cc47f979d12a3a1f9ea60428d1b28b1373316a5d342708846b4000f353002961c70aaa6749c334c6afafdd1f730a8f48ac294b0898f7da1e119516e42e0901959aabea9789355f225c53f05e365753bac8055925d537042a71864c1d790a05 -59f026f4b105bdfcba947bf6476be30992cac27a7b467c811eefe686caf25b1a4522dc9f8185edd6a4d9fecac72ca2400115e35e6fff26d5ff697d00ada9c1249e694690bebf934b703d87e894d8837c94dac65ed11c33d7b0112dde348fec2bf78e3f4a45569f89f7e2caee33f9ed8a33f23e015997f527c0baae4338b16511 -76404c73ddbb2af4419a7e1bea5984f15ff177c3257c0a28927b9c23504c032aca0f0892d179aa9cd3211c0261a67d5d1887e3b25f79bc4f9242b4341eb36417194d96ee119adef270ba6a6c67f3f55c38ba0d30ad54dbc8277b635791d113275f27edd891d6cc707fc781e1527d2e5426334466280c35869affb1ffd49bd61d -7585b167a558a3a311c37e86182195473448abbf8602c322e410ac0cce9192107bbd547c885d834751dde7d96041407e36b05f0513671e23799d59c87dd9f10295fd114f436ca3dc96f8540c666cfc39b3be0842b3045d4d9ff0dec05c46d01d1ebbfc49d7f1773a4ece12b04cbf86ce554f481ad084e984ef980ef5d194ef07 -ad13d8d2fe499633ee45c9374885fd0338c30ed87b2497fca1d184fbff70fe1dcc7cd2c66b334784b3b3e7dd094e8469325ff283e10ce6a3ee32152fcc4dff14f10f8b862ca8366e09d93772c023514482f9206591af2a9fa319fa6ce8cf712c09a7524c6f1b2ea258ba8596d02c0b81757251e35f022732eeea2708c6dfbd0f -3dab012f14ab68983a3cd3dce8f0d39bd3926379878eed15ce8ac283afa7a610ec6193a8f95603efccb7fa892ca73dd793c0dee09c58441e63dbecc17b699d19d3654a09f2de8ac9146b9e934c02eb052f7b72dae6d21fe3ad13b19fdd046928f8328772b1fa64077942b6e75ce250168e247221c1318fc129f811e1a4366821 -177ceedcc413cff908e0b6ca65ec120cfe9fbec081c562cb86e1f68c074333005c5b6f404ea7424f7d3adfe8d7fd55ac83a2085022ef3eaa4e85095e137f6821d7986f45d4888abbdfd656b0146370d5688763f09440be7a8b1ae683c68e772fc3511c656beac579abba01fc001800bc7a3871798faec0068e03ab7012ab2f0f -9aa3e13326718ed265da7d9739c6a9d2a5d9962e445482336edd377cac8e260c6a44840ffa724bb69bf7516629ed6a9f4ab72c1c795922c55e652766efb04f2b1fd18813b55c304f5b9fd159a2c07a6832b0837ed1878a6a7dc40ba2794ff42777395b198a0ea125281ccee47e4829b49ae44d30be74ac6999b67d8027f5a016 -66cb26d4d5789fe95bca1f3a909262f7b45fb3b6309009136b0500034a0a85156489ba5db0098b95e1a44d41c47cb9e4439d806e1595fb1a9c9f7b2aa30cef19cd22690d096124bc4c36b98fa6e27649ef66c6ef826665d072a2d7d629ce0f0c22d63e2a9d009830c93503f3f35e744f1c25dd45a6e2edd199792bbe10ee5c15 -f73098048ed55239173857918e4a34c3b024e8ca6246cf881ed902108bcf0709fe80a3a6faa106497bc92203de965b59aa0189f51086d90955ebd3a24838b109480b19d4651c134bf7165999b612cd5bc686776e309805892f189760661ce8052ed1a2195b1a1f3cbd04090b4d07b3e73673528ca3b6f663ed4ff7f07978642a -dd80d83ce8b7b835bb876bb826ba64654525690453d58116f0118e106eefab0e54e5ca6b37e1c568cec65755a3fb07461b582ee3d8471941e326d6d6988b722363ff31ae37504798e03f2f43461cd01f5cf5cb6f6a4b0883f3fa0a7bd6500626615485c9f9787d32dddd65b142a26e3e25d588f90bc1f6ad509663ca08537720 -f19ac9649298b9ad60b000c16b752ebc4af8084511c82238cdc702f579282c15e0ba391e08b731ed4380af746f402901ef6a4122f7c0e1f732f673ffc7ceb91a9b177b457fcfdb5715b2a977723276b05cf8de0cb2e188a4c7816d554d41162e88268b34b8a5708de932d7410abb4f703189f5d1413698f4fc0c159f870d6812 -e82c89cf13c4b06c04f6db54c7b2acb7ddc954e4ba21db2dddf386da8d3d4f1e059df9bc7e6a04dc396630e402bf149b6e7e7bbf3d8f0c6e40fcf5febefff913db8fa5e0e46d4f68438c2e80f845bd11def2a5a20551c4b2ae921f9b04f26027171d3eb697b0904493802d12189f77f21ae01af42e5af2d0aef1e914c6316e2a -fa47158addfe3ab5631274af478147e61e6e024b9291b5934af6178a3963c70d6053370f720d44b889800be88324bf6d98a2236ba68246f9a68c5d7b384eac2636b5109066a24151d6a2d78bfffc46c3c985fe3fdb0d2c16b5f47d6eb847f61e7a6b7a8bc457041f4dcb9573843104399831f3a6fd7dec2cd1c809fd3ff95e28 -dfe17a1e9b6a90b8d5022f6cc1a6ffcd88fbaf869f6a95175855dc5926c1d02112fe963d2fd738d7f68f0a39c64e1caf0b57b6ef8de67667b5d4572aa9935907a9457f4bad9bfb3cedf26e68bdcd56f45862eda628aaa2eb0f80d9371154e501095c6975db8c053250d5b5a8e509baa5bac95d918640bf08f4ab0fb76c89cc25 -89b9d35f94d1b74cd5be4f3c03a8270c713f962ed6ac0d50bd68b40843a7e52c69353af6afc76fef7c4a705a83f08b371afd143f3e26c43e121aacafe1377f10af5dff236a8bb2603ce863e87e3108b92f83e67c8e834529481a891b12d8ec20f95a598a021e01028e9b9d55dd687c883bf9ee38b740f6207fadf836a01bcc0e -80a375aca520c8058ca9bc82b7891dafc125d4be1261cc32603ca28e82312523a235730c9b7f767b47b9d8c278d262f8482abee770eb387b821d4c66c7c21204e49ac4798e36bd33b3cb6f915596c7eb2ecb2e26d9c296295a506892f5b43e11ce4b4a453a588657d963893d4dd185494a6b59170f257e1833ac8b6edeb7b616 -3fb64b8164afaae0d7fc781817754e065e9f9ec39eb71bc4397fd47a9b2cb826ce3aa8b9de7d74039bd56e63ca47ce07dacaf67636bb47b7caf9d373de924826215f84283cef9478b3f72632210b8f02dc3764c0462e981e5bb137eae53d0100817285c7f456f05d4cd50e04eaf9a478126fcacb37bc0066d46d5c96390db215 -bf3c99f8fc260c3bd6144768c518c98edc2b61e8489b989638b4066aafb2a824505cb147b0393b9a8d2051c9341ffd3ca69a6066f469c0cdeb34ded02dcd7e2eb9d1c3847730f4b5623cee5bd2f048ade3a911a246b6d5c5c92951f004b80806d2559efe4936adc4ef60f7ecae995f987166308c52f964f4a915ae3dd9f7ce1f -6b56e46d9604b538aa6edb7160de613c6ba33e869ef6f458b36bbb8fa0c8f1134b9cfc6923191475d3855580dd4101e4fa9dcc57de718ef9db41aaa519dbb9124a1005f7114c1a4b72228993c56907e36b441ab87fbe68ddf52797ead0a7a423a275760cf1a340ce2bf3c0485f18e77647f907207f5d57ea7ff9e5b58b013303 -ccfbf60029980a90230c9c24d089cfd98e0d8ebef002cd9a7882f0d0ffa1e922e0b5f28c9b3decd25f74ea1838731e9f697ae36252921144f564b2747c2c280b83e094f1cc937d289e23be6fb61ac921a591200fa12519de78eb632aa9388529abeb19cf54b811f822298ae44d05dac9e4c246ac43e0574860a975b00165ef2d -4131ccd670bf169c2a8c686bd1cf7e48e67eccd74f4a9c37c70c5cc51adca812a7d3ba92f540049c79fa604dfaed8346f3e6ef39abc93a71fa83df948a1dcf26678646726691cd79daff23d399aa83a80399aefb20e4267cadaf5de2ac4d780093b532af8e216048a152074a64437146706f81895736cca80ff5498b6452a90a -14799fb1d46af3d7ecefa25aa8f7425a2e50f5c5c92e49e0f37c467897f2cd02b98011713043132adf6c1b277ca80139ae0be20f2ae1497165001fde9c392d0ffe614d50e0c0f02037a9688bf638c3892216c9aed417c570cf647718c0ab1c19992b14a1b1ba76324bca40a48ad0b6947effb3810194314f55cfd6419c25af1c -b36fbf5c188936d3aa414e8480efb632c5d445815e57652e61adbf2f22927d2ad36fe5cd44c8bbce0e40dcd0043233f46b75a7b4ab8012aedccbacfeb2db91231cafe647f2c1bb4e113a64f3ca7d329525fafcd5d6123d5bedb2dff365320d1a288c0eff9cf7412eee21ab44fdbf39a885c632092efb38eea3f83a14d2d9f51b -76f4e22e736f731e700506957a5413a1d4dd9a2c1ecc88e08f6edd2f44a005116e3cdf9cfdefe3260f9c3d524b44874c51c50847937a5c47e419292663d30c2a52fb93153c9988fbbbc9f8e63924d35a2191ac4f0f1eeeff6ac1f9ca32a87f19d7fc5ea7acbae95692c1e5d77ab1bc794ecd4d5b90627858f578214f77a7a92e -9ed855ad7e5861816679c9272d2da2b9535ede7f1443a63771a055194db31c0705bee00f1f2c43c3150df3ef7a929a0272ad2973467177b107e036ebf885ad24e7a0324a53cc0668b44b49458cd53f504daa569916f98e160dd3e159f71d491a9209799efe3568ee3e2536c2205322b3765e844f0b63fa4973dc45ddf50e6b22 -fec9e3ce8d03a8b6532976491bed3fdfc453b350fead53441745585160e42f151e804288eef093170237f288bbb0c7230194883ae97b64289c28deb70adb650ea6c2a04f312580a7fa9f8e3ed416483ffd7a2601fc6117254fd249cc9d3c910cf5f7adcaea83c199a3520586c0ca22eeb5af9dbccc73918a3cedd5537432c728 -a445f8ac3bf2a5f53e2ecd6bc028441b6aab52bec3f76896aefd61480f9ac202a94d2ab19224e1dd4b0f05619c01d6e6f354bb4c73cabf45be7724b763e50a2f724b34564ffbeff10ae3068af5417185844584f23a98dc6960d77a6754bb5e03358e861bb8ded7a24e64f170cee2e4f50f46559f84c5a4e431d80758ea503d06 -6a548a751e5bdee3cd909d83ea135fc2d1653db744450e5f0e46c61d70640f267c1ce6afc1c9d6d0eec912a48db2fa533ffd5e9d6217487165cf9480812dbd25754fb9b60b24e6988678776dfe5113c3feaa33eeb836bafef536a4fd46a40a2839feb7fe68a61fed740b2fd185d14c9fc7d91677d606f49c8c089cfea197491b -186f66038c1ba38a7d8e8815c4b40f61bd1931527588eeb77922136aa8c11330f12d97f005fe62846d35e22ec26df585cf060203b9243cda8d275ac3c756142e5463680b02c1695396837aea9981694b4d362d9aa15338e510c356c2fccfc11508c8208da17ba255d25cc540d5e9cbf2c2b5f64df21a8676e5d98caace558e24 -3fdb596349d294ec3346265f1694a6bc42c2140162418160a12f64b961f324232f4453a78faeb36c39700250bffa5103b9294a27a3396c709f7442f0edb9f216c7f906596656572952ed8154bde6542043b28d003e4c7594aab9b833fc77842c9d29a4ace035b5b0b2db835cd0638f343df690c8169aec270c12d1477b45a41f -6ec48727fec33d4146276feff524d683bc96f17c05e2c3f6fd2d8744aa1a780fed4cc3960636a6c1156280e5f5260e926d2b936076fb928740fb03e728e77b051d3b267732b09781f31a2901c3e0484d44a1abe298521f9524dfca3cf56d8528092d11976e048e546bc54d20ac1421b6f22595edb9d2d697b10623c4becf9c2c -5062d450c497855232c785f6f44a6ebc4569db633199bc965cc39d18f994bb20ae466393c683bcb8e586697b15f64e0eb367965ec5337f3fd912494aa5dfc30120e8483adeb503b844d8f8c1be8da2a66d7cf3b916b1636b5c88929d1c135706b31fa041f151f23c423dcc8c782a4feef51a6cf033470abf1384521d6ddeb02c -f4d1e80048b3ffe7dd64bce6f469a8fd97454c7c99ff77b3f6d4729949f70b0ca994c047f59550c335338c070d2fcd8d4e5692e70c2be63e361284a7b0ab0204e22b3b056e2668c3f3ac1ac9cc8c8b8c9c7f159ddff406445b572cbd80402626c93003c6fc130d45211b8cfeaca542501c295723417c33093ec239a405d11525 -b112fde6568bbe1033f78c259bd9d8ab39fc70710ad66b48f447d49499d6dd09b5fc0b47c6f0a664d5ecd4cb36de02ce62a17e3d98336e03177d6ae9c4d71c091b23dceecf153689760e63c6938d73ea32b25cd40ce5c2f5f788799607d0e51f87399007b34ef40ab462440d74b1b4b8c4b751fcc9063cdc691567b322edf010 -e875859528db808f91f6dd366465bd85def0c339cb23d9be95dabe6f6da70229b4ac4e8fd7767cad786a8698ba0d130c84b4d4acb97c40469a6768b6fd228a0bdd1be80b93a2c69e963e04936b296eb718351aff4a281b385f498ec7a8065504cb281f8683c5878c8230f1ee17af51bebfd17df64b2ff77f695e16ae0d786f26 -4040685e6ddd96674dc262198bb3d29828bc57181de1e2f51c0fbbbae6b79c257229c929a69c9320fa9498a4c3c801a8848962a557fd010066daa4183736b426c9533840d407f4f03547e0f9090210cabcf2688509e2f016aaac0fb40e0bc10b5745f36a2c0a7cedcd38e3ecf1ffee6ad9e99f87810152a47bab699290572a2d -c9b9c0f2630bb47c7eb5b15ab77d8ba25498b9bd1dc540d7ff2481e9e5cfa529f08df2c333a4d7ab1c1739c66d8686238fa09903f2a0bcdd3ab18bf5905f1820d68ffd72f8aae189755aa64a67ebdb1de8faf25dd8b523697d37c249b88beb0dcb1a190ef927c37f8db9d2f57c30517287feb14c63db99728d73194273856b10 -e28b0b1aa4fc51189a1894adfdda02a20d75dbf23b90e3c734c5549f3623be2a5d87e435c613d072f9774d15f537bd0ae481286b3bdf2995827c09eed5ca490256b10585ca769e4a874abd0ecb3667e60bb1eec1ab7d46f18cb2dfe588f8d32ed37ba0ce9c0e9306d9254cbe747d1e413ce980ff3678e5787ab48a2727374326 -2b3237e0f1badb35a109b769edf360a8b534d34966e535dadef3927ce902ae28acb90eb129ca6dc2280bb98a60b0b56d4666f9a5c03fbb1ffb626164368dab21e006509884976c54a9b578391bade21aaae417fabb539dc8de5f66a68fb0e41c8b818a2be74b742a7f0eeed570e1e3f5557c76a6b8106eb189fa27c16f112e03 -3e053ec7f63ce3b1160a15e5c91447f7737454c6b1f90869870ab40b4c7e9c2c7c75f63680768492c57bcad814c94816b07cd2862e9d2c93d8cba806df4d1d26cb78f98b69236ffe169332d35e469c237128f1d7aef41fdc448431c7024a621ab015d8f2a83cc9a92905e916166b27ae31ef790161c46fb09c6c2500bb8f0728 -4064bb3a28b636db91e1d91a5b5ec4a654f7a58cbd071678f58fa32d0aa5c4262f6b91fdc403fb62eada1b8b6ec1627f175dcae2bbd93ed82886f84db2010e04471a29cc14d99e3484772c3bd59479ad2b927f7e25165540d91a2aa6c203b22ac38ec7f16d6db237e7b52dba52281eb43127add81082fe1c2304519b40d2d129 -9fb8d73b22cb74d55686974a5e464de731910c8d5d3c7579448efe362ea2992b6b31db0b9c1b23ead49c3fd5f657b51d29db89860e8742ec79733c1315288318c5bbc42292d426ead77ccd4675ad9b956775d6465dc196a340d3031b8be1c507b145c6bba8456b04f3b9e344bbfebff7e924449432fc81cf65444a588bb78f14 -245acc93dc0fc1b80ab196fbb51bb51d7e1b666631c98b744f3d038373ec6d1241420e89832fecf1571c26555a5847452fae2afd8dd6f53f12153bb7988f7d09999537aaa5df026cc779f1753375795a90c817bd779d0a8279e0e02ca8ef782f46c575cc9cbeca79ef20951ae3da73ba43c31bcf887d7dcae065be90b52ddb16 -e555bdb3fe3afc2e76702b45284537393bc7e0defabdb9e7ef6d8e23107400025e1c346e2c2db447e36a2f194ac7eea39be7a028d19fae332aebdda57c8d180d7b72128e352696b8c811993178ef25a2692b33815836c2efd8a38f5e4666f40d7c524c773e1b249c593f49f702b3b5373ed5047e304638a3a07dd6efa2bcc012 -d770fef64806ede124a514d10ee80bc70fe28b85953c995899815e84cb93f71ba246244d7d81973f82373d7489364c15bd8bf6ab8ac0d9d7bebea2f06e1821082087f01a58d0dc2d641ff91374ba13334b76f590d1eb762bb808d4f95c58ea1b0497a7843e2a0437d442b13dec8a5270005ecdf9b81427da4943898f92af8603 -4ad55215e68a741c09792b6862f62d0bac229c1833a66a9fbfd7812aa5fbc40e9a247aae8d425f94e5e08a36e01e88e2e85d534c655a04dc62bb8a3e2e9fcf293bd5e5432ee750477b8338bee89f2d77c78ad11a801699a36151258d87cf712058cd03db20f1a85a0457d22b1bade8ae943252eb43de38b06c187baa7c0b172b -fa58b5532352cc50b7019dedd70f613979d46c3b40ce33db5917a318ff25612d982f7076b600bbcc7c0bc8320a11cbe9b8a8542b5e75b6c3756b130fc98af111d7d685aa47c28ec51c05a04e2cc2f30089673a888e53afef7ea06fe83055da0cab6ada9fe8f2bb511bbc300b934b98550324cca41b5d6dc07b2a10021d991a2e -27ea61cd2fa5f0f7f5d017a8b78130f1e37e87a94b95cead427c37c77f85522349f69eac6e393dcfb5f3d340e4d49e06baae4165e9925609669e49c8df669210e52a6446317913140b577577b411b0d5e79657b66e43cce580021f06894b3c0dd25e218dc891ca9795a4e7063184ea3108a0c02a71e6b7ee1086b1d4726f4c2d -517754f958a0a60184767f259f2b795bcc12a33a302ac29fa4a0279682eddc0f1ea23869ab4383786e97087f5fdf4e0ab22b53c83bf04b2064186f41d225fe226bf2a32a45d7adb3e68554a83ba07d9c9ca4d67b0252012f86c9e1c139ddfa2fb0352355602576c0abb7278bc1fcc7149be331bc5cecb84c0093e005a70cca20 -fee43809587b7f62374671d501d2a949d8048cb149ea8c677e26e88d59565d01b6926b1e15b0e89dacb5ee474679d8f459af3ad79d75bb8c51382b97ddf72730cc9acea2a74848c2be538ace2d3ce685835a9a49e64fa5da0cefbaec5463f62d49285b6ad3c1df1c3e3008acf62f5ed0ef1042da97a8a56268957bcd658a8629 -33302bdb1f2c4c9a2fb279750e7eedda6164877a38c81ccf42d564ea145b5d287636ca684fd56714fdaf2241ea4e5b3f0761489b411a00b9fac11a85aa906c1e49a825b3afec2df02a87e6da7897a15652f3cbe095c0c62f76d6c83f85c9480e45b1d1d37cabb3ebb348e96e0d3b9dd6e64a2552f327151d03de3c2e510bb115 -02258ec929ea9a01361295f63f1e065d28efc31092263f75cc0e49e7966bf4246a321e28f40f8dccfed597acfd97ee840acfa0d613b1ced1c018a13a2a11730f7e24fee63a0ac0705630872ad0d1c67dcd00a54393efe70a31dc6157451dab25a0e3dc17d4cfe2baadf679f8bc90d99cdb32b3ad105115e66329a1a8188dcf00 -ea6c03623a3bfd4b25a5eaf962536b1a0adfa17c152e1de6dbfe362167ccd522ebdeda4650e4429adc8731c4f158502128d04922da9be1e07e05ac503432cf1a6b395fe4c357a51dfc1fc6b50c8dceb7129f7528178bed3c85c5e995f55aa30d4c06f03031b206db3a76ddbbb73f68674471a5dbc6ca88572b8c5a2117d36c10 -4873c829132df6b4a15a2614e766f8ef1be1c4d18228889b9b6f9835f06b16225c39469025ffc1200af6fd831bac35356a22100791650563b62c253ee97a840eb4e8c77fef77a6821690274fb80d537b26d15ff92b0a8a84fdbe763ffafac8014850b0d34281cc621cb646607dc910815fb090c225de1131394f2ee975792a23 -85d381c0455d8c8e31b0354249671df0cc1e92f335be2debe33858e8df1dd4281910da14c8ea15832e161f6902fa0903f365ca0881125a9aa5e0e8cbf907ea035d852e087943123061b74d1ad950dd6aa22927e6bbd0934572a788c7314c18066d486b4153a3e7a455696fa3e3b0505557fa8cf86eb3d2ab9a0fcbcd5008e91e -48d081c7ef7afce40b571959effc91d0c7ad1bbc5912f830fdb00e61c2e3c426aaf0d332a0d1127f70b19dfaea7d716d4103fe55013a96d214aacedbd6a6dc1ad6dac160ec29f7a2e6b6f664d3ed314c285a7da1eb674b854acc272d293e8d26be11386b8a0edc069dcfb7f9c31c1a20a5a3342c36d500bf675691327382ce1a -00427113883971e5c77ffcaa2fd13a670c6d78d4eb1a72c908f1bb0c2f6cd828cdedf1c8845d99b0769c1d875c5897d97ff608ee3e5c219a8657f9b7b92176115ea5de8c4fdbd28f43027f351b6f81841f3aa1f2d242b628bd1d57f19cd53e275c85dea0bf9f1e47efa5029966ccb19731b03c2379587cbdaae2268e3cba8619 -06eaca3e6cef06edbb4b099407fd11cf6bc2f28cf7ae31636e0b806c58dfd02d7af03197e60b02e475c2b3c1f2d0214e25f3ab2061dba6140417f16c924ca81586199cdc53d6a375387d8c8c2ab2ef6f2bb3c261157f8ef2917650ff5ab30e00f14bc3a24872d49f74509475f7eec2698c3183083716072ce9e1bdee30539924 -c7286d1a3aee129f5a4329645fea3d980d2c6d5870660f3079fe733472d4391906c06e7fb4d5210ec06d80bd493c82e96695a450f64cb0cb6076c52b04e66020c6412875c1ab2584afc5e2195de24b6dcf3f6f1c20e8c3166002e9367d22d613308cceb19620154892ecbd32ab8f8c3e8265b51fed801126665353d9a3fe4f1b -142eee459f94dc2e7c7426c3474a42431fd4ba2b4f15a9cb18201a75744fd41ba1e9619e9297c05e2d6519685f2a1345ebac460acac2e9bb26c8b78a4c5e9c2f18444ea4149a0601f917a2ff34cfd97c8c89d64d65632b987f60ae422b1e131bda569dc37d0d75d566273ad9385da48445b1c2ee8931a71d7467cc3637e3852c -59f1e0d1fe93973e1e0ac2bd43ac9a8d25d9fd9021c3840e387e6ba8b16bf012b058ef7fccc7247e0a8cf0fa1cfa42776a595694af952fe6a1c02176cde5290e6b32847fe98fb23f3213b23b96ad20dfa51039bdb53866bb15f4679540bb862662c6b95db150df059932b17abb2af31e1a7645823e284b8e7de839d86fc42125 -b5697a7a5f622e5924cdfc93e7221b687c0d9c1d964adf8bf9599373aa99740525908bf048a056ae1ee9fcc84d8aa49f9ccdc499dfdcdb15d2e1d22224b4c61b24dbfc43a4c169a797e1d686c002c5983186665a185eb656f546cddf8236841f53658e05b8659ffc7fa1c7e066fb1e7f43c724e9bf4037fe00ff9f3ddeaeca0e -b71d374cf33ea067592f7284ae76f9d7268064f200c8b9026bd50a07f2f709046402e941faebd9529e22d74ec8e6987d5767e1a7e035a2fb699c385eef2dd7266ed560c06a23c54535dfbdcee0f8ee9e325fc892b41af937dde197f01b21a8162685f33701dc90d8c0213a01ce622db34a24f238c9a7a32939ee209379d7f50c -cd9aad1088d0c0285e34a3565b9d5251aa37df7f5323b4be1e589c07fe6ee11ef294747e0e04437026e3edb6cc7adeb99696f067a6339ede122c63861e612d2f6d7929a7dda2e6e4086a74355d1fb51dd2bf7f929955f291355cb941ee0c93057e8d1af384ecb3541d408fe98c7efff92dac905decb0daab3ada6094357c7812 -c97811d00b7361966cbd7e96fb2bb93af9c35aad4e33a92b6370f15d5cce4d140b56b28b077a58d99dc359746f83cfa1ccf874b2eb7b23e3f7d9c32d61ccdd282098922f1d4de2fde6f6171f84eb7c37d8be920f07d528887459c4bf4a306d00b44fa29270f5e529dd8baf6dc1bb4975f9847e06fe56f3579d152f3dcd6d5c16 -97e8cfc89605fef51a3f6819a3beacc6d6d25a9093d704fafe1ce0c70d6110011bf1ac748c7065561b313d642c8dbaa0fb129d2fc8ebcaf5e32a0a5895cec807449a718e266853f9b1f31d98e38ce4eb330fbbcd7d0af238ba5ae07abc736524caef950f885bae4ed0c460c377be35d443bca430e21108815ffd92feab4ea11c -94f9cb4122f6b772ea09f8b12f523df8181c165e673a916f8a34a8b011fd1425aab6552bb4bfda32085b5fc0d1e5ce942c604fa5221f75ec15ea64a6cf10d905f9bfbe29d3adf6f77d8191ca909c260c45c9f337b5f15b69a06b71415b859115e1a7427ffecb6d5718ee7b83c113718461282536cb83084a1201e628dbeaf424 -15849a58f17a6d0c9ad21f86475bac7e0e3c07ff0b5fb1b74c9b873b4e1db009a29c99100afa5679602c327fe3f80cbe673dbbf0c1c469c67cbf465bfd69a80548d479a5eb05498161aa34cbf42af6d87ef5ddd80a09de709f76a5fdf7b9d40fa66e92878c5d8645ef06b0b077753f88b51987e1f6a23c8d8e2c7ccec3b90411 -428e91a5db0349ff0536a633e63ae841be3781e6a5edf43e8de792143b93c2152585cf2fea4f3f7b10826444906f6fc7f0b5f8e874e1426cbd368209a114282e14bed6df936ea5880a3141c18059bbc5e9a9515c861783ee01a32acf47b59d24b2090ae08fb10e600fd3920ee7ed16698534a71c37965c4f98d8db9bec78eb1f -ab53db801022ae2e40b14718b922665ffb562c1aa6b5e89cfe332daf9f2cc61edd081bb0b31bec807a8cd62adc8de752ce29320fbbd037d7ed8bff99a2cdb72acb36057af9514cd401b0807e14457349c4f71593112361c6d046a468162b5f22da24eca8eb180404ab00217f4f03f99d7e37a648a51bb5d816af65c711806822 -a45b461648993588890f1c47e2a3f245841ef930a0b93205925edc176f292a0c66be49aa7fce1584c39362aba0f671ff1641f34b15f562366d54dcd2a5e2ff1c665f364be9937d5538ee1a5cd4d1e89c9c7ed329382a52c18939d5b1b21b3004cb9b1d1905614cb79931cb65f70487db92cd60f007cc1e699149fcce3781350e -87e6adfd546b69b03c5b91dac0c147fc6649c01b35e30744c08e3dd33ec7e51c702666025b48b6f3aee49bb0adfcb186c9b6967994c8a00288e9bf268edd690fe8108bdcc17b479c764a7840a93b8b78d30d615dad54ee4ae798a1fcf1abf826425236ca670bafbb4ad3453b16421fbd7876059775d628073c6df512e71ba817 -6c9897480b873a5857b5032d7558112a84b76bd0e6456f3d9ea0325f0f1a792e78c1b357c4304ec73f02d1628bdb83dcd53322afe83bca939f4cc718572e1d21b259f1e55397ba5f2c91fdf0cad04ce4dbab161ba71c7cb9caefc6b368848a0bf39d1370153a185fd55fab23a57844d0fbca3fa47840025199c0a668b7548117 -e4a084e74d460883323bc526313ecc5989e94f728daa6dec66364071f9799d05eced43ae24e9e4923712fabaa3d7db330070a15615ba799f6ff6f7f3b307361bd71184e23cc524d05228bac924a981f210dae7b2d8474db2a1d4833fb609fb00d2879ff443cca6c3f03c37abc4367183fb19f23272663a85a04abd116ecd7421 -9e227c637ea0838556bca5be75e9c499130bbdd0ce58046acc6059a49282391dde76330ea376608cf0d84341a5f59350247d52132d390d5ae2ac2e11cc15620f292ce2b3d621b6c63a468401b509073b9bc538c36175f568e63bd808eb200c1af9f3ea1adce5d4fab600bde77133c9ead4c995c46013d500a9a0e01edb648000 -9d21f8bc8ef13711b7f9d99bfcf6f1ae9ca53197acc988ace025e7cac70db82d6c0d8cff9f0f882452dd9a80cda78239a41ba9efe20fd879fae005833aba56117ced3da13e9426954bb2cf4211a046b0d5ba652fe316f2943f10396bd5c7990f42ba2eb3e09d19ef8684aaf7730bb5419162e08bab247e9d1034338d08d40c20 -a9c40f2e1ef2f3b5b33a073d08364f8db16550f8899ec15615b127b899333f1bb46185c717deba88000dd627397324bdad0324a98ecfe6b3f11b8fe3f6ec0e2bbec2c11d09ffb162efc86e6a6d37ace3cb7624924bb32e775b2244c4dff0c9040df27d46f6627ae32ac196dde3fd0e3a982a8b0e3a5845302db6cf9435b5bc19 -aaf06a19297c962ef4d665d64bead296a3dba2360a1ece339e64efdf4a12371c787f25c819dcfc4ed525312574e161e053a30b5515f8d07298eb9054aeae1f2849acc8fc1102053dda74ce23864ace22929e74a5d19f210f3490fefe0f9eec2f003366d62ba2e7d0f48e01535d1bc10a78a30af0dd3e59891841e92486e89625 -7ab4070a367b790783a7ce5506bd09c4baeda91a531fdeffc6a776af76238f1d5ec6910ddb48b1d440cb400b823b61e0e80295b2abb3151546c4b853870ff72e6b5ed54ba32025db84b30db9b4dbc9c70526b540babf3fcff2fe63466341782b88b412de83791bfe9559ecd33cf2205f0863a8e188a6522bf03f0f19a4766916 -ca27e3be61f79ee82b08240eb75685785df9f7ed1cd44a6697c73aee4f3e2428115a10031460f3ff4076eca5c56a07d372bad6918608890aeff4a566659eb0009cee96598e4f48ed758af05b27edb780fb02218af59a2e0806edd2fe70beda2b5c85426ab0de44ca2211a412682cdf95b4fd3b45606b9de6cffb3a71e6048f15 -23d9d58b5d461d4b7f0f77ede0bd70f2d6104a7b1b2300788a5733705abd34288b3ee5928e7555fbe571eee167c080ccc122747d444722ee14328096b1cae12c6cdb72c67edd2c72167e0ab3cd7b65c7b6be2d4eac2f19f678e2baaf5d9d3a0bdd87a3eb0afdeb12b1936a1173f1ff2cffe79018f7f9851495832e1b02bc990e -cabda4c54e4d284aa7f5ca23c832edaa877081dafa12402412ace4eac7258d155e5342a91d537fa709ed9f356d8caca3ffce93d6de32acc27ae1042c8feafd09133709b99fdf1d0dbce37d92026b638f642a1339de4e89ed2c1aa53e6961d316c650c2fb8f6e769d27f926f6814bddd96f73322c888489120c9277857af1e125 -cef0202ee2f41b607e0bf72e1439fe586bb05be17723be7df848a789fc6bf72dab6bc5fbf59ebb62b0af64d437627f11538668c8f03dd43e94a787e9f17a3104d76e4613e7f0fcf18ae4c22522ad011d35f8ae08aad830fbcf9b217e6a67af0be575f14b33e7d389e95966904fddd1d2281236b1cb3bc730edf1f9f1fdcdfb25 -6de5f7974ca05cbd117c5fe8c23b691d52bc09655d0e680f2970516a8c1c00177816a8e9613f6f5d96068d8b64ef85f5032d56d181fa03be4256bac8c2c9881ad273b6976e34170dcd7daaf370ab5ef9b037419166cadcb006f5da156f60871af8ac1d5252c10e6305cb8b34d0497ec6d8f3f0e56df24d645f516766b4b61513 -836af5b4348e1e0bbe82a99defa54d096613fea9dfe72333a784484495337e2535cfbc1c70a16ba4fb1ed70f1c3df25cf1733deeadb3a5e1c91c47af0e6cbf2b6f1953fa52b9fd1afd416ccf2f9de8d2796e70e6a34ecbfa78ddb2068aa128069fff980031ef08e240cb8b7936c6ffc5265356dae0143f7212daf8d9b07cf900 -aa4541225006beeac030df045c213647b7584f0509bef12b6cc88b3c2d204f2acb5515545cda8f894062d885106e45b59086ad1cd4786c620da1bd95fa1a59071b5883648ddd9d39fae698611d38d80211e0c930ad610c35f75dabb7e92f4504305cfee2082608640ff255f01b1994e29562d915e61b8e65b441c2716deac326 -a8177a2e375b1fc37e15db9fc8d09256c25035185004395ade25365a3e0a642fd23cc73542387dbb5ce226b4f4d22bf818a2873e57c7ba4829651699d58e930b2a1742049dfd57ad7bad262beed67bf8b01e88d021fbe9c6de3e12eaa444581a21e6ceb508d536168a93952a7184f61dc185eca9d6a58aa1d30212edc16fd90e -95de4a81e6d3f2f154be0d1dc1e0fcf4d31f1d445c32a5ef36c466f64228331af843889b10a9f662a5bd74395fabf84d4f68c737164b8910714189474d67b90cf616f897db44f7c757b634e02a8a0293dd271844abe2fa1e8b8341bef24e031a93e857dd0c6eae7a736f28c5db88759e39bf545daacc5bd80b9479929158801d -bb6c46cbf61f71a87bdba0826e953e92df2f0a6a07a8d2dfb4cae5c2fa289c15c9e7fddedf79e9bfb65250134c4d4652fa881a2622460c77f40a3cb442c4b50a2957a722a2324e4ac971e62a6787ac9010509851fb34812857c1371f800c1b0f8fa1f8f35c886e079ca821c09cff1b4992c76a2c7346dc401de91223035e6a12 -af2780a74e9905fc1086fb206763896097fec66d1711dcbd7b6224aa29d42c270021e2c9856947b24a771351b41624940f2f40aa1f0a2a67eec52630aae61f0f479c8da286ff79eb9379ca623d2a1a3d79dfda670ac0a357f3070b5abc0b8d1338e81ecf7c3353b902d7e6ca51353944359bfaf9acbc4cebbabbee0582763c0c -99e7686b73c21ee23979c6568233c3eabacdca4614787ea2252dc91aaa45a22765cb070c06cdfcd8a17df8cd3726cd5b3db47af1570632dc2898aa8db0bd9d2c13bebcc3b6697585d4be2d925c231f4f009f2bf96ebb001a8aa0f9137288c3008be20b5572d8778ea45caf64ab7f8d0edb302edebf5e8256b3b1014e072eb10e -5194ce2948e5903c26b466f0cec3f1f823f673d4577be86088e46cb682565b2e6a562a9d3db46eed4aef7c33a77fdffea91a0c5a70a2c6ff2ec61ea82d6a702805d267133cac91ee3df7294c8962cbd25e66e0c362fb6ada4994300d8d45c427d5402c3bdb7127bee0a8abc3977e008566a0f82c46ddcfa9c013e7a52063d008 -7ad4603fc5ee382cacd05796d2ae8a4c72d6068cf817badfa637bb303f745e1fc3ad77956eee227b5c2c56de5ac42949a7ab9d87cb39f539ac4ad54dcad46e16f895d349a0fcbd135c4c209296b2973d8035874e899788da53280b4f0a63722b07a7a18f2721a1e995b0bd7bd49a3d84b3026909d0fbc555a52616a354581a20 -b9c341e5ae51a22ff48b742a93980f20d453993225314f4b9099113e3884dd095ae2d8d08b1f32d99bfadcdf6ffcc538aada12a6942c29a5d650ffdb5e32a61c6d4732499b1d0bf63e73c89e80342f7e35402c970ffda82cf67663e34511c62d55ecb633c5d8c9629e70493d0834644d5cc54f80ed66f287a7c5f82ff7615017 -f8e661fd935c5add80b19d2d81c80b6ef20c519038afa32d7f6208354ff4c027baf926efb51e78248dad52a26573cc3773097bc8d95b4d50abfc66d2f95e9901421c7419f9f2a538df188d55620bb1b33f35ad3c903f362b7dd44651746fa62787a16e63b65450751e8e0e80daa725ae7c3dc37c182f799ee7321dab6684cf15 -480ea3f0435d6ec1f2238df424554953ad90850ad3531b5433b226aaf7cd161f8ca9babdaaa0ca0ba83cb35d9bdbf9b9ae810dd2a57027cf921ed0fbe30c64012a57f88d7d11e5ca48283593c885f7bc7e37ac02eb9d51c8dc58c5c077b0dd1b3ede051397fe5e22554b4ac5217623d077872c998500dbe1fba7c2646995732f -56371bdd998541131dbe489d02432cfd494d77b874b7f9c665ac3dfd3971df220eda13d86310c6f0b37142c2bfc7d6a795d54f34650488445172d8cc1b7d1c0c35df1d5b086d875418ba88f0a11c0cfdf7a6b4ddc9e2a3340e1cf699df88931c6dcef85777590d759d90dea1b8b98ebb9108d32d00a4b3136ce5143e3217162d -620bace9549ea5f817aa716d0636e885316ea1e62efeb2e69d3e24c4f31ccf192af79e574a68c80edc39ca411c9dc7da11e6ff236ff776f2276f927818ecef2c7dc1e2914392f5f4788036d7a7a36b79b4978b31be34ae4fb591079c82d8ac11ebfb53e28e4079f317ae54f78bbb757593de0ff8569fb33598bd1426b8d08402 -002ff6cf5d36b4a712ac788d2ae171d0c8ea653de570849da9575a7fa446d91e6b5231f0f81175b3bf5d3ff3a675ff83fb3488c2f95916b326ef7d08c985441c73212d7b1db2f44467a1b2c9b7aaf2f27b1bbbbbbbc0c7fb0ce35e4f3c71bd0833ca5c05bd99ef80a8621c70546ec7501b1f006e25034438a67752c5b883c220 -193d9016002519f26968c25d3b9eca6a7e36e6160c6fdaf79e3787ca811d8819c8847b6bd2beeb89bc1b0e7c092afca4ff250ad5e67e304a2de0a25d15a1b82d60f16ad66d471441c7ec22a86fdfdc07ac3508dbc04de5746affd8f94e4e0e306e60eb2a1f2ee865b2818fd9b2158b2a4d3fb867d74a7bc97ce54f02a542b625 -2d6f68baef96b3d78ad24494b2ee6e4ee8573aad019bbfc9761512e875002d1a41e7fae85bb5967fa5f32c45716732427e5dad4f6d705fc0e2fb102b5fda95072f595a2040ce24ba08cadf74a150ceb0175e5541b0a47572f85c9764afacd30d5d411a264ada5b1dfd248acc03314c2fba422a4a88eff792f1386def51777002 -ae7824659f6d286116f786f888a6817a8aac60c426f2f97cb222eaf2ed854d294f3804a35fc1c9d8dcb446c7b0265a71ce6961d20ea290efbd5a5764b4bf1f1c62d9e02dfa4bfd806b6b80c2ab7ccc682cb80ef5ffb12913d2e2ca57769e392c7cbd9921ad3d2ba352cd618c230d03d2d0f3bc94a75fd5b8b936dccd5882b52e -5139629170558cc62014a5c47d745488db2c4447d3e5d190a59cc298fd07c9275e25d805fcc274900cc7f0d2e13760071a983acae17a16069edf1d7998f594293cbca337eb19c0e4b21664ca78f99d5e553f80f58859b5e103d669e50c2be909e3b9305cc32d4421975cbb0f6a0f9d62b2ae17a952410b7f75be85e5e3f2851e -07c7695ca13f3196bd06a5d8dd425594497c93cda07cf2fde01bf9fc4b6f33219fcd8038420baf43150e20c36cede02272f3b974e5c9c963841b4f0da964ec1230ee2e6174500e979ab9dcd7b55fe1f94bd7dc76221ba4a72decfc8926c1d406628fea94da79ac6ee92b754ec93d0d3db16be057f3257c3a07a4a50f10677410 -cce6aba9cb915f3ff9d14f025fde834bcb823772d9d6a0d6fbe7c2110526b52ef388686aba20b4b1faf4fbcfbdc0226d5c9d5873309152b4dc6972a0ca22aa059a02a1b50519841278e8bb5e239d9470319daecc9e39a953ab8bfa7710d74d1d3b7592a1d774f40b56f270790dc9980c9d5d1cd70260192cd9de09d844d7411d -e947b0bbe0533658877aec6ce2f54640ce1eeee315f83712bf3586a96a71c42cff01bebe28665a8357bcf3b161e606ae43dce66ea9160fcf119eabbbed59d60ac4eba5f7bb99b9b4052b7cea3ee7139ee76adee90780dcbe80b911ff4255342f334566ee977cd160dff306d57de58f0b511b6398a7801fe2b05a189f75d1d12c -c496526fc4e5b2e7083a2847179ddb39c6b167c8dab6b6aea4d927a0e9cf2d2025405e7984239fb151b1c3124929ecf0d4a6e8f2d4c16a7571e8c6038f25180e10d1d81d9cd5670b33c456cf8935492b667da5d4f140a458894bd886e249b71c2283406feab5271771a9d1ef2fe776cd1aafc868d83f9cae21553e67da35ff2b -fba28a5525940a3a4ce8184ee7f2881659d5bf01e4ecb29d7dcb322ebd229424f881b2a1c2987b0dafae0dc37d73ed440602bb61947c29566f7b7f9fe5326c1bad6f7b8fdb6424874575e520f61aa4a067f8d1a683bb047e6039695e5b84df023527fe230879c37ab5ac3d65fc518fb2f2b925e7333e125a5c01b99f5ae4e42c -684e6cbacaa7aabcba452cf84af9dcf239f2b5d344a6ff614fea0c51f45be31322759eec1999c332203c083c2a7697acb38dbfb0b08781a0b77f6f8231b6bc21251ef6dd9a76504cecd9547b9bd8cf5ffafde242194fae9f4cecdefd5f4c142c7814befc283694ea80fdc89464fe78f4b86689743b8132946924b79792d3e414 -2debc70570ea770c02d25beaa7e2137ea5bc7faaaa48d27cfa007fb857390d0341b64772b7d9fcb166e95ece509e120c0e09bf4e8306df8bef5086110472101cecedddfbbd93600316a669fd6f62492e8687b5da4e6096f5b509aa852914050d836f994c1276d885321b32e4e03aaa203e8acc3a25a76dc65d2e04f7d17ad604 -6a5a30ebe384c8ec5492be4dfd9ff1068e86e226d66ccd91fb5c3ad453f6bd2a133e51752e66cd8c9f62bf192609d5711dad415e475950bc1e0e99a403c4f50c17a20c982810d6d3c862dce698e486b6fcf12b1eb13c7bcce5eeb38b02ec7809b02f6d50349757ce630d252579d82a97e01f49021d6b0c1043ca303f68c32611 -956420e33fc6f93ba9ac7202f3a0ec7a05361e11545b416bedb0667cf60917301b79a5133e0be79469f784955520653b3636e56accae7cc238b6309baf08cb1b7df9f5365a40388b29e9f674fef9112317435c552e83e59c970f68a00b594a0eb21c70d7c88ffa7c466181a96d365114c3394196c5fbdc1dd244659de9efd20e -2cb2ff5938c07491c759f13a30a1463213756264a791cf7caac63888b0fa4a1fc4f8f57ac960ec2f0b32e916fad36027fb8b048ae5b3d87dd6803706c1b82d1a1a8ff19465909d86caebc8d6aaff65c1fc1b48b02fea227c3083ea745a528219be6bec9c2bc866566fffdfa6c6a4fbbddb9508a3275f1cbe445a87b9b0dd7601 -8477ebf1128acdbefd1dbe78f6cb737b1db4b097b9ef98ad6ac6f3cd504e021696069150d94ab69cd701893c3e7c2cc74afe187e49df35e15cbf5a433315331fb41788be769914e87977c04e9bcd8bb95b375a1bf380846ffa04043ebe54600ac23657e00607e5c89b4a41c1edcf2b3b4d33e88b53f07c81296516deccce162b -50d30898ac2542cde8ae7355a15b6c7cec1a199d540aca119e8df9166f946b0b4210fc6bce70f62bd023ee9082364ac7fc99f9f9fbf74a501c07a5223112e00e7ea6ef8cfa27630289a17f88c0185d83b7ce26fb0fd71106b33fc9d239ab671ad1792d9be06e48c5c71eb684b09b64e3cb9b5c59e4b7691157891d241747b60c -9dffd16bcc1ffef3ad99e57fc4d7f51881cd57a838d02844721b4cc9cf0b851d363cd3768fb387ad7638326f6ee7f1beb8f579780fc4291b8559f1aaeb48772ec82b0976af986fd87ba503f4fc261d00e0be6dd0633a1d399d2362dfa3305d1f044972832c35242fa48dfd1062ec99bccd97bd92d805e2bf01d4ca814729db0c -2ff190efae2cb7692204100fefed1279e3f999b2f324a1aed505ccf140f0480456a425862d78c8c32528ec07c89f06834f466ff7b4699a4fd0a1d47aafd31a0580289af9501c9ba7498f06c9d45818b36b736640303038aca1698202c0c15512f66a9be2589b0c3e183994a43cf7068e55c47968db96384e44bd6eac447f7b2b -4134c9284b42f9fc6749a7dde5f167389c81b6bfefdc956dabdb57b01fe10a1da28a1cbd394c62160b950600a80f372d014c2cc4f28a74cdf3b55a90e1c9910c562e2d2354d5b860546477c8c8850aa6c6954376b2f7f868ae8eaf402938950a4c946cdf2ef68365917ae55a41e39fdb6a2db63ded856dd2de5f12669c4f240f -093c2cc80fb18c08e8f2fd712be5529069ac088590c3a5cdf665943f5c3777231c30901115e591b42635ed00d58a5ecf7d026b604902a26bb122054e96bada0e504a5a995bb60ea9b2ca715be5f82c44bee1478fadd5bcd8c96c21ac08cc8e27687e7a60df9db1c944f921ef691596253e7e44fba4c6e1eee32f6c9eab40cf05 -e9f24160da9668d5c6325bca4b2d9d068ebdb3adcf1720c2129e50759fd64006d8822dfeaf319aad82105d330fb43c5d1ac434b0fa4194d0b1974e4fd45e840ba3c8501d16e5deef06423b97956a53cc64b80fb133ea360c33e8a625d08e6d24c87b02cffdd16aa1f451889b45d86881dfe4d0e5bc6479103274c8313ff72f14 -7fd788e30ba984d184cc999685153f79f1bdcb030028bd3dc85178aa34ce7c2902f397b203a55078c95d0781084c5f55c815444674d1557fb9ade85b12a26a0ad9a5c13a8234495a1da6bc3a9f16d3b2b6f814acf1efe0ac20a70cfd20cbc325366870118a909db36364fa33165427a6137658a37979132425704252fd7a741d -65c53bac911d8e196bfa4af042927ab567154120ccfd4f5ef8809d23eb374416b2f61baea1e5527f7e6a653e38cc07c4b51c6c74014fb6a328013a8b7eb7b51062ae04c29aa08e4bf35cef784c590a0968a7cd80579125ae266ffc0a62b3030d908d86ff8a77b13ac1dd5a1726a406245aa83d0e33871dde4e17edff542d2f02 -58886e88c81e76ce4367c721be2720f345c6aa2611278026133d5ba67b180e2018a38c3fe228c4545efb23219059a838797e0438879c45ed57248dfdf3711e1ff4d2f68b1130da0de12643b956bf57248aebb19e1c521799755d9c8d50bebe1d33b243412700e4e0f246e1d2535cbfb3d6e0eecd4d6abae8396bc7d0efc49b19 -15c9010bc1b69382e7ab981c6c0288d167785952a86927f404c15c1acfc4820b63a18af240a212769f54b3fb1f70f6fda4ae13b024637ac24867e629f063b51f4db5cf0afc6427170b12fdc510fe7e459f05086c7c3551b86fbca535c6b8872d2e8f63b2b4d063c53b49612970443eb27cbe7b270239cf52988ca1db57bde521 -88ff0f4675c558cb6dbffcb30af14e4010e0725073c6d17b01319d55c985c229f8739052e0c724055cc4e78f7bbc3000075fc403825b163e1ed76a8fe881a70effebf22112feab25053ba1a473519ab29946d1d5a98213310acd1368b504ac2add04249dc4371e77b8d93f938fa9bae11ab083592cb5e3a8c3916b479b29fb07 -dfb5775253a7b163f14966379e705a0ec4ef67df08ae13be9d807d9192fca30a8664b3eab6b52ec8503c1297e766df5d62e53419d003691cc1bae73a65c5bf1e6ca95524e05c8cfe70fe14e6f646a18ec4cfe4fbeb635b56d75a1de9a62bbf1cab17d4ee1d8e3e002683fce3722ced418820b1127a850e8e40c3709d749d0107 -a122dab60d45a5254a8e66036cfc97704caf3f4ffe21d70fca5940bb3ea5eb235b61c5f6067bb65aba52d850959604272dbefb1cb1adb8ff5fb25e20bb085a2c10137ef2f5da61efe9cb9613d2460868b57f0a5d70ae853fe2fa5c4a96c65909c82c84d382247d4e014d9c2581ff72ca11d42207f5ac62d1b8978f41c8ad0727 -5a57b87a14aba201da4c8d23e6c8b591073be8f2505c2840bd8b888b5f856d1b45127b2a64953d7d5da95edd7e4ecd7b590ed285f5bd48d4825a7fc55166ba19fe660e637b3195c3f2cfb2516336d9704f0a467b42100c81dfced8109b03df06a66ea8b5644feaa903a0e0ffd4e610dd583ae93bccad8f1a4b150d8db10c000a -70917fda8fecf616c62f0782ce4fa2b3438df3af91a0b0805d66c2c2e26a062a6e501621c281d4840f05a014f96aecf5f2aa97c5600dd95bc8a64001fcdc4711205b00d10c7a1535e265da0cd93058938276b95152e0aa0851bb48039cc392257de0b53ac19883550c6380c35426d3ce35f16e4a3670ef46d65631a00415bd21 -30ce45752c73950867e9da1f93e440b6c8305f096975a5202b7b60a34cb99f16aac0c6e0806543cee56fdc64859b29486679aa461b8b953c422c7a67e608460a08d2b0d6193f69f192647443cc120c0b002bc2083ef3039d46b2c526e13ec32c8b01cc468decab9d5f921c6fc934ac1a4e7cb22889d30f13a4294031fa8f7f0b -68d99005139e2bdf8d322676b902dbf5419996a291eca2d3b622ea20b00b38279b46279660814eada6a4612b8f0a71f24936b58375f34446bd7b6507bbac3f1af890ea2b2f6649cc03927d8f5ae1ef6f7fdca22135c4bd30b1dc2b4584d3c90d6843073dd1c4855f66d1a23bcbfdc7fc98dc145f588aaad91e0f5b31b108b514 -e134a8b5799bfaa63a3239570531289be9c650401b7ba80f38fabd81a599ea0be724f3a1feb5e0d24d499c796ff36726895ae3989ee83e33845a835453015c216e7e7fd3e0e8ab8e69a3c97a5396540b0d4e6e8697fb941c02c8a85702af3714fdc6c68f4d5b2861e4ddb36474af436520c0b6b5a00c686474b477714082821f -3c49babcbfb3c889958b691d21b400a5ef1ac986e23598b17559d21b05fb740dd3d9e794a1d27e7a0033a40022fe6f563b0bbc63eae46f8ed135cc033c62c71d34f481f0f9c7f1a2a8be71f5c30191ef318c5de6e49ef607ffec0a439df064141ecacba3ed4694a51c8932b2721a98278a4e50d6d118d2e40d6d03b20d041821 -3433f8daaa6969ea5d4fc084b6349d0e643fe17a6087c32946e7867b01afd0128ed7bc4df70f70775fc618733b6fe9dfa00c2ff5329068855cc8e6f84b896d26f07353ca09c56074a0395cab7e935403cba7f5ded3864a6c33da015bc10f4302c2d131e213b13b4c05882e3afbd3158edd8a7692e4230231dab01440d9f2921f -e993f3b1b06622548deadf9ba07884b657cbc6f135d87c6fff56ee5b03d7d40bafa4289e15988211308472836256681d60c7d6f92f6fcc33de984bd4e843b91e7475d3660ca1f7020797b1ad53289ca77039ca52deaf78a47203ee1b8b34140c66333712e8f30072c158caa54f03228c9bdfbee05a3ce09142b91e4f5cbfb507 -2f07ae5bc247d326057731258abefda53f405e4600261526fdec1f4a8db8fe122aeced9d03a39cb48901412dce636fe2ab87ad44e0d2a2f0efa0750630850f00437a8e05925784de21ce6e0750f1f879ffc4493f259362e34563cadde5bfad1eb2891b711f9506b75950e53fcc0debf6871033aa4f043c1af7c904a762d0d418 -489e5cabe9008e0302214ac2fdd0745d97ab57c45c64a6ef7096ef82d92f7b023e437ec2a18434893ee8858c083065e9c13b2654f96d896053cf308fb008c514664034df8fdba79150658789c2cbcc3f052b867acba40a56d8a949cb1d5c3710fb99c24b46af3c83c5ac7881b0d33ea919004add66cc59e5d7cc76f0907ebc00 -1b0261f85ff078cef6f9d05b00b7c974d6ec5a3f4417ca3475c9b4c45501b20aca95c548bed9e7538a3ba636684dba5b104dc734797e18f316d059ca84a30c08ac1159ca044e57e23cf1da97a37a7d27c8ed1db482dcb936135a77dbcf2e581a46c81f4bf34b965c140634662dc8747b141dd697cbe302c684360e74af32b219 -305919572c5326e0f07f518b2ff83e9bf9bd27c484cb8643e793e686cd7a2c1163a316cbcecee17b20dba38561e72c0b310025004e4688f9802b43dfd3f6582ae110e75f4f78c8ea2196c6b2a11b00866811a3f303042ce206320b7ca4e3b4181dbe38236b01cd09276039c8c6694495fc1c48cf8d84c25b34f1086adaf3f020 -725f632f7f18de19861cea76e2c1abec93835c56ee2bfb943690d6fc84f6ed0596335c88cd864d01be3491170c0f44f4683355f830f96466e9c5dc6ba90fad29253c26482fc350065607cde308e47a4aaf5ce51320d1d9c3236601b4d3ff161c78d4b21315dcb01d6523d5b9d1894eb32d034f0dd3a77a39c49a92917ba5291f -c20212a0ed2d69c0db971fac2c7c4539bb5c6e1675e3b11e42f4e9034d6c7a0093f61a1c50c6f7a9ea59823aa8230c808a353d4291c0634ae83dc803d46e1b30c2481f393593bd6db248a784906145dd50ebda46cf32e1719315e882e2497c20258848cb4ccd90d7e5d182e0ca5c11e3c90dc245c9af1ec757e6a9280501b02b -a362736ecd11685c5d82f446700df05e904d2fc3fc5b335977c1fddf05324108880a0acc14282697cc84db6247dd36ed5a6bc57e08932b8316e05ba31321722ed65bd2b9d616c4b01d94f23c29b7b3037390e83369ac9b847b07211c777914259cf8e35c4ac26435b0b5e5f1312d799007774f5a503c6d3853b333b55c8a8814 -60e2598bf7f946ebce2dfb10737e4f06b7061b28d6c706a191657970cf96080278d903f981daf519b1363bda36aabd151d071cda77cb617a592d20a03cc7ae22e1ab96d78886db79ef7a9a2c3368627d5571c7b9b5a1ff9b602a2fc364cc7f2c3243513fa331a04b6b4fbab5cbefa50f2daca4ad397a265d8d2a284c65d1f40c -b71c1b465e1bc6ce5775042e12721748907b56d812e7c406e0a48c2828a74420cfa9d35c3aa4f43e926ee4710b29bece8862e199a5344b042f9ccdae3ba7ad20876b8fb4ee96ee01ceb812e3ea8936ff8bf4dfc9c620da774bad6b1914dbb21b101d14c8a46c015d8b2cd88af8250bca6031ab9fbd9ebf05a4c6f372ce8ebd23 -e40d957a62f9bbe031da0ffa9194ec9a50115abd3e5d3ae41dd18e51034ce401c4dd20d4b7f32edbd287f46a580639bad731969c48343a32732b35c778a64807e8582a30f2306782530c171504e001340d049b4f1c89722db805d7c920d9be00d4e1e30ed6e5fefa9ee783c1948196e32fce5ed6bfeb4523ebf7ca291ffe5906 -eecbb858f6b43aa87daaab4722e3236f879e05a49a13661bc08f0fc5c042a72e189898f70fc568d6cc1534776009d0a59d725aa55e5ee6d764f4f9cb1f44cc2827d34f1393c73057fed159d4ba182af1a0697f0884ff4745672e6b6930f4941f8d4bb2776d87fb097173c52d5fd403abe8ef0c7bcbb2cf34739cb3fc72c7b821 -f35449f1fc80baecb52a0ef39b6fa478aee16b9b718338347d0439d98890b410798fa8f29db702805f53c781d53978611b7753e8bd05e24f26798c55797a1e0aa0350d54a87bac13638089452edf2a3cfc0fe1e913202b9de516fdbec791d02dd4d0842557ee00480106da9e1a58440e633ec30c4240988a862250e112639320 -1d02a7b94f3eb6b9b106129ddd7bc53e260c0c0cb9941963fe41e6a48e8ac610a4f207b96190b4af440abb1449f8da81642f01564ca8b80c69fa932228dcc4010fb81db603dcfb331d4055fd4b39510950bf4596785beaf34f66b6284ecac91c60bd62da818cc95c35db17978fd866131677ec8fc61ef3c1d530381c9ac15d1a -fe0861ee9489a3dcf534f38b92486a7576f7319ef2dc7fbd3a5a42da20442412adbeb608aba3100be25e40a87199cc7cebf0eb83aed592c8213e6aef58497d1f9e7e1c2aa643bdabfc906f2e74c1f94d04200b228330471bbaf5cff790aaef28cf9aa150d92abdef92a35e575a315947c93671549d78491963cec79d7acceb09 -8289ee2b103b4803adc2b1f5bc8dd64d50cca7d13d1da9e1f39bbe05d32b631f1ac688985f219ff4492677b6c05bf2b7424525fa1e29e6bce4cea6c42ce8272cd4023a18c6642eeb6c9569f70c5becb4ff206ff594fabd95b768e612e9ade022ce54ded718f7e4ee61d25e90328f7a0f3c475107c305529d33bc7553bbb12001 -2091b799ccba4d0460b1c98f19461a7625f270eec4d05958e217984f05b8901bf590eaa059dc31ae74cb70c6707ec86eaf89c66ded74ee171eb434f322c1d42ffc8115bab4ee580ebcf572366362bcf07076d9e783445dfad6661719ee4547295128c4a37ecb43db65e1141c3147430aae06596289f459f9e4fbfc0987012b25 -4171d44af6b380c19c943e6c09f0ce460e4dde9522da185ba9d187cf92dbf92ba597a9d2027290fe815029a855d3e071489a195530e262a0697ca90add9f452e631320aefaba142819767ed842d8e97c0dee6eab65fa5bb070a1b47ff0a4dd1f4a5e4ae56947ecc1bad3b4168a7465b435573be21d812f57383f907c379b1614 -501287527d6c97a966921a2817e7a9916ade2c17902b4446a99ee8fe88fa3e299b7cabf7811104049accd625c26263f7fc1a338ccdca724e795563520cd81e12dc74cde2fa3c86f222d2c5412f07c024c708b2a2e9bcfccc0260a2837b8588190ed6dab5f4a8842be31ab6279cb6b26a1295fedfe97df2625bd3cc2ea0d3a71d -325b1b1b90cbc3962a88345c4456622254e845a3b6d234035a9d3d6eaf670f2c56184d98ce72e2f1a2be530a533eb881b07808b07e601684e7e34f4f860ec608c6f500179c1a93fb4b3e1fad3e858abb52ac3d17591f253562b07cb558bb1f218e3491e7e13509c76d9fa2d11eac21a4e2189b8e31d85360d4b06f4ce9ab3012 -f43cb8da3c79b9148eab47a32e380ccc3ac3b71c0b3a79fd7b5b29b0c7cb251187345346c341767d9b475a5be8baf0014665634a24a1305da1f6cc88614cab1146308a78e19332f061112925e1818e6f3df6165945d659030d107c974db5bd007691a6f3204d77050976c0f0913f48e699b3b0b92e52e2427538561aa5867d0c -2e8da53c44e23ced7cc305e7869fa9f1cb8b28713d86a1cb507f2655676d970bac4c59b8de041dbc0cae862547ac258758f8a7f59fdc13343d97a28b7b4c721fe6137eb38bc37cafc918483e837b3bae78792a6735ecdbb7bf0b2e461c731605e4b74edf9c12167c03336febd592319333f99b0df4f7f74cc060d65193570509 -fe72d4b1c54b4c7687c779d4d4cc26772466855befdfaaab1aced12668954b003ca46800178465ac40f7547a8e958902ee20b792d36e31be89f738a3addf4724883410bb30867ba8b5e0117ca2f51040e29f6200dc3954c3aeda96783c192c17b772c509f96478e8b4712e8adc82c920b0048914863cd2e84ef28ec1ee84ce1a -8a40bb8ecdd94791d0b0f57d6dd7fa738868240d815e7a17c4eb8b37f9848d29bb00e78d1f93fbfb0e54a656831b839644f73d65f699ea19b6055f66d85ff61bf66c7c3329db77cfb25f8d0eef2bd69418268b87adec129274e4dc739c906a171859e2630dc64f22788338f34a7e0075c790a26a22cbdec290fec468b52a8c08 -7217d0dbdf7122975293829422cdcd608a6bc9c10384b61e474aec08abcdb600097394bc001e16e0643f1573166f8b27321e86f8c936e060209c8e0bac945f148009b54f10a9d437d8b4a11a4af98a2122a1e46b44f3dcc50a97ba738931bb1481446776df277fda5b46e095d355518e39848e1b7cbfd43fe6b0b5b0e269da2d -21139e463bda15813c17620ea8ddc725094908654de4ef604b67dc2c356c0409ed943d25d7fa508af7003092998c40f83fb905385acd17cfd3468939d9d95e2561c0defa6faa8a55f2bb67d5095b1e23e54061911cbfd4387212e330447fe61df7bba9de63a4038c2c421784bfab9a80525a93f45bb243b68dcfa01bf24f081c -08c9ee82d0507a5b10a0896437f9cfdc9716bb1e6e4e18135abfd22e90fc5a219cc749746d799db5399c3b911fc04fb988effdeb41fb01835a71e9b96742cd01a64f2638b7f867f605538f6beaa762400755aa4bfc69ab0949b162f791a8fb2b474d7f4f638372532284bd48e564daffb786c230d269d2a8617791cbb8785c28 -bfb0e68d9974d35142ef199c010c751094b39bf6772ef649977c696f3795a7184f6ec0d8698319be04c518b4d007a56f0f71d0458c837ae9abd400c6fc537929c985bfa1e24d0d0a5f5a5ce6ecd70ba96cb3b331459753ca9a6af1b36a98e725f2c3c70d1b97dd674333f38a1e54aa8f60928c7157e8312c687be55d7f021002 -d6493832e3d0be3ce8c6a8e2715f979c0f05460cf2b67aefa2d877ecc9f7812c03958f8f47679c6c7ce120909c95fbd3c0cd504302591425bc60c12fecb60a2db4a6fea8a49358d5e94a5d14af13aa8a696f22d43d16f87a2bc6f5341ea0b12a6bfe47f974c62007c5b32c7ca7ebb95af89f1bcc0db203a1283960eb0f50880e -68658977d6ae1b3e622f0df4af3cbcd0c6fe5bd1835d149c91113aaed459de003a913e0de95655642642ac1450bba9ed9f444df732ce537077e41f90e86cc81966a3e4f7a5932120429c9fde252a3512cc52769ad582015a36f5de15aff33f22f4a7670a409f25c6fb1864532c45e63aee87b97aef4b1ed5888d52afbd88d216 -c03607dbbd7e5be11457e312f94345ee41d7f7068ba2e7f781b40bc7a9e0e817f0116909ae31f5429a42fc5ae1bf67b69b6e71a5a2048d4c3d90091c31c082290ac9ed2d2f6ee7f360d171f862953b6ce0d8ee7d1b9adc8c451f0b479da0a905b48404dc5c8b9b4c94b08e4a59360be101f52abafa683fddc98f1ec1a2d50f2a -27a05aab983b4666d2e950a965294c287a8b6a4821a11d777f6385f83c239702eac5d32d137e3351db5a82829d3b49b3ff44c8696323fcfb3a361f4bad0436017306f44c182599ed70b4c91ed6d258a94498bb44055c17c4d8dc31520c9e010a6ca033818c4e9e88a170b96f9d3a6e31f4fb200b3816336d58e8458c41d50d00 -4e856ce5e9911ca848f3041f4100a0104b6fa75369bd1de23ba6ec563974aa00ad1b523ed26d540359bf015c3a76e48a7a94036e48d36c3985cf7999c6fb990b6dd2b9755d0e6fa5aab9e57f61a4f995fac0120aba070d044f82ad15272dd216ffdc1b1f98266243e9373fa4d90cc1bfc65836c1fcbf063522ccd249d921ee19 -e0d805966b060d3758309439a235344bd0520a6ecb5b2215eb02f56040bbd90b62530e5dbe340be13e589473c5175b2702021e63d7cfa3f16cecca7ff646430ed1b62639997256378c6f9e7c78ca9c3cf31d8dd3249a1018855e77072ea8cc2fb2790b3d1efd56060163854048a6cf6b4a296a7d6ac873376648cd52a9490f0d -95f385d667a9c02e5fb25713fc8b58b4ee29b0dda11343db048fa3a5d4427a0ca79e197e383d84ff99c8da0a8c567b69d9717e946c5d17e04d1b27be7ef62c13bbe7bf062e9097b73466af9dc288c6cbeba91783ebf185b6a912fbda4ccfb10dd2456a34ceeb8c87c274f80a204d306e04afa78438087615e689bb44aca1c911 -795c3a8c63e052ab187f23a29130a4148f7cebd54fd3d6afe73abf3c9d06941e14ef9ce2a17f81e0a17fa122ccb4caec4bf7b6f8087ee9f310791cc940e50a18491e7ed9337eba616433513d8ad001af71b19c1155d48e61916966a4a66cce1d398ac0fd42dc53722903b48f3a3f5aea1a1baeed256a10b4e393cb84e9ba772d -4da7bdef55f8d3d8b53cd2feed12899824ed4803bd8503abfb2ff37329f134297bdcaefd2fb1c457dd3b4b3543621c8e58f2234186b670dd12c0186c9642942a12e5eed5d07855147bd058dda2a20a135f28e5e17861f5799f37c26ab266871e183280e89d1e3166220e639f1d4f6cebce849b4e474156b390ab0fdcedcf4e0f -1b4e0114f2a766f83e41193c695e0fb35f46f8608cc4f75c24524944ad21c326d274af53e924268eaa823cf85ce299189e22e158ede89f42351246219f83eb19ee0317cf3b134dd7ae3761ec9216ac6af8abb8f0d30cc69de04c0facabb58502e535079e7d375fe70268ef0c145c5b6f935933dd297be2dd5bb2313a32baff06 -b3670a0fdc92255331a435f9b12dd5d1f58f7f6f5e42bc7c4a4d5bcc3d280c22daa1a88267703a8271c26b2a1e9f3594422e743e4570edabb7502eeeac026f06e0784c162de8073dee71ac41c2f45b13b5d23cf822a5ba518acc2688fc36332831c586bebc90a6b9fceb85ded31d570cbb2e889aca836a8ab155cce2e575660b -65b9d0a3cf14b7e13ba420290829ebf8cacabf2efb24dd40058e8d15c59c421744b507bf1c0d80b77d87e7b9b8f64f056ee0f4ed38af882df23032a4065243141a25f475f52183721ba9badfb470c1fd26db1869d78e840bca12e7d1c115532bd39a8f3ae2cbe7c5d0f57c5645af6c350deb80941faf35dcff08a008a0cb5707 -7b9417b4205de167769e78afed27d2356f1baaccce162bbae3e49e049b431e0cd5f14eabbcdffe77ebc715ab81d3faad019d605b2402a0e31b7559271411b90a4c29c81aeee2adb2c85cc43b6c724f9bb3aa4eb3130d046504cb8b3c7c08b902c48a37a30c770fed8a3f8d38e8414d45115c3d51a84110fa0d000bdd61434e29 -0426e268e45dc16f868fff6cdb29d2202cbeee2e0767aa21c84a764ff8ef8401cfe247465d8be4ee985331eedc2733f76e608004c5ef0f9f50a4df6a321f2120710597697d4865c3871e15f305c29c543babfeb4b40b1615d14fc2cee0423826709c79c2522b079ee9e176c8a00112fbec0a07a5c0e3b100186623aeeed2092a -b9bac0ed79feebc51a167da1e3604d14a3d07c73c613c068aa48304ac89faa0d14e651e6110f5a5f5a051ef9150e405efdabc38ef2551b7ab6e191aacdb3d30a6f099a8da6220b8521dd8400a36a4173669eccc66ac3d22b02f2c1f41d312f1dba44cc8cb8bec32978c47fd2d9561ba36a96a6b905cfc7af7fd518dad773012a -b993b232d034bbec943126e9862bd1a69900c596ea12c3c11779187a22c32328d75d1a85f25fca99d965d4a50f0f915d904b2e70bfcb00de440e0f18a42f87288c16c0128aa843c6091e36774d58786cda206f69928106ea05e4483847988817fbc765dae7f3e3d29605bbf6b1739246d9abe48aa970344bcc6c6b98d7446311 -beab61d9eb55d38b08e534e2e34679fd5bdbffaa49d48add11762d0431cf8b00c2bf2b6e14f06827c382e481c256f57dfdd0fe7e8f9273e4f74279dfa1ff4e174b4dc1a0384ab27f61798a48c3eff20753aeb19d53b57a1c5b389d64b6a0451a5f2855711f417cc38757f2156a53444912bbc95f397a14965ed11d4271302111 -48c6b8edf025fd48837554eefe7b8aabc19f0959c743cf423ea89f4bec61d7232543c932872e85bb5f52ff8f309032749d70f9d29f2527918c1b6096df0c760502c352dca13d1fc461cbd6d90208c62bd2fa6a980d7f94335397c051e05fdc10357d9052e6dfd6188000f8cd686c7e2c6d8b3c0463d92791255daeb55704070e -049d789ac868d784c9659782827c1e62a7275ed4a84839e2649d8466500544186f6c78e122deb5e97bb6fd8045aad781330399b27c6864979fe9457781641227819a94ada3c95fec92de67d4f6820234483caefe1f23880ee416de1e61a0a90ae8ae8dc3f2b019a489cd540bcc88d33df9159b6485706acf6777181d4ebd1630 -e68af9a944552560ff40a6f87a6139c624871ae97d6fb2f4570dcdbeec86f21ff2a43c8b8656eda87f0b07c214dfde57314b5c7d0c79372a952112cc8429a8248e28627a9af2ef111b5fb41181e3858c184440e99ec7fd5c952795716914f422c75c569094b7b9c9687f8861d104a2fa4290f7258d1ba6e2fea86e2a62b6ec20 -521fc5702843612af68fa61670aa92f5c74c67f9829f1e6da8d20ef70a32352baab69727df48d582ecd1b66534436e774259fbf2a6b9010904e1b3515ed29419e04cd02b87f4f24ed7d2345f39c19b9c0ae67ce04bba13cb4ab205e2b78b58073b62b24592e1c67da33b07e68b76437c7ad8e2a0a76bdf12aa42afbdb08f9e15 -c5c313051e42f0fdbef3147fbc121150f331b90c0f00f850644d508db6432813ce8584f9bdf6202bc91bfc636f77205d356d7706838ab3cd5a6ea693c2a8a214cc0ec083812827be58c2f70592cdb03fe43aea0ff408ef4b108d75a899dde00a34697766aa6c89aa7dee7aba8ecae7df4d473b27a9fbc74f2736e082f3e79719 -03134dfeb882b18f809e412e6d269599966f2437d0225f924fd62b68a7fdf613c364ed0be9d3136bdb256473e5a5fd98f6b25f75d8023cbd3fac4156c8acf1228a090b7ff82df0c9745d16d65f916b622284e417156a83017cf8993c314a81167fe501e8e67808d4cb6a95a6fe9115239d40a30c6d6a1bf4286eccaef9312c11 -d0459ad0a5d101a3c5dd9c78e6738f174cd7affe89e21663f91cad3c2c0c6d01da439cdc37989e353dbcb72f09552248d4c78ffe97882e979599a1767fd86215cd446571142c3f742a9c93a3039abc4f7341d9e4ee266d9e5d2c102aba4cb60ae86e9dff2a5485dc38047beeb0510271ab3b19be3db775e41cc741e0c06fb407 -5a352fe48a4e51b05019f61da4f527e70ee00bcbad03dfbf34d67c485d82db266e1591fd3a86865e154849cc84c844424b0abd8891d11077359c596de826b32c48f692c5b47a634eefaf3dd01ca81238032dad8cc82da922765b088bf29be507c0ea38d2d1e7be46de0ba0be4c9dd6c2a2e95b395622af05dada30aca4825602 -3825345b7e791f316acdba05a837cc1dbab7289c65c3eec647088fb563c1ab23a71ba2d0fb99d92e6c8b932ccf954d7ae78b48378c9d98ecf3ed0540d1f77e25368200183cb72d680699f3efbfa972b03578935ce0ed7eedde7b8eed9e4ef30f3347e8f56614afd178e6a914d1b16c97b6c7c5a3c797cfd1d65cc01d7b807605 -67d8abee67fd86c265b55ae75bf1ecba8ff4abc077a2769a3497d77952cbbc23703a27721c6519f71001b976f5bc1876aa95881c6d74799542c14695a27eee09344ecba1fd091bfab408b4d4c0803b26912bc5cdc35ee670000c27a5a8c84c0ed97157145e82d78a372c89aea42431fa66daf60b6775e1727f509ba67c3f4418 -d4aafbcc741ff368665c4a148ee8e7f71515423508a1516d6751f933660ab61bb6f8b2db71b371ca52eabf7b6f2f390c0dbaf448f22f492474b71d649b8af21f9afb59147b44fd58bceabdc00fb648fbf2ab5317b115975439a4ced264f6fd06c09ae561d66338909d03526fd7c5b9812c8f65b91a4bccf8c675a2ee4e2dd829 -8ddc758172d07d6296d7a42b55fd951c513255981db39845385cda8608044d2d69e1837ff1af243230595e1c06345e8ff2d6e15cd15a636f8ae841486e395313ecf8e8be60e3af24dd3447fce7badc85a1c6d6a69afbac881032b773158a3e1fd2c952f135be4c5f0c20289942d074b0a392b20eddc6ea12dd7336987282f429 -ee28d0cdbd16b232f5efa5d98a08358fdae1970e0026eb13dfa57e867096771d427f798c8ec89c23b48832dd95334fdf2e61e0a7a37bfdc1ca009c4c601103283f28781e671254e224116891bf9fe5266ef1c2c2f3a1d4bd99639f7dd654c6101f5273ba150d39db27e03cba09e32e11832587bd2f472303a02306fd9be9cc29 -d4652b59014e57de3d049289ec46e175486d52aacd8481e6eb00efd1da510e04b57ab0df55bb64c5242c69e44d58739ac17385f574179dc54560937a69b0d81864875362c5cbfc79546c324495aa6aa02fba3a701d7e8e0dcf90002dddd8f70670ecdbc5ea17dcef5131f0ee1eea84019b19ec21bef65495bbebf16be0d16808 -61283e0d0b6fea7bac5b8602ae54c6c03a9045d9ec05361fed1e44acf6a10f11d9a907ede0d7655768f26c59846adcc0800281190b219f9efa5094430f678f0a8b351473841eaabd55af085151c3971cf11e0e27d0d51ac2d62538809c9e0505cb7c4b8d8eaf812fa3c04c958aedbb6a829f2e197a3643366373967a806aac1c -42798681dfbf280ff5918749f480e10b6d6610b24525ce0cd0bef8b9074047157470bb0eab45b63267fd7913196b58bed50266082e778c323c9fc4d762cb9606e3917e45f55fdd580b05c136077ff37803bf60620f7a911a2e54df3b40c57010c09b5704510def3a5de27c1d5dbbce142f0fe6466024c4e7206ff9da0e036313 -bdc549cd449cb9483ff0e1ead9f333718f86be4803a43a47a9540a6f46c98c2f43f7201ba9c931b43b93872d82eb278f1d875b2a01879b9ebcecba28277a622759315dfa8ed364ed83ceb6ffe69758ce0e694096226306fd69b11866d04fc4183dc6a1ccff90f8672227b21c0c3608028792cdbe3eafc4c839db4e29d9ad3501 -c7fcf5b4de57334325617372d6309f884412747656dd723221e543c4c0b09121a9567d713966a7a016ced7e540f74594d8ac30509f5cede1aa5f55077ac75414c24debc91fb20a359201d13e197642b8b8e2791945611c29da634a6ada6b841d3a611dcc0fab2dc03b94268edb804f6a5fa4e7695e2d286924a5545a31fd8619 -a32b360d53fbf5378db302991bff977e103df6875ec8fda455eb5aaf67f53c008b31b655ffbb956b61282d1239fcaceffd575c9cf6f75c29cb9b29b0f23cbf14b8c3a702939a356b2a7c59f2e930df3cd822bb65f917b5f43e6fe3bcdce04a0ba6b75f447d767ae250b1d1977ddbe936642633590b104fb3c3574b7e30200a1e -d0b688e6885097928d4ff1d606094eee5d35a002c5380a5d21db5c9fb79741239126359172aef6c48c9962795201ba429157f0ea8bef4e78eff193ae7f5fb01f97407bf70a06095ace26af6810603c9cdec04674d7b11a4727595140013c000dd52620acc35c1ae3e974b495e59fd218f3df93b1c80c8ecae016d535ce9be324 -da2541e4501dc5a955349e291ccbd59de8cfa61988ed49fb940e1a125a0aa00c06781556260b3bea8120d2286d2893ba4b65958a2752808240d6eaccff0811117747bf8afb6285ce3efd7a7eae1228eb12ba37cd343855e529c25261b739f221cf883e8a919526e1d5afbfe5c750ad0502fdbf77018cd1d07c271cf14e61d005 -77242e4dd456a551fa4cc86b6ff5131ccd4b6e72868d1587b08f3da3cab12d0490cb88bfa10d06469b64854299af22b5e2d1d5238ea29b4b620a8dab6fffb62a35a856986d335dc7b8e86f0eaf6dc0452c152df2f73b8cd2b0ca23f974c0812732d8a4b15b7d1e2479ef5f3b03c7398739b6827964ff67bf4fb7b9a218730305 -7b57a1bc6a6cea20e37c4987efff2a68135a471fdc0c15f90c6e8cf6e820a1197c47ab5d16e981cfa2724ddf5e705f419e51dbd4e8402758402ff83080559b014a9ffe9ce5d84b4c18314e7b0b10277939dd10a1a777df14aa6f6c2c4b0cd80e00210c491041f8d6ddb25098c4b675cc2cbeee6af2e7c7fe182272d7f899db05 -0d2fceb5dfec286b303c60ecfff6bab2bccac6582fd8d342399eabcdac3fe32e27af326f7affb5940b896d988162f69db97560a8769e147ffaad32ab5b5b2d0e19aa297d978d691420cb0049921434cefc3c64821fe56d3fc444a76cec91ce20a50c0339acdd29914bb52322f1afb72301703f26ad9fa3ff3a73d63d4e5d0007 -03892cdbf9a1a0c5e97f5583159e3584b4062ef4b6aaaaf55348c837356d3116fb671a5d665467018f1f349b0292675cc73bde98923da1ec355df39be17add07a0cb949f9bf521c585c7b32feef18751ce29895b289ae404161b4f1a533ba00337e653412021047ecb8b2ef265c943abaaf509a97d3bc9dad29753c14c98cb12 -08842866f38c3300cbcc6c1e5680fb2eeb962b9e144d2fb902f994fb24cba218d4c99912f3b667a2c2e48aa0603a74b621ec767f02337d8a77d2b4d8b3b8f619efa27b8da7048e3ed1698ab52e26befb003199cc856c19e3120d43bc41cef2202fa46eabcfca9dfdb87c1094f789791feceff74ae7ca5ac17cfd8d69b327880c -63a852fb78e9b94fb6b8f060dfa15a990592fad0739a1a0099158d60ca80422f40506a0b8c96ceeb339a436f21993c9bbfc9129a5124605ab8bfebf2b892a10fd77981c8bcc347458792a44929b40a356d5e27e376300a8a7f9df50a21f26b1f0c6b8aeaa1c6c1b4b562c5b493ae591e147abe2d6baa3ac85a5e7b4c47653116 -a8b068fd82b92d791c7ce0195c060f1957df5680dcc2f1321c34fad2afa6122bc70d2235ec5dc33aee165028f70f101f1e14dcde38bc3d51477bfc4463f3ac1da889779a7cbc23ef4242d9f867f8d3fa2b720f00fbb96f89a6b27691b4e41906a31bb1d6e25e3f9988415888d39593d8d438f0b3a20c39ee969ee2107604c113 -3db76fd8bd1488552b8a96665e415f1f782df39e644aa85518d3edfb9805cf0562c4ffa18790f8ac752fc704843f49529f53f3992bbe4797d08726349d2d7a11e9e76e23196b87c05927a6227596f90d0fa43537de0cac1e47d59e2a00fbf4207a2b5181858534f0e0828125dd04958aec705cfdb3ea8b15a2185bf70277e301 -e06370d9aac77965ce07f6ecd8ef3ccb72784b7f281cfdfa6c37dc061507e1233ab25c02fd710253d1510a5f8400c41781bdcf5f28b537428c0bcb81ce64150009eac5a8a1c0360bc1c1163d4c4853634a967e96e97b72c3180780419bdb3b19153a7400c59f0f714446f2e3c9cd6c2f21b66b88b8f083ea688461476738490c -bcf5d62bb2a96085eecfcc3778b4cc9ac2ab8e18e5046f0f6cf2acf664f9870934cd87fc5fae78ade261f9280f57aca5cc1d233e9533d47bce8241f32838162877ea4bbde7e75c88adc69d22ac06095cd534efeabd794d30ae4f33d31beba82b9701e9f25dabba86b6e9fb0685de8abb9dc3833d47c9b99c44d77f63ff1d5821 -4624fe3c4946a43f42e0d4d315795de63ff2d38dc97f9cd91eb3dffd8230f1281c7370a759f80fd958730d2e975ce8f770495ef985a84260bd62f534d181bb0ff8d1e0fbdd2790ced7c31d5816444a59b3f08f1753f8f4bb957878a126a7b0093ecb9963b83001342cba8c809572cd8fab7a15bcc000fb0d5b0fd9c2ba2c5713 -ef90782f687bf706583aa7cfb7526fcbd742ec3a37a0cb158506d902dfc3632e95b43b852885c79cc826b48b0f7a4e7cb0efd80db25c4810bda86ed943ba2802d0e10a7a6bef38bdbaef3b25bf04fb4f1abb9cd32707c9167c315df3e261ee097a1a1d97c07171dd6362b45710a47b4ff17c007d12080cf456705bef3ec95d0e -778a7090f2128e86ef196b5ae01c68abe9703ce65be26776cd7a2210d8d4c91b2e779a83571f9f9a39dd0503bcb9caea3976e3e7cf904c8aad9e771e6672b72db98e85e7685c898e44ca505cb6cfedd09567bb7d851c379e298ff6564687af0e005ae64a9093b58dfed917dceb8ad2256da0e988bb57e5c8b87ef98fa8b2bc25 -955abc9c021b0dba7f31d5c1a3dcc1c8c2a4d2d0e4cad0c0a6d7329e968bab2c4ced543db3c5878612104c83acf6d659fc6d964882b484bdcc5742d1123f110d257b2a598221f0d1b7d03a12077c6b2991ae60422ff1babd5de9dcfcd0e4f62230b6f980e5a40b237d62732ef56c0f35a7e9231faf64b9f9c840383b71010501 -feec564be5269d311d8f0e4e3f67a75c668db505effd028c2e9a7bd4cc0ce11e5016047fc7ad6a0aaa32ad23474011cea9d02c2edec071244812f2031dce5f1ca77dcab40dc9182bcf99a40a523842a619e38313139e021118284f30e2c2920e760205dc47fb727be9bc689377201682cee10b27cfdcd202b659bbd6454b2929 -bbd7556ebe43829ca7ea76b60d835c7c641191693e5f77a48408cd6882818b2c71f5fab421fb29ba07dc40352a287d5db1e0e93c7bdb7c8037e8477b4de4122ef8548f27ade7fcb9ff13b1f49f1f2470a73d7d161e06663097c43fc6924e83056fb1cc244a8b7485cffb9b53da914b99015bf35cf5cd51ac7025328ef17d3c0e -9bd3fc7ab76e0c2ff4634724fcaed699cd28fcbc9b825f29d6e290549114ea125f3fcf27c8b388b207115f780f3457f032abbc29cedde2334ab38c720c616f27c82044b9281bbd8ebd4ca4f7f352bb6c05e36c4801c52d49f2c9efee9bd33c15aa00fa8bfa5f0d9314391ba6953e0d6546a3b433501a4836afd36603d6142812 -3a98b7048343c4f7ca0bc3e0c8c8c91ea2c6b8ce79831114efe08281affbe20abce74530478d407f2797e51dcb93dc51b1de0538f4ed2da62e449025d34ff51d830e4859ad4ee3f38091018e4de7cbcc4a1643ac2956205772bcebbd709c162fb3680ff1539261d439226ec1e24440bca146fed1ddb1372543fdad5ec1eca226 -0d3025df71d7103782bf2bd3b1c6e45b967a0bd20aa0b19f3df073fe47000d0967aee77b601b456801da324512dd6a42ebe1646140826cc18e85087d7477f9088041c1560ff15e9385800287a0174f9add97ce0d7b88baacd01fd91cb8454b034208d5368ddf4987587d85a96859f43d86b9e22dd5a70b4986474f295fc9080c -a3bceeeed9f257cef88cc08fda17586a3cb2f37b7eba1f706391d532d1ad120e92acff10222fb42b84cedb74d4333a2b4ecc4df6cb6d60c638c2f2adb8d5971a8704f12460d3b1bb9eaf905f346b1c934e5832bdb11c502f77df2bd67848012e2d6a7c7fec7e9a5b8a4bd79ef90f2026802366c3b179446035a67cd26302b61d -4383965e9eef49266dec822f91ed947dda89b0e146921528d8143dbadae0fd2bb3e9cdffdb2868e647be49a0ecb430a0d97e47d8c062d2ed7fb2f9210dbb122bf85baff550c9dff422df3e174cf7e19b383692a9f7939162239d466ca8111b03dc005731753eb26c9e5f4fabbaa4761734e901115222f900b1c01f1a83205c2d -2320b8fa72f79a62fc6529db21879f2b7998a0d9fdd0a6c075479e6b195e95160ceceefcd46163ced22e8a4c23c71e87dfcc7bb23dea67fbba13e10945582821e8e4d0eb7e0da3cdde2240660b6261193bd3b1fb94cb07a848a4f0b5d0e25a187b9473416e4414e7f6e9e22225652af7dd19b9b2902619bb4bd008df70efb015 -0ebcd21878b18b3c106ed46e760061a85febd75fb4cc721f4999bbf0c818593024eceb03aacfeb8813b5ad059e52a61c1633bcc486f2bd48a271cbf82a452b0cbafb458d22f193615e9a1f216b17834fc551d2ee7fe2231a6d505a913bc5521c5cfd3785efe10d48e21df95fdcef88ef07c5ba74a3fefa804962914332100b2a -f8eb7464199e70c05901d5057f11885102e0cac45e46422c1ff3dc7ed3b2021da7fd951320d01342be39f01f9f283e99908404cd4a650b4b9f537ac031f78e22c74a8b4f68cce954ab425d1ecdee276b6759ca6f06c34b16d928b1bd0e122a019c5e784e25d93562f7cb2faf06cf7f4cc5f35b6efcb13f216a536a7689ca7a04 -d783ecb154a01843436bc90f0b8bcea3d56ceafb1279a02b56adefc8976a5706288b1aba3a824782cf8cee04b70bd11af19e62b2e0d5e09f72534b3ce97886188ab98f152205012689c48e636cd6330318b5f9d8728781a5cdc7cf95eee7cd1f4451e09fde1d7e2795babdc62fa31f1fc58922338f32e0ac3dcd39765394902d -df8df5d3a543d9ee1ebf0d4d60ff9badb64d8bf36765e0ebf152667fc743481ade8c1f96b0edbb2de855115b4cbcf901d1483d4f262ba500e657ad2923a84719212d6c5f9a62a929a35fee217687d10e1eec21b3ad7ef809251dd0794796f81d33121d4cbaf782ff3e9cf9bcd2a1cfc7648889999727cec55ea23b8bc6ce6216 -e74074f44b429cab196124114d1f159ce80191f3927d22c33b58bcae7bf3a917374a5d5b9e44be2461ab81d0b7b6ac627fb60aa9da186d7e75e63ab53ba8b725507f012aff113151e31eafd195aba3e0007133e80a3167675cd1ffa5d8f07127f34affca040d90103aa06f4d66b689948d50fe46f85b5daf3799c26e31bb3912 -df874549fb9e143d74e651c26213631ba36904d925aba796f67c293dd56f0f266e1e3358077360d46c1ed0344c3155edd9655dd3ff45ff137455010851e2331459c4db5289749d62c5ba83969686d12a6a37987935e1427db1f43297c39bda228b47a81fd85c9d8e1a17cb0ddead3e9c7ead2e4d8e013c8ec7b529a999c0db05 -f06dfe19f3d47ca71557470f6d4c4476f6e66d721fc1141e7804686f48039605ed882e6b56f792afde009c9270153806aeea462bdf062b600122518276ece4175d5fe389ed0279382ed1ae083055a3fab3b85fdb847f90907db5303366ca9215d2e03e51d47e13b442f96404089b47486fc896fe42251f7f8fc64c017285c31c -4b4c5ceb8bfd7c4173c5ac135c29b5c02469903219a8572cb95d206f0f49142128407f68a3a03cb4305f11af4fa91ae12df991fd7d7593e1a68fceb71acb10307c7e69605c935edde1ae70199409dc78291cf955b0c59c32187a6f44e3f7292effad283a3d7e4c57e5b16ea8a5a46d09b536eb68e487175042bc5227ba65e528 -cc95c6d311d0f8bc36cab18d00c4bece2ea8fef5616916e679f74954b7c5a611bc94c730e18b47d038ef04451e26e8d1f4c7b55d9cab912f0caf7b31fc8c2519926340d3ac9fc8c09807063315a16cb8e73ea866ee8492648be696551258b205873e71c27fe336969b546ca9b2e3de6ef7da48f6d5695d7c1a6d71d1990d9914 -489f24e20bf05990c801543a647b059ff31d4bae20d6e7ff7b40147470c9411f0bc21d3708ab6a5ea9bb17dd1b3936f0592f4d57c9a0e784fd7e393629b038111b01022bbf3f63bde64d401903b000f2ff6e468454e3e70d3ddbd8be01c350260ffbc2d1816862a4e2876de403dad38dedc0a7d57b5feb8ba71eeaccf9679c1d -09d31edcae0f7f534b02a7cdd996ca94f7144ab81ec2d6cd9f6c10061a7a612b977bc2634047092edc82df130c8cc3c500760fb99ede592533b92807665b352251d341548cb75bddf6c59236c134da7564cfea7f7947f54d491d59975bd61d2f8e06c42701dc7e10b95d71506689597eab2b9fcd39634abf581c2c122dddf222 -f7e9b1bd64b7e4cfd69b9bad7584d634b35b26b782ed6d14b73ef756bc0ffb057dc021ed878844f4aac685ee450502f922bcf0e6f62585b209a3e0f27780391756b722c2b495a5aa165792b8c15afd229785c85909ada82d8026393e66a34b148309283cc070db10a4af75a415e3c4015784c9ef0388ab587037936928e20921 -408565a19a9643bf919508c9b5e7c6b4659c2ae8dc7959c5640077cfdf095819fc95b2ed73e7dc20b2e04b0ca5e3ed01416e4ea867a7dd9ecf9f6417bd22a91994fc71547c4d0b894b102a3d3e8dc1bdcc98e6ebe7ce87cb28f4181328b7c512b9885336da81975a8cf9cab5997cd69b1fc57b0a3ddbc00bc42948c24090f710 -a5ed845f4afff0b78ddddea33fee6d816b7095d6f34758a57561fa8c3cb02e10012676b6109317acda74579133ca9793ca1ce111abc9698be25aea6da373870a031f82cc2f769f6ffc879a2440b95f9933c262d1045959f770c8a7ee2b5c4d18e1dc134fabc253dc77cb1c704a8736007ece2b8a8253e56d29463533a3375a30 -8436599c6c6ac313e202418c1b6325d8d3e453c5be716dc296c34c3038bc890ad03962611d048f90cbc6466ab7676c114b3859414a4bf0bfc33a988b94654e1dd248da84e9340dcec6f130611fabbc00a3444a7616993dc8b0f67ebbd37512292e00a3381568a54c35ef5b5e62138866802317c7493d466a81ac7f800f78d91f -6509b46d88a62722cf8882d78fa22b1eb7cdfc9764d60cb5a3a70745399a282a45aea0d226c891c8981a4af47d23329810f55e2e52ba3ddde41b9bf17714ee11e5a6ef4c5140187e03ad804447899367d12afd8bbe96c887a46d79fb9f89c52654658ad6d7106b064234cca0d215772456b2a5426b94400ec9f975675f01a91a -8fa991114d1c8c68a4d9e5cf28f00f067447759d73dee8d33004b17e8e072012151ec79a5518dac558ff8ac94ed0b5bab7ea3927368fb3a127c1326d85af95083c6cc665cbc150625600252d40f5b4ececf6110a88dd93ffae060163d6cc2412c0a974fadb5847a6aebdc0e3256b3e601ad233931d39105f79d92918ceee8521 -03a97f8fa682ac14870d28a12f3e1a53d690800f1fc9fdc9dc154ec61a0fd421269bf23aa1c531d9996ee3b7d28f76e16bd93c1dfecdd56efa726274d2f8271079576832fb1dcb32d3d2e6b90c202a21b564abf95f097563dea8a77462f27b0a725b39fe1e7c711ed81466398902f86ba73f240348ea33b8a8ef5b7ea83af01c -da20da1de83c0f3a21a53cd8a58d9be2944fed006c8ae3aaf9ba8cb0438863186216103a01de1708f3e4e32e89c0c12dd0c4ab40fd1c4bcfcca96e0cc3d7110b17471d5387b72ddf64f7e1a0d542b3a34bc2e4f5c3e2efbc684dca79f295611535ba69e5138a073ff7faf7bb16b53baa7992c504c1f6b0bac6b710bc10b9802f -a7beef2264685378eac6f165ece2b33ef97991188b1eb12189b32a91a77df90a3c50f650aa1e2e3b638c3af7ab79d3c36236fce9659f8eb1158ca762d64b4010710903d6685c67c2e833bed7bcdc85fdc611f5cfbd1775ec9a8793b46bafec095c1c40eb5282f5fc507f6dfea660b9729792dd071e9034106c1c10d684bcfd02 -8c2527ce1388c8d3c1293aa621f4f5a533b6ef069b02f5e902816294883ffc07f8d933bc07f0cbb18e86e8e77bc0a3c84bbdb08b30c2888a76c0c230d119f7057fcdb7f9445381b48a6845af2f776addfed544434a16741e804b42b478e34614e869bbb74342c8dd2f07ad29b0151db10a44639fe57244b5bac5978c2122d112 -deecdff69853c31e55b11142ebd975af74792e074df44fb7b1fe043d3a186b1bf501d5c9be77ed50ee188c8ead4ebc49fa82565bf4bf6dbeee9612d84d6aec2a67a05177f4666ce4d2a7d15ba6d22c90b94e566d5bb7eb8381a3bb85565af220d270a7f864301e14aec7c3e7c9bb925db855c8f9b570afca88c5a8d6db72fd29 -402ea05480ff06c1c75ccd4aee9d894e8a4098bbcbc6191991c86939e8a97e196135c20d551d2c2a5fd2c85dab81181180ed9198e703333cbf6a020cc555580df47a45f9357d5729323cfc140f49ecc2ad5db562d332fee0ab6ed439185eb31f36d23970161b982441e76c685b9db1f147527f7670cf5c5f09a962e25bccc40b -112b6ca3c572e8d792f746505a37cc58d26a43b1cc3c5ff78e86d425e0c74e0adaa7ac0d953a79bd8dbcd0d8d1e613c9d701c7affc419fb4e93318835968382a1b2b809689778a5d4afa0eaf148ad836b68866ba39fae18781e0e9aabc0b34232dad3f082e23312b574a5fe85763156d6562bf84c74685d59707756b658fa61a -3e49c4b22108b9ad3d55923cc94148bb8d19f7b72a7b9fd3c6f731509e0ab92001483d2c195e1584dc61193b1c668cce5881d388c6b6e0d41690e1dbcd43b92b1748d4f7b087b600e4e8f0b7d3b126801904fc95cd61bf0f256b2cb70bfbae165af1145282202438a45d1657c448cfe29267b799d8a720cddb9985cb22dba814 -de74854a5fc56aa21ca801dc7f60cdf5506bc172b77263865a865aeb1a81dc0caa2e6e51dbdf056eb51407196e77dc0461ccd50a7f0b5c5d6865741aebcc611bc4ace47a98c386a68cb32151abfe6c4b2aa0b2bc0e90638c24f5d4e9b781f81f05a5b5670037c16928ac3ebf94f0d9b96e83ce598fdc39af042694a3d8594c05 -89ce480b559fd386afa518849f7cbfaa8ac1184a813b6e932270c90732d27910bf321f8f2e5fab3b23d36a4f8891eda86e75fa48f19bfc7888bcfbec376c6d27f13fd654340de3e980dd3466f61c410989d01de03eac356968a75682f8ff5213f3d5a99bf41e25195e92eaa540d88e0ffd0d541bf6c98aca4463e4ebb25eb70c -740967ca650a07d4ad992a1144e35431bc11095592630386ea729dc2da55a306495deca7e2ef0754635936b2b34062f30768c651e40b18bac756826ed4d64413481fc1683d992ba4f23e954bfe359271c4b0e91187c6732821bfee197b6e6a1a523f50f2cf394636b2d1e0df78688ec16ce3008950751ccc6b6978de331ec02f -f098c19367fa934f0554a5daeecfc498c7985373bceedabad3a75c928decc7203cc5840c5793467e6be67dea4165a7261e46e6c788f37855f78dded6ec0a0e1eb7e494e8ef58ccc6e46ac1fbbca3d73f332b627e855f562a2b8a4e0d6a486b1e489815275bb996232f8a4b6d2579125213b261a9145ae6512d7501b739edfd21 -98d7e22ff98c3a8f9aab90b805a45086b2db234e218945053a2b03850263a30211f6e68f8c9361134f858f7df7fc51cc9be10eed08fddd45e5170cc02711f8050afd92d6cd19b5803c4facf65c7735cd9895c604a312a556734c843b312cc8064321c6f0de8c04266de5e61cc42524ddd2e1992457b5265f25a65dfe443d960a -60aa5fd17cb727c158a231aece3fe43e6f9e96101a42600209fe9b6efb67161a39733b3138ff5a13b249f61b4cb982a2ae5f2b386990d2c47df9a6f23e1f3707e8496c2031322a5e27160c5f246070a3fdd20f382f37b3d9915759c21f0be3286849e22ddce975de68dd93b0ec9ba039327211c0667e730d2f921f0013e36c2f -d17cb5c2e3f877bcf7edb798871eab92e21b50c8023f3e5b1920a64350994e148e7cc775a7c0e90941d8070a931394df1b6fda1b5e9a6460529f535a49a6120df6bf672925369b386a2e43e1494a269e2d7f4b5d22d25afcfaec1602ccf9eb0fa3452ca9b0f05d1ed3617c395c8399c4a59870e5f83c9ff453f6ba965daa1b01 -517cde298a5cd0909a758ddcfe305b741847499a349ab1897f7ac88b03e4d617e24968edb344d655f99a3d16216a4cb4e64d52152ea7463e6168a6ca8f460d302d7d919d52bfdedaee48651a2b4b99990b914d997d263756dbcda7c115b01417a6fc3b09085ea853adfd84b98426f8bb287be75a0198e0a945ae89e3c0b71d18 -9d6dd28ca3162ab56b18fe1ae8a3548aaaf087e742d04fc35983e7499faba22d703115af32f0e7384469df74f71ecf97a45ab799608526653e6e4f678e005a00a97306f23da9104a0a3ad566f19194c00738171c87e42b4829da48606214c11fb5ce1b8f963533828f8fc1cbb9858e4c75f029b52adc18a8be61b3c6242a0905 -8a7185897b881490b6ef1dbf592cf909b4716662bf4a9ed8fe80b4501dfdca18c287b151a8bed4450615760089eabfeb4cb472e1f0899cb679e38ae5c05f4a1d9613efb29545f493beee4dab4ae8d3e0d1c2726f6a9362c7744fda647a02211dbac79858973910ba98197cc37bde74954af3d518a75b44cbd3b8f3224938060e -93a6d1298ce00545a50c463cff38958e42f65de2983c0bc574da6e8657f6ce203de47d1ccba4c7ccc2ff02f8fc0d81f3c1af1c650b4503d9130b67f18ee3af1197afd3e8b18b55305829f23f8756449826908c06dc610d921800ae7cb5ce760c62dd106c6b08ccd77b16c939ccbfeb6b3865d66513cea662030281f084da0616 -99c7c2e0cf4a75c09bf4ce0d08e2518f2778ae003b0d098b3a02bf19a9935d108afb325fc19acbd4c05ea570de91800e02b9126ac0da01015db11f1ca7192809a27a8eedd9417f56d5edfa2698bb1d04b3379409d1c09d08d649d1957ebcb4067eb7043587df230d4189d90e921522197f47db5eee04efaa93dec438c3ecfc1d -84fbf9bf877e1a43b092855819341d8039f8cb92a6d30b7f5b5f63ffaf54d0048fcfe399426a75585666a71c47464ffea8c077f7db381e600139d33b72430517654172febd1588e06f2a83b98bb39b3fedcaa0d4d3d1cde534622a06e8f2bf12a2cd247292ede1bbbbf0fa971a378c81880a024cd0fb4966994a3bd8008a6404 -2aea696c1f516e59d53331a8a91c8359ea4d3d48c520958cf163b2b3a9e918094e796596bf40f0e6ce55db87c0fd481040ed504b1283cd715ba019ac4dcaee1f13fbb45736f07e123d9fe21d383778df93c25d6d596034f08ff179786211eb0e343634b5f0e8357f3e97c67ed8e3d159650610ed09e21f59511ce412acb38d00 -6c767050779c736164807bb61bc968610cc95f760bf8634a82b9f7cbc72abc1aa0cf9d374b7e1abe2597c76e85dbed9d40018da8338a3e736fbfbdc5bc102f028204044861e53455aa2378f935e9046286b69668ac8fc2341813be045656441c8797bbbdf1355d1960aaec2313bebdf48a899bb6e9d4d6c9b1de35836fc08b29 -b0f10c91b469b2b3d930d70e80659c50db60654b2efa8b40f82fe865014cee24e9ad2407f029b37e13df99807944a9a8e30166149bf76f2b438facb374c40520d33eea5b745bbb7042680222cdafd5292da866f69e9e65e6b166f27573cdd505c425ecc6fad6f0341090f61e5d3019d55144fc0d63b5c40e46a6eb601f82882f -99d12ed5d03ddaf33842a76b242b2169c35740ecd166376d0669f6db6f3f8c1809e823c20c7fea67a4138d1d37f06f2847d80456ff72b68d9918a4eaf710630becdd1613d481225413fe6cd9cdc54bb44ab5f39132d1917adac7f7c3a3ea152bb4811bb7bd39634c9a12fe387953bb2e7deddbc2a84c07a3b3634497183a882c -5f275b018dbe311e286c106ff4c80a05eb66b659aa4f1841cde626310ab10e16b29e1d07478a8e07a6d0b097f7e666f6f82d7edf321a0ca251e79f7f5797821d3e87b5b81432d486179f40e909a3dd3219ac758fb4c3556db2379a6bf0fddf1a1b78f08739f0911bbc76bb5ff8aa4344b5c56f20b3b0320cc182469c300fcb25 -03d9fc74090fd96d3a06cce48d3f59e10ef31965b7ae5ff8f3dbd6019d3df5102c510a5c63e7b00c4f1e9cbdc510aababac67521d901848ccc2010989b427216376072adaf5a7c6a5f1c3d6c6db8950c7709c124a1255fa638dd78f92ec13e03c941f837346e66a62bb5f7ac59aa15622b6f76232b21f534baf613ae71d08d2f -44036c08a0ff3bc5fcce876c7b91970b9a3f008e61a6b9eabde591eec2676f2665aa7da641a4589080689b31bf1c2ed30ef675a41c3642dade2eab123a942d29f78b4ecf743e2b96c165e212c2fc7754cbf529c02d6630d3f178f936744c3f2af2745917f056c641cf15462f205974a86e03dec8068a64481ebfa67840cc5904 -f7f2fce7d2fb6a926d01a50b6cb16b02c4d0ce65c937b9e88af0f54f3554e5152a575c927b7f311b5fd8ef3688da59242a1ca5a8a195d0302b76dceede5dc12935562bc939699e4413af2f5e3e2251d9563f0a14ab7c64dc0d2f00f9f7f156258ddfa4ef38744a40dc6281b11e4ba0db875ffeb398f534a6119f2e0215e93016 -3085c2eebfa44ef1a38b62aca36492bef23c20136c3a68f7863c11c8cfbacf126c6d0bbd7750ca94b0d6f764b8f56e237c56831bb6e8b7156aecd012c00f92041425bfe153b5112821f0f35266f15f4c0bd815be3e2c1af14712f5ad9c52bb1bc1174c3f5c481506a980a01e0f94e60bacf32e213bc13969db014daa5d637613 -a742d33d737a65330198a1313318fc696b891b89d2032b7738ddd4e7f428531d57f32c28a32b1305dac75771440a22702b20e077cf1ed858ee0a79f2eb59452060e98593cf5a5a84cf903fc28e157e8be3ba24b9c9a9f603a6328b852bef552bbddff2dbe4fd2a7f773e44d68f1933739d580c37fa9b467ab5043007ead5ee26 -1ce2ae38d16b49e6f85aa4a20c6152268f3a0d6f560df9186feb7ccdbee85030392ef74118b082450963dd2fa965f744148cbb46d6b84c37891d1a5568fdab050852d8d8d6e64b0339c0ee8860360c61b470a39b65598f67e29afb23cafe1e08e67bc4a3ec6ad9cea53f5ebf754fbfc5c9bf7b584052396c6ba713de9d06270b -786d65370de180f45939095c7cf845024b0211cafedfee943ca733e1410780058b300c1651cf58ac0f0da4c79057ceae1022a54bdfa4ca7439b58dc4bd3d9d2a8199034b88692f64d8445118758dc2bae9d762b8ea04cb37672090a87567ce15e76d58435c21bd95f8fe6d82ee137cb473964001f380926239f8b604d78ce726 -2bd7d1f8afda89e452ec13642f55396e4f77eea3e950e48b61dc9c21c268fa0439f242a5cc02d460f7a4287e2b5951bcbec9b63f6129ff71424ce3da3adb5017ae210b8a8e7657722e9efc2764e169612e3dd73fe9af558058f96a3e3e9ad4017534ccdb07f92b88499110eaeb1c17e1bd78012364ee8e4c1d2b98c10c7f6c15 -60eb573b4f84259e8f4d995e29dacebc25ca78ecd5e2656892578a05f9dd23172cbfe5bfc85fc26086347c1fcd6e0d11ce773752eb0ce478d711dc91912bb90cf9fc19d4109fd8ad433fd0bb936353d230f8d7f2453e18c908db674b41335909705018379d00326eb00cb984007bc1752a0bc96f3f2a19f6f2f61c491eda1407 -0b9694d26f39d6697db8f938427100d10f26f9cf9c3faf0c1fe85d659b8ea1121b0cdbe154842f07ba397571ed5dc82f7c09cdfc77cec0c9746cc4f0e385aa1e8ba4d7e4c112a206e92ce1ef91c41279e3f984df65326280222e7fa40707d228d41744597bfc5ae735885db693c73f4d132d78132a63722fb2e038a3b8376e2c -401d0bac0bb41ff62fffab0e615f4bf147248f875c54253a7e7c3ac520826a126780239d0e0f18de34ab5ca3a1dfa7adc36bc7446a599f3dee50f812ac74be138d0c73e8150e18cc966da09b4bbc98927efaeea2174672a708e6710efd7284191b880b1a5850d24893292c8b48b64772e0e452a5aa03f6e83e406e31e20c1a1f -7ca28c549db173e8a078dd3f39cf340e199a067203d90d88adc47ebfc343bf0c3fb4ebb3a991175d47c100e4cbfd1f2d1ed570e454b8a7522c67c37aefb46e023bb7e486022540652cbc9485c7b6d7948c7aa81b455e416207f3e93b7c062c1cec1c7e290f21d29f81e46be648775f0e7b119edcfc5aafc16bbf7a2a6da32326 -1291bb2728ba14b0faa7c73a32cad89eac274e72cc2ddb34a0c65ccd989e2c2ccdb2e29e3ed8dbfca336e130846dc0f2ec35b62fafb28eee5bf44a4a7af9c628c4908e592d4b242488821eee2aa842fb35c08e622f1aed4b2e8bb509e701330c75b0ee33c9d494d6bbbb13a2d90a72a15babed6f868fe483cf9a6f46f86b750f -8ff1dde26ff699fb2c346983d5d6c6dbcea2dd606d0f19a9d28b69e0c444701553216c68d0b13073f9e4db36b939b456168e0f09393797a8b476683bd79e630fcd88175bddb25ca8de95e293c23c230730cf8df5ae09bb9d425d99c85fd60111ffd684f72b2853fd50cbbebb3f44001f79879137e8032c55cf9b058d01cb540c -901734e17987061efd48908b8f7b10597d2dcc0cb579b33863f19af1ca913315c1dc648afca0b97b8ba7bddff267b61c776e9798c144c88dd796d9f7ccb18d21eed226c3fdc8b61615360d9fe2096b718b1f9d11c6cdb2aa3d78147454e284082d87b21a2fba1d6c42bfb2391221aca99ab029ced59b88eca5afa54ff9223d05 -595c4ddff78685831361710151337ec019026a77f8b1e981d3cd46da8d5d520c31036a49a4b8ab1f89634a3f6954079bc3f427ddb468cce689628993d968380bd79262cc2086f3b23df526774fccad272416419929ade917edee308cb5cc99283ec5a35f633fbf4f9998c6bcba7d22abdac2917625a066e4282286c12d68f92c -6ad0b81473d5233ad2391c932838220dc57322cd377650005339b6d3178a642c5e494dd2e364e48f7d89929e4a9202fe92cedd831ae838a7426793d8aec89a049ca5a59960c9f40c8b017dac830adec414d47b06b35557b62a3801ba20a2c42a44acbddb5368532de1d35a25bdb1c9a5c31f8a4b74394f72149956d70716372b -997fce538f65554a03f9d5e3c76a6ddf1311bdcf06a1f5a14d4427fa94865423fbd177afedf61c8ce6ce74297e443bbe4265bef06291b01e9c8e7ed5d5bce207ad95b01f9107f1bb3e8204b65febccfc783d965f21af66720e5d2a5ad86957176cf6c8714d6d2576e77154ca337408c1f4625b87fa0b6b39fb962b0c5d57c915 -26c0a2a0f31a35a3477d61ee01125c2d29f2dfa064b45ba6f8a5b9f961675e1baf01a192c24fdfe3fdbcf6c2b11c9b62b6f3eb5fcf5a59ad848e1da6d7ad4522ca2fc85302cf19a020660435fe4234c06a456ec728a83694833f2ee30b3c400b64179ca0cf199be09d4592454fb5839cca78e718c9fe5ed666de401542d6940c -b65605f6dcb7583851c62782b6d1aa2282882fad64d930dc12fd0863389538136d6602840ffb9d25976e2d53a1abba5e284a3d4272e7547eee6079b5f3d52d0e1ec949be966b9a117612bfbf77b81410e2bbcb58c0eb3d6acea996b3b508a302e594dac48717896b5aa27cc7417dfca89605258134879dfcbae9b6ed7511ef11 -516936e089703379439aa35c16f7d15735a0ca42eff29fd7c756e26b6436f90ef30a80838ab5f4ca46f10072a89b6a88a0d65299050d1c3b6222e59a79007c1cb5746d361eb84dab8e291a1a627c6ee801dbe2b599453b3253ab9a0c0bf2be245d146b71eb9da35404e960a797d116b7bb9ff4baedfe75050f4d447ccd842d15 -6104d6df052e64e5d1c805880664241a42d73bbb2b346ede60928d2457dc53046cf37cd08cf9d19597ed8a8c61df2c97c5043648c337b9ff7976db7fc5ead81dbf36586c0f152ea035806a9b817b602f99eedb10e5ff1d01159a1fd4231aca0de3e4dd9b6730d9e7723766de21afd1b4a7cd2f176fe30334e737bf9e20158b05 -1f4af4cbae7132d4369308ac7bd9e3bb40a8681406a6096e11a1d62ae1c9da1e6292b1d4951e633b11be976dc6fc58610d52d06bea013b4fa59e73c13fa03f164bf8f46f396af24c2710819972259bcb9128600cb4228b6df8864db9da2ff910d57260d595fc0962119f9a3779b53f4ce30f8240cdebea8f44a2e8915e33e211 -9573614debec6e08c61c6c4da8d1f97d5a805be58fa5b0d327527dbe519b741d088ff7ef0b3842f3780ed4f20963f4160de5e9a6b0dc21b91a0c311551802427412c744770652efd113f708b4699d4f2f8d987ed5c74f2836fc1ad71ae20ad0ff54ff1194d5c2b1cca702e5f74986af3e6ad18e83c9917f43340e74c8a1b3d2d -2e16f4f5ade8b3dadaefaca53a7ac1f5c0fd8346de00c33c92844d120d70360742ec1c59b6719c6a9df86dba119df5f4eee715fe0f04a11def98f682aa55b312d775cedc4efdfe23d5b6832513fb82712e52d4f363a4103b1eae5b50b6e1fd0fb09d911e391edb1b5a59c720d5222f623635c6d931041166c7484bd22043ca1d -41f6e5ff6bb561b846bc082b33643072734a7da5830e48d215b5336981652805c386fc66309e2dfdc77b28ab49411a07ec4ed4ca2f35850f8314131c0534912bbb75696f9dc563ebbef59ee3efb6442e6423f7bbec30df40241e0906b2650824323103a2c0a91e55a3c535e1416da7d96420e6802a57ec8f0205c58367429728 -3a0f6930ca2fff244240169b2a84a639fe20ee2ec1c5c9d88c34cab5ed01cf0b4d22f0ef519c8ecc4ccaa87fe33fd990aa144def4ba91f9ef9002d46dee4320572a77783704b9f67ab59b5406065437a8440024fef03b4836713b2fd6d019c237fbfb8e7aec1218d6add0498b740bb61f4a50627738b23bbecd7be67e26d440a -010898ba7be70ebbfa0705506600be5881026559dfc3727caf56613af7c0781bb55c2f8ecdf9dd51c8b5da2a90513cc2a822390baadcc7d7f634a226be274b0d67a2da648eeb8f3c8f9b91cea9ba42b285aa1cb8390e70a6ff5f6de488c2e12e0e201c3b6fb2d3620af39a986067a16cdfbe434845e99fa6c33e7b46f645550e -f9023f83ae80e73c2230aece8af311a4b773e4311da6ff370e33b493efc133194d21e659eacfbbec03ae71fb975f761d57c384ff6a8ea1396cf6bebf7baeb21f409702fa5abbe5265570a4bcbdd7474788ffbe6137a756889ed631394964220d36ef7aedaaa7eb5fe3c75f37dd8c5eae1cacccbfdfd375a9fa69b22164858c0f -aa9dee0ca324613910d4b6349482570e3e7f42e029e3ac87d6cb3ab479f7110caf828e5eb94403123f555bf6e64b0d554a404e9a70dfe8c84eb631005112a80311f48e82ff46634051fef5219f432eeeab31375e84baa6b0c1f78fa60e5a262778fd2d5932c07f7c00fdf9e373e0f38d925e9047b5bed03b9c0624026c50562d -0ff49c3d3efd86c64dc6a86a0b29447d06aa9587e552fbd9c271c0d3d833cd2b70594dc063fa59123d2f6de70fe4e1c17eead558da8490461f6ae5a269174f03af2583e686e33686398037ec4a55f2c405f4c397abecb9a0a58820f2c40643172271119c796354d32b5edcb03abff53907ad618662b162a21e3be3e9c5bb0e16 -d174f3700a38ceb6a6cab52df564728dbf92d575f1aedb7f3c5a1fbbbd590729671d0dd79ed3b38c742593570bc0795236145cde45f2ed4d1650d2fa66fb2a010fb2f353bbb51390787d6bf5c21e8d2c0bb5f1676a2a4eb4ce6908e3fec22b0d633a342c0eaaae0cecaa0e3fb3162a418f33027a247a5ef28eb407a7e1859a25 -bae69d0dde40dc1ed1ba6e2aebc7e9fd1b17de363d03c7c26a97106f6c553a0151c08675f70c398c95f3bdfcc17892ce027cad9e5ffd84eaec5cd19c9a687f0559537771e5bc0218ba9f78ad020ab4cdf3a965360f19f283c514a4b3de479022b87232f8dcb90d0a853c2d6831bc1c05f759072d95044dcd67a0a86a7adb3318 -cb05a1f1bc3f70c5999bf151be9a53c014bab2d1a96540c025d271303902722063f568f0d22d63dada37fc450c6df13495986e56e4e9915858bb8ee742c95d19242c7e06cbc62e06d4741eb841eec151beeca7f4cd45379aac79177dff2a84142cdbbb348d2fd77e0f85a438730c16b71b1a0ab5b0396b2719643b237319da0c -b266d355d6541fc1f2da72cad796db865ad0c888ada54feddf11c8e9c4a57e2327d912c0da651be109706f055e08971d69e238853a19f8c09f4a50b54b7e012ab198a550594f8aeb8a308dd0836de66e1add8eca4f06fd3aefe95f75440b562ee340095bce4784b61c4f9520aa3d8e6df062ed93cc6748ddb511a5da9683512c -8de218da02289a754561f497a0a609b956aa68d026e7612035b348e2ca2bcb1b0e0a0fa96389f375d92ccc54604ff1fc2b6b5591d81ba1ae2cc6507f53d23b26acd3101aedaddb4a304abfd7763c306e7b6dc1daab28147000c5cd2ea280360ac6c1d1c894a055a21f501a9d6b35bdc0c964939ea941e4913984fdaa711ad30c -764bf22b2bfce57f417cc23112a6f44b9c8861f1bd2788188598f4a9167d442fa0e3cda1057fd534a53c68ba82a0d86b666e49f7bb4170963c743ce4b1a5c42b3de2972b79f6625d9ed0a16b9382e3979c56ef17f4302c54315f0de2e2935b2bd85fd839f45e7463359b7275feb5db8efccc8a9a4a621257ab0a3dcd45b21706 -2e6ac4d6b93390446f76428a11d15b6d3ba84d82083bb50fde896b45187093174e35a6d4f5e00058c455b0f23ec393ae20a875dcdf880af76ec2c638fb2dcc1ac9f8f9ae36670e1453143b7949d986da9c1b39845acdb1b3f6d850fc970a360911260b868c1a4c0869e1d00041cc8cc63eba5359957256cc9ec037802215b51b -a2f881014c10b77db73119c524665a56701dffe9f83409e2c79c846d8f81562c190a93cbea557b31d5b95a3167586b8f1e1ef206f1d80bedbed1db13afd86c0025446756cff865fab2aa97526f6d24b10236afa5165fc2a856204d2c6977fa03973a8a3eff00c99b2e9a83c2b08fd243847dca925b241e44f771753ced386224 -04f344f8c58336da7f2f3af9b1a168103fafc4435c45442ecccdc46cb73dca071ad2f2bb55859412906fc6d1947966f0919b52eb77dd9d93c2c08016aa353919fa1e9ef13d0a618c62211ff9629daf9ee440ffc6493b583a11d3497fb1b9f7148a123482beb67ada889445141ab2c62ee56bcd6eba8f6b4fae052912e57cf225 -41715ea1b79f2dbe240217ca5152141ba5b81a1947fe6a670746fbf250ebcc1a9ec1e1ba9ef3fe1b3ce0e4de5c86b9514b14d47525bed7b6ea2122474eab5f16d7754957e67393539fd2082a8fc79ebb13c44c9ff8d91cf84f72bfd55efa961847ce677455830b8fd578e04ad552e1ce0661e892e489861955249b0d8a3a141c -069b7eca1a2fe2eb82cbe61535892b50936c51093e5acdbdeb6170dbf0627723fa97b8c59ebf68b7f36c773b5b026b4c5a4c676a5a3b2ff71946ced71c2311083f6655052d9433ce9fa88cbbf8adfdd6f079eac186e50d0b9be284383b28ed2a5fdbd57a3252076531c992f5fa4f838cd9245859a31b43ce38f591d9558f461f -6d232405ff4fba23c56019cf9faa5b5fd4445678a71c96c5d30c36be94105f0b04e07808003fa0a0852b6a70321c87d87b6e56e9a7a0e433d046f030096b840c0a813e33e3a41d7f24a25deb435ad77d492de9a5dab7570ea39218b931a3f30d5bcd18c937159d7543951df6a9285003e6da241d746a4a928402d695b95f0907 -1204c35541dd02589053fc6c907a7fb42e6a6715b583a2cb8f980c477c700d1586a94f383a2b33729d8853bf9bfa42ded69e56404cbb62a6af6916dc14d6c90e04b994269f183c70c5127e0c7be89f20af7a66916838f9f9f9a84cb81544d51f6cb2c14f066f5517e27e090bff6a3b981dc6530a3f7db3b080239beb06390708 -bbb4350cfb10be352bf397e58093aeb9016a5f72500d66356dcc20a16f9c3b1ecb92b1ce091d8566b2e8416d23ff90c5ac4814fad43c571e8cd9a0a678afae210f73e1afe9edeaad9f7b714acd440eb41a7b0d87517a628a1aa7e2587de92a1803223a58cefd1c29edabcadb6ccc8c8fd47d6732b56bfc24060ef80cfa99f91d -e1c3c8f483357435710455176b6d2c583116956b5a4abcd345972f8f58c5cd2074f9c9babd79c6510c06007003b59f54ff2a97348c6eea7b3a0918731f6ea401878dae5e31587eb8aafb5a37e2df81f68195d567056ae653f50dd9e16204b006c3030401bbd1cd1f31f62a7138cfcd5b2feccfd25c625239f4a822aa039b830e -ef7e7c015424e6900a426f28db78d5829d718d2107ba8b4847ce1157118c5620d225869ac45d96eddc97ed28820b176776c30d0308b5b04f8ce41e499f5a5018c0a59b014879d3cbf6f9043e792fd634a331f127d8f41e508aeda742428f5e21704d47c00c810ef85a23d6fa3c9fab6255c34f9537c48f58c2c28962bbacdf28 -3bd7e39f409481d6ca4a3346473e97642d3bfefc1abe61348a725490a9b2fb2d4a620378df4b4ebb5c3a829298d1cb5da8a6bb24b9c5ce07199bd5a323b8fc1bd233566e84e832044bf844ce811bcb7f3f4e6115f5c9da5d5e2b1fce03f4c81fd6368eee989c7c237c9b5b278a64262cc8c131f03e2fce83d497b0e66ae6662d -cedb23c1f9a6355a902820faa3604608657af81c3f85967533832a181fad0904ffad0d0efed22793b61aec8e1885a04aa856917dcff9ccf7da3a70f5df054008985c74d05b0bdaa872b99b429e90f00c5e9985c4871f6235b8265581baf5e103d788d7191bb350fe5f11734a597d1626da240276cf5798ff117b88bc33d6c92d -83396d40a22fecf97438b555634371849b8af8c0d866cacd1fc3ea41b4825613d0a58e0aa8e186dd0004e8319727aa7b813280a8a062df7d7ab2e4fccd958c044c50ab61fa396144dfbfed298b7934ab562570f181b1434308294008cd542d22945d2de617c505dcddaaf993d5e09fc73b0f65aea990efe320dd3dd27e975712 -dc291b597f85ddc6134876e7774f445fc4cd2abae1d43c40b4c427c854ba6007d8cbd02bb26a4d2a8ae32c76d62836f9863ba945457aea801636b915c9f4391da5ab24078ec3d787108e0351b0df37fd1dd45878733cb2125dcdfd74ce19d427a1801cceb7d5f35c856a1efda705af40201aa766fe67cc24bdbb34f003bfe528 -52c1207e0f2cc6db7246f322cec626e124f5b7f4268dd711e518184e9dc3402f5d97124dcec23dc8adb73554fc89fd27e6bf4c577e4cd083c12229cebe986a08eaa1de8d4b161604625a06027601d7cec8ca1ca1eb72611f3d2a405818266f2426bf075cc5fd6eef906629222a62502b3f0b4c1309d7b1216ac723371ac52e19 -209bd8cd211f17d48153f067a8c324feae3ee47b9f761232f9ebbd18db74aa14a05975bdbb1a98dfc2f4b0c2f5b6c11704a80c61c152999ce7d0297c3087f8191783f25b17b752bf352884abd8914bfebe25bf45c0a66cdcf326752b00eb881ca12766e1966dfa65f9f0dbd616086675daf843b3dbf8e21c0c8bbde89a2ca720 -21749dd35099b4910fbea6b17abf873bbe42d27c42d16a142525629135973e20c9382ac93530f00b03fc1c1270fca6a04c4427ddb5a89c8e1dec1925e5e9cd200efdb57c0e0f76741d9b26327395bea0772d0f530d590ab3e991976b7e719f15f075d42da71ccddbca359c0a08aa092ff784688630e01f13733282be29da2e2d -fc09b03a33c89e8f23dc29a49fa7f3d6c020e6bdb1a60ae0ecd6a71a88b9182967c67c53d438c835e72739714816e2f82c5f6e1597640fbe2652ffcce2000b2805a0496f827ddfaa7cdcaa2d32a9fe26354d814f38a12c2fbeab06aed6a78f258dce98483e56ee259baadcfe5b8de788a96edba4a7118828c4747e1b59a5d011 -f866c67088e967f84c698c7c0cb608c797df07d02a113ef00808f5f30fafa422f04a23458784f7b6918c057045dccccd65a95c676fa03977e8865ffa772a0f1a0200d8311b73b300935c674aba39fce85bc257580dd4258b765f1fdb662b1e2924f109e99be85b78ebba3302f4b97704adcd1957a874cc3643e5129b98283c2e -74c19626f694e2a8a0c7030c909fad19011881b064aace3644117e15f4ac8b01e4a42aaa071fc2d8ea44a2180a743a4161f335dc89244f3e27b53de2233e922e13e1890a7947e3342e8245529a9bbc7d1610381aca265d10c1ad225af2c0a305f459d5fae2cd2a6800052921d5f1563d79ca81b248a5f442b518b6f5b9de8516 -205e0fc540c7a900258357d3c5ab0c7a9ebd5fe81d7b5f248474b4904bf51d2e1f289543babb9c2bf042060da1a6458e3f626bf7bdd3cf3d410f293424891e236086721604940eb4a979db4f38cab4999876cea1d9d90d9f8d8891e9f8291f2c29e98badec59dc8068c26a6fa101ae46ab5efab1f9feb5558dba4890b657fc01 -6498b56d06f1b8808d8e299c0f1bb87a2fc2cf5d01d6dc8e35416e20ea93a52e48b9cd327eb361453259144897ef1b12b54a0b2af7e379f3c9aea48977f63e0cf0e2924c147313ceb51fbff375aeb77724b3f5450296f9ef61672e2bd3e41126879d2fa85c5f84e05f80d7ff5927e64d34913221587c27d058560d928198f81e -e1c2f3778ad4b3cecc485c752ed140555cd62185e5a4c09ac99aade0998b86230f901c4d4421267452c4728a07c616d4814c51e3aa5c87fcfbbf8c35d5a6f2018ac67e6428ca8898779a604de25441266bd0b15ad660cf5fcd8b7f6809491218e50027473ef1c6939b7332c4a19454c372b3af9cae6b1f3990037b24ad4c021c -381786ebf3d4eba625e376f22722e963aec0f50f592ea301371ef1d84b0a630aeee9a926c2efc576a87b14efd0b22279533468bce0701bd9e7c267374d155b30c0a1cb1949303c1f2396e33b0550ce55c00994402b69de92d81200f6b5a86622d7b6c43dacabab1a5bba32ba831fec64fb25ef0e3b7aa6d0d50abbe4c7d72300 -f1d22d1cace3bfcfe2a85700f40b45a8a896cd8d71c1f7276cdae398d17a751097d8bd8cd2cd83d42e160ffc20f938354285ec6fc371e6b2bb6fcd05d6e28e0c3489039e77970f0c1acbddb496de78c040daff6f28e92b0ee6bce50c4544ea2ba42599d8e314432aa7eb6f9d8fa4b93716c7dd9d7222b5a13e7accb4cd598403 -5e9ec986b6dfe7b5e459a3a690a438d90a50da4aa6baa5ce184c6b5ddc0ec91cdcc9c33adbe37ec55fe9b20bcf7a99a6e26a157f9ee54ca90f49dec483bc902b2c6ece74177a102fb2985c0802703edc247c400c73233d7200c6b4f5b4189929c7176fa257ab9aca141cd8b1f7f1d1635642abb96d329a9f5678d0517560f51d -9d8fe4261bad966860ffe02840e58f0705d8ab6f82d15e5d756970051f2a821a83e6886d78558b2cfc1780ba030d29e73c8767819942f41065594699736c1512db295a6ca7ac7e82cd4458308a4a9327ef8ca79534aa58a23f3542ffa875b62170042c87831518206fe3ae3a1f072cb48fa99f4e247b2a31afd3e94f917c3802 -9634858121bee64495f2fdf2035b543b923d9e5b1dbc22011d8eee3af0a45f2c885701afd4cdc0272df27b3a47468fe9aa6291e270d197419ca1c1ad5a53be0292a2889c65ed1f896d1134ec31ace8640e29cfd5ad0fb2d31dc3090d79c57d0bf3969641d1aa4d0b79710a3bd62febb47d2fe590a37c0e8ad3d1ad6c51f3102b -c8fd634efa55feb3ed5ec512a7bb0916d32436e4b143242f9b2193dc25e1f60f35805518553bfbd35c6bc0a2c7e9bea974db5a3fbe811d5c8e29f504e42508010753358e41dfc8e96e0c4fa1f8e9897059a2e8e589faacacff0b7957dae4342fc4200078bf8d44e839251cf7a39c2e69906cdfbc7098d1cae7fd7aa657b6fd2b -3fa81da9064d030cef6a0e1c0daf261c3eb52653c0a4f6aa2bf7ca39b2bc6925ccb8c693606c1be050e3ccbdb0b13f96d3cee141e228ec8f09e9178f1e74511a3da2b3ab30aa1597e29d317cf099a23d86746afef7ff5b2b73ef29f46857e60e45d0755cc11b4ae712cbf6c7f2e1439b2b7cc65e6d45703fdd8639cc58612b1a -1fdcd6247303edf5d43588a6ce800bc10d4a8f01afd6d04d8bb7dfd58abf76258f0ad79602d66e17c393f8508e27feb3ab79dd031ab26a942e3a4a992bbccf153fe23a4af4a365dd3a0e17698b6efb6dad469b7b785fa767bdd297856ddbe42db14aec5eaaf7eeb7b4ce993e3be58cc00da0a5045ac1e80f500a4eae04b41b2a -c17329387cef8ab6a670003e5fc310ccbe6873dfad5765393966c0ae48ac1f2080745777555acf20afee8854efba0dbe494ea3b666efb3c22ec1806357be58059569bab01781ab7e6cb85236432bdb36feacd0f58f645c42beb5f0cdfe64ff1d3d38d28756006b9ab2d29527e02908c752d42a4d8345ba74ef6ec8ae05a4bc0f -48338171eeb6ee4f792767bf3bb6bac7de5ae8b0ecda56f72cd170ecdf0df919449de3061766b50335fadb0c5121020c6d1785d2aadf9c04bf4acf3e7498dc2f3a735716b1fb5deca68092b00e57cbec57f75a585ef144e7db1984ea136e340a6015cff1c7d9298c88a1c06883290946bd87eb89a716da7102e8d541cec8ca00 -ac1d9cd9d5f0de0d945b6733f67bb5802928e43eb6e8dc469b3219a08e7bc12bb4596f3fcb65ac50ca55aade55283b1fe135d3925362d947659623e0d6e18903c24aa4233a55015729b11f055e1aef9cba00c6a4872dc1474ae61a30ccbfac076c1cf486ae41a5adb5a18e05ba8988c18b0a47a2127f58e42ce7bb1679495015 -e2758406fb5bda7b0022e2c2c777e43d9d09ca300d2cc0d7b0338a8136e6df2ba399b723599b90f897e0747fbf7269db3b570cafc1a8cbda211f020c2fc3721ee5d2807813a6ec8018039d08bebdc8ef3960e1aae5273349ad74a75bebc0b70a5a5d0984a9790e0f7a4e2acf601f7779e2f628453be313fa80a9ef9d22000313 -2724f2c4a4ece6e90d8d66661b2d3b63eefb8115352332372f89d45a9ce5e6061864a979c358fabac454ac09239618b6a8eae90b57185b159c32034a88d59f0196520ad8e01ea04e0d1b06b624be2301753cca8b8fa487c4fb2b1c6f97e3b81ba03f00cd231ef2e4d4ed81d7c37a1495e56343b4947f681fd64a6d8f4cd1e417 -146eb6f9e4a7f15f2a910398e68443b5572442a0f6b8fcf14626b98b927d6227bb256366aa657f57fe1e7aab3336c2d0a7591ab724c7612513ba53af5ada400e1f75da15dedbd50bbc40e1b9ad2de5fd5c3d1489f3e80b16c63d032a6e9e8511750923f9f5524dd03a9f54be49b120ff423200eea68e32597abc3c080c294e1a -366a144d66dc248ec21170246bffed9d42e9abaab707a2738b0705cf50668c29b5a335df53777ecc6c8c6ba4550feb3b62d71bf2ed883e60097b4d2106dd6c2df4614a5e7547e6348ad7f5ac690c06ceb87c1d0cdcb1ddcf5c73fba1a3837721212e81f95b8762cbb9ff97cd92a28c74f9d18e5994e4730c745479fe49bfa228 -4413ebe453481ebfe0f7be5f8919286397cccefd4b4ba66b86471385a70ed10425b20bd3d5c0357cc5d55a319e37bc18b46324c769507b2c73c013947739ba1c971d5b8f04dfb952dc51115af1f6aba028ec86b68b7ec73b873fa3b504e8112dd904dc4d73a661bcf496cc5fa98c7b66ec51ef86b4fe2d1d0ab56900b5f7270e -1479d82ba7e261e347b943afe3e7a27f2c30aecf8d1a5e191277e7e1503c3c1b8c147e3cb9edb710117b1c0a36138c8a3649f0e35323e7267e1e6e10db0e54027559199357838df8091b19ad3ca99e400a49260ed69ef8c6eb0ebb3e81fb982f37ea9e68dc4d52e47473b685ac18c1857e8355232e3d6e0909c40bea676c4700 -e4bb8dbcfa74d9cfb2414cd0eb69171d01bc88ff8bef230ecb31aafd9fe6a321550ab5213564573c90e68ad5af4f8e244d21442d38591b0a57cbaf4da1b57819b733d5cdb5dff16bad112668f2bba96c2e44ea407f06c63945f4da57d0a5251de5d770564d2d2697ca3de58c0fb599bddf7e66d87e149168f354eb779612c91e -226d6bbe9b98af6a88680ad0125f491fe2093b40686228ea5947f55f26cf1723f3f3ac4dbe3a62ef72f7ff85523e5b7d91d8a07f068dc8afd190e836d32d7d0bf5a852aada83e4dd52c6d39e9add49d42b0bb96cd2e8b21acc7c99ab58d8a92b1f390f4ab1682a2bf39172b4537982d21c87077bfc5bba1446621989fbfc3430 -70d93695eaabbb84443a4cf75de86c25027e1af92f06102db6e096bc8303c52c33ca9a12b537fcc59fb6120236a0643f9dc1734db4842389170e2c60c23c27217fdc05aede145b08649289ce9fc9a779879ce3dd76db7b6f249e512d04e87223a1efe67b5f38e0433fe524f2694b6f112540f16258a9edb238d5f0628e06e123 -5bbc451da92fba81d1c930ce6b0a880c8001a241ef20320add35b0b1deeb2815af616985160c97ccbb8f754c684f3b1509a0e6f8d046519b5a540b9ec543a327c0a02ff2198525179f8fc87fc82caf6e362cda3580fdfc58775a8e4e5b278b0c638fac078ef92bb28db96ed164a753b7781641d3d1d61c84ce9532c9e2bc2d2d -6b855517d91b2a35e57a0363125878c1167b3db7efbe1d1a945db91b14f323244c68d5e3600a478269cfd8746d34942ce57df37a18b2723d6ae88f364b93cf04548513d5f4ce3626ad0f28fa7e769bf90153f6c667baa99e35a799cff6f31b06f00ccf3cf0a8431075619ca0b032bbbb58f01a0db63d6f0299f198a3987f5b01 -f455132ab9de52212639a6b1cedeac39e7678244a7de998512be6ae264c4a11e0e1cd47adb364176f2dc47688208b60aeb371570ebddc51824d1e2bd12b0941810133fd76679e542bd828f7f1d8817d76546f7e38d29eccbf7dbbc990719fe28fb9fcffa511d56ced3d7a15bc65f7e30250604ee225ea0066147657ed599101e -5b6bd5c7029073024619e2870c427e9498db021cc8fa9770eaf53dfcf2184d2977aa0888b5e7e5727a43a7de1bf7e0bfc9d20a962a2e8f18c285e46fc3844626fd801e123ae89507be1f6786e63e9efda56695382fb7cec0ba5265aab4b6631495e08701fb9db41aa9a6680e71cc7afde95c014af505fde4b48d1db5b43c3b0f -5cd7be1cafa8a5ff2ae17c10034a00121e2d14d172da4fdc5d3dba418453ba07084d65be3b16fbc09205e1eaa2762b3a910d90736e3dfce6d387d2a0c0163806146ece19fe66c50a42901f9b4c0b90e3beb2536b6e6f66eb2dde3f1ff213bd0258031e9a1d127420d96929c2aa37fc5bacd455f8fcb4103bd06f5e734dec1205 -6c826bc37a8543e0f1b711646ed4abbe899b72a78074fd37a2da06d61e42db16c360fe09f77f66e503d6d50789bc6e755ca98b57e76931fc86e79ba80c80e019b4fc9eaaf76990f308a37c2b6649f944595089262dc6471b4cd7f1772a4178220a43971b603579f2edcc33208ca143ee8bbe6073a481e54e644738608baed021 -b52da8f1edcee60f306d0119760eca3a39f8120f5a2d65d3b80fa02d0a5be204783a14141eb3a96c724b150d999b39ac2f4c4269b6b58222af61e4fa7449d9236407e90d8fe957c72ec2935e6947e98f87d5ae60c3946ce071d489667bcecc0a853958fb10ff7fb9314d90a49e4e30d6732c674a6d21fb49580765d9c5dd3518 -3b5d4d18650685af8ed300184758863220c584c8211c56c5950ee39c2edb61001b3b95a5e42a8b7e19d109116d8cd9d41d0969522eb67169f43c5606a3af471510abb51fb4436ca599e63f37848547d6bc551e4f8edd9098710d7a66b3e0870926532981bd00a634aa8251404a0a579b2635491089ad1fd6f355fde6d82b8f15 -c156b96b5a940b7166035197456574efcf131ab2e7d8043a89de48724cf0dc23482e21cccd7c02f1ddcdab747f4329258862f968dbd07fa8af5be81e329d5b27814faa475b5df8dc85b51267056483aae87bc77c5477ccdb2ae3e642077d3c0954586926cf3324790eebcb40ed566bb8b56939db081f6875013db9c86dd8f725 -1324545cb6ec3a1afd371a2bbedc241b6b82ac8e672743b5a30a48f42943332a916fb278fb3b3a5b0a98d2282f96878bc8d98e62f7fcfb1795862313a207e12dab6ce17f9a2f73c5626b268177ce4ec0c6b3bb4566bc0ad8cdf1a064096a200678d79cf367a82983ed4c9e8edd6e87447a02df59c968e283aeb8769393a68304 -dc0e066e74e1d81f1273c34847a357f8fc5c1cab76881a2bdc92685983382a1b26cc2e6af3d7fb78dd8e24528e54f6e570005c149199ccc0dfde701d94cfd6203964cac3663eea5a2eddf988a9e7c720582906b9c98aa48be66b77fb33717c1e041460a4ab05c10ff2a69961a3862727aebf9ba3ac239dcc64342db7df58da02 -950424370e7e0aa96bdea508cc2342e8994bfd6a5c6812f9157751615409dc0f39e85dca07f91833c195ef7c2166d74dfeec6ee72571ba8a0b9eb1c5a39f5e056e57c51e8a2593df2d17a96839332a2e84d4cd9c8113fc2c038a4efba1b8051392c27b0162f25f69261bd4ae13d0f12280c0ce4f8e6e240a1bce58662b84d600 -f06de8c1cdce6c9f881ea191e3eb9391bcebd77595f70115a9a0de75d606ea1550d4b3b41c97f216fc1df46d27e599c990146c4839cb67b92fa97492c1f98d040ef18c82b568ee3cd28ceff281f0048a8442ab2e2ac6f699724355511774c616bb97898c1bd2ec12ee72af9ebfc78be41784f4a1694b6ede5585b6883daf6d0c -89838ba0c2d9a84b163426e8a37a5c027a535dd7d08fd1afae7ffc6e5ec5c321d9e9d941802bfe63310eaa1fb7433e5fea2aae0919880b2e03cc2c635f90ea2e592f09e2a654892c28f98d691a04a4c6206608f8b77c2d32dfa66f786d490528d697e32c5b0d152f70132e8277e914f83d48e14aac758e7e634a508f40de9b10 -2db86258cf2b12af36ed7e22acba427590e19387557cd08f4131e8c700bb061309d7d8106ae5ff332674754e3af66487a52af63f6090b48f0fc4a2b59b59aa0b9a17848258835045f16a3cbb552f3cb4f4f75e97224974a262c00809dbb7522ac0f82cb77bb53b00c268fe59c3eed14953567b5cff9db3df8c4bdf47fd863626 -739e9ab7f9b3b6f3e517bd772abd0a77d39d264c9d295f543eee3038e3c21f21b5ab53b5d8d6124f7c7ab237861db633a733dc3ac40a65dbd21074036dff94142ef1657419bcc62a7f54fcdf108db24a09ff94dfc98a66327239e85b7c86a207992bfd2626e1171df35b8c6a838873f4312176bb8e65dfadb4346b6c06416719 -575beba97e69c53778e5836179e8cccf2732eae16f969a8dec5fc142a8c0a604a78a3e5ebb37b29fe8d433484d357b2e834c5b630a52a81aaff6476ca204de2eff7057d82ab9bc41a7f37e2b401b94f5321cbb02d4af65aa7ff3383f2f6d5808ef112ad4ceeeb875a4d4063c2be6d18edee4f8d21e0aa4502f5c6baffe140d25 -fc4fc8ad8b0cbb14e980fa105bb8c42283d6c5a3c1ac2961e9142550be5ebe0685612be03c2667dae9dafdc5c4ef16d6b978116cd059d0af1db2d9eb3e325e275759b8d0873fe4efcca17376daff9ace6c713652702474d8fc1d9f21fd24e110c478c280a16796f9714d959264fb182afe78a6c42557f2f4efcf70bf90786410 -934dbd84f3e25ec620bc7398fd49f3a3af138c990ddd8512ab34ae33f07baf24cdcdeb57d8d887baafe1bdc7c57f8a89c037bbe4b41f03044975ae769579dc0820cafa8efc3d569b25953f52c0588564873685e649a66ad46a518103cf415c224e29104a03eaa7f995127a64e6ed2066b9cc1605876a54d4947ada4eadac9114 -d98428b52be06d4d4cb5dcb9dfc1933c6790a6bff4b1a2dadd1ee8cdaa6a4c1930d6545987c160ccf704bf4b8d8850b6370e235b6c1e3aa2248d4e69fd21e72814745f00dbe54c783b0e9c22a63fb5ad319fdb182089c93d911507cc4084ca001aeaa0a2f1c5efbc0944f9967e92bcd4ac31ea8241dcdca9eb7b05d3996b5d0d -04baaa76d5c90afc6709f2d26cf375a8ac0f7841dbb9688aaac46fcd2b94c82c76c434749ad490a4e8daa44ce2ba8388f19ac59270ec9321130029b6ec30d71026665038748de0654830e73d615b77e0aa6b061d91825d349cd106dcf90d45076f71e64e441390f6fff4b2907237d6ff939c1ee37114985eab633a1a45306604 -6a7b8c9856f7f35253a4e6ab76659f64d003e56f7aa530b09fbb676ff7e8d21946e40ef60e67d628eef0a076aaa8bcb378fc13a02a2614cdb92aca32ee592625d33c5158618fe0c78da1348bcb954c150e4e2337bdcc5907e04fc1df1ba53c274fd8d1318d1cc2906aa8676af1986a3d5ea5e1799e310825821dd9a142d98817 -d9efa3fccf1b1d10037af2e6bd6fdb11b30fa98ade9414e0e244226028ab6920155aa73a8b18d93b8a9a4dccda288c826e4b02f93eaeaf6d84ba8e2ee0e74f0c9be516e46d05322edfcd1ac1251dacf91e8873dd1e9c04eee4fa7aa251b6ed253658dea76e088883cf51fa1475a62b451a694ce7a687b241006623fc7e8ef91d -055bc1523e2a2b396fd413228776f4d9486b9555e548cb4cf6e24d72fb56ef1f3d1460adc26d19711fe044a9b7eb5cfeca2ef6ea53e808b81da1fde565f6ae0b87dc9b80089ebccae55648f3fa7f5eaf2f65f52b93350cd8266f62f4312d392bce1a64f793e02ec925a3e1b78a2d3edaa5f45481ee5f582a0889fd1416571620 -0e30ad77d850e7233c81b2adcb457144df5b7eee0ce33c66f81f8d6145c4be2e8f97dbe8777cdd71e32ca0e3a32e7cce7cbf0741dd53b05d550d174b53ceb12d6f6c5f3284d20470b64277e0833466c455c549a29ecc8725963cd7f5d5d6a3214d7a9547b2c90395aa5324d72cc873498bd583414ac037fe6d522847fb4d7c16 -bafeab1883baa26a71b4a7d8c24fd001962d15208326041f2838725188724a274374d4b2d7f9372fd7134aabf7051960fd7e720ec400c7532d2e420f8ebf0f17496b50dd9fdb03c384e77c984aa3d87a05ff3e32356f3c7ed42153359e586103b8032a18f771992e8e4eab6a073edd37384a08880ac7b810d5e595ba11d49d04 -295111d26945a37d0d12e14060de251c14527c958b12f9e53efc8eb62ca7fa2403500f4d969490087550393be83500f248a84ebb1b832613e2a8d7522dd54b2a8c5f6a9bb5fe7aaeb9e175aad597196fab5f3819777eba7929b32bfb076e3b0ad0d3a5353f6a13b556cc53830fc12f7ab54b3e5596e661fba26fbf24e885a618 -f301e9416846c01a8c04be4476e99e5dbf2cada001addd67f233f0ac2e0af41af3f928c6e9d3c413b7bf4afc20034f606ecaba643adc12c2e6e8d33fd7bb6f02d9d6cc328fe438d334cf4b00da3a025f769a760b05c8a506f1c52081ef5d84197631e58bdfb710bfe5844d828224b0ae7c504109dc003767b90c6470423f821e -976981cdb2db7571145f60d2ee4a0edb6642a1a44d9528b992ce3d6f5be14719701ed2630169032effce01c2fddc334f0df7f21274a21f2f0653cfb272dc862076dfa31324119755056f8728c424f31fc0d296003e6885d01522aa0ef04d121c951e85d252d89f061c64edefcea5c1d0667f78829e1e7b79eedbffca80433001 -29f42760bdc71b38ac0d66c69e60e922fca10a56b5dcb7728df4d43499fddc174e7de20f362cba62be8de51f38731778fedef2516a6ee5ef652bfe4022dcba1a34fa367bf1771dfdcf6545addc6b54e2d6a8865e832f1f74f7ae7d88a9c1b505cefe60ef854c2cf5483af539c5993e8da862fedb5ac65763431c485fd12e080b -67ee97896b8c428bd5e171011034266b7af2d9435dcc816e7d3356f7ef89de23f7303888459dc8c766c8b0abf53c5c8d19cff7ea15ad77df5dca42a01eb0050aaa1e41cc4fe0dbb038e004bb3fae270bb78a8d859a94595ee83d3f1463ac161db7bd0ebdf80615f536cc5b1b65b1bda1212a9b9740e62da19e66485cd3c2c114 -3eb1ced1b4a24bf3bdd1f44e1959bbb7bee13bd08ba5631a8eb04b556186dd1e17c20659bbbdc2da8636dce27395fcc83f7b30659373e4834c160ac1c57c340c6b5a0ab03e39b543b4db93c699ad27a25706d62caaf0305301a94630dffbd222a8098d8c00d95c54155a5c8ec31360119a5c751bf8c0ba836a5f0eafeff3e603 -d6d9fd5c997fec207cbd0914246a3430e39551f1160970b5dbbf283df4a79229c0209bbf793a66868fbd29439f34261198a726720b29deeb34cc2bcfa34c9721203b6b7e55cf8cc48b76d1be9eee7486013566a0308f8571e68bcec3d9c23223b9dc14a5f26045ccf75b0b6d0d6e2ce7200027ab0bcad867157280a53ed23c30 -798194e282a1b2092cb113cbd3e1c0492a6ee70c8de727016e4ec461cb406b28eb9234cb0af7424aae40839517bebf0d46a18d1d861afeaac25f5b0776c843274db1d03cdeac78a46bab0fded4ff5ed2f501dd2c27fbc9ba7e44735e6ce8b91be042e3d0216d8fe5b92624aeaf83504069db26030357f817291de4dd7bc7b121 -86800e0315549629b20d7abb656658fac05bf0c4384286cfaebe49310808811ff7afa3d6929faed3063285115ea8a9d7d9b569774bc71e3491cb68aa1fdec50d17ba56342ac2eaf595b4ff4f358d1e77ee3c8295f5c1136d2573f8c7ee0d3f153242989af81af93e874aa2dd4466297d5b0097164b60ecb4c234bd4065100125 -ce62a189d48035c7c3c6e90777e66fe85a1831b514f09e26a5e1a50362b8be037b6e7e3242b992e9da421c0f688dfd7e633da66abf018c52187bf8a6ecb30415c078bbf35c3529b16a503f92ba7b651e1a77fd7920bd0c0365e17e6382e71216a88fd03e39400fcaf57649a3dc6012ee89b977ce917185f3e388a48736586304 -52a4127a80299057665381725b213f16ea0e9f94d93b98999f4046a58f78592e36ff4aef528ef4694abeaf6ff5d93b21c162bba41fcbbf989049167db7cd8b10e0c2a517fe3b12cb270cb90ada47341b367ae8af65d750ad9d4600cfafa9ed26deb8ffa97d323e049129d991e9f263ca22f7fe7d80fd3962d6f60717dcc37f10 -86873cf836ebd948c52a1ac8b90f93ed4a64f17cd25051ced2a4a41ae5b157014b30ca2cd3c19d125894bd0598b7996c3da5edc6f688d5059310fe896041cd27d6a7ffc64b083c6fb2986d34efa9e76cd5c778197d334699d684077c0ff0a42f506d568c77c668882cfc44a5bd04c40fa849c2df570e7fb1e7573ac57e6d0410 -ce3de52ec2a3476497664e98b78213901efd17942f6bb8a5a54d317aba33fd18aa41a0c3c52c35b5d8f15495c0d1fb2f55265b7a2a17e74466e781590c11a62e8c645a8c23297dea3059f0d5fe0d5d690adeecfe756bdeaaeb4a651f782bb21b73fcd4cbb5806b49307e0091cd6de32df51ddc25869098ae42906e95c52c6f17 -94371c7591a3d809b253a368bffd54249b6e5c85ecd06d619e3ab5e48f91512529105915375315f4c4de872d6e3646cd43c82b40aaf98c95e3f3802906d79e2281050b2fc4a7ae1cdbe20ed206f58466915d3d6f801d9887d83a5d7bf7083803237d260e5484bfa20ba1514b8db0e306e7a882a87c76cde6065c8f564bd40a04 -14b276e3a021d18e934f5698cccdd6a157454a01088663667143b69055c6c713b5e217c53f69ceeedc9edbd2fe1337c1fb76b0abb58ca12db6b32dfa222d62029e303fbd875dcc5b34eb461f33ea7ad3a4e2e1de8c46d3f248919e3c6392d2084c49fdba97b3e8b40c828bf556de85976742f925ff729975c9f0f8256d475015 -21ae7ff5fe040b7e07ccca8ab841d8d6ab5bf189390abc321de3590e4f11d7258ede19328632b7caef93d114e2664302f1550c712655311e02b527ddc11d1212b03f3769b9a338dc98b0dbcd9607ad5868f8450afd801b9b1712bec4300da60e0cd2cd92f7109c3576929dd9db68b306c02289fd4d203227425708365e294202 -2651df3860eb90662a108f61824b671e7fce1c7bc24e3253524af544823e9f016fab6396d8485decd457fdddfeb025af90092d8abb7bf41ad562896eccfdf62641e2780887b8fb6444465b52966be9847d6df0414deafa259ecf2342d3dd940d895cbf1e0e4d4a12b7c3f929c106371fd9576f99cfdaaaf8cb579a56ca334e18 -9eba66736fcd37c79c623f8bb89d91696ce6a8160da90f8c8d5298353b999e2a12b1528ac1fc1c3fb40928c64f603b8f41137bf92a05998c0a6b2859eb94902456cac043722712331aff9bf6182fc5ba3bde1b52ce26e88b05a63b64e324e30b15c474ae6a1cf3577a024992aa8bedf23b0efb55514297bbdb69614121f85830 -3fd2845c98159cff29a718458e7041ed74972fcb58cf6af492164dc72b8042082410837fa0fdfecf030fa089fbaf18b456f736e7751ad136a81cf3d4b20fad0b7231bd5ffbdcc4c478aa02b8f1971db53b47e9339e8be6ce430602a22fb5411bc5c1bdbc711dbcd9db03f458f4dd0d8756fb265a5ec6f3162deb19def8839b1b -a261afdcb0030564d42d761839c36c69421392dd1f4912c2b60defb9586d1c2d72c77c88b23b2c14c38e92b85b3a444d08670f7f566bea5eed2848256f5e96219ca4f5a4a16d46f4af848f1f002cacd67f94cf660ec5eb524825fb5c70f86316f248ab274246a2213529762e6a313f62646b1b48163be22beb821a4ccd40f813 -ceb5ff5046ec6fedbd7849f1d356a5fab5431441f15ffd2a22652930f3a01c2c711287cb58d0eaa904ccae4debd0cc6e03d39136113d12b20ed7f10bbe536a2f90c77b6f3b7c433bb4452223a6f8fc09a9b63e5f171f5afca733da8ff9d48b1c6ff12449fb054794686944038afaead3c94d5a6df0cce8813b6939a8becf5b00 -38a42a96f30429d0997b29c5607a3cc2bbd74e888cedf443f7406f38d0856e20f715efed306c15bc30ae0c413483f26367f938f30356c1b7e1db7252a1cba808a4526ab47dc1f94e1d9ef73bd341e8aa601dcc4dc134fc8284fe1a8b77acf113eaa864b0119d7f59021d13646c903008f4b5d3219b92af1927496e016cfd4f10 -642dccb6a8daee09fe4b84d12a5d9f1e5f0e3fd1a7ce3f5e8367175f22590201d0f672e6a77da9fc502a258b4b1a875c0e48dd974ca3e65c1d2b9d67a46bc724106bdfb810ce7d7e1a06e74287d94cd070238be8526e61b1d97e0fbd782496098de687516ca1b2dd645913e517526bbe5d67b7ed936564ed54b5cff28a651a16 -d5f7aec07bc0dd1a0d93b2834ac04d0ccdc86e4bdefd5770a793bd25540c580278825fd807a901f2ea4363a3b91c5ae8f66415daaa4fdd415513b9995de06d2f71033a31fb1d75ce2393dcb5d9018b11d4408a877f86eae8a822cc6b973eca0da48883373e9d390e718eaaa205b8aa8124683734bd1ede235548b5f889ac4a17 -0da232cce0b538d0266fac430b196e4c0cd6b5323a07707ff35d789c99cacb1bfc341e2e7d5fa6f6e1139faca83168c0f01eae55d106ff2d1c794ee3f44bf61c86fb478468bcecab3ade7617ae3765cd9b45fb83e212267312a264d5f9da9f24fa7cf809fbcca2c3a93c1230d5c57d8bf1975df6ff18c537866b815899051b04 -aaf7b1bbc41fffd5d2db6ecf1d70913f9f43c93eb852c81b73e115e16271c120e70be820f04f0ec14f8b907c46dd08fe0bb8d5ef1dad6d61c9cb8ba7fa700e2b86a0f57d7d8f2f39a887d94ffd0ded73f294bc1b914fd1e0d0c8ca1c91b39829ad5650f4c8895cfb9e87c73ff867cb2c52bc5acad34a0af0442641dd1075b605 -0d71be3498815aae04193bf9654cb07b75a41e7516294b662bc364fa5d271425b848c8146cdd9e7ab222c79d5dd5acc96517907bc408aae1ffaa28f8a87f201a26eeb93432f14eaa8f630ee0e4c5ebc039a4a17e5bc43627bacf48c82a3c1318f3b0dc1549d641b1a434e1845cc9b8d8bdaa9e2736b423387cf20a76a06aaa1b -32e9ff6bc2b256ae8bb0cde0a6efaf0b7d30ff7ff88e9c1d362bfceda39b5c02ffb6a34d87748b36da8531d9b2721ea16445f168ace5f907fd9dcdc29a7fe21703b260af5e444a810a52dc8f95ef1638dfe3357e0530acb8a40c2b051293180701f66809cd3ef3559aec93d49c8c62acb9a93c2202b2e703ae568363f0f06b09 -fa4390a124aba1d168bf3982d434281f7aa7029e7e73d7ff761aa06720486518ca09be76321529dabe599766a4a94f39689d89146132d8ea42b3737955c2d116587818fcec32022c35f5c10d739810490680aee62756cc2f20154c760034b321fac1982958a9ef211fd26796c8d7514158e970ef031a1db95ee04598197d2d13 -fe6d9a44179982dc18426776ffa09ba8fd7207eb3f78ea87dc64518b09b794174f1b56619735c30a1a4426096be660168ceda91848618fb5275243ba68c4f70dc510bcf2a0dc626d4ae9793ea8b2139e6fde45c4abe42dc6056f903f76f4422846e1f1d6059316cb821caa1fee15b867e78ffda361153fc35168a980d0fb3612 -5b7d5ccd6c4fd0eaa8c8ee64807d84ac2f1493cfe6f5969b54ff44329a02ae292df57a4a284ece1e0a93c4dc03a81e2a6c373b64362d1f5715209ad14f7b9a088c18305976ffd9ff106bfcd56216f39e93e7fd31863a6a0cd94751027d0c1e0889859230dbdf76ba6b8f5cc077ceae4c7194f6bd474ee8151cff9d8799f72e0d -cdda116fce0ba56d217ae16ecfa30e349ef6421a764e1823a78f8276f707bc07d5a18bc38666110d625986b4cb1d2ae2d18ff2db1d537e819f9444ecfdda951d323d963a4fb07d60f566a9e8463752cd0d44aababcdfd183b5c278185cb94018cf33191995025f75552f0b7538b5620c7e219403b60daaee8cd2e9dfd988c92b -81390f6f21b41d647e5a5e9e9c6b8f08d7b36926f766493fadea3f545298d806941b065873a9b0a47563b335eaa2300af26ff6590f472c79cccec7c4f39ffd01ecc7773623f0bd4fede2d64f4d3dcc134efde86d26612e5a19f1ac5c11e8f31ff74885b03f963771ba4d89d326e57d1332438d987ff5ad3f79597bd9f9ad1b22 -68fb0f0736c44ddf5fb76ca5095d24074784b89980d117c0612a9920d21f4c2987b3b5b2d4d683ae88bef486d8877f7db4be255a6da2489f9506a8e8fab6b12c5ab915ad7d666e8ffe85339f5c8227b13ed5b60d061c2a5622c73ca89efb2329615c2b7420158e350436d80e18d2c429a9d7e390d443e34a4ebdd00cfaefe71c -a51fadd2610058f93a952245755c53313151b0ad538f878606f6f1dfcd1efe2bc527ad13741f3d1d82000698622c3449925e7b8737e0f42d38a8dc7e95d86721fdbbfe770e853c9cfb2616d7fd095332d03a86ba8b1573be744a769d6e494d0f8c0a12ff2a380c18993847555cfe0373683aecde38ebe287e5c54150071e0b2c -8dbfd3187fd037d4ec576283a6f5cb6ca9a9378e9d69aa8b8adf46f5da1f3d000cde14348ac989be1476c36f211af66d718b403be1fe62c021d608b60c32791220a0bd79f95872ec7d4694367f08c490f240819ef137b709a89e1ab5447a971a12e1d0b7c9aabf2dea0e96fc402ac0719d67b62cef09ca9c87d9443d967fb410 -adb62aee919f12c0e5bf54d30fe74360ef1b64baeb77a8b17346d7addf0a842c92b83a61323a4d684dcd5421237b7c33b314d628115d5a98e7c90ea7f339c12701321142d25d7455c06dcc91eeb55d63719b857d22f4fb75f8da4c852debe1107793719222fc58dedceab4824e0b33d5e01caddb83b81ef39cdb08868f6f7416 -eb8fc9cad0dfce4f8a991ca3d9a993be67d5c7b0d746dc164f62767eda66db2153db2c63d6403dd9d9466019a44c4ac6b365ade430f4dbf84a938e4a7b684117c2b136002a1aebf87b4f33d3eac56fb5af8c9ed72051841b9622cf8cc270272eb62b56135fe4934039bf536f52545242821600e5d5b522f2b19b9e1edfa8120b -4b3c678cae2959912eb2e80f057bdae252d0ee903571cb73a7bb0ea377b69a211f4121ba63ef9214d3d21fe144471efd487038d427e637dddd9c28d950e22420270a4a986999dca6d8b64d88fdb240eef5dc964154e9a83f886daf710436d20b366e0df61ea9274f8397549bef07d1a445c11b808535fa40142ba5ae6992a509 -6743df6f1636567d151596a0aa6d44a9d404f28e1db2692ff2c2fb77833b30034e39b427fb98c3a509fffca71ef6903ea564ca31e46b121c2d6d685cc894711c8b6c3227327a517e43f28c7b6cc96e41abd53958be8a2ac90c15d3e48e25011234b5ac98953ec671b0b1da257042f73e420320861a5265782671e4cadaa73008 -f71ad1091f03b4126ea62d8d9097aee04f2bd892e64267d44c8192a943042b0a37e93d75aa3bb3ca4717a366386b158f8a40415e5aeed5715567c309a3033d28b5bc82264ff71e3d3ae3b8e01c6ea4c47d8a8bae02c04f60778b9a00065ecf23f4985b2c808a167f712ce6075e7ce0c8812c8566bd86c662b2d2766ce735230a -1c324d03d38f19d46b993df1bd911a665fda5443cd5e07519ec489c23f55c608570876c8eccc0f1370219910eab31b814a10669305139aa753b6936bbe39541f1c63c2c0a48e2434db6a5be63e3064680f8e4e2cbe4c4a9ac38706938a281b02dec2ecf755b7c2b841959c912d8be762256754c6ae96f18ac6b9f04583d71905 -b17fa73367791e6820659972054432a680a12f201be8925b2315ea96497b3f1f7e3634233eb3222bab67709fb8b1a4b2eb69ee23c11fec2fcb70c0b462fe221a20dd445687291fa9cac64e4d40fe4417e1a18ab73ad4af2e54dfce3c995e941d5ce66cd97bc17e7d69aed59e5409955d5ae4a98c9196bff2b0a4b9ef989dfd22 -9abce4a8205786516b0732d676be071e11798fc7a4638e07b72146ece3f3a0107ac4459843a50f2c34a9379a14b690c63196599dce204a687461f8ba7e97b02d5e09c96aa52feca5d79bcfc8865ef02419736893568f8cce6691c70f4a5a001e78fb9c478119af398d889d0cfc7a0fcaeda829a7bd98428af411506a80a7e30b -18ae7af4b4cfb3eb988dd918922c2bbf0c97d38837f52309c7446de9459b572aa0024660e292b039fe35e1549cca029cd96bf9cf580b3ae6203094b224a7e92c8b41cb710142adcb13caec6e47175f0d53d4e371c60555bb86a4a2f8def4500342e63b70d5d0a0b36a1b3861c615057da55967541d73b0804c228c91d84fb916 -e10fbec84091e0edac7c0647a5f49ccc67ba5846d47d01e92005441e43d02319c52f6c3849077f1ce844e6d243834bb5d607703e62c6aba61d1fb6eab73fe5242e45a3c81469f5e559754ee3bb0054b4867452f23fce06974b0ed744d66e372ca0c3cced36d1edc1af47366e1f950243cde28efb073a703e4601d0b100b8d02c -5654b96f1b4c0d78d9e97296ae2bd16ec72bc0d32c06cbb8ae9050c605c53011fc99cefcdd9acfc19919c7c7731407d27af2b7446ef179b54fdbf6c10850992af654a4d68b3d5200bbc13900e5904fa9140f0858c988d4832cdac01be8f103065ac8965dab4216c9366d7393396edfe0bbc9ce5b4a738f70d4549a021e4bd426 -68a5ceb2adb0f40db04eae1c6ce197efbc5da83f0c476505f20bb2283833a804390f3178acd1bdd8b40f398e8082b5c79ddc01bbfbbb03fee9719f9bb9de253097481882a3eeba09b9893ea2ec7bf69418da90933a4f153633f929ff2d6f1d278f1e7f932e48bc41fad768a14226b9b0b4017d93ebb1494cefc916e0b1965529 -882a8c7ab7db07568e8ceb0a6345e1d9046ccfa23f7e988be9484645265b2a037007e3e422be8bdf750d670c27dc201995767b09ab43f6b2af58f411bae5fa1117a02ae40329df53faf5a0d457a268cb9c89d8420fed82eb9434e9483a6e1c100315df8f79c2697853c39ca82a27064bf6033a7052de313d0571d8f9c9d40a15 -4e68f24e4b09a35e29dec9f9999be1aac214b92490c29347d3d4b47aeacb781005cbb4be51d418ece012a128c80e2df036c638287da96e689a245dd8950f732d41e1ad30853ff54ceb6835efef2a6fcbecc6cdfad42c7deead27cdbc704b952bd29916250510e055f6726d3a007f52b244525d3d41100d50ee34feff8908801f -8272b3b9b2a51cdf2ffdd3e6d0fa2ad6083e778cd1d889ece74232f720c5b403bb5585234698f2914609c299944110915115d6edcef185f347f13bb734850501c8f29cb2b0fd2b8cf53731a249fb3478b452491b8ac6f68450078b8060b200173d9bf158f6c52a0c1707330773e4374d6a2e3347fcbcb854ccff90def8bf5b0c -ba4444a73ba4a715ec909409fc987f0473a85532c32adb9242ef35963ea69f145a9520ca395d354883b3a6dacdfc231d0c87899fef0036a674eb8b18450a691fdcccda29b3e51aebd7b3f89a28ae93851ac739e5b0d78e376bd3c16bf5bca0113cd95ab8beb93af99e6038dabda32150d78a06c2b81fa3e156a08638660f2021 -33d9704b608d634d2f3aaa9be5a80056a40cdb6584ff3536f2e7f99725642611e8b2dcb57dced9f1e17d144d24b80e96426e9f7301f6400112a8860f297fea030cacad09e9b4ae005196a673aecf70bdac2a44fa0b5fba7aef4e15550b96a0121c974bab4d4bdabcfad6284bed0a46ea662495f808bf903c59e99c8bbe7e9a25 -15980bde7994ce6b1ab527d0780a6e651f2d00c28c7de6c3d1009a9e8e96d71cd2fb720a63097e3054c7aa7aff4a5a3036333033c57c74486d49232e857f8210b63879aaec308fdc00492aeaf67e4eec88bdd3e9c65c6affaeb843f09070ac083b4660b2578098a87356079308dd2e822541aef898c03d389136332eacbd481e -65d00f689d2fd1bfebb1a47779aaf933e6ff0f71bcf8eeb0f8216ef901b5a12223bb967c7cc529fed3d319a415a1349528b5850eedf2a4a3fc4275002e95ce1107bfe3db4ada73bd2d9b09b62e20db9100f44d82743aeafaf611f0e59782dd2f267ad76edf27306001c5bfd43f22e287c24f14080679d69e63b62602457b140e -03b5d308bbe0e460992f205ca2d3fa8e311d973161679defd2304a043a9b4322519018b8a226daaa394ccfaf0dee82f1290f29a25bfd5b93af3b067b6c69c90ab0d18645be1bb9dd9ef20dc70c1c6dd0b30f50151bebc8520e822308ee882417eceb433dc95d73c760171df8bce2cce2bc1dc6adc81994a9532036a99e4a0c1a -c923769dcdad3c40202e64ddaf6e0eb2757fbc5e9c27eb04fb5f75cf6a951c0dd8ebd077a366115a86e6ebcd1addb67534f3f4ca0f04b7765bb36ce24c0afa193980c45cc6b29e208acf60f76c82feddf386d0436d8ce6ad6bea164354bad41b956ca95d5aac6dbe420303a6899987fe74892d956b7292ac4edf2f6d12f50a04 -8640dc9ab25c37b6b39ce48b90fa3d8896b8837f1fc824b59f028642ebfd6a25c403a05e37d0012fbd4b576cb6908c88ce946d3a11101663d9e3d3ccec038100b6eddabae9f4dad4b83611fd47565523f4aaab67f06d5b7d1298157f5d93f31cbe06ae9ef73dc53b7e36769d3ac59871faa53f437b1649c84318630a8c0dc80e -d0bcfd28052a17fa0fec07ae02ac6adc2ff7e7cd3ee99fc8eeccc25b5248572d6d6623908f9a46fdde39a0e3905dcdbea90afa351f88aaa831486d6e99a43404f8fac44f43a71319aac6c3895fa001182301a034c1a069a29e41ffdf93f5791873147d1f6ec123fa337581a34c6bc9c2528c39f39da7a100b801b8f0fb425e07 -91709d6a4d948f721a1eaeb4702ee13b547d5332892f3ffbcb846b4f836cd41c633376b401b32f3b8f832b38c066c8a88f87e80e1cb010eb42125d859fbe992390e17f7634237d587073cee1d8e9ec1199d81f5706d7c6333277a6c2cc60c31654706293cc7f2040e7c16ae77b72ecde6b2c65bb986ee4bd7785a57603380e2c -8058349a640c165a0d96aaea4b5642efba7b405e18c20f25505391945a3eb70a1e3ef7a3536f2fb5b3b9df54e449638a3bc1fc6616b26456e73fc2e8d1960a2d2c53ad0f753982b5e61f15b12f5d3073e2fae75d62db756bf137dd2ef472a801ee17d0b3c7cf1fbaa98a5c698685e20f32eb8164f5bac67a622d8b388a2ad406 -6beb26196da8540032910e3b8c3f496f4bce94754ac26b6320ceffa92b220314f2be4b954bc03abee4055c2ef722fec461bab35daa0ab8cc87a61fc40b77a10fafd37b4e8880fb65286ba0d3b689b1b50750147b9db5431e2cd36436ea88a110fd1a2ac4c97359439a7c5d04f497a3e501bba45e4b821ddfc1514e617b294725 -b8e778bda6983688ea0843d0eebd76d4445ad5acb35492b16823343ee3e87d1bf4b6eaa8ffd3fb7b0f922c0d8c897e77cdf0be489a0d9882be29172214578d264d2fc6ac5e37481d800a5259b52b5145aa74e38950e2a9e0444a268b3fb79e18c0ef74420f9a4b8a5b0f6c2a22580e60c2778a0c8a721ef27db3e11782ec012f -c346120b829190d96c630257bd88911ca95174e9da235bb8a14eadab64c395084280a131b8a5486245c4056fe0ac4141d7e3fd7e781031cfd055f1e3818189212a0b1e29e7836f1face53196a6fbfab37635280d0caba622ea62b7f194cad02d870b7bc1843b7a471239a4eb5bc4539a916878bb90e68d0977bc3cf008982c0d -935b18acea53162ea76263761a4840932889c945d7e11e05d9fe2cc7a8670b202dfec96f8e2e36459d75d91d60707809748b67ec84e1a607f6e695e3ae5992023fb19f1a9fb4e1b6a877bec2a93fa7e279a12e7e69b7ff923c7922a3627ffa0005ff46966af84a3297702c74ac5cb6eba67023e42a638d64f29dbaa2a7ab9e0e -d1123e312334faaeb72cb68461073b53148af89ec1f0da741ee6f9b259e8ba2ac66d27be9f3b60d798b0aefc848da8bba51bb870df78e38b715973bea77cb912fc88d8c3b20f29c1f65ca864263282b6d5377199cb072601c31366b94102f9296e567a758e3529aa450ca6cbda0245b342403d05d56292f297c234badbda512f -022ae9cd14170d5d47ed2f0bedb4c2b0d422232f41e4572435be2d495c29ab16cc18a7513017df9d18f156c5b9cb8228b12a5ac7368fe4ab6bf083cb9e991205ebc63ec231cd662524a5b2694fd222c67cd1a7860eaef32d70c86e8bba033006e87a19cec9121bba5febfcc92280ef99ce75ded8f4d9a6eafdf7d38a33dd9823 -f5a1141fe6ce9575cbf93ccac1aa93d89d34f10e4be95abc008b7ef3d5e2280d18b2d118d296b976d713ffb343cd3d2cfd13ea86f350526913636ad9bdcbb005f378002001e6fe451d6c04963f2955a73184cb52d24a45ab4db3e55de1f47605f8b41bae690393b007d403d02e19b7c32a7c5106d3b54feb1bae04a125f2220f -4395fe2b7acd281d08250f3bb3f639866420ac93580b4a1aad7a15d5498ed614cf6fb7169cc2edffc3c99b0f9bb541982c1c559740013cbd2c55a3836965901f8ac16f73263bf91258c7193c2600351243463c37ba127e79af856c209824e31058c5ce3b241330af6e97f60a6623b05b3f3a90b52ad1a88b92387b93b674241e -72b22dd5931940207a083ffb7341feb8e5003d57e0826e556faf5c3635ec2e050ce26bf92ac41574de78af56b86763058a6882129ba41d0018c2b15c38b4711d23eb6dc40ca3039c9fa2aa41f3f52392c213bf91374ce5f25a77f395edca3d2af54bf05b57aec9a4ef66c1382daf19c47333e6e190578b280818763c71c16210 -32eff157b28c1d9b3ed807fd09cc698cb6078c1ada4ae7104e2f9de38c084223527820a7629a8702e0725baa7782046f1e748103ace4eb31933183627eab070427859ffa7c3c0524e56963839c6fe4d18bccf866418332b28616881e47dca413a886725a342e6bdad30ffdd9674156786711d4cddb667dad0cc562580b54a508 -ef4bef1779f317c60580afca898b8165bc6981fa8e30a2f4cc289b79bd7f8d12bd7d9a468ea89849f77960a21a8fb0a56a7f0fae4880a71673fb1fcb9f54ad24156fa57eed71589810ce75ccf0c94a719e7418af826058a4186d0adbb95a7513c872b6c1d0018c8b17c21cbc71b5f18cd0eee50e3316b47880c58a3188a5480a -95351349c4b2de6fb4b7e87366739c5e30f5c9d4a22d37c06f479e1a1781b727dbd3625ef0f7cd4b1ef350db5d646d1b571bfdddbf1800afbb62fb1804f87a0756bb16996b8fb0433b8f8154b947451709e10c67eae1dcac6fa502a0a89f9802d69b7924a6de7157f295c61383103ecf44e848cf9723d06134844092c09c180b -36d32869a745168a5b046dd58a4681885b18ee8c7db8c15136a298642675681ece2913b807fd28e3aced5b71d94095da09fef0af33722c19eec61f7264024c12d3754b07b5cd06eb4710beb5d2063d5b6c6945c4e47990deaa5fd5249619ce1c152987a72faba79a9efa38d4782e8c4bb0cb52a18b2bcf61fb8f5528b1151613 -e6fc554f0026d7008bdff6e8132d543bdb4fd5dbec13c6e1dae695c7bfa4a00233fadf1e081f1663d1764ab8232c23549241fdb0f656d7f464a9549d73d2db1f61e6a82c7f9d18dabb04325a824f3af708ba3aae1cac8ac3482193cc09065501243276fbe21a71832e7ed8db6c1c45cca9267d346369b8bb3a10081bf1817324 -1094e355f36eda06bc9cc2bfe94da07e270db662bea444a276e746c08e8239062de6ecdb71096096a485e733f97400cac68ca482ed497191d928b9e2c334de0925aa0764b9c26bae6b232378506b140fa80c40d4c0911a7668aade28538fef0ad9e7e7eb23f96cea86cc2534facd4efd98ae571ec7e83c3deecf1a046e0b0e01 -75da27ef363d2ba3c2897a2f2ffb466a5f113a332b36dc8bdd68cd74e3518a22d8de0b7971067e5991da48e114161edbe53c59f1c3d4e6ca5f3567bb8fd6fc051cda2430a4a9baa0e873383674a95bb142d881565eef5d83099b37eaf894340de857c2d1d47935550b3fde8109c2ee2a27d8132d3a25782b23b6a418fa755405 -2a9cbc949aa4646486bcccaf1805d4ef1bec6251f6066e84f9bf7d830fff27181bf1ca859f1b9aabd35effd56f3fd938e8fc72b5a6c4721b1f41964cebb1ed2b5cb03b23aaf1c9b3686b2d92b0869f8f4c7c6d7d338a21772834733d04d1e525d33ccb5aab8addff260cbe2f90986be49cdba187f700aac4c658b5e28222341a -aa90fe44c58074d17245261fc0996f655cc286fc2c9d9553b1cd9a40fafd6c16269036024f0fb68a44e6d513126b420fd16a5e757bf5de4ad83ec71976a910024d823a13fd7e5f0c8172dc502dc3bf38c7ac3886699642a35b9140781a554c027ca51fe1a85927d2d6a098facb82de2b2136a458783b0f544a3f11931e9d6419 -832670cb687b68a5c21027d8fb6fc2da5f50cfe42c364091e7e65151e26b0c075bd7541dd656943e925a831bf3afe69e02c5e17767a2965a36210ad06a9fb124961546beffd00d2a56e58922108004d686d4e3a7a230ac55465eabba170a171912db6fd31f02fce27c120b302ff7bce5f1b2f741c3cde61ead4a414bdc4c4514 -acc6bff822047be36bf71660745d98b691f9a38883153da18db78cce1a5a0e150a0b6ea4804bb213dd2580da31548bee57e99252301352da110d9f54441c4a0c02fa418e1e707151e11587aba2ac6925b9148829656fca09d4c46c02a873a81d94d67f3b759beef9cc1ee068f0b0a4f63b1a281cadb5d6c41bae8f9d3cbf631a -a07b79d6e1a72b4da0334f7c510b47d2ae13ffe4d9ac22db80c2b855c863b22417d0ae3a473197e01aef98af89deae5b49ca25585951a16dd29d25bee8c98227332bb3cadb1a643f3e896e3179158004cc2f2d11c934e1918cb570baf3ed8622883658208d9e2881a9f4333baeea3b0ee8ad7508a5ed5d0818a931202f429202 -dc10d2245d3bec3097dc131ed1aa9d7c65757dfd0a6e9d0e56422cb476984422ef99c4a002b0962f64b17610e8496902d47a11fa47c62d6a4250fedbbd5f912d8a654ad4480787a406803562d6668bf6df92596917cc77b97425636a1c74cd05a78ef4970d122292701a5e2b3ea2d516095940e4ba068a4b0c693cf67d8c6104 -06c727cff2f1daf76c2ebab88d50a3982dbd9fd88cf7a1339599ff172ce70b1f528ac38aa4ebf778c6d998c6bd422c483e941586927e6d5c410dbeea977c6d2489f5eb6b7b5e30927b868a71d30919fef43271571860c33fb96734e9a5b85a2b92143c1285652b22d7e639887a47bc6fc6752e0f7c960abc1c4b6bd55ea18b22 -bf532592480c06a0f4892a88cec7a15f70af4d339ae7e1b6dcd6ad79f75fd529307b7d0c6b4bb26b5f6c66ecc780bf1c346022f2cc934625b364891f77adbe0439ae91cba398443218f9ceb991ad2fd9a138461850b5c2505fb72e64e804bf15265a94b270b100bf2782eeb669aa57fbe73dd39a96addaab4e065c461f4caf19 -a911e527cb0819f851ac4358d5eff90ff334f96d8ec98be3d5fc2c3dd37cae1fe8eaf84ba6e619aeb83aa0b329e99cea781bd55935b85290f7c0e86df41e4509be6d3f7dd3b36499adfd94665659f62d0824fb68e23f703aa9b5c84028797710e78469d6a02066b904a67fe7419d639201667e725c2e51c6bfa6858a8748be08 -65497973683d85300c298444ed8c56922cc6c8ae85bc915950d87cd5d8c1661189e8d2262ba167c4d4a068ee186d7eef13fa01da53cef7c44203df3613d6db1f7ed097ed0b0b3e67e9e84b78e35d2944938ee1a72953ce7f04539aac1d6082189f2c54dac28c8e4ed412c1df1d42c6d4b7821e58764b6949cc6c7c205e13de13 -941d68b98e648c7a9b5635a39ab75057156b7602478eac7e7291c5be8e3911300376201d37da3f78ca5d3b0c50d08ea36d58843b9a008f05bb539c787959710943d034ac2072c46aa0ae87e865904cf80fb877287788c24564fc8dc17078fb2013b4889275fe7c6ce5c09474b951499e38b490cc864e2a059db6f93f4d34fa19 -916f9608a3cb0816785a3554bcc0b3abc6e2f2b6d74bc19a282ffab80c1e652bfdc591ae4ec4c27f53afff3a885aab7e554fd8636ca0d697acbff03af2525927e84ed3e633de925ab61eb6adcac6b77b56407a2f5cc7af4e414de6ac6156230c3bab6e614a29f8413c8f5f5e7e8b1b87e2767e94a775dbbf459f6b49e6675920 -533a175516d740defab8ad31124bbc74a1236258f8b07d6c0f87d09bcb249025553eb9a7907640058fb0906fc3997ec29c49f5d15f166b75b37b4255303b560bff357063dbc3145af803a3c5c2c5957f59b30f2984cff58232d5bdae6565db1120ad4b6344e11257cf7b98339ff0f83c1bd2a89a4d0a64b774200f60041f3412 -1f5213bb473fc7f4a98cd616f888fa45caae2303e0a6007271081bf6b4d5822fa2a6c0a0d8e91857fc2a19e5757fd70ca634ebae3b8498e72ed90e6c0711cc2fa76edb4eaecad7b56c415c32d92d9e9616e14dc0552f1ff3023fc8a4ab19b303675a6d6b13ce11285decf4bd03dc7c053e3f319289c83ef047d715d8d069aa15 -33c8c7dc7aa68c4fa924bbc30d9c8aa283cfd0289b47c37f1f71e15212c4442574d2b1fb504f1fff3912a676e8f9aa84b29ea9c312cb6fa490d7511ab590260d102ed356b4aff96997cc12d30834d537c465cb0eee019e166578e33fe7d63e267f43c93fca54ad69ea5fcb3c6f33f78275e8415269dda7835d5892d1141ce52d -89d45a9098346ddca608937c0449239bb64ff761fa4f356fd0c0545fc6ff282ad17706ca0dac4298d4c36698b9955c75797de91782ff0c2d4091f9648bf85516cddb04ca9a5e0fb3b3ace2a7d09aba35a315587b167830d17f135780ba81f329ba2a7fd03931d424b9ee4fa5bbdd8816be0f98d8d67af2f3738894a45ab6e01f -f6fa280bdb0bc32cb1784df7f013108a8537fb535c19d2c951c821c13a8e4902511c90dd1d5eb2e3915f0732f681558e2336cbcbea271c68391c41d87475a305e364bf44d7acc2a6c291d4f32281a7ec0b6c25baef5ab9577ce6cab386b1e7114619744694aba4b6926342eed6249ca6c218c45aaebb05528a76c81eb2a30f24 -a28b0b3d381b2af2485b5cfbed204e3e945a4fdaf145101c5cac99981096f80d9594c567e190ddf34ee41fb5106ffa05cdaf38d921e4031e474b4bf7169fa81259f98e2bdd26cf91d2d3991504bb860211a10b56e4c0b7a0f745e014f3bccd07ae388447e2cbaf045887dd69b44191eaa3fa4626d0e6d08108cbd8a4fede830c -2e5a8b49cde1f3b383cbb7217c8b784972f32c13f1499b394c11b40c6fdc1e283e1c5de4450cd0641029160da7fef1c683517625e6a4c42a5b3545858bce6e2689f5e316d976723f4512a61180b5d2b2a002f4db98e078d9b052b2e2d225482f4228725e277af45bcbd7a0b804cef3aa0fdf48c5e2b7afdbe07f829ecbfa491e -c85830bbdf0e5ff315cb979131fdbd0f5f614bef992dc3dfbd9d6543fcc036206d1df9a3cde0a89561450ef81259cafe69e328daccf275fffc10b840b01f910aedb190da570245fe92396e7381e223626b5e96dec5dc324c7129c77a57f6a81bea8219bbeb9fce69b45ae77b8eccc28fa3328796d40de8cf9e71613776bd2f18 -3408812f5b9e81ee7fcc78ba38bc1eba9c3d9626a1979d8c47280d477301d21ff10ed4a3bd42724f2516b90c508ca46f4ff0111c6f1f622fc786eca476d0b629a63f8314b8d164155b3ec6a109dee308c335e8629a6b1aab73e753f9c30b2a0a2be4cf7b30f3ebecbef1161d8013792b6988557c68203186e378f7a7f7787f1e -6f2ee240ce49e307303863a7b1f8645c75ba2d625ba97b93e376732e15b0c628bd1df3e68dfbe92c954eeaa5fe7b293db5ac1cec10ba629645867e8bd5f0da1d2fe0f0ff720d13e1d63c8ab13c0eb9cfceee3d51492f0f782792a6a8757b7200ba55639eb925ee6249844a54eea980d9a6e9bc34cecc05d432eee26cbf43b720 -25ddfb63bcf1bf0e8cd5e78b175bca60123e2906f688e194cfc5505763e98f01e0630d28ebffc7cb59d5328719d1bb07a4e3167127849b176dadcd6484542c001a97ac8d5964ca0a24e04073d025469bc004c0f475be6fba0f0663afe990771b0032bfc9b238788ae474b2d0f940d82cff7f8d91f1b66a59dfc8f569ad4e741d -542dbf837b1d8c78ee1c33d4f71ea5652ad3b2784c8ed321d55a9366570e0e21beae7f7d9c5fc7a2ed3a02b6e25a85e2d96694371deffe3317840f69fb44412978614b0ca06ffefa765ff69a58ccd432bc65e8ece2c5b55dd602c90561958c07bb45ef13988bf210bf0c3150e7c02c614516a580389867ec2668cafe3344ce1d -667374cd3583f20f3ca24737f04028f56c89aeded45a7e824081716bdb5df5273b693bf73ebcef205531ce4ac8393eedc84b07ff052b41a06145cd4d98f6532f2de095e0f328fdd3c543324c4c9876a2230abe1986ffb8c79a508f7548bb33049caa6fad16621123fd9289f82ad7def2a1cffb4f0c8e5e639234b00fd6506520 -7f57e45bc2ea8c07de5fa138feb08a1069c4e1272c4d27b5002d0e47ea0e6f16b9faff3468ebb88e5e3cbf182ce24938d27bb88a530faa374b8900a3a7c0701ac0f4b3b24a77e612d9fa11a006bdac2e73092fdf592b44515962db8636ea3b25f2bbcecb44ee43cb491ee4c8021fa889cfa644f7d4cabea4612731fc4ac1270f -d220ddcaf8f5ff49beed34f6592c6de5f07fb80cb26a819bc54d6c403281100f6e000610e0f0aba096ed60ad625609c0992982e69fc00bc926135482ea9e00224314d362b0e48d47f34ed44a808ee69fe043097a5efcdd3bdf641fce05d5dd18fa6f2bdfed2b460342bd1b2da39b68d3b3ba470ae41b679545312c5df0f8781b -cbb18ec18e0d92a0575fe409f9e7971d0d67c778de1b50a9e54fa47dcfd6b61a10cea190fdf15562c2d37c0fd064a9b136dfb7cfef77af6824a7a8cc1d93782cf487f10251925479fd0d1a07dc9d04f7580fc810c5583105df97051a652cb41d25579690a290a21be5c47cb3951b9c3b24f627c1dd91428a7c96cdd95809cc0a -4d34815b72b137bbe8decc3b99ad7bfcb103903ce6f07ea1659e067bcbaa2c271c1cfe91a1ef74dd381c2e9f75df93d6b613201dfe876e47abec224748955d0d1f95eadbd11c0885d0ff3aeeb9821f41bc95381bcc72ea40c0d22a9cb7a77a0fabf6143c8cae3971e95923b9f1bdb86eedb6c623f65dbe11b748c8e7f35bb907 -40a6def6e4d0cbda4b04ff23a90184119a2e087a6ef8acd2f321137497c27d2c0930e46e18d35b9bbae227bc49caf22bfa3be17471fb8e6a1f004d931f20780426199c2f307a76ef242351d880d0c403c3c19acf41fcf64518d977ead7d0e50877121dec4d3df1d4029153c682aeb976cf3df1618020989560082ef7685c9828 -983ba2aa8d209762941f2968db9d6f058d4dfc711cc6e61e713f941e0b7d091992125110793c11ab3d46dd1c93c68561e8df26f66f297d887ff7370e479b2625227530c695abc92f3f2237820f7056d993620af637681320950976826cae032560cdc1ecb9cf28ce6213aa38d72d92dce1dadc7d0bd56090f6c02c21a892ec20 -403f2cbb0142e90182cd1e7617b412164f6ad7aab409572c4a3d0a454df7a028636ae17a67a5fe7a8d7f1483026d3b922aba2320315d547662b05950aab7060c1935a272dedbaf1c6065f7f71cea8a9eff3c7353ad86134eb017425d6fa7572bd738bb9b0b0e25dbd75c6858e8bc4e3ae077ed26527bbe9c1582720f2c27e207 -66568e9d44c149001ebe444f1b9c95af2414e5f509b1ace04dbdf9c348b6e41403f462455c704256e342e2a52b4a793baf4224b9993d8634b52ece64c54d5d06f782ed9774b37b7c1ae87427dbb192bbc6c3510b270c75ac8c52ce1246a4722e2c94f47a9d7f4367a288d31bb2b24e4f1d4deb6804283d97a4bbd2ef39b07821 -890c2360f6117fb9d0eb50943caa10ab6396e8161763aa9b6dfb7204637b802a272f0abcb6405c494e297cfb02b34d94140dbd13a4b0005ecf41842971c7dc18158a7a2e65dfc7581e10bf7c35a2e4616496c074a6a1a533526fe3f60c8ce907cf3c5709167161000d014da797da36e74c90363b43cfc199a0f3832af879a008 -6c08555893db9864fcbdd4aa896b4b60b8939301fc6458d4af9452b30fdbfa04000c7c49559aa05bf2a5a7b2f6df20bc3e6aab81d2956a8fd6ed2567545bea104b1414729106da67871a4a2cd4f4b6f9f7b557cd3e5289dda2928dcbb10a571258fa0a93b353d085fda2b6572b7c5b939567b916b6cf07e46db5bca201431e06 -aeaa0b5b60a960be49fb57860f6d6feeca87ce3b4f7e9f1f8a6df9d0961fa70c1b633c5fccbcf51112d1935bbf22642c084deacce739fae39cefc38c949641160518fcf3b47620cb5c381d8168869ecbefe46fa695a20ee9c906200ee0721e10c23675f7f15dfbe53752aa203ba2d27879481f12db80626b43c46484f5faec22 -c59558451a872ee28dbc0186bac4e315f504c215ddec35a0593e008160bec4056843817afa9018affab4b3e3953306a3870dcd6968e72e6b6ec51dd915f7fd18341b444c20047ecee324a9db098b2d637955293a06467e85d63436627ffe641203bb3023323781c8446c78da805601bd91602c606baea9b9f40ea4c3a5c74d26 -c0cd7e25c670566d431398d9d07d0ad4815a1d2e05b1d6cfb2f387a8db82f803bc7810186ada7c6ace0ff765e5e242cb9258291e01c988ac8d41149300a22d0ef4709ebeea2967d99bc6537e0f91df5101e3803a5cc2f697e18425717b8380028a1e7588dbaa40ecf65da64a07c19d46d7fdff78692c7051a082b057691d6f18 -9e5d5b36768f86aa56354b359ef3c53952def78556ad844b2c0dcbe440e2361f81e4e6edbc89c431aca6de89cbafec94c66f93109ac781d834f366f8cc039e0adf4ca04651db45744c7dc8cd86b57ea229c811c8bba7781370f59899dd181c1ad43576a39e84fd3065ec3fd2b6c6e14d52448294c2ae7da2b81bfcc31867a301 -b0236473230edc0a60a5f1c8af17af827b79b6c39dedb8e2c545e9858bdf0804afc7e65ca018e97b667987a817625bac5f341d60c1170059a634e20adbab130376635039e9c6b4907c6aa68d78a43aa27fb404ef45ff2ee51390c27a144c8c147b861c947ff1d3dc5d98e22008d6532199720f4db2dfbc5308af8914d77fc60e -c01700cd53e929475985d167a1374b1be597fe30f82e2719a619240f3696010406d4de36b93703729ec0ba5e2491ad76870a4e46cc1f3834766604830426a7018f9172305ef89f792bf0fa33cd7d51086c1683396dbb39475f105b5c3e2c6a1370e61fccb2d1f09f17e3a3209ad402336930c870791d53872a5aaaf8cb88fb03 -b1cd67c75a2bf9f1d5dcaa10a14a919c5b04ca05105706761ebf134ab68c242ee44bfdd8696ca74a533a67cef94ade21167cb6d31d5f1d88832c49a13f648b22832f1bdf5ad972c54d693e0e4888d36c0a721802f0cf55ef2e2a6440aa0efb2e9b4d1c29490d6269ed88069ca8f93b336ea78548877280c56f093e53d6f3eb0b -06956b80c347506ad156ccf4f4f746e996a9b8907be9fc82726f195e7535a91995dcc6eb919a623f484e3d03065a46ab13b0d757a91e22ad7359bc7912df2e115b29139892a0c387a15e7679bdb621018d3ed06120f82ee6326180de6cefbe0c09c03cbda3691397d908d7fa1bc1f0f605a2e35044c1a364a0cce66f8ad8370e -a11279f8ca38e82f149833e59612faf243462ebf0a2a471c8ac09367a29872285fcf21bc4b201104f3a99ee2ef3575b9b6b9ba9d13cc2efc01dcebba0a20a1050937690cefcd31993bfc52cf2ed40e3bff0edac202cbe1c91f3d95b1eed6c906326ce893b1d2d16c185988597f059f7d740553c09d01c9a0eccef29a6145552b -5e3e1a82ca160e7661d79bb9c243bede596f6f8e4e16c3606c637a0fea95490349ab18f3003705be06e0a786a827be7f3d126a8a090cb116a04c878f4b3496191eb8378a569f650a45690efb979e12d20eb8b3f4b6cf5c334026db2503470d015a17463826958178b69f1348c7e11316261c3775470177d3a38f309054069915 -6ea874d8816466f3653418814d3388e7c445b4ac0236419511c971d3b09aba2639a0addba520dab29813b265b50fbe00b71926d6510fac5dbcc9fc7705b3fc0cb261021175117df76b0b7ed26fab7a92b55e7559259f1edc788583340adaa514ac69be8133ffd0d0a5b68cdd1074dc7ee3c841aacd2e177905c14f94e2e2251d -85e81c5f15200a89843fbc9081fc452325238856d7ba0194b73f6e0c6c53f92f0ebc2135520eecb671809c5b18a913c54eed3c7d621042bbfbe2093465fb39196d3eba40a4582c18d69f0be262379ccaa0c39f696314c2fd9b7364a01147b324973f50d954240a75c0fa2e018f9a14473141884b516c62f2b224cdadefbaaf02 -05a1de3a64713c43af94eb57a52ff720b07b25e7e25f4f8926221ec32ff9ba1688689efc58813e84ab3796fb55899c6db275fc5f3eeab7e7bae1bdaaf411581b43156f54dcb8653c510544a09239a1c161f1cfee388a0078ebc3bef06cff5c18b8f2138180ff4e46cb42d67dccf6d338061fdf14673e562a5e06f97cb116e119 -7ebd6a701107efc5804f7d5735a221e0bc4230b1c5d4b365d6d05178846f5512ae5e3cb2ea372611886d88679d0408298b14576532d4c2f8c6bc21ce75fd9210b6b30612e68d39789adb7676ce08c5c57a9598dbe42bd75ce6fc362ab4e23d0725a1482048318d36212190c0f26a7bf69509c346ff4ce8b8456e3a32962c480f -ab3084305f407f0264c6783aa3c8183cf8101875efbd06a181745a8d36fe2a29e9578890eb46f8b5826e850f050390edc2582fc25d522c2bba62907d3391db27197a165672e1860543f71ae9543b0ca7f3b4d1eb969478af75b2f2ca94a94326333d9e2901bca1efe3968f13e744eda1aaeebb16e4a00cc9fb454c37488eea2a -d43abb2c5d04dab4294a44019ad51116340649be1bb79a9094783f32ab6de60d553d8203ad8b7af8e7b0f03e3e4f05a0c0197f719e9041f9fe6c36bb8d8cac0617c3a9219973b080a04f3da00c81ce7ab36ca2b06cbe9d84ea98cccadd554e21048f4cfb5ee7127bbea2c1c8f9bbcbe459a8e803367472cdaa6826d423659e10 -fca353aed6834e9b72c7c06f56483a1a5813e7a33c1215691c22285f85c333096adfd978c35b17716b7299ef54c6c733dd54aba3d61509bc7c33502431e9c82b55f8a4d796ba5de2d4aa8d9f32318a606262a099473ab61ff71970bca4c27419575b92e706a38852154f2b8e0ac771f99c8cb08c7f30a499e4dd6bc672220605 -9d23769ba65e350c40f1cb9a86dab40a29e6fb8681f3a9d8959586055afe2204dcbedcf977a26a3fdd1da783f589432f96aa4904cc2796a94cd5127f59e17a1ca21ec209fee7507f29ed6ee52d7bf00f99e339a331270fc189339c7ac1e2d62a9f6600d47db4fc4d1427973b3fa07f360dd99211270d76555505f943d0740713 -c45522588dd8d276f526ca75a8526096ae71bf48d27f29a4e947568ecc89ad26fc59766f74ca61f39b13ed481a28ce36ea6c9689658e10a3a770a255bcfc751fa93ba483136ac7f372c96ef72d3deeef01fec081d87005775e97bd212199072610b253346cda925fd7b3c48ec489d55c564a6bf7efd00f9ac53677e38f2a9b2b -6c8c2eeb51f81f8992952db242177754431696d9a5ee81d8de2a0494728fa916013f0300ce9141ec963a7fd6d85b199ecfba364c2c2b8848aed2b75842e5320ace66a6a25aac9e0ac1b27bca5b8274d4eae330a5e032dc53057d0aaf15c646290877e27fc9630b48d03d84245679a665a466cb9bbf4ae6f411de3270c3160823 -472be67786a722de8088a19ccb18c72c486d1d2ad02d0d93b315a596cc48ba26051d434a9fc3b845b5ebdfdbc06d5d83acff16654d1ad1e0971f45da0177fa027a1f4d3e1ff510b92a2a22c9743c59dae221a8bbb106ed94fc8ee3e3e3688d29f80d59d2286f40a984732c9be1776d5a34f05686c7f875f1ae765571e6587d2b -bc6a6fac4ecaa282b1b0ac4780149837e14da5f866e367b1263288e46bd812011ea2dd32a19ca538e2cfa311390bf1d84df459e64c0e4044dad9b455a0c5c9293cc5dc9c7fc0005d8935b26200759cee599512fb5b0a0d4d328916b94cabd808ee9322221e5f52c561d0b463d2326a4a6cee632d4e7c8ae16e92b5d0fdac2e2d -9a6263abc223de228c3982bd0553a0ede59bc33720a5bfdae106e5a069bfff2d58b629eca63ebc47ee7a9a10fc180bb92ef3386ca4bcd24c7916556b5ab9cd0a6cc120e24f20354edd31748974bbb8b9d178c88ba6261b1bcde4e2cbb65d4018c415741cec757a1137de6cb6dbac9d5e0dec8f4b5a89ec3d798c1e3933e5202d -b2ed547d3c32ee9b63a97d6ba7a6794ce682e59fbe47e45d1b1feece697a4525399108ac6c904e507c4f3b7ab2cbd104ee735db9dc517922191364303e059a127ab697bd24cee3b3b9a03c4942d9cb08e8e651bde5497acb36f62b017e0b510666be939aeaaa81f30092f33d8f3726d58422f43756680b67e1e953dbc97e5517 -5a9a6754f34d769a6abc01537a7c2ec2c816ff898480024f76dc6d4571558c13d24f96069b73d704152769da6b516cd59b3f407ccf18f5e5a5438c86851df0256583b502b52e1774908b6de58eb3c1660a240e47bb82322b0d1adbbe19ebfc1f81767a0d8120f713e2710e32da9a9a90c50c6e0e727e327ada6304295be9f805 -8c137ca71fa049b9c08fbc98abeb0cdc46abc599ea73b5fedaf17b6122484d23320d48b0df329c2d83e021d2e803090daf6e24d489cadd7fab94ff0e72bd222bc8c26b01fba2f09139fe22843bcdc32997b538c0cf619798c327d54ec8811207d8ce7f703b5cf0759e48f2e3cae6185d7fac9aaf1131bc00eda1415baaf25707 -cb3b7327e131fb91286ccc1551efba2a1c3b7cc7fd3293f07d1f55560dfd0b01e09e05d42f969cc1c2fb90bc98349c5bad2f87c121b6b373da3f0400f1aa670373d10796c89cc88f83271329a0b9200ea68efdf444a72e3877708c8d46517f007312297e8a6a47de46605fcaea630e02f948bea9774aee58f16f751ce170631b -ccd33c171fe44be645e2f5c6c93fcb2d14490facf67598cd0a8beae462ae0109eedf61f25ec86154189b7955077950e0d3ec0c8b2a5d06834f95c53ca7f11c088fc3c3c13518b8c9b0c09001a39bd8571574e009cd687ad923920937a9dd1f27e3fc6176565a0934d910380fb4da968668b56be0fb90c91e110f15a56a45851b -0ae1bd450543695ae73b3ee2ceb344d6114ebcd17aa23313af0856701f313c139bf8fd326920f8ef7a4c772bafa9fa8b8cb4ba3e4bda0ba96869fc100af8501c2ddfc27b1ca5019f91d3715c0bea14103f292bc6c29b838b40fa538c9d48f41b0beca91dfe4af53a056daed5bf058c73e998770b8a7349fab56ffb8c59e2170f -214a96d444f77b6613a65e8f4ad0296f065fd5ef8781251be1088e73c903ff2b0f5f8e819aa74111f354a58f6db11e4cae2a6d37948fc0bffbfd20019de79a082f63f3ea3406cd73eb85a1ea402cbb728bb4ef70808f6aaad9c90d346e3bde0a44bd5448e690aae51b433d37fa4a1283effdbe5007dc920958bc988389dd5e08 -2598a29f8077056e4ecaca49e1ff099ac628d75d5c8809f338327fe9ac6f8d2f4322f0641125ea9758f40e7a1b0cbd450bfcb9b2873ea6aaf5c6c854d972db0310d8850a2ec9cd2d984590b447ec2d103f66c9f4f4cc6944bd8200db48ca430d9435d4e1618e7ddece42803e405967ea0a0bd165be62da0915adad9a7fe5670a -8ee956a18bd7bc3de5a891ddfcacd411f44a7e4b40e69ae4c5ec029c6615362495229fe91e3ae69c62da50d07d8f39bc68de2df484b0118f5ee6149f016c630b3dffd4099bd58128f0c24c165f2583e235a436d63d32b6f6317be734df0c502a58bbee0a409427b1fb61e7462ea076093a7434911e533f4d627a5adadd61c82b -0ab0c7d9c3e440c1cf7124d9fe095d9a8e7b4a5b8339963f6135262128171c0f6b16a2d3aa0315f44aff9a827fe426e6450d900d10c8d5fe02de93ecd3e41f22007ae62e736126657753f45b84ae98e3e49c917632fad8b67a318dc92f15ca1760a78122abbc58b61747ebe544a0ce04515f78688288eb8ab7cb604f7acd5228 -ae3e7c054ce9e2ddb5bb01404795847df10a27601d35c81f7630a04cb2eade08514af96c06a06797abc32366a54e209d10667afd5037cef331f44c5e7139ed177efba5eb88f4ad2df1b3ff1a690862da02d6a84cb6a0a77e7845217db3185908ecca4b16c48eefc7acc2d629c82eeed6b53da36ee0b009706d9e9e862a32711c -656632e0da28f426986e8add52f897e160e3dda89974667b54ed39107c3723057aab29d293808f25c495089b9da9471b91386106d733958795e37e569a401904a11c99875e5f4bc1375ad1e1b7b934ebd8464c21371f31a5b9ebd851a1918921bd66f472d68c55454609fc47c6e4c565c49b6d1747699924f293542481ab2c1b -9f7b2f0f261c953e9e5d14cc52df308cae66f7c2fb485591c6ce24f79d7f3805c6dbc6ca0169605f30d93d57a8467bd6bfb902240312f509010c846c56f129041c1f8e0799a6fd72b77d003f99f55bb9089a1da7377e4eb8a2ae5f4d40608a29760571cdaad7adb78ac44f97a082a34720710e3b61059498d16da5549d440a01 -e0cbfec551106ac10c7ebd31adf4fa8d777555b50d8e7c74b8e7e41de9c9cf0f8bf3030715ba04b43c9c80b1b3f5a19528d33b9401107b62d22e24927f9ae62b8e73862272cf453cd53c64016f895d4f15d4803d4ad1ecd06d1e0f4baca5c42806781803368389250d23ba0d564ec9de00420ca7e570dd0511bc0ed121f97f03 -12c7f08b769ef0e72acab285441bcd75d75484d38a60e63d39e48aee80b74302d665b40430049d362c718c61200d2988179f8342685a252e9c741b4f5a0832208a5873d04850dee7593d827c19b917d595016b063b861363252b74e4e632060b52840a01e018602c7152489e0c37f630aa52836997046137b5967d6d5639eb27 -1f4e74ff7cbcfa3df1b5afbee3dce2f16e8fa225e2eced363bf554e6c28f6301b44a420985b2193011c966d5b94df8f788e8802ca7ff5acfa363947da47d672923adbca4fb02e00db90ce3e0d5e3c91465b7fd76867e530ebe670805c236040dd98395eb52ca4d15d9a8ddd697822bf0c8eb27444e078316e836fe5eccceee25 -68f7ea37cb64c41cbc900fa449b62b4a53e62de84242931dd24d49a01c91c515e110d3353cc3ac3b7ddff971a4b39dd34bf975a61c4735ea0f3742eb688a2b0a660d55b9cee54a703355ac762163ffc43be3df60360186b08b06a0bed68c3b21ee20f602859ffadb373c825f0bef3a33d041975382c7ad29b091e1eaa0e95f1f -a6952987d06daebc050b735a223785c13f1efa483f32ecaaeddf215b82f3b90818dc28af52cabe0ea90bfdf50ec49777c2e45580acf699583bdf837023572601dbf7cb6080de59c48d12a4da83bb65578ee3683ecb49ac2d10e3a38358d36f0ae27b8269758e365329fb32ac62a1799316d55da0768f67dcd1a2ac1ac214e309 -2dd49c86a24e93d9d4be5739ce5c686b17720e5bbca62477c6685612d634282fab940e35167ec35c99a31590752ce7753ea5af8debf2ae65bb00fb31c8380a24b65139cde855f2b1cc86e7f542effaea78284a8547142a4defb77c6efc1e8b0227825cb7a3c5d94dbbeac6e1e05fa7b153451c68aaf09a45ca076a1da5bd362d -6f862c21dd6e47697d1ff430fa5be81b96848a6206f5c0421c6740e04f848926c6ebe70ffa29b88783b88a2207cd08b5615f850e3b3b45943cca35a84782d01c1be0e1b8ac9b0b782e6ca3b85793630098eff3a3eabb88c52cf1e4758e8b381bd89bdfcbd126ceb200017f97aa936e5214c7e4c0837162a50cc60e56561ddf0a -1b0b5eb6b076d8d2a79fe4b7c9e1aaa733c5821a7166110c081d46ff9abb771a3c93f45b3d41987fcb9014bf0b0acf77c34c55161687810a0fa34039ba58821441f54228cf0816317d84fc0df271b0a065e1720f27288f73d47364e688baa429a51fb8fd27deaa7f9a2b026230388e7f85e2c656b78db9f47b702ce46643e825 -df216c7aa9e68f50d1f620f95b554e00b9947857d4c6059ba5163d313ef36e099d4fcbacdc5e9359206c618125337313b0e32998593b159ed277b9c804acac1e5cb5140fd9e66949a249f20f3700a23d69f34847734d7faf9a31d92f27173a2971b03c0c4f7158bb155d97be8a26c73cc220b1edb712e83a3ac448fd18783e27 -9a5cb6772b4a90f7ce9a7ccd5bc4a1c8dffeff931a5df87c29e18f8e3159a4091f2c4c2f9ebab15df598fe9ab8b1edde41502eef0f217346e7323c5373b6952fc0d301462430c6829b922bc8740904e52247eaedc019a574a369845b34f1100b87f8e4044e18988a9a68395234dfa65836de4dc44d993dbde19fefbef5da2830 -3f885725dbdc436fa6f9401e0eb85b6a5c1595b8a8647f7f28d82c6cb4e6f10fbe0aac20984178d62878c920f8375254b1ebac3dad7683234f6b0aa6f4b7d503a9fc68b7b376876f1bc5de27ddbec03974818f01bf269a533d42c58100989f29232ac9a653a98e7e806c4cba8a6e53f8f0f67b426ed69d50a8da6320fa936c21 -3795a4c4b8cff3deeb040a087bd0b7575e23a47d7e78716b4cc339c3b9cbbe213245ae894152136a01a530f62fd2956e42eb31fe4ae95b6214e8d7edc978ae05173d46680dc6c91c78a296f9b77b04e1bbc2cc901cc5d28d2db5488277051b0215548abc46f0ea476229647056ce16a3791d199db3a648bcfab82a0d2fff750c -b7a9a1415be26ee340c9a693d2d6237f5032df0699719379a2203c27908e7b02756622844aa2df71c78c13e0bb24d56beed4ae1b6ec2986f11642d3d8e64e221cc7e926e5d239b85cb85eb53ea87b56a22d962fbd8e0f8f28150586b16ca2d017dcb5639158d1c0ff0dd431b3974b2ceb7077dcf60483463152536710907ea11 -2112d0b7857eeed8dde16deb41f1d024bd1a89bc7328d71121e638a95ac1e9225f704cccb16a1283bd9f988cb7459a58379a6824ba1f68432c430c443e1d0403a2967f5dccd2f37e5b5ba1db02113d68c0e960dc5462b289b92d20d092da5f26ecdf9b169adbe403d1e04561fa7e1151d664dd7bcf0ec21b9d4de8d0fde8f906 -601c8da29e0bc9aad8fdadaed5ed99af60005a2d2a75e8ebf4ca9eefd7e7f52a7dd123dc74204a4174df5a23ad2db389cbe31c033544620dd9caa8376e023d083e5705a3102dc0661b5998b54ddf522879d3bc8f615d0b98db5b7483a6f6db25ac213d591e4e00c07d80f429f41c32f3a9602c60f31fcef710b81fd17c617802 -43885902b86b8b6851339bd5435c071b59e65fa727111f2f9079f2ea26c9e02fb4c75e8912b59ea3409ce3a6cadad88ca253d7c72370f6d5717d5d91ae575717323f2f38f0e4526d6a24d6350de72ca68637861e7e8ecb59431544717fb482033d6e52c52e088d739d9065c808de0fe1639a7fd6569051c5cb7527b6b1ad890c -c3fae9a6266e40b6a79af44bbf749b7a1aa48e4ad41cf6ecadee4b46902cd92da4ee5b644bdc1278a4e4d6eaa93c50fba3770eec4b84805c3aea5d212a628927753b0fa86e58b14b78e7be302ab6735a99c391978d239e430dc0f68afa22e71035d4c42cbfb18211e45dab84da4d1942b63e9aa6fe953aeffd93d4cd86140715 -723d5e9a15a9a7d337f69f8d9d766352e2f75dffee8fdafd6bcd25d1b1f8542c4fafd6ba59765a0bc749c21fe7f1ee608957d9ff1143a031517d0d298620820479d119b4f5d7440c23bd7ee821113771557717af390c61438f404b524fe9e12c702ad63379541856e68f697e936758a82f7540f0a260a3c2f3ef476033588e14 -38291e0a1d28872e18ca61a0dfece232623e08be227e98a373f6286d04341522b28e26c1c64371c1ce5682fe184b76db0fc6d22a5f92e0ad1478a53d500af32defe67418ff57874d43c198cd501f619291d7e47c38e0101f945102b75324b0197624f02670e23433cb536034ecae338fb5024a2e1aaf0d849511d61a1cc9b72c -14ab2d4a1757b67c56539b48b206969747dda66b20913740b546e74fa46e2019e1e029a1952e2564cdd38520efb274cad4f251a2c97dd8d73d5340d450b5b5239df586ed595784941c4647a84f16160bfc30c4dc02087e0a8a3467a643d9f513479658711702cd019ee403f929aef6a3fdfabb812f72316f0ccdc527cb89c50e -fd3a68098ac290e9584e4e505598673843717297316201ef393f8c6aecc21f308eb1fc10a18e315d97b7c2b62ed024b3c9f08bd21d19e207413ec565303641007d05b400fdbc3209edb32315b16d3c8c53fe33f40137abedc055a56c14791609766899f62e89f415318f187a4a884fbf1ba3a718b61643b85678ee519bdabb27 -00aff76cf2331f2e77fb1564b1eace9315496e4594694fefb2bf16495b97a310d90503d3cc3feba4762764f6da8525f87a2c4f749cb56784033139c8c01fc622a06edea04d94851a69317e7e0ea1512009bc88e3f1fe51e3aeeef39ffa34a703963818d4ac84656bee94ce8edee61b8c20e01eac276b93c0ebe0833665aa3728 -595cb99bbae68f0283537fb15c2eaa49a0c311fa310f93346867bcceb3f0e2127150ac77824f41c5889524d80bf148a1a21c0b62047d155eb69025e515b31913e274658ed1a11fc3fed19ed072ce88be78466e04377a13bfb5b96121eebba712fbbd4b751b45f7f04ea8cc76caf8b5b1531a8971c989e05c0a79e7f0f7625110 -78361b7b76ba5c74adefe0d750a879c6e4828210e689c319901c2c127a8c30272a0fd75e21b23496371db948d86932a067bdbdd2c75711a7d13253299b97a0113bd0e4c721f2bc71832459130eb334baf2433f02739a17028ab5c390f6ca1f11a552a90656c7d5171a54b428ca5eb142caa4f36328859b2a8e92a546cdf09722 -69a1e2ac3e724e438361f063c0b009a7541314700b6bda556b6e3faeec9aa2003e1a1e4291d5adcd0d58c8711083e91dcd6cc3627db8da01bf9e9bcaa0ae5e14b97452025bda6c8dd66a002833704d4fb720b7b2eb9693c84257e5ac1d01582d9a62bb5406c9b432ef7ac5adcf3b068d0d977c4a54e1822d9f99845f236c9324 -5f398db021fd478f9aaae14385767c3fa94f023641883fdae92a5f3a3e4954292716ed249bd824e24f34f6010020e2426fa6bbdca2638bc61f73efb10c9a81209fb80b10ca52da2a15b2cd0022a7d8e0e6988aa7f3d3f09c5e55799c8e716e236f725136a1c2bd92765c80b104deeb2dab371d3d28b3d0ff35cc3d9f9bf78127 -f5863faee11bfab854221e62baff7d7c3839c073bac2564c1a8675dacaf2670ece9fa555bd952c7dfa36b9cbcdde92c99684702da1d87c04031506cac865a911433e2b7eae56e4308556713b6aedcf087b99cd0ed4b5433eda0ce792d4a43505af56a1a4e787d8d97b28cfb78e2c281682af0b509afe0b736274c0938c7f6f1d -e738ca70c8df051d7403071d57e1e758382225d5d850fc853cc24eaec04ed820e21a934bc2cfdf220a72fe957871f9f8e30160fcf972966c092496f12a411f1451c007913aa346c408fc5a33a82fcfa10240745471aa2558c2add4d8ffb96b1b5b2628f70bd926b65004f23307d7871de5d493bbb28ff8ea6fa96b9e94b76304 -52f1b6de8c63220e41c033d3e2894ea7af3e1c62401119ddd108f17829be1e1ee7653ea205928ae55d9172d392d00593350be3c2b8b20c01906e1512548a7929b6220e1e8cde83cde0c854436e6a1de70ea93beec31bdfcdec275871d263ce192bd6f06e34ac0d30e279091fd335ab9cb53d61c1694822a066fb1ead6e1a072d -bd600a17929b062351d6b415cabcd6976988d4eaaa2f76cf2456357cf33fa90e80660832da278d0db008aab6ba28eed5b03dfdb02686a17c93c610bb94f7d311280b3d9f9fe7ec135bc95657072ff86047e03bd7323228d1abd9816ee3e25c1d3f6917603546a8484bc2c0fd7f1a5cb3f4feb1bc49cb6ef4ba482002be678f1b -f8d0e47d2c5813672c62539dfff42f472b880e0bbe1e565a04b414e595404d307853aba1c6863a4f5a2678c308e4166b6a98d3cda2d9fe8299a6693ad975bd101eafb6316824ed814e9da654e3b67536c74d76588ab4673b768c896a9fad49160c6e91c1b4fb534e1b6207bf529984c30f5a70fdcc03795c798b4aee99c0a42a -e5347882ac0d615c23fdef3b9c6d6a4f4604e2520603fcbe2ac471037fab7e18ed04b1579a9a30d20a1e0e7894156f57f6f306d38b975cce052ab6f9d64aef2496167c05d62de4a692610faa425a1e1ded7a7f8ec0c2be470663f9a1c81d112d157eb2755b4ca77d1b55070fe97c3918646bd7821ff1f3c04d49eb4328bd2d12 -47649d77ea713954cdd4ad69b1fa13ac21e0b52b84b2a5cda6b76f890bdc0823c6ff979144ce6dd45f5e57154f22c006ee0b361f667f437ec9d3ce3eb25f451ca989865429f76f1ef0a824e0f77a532d6597d511f16ea44de3a3e5e66da4c71ea58dfaec3e4a6486c90f2771062685d9d082939c7194d30c4a1a47d66479ea23 -c47f1634efecdc590dc1b7ad7b44d3d597a86b2bf7cfab01a89af51c9f671213dd3f68fbd09c0ab0e0bcaadb2f8178d58eb51bc930d71a82f8b11a48e69d4010fa9d837c65417671fe2841cb61be9412b7cef57cd052b2702f4437327c523e183f1a0c267e7e08e1d6a684e496f700f94e72983ba37fb33d0bb26d0aab385715 -c0eb37ffe11717162cda64a1c69cba7d4fb6d66be3f54239411d986f30ae50297313939f1b0293247c83bf8460eb043600b75a711be8cff74b756eb8bb42d72d7c75650bb8fb53a8e7be61f40bed3d27c4ed14b5e131b0a861ddd04e9520b61d4ab83cb44092e87d2624e978d7a7b2603483f400799099df3d6dad1eeda6792f -e995f1ff329c290a1fb5382a5b3baab3f5918f355aa3b47548211b3b79bf35047599a180c368303db2bb8dfb95f8892c5d1a69b6f1d62198cb7593d2c1a7bf2119cf15da8302ac59cdea2b52298b0ff01425022bc613b74440de5d445b466e032966af5d824c69126716032251bf7c4bb3ef7c444787884c81a42203ff8ad00c -5b5bbb0840dcb1bf903353435810b44b5ca8bf8aad2c1a392e89ec343456a216e02d7032038fedd7ccffa5544b8325d58b5c5daebf76700ec8622f40daafab20462bb2f8ee9172a4e67ea56072f001c9d258585f23d0acb81ab8e5c6d3525d06bb45073bd616f3f473fad2b2db0167b07025bf35ab15c1be17f30f7e30f68e12 -0bb6fa42542bad6699f398a70e729e0d07a85453b22f75480ccde66cae459f0c44854b26b3f64d2ecd0101fd85afd57b08ae3bb150f6813247679dabd6caaf0bcb7d1353871e45b6afad002708d507d35e43dc21e2f661e203ea0538cdd9651bed5b7fe10764bd4fef23635527f10cc2311b2c728f73d602e62166fc6025512d -6c170ce1f9e69b541d2d7c04307fafc75c1f38d719fa232903afc6ee71636011dd017b847bc46dc9b485f2ec26191e7c58b8d446c1d2e495da52814a6556340dd11d8b91f5ee64de6958b19b05bb5d1e17fbdb8412754c5d5e06a250ba758025fea473fb4f827470d69c8e9b0c6d98a0a07a3acbf38c9d3d633b8d6f78859a02 -5cd6cb44d08a919bd1bf4bc65b28514590a871d4597280c9780a29902679d41986c6cb10a714abf83e159dba5d44af486589fb1231166668f71b9652aec74b0f15e081428f62a3d07b34827c0b94d680feeabdb99e10291fbf53362bedf3ad2ca1f5af37570a37fc648bc1020ab39f88f69cda73b83fbc866d413710e548e824 -cc2128b1ebcee99e258ea6d585a0d16a987f0281ff575c818d97659ea497ef1cf64bf3f3773a1a0ee675a0102f623cfde0e761c03039a5a1e981c5fd22c874078f6ab8521fa6fc27983e25ade455242e2c8b126778c2b61f6a48fbdd55000f10adc7a76d4d0d4a1fe40bb7dd33c43c5e10de65c3abbe337b6be2170e32993110 -45e6e0db7bb7d0d468ea25ed171ef507300f42b68a934d67c9e2502256ff0b13386bb57ba52ca1df368d15cdbf34971def22a64618d40f030f4eb40dd50db01938492cdef2d8ce763d0a76bc88a28d708025af8e86b1833c10ed48a74826d328f7232f2609893b1cae9521ea29aa61f08f3d0a201ab000b9880f8f66fdaa5222 -0e096e9e255de2e65c78663d7728fabdb205f6262a50b8ee4724a8957b35e72a3544c62d1b9c556e8ce8361bbd3adfd2fa8a0e0b440368069fbb85fcf11a1411c9e4e0354c23c04ac399bf17f242d631a242a2c986ce51b5b955045263ac9509dfa291f9fdd8c89cd177f30931836fa59409a39a1fdc285cf3c79767966c8b2b -e064df809397274f3b414341b1ca50ac15c95509300eb344b1d1c9ed493d320d9d467ecb4ead1fbe5849bb413715d6cb2f7e85093c400f93371168ebcc086109be3b1be3e0fae61a0abbd5b9e050045ddf18cf6bd8bddcd528dc760b439af9191b5f48b2bdb7608f9397f0b73ae344efa1d6f8c2988208ecf87a9482ecfd4e2e -27af54c517dc405db935a871c25d7612c41dd2edcdb1f9ff458f2f679502e02078a200044eef3390b37e1dc44b9e0aa5f62f3f1e1632ea2ab4e119b13891ce1de52a89130a52bb220085816a8a70f3b405ffe1ee8f7b5afd22c8ff401c018b0888bb507fc539d867292f71e37a12e3fc60edfb27230b06bffe2ff377e142e509 -bbd7537ba3f149f5147f77a363aabc66131e05809871d425e1d357340286d503bea282e4cc34f72a0ce07685487feb0ad57f7bfb2057f01165e409041280342ed4668cda8febe5215d12655dfa9734c936fa456c934bb7a514b192e0c812ae2a783df6fb8095825a240910c06c33c230656f8e72eb8b38c081f89fe118814614 -a9927b58f52c6bda447715e90cd40cd4fd9321d69938162d30a36cc3106d532b6893aee9049f16b0b21edc81a70dba8a0affc14cc06016e1194e628cbdacc71f71efacbed760ae2ce979a424b332eae3dda6fd3d171a0afac2d34bcbad4ceb143c0c142b4bb785d83be2ecd2e5667890e6a6fcc05be4684fdccabf3b8d7a782c -7143bf4176e9c1d0449ab878072294d528009ba0cdde1938705ab3f4c0ef281290d56f6e7f8610f2f879d76e1d0049aad1bb665818cd5c6c046cb1328fc5a52f5cd838ab4c2838a91ff4473402e05f6d68209928f34d01dacc42667d98ac8e294eba7d0b0a066d6c7376b64a5e18787c21efbb53918f5f459224e7e06e874527 -5712636a0bfc3bcf2bb2ef3472ec63f229ddeb1bb68142c5258b388016d9a227d8be432552f5f71d3b01e0653191b5c146891c85eebae95c355d2a507e895e20d09c2e90075363b6217d960f55d39b57f2ec842103911c36507f15c20fc38728681cb76c0a573321041f5c9aabd4d4b6de8a1a9240638e324cb0d489fe269905 -ba1b67822af3d94348b199a64ea8aab386787746a96973fbbbba5348e6f41028c75850ec31f0bfb6ef903f946a9faf242d370d1231aa5dbd0f37847508c6f70204c0b897498ddd82c6384f022ec50448fee2cd284fa24b025dd83927e36a3e0a1ef20f943b5621d2c724df6994203609ed6dedc647decc5f979a5005d4264100 -0fd7ed0c7d32f466bcfc5e3d57e85b7c2046c461b040ae2683a591f34f04792a74a6d42f6cd991df7bfe95f25536c87c1d038d91c3d974f413b6c27c0482422b0438a1635de0be94514da1ec1a78063c7ceb9640bc466e64b2809fa95cfa0e25c77dd37ad69663550d3c53e1911460b460411b369400f6ab5b19c43232f36a2b -21425f1ee6c5cfa8b813bb3fc640b26dfed283ce93ea984bd8c70bb9cf3b27306ff103e95ea982f65d59425e59a62b98600da4bdd481c32ba4b7732114662c11c9ff4c9343e27ee5ba7ef134e60bbf1b0ab962b42544d03d7d2524e1b364e1186d026edcec69ac246af4781d19bf0a388549f3b799defa474cb85fffc33a031e -ade0a6a839de2fe3a204772d9a265020c75f2631201c13e81c72b0a0f8dd56296f6d2ee777081e4afcdfc50d3a1162ec42cfff96a336676f8b7234461dde901287f6f4a91ca861e2a928323f33e2e258239f78d885c9c24a56c185da3011e207fe35ef12128a46dadb3b5968f22876ff892fcdc576242250c8e816fca9394020 -c0796a29e3c469a4f3af19e35083b79c639da538a5edfe5d142641372e03da014bb03fecff6233b68f884aea5dba9ce9e491b0c44e651bd05b08135e2bd01110568a0048029a7ac2d11b4afd6f0e610cdae1ccbe1a4f4ce9121fee88583c4c1e2d522b3b32dc28b3a685d7fdbf6632ffe8ba8b97e4ae9ad170e202930556bd24 -99dc11c94d7f58f3094b1733597a2dafbe54f04a632290b7c32db207ec20d90507ee19df3def5d7d2c8662e2e5f85f09208bb1159e11b8ad26ed7ef8c19346198100caf07c7406f41fbee26c8502097247ff86d69d9f7966623d53c9a0ca5406b7be1a8af0b90acd8009de0696970c824f1fa9eb94675cca9af22f06f3a80523 -a8f6c75659933ab1563ecacf6e8644d7db5a2949a29dfda03ab0e94ff3794a2ca9511f6a75c257ce784e76c658dc8ea8a0a02dcf87b6d1685c8159ac98ec7c1ecdbffaab3a293c7ac243f1a507e1470d77c4c2b1dafa421d10ce201076051d019d108cc6b4c77827ddad53b4b5e520d4f135d4c297824a6f9b0c421fbe8f022f -7b7262b4f1db61b02ba2d884333eab8be1941cc639a7d537d575c097b401b806d8adc5119201ec8eadf5a08180d5984bcb0d4e050b7173c0f3ca7a2003e022036c48995cabb97c467539428af958e18c93614502c6c50b6687e489141ddd1a126ead48f36ddef6224304f82f0bbca86f80956959e8bc3b16eee9be485b2f7d21 -a3d32bcce4e1ab5681d1975b332cbd029be9867c0add5ab1248741f50438c31bfcc2e8f9d06fa0c210edf1d347ed3ddb833fa90ed78cef5e5cc6eeb10799f40bb9dd90f7060cf9ae006323d94dae78b25fb314c6d6d196a181c485747dea0a098e2b63f10bdfde83a9dc8af5147cd84d49d7ea69b88a37b6dd9f7f0de2f14918 -45da94f46678a227e2f5188279cc9353fda2a40eb7bc3aee024518146c2bec03080cf2d49dafa11ebb424da0b7bbe7b32741434b567b19d5d4c0f43ca0caa62ba8f922c7c0afa20ce7075a1f931ade2c00b7402d00b6dc9892a3508bd53929233c78fcfba2f5c1b2de3306dade77731e50291889c14a0fd0c1abf8e68f302d1d -768d2e867cbefb487bae9bec633abfa42adf1800cf35d0862029b5fc1e8f4011c45e650c1b1751904deeac1ca37753e5d79c412099a4b35cea05cf97e5c69c20439ad05299df82e51b3a4b1c14cd3e2e3600e5f4cd39510be5c37c1c3f49cc2ff75e4bfec16c3d1d31a25d424439f3bd64b550cd7c67ab7d1247088943376c24 -ef78e30a6e24e3a7575eb68ead6c2de5eb04e02eaa1856b4b586195090e0d82756141649375d20d9fb737d22ca792323844e84483c8f21191d93dfe55b9a311d4e3694bc26274ede0b484d97b8264dd5a33daf47a4eae62b542cc5d9301422097b0580c9a793ae94bbaf0fea40f4bc3c253c0ddf3af8ef3913d8c06a69ad7d07 -e7c97f9b4c960ce3ce05672fbaa51ba786f03bb948f1855927c9e76c348ddb1c479713e0cc307632a64771ca3dd4c0efbd1edf0ad597ddd8491c02371b85eb22d5b10f0800c44813acfd2f671d9910d039337552a8f5093c88b994791a36c6271eb74d3ab0b01e6d7e507170f953dee2dbb44830e2315e2f3da6e1831fe43a25 -6de59e6990710f53876afbee966db73e31494e60f1e26bb43fac371408d6750ae515ccd1ae58145310ea6c7860c588ffbd0d21cbe3775038e0d4a0632ca39c04bbbc8c076b58fd5ce99f4563bb41d7602b3a20dea4fe32da742470448f8e4505902d1e8938f0c6a51e2bf6e370d6055bea4c11337a3fe6d064538ccfa97c8f0f -bb0a78cc69121911fc5bd18faf28808feac7aaa61ce7455715e50b8ab912ca189aaa6586a30c1f67dad6873dbbf8f9c9ae9fd4e83467668bf96df03c2557242e0c5b02b78326c67dcaeb66e194193c2d85fe229fe2a81549bcd96ffa2a83020d080b6994f9c72ae47797dbd88a1a4f22ef788c89752175087638b25e807e9623 -de5ba817e2df83fdb5cf654fd30f3f59e7c2d442945fe7c4d971bc7090fe14024c04531ad1b531e9ed85ab1e532638d95fcd7ebdedcd6ffe8c3c24421741721954a56a82dd9c438c142ecd9f34b51ae707a1ee1c3766e5627d58d86ae2a98a0dad33262f2c3eaef6f58082f55ac375b694f44a7b4fc10ebb593bf43755013023 -e671c66b87694dd04484c209e9ddc05cbdc2d4adb18be574d6a3af636cdc8e0f9a9a255439e1e18670481a77e7408a9f6212bea0b51bf72cf647dbd03ce4540c0634d891dd5f8b811c779c8d9853fcc4a09c8579b834f994865818b47c41c50ece2106564a1df7bc515e9b59defebd19431dd3114e2d391be8ecc23585262e1f -6fc818c66903c1112d8091efa7f57f137ceda668289d7b17f39f923bdab2d20e02161141fe0a9918177477549c6354ddf4c9b42782fcce671aa915589c71e81482458142e03814a9b9c79d27c1ca4d3211674564a02ccc2503bda37d3e172c2f454ad81c935a0855927c393fb3f3651d8c7b814d9c045d3373dd309a0599ae2a -e8b89ca8b854b50d518b18180e6ede99dd12e7ccc3cb0c3a6d495b64f46f5a123ff0e19759e5b3ae8078c919e776ce9139be455bfed0f2d165a9dd8274896f2fc8e94de9030434cfc63e98f361ce0671eb1411a5eec230f7ad7455418ba6101569042756a3f86787c7b1ec503a9c621aa4f8abceea29f57a455611b6a0875e02 -d47fd99e8c8de1686c6f9e96a5efa1b3b26f762c574808685d35b5352a04f82bd923ad79b685c3200103fd089b760d10527f072a74a0b5a4f9e96c0aa51d0912b8622346fd4b9e73b30c77179aa5ae56351f5f0d7dfaad0f87272f4272b79716a7f064eb33d71a41c7f124d96fc2d77932bfe3c4beb288006d1d22d59e900301 -1d391d7f45bdd19324ca9d2124a39e4280daa2b8c83f9c28c24efd2b3d51e21bfae85e0a0343f9758c5224227b40df863095c00208543fa02baec1c0a14c11255643dac7783a24e469103987daf91536c39e83072b78488747fa8759dbfcf62156c7b34f4f184f6bb7dd9955337ad584a40a3678fbc8746ca174e0f305f55708 -0305b780b344045128b2024d9d2d574a7cfae35e0281872e9c6065dea4952408f73ba780b5acda5ffbd98417f8cbbb3bbd1b8b9c96c3efc62d0db8817028e1009805403fd660a6ffdbe616e350b7fc7582ebcb5a5db2f2d53a5277cadd49bf11cbde86ec2b1967af7cbd1af9c29b88942e6ec09ae70f62ea61d33d997566b10d -e951df262d3b4c81d3c671761e0415c3e8db319383ade86845f2c90d179c2d12252dae23be26ec50d381494414e82bdc40e73b50b3f78d75fbce0595c0975f1625d824eed2a1334d309803e332a1375568c077d048bbb677566cc6dc9796bd1d8c9131f5309a7fca8aba8203b5ea87bdf9fe39da5b4d5ab4ae97d13030ca1316 -04aa27bf4a1e82f5c10d2c96262a3d794ba0d836add0a2ae7a9ce5d7a472e905a5ccf9aec0bc6eaf02ab693c1a2f706adc0322132bedf7fd350d1c12a9a2291588c38568e3f432823298294f96e6d047375821165d038590d250813c85b8582938826d39263a6a272fa530eac115b205ed6ac96fef9100b01c12e96bda77701f -bcae8a5a05e0b0dbd5ff69a1ef51b06fd5a86bc7dda2fad2fb23306584ec1c0a25aed6d9af474d3daa16d79cd56f9307bae4a951c2db0af931a877c1c781df1f66663c2f54dfe37660adee6628f6706fc763998886d05a2b915a65a8d6c4b60daee5db5504ae8c3cf2e2b2b56c7e10ef8418c42550871209dde05b1852c1e223 -37eef521ff9d0d85c63791ce983bfa3f0b371be8987e9130e84d8b53c33c621d596f2a47fde2c58c96a34a4cc0dea3bc2908ae9259adc2c78a02834beaae2f1632ba6ab768bddd928b0066e90f81f0e552764efb420f406a06895347d418c4222b8abf854e8166605c8dd17760ddbe5d6daf439ecde8127c57e73d5684e08c0d -6def106ad990943e2ecabad413b06afa4da80b0b1ed2c1a30bb5daf467cf021faf7dbbf65aee24a6c786f428f59ff996006c56e65d621a259a320336f0963d1ed93c3a2c75c77eecbd2f1127c2f06b2b569927d8258ef411c07d2ec9cd62c51d63bdd873647cd2bc05f6de51cc1f67a2156be2df0e7c54cddf148bef1b291728 -902d2fcd967007de48ded28f3ad27dcd2f997c071ea3183780064861f639fc136a5e7752e755c4c4182da936134c20489693db51fc65da16357e48f98ec44f2cfc65f8172c2cdaf8521a3d232538c8782a9cba7be3c8ed11688ee8dfe96d641f3ec247b58ab0adad726772925d1f1befeb21f699d5f44443bb5bf7b02e9d5d11 -31825caeabcdcbc0bae0f71e8ec10fdeb69d82a2ee0dab5ae2002da2c3fdc6177cb510624f9435fc6a57754f540d716b108dec79d8a32378e44398c47bc222133af9ca51ad5a479bd511303f05aa7e771f485f8407612a0fc09355cb329fb12e42639d6a59818eb665062b7ad142dcbdcc7d922e8b8c34937f854ee9ff0f670e -02d285b8df57fdbf0228c500b58687f5c2ae2136d2b813d40e9aecd2fe8dd629f69dfe10acfcd78e4fd90845c58fc19c129ea7de12e0a98a35fb9ed1222ffe0dd80e89f0bfad0ac55fed92db419b602d6a7872231ce865be1217634467c6f71f25a02de5eb5635301ed694b4f9d7edc539901fee38c2220ecccf4ea91dafc42c -bc99c6051b6469cd1d3c433b8ff35473aa55f662838f60fa57446d5dd989c027af9924f2d65bb4026565d60871b207b26b1c8a56feba072422c9d5efc633700d424e1deeeea4883ac15a356ea012a779d4b6de8402569be7a4a2c777728ce322d961f911712e54820f9e7cb8632dfa9bfcf986e757ca4745cf8fb382702c3225 -6d8407e1416633b6571feceb2d604bb45691b01bbaaac3701d85703fa4130313f02ce7abba4a9bf43555a457af4097c17c319b2a4c167f42121f4b1c534d4e250776e8e83182b334d5bc9e788661d91f409e8148382d4b27891ce715d8cbd5131dc94d1c3ac7c39d0579fdd23344d3a60a031c07eee28a4d2ca4a062ca8c360b -96b67c0a53b4291362e71e56bfd65d5f7a1f5b3b624f2779642d14fca1b63d0b8de59f8c8300c0f7c8778e362b53115a0f2f1eb96db3fd0f3357662650e97422c13ed2340687657f11dd576fbf589e59e26d6cf6d0bba1d683a711df4578601373fbaf5a434aa78eca3690265d61c4ed74fa82d48362f8ac0e6a2a84dcdc0613 -0e82ddda49c1a7d7bf087bb438e355ee51c7be900a2f4c85ddb25e372af1361dbd3296b41c04a91dcb24c76910e043f63dd0dd0d0021167998711a379c08f4059f65320b2cb721390117b803d07b7a7b6abc390c5f824ddb012e575f75dff627b2f1407407fd18dd16ffcb40b8b5e4a32f8f15b9c28d6c4b0652336ac40d3721 -2c04494bfa8ab9dd47206d9001752988a8f5acc084be68189a9228d09ecd6c1e0da97d4e283dadc27f5659a748b7b8af9bf36933ccb170f366a58fa582e8871fe93466b58eaf9a133a57d95b12613656c237729844a48c52d73f2b4c6b831515da5fa1cc2262ce3b77bda8d157f304acc5dd996489622a9337a1a46b242a2a28 -e9c02d407f85209582e5eda8d712853adcca62e4c3087afee2b43d1619b8bc03c8a3402b523042d8047c343dba40cd09bc96769c0a06348aac6a9d8a311d8814848ca56b0e7ca3deb603d01aad00d948939f38ceea2b0edb730ba336c7a8020625abe1af4b08a984081cc22fd651b90acfb7017a2bd7f8d76f22b37ba75a7215 -0c381fc36ce9cda1e4b0ad24de9f92f038bd224d816172618065389a3e85050013f4672ad9188739d6b7ab090d781ced584de6e5aa6e4b910d2fe0f1b652410afb0001d04a7a602e86eba4cc45ff42bd0b0737f77562213f42318cc18aff690a6057aef4d820d55e920742bd08a0356a6b93c44ca4af51fa41d6880e5a6de10a -62df8d80094a7f66c5b34539511cf0348dbc92dd5ccd234f6420f7637c64e218e6b69a27e81ff1d1c5dcb4cae59c2cc023affb8e08b164a72158364d60f50c207f85ef60640b4bbe811bed8a7663eb54228eb44d6e1ad5745e3a34a12c8cd82b9be619ce432f2c9e327ac09161259ebaa1d9b00b52886c4cec1d1a70936ca01e -48f9fd1dfe1fa4e867b4df548d9e9425a85170c4f34a4dd6e8bebc83977844172310157fa3c127dff56dfe1227a41c2f2a3836d42d042fd857801ab8139068229cfa714186613accac281660848b508edc6b4f426ea7f3e25804772e778bba03554704f9f4273a94fccbcf876e1b401996d19b923b4ed9128b33e69fb11c5b1d -8ac42ffa4cce6a694b2f63a52029fd3cb3773a4316efcc4f050c637e17d2661813cff79bbd4ea5fd92642c22fa6ff4fd42ca46a51433e7305b22a72335e1ab270240c6e838a44f571f212ce731a1b0d9092820532c1e60889a8a5bbaef9eea19877113f309faf777cce86b7487f180ec9d908410c2c9e550a59d43afab387a29 -99f3a8c9de4cf60da1be2f7a2b28ff5a74dc3c16d70d2562ef079cd6b5b399041f0b891d61be994c2f44494b1d4e1e2d8c6975086cb51291d9b25a13acffa111e69208586743d8983dbfe3eb343d8949278939342dc6c4f15edb6180136e5d11f709366e5d0687c26b55b0600a92070d9436c6c8b7997cc095adfa039ea03d27 -95bb3acc28d0dc9d568e322cfe4f8c6b2e3129eefe2b0c813bfc1761a5e1470aae941929ecc1ef21026d70c122b38e22e00c9a6076309a765489968fbbf7a007c58ede269667367ad916c7aafd08233f2ce69bf9ab94e36d82eca5a09bb414285e51f07d49ab3b5a405d2ce6a3284c440978031fadadad9d86ac560d9c8dca1f -81b3e30a3e0150b52d21caeb69fb902eb0da2e54aecf90552662a30d6ed927048698686a78be7b848b726ace3dd9e15387a2635597029b5daa038b3324b9c401ea5d8dd88c2699bd766aa58cb0cff695178e338ded10d0c2d908c6faabb60e0bf70fa9b256649ffbbb22e84b4d5dfdb11d2b7cbe4c54de4c5068428bafccfe10 -43c58243353cbd6282c6f1ea14cc7a744d1e24e7c895177fb14eca37b368b70b8147917bb92fbebd10aaae5bfd3bc51ad92b5ba3f2c067c8aff29fe50056011443c4c2a976a8671e6eab4fbf1bec3426e764dd21503fb396bdd0a9ba78f9dd11f3c437e5f4d95f4cfcd078778955a8127075521cf083bf6ff5d9954247ab0115 -067b028d59da87f9fc32cf1e79927cd132c9b831adc5c2b3da042880518986038844b05d2ff4bee2ffc737d992e195f86e8be8500529d5324b97141831ffb2042a0cf3235c256251795b4e233ba107914342647f66114a8786e5000d9327f112cad2c2a19af143e8611ad3606aec4dde1be50849435ca1aa4635990336446223 -bc125e657cdccf8da610d0792d30e738223bec04d055104b1fb5ec42e04a1b211589e730bb0dff400f2cd6d8541b379395f354b3fd8ce328432a08150c4a152eac6dc48357f8c2d15cd32277b5256869a930a66c2c78f46290034d956ab0271a86ec827867be01575fa21bfba0a3134a441c889bb55298928877c1ebbef3761d -26de4e037296481c4acdaba4f5fcb1f66ab75a5be129eb2b176468597a60ea1b009ca2232d0c8c4435dbf16d64a2cde3dcd374f49cb130664e25f44453623f1a903a88d137e3224aa2010c6716521106f1b4be8fc9e5de462f5ab07e0898fe110b48683f3678196b9442a36cf57e9739cdb01d359fdafb34eaec894335958702 -082a56ea2304bc0522b069ec0ca7687fd86d9d0d273dd36bb73119cec638561bac404553450dc578c3d4d87c8df87c8f03e5da39f5e06a192a503a936baacd0c7fb8c21f6558b48693ef8b4c57d5ae0441b1d1277f258d915f4a485ab98a601f668aaf9a824a2bc0ee292cff21d79f962b57c7f459602573e2e0f6e4eccb5611 -d0051f7c04ae01cae52f6c535a9aa810cf680537abfcaca606e178f621644509acbeaa14e7038396307d48b7a9b0f4894558433d726aba5055ba5e0e9cf12b1c312255bba5316ad29f07a3fc680c8e9ac6094530525f38ba29e6de5bf49ad2088955f9bfa017340c1589af0b1551b1b0930486d1148e1c2d47edc5aa0553a129 -f3b4ef8cb56381105b28e00f4232518c540453967172f2b4bc8cb4bab31a550040e0bc6413ac5acc9ccb5170a1097d7e572e208e4787c582e39ba05280f2522bf8250dbe07490a734672ff4d944bcb12b34c5bfb2c6dc4e3cd921ae626425f234e8daa107c6ebb9e9c06ba7baf5d2c16bfaa6798590f906062d9584ea22b1d15 -305efc9bef186d1ecc91ed3f3536d6c7f4f7c56532c7f2b5ba86f3026595ab22e6aa1d20ddda060e79651c05e200be40338d92ed8888144c7a465db6767ca512e385a200be1136654ffac72d9d69d5a4260b0dbfbd4fc47c81bd77597e941f0b90237179dce2d9698506e23bcef2a90874a4f73fa5c0e400ae4990d3427ba503 -077f65bdaa0d10c311a7f0aca697d4fc27c5be3444c5ff72a9b190740b1fbf07cd3397ff227ab17b05fceff9292487e56a7dadf0a1828d0871deb06cab50d92c120dc04d9ed8bca63806bb6479f96bc44935125c361c262a0f323ab9e6af50181eb6089cb769629b9949d8da4f6cd0ebeda0d3fe735f0cc0ba37c849dd22e70d -42def08921f4db95827a5420fde48931146f9aee79d5ccb571c1e76e280728116263e875242bd930f7b6d5dbe4d8516ac76f7a6136643d159bfd4bb2aed776145e6cb9e59ed28c1a7a1215ad5cb9654f4dee15b05251040bb80a16128c4e2e0d291d8b614d858b1186e3faadf66192cdd28309efbb7bd4cd0a5a4df24f83991f -4c2b2f00a41bf87da679684fb13ad3bf2e4d9008503ff7f1556cf3dc6cbebf0b8e733a5d181e0828e2e7be5d37ce918f1f5d7b1d00fbc839e3c47713e438390f662822e5f69c319d8a73110491858eed2933f73080351a40b163de1fde7dd00b2b442dda67db4b5a811f48959e5b131480a093d6f41f87abcaca0db4e7a81826 -528a9dd2a53c556d2c499969f25a929ed63ea358090d18c295427f05a0a57b0da03fb2f1568419007e9831c87e57fef8d16ca86ab2e97c4adcf91dedd66761102e9b0d919b97e8e869257093db410f017803bde94b9d0715841df1ccd36a842591fb1c48ff285511cd6d9e046c9b9d00d39af46a39c42b5a0705aeaef65d8e26 -9ec8211291f875e7675f19ca26f83a762a6185e6a61d8345ab7154e347091f015c7816a8389abd40d68205e89c756a6ea064b22a8953f97bba234102bc6ffb1e57026839d4d5e57d243aa09a5614666e9607bf5eb3cb4304ff2a9da3dab1cb0e4d7a5509fac7078209630cfcd454528069fc8e8421002c02c441d7a95623642f -30f7d5e3bf5178da51eb43418bdfe6511209d72deba85e5356f5877a6e825316294258c4cb50929c20c7a4e8d3fd68ab245cbbf8d1d202dc31590ea064b338072509ddbf4cf31e0d7cf3650d69c3d671a912aae85ab010d3b7c77b3f62a2ed283d64057634ade03f9d05e664eb74a4df836eb9424390a91c42bdc0c1ed4de712 -a88766263cf9abde7aab09e9a99e8085399a751e207ef26f77894adbd4868c04de0314b0a8c9dd132ab75b6062eb39b56d3c19e81a14dde9bec3729f1e2eb928fb16d942a1ec6c1808ec2fa618e42b13fec5fa98999fb7ecb3de0014fe316430b863f0421b249729cfa8583566590e1fcdace136467457fa0dffbc99ec6b5000 -362b395e56b929c6b833eebd7e2148e22965826fd137cd53cec9b27309ac9d15f533939c2f48b89bc8039f24e205a672fdc192e0a3caacac49fbf0ebfce24f24a82c2c72b547ca543b059ea980e22e08159d03760147c2c95a49437fbfc15c0e767f607a33be30264ed8a67112b1cbc7b949effbc9c7eb9c06872e353f4da72a -6fc0d5a7db24c03b4042e39e2c8149b92482958aec8229f2857ee5b58cfff606711e29aad77b359c87810030ec432673cc3222a83c10927ef733dc8c2a081a26fa59704fcf0b417d3cc4f9fd68275ebc4e4163e54ff3dc7e449f8df1350ef127bcb1cdb65ed2e290cacd838cc9e36a4d4d79f3bbb0face742b17321cfc5d1903 -a87e8456b55de664a86d3563833a9acc1ecc879722166451baaf8bb14bd9930bec795dfd9bf59500fe2afe4435342a865a890141dd0b0415fe58c52109e8762e0a477d0ba9c8aeea16b404bb4e32b021738c39dac1c3e5ce49109d418e3ae427591245527304564a1eacb7dfafe919a94ef7c394d21edadbe1351ee68f3d3e26 -2b76733ca583984d2a94f76a7c67a864452c9aaa6263814e3e51553e3a110e23cecb94e68f2d854eebffcb83f0b0a4e5f69d7eb34c380a4978789075e3a4f50ab8c47d90110b19950bda30f1ce9a9e03fd68fcd67e05b991ae14794520a042245ee15575dfc4e6707ab82c4ec1b318431f0d6dbacdc866b6cc6fdef70a25a219 -d5562a7a50dd79ab973a74c5b84b4ba2330f28251bb8ae77b021fa9022ccf72551b8adc09f95a161656ee190944db1b815347b78e13642bb3cd9b008827eb52aec348907491caf84a69e68ecad3315d1999d82fac01200b63918c0e7d536e9096aaac9f9e851107866ec4b643af4ad03ff0db49dcd2321c7640ffcbec50a4f1b -c74b7cf1605ff653b4ae39971d63cc6840232898049c969d1bbb9d5dc04cb70d4b0e8c2833e2aa211b55b8b342742b7df0486072273cac1abb11ca76fb44671aabe360e2ce20e69827db29b8b6903bea6277bbc2efcd654514257e6a16645f1ea1a151b6990c34da976d9b3003ba4627d43cdbdb97da05103e291dce9d8dc616 -ede17ec873abae5ccc4da1a7289dd2dd0251969a0add3b906ca7b12469bf5b0d6a97ffda30601bed6576cd4567623f2f4803e53643e810854af574ff1d3e6b1f883b027a9028984c0df771f820911b7c984df395be9e44c279e2cb87cdb7940c5afc3dcdf43832ba70897db59911c8987ef99d84ee0f3b05bb4b5f932a0fa404 -cf9374f50ee0b2d9e0e1ca398077c1e47974e81a2fec10b088dd688c5eecfd25f7f96784e3e2ee1c19c7a4e7b87580d7b4b33ed8a18b898bc1919808d619d6164f839ed2ab585bc0c3bdb911af705cb46b7df4c9cf4c14548551573c61d72c21ea835e86acae86b510d85c8d1376a4e4dd0b113b3c67b80475d5153d94b89f20 -0f95f9c83d8f7c5644c7ee0ae3b1e520a39616c814fda208e741be714b29351dcc9184fb463b0129d8458fd17cbb919a07d057c2538e3ad31877d0319358612110dbc8f0a73214066a80c8d2a6ef7f7aa6e9fa8616d19978109890206acf751918ab0a698be82d66298fff8bc9f16679dc62c79d430d035ac678c4134f91d50d -d1761985521beebe0e90e6665a258116093f67d97755eda3b5cd938b05b9642df31b2455a2c84465bb8436314edcfbaedfd4e3871e4523400ca755f222d71906e21126b4b0d98654df002d99eff157cc7c0942e7dd7bf10e7fbc95ed76e9e925358045054972b9163106d075fa0535ec6ee8c851409b5b028dda46fd10fa1030 -ab35a3a30d07417602cc24955850cb459c6ad398fba448b98e5ac56bb51e3e1e2469a2d5a5a873b0cfc1ab8c3be2cd5b47c3b1aefb9d11a3d263f6870375dc2f3653d832a1ebe5f7491c0eda6570e5fad44ac3c06a0c5b08ce69fda9eabdf80185f83c1959ac75fe98c69e35cf3ed017811bfbe64310326b1d22bd743f41240b -abf82856fb7f222a875ecaf3c5ee232c931bfec09671fff3897e853fc0656e0f4d25f40efa1ffb91f14b9ff1f7ffc36a62a5d5c729e2dc51499f0dad1cf9b925a82c88a323ba4814ecd1cb859e753e553292377e4c955ffbe4dada49d4523321cf31676484ec3bd5e57f7b6451a237d321d5674427efe170903f9d9b04c98b05 -6cf586e1ecdd4382cd0a8a2c5e7a4050de6c2af415c29a5ee73c3e95d4a5c909405bf3ee9dde96ea7c8beee8e3ecd8a943a5bdd20b215eb084cf698673c29a0f25f41df280862f513ab4ce113ea525bdbc89db59a101203a2b293dc1bcf70b0f7f974da7c77ccdf91c13eaf3ac8b1b350d03d6fee3cea5e75b92933d61baa217 -7147b37d012532a5d294ae532f74b8c8845884b1d7be72dbeea7668204e49c12b4551f6a4c0932e642ec81ff1a5c5e9e834c43371d16b1048c54abb3d41ca00d837491e7055b190d4782fd8b05997428e655bd4305afdc4e4e911bf2fc1d0c0e77ce94fa3f4087ba69ab66f479c48203f3a37f37199d4893a23a5b1263a8bb01 -f7f64b02aedb557f1d5f2b980eb69edfe538202a6beca1af27726681af6e01241692fd44c257b564cf5d2d98ef733efa6deaf2c1d369377ab2afc25b4557640003f433e1297e20942752c6c86545c7ed8e6cc503c56b60894f7081aec322231fa7d907ebd3e4a6e829dbb4d1b2c25673ceee75d77cb44e97035d29697a5bed1a -3277bd596ee653ee1a1666f440ac9dbbc59cc662f666bb452098c84fb1c30c1d5db6c8c8295f2b680e639f534e00ca4e5b6a3562a314c321390c67df70acb70b1f5cef5326e0ebd1fd4f16f7e811bdf0aa31b4da513256b6b904c1fcbf349401d716d01d805c10b84331ffc48ccbc85964ce51465c79b55949993402af2a1926 -e3c31a9334619dc7c30d3cb11bd4627b715e75eb043c3b3e093da07337de4e118388c595b627f0e3045fe0f2efed2f73f2d76643ba28e8f0ec03055093d7b60a3c0fc99b14df4ad6a3d99b30fee318658eabc48a7604f0c22b9a1e5bf04a732f42aa4004a461860eed71768f9bdcb6e7f9767b71f208bd78f723591fcd818a0e -1e286e3fa16df638ecda87f420ae33ffa57fe65f1805d97e30a91373e7e3b72a44c3b12c02432a01cdec363b2eb40d00e1e1324259fd11c1ff2e2f478d5b58029349d534906843d540eeca37cb7cfc4a37833c1f985df2b8bf7113163388a6249c68ef3a503dcf18acd4e47eabe5bb171dd828b692f17b1902dcc8545df51201 -e932c66fcfcf2c0c2f213daf107d26eace35c6f103672428deaed2945798320d8cb49b7f6896f6e5eca044d7ee3b285b652a6d7370f9b79db00d416ca8a6b910af6616a670f4420a9a3e89ce29a5779b5a81bbcbb171c76653b49362687970064b421bf2303f9f3affe6d57325fd729cd574a4dd3ed07ff45bfac30b929b2124 -28d6a2a2c50c75afc16c34beafe3bdc5aae5629e5404aef8abc42bcc43d90a1f1effad1c658efb3d2b307857fe6dc5a53ec73251877f88c71489aa8ec566be00dfe1fe208acda0762647f7c0d5d794116901c9e3424d3bda53e8049437e5a323af7d1aa98a26455d2d9db37729690dbc13d9eef964d003455e0666b169544818 -7113af6d859ae9329cd9ac54c09fe32a7897745e608b48585af3e4288f72a12907384409ce78b22c37943225c1f3fc17bdcaaa5dbf3ba7ce7b299e76dfb8d00e2d500197418da301e1b300da85c01d31fabb1912f9f5a9faefdebec2ba901215109998bf5bd8c22d415612d9f56dcc3620ec78c9c0b7e08c04af0608d8320c0e -4493983549288b7e2820c6ad31359b5f1f5cf122138d9bb2bba5c3c0b9fbfa0cbc0fe573ed4ae246d84e2af8827ce9d53a6579bfb183d1a43a53e1990a7cd027c9905323dabe584f378d6c09c6a4f99860946fbd48674cf8ad32b537e3f3271d48a2b9119088f8e3ceac8c69e80d4c51d2bdcffbcb167e9313d5b7f67d21b007 -f58819821705b5e1b886c71ea4c1122c4796de6f04b26e473813c8f785be4c2d287f7c84590c0f4081c00e2eed5c0eaa9b493ce896014cece079af751e2d101b9753affe6d5913fa477fd646cd58b51fa4692bef08df1e290e93344b70acd92ca23dd867e602e62bf5484924e1b5494cffa6f24da5854f26bc5e07cf0aa3fb1b -37fa7d9054503e4b25fb91d2ab2e074ae3a69b152d49819d0fc2d235aca56a0adcec1ae55ffc3a1c8c154717f67c830402cc3ecafd02178195e853b1e794b525c8a3d10a9608ff6b7fc7eadb7ba1176b2ae5b40b38df6e765a7d43bb63283a2558be4e5997323bfea6d1bd85436b8619c523644ee4dbd1e1d34b412348c69c16 -35d8e8f9f81e07aa7a8b15885f5f4ea86bb532c214b814e5387aa0a6488d5d0ee24501e9236c7398b341776a3e39d5dbc94dabf1334a925ae3a5def85582220a48a7bb172616be9325a7116cb34b5d75dcae03336b39a824f246fdc5f543ab15664c4f1113eef42ffcb3cdbed3b3abc2f15035af8d049ac5f7598566d08c7d07 -2b3017e8086116587470dc1d2158e1c03343c959a7d3ce0a2e7e312bcb6713019f32b2fd55f0da023e4440228d0433b97610ea24d53c9cfabc876b9696f54516b27e060ae83b713bc5a23f98f2860914a6a3b3a97ba6519dc795a79d8dac490afcd8ca2b8f1a9aec6153c05884df3facd3ff5310f50360a129164ed476242a1b -e6de5d43441d3ecb653355312f3b11bb085e93a81d8690435b7536c0b44819022cd75f55bebf77627d06315aee06f961b3c8f62f4d0419f4e421e3e790fd271ff298cba536d43a4e5239a5804bd80668de49038175cbf71f1c91b4e543fbe114b49f46db3105f112faa1a4c8c58b0e687059427accbf21e8a4d2f5f2b9817f2f -58b8dfc5bd1b6f44e5851707d930abf8fdbfc6c74b817f76dc9181103c87c804e683b73b707ddfea9ab579271765ee9cca88c3ee7dc3143f9499024ae486d4211f676bf9e33b00d8a60655fc3d9bae65ef57c6bfcca4cc1a7ff7ccad184e351561c91486150376c68ecf1d4e9868be9bdf9cba457bb7ebcdae52aef2f2a4d12e -bc021b6d3ef009a244ce966fb36f79ec4e20bb727aba3d8326c301d400941b093f12e3f07b3c7d6ba07390faf55b3f37875a0da137cdca1e3b6dd2c0685f532a40cb8ac7f04855f6484ea4853c2a7e78e80f30769028a969f030968cf570bd0f182ff6ef5c16e29e7ba144d6f9ac6a161c2259652a813f5a5651206e61c2841e -cee2da078101c334bd22aa42210ac87bc1d4a6e31f6164117017c41356441410ba2d4e38759ac707a33a0fdb85d1b4cd53a39b61ded393b14c7fc1df29b68d00c7a1685533229631b45fa0cc4ec3350ef71d8a550b735b3edc043705ecbbeb2154e38231457001f8609ab988d9e113924c1124016c1b865a52c81f19a1525e0b -203f54d8f95c47abafe93aa3576e3e63eaddda6108bf94e0ca99b1a3c14adf020c97580dfa0eff4d83ee535a3dcfabfc66f89b164aa302562969fc69c09f6117d3a9ef6b3f78a94c13faf0403870a121307aef2a25f4e87af93dca3770b5972df33be25b6aaf92218159e29c826f81f40b8d44b0c90e2f59e9fca100db553605 -2a2cbda0c9f8920fdc06007e0a41a73d009aeba029a90139707baa35f069b510cf01ef83932691dd910e658d683216e732df53c2a0c52a25cf5ed929b294301f7aefe2fda6536dd89f140dcd77fe2240a35dec01d50548432d812879e488792626cb8429af20f15b56d86331293946397f9ab029dcb3cbba8cd72673bae38e2a -8d743c456f94fa2882c29005f77347f692664ff7264904de297cd60d65f2841200b45ae92615dcc2238ec903e839cd88b64959f45363dfeb16cffce7dadfa71a5ea72a8134a766bccc3f3a38caffe1f63bd9972edde5c0d8c34ec08cc550e601010e0c47511ce99a7f41f13c3f98abbc5be625afdc913f3dc33a48f927f27e08 -ea968f1380185621b6a40ef91abb8b38e3b591b6c1346056789b97aa50cd1d212775f3fd376a9330f20d18a0de037b318897874c2b677d24973eff0093687d00dfd4c1c611ae2e6fd159b18435e64ff745f6a847203764744946ac368a7c9107ef5f513d53df665e49e548b7dc3900c547080d22fad9795592a868beaafa0b03 -3f8c5ec519fa923784b1ce86aaf39034a3bf94f2c8e5391fe95ed3f46b78280671225d7ca3127d89435fa39bc8ebaf5df218e1ca828ab7b8671fde9d70929104fbdb083cb62b6e58a2edfe04b1fd8cb1113fc049204a29a7d2e0f2393af5b11e5c42d8edb612cae797383f8748d2995a2298d15cc19e809dad9484869c49790b -67247c0277bc94d358ac17252de37cb05843e4cbc7ea19109494d251099d522e22e03a8bf0bcb46246026042a5444acb6bbf6778f359ada323466792d0e52316ff0ad3582ec932026b227619f00a63e29b3533fd700b6eb805cd4e45a9822d06f9afbbfd5bad2870761c9eda89ef2b539fd0ea99efe9fed21c536275ba0c510a -8e1b61ff7c342debb9ca06664017e4c18c4743139bd612968f83be37b26f0127ca24649bd65185e437a216ed04ecee53f1a44573bd19391d0935e04bf65f0a01cc7dcbf61dea1b15d12468279757d4d8bc4bbaa60d74b20e6db66c8e7a843300d504e36322dbe8d6bc1428167a91f8704e87153a91d978ef0f0ee2a551b99c14 -8ea4c74f29050abfdc9466a5022f4bddaff85e6273573860700ee2ff2c7aeb02684b97fc2dab3ec8294041da85682ab83c147bddb1567380169e38fed8b6072e3976337e8c2fcf9638371044108d2fa686a2803131d940b44a6380fd9d1b8c2d8a4eea46e2cb758a87f1447b4e71731b13a3b784dce69800a1b44f7ae4f9cf17 -f18cddcffcc0e587e07fb830fe668c08de4898c7f3afff414a48d142eb45a6121a20647b31401868b6b0195097ffb62c39353308dccf3fad0811084b6b9474153542e5838a726c35536da0ea2f2a7e8e1afdfefc292af46db37cbd8f6981c82cc0a4e768eb249c07e0659aed9c846705f865e6cb1a0d82a42d15d5088e66ac01 -9e86516bcb8c63e6009653f88041ad390a889b5ad6f903fda1e4e3044e08f0071b145abd807c11f93ced99fc166af0a5562fdc27e9d4e865de39661b76fe8104ddab2bfb518defc9d249a0108218d717ab4619b89046c4236729e036084f4f0729df8183d496ee8b33a4da590207095df3cf20dbe6e055ae1addc0f0f19f8e02 -bc1c0cada13cfd384a2a87b04f12d9e3eaf8e20fd61d01b3599c880ee614fd1253d3aa66b8c51fc2659444a7fc64ce3d7d72b016138ec8fb6612e08cff58ca244c939ec7500689010f635d4d280f4036c835b455088a5516ca835f1627683f06ae9ced5c03f91c4a89e40ca193265244b57a93393e189c4aaf0e0ee7f2fe7521 -386e387295d558f7e5fc10554ba7a846ceb785a369f8d647c2017998c65bf20b2eb27890499b767d1aa5947a20a7b4d4704a2d926de9c16497ca20ebeea6db0860f21beb266f7c4d3cf692f79f0ce368262c93d539bd0703fe8df8bf08ff1723a2755d835b421fcd6e3aa01aa63f3b114d9f2b067bae7d17259c5a092b2b2327 -94a1a27ce47821871c3d5ec5d64b6e38f2351675a0b526ff2c39c890c0ff2c142f0cc7c520f5354681ad38b6c22d4ec7f75e2e31491b61fd6ee96913aa2f9e2a686e6b37e0d2bcc607af2f688e98e9da6c02952a133a356b11e984c728c562202b433dfe549d78ad02f99fa132f029dc07089d20598f5832fe02c18c5b2d5418 -42c59272b212fe7970dd90c1cf1770ce90f1d764589a17acd14f9697f13e370f24f817a2bd362f323ee5fb9d135f39b8334e6db901d8c53b1730c68708b6f0187193f90aeb33644a84601e17d3ba0970c0f7494b9ee557bd195eb1b6f28a661e80889999bc2a29972b0dfeeac64b251ba934cdf4549e78e32da49e95f9aedd09 -a01670752482b0e91c7ca0199c086016b2adca2f4483783a3c685a925845a82a687b00f083e7b69dd9968a47c3ec7616c8a531e08d5005419f0df62455daee25ee4fa24c3583d930684dba0b323c6a344d880e65c2dabe8c4e4472fc75517100fafd842f5b95222a75fd891cdd711cde4e74f4e1b55669c8e6840d1294506a29 -51ddb1df04f50d55e88a59297f79a71ad81068f3f7f4768de0376b412d18d60699d0ca22506db64f15a3989eb712cfcd128347d96552b34bac780c82bf8a430f57771332b705df757f6a7e5795b6e5acc1571b8107222dd31b5f5a263e11a701d9a9ffeadd2f8d88abd892f6faa9ecb9b5bc1571322e96f842d589182aff2627 -fde579ccc1d3664bf1f1d418d6bc06629897750c9d0ca0dd220d52a0276a1408ecd4548781e17cdb7e7e0a8f78ff7168af774378c49f3d2b2c7fbf6dea2cab156dbbbbcb87017eba19bdfa794bbe00ad2ae92a40ce34a12977e453d33d6f8819e439ad54586d0fe264a8c037eddb6a59cd1fc648a40707701eeeec543b3ff206 -84a80c9fd98e7f7400f2455e061c58ccaa81dd30426e303db005c91b340b3b2fbe8b9d67e02ae3ce5f457c276d573a902334afb9a89abd14fc40daf8e1b46f1c475d7246250a719a6f734bbacd5bb2468d03ab378afc2192351449b9935b461671d0c1c7883bc78dd7ca1fe281bdf48f6458c00e8561d1c5796dad5450b60e30 -e09694f1b5c03a2d8f0a5c9bc7bb052d9c375e24687b9267e84bc48bb9f8c52366756cce4ed1ecc3395cbea4565050467a7c3443557949c910fb881a6f7c720a634ab29435f215a2536547e8dd3fe930e792a99ed4d0ddf1b507a7a15f711a2c2d126ea2bd7cd8228fccb3171cdc9a4144e0979047cebca7dcbb4f1706e7c000 -bb94ade80326fc4b6b3c0022038f654adc06106cfc9d84db3b44d8ecaaf956162c19ad0c40a1d59c8fde2b1481d17d3a28a25f495dae100e394983d49c3405220ec67bc5c87ca182adafbd099a6c147b810b5700d7f53e16f4020117b539bc0495ad8192e005df389a6139f4de6ab79a527b2e2dd38e84481756b0c6477a5911 -579f6c29fcc1afe86403b1f1d69b3faf2c24b3ceae7d8c99c50efbc37110f52d282f982be6c3ffc59b24f09291628201c73e2d091b1ad37768b1cd83a77b5a1ba666f5d03d7c576c99acef20cf8ce0247684a23deecf12c33cbf1c767719ca2347552b663655d643b2e8f2ffa12e2d047d5fcf9ef07e5f403e03f617ddfcfc18 -8d417cbba5998c743f9c9215b308f1786f4af905d821c70628fae97ed579dc2545c601786b1f1485fa640397db95efa082a66f43990be060484c358fadb8fb12c92ea7334561bc15f917b9af019673a1f94077391071ef3bb0f78bb1264beb2531e3ec094d70a8febdf9cbf98bfee35b3349107b40eb91d8bd9f7f501d1b6921 -e7b7e2ae1d6dfd5066fe91b881b238f643292c568b891d588028b3e887cb6c05468036e71889a40713f42c703bfcea712b3f56b0ba4134bd7221b13a1502b4115e734ef138c7423524d025980385ded5e907b4e1be88d01cac7d21756e7c2e2072f174d2ed130d654a95c050c9d4785bcda8c1e97e155930f74a03d43018c426 -0a3f5a631567750cc48b3b7b7f167cc716ba72ca5010000d6191ce567a68911166ef23522fefa86d53483cd7b8e34ffed90eb4356378180b6c8d70d65524be21b4d30ed33e6eda2b877e3bd4ee73ca5773b01ec564958052cfaff2f06ad34f0b78662fc7d1009770f0651eacf4272442296af5e857d2b38095c98f7e8eb0ff0a -6cb4e8b31e5535dc75c49b18781d50cc5b2eb740e08f8eb70e889904569b1c09f2b51fb83c4bbb126d7225786120b320cfcf1bf0a5baa497095765f1aebd621e12d05df53b41ff57901c2050fbd47628346a06eb8fa0ea72ef5e027fcbea6d07ed60ef16282c058bcf8e3f428dfb3fc0bdbbfeb20f9841f99941963a841e4e04 -9fe8675694dc7e6285034275e7a4a4f57f993025ff8f093206a7f6a7d299c506ad474691a567ca039ab7fb13c5801c8c3a1c9aee801792438a1017837d35872671d4f8e3afff5dfffe84bc978d8cf53f27be00b5777074740356b989459c3a262f898f7f568aaa2c202579fdf65f30f5de74699766d5964afaae78f1b854b723 -275816c2dc5f6500ef352e2d428340f97151467340f7b405009fb2dbeaccce1d635b85ca540fc6179591224b49ccdb14fe9f3e2e72c8e8308a7019319b5779199918a7c50f117e661d0fd50a9516ab51c62a94777b42149c4f97bff847ef4b0fcf3bc148ce216720781db1852f96e4d3da7eed12ec75f472f93a73351d38570d -c060897a55caedb74d0a08371c57f041794781bd97c44b78b3290b0f184a2f0d32e27493fca182ecf55426e0d5b9a0e4cb2ea46697f73f0b30cfe0fbc6edaa063ab547fff36a1d56612701ccb21bf08502d6c0e2575f52c209d7a945404e94275ad9f69050c1aa9dd47e76e805da8e9ba344558a1d594f94b7203ba701d91208 -1c5468ee98622fc9a3487245195071782877405a67b46f98a83724f52cbed92ca81956cd850f763e47d345137417ab784356d70c1f22a5f47156a53caa45580d5cb98e055feb7297b26a305944af16e72bea49b79f34902476aab467d6cf612541c0a30f4238dbcf09a3cc0c37ee7952bffe210ca0657169a008f6352b948122 -f44dd5870f53bd8d91246d4b5eee618c940446d4cdae1363e4efa2515496aa2872260322f94b9ea782b4cb509eaeef0da0ab805cbf962d703360c92bea88fb1ff7265d52b68e0e5c10fa697aa97a9a816a34d5c0a57541f2ebcb896fe7c0b2296674189540f66bb9cdcd6944f3cd31145a32a609a8256d9f617836f9997fb902 -e2a27813d1ca2faf8fda321acebf0c33c20b8e7c5767f05f7e984e9f597c8a2b99d3ceb2d5e2db236fa6d4590051dff853d8593b505f0aa0646aff87feabcf1b0125f16fc38725711e2672c6fffd6116ce976210fa72caa3b6b611263b53a9119d6c9a1cb136c4d75ccceba9497f7324661e1cc5943b2ac3ae472fa990831a03 -82c018af816548a7e84d9e0fc459fcef40324f9ffe3e3fdd6c8d604059fc5028132f91bfa1e7b5bd7aca2a7094c884c342073205e4129f3bbd864058c3fdaf1cdbc3e441345c207d422cb3a9cba160e8c2dea9d8898540377056a3c86ea8282b0aba5d9fd08b8c861b20a5dbddb7a853e3d7c632494a5595f77d80df2d7e2909 -295b2723331b4df5ecc098082b0d1542e468d69c5a2339eefc6098c01964bc14166440724dfb796fd6151d62d37c2b223ae570bb42df9eca48f7cf66d1834912e818da0614b39fcd08fe0a0613681f7497e274d272d43e82260387a424be6a21c722299193fcb9b40bd6f8f26a393b753629e2fb1078afc14606d36104f8ba0c -4ec8b3e19249f4ccc4993c586a154347e2ee19e3bb95293f011fd662da80610bf613cff9aea636c8af4b24313a9c0ea9c47dd64bf7fb1b72b03451619dd3b11bf7b21fdb474a71474e870c345b8d248ba416313bafd2b0913e82eac2273edf130c9f657e94fee995f2bac84153016025f598849173a48a31385d96fede44c41c -2ee20e59f25f2b61af7bf212cbd14a3cffad3cae3578fe4c0b0bfa143be4f22423bbb2c7eba48ce93997148359d0245115e1db9981a7de07f80a0ab430bfed26270cb5e6bec500d9ab86910c401afcfc5e7909ab7f1bf16c2e3aad866923bc198d0968dca0b2d1b504c34411f341d2a807a44f5e52de49fc854430736afc6201 -b4399e616fae4000e720e30aa96d6a6d3972832dfb0b04a286bd97cfa1c2aa27a710aee2a3118b02007ad823e7e9c9162a5a7df8298d005fad3e22c2cd26b62ad56ead1fb50a4927a1dcf7d657c2c3a70597c36a01473db5b61fa3082f30701cd14020da21f143f7925f5ad92fc62a66b01e92d99edf2d7309cb598e74dd2e21 -6fb439b2f33a91d502afb746c9b0ac80f2cc2d6387638cfcd382ab7ddaa00a1983c56af572e897f8bf33e498833c1feaa89fe4d1f9867aa8a9a6f9d47444582a21562dfab068c0d3ea6a21677b1ea0c5aab3dba7d1b1733f9c357efb3bb3a2028bf45a81bca6d2900e82d98cac432c42ddd9c5ec8b0b1a39ab97c91f0eaf2903 -eaab6cdeac173783f522abb563a415904c18b1c16d308fb6c5c2a147f221342774ee7314295aa763a4c804959d86a43bb5f35b465eb0733051c76f705eaf451dcc3767e04250619276e8e03f872c97ba767d3a74fa3bfbc180618a12fedd9728600ddf502250e5a955dcd003550ff8c8841fc8ca6c322373377ddabe2618a000 -9a4bf6b3e511678fb0bd04f7b7512fda26ef0e751896fe75f9d2ffaaa2e6cc0a2c2fefe7bd75c6c21ecdf9a6f1130452ea39fd635d0ad39ceaf6ede0d1424d15f58b137a40d3b62065301397abf635efbe2c032ad390ca82f215be3cead3c32b0fa886b1ba841d6ab3251df8c1046000ba5dc5965fdc4718821451d12d26431f -3b801648a2e039b92054273d54bc59d7e3dd835a4f5c0b51f4364d03af929616a9885f8f29975ca896a541b725980f8d93f34ee446e2f255b743f74e30c35f27616b3516d94e47335ce09aecae258c691a42e363bed71fb4e2d193cf07a3822eaf50e9570ae398eda2e957ca0dac0fc918de1349475a7a2f9611370e86a4c010 -0768b98c3f23b7f584dd4d59489722917dcca046026be153e1958bfec500cf2840136763057a67180c7c57f332d48ba419460ac9d6e1e4c2493162473ed1e02a77271eb2ccc7b70181a67a005a0ed164d9b9ed5d292397be7728b0e699696a09a977c800b2d7b06271e1423f94e705efde023c106f4aed7da65dd50e8d46900d -f4694580182adf77c47475307d0d5250f496e8f2c621770d137a5aa8650b382fed043a9ac2746200135cacff9ea3187a477c12a9b971207f1db79b04bf584f2bd7d34d59149e8e822afcbbcfde172c0eaffcf65f064c3a2e7c9945e8017e3c1673a3647911cac691e6936345af9768cbccc2a7a3eae0b59885d9f8b4741c0d15 -796f126b232464b5d7e3b3497af1e83adf2901f2dc380830f63e1868b395b9009d9f209590cf42fac7a96094def27ae3e92eae43210ee5032e981486ee5ff319a54d082e00479e73e7f3d89002cd8ccc9ee33fe85e4ce83f0614b8ee64817a20eaf6d18dad316fee1622f64ba5ef5be3b945306458c24e923500a101bffc7f15 -bbc2ac63a883d5e260d114622d73e3ac6e483e984edcccf82d6f636b00446129ba5a6fde0b20c14ca7048e415de8a9ee060661513cb19d1fb4490849f0ff0128935fd1a8555dc2e0267d01b9df21ba9b76d879d089939d0ac4f81bbd398391137b8cc278cbd9128f1b7658791bb2443e7191c1bcc344575f6ac4aefb5ecde624 -ec97583211bcba403787cadc6cc0dc6c57de4d3f5ae164941185078bf5b7270176b8ef00e64f6055f7f2e2f6d7704c0d7077f07930006fa8035314c9582068204a475095cb5b4add281ce565cd4070a70cda53bd54c459fa89f03a3e589c0823637cf10371efb647d597c6e730368ec92466f717d8f7cc142fce82b5e2c91400 -e72b288ec982a128f93b2154fc25d111cd7d515d2dd117a5df8d5e4800e80e2fc4e2f73ebbe07d48acf9c16e55012c32bcb34c39ee78cf9c134171af790026268c2def202c3d04b1db776d310694410107600b97b835ab55edad3431900c5d0db8e9daab28c9002004adb1efc2740dfde9bff8f26c8f06ed9bea1f01b3d32810 -1c666a559aa4c8879c2641c90ddb32c4058290482b18c5e71d9ee3ecce081423521e331732328a6a1424a93c6f940c6d8e4a0c0736bd4be3181333bb2e51e40019a865d8518e1864e7d5778715e0336349de3704f8ea4dacd721a9de2280400516834815f82c944097b53edad9419f87ac5a76c1b3bff31119c710c148d72900 -17cac6bce3351790497c8aa5899149e172b885c49f6f67df1a603570048f111f8eee59d9ca8681d98d07cdd057e193a77678a9e67977ec2df69e30f7976bda093e1b5ae1705f1642999d623b08bbf6b40a6bb834dfa0412832c286b66b31d91da691a463697bd2568303386651702924cd2507fd43f251893220e92b3632920e -31253702d465b00f16f5398ed829f282e1c35171979f06ec9b0eaa9c522e5212c0a0a99008ab0900ee29d4c9aba641adf33d2bdee402e401bd3c9bef455b632a17f47c1f4e95e68b5914598b1f44a5624a671eee947c8d12b720d76dda8ef107fc28e426d17445c82ff13f340dcb20291de9b6b21bfe817a957406487c97701d -3b5a0325b628b2c9237fda520b30b27ab510ab71d605e6744b05cd03bff314021b56af1d65aa73c167df12c22d81de61c83ecb1cc9b076e17927c9ce1fda5315740cdadbf1347c18623932e3c29b4d9b405f18f92418feb6296e9bd21438e50197e64386f0f6018c92697bd2eef6bbbe95a4cf5196d0b79aaa6713be39acbe21 -1a9aeabae7a006e9527c174addbdce093c5a355cf2fc76782aa2b9d23f95030915e1223e0446ea7fa6db4f26f2cc8617581e8862e4dd59aab51e4d611971d428b5b4fa23af9951067710676fec0e11edc07d4a2659db4daacbcadc733e94600780b3fab32ad9e0831bd52be4e6675277355bb917f3be80a3f0d72dc2dffc0a0a -e58c16324b7c9b50bddde75b281ae5275d5d318fa659382292258fb78d4df12f1d379ccdb2562356593330b5580b146ea0fa6499e211c5323881b4207a013f064a1560bb745b008e21874a36cc2bb7add37271728deaf34bd045eb0fbd4fbe19245c7314e0e99968f8ff6b5b2c3995b4f39a5f4984de4a1347647e967ef1e30d -ad4aa61e116120c816768bff5e887b733aadc8ad44d3506201d4a357b519ba22334dd56089afbbb1738335cad38b81d6158770db02bba73ce71e71507d77560dce3ed33533eb4a23b080c1b8537d08e0638e0f7699f3825213d1800677c23909abad15e924fbe796d2b37e671e503d6e0c3ad5d44f6f9a2c2ed30a5b0bf78d21 -3e15048bea691275369baa3f338b87d2c6887952ab95da0851bab3e791ba2b243892850cc0a7d60eb3da0ff9639f46d0840f97311fb5d5ee5dbce2c4208b671e470f8a6a554f7331147c0a9b116626da5a63de83d98c9b9a6dc6a9ccbf2399290df42de4ef30796ced16d105dc827ce99c21ed138516dcef334594facd12121b -8a7c61cebb563a373c61bf4fd0f37f85e6749a4df271a01b099ca1376d1f760edc7283360dd01bee6bbfe5b4c0fd1acd6dac52a41eed6aadf5053a8da7fc001f63f36e5545c6b5a12377d9dfdcd8d81c3502055b0f001e51d6a557a02f23a9032a8f83bd9380fa7dfd0c708ebc13d40f8798e71ce25c2ae039f497d3fbf2fe01 -4949d9b810030263296947c07342e972ceb0e3f7056d07811045c0f446418020ef9c8b4a6832f8337770e775c376b252e3b661969d29cf9b64b5ee660b778d0c35cda7c7f2eacd75d7e74c7f8fc84f5e98c676cf9355cdf5b52bdf9f58ac151c6685365a179024827f1b9c1dc7774ff12018042f8deec698d006081664610222 -29b8cc7b708b2d1cc4a14f285cd522e046c24a7a41b3f0a36b101572f95b1518cbd34e7abaac31e14325229763bc9ec66389da3242c2e08df7597139f682ff24f3cbf1b24a6518b56a1af8874f603af4c736f55a0ec0ec27acb506bfef256c1aa09d0410b8684dc98802da2fdf45575e3f0c8861287a7cb4aa819a26dffc8506 -6787291bcd920e0052b8012b1b71266dc7b0916e4f8376ea7075fc5aa87a8f153bca97ba3c0439672ac3e627ad238e6961c50e10de0390a225a941f2f4d3860a5e45059c109c40f8abb025f031976f36102d80f25263b1aa9ab2bb6062c15a1bf306d1fd0368b564ab67098a340dbab235595f42fa27728b9f1e2dd3bcff5b11 -c0a15bf6f09fef6bc8681b2a13290ea0a27f56927823c34f6dc5b9927603e52511aa45b623545212a74a9d1f63d38418e2f072b5c38d3c519e79c009d75a022b0310b066ef543481b3daa762b24f79c1dcc6531443ec73ae66a026df07680818c56757d3daf68a3e355f91e90969948bf73a7439deccc5f6238d5ca527757c23 -2f7b390cd24646dd55ff40204356d5cb2f373d507627dd4ec354513802c86e0124f29ec1171ab27253cd96ae243700260ad231e16f2280a10c5d7d1c21e2d621f6a4be3313fc9b1d4d8c4856cd4f132f8eac6cd85b4f2faba73a41529a6e170e318267ef3d349997061a12dcdfcccbc7824c6b092443be8ece7f7a133785531a -7164af07c74348ddcf8b505575f10b64551d00cfd4ec04059e62d51d62640b0d70935d7d56cf1031c72905df8e61cdb32d28dfff25c7aaefcb2a3222f3c9fd1c8e5fea65e6fbf45e0e5f881ebc2ca20b8c784418e91f8d0a115afbe5ed20871919bd5d2e2468d8aac509309cb28f8f9a3a2977d4897b8a4b6f83bf08d3c30909 -63eb08687d64ed361571e902942f1d79ce1f13e6d34a6e4e2c3743f144d0bf06c11f2832a5b2934f218102cb1e82ab976d6641fa0e62a04956b0c50bd12bf101c1a826d3c97681852f78a4c3043e3475577c172e8e1fb400d11dda65a193a31ef52293a070b27a7d68ec02191a4bceffa7f1d640b509af63b07923b9c1ec5a1e -24462985a0c1331adcb042879fba7f0f8a271a13c091bfaf28ca25524c525129e48e6a4ec130f3442d09697809cd726350533aebb031af08b7f9297f33006314be7f9d19f21aaa3178864294537d54137ddd237b8029d30aeedf2ba24603d305a3c5f61cb61e30c77aac890d576e844a2884cc3cfb194a514df1cbe585c85b13 -cd1836f88357cbada6c75d3688f18215d4a3b997ba422f08df938f9372de7727aa7edd07943aececb232fb9f88cd74759427bc719e85dcfb62333c2bcc206427f204b320e31fa55edbdab7b44af5088880d54233a116bcdd8e6eb5833cc20b16546da8fbf012fa7285e267dca2fddd9534c600c6de99d12885a7f82ef121ed0e -cea6d25b5cc019bd0a94076d063a31762f0e38366559358c5eacf377fa4e161b5a53534864195d30029b04fa3eb86cf0b77b0d8adea536f300cff53ed82cf30efb4cfc82bd02ec93ddcb604a853961da99840fed6471a4e6b483e7a8033f4c226a0613abbfa5adfbb56db80daaea0ac0f2ba6f2be35b97458c6d8417a2b66818 -c83b7bd42c94e64c105b3c7127d10442d2842ac6088da58fad70dabdb4587d0176abaa9b43a5bae58c8c9a2d49911f98c6127bd11a82715ba70503febcd17c1a9fc1566a4e65ea8b639fcfb33f3677ceab25afcafffb1f78fc394e6690dde312cb35b29ef063daa3d36fc05733723b31fa3f250d705de7f958ac3b20d5492b0b -87ec39d8e3cd5a4dd4c090dbdebb1b0f91228568c3cc5ca013ae5fa6cc19e31a351a2186115f7f29cdc69f410ec4267b6194ca5323decf92686fa46dd7495a12f28c1a4a98dbf321190fad78215920dc9bbdda21b8020e9821a9a8384a8e010e958ed2d53b738ee3d9f6433f861e35eeccd8d465147cf25a91de24bde9ba1b0e -b77eb855a7b1f00519b6bf63d02b1ad809a837d2fa283f3769135633a2cf0700b59192240f060c6763f9e90f28bf2d431753b0812183f65a526b94ac31d2e021317089416b5824a697cda75d2da46ad967556bbc44ec60d0155f65dc72f9ca08d0d58b8ec5a588e47ff391034e47296128b5abfd853b427a49ac0cfd9c3ffc21 -33d9935d09c6d2f660150d7aadfdcb0b77c046f05f86cd81d09dfadd115612076c0a6e2c7e597128aa59670b1226610fabe8c05107ba75d61b18482ec39c070fdace55507dfe1d3ae5d2ecd1350be75d189c060948fed8bb2a855b8eb715861c025302c570e39c7d9ac08004d8b0d46febbcb4e16cd489f7ea504064545a782b -3eb5895b71353847f6abb48648505f3cfe2f5060f88bf124f4eea82a209c6e1d7a5b64dde19d474238e0c9a4c883ce31f03600df8acbdbe1faec223b45418e21e6f3eefacc2c4dd54606d3572314a9cbb4eabc88a2c108822fcc8cdbd49fd40e91873da70d9a40723b39449f61475404ce62327fabf9165f5e8f56fd5252c802 -bd631e1f8bcf22557a6384f6b6e782710cff0fd0a9c88203bf73080a2aa2e208c25ca244d9b1d95426d6129c7776e1389011dfcdc68214ade34c3046ab4f3b0bbd2c4e29e43b996da08a6a2131764bd148c8beb11a5555fa7a0382612212d60989f0c179a3ae6e55c6b4bbd242f611f1468c4c73af21d96ec400e5ae8032770d -c0aed973f0ea9b452576edefa2a499d23682bfdb30a369fd3654c9458743801ced6dcc9e6160060e24816cc1794cb5fdc9c7a6279d455a1317db4801cf95fc216706fa52b035f979b90f662bfd62a024cb46bb4dd7a756434f72fdfab9750001387722fe30dde9ade03e3515bdaa6183a69951f2df8c42919a0c9b9581516919 -582a5c9f760faf0ad263768032b2162ab7c6c4d58b7d3818a65cf3ad155fae1527d6b26b091146035754e49aac78bf512d9177954ad0adb40e8cb26aee589113a94ebd2f7a2cfd0c3b8a557878939cf0b7b3ca9caf579b1718f9d82cbae7e50f98481d7ee111e51c7611ac6b7b6491ef0415cd56d7dbd551d9ae63b8159c7d0e -fe763e134c403d33e905d62818298307ff530734a3dd8a1465694165f2c2d9279dfa2bae8412fe61bdc52329a935b4535bf9b05ac3fd7fdce1d0de41488ad60616bb508ffde5734c0d7bd489c5bd3b60d6041d640d6a15ee693bd4581802970b338daa8396c78926cc8c93eb47f500a217c0eb2b9e6f8b1f14bce98a0808e50e -32e90bf6b44822947d781f8dce64e6586c2565b11c482cfc7754894709723a0f16688352816256551297e488ba19f20580690a48df3c5075e9f1030f19c18611cab176d0f7b2f8bf46c668c049ec5c62f5ea93475c6fa0be401f2bedfe057209eded12ec17dbf0600b4ab1d6a3e0c19f77481f7baeb7a0d67a5f865789c45b2e -d2f3adbe046adb6782d2deb8de738069bcc7af5ac203e2d09c7edc7b623a4e1943013dfb4550f5e01e6a9f633aa7eedf894f5a50298edd9387dd822f62fa442389a181334c94eb19e7e94d0996a6542fe4ac5f864316d25ca263169f9add5025a9987ccd481280709af81eccf1b876e9360660181e179195f1cda6b3365e6e1a -73607e4d2d7940b89551cdb2d8d6052267b1cd7afcc0d345f5e95eda5ec4d9053e97db0da216e8e27d2fffa1070b5a0babf09d73d26e27bdb42ef0b2483ff7226ba981a16861e694e7f2a7f1dbf2d44228c2b26eedaf57b6c94aa2154693e10a52d7165d21e71bf8aad8c68fba42750441687a20a05e390c803998e9c38f661e -37c58f77371e454b4d7a494aa4e2ed22d4d35ad84b6ff72bfa35b9bdc301a10a8db74e079ecbcfc9a0bfdf19c59be39ff9f708de1dbeb12d45c571c2f47d0d2225e2f28fa4b9f9fd5fadd44a7f61f2ad8637ebbfb4fae586732d7d0680670f2baa2c595e3de249122f270f6e7ec662fd8fe2c8d6cafeff70bc7b856ce8f9e311 -1942e5fc7164c5c8f1eb909e22695507c60dc07006d644b174dbea704abf2021fbbd5aacc07555706b3e7089696ca849246a191c383d35c77879b941f16047139f15296463e8eba5dad5de2e2081175e3723f1b815f5e88085ac9fae3644820b534baf7a4bff73c3c65c2fad25ffbfa2b8c9b5e59a006f5f98fc2a7136c5b51c -42ceab00a2b93957015844055b3f7a66dfcbc8cb1a0ecfdacef56fa551b3cb0151a9d844d67d559678f0365470d55f8c61ae969aaef93824e91bd1624e46e90987dabb49db5fc20aa2921113c5fca311e01185386826de636ce47301a97fb8179e89319f027a60792214392bda417d6d45e519e363fb7bb5c208103422b3ee21 -f1a0013924dab0c8ad39f3762cd29c0a92a16b25bd1cfe8e1ce94daa368ad819f208dc900e09de644a4188d1d4282778fdda84fcfef4968879bcd4eac9b6e72fb36f8e162a2442a366bc695da02ab17ce45310cc6785b635fc0613c66c17d7040b143e6509131004f21153ab47ef1dc37a052eb72708b8a699c61d1629740028 -55466b24606a817adfc571e09fef1de03569543a950d6565a0da98c9196d6d24269d0eca89f90e3a7e165f048e7d518fc9c8fefc578bb709e893f56da633f521df3ddc25c759d66ec2de5331b25ca26a889decb02c71f65cbb400464f8f20225131537684c7c6c1bb56bfa25b2912ac9b99ff790d9521e96922315d07ffac11c -484ae5d60f2bb8ee15beb403497a55ce114180f544fe9e7c91f43f234630562fbc8799465e474a67e55e1207a7809abfd12eea7264cf670022457ee262ea2504bbf9502bf25e215892b0e4a44718a0893a92ddb638f5c4577d3789734f5b2c232691105e75f94ce337c669656fab04cfc61c026c5619c7467fedba8840d81f26 -fa4a6c062d6aa8fde160c3a275b631602bff401cf34e886c0811c7624bcf2310124cfc14c0cc16a227f29ec6f5baa4254ab311d42d3e1f955ae4ebe57e03ec145a0440f667a82f5eddb4ac8ba95c1092d342d4f6b505fd9089d1be5d76d9ea00fb540651e66209747904000481ed8814d151c3cceed26882fbb7e0cf5ab5262a -cd8332cb4aa11c0e7af0d2b53d2720500c6b2385f6d288877e3cb3c3abe49e0f3b3f9d59dedc6162be5aa00a804b60e7ea60dc83369006a9ba1cb285dc3b980200cfa4327bb745073681a163b565b1336b0883d569c0384afc1a85657f12710802a4a01191766bf72764a7941a17ad3ff500e1ad3d999c04a992ef22708c2602 -8745d169f709786f66fb9657c76886abc686bcb06ebc56b4c16ae47fde918f0687397a5fb23c5ae526a3ecf6c5e79387b2ccc6cd509692e6dd2b458dac4c8f0b880c7792a097ed7b8ad2fb09332fda5487b6b5b3724a12cb00781745d1a78f026c9e803816c2b479434ae522fe4b468dfd5e8904eca54db96ec476201601ea22 -5d54e7c2e61d322bbb38363dd32b0f7e57c5299a7f7631a0f389f7844a04eb1188649fe8246085afed811044e77d98973d0b34608a7ff7742e716d6385c9f327ba3f480a62cd6775bc702f1446f49942fe006763b644a1046e17c870d68bb6151390976c28c468e742409df18eea5c8c7e3abbea9b279ef285dd4c390703f302 -2d309fb22f13ccd4946eb183c4521405060630fdcec8ea84aef96cb3b9f24925d5c1e8e7f1913ccd5c2997c13616de4acb9a198168b54a754f3d8eb295db882a05973e8c6dd4968506a85f53d9e5b22d1815d2ad2baef21e582137ee9190eb1ddfbf08bf327311fe309d5d6ddfc1ee7b620ef3e107579398ffd6cb272c9b8200 -ab2fe70acea437fdee161fcde33d1d9caf4edd544be085c9fab289c7b989fe05eb98d5557215ee8399e23df3d9fb8c553b670ea40f07f39b0bda446c7e1b690d39af6dd46ad383d23563f30bffc9239a4779444ce9feb14daa5a566b07ccb203ef6cbc520c1bf7ecdf5b3543f8f724702019eb60769574e7c57594afaad12e25 -b596b00bd6b60a14d29f12d3bb9d372544857f998015f84af2a54ebb97b7f621770c892a137d90626b556a2d04cdffb38c28a91b1b3bcaebe669b800f79ccd15e9d0468216d509b998e74ace13a9714b5b6209d6f42790ae79c1dceabc8ef91f190c8bebef29b9ae3268fe6c33dc6c4e1f2f37b920c948e1bc643fb945051f1b -5daee64554b9dfd62d6606a6ca7ce4b33af21a7d575a9fd21cd4e648618a9114abc3d96cc9ef6bfbdc46acc00739e12edc95e7edba8f5c92b1d009278ced4a28657e03ee5dbd3652526a3c7d9f25902cb39113d96a1af3adb019e172b15afd196cee89b4fb8433b95d04f019caf43c2c1fc04440c38ea48f137cdc73dc95f50c -a2d8cf5f94b13438bf294aca787784a4d4b3d301f130099b28d45db21e30612421e3c99adac0bdde6c562bbc243c3aa2c0f8a37df158c4f2e9d341de3ca35d1d1ff7f4f0de31fb8128cf5694c542a08d6716417de12139e201027509dc032f206430f38e0b2dae8137eda30e38df890df9752016a4ccd0bd51b402b2f0ccc119 -ff1a1ae8132e7b15aec8d8007c883fe9f87c9cefcd3e57b97c56ed28ad31550cdfa917cbcfddace72ec970ec9e7edaf5c87fb284d5aa3561edadff5e4e26b70c1a6348815fb22da2852b58be0a6d79751b0508b293286813c5cea389cda91d2514dde66b61dee7fe3b9635c48a47d4a77cd01a23adc50d4be2db029c57bdc212 -3d6900a061281382a0e9fba72f0252f8a9562826b0cf038888ecd2d2b4ecc800c4ec20e50e2e0fc116c7e9f6e4143d6847549d930b9fba15a0c209de64d7120f5d0e3d2712b2be75a197fd2e0f9fa89cb95f0ccee4e2e883c2eee789a7f41422626e14def783e3e0acc3e5b8137a6d29a531dc193bd24b66144ff01890680c09 -12de67c603de1297d445bdc1d864b6eeeca9844ad5fede14c7ff3d286a901f1c12bc9ede071039c39e2596e040b606f2d5bf8f9240189d4cea65f42e59750e0467ce0b88e880a8979fea320cc939f2699ae9f5f77a5c3e498f677287423a3e1b8d9052582a7127190f331eaa219cd474733b9b6f9eddbc73138cd966c16b4021 -dc37fd2c6c951a563db81545227a3089dc4199936168b8630107de8adcc07f058ca870172223bbe307ae39e5a9a1171713ce562d6ec71c6ce64f187058096910bf7a4c4fa09340bce7dd9f7e6bb8c00ee0310d41951bb01f48e7dadf471a962e51c228ae642380a9d9941e18af18d4ac940ed8d5b7d7306de98092e736159616 -388c96868bcf6b9bfda9f1a9f18aa01b0e9b2d1757aabefac86a84da99fc5327c916ce1b1d350c7fed0f950b8808dd5760e3b02cd113683b26f728e34e0161075bd8b6edf4f68632cb7419d38178fdac8e22d6b4dfcb2eb0209cece4360a042f497396f1dfc78fd3ae3c8fdc032b64afa4c14d723b474ae2db34f09df4e5a601 -336c4eba5d02777c9d2b84ae4d5c9e31ec9dee8adb0b0f30d1b0fe11cf39bd266261e609b1e9f080e33d6d3b2e1f2d8ce3c0ee01fc05a77488a054662d4fd226377e324b59a84fbc21df29a6e26bf7e75033bb9bebba053f6cb33eb87e7832229d6bfa30231346802bdbae17930483665e7b965284459d44068d96247366d81b -d77514408f9610df4ec12b38de12c741547b402c39d85b8667482c0d8208a3099f6663ce15b29db291eb005d5c46f4f49139b4aef73fd0cdc57024df84852b011cb4907b718452f06fd0e92682e1f9868693fd381374b4dc3e391128280aa30c970e83f0e3059c423e009a6695123a22adb1f4ceb3b5c85d55e5d86ad16ddd2e -93d9fa14d95fd2931ba10a5c7bb32af864d7dcc9a0b94b289283ad7c869aa42032127fcd33383d37225ce3c65693690d00767ae8170242b697ac21ea8d6622153eb9faef75cf07d376341ad6e5471e27fd93028332ef0613d6d639064bc458233d2b10f45a05400e58eff3e64572fb580c38856f99787c87ae2f758e9873ec19 -f3b839e2382ee395deaf73f4ee6621020da528eea4c380199d5f0115ab4ed513a613ede9d178dcd4341ecafd683e16cb3807d5b440ababb291797631e2746807e01ce6985a9cf0ac6be7d3b9d449231ba64ad8156c4081d41b8ec0a349f3e200d2aa906a5ebb54f269043d8b7e25821945eda395b7cc8814caa6c8a84f08b906 -d0c9e73caccbcd75e957b5a789975cbbdbf8caecd5311df28310d8356a556914f052b76daba8de9b5f62359dc22550cb47bf9b34d5997122b2020c8578d40f1bf73b2e969ca220ad8d04f9ff45b96a9f26a6301f10437b6438f71c03a67bdd2eb1b1dce7b0c24f0196c7462d01a83dc448fc997b298888963c41ecb3ed463e27 -e6f0d0fa159a8ddc8f08752a8375103a97f709736d811c43c99e2a74f4f2b91110d81fd28b64a1875fa4ca263291db2b488b5be467ade8a47ec1937c6bb513127bc444fee0a9e4bcc294524be9ab9e071c5e9f1e51d5aa426eac103366c40921aafd6fc8142aaf6bd738e6cb3d0614bbd53bbb76b64ea730a4288d6f4d784e1f -6621971f6abc6bad514c2226eab3f2c40401eb9ce3a6bb47527a724eac97d31bf8c308bd8262117d7f9eb088b0a2010f5183a25d0f1f1b0b50729fcdd68a6b0b2fe1b88d05808eb07939f3bd573b0d6bb5e0236827ddc43af53cbcb5cbbab7139a70884ab37e617af30623a65bf0c107f3ff5d322683d6191586af4e6a35531d -2795e748851372c5fcb59f644421eafcdbe77f165e9fcc40c105c5bb8bd3cf13ff5d6a82e32d1f2ad3311569c0a589eff552c4bc55fac84c605fa19318eba626646e1aa8a0cbdccd4b0faff0324086cb0f611941eba45d8c4e2513795c82232595ab42ceaa9fc801281e2cebb0f36eac99ca8babd74cb4e5a146177b53de8001 -d737ea2a5f6f57a085fb0c6fe5996184af982562611512fdabba0ad4ac93620bf9c03205cadc44d1d9d614a21b1348296ffa1622d3b267416c94fb6c4efb6222de3171c8fad7aaee49a6762855d89563d5e911b2d083f30d9fcfb09e7310f52ef2dba6f8bb179c2a747260e7c71fd4a2676b02b659f1d1096ce95bc9adc83d09 -6f972360f9b6bb514c5a8351a90ba8462f5e53f82a0e9b6036623bed74ed162f2bda4df9e634104708cffbc505d3bf25dbe175c2970662c4adf7225f506eda186aefc42a04e0e2873495852de1f7ccf0341c66c66efc44fdfa1f904723fdba2fded1b5d658f47352bb7f4e1648eba87da2bc45719a8cca8ae1d22857aa8f1605 -29f8f96d982a36ce6a7ee5c1a02dd601985831ff5f1f6cdf65fd6affe275c81d2266ed2c77b5f19d6da360750b314b7a4130a7d8f9067447a7a96d447d59d5024a663886a86cd8040006c2b536caa4f0987270474c2bbf44c24bad5f05db340d61aeeaf64b8ab39410cb07d2681aea5965ae08ef31c4966768a01488c493ca20 -78d1be29a73eae786c0e233b06052d9316106492ca8494e82211061f51de701c8b5b82f2cbf24f7c6e67bcc741d2a721db4d32087dfd9be575a31db0a39bea1c3f01d4016799dc5d51a9c1ec15a6e36aebf842f7849f54568c765f226a358025989c5cd5e5da61f0026db637e65cb83635e807b733ddfaf086c03f212ebd6f1a -df5772a571aca3c3bd41af5a21dc35ebd628135c1aa6320cf2d157bcf2426c25e2a2988fbb501e949a631428ea305afda3229d785d248e88889564c33b7ba02ebba354ef09c8cfe965cd7e1680d10ec77efe1c4ce39946eff719f5ed81209b19db5da648f77fd4e7b0553bc39ee83c1be73083d780f8c1940b56eb951b6a9009 -519cbcb7fbb3c75eda54ab1902bffa9dbb54896e2ea43657785e91abef64fb2630085767bb00baa9130fc005fc06df43c0fbbf8c24c83df6f79d6271236e8520661d70a0f1a4498640c2268745e0f1cd948169222ef590e8aaa181e7e2677b066e2f2523e758a9d9c854378187436d39c665618f02e6c44530ac075d682da427 -ce51658623c88978f9dbfa4e2fda03d78d98f083cca2e3fba96d4da52973f30223e3259bd6d9e30b89f9ba8c2fa12a995e13f8fb90d02f63ba70ea5bf86c6217aadccd31205e30e725786e325c2e4b5eed7dcb027c639ca29952ec90c069121f6f8392dd6d23d865a8a1eacf633c621b17af481885588de74c1b0df77b1a0c0c -2166acb70c621aae2f0b7ad765a0750740445c4052a341f691cf307c1a22020c798f959ba774d4561e30366a4eeb80461510d28a49604a85a07ed21721cb7f115a8f6eaeff7c869f061d4e30e6e9202482ec42f254151920ad21a94c96d2a914b4dfa51d30bdde87d7a7a7b4f0f91bcededa6ea144f2580781c40cc703e3a90d -45aedac2e9e3bb495db471f914eab8deff2204bc4748237277a8b8df48978e2e370fcdb4e9ac66115ff9c5fdaba60f693e1cc79c13731aca0d7c52ffbdeca4006085ba4d83d46c462a95f8b090acd56d9b65575d27d1315058b6afd8f4e43a1c0c620fc8a4d5f9ee6cba3487ac271463723dd6a526650e74255f00ec72cd1820 -15dc8a9a5efb4453c7f4a5b69298bfe1f517d402fc1954bc37ed11aae3116529d446d805a80d6cd8c23914c84a86b539a902198b131d9332a68ee8c70d76de10542760ab4e1455509a88fce8c0e83a35053aeeca93b2373e3bfe2fa9b6e9b6157996aa8712846c5c33bed4a5b0e6af35f75bdc7b22bf9353b5c54f8730028d03 -53ce23aaf624738757ec0b5f44d46a8557a07360a1266bb967fd879e071ed400e859ff91d4d9ec42aab4a2037e4f89c51273c92be0b5aaf1f50042591651d221d51dbe821e3109f5e701bee79bc2ac696d3d3bf8d86ac0c11c794dc55499000dce86cd60729fc1052a3beb7b50009c3cca533cbd8ab98ebd3d74d14450c20008 -7b9b5d9b23952550c2057280384df57da06c999046d98b85e5846c84e1f3f80c7e72f82b00c36d5c1c1d8c1dca7f3b3c867e62a1e4a0e40e6d2a95b25f3a4200df44f09bae271825008af2a009b675724af9293b40c5eb10bcfa2faf42a3f214e4268557406879877ec71b94278a1e35486583938cf0eb3ad60006689d50691f -b7fc121cc76f6675a205113f6ca3042979411cf988c47bb646f1a0ec66029e1c938471a97fe77a4b9433103f5e243e42cdd48a5d539019e75f831c9219735514f0bd41b211e48dc751ee234cc692ee2aa1bacc433c789d02bd34a2865e3f95203d0e368acb0a63bf196a4b6768a008d415309239a8abdb587718fcb4acdf4f26 -c566a77755f3c785181dd8d6e201ae1e90e0acceb593dae3b67a618bb28f3e054e4bd737ec9a7c2ff7574cdedc843f935f7f293ef1be4a27592248f050a56916cb3b89cde5dd1676db9f175d11d6d2c6d5d9778f691c717dda26b1d20672312fa4c8a0c8365da8d74e948fe1ff85131bbcbd633eb0587d1699470ab835f80c07 -7ea567f28a18dd14112581c1a79b238feb148e00b3094cb265a138ac0a04370ff9514abe5a85c2aa0d5099e7d07c6de70c1e3acc49ce2384a1c2c0940357c91020fc588b8604351af5ee4ee827501f65c460fd96885c03f7b4772f72b8cfa728e7709da31e0e207f9e7c0b6df37ad520486cd48eede8a348a854f3808ad8cc16 -8d218b8adf1b7fed7c7e4ed2173d6487971140cc324c71d1e603ba1b3b5b3103ae7ae2a5ef5f3755cab1f191f1280b2c9351bba069579b6849d5d7004e85e62153d1cbf9aa0e9520b496117e9375f2bbd9ba73e57d70a92727e3fab36fe5211344b2bdeb6f3db2b90fcb074a8212f88acc3b0943871dfd256f8eba03c37f5206 -794d495b1cbc5fc3aef9c7191744ab51f78e697a421bf52e7fb69ab689a1131b8ecbc44aeac5a5725fd7dda76e582050c43c5d0b436882dbc5d7b5483fecbe24183e5f5b327e54d0bedf4033855ae6d1168362afee2c19c9bbb1bd53a5955121e332badb87b4199658bc96bc8e06c4e5f57c05bde16ec06c2a74614d99343313 -8ec8ca43fcceb19e52c2c2d1a2d722afa2f0145c67de81178c038e8c35689c000aee6f11e7a09fa602cc55a942cabb19223c739d70757b070d31db23eef3361e4df545efbdb0a599905e19e2e422668a87fd495c093f7f2efdfbd6839379dd03d28e8b5c3d306abf6235ccf1c0290c92b5d9a57c112b34bf351b781aa4afed26 -5de6f74aa29b8584532248f624c81f622beaf129d49e2f06fb353e14ec5607032da23f940f7b1a082b6c70bb75930a935661f40d45197001b8e1237514f05b186470b55e317be98cf04ccd66c26fe0ad7cb865c5e6c459233e01cf6415ba8226f2255846fd0c2e12ab186ff4339a6a2f015f7f4de6dd72a92f0d505ae5be1704 -991f3baf3641fe2e2c652bf72b237dfefaee63d69605a8cf2a2f110f9bc36506c986d1938d398aaf15c61f483ba88bbcc52d3d3705975e91844346b6685e811c9cbf64069246bed32b3fc92d31a5a41a7fa04220b70427222ae3241814440014967c21378a193d87672f372f191fba5bc624e8724539dfd3d961322c58d2920e -b352b7b7b6fdda7a81a87bf0e251bfe69d24304fad56476648ac890f3bd2182977e6289563f0a1c069174b3de2a84ef7cec06bb5ec3e91abd38458988c8d7d251ceb9574eea06de9d62a1e8d35e39a08a6a71c90c6d52cd6ae73611f2b21a301d24517eb180d709a4a186b887f3f452d5d0a366999465fecde777229ac3bab23 -65a071276a2fb0dc6b3449e57d75bedc01743456897e953470f0aa3f05e9882e7342d79e47519270e668345b8f72873364a3b7dc9607912a3cf49766cef407105adb262c35cd8b98260007e4bc72951421d5b20ca5bfd050c0997522b784b4026752fef904ccd071866889fcacd0dfcc9c368b51e4434483553ff2806fb34207 -dd137d77d001c14d1e7a0279aa533afdd9edd41a01f45d021fbc23bf5ec16e1828b996ee736325f143772230ea1f1eda0838f72b70aa539b8fb283b101badc26b01f588c46c29508c26e3ed192cdced4181e5061fd081f23169d9952c71e7518330fd686572fcddf68d7e701a5009999a1456f380e1c50a8eb4410932fbf7409 -5e2394b837d6c523a2a0f60feb7d7015a93f6ea9c98c8acf37bc848005a74715c8579f458dac00666763f1e4ae9bf167f82c9e3e91bea790d1679182b2321e1f2855ba2d8c5e6d774ce7f046f92b27313652b6f125fba376a661d3c80eeed228b7677a2bb3970d5206cd5f6ad9c440edfab49895a14ecd82932ec87e1aad610b -6becdd34647fd8359a232ed43fb1874c1f1f50ad3bb65ca11c09d7738bf1a120a0e3d901f1e660c3a0afc85f180acd10166fb0cfab7f0a9a56c3c0ada0b0e92509d9bd33aca210db172c87e570a229090666c9260fdf1de21b4d44f35542f20fe47123637dbcdcd90ef9c71bef053a4b9c3f718f2a68c53edf5b8b4b9cac482c -1b5d439fa4726bdde57d4f854773703c3df1ced3b4599ed39335e17c9dc44514733f82c5eb7a9a7eb8f1361c52cdf0cab8d430d963fd5b2774089b17c48ed321c727ad41b65a635be3d80bbb674c57a84cec93c99f863ee9c7b93e9e738a79047043753857650f4b8e34705ad7634b56f1f568f6bd213590d2eb59fd3628db12 -1b82a89f8942a2b14da15eaf874baa751d9f2bddf8878447872aba6ffdc0b402ac0a85d2c6908e0c230884965482b80805fcc98ac0af2187f407d95b8059bc28d2e7147794a14859cc458699d31505a9c87c5c2bd41e05348c8c9c71b4dc3127defc9c6d32640fcbc300d2cb8f3587f9f0c87b582217f554d383b98f8a111213 -c2cdb11c0fa4e158f986ee528c46f9ff13b3d879a2cbf7bfca3e944ae9fa040c9d0c47c2dc03e559ee19876ec6fcdcb44c7241261f8be9758dd72266cbd4f010112aba277645a895863d428a1878665367b8875f4045b211f7097b70f0ff340bb28e5d3878cb12c19e6a571d829e35f76bd6650cd43ff43ed92c76bea4ffdb17 -cb38d60b90fe79c8499d44907245d688562434c6a1de5d2c42948099632ce51fcb11fd3eda9964ffd8b7069470ceaedf0686653337d9b879eb3252a56355920ddd575192ad061267d809e325ea7dc4d9b40fb8ab97fd0c9084f12a487e0695166e8289e6502190b0934b28d25343c25a7af26b2488392ac2a700c4115d9a1804 -0bd95c5cb4430f337d4c101fbee499da1d18770f4fa54ae792f62b205906f318d8253fb222906bf468b1d1d29a2ed17f1c060c03b9b1362b3468fa356e27ef17a122765c8ccdc4530b2ba7e247716817f278574d7dd78c435896c1c2e27e00272e444be0436d91f9fe7a257189262459094f3c74bd874f4bdd3dde0452dc1a29 -dc09762a13ef486bccb03000d51f5a35ed23ede566d133189540e5654f03c404dec28aa4ea18a5206e14985c1b37c64ded1c6294684fb9edde6b72cfada46709020898931a7de051a8a4bec113efa49dc18504b0d37436f5a96f8c4363d081168e4401009f0dfa8e44dee2313ea14e41caffe2e34ce5cb4a022cfc7d077cca24 -81544fd930c583ecfa03d8d471b35427fecfc9882869413f7ce623bfc1b854007eb1b6fe6809daa5673b3bcdb60034198aaca463d674b394837932a1743f7b1d8e7f353261fed8fa3dfd5a88a4000541d11ef9445d896a5ee4cd179dc737e8009cd7c7ec1adccdbf318b1a8558754425556287700b0847ac5cc4acc27dc0d814 -26c71a42d7e47dbe4603329d8b56793b79640d4c0616c1cad4f1a97c5f027610da8a111b20c8522e0aab07c399b30041578ae2615e6ced9de01ac980ae056915829c6f6cb3e00a1ef9ef06904dde3109a0bf396ad3a289b7a38a636201194810367ce89173dc4624f6f28b553833d1a9cf4ef97d6411397c05e26c94e3b9d71e -de4ba97967b2de76b8985f3a32e3d58430aeca1d03404222e4f3ab9efba29c1692b24f978ffc813ae93c637223b09c35444341db8139fd43d05549ea5f3e12255228d8c8bbce865ec969bc2cb71a9dc96cfda4d3ffc61cd88659ce6dbdd1931319fd35ecdadafc564164bf30d5978f5f5ab41d4142a3c41bf128ba2fce85901a -02a8164458a89851c5a3178ea250e3d7bebffdad66cb6d8eac73e5f154f63b01854dae1f6340765b9ccb59e2fd5e8beac7c969a6e272e5269932d59c0dc5a72e389aa5430eba98ccbf103d22d8955b2994c4211691186aabcede3e6731be7c177339400d4276a5ed2366c2e162cad082e1bd874b39206c249402333b3ccd5a12 -7c6bed4da4b172c7d7d63f6ce4684f36aa338f2668c22b6940125ff7ea13350a46588b18f75d05048ba6636a2a079d72ba6ae74768c645cfb41ce78770458d0db75124d033049a9f329ff614961ae5cf0085fe18afcc84b25c9077746fed2713596402a284a33502da6c0dc3821128141b6e09f6c7f693745cd417819a8c9509 -d6af5a348bfe8a98528558087cd603323c89d6820f847c732eafaa7f495f352ddf9a4e185e62b4f86814a9e53de03a865dddfcec520a74e46db2bbb62d33f30fd726f46c805ca4fece2602ecde788949a8350ed2ee4c53cf004a6d22d6c5cd0cd871abf26cea3fd0acd327f66ec8d138ec68c71f46c578b8d40554105f4c7e13 -fe7afc2574542cf9d6a59fbefd476cc999a468d6458e59f57b381468451ca018e361b0ea42097f3a6805c9468b45e499f4c12abf24cad552447d7d59db5c9f065a0523dea2b21a260ff2cdc94f4509029a5e67be276d8abcf8b904ba922d551b09836d74e6c846b1d67df563848676a4a85ab140e89b65f771ef8660edc1130d -f7a87595f91d66578222ae1b978c4d72a64f9411d8baf1bdf99234aed18d841a58de1b88106ca6705c778cbefd4731b356ebfc9ce35c206516e8be8f3256991490766d2ce2ccab721f72e018ff2fb29e4027501c3f3c5bd1cadb1e1c482f5118aa2dd388268a449229dcb21b7008332b63b2df74f04428a5617f8c60fe981625 -d6584e0fa8c4124e12fd70c70c34eb3f8d757864d593d096f19eb89a6c64700a631fe79c1ec36d92d175c9acc263d25a9e397dcd645e2c5dd066ed4da5681a0ba19814ebcbf37b0eb27c0c7c8d57165e8e83f17a33a69c4e36fce3ffbc762b1e27cf087984af6578b9214eb6b6877230c2d3908df32437020d5ee27c84898809 -2543352cfc825f02f8bb2f972df7fbc8969f37a738928d0edd106d8a25f672050a8f0c32c22800a8c7d668b5ddde46d2c1071e2f53dde96ded7c731e3039c9298fe70c8515f1511dfe15be2e37807a4c5b18d2ff8737bd0d53fdc6f73c154419ae157cf2a47521332c8ae46f8fb83a988478a4ca1ba5e76ffb7140282059f527 -68db92227057bbb09f22184e9389dbbaea07b0db126ebb7bdf42b705eb73d62beb453965660680dec86bcf967ce59ab6a81c5c87af62067aeab9e40b9d96421fb10a643766517a5ebc3037ada791238cd73fcc7eb7386aa67027f949ffe9d729ba7ab4df16f51ed39aaeb30f05469f06d9b9c95fc1f2ec9856ee5de04c36541d -6c8b88b74f9d782667ddd130a620104ed9a2bbc28000203e049a84033e47ee125089f0a67e02396c136018276fb3039b6e5378ed8f9bd329fd81e5e23489441997b8dc69cdcf6f3d13791095a78c54babc08e45cc684d200eee59fd75f50451d9aa8632322bf305c8dcc7912af3d4bcc79fb6f3729c7d73d3038a8eb261d5b20 -c81c78c13d984ab8b98df71843ef81478f5ef2c8fda9f5a8ca905a3d6b07992134cfc9eb8435122c3da0d8f1ef9eb6827eb372420377c72169d4bf03345aba2e90744ac082b9a14561599ef9090205c0e3c80cffed9148e2ca8ac60f39e7442710a7d4b41caf41c51cdd9b8ecb53c040ae067d188892eee2132e0ac863656e20 -0080df9a4edbc2d0da944924740daa14e2ce820d7059090641eff9d5d8775518d8f124ea05bc58afb1bcde964e59dc3a3567c4b37b70abca2a4b92e37b24bd26c5432a1831caed075b6f2bce0fdafc631a990f41bae2fa75973c18fbf5156f133b0df1c2c0089e3adad450e4df99d5970de2e44e470f7f0f90988b63e2a73f1a -0dc8413f8d039a564ea5f2b5bb5534b8cb0f15c91f41598da5762afca66c77202805551551617515ace30bcaf553971e7ccf698b690ca9afcd652b581572eb2eeb94c4897ef214538576635629b5e79327c391fa38f0fa2d8adce729ea71ff0805d7210b80e280acb22f88e83625fee5af3d7aee4fee7b59ead8bcad1a131311 -1f3c93be44c9618a490fdb184c736c342f6f6483f3596c4ea873fb2d8985a922a5e873c5aaaab05cf38e248c512def59a3f91fda576298e00f9e5bae2f77bc13e76db0efb1c5edada938fd5d99ad8ce7b09e8fc56193432f210d91cefe17ef1323df67c2d7658fb42a2d25470d6ea80ca80cf09080ab7ef73e6e3ebf424bf42b -b1efec0cbeb37a0b23b05e5f23ab3aabea026aacbae3994d373628904935dd13c012f1d92353bde837d60fae8f6e7bebea9823c3b088dbb1285bc93065e277246e3a04f159bbc253a91a7111042ba6e7a06072c5e4560bb80fa69c874a4fc51cb38a06146e20a4f473046199ef1164b1f23be94b4ed5096074e6e5164e96b826 -3380fdcd64fc70269fa4dd05e41f6be67f933a64a7e2d388e22ff4876b754c144165b495a7a930e1f42db138e94cd9820903fe9122b01cb7a6174972235ec918c316f18dec844538a0d1089be33308d87ec83fa51d12930376a5a12eaeadf61cebb839052469ff71d3a2174300c9a04d5795feaafb65d42c0b63b4fb0f41040c -d6bc9343ef75d98c3b6e61667fd65d8715427d53fd05fce7eaa2d9ba437dd225865efb5d154003269f2a41c30ce5777ef8df8f8196e0d098729f96ea2ec5fa1681c102fd104810457e7df7cac1ffa5578f7e2297a174a2f2f484c9c68f70eb2b4474e165516ddeeb2e693dc94414948c8baafeee0ccfc43badc6a81fa64afe08 -2a0e2d4bfe9868dc980f017fcf10bd7575e220f82096044c2b727daebe17d51a09b265afe5d2fcf6061816ce32c2907f60fbb527ea4d51d06dbfca1f713c0d22ef8d3e97c20c9bf26a75065095b4faaf11f13da387dd28f1eced99f44fcccf175999ea2641b2e95867d07d39a5311d86a6d09018887fee1bc7afeb1bee0b1c29 -90655865cf4430fe8da8ab8d47dc3e04e3aad21319f0c894c735ad4aa381cb275876f59385159b4653fb991a4761736d5d1d49886216b04174a59e9048184e1c2c3e68f816ffc074df08a6679587a8986f3ac109f272d17d1d0ae489af45b1240ca39c929fd0eddff80815c2f5283a1da8a480fc95ce2e462f17978eb170ba2c -da086ddb291f098a8bad9d79b83c0f770ca54e7baf858e3a753e562adff64d0396a5b99a2be29025f73453825557a603dd3568c7a5e0d705b3b57c305df7f516b9f7b2de80fb2029ab06841d201121be222723482533338bdc44a3ef8228050f1120fe900779bdc87cd6c27cd9e441f3eb50335d3682d92de81488cf4b675b07 -01c073dd034ef259f44ef48b89f600a27586ddf2b564a2250941af783d9e411bd9e1031d91bbd60ce2f72cb32fcace93809cefb3141ba1aedd0ca5b95fd6ae2317ff61889e4ea0a0144812f3b8f602b309c7b74769b5493329b45648b2d4f500d984b1a32f2db33eb17dd4e017cc2b5a5f1a9521a39ab95d57d09d1609cd5c29 -37250cceb674c6029b89a35d8ef498cedf01399a0b5d340f86bdab5a658ae51c8d5246d8065bdbb9f4d572f316b40de3cb14188bc5ef3fc44c1ba382b08aa32e750e0c3c9b9694b22c8accf7669a6d8d83d68f7864de23130c5ae5bdd3d8ce1409b0204efb3f18c65e49fb5e44a12ba7e42d9f8faea55a9113d07f6484853401 -43dd73ec74eab988a1eaead647b3b27b1670cf027728e542d54528b303f9bf1749aff7dd3a0c9f0b1f24df5a7dda949d05c6c2529d5a994b7fc8ba701b074f12b4879aa1f1b13d7b7cdfd41d03f9e2d37e9d4f5cabc4d6bd7994025e8e39ae157ebaf7e47c2e3f96ad608fe3355f751c1257632b8ab0d351c5372720332f1e1f -517051148bb7d30a355192d1c05a3fc0cf55456cea58e51182866cc640ae11256caa4360133b6b4c04f011245e1a4426c144ef3172e814f56e5ff06617f54914f670d12651b983f04ea14d49d8990b64433954348a8e6af6c4ec8f40ce8f171bd4f6f574b72556bfd93523e40ffd2dd7d8d20c72c43b21ef58254cc29037cf25 -000a87f39f40197fb39611141886467c4785d2d4d415877eea9d69c8edfad21ed97c823f9264adb92601ecca0c5607c7dfc155e8890770f9b32e7ff0605cf61ee788daaff2461f043854751a2161a7f3aed465c8b34716b62f10728d6802582908a50541a26474d0c5c1f07ffd16c017ba987fa1472df57d1c9e9fe5e27d1111 -f23caf12aae23d3d7f9534881c56ee34cef38d7708ff5c32e31a85a9711df8137484c9693a5fef7077c054c1b4afe10606dd6fb23549eb85b6ae306ec4586e136fcc795adddd626c0b0b88a10ca5a9a47ef8b46ad5ae58ddac272fa50b25c7131c37992550d223eb0cc22612270981ce16775e8050a523446c4c91eb5f09d00c -3f0fb05a82974cbeac073e09092195217761d08906d14cb20f416fd92032f00cfe1c5715fa598afdeba4da9380064cbbe1499130bcc2e8f6439f94e19875160fc20deb17cc495185ff7ad7d1254b0e0fc8deb31320926ced74005fe689dca80cd32a150fc055c291ff468ec1685ce29c6ecd68abff3db8d20662d3bf2335da14 -1cc198b8c3d80aeb08bae2fb6183e83bc30c9f0d3f4f793481e3c39685f3f1063b1a46229bca5ca12778f503b8b6b19eaea0c6c9e5705b2c38e48566bbd4b40b19d2018fe0c5f7b6a15e24eeaf6b97cf924269de1c2fb28eec25a37a3fd1d015e81aa12d3342ea547394d7a4ea304aee80e95ca4deb1e3ea4649e110fd463324 -55be94a36e703ae75908bfa1dff2acf8a7d40a24035cd64f106975425315fc0acceb7e0abe8e792ac9aa24e9520aff28fe60eb791e5ae2ad30776d0dd94dc11e72cd68ec5dadde832fc6f761a0ac44ddd8660bca2e3bdaf4400328fadbb34a09e2095735b94dc099ca0521f519aaf807420500afd80e9198f71632ca68edc028 -6142d5e820802d0b9451d3f252dc9365d68b1544101a32dd192bb613814719035a0fb74bca78ef471d41649329211510ae21176a4099ce6250daa7b1b60a970daaeaf317273c63369f6b745ae633892ab2be3180f0a1e11bd94f7a124fa5d71dbed46139658e30dfa9f2091349593bc18cf0b94e6ae20b076384f593ad4ec724 -a405d94959b5e662808945ab41a08a40affd4b8a813b312de0f7e8dff2ee8c28fc4bcd7c5f00a7b9f6e4c9305123550a37e24554711f1ff1f52f5f791fbb8c29d13c13ea5c9f1ae19ebf336b5a1718fc4a26a79231c5ab123ee3f1ac212a460806016488622597f6386ea4dfc518a60c10c366464ec69f4c69c5abb91eaa732d -7cca207173c792685a859703b299f169064b668147479f9ed23fefc7e1311618189a23198bf0320a645b448067fd6ef297f4e27817d37647949a3907d0d7b929aefbf3a5a5c9e1c0eeb20ebb2c767198aeda90c0d014c7b654526db2fad7af07c50b585969b31f3ec9c7b52f3aa05cc2d4b5db12a8f876cf1602dc32c1567828 -dcce349a332790dd430837e944109b305f9df206096b5264249be49901f81c274ced7b7c2c5bb5af2105a843f1b63968991ac1c580c21253416445d3eea02121125e39664783cd2edfc94bd749e36a0c9e300cd14cf7415f10421089c2d68c2607fdf429acc360b1230ae498f2c1166417610fb625e591fb9d5787d2d6e4e40f -6eb7f2fb8d8ddd1679f42edb1117c52b60521e5d41c2656b83be717f571041051f67d8d59632c23e2c528dd51c3c839c531bd7c52ff2d0db9a532a435c769406b79678adecab277c77be3f0a3b0bd5468455863e69e9f8a435bc7f33888b0e2a2a1f5d916e7b2d1e5685cc2c8b4ab5efc641107fffe998ca7eb843e814169304 -9d3a050d38140569a75572664b2cc0f9ae5579fe112dc09b84de4c2d0189740b61581e239891fdd9ef086186c33321c7fcf78e70665cba2c38b6be578b0b32094a340519fa8b3177575fe84717a17c4907bca489170c8851daee7135d8169016cb1841be46eaf8dd0f310d8a8ad55c7bbb55362969aecdce3a776a24d76ee602 -d0c7e3b08d3994a68e67a72ac70b89a72ad9e4d2098f084b5b1765b36c22992b4dd5c6267746b66231ef8f8da7e413ccbebeb4e7dcfddbec73f5573b89e7d21a148e8f3df2a0cd6406fd2657d6d7bb96b85febf15291eb715bffa663eba4921f59f18e8c92e34ab702460c40d1aa84069ae7bb27eb6a8c7e3969d4601d8a6500 -0a69b870bd93d37d6cbb2ce5edfa4b3b9e27546649bfed6685e09ec1fb48bc2a565e68cbc763a076163978ac72572311de38d6047121bf6daced566ea49105271bdff334f4f41ec9138aa78cd1236bc56c4dd9fd6c2a65c543bf8f8f1daa0914b7c666bc7e5332b67c4d0edb929ce200c5a1dcc7f9aceb2536325b272c22b11e -b837945fbdb28e14501244ed73ba3d7c5a7829f0c91df83673d17b8bb8eea01805f9e1f206df321ff0cb46f09a45ba0da8f40d6b1b43da78fd3dc69d29570e23b77944a67cd18a85e3710147cd97e3fbb2d9ae477855c686eae0dc9a92aab72e47e5e442023207b8c2552bf264870ed3790663662689b7a2941337d4f1a13c18 -f7b2fd7fb620ffa712b7702e6104e70e6f14cf3bde29c772b880ff76abe03e1d68e29913b7f907deb909ee208de34e3d8f07dfbc61b0dad309c13a3ebc88702e0f6da990a232c54a900ea64b0b148c6d65e11054625721e0f839d111bcc2112b4b939940ed5e87de8c7dd9a38287a853a632bb48884723625680e21dc188481c -a37d573c5bab8cce9287fcb79d86aa20c8afb831bf2478fed4af43278cf3301b8b052a0e24bbbe33269eae6e7ac72ddb899c69211b04ebf8a4c7b36f2a478c1f85b9cb92214b731747656581102b9d2c97319e6016d5440d7540e9dadc18021fdaf72eebb799946fc99fad59273634fb69c8f9263df76cbd44a1bdde5efe920e -2cae32bb15699fc9586b0b2f40f373b91207978128aa6cfdd606e747fc87ce2de5f67b6d7884497be961c9696995befc1454ffa17276492f7f2aa83228ff741626cae3d0f74d623b11b157719c0cd76155becfba7d20511f327b3b3f19ed7f1e3f09c18009ca80f5a0a70ddc100d7966ae0a8ab18e196dcd8540d7af7b5f5614 -8c31907a5659f23d980c280f61a8cbca79a004749f60e842e632ee668866f502f0e8c531f78735d8d8205de3dc72844236b691a6f605891865261359913a88292e8f76deec062ee3bdb8e2e9f97a66f3566d3eef34217092275a99ef21d25a0dad9eebf458d75f31a9dab69360630bc806ac32b8d1a7869adaff0322aca9210a -c6e123c1413708dcd4cc089f6b1ac29a3ff9f03c9048943fc238384829397513b8cf96be769e80c5ae9457cf39afdb0d1d10feaa19b74a2eee90edf0217dbc118832ad470294b60d327aa2aab0197b8672a7de657c1682574c2f6b4146af3d1c3deaa8d6d1238d08a4b8ce182331a9bd39ca3ee42570ef88cd22e40a444b9d0d -a2cd64aa02bd2245d45774b3aefea05d7777fac893d97706473faabad6187e1e9bbb5796a6efb102f117aa0411b292b565221c78571379d5b3249528bdefc02726462ccbdd0c279131424979c4109420c4fe77c451bdfacd5915c3ef2ba8cd291859351d05a1dc710184a592504ad57a314dbb4a8372899ad6e71851d3d5140f -43f0d2ee263c7af72f1ddcecf4e8c31664e1e533b3bdf2f286566a9b04818a22c970e8b656e43d4311c7e2436f73491d559bf4c654de267d41479fde91a78c029cc64f8e05c2d9a9b6da981d7a537c3d31ecba72648ca7f3afb7d4352926172a285952d1afe3915f31fdf4f6287e4f92a1032c9da61a4e48d78afb7bd326122c -0cab5622770b2b156fc2d4fe2e7cb8ccdd2e256a9301f80b3316894c3e030a290174eeb60c133be63d17ebe42ff8f76c4005479fcc8c3d5001f1ba6cd14e902c480cd95803a764b5fe0dcb3486528a0cbab3abcd32a5d4d6ed79e06be328350fb74732ade86920c6d9b0329641ce65249237f10759977849f3c37c0693306a18 -ec9e9075cd9ab1dff7abd4e73f481f6d7e9edd28470580d366968cf1ad9891220d0a8df322c7c6dfbbad2e5e85f4418a8c361cc036a76ed8b594db7eb6ebff241f4e43c70c0e5a8df9dc34f65e5039e11584599df68efa11fee0594c954f2c07c3dfe02c1a7956f1552e544b949fcf90604f1de4bc78235679a7f964c3f8ee1c -89692fda1fd9852eea94a5f5d5a9e92aef4117dfc636b45c78486d8d483bd51fc594a87fcc499d177ee5fc216a7cbba2ad66b8babf840e08272b7ea226f4030b4248bc3819f1dd05363a2feafbba5ceb9b19f9799fd2e0911c7f5edbec5ef310184f05736bb3537dbe55d65f7e54525aa767ea013f8b16492239711033700b2e -4a5d96f5673041994f709681fec6743c1b1c75610f59fe8cee7d9d86be02190465a1d4ae20668117151d877951761942e3f175f2394dba64b7ed30ce62d55602236d6ddb8e862670f6b167113b5225d0cc744801229ec1da50878034d594e728172e8d69dcc3038eee3dfd08f97d9c3a989ffecf6cc0cd0a090462658c8c051e -3e1ab308fbd8fb5be6e978e9ffe91bc3fa0a6f6270e9b65be08713a2fdde812ee6a1dc5c522d8e843ddd32fb136192841624a0db31d56e063c059742a9775430ac6abd764df974dfc82f4795fedbce0fbaa8790876b9f6a99b3dabdf82640709a359a4bee9ea6d37f40500ae65c93b94ae57c6a75b300987e99580fd5de8b41e -573973ab47e311e2dbfeca735d039720261e31e602eb8af1b62797efb39852008893bcaf37590827a37f0f4efb7fbea0f96b659fa51d6be7f610483ef539932d30731eadc49d94571cbb72dbd8506146fdd5f131d401ff26b19384b1bd71fe049a21036dab9bbb1ee7b13c4ae6e8096077f2aa0d93c2e013b8ebbd515cd5432c -ba1de62964555bff986e9d10b5ba13983fcd02c3ce2f91c69b8296780d17cc0ab3ba87085b1e08f00a852c00ee6f7aae67ee44481ec33e7f6408e707640c3926e13190e9219e558954f84ca466459c5e7c52f6a87e9059ce4a4ed3a2a2b0651319c882399a9414d216b37f4126e620a577c52629291a7b1fbc5c4a5c8fd8f02f -fb94fae29fa1eabf06609da2d64b5c4524a3734fa66646d0c3e7acdd6c883229e59c6c20b2cb2c870ecb01cebc6016e209bb1f419b0d9be5145668ca3153002c76e01d17f85fdcb33db5a5e83d1ebef95f01be14040c3214b433bde07537cd1c8107e9df4c8d8178686c85401a0e466c00e8fadcc1d3f256180c6fb2f3149c28 -62e9396e8aa6e89440db745ab456ab11debac526babe54eb3d3ff4471e313310d1812ee20ce24e8d43709d83b4f49df78f6df95c6ed98c3b5bdf9660e2c7e911640b943b6aefc54e7ba52a7d7105be65d23ef09ff6787af34d3a9c82a7685106f9a53321c69e95409775ebd7fbfb1fd5cb7fc2c1285ad8988b8fef83334f422f -be4a6def518c40829ea39ea8208807be7258f11f8d1b05e56d2d589f81c2c9008567ef77a18a214b6ffded2ea51cfa3548e6ee4b784a4db7c26e60a85fac2d1238207a0f9206a5644c909ed5e3a264fe4fe42c564ab8e1d584e6e70edea4ea09c341464136fa8b6adb1a2547319b57b154f80556c95baa2a3b4941bf768bdc1c -6150042cfc5b494f18c5c10ef51ece7f8ac63e2d5e446ee0bbf986863a97e52fb5c2ccfbfd08a96da98b11bb9d01806168639d791133035c7d2a59779d3943124da5a5b1160e4e8b36c2494fed48d4f9a06a9989c450f04b1a5da781081bbb291ece12a0d60cf215017c04a8b0580ec66b21f4d722dd816fe4a322c000a08d05 -ee803ee602d8ea3f9b91a8b1e570708cf88f6d9efba5f9b0a95fbfbb35b93318ae199a771bd192033371f7f9da2b91bf48ea59a3d26898f6f760dfa29b9e6b03ac6b264906c10b60fcc05f912559abc4435ee903a1e82b6202548ac7dc2af02ae4508b494777e2b48aeaf7bf31baf59bc6ff8917530235301c3a1099d705e60d -648b708bbf9469d31e6bfa89acceb209448746167a2a6e19834507cd6f0e341588260fda81be91b76ff405d24ca8602dde8036a7bb1c4c96057ecb7d3fe9a808e70ecf884f815e4ce2047c5ebb8ce7d960f1e48e36a63d2ff6fc4350dfae1b24d71036f46c29eb009a8e1347ccafd2abe19eb1390433ee0a1e342c526c01840b -389f740d72764d15402ce711872b3a662eda4107dafbca3f54dcaa7407948f2011a40e7f18c8c58bf83aaf53506336b874fe667319dc26bfa60000504f547f007b62f104ac8c8f2026968164a81272a5d9e6f7a5e853c3f0593fb9ddb3a8051ee543ce22fc0bfd79f551a0c0b608a33db90450515d1dae9c111830f62bcb1f12 -1b907ac676fe3c771ac6e68b8734df78305614d68c622ed8c2f81a236a4b5225301865e68e52f220a7ea11f75c441da7dde861767fba0d504089858a06c415247d10f9f703ec72be400204303a85d40ea0aac7f3d04876a7e83fffb7a2818e006b958516de4538afd0adc0f36a4ca24fe92a6b90c0acd646f63fd981daedf005 -1b5dd2eafe61e94d4639e0d024011406803e35398d124d9924d2a4e2257212116c9e70b8d84beb54bc599f163a28e09c806a81af3eee976e447303c4df0cc807e0fa9a890879c868830fa640d2f18bf98b358e65b235595d45068766f1f248301bc066d60fc7972d2e7d92571f19ba895bfb24de98964fe566d92abcb7082212 -ba995aa1ffccd2fc68b32c9c8a5da4328d12fa957c96aa0b6b8de8508a3017210a7129303c41b0a7a5ba00108a971e25c783abfd93e4969a676bef5b921fee26597d17d72277c283382ec43d06f0889a3b4615ea4ad1d1f3f27c604415f5720ce88bb0fd7c0807ef37d4758aaf2bf9d72b629bee61ebde6a70da3732a06be723 -03a1b99b8de4347f5dbbb067935b7ff3809077759959b8955934efc4e5a84c0de3f044079028fb3e69060d34a65860d6380bda22fe41b2a13301fb685cfb6b098598355a46d5fe22c986e727782e7192b03a094ef4cf3e3af2ee6aef27b9e61f9a0717c686df05251b4e4145d39ee206f8ea358e3095f4b582b82fb2e0fc922e -29b5bebd8a512f2f9a9c9c6a7d02d06a7c96b65a39552ce2bd349f5814acf42b8aebe1cda2e8a87656e49187b784e7276e9846c40753cce21161bc02ee5a20247b98d544f7deae5e1436b044cecaae38606ce7e462ce99799fa5445e59be53080f5814774a68369ad357de61279852611188605d70a1d04951ab70ec1de77107 -fe8e033fe74f95fc7597bd77ce53f5a92c84f5e3f4b5a67edd75212c07fe8d1c69908a3d0c61234db49d52fdda10dec511a5895d8d629bd6931f44d99f0c3d197c3f704bed11838837d996e2970a24c703302bf6e47607c8c08cbd86c098110ed0c9e71d9d26543ee3a367e3d96a56be228490294a00a295a04f9f171819070d -26921a78edd8abebef6a1bcc0369fd55265039802b5fd3cbdfc763cb530fb30f555731428106ed36acc523d7b1bb8d2d91af09ea69efd5938424e1efab338f19f87d6a459e658b25553b40602372358faccda760fe4f8484f640c74b962c1d048cb75f79933b15b6519c5a4d78dd8f4cdf777bbf182bcd274ae5fc32aa08310c -7589bf73dd88ca431adb67a90e179681d4095aeb6692757bf07e21a1efbb84240fcb65168e79869931919b07cbbf34b9abd12a2cd6d6316344460e6f0a3ccc2d57b7091cdb8c692d92d8b487bd517aafc6c5c59f17fe9a2e4a20c30cc34d7007d167196efa723f04c44b418ad5e7c122c0c43c840cd6836f2a9bfe42f1171e23 -0cff1a0e517b864a8ec63074fb3bb7ce18f5bfc57c748867378ae30261746309402302837d98d7302380ca2219e51e22a9768c231ee721e5bd8cd1ff8ddcaf10aa981590c4ab4abe1f99d4596c70a52ff2d55cca84bbc0520000cca175170617041c8c1a9af3a706e1f86d06449836e8ef4ee072cfb95484e2e9b7cad89fd42e -b22268dfa39b4ffd4f7b28080f387dd7f70d58a81d4982ebf791f7ad9073042a75fb0c00614ad0e6ada4ddc3b6b6a17053a45ec3a7afb6446ee66ac4779b770caea9b11786731904d8c2445aaf5f9726b31c04f3310c6f538383aae708ab1d0b8336586f3c45364572b3b3c9d997621329ed4f72104371ad73b886495b9b2a24 -8b8f18206476296caa4c53668452ac14e839b9315fee9946bdd231962d75c22ca3d600c60a769bd29fbe996489b28d1c256d2f9350d747abd9dcc8d0aa21ee2d5a6aebb7936c3ee2780cf261efd8400091c73c9c8e10ad5ace934a253bbe5619b7b6e134775f7fc2b5f6148358977a3d01aea80ba2b36496724775c515c4c60f -0ea8b38d7d20e092469228680c28bdb2ccaa00cf6ca3d361cc63926fc9ce5b1a031e47a5a85ffb6ce0521bca047e1ee380669109f723d8dfa473717313aba30022db27a23cb19220de9311c2f0ece07e93b120bb7ff4046168b0d13166c4772a1f8b4aa344aafb9cca23d26f2052082a36fd3de4f9e3768c8ee50ba786470121 -052ebb7b83edccbe0be442719e1b0aee9b70e19462417cfeeb2f7a3e0f3ab017728cd3b77ffebec43a89181c206b11a1e4bb467af335bb384e8736f8a839f525fcc7e9805631c888f003de9002b5ce73a18fb630f3ce9cb967f5650420586e0171918fca082e9f787d0fc6034e756ee9ece062c0dc909ab53c3e7af097b44b29 -91b86524f9863b487b9e921611ff30bbb3e932666cafac7f7b2b7d73255d77076d9e9892f9f3037f16167e0e2a61169802b67f703b8615e975f170baff4e971cd386ed8eae574921d479e92ce428740d255e018ca69cadc18f15489c25c9b2219c43e865d203d876316ae6840b6c496abd93892940a6a35a439d1fa59506fa12 -7cf2ee7da03bb9bcdc0c2493b8df2804f3448f223f7c6bc043de3eb49c46842bd0dc3fefb9564a30886f10af9bf3b8ed082cd877643ee5e52e3fa61af924ff0c3a9d29bae903292c0cab756bc1f8276161bfda37fc779d6fac7b7fb0c6b8132513878f742adff8efa4b2c5cbae8c3d275fd9aaae3fb66a1efd55bc13adf3ff19 -2cbefcf35308c1acf06dad7fec194b77f4c01c504e02870dc80511c1c104f926f0c04eafdc3d5278e5837b22c3886f4e91ff42dcfe2d9a319e05b7722d995b2fecb023e518bb4494d86c981b47970eb3ba3a4a1e7da49ace6d4efba20d473a032a94b88c08eaa6edf265f47cf464602ffaa05f46bbaf2d18b4e09a15a5debc1a -2598fbdd37d52291d6a5308ef332bc6c3ba511a092a87da250a9be405f69bb0bcfd60ee6fbbd05d9fd1642f129bba2a91d37bf765c41b4cb9d936b649a153106439e876d28a7e9c73f707978f6fd3b99c2751c259295ded8233f931034fd681d301baeffa0d91e8b272dcfa4e0c4a382ceb96cf6bc7ad23b3d509fec208c281a -f4e2d213317daa1f59e2870cfe1d964996add04c318a13a9dc47da600336d621a17c4f93c899bad4d9d93013c42788e4d3154148ffcac8fea28ee6460f66c623653b90fc262ec80d1397d4f311c0d2be08f0bc4e9ba52c01112af29bddb55d2021c8b34fa8f38ae10e72f1f3784180b3dcafa0cdd0c5650b3e87e63241f2a010 -ebfdcf27567272acdee1db0968ea158cb825ccb97945bf49bb7e28ad6045882b2ab07777ea9b83763129a7abcf475d1c79d71fc8ff4e0afdc824a5b851b16b09a1b3b4acecd60c14aa50a0e52caf4d6627b2fad0068771df1fc3e1f91704112ab906bb185491164681fb2d4c7d24541e85ed8fb237aeb685fad1a9ed9d936a13 -70a8dbfee609a05f9df700f7e2658ae5695ce963dceabf3dd9bf7d09cdf01c0042aa3c92bca088d21c888d7b4910a638108834d81708a51135114a4ea7616c0f84f0fbbb144a54a847a9b9327a4d6d1c9937db8eb1f247cb0634dd95563e760cecb8fd9a7c30e1e44e143226308bae8b26cc8a35f48a26fc2f5f9f8bc9b6d901 -0eb2feb140f31b721b5b29bf57e76b67daede54e8ddff8921d3f369d9586820382da1ac8d97ef466e913fb7f4b62b69eebbee455d72afb5bac5a356d74345c0d9a93750a07454ce6c516801501cfc893f6dd3813140911220149b937b999d00a8c1e87b8363051057cb70d174e285db009d6eb4d5a98f6ac67c327d3a344491a -804fe18abfaaa93721fadc2c2f2809ae19ec8d23c23a71969a3b4bd45c37901fccea327508a373f2d0aceb95ab45d58da104c8bc72b359004406c03d1c4736200825b81f9476eb74ab82d603a700aeb22aa380ce1e23ec6a2112a615b5c50022213b11edc34d16464b869312363b8d0598ea9a57d1d3ac5ce9e9750e9bbb2b20 -f885373a3ac74200d48840c868385e928e962c85d6351e7fa172b83cefe88711e816537c60c4f94152a2e79644290f2defbbcfbca71007269eb2387256aad50742a5a4822f3d0c2f41517be60599a7d0a09cdee805cd33c9d47eaadeba46f12a7abb179f1bd184e1419e64394003b5c2d147b30c4d33783fb09120e3ff54da11 -e2a44045ffef37b5b18e7dc093a14666a280e11e196c482d349d73cc194da80317449c69c9515433627322c243e28b1bd81de55eedb5cc2e20edbdadab83041249d30b4233bb76419e6a45366344ecdeda11d77b3bc8ccab3605df9e9ad08322fe7ab2bf6cdf575238e3a146fba497811ef52de2e327cbbe6375a6154a02fd25 -20062b23dd6035c4d4f8f50e94755c22cc081ceb64b8cd129475a0458747f12864df8b3892fe55a26820fc228db5015a2a2ac86e5018d2aaca833d4a8ee92d0fb970101117994de9e728388512b1cb4c6181268673bd672c1073a30d1692b52c5b6c6cb13d937fe27958bb6e4579c989893094cc91f35a2bffd0625fe817c02a -a00383c3890074c2f77b545f70db8b028d4c9ce79914ad9d4705269cac5d1e288b3c1beb15118613d65790210a74d0395824e3e8e85cd250db3a66540b2f2203974e7a82d41000c513914e607e4d1918c60c8245e4fb0063ffccee1db06f9503de2c0ae304a68ac4ef1cae6a733e884730c6066952520d185f4b066376150624 -c3bc5d5888a85a21bae39f835a81714253a3e81b12f8afae4cc2946806b7471ee6d639f11d4dbda72009cf3ec5cc6526ddaeae38cf084ddd92dede65cd22fa148ee0b1b379470d3d5a79987fd8b870577bb3d25bd9db056d237cc6e2f80cc60902d669c9b37e46ea14fc12459b90e81e21709e4adb3bcafbfc077328d857c218 -9b9c7d6c31e0d89b31872a1ef3588ea95ccd321a6f92df27eef1d3876b523c214fc7054eff9f668ae6d13c36632132949c13bbc19e31cf0293eaa3cfcc1f17212ab7e3a4378f8d35b3b408a35d623dc33de07e780584fbfd06e15ead836a2b1ac1881be277098bfd96ca54b32885f2c7dbd344615256c841744f19d9ccb58805 -5410e672aa244aa5ba4641a97f1d416dbf8aa2eb932fd6ec877b91c03b790f16e938a4a08de493f3d32c5b8dc7aec30de2c4c43a0ac95b3a5ceabe2b50e8741ca720e40b70a1f7ef8b244a9b0b71a505f53a28f6143e5a9ae145de49b04ee528e9b26e55eacf432cb1a394ae75f70b24fa82939737511499625b63f6fecd0a0a -4c48cab65387e0eb111b98a61e062d90633e452f9a7cb265b9db9bfbe71ecb1108554129846c1a6d8457ab0d126367b10d39d46c8ba2929dfe29e15b214f5d084ee8bdcab784be980e0c21a0c041580937dfbbf62654d40a494a0036fe8a4024eb4f4f28ef8ee31bdcdcfdded8fafd2a5f753d74735bb46e8b00985d934ee418 -66baa1240bf5f3d411de57a5b8fbc7a67486057cc7a5df34fc39a5c1b5d8b119e991995f2ab52c35495a766e9e9ea8f5e79260713325241157936b1c3e783f1d7f7c23649ab4d113fa4587ee51f86c80c6407f859a8d30aa27f0f88f607b3b07542d0c9a295c04abd1bb00c5fae637c3afa3fb3634f8d5d0d4cb9a81fb895912 -bea622837a8df39207fab58170962b4695aa0e3974aad5488eb8069b29c37c1c8e1a6002bbdabe40c1d5b77d2e534a34c509ef5f3b7243033fe1fef322e5db0e495a8fd782ae0516dfa1feffe75bad8d73af256af1dba06994ca042d8f4e700eac4bc124eb15192f5d1b0d4d2d90173e5eeb90e5d15d5844b95d9cff45a8980d -6b903b919b2d7ad1ce258b844c545f57ac91bec4578e17371cf2b3940928da228643a13bf4ec02c6704615800da65eb4e64c2b2fec8e6b35c702bd3b7a2f19260b0fdf62a6f652f6e991dd130bbd127a5018282bb6ae3a4f682b38c4523a9221b66ef34002e6d743c1aee639f24d6389f9b1fb10d37629641580e6f308303b16 -25e1e469e3e216186de604f1f5259872e664e4b3da3db45ddbd9d5d2b224cf01a6a719410831f147ba21c98bd9c41e1cd9774c28b105237da3729d2a768cb90b58b924ab6be5e7de220a27dc115829d6b82ed40f778fd8c7d5ff0b83a366d12daf5091c98484d35509434398d72d82b6ec045520a753c2b7c84da64b5f4deb17 -386e8e66035f0ffe8b272a1e1824ebd3163aacc110488ad6f131b577a42f19095e0f781952f5bb1a05d55534697912106f5b08a53096ccbee8aeefa6f9fbc917a51a5d421a1c9e0968bc7c5301bd882e36aa9342fe0c2ea242f1493f3b21dc231f3a8164891138616a5810f99c9dfe309d517d3bcb0629be220b2bdf73880430 -dbb053e944f3bb53a97f7f1bc9e0bcb0f6f890f033e964dda01b62ffafc29e038d6293d39fd4f1f752357a85f0439c89707036b9c3ef35c5b0a282717d970d0bdffd812d3a82175a7d0bc5195acb5cd58288010e08c312b608dc9e63d397eb0f6db65ee0d9e3bdbff51519c6cdf5daaacdd8b20b534c6cfa0011a9fe7aa6050d -d535426d60a25c608e752c1350988cc20ef268c26263bceef6f6f0abebd612276fe17f34a7ff41f7c54c4e911cd3e15614c06b856db1bb8b3638991fc583282efe03fefe46747e77ff4293299874ff19dba3ff88165d23111862155faebc981846096a4623cc5ea9d452a26e56fc1771828632c6ae3c1ce946271a821ac79018 -244fda03d7d588c39ec80295c34748362e6526644799b24ad19cfc6de72452256d7d1ff484e6eefc188319f8641759e1c4556a2b92c98fb09ef54e903f779a238b34021ebf5a6859130934bf9ef3efe73c1dc1f269e036dd4002bbfd169d0928db710d6c3e6494fb996fdc03980ed37139fe4f5f53f0fce8008520c388602e1e -fa0b02eedfc6f096f0b1d12ce10ce87f253b8f338703519b62bc75e171194206bb932e463d48ba16bfbd3000efb22f3f1fad4a3c6dd7d2115b9d1b841786d90f6744b01ec17891a4ccf5dd85acefa1efc4e6a71f5f6e8c82d98e29b7b8c7161cfa0ac17accf4840b4396e3977fab163725f5b3eb3797c2dff18f2317ab31d51e -9fdc719fbf88f0ebd10475274ca84353f0eae57fcf5d184a4e9e9c7db8349b15b38cd8a5398e47a2a9d6466bb9c40c052aa9c9089c8111920d787d3959446900f1fe975ad0f765bbc7ad7ba06cb8edefedc6a2419c98d62389e91a641ea043028ce92c577c8ea43e958d02b3a74a68f877ac18e806657b61f5fbf299a711e10a -0a0eb1b94c4bba3b1d52c039da02a1924060cfe8aa92d5ac4dde3b5f61bbbf0e4874e1fa2901d3051023dbdb9e0b61f4288a1a8fcd8d797c455c8679fa6a561c06f04f1d63d9bec4a75031fb19208245b8511e8067c305fff0f86566903dbf1be7fe5e03728da5c69f732506910829878a8b07bd3442a4a5cd86956937771709 -b679038a1829b2ac35358a8f1f59b4d59b1cfbca701d468d584ad1589177d90dec5f4ded80d9f8481a585a436ba701cbe70dcb70543ad98d23909107f977b70f5606450c3edc142e44967724503de200905adac12d729aaacd26017e2bb00d16d5a3baf3fed1e4ef6d36cd2beca2c0710e8463f2f1fffa3f664051e5c4b48305 -abd08b3847eb2cdd6515a6ddf2ba7ecb41b64b26c136d958bcb35bbcd743c70bd727975e79d7447cfb11eb21f7f0c91ff729dd4fb37f8a5d803ce8ad5dc09626accf8aa5d3b7269d9317a5a5239ba33ff0312a88ebbade4cf376aebec05f682256d7d474f05fcd92a297d03621c8b83f1d565fe6a449f2017bd443f0751ae802 -333b0929551bca28fe068d36744d09ec9c1979edd330d50355492570348e13097091fcc362019d7d2b52f83e18e075cd903c91b5294f76fadc0da262905f1e1a85865cae8162359241c8e99bd93d593a8ec17dc55c6535269829bb65a411810caa1cd98ebf5fdbac8aaca90063203b179b19eca4d12979473bec033c974dc90f -773ded5d214544ffaa6ea6c221fe2e12131b32208e63927c1d18ee4a0042090a3c973794a79ca61a77be3db30e48fe9afcf5835b661c036e2204dccc3c37730389167cd9e4e69d11e2bd4201abda868d368bbba9ad53a4335bd582f5eba01504cc252f0402e168694643f067ba34fa84b825f047f48eece0a592c63a37a6c008 -44949f9e03ea8a67d169dad75f6c45e942110049198df234e01b47956523140054f847862470aa56cdf6d9514d18139bdf968cbe601ed8dfabcd004e4f3fa50a15ccf3a065ae8de10754526ab4f93de18aca93d1da1894c2e8c4ce26db2d19049daf0802ce0b5a9005b35cd0f1e484303200c5425be0f4e7ba4b5a77b6114503 -c949d86613184ca32fe0e8d388534d1e5c2a6f0aaf2aca4a5ec4561c59631f063055950981445bc0c9692a9b65a5a42091df6093efde1fa7a7604f077df61c2c56da1532269390b57621a059183aa8df7f9021a0e9c01295828f49c43be96609801b7c73e69883ffe8c1ab68ed9c5a4aa6d07d93906485151971a72934672b2f -7e0ad5956f9c5669a3115b3bbd5a410282979280e036f439ff83abad1edb84120b9fb0b9294c5a8df9054a5922d46cdeb2d002e9bf5922c570d177d96f592527befe4b2f73fdad00bdebb88d36342edec14d8c4d6e710e466d8bc5f372278c28ce082fc0b276cad8d68a148239665564151fd29c1019db947883066f6606012d -1b34daaabf5240e048bc895d577742fcb454f50066a20e6ca013eaee848b680ea44b7c42e58c7053c3eb1e0f3b8ebe46f53e7a8eeea44f291c294012286512009096cc52b0292746668268d1258fac6760e48ccacb0d1ff43f60d75d538cdb1031a29fe6437fdc951a7c81d1e881b930bb176e13f9fdd69371d802cf955ce328 -02edf0954c8e97c1f06ae095e8fbcc92a984819729e020faa83463ec67e4620ab9b4ba481fc0e2649961b629db70a808c3c454421bdd71def68f6a07922e04060a2c11d81f5f0791f6b50e53273d0cf4f72636909040ab69f47f0d5a9e17d805336792bd73289e9305e761d33c22b92035cbb29527633db4c16e241735422f29 -811d34a79a42bfcad286b287cad1441a8f43ec028cff51e29b643be891a7dd0823f5422fb4cbbec67049df1f8e12f445f6d5bdb6c0071edb75e90994866c77039398cde8730c101bc0d261f5fa8e33f59164da6939ced4fdf2971b357d243929084c7aa84c84bfd4dccf459b7c28fc74190703ca8724491d1a9f8d8a98b3cf18 -5a5986cdb7ddda85338be58c1d586692a807f20f4e902f2ca7d65b261679b007e8c4a58215d0a9ddd00193013099696aadaff2461c35fbc286a3d72d159c36304b9fac942aeac4ac29770dd2a457ce78019c02f4bc0a1835bdacf2d8e041bf217b5cec849c68798746de76b479dc1db35758c3b199fef54d6b2ce1b10c18df0a -5e4a39efe472f73506f6d66951b4098db679db5ba76cc2a1663c3d909f45cb06fb8e5f0e7f20c17068945ff32d6ba6232960b7594f4b289067330d55161cce20aacdc0ae4b3b580fa9c6f8e47555cc35fb52116147455441b710d8a77a058e07b6d9b6261ea64c4412f2309e46b02479f59b576646768c48ba9c61779958d100 -2042745c0319f91252661fd6cfb475d5fd18c3bbe95447fa9f6f691ca251a421bab971128583e7e7428ab22da05dfec5d482de772ae95d9e35f6c94bd896b72c5e744058a15ca6d7bdc23ce5b661a5f2b7165d83b97de60167d78ca1687c5400d079f3741ca3fcde69661e55cad41b2879924cfdf1432bae606c9e38be86b62c -314d2c612b41d0b912a926f3d2860a065f8d6ff2fe722e87b5dea23be7fb7009ebb778394d6bc976ed786f432bd3b4b03384f32ca327b0255590de20b738f52add24b44095d2880c4300a83dd19cf0b5aef87e7e400ffcee7e5500b704682b0e956ffa6d4c2ceee7c9e0b4cb850d59eabe1d00de5e70ece85b6fbbfe03011d22 -1e34eaf757f715e1497c63c4b718c3aa3eed69ff791f746ca6faa73d3d403f1376286f134f332303e9b2b5bd13c5651f98ec1a47149977bf729c10772e1ae114941db185acca1645ea2d46a16e3f1dbe8f96f4c34637882afb434a8971c436083720f90eb95b2981ea6cf54b3fe56e94b24bccbe6dee23c7db2ac8b10bc08822 -bbf9fd754c93e0d33c3d2ac3030a4cece53ad5c145cbfc662f223c78b2006d148592d9b0c7a56d42ffc35399d8e9f2f5d277a5755d6641ae1d14810d68166702f4e508b2a3ed7451dd747144c2f4d391574d549914ad8cd7d0134800cf0910276b65400e685de2afe53ca9b908a15e0e7f6da9de6d6835ef93dddd75efc3a115 -cb2c6fc811242085e39905471406e7608c8ad0daa6ab426f71b7b43d12f88128c7ff9abc6a863cc163100cabfedda111d78ff8d7e1c4ee9194e624931c7678097c104fa6b7bf93f761932d98d36aa3c8559ea687e0faeab10bd45510c225810a1abef7753d2423e54013575e4175fcd6f3659ee3f4ed8a845e48526f7d88aa1c -094d2dabfdc1dc66c1680f0c4e44cd7f543b993ed6543d860057a2ec762925247d14ac887e5249b9f9b756141759d33be96458b5ff9dd0a056a0c113e8eb4224206290a4492951e91b9dafafeddc0277b2230be46111608ae2d35bcc8d37990446baa47193d70d40d4df915abf0d08b1a35bdc5515c818a68f11ab7b3865eb07 -3c42a96d8ca3047c52f0172b0c175c1104917781861340bb6b246303de5e37198776e47e370a2e76d7370080d01f07b737735cea2e7d0b0ead965f9905a80f0aa782f5834e6cbab9d851f109b6787f472a51374b22f59d1962a6534233ca3427df2ecf5fe05dd631d2f0ce131244b43636290d0d72ed53e9aebd408a84970c2b -322784050edecd0d977a9ce5b100d601c20bc6d2f8a28d328e84fa692d8a94219a82c848e791f2190729d6ac0f5ed9c5bb970cf78d72369fcddf1c1c3ad0a30b239d18e8ad005f9362de416f45d343db28327b2aab4bc5f939d8b803701b701502a12ad89de3f522cc8259ade696d6bbe704adff0486dc14c6bfc3adc735852c -d5a3238acf1a7853e05dc8a31f31f922f6eff5be58542798261c4f4866146115a8b3277d7bd96be27e8f233a16b27f5e469d12741998dccfda4436c2beaa0e0371f0350b98651ec5e9bf7c7bb823f39e824dbec6d493c2cc4e471dbf70832f049e54d0add549df4cea4060014a55ff845bd3b0a96a042ac2bc00ac40d1509000 -006cd3ebed6c0a14f07b8ae9fc081de204ec07972461bc59d147645a2be2bd1ffb28429753ac3b69a5391bf15e4b135547730e821f198292772b8b5ca5de681bde178a68f0c1a91dc4377098b8dc12534747261d54fdd8bf352b5a5270e1e72123d58f29058d244743ea407a7126f5ebd82650b56559b5d862d308def078ff29 -8c54a14ef01fd4df26a841eac0d61153d371ab13be80c305391bbaa678ee3d08d31ff3381912f40d6fc3fa31233b87f0b6ab0c66f07d998ce59011fc79d7231c980dc03a1d398694e2d3969343a05c1bc5c7cfe05b46852c1c713510d07f862a5b925f01d049e3b5e7b27da8fd5497ebf4c9886f9384996c462a5b6cd5cfcb0f -91aa168e03e8318c7e80cf156bb181e993ab3cf88a4442117372963253d4f916c557510460ff5fa2af4a0397d34138b84d245b6c3a28d6fda9e47716b6ac242253cf1bb2ed32fcc5f945707b6daef3ce08dbcfba380945e75f56eb90911847131630e4479851b41e9ea86f1a86cfa8435537d381eb3182a6012f6e5979da9e2a -7888d1426b28738c4e5e892bd47ba9c81af2f46537c143db81b24f08ec002d07456d6377ddc5aa8c6bacaaf3db791478ffb98344b60a1e36596bb9431e6ec928af6ee55d8f310fc2e47f574f24d84dc98f7570f659cc24f431200fb99711372346e32accf3e5d917a3c28c1de02bad18dd05d1cddaa6962e4771d0c48a59b813 -3ff3476b13a2c8d129a74afd40430d87c7b30a027ba4f0a167c788e560dc7f152afda63a2d88d2b857774dde1e6df144c01b0eb3fe4d1b53d51d55c49253fb09af0a476131a1e6219294173ead8aafba008405f0a8b99b97eb9f325002777e0244f4c1c7892dcf0ece744e4fc2a41b1d638adf53e6c2dc96ffa95781a2107127 -e01bfc6375172b7b60ec6ba83f592fe6de5c4a418eb291fba496270816c8b018d969d7aa57e5776a5b816930f37c71f90d54ba450fb78f5069584d1cf06bae156763e24326f554869bcfda2bdbe3577fba047620de594ff60f72c11829bf6f2c79018ca6ec3f4836672c79bbf87233ef671cac6e728baa057aab50d748b7bc00 -91eb935dec6303151a1d2f634c1a44f3cf89aaabb9b2a686d4608bca523760240c911def024c134764f5c75e3e3fc8ae2b1c84b853cf0b605e7b1e22b21da101c11fcf31e8acfcde5670c64bbe47f4a5be853b0b7949a3c277cbdce67c401302fd47d8877da07a31537a61299723d674d0dbccb8747141ae8ac0db3bf002ef1e -c06f4b4b592411083ceea162693710d8602ca23ff4f0a2ff373663b459e7732e202083aae0540dae9637959d8af7411a2bde6ea371a4bbe23c8661f2bda5d115956cbd29613767204e6e84d8db3fa2c91d8ec95bec1c1aa36cfbc863804f011cdfb018fb1d9a36a9aea159cb0552d6ced07c5ebc216e79e0926c54f5451dc717 -1ec513a8c5b99b41300df418cf075cf23fdcb6930ec005510a0e4319e9b20d18b96e39ce6225b4c50e47133c4fbfe85fb00f2a1c6f202f6adddde273697fae1ec187a9c040c232b1977e1b97bce8fc00d103675abdd21ccdcea2c5767a081b1574119962dbc3baf044d1bc6f998413eedee3ea80a68e643c3fb3424f96946b20 -4c6676feb491254789013d6cc8993c07778671207d2f78530ec8c397d87d30014061ed7ba383a7c464d7688a77a548c039f7274609693bcdba1274d5f83d042e70129748688ad869222a357c06bbf7e4476e32f70ad8de94a9235b2b7a96911422caa2ce428fddc39f83e0f927c74f50c1c37b214910085def81e3158250202a -55b120b38e3b967b0147d1e916dde8aa839563428fae34b3aa6623088a798a2bb0d48c8a89f3d5620683e95530d591e63cbfdcf4336b2977022d8c4cf9bb0d03614b78f631fcaa3cfb9bf595c0c7ac3b55d1f362424a205740fea8df2fa70a0c44cc41a01b2e064e86605ed9d1e41e8dd5e8c632cc1d8eb708a46cd9de044800 -a1df900c18176ced18597aa10858b691db15994fed968ad3a92c9e2f57366d0e44a19ab00342eb454593428891f98357c7824b158899608428236dcb145db0113fcd5fca18f218aec754e4b990fbb225547c4d009a5ef1da8ebf8e9596095f288d3930ada098fdbf8b60d019c3e9c66387055ba3f8b62ee44dfbafaf23821a27 -fcedb11f7f630f7800d566d16a3d1abed9d64ea625690ac340ee2acf873bac0feab5c239c4015120eb6ed073af07b87908e4d89350a0605ee1f613f81ec0d2083376464d2536e5f2aa7debafcb54d6e326edca3fa2ae8a5eda775ca2d126320b9b93b17279cb11d5455924ea833f3f82d6d743be71d2fd56f0f83c4066f4fa2b -abb028e1093401091cc0fb735e26a12713ae827a177518583b15350c4b006922e3b4981af41751f08a637db490dfac7fd2d5be131504e9a662536efa3ce5d2176e3d1b6635b43d3ab82632f1e5fbab24e0be92ee2f6c20ae2e82b6b8a7f12f050e2f40ad45b620bd68b869e1b23127edbe56289dc8b5386f48b7cc4e316a772d -b884f1804fcf8b0b2e596ff9333fcb218e22093e44045e311b88a11416c1f400845bb814c99063b07f08288002be85aa17119ac9393f106e1d3ff3a87f440907fbaff97058d17e9a8a813485e4f15bb49042a5754cba443117719b004cf3a20bf57e20980f258d137ba302355360f0bd9f6e04d9badb9e20fae2920c8c0a5404 -4c677206fc6df89d029e0241ea697e365f45928e7492f529109cde99a8d1fc06bf382d291e687be4969b8338450b5d42361f0b29e0a14a122b1f85b4b5301e25df17f31e7a5ea9a34fa28ad82e2e99e23bcb27a288eda6451256412aeee4ec281cda2c1350aabff533f1411009c38f672be8df6f9e53752286180cdd963d8d1d -20382704edcd6a5e5e8031a1b809abc59ebd4632199962984c8fcec7cc7e9f1e63315042863fbaac343a5f10de05694ace9c31daaf114c1bc7e735e80a8d2a2c9c5c2f7d6aceec3dd8b3d83e11f0f167929efc6198a375c271162d344186f729f74b4cc565b1d574357c9a8a43167259f48441078032a7f8eb65f51a738e2326 -96933be05f071da1de9e96b465728f58a950d6fe5bb15a42b06a8f03a190602c707d2c2277b2d348f7e48c9c70d86e13415f28a368af635fcc0628dd5442e3173aab7d03dcc5bbe8a06516af0102443d49e5bf75416b5264566a2aedf5920a1154178af9645481db7e570981cb791af1faccbb59145e836b5f325a319ca5a619 -7139983e3b7386c2cde2b3a3c031beeb0c019186e88057bd844945d9846ba30454755bb2b5b7874727ac8c54c73e64823552b34d96736f71ca9589eab3682019b5cbaa89c87a1b82a19cf2aeb52c371d452293b6ec54dda02218d78049a64215b9555adbaa6820629018a7394c5beb8e3d52cf4226f523c2447360fe4ee31704 -c4b8f8bf9aa30a5ef93ca3210e93f1a517562be265861a4c45c098cf32ffaf2c9baf784d1ef021d072a5995b789c4568e7ba75ba11d406cdd00269dc607c1a2215132b704abe6d8e8376eed20f03dec93551513829ce72c24929c49371b8780f6fdb5e6ca3319634ea59e9df4f44239093c6b2d39efe1be6d9f5f7918c940210 -6f7a47a8d17b21230e6f586b81036973e57790a63c645e1191c4441368369003aac5d6132b48ebda834faa241796f4408cee38328afd456be787b101c22ea2243c1ef64bd50018c3b331f586ce529202483de10b9ec224fb849bbecdfe5d38245f29c9f091198ccfb588267e8b939b152ec241663cc6f856ac4bcbfbb3ad1c06 -ad1d9963b0ea3a8a8c7fa3d6614e3a2ad11f129067d02fcf60900206e2138e279acce575f979e0a6dead3e5df0f916db8b215be5c93fdcc87331e1d9b612031aa20e262ffb167b97748a6a9c1fd41303703f064e02f83b25ace1a80a4ccdda031cb1292b813da2f9ee1bf9057c8531ca3008f2cff8571e219ae7088663ab060f -f72fe4920e75d65d3d9922101015fbdcfc122d680fef1d0f1fde3757d6b0d22e385ca19653201f0c4c26bf1e6a06b4b1f98ac454e2c4348814bf7d692f83a229295bfa97f16490427bdca2413ed82aa365b7e3105791d203824a0fed4abfe91afaf122032f84d2734a73e7ad0017ba635dc22c40e4086aaffc9a275166957f08 -4b766b075bd65094fd099fb5da6dec46074ce69a1440ac9296119aa46789a528cb612af11a4cb85fc5e98abc2f7b561e1703385bcd983e63dc959f2e63bfbb1b75baad2e0f00bf24bc1949790eedba82b51a29ab339f56236f74c825a25a062d0c504c3eea836b5aab5d3bc2b1801f5cdd8237ab345747f1347cfc930230b213 -53e9e2a2fef49a00d5b16d4e5870d3959b4a6734755a378bee29ab0e207a160be401ddf1818d1a5a0c6419525ec034f12fef9432c75d47b8e9765d0e5ee8de003e62d07d11f4092cc57836fe82cd92d0f40655787d4d702b52db06dc62e5a106e18d394fb22c919174c690d1201ff0e716a05efcd5b3368f74fdc0a9b15fdb17 -9d0042c6e341c8bdcda615ad33d8296c45c1355ad39d73233fdacd14ff40492d6c0f01eaafaa5c648f8d0358002aa262f963dbd6a9d9617e883af06950a6ee18474e3aea4fd338aa05085ac6abf9ece79f1c0dc883c54ab7e3a2e47a2847511ab0fa5daf45db9680a969a5edd30ecae8def51a8f00d461f8706d805b431e5702 -af78f7e904b0a44f9ce48c3f71b558df86bf1b9e78172be5ce1c7ffeee0090271976f59cc99ff82eace074c2ec3761a8e6c2d26fe535888e0a6b88a688b0f00eaa64b16eeb5f9691f3180c711b15ac2240d891871d498c77ae1ae5ea21776b13e71e4154a0834491827d30bf80caa8a11cfad05e658a6b3a151cb1d67589251a -7fc17f00c19609216c3ab34dc077a3d07d571346710bf7e60df21292bc808f003cd7ddcbaacbea88d514518f1bc344cb71e88d2bea95fc159307d08c49e8c32a6edd0cc656b8d53aee78d050afc0f359c1aaf76dce79188eb02e2f4cf3f5611903cbbac7e2e1b054ac5006b850d365b59ae125c83e9c180f576fefe745a99e0d -f4c656c414f14b69ff016d9987d64ffd248490752f974fbac329b3b489544800986011030c6a51509b8e7cd8aa9409f2378f0781f0f2d598f29d3817c4cd4322984a40ad7f660af3124b3054acafafc9efa3cb3b0af441063fb4134f3ac42815da784c1b1d7b21f08b1813e0ddcf41ff07655951bcccc06a507f1bc552f22c03 -6ef44ce0a3127a232e820362730f545b71977be8ff18a3922c54b82eaca39a1922e87f7a8fb15542f21050e59e0b0ebec855f44850ef7e6fb9cfba4db9d9830b139b80b512431ff063d4c8776649d326cfb0f94a986d66f2a2ee8350127e5d1c38c3b3c708727e72d7b252b6efb21a102a898cdb335de3067f6e8af0babacf00 -6552c1ff281d5e0980b9aff972c4564c655cff0091c3bb2b1efb110ff70499214fc73ed8e85e8547206073cce8316e619b529cfd9e58c9642bdc60c807656e2449ee9250772caa3007ad06d9d2a9c41c7f902473e2fffc5895c0699d7e04e81bdfc84e03648dc37666d82b061ddf06cca5a40ca162135a3e463838db998aa526 -f1e873d77125cd0f1b59c252c4f353f27390b47a148e34ace1a94403ec495000f7cb26124c476a5f1f058f57884301ece2e5547353dc41f7702d06d02572e0120a2bf914a2c62fffbb17bd6d1ace5c52184dc1c3d7d0ed4d8c90fd0af5f9c62001f835adcf3745cc5e9691062bc063c40f3aa0ab7215dda08bb2e530809de521 -d6c9410267c5e2c03887766550fe063faad5a5f171864d514f6f3cbc3e37a609b1bac660edf1615814a0ea6eabfaba63b6cdeb3230f88ce34cb2e63fece96923bb20da3507a71bc1373bf62da36aae49e30cf7ab33f2459bb8b4f24768a989130ebdbfdb451607a3ab7295fb726ed761b54b9caad8c2872a74003c02045e9e0f -d5150493d0c33cbd89bc2e21c486808938c0dd689409e7f39a12a0bd1183ab14fc049ebe42936d9f776816359d28d4fd21e4247dba841077cf736f4cb4ae5a06547d21adb0a201f4fd190678e3d51a3570b021955a8cfc435ef38cc1613a0419d1b3ec501f3d0928a8836819682ee52c8973dcd24b18701d8cea19c66b79fc1d -7d2c2a255806200a625eb9f979198556c5d9371c55fefd77d0142b433dd9e4196dcfc6ebf3c5c0f6474ee67a144962e1a1e2260df02fcf1a7e14fd01055ba10749b7655d3492cc22be34ffcfd219937e6a1e3eb48d9a4652e2778e705d042f0bc62997d2c4896c2918ce51bf418bd90f899b7e31dfcd200c14be777bf042671b -d7fb6ec1397df8421f37b7aa2cad1c1c4bcadc5ec6b8186256648b8c1e62fd27486cddfd555021112e07a943a484dc0df56314d152e09ab2175d8f15a48e660ff30e15582c04486c267d1ab700dcc7229ac1194e2b350287223880054d4fa529074fe18f9e4df13d392e493ac5372d9471f2d2de21a16992b233f9c098f58d00 -f9e1c4f50c83e281f9faa55f99ab7c4e30af8c378a9e4dcfe9b873886e5ab413a7f93be478299f696b7188e8ff4154d902d0aa7b1f9f677281496922810caf0ddb163992e95a65fe1d7f167c0470ac1c1b1bad8648977d81f048c8139811730cef56d2ae0f7ea42e458f37ea9ee16be4d31c50407268825f4aaf84ecb9ac030a -dc024ac4ec057623bd45bc08b0263acfd815c5ebf03972c6116d3239f4e30d09a5b8296738b0769fea9679e33fe6ac671155b7b08f97bb3aacb6beb5f441da0d4f6f5d1d2d127a56d6c7f2643e7599f008266b3801b91fca9925fc5481b4e217c2a32e884dd6b1845b7340ad3a4f8d916de5e269184624ae78fd1241a0da3425 -43e9a191a4feb2e415419e3b884370989d9ffb0569baa60e1255100532a9711a5bb1555304b88bf6233c3a24d1c34f4f606ee0aef7c9117cc03956b088c3012fbd6e800b2809cdcf37496e8798b69c2e363d9bcfc3647c11c37dc0ab28986425e8ac77fcc183f1ef3b3084f1ee3a914818f41a27ea05a90ca11ee6e300104c21 -9a6d457105ec2d30166f798200a34d3db8aea4e8005da18b15b3fa4062fac913397324a9a6c3804654054af5e5b25d0ff4f343ef67a8bc683c685525fd18850f8d3be93219fa61ff551fb299b497483ec9c3d277336c021e4903eccba9c9a907d0899d792c9c50e7f873ad8b6044cc90d512313ce8058de3fa459f401899ef1f -99d0def537cfb009a818b9e98ccb23cc00185537c25b5b8435d280d67216682b5e6a4a8fc1b7b327f10b7d9eb19e2722db2f71d5faec861abd6aace63cbd9a11a847eff677a77d595546768fe3717735be42183d4ff97ddfae702fda4a9d5600c67562d5a87a493b00d32024e953ea177c360a35a56281a0296fff6348012a03 -2d39b978759dacbd1d5b0f885c8ebcb114b45bfcac3fcf2e773a9720e7edcc093e88bcdaef4c8d10ba9b85a72452685e9b44f165150f051ddea02b915fe3e11ca5b0ad0c54f8af6d588763409532052285dc88083af9400b44d2772652f8a30c8fea0a1db7b9902214b4d542a9300561e545a9ff4a4b41abd37f956964a43c21 -0e5a61e1394fb63c089e3822ef873934a8435b125c9b11e3049f871a7455471821a2839742f726a0b41c47682c83da04a967b8fdbc963dbc8c25361903e5c825f9130fc7ddbf59b0815aa23051d475a1f8520a0c754b4f726d7f112580675e0b3b8253af9241e2290e7b151b0776e79d2792abba9ca71081ae936f9995a52a2b -170cea73958f860449ef85f6072e6dd60b92cee7e208fe3c5f46b0e04a21b61a168affae991adc03020e36eeb6a4f519b552b10f9d27ca4f57dc4c49e57de60377a6f70c9a637a701cadfd9c50b424c8fccf286e9a397457b835a5235733e0020d0670164c7a49f196f2426b202d3684545880e4aaf3d0dcd6cf795baeeed826 -7cec08672d1404f98d24e6a4a2a23bc688248a1c9555eca596c5f9ed85af8215bab3f0285de30b14f8bfa9fba7b96a5c138cddd0df67603e8e777816d343a30a7512c0650b8fdcbe14fa9152edac93060aaf986dcba73a4d6c73b3073cf05513a705ceb9e5b329615959ee28b9569fd3dbd6e8990812102bd4f5463d59cc4b06 -a5c899aa9356ea00acaa68bb9007be5cf7e0e9927ce95a8e4020d05af6b35b1c49ca50890aa634cca05fa4ecb6a4201b91b26cb606276dcf7dfb6cb502327f194fcd538af9f9f8bc76681caf4771a4a34e6ff7048dc4d0ca718b61b0c408900c66965a7cbebc2d3d33bb777147a34abab0cd89be29f1b7794949480356136e2c -7a5f7dc74e016c0a3199a7a892906b43ad0d6dbc484d556ef98944fec943f31080a7ca80d65c7811c9f58dd8f2afb2b5c3d193390cb8b44dbc560c595ac60621d570ffd0868afa365a52f652a495931a5fe7724284009bc14e93e2cb2ed6550796d1dc40375a24de11552b6bbac32fc948b48d1f551b035129fee48d03da570b -39473b69f9f87c99f8fba8eec8be72d9eb43bc3b4ad353e680ca17d44cdd551f31f779ce00deb3a7a9a82cc45224ea6bff4a4f77cd6f7e1ea7520634a4be9b12cf99bc0925aff71a10efea25314f0171c1ce300cd3875115f82f180ffcc21521b04e5361f19c3e5ef1af54acaf209549e26c5b91d624ac0a82cd4814547f4122 -33ab236b3727fb1bad28d3e372e30aa3d06dc760c235d750f201a19ccfb36d0d8bf8ed65c800926bfd2a5e555c2fe69a9487d93f658b35e8f6e0de78eed734270e19a1b8295be8b86fd065b7e7dbba6ac43b2fa8050322f226955ce87feed402a6722ef4c75a0147c0b43848a416f83cb8a35b5fbb23de407bb9cfadb42c9721 -b5090709cb995cfa62b03e4dd3469467e1a62a1a4ab46ee7f5ffedeee2109121d82470baa4c6dd49fff4c8193280dbe7b96c8c2a3c8715354631ecff3f5da506d7eeb2991015cc1adad8974b554b5282a61671c50e09ab99d66c6a51af242a0d97ed193f73b40b0f7ea4f1e6c01e934e60ae35ce9faea38a123189ee43bcce1c -05ccfd7b6ee3f017df09d619dbcff9eba3891e9110a5c0aa339fc3bb7ae5a61bf2cf00abeb3acb99f95d4a8629c4b6659948b71779fa5aa7fb0373528cb693092ee1c39b18c2bef86b9f0a584d13ee4560cda1900f5f9cfe7095f660770b1a12164b0edbeb055772cec2849467450be889d2a4ca1a0fa36de4a76bb4ece7d924 -9fd090a229c74dad319d7c98e5b1289e64aa1be9a4e88f1e074b2e6c8216d00f2335db60536c1dae1fba72fd4e570febbcfc05f6ffe89e1864489f58ded6b92fd184b868e8d9005dc5876652a5274ceb638c5a4f4baa12478a86c33dde945f06815c9a8e9feeddf1e440db419e0cbcfc57af21e5bbabb88ffd7a383fdae5981c -87fcbf8303e785b1c1c6af1528e85777ec1b4f0809954d5d78254d445415070612eb51541499c642e5f53a247674c68bb3e5222f8895c13de2604b60f4667411e39c780597eeec895748477cc386b2f15357db9ccc6766a4db1064b97e842d13f33080626f818f1a7912113f2d37aaa614d85e51830680ccd17fe27d2f5ed118 -9a6f43d08b5e1304b850f7ca732a3e6271fa44981e9dc56e17d50a599509ca0b8cf68e26f76bcdf4d60a90ad878940278423910c4b1dc03c7ff6176d38d6591cdd83a3a850558ca2046b34e0cf4d2549e20d364a067a47c7772ad8e28b5f032d1f20bddae44de5f785de088571c616e1a22dbbe5284614f39703ed9df8951613 -5ce8097c980ad52e9e2d5d94659626d064e13bb788653aa94d670576456625074fadc5fee913277290adab23e7f11d2ef9ba9af700527e76b0f31fff577a8c001d3f092093971d428522da2a28fb37bf792876f96c5b12ecd3335407b41c351c28555ff3677216b97605a097844a4e0cc682eee08f3e79ae74738cb4465d1212 -44bc8fec3963264a3deb9c41c1a7ed47e1f3ab865f6ffae9c0b7958db27f0f153963383334acdc056a028621bf6aa99dadc7f6173270d6b1057ca4b36a82812824220ec6b4dd6e4e4ac5b9eba2812bb16c62cfd77e0d4fcacb26defad27164178b79f5e87b81d40d75b38421033a0d006ac1d09d598af712f9c6227b14406525 -dbe60fcbfde5afca9ac79c5b5d05db03dd3ac03c6a8220418f1a716ed5126029d0c76c5b0b4b4b38c270e0c82b2e010d6e47566d9629bf2a7927a323726d8127da600fb87f3661b3b3bf8da7a707120920b7b0da248654ff1632aa325d03bc14cffb49d6088edb7df3caed88ad6fd9f1c56b202ca088c758d2b22170c56add10 -7ea58e9757c7fcf09d1a2259bd7f49b18283a2fed090331e3bb3aa98dee7a21d8329093b2bc8b55c311cd5aa7ebf382dcf591c06154ca3dbc207284f7f3a73121ba961d0c6104cb002bc02ea1ca5e8cfd8f56fe89eb9907bd60b41ccc75de5213a42a89613f7e8c6e2d28febfc5af58df9b7c1917fd3c637a5aff5e78c075421 -5e44edc923262e3cd5f91632a443154e619cd289f026b41040e59011d635c114466facd7bb5b4aefc18efc36b946812c68c068518789a67419b4dbf0776fd928a56b45d2240ca158cfd28a1e53bba0a45ae221e3c5e5a010f3cb89571ed3b42db243ddceec39c03919927df95284abeb827522f82341a02a73e88acc15256f17 -8197bdb32a293d65e5f398f1a4d791a47f3b39c40e30592e50297b5951824f1bae67f7e5ab11ec3116f9f9c2ee4a3614470208e30a9b82e2e06215cb71e2a22eda1757aa2536bc8459ac92dfa44280255917a6fa5cb7d8d3181eb0a1b738da03a8b78c399d1352f578ac1d6c8cdf28a619d2e5504782a732085b6e4adf1d9d21 -f2ad85245713442b82715ccdd7f3ebfb4c7651ff1bd8c3d5290106a8e267582791f93c6c987ddb31106f6c7cefb18f6db34e6036702e9e81b0f8ccac8709d117bab56890d477ce8175fd5be3cc01b8655b1389bad7ad57272b2415b11766ca06186b14d03c7d623438dab789c8e227c68132c1c820c83ca5b2f7819a5bc3820d -166a9259bd9e34ee4e414a9d0c67343050a0c04c041282cb0048108d353f06296b3498b11551c444db63d62e21daa03ceaeafe87a434e899cec473eff07587186ae68fe41f83665439be8317c6e59c27624cb3b7f62144214b9ffd0bfe8dfa1c4f52fb75f39433a4f6aa1f255ae99f2c825823bfd9523fc2a42be283c65c5122 -208941cafe9035faef28f97f525f15826c821ffcdd6d3b31e95f548ac3b76c197d8968318d448dccfa139bbada47b145a8a594bd5e83a3815df1ef90cb531c0ca894f235dc62a61b4e4a1c28b7d882cbfcf35da941d825e63f24312118b6212364cc2c4ce36a793fd36af525e348e925f566a02e2c4f101a27463e4c3fb7c40a -731b62d45dd48473930eae099882596e8395f940290a9d8ed7e525ec02abff05c59afb83a58fa5eeb3b5421ad14718a5299fe56f09ca241f3d8ac7ee7a6e072b6515cbfed11a8b3bf80dd7d55b1d05467b50bc7f3d97d2d2175b559c79868d121f29621373b0b8f7f9c84b57a21fd3863dd045da12f8830e4019cdaa13808020 -164859b3fff6985c7e1693189704ebe57a27a1f2ab49731ae25cc8dc3ed75e07717712e28d10fab5eb0e43f746fc06a51320e724168f13b71ff9d9d6c00bb111e96585bf85aca1720a619b9420504f9302d5c81ee8ba390bc9074cdd027b2a044cec20e925a6e9dcdb2771ef7482fd8c6634a8bf084608bb6ef4504caf609319 -cb84de72d5bd114cca1bcbdb6e74b157bc65c37576610a22664115891d904921fc0d4c1ca7cfd62ff211c28d851accb9aeb791afc2ff430be8daffc6148ba5085ae38448e1a0a04b886252d3a35f15e15d47aef8b0ccd533262c9cd0f6fef612c3b775cc29348124f640657b3c889260154aea3af4acd94b866e7fa567b90f1e -991bc13c9bfea1ff2248bf32c0fdfe88a71399bf5871fd3f695600b95eab210b2c323d656dc09cfb216c40b5dbba9e7dc31e50b803c50d36436036f378948224be93d4676ef6dd877d9e744ae34ab2845d51605ebca6b5b8568d5980d90fe6106e69ebf9334641f154a51113754a987787c00b68ef329c5ffb865160d8263b11 -4a4345f77d54cbc17c24350be255668aaf19d5b89ba10886c988ad83c763fa2058019243fc03b694ba7d4d9eb252d73eec19f7b46d546f1d1332356789777313b61c46906c17bb73c2c75e722d3db5bc92951942bece2b86d42e534337fd4a18ae31b842c5987bc17f4a5b111eca5b6118c9ac474a6293cb88fad5b4cdaf4b17 -941f868169a148ed4f516d81caad3a9d24e9289aae8c21a4c24bbc813157e401c6254a13191078e32cd4bb959b256fa72806f1277a4d6dec11f8e98cdf592d0601d811aebda8d3e35919baf6f99eff41e6df6932b9bafd107775593bca50871873b1c8b2b402b03d235ef92e7b1b535e65159e6d1586004394c127a17bd79627 -9c629aa1a8e95e12c9045ef79eee62e138ab54fa81af1bcf49b718b9dcb5450134b2ecb8b49413917f900b6239ab90783570b702d63c65a4920aefe469906303af2118988633314a4dab208a4b1514a53047a83d73aa6d1f2a7827765820ee048e4de83a2fad7bc9baf48796c5e0400aafa36412c6a0d06056333bd5c58caa2c -a6a7dc5122fa39199c4802b8cbdb9b9acd93c2be4a76f9fda5993a1ee4f6e017146ad4f26cea14e5abf8469c7368c6b34b0804f5b3f02ac9558775980bc484254b5925c2b2843821c3105e1c18d5314fbe870f89336540aa4d8d930bfdd41c0d491b9e15f8ef5264fcd102f4dc95aef0c14ca1d20e5b588221a0f691f39e6a1b -76d03ab7d717c95ff9e9ff7a74f33b560f246a6e1bfbce4390852a8a30177d2a50bb4edb190b9bc0aaf19e9ecdfe95eee256fb5ed81899dff33ceef79b97e60d0da66360e3ea0fa727d46554cba9ab57e95def2233ff5ea288ed4a18bf998d28e087f0b8440cbd5eb1c6978bad2a8e7541c96307227a0aae88efea0afd38d108 -be9c1b5deb011d081f0d5aba27218879116e4dbfb5a550e14aef3f44e9ce9c0ad923a7945d9f16f1ec89b43ed8c1101c8218a6133cae3d881906c1020d42c61e8b432d071832b97db711f63390970c6035d16b7ea6d4785d0899100e56de5f246d502610d7d4c47c9d1deaf6bcb50d98168aba58f6f41a47df4d19efdc395015 -2268ee9a10e562594b55315fb891663b8be34464dba163db72975dd86c580221306f8551b6d36d7cf3c892262a153559e484ece6b2e8f2df14149189ce931b1eff049cf2bd245e425db7480b331f54c3751ed4ae2bfd45cab3598fc2c3ae6f068162c3fc1e28ed6ff6ede86ec7b5217e3d066d01f970eb3638362016e19f3015 -d429a16e29c686b5a1286ccf9ba8ea3b181b9c32c2789250fff194d4e4bfb42725c5adee1903b9381fd467e456d628e50284adb35a32e3e819cc8756627edc019b671a14211211347a2a9043517ddc2344add71de289a47c3126c46fa58914267291bab15c4edc1b96bdd23dfdc216369bce7cfaad7d6e50f821c2fb96d10e2c -e7fbce10c4b7cc8dcbc904de71da02ab3b14dd31067575b743a343337b1dfc2797ca521095e71ccafb39f234116abde51e58b07ac4c31f94eedcbb5008f154289c41acd0ba2ab5fe771a7b6d0ff80c5af8eed90110fc10ed3fa6e56c6a99ba07cf402aeae0de19802110eea9013bbbef549ea91a256b459af2b7189b69de8d15 -bea2e76d7da93357f4fe5d206d180870701a2f5ee32c42836fd5888f1279850be2e0513524530ae2bf2045ab66b38758308e521c79f236408c477a0e62f3ef137928c0a634ede41a03a3bcb01c0f110d10c7658c1a0ad7f8ff28467ae6b63123f363b40f4b8a49251db6a4e794d2c67a22d0db51e39528ff5faf7ea16ef63809 -6c8f6d9e9e0839c98dc9a383843cdcac110eeff7450cf63cbc187b5029834f0abba2d25a57b79395daeaca1b3090b8308d617b50111edb5f11079567439536098f60053f3e1afc9c733b2cc6650c56b4222de2900f31baa2b80f40872b24fa09c4cd381ebc34064f6cf8a1d9bf4d71d76e1cd1eff3d7ea69b6f260fb3ef12a05 -e08260cf372b0bce8cd01105c63e5d99deba30a28b51cf731999107c62a271109a345e979a0ad47fd11f42b7bbaade1a7ecdd6cc079e0f8b0076e5c6d9d621210b9862b637a4d8555a89e0d36603a7e873e2811ccdd8da7ad6bbaa0d516601272767b78bb5d2a3c4750fc60ca275448f2e535353555a98b3cab7dc14f883be29 -bff6b31c0421c37995de01047fe25a7e6867c67ba6105be0c12f0991cd77d620b527b7d7607a9470d5e5f005dff819263d38d2661fff191d862f6be71c9bdd1a6c92489d58249753eec468bc38b2b1e36a4a2c6ada26c75d747b3f99a35da4293a44ba2ba2275be343f9a1c100b1305b6f1f5a3b48a54bd7b2a176e56af33e0a -4166ee1a73c72a92e97d826f336df8e2247187a44d6a01f30cb5ec969884f706c3f39a1d493b603a1c442dd2a4c8864cde871d870844f4dc0993ba3aa44c6a1c7e850be09b5e81533a69337029aad040a0aa74965191cfee03153ea34667b324ead3776e1d82ac38cc3b706d28afc5a7843bed08916e2a685cccc4eb3997372d -dfd4011a411a23db59eedb3e0e4f60102d18bcba75b84687d926ea9b3b19a02b1cbab40db92837b42627c4f9fc96941a8436c9a1fc8cb83a3ad1ba322ea2871999b503d4dc044698f0e87c312e68f2797a64d3bb6e0e55ef4536982fb9c8020f482f75eee9a441db0b7080f8be2e900dae2edf8c54e277ca3f31057ba07d1029 -e223b5b8114d73bac8c51fa356528876021bf19f298cc5840f1f54a76051761decfd49be24248f7a863ae61fff9a40a85946d2019f13d6cb6a6ba6d5727d89094173a6ab828307b2e9b7a477d58dca6d28f74416dfee7a357b3b54a886b98d0f7a9332afebb17cfdfea31b5563c343994a156998b40867ff9e98021fa9ccd412 -bde83e6b29e9b245a581c215a6167a151b010f9c6c38b173c67c19c51711750f5b8ec4875ff8e07fb4d8e4947237d190db8732996991cd6e4d125f0375f6f50032f1b8feee9cb67fe4cb3ea7d37c055f833155e747e76fef187d898d90e60020c710a0537b7dd7e38eb882451640ed97179ae87afa2ca1bfb7d6d2fd41c7631e -c2af6224dbc3b3b0cb8600d2a0bc4a60dc84d3f624aaefeae9d5a60729f7922a2a6a900bf01a644727b34757f5a4543f3de10bdd364b3d6bd2c58509ab2228050c3962a9c7b03170f77df52b292369e1228132602656da11cc88b702c634122607f17bebade0e80e5f66d9491912ba8b4405f9b68e6069ba3c230974191d1102 -50983202208ee2575704416c63db9faa2a3d1e7be098846da33e7f23532b8c0cd19ea9d39af9154a97c02e08082d449ea98d1e0c485fbe5fdc5d65443875ab215c670052009a0fff27a122d988d70491dab917cfa96054a6f472fb5af3f197055d581fcb79e18151e90cc4ee774e318d1e545914b2550af2839029866c96e226 -2bb6ff5d07fd1b15a72c9726f7d72cdeb7f7efd4180f123f2064fb83c839a71be895f0a9f01afea256ff5de770ed19c6271d622a493f850d3a726246de580b05b8730dbed8743bd56f2024e4d2a0877e72ffc223179359a4d7f7ef847f68d21d844b4c2f90c45f2fdb6b10319b132fb2a01c7b21c14d5f6b25985056c3d39110 -a666879a9b9ee08eb1a7e3cd3042b6d53b0d31086f6fd16c03fdfd8fe876c001d163ce31d5ef426e8e4cc4680c562756ba99635961728113d843840c9dfcf816a98f295664ec407474bccc170ee91eec58f0701a9705a01d36f46ed810105521d70187ffd747f2b329b4a23697ff01cb4b62f226fb20554b8d80308d9e4f9104 -b111f6bd34fc4e55318fe289af949a83a2c2d32a20a774db62439eb8c4f90f2f64ea91d3d50e183307b2194e1bc0b91b49edddf99636079f9b05d76123a80b094c935b1ee0240990dc963f898bafaed09b645c92cca7cecbddcb6cb28efffc16c83267e971bbda6f2529e3de390d39330cc05240799f8d8f64c44ad64c05d417 -01b73ce52b3a240ba2f1726b09a79bb816376724b48353be4d72467cb52a6a2a7b52b2ce2085e5eb194194b0d8031a35afbd2a1000aeade70644523a6406292b65636ca055b31eb521837aa080df38f8b835cbd8c348d2c0001b38c05e44ef2dbb88b9c40a23d9f6935b5ffb8d476f1799226a956ef70edf2fdcef4630d50612 -6204097e35f4e8c32ea97ed0bf8d2846f03aaa2089df4dcf912f464c81b43d2970be0c4f368491b4e232ab6013e141753a9ba4efd5534e7d993b440f3d0a781eb0ab178399114ea4f232c07191ac69218fce6ac8a2dd2141e26251d45bf0dd25ecac9a1672787c1140f6ebea15f46ab48ed91e5d6550a17352e61753b8aadb18 -4a7d417a83e8f9bf53d29db2bcb0369646256a915712abaaf9cc1344135174093ad355a7721f4801ca02316291f3fe9c94b582003f6518b424076b46f3ee850e99dcb1b99051d3e0eb8b0e2c670d890a9ff3f7287695727e11ba4df1aa0ac2101313b3d8ea39bf249281364ac1da88c6bcba7dd39730a2b898accf14034afc0b -4ec273ab7e6429e59f309534e737cd7651f989dbf6b3b6925f52daf87b443629d3faaa2ad87542caac3a9acbca2bf3b04da832da687ea808ada7da9e3f2cc22f4bafaea364652fb4083f590ab8a36fd0d20fe3211d7c181e8b3df59188d2ff1e716ebd80299de0f237841b44e595d8be5576909ef2c05c406b55a8eebdcb8105 -a085daa2d234bada15b6be8704c267c606dde9fd39a145d2127acff9064f7029d93dd1beb0a594226eeadae53fd4ebcb4f8b70acdd73e78a98416d6a08421e206fc494fd7878e9fe5c066109b1747acd17652d64d8acc172719ed37b2b231e118f0c376169ec159f9ff5296fcdfc0189bf28223a99ebcedcffa1f406fe420528 -2a7a9af273cdd36cbd5a82e837b241894b9101941343fe334adee71bc46e3602b4bd30e40eeb8f0fbad780d36a9750b408fc8fe43b431f16c94d66cb18b0ae114a9df085595b5ed3215f43f83f1bd4f5c7e667ceb8a325f5f32a206ea033150023aa3838bf3f3d09a1c723844eae76df4f68c57651eb081b276aade43e9afc27 -8deec1c1432e67ea23694cbb5792602b2cf524d35799d4e05a2689bce7ac890635c7252547483a5be1ef8144e1c6774dd597bd4b6cabf54d1787f879cc182e054ae7ba73ad62767d349cde3699f1c51b7f24b9f30992b249fcccbc30ddd0ae0986f9fc791cbf7c82479c86da11e9f86b5381396f2a71969c0727ce28e9da7411 -44b7148d99709dbb5f4eacd545fdc111f7c7adf997f9757edda15ee8514ff80b47066b67a487e51ed8ca4e3792cf0dc6b8aa2f03c63b0213f05472cd9133a7167f6eb7101b12e3f29eca8f8136d00717043af975078e480ae22b6a3fd5dcc92a6e601a5813238d77fc74fef77a1454ec67d3a26494f47e408461c58e2592000b -952567ffbbe8f31fca654e08797de52654061da6c09939a9871d02d605a8c0058f13432ab668f883d44ea73542c1dab9811707408151cd3f31fc362278551125882e26f0f706fad95a28de34d4545d682431caab0d45004b923fa274455064023f89ce37f27b849a66dd3d48cc74f5e5e9e7ea26e1ebd38ae76dc578c71d0a27 -6f750d797cb8afc9bd42042f60a28abaf7a77a0e06f6487cb8bb2d53b88c6200278f129d556d704d2028b5898d8829d153eac2556a7de03eaa9298477466c60e72c2131368d9862f81cf8f46d06a63188b276ef63433f696ea67116ece0b01055372aaebf36464fe77d43f8370c93f454c2d508af94e9e34232e9e420ae44129 -28bcfeaf94e5847580e4eae662f2e90e7ffe22ec32e51bd445f177ecde492021301fd3f1b2cb8873d1edc0d81d47674846bda8594f680eb9f7179068ac769309a9f2e44129e3fbafbf16f5408cfb0df2cf7f9c6afc75d35bce62e6fd79ba0c1cd553722e6fa02732fd100d67f59f62add2f1d367cfa934beda45a7d79c975420 -37f64fa1a3fa515d27ee6a253f3ad49e5227660258f241298313f60effa77921b222097dc95f9a4eaf578528898d26d1f8451866d249d62a81ebe65ef726ba15f06318dc32e8710ca0f60f66202f008c7d808fbf887136960ee061bd4a82ab2e9a07a9a71059b51b593c2dbec4f6948295c360fb30b604462a8577b1f37d0b17 -a7ce969b69e34c8e81b6eef8f5834d885159d0a01d55d0be44f8cf2b2efd75252b1f455722718e96c4d1b659f3908d3b059775ed37fd333127df6c1f6fbebd16d8926c0a0c668eff015625b3127210a757037ff865b626cb43aaec69189f191a1c8568be82238bb9c3cf3453f3c78adb62ab0c29ee0e551f71dad4b4c3ebad1e -27ff2d8ff2e3a1ee728920c106d129214664176bd472251126a96c7628749424d5abf87820482a89cd7300292c46c7c471e1cc58e3e0e139fe07191237a5211bba17cee33648389a92a06224a3b809103ebd1d47a097027243c5d23f8c33bb0bd9aaabda7d7fe36f0890ecc984f01d81eedb5aa399f2c24158db3341aa9c3d2e -c2bc16ba88f6647a9a6d3159ceee4c05a1e74575181818b4c15ec3079bfb5d0fa7b8709671479d01fefc9da59bd8f142bc99d5a0e005d5ccec7e40cb8ff6f42bee417b03ceb85a5424ec90871f46fc437f5371bc92c4d07c02274669849b0a053830218835a25f6602a3c8127cae0696d9cc1dc87f9802b4149541e7e430ce1a -c69c0018d533deac0c3c887d4259603c02bbf7c2e9e1289a5d32f7c7c9f4440f05b0cb7334ec057bf1fa152fa4e190c025230f93fc2a25f51a7f58f49845621eb8e92e4791abf3b401216c24b21eb3a68f85e28ca879d68a31f91bb3f1fb1a146699b54d1023ff6f0e2ec8eed9c0a5d663bae5b8ed814bf84cacb2803a61ab1f -19096b63c522d9d17452fbc9bbdbfa8edc8c1307667bfe9d9cb023c934df161dcfa031a8314a77a88ff7ce86741dba8d068a55283a23c950998be798f6e85e160a22d9099ef19ddb21f1c92bfe3486a21814fa8c7937b8ee85c1cdd98daf1d1e8a16c96c8639d2e734f50f8ed1787fda58785901dfc4c52997e183df4b283829 -961cf494a5ce105492077600e7cc37c3be479023fac5221dd82c36f51ec36b24214c41c207948ec1107ebb3764f9c042c58df0ab10d086d811948d041684510041bd96d47523d65af42df878966e3a4cd3515fcb0e5fa60dbffa778d937b6f154ae97887078d7af805d246c9e18cd9bc334bc4685ea62cec9d799d459d50922a -77ad5718c775c106cbe5549ee1eee4edf9d7a6f8daa5a1d48f71f27dd9cd120f39b65f9681db18b0ad5c52214457cce16ca2c895ed174dd49410dd2933bfd20006d0205011898faa7f89026d2f9b5d785588d7b4f3c2daf5f0a11301dbcb6a11548936cabf032e943c4e80401254dd712bf61929987169f1e1542feda2b54c22 -11fa9e0501bbf684479c8168444ec9f9c80f80c1cb92ea88fb8e27cc5aebd1104b5945461446faa97e58849215f59ae8a82bc10a9afc7df9d49f01b6c4d8d410bf42931e36ba01fc4da0d7fceed16c733d38f36ac3679aa7b16a5ea267238503f38b2881daeb26c63d8af74f5b4602f9fa9445f33427c6b2cb734e94e1487725 -152a24fd401ee8dd21dfad05d7dd70b76309e8aa0f772661e93d361f6fda8010648c3ea9a4d4650ae83245c49fe31b09aebd3449adf58ac70d6f5979292b5103f3d00bf1078f6a74c03fb222f0966d4b2e41eedc311ec8866b57c5d2edb735265f036654dd05db1b5d48e0bdabd1843546a2bd19f6fcc21e792e5019dbf7992c -dfa13a67d89d3192659c7240460e28b9e4a67fd0bf4fcd1eadf64dc18c36c217dabd062cc9b3c185ec98f60d6ae59814f44f1837fd15a4741432eef9fbd1c61101bc90c705c78b47eabdc0a94863f6c149daf43ec567c298410e1f364aa510112f393b5377f7b3361d0a75e3d7a032d4f680cd25498fba8eb0dc25c666e70a25 -031d34781aab730d6630cd99df297316413b5a31e098ae91d2141ee78aa39f23127ee199ab17f99ca0342e19236301815f42ff149d462f02a0e708ca3529451d7bbb23108ba84d82c798050d60f412c7b2a9f8d2aaec4e83df9462e4e3edc2091929eab87966d68caa158e2dfe3e859af91a076b70c630d25b4eb39647b55e2c -31643604a9e50ae66b60e28887ae4259d2a41870389fdc19f0c14187cefda11b418cf59a60196d899c6ae60f870b73e705c1b5ae4941b8be04a084b1e7d4bd2b677ade2f404f5945c741f38ddea05aa9b37e2acba056d95d6c2891ad5f1b222533519bd0c8b87ff2c874422adf0b334e1d8926f571fab793971789aec2519529 -48c15feeab5ff04624e75e4111fec8486dd22353eab66580e2f3ac53cf677a038adf8370d382c1b7caae93674e4195715d1476c84896743f4ebd209c88c553049e6ddfa3827ed6e6a742cba02dc6d7c1a8c0dddda835acfc4d60f8fb99ca472100c80a7a4cfefc88468dce550680289318816042144f42fafbc420997295002c -51b9553a632258243844daea81c27ebb63028a4b8e0ba3db744325835b8ce41d6107418c0db4bf949bfb01ae103c9be1723a9ec8c5d49c0c51e8f5150fdb77160d1cba0d2f1e84e3930c844c470188e88907f646eee4f4ca03abe24f4f31a62402f571cf2384e1188e9b0c83cea4be84764523602979643fa62f44a33a71d41e -5b9e0042cd4064f055698f771500867398ca085ca1603afcfb823d0faf31fe063f4b4593654209c9ce0edf255177778231c93b9cbe99156715f5dc197f58e41b78f43383de2066db8d91574b8d4903a1e70bb6d584e9e60f3f11a2e03efcaa253917165df9fe003881ea2a04edcdd943d5b7c048f8f1f908b06f80f4872d470a -7d3bbde44adf3c160b0e0949fbcc5f150f7e3ab8863a0350522465f97df70e2cbefd5a9a817e4c521aecb315724637bffc8cf20ca451f726d1e2062cdc793612c066a3db8243d3a1343dfb7f128fcc24fd194790fbc64a817134379c3a0f4a23481c8e932f27b3d17fd627e9249cd054ba0d1a1d665acea73bb078712105b30c -ff9029cba572952e6da04727da80a5137c527a9beb504f8c25a85f587e762f066bff592b33ce746b91286b177dfed23d3dae4934ba25967a54358ae3f984060f76e69fe5f28febcde6adcf1b6e91b0fc1abd182be1935dd8a732e356ba1b4f22a6cfc3e23335fd71cf7d917637623c37e828b2013412a33c4ee3af1448ab911c -71f7f92fa4c701df28d28c9234a85ae4a4bef2bdfffe8a27bb6f3385e892fc0fe1036c42b3d499e69c17d27923af892ab9a2c1ac8b6f4382168e81f0b02e902588d5a673e63332f62ff658d831da670c4c26aafbc0d5bdbe0511ffffea259d2ea5e1955ee86352eb9162f5a042838f8302a098e1fe992a28d571bbd8b3d0b62f -a8742bc10567dd141c2ec05185996aee3b651b3f5fdefa5e4fbeab434bf4cf13e525be739ec1ee9a876f764d53793434b8849808a76e31c0cf416cc02eb6e524d52fb4003a0d6d4350d880e208ee8c3a4dcc47b3367b90d5f7123e81f7aab50dc2b96e5020dc13827c9dff3ba843f6716cdb304607c78af714b14372dd4eaa1b -06d4c345f4f5dec5bb117682548475ca52686c64ea63a26e8ec0d046e00b9f2e183dd6fdbc24d806037ed83496af6d1f96f08bac6c3702402a9f3b1de5702a155d5c1e7d21d1978b6fb77e5fd112772fc98fc485a8222e2ba83abeaebf148604c991ea3fb7ea640101879d1a925895d4e990e917fda2e9426c29f485c36ebb1e -e6b6dafd3fe7d7fe5560e3c397ad0010a1672c8eacd82e20261d5cc7528f7e0fafa318edc7f8ff9074119c8ac61170087c7b74cdbf99b6775cfaa7b25100152d35c4bd5b36443ed6db183c0bb521b484d4e727f7eb087da6f410c9c08ba54c0339761669bf298984c994eebb16817338c22a0c8e4a679d629af51c235f96fc15 -5e842d3daea78bc0b3a3fb31f4be81b63f622dbf1832df483e416153f6ab3f2822e29de3a4a8b4f4e5e0fd77f61fb92e0d027c31ef4c8662ba1f53fe91e1150b26d0d98ff773dfe31b086c43debb257e3cf1dbe17db33d2475aee9a92079be0f41ac4e5b2b96b1399bc2b86146195d8f91ddb01cb0f9e291d46a06bbbc253e01 -88fce43a99d8720e070ed2975fb3e517517a76101e665decf81c93aa5a28222b5c0a9bfe5fb32facdbf81952ef8c92595940af2e0db1292df18f102140eadc146de38858909b133e86bff160b74c3c20831997770909fe27f4477e40f894e001464a54aecc4bd2d78ebb3ca44989d53cd45bd3ec9011a72f331f49391978ca24 -9ebf1536943afa7d52b7bec5943dfea7e7d68250517c88d72ca97687aa4e3b291aba8a87f75c08017a1a96d0c8027dda6f8997a6bec33697036ed4666599eb1d6b8165f9e8cf028ebf2ec8dfc642d0f1712c45c94915a36f5a2e4d5322e5e10f73f51f0e6894a5013471df55db3a83d0187d5d0d5bb2511894f2466bd23d250c -0cccccc52637a44af7a26c8f152000eec7600c702c5ca356c4150cb9385743275adba936ddf16fb00a9c4343c40c0a519582a1e7d40cc4c007e5feeb72039a2340d512a934639d2d1c6ad7f203432c24760d07332d598992245920a10f38f30e6a7363b40cd6e9b4c8e0f6594ce22af1a84363d251e5b8d1334dd1e232b69908 -c826f9b0ffa8aa90ebd1d760de3efce425688a85450f31e75277926cd4b02d2b984ffe8519c05c539e32f0ccb8b380c49161e7e38ef9f698e91830f5b84b5e0c7e5405d41139b6a7d3c9b073f892fe9fac023393eb53e399e2196df9e7a1ad03c231ce5e25b005f5ee87667462aaa0ea11c1746262e3a4f29c4145517b325602 -0e8a96cda3ac55e8b9bc1379ef4cf1b9702d96b71ebefd6e3dd1cf3f62706502973ffa98a659f78a030cabc9f3847033fb22c28a10cb7ca1839ef083c7139d152661601aa042a1ae279283d03d77ce43bd8d90838fb20ec61cf1f5aa19396f188a498b7472816bf9b19ae2731925881f0c77e30371b43e20f14da28cd581e92d -f3f1dd2e7fa28b4eb45407542b046dc8bd819db4187370c597d0d7eaa23a9302d393dce273cb4effc734670cc5e61968eac3f7361141bcdef56363394d71180c95fa1e127205799811f8a050780fed7ad02b30c85ba9a21a1cb2cd479cb96128b54df3c2004a9355b1c67c12ad3cb073652e4f3ad1f01e45b66d727a460bcc1e -51cd2c08adff3d7a14ec745a5746892bdc198f52aef7e1c0117f783c649cab11ce97a29d39f0cc907b6bae76758c3108f32d1796e51ee4dfe11144c85c67f3014665418e9b09247a52585e5ff1c0bbcfca71a93b0f42ec8d1a5cac26335ea71fa328d7673a05078c9913e9a984f59593e2ddce51c1ef8e24996bf1296f875d00 -491f403699418644fbbdf9ae9503f520a60cb182490bdf8961e6ae779b4f1e2d3bcee838fbf88d1df350f3cfab0bc213d94e9f8615c0500bf1d7227b29e4a821452b69c22f22791864d5354919ae2de5eb5ff089329200b0eb54de98f8fbea1cf9c57321decc3bd3d97570fe2271414da5e27360827346e80ece332fd4c0da25 -44a13dcab11f3bcd224be23d6ea78add9c307bed40320234722ae79114d9ad08f2149ab2f555456a9811fd9414833646a07992777d19c449fdc5df103c36691f7d8ab0e6a70e55a09ee923890ff8b864046b34012126e93cc287977f53b79d107c69169b108042a8cd824c776ab5d7b9978486bd9b441b8be217d0b6274fa10a -c23bc602d282ed91b828501cb371d5021cfc60c5354b44a16d9dc13e78e7a22048a7590ba9b31936dad67d407ab69c66672d339e3eee44f2e008cefaf5f3731cecf67e32ab707395c01602ab94cbba12be59e1cf51a1dce99a41c9012d2f762cd3cd5a91d4694ed98f800a03d691038664a2ce1c1880c3f369d604d9f0a0b41b -5cd9e36a0d0db1d9cc6092d94f0dc7936f72110b4fb09962af9218b10ae56311a7484817be67daf7a919a124e53ecb4f52901e1dbc55fb6f0f4c99d37bb2fc0703249dd5023cda1ce4da3fc8e57ffc6b96422e9434d2d160727221a148bbd21e524ae1f4e5f546597b10e488fb32400399dfba3ad9624ca3d8030e43a36fd505 -1cbcac7275e87b9135de21e91bbdc4cf83db4dbc84aa46635a401f7a016b7c2e7f75ff1bd187feba82bbebc837a374d84a00efdb2e923279e836e4cdb5e82e1bd33aeb42cd14426ff521bfc9fc5ae902465d11c25807e896d37e499cc5f7be062ce5692b852524643057306d9c3c730bf883c9c7b2dbc8052f72cb771d55db20 -25d88d10c2e6ff23d8679e53a71b984c7a5128ca5db1bdbf35ac1e2e1656c8064e0336e7e548c4a0f7ead284d828b6894d0666ce745173038835de6bde8364216e5a7d39267942a21fb79e0c844d890779482210df802539960c44e18aa04e25727a685e44c090f9021cb3b5d16d505e6336c459c4bf205c7e3ca904f1d80426 -024fa84374745283ac59f7997f3b83f19906bef020dafd47ca8ea89dbbf0a71c9104ef411ac7eef3f9bf8d65e2c37ac0cf13d7de12f0425020e9dbf66516fc0ba66844097eed9567ffe6b79a7e851fa7de02edb8ca39328ee95ca857d9502f285db05d5ad73af34fea22f67f81793bc9567a2e28e54a66210a67d0cc4d21901f -7edfe6a6e1cef9e0c727f3f0296325690d198b3715725259900cce3125043327db7817a1b6604599444437e460744d898d1ac753729b29c59906a316bb037f0671f6e9f94b3aaf55d1471a35d606fd7ffc03ede971ebe6cee5d37094cfd6f30fabdb1a444e8f34be47a38d62ee3de312ae23929fdd50bf1a027db88740cadf07 -5b6a6df86f684d6f27a139efffa6d074add73dd54b882fb6dd860ba7453fc2297691a0f5d5dc543c764eaf5947644faee3704699777188e5f644bbaf5315c823b70abc78fedb0061dc686562e6da3675d6731f47c760437da995a02eb6b793117fae34408b11ebe7c697ce5248648ebfec640a7a443a79a266a7d6688ecfd32a -01e731184c97defae147c5a1f27b6d44a50c794ab2c22148b33405871e5047057c8363ee9e6b1293e6fd8ce2a6e2001f76640428f78b4747f6acc807551b4e269f72f897235f0c004b6a608137cd91d8b6b275f958f2faac72b79af77feda90408cab1fbf2fded6feccdcfd4a848bc55a809d24d636770b827ae51ca6e73ec20 -8ed3ba6e0f5f549a036cf4a2a81379c468e89e7099678d5f846d138377caf10f4a1cbaac3022d74ecbe021fc5a8f00645acadddbcee11d1bc301ddbcce4cf12a652631afc3db2addba6b7a5f38b667e02de9c4c70b09e0f4650547bce45c06012d95bbbd9b1b9ec91562ad723ffd6a1f61639644505e5855e0ec6585d5c0a408 -bb8f5c16d5f41b658afc10ab2565bcb10f8f66e7182a39a88c158b577179fa13afc39415d850c36c8049bac5d431e498212f77d61dc1e3278490916725684b0f446c722f4452ae1293b11f8af80a6625cb4492b0c9525857f779173ee0f456079dbf675e33b24d0ca0c4d4615d1ecef87e2f2ad71847c507dc6ddfb86c5fb819 -f1e2b595ca83bfbc2048a33f14f93cc8892c6b4c61ac259e75d0716b5e15e31492f1cce6819978f899f2b0fa4edf9dfd383eba47f02f22910228804a6787cc0e3733442451f9b11baef9d10b652a3c24e64da1f935150f1ff25f2290e84d7d1899df462deb26ad5b815f7af09f7b18eed4c6b87ff4c5a8f9e599685f26310b09 -6044742e4d41bba51d26ac7f1830cdce09129c4f8d8083442dfda4a66ebc8d0e146ced0dcd4ad6ac69791c8d51ac1090f693e02115a171d9c5f025de99a6111d4d1c1d6c541c8ff8e05c155851aa97c5bf45fdebfd02a8064ae6bfd975b2af17f688020a5db924acdfe1d1d862a455bbae05117881dd85834fd9b8ed009a9505 -351d7848f05bf62c10591f97f3ddac2157d913c179910cbb45ffb7cc97580f2723b30a1e197c67b2262041734a64c4927de1bf2cb7b52ea184f8daf51678a512a532a5adf220af31aca19f3db709f89690039dd174f70220ef723f7b9545d9129e14ba59cead487edadbb36db46c850d8ea924a18a2f05f06c9380853d3e7626 -88551d17d2400cda021ffa5be4b8a9cb3115f89a28dfd78f1cc1777a0761041a185a16fa6abf0c492c1be5f7d8832d0e1db05802cdd656ae42a3499507cf2314233c0be019b58a6c7097375c63e990788d0eac18468eb087d5a375e8b34a0d136ffca9d3c6fba82671e6a2cf3aa2da046849119ffd936a7e6cec076b39dc0a02 -fb27ff6e6af9d2e7498f7a86bb0279e529fa71f55470c776d387aaed9b9be2195476a24b228700213991b4b99bca65f36a69a6730338ad3ad2a6ec9dd84c1f29bf5c86e6733dcad5eebb9d83537f0bbffd4937694c14e09b44e6b5a4506649042aae025c78ed9d8e9e5e610914c026d2fb42c24881676d43779d4d66a8246d00 -6504512949f9ec102bd4fc00f3cc3330224f944b537f78b96853d08338386a29c83dcb1c780acfea54ad3e42522b5d8d6ef9b811d0d5dca82b6d65c314533a170ec5f74e2e8d0623ba3fd2f2d01fb04556e623a8a7107952ccfa81dc628a001a282f5c666a9c1210240245d786debbd7fdfc0af0895781fc08e53324831aa50e -9f049930e373f909f43e97205efd0fa1b62d628f1e7e269f980f3800ca5aad24d9f3918a506457ff92654c72b8eac2219d6ef6433e1a787f966428136d00c9216ecff35988b91d66c5d4f4a827e40541e52f2852d357f075f22275389d07972d2f83b8e69c7e6a68483c488218667733c21aaef311df51d025beb90cf79fab15 -a23926ed5ac3dc166db50df39caa50f3dc26aa9b4a15c0263ee8673141689a18529f7c0c6f81e49e346803e2ada6fa8cea659737e140f179859b516b0ec4c9264706867179522086d6946d33be27dafd06e8e0ccfa59b8ec6575df051610ea2c472eaebd478575b28d5f4385b50d3b3a95a6e91e34ac44a777c90c34cb960f27 -aa1e9fdff7862ddf329453b4e74f7655f60a55f9edcc8f82ca03234853165c0d3c25bfd89484ec3f7e0272403728c7b60e6b819c618d46a0a874f3df4662a02cfd478d331c27a65363c92754f4fa1631b2a7d4497770e555418622dc98b8cd10b2a4cdad8e1793e735b184db46a7b30cee252b859535b7ef6c56a799f2b1aa01 -9ed66d6ae115e2833e0876bbab9c7ab15dbb5477fdfce7e970eee9765891ca0dfd120dd31018a8f4e2bc045b825ec823e96ced2ce09eb100c457c5cf4256250973af46aaeac89df18945d10ceb66c5cb6c9c5ae813a26aae9a79c183e501992c6056c123711f7134dd73d33b661d58101024bac686a1ebee5d995a7c08270230 -692c56bd6ced48a4458fe341d1f62d60223063405e401e3f8b7fd9b7ccb33002e1b5f8bbbb8898eb23835859c4f69438ad899e39b143dab5f4685f1dd1f8d622998b3ce16e84ee82ad7b481e4acdb0b96d71cae960973e831ae86d4b9226c712dc1775e00919ccc69c0b76b9ddf0750501d38a094b80bb7fef67ad247ec14928 -5146ba6fcb1a6210ff87e66412b636791fb26528a23235f94f04276cd847db0ecd4767cfd3f3f7b2ade5b04515b684944fd0751980d3e2757a151af677de790f7a8c9c47873594ec36d64f8afc749edad143ecff0a2ba1777b291f909055e3008ad7be057c0478f952ed92b5919362b5e56f9505b8f59803a50e113c4f143c1d -0e68fc0ed4e10a478cb5d3e648c91397763343d9bdd584f21626a00373a7b82074b22bdd6a185fc3648244964d6a9163af63bbd34813e6276a65ba0ff3044429e252c3cd845bcd412661d274fd5a8bbcd81358b553f6ce1439395dcf133f4930242dd5a3b7d0c521a147d018b0134f368dbb33685844c4869501f43673c9900b -c15c5ebbf3a91b21c14d61b6cd584565a6cb73dfd792cf759bfd2692c1384f206b810f3fed0e4e64212f608150bb1a849bdc257e632c81a32b320b8213a4cd2717c1814f1568051dcba95da59cec6cc7215ee5f6b5f6e42b662311a283afa025fbabcd23b8dfd12cdd22ff40e3520fa4529104eaaafe8e18603cd2bc074da619 -f11eeb275f61a710051bacf310830e762389bce65254d64cb5356fcc5bce262c92ed8f2d0ec3af890593e3b9d8981cdcc6e4bcbe00d6e19b1eebfedc2bf8b3253d058a57ee52983c7a774df55f04432295351b7788791f24a59bc6e33670060f6e545026689145268d771423d9260b239632dc31bb3a6e483a1caff78d67170c -907b5c31b27b54307a4aecf4d7c4675c75f747891f5d5df772c2a733de697a169df131364697e83bf0296a5be7f8f9bee9f2e61cabd71d3e71e0206c8003ba07fb37261f402d36f88752e3e6c99799f7e0f19bac2c48678e0f18e64b5e5c9e1187df0555f1da75d38a26fd63a53eba46066c398a1e1377d970d006a6cf17e929 -1ee09bc7e8cd8da71317dd4ec6678986ee0d2ea3575b64eb34b2878cb9b3262bc64cc1d3a8cabc8882b5c433841c17bfcc28d9cbdc253cf31ec0fa1979fa1128783d4ef0558bd59d44d61d3c2ee04fa51818b6e359079c10254db76842fe50293a0d6609199798dfb5f3a8065177dfca9ba757bc3534a7170431b9b5ac45d71f -882c46d47bddd9a31a5e4d3d9135e14c8f12d5bf2d735af4d7294a49db990727c7baa6a0d8f8f6561177bf6f4082cc441f6ddb3421dc21e03e83fbb938e4b00780d877ed1f69b8b5809655c6dcc7c2dd2be0257b38a9f42ee3ce4d26ba7eaf2959c55ad40517f0daa9d5fc6ce987f235b23aa8e09f8d365dc7df58d026344921 -4463bedc262296e6829324ba15be9ea8823a0bf739821c37017381e3b680f21b9c1964adcbb43f064125e53c44cae1e49c1d4d3ec28e6eab7c4201f4cde9cb23cfd4507d99272c27de5c143f2108b5bb3022573e775c52a89c9cf449bed37611cbaf21aec1b7fe47b47342e7b9e957552c1817dfdf3e574f785470a699fac10c -e8c8f01eb911a2784afc3e989f6d3e3d5d55d5a8ed13e399215fa43f7310b62ed1292f9bbbe87934fb68cc477fbe77f0ab47517dc27956552215a81cbc08b92cf2e6a618a2e715eb4ca2f4e3da3a26de76dd92bf8e14188dce22700335e3a102227c6ec1a7dc7b5d7886100492b9eb7f669048018d560321244e58987fe4d30b -203964d5e0b88826ccb4fe004ef83e28432634ed221bd9159b4243a8e0611200948b11d86ade43208850dc2335761efb03bf7dd15b25427be720ac3759235f1b51e2d14a5090736cd365f24282179a64f2650da35d7d03b49225c776d5dc941efd8e575aad62e8e4d360f722b73cb396d8c32fff7a07789a00adf2524b9eba14 -b846b5e241b328e8c4c98c3416061151734126e338c584597f185b845984e50bef7da7c0ca964f21c2c15018caf4e5b5cd8aa6477d4b91a3c6328adbb8accd2857a8ebdac6201238518fa25d9f2a966525ab1d9d4573d2c14e6addb55b72fb096870592f7fa1f5c0067ac8634dc3121dba5f8986d931d5cc1d7318ebe1d77b0a -86add1c736e28f701c0826d48483dceb09b413fc5e546ce50a1ac002cc214a29063d34dcfdb7e15e8190ca681d2ed76559919488c2d996cb5a42d05442939d0c4ce9e5670fadff4417aafde9d558959f797f4a0235482b6a658f4c0168c809303ce5e9961a8ec136a1432c23db7f9a732db83975a05b75dc7a12ab65e49ea211 -4c4c3063c2ba03a771bef67616316e2578408c1ad8da12263a2e427eec5969196c8f197e6622a2ab9ec0dae40297a6f18563cc6bf1c3c6607544cdabc34c5714e254e7a81a8b220c94e28a3688f4acee2f6642278f05ad8aec5f57bb0723a200bcd3c362466323af56756a323a35f942823d2634c73a0a5dd93d9ccee1331f22 -aa3cf641ba64b8767eb6f4766226be84ad54911fd6227206f224db438e6cd40618856331dcab606a64ef3457c504d2e025f3dd740a6acc34fb611ae037fa2f1e723ddb3a8e2e25108e941d22e231a6701ef35f5b0bf0fbb44da9b17caed0be11e530c21c80782bf479ef8b20aca8d87ac0f3d82bc8819ad8bbd62bf52c26d604 -8d5c7a1d5dd1dfdc3530b17832d726e61565352fda6edaf495e7304b3fd5c72ac6f74ee82132df4887024e4a61284aedd50b8575bf48ca4932fe3c4da2011e2c80f06805e10a22c52b4a1781046f7e99d966f8f4a47e54d779b3929ad87ac3297f95db7161949f5c188c1789a8f6bb668b8ffbefda0688e148b321f99c4a2701 -6dd8426b19316b1c1d22ee4a9304112873bb6a3a84e389f75c31b11c69886e08ada226900a25122fffa37a2442984adce1a688fd859ab1e3b756df77ae888f2b80d178daf46b0db59e6ee659770c5a36446244d2c3ea56d82b3f3b00158ea8267a92accfd147a5a52f58d8f0ad60e0888a1b487eb330753b3e1177b37ad64b16 -abf633e305329c35ee2e0fc280b01c2512fa4345f7bc4922ea16d1811e7ef316045716c53bc65c3a22a6d262fcda5cd68b82836d40b643110703bde42114572b5f8ba0e690be6c417df5e7c5f66afdc8937cd28a737076af442c1dc46ca27f195ef4a4faefa0acbc80b6505363fdf64ff9d72b5abad1c494f1f550882b3f3d20 -cab8a67aff6537fc70ce51664e8d5fd0a60ca6062ddf2bac2662d62ba1c3fd260b0b8da0fd19ff3d34749e6db338260c0b1e18a1e2879a09905614e7b10d49252431228dbb540c4af92f09fb23370cc692e85eee1ec10464bcf6ad2beb1c3c051a89aba9ef3aa6bb164214c3b8e7e8ba68b765f7bb1245c60880a3871e738225 -ce8b2aa1b816bd78c084f14f9101766de6270438adb30e393309c516e1936204acb057fda18b69a37f826a848e300db23942226ddce09cd360823d8aceec181d002c21bd1370fe93e28efa01433dc91f10011af2e8508003c81c845e733f700cf3e5d238b9c262e30bdcb575c30afc9281c4869f98ddb838da5bc7dd2a8ee618 -979353e0983badf8bf28e7081e2af13191a6ed4883006ee65dc77fc80191182cf2066f27447a0a680b16bfac0a251e98ac0820b01f1e050c7d052cc7b5872009307c41c880329df25fffda8103a6fa709f88b75a61ff90334cb83227e98afa1b18cd71d1417bf119cedec4e9bcd113002de6d2f3673f3cd8b1316706b874bc26 -05962b70792a3e0d87f63b0880e63b91601246ca61c4c10dd509ed0e8e88dc1cb2e4edff9c42856b66679c2c142326ec6b9d90f2c8bcbda5ef56525542e9e80299a4d33a0fe743ce4df2a66504badbb6a835be1f5305d50f252d4c9fba9a891ee0560b8f27c90efd83985fae0cdd64522104887dbce1ed11c9f56c4a02611a10 -fb708c78b1472b6c19d2f4a2b8bebb8dfcdfb0537f3153438e8441e997c5950af7a53a776d6335945330c60091271cfa5737bfd2770ff8ddd4786ff6259d02299d61087e4dc98b72162104673f64e1ca6e1878b2ff9c73ddc366cbc963025819218b9d223dc636589004eda0fe9cabc79e457421b55751b1c7cf792217313824 -26c9be77c5a15862a91cb0c9d763407d3a9ad2f4c480a8b2ae6328e899e2ac00918bfa539e49f56c72113bef521b8356f889bb00d089ff8dd7defd88bd9f9a1ebbe759a6f4f844ccf65392aed0b0af1e3497824a6a703f136b8e1b435c1a7103e7637b04d27ed8874eb00f50a2cf7300e075617f67b6f9c128400f9311d35521 -c93cd4d92054b3ee71219f69fbd07e76ab83274f7cfe5b511b74fda23f83dc1f2199a33e5cb99254b580505e056c6a8cf7ebad09d88d301a552a2be303e81d2b99fc08c3234ba7a5cb1924308e221fb9046d898dc6cd2018d18e9a4143ea1f0a4be90bfd2872dc767f4fbc269683293e67f29dd89f521fce4dafa78cdd4a821a -273e6c3cb9865c05713b627f874e3dfccc9b397bd344f29cc90ab08954f83718cef1b05004dd806a14a8414f7483835804ae77984f680ff590c009ac4f402503a57dc47cf0b1a8feacecdf6ebe0b514d48abb3dfda44a31aeb13118aad91720abe2327fae63c97ea5f80941901891d7480d2b8a369361413c0abc9415ce25b29 -4a1901a95b0d3a7c473e572c98ac74e9ebfd9c40350d9009d32958de248947046a0116a4f662e91f5602c880e34806ccaf8a579cb63912d35eb3cf94f4f8861caa192a746a96183d53aef4ed2d3fcf2ceecf7a7347b7a6d0a6c14cc8424f04126833f46b11112f90839d323d51d58607b1fc804654ca21108f642d3688c9541d -163ba096603f40440a44ccca9029dc20d0fc310698b7d21405d871ba47b6ef1948996e4a51e84b7a0170d14de74e1798aabe87499ca3638c757bd49e63f2641e2453d122f7a06ae68f02779722202f420e14e53df07607e5487fdd1b5c40c428b48250fd232dae03798a159a24eafb246ff77c18e508b51ea3ba962d3dd8bb03 -5b2bdd67910b5daca06bae3d5775d0efebad0fae33e19797014bb9d1cbdc6301d91b80f2ffea73b8a9f41eb1e6cb1dd4850fb420e9c8e5eb21473f5863d05321d5be44591fdc0e4c89b1e8f77261ff574cd1402a8c490917220abffd013f5c1900b18a44df84602637926c0af71d96653635c757b4093ed53d64d2205c427126 -0d63d2ccb99f51fbc3fe374628178d047371b3e6bfa9b1de599aa0ed8f8f3e1223c5411d4de46a0a7363f945e72f42589df9a463a7ea2f375c151dd0f7c5f915f0e840f80b67d9defe6766818abc1c8dd62edceb2e8e8a52821073ea663d8c1b05db7c207b991d986c268e6c0417caaf63f7551ece91b83eedb4b40c742b4e00 -1347dfb6188fe38ad46484c83a0826ea1cbdcd02f1d15a3c933f52475e6b020fbb1ccc0e6201b2f0abbc6dae146755a55b5d2a26f6d03e441832c214aa4c3c2116ce9809efb33d7843ca520560d861589a855fdde6e24a6476ff7b112ca1e311ec1dce31694380bea295f56d5798c27f335149fab4bf34011e0de0cbe6851730 -3d64fc464bf15fbf8b163c739e2d69f896ca33aca2029b66a604337cabcfcb299df2919735a8606d28ac79268c755671386a604852d6cc5dec376daa30f86e116b8b5722aa6d6c3d1bcec2cf8c9f23a4047032dc65a94055552de4f39abaaa256423e7e73fc0bdb6c899a95dcc286730514d5f9cdfdce9003b3093c18b45b522 -e69ded40cd4cc36f33785557d71d94c248317870579cf3b57f4c55ce6ef07629a2262b33c51ffb1c49b69012bbe7d66cb9813cc48ffbf3d297d60354dda892051ae727ab00048dac3343ca5029b972368b1d0b76a01cd72e2380de594a62b60aef1bd7c967a8e3b9e26267abeecbd46ecbe80496df846e686cf30ebb40bc2f0b -d646390d74afaf73147b6aa1c206271a699a594a334f9b453c54af708ab96f24ef6612c2b2ee63f3a4b3875d5b5be36732d413a000e865bc0a675053251a8309d910c3af193603fb9cf83e1b1ce68cdcf26381b08944c8f9afb47613a38f2728c8881c99f47402631374900b274dad103c5cdd86078b38a6cb527dfbdfab3723 -abea54bfc5d9e32f4415c2af2bc6b6f2f9387828b2c10c94169d3901648c0b0269ef6135800d45fd0976980576f82a9093b44a32cf44b7f5ee7d629a2f34f52902d4d288a3d62fbff1c843ae258b7a422269a25b174256c2c3a6d28dc253c4084ab01dfc50c679eae87ace3f7334da87a8363cd029d7b7b1dacd6bbc86a8880c -2e60face6e4c8d361a06da99a92785aa042ee2b8acea8b5f67a6283f11f44c21db5ee0af133d0b1acc6eb430199ecce4013bed0e6e38543a3885a453bd6d9316b53241d422807568048827373ce26a98d99df0057b4f637bf0f2fe0aa1fedc169b52714b31021797d5ecec2ce3bb870cddc4f64522538b3a508c67fd4397721f -c3e6513ca44344257c2176b254eb4b1313339427b12c32d50dda565ce5b5e2214e684d2d69ef5ec993f87d661ff167ac1a07430f66f19053fa6423d40c58e41f556b680e03d42f02520fe650bcb6d38f9e191713d353f279f25a155519c27d1e1b60ca59c74d509c4e3fecdd59d16a0e813cc171a4c23b08ff795a6356536030 -f0d94cda50b463489dd4dfb52d8ef8f1d6849d06ad0e3dcd4f31060165587a2e04929107c07b0e101bb4b72441f4641818d316b11baef27cd4c4d6d7a6458e14bae95706fb282edeea19adca66ba2cc91beb912d073c1eabc7cc23227ef6681bea1bfb68a49de715b8f2209707e5a9c98fe0f830551e635ca4186247c1dec010 -6ce2ace9c7a202a4f3e657ba530adb7af4183d0d8b6086ac33dfcab3cdc32d12396f6fcb4baea939a9e7a05a97e61f8d7f44d8d9b2b731b3208e92ceb9ae822023636c6f4e5feb9d209a9d9bf1d5e39c16cd5a6ac91c8dd09926779682e2a713c92b1230c18ebd4444b6f70c7aded45e88199321c040c7038ee4eead69f66f18 -e242be0d680714a5c10b9c334219f016a46e7fa68a0d6faab5de6614e70097182e3a2ab6c5a87851c6ac0709b191ddd8e3b67ab5f97ad0841437f8c15522a725612854a7be2f7fcb0a03fce83caedf25aa269f6d267ad9eba4adb051eb9f8d2279b77c39099a73a583469a08f71b4f99588d09b72f05bdcd080577edefb7c101 -5ccdb08ee96785e2028b1313110c7d3dd399546e89cc6e39a4ff3b514145d42012ccbdadb36c5574c4e60126c8fbdaa3c9e120dcd66a1ac948c7e53735173b21c7c85c5f5ef9879163a2649d4a1738d4877375a1c4f82936dc81c4cbf2b2041b904150dc9d4bce86292cd6d486635960fc439ec2c5eb49a15c8733ce9f72bf10 -d3b948e44e4fe421bd942e570dba126e4d643890cf677936dac05ac0fc8751001f7087a485b99f39427e258927e9682910685c54f46629c4dbfdfc22dce7cb2b5719c4bee35395893cc76165ff213872f13b997cbc43446d1bbaf780a677242278221dd5d1cc13f502caa89c1b56b2184958aa69509014019f8c905878664428 -dd6ab21f81d7b8ee491fb99d52ee0ec1c7e6f97eecead843baebe1b018d66e03a1b2f5b84099328b5d754e77ac616d6010a0ecef4fa3a427da82d460c25ee209403102861cc94c8cb3bcaca38bb673c558c2ee74494b00392b8f72ce7ff6331a4f8e370d915649680182cde4205499270d23e4e6bdb799e8cf94e995b8e6e421 -7fc5fe83960255a108503ad12a5b7f527de63be5d5e4eef7e94ab99d0c037c27921316bd77a3ba982b186653c1f8d5da3f294b45f8e02f1202f2297253281c09df8bf4e7d93f0fd865794729c0e1494b5e61c69cf6713e5275ce38f0b1727a2c0afadc7916d2d7c88b260039492224bac969e66bf8da7f790bc0b961b0f6892f -f1a774f888f4456f4f09769fb385b8ae671bebbb7c630e9f15423668d74bdf26a569ddc0ef033c1037d6705c83c19784a2283290ada586ecd0af34d8b931c20f57b28a64d254a1349e33cb9523c7972e03109fa6c14f3b3b9f86c2a8b6e55d1cc141836e8819b3b73e994e3e00a7352c59703d31d326b67d3613936bf4315a22 -d90d4b2b38eb706b421070de7c015100701833ce9e2f72d28d282a0285624b01bb924cdd5fd62ef935c03831f27c5af75ef0b12297fd53755190bfa4e8c82809277462c75f2ae7c31be57c8315e9ec621affe80052fa07cf31d57ccb8fc6f02c2e72cb4a0ba75c2e866ce5088d8b41968943e6a17bb2ccf1ce94a6b483e06700 -9ac2fc4d7e355f15adf955bf5515a4b1790f2140dca9c2ccb1f32ea29e9f7b135005c27fcde20c1a43f9826ec78a2dc865d0d87581ce8ac4a262ef18d7fcc0283f6892bd2779721919715f0083677b3e223fc32653f6fcbceb85b113af9457121c418f262006280c2dd0cd6fea8b70a5f2fbc89ddddb1463a08c26008841630a -41309fed1a83597f2856a43356dc6d503b92fd0346ed6e1726e1fe5179c00e27fea3dfe702c02a610716e188fef89087f14fd9e1fa6401c4cea0721feb7f3b077930bf7ea3f8904f5db43e72040e531e9b431b107510c7812f22043b4826962b3555a6fd1e155f358a78198cedcaf7864acf7ae83e7a852ef9f7943a57d16c0f -a73c6937f087ec485cd1fdb8b1d3ace5988cfb54ae1f2eaf1b8a48d0a2606e2f4d85fd48240129d403763a5c00d31fc576ac2c03d18d7beb7481abebd6a47b19baccfd74e2f6f6d5fd51eea4074940486c272583e828b56a959638029157d62d73836f8b7fbf08ce99a6b22daed2bb720d4179df990273f02883ef7c250e652b -f009f10fde510d1e8884f121c06851a254fac18d2608e824d36736c871591a06c6a88e685ef95c1cf14c8c97074e8d1a06820aabc6f8546d3efa95415441a7006479a7110b2883fe6298f4797856119def25f7563edeaf2c939f0e19c7bc651e0099bec34d66e6d4c6c8dee2a784c1666a11f98713c0210190635e2edaf6bd2d -65fcd1c899b2ba6ead26925fde4bb960437e0b080ec8f6f96b5ce37ba79a921d96c17786265b05161cd55f3ffa17437c160941b7cc4e9454c4507061d91da8263414072098421782694b9f558675c0b41948a1566390c2b2a7e9ab6e129da729be644ae307b6649abeb07268a4429fec525d0737752b77d78140e560831c0d00 -ceddb444d9dfa70d0c6e8489b76e6d2e38571609b95924b8026bbd567760cf033271845f8f6fc457a6c59f65525d6254eb3dde03f792daf072614bd50b659f1b9fd0a2740fcad97e935d8d2a6f531d2babfc3fda68ac1e88bc660bb2eb2449093a8cd3ee7f9c7576dfc0274482f0d0fdc8f8dc356279739b270047af0866a52b -6fd0f24b2ec7748dd7bd5dc4c7360b6eae142375e834170b278c616dd0419c28c63ffedc0fa21c5bdeb09b8cf1b19808da803ca519484b6c6e9901ee1711972c438aea1c9b1d74d37349f5c150b032474979dfcccb52a97f6a0f573cd468810dc13627578ad1ab7012d68ba27aad13f2203d9708eb4679bba51ad3de53b5b50b -b9a7e7e19163eb4c66f341cd946cd8611bb1a94fb469ac5b21877a897ce2d221064d7bfb38710e54d1837329840d5f5e9379fbce6c2a4086b3bc634967caa504947f3fb2774d3ce3d3ed814d2e6c77de44c9ebf974cbd89da759238fb4227a089d3b0d45360fa19a3306da5d36d69397def69a77db570bb90b18e3e3c1646000 -537e7ecf554470f5d21c46a5e123cbfa7ff4b376cc7416ee8b9bc94bed4d75219e869959b9a1cfc59e178d6db184891c31129c4013264ff6d499c9f9aea3c90aa1c38015269f2e009cd753ba82dc4052eb6d63e9551e4ad8f66566033cd3e90a38c6c626d5091faf9d669c96740a2c5260d73a880b5349ddfe1c46c163fcec15 -5df39a6a192ab26d4a9bbf128c21611d2ea6fe0d4b2364b3e648967b11c878235494432ce687518f1ba5206f788c6d31a5be9abf782e7abbd056765278c02016ebecf018093c4e1e08ef13396d4f590a75d4450bba3e1183bd4f60523c73b1195f2d55f8f97520d5836766728e31216f3c5229ec55e091cb72f6e39d6c9d4219 -1575ec5b36021c632ae0605ba563b1dfecf93ee4fee4a9519469d462c74271211dcad2bbb4e45123e52f82f23bafbd0caa0f79a2808b317f6b7467fba236221109e1e3d9b062debe13f81e651f27044803dd9676772112781863a4a546ea71003590c223f2a39efb85827df72eb8850cdc6853e36c4e21ba261508bb9595832d -69092a215bbb89b8ecb0690e853dcdfadb3d7d9954c1a9d15e66bb34ae0a111cc5477bf87bbe6549277e2d8b2d6a5ffce81386a5dce04ae9a9b7e3950c7d6d07cd95a93c79219c6a90a0d9ae9f21e9c843c12a8210cc4628ceb7e6da5e88ff1683f8b9e8b8b1833a5964a65f684f91a54b47f44cf074db1866025bdfbf301c17 -79b838c967380c4297ad0a6aada85c69333c8386b07f0ae93def6f57f8602a10a935c4615e5ea85901c095b152ca1d85e4e309b5981c4ef07a82634dc5b3920a5427f4973f189cd3c0b6312dfa60a3ce418e1ce4d5bb39681564b748d49bc3044c0b2f46dc17a656ee16550dadc1e4d56f8ed13b2564e9ed5f3953248d54970e -e596cfebb6d170ce36168ab3534a047f500ac407c61fc816224ea6d8eaf9751be655645385302a6658ceaf25f07ba8d2985682de66493dd5b6bb7cc207deaf1cb9a78cf0dc1ea43eb30b28b9b3fdde4c8ca01126c87705120312a215fc3ab80335816e59a0a56b5f88c7d0ffb39669c295da251e42c210094e6ab3fea89c3514 -466195c0e57d08c8be49d5a1fcaf76fbdefdd46c7833d62f4ba48f6abd2c062a27d76e6e575b67d6fc05a1bdf518f358651534f404413d120c9fc5f595359a11022534d78b9290740944410cc019ffcba8107be4e3a16cff4faeb9f4179e7a2599a34c7d4a9507ffef5cf916d3ff6625401f8f3afc7fcee2d7a7b8ef5e926d1b -ac3cc5d61de958380e9269af7f639650e4f461ffcf41b2113baa4947c618492a626fbcedaeb8b37ff267f55275e51817bd612a4bcf2bd0c0bdbcfc512de5f1058a0e0ad078736ba852577ac7254234a939970e6ad2235d1abcf770ed5865ad1f143deab5585ec9df16c2ea33eb08f3e74e7ece8db808e7d61438eb722dd6190e -c7e0af4740e11080a2f61710cb214d7810ea57b967f36526cc6556ee5589b102f3c456cd7c6da865e2d9a743e8ac39c200d3b1bb6e25f9de645adbf0490ffe0d2a5a649a099618d593580ade68d01bdb1321f3de3fa67de54f0371dc0b973724c56d90daae07ad18d324cc5c7dac91e677905ff9a28340fc8c519e4f6f12640c -00d105ca8875542e142f2b7c5080962e30af74db40098bce6beb505b1159eb133cdf66461f71cc81004990d93afd061d2d353027020cc419cc27a7014867c217e23ff4d036a83e5cf7690f3b461476913d96208ca798b3e9b1e27da29b9dc3279db4db5b0d7186e141c21654d8044043009ed6e6ab7b37e8c192ed38cee14a20 -aed5992ec8036b267488d93d7f191aab9c366bbda66c12fb12a9d742f72e87296a162864fec60ed1663a153e34df51df5991a285c86b935263fc11ee7902e803e19018c603c4afe4efff0a411d4c8109f0bde7206dfdbb0881a1c5bd02fa430d2a1129d07e31d381b7d8831f1cfaaefefa6b19e00a506b4f260531fad603512b -08a37681089e9e2969f629471ae1ff543603e23da4fe5343c7fbbd4362f3090457019f3a16c493faa3675853e2def141a1b0eaa24e1a335fc2f672c7ec09a012e99e4ad7ac1dc966d4a58bed10c320136d02a60a8bba77c4f459f6f2caa0d22586ba23a4a5b25ccf4ed507a7ea6b97bebcb8699eba5a02cbf489b9d09bf75421 -6fbd842784a927b13a850967e6c414d2b48477c465fde2c1ee7e31dd7ea2090ff341cb7892a5c7bb51664f6fc2912874d4f7de1a5b5afba0095b6d177d61b8183366e4b9965959e1b100142d2d4b52be489222ac7b0afb4b3054fee7d0c0d10fc8d169d2e01df3de78642eca9247fdd69bf1d46c94f3d5acc81ffe15200c712e -d6ca906379948340bb0e05fc4aec7a3da526e25a629fd007d7973e1c0477c01cbf5cfc5b8f46ddfd32af02a3a7d66ee8cca271aad952b6a25222b745ce944011014d582655fa29f45a41eb341269d1af939f26b0b2ecce41b489d69c40f6601435e12e273a8baf412b1b505abe588a999edca4a18f3e342914303e49aa86940e -01eb5ce0735a48b73e0d9a4e1262b204d7cf3af101e2d0070a21826eb5b0642f0dc0666695c2e8833c48c0047b193715a1fae66813664a84c264e2d2c4b185229bb8e821bd8f20275bcad97ab874848ddd8173926071fbaa78bfea4dc025e00f4994ca125ceb6b582970b6552656192f2950d03db5bac50434c9c06ecc1e5c29 -2e03c45513fd89ab4619365ccebdc4e98bb0916b0f6f71cd0701b7e97dca62039473b1813e9d7aa2853bd3de7f169661cf72c30547bab37f26cc2b21e193672919ee320bb7b8250e2326d2bf4984d0393aee7df877ac31ab435742e2948a940e687072d162aaff43e13b7a1241ad0c26095795d3777aa19ef0532781730f5917 diff --git a/11.ptau b/11.ptau new file mode 100644 index 0000000..2078b61 Binary files /dev/null and b/11.ptau differ diff --git a/Cargo.toml b/Cargo.toml index 1cd910a..f8e579d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,12 +16,16 @@ ark-poly-commit = { version = "^0.3.0", default-features = false } digest = { version = "0.9" } ethers = "1.0.2" hex = "0.4.3" -semaphore = { git = "https://github.com/worldcoin/semaphore-rs" } +semaphore = { git = "https://github.com/worldcoin/semaphore-rs", rev = "ee658c22684696232f68ef08beb8494280fb7da4" } serde = "1.0" ark-bn254 = "0.3.0" sha3 = "0.10.6" tokio = { version = "1.22.0", features = ["macros"] } stopwatch = "0.0.7" +ppot-rs = "0.1.1" +clap = { version = "4.1.8", features = ["derive", "cargo"] } +clap-num = { version = "1.0.2" } +reqwest = "0.11.15" [dev-dependencies] rand_chacha = { version = "0.3.0", default-features = false } @@ -36,3 +40,8 @@ path = "src/setup/main.rs" edition = "2021" name = "demo" path = "src/demo/main.rs" + +[[bin]] +edition = "2021" +name = "client" +path = "src/client/main.rs" diff --git a/README.md b/README.md index fcb093f..4a29da0 100644 --- a/README.md +++ b/README.md @@ -35,11 +35,24 @@ cd semacaulk cargo test ``` +## Documentation + +We use `mdbook` v0.4.25 for documentation. + +Install `mdbook` using [these +instructions](https://rust-lang.github.io/mdBook/guide/installation.html). + +To build the Semacaulk documentation, run this in the Semacaulk project root: + +```bash +mdbook serve ./docs +``` + ## Demo -The setup files `11.hex` and `lagrangeComms_11` are already in the repository. -To run a demo of Semacaulk with a maximum capacity of `2 ^ 11 = 2048`, first -build the demo executable: +The Powers of Tau output from Hermez Network (`11.ptau`) is already in the +repository. To run a demo of Semacaulk with a maximum capacity of `2 ^ 11 = +2048`, first build the demo executable: ```bash cargo build --release @@ -48,14 +61,10 @@ cargo build --release Run the demo: ```bash -./target/release/demo 11 11.hex lagrangeComms_11 +./target/release/demo 11 11.ptau ``` -To run a demo with a different maximum capacity, first generate the `.hex` file -with -[export-ptau-points](https://github.com/geometryresearch/export-ptau-points), -then use the `setup` executable to generate the `lagrangeComms_n` file. For -example for a maximum capacity of `2 ^ 12`: +To run a demo with a different maximum capacity, download a larger `.ptau` file and specify the log 2 of the desired maximum capacity: ```bash ./target/release/setup 12 12.hex lagrangeComms_12 @@ -70,3 +79,53 @@ Now, run: A future release will integrate implement the functionality of `export-ptau-points` into the `setup` executable, so a separate step will not be needed. + +### CLI client + +For testing and demonstration purposes, we also include a CLI client binary. + +To deploy a Semacaulk contract (supporting a capacity of 2 ^ 11), first run +`anvil` or any Ethereum node at `127.0.0.1:8545` or use the `--rpc` flag to +specify a node. + +Make sure you have built the `client` binary: + +```bash +./build_contracts.sh && \ +cargo build --release --bin client +``` + +Run the `client deploy` subcommand. Make sure that the `-l` flag is set to the +correct value! + +```bash +./target/release/client deploy --ptau ./11.ptau --rpc http://127.0.0.1:8545 -l 11 +``` + +The contract address will be printed to the console. With the default private +key on a fresh RPC node, the address should be `0x5fbdb2315678afecb367f032d93f642f64180aa3`. + +To insert an identity commitment (where the identity nullifier is `1` and the +identity trapdoor is `2`, run `client insert`: + +```bash +./target/release/client insert --ptau 11.ptau -c 0x5fbdb2315678afecb367f032d93f642f64180aa3 --rpc http://127.0.0.1:8545 -n 0x1 -t 0x2 -l 11 +``` + +The client will print the transaction hash and the index of the insertion. + +``` +Transaction hash: +0x634bfbfd1984fd27205c2995860572703d8f2b92face4cf7b827e70f33009617 +Identity index: +0x0000000000000000000000000000000000000000000000000000000000000000 +``` + +## Documentation + +We use `mdbook` v0.4.25 for documentation To build the documentation, navigate +to the `docs` directory and run: + +```bash +mdbook serve +``` diff --git a/build_contracts.sh b/build_contracts.sh index b076e0a..9547ce8 100755 --- a/build_contracts.sh +++ b/build_contracts.sh @@ -4,3 +4,5 @@ rm -rf src/contracts/out cargo clean -p semacaulk forge clean --root src/contracts/ forge build --root src/contracts/ +cp src/contracts/out/Verifier.sol/Verifier.json src/contracts/ +cp src/contracts/out/Semacaulk.sol/Semacaulk.json src/contracts/ diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..7585238 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1 @@ +book diff --git a/docs/book.toml b/docs/book.toml new file mode 100644 index 0000000..0b8ecbc --- /dev/null +++ b/docs/book.toml @@ -0,0 +1,15 @@ +[book] +authors = ["Andrija Novakovic", "Koh Wei Jie", "Kobi Gurkan"] +language = "en" +multilingual = false +src = "src" +title = "Semacaulk" + +[output.html] +mathjax-support = true + +[output.katex] + +[preprocessor.katex] +renderers = ["html"] +#inline-delimiter = {left = "\\(", right = "\\)"} diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md new file mode 100644 index 0000000..fa864ec --- /dev/null +++ b/docs/src/SUMMARY.md @@ -0,0 +1,19 @@ +# Summary + +- [Overview](./overview.md) +- [Quick start](./quick_start.md) +- [Trusted Setup](./trusted_setup.md) +- [Cryptographic Specification](./cryptographic_specification.md) + - [System invariants](./system_invariants.md) + - [Insertion](./insertion.md) + - [The Circuit and Gates](./circuit_and_gates.md) + - [Precomputation and updates](./precomputation_and_updates.md) + - [The Fiat-Shamir Transcript](./fiat_shamir_transcript.md) + - [Proof generation](./proof_generation.md) + - [Proof verification](./verification.md) +- [The Lagrange Basis Polynomial Commitment Tree](./lagrange_basis_polynomial_commitment_tree.md) +- [Mechanism of Operation](./mechanism_of_operation.md) +- [Ethereum contracts](./ethereum_contracts.md) + - [Gas costs](./gas_costs.md) +- [Performance and Benchmarks](./performance_benchmarks.md) +- [Credits](./credits.md) diff --git a/docs/src/circuit_and_gates.md b/docs/src/circuit_and_gates.md new file mode 100644 index 0000000..09cbea7 --- /dev/null +++ b/docs/src/circuit_and_gates.md @@ -0,0 +1,184 @@ +# The Circuit and Gates + +Semacaulk uses a custom Plonk-style proof system where a prover must convince a +verifier that it knows of some private *witness* values which are the result of +the correct execution of predefined logical operations upon public inputs and +fixed data. In other terms, there is a *circuit* which represents some program. +In proof systems like Groth16, circuits are represented in the form of a Rank-1 +Constraint System (R1CS), and compilers like [circom](https://iden3.io/circom) +can be used to easily compile circuits to this format. Semacaulk, by contrast, +uses a set of custom gates on a set of data columns to represent its +logic. + +## Private inputs (witness) + +- \\(\mathsf{id\\_nul}\\): the identity nullifier. +- \\(\mathsf{id\\_trap}\\): the identity trapdoor. +- \\(i\\): the index of the prover's identity commitment in the accumulator. + +## Public inputs + +- \\(\mathsf{ext\\_nul}\\): the extenal nullifier. +- \\(\mathsf{id\\_comm}\\): the identity commitment, which is the MiMC7 + `multi_hash` of \\([\mathsf{id\\_nul}, \mathsf{id\\_trap}]\\). +- \\(\mathsf{nul\\_hash}\\): the nullifier hash, which is the MiMC7 + `multi_hash` of \\([\mathsf{id\\_nul}, \mathsf{ext\\_nul}]\\). + +## Columns + +| Row | \\(\mathsf{w}_0\\) | \\(\mathsf{w}_1\\) | \\(\mathsf{w}_2\\) | \\(\mathsf{key}\\) | \\(\mathsf{c}\\) | \\(\mathsf{q\\_mimc}\\) | +|-|-|-|-|-|-|-| +|0| \\(\mathsf{id\\_nul}\\) | \\(\mathsf{id\\_trap}\\) | \\(\mathsf{ext\\_nul}\\) | \\(\mathsf{w}_0[n] + \mathsf{w}_0[0] \\) | \\(\mathsf{cts}[0]\\) | 1 | +|1| \\((\mathsf{w}_0[0] + \mathsf{c}[0]) ^ 7\\) | \\((\mathsf{w}_1[0] + \mathsf{key}[0] + \mathsf{c}[0]) ^ 7\\) | \\((\mathsf{w}_2[0] + \mathsf{key}[0] + \mathsf{c}[0]) ^ 7\\)| \\(\mathsf{w}_0[n] + \mathsf{w}_0[0] \\) | \\(\mathsf{cts}[1]\\) | 1 | +|\ldots|\ldots|\ldots|\ldots|\ldots|\ldots|\ldots| +| \\(n\\) | \\((\mathsf{w}_0[n - 1] + \mathsf{c}[n - 1]) ^ 7\\) | \\((\mathsf{w}_1[n - 1] + \mathsf{key}[n - 1] + \mathsf{c}[n - 1]) ^ 7\\) | \\((\mathsf{w}_2[n - 1] + \mathsf{key}[n - 1] + \mathsf{c}[n - 1]) ^ 7\\)| \\(\mathsf{w}_0[n] + \mathsf{w}_0[0] \\) | \\(\mathsf{dummy}\\) | 0 | +| 128 | \\(b\\) | \\(b\\) | \\(b\\) | \\(b\\) | \\(b\\) | \\(b\\) + +Notes: + +- The 0th row contains the \\(\mathsf{id\\_nul}\\), \\(\mathsf{id\\_trap}\\), etc + values. They are not table headers. +- \\(n\\) is the constant (91) defined in + [4](./cryptographic_specification.html#4-the-mimc7-hash-function). +- \\(\mathsf{dummy}\\) can be any value as it will not be used by any of the gates. +- \\(\mathsf{q\\_mimc}\\) is a selector column. It is a vector starting with + \\(n\\) 1 values followed by zeros. +- \\(\mathsf{c}\\) is a fixed column starting with \\(n\\) MiMC7 round constants. +- \\(b\\) are random values used to blind the columns, in order to + make it computationally infeasible to brute-force their polynomial commitments. + +## Gates + +To understand how the logic of the circuit is encoded, consider each row of the +table as inputs to the linear combination of the following gates, which must +evaluate to 0 for a valid proof to be generated. In effect: + +\\(\mathsf{gate}_0(r) + \ldots + \mathsf{gate}_n(r) = 0\\) must be true. + +Each and every gate must evaluate to 0. It is not possible for the prover to +cheat by having some gates evaluate to some value such that the total evaluates +to 0, since the prover will be forced to separate each gate with a challenge +that they cannot control. Internally, the equation is actually: + +\\(\mathsf{gate}_0(r) \cdot v_0 + \ldots + \mathsf{gate}_n(r) \cdot v_n = 0\\) must be true. + +where the \\(v\\) values are successive powers of the hash of the public +inputs. The prover would have to break a strong hash function to choose the +public inputs and \\(v\\) values in order to cheat. + +### 0. `Mimc7RoundGate` + +The equation is: + +\\(\mathsf{q\\_mimc}[i] \cdot (\mathsf{w}_0[i] + 0 + \mathsf{c}[i]) ^ 7\\) + +This makes each row from 1 to \\(n\\) contain the successive outputs of the +MiMC7 round function over \\(\mathsf{id\\_nul}\\). + +The key is set to 0 for all rows. + +### 1. `Mimc7RoundGate` for the identity commitment + +The equation is: + +\\(\mathsf{q\\_mimc}[i] \cdot (\mathsf{w}_1[i] + \mathsf{key}[i] + \mathsf{c}[i]) ^ 7\\) + +To understand this, first note that gate 4 (`KeyCopyGate`) and gate 3 +(`KeyEqualityGate`) ensure that the \\(\mathsf{key}\\) values are all the MiMC7 +`hash` of \\(\mathsf{id\\_nul}\\) plus \\(\mathsf{id\\_nul}\\). + +As described in +[4.3.1](./cryptographic_specification.html#431-multi_hash-with-two-field-elements), +this means that the key for step 4 of the `multi_hash` function on two inputs +is the value in any row of \\(key\\) from 0 to \\(n\\). As such, this gate +represents the circuit logic for step 4 of `multi_hash`, which brings it us +closer to computing the identity commitment. + +Recall from [5.1](./mechanism_of_operation.html#51-user-identities): + +\\(\mathsf{id\\_comm} = \mathsf{multi\\_hash}([\mathsf{id\\_nul}, \mathsf{id\\_trap}])\\) + +### 2. `Mimc7RoundGate` for the nullifier hash + +The equation is: + +\\(\mathsf{q\\_mimc}[i] \cdot (\mathsf{w}_2[i] + \mathsf{key}[i] + \mathsf{c}[i]) ^ 7\\) + +Recall that: + +\\(\mathsf{nul\\_hash} = \mathsf{multi\\_hash}([\mathsf{id\\_nul}, \mathsf{ext\\_nul}])\\) + +By the same logic behind the `Mimc7RoundGate` for the identity commitment, this +gate brings us closer to compuing the nullifier hash. + +### 3. `KeyEqualityGate` + +The equation is: + +\\(\mathsf{q\\_mimc}[i] \cdot (\mathsf{key}[i] + \mathsf{key}[n])\\) + +This gate ensures that every row of \\(\mathsf{key}\\) from 0 to \\(n\\) contains the +same value. + +### 4. `KeyCopyGate` + +The equation is: + +\\(L_0(\omega_i) \cdot (\mathsf{key}[i] - \mathsf{w}_0[i] - \mathsf{w}_0[n])\\) + +This gate ensures that the first row in the \\(\mathsf{key}\\) column is equal +to \\(\mathsf{id\\_nul}\\) plus the \\(n\\)th iteration of the MiMC7 round +function on \\(\mathsf{id\\_nul}\\). + +\\(L_0\\) is a precomputed polynomial in the multiplicative subgroup which +evaluates to 1 at \\(\omega_i\\), and 0 at all other roots of unity. +Effectively, it acts as a selector without the overhead of a selector column. + +### 5. `NullifierHashGate` + +The equation is: + +\\(L_0(\omega_i) \cdot (\mathsf{nul\\_hash} - \mathsf{w}_2[n] - (2 \cdot \mathsf{key}[i]) - \mathsf{w}_2[i])\\) + +This gate ensures that the \\(\mathsf{nul\\_hash}\\) public input is equal to: + +\\(\mathsf{w}_2[n] + (2 \cdot \mathsf{key}[0]) + \mathsf{w}_2[0])\\) + +To understand why, let us trace the computation of \\(\mathsf{nul\\_hash}\\): + +Given inputs \\(\mathsf{id\\_nul}\\) and \\(\mathsf{ext\\_nul}\\): + +1. Set \\(r\\) as 0. +2. Set \\(h_0 = \mathsf{hash}(\mathsf{id\\_nul}, r)\\). +3. Set \\(r = r + \mathsf{id\\_nul} + h_0\\). +4. Set \\(h_1 = \mathsf{hash}(\mathsf{ext\\_nul}, r)\\). +5. Return \\(r + \mathsf{ext\\_nul} + h_1\\). + +Hence, \\(\mathsf{nul\\_hash}\\) equals: + +\\(r + \mathsf{ext\\_nul} + h_1 =\\) + +\\(\mathsf{id\\_nul} + h_0 + \mathsf{ext\\_nul} + h_1 =\\) + +\\(\mathsf{id\\_nul} + \mathsf{hash}(\mathsf{id\\_nul}, 0) + \mathsf{ext\\_nul} + \mathsf{hash}(\mathsf{ext\\_nul}, \mathsf{id\\_nul} + \mathsf{hash}(\mathsf{id\\_nul}, 0))\\) + +Since the value \\(r\\) from step 3 is used as the key in step 4, the above is +equal to: + +\\(\mathsf{key}[0] + \mathsf{ext\\_nul} + \mathsf{hash}(\mathsf{ext\\_nul}, \mathsf{key}[0])\\) + +Since \\(\mathsf{hash}(x, k)\\) equals \\(n\\) round digests of \\(x\\) plus +\\(k\\), the above equals: + +\\(\mathsf{key}[0] + \mathsf{w}_2[0] + \mathsf{w}_2[n] + \mathsf{key}[0] =\\) + +\\(\mathsf{w}_2[n] + (2 \cdot \mathsf{key}[0]) + \mathsf{w}_2[0])\\) + +### 6. `ExternalNullifierGate` + +The equation is: + +\\(L_0(\omega_i) \cdot (\mathsf{w}_2[i] - \mathsf{ext\\_nul})\\) + +This gate ensures that the \\(\mathsf{ext\\_nul}\\) public input is equal to +\\(\mathsf{w}_2[0]\\). diff --git a/docs/src/credits.md b/docs/src/credits.md new file mode 100644 index 0000000..98f4d75 --- /dev/null +++ b/docs/src/credits.md @@ -0,0 +1,19 @@ +# Credits + +Semacaulk was written by: + +- Andrija Novakovic ([andrija@geometry.xyz](mailto:andrija@geometry.xyz)) +- Koh Wei Jie ([wj@geometry.xyz](wj@geometry.xyz)) +- Kobi Gurkan ([kobi@geometry.xyz](kobi@geometry.xyz)) + +Special thanks to these contributors for their feedback and support: + +- Nicolas Mohnblatt ([nico@geometry.xyz ](mailto:nico@geometry.xyz)) +- Tom Walton-Pocock ([tom@geometry.xyz](mailto:tom@geometry.xyz)) +- Lai Ying Tong ([yingtong@geometry.xyz](mailto:yingtong@geometry.xyz)) + +Last but not least, we would also like to thank: + +- Jon Stephens from [Veridise](https://veridise.com/) and Andy Guzman from + [Sempahore](https://semaphore.appliedzkp.org/) for sharing + information about Semaphore's invariants used in their formal audit. diff --git a/docs/src/cryptographic_specification.md b/docs/src/cryptographic_specification.md new file mode 100644 index 0000000..9e11e10 --- /dev/null +++ b/docs/src/cryptographic_specification.md @@ -0,0 +1,303 @@ +# Cryptographic Specification + +Some of the terminology, symbols, and language has been borrowed from and +inspired by the [Halo2 Book](https://zcash.github.io/halo2) and the [MACI 1.0 +Audit Specification](https://hackmd.io/AP6zPSgtThWxx6pjXY7R8A). + +## Notation + +- Accumulator: an elliptic curve point which is a commitment to \\(t\\) field + elements. +- \\(t\\): the maximum capacity of the accumulator. +- Zero value: the nothing-up-my-sleeve value (see 2). +- Elliptic curve multiplication: in this specification, we use the dot operator + \\(\cdot\\) to denote scalar multiplication of an elliptic curve point. + +## Cryptographic primitives + +### 1. The BN254 curve + +The current implementation of Semacaulk uses the BN254 curve which Ethereum +supports in its elliptic curve addition, scalar multiplication, and +pairing-check precompiles as defined in +[EIP-196](https://eips.ethereum.org/EIPS/eip-196) and +[EIP-197](https://eips.ethereum.org/EIPS/eip-197). + +#### 1.1. The BN254 scalar field + +The BN254 scalar field \\(\mathbb{F}_r\\) is: + +``` +21888242871839275222246405745257275088548364400416034343698204186575808495617 +``` + +#### 1.2. The BN254 scalar field + +The BN254 prime field \\(\mathbb{F}_q\\) is: + +``` +21888242871839275222246405745257275088696311157297823662689037894645226208583 +``` + +#### 1.3. The \\(\mathbb{G}_1\\) group + +The group \\(\mathbb{G}_1\\) defined on BN254 has the generator point \\(g_1 = +(1, 2)\\). + +#### 1.4. The \\(\mathbb{G}_2\\) point + +The group \\(\mathbb{G}_2\\) defined on BN254 has the generator point \\(g_2 = +(x_0 * i + x_1, y_0 * i + y_1)\\) where: + +- \\(x_0\\) equals `11559732032986387107991004021392285783925812861821192530917403151452391805634` +- \\(x_1\\) equals `10857046999023057135944570762232829481370756359578518086990519993285655852781` +- \\(y_0\\) equals `4082367875863433681332203403145435568316851327593401208105741076214120093531` +- \\(y_1\\) equals `8495653923123431417604973247489272438418190587263600148770280649306958101930` + +### 2. The nothing-up-my-sleeve value + +The nothing-up-my-sleeve (NUMS) value is: + +```bash +14233191614411629788649003849761857673160358990904722769695641636673172216357 +``` + +It is the Keccak256 hash of the bytestring `Semacaulk`, modulo +\\(\mathbb{F}_r\\). To compute it, run the following in a NodeJS console where +`e` is an instance of Ethers.js 5.0: + +```js +( + BigInt(e.utils.solidityKeccak256(['string'], ['Semacaulk'])) % + BigInt('21888242871839275222246405745257275088548364400416034343698204186575808495617') +).toString(10) +``` + +Due to the second-image resistance property of the Keccak256 hash function, +anyone can be assured that no-one knows any other preimage to the NUMS value. +It follows that no-one knows the MiMC7 preimage to the NUMS value. + +### 3. The structured reference string (SRS) + +Semacaulk's structured reference string (SRS) consists of an ordered list of +\\(2^n + 1\\) \\(\mathbb{G}_1\\) points and \\(2^n\\) \\(\mathbb{G}_2\\) +points, where the maximum capacity of the accumulator is \\(2^n = t\\). + +We assume the existence of a secret and unknown value \\(\tau\\) which can be +generated using a [securely run trusted +setup](https://eprint.iacr.org/2017/1050.pdf). + +These points are defined as such: + +- \\(\mathsf{srs\\_g1}\\): \\([g_1, g_1 \cdot {\tau}, \ldots, g_1 \cdot {\tau \cdot {t + 1}}]\\) +- \\(\mathsf{srs\\_g2}\\): \\([g_2, g_2 \cdot {\tau}, \ldots, g_2 \cdot {\tau \cdot {t + 1}}]\\) + +Where \\(g_1\\) is defined in 1.3 and \\(g_2\\) is defined in 1.4. + +### 4. The MiMC7 hash function + +Semacaulk currently uses the MiMC7 hash function to compute identity +commitments and nullifier hashes. While other possibly more secure hash +functions like Poseidon are possible, we chose MiMC7 only because of its +simplicity of implementation for our purposes of delivering a proof-of-concept. + +The MiMC7 has function is defined +[here](https://iden3-docs.readthedocs.io/en/latest/_downloads/a04267077fb3fdbf2b608e014706e004/Ed-DSA.pdf). + +Our instantiation of the MiMC7 hash function for the BN254 curve uses the +following constants: + +- \\(n = 91\\) +- \\(\mathsf{MIMC\\_SEED} =\\) `mimc` (the hexidecimal array `[0x6d, 0x69, 0x6d, 0x63]`) + +#### 4.1. The MiMC7 round constants + +Given the BN254 scalar field \\(\mathbb{F}_r\\), we first define 91 round +constants (denoted as \\(\mathsf{cts}\\)) using the algorithm implemented in +[`circomlibjs/src/mimc7.js`](https://github.com/iden3/circomlibjs/blob/ee8ec2fca2ca7f16dec9d0f39d57dbe80dd18870/src/mimc7.js#L29) +and +[`semacaulk/src/mimc7.rs`](https://github.com/geometryresearch/semacaulk/blob/main/src/mimc7.rs#L65). + +The algorithm is as such: + +- The first round constant is \\(0\\). +- The next round constant is the Keccak256 hash of \\(\mathsf{MIMC\\_SEED} =\\), + modulo the field order of \\(\mathbb{F}_r\\). +- Each subsequent round constant is the Keccak256 hash of the previous one, + modulo the field order of \\(\mathbb{F}_r\\). + +#### 4.2. The MiMC7 `hash` algorithm + +To hash a single field element \\(x\\), we use the `hash()` algorithm. The inputs to +`hash()` are \\(x\\) and a key \\(k\\). + +1. Compute the first round digest \\(\mathsf{rd[0]} = (x + k) ^ 7\\). +2. Compute the next \\(n - 1\\) round digests such that +\\(\mathsf{rd}[i] = (\mathsf{rd}[i - 1] + \mathsf{cts}[i] + k) ^ 7\\) +3. Return \\(\mathsf{rd}[n - 1] + k\\). + +#### 4.3. The MiMC7 `multi_hash` algorithm +To hash multiple field elements \\(x_0, \ldots, x_n\\), we use the `multi_hash()` +algorithm. The inputs to `multi_hash()` are the array of said field elements +and a key \\(k\\). + +1. Initialise \\(r\\) to equal \\(k\\). +2. For each \\(x_i\\): + + a. Set \\(h_i = \mathsf{hash}(x_i, r)\\). + + b. Set \\(r = x_i + h_i\\). + +3. Return \\(r\\). + +##### 4.3.1 `multi_hash` with two field elements + +It is useful to describe the `multi_hash` algorithm for two input elements in +individual steps because the Semacaulk circuit construction (see [The Circuit +and Gates](./circuit_and_gates.html)) makes use of its intermediate states. + +Given inputs \\(a\\) and \\(b\\): + +1. Set \\(r\\) as 0. +2. Set \\(h_0 = \mathsf{hash}(a, r)\\). +3. Set \\(r = r + a + h_0\\). +4. Set \\(h_1 = \mathsf{hash}(b, r)\\). +5. Return \\(r + b + h_1\\). + +Note that in step 4, the key is \\(a + h_0 = \mathsf{hash}(a, 0)\\). This fact +is crucial to understanding how the circuit construction works. + +### 5. KZG commitments + +Semcaulk uses the KZG commitment scheme described in +[KZG10](https://www.iacr.org/archive/asiacrypt2010/6477178/6477178.pdf). + +Given an array of \\(t\\) values \\([m_0, \ldots, m_t]\\), we interpolate to +derive the polynomial \\(\phi\\) such that \\(\phi(i) = m_i\\). + +Knowing \\(\phi\\) with \\(l\\) coefficients \\([\phi_0, \ldots, \phi_{l - +1}]\\), one can use \\(\mathsf{srs\\_g1}\\) to produce a commitment in the form +of a \\(\mathbb{G}_1\\) point, or \\(\mathsf{srs\\_g2}\\) to produce a +commitment in the form of a \\(\mathbb{G}_2\\) point. + +\\(\mathsf{commit}(\phi, \mathsf{srs}) = \sum_{i=1}^{l} \mathsf{srs}[i] \cdot \phi_i \\) + +An alternative notation for \\(\mathsf{commit}\\) is: + +- \\([\phi\]_1\\) where the commitment is a \\(\mathbb{G}_1\\) point or +- \\([\phi\]_2\\) where the commitment is a \\(\mathbb{G}_2\\) point. + +A KZG opening proof is denoted as: + +\\(\mathsf{open}(\mathsf{srs}, [\phi\], \phi(i))\\) + +### 6. Lagrange basis polynomials + +Lagrange basis polynomials are an important concept and are used in several +parts of the protocol. To understand them, we must first define roots of unity +of a finite field. + +#### 6.1. Roots of unity of a finite field + +The \\(n\\)th roots of unity of a finite field \\(\mathbb{F}_p\\) with prime +order \\(p\\) are field elements where for each element \\(x\\), \\(x^n = 1\\). + +For example, the 4th roots of unity of the BN254 scalar field (see 1.1) are: + +``` +0x0000000000000000000000000000000000000000000000000000000000000001 +0x30644E72E131A029048B6E193FD841045CEA24F6FD736BEC231204708F703636 +0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000000 +0x0000000000000000B3C4D79D41A91758CB49C3517C4604A520CFF123608FC9CB +``` + +Another name for the \\(n\\) roots of unity is the evaluation domain of size \\(n\\) +for a given finite field. They are commonly denoted as \\(\\{1, \omega, \ldots, +\omega^{n-1}\\}\\). + +#### 6.2. Lagrange basis polynomials + +Given an evaluation domain of size \\(n\\), the Lagrange basis polynomials of +this domain are the \\(n\\) polynomials \\([L_0, \ldots, L_n]\\) such that +\\(L_i(\omega^{i - 1} = 1)\\) and \\(L_i(\omega^{j} = 0)\\) for all +\\(j \neq i - 1\\). For example: + +- the Lagrange basis polynomial \\(L_0\\) evaluates to 1 given the input + \\(\omega^0\\). +- the Lagrange basis polynomial \\(L_0\\) evaluates to 0 given the input + \\(\omega^1\\). +- the Lagrange basis polynomial \\(L_1\\) evaluates to 0 given the input + \\(\omega^0\\). +- the Lagrange basis polynomial \\(L_1\\) evaluates to 1 given the input + \\(\omega^1\\). + +#### 6.3. Efficient generation of commitments to Lagrange basis polynomials + +To support \\(t\\) insertions, Semacaulk requires the KZG commitments to the +Lagrange basis polynomials over the evaluation domain of size \\(t\\). These +KZG commitments are efficiently generated using an implementation of the +[Feist-Khovratovich +technique](https://alinush.github.io/2021/06/17/Feist-Khovratovich-technique-for-computing-KZG-proofs-fast.html). + +### 7. The accumulator + +The *accumulator* is a single \\(\mathbb{G}_1\\) point that is a commitment to +a vector of \\(t\\) \\(\mathbb{F}_r\\) elements where \\(t\\) is the maximum +capacity of the instance of Semacaulk in question. These elements are ordered +with the users' identity commitments followed by nothing-up-my-sleeve values. + +An *empty accumulator* is simply a commitment to \\(t\\) nothing-up-my-sleeve +values. + +Given the vector of values \\([v_0, \ldots, v_t]\\), the accumulator \\(C\\) is computed +as such: + +\\(\sum_{i=1}^{t} \mathsf{commit}(L_i, \mathsf{srs\\_g1}) \cdot v_i\\) + +#### 7.1 Updating the accumulator + +To replace a value at \\(w_i\\) with \\(v_i\\) at index \\(i\\): + +\\(C_{\mathsf{new}} = C - L \cdot w_i + L \cdot v_i\\) + +\\(= C + L \cdot (v_i - w_i)\\) + +where \\(L = \mathsf{commit}(L_i, \mathsf{srs\\_g1})\\) + +This can be done on-chain at a low cost because the only expensive operations +required are an elliptic curve scalar multiplication and a elliptic curve +addition. + +### 8. The Keccak256 hash + +The Keccak256 hash function is defined in [*The Keccak SHA-3 +submission*](https://keccak.team/files/Keccak-submission-3.pdf) by Bertoni et +al with the output length of 256 bits. We rely on implementations from the +following sources: + +- The EVM's [`KECCAK256` + opcode](https://ethereum.org/en/developers/docs/evm/opcodes/) denoted as + `0x20`. +- The Javascript [Ethers.js library's + `ethers.utils.solidityKeccak256`](https://docs.ethers.org/v5/api/utils/hashing/#utils-keccak256) + function. +- The Rust [`tiny-keccak` library's + `v256`](https://docs.rs/tiny-keccak/latest/tiny_keccak/struct.Keccak.html) + function. + +### 9. Evaluation domains + +#### 9.1. The subgroup domain + +An evaluation domain with size 128. We denote this constant as +\\(\mathsf{SUBGROUP\\_SIZE}\\). + +#### 9.2. The extended coset domain + +An evaluation domain with size 8 * 128. We denote this as +\\(\mathsf{EXTENDED\\_DOMAIN\\_FACTOR} * \mathsf{SUBGROUP\\_SIZE} = 1024\\). + +#### 9.3. The table domain + +An evaluation domain with a size of at least 1024. This is the upper limit on +the number of elements that the accumulator can hold. diff --git a/docs/src/ethereum_contracts.md b/docs/src/ethereum_contracts.md new file mode 100644 index 0000000..c7ead75 --- /dev/null +++ b/docs/src/ethereum_contracts.md @@ -0,0 +1,92 @@ +# Ethereum contracts + +## `Semacaulk.sol` + +The main Semacaulk contract which client applications should interact with or +inherit. The key functions it exposes are: + +### `insertIdentity` + +Functions signature: `insertIdentity(uint256 _identityCommitment, uint256 _lagrangeLeafX, uint256 _lagrangeLeafY, bytes32[] memory _lagrangeMerkleProof`) + +`_identityCommitment` is the user-generated value defined in +[6.1](./mechanism_of_operation.html#61-user-identities). + +`_lagrangeLeafX` and `_lagrangeLeafY` are the respective X and Y coordinates of +the commitment to the Lagrange basis polynomial of the index at which the user +wishes to insert their identity commitment. + +`_lagrangeMerkleProof` is the Merkle proof from the Keccak256 hash of +`_lagrangeLeafX` and `_lagrangeLeafY` to the root of the [Lagrange Basis +Polynomial Commitment Tree](./lagrange_basis_polynomial_commitment_tree.html). + +This function first verifies the Merkle proof to ensure that `_lagrangeLeafX` +and `_lagrangeLeafY` are valid. Next, it performs field and elliptic curve +operations to perform an [insertion](./insertion.html) to update the +accumulator. + +### `broadcastSignal` + +Function signature: `broadcastSignal(bytes memory _signal, Types.Proof memory proof, uint256 _nullifierHash, uint256 _externalNullifier)` + +This function performs the following steps: + +1. Revert if `_nullifierHash` has already been seen. This prevents double-signalling. +2. Compute the $\mathsf{sig\_hash}$ public input by hashing `_signal` with + Keccak256 and right-shifting the result by 8 bits. +3. Verify the proof and revert if it is invalid. +4. Store the nullifier hash. + +## `Verifier.sol` + +This contract exposes a `verify()` function for the Semacaulk contract's +`broadcastSignal` function to use. It performs the steps described in +[4.7](./verification.html). + +## `Transcript.sol` + +This contract abstracts over the Fiat-Shamir Heuristic by providing helper +functions to the verifier to add data to the transcript and extract the +challenge values it needs. + +## `Types.sol` + +A helper library that defines complex Solidity types that comprise the proof. + +## `BN254.sol` + +Provides functions that encapsulate elliptic curve operations over the BN254 +curve. + +## `KeccakMT.sol` + +Provides a helper function for the Semacaulk contract's `insertIdentity` +function to verify a Merkle proof. + +## `Lagrange.sol` + +Provides a helper function for the verifier contract to compute the evaluation +of $L_0$ at a given point $\alpha$, and the evaluation of the vanishing +polynomial at $\alpha$. + +## `Constants.sol` + +Contains crucial constant values: + +- `PRIME_Q`: the order of the BN254 base field. +- `PRIME_R`: the order of the BN254 scalar field. +- `DOMAIN_SIZE_INV`: the inverse of the domain size (128) over the BN254 scalar field. +- `LOG2_DOMAIN_SIZE`: the binary logarithm of the domain size such that `2 ^ LOG2_DOMAIN_SIZE = 128`. +- `OMEGA`: the 1st root of unity (counting from 0) of the subgroup domain. +- `OMEGA_N`: the $n$th root of unity (counting from 0) of the subgroup domain. + +The following constants depend on the maximum size of the accumulator, and +should be changed depending on how many elements the client application wishes +to support. + +- `SRS_G1_T_X`: The X coordinate of $\mathsf{srs\_g1}[t]$ +- `SRS_G1_T_Y`: The Y coordinate of $\mathsf{srs\_g1}[t]$ +- `SRS_G2_1_X_0`: The X0 coordinate of $\mathsf{srs\_g2}[1]$ +- `SRS_G2_1_X_1`: The X1 coordinate of $\mathsf{srs\_g2}[1]$ +- `SRS_G2_1_Y_0`: The Y0 coordinate of $\mathsf{srs\_g2}[1]$ +- `SRS_G2_1_Y_1`: The Y1 coordinate of $\mathsf{srs\_g2}[1]$ diff --git a/docs/src/fiat_shamir_transcript.md b/docs/src/fiat_shamir_transcript.md new file mode 100644 index 0000000..1970bf3 --- /dev/null +++ b/docs/src/fiat_shamir_transcript.md @@ -0,0 +1,28 @@ +# The Fiat-Shamir Transcript + +A transcript is an abstraction over the [Fiat-Shamir +heuristic](https://en.wikipedia.org/wiki/Fiat%E2%80%93Shamir_heuristic). Both +the prover and verifier use the transcript to deterministically generate +*challenge variables* based on the public inputs and proof data. + +Another way to think about the transcript is as a state machine where the state +is a single data buffer. Every time a challenge is requested, it hashes the +buffer replaces the contents of the buffer with the hash, and returns a value +derived from the hash. The transcript can also be updated with abitrary data by +appending the update to the buffer. + +Our transcript implements this concept with the following functions: + +- `new_transcript`: returns a new transcript whose buffer is 32 bytes of `0` + values. +- `update_with_f`: accepts a single \\(\mathbb{F}_r\\) value, converts it to a + big-endian byte array, and appends it to the buffer. +- `update_with_g1`: accepts a single \\(\mathbb{G}_1\\) point, converts its + \\(x\\) and \\(y\\) points to big-endian byte arrays, and appends them to the + buffer in the aforementioned order. +- `update_with_g2`: accepts a single \\(\mathbb{G}_2\\) point, converts its + \\(x_0\\), \\(x_1\\), \\(y_0\\), and \\(y_1\\) points into big-endian byte + arrays, and appends them to the buffer in the aforementioned order. +- `get_challenge`: hashes the buffer with Keccak256, replaces the buffer with + the hash, converts the hash into a \\(\mathbb{F}_r\\) element (treating it + as a big-endian buffer), and returns the \\(\mathbb{F}_r\\) element. diff --git a/docs/src/gas_costs.md b/docs/src/gas_costs.md new file mode 100644 index 0000000..e103cc7 --- /dev/null +++ b/docs/src/gas_costs.md @@ -0,0 +1,11 @@ +# Gas costs + +An insertion (via `insertIdentity()` costs around 68k gas. + +`broadcastSignal()`, which includes proof verification, costs around 355k gas. + +By contrast, a Tornado Cash deposit (which involves inserting a leaf to a +Merkle tree) costs [907787 +gas](https://etherscan.io/tx/0x6f60a4aa7058dab153a859adfb139362d4bc395145528371ed90b127e528c7e7) +and a withdrawal (which involves a Groth16 verification step) costs [327188 +gas](https://etherscan.io/tx/0xf2eb3005bf1d1866b4778d6b3686aaed64f8c6b015d2e998855598226223b613). diff --git a/docs/src/insertion.md b/docs/src/insertion.md new file mode 100644 index 0000000..50b5cef --- /dev/null +++ b/docs/src/insertion.md @@ -0,0 +1,15 @@ +# Insertion + +As described in the [Cryptographic +Specification](./cryptographic_specification.html#7-the-accumulator), +insertions to the accumulator are easily achieved via an elliptic curve point +multiplication and addition. + +To replace a value (originally $w_i$) at index \\(i\\) with $v_i$: + +$C_{\mathsf{new}}= C + L \cdot (v_i - w_i)$ + +where $L = \mathsf{commit}(L_i, \mathsf{srs\\_g1})$ + +If only insertions are allowed, $w_i$ is by definition the [nothing-up-my-sleeve +value](./cryptographic_specification.html#2-the-nothing-up-my-sleeve-value). diff --git a/docs/src/lagrange_basis_polynomial_commitment_tree.md b/docs/src/lagrange_basis_polynomial_commitment_tree.md new file mode 100644 index 0000000..00f86f2 --- /dev/null +++ b/docs/src/lagrange_basis_polynomial_commitment_tree.md @@ -0,0 +1,17 @@ +# The Lagrange Basis Polynomial Commitment Tree + +The Semacaulk contract's `insertIdentity` function requires access to a valid +commitment to the Lagrange basis polynomial at the index at which an insertion +is made. This commitment is prohibitively expensive to compute on-chain, so +we instead have a Merkle root to the hashes of all of these commitments be set +as an immutable storage variable at deployment time. The user only has to +provide a Merkle path to said commitment, which the contract can cheaply +verify. These commitments are deterministic and anyone can verify that the +Merkle root to these values is valid. + +## Code + +The Rust function to compute the Lagrange basis polynomial commitments is +`commit_to_lagrange_bases` located in `src/accumulator.rs`. The code to compute +the Merkle tree of the hashes of these commitments is also located in the same +file. diff --git a/docs/src/mechanism_of_operation.md b/docs/src/mechanism_of_operation.md new file mode 100644 index 0000000..e0bd23b --- /dev/null +++ b/docs/src/mechanism_of_operation.md @@ -0,0 +1,58 @@ +# Mechanism of Operation + +The goal of Semacaulk is to enable users to: + +1. Register their identity; +2. Prove in zero-knowledge that they are a member of the set of registered users; +3. Broadcast an arbitrary signal towards an external nullifier, without the + possibility of double-signalling. + +## 6.1. User identities + +A user's identity consists of an *identity nullifier* \\(\mathsf{id\\_nul}\\) +and an *identity trapdoor* \\(\mathsf{id\\_trap}\\). These are secret values +and are elements of \\(\mathbb{F}_r\\) (see [1.1](./cryptographic_specification.html#11-the-bn254-scalar-field)). + +An *identity commitment* \\(\mathsf{id\\_comm}\\) is the MiMC7 `multi_hash` (see [4.3](./cryptographic_specification.html#43-the-mimc7-multi_hash-algorithm)) +of \\(\mathsf{id\\_nul}\\) and \\(\mathsf{id\\_trap}\\): + +\\(\mathsf{id\\_comm} = \mathsf{multi\\_hash}([\mathsf{id\\_nul}, \mathsf{id\\_trap}])\\) + +## 6.2. External nullifiers + +An *external nullifier* \\(\mathsf{ext\\_nul}\\) is a \\(\mathbb{F}_r\\) field +element which represents a topic. A signal can only be broadcast towards each +external nullifier once and only once. + +## 6.3. Nullifier hashes + +A nullifier hash is the MiMC7 `multi_hash` of +\\(\mathsf{id\\_nul}\\) and \\(\mathsf{ext\\_nul}\\): + +\\(\mathsf{nul\\_hash} = \mathsf{multi\\_hash}([\mathsf{id\\_nul}, \mathsf{ext\\_nul}])\\) + +## 6.4. Insertions + +An *insertion* is the act of updating the on-chain accumulator with a user's +identity commitment. This is done by invoking the `insertIdentity()` function +of the Semacaulk smart contract. + +## 6.5. Broadcasting a signal + +When a user *broadcasts a signal*, they generate a proof that they know the +secret identity nullifier and identity trapdoor behind their identity +commitment, and then submit said proof to the Semacaulk smart contract's +`broadcastSignal()` function. + +Tied to this proof is the hash of a *signal* and the user's desired external +nullifier. The contract (not the user) hashes the user-provided signal using +Keccak256 and right-shifts the result by 8 bits to derive +\\(\\mathsf{sig\\_hash}\\), which is used as one of the public inputs to the +verifier. + +### 6.6. Preventing double-signalling + +The Semacaulk smart contract maintains a mapping of nullifier hashes. Each +nullifier hash is unique to the user and an external nullifier. If the +`broadcastSignal()` function finds that a nullifier hash has already been seen, +it rejects the transaction, thus preventing double-signalling. diff --git a/docs/src/overview.md b/docs/src/overview.md new file mode 100644 index 0000000..74deca0 --- /dev/null +++ b/docs/src/overview.md @@ -0,0 +1,58 @@ +# Overview + +Semacaulk is a zero-knowledge set membership protocol that works on Ethereum. + +Semacaulk allows a user to *commit* to an identity, represented by two secret +values: an identity nullifier and an identity trapdoor. Next, any user who +knows their secret values can generate a proof that they had previously +committed to said identity, without revealing which member of the set they +were. Moreover, when they submit such a proof, they can broadcast an arbitrary +*signal* against an *external nullifier*, but only do so once per external +nullifier. This enables applications like mixers, whistleblowing, and simple +private voting systems. This is the same basic functionality as the [Semaphore +Protocol](https://github.com/semaphore-protocol/semaphore). + +The source code for Semacaulk can be found +[here](https://github.com/geometryresearch/semacaulk). + +## Differences from Semaphore + +Semacaulk differs from Semaphore in two key ways. First, instead of +accumulating identity commitments in a Merkle tree, it updates a KZG +commitment. This operations involves BN254 point multiplication and addition, +rather than expensive zk-friendly hash operations. Secondly, the underlying +proof system is a polynomial interactive oracle proof that combines [Caulk+ +lookups](https://eprint.iacr.org/2022/957) and a [multipoint opening +argument](https://zcash.github.io/halo2/design/proving-system/multipoint-opening.html). + +Thanks to these techniques, on-chain insertions are far cheaper in Semacaulk +(around 68k gas) while the gas cost of verification (356k gas) is comparable to +that of Semaphore. Moreover, proof generation comes in two phases - a +[precomputation stage](precomputation_and_updates.html) and a proof generation +stage. The total time taken is comparable to Groth16 proof generation for a +Semaphore circuit that supports the same number of insertions, but more +imporantly, precomputation can be performed long in advance and efficiently +updated, which imparts more flexibility which may lead to higher +user-friendliness. + +## Motivation + +We intend Semacaulk to demonstrate the use of Caulk+ techniques for membership +proofs in a gas-efficient manner to enable privacy-related applications. We +believe these techniques, as are other new proving systems and lookup +arguments, can be highly useful, and we hope that Semacaulk shows how to +practically use them. + +We highly welcome and strongly encourage collaboration with projects who wish +to build upon Semacaulk. + +Note that the techniques used in Semacaulk do not have to involve an end-to-end +custom prover such as used here. We have done this only because we wanted to +experiment with improving prover efficiency further. With only small changes, +the same gas-efficient membership proof construction can be used with more +generic and expressive SNARK-based programs. + +## Security + +The code base has not been audited. We do not recommend its use in production +until a thorough audit has been performed. diff --git a/docs/src/performance_benchmarks.md b/docs/src/performance_benchmarks.md new file mode 100644 index 0000000..76cf73a --- /dev/null +++ b/docs/src/performance_benchmarks.md @@ -0,0 +1,17 @@ +# Performance and Benchmarks + +These benchmarks were performed on an Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz +machine with 24 GB RAM. They represent the time taken for a native Rust binary +(built for `release`) to perform the precomputation and proof generation steps. + +To reproduce these benchamarks, run the `demo` binary following [these instructions](./quick_start.html). + +## Benchmarks + +| Maximum capacity | Precomputation (ms) | Proof generation (ms) | Precomputation + proving | SRS size (uncompressed hex) (MB) | +|-|-|-|-|-| +| `2 ** 11 = 2048` | `103` | `63` | `166` | `0.78` | +| `2 ** 12 = 4096` | `183` | `51` | `234` | `1.6` | +| `2 ** 14 = 16384` | `668` | `53` | `721` | `6.1` | +| `2 ** 16 = 65536` | `2126` | `50` | `2176` | `25` | +| `2 ** 20 = 1048576` | `24333` | `42` | `24375` | `387` | diff --git a/docs/src/precomputation_and_updates.md b/docs/src/precomputation_and_updates.md new file mode 100644 index 0000000..96e5827 --- /dev/null +++ b/docs/src/precomputation_and_updates.md @@ -0,0 +1,112 @@ +# Precomputation and updates + +Caulk employs a precomputation step in order to make the use of it sublinear in +the group size. This allows neatly separating the membership proof part of +Semacaulk from the nullifier computation, while allowing to blind the +precomputed membership proof differently at each use. + +When a group is updated, precomputation is needed again, so there are a few +options as to how to avoid many precomputations in frequently updated groups. +These include storing a history of valid group commitments or batching +insertions and updating the precomputation after some predefined time slot. +This also opens the possibility to use a centralised, but verifiable, service +to compute these for them, since a unique feature of the precomputation in +Caulk is that a batch can be computed even more cheaply. There are, of course, +privacy implications when using a service, but these can also be mitigated +using several techniques and trade-offs. + +Additionally, the precomputation done in Caulk is amenable to efficient updates +when the group changes, justifying a higher cost for the initial +precomputation. + +## Precomputed data + +Precomputed data consists of the following: + +1. \\(\mathsf{mimc\\_cts}\\) +2. \\(\mathsf{mimc\\_cts\\_coset\\_evals}\\) +3. \\(\mathsf{zh\\_inverse\\_coset\\_evals}\\) +4. \\(\mathsf{q\\_mimc}\\) +5. \\(\mathsf{q\\_mimc\\_coset\\_evals}\\) +6. \\(\mathsf{l0\\_coset\\_evals}\\) +7. \\(\mathsf{w_1\\_mapping}\\) +7. \\([{\mathsf{W}_1}^{(i)}]_2\\) for all indices \\(i \in I\\) +8. \\([{\mathsf{W}_2}^{(i)}]_2\\) for all indices \\(i \in I\\) + +The only parts of the precomputed data which rely on the secret index \\(i\\), +which denotes the secret position of the prover's identity commitment in the +accumulator, are \\([{\mathsf{W}_1}^{(i)}]_2\\) and \\([{\mathsf{W}_2}^{(i)}]_2\\). + +The Caulk+ paper defines: + +- \\({\mathsf{W}_1}^{(i)} = (C(X) - v_i) / (X - \omega^i)\\) +- \\({\mathsf{W}_2}^{(i)} = Z_H(X) / (X - \omega^i)\\) + +## Updating commitments to \\(\mathsf{W}_1^{(i)}\\) + +For many of Semacaulk's use cases, users insert new items into the accumulator, +and do not update existing items. As such, this section will only discuss +how to update commitments to \\(\mathsf{W}_1^{(i)}\\) when the accumulator +changes at an index \\(j\\) which is different from that of the user's entry +\\(i\\). + +We can efficiently update \\([{\mathsf{W}_1}^{(i)}]_2\\) using the technique +described in [TADBFK20, section 3.4.2](https://eprint.iacr.org/2020/527.pdf), +where \\(i \neq j\\). An implementation of this approach can be found in the +[`quotient-pir`](https://github.com/geometryresearch/quotient-pir) repository. +Additionally, a proof of concept of precomputation-as-a-service can be found in +the +[`semacaulk-precompute`](https://github.com/geometryresearch/semacaulk-precompute) +repository. + +## Updating commitments to \\(\mathsf{W}_2^{(i)}\\) + +For use cases where users do not update their own entries (i.e. \\(i \neq j\\)), +there is no need to update the precomputed commitments to +\\(\mathsf{W}_2^{(i)}\\). + + diff --git a/docs/src/proof_generation.md b/docs/src/proof_generation.md new file mode 100644 index 0000000..4067337 --- /dev/null +++ b/docs/src/proof_generation.md @@ -0,0 +1,260 @@ +# Proof generation + +## 4.6.1. Assignment Round + +Given the public and private inputs, the prover generates the assignment table +(see [4.3](./circuit_and_gates.html)). Each column is represented as a +polynomial over the multiplicative subgroup. + +- \\(\mathsf{w}_0\\) +- \\(\mathsf{w}_1\\) +- \\(\mathsf{w}_2\\) +- \\(\mathsf{key}\\) + +The prover then computes KZG commitments to each of the above polynomials: + +- \\([\mathsf{w}_0]_1\\) +- \\([\mathsf{w}_1]_1\\) +- \\([\mathsf{w}_2]_1\\) +- \\([\mathsf{key}]_1\\) + +The prover also computes: + +\\(A = \mathsf{w}_1 + \mathsf{w}_1(\gamma^{91}X) + 2 \cdot \mathsf{key}\\) + +where \\(\mathsf{w}_1(\gamma^{91}X)\\) is \\(\mathsf{w}_1\\) shifted by the +\\(n\\)th root of unity in the subgroup domain +([9.1](cryptographic_specification.html#91-the-subgroup-domain)). + +Next, the prover adds the public inputs to the transcript in this order: + +1. \\(\mathsf{ext\\_nul}\\) +2. \\(\mathsf{nul\\_hash}\\) +3. \\(\mathsf{sig\\_hash}\\) + +The prover then extracts the challenge \\(v\\), which is used in the next +round. + +## 4.6.2. Quotient round + +The prover generates a quotient polynomial \\(q\\) by dividing +a numerator — a powers-of-\\(v\\)-separated linear combination of gate +polynomials — with the vanishing polynomial \\(Z_H\\). + +\\(q(X) = \mathsf{numerator} / Z_H\\) where + +\\(\mathsf{numerator} =\\) + +\\(\mathsf{q\\_mimc}((\mathsf{w}_0 + \mathsf{cts})^7 - \mathsf{w}_0(\gamma X)) + \\) + +\\(v \cdot \mathsf{q\\_mimc}((w_1 + \mathsf{key} + \mathsf{cts})^7 - w_1(\gamma X)) +\\) + +\\(v^2 \cdot \mathsf{q\\_mimc}((\mathsf{w}_2 + \mathsf{key} + \mathsf{cts})^7 - \mathsf{w}_2(\gamma X)) +\\) + +\\(v^3 \cdot \mathsf{q\\_mimc}(\mathsf{key} - \mathsf{key}(\gamma X)) +\\) + +\\(v^4 \cdot L_0(\mathsf{key} - \mathsf{w}_0 - \mathsf{w}_0(\gamma ^{91}X)) +\\) + +\\(v^5 \cdot L_0(\mathsf{nul\\_hash} - \mathsf{w}_2 - \mathsf{w}_2(\gamma ^{91}X) - 2 \cdot \mathsf{key}) +\\) + +\\(v^6 \cdot L_0 \cdot (\mathsf{w}_2 - \mathsf{ext\\_nul})\\) + +These equations correspond to the gates defined in +[4.3](circuit_and_gates.html#gates). + +\\(\mathsf{w}_0(\gamma X)\\) refers to \\(\mathsf{w}_0\\) shifted (or +"rotated") forward by one. + +\\(\mathsf{w}_0(\gamma ^{91}X)\\) refers to \\(\mathsf{w}_0\\) shifted forward +by 91, which is the number of MiMC7 rounds defined in +[4.1](./cryptographic_specification.html#41-the-mimc7-round-constants). + +The prover then commits to \\(q\\) to obtain \\([q]_1\\). + +## 4.6.3. First Caulk+ round + +The prover computes: + +- \\(\mathsf{z}_i\\) +- \\(\mathsf{c}_i\\) +- \\(u'\\) + +and their commitments: + +- \\([\mathsf{z}_i]_1\\) +- \\([\mathsf{c}_i]_1\\) +- \\([u']_1\\) + +according to [page 6 of the Caulk+ +paper](https://eprint.iacr.org/2022/957.pdf). + +The prover then updates the transcript with \\([q]_1\\) and the above values, +and extracts the challenge values \\(\chi_1\\) and \\(\chi_2\\), which are +used in the next round. \\(\chi_1\\) is also used in the opening round. + +## 4.6.4. Second Caulk+ round + +The prover computes: + +- \\(\mathsf{h}\\) +- \\(\mathsf{w}\\) + +according to the Round 2 steps from [page 6 of the Caulk+ +paper](https://eprint.iacr.org/2022/957.pdf), and commits to them: + +- \\([\mathsf{h}]_1\\) +- \\([\mathsf{w}]_2\\) + +The prover then extracts the challenge \\(\alpha\\), which is used in the next +round. + +## 4.6.5. Opening round + +This section is a work in progress; in the meantime, see [this +document](https://hackmd.io/D-bL6-oNSbSej7Ao_-9PLA) for the multiopen argument. +Also see [this document](https://hackmd.io/D-bL6-oNSbSej7Ao_-9PLA) which +describes the argument adapted for Semacaulk. + +The prover computes: + +- \\(\omega\\): the root of unity with index 1 (starting from zero) of the + subgroup domain + ((9.1)[./cryptographic_specification.html#91-the-subgroup-domain]). +- \\(\omega^n\\): the root of unity with index \\(n\\) (starting from 0) of the + subgroup domain. + +The prover computes the polynomials: + + + + + +- \\(\mathsf{p}_1\\) +- \\(\mathsf{p}_2\\) + +The commitments: + +- \\([\mathsf{p}_1]_1\\) +- \\([\mathsf{p}_2]_1\\) + +The openings: + +- \\(\mathsf{w}_0(\alpha)\\) +- \\(\mathsf{w}_0(\omega\alpha)\\) +- \\(\mathsf{w}_0(\omega^n \alpha)\\) +- \\(\mathsf{w}_1(\alpha)\\) +- \\(\mathsf{w}_1(\omega\alpha)\\) +- \\(\mathsf{w}_1(\omega^n \alpha)\\) +- \\(\mathsf{w}_2(\alpha)\\) +- \\(\mathsf{w}_2(\omega\alpha)\\) +- \\(\mathsf{w}_2(\omega^n \alpha)\\) +- \\(\mathsf{key}(\alpha)\\) +- \\(\mathsf{key}(\omega\alpha)\\) +- \\(\mathsf{q\\_mimc}(\alpha)\\) +- \\(\mathsf{mimc\\_cts}(\alpha)\\) +- \\(\mathsf{q}(\alpha)\\) +- \\(\mathsf{u'}_1(\alpha)\\) +- \\(\mathsf{p}_1(\mathsf{u'}_1(\alpha))\\) +- \\(\mathsf{p}_2(\alpha)\\) + +The prover adds the above openings to the transcript in the stated order. + +## 4.6.6. Multiopen argument round + +The steps in this are based on the Halo2 [multipoint opening +argument](https://zcash.github.io/halo2/design/proving-system/multipoint-opening.html). + +The prover computes the vanishing polynomials: + +- \\(\mathsf{z}_1 = x - \mathsf{u'}_1(\alpha)\\) +- \\(\mathsf{z}_2 = x - \alpha\\) +- \\(\mathsf{z}_3 = \\mathsf{z}_2 \cdot (x - \omega\alpha)\\) +- \\(\mathsf{z}_4 = \\mathsf{z}_3 \cdot (x - \omega^n \alpha)\\) + +The prover extracts the challenge values \\(x_1\\), \\(x_2\\), \\(x_3\\), and +\\(x_4\\). + +The prover computes the polynomials: + +- \\(\mathsf{q}_1 = \mathsf{p}_1\\) +- \\(\mathsf{q}_2 = \mathsf{q\\_mimc} + + \\mathsf{mimc\\_cts} \cdot x_1 + + \\mathsf{q} \cdot {x_1}^{2} + + \mathsf{u'} * {x_1}^{3} + + \mathsf{p}_2 \cdot {x_1}^{4}\\) +- \\(\mathsf{q}_3 = \mathsf{key}\\) +- \\(\mathsf{q}_4 = \mathsf{w}_0 + \mathsf{w}_1 \cdot x_1 + \mathsf{w}_2 \cdot {x_1} ^ 2\\) +- \\(\mathsf{f}_1 = \mathsf{q}_1 / \mathsf{z}_1\\) +- \\(\mathsf{f}_2 = \mathsf{q}_2 / \mathsf{z}_2\\) +- \\(\mathsf{f}_3 = \mathsf{q}_3 / \mathsf{z}_3\\) +- \\(\mathsf{f}_4 = \mathsf{q}_4 / \mathsf{z}_4\\) +- \\(\mathsf{f} = \mathsf{f}_1 + + \mathsf{f}_2 \cdot x_2 + + \mathsf{f}_3 \cdot {x_2}^2 + + \mathsf{f}_4 \cdot {x_2}^3\\) +- \\(\mathsf{final} = \mathsf{f} + + \mathsf{q}_1 \cdot x_4 + + \mathsf{q}_2 \cdot {x_4}^2 + + \mathsf{q}_3 \cdot {x_4}^3 + + \mathsf{q}_4 \cdot {x_4}^4\\) + +The prover computes the openings: + +- \\(\mathsf{q}_1(x_3)\\) +- \\(\mathsf{q}_2(x_3)\\) +- \\(\mathsf{q}_3(x_3)\\) +- \\(\mathsf{q}_4(x_3)\\) + +The prover computes the commitments: + +- \\([\mathsf{f}]_1\\) + +Finally, the prover computes a KZG opening proof: + +- \\(\pi_\mathsf{final} = \mathsf{open}(\mathsf{srs\\_g1}, \mathsf{final}, + x_3)\\) + +## 4.6.7. The proof + +The final proof consists of: + +- The multiopen proof + - \\(\mathsf{q1\\_opening}\\) + - \\(\mathsf{q2\\_opening}\\) + - \\(\mathsf{q3\\_opening}\\) + - \\(\mathsf{q4\\_opening}\\) + - \\(\mathsf{f\\_cm}\\) + - \\(\mathsf{final\\_\pi}\\) +- The openings + - \\(\mathsf{q\\_mimc}\\) + - \\(\mathsf{mimc\\_cts}\\) + - \\(\mathsf{quotient}\\) + - \\(\mathsf{u\\_prime}\\) + - \\(\mathsf{p1}\\) + - \\(\mathsf{p2}\\) + - \\(\mathsf{w0}_0\\) + - \\(\mathsf{w0}_1\\) + - \\(\mathsf{w0}_2\\) + - \\(\mathsf{w1}_0\\) + - \\(\mathsf{w1}_1\\) + - \\(\mathsf{w1}_2\\) + - \\(\mathsf{w2}_0\\) + - \\(\mathsf{w2}_1\\) + - \\(\mathsf{w2}_2\\) + - \\(\mathsf{key}_0\\) + - \\(\mathsf{key}_1\\) +- The commitments + - \\([\mathsf{w}_0]_1\\) + - \\([\mathsf{w}_1]_1\\) + - \\([\mathsf{w}_2]_1\\) + - \\([\mathsf{key}]_1\\) + - \\([\mathsf{mimc\\_cts}]_1\\) + - \\([\mathsf{quotient}]_1\\) + - \\([\mathsf{u\\_prime}]_1\\) + - \\([\mathsf{zi}]_1\\) + - \\([\mathsf{ci}]_1\\) + - \\([\mathsf{p1}]_1\\) + - \\([\mathsf{p2}]_1\\) + - \\([\mathsf{q\\_mimc}]_1\\) + - \\([\mathsf{h}]_1\\) + - \\([\mathsf{w}]_2\\) diff --git a/docs/src/quick_start.md b/docs/src/quick_start.md new file mode 100644 index 0000000..f06aa5e --- /dev/null +++ b/docs/src/quick_start.md @@ -0,0 +1,38 @@ +# Quick start + +1. Install Rust using [these + instructions](https://www.rust-lang.org/learn/get-started). + +2. Install Foundry using [these + instructions](https://github.com/foundry-rs/foundry#installation). + +3. Clone this repository. + +```bash +git clone https://github.com/geometryresearch/semacaulk.git && \ +cd semacaulk +``` + +4. Build the contracts + +```bash +./build_contracts.sh +``` + +5. Run tests + +```bash +cargo test +``` + +6. Build and run the demo: + +```bash +cargo build --release && \ +./target/release/demo 11 11.ptau +``` + +Note that the Powers of Tau `11.ptau` file supports up to 2048 leaf +insertions. To support a larger capacity, see the [Trusted Setup - Processing +the points](./trusted_setup.html#processing-the-points) section for +instructions on how to do so. diff --git a/docs/src/specification.md b/docs/src/specification.md new file mode 100644 index 0000000..33e6104 --- /dev/null +++ b/docs/src/specification.md @@ -0,0 +1 @@ +# Specification diff --git a/docs/src/system_invariants.md b/docs/src/system_invariants.md new file mode 100644 index 0000000..08de99c --- /dev/null +++ b/docs/src/system_invariants.md @@ -0,0 +1,42 @@ +# System invariants + +An [invariant](https://mathworld.wolfram.com/Invariant.html) is a property of a +system which remains unmodified even after operations or transformations are +applied to it. The authors of Semacaulk intend the following to be the +invariants of Semacaulk: + +1. **Privacy**: No-one but the user who knows the value of the identity + nullifier and identity trapdoor behind an identity commitment may generate a + valid proof of set membership of the identity commitment in the accumulator. + +2. **Safe NUMS value**: No-one should be able to produce a valid proof of set + membership for the default nothing-up-my-sleeve value. + +3. **Proof non-malleability**: Proofs are visible once submitted to the mempool, + but no-one should be able to modify an existing proof, change it such that + it is associated with a different signal, and remain valid. + +4. **Zero-knowledge**: given a valid proof, no-one should be able to determine + the index of the identity commitment the identity nullifier, or the identity + trapdor associated with the proof. + +Other invariants which have to do with the internal consistency and correctness +of the system are: + +5. All identity commitments must be less than the BN254 scalar field size. + +6. Every identity commitment in the accumulator must have been added at some + point in the past, except for the NUMS values. + +7. Any identity commitment besides the NUMS value may be added to the + accumulator, unless it is full. + +8. The NUMS value cannot be added to the accumulator. + +9. There can be no valid proof associated with a NUMS value as the identity + commitment. + +10. All nullifier hashes must be less than the BN254 scalar field size. + +11. It should only be possible to generate a proof for a valid user, and + impossible to generate a proof for an invalid user. diff --git a/docs/src/trusted_setup.md b/docs/src/trusted_setup.md new file mode 100644 index 0000000..35ee7ae --- /dev/null +++ b/docs/src/trusted_setup.md @@ -0,0 +1,29 @@ +# Trusted Setup + +Semacaulk requires a [securely run trusted +setup](https://eprint.iacr.org/2017/1050.pdf). Specifically, for a capacity of +\\(2^n\\) elements, it requires \\(2^n + 1\\) \\({g_1}^{\tau}\\) points and +\\(2^n\\) \\({g_2}^{\tau}\\) points where \\(\tau\\) is highly unlikely to be +known but \\({g_1}^{\tau}\\) and \\({g_2}^{\tau}\\) can be generated via a +multi-party ceremony. As long as one participant does not reveal and destroys +the secret so-called toxic waste that they use, the entire ceremony is secure. + +For compatibility with Ethereum, Semacaulk is built on the BN254 curve. As +such, the output of the [Perpetual Powers of +Tau](https://github.com/privacy-scaling-explorations/perpetualpowersoftau) +ceremony can be used. The outputs of this ceremony include up to \\(2^{28}\\) +\\({g_1}^{\tau}\\) and \\({g_2}^{\tau}\\) points. If Semacaulk is to be used on +a different elliptic curve, a different trusted setup must be used. + +For the sake of convenience, we recommend the trusted setup output from Hermez +Network, which consist of the 54th contribution of Perpetual Powers of Tau (PPOT) with +a random beacon. These files can be downloaded from [this +page](https://github.com/iden3/snarkjs#7-prepare-phase-2). (You may also use +the latest contribution to PPOT, but at the time of writing, a tool to parse +and convert it has not yet been written.) + +Note that the [Aztec Ignition ceremony +output](https://github.com/AztecProtocol/ignition-verification/blob/master/Transcript_spec.md) +is not sufficient for Semacaulk as only provides 1 `tauG2` point, while +Semacaulk requires as many `tauG2` points as the maximum desired capacity of +the accumulator. diff --git a/docs/src/verification.md b/docs/src/verification.md new file mode 100644 index 0000000..b8c19ee --- /dev/null +++ b/docs/src/verification.md @@ -0,0 +1,47 @@ +# Proof verification + +At a high level, the verifier does three main steps to verify a proof +([4.6.6](proof_generation.html#466-the-proof)): + +## 4.7.1. Check the gate openings + +Given the opening values which the prover claims to be evaluations of the +column polynomials which correspond to the circuit, the verifier computes the +linear combination of the evaluation of the openings based on each gate +equations separated by the \\(v\\) challenge values. This linear combination +must equal the product of the quotient opening and the evaluation of the +vanishing polynomial, or the verifier will return false. + +## 4.7.2. Compute the multiopen argument's `final_poly` and `final_poly_eval` values + +Leveraging the homomorphic properties of KZG commitments, the verifier +reconstructs a commitment to the \\(\mathsf{final}_\pi\\) polynomial generated +in the +[prover's multiopen argument round](./proof_generation.html#466-multiopen-argument-round). + +The verifier also +reconstructs \\(\mathsf{final\\_poly\\_eval}\\) which is the evaluation of +\\(\mathsf{final}\\) at the \\(x_3\\) challenge. + +## 4.7.3. Perform pairing checks + +A three-part pairing product is performed and the verifier returns true only if +the result is 1. + +\\(A * B * C == 1\\) + +where: + +\\(A = e(\mathsf{a}_1 + \mathsf{a}_2 + \mathsf{a}_3, [1]_2)\\) + +\\(\mathsf{a}_1 = C - [\mathsf{ci}]_1\\) + +\\(\mathsf{a}_2 = \chi_2(\mathsf{srs\\_g1}[t] - [1]_1)\\) + +$\mathsf{a}_3 = (\pi_\mathsf{final} \cdot x_3 - \mathsf{final\_poly\_eval} + [\mathsf{final}]_1) \cdot s$ + +\\(B = e(-[\mathsf{zi}]_1, [\mathsf{w}]_2)\\) + +\\(C = e(-[\mathsf{final}_\pi]_1 \cdot s, [1]_2 \cdot \tau)\\) + +and \\(s\\) is a separator challenge extracted from the transcript. diff --git a/lagrangeComms_11 b/lagrangeComms_11 deleted file mode 100644 index ef6123e..0000000 --- a/lagrangeComms_11 +++ /dev/null @@ -1,2048 +0,0 @@ -65C58017927150D104B032050F73EC6A18D1135615069F6A4AFF45847C0D29274A46B7E1C915691021D130F9837D066F30CCCFB9CCBD78EB335382F4591E7E20 -B789985E9B69840C4367AD48805BDCA6B353ADDA93B5E7A69A917F0B7467B028191D67CFEA1D0ACD21CCD329C77D4B6003B45013675E185C40B7343C4E393623 -FDED98DB33C8172B7FC038412C005597E3D8D5ACBC166CF5BFEDD6FDF19EDE2ABC8B91DE0EC6AD41B1596E9A1C3C9DF92B623C51DCBE9BB6200CEE0A3048DC21 -499C313E6A00E2C9AFE7E3B64A96C0860908144085F6C9029DF826F0929FB702EA8814755143E090DF3784B4FC6506CE0F4CDF8F1756DB60AC9CDDE90A4E1E2F -90895941A90C095ABFD240481E5B6F2DF3D87141ED60A2B5A073F42A9D8E5F2D848F8141D185C284FDB785D2F75BDF0152B02D6C31E724A1583BFDB8FB0C601A -E7DB4E2698F0545E36042088D534456AD7BA350B28433A8741642333778EBA0DD01015CF453868422C3AC6637744A7A912CC889C0C7C5378D4A58A03EA09481E -43B8240DEC443B148BA9B4860247F22109289B8170528B8A18BD277D7A814C0965D9D1C501DC52953C5D36A7998C38C4D044DB5A8B5C867D1563718F7C87011C -8A15ABC8C679B18C0B02FFF2F56135728FF499F21EA55E3DBA7E124396C83406A88BCAB3F94102259415FA21E36C13E60F67FF7EFEFF755097A537988C2F5124 -9D0E779D523FE30F319C5889595460AB3F52AA5981B5C8A8DDEABE061A47162C53C543A637A99CD6DE912568A4AFF8331BD2BBD40F5AADA3EC611A0A85710312 -EB8E113427E07A0C1F8B0CDAE412AC5BC84058654AD07FE5C92DE5D8E391F91436B83201FDCFA3723E046FBC13B7081834186538CFD9B5CE6E0B031722A85314 -C45619AAA1B03EA2E8267D8275D5859BE47943F67287E0693CD931AE11A49F1FDBB50C66CAC0335114316779EE9D1548C03FFE58C79C51CFA16C195988D32E0B -66F7443D1C7BBC652B8488ABB4E3D47132ED657695F28542B05FDA90EBAB4207F2A6650FAD1C12155279522375FBF5BFBD37D811371DF22F894E0DDA82DDAE2A -01E04344019702076A5A81DBE704D370DAC93D2000BE8D191373E66AAA406723969316610C390593D21CCE66952DE3BB61A6E2AC5E9C1E157A49C48E1D572A21 -28F3DE214B8A211A4A897D7A54AED48DA069D1168D3F03A2FE25F4E5BB40EA0365D925AFC41BF53140435238D640304D8E13B9B9351C8E0A10D3CFC95B40BE0E -1B098F4A9A4C26DD1FFCF389931F2763FBE9CE9C6089B426BDDCFB4BA14F382CCA119E29DCD6C13EFC40572546313EE2AEFA6FB278B4FE24950A74C4F9C4B113 -37D0E15156041A1436921156BBC5348FB51A14CF07CDE07864165573E2070207F45EA79781F25D108DE29FA19F90D67595D163DFFB75A487DF2614D600993914 -5B182C5C954F1E65657789F74353D8CC0A61351DB430E62E7DEE8C3709710E1A1B447264C49C6CCAA46B837F1274067DE688007B9E6D8A2A52CCFBF603BFFF00 -9E8C2C1027D069A6FBE3AF0EE015D73F018026BF6BE27FD6FD6C432F51B4393017ACE1C629782BFB4F3FB60758173C0ACB23FCF7B0751B5149E0640BEEF1971B -DBFD460A046250AAF5389EB833D4976175BE2BE4CA4E68B55CF5C02AF748D6072B486637DC50DEFB2063A4DF62FD5CA4087FBF628A0C078A691F175B4DC1570D -0889601BE7D9D4DB067FC24D9E2E4E2F64D8C54046DD5DE78A5133E007A05D08C656120D161AF2D68BD10BC85FF9FA54440A89CAAB7BC40C114B1B4F66EE0020 -ADA5E5CD5728941F7B4A4534CC712F9BA5F6B1CD470175CF48AF045ABEF2230577C992F6DEEA083DC15890B513CD95821D3390262B94B3A9513B2230B61BAB24 -7B03ACE9C71D1B459D7B2972E3DFB936AC70CD25AD3E32CD8B1123CF3660E20A34313848C4E51D39BF2734788E5BB4702454392A1A0749BECF9C305EAF04D300 -9AC019B7292197FA2466CB43DF518DFCD3BEFB273903C3C14F5DFE3AE4F2BC1CDFD220E56B2DB2B2220209CDD96A2377EC2C84E5E45FC8E833746329F7A61E0D -0E4CFBEE0209318BD9DA3DF65750804570D9B1A8E97F9343F923D6DBE0679901F8DE8F93BCC26EBE52A5437E6946D2F642797739151FB830808DA0A84FC46C09 -415F4D5275B43FC7E7A2533D950D2A6D7D2997545709346B7F831CD57FE15900019205230B21C1A2D4BC42BF2F83F363F87889C7CB0879ADD7A158D6CAF5AB12 -BBBA3D0360E2602F6E0888D5C70854BB06CE7AD138C74E83F0EB91951F3E450ECD817C021451F3C63955DB13C701AD94987E39A737F4BC760A307F9C9F550C13 -B241B288B40E5E556DCB6FD29F22A4A37110079C845679683AF71F00266D4E1F7B41D26F0D7F9F3069215E9A419826ADF9B75182123ABAACBF6A2B76694E761E -C2D156CA7F5EB9A2A5F8C72AD414AAA9C89295DCB8F7845817D8955C9926631D78994EF65A65E136355AC4E05FF96DAB5307910CB5A84CC2DF8BCD0B3C145B20 -688AB68157BA1EA760F24FBF859F88C7231F72916667874D34A814AA01BD530BE48D4BF1B397A3673BBA6B03CC7BC4D118D53A6D1366F2A5EF01F848F03ABC02 -AC0BC2536CA1BE7586689427AAB09F26CF9925F92618051E7A36A023511851166FAD7C2B3F51149E2616B54582115263902DDC9DE9E7386CBA36D63D01054224 -526F60410F63A00A0DD2EB8BC414999C413CD91BABF74C49D36EF31773895F00B73B6C072ACE0665D1B1D89EFE3AA24E381DAE0297A59D73411EC4CC0AF46527 -158B8AAD3E50B4FE2B2A36ACC3CEA52CEB126E08E40AE5C27B15B28F8B0CF214F1328D2B698E68949EB1AE9851024220DE2DCA98EE60CCE2368FE8F8927C5918 -9FA1D58C3CE14C54B917CAD0AC6DC860D77B2934B57BB6BC27B86345DF7FA320AA771151F009D67EF626E0591DA9A23F745719E7717B81AD28CCBF0ED2033F19 -A396F9E5172A3A2AB4F237141A1293A43716DEFA3A09E8325146849E31C93109A0AEA4C848BA6266984B2A92D5C9AA53494DA5CBCE568862013FB6D4FF92FA15 -D3427FF9D91C9E0EFCBEA12896BB9203547915FE6999DD2EFA3949C7D984681EC611529F7D01A2613D1F5F33CB1903CCB395B336A94B76D86ADED9E0ED159F1F -3160CB7E628EA18AAFB247F3EAAF982A73EC3FB1164C8C1C5F651084681FFA19860E3376B5CD66F9A9355CC465A8D2DE8F39040D4FA2A0FF00CC8889DCCAB608 -727540CEF9B789457035DADA755003E13D336267E6D9B65E0E5C117494E0200AB718A0C0B7851AB03B8AB1A06D2B1600882A6C0A473A4871C2B4FE8F85DC371C -04AF1504D4333FF1EF36511B07479677E5A7130FA0CB9D4D111BABC838AE482425375479C5A8CF38ABB3299788B07FABBC2F813026743A7D7BB4CAE31E7F8C1D -4A6469901E598394A17A7E2E5E8C5F60AEEC5C56846EA72D0F92D381988071265B27ADB7FA61D84FA2C08D460F24556E305ED78509168E91B064DB770152B829 -3B6020245810DD3DFCE0F80AEE1EA78EE7849A981A49EDBEEA5DA27FA5417415C03ED02ABAC35C6EAD76AE3FAD25F4BB230212BA58E8E253F26289AFB37F1508 -EE694860FF1200F0ED51F82FCC68ACC7ABFF5FD01FC43C1086E4CD2E98BEEC07AC10034F8D523D8D9C2CB376937A508C13ECBCC111FF706DD015CD890B62E32C -CDD3B580531F05919F86D03370C33B4257D2846486641B85FF82F55635F54E26B53BA3C82EF352AD6EF416A682C0DFAA4415D1DF83D9B6BCA3927A24C5EA7527 -7078DDFE0D58ED61CEAF707AD2D900DD63DAF80065654B4A7AA3443DFD62421E428E11A3764D4D4A381B6BE6A7940143E80DC4465B3AD22123726E9D315A782D -064DA9AAF4254866F3FF139E1DE2E9D83476FFA2BFB0B5DC3164BD08AF69C82EC126BE9B9974379190B40468BC2750279903589AF4BB18099D44AC0B2BF44F2C -D5A64BEB81A4BF68F0271EDCA87B0F03D550973CD3A816C7D671F21DFE8A5C25C34D035B233DD4D9BFDC955C2C513F55AFE27747D7F057FBC92B4B8E905B5624 -11A275850F7C522934CA525ED7F9ABF1956E603794CE03312B6F8344EA8492291A421FFF54AEF06A6EA98720A75FF233966EE41223AE3B50ED9DBC9367B2041B -0735A4E19C8DE6C84D256B625F16D070FB54835ACE3030911D23F5C6A010742F29192F50B0C040726FD2179729A81E45A239990F77C5BDA1AB3937006F60F703 -135A574FF4D18404D4E0F00CC691B3F5D24B604900D16AD0C03CD0CDA951890AB6C93954D7BC0462DFAB6953AAE03B8BEC60A55DB89FD086DFBEB4EF727E0330 -189EEB2ADF444A0FCC3B33A1EE9222FE6AFA58CBFEDABD868711DCA2CA70F82A80D3C9C53A67ADE582F3873F8FDA5B15A09ED4806654CBC7ADE224C5E1E42429 -AC5E2223AFD5A39D1E74C32FB5A13F2F8C268BCCCD8860A9DB16B9B48635210C121A0D4F99DA5DB215C79EFB22C4D36EA65AA6A005B02059FF45FC4D5EB70F0E -DBBEA3972A6F8F913454C855B136AF6BB975B528871756B959303E08B882382E4ACF8691FE56A5B02C96C5DD31A91C57209322D6A6F9254CFC74C930A71F9611 -2C515AE14B01ABA6BD95D04395B366C93AB3487EAD1A8D3A2453ED741A7BBF1535380666E3580003C95C7B18F87CAFB19B826AB4EBE0BFAE94888C26DDAD8B0C -A205BE164C482858B9B3E5230BFDB4CED463BF6ACB35FB9A4DF367B6FD8EB6268EDB9B1EE05F49792FB3D1ED65B25A651C865E0DEE2A6C85C6AB2476DFC3D51D -08D378EEE25DCBEDB1F054C2DB8DBD94DE175123CBF933FF9C98806A75714419650FAA4A3308ED4770A7F8E9AAC2ED4BBC2D21BD59339CAACD72918F95A3A91A -D7DD80D24D1DFC14EAA8FBDC0401DBA0B4BC8E51B5BF80212148A011A49B051F4003C4EB93256776C0FD53C92F2B35CDB4EB8AAB756A8483DDE8C01E72D94430 -E9BA848BAF67566FA1D920E1ACB03BA2B6D022ECC328BA291FC11008174BC52D4A8978891D7CD81C1D76AF9304D5EBAC19B576093C9E65B05623E9E9F0488829 -EFE1DA236B606173116DCE6CE1BD3C1DEB265FAB90B3FE58FF2BD942C4502627F0BE4D894226DC4F8CBF9DA644BFC8449189E7CA440F0DAE864AAE317A01EB15 -3945F4BB3D4B4D2BF1B8581AA8D819A76E5BEF304433F821CD202621D1B0DF2A0CA88D83DE77A54ED5ECD48E0B806B30328B3E7289CBE4BB89C0AA5744DFDE01 -8FD8CE4BDFF6F8537FDC05F9D8B1B1F40B186783EE53310A5935B0F370C8050D61659844D4338EFFAD9B71B43805D5D19BD2CDEA8659C556058DDE5C2441CD22 -5F33582B8AF51316C91EC3288083209BF492A715BBF675463C48E7AFF9283B2553616366178E14BD0A69CCD228E8FDACBADB8D23648BA5117D14EAA34F985424 -4657C5EF2127E6AE0A9617B9473DEECC299D49EE2714976B4A8A3F0C2425842D0C0B649B3A6E5DE043C7E4C39B3A290800394C9941A32089E7D86DFF5119A91F -10F9D7163D8A558686A52CBC267AC653A93445D9A6AAED7FF9EDA0E63ECD081616B669115BD7A956E1EB5C74CD836D833FF33DB482FB629F849DE83CB0568518 -BA500D75CFE3EF2F590A7D285D220E1471474C2486A8CBB2FEBEF2DE5F834E2FC739C66C1A8B38A2C1D583ED0C949F39B7F06066A2A3DD72141436016ED02118 -3DF1D8551A820CB7FF46BA0D21DE0C66D90CD9CC87C705EB2DFBB01B6C05740FD01D78AE68D4A8096ED40DB6B665B603E44E9293EFB782CBFF648FABA4614F2E -C2872C2821BC1036AE581ECC25AEA070FF38154A6B6873D9BED4D7FA9180BF2D93601B5211D5C3AA33D86F44C5A2933E2239654674A5C515AFCC105AE8559105 -5556648D146BE6A2E9FB1AB77CCFE6ED1E7E34C90CFA5B173D9547FEE6656515057C98B54D37A663071F68095BF1A42D85787778044118320167A6E8EE2A0D16 -E937CEFC5302404BB655A5C2D3B0AE63A27B6454F13ACFB5E87E885774FAD80273C0690A509613DCA1C3ADF7F9963120DC194D3F7B3FFBF4AF5BC8E4591B3215 -E8E750C32D78B77AB8ED0999A022C87CE38C268073432A568E934D6BE198CB09A897BC660486BDCA7AED5756BEEB85C841A320BD31353FF2F002B6649C32D12C -027C93C0DADC9C6DE89D164B7B429F0F81B109D0B620CC47015B91EF4C9FC91896994238B6CED764EC4088AD404ADF3236E69A2DFE0481754AE51B0B8406C400 -2F5A44F06ACDF6EFFDD34FD8827AA5311F05ABCE05A4E39FB5B21519FB27420D26599C3CF77DB1808924F61673627CD64BB81C723A2D61A7E9F18ACFC18D6B0F -27DFFF0E446D60F3139AEDA32BC7977380D6C135FDB11FC2600768029C74C51E03B35CD23682F086DDD35C64BA66BFB0331F04AE3E6A7AB0BBA34EEFF0DDA225 -097DC2A49D7C20F0BC3B3FF04F247F539B278726C8F4D3E2E55E287F34D359195A661C815F1A3672B1EA2333BA9A8701F5CA091F870059C64ECAAD46C5A5B729 -37DD66EDDBDC4454584F930C67B83B275BFE01154702562C7FFF4DC2DBD63D08ADABE646EEF98EC9647D0553839D12CDBD4BF2BC253B23E7A4897854E4602008 -C9F02C61D0AA8CD27E6A814B0CC33D339DC1BB000C04834B1D695422C4435523B008BD60461CC8B8524AEC21CCDC465A6A848328770BD8849E62182D3C3A9A08 -BC423FE6206366E00A359B5823D76BC94942E32A209AEBC1241E281F790F6D1FECF803D3EEC49C0FF0F73757099C557186058440D8A28A70CFAA320622237020 -9D125ABBC1422C0AC300CEE7BBFD513199B7B933588766AF2650B734BBDA7A0053422D66C3E7D31E2BC229760EF36809D76471DA92AEB584E511C54445D3FB10 -01B551D32470B6A35B7417AAC4C390B14ADF80D6ED7DAC3AD82928FBDA4DC424F822BFE15586A8D0DE5DFEC0975FEBF6A2B3739DDD78BC911C4EF47F8CD0882A -8F7B2A728D1A05710CB351631D6E83E43A0E42581D28D1E20DE08869CB2CDF1F52D733C30D589EE3050B741273212E4F87BB7A2D963CB0B0D44AC60AACDBDB1E -8C950F116DB5D09E872626A12A5D4B33581CD43309A0FD8F0FD574F346C4082EB0197F6F053E516C9DDC26622BB058DBB9164F84D29D2183668AE3BC91C3BD21 -56B5882BC8FAF7387CEA2432E526E75F10C4B74DB955FBA92D7BE849D02A6F159C7F5A680087228C8820A1F60FCD29A4814649D999E113D0AEA28960D2B87C04 -B09BF56B241CD436D41E3E6801AA83B0980B11A763467562EFAD36F88267A40A654899C800AF139232C17427B3F318CA754F936578993DA1D2C5322494F27F0C -838D37B384F4E95FADAF62936FAD29579630349B50E0EBA0DD249C479920121C6DB210FA3B4B4A997E388D7312EE545E9F3042A70FE3CF0D83D5B618A746092D -C6E1B868E1DEF04BB4DDCB8CAAA567BA9E8A665F136FEFF0407F4FA7A31C3B075D1C6370D11522F04C3C9A5F95D2659CDBB4E156DD2D3B86852D4C8C36144C1E -75BE5FB201C5A0E1E4385F491E57BDA582742BBC6EB3044BD185CA59B1A14913D472C65B4E1812908E7E30FDCBE0F64263463C8DCBEB44681CDA20E715722721 -FADB38DBEBC8CBC1EC14BEFFF499E4A3D496CA24B765477B92902601C05CCE244235E864DDD21CACF8D85E6252EBC8DE49DCBF02F5BAAE43641106F283786B2F -387433A502AA40FD2152A8EA32D11ABD560BF61789D5E0DD0888B8B7AC2FDD0A41DF2C0BA0AD1220F3E7BE23DC1F690D06A5095B9DCE27923821627911EE511A -A4429E6289C7AE373C3C58AC18C1E5A510C677274C1AAFD40241ECAD8FA4492173932845A8EECE73E4961BE1F71BFC46227C93814C0EBCC1913C5A0872393422 -34235A47CA6AED11A518ECC043088BF953418BC41D940D51C95B22A3AA32C206AB25764455C9B5DCDA59BC9D9CC1618E41A11C22CD5313B5EB6FEB252BFE291C -2A321CCC57942CF1BBAC1EC5A1C859A791263E7AF1B1759F6E6954DEA4DB3708C18F7B6001E971E27CFDE9DE260648E64E4A82EB153F267F5170C349AB87CD29 -25457B29CFB6ABD87E5CA8152259716E117461980B2B76C4A27AB7660DEF160D24A8D7E13C52D9639240E932BDF3B1A37922265237CAED14A42977334442371E -5C55940EE1710C53818B4E204D17C29A1FA1379BD7596C02A6DA2CE2306362164971581392B898C7382D571A5445D47614DE015C04DB3271E44C3FCE84FAB91B -CF024D241DFDCC17F67897FD82824452A5096811AA97C33B4B6AA72DB6CD910C6FD1B183611FF792E219F1AAA4FFEAC19004B776D6AAEFCD8B74FF7E402A3624 -D500CAEFA2847A4999E09108E4B9B38062438B958EE1C06A53523A9C34ADA4202E220F0091E19505F446D09489D5F939BD9D0E3D39A53EDE98756755E2C58105 -F54FB8C227C2DCAC478CC04D77B6327B22CA85847DFFC59ADDFA9825D2F31901C63773B0D2CA74788DEA13ADA5B8B6E4199EB123F542B9E9C318222B03FCAC01 -E404935E09CA74C9654201387A0D9415418D5B46F05E04EF8FBB49174E8F4E24391B23F81937849386C6B350708EDF1C1283A2BF988DB8B9AB5B1025A76F0430 -33BAD9226D483D5594AC8C9DDF893FC6A9A46FFD4C740901655E0A2DA783AB1FD60468C746D987F9E8D8FF36A9A77595F2C384EB490EF03C15414FAD587C031B -5E6FB8509E8171CB909748A55B56ACCD302EDCD7AD2AD9BF0C3545B092B33C28C790934CFB78967E812321560A65BBB2B478367FB1573AFB513C2B25BA16AF1C -3CF06998EA8596F4A75B49D049163FFFF6A8B14FA8E50CE0565CB3D31445580C1D73CD98BCD7F9C977DD5A0311E90CB96C8B07D464DDD221C436565635E75103 -ADC7E8FA3CD8BD912349611259AA8C25ABE3B47C59990BA9712513332BDCC71BAB80278DE07ADFF6F6742923690032F186DB45805EB7BCDB579957885E14B416 -550455D88C64C21B00B0BAEEA89F80EABAFB0B9E73FB0DDFD7F30D80A124443016248F44A6EA6F096EAB1A088B7B292B446CF61D8504D03518C0651A5C4AD615 -AE9AA627587D92E1F8F52AE1B5CC791DE1BF7546CE66149D3A17A3AFA3BB6D2FED339D26DB5D95CAC06413C027AD85059FCF30C82D9FBB2035331F095E98422A -7DEEC99E374769D48F3657F8646D2A611909A5CBCD8809FA9F9E0817BD960825B34B5C35C7A1BCCD98702139AAF2D31D3DA36B8904421CB5C2D1DD9DCEAA702C -3F786A7B50A637BD52D733F5F583A2138E8EC59A6394063DD92141E59F1D16243365977198BAEEC68DB3216C79D1296FA37C2842A19583482F355F54F271B52E -7481C90F85B126982CFBBBC56FD398436763C0477D778D6AEA02B699FB62560660075176F97482B137728B5A4A4ED1F9D27F27C3AD79A9DACB3E09757429C51C -75415190946531D462AAD1D38892AFBD5F9CDF8188D3B297F8036061BDAB8012572EB913B71B8A2E9AA4A6AF5F935536F53BE627C47220FCB1908287C1557307 -A8B3FF7580972F32C67177241FA18D3392A7B473812FDCBC1F28DE212C137F1215F518EF89B8A013F17545374AB3A43458B80A2E7CFBC58B9DD52C20756F1114 -DEFEB607E3FA43CDE199CDB43F0D3B4E648566DA317D7BFA41FF7DF169D96F111633EC878D98231B196E2783661BEBCC2C8390D45DDA812137CCBFF8568EFE28 -501E09E2B57048327A3C73EEAE3B17797488A5D64132BDBD63EC47EDEE6D2101797AB6FFD0020AB806BEE6E7731B1F21870A337169FE303EADF196AC3DF19A05 -07262D0B930C2254CEC0BC482B715D0954C445113E2D6F6F27D285905ED71908532A3E2EB4BA83F8F99E5DF49CFB4261BF24C809495A6A1C6070072EEE201C28 -E2A767084ACD4E3EA646771FBAC0919BD9F79BB7CF7D03B6298C68305561D626B1C5B54443301C37CD0CEBFBDD7E4CA2218CCA9BBFB8177AE45E87E062FD5514 -C2B0F93A5059FDD1121514F86048E1E7D7CBDEE91D0519E1D4185707C3123C0C6DA0FA8D2C464FC8138AE3553744871798D671074B6A52B9D5650F59B0C8362E -48BEDDC1B6CDFFC3E509A66F454277754628FED8576673ED5B2ABB5315AC4305CABC6CFC0C87A8D4D4B655AAD371C5CC2CD3834B05F6A03E986D7723D7CC1715 -F2FD7AE296297C11D7CD38FEF78241EF68540054ED7E0EC3A72702B9B45A530C97A895AB3D0ED2876A70CF14925B0FBDFE0CF0C628FE5921BA2B01090464B114 -413ABA0D31502250BF7E65B59C6876E5B65453347493719C88ED56A1D93C690A6A182A011939FEB3C4B9D5F2456C59CE8D39C33ABE837362428A904E88C2D90B -13D383504D5D2EBA6A47990B85DE9618EB5266A51F136DD5B105A926FE90812CAB00A8CE747B43B21858A555210B28DC3A6B4D767BB8D21665D7AFD4D260B701 -80890EAC24DC8D8533BEF1BAE0CC8D9ABD66E954C9B486C3AA428232A87DA20BFCB87E4E9E206AB674D4F4AEAEFC1733C2E53973BBA73F7CC5CDC0BCF18B260A -F7D6C56C021211DBECEFA0F824DF8BA703F0D1E34F3FA9E4687A51BDCE40F61563306D2AA2F9861A935631CF5309D53F24BFE23E3DB6628E8BC9CB50930EEB1D -0EFDA4E32D43A31307D623490BD3C06D20A077421159F99D07D71C3BC1644D2660CF8947DEEE0B8ED3A6352800B550F64983BA5B429FFBDED183A85BBF4B3107 -614949BE13C4C1E69F5BBBB2A1C6D95159ED79DEE798919475405B1F4069AA0AB29E6F65CF8D293EAFB0E2C98902D7F12DD2511C2F973A9B14D271CC40607D01 -CA90066A3356320FE7BF64724DF72E8B5D2F9030856D87F11E67D1CC50D7BB044E4F5A4AC9AD9C4067A59AD2F5707A4C8D112AE0270C4B65FBD252E55017FA24 -438EF6547B6E093BA647974AA28DBFC487167F08B247E597C02DEED1D7982C10E1DB38B0B131A36A77E314EF288ED478D8AE74FF4C31E673265595F5F8E84901 -8B8845F118B0F27CBF64B3EE34EB564450DC855EA29227C5E5B3428215B88B2437A4EE11B86EE4873F6B87B9AECF3C9628055AC19196D6F5896BCF4F190A4D1A -42007D7811C0618B1649C2CBA5AD5F9F42DCBD11B06FD8DA5A026EC5F5583D1B2E198B47CD71A99F831BB4F1B34E4DEA42A7EEA5DADD725E092C49679DE0BF1E -E4C4EC1BA9BD28E8E5F114B847C4ED139B842B532EB448F84785158D8EEB43214C9DBA0566EF739954B2FB8B57CB6A66D51B0CBAC2186956F4CC5564682D171F -C74A37739D81618941FDE4E657544DA06897E52EBEBA124FD4AE4DD9C3FA542F6D98D90B1A42A5EA70E86D9EA5A610B7D6542C8BCC2D77D53D6F6AD0C9A56E01 -91F934F19C79BC7905CB374EBB13F7F5F4C5A9440CEC201799D64F610EC4E221292CCF628DA8C0758D91CB4EFFE428B2C8A29DC111C1B2DFC0023F7CBE97D00C -E52B347E8208535C51C6B2860E27BAE82215B8A051C087912EBD8E01D0C3CD2DC5FCF2342D5984F808C8BF2BACEBE334229E78D8372B4DBED1C7E173E117070E -97C10E09A2B7A6A038725830BCAA09BEBD959E7FC94C7B396CB5D44A4745FD21B9D01CB3842386FA096BBB56B788B9E7D5D2E13D0133AB8E2A5EB016CC9DB509 -39C9AD25C65182853C6389587254BE644AA9786EFA6134CE5031285D13B57F23872D4EAC9E7E4B71BE33C4143CAD97058C1642E920B6EA8B08371779EFE8142B -3A65F7A9CE6068889E75554AFF360140B63C3221D0C289FBDCE45AEDA65B1A0F6B8D3E42C89D00919BD19D7320E25BA1E111C287F0A6D6690063D1773F3DAD1B -8B62D9586F415B028A673C6633E9A822266F4A479A193E93161B8EDB0EC79A1412D6DEF57492A762BC69E89B09D3F4CA2293278E5711ECD17446BA3C8BE53218 -377C9DB4AC2A8196DE1047EF6C6D7E7AA251E1E9BA82B26D0229E64ADAAB812D438709BB37AE0F6E157C9CBA7BAA728C3CA208E27AFB8BD063F40CE6F16CAA19 -79CCA9BDB39EC77357B95E1E22B6DF58A9B8D507EAA0D0B74DC54CC90A88BD1AE91A0BDF17795ABA0CDBD2E31D2DD35F1489D4800A39CD44937420F440914320 -18B5F25509B8E278C2D36B4A92346A33AF10322891CCE5753CC014CE38A7BA0AA5B0A90172CE29299F22FFEB9AC1854D33DDF4568B57D2C9E2003C48CD4B3407 -E970E882935A51456223BBE5BEADD9DD5D46DB4D87D3069307A1CEE72319C322856AB3C24E81AEF097611B7D2B20AB6E54F0BB85BC2CC6A6E32020E113FC2629 -10CA410B69B8D81528EF1C842FF24FED41DE5759B8A57BE952715A629F0C61175EFFA37E9759B1945F0E9A0C9CC996D37A51CBD513436924BFB8BF39947DF204 -E781A3F80A9E9BDE22B4F1C49D601F1F8A7265FED88844112B64E1D98C844C11A22C863941DFB130D830D5FD33423C68210CFD7B43707524767624BE6256AC0B -8346C782F41B726A706A39757EEC9AE20EC8E75EF4B194DD4C6BA4BA6466C82E0098AB3A78CB8DE18D73DF548A730E99805F531C131F2EE6A1016CFA8FA8F21F -F2EFA0CE018EB4C9661F4DDB7C3040E78666AEC893B0C7EB5169F54AD7A4831340BCC82B080459744D2498285CFD997C1151BE9D70CF6E780413B6F81C79A108 -CD068610AC3EE7A2CE2467E60C548CD02A238F235A627AC849A8CBDE45034F169318564449E3A07C8DE87E259280092C7D50FBAE30281C3D7B0F5EF575E72F00 -CC35842414BE494D6CE6C319C558A825425F9E49E8D4E3A87787FDE85680010D895BA5B2A5298B282E529691E0E63E253CFAB3FA7892664CBCC0C4077307981F -35DF2FD9E8B140A3741ECD9AD8E0096A167BCC9857D60533237E7C28696959258F13FACF4C96F6F97B8E3CC5DB3BA7A2843E93EDB123137901393C7A1FE80D24 -10E8846D43EAA6DF1185635A9638AFDF2B81F78D8519445F8D8D7691B295481F90B181D7145FD4558000311F0EF0952BA3E7F895580EC9FC1C2D6EB36BD63608 -094C58A37732C6FCE1E5CEFF4E377D63A04A71554EE89DA0C9C06425E9F38322122D1F2A16A2DA1D12EF6962AF911D5E5192607E9E5EC2772AE0F61F32961922 -7D330DFE84F6AB31220D57FD7556D9D183C7ED70F3AE1E111332FCC03845E9072618E4A5F6CED4C302A53D3A6A6EAFA48A48E9D6E0DF56D033CE63A32CE95109 -42BC2B994AFAEDDC55F8DBC03FF829C88E127CC8E700A7368331D68768C1120BE0E9304C4F5D6A931EC709BA3703ACD26224E4FAB9C3D99C47D825B6CF511D0F -5582BFF10F504D083B355A71C46EBB2B476465BFB1410424F7B7101E7D413E1EDBEC024E54517D6405768BF99531C07321003B3F3825D6D0C3194DB860685728 -17DCBAF99280159EEF5E63487BA969E13074F5FC70E20627793F3E24E149070E13210B3F42AFB46F3D111944AAAB23F418FECDE65F25084829F62A17D036FD28 -F1E085091343D87282FCC41BAF8129A54BB85B05BEADB60A2AD95C12FDA38509D4AD60072D55C84760BEE5328FB7746C8E1AAA959FFB62D843F985DAD7F5E226 -13893CAE9BEFC19B425D614CBC27ECA86DD2CC2DC5ECA4D93C6E5D784BB1EC109C2462ECF5E9DA9DFDAEDEDCE22E1E59154CA284AC0931C82B8A4258E2B7F524 -C45DF0EBF569C88090BE6E0C778DA955DC6BECAB7DE4C9F15B4693C355C0F217950924D36D8DFB8DA48F56A1C42DE52FFC726C213A47C0CB5D6646A3C9762817 -35B78970834F84AD96B07928061CDF48DBA911BC902F31FF88D24D4E5539B7093FB4FDF6B3AC90CA0558DE66D37554C404B818FBC084866B503140EC80150D1B -57082B7E4583ED6957DA765327AF136461952EB425D4D4DFC4620A9919E73D03C8A6A4A68400B2E2894183B8935A23825E1FD37C35C9C7F8DAC9B6085374902D -A33944BB9F215E38153E584F7FAFCFAE350A3FF3EF406F2C98F00A903EB1AE161849452F2E54B4EBBA0398EA87867900485BD152AEAD014C95BA233F2D4C4E2D -89C96EE2E8C9F8EB2B297181EE93C5894DC1FE9153C4FEDDA2875AAEFB8E6B037573749BFE31FC28477D6E00081A941BAB5B0949F530C280C271C09049AA040D -7DBA4D1C6C08E72A09D87D0BC7C78EA3578158161CD5BCF019493EA6A2F1E02E49D4E7EC95EEDF881B490057658B39A9555A12DC721134332C3F05D3399B080E -C08CEE5AAFCFC25EFE5C54E16B00BD8150FEF75CC5224C754D3D05D6A94C89125869B41A100979C385165E60C28E83C605B92B1BC2D2F3EB3C685B7B4871A50B -B5EB3ED878534D1DEF07938C7CFE83AE4CBFF8D0640CF9BEA70B3C7D20B5CF05E4ADC5988FD7DAD79E0C7A5B0AD6262432470EC2769E5BA5B90DC006C38C3020 -E14E961C8C6C3FBA7BA13EDE4E98FC47419070AA1886B40FA55C0E9283FB8B0C3D95C8E76DFE62C4217DEE03F1E4ADD0AB6222F74858775ED15C161069FC5623 -A5E43CB2C1C45FA12C718A6C34043C6BFFDBC512F82F35FC05FA798DF9719312610D0D555585F77910D6110FA44E2C0B66ED1582A68DDB3FFB8188A3B8FFF318 -81ED1D5EFEA89B0D90196F28AD5292E95F21022D7A58B6EEC65E0BBCEA41A6071DFEFE67AEDDCE7D293C4733682B46AF2B1ECF0FF3E680F1A4CFA5F85FC41C24 -853AFCEA1FCA90AE24F88104D899DD4A123E1FEFA576C179932475CF485A81069379CED8492BA15FF3A5A5E15AFA72296DCD6A9260B6E4A5AF636F29F5C42D09 -F67C5C840C90CE0692D91979CE491357214A658FD0C55730785BAAAF82A0B203BFE8168215EB4882B1FE70ECDE52DB5B9A480858E0DB3701AD14B5BFB9A36F1D -4E9F9DE913B8523CBFC2774D9249360413007148EE3137FF80DD7D1B94A0350141DED09908C2500F2D2C2E1BBFA8D5552D0173E5F7E0184E17E0CD028E11901D -7771F6F97426BBB7E6B2A32ED2ED73E117D6FEE6E40DCFA4B965C852C8A94B0F9E581CAF33CD0AC3A5C9C01299A4C4219E717C6BCDC5215A1F2D3EB13AEAA20C -03D073A1FABB2740733FDD0C34AC141C9EFC235B6251DB5C4B1E8494E0B0452820F93E5B53EC820697E0CBEE7F38F55D2A946BF2157157C184FB47F41BB37823 -D6A29A09AC8C4A9F2B377BD1004C3E3C3303DC162C76B1E5D1E450A45B6C7E117C5DBA37B85651960DAF8E9710586A514ABB82DE1948959977ACAA1B728AF32A -63B83D91A36014F95AE64B3374B7CEDCFEA9E353A1729EDEB7C2E01A41EDAF2BD188126A2EEFEB03AE7B02993E699DCCADDB0F1478D9AF763915DB56A2FD7117 -84DEF9867D7F960EC1F5829488A34B1F0BAAE8B5BB3AC8BA77C704334DC61A18579474A9A5A8F0FD5F858F2DAE69D645C2F99396C94CDFCA37A8D5768190A611 -2258047AEECB348863C59FAD151E2086A95B5B8A0E1A1172FA628AD51D2C7C2D169F6EFBA1962F45FE443A3D334FB71C376A7E94A127BBD152C38F55E395EC0F -61F3A9B81FF9DF031AED55FC6624566BC557480B7CC3F187D838E8108AB7D001F133C2A975B46974BFB45E3437F418338CB6A184BE1CAD07CCA1483C56088218 -6353508836EF12295509230D7383940F3057DA29DDA3CF98299B779151E33323BD7F707AB547F15B05E820E1BFF4F92347CDA75EBCDA458E3080D342EB399F08 -F184F55F234103247792BDED1778750D0964C8B589F21951E7F20B515E72441A3B59B33D9E193F1DAC5E7D03CDF31002790AC9D3148DBD8809497EFE26DB4023 -293ADDE37046B96F3CF9AEE1CBFB097BCDA62B18AD051C62E29D261C8571DF29B28D6B1DD0C018643F013E55E21C4C381BDBD98B8287EDAC3C675F2BDFDFE309 -F709E57577275F227E3483E21304B2DB89FF5E55F42028E253FB18733D145B06D1EFF0F3D65ECD590B719E1BAFAD5F0C3466C94BAC9BD0C2446D6A1D8C097D05 -0C216C9E3C30F6744DAC371FDFE5ECAF9AA7663F26E056FD607B432CEFF9CA0B89F3C88DA65DD055018971DD441F81C797809EC59799A2A55E51AC869E30B92D -C6798ABD393AF920D450FF6660D4BDE30701F7EFDF487D3932862EF26C4C3503ADDEDFC633A03FA23F90F1D6473F03A7E2FBFEF99A9DC19467EC9638B7E4D511 -742983296C4F3B575D5AADF05502B6B2FB3913E4E87CAFEB40279DE4C56B5227F38EB46590DA59C867456472580D65112F24BE120893EF721D758C68D696820D -9C375B3C53CECF9450A7674864D70B0EC53A7B6DC2412078345ED160A4C297260144EC5F4F56C1672DE10C1BAE268A7140A5BEEB1D1107B2325D5BF11FFE340B -3C33EC0E954A711FD73F0D50B13C54585768431DBED8B2CC703EF8991EE7EF27453E4303E60F024E0CE2AF54776D5F4FD6417AE17786EF93CB2E584AC9AF9E25 -C455E9007CBB1DB028CE9456EF96459EC69EC2BA3B45179C20311BC0A792CA103C1E74304CD666D248BF9165B4DD6070B7A180286C5416700B284DC385E7EE17 -D8F3B11DF911E937416719812C89D6A474BFB7E3F7067984C39688223D317616E189BF5C706DB3ED6FA86E01ABEA604F76E0B74E7C734CB3457CDD172F2CCD0D -EB44259E2926B3292CFBADBC6DF706152E7173843A53F18662BA9FC6140C40033106BA53E00CCB54CD984D1DAD9AF201FB3FD10345C20E5FEA0F4E66AC8B340A -AC310AE0BD1E310A7C459B16C84D5DFB6BF62362843F16315B345FB6B9DA6311D3B2698293406D4C22BE1CA4460B699E23170CC221434F48A08E467ED17C2F02 -C74A0CF511AC9A4885B4F629114C622652B168A94B5044F037D963C1AAD97E1FDDA834BD06A37F0143E1AD70E233055620635F80C124029E04E4BEAE1D7A3809 -C1CBA83EEE62DB88B2E72C36320979BE9C29ECDEF76D2592B5029206E9F999137F1FEA4C732DD12D7E30AC06656A57F847D617E29BB84E9BAAEC8CB8DEE87323 -814BC84E05274D2E05AB0040598339382B622F565448785A2E1A6F26D5056B169F165745B9B6E74749796DB3E03DEB54BD9A281E127CC7444ED7ED6CBEE05F0B -61661B1D8FD1BC69847F000D2B9E15B146991578E3620CBE074998DF6C495213643582B5026C271D36C5C3562CF6BF9930F1118E2D0A3DB4B8EAB03E21285D11 -DA94CC5686565A995B9EB52936C4C2BD054CECF569D39E7AA6641BCDBC7E6D2776F691B0732FF7FCE9B4FA60026F21BAB89BE348143A0EC5CCAB99D8A6C48429 -0E782278C3CBD82F03A0C36402E4D09D39D135537EFCA17CC087C4C904B85C0F785BDD188D595EF655EBBBC36CFCAC3CB85897601EDB56E795F8F629D7DACA0F -56C75AD188A68ACE618CBD83846D62317DE14042760C54A00C541EA50F0CD323D76C31F5B5A8EF38DA96D9F6E00DC2EC4B46C5FB850C041664BA0042A90E9A01 -D391A1B45C3176A3FBE1B5C119126F4A0691A83EDAD2443D4AEA01C9C06F1407C8C12D1B712FD3B6AED2EBC980F7E1B9D1F5E01178C6E39CAAC4A0E6C3151002 -E789C50F7DF536D1F548675B9251AD5CE3783705F48A069CA04C4C4B77C8010D50549267D06291C9B3FDE5CCD943244BFEB0D45A8911D44163BFCA17C0396E22 -1F8D54F68EDB095902438B8E85100AA022029EDD509185FB019A6EBBD7466C2697DB9046FD66CBDAA623EC4C261AFC54C57A80EDC25CA2077ABD4DFE40F3152B -F3AD3CE12833145BE7CBFC8F749E8C0A15652DB6E10AEE456795E8083D1EA8297333BAD57FD269402D62CD1A76719282ACD4C39E42ACA6A891700E13121D4A10 -B484F3C57C8039CC87814DFD086949A2D76E6B30D01DDBF088ABE50E870FE01C44096B340EC5141835255CE62129330A00A469CC2480C3B6C99E66F75755AB02 -FE7DA45B03F22AE13866144B3FE996D5CC58DFB63CD34BC8369D7E318D4657277E4E15AD50B0F85FDCDCF3353CF5CA3602867EF7C0EF43B80E288E9480CF830E -A840317DA9F79664B2475A2FA89F1C7F9099DB29CCB9B7291BE2193D9772BB2B52111EC891EB13FDF6CB831E320C94B1E39A60F5B82CC781A1B17F0EE32A950E -8E4E29A63B984226F143B192885A1BB62C7292C625CCB5CF0003EB8C5E9E1F1F1969F09F8322D1055C6FFFAD42BE90FB1289F0775A0A90017918D1AD07BC180F -5AFC37B6C562E9B9B3522662AEBFD67A96724B2114347AA47915A53FA2523029AAF810DCA664FE87DAC0310703CBC424D90642C7E8F78E5BD28B01C3EFBD8917 -E31C8F8E6E3ACA32803379AE3BB842FB7E1E3B3B02DB6A6888D1FA64D92D120B1754BCDA7B17276DA8AF88150A5D32975053BDD7A3CE163C4D9F4C807E76D60F -3ABFCF8855BE43C3DB3F605EBF753BCEDB7F234FE92EAE7E8FDF8AA02099240187BED489AF8218A630A5D9AE46B50E8265C39CEBE416862A37DE83CA4D59950E -211A020EF1AF5B0D0B6BB864078B84DB42A97BE01D7D98612212EB566557C516E3B417892E5DE94499D8E76F25A686E3B8E691B6795B777BA07E5060AB4BDC10 -9CE7B7C5CB094EAB491D9528072E4E05261623F8622DA7637796D955D70A1424AD1BAAC431B58B8E43665FD321B363EA51426530AEE604337819B327B1408B14 -3FA9ADADA2C6E0293087FD168FF0C4B538DFD528E63F7F1849DAFD5EE0280E0C639BAF33233B8DE5B0C68BFEE05810A4F79D7863DC7F8BC109E026A5D9752822 -AA9E393465F6A44DC30BE9F9C3CE28E8864369389247ABFE6D09845AFAF6FD11A5879174BED6EE779B30C914001692E18DAB4D3CF735D7A3B4FC355852F60F28 -95F93999DA6B8EF9E0262321E507ACC2D89283E63A64BE68C36D39F1BC36991B93C504FCE78145314BFA7187BF01D87D28B070E638EB21C8809054379082BD02 -BC2494918C10AF301B9A5CBE7FC3145AC1EFBAE983908F0DCD743EF15D55BC15C2B641BFC02E807F75DD4E82DE4D4E583635005E2CA036AD6B27BC9F7993C327 -6A9982C59E0FBA2D32173CCD7B82D60788C1127BD65801A99F2B8F1F3CBC3F0BE8AC237E0BAB4EF029CA87B9FB404864E05689C2A2AB147BF485182191626826 -BED334F182ECC8EE3D5D37982793C23F7C20E0ABF6FAEF652D2A2F771469632295492DB0EFE16EAA2803CDFF56138D3D588FE2F26E71296BCC44825AEDBF682B -DF0E03C80AD3456DC8394F08BEB688C9DB7882A076A4DAD1567AFC2E6A2C190708D50FC89DEFD349E117CF4828FE09516583E5BAAFA39C92BADC6E6E43165F0E -DFE7F01906730850984D0EE85C6CC9256CEC71D7AD1F6A11AE3853C797BBC12D9E668702E85F77C86EB1C4B5501FC37E95963FFB9BA9D089703BD024E158E700 -65A25F86C94031121CA3BA30192C811A4BC855E31B06377F5EC62E3D19B99808B2EC47652DB8768BB210B9FE90368F4B9BC69FEAA154ACA619D1C8549C5EC317 -167A96AC147FA4D05C1728C84DA199EFE27A8E7933CB88E47BCE5A0E250FA922DB1FBDFCF4CC0DE9B54C2C0811AAAC65D70E3C553FCD9044B53241B19C909308 -ACDDDC22B6FEECC25DCF1F967ECCB722AF8E656CB3AC0D23E80CF4458E1EA529C84180439039D8D8583848067DD5C8F777BB7DFE7A1A961F7AEB889FE308FF27 -3410F987B24A281BA0F76E606A099D75CA2519BDC35EE266140BF39DD60AE803E809D842E629EAC27837A8DD169B7E010CB1FA87D0E31CA8C05D177531678920 -B049276BFAB615C942755B812D92005A927D64A56E2AB1109764C1334D3F8F13D6D90E3F7EC7C4ED065C6A6B9FDFEA8119A3BB0D80DEDE69F6173E48E32ABA17 -EF034DA86054D1231A14D8203EA7CD3BD8F84E8F0F3C8290EAB8374F53863E1092988DB77FD0105ABDF3C9C87A856DA862A469AD8C74654061B9C29A36B46F2E -1ECBD19AE81926D0D0A2C9249DC057089CE236C67500B253AB262E76696B2C12333A5D45AB026DC24BA6689EFAADE0BB0D9275A0453CBF6CDC81D4385C383322 -0813DCE3DBED44EAE738479CB5CBBF1FE80C94D915FB458A1D4D72407E5C030ABCC427F2AE05897274FCD96CA5521534835A37FE5245744F3E3FD97BE2E17513 -D21EB491C38BC6C2239D4FCF52129F0E686847A9FC866117CCAE6AA4072B8A22CA4CD0D96E977CC83062256E68D1733AA76F5B6B58AD27F2A84FEEF119C16B1B -6FDCB168C292A2A7FA94D384C819E0D49B34A9BCD13DF5A8C048CAA185992B2F5CAD2C633A6FE9A3B297911A11692097D87499D6F64D0199846E85E0EA2F742F -68903C2A01520A58492CF445640AFD68E3364C384E2C79475D5E44D4F56748250ABA6C443BA6895E6863050F9FE7A0B321515F6CDB92A341DCF0164ABC1EFB28 -89CD63D84D0EC61E6732AD36B742565F00EE783251829F483701B412AA450C15EB72B1D4E823AF9DEB676A201F6AFCF30661118959DAB3388EFA6761181DB800 -FD7715C001CB1B2255D8AAEFB36B7DC222D5661FBF06D81711F80F4A0D454B1699F784204421EDE1BBDBDC1DC3E112B069C826B2D67E8BED0DA9E48F5B1D571C -F32D153FFACB48508016E88F1B6DC583F0A1A4D9E3CB68D87C838BEA745DE10773EAD6E6BC96899D5EA47E502EC1A6D9064490A8702BCF907E17AF9C74E87D0C -F8C3BC474F3309908FDEE413728104B32EA64FFBFBD1206B58CD5C4E6979B613E3D3C07E054C8E0B90D66F8B3F7C6AF65F3491D78461FE4368888CAA5E29AF29 -B76EA827BE05DE13B1780D717B42BD195849EF1B9DF7FDC1EE0FFEE2EEEDD61A876CD802E89E4B8D5EDAFFC338DB2EF226C23460941B8370266EC2F69A1E0F24 -FBB9A51B047817EF7421F355D56A0EBEB1729EF98BBBA93FCB303AE8390C33298D1B24E6F943C9CE64170A612D56AC054DF883CEC7A6846E4700E4B3F8DE8309 -DDFB6966192AAD2410CF1AD1818A497D50598C19BA104BC4A828F51B809BE82F4433517820B76A21EA0D68F59B0531F5CF5680CCC42F0AF0342B605AFBE9E600 -B39C9D4BA711D5BBB1F68A215A7C96422A7E772DF980C6181CA2B4B44A3E990EA30220911623A3BCC7F4E0F696BDF3E336E21C7DA292DAFCF19A2F2585C1291C -DE4A5BC27AF74F09ADAEB07EC8A05745B295C314FADA4C569910BC4F565F3A249D645C8989C44D99D2B50DC72BDA478EDB005C127AE54B895CE2C60D6AE44D19 -A8898CC914EB08EF9208C58DF7C448C76276FAC5735BE80C8A8B44FF5F71CA075AABB3B276AB260068B2B02D477932EC159F7A0B738332397DDAD886C6480A14 -6702D863CB378416D33223AEDA63AB89587EB6751DF5232E165E923D24769805941EABD43A04FF908577B2B60DDDB1FA8C0515348A4E92E8F61B045F966A1D06 -C39932192A0FB57718397969614ED27A504DAFFE28CB0EDC229FE64A3A9AD41D7AF8E1AB7374F28556CCD53D0D9B905FF9DA0B0074DF2262DECAF07162AA2027 -172274D323E3C7CF8B09FEA54E4BF6B824FB3FEB103C35C2C8424069AB2B8C12CA0CD7EC08A5D2D18807A209AA50D9F4CF2CBD81ED51C34352C3A4C99061690B -6D3A8FBC161993CC8E33C48B7AE799B616A3A636BFE8CC2FF81EAD6A20A43806C3E3F015F61FD7D73AD55893E1747D0DB3D0790819C0360C5DC89EA1C953B41E -64C1968D650A5686E5F6D0CC59177FD0B1E49FAC5E4251836CC432427596EC287921EBAE6D0F83CB29B5653ED252551C8E603A32B43F6CDB89CFED6273C10305 -E58B5708B98837D659106D8BEDBB1E9E3D9E41FC89DFD9C3364C7E685C126C15E676272838C5EB168938CB0642F2F9B35731F0FC350801C96B277F183102570E -DB9B20367194BEBF45EB534F597CF540F1286D7BCDDB57DE3892DF067A6AB01B69D8D4CB6F8345B0CD3AF56322559AD8160A1980DEB27B6BA46AFA661927961D -B073185160153F2A29791110AB8BE56D1D8B516C154FE2512A3093FBA7BDD3184C5098F70183E310A330E6D98BC797A7FDABD3E28E582B0637768D5098949C2C -018B0452B010B4035EC95E287CD61F911ED12D621A865A67992F147A448CE9187FDF622C4243D9DC3E47C398893AFDE439CF76120BB8B2467B485E580C7F7417 -B942CEEB29AE32CEEA4F56AB2A393E21C9BAFAD1B72269665A3ED81AC55C181F12A76D13D846BF6ECC4E34EBF0396CC29BF0E5BC21150FA29EC96A19DDF78905 -6CA73F9BB955DB1D9868D63A4B8924FCFFC63F5503B40A4D5B2A4C5D713C3323A3E127A854D5ED9E7897DB5C4BEFF188164D29BE7C05CFA92287148433F2CA23 -96B72FEF3E0996DC0232E12069F9CC9F1197759E9C83DD65DDE377C84DB44A050E925F149130FB23C09DD30E43291C092F1FAC7F434F5249D4C8616FF12FA425 -EC19F93BA7B52D416B4FCC180ACA04F92B417DECB85A75314EC6F7D6E7F90925F12A34B85A198CADDBDC07992B0D9F2806CB01F1A0D1F79B93FF57A4D7300E2D -896FB77E012770E12C7F0D24ECA34FE511068FB1408A53D3CB1EBE5653A1F91EBE8A696B65073B46025738F089F43B469586D413B712CB87AEBA3BA40F2BEE1E -D7EF0A1D7C0A8ED00F0B55B3B5E45F870E90BF53C681D088FC517B075517C00B00962E00EA90CDA7BF2F0BAC2E72DA1E2C2AAD1D44662E5FE8729002E9A10F0E -45D84CE86003ABEDE4C508CF29D0D83EAF77CD48EB28D1737A5D0174A10F8023F1D489CC18059D3F7D9912CD4C4DE42ADA056878B13B354FEF98DAEF46967E01 -390C4094F56EA8D040F4BD79CD87D60915840C810D6D3DF69C500B391E0C2703DB212E9E33D0F32BD9093171D03C3B84CB4C5A2D78B9099D77ACD0C92E5DF405 -A82D8B8435B44F3AA5D7E8B634CD46C2C9A8999B1E39B82D933C4C3E3C59C42B58CA560DB0B72B98C33E54828DA1AEE4EFDF0EC5724F1C5A15CF0B2E7DACE82D -6DBCC9F1A269FCED320BE2D7A419D042A3699C0FE4952E79EB455848B2552C04D0A449ADB34C5CD58C8EF75BD0D203C90BB3F8AA0338E9CC4192FE7F26433713 -B4E086C36769B91AED38F5725A8B990A7BF7E4668F53672E68DD55702EC5680DEE8AEFF09F7DBEFF796FCE4332CD216813B6FE05CC646C17EE3926EC96F77724 -9B86FC1819613E45BEABCD3D477095008A417BCF8CA6F46ADE1854D7B0BEEE063B221D5A0D81BCAE5117CD757EFFD9CC91DF8C108A917D8FC750EBB959881600 -324AEF72CC570545E0A6BBBBED787A0B34EB23ED6E0A1F41FD11D3AD63669411698689C1FABE020180117B7A15A67253734A787817ED418295ECACEF146E591E -86C3959A012C877E9E52E997D8620E820DD40E050E3B0827737C77FA82188C282D675EB78B419EFB8A8D97ABF61E12D77BAD9F9DFEA5A00FA6B335747A75D404 -6D2BDF63EFB86C64631C2743DCCD0562C5C7DD87037FDBCE4001A5B22190CA07BB0EAC55EB1E4A089B125CDED29006B8F2693C5B95F05CE04A4D99015E0C4A20 -84BD383F216EA5630B3A12EB59A850873D1FBA9D2A213A252A064FF30144012FC8E2C7AED7E662C96BBCE3CAD0CA5916605D5207307C53412BB38FC45BBC2912 -E2C8F948E2820E1E10F0FD24EFCE6D7B40B0BA2DACA1357525A3B023B33673116B23DB6B96B9D89B6F99AD435B4A211013D814CA242EF096F61DC0CAB541C104 -5ABA161353FEDC34E2FE5BB9469F5257B26114E87F9400C2A2EBA8BD320F741C2D7031F7057275A72705295FF5826811F547E37C0120C436A47147A586BB8421 -AEBA43049E8EE408738B8C29EE709A77B1D27B71370D3ADA4A3C601ECE062A0680E63C5A32C07251A2A90D598FD7B888EBF4CE7E6E8FAD837F54AB0AF2F57106 -BE9F18A486DF1461E00F7E51E410CB0655C64C4A4BA31E6C48F3F26344F14D1E0D46737A08AE4B50F9EF226D41B34940FBF5360F32450E827067D53888AAEA27 -88B5054CEB1FFCEEAB1C9E32C998F146AB76C74B87CEB630E2D113BEAFD1A318EC40CC216DB2B3D657CD3004A2E956A6A91F754B5F6C605B5FF785711ADA7C03 -9ACD6752B2A2FCCBF4771F9428AC36CE34A0519E7948686EF03B79AF6DD5CB2D1719DC31B34DFBEFC1D4CA08ECD528A00652BCD046F765AC22B9AFB91127C604 -78E30AD99D80D1816FB4592A99DEECD0065007A4D4B02D8BDD95B0A97C4DA40CADFBB87279A4B71168FC07593AC717CCB2AF0B59EF4773D6D687C988599B9720 -FB0B5F6B0778096E4152C913BFAE3B41AC7B46FAA092C5833C6407F612530C2F08C5C0017C90C1B8D26431A77B3DF129A333EF66E7322D79AEA081862A175A03 -5D8045D5109F373869BA8CD75072A1336CFC9701BCB2F60FF0DFA10AE051F822E2019A99E3028948EA03791B53E43DD81D19FA058AEAA0E1F9CAC74426AA0620 -15C8D056D7804C942C10D6CE3A7E6CAACD3A3AAF303A1D5CDA44F334A426E61FC387333ECF6BA7BDA38C5F4BE9F5E53D74357E3514A009310FD494EC45C1FD01 -730DDE089C933BE636C8A994A94DD5047538C3838C2C58602D705893B26F3D13F7538BA6CB62C909275C05C6AF1467726A673422EFF58FD115D033CCBCF39C00 -D030C9F8376A7F9530078C27828873F076AC35A908D2EEB0F1370522916FA52595795DC7D1D203831C0939A4ECB2E77AF24DA46A67B537605B13F5AAA91DD30C -2E84ED3E941525D4EB64B35BEB7F8F636798EA62DD9F8E0263A1055988F9B31B0EFE282958AC1BA2262436499D49D097FE97E1DC9A7FADBCE7992E79C817521D -D23C7095BED103B1FA08165F921DC8E140275D500991114967D1CD204FCF520C2E81D5D2891158AF5C9D09B7198219B8DFD10EFB8A53D72800D6AB3439E8B405 -AF21DBEC83B571FA884225CD61B8BB26C7929D22C5E7742116BABCA859E45216007C92FBB885648306BFB89933F33D5FA33EEAFD7499DAAE41ACEF52D9841410 -DEDF65464E7CA9228B0662CBCC96483F416101486B3805ECF6D6541511BD092019F7C2AD49AA53E088F273CAF3AC23A4EFDA19E56D228BD8597790B02AA6510B -A6CF8A46D0FE4E2C5314D0C61DCD4CA7DAC3E1EA5E7B944C4C659F94C673C213F694822C04BD2C0A5C1CB9B46007E14982C83E674E9ABE41629345550386431A -42125164796A15343A34C0E97182FA1F5406981DEE616795901950246D8D9B1971C749B66A9060944D29F2F210EFF5A04C5CD1750002DCA4AF7657956A3AB118 -5E2555EBAEB4DF9FF8C9370D485C0A92CAFE5CD4DB9B8016A191DF21B1D5182ED88E9EE5288B5E17524CF7A031D9152EE82A7AB3C49B09DF78ADCB386291B922 -CA603186DD6670DC5ABC2F4784DBB2CFD622C5B9140C177A58EAAE220C25A52DB15A63534A8C6C929FE86AEF478F7C95635DBD21B383DB49F918CC88EAF69727 -FDA9E21675043E6B6563E01F537E9A8F646F7C8E3653CC81B7B825BC384E8B293509BAC4D3A930601F1E102860F11CFEB7EF28CD6642B532D8853B3C0B835025 -F55C586C0E93CBE7262CA0251A8E2B4600FE2C9313FC766BD9C24370424448006BE87B2F63D243DCBD0B3285B64A7DA01FAB883F483CE415FDED549086A2E015 -7E2A5D6B44D5638184689AF6293D462373780C452FF53F89931D28B486656D22E89388C13BF3A3CCEF588E09B0BCB64AC4FFB30D3B65BF9846DAE44F394C560B -6B125CA9876A334AD19E6E777ADA003D48DBF5DAB0A050C8E21A6C1FCFAC5D0759B5132ACFCB62CD74E534A545D4C36E829E7BC3BC2191C7E3A6393EF6723B1F -A92B02203C70996A626CD1EA9A976C6C1F0BDC1F8F819B1346AA13DEAE044F1BE70DB49476BD8A320FBB385782C4D9C7C0870CF6CFF0E6905A7ACFB6F1F63F12 -190C0FC07D7E63A881AF7400181004FAA592ECA29D5256E9C49F934F0795E01B53F28F619DF6AC439426DE03B212E739BDE5CADD24340B13E83D051BF9B9E923 -D3D0B9E3A0F3CAE8C2FD3D3C55CD95190AAA5A1E4C8B988BE4B0767F2B30EF1858C524F730F446AD86C5C896C6191B909F82200F7FA7A7ED58E606AE2FDBC814 -2B01E7A73B997A6406AA326DE5F742C3196CBF5E26C51480380275725BCB221E8388B8E3BCF02380CD12D4E792D7DB66A615BA328352D9FFB29BBE1C31E07B1F -E025092EC83E7193B1A8E187A21FAE9B014ED011A35651AA3B9D96CD680DFF14727A5877C795DE8EC19B4453ED52029C95ED0FBB7A43699ED64A16765882AE01 -4D28DE11748BF439ABE4A998C5EB3EAAD4790C2576482F67C03495C2ECB6AF2CEC0FEFE0D0776C67256549FE47508DC0F0A31E3835E501997DC53D5D5AC42430 -7B707C05BF0DF9720348E20C731E0281B171DE159B09DA6CB0775412EC95D41BB58BC66A5F074DD7F2EEA416BDF8DEA364ED4C6620D41764EA8E6F9DD388DB2B -DDBFD9710F533A7C22EA3DF4CDEEB20C94134AB75ABEF7B6513561BCD16629040338DE3E3295598C47EFB2EA72015855690DAC8B3E18CBA6E1B372ECFEC94327 -047C449F4A08886B594F817C9FD2B086F55E07C228487ACA3CF1C9655783640F4B2A37C59C1C9FB1408A7B0F4137556F74A7CD2828C7BB43DE2521FA2CD78E18 -7CA7EA42C8327F7453FEC2E1B1DB2EFB6199A79D1976EB6E19B675A32ABB1D12351EF250C527F8BA1F8F4980765FD1951203770D0C7371B794095C88B28B8E14 -AA76DBDBF3116AB9218835AAD3748F4CA0D41BC2AC805DAAC59E6EFBB1A5B62CCE7035C4A0C96A4C0C54B89B09718C4BD08ED7A4818E651D79A5EDC19C681A0D -AEE217DC98815BD4A2F5591528FE3CE6404A44DA7FD4FBD82A07665011FF092A282AEF86E59C715FDAB77D93718E5323FF036EE6D15F96582C50B316DAF23125 -21D8153464EB8E09D51BB903873679CB1AC6799AD89A16539E3BA2DB4C264E304F8B0EBA6B804D91D47D125862F5F0347A0C49F0463AD99693190ECA815F3702 -1222DF7D484BADA3EBDCE724B963C8A5F90DDD7A176F2CF12EC8CC7669A6892CF945C5CF76CE2D547EAEBE503C491D581C9D171AAE40F325330C00353CED8601 -F3D905502D10F76AB30CD4F3586451F2558808046B79FA0ED1F376F13CFF311C4FF7039A76F9F960AF8DB34E78092490D8073F48FF13EBBFB7BE1C3E5F822430 -4C24B309C8D6792D316A0843897455073381E62B3CFC748AAF3162F47087921A633A63690443F45E8BC1A575E75A0D6971E56803C22E39B5026B63345DE9E225 -A8EF0D2D60E551D38C1BFFBDFE0D67922474969147CAE3BA8A4B094935CA9721EFC8B948CC3394E1683DA83A49FCEF49971D46FC2CDA6FCB55B2A088DA12522A -FC97504541E8FB92CADCB08F9B6B88149C923D449A1EB4F2863EB231CDDA451BCE5A6ED193EE3B0F4FF224B360C43C495650852A5402A41F6042AC56ECACD81E -558B964D271B6F97C88F98F0B2D7296B1498E446626A21ADAAAC9B4C706D0B10E179AFBC6063AB45A2030D4ED46BC84320570AB04CCA49A872E67F3436364329 -B88866A2593F4AB5E35783919CB2666E0B1C0E24CE07077D0AAAD572510DF801600670D78D488BDD4D1C8ECDA665C94CFF07D43C9E3E43573D65370AFC38D429 -C372816F9B4D5A50E0310E2DBA6B5860E02F5236122569F3D30EA652961F791EEC9BEF898B08907731E09EB5D01F3BC59B2F6F928F68AB9D8CC7DD47F037571E -46ED95070615053C59444EE1C1C61CBCC18DFE7C1D7CC25320C79D9A4E849229784050748981FC1CD852C38864A3C6550834E66762C69CA55FDB18A73B92810B -388088EA528A3DF0EA6CFC5AB6B588A442AE242CC8F5EE3D15F01E2A00D5C51A32EA87A8624AC62EACF812E6432FA407A35AE1AABE594C683FABD5C0E42E1523 -7481B0C2EB982C129F9B22F362FB77B0B2D79B29E0BE09EE15AD190D8F44AB2DA015E9758963DC4DE8E2AB3727681DC2B9CFD1AC7AD46BE4D65019B9FB538B03 -FB6DFB933A89BDCE9427C4EDB1057B7EBAC642D2620D66B564BD31440DDB69203DD7D8D17D5C26641E4D4F55C5A9FFE3219922D9E7163DAD5B3586511E836912 -47E1A30627457C24B7537756DE230B5DAA1FF60F831F39E0C614C59AF111982E129D26337ED10C14DE990F69F0A950BEEC38C023FF5B3B6E9E8152E9A23C942F -E0169B44AA22DCB5C332FFFC63DFF77D3A437D7DA44225DCAF2C69CF42DE89071A175CCBBB1A1239A1860A7DF26C9686F9ACC68F7574D10BE283A2A813A34714 -38407F05D20C2F9B0083FD2336EBF53E785AE9EC5CB2B068A3E05C0C07ECFF1E3536099CB678D2C109D4E2C777F54F238EAB643C804DDB81B83195FC9DDFB129 -DFBC6870EAF3BE8834BD3D80619AD90617B2F2F402F374AAE16CDCDD870AB41BE0D84829687B4D40B29C8A4EBCA0FF84830D704A92C7C456D45BCB5165381818 -524B505CFC2F5698F82B02338E1937BD222021DEF30301D0BE54ED9F963BD301CCEB558299AB3C7D34B057676C0DF740840B781ADE847394D7F76A25F5A9AF25 -8B7B05E8F2BBF62E43CAC5C55ED52E8CB58EF912351002256AA0C20C907D0314B3966EFDDDF97280DC7A87B55FEF5F392EA67CBAB9E1E09A673F69071BB1682F -20C7BFF1A515E2E51243468330355218D1CB89C70D7A53C58B047D2BD42829005C3D41236E31E3915175F31560A737BEE93F7492F4EF27E3AEBB6D8A7BC35114 -3566A7D1B52DA888C2493978764AFE03FB93D21C7AFDAD3208B1A37C2947372733767F3703D4D6A2D7A6CA1F4039DCF5C2A0AFD1565A62550A16461BA1CA5507 -38CD74F13A452066AE3005B9006D6C1D90C9713CFA23420DC96554821983D82A7B1045E48226E33310D5A0A130B6088ADAF0B98F6F5480D7A9D125A9C2657C2E -283190CF637378ACFB9D08FE04E09D90E03527A718A37EE4217A1572CF948F0460A339C256DB5EB4A03C98CB29314F988CDF13DF217E6CBBC1B664A803B56716 -BDB7CEA84B0B881346A8AA8570290775DB02B0602F93415AB47CCA0D3832090A31D6F06C3058C6380F8F2D994E9237ED326D8A4A7C769ABE76E79C53E45FEA2C -BD174F59216ACA95F96097221CE7A912559A292732211E24A3BB751792FFC025CB611D1680072B522BBC8E3112073D71EE79C43FB357BD692262DE8FE7440C1D -62496E5C980929D014715C9112E6BFC1702D7041F1068F0B09AF3BA3E7C0762F704D0C6EBE23A3ED19474FC1CBE495D38CF0EEB12EFA92714CD137C1D8ED7823 -CF78538BEA9CA926E56B2EFF5577D4FA5F8BCF3DD74C7D26F55F03618962AD04FD80ADBD804D1A6F7ECD4A6A6E12DD18DBAA2BFA8E4546DE2AF89B8A7B18E114 -CE3B9A6B3CD2C2E90A2E45A9C544EDE6DBB83CAD644FEAE4D2EC78F49F2307021C39E9A5A42CD5C4006C812B6A2F15EB6E52E56C05B1909AC0E36A25F8BACE2D -49E3E06F908F5A7186FF90D5B8D9CE4D93078510C2DDA8F364694D811617821CC3D84AA615C24FBA2A89AB27451330E31538755C41152C486B1E3E9A1249EB1F -5121A27A0E4CE5D05292D65ACAF4851BC7EBADCFD1DC42C51DF923E7DEC7BA2F353437D4807BAA51886E555CC822E37F947CE8EF15552F9D6FF1AE7BEC955E24 -A34CECFC4BAD9869808D7EFC86E67B31D99F71122A568065C1B3C85B283C802DF04669CA411F9AB18A4E0F63A7C9F7BD67F39F0AE58773DD0613DAFC6328A605 -B6E86FCC4355748C6F44589763C8BF0755528B471859283E1F3DCC3EC09F3900FF6CE5D79462B345896FD2130D96BC74E8376E17AD13F9DCE66853E436E66220 -5BB4CCA72C7ED78EAE5C394F0627D12307A3AC24CC7EEDFB4FDB41709329F6267567A9B09B4117C3A58CDFA1FF27543E21E8C2065F2C064E9C7A887DDAD0E624 -08194F5AF3BCD7F368C056AF8D40815FD6EAAEBBE5DE896C12B8EB2266E0A229FEC953ADF8BB66AD0CBEF711CC5C8008F6858DCD1D9296153D2A613D8119B221 -26714BD687ABE9E2884BBB7C247E4C4F0EF7B9DBEBFFACC741346FA0BD9A5405642B430868F917EFAE894E258D785A1E871C7665E5B354FF01CD53F07AC5ED18 -8EFD04D4E96554960E6852659A50CA8139553E56EB5BFC24D73E19715B3463111F953617204B02B760CCBA9A87C7EA2FA8BA01A9309DB518FE630FD7C773FE1A -1DF5E9CBE2052E3B6AFBC2D4BAB290D8D769C4D9EE664D9176CAD54A29BFD427EE8537ED108F470457F7BFB9AF3A42C111FCE4BB22C40633DBF3F229EFCA872A -79374E7E7495298C059BBA3A08111E37920DA1A3FC318E6D2CBD2E1CA6CC9E0FFB3FE8CDB5D9294834C688014A678DC2FABA5ADEBA1CB76C0EBF5DA31877AB1C -5E72FDE7A70C153D4E0C4B6B7E9AD5664C1818F5F6CF3B3F6A7C8D2A8DFE232371B746D38211D9B2FA0CB765EA2E54CDCAC6FBAAF5A19739EC444F958BD85516 -A8189DF4665456644955C4095396EFC8EF8A020F86B1A05FCBC837B8222C5303E66FFC8852E58D5CB5692C6CC7A3BC86B8980E6D3117E443E8E3172B7E0DA70D -567A325FF0055916096EBF7DF4F463FDB2562EDA4A72B3101F56DDEAABCC9805FF82809BE3272910736757D8A97E4618DF9E91A20E62D32FF7119F1BF2D7631E -ACA4F1CF03ED8D4681F0567B7BFAFD37B10BA5C2B62BD05E045EC3BC95928F1B4225C0583C4EBED8C8E3CAA1C5EE33ED311D75566D875B8C4B0E7D51B5C39B00 -6211560AC6C84487AF6CFD708C77565ECB56CE76E0D4AC06DA04D0CCF44D710C11F97ED4F299F55DE0F106FF302A203D27500D885DA61E5769AFDB546EE2FE16 -AB9D3E2E09EEDDCA519B7325607BEE76990A88D693D584C44A734684D0D737252E33C043D885983392A03DE395C0129D36ABD1DDC7BF38F83904A5A603B10D01 -54BA365F9E2E5924F6D5E74D49A66CDE563512B537271A92FDDE801BE17F1E0D28DBA53744185C70D5AC9404569D130066FCB20CFAC4527125CA4EAB8138730D -47F4FD0B51EB34C4AF2D736DCFB7FD7A9ED6B254F4A523E926C3FD812B995A0A7359F6AA107F09D16B2FD280CC9F9B64523BBCFF982498EC5A4771807E76CA1E -F8C867A109974481F1BA0737D91EF49DFDCC4F5A36F96BAC0C2659CDFC4CC80931BDE9B3610F9DFFDFB4A2307B5B11A72D463F61BF1A48C041A7D45A12FB3514 -95620A8293D2B2F5FE7E535DAE7984561902E2E86A6122A312B18DBE58771D0F4576BE6469782402C97BF03AE9393A01FA5A0AA8964F4FF8D7D6FDEED21B5622 -75171F9F004B339BC0B8BF649A10BCD248A476181A792D71DE9B3D628C7BC22E5CE687090CDE55F46F53CF1D4EB4218416052EB856E93EFEAF8F337DF407B815 -F2258C754E38ABB4DCBE909F0618033B2A34E1BA16C7AE52426CC01A58F0272C6A886937C7D9E9BD15192D5781DBC917D54ACEBF2643B68B19FB56009B0B1B0B -D2F73B42D529CCE7EE711E86271A91F9A74BBAFD82D933E51FD0F5B8D003EC1B6C1EE813BED8F45AB1AB20BA44EEDC2379FB26078B1D2C58A58D6EBE7D9EB712 -C7D61AB200B9104ACABF31B2A4D5889DB14078C7433A4283E676EFD499DFCE2BC77F13C67CC15FCC4BEFBBC99664DD8394549340EBAB66466CFD7E4F66B5B200 -8981874AA205F01A5C34DF96789E1B7BB330AE8F12005027ED13217450012B20DC551F94792AB88AB3DBC5ECB3AEFCD2934FCFC551292896551C8ED9CA15DF1B -6CE2F9316426B90D2C71AA6E2FC02D1B9FDA6CE738737B7BA719F525237F502F41A84FA144ECEFAF0882B43EA933FB7DC6876A6A56EF41993F2C53B02E78F017 -8B07B41C2AC5F2B96E00769431A9B58102150DEAD4BFBB00246EB4A7C2592C1019E21D922370543DFC0948E2EA78BDC17076C0FFBEBBF542359CC4C9CA0E6123 -409E36F9BE61F851EE9B8052874A1CCC7E074E9181126758EC60565F9E50AD297416A73BBD47128EB3C0711FD3767559BC07C71550BF482CE64BB39736A79F0C -6F0803DAFD402FB3ABE2027853A36B395E12C0E4251F5F51EB8570DC1919A026D8C85D380BF5D2BE2806390C5E0000ED8B2FA97EAFDFEED34085CF611C29162E -D86FB17415668262AEC88DFA9870B79DE7078ED39758949612163AD286B4CE0F27E07592A72BDDAB088DE0B34EE16F08023D8FBF31659BE2F30153647E7F0F24 -C7F32CBE9118CE91E65153442D62F5394C4D1B1B6443B85DD2981B8B4E68B02B0210A119FA77261D7270301D4B49E398564BCB00E12E2FB8B2F2622444FF921A -752F38507E7BD8624F26951ACD96F26649D351DAA350E853ED1A4DB0D568022EC3CC09A1E139B6A0C9AF4CB422756431CDAF5DBA2112E3754A924A1D92DB7D00 -B53F9E1114D6E4D9E529ACBFE2895D78A6AF64072E63A36A9DE351ACA53416251E6026ABC1474EA7ACD359313CFA83F97C25E69A28DD1B972B73F168B7AD1F0D -FA8C372768FF4CD5CB8242F292A68235C530EF8970F1F850C6A92D69289397055B79994A62F6CC97C86AB6928C3FEEF410E868F4CDFB973D13C518F09C118A23 -44EED62366DB8FAE06E4E5151D52A81CC054A67439F7962F48C32F6BA78BB117ADD4A6D49983904E17AA1E4AD0D7BD2CEEE486BE8CED30D85439D16309BFB60E -81D22BC80DDFF3AD0ABB088D990F81384B24067C565B033F09210939F857BC29CA068CEE260AE74032CB96BD9D928DF5CC241C93CD1C9F981EE529C08DD4E005 -E47D90F8BDD43D58B2192624117AC911838004E77769F75758AAB7D7CC6C731B89866104E990A1D2ADF5B22B193543D724D78E3D7A67C0F660CEFB7073C32E2F -B29B4C8E43E69A48DE88B92AEFAAD7F87ED1FDE8D32754AF2754BD18A9BE7B1362211B50BA6D5BCD12CD013A583A543DAA9BD3C26B5D8B3BA8B4FC5346B50902 -6DC86B4306388754069F6F94A46B9C33AE264148FEA6BB586FAD27D261AC082C8A379DFCA530BF8959734AD830DB5F75F683D5F0D0A86A08D0DD2E21753D870A -587314EC02ED2D370BD5FA640772FEF6F3E33DCDEAE7E49534137D001731D10477709B925A88DE2AEEEB213EE2D7509ADB92ADCD70A524E2BBEBF2832D0D630B -1C442F2FDF2E5A98F674383D7775E93C2F3DEF970DCC55BF1581CF4F98F80A230B641EFDE00079050642F6F32C3D24E43F8C6FF584C651E559EC21011FD04B04 -BD59B88763CE2AB8580195F60E785EE176056F25F179113B48B2F4BEC4E5420DF0B9273D81F164B9860AFC6BD76883A2BBF3DE48EE22754F613C5DCFB9E29A17 -7F83904C8D55733D06435A4F3D3C56177FC01D1299009F4B89DB4A5C36B7A827612A04CCCA5BAA6DFAA3CEE19104C4DD2303FC41664E25798E0903FB6BB4FD26 -513656787C18C3B92B6944D6821550DC21FD058898FC095B86E7F188B37E312993D06F86A37ED2CC49A68D119977BC633A298C46715CA1854D1A7AC3C0A6C80F -2E4CC8B5A5F19B0277C9CB9A85A3DAD3FFB1C14BC439039B115CE03852E74003CD60CC31FF845C4B0E28B92E386B715C7410F05428D2470BBB9B3DD2C052472A -BCE3E5609152220C80F90035A793ED26C1FCA96A009F711A0AB4D50A80AA5A251DB8795A736E64C5775892BEFBE8A0D8D378854D2B3E289160527FBFD2461110 -9B200E0BA6DF57C94FC970A4A4399756F7139D632AD564812BB961B0740DF827BBCC463DE8BB9A97EF56214D7C9ABE417D2C98B087128A1C2758B9BEAC43660F -F3CF383B3D313F5B278237DFDD4CBD81A460B5D19C9BF811889D66382D88AC09EA5B5363CDF247B1667A81B5C9FE45DBCD09C47ABE0496EE0DCB590C291BBC0D -7812C1DB5E5EDA2F3B55D6D27D7C3A5EAA98C437C1296EB4903602E174BA272AAA4512DA0A2D2F8B52754ED0AC4DEA7B72C8F710FC99A7F0DB08C8DBC116C81A -09744FEA7AE412AF23229AF66D570F3C9CEAD4E9FE2D38CAE515CC92EFE02A1A7176DD949BA1F1BD4B02B56015904AB919705FB492DD90C692CEB8E6AA8CE208 -D51C18BB48F112DE73CFF854814DB431C6C5C5578E1B4AF9467151C2E6B12F114B1AF3041383BFC19C6ABAE6318FE6DACB9465C5DF2A90B47C9BB823D6993403 -5FF3F1FE2515D12F6A178D77EFF81F304E21A4991A6676730EF73613F523560A6097174781057016DBA94926F2C947B46EF563835E58BB9B7915470C623DD013 -C7E0E78103AA6D152296EF803AABFB2D034434A34C69A64EA56728CB52DA240644C2C22ED73389B85790B0E1D1F1F600BEAC575751F4AA8D4FA568BD0D0F100D -59C2EEECE7F018014AF71D273320EA04F8A385E042302A8CE23CC30559AFD217C1A93463173B12E84B55501776B6E1036674DF2087EED3A7E095E8251DC4D82F -643CB4A6478E99DA167194863420075DDF3810ACC8302723041B18A9657C501B2413ACAF41223E03ACB6A925E8CBEDB9CC837F7F4CF55959947B42EBC7BEF31F -EBE552F0EC7D733DDE371F314D9F43E8A0755E189257B42E908CDC6FA18DE317BD4DC20616EB8CEB201E9AB721CB625B4DF86027D26F7C6CBAA12B28C6A5E704 -E01C06F8772F994634582C8A48D329DA6C4E4DE6F0D70FBF38B7BA3C28784B2005F90CD3A503074D6A72429D659832B227422031C4400BDEA015305B5DF5B32E -1D57359A3B60FC21E7E862649B2820119C150B64209F7DD6AFB8B7AA6E742B073AEBE975728A1170EA7B116F8DF095C2DFD84CE4B3BBE1A9982EE9530061E826 -BAEE237CD8A47E980439E036E5DB8A52F401A6ED15729DDFCE7A5291AB87250DD1E7CE5C0EDC3B534D18481F60A99D3059C4EE4107346D41CAE5F80021005E01 -920C6B59977948F2CE16F80C0B8BAE57214099DFCF918DD20F5BCB9E5F0F80157899EA0FA7752F47D58CC076731EBF71EFF4F3793C34B6C74F5875A6BE21F514 -88CFEF15ECFBDD2837AB9EA8059DDAF7704A6B9A9CF07E906161A95F4E4DD32DC0DB4EC49C9D8A710B6505BF998170CBA49DCBF4689C5F93243F773645CC0B11 -53FF72E4B030FAA89D95366E686734603857EAD566B5EDB7898944C7B406581ECC372D9115B5C86E76C5F403152D8002033AA557ABA4E020D85C8BA3328FBD02 -2C674D77EFC31FDE03C85CFAF4DF7A35C29E75476D4A963E488EB750ABF49C0914349D425D0F69979C38A87168B9815D52C1503089FB92940487A14CFA7B9A10 -F0E5A5D05E8C404C47307D2FDF4A32F42E313985B47761E52D26477BA30227082787FCE0BD3440597BFAFE8A2B12BFA41A56B20F19818EBC75923C6F62A4B416 -3A5B1D4BFA46115C41AF38065A98763C1ACC2E286E94193FCB4E8FD7D77E1D1B67BE9E1AF4885E7BC106568A79BCC0D4FB101C15F21E3AF9C0856DE9E55E4528 -76044FC605A0593C9A3084F4463F451A13E2B33A6FEC89796827BEFDD7C24A2415D84B2F390F082B5E78E5F610E1454039097BF4392DC4D928C11779A48B130E -15FEDF86CA8D16384BAC6B20DE9DE7C9FE8EE74EDBF7B9F608F3FBD0A42E0E0E131E306E1E7176FCB2A65E31761D00A8226BBCF021A41A42F8BDB92FA444FF1A -9475C4E79E87992074A070516BF2CC0E8EAB9491790B045BE16FDEB858EEE30C24E54DAAC63927E676C01682F92231A0FFAEB304D25463A785A44B4A24BBB207 -851D079C3CDCCC3EBA49C30EB011D8E192E7F2983B8442DC3F0E4C37CA29F12212803F40C7B1F46C4BF1C7335D7287C43F5C8DBB00DC2854DAFD716FDF245E28 -7851D29C686B36C37675441FCC7901C76AEF29F606A04DC8749894207CE065288E7E2A189CA5401B705CF21260D1AC20387A5E82D9A3E6B36B41D7D53BE9AD17 -CD885ED5F970AD2DC9940606C9E79F83BFA819A9227C1D46EE7B7755159E2F2A0264E4583A879C1F9F2689C4C82D30F18C15332F1D2E531C160569E16497F32B -A062377F4FD9A997157B4A2F4B29FAE8D70DD9BCD9EA93B21CDDAF4777F68B19BB17EF817A2F6BB12E2346532A936ABBF9467582427243DD1C0139791DD7A418 -9C24F5ACEA0E82A6841C4FCB9A67A9D1F0A975ACFAF47959AE0C46EBCD8F920C286244156A1AA3BE60001D0C07E5732543852803F556FBC5898E847424D2AA24 -1EC8FAFC604D82F9E5EB61783D8B3D374DCA70A6561D4DDD070E9BEAFCFAF20A4FFEB9CD49001569D4D2A66F563BFEFB95554207B86B70B4A6B99BFB9091BC18 -50D9CF058BE74C49BCC1FB3C44D7A147EE9A1F8C580AFA71F6E3F664EFC09822C4F31F7CE5D4D9CA2830D76599047141D9395BF850299C191C5484586D520A03 -368918379180B2F517A69E9FF36426299AC3351940B6EB04F81926253CBF292244E48AE528F8F70F93D6B23455618F3A05EC39F5196859C987C4984E2D7CEC1E -3B1024469C1911E2B6D9DB74F6C6CA6E29A0CF37896613F1F9F0FFFCFD96082A609E1B1801261777C968BC8AD58E67963F16A16A7CBB02CC2C09E5D79E15EB10 -25752F6B72177E5B8C433FF5D3CA0667140C7ADC691305C5B4733939ABE8E610798CA672008B0758F4D9E58A57C0775D252A4C690A8861660AA6240440327922 -6BE30986984C56A1CDBAB526C5ED5BEA7DAD4D80A0A235598E9C5893836EDC17D9C538DBE50B0DB21B68436F108DBADF062D54A8DA36F538B0863B595A38F505 -B83D4ADB142244D66E0FE90733A920C91E07CAF72F38043675467BAC283F6613A55853A42586912AE26937962DD8E5C70FE651229A6C1733E24FA184F1A9AE1F -5E0B3309218C71632889D7D6BEA7C664EA293587B35389F16690B0C223F39B2FB205DEF374B0BC060B73161E7AA3401C1ED3EB0369D0D836E1DBAC4FF221B222 -C8C04A135106B44714F23DC7EB6E7966F0CC88E4159BBA26F9CE93F290C2562B6C75718364B549E5270EFB179148E2C04E6E46A0FFF4D02672344B1A673DD629 -D87A2B2C3BB5FC210DC3A3DCA3900260F309BAE095FA40704DB631BC600EDA1EE70EEF8F6DC8CFB068F9A24AB472AE9C1A9400B8AA5E5276B88120760E04A711 -5BDFD6F13CBF00CBB8526E68C2C38C1D93E102A56DFF8904699BD148BFC9852BA61FE0B3D161DB123A21725541FA08E9C168A5AEFF110AB2052F7E7F91F67212 -D5506464DD7CB2F5DBA1431E1A21273549A82ED486FBBB7582565ED4BF489C069366906670228D3EF382DFDE42B3CBDA1237B54F28F1CDB63E2D5E4EF1962408 -54A44EF71A309AE41F909DEA3A1079FDEAC0F8D4002C9AE0CBCE9095BE170A2A77FBA665758897928A02D33D5BC1D103D720AC53BC9439E4F18EE3FCBB0CDE2A -E4E67B5C255E86F79820029C730DE7A5AFDE76BECE0F8D48ACD26E78F04D69138F96354CAAC1515D863B980B1EB3719DF89148410614BA8A12DA251B235BA11E -2A343421713F5642D1B42215CC5A7A8B5307A61914BCD5CD3694A38B829E8E26B3729B0CB1601EB3443CDAAC7EABFA036741BF047AC0FF4C0BF02A9313A8FD07 -16611689464BAF48165B3FE4C0CAE07F94F72739E32C1B0C850BB42C2869D20EC0A94BB12B10BF41B412BF36A1EBC6572E617F5EFA5272DE244D6B1ED59E4B2C -5F49E93CF05F250F392C618EE626297AD566184C6CA18928C9CBCD003F84551A51C19384A254234B3C4EF5399D7F3FB78AB950930AB1930C00E6F42F61DFEC0D -9DB0BDB4D0703D2AB13D0DE98FA47A3F02993909065DCB8E177727C57FB5D016EF3158EB62BC4B89A71C23149DAD8FFF914C040A9BB67737E5CA712D24B34B28 -F68AC2F01F69AD71D680AA6E6C24544928EC35DAB1178C6625DB09163D87A010C593D0A18747923A7FA704E076D784EDF179449EC293587309502E190105CC0B -A032C074249B3E0A6959E2BBE092E45ADCB5267C2285BEC2B9835E80D4E3871BAD33F7C281021BF496388C0D386D1DFFFE8BF17DBBCEAAE94407C618386F990E -70AB2FA267F23568344CE39153BCD967D6368F37143238AD419BF93A1B9FFA1AFF212F5AC46001E5EC300AE6D910618736BC099B6EF82F14B2D2A202A71B7B10 -8775C61AE424B988E2540428420F3AB04B4EE0E1FD2CE6085F72CE9BF5564C1AF450F0C8232DED0C61141B83D64A92D26CD32BD20929ACA410C6E91DCDD48F0A -876A64AF6E4587034B1093957453013DF54523172CB2EDF8872F6CF16F7AAA249507F43ABD9B3894C36C3AA1F4CF7D5E9C3FC674E730D24A70FFD8642AA71710 -AFB50AA2323A5D9835E8F626F17172294425BACB711EE96BE0FB6F8E7817EF1A6567F0D967D94ABAA8330A37425E9AB82B72C1E7F2A824F9534FBF2670EC3526 -CF2AD341E65AB7D2E88E2EF16A96F3F89EB1B7E790F518F944687ADDB767C323A5FE03EC57F03E9821F46F48C8CA4DF168854CB14695E5540754E6EC40D3CE18 -F62C8E72AEB68BB9B24DEA70C0CC0DFEB1DEBBB93452AC5B6BAFD77E85B66A1527546455306BD90D50C3CC6CA18E7D83DB26D65FF91ABF0E08FD2F459F26170E -8239A192DBE9A4044A7DEF7DB5775CF345F6910F0FCC8330466D48B5758A120CAA29A4FD16F8F53ABF713B2A9B471AD2A5B86660CA11B77439CD963654C68D1B -22D349D9FE80716A2C04C3C266E21AA959B41CF25972FCF9E19C749E731E2308692BDADB1BAFED3837C8F472EF421E65B97AF0FE502751CFCE8CC2932A70D20A -EF8223A1E3D49749B1E5F7E94D4855DFFD5732373E8A22499DE01DAD2207941B68A553BEA93532A453DEC9F0E3123FC6B309DEDFBA4B48DB166B68B2660DAD1F -6886081B00C20CC6131BBD1E17AEA2BB1E1D0F08D58A72972E4F8B1DE047AE14D0A7F92D8E7497AA0377443ADDA1DCAF06FC02EA68FDCEE93BA166D5914C282F -C0FE35052C31411BD2C7DBBEB2FA26A55ABEF8DAC0E1D6BB2368AD48A177C208736A454CCF0CBC23B15D706A7A712DD57758722B0FA7095FA78846AF68F3441F -0A2656D808220DBCCBC83FAB6ABA4BE7F041D79302A2DF3C50CCE678E8B62B074E5ED5DB68FE3D4AA06AD160DBEB1BE1F2715AB4145FF64D12F826F41A528000 -A628F2277CCC2D7D797CD7CB7D49C29388FC3D004F0E3F15C6D475C241CCEB2F2DF4B1DF49404B02614421A097E1CFAA87CBBFBF9FF882633E35CD889338C112 -CFFDFE195B5ACD3F9A6FEDE099CB988092052AE324D751D2750407892C1A172AA4CCAB2590540C10F7C88F9775EFFA6216578C8C6663C21519E87C43E05FF015 -300B3449D8EC5C7AEDA4888A1FA0096BD3F7D54C1C0018834F93E388CDA4B5199375F9C3BC754456CD1E15C34FA5BED9C9787E4945C5CC9A82509DB7B8AC3A1E -3D994B79E0B2F5565BFFA81D1B886BF2028D28A90B27DB40FACA3A9781165226B6577372C2AC6E02B5449439A15E385E0D24E5518BC44F94D260B0D6EC252528 -0CF4B19FC6F0E5210C0758FE2AE70C69C75552B4B35F460FC0C0D75F5CFA3B069FE5D204FAA59A6BC59290F455E8F9E231F279A7187262B0CE8EA042FA9B2A10 -00E6F5283C0D371CE53274CFB796710725B7D45AFD142378F4FB10F222E43C21A4E65468AFA7F6ACA2A8AEDB05645C9C7F95F29765E29595538325CD876DB215 -8E954F1F87BE7AC027445C05DFA9411EF846448BFB1F9C248AD1F4E31ED77125DA4079E8DFE763BEA6A41975F2ABCFCACFDD2FC52CFB005CC026070E77852114 -AAC0389302BD9179B55FBBB9D0ED6B1A4F96CB44455F936B86D5DA7060B03B0C7F1806B223B00111DD9EC95ED5E2E1EACA19A8716B6BD2D0BCA2A4BD813D841D -01F46148911B0A58563745AB697DD0C18819C0EEFA2EC7131F1B0BEE80169B2A6A67C72AD29EB5FCD217B7E0A16FC2DDC7366967360E3FC972C39EBA7C8B470E -1093F92A3FFBC630A86AF891EFDAA98C2DB26D9A4EA3A8332B136BBE68F6D6180A23682BE2EABC6811822B8D9962643BC11EC6F3A66072FB9134E0BD80883A12 -213BD45A3C7393C157B420A344C41084D060B7EE72C3C325495E8D5B9A22982C794CDCB2E50649A5F3DEE7BD5FD5F874459D7EEEF3829E893C7FC0C6DA361C2B -EE6362728D76939D0C3DF7B4B712DB97D1BC96C59F2B9218414DE13291999E1117A7202DF3A0057D640B21D4D2CF83E95F5FED7A7B6A0C729F3EACB086FCFC25 -75F07BDE26284B86904A7B52766611D09E349F03A1216E8AA21E841C0E24A60C2F2F26ACDEBB8E267598FD9053B69BE5023DF2C805D782AC4153A0291D4FF52C -0BA816E498F86FAFFA30BC164B111B1E74BAAA756D9FA2767FF5EB94DD651005EA1F4F6922D9463E6E7D496C46C8E679A9DA939458267B46CC114FBEFCF7840D -2F212B98B2FA17444A5BF70B496E617DDD42400DBBF50B90CE730508F418A9291D32F3C20962F746F2170FFEA3559E38A2816FC7A47E3F914BF8DECED41EDC27 -667A40A0F62572DAF5EB1987B3B8B2E8647DD158FC69F77E7E1E1375E273AD18630729C3139D76177F6698435C59974E584B768175805EEE874FA73252C3692F -59C5BD02F54E43058FDD663355E9F012E3C1D48797998C54AC914E7B273A482E5EB93B3CEF6E78E7E20C5ED8EF5963AA3C8470A938D51361387E7FB136BBB604 -0D6AB5F609568A57884986AAC71E4F4E7286ACA30D45FB58967580246D910A225AAFC73CC7144ABCB7989E88211CBFA3C8E9D8661323F7CC26DA0C54B45ECE1C -68E15F435845AB8CF73087A813C5BB57AA996397D27D22E7160D8ECB4F885F05307C16A5DB1A94CF1958F7D9CA0871B9C886E722E07D565B98DC630D10136A05 -67A4936DD9A731DB91DD21EE9FB07D80D6499095D1D93AA7C0583E640D2AFE1B9085571F3D5831631EDF7F75FBD6347E3F5220DF67BA9C72FED54FB5A5F7602C -8D38109E0A7D5AF7530D655CCC79EF9DFBF8AFF7023906C2C97DA6A19B185819F2FD9DEC3404A1380C980CC8D757BF2ADCC9468F0652F73095598CB4A297E813 -D09194EA81B6E5650CB9D5DA45D496A553DF7795B1AC522867EC563C37DD54290CE079E0DAFCA8701F075FBB146042FBE3B92D6DD4BDFCF2662332764556BC1B -559FB33F092C5E093D99FAD0192CCCA3FCFABC34FE504CF29EE72F336E967719E87C1CBA6A7B908BA5B3D52EF2336F6CF2FA65439E26F2662B85884538D49204 -67CDCCF6CDEAC9C8C8E169F89A15D18E0A8C718BAD901645FA6BFA503DEBB9026D36079A31B1EA2A33B5ABF96AFD679DCFE73693F75DE4B2E19892278C246B2C -DB9D4F8E29C8786B31A8D5D59D92545C0BD62C7CEFF04A460D3E8340A76F6018F9176949F1A6DD2A55B2247FEB26922DE0BF12B4C85D52AE3F83C5B39A29AB13 -EAA94C76DD85AA538500462E8D2407405E2D805300E8AC7E693B6F26E504810E30EBB78B948D0B9A7BC699648FB71C1D21D769D2C86C1A47357A68543C7EF609 -4A32546A85AD532D4719200A2D0FCDC29ABC20E28FA38D4D76299B2D8E28231F342DBB3C260596E92EB0FE6E3C85CAC66D034D1BE71ACF8716BC7C92ED1A7412 -D2C06C6C1E8C9B7886CEF610332AD8496B912606F300CA104E227F9AA78ECC26C59A17C9807053DBBB7DC9D5ACD981A6C9F31137B3EFFF301B53E52A3EA8132D -C83E4C9B71E9D7E516D074741B33D0E65EC58DC61979F9F773430659524D6E05AB870066140463B1CF767720D228E6F2A7324E55CAF46E6A53E0AEAF79BA2F2A -0E655C451423AA5E6EA17127FDFBF7806CE8A61557C1CBEF4C34CFA5E0613B036FE4AED63896A4A9D260AEBC7E2B997ACFC3D7F22AD8361F56D0029CDB0D531F -52159BC495A244E78738AF2C71B0A06C8539BAEE8936DDFC816110D9D9CAFF0740818265560E8C59F75016FCF8E33A9AFD4C0ACA34F13CBF7BF1F8AEB21B072B -F1228374AD870B76FDCA456481343C3036BC51AA01179437ABCCC89FE10685178F0EF34F43525C32AD70BCDB32D7663A08753AC84F6907463317B8B927CA7D18 -C7521E1E8E72009F75412311EE116416DDF00E41BE74FEC61A2A4F798D267F06A1FA42DDDFF4DF2C386ABE6AEEE45BD9F7AA33F7443FD8560219F4F7C5DEA911 -D8A96E25AFF8B02441C33F239A20003AB8C65AD897FA699D684E05821DFFEE24A24303B0A7428E432B554F22F7F682AC95683720BC9630F6C4CFB13212506713 -9306DD34CAF7F7DCB2A589CFCDFA54F87CF2CE5B499EB0EDE6DD9BEA95E71E25AEEA17727D4500992511D2B58B418559E4220E6BD56D9D1E083DE0132BEE7315 -F2DBC415040960E07DBF39D4E936FF59982ECD1BDD6232164A99A4D455ABA5216B67819C85A34DC48F780090EA5BA152116A1E1EF0BED939BAC369403830B812 -BB67FAC945A3369C6811FA93F32D40EAB8BC8637E0396D61B2F72896A2ED3515FF3122196A27804C12497E20DC1A90FF572F7FAE98DB2CC96849C2CBD5E77F13 -304D6C65EDCD742612B5F007D7586041311835E810CA9FECC10F45182601181EE317156E23A86708A21C7FA3C0C88B30E0485A22672F59B557EFD6C292EEF61E -F8E4CD9224BC02B68359EA0531176AF1B9EF4929696601F819F25F91CFCA59010BA682DC9732A4FE3F03D56122E397CF4F6384EC44012A9D287742B063F14909 -4800585D03BABE35023E45D4F711A7372F3C4434FADF92063C51AED432FFD51FD9A28122AD3A00151293DAA1BEFED53145DBAAD3F11CA8B707BD18B1394B4F00 -4FD0FC14067D3B714BB85A151EFF96B8A7CF832805DB2D502C87079AC8EDB10A26910806A3435DDB7DEFD3C990403AE9A72A8D6F9505E2581101F980D78F3C07 -9416664E341C51E443858004A3A8CEA1CC479D0CB5EA4C39C21BD133FF990C2AB6FCC7231F91B650A5AFFA456686524C37F2BF8824DA8E86E62BA3E9C694960D -9FDC8363BA63E3339C9BE3946B6798C6DEF684DDB639D1132C75E5A5B9020815CBB29AAB216EA81DE33EEC24B69D1AE73AAB00612B736DC04EA47110C5842528 -3F8E5D5F75E547CA80547F7BDAF9C0A3E31A7534CD5DB2963A1B1D4B072E8526A068E7B6B92DA4807621CAA581E7276B870E19628A96CE75A3BD54F7EAEAC71F -F24C0FE941EA05AF80694DBF56C2FFE65FA597886B9E646966E1046700ECD4192D69E92940ACD61FEEBD6BC40FA4ECBBA1CE793FF415F5409CFC7D65F312B306 -7EC07169388500227C2EE8FEFEF443B69455FC96AAE610C6AB29BB626C7F252BF47CF11B6DEC75FF84C792C1EA3B891BF868D66D5F713B4DA1A714F75A8A0428 -31C42FB4E272E9EDCE7E66BE0E583220499D8D2DBEF7AADA86AB6E7EE9FA4E1A17B53800AF130DB6996CA1EA9AFC62CF7D70618564211CB2958468D770F19921 -789EBFD717264976C96D7BAE5F90E63A7B2A35DA75FEBB050C62B700E1A03A071F7A812F5E0D075744F81A91F744DDA8634EB3AC0A06D4419A128497905E8817 -C6CDC77B517F268EFE70A9374799EA4BD8E94EB690FC663A72396908B0F7D70F10C90F6018F3F033FA8A320F542092A79D0C92C2505CD72040CAB5CB16B6BC2A -6913AADE4DE94745CA4F903303F3D3E8A400AE23CFF2D067E2EB593856D9AB20AF5B8DE39F9083D2D3856EB99ACFEDECC375FFC59CDF6C35AC11CA3458A53608 -D32F18C1DA5575E063EC1E6A9171CFA4AF1BFF89B5A482DAEA130EE5BA14A815E4B08506FF50190A2ACC356799ECCC65F37A35EF1602AA93F05A67057C7F6E0D -0352E4BA8DF9028A7C048DE0CDFECC7B901A1F8E3FBD7FA1A9F6B960BCCC4022F9C8B70B4A7E907F789E7FCE88D44A84118A6BB9AB3835554388183B4F47BE13 -8A5FC03CA4F502518E29E896D8C707E406E80D95F06231AA4F24AA1FABA6CF24ABBAED49E9EDAD4A83E192B44B7924BB5BB756F5433BAB7BAEB93609C85D8510 -49237267E0A8ABC9F3A792E0DA209D4B4982E1CE684E5BE00155E6C2DBA3EE020E1717213B76C6E745CDA133F2268AD8C1BEB7BE19AB4A4388C6BAFF98892C2A -8CD5720ABFB223DD1A75B5CC0144B3DF72CF534D1D6DBBF6793A7122E074D028DEC7DCC258557487CFE73F148A70BA5B7B0978A70973D59DEC6A9674FDBA480A -D38C87B147C98E3252D064A3FC1D4CAD83AAB736F2A95866CAE88A5AD0E4D217351D2F92378C783FCF05BB96589311C4C960E431199C06C3F721EDF1740E8B1D -690D96FFDD4CFC7470388BC9A7333B1893B8DEF2EB65EF534599F193A6B4140509ACC0423CF895B8C3C35919EB547A8C1E439056ACF3F90F9E49E052426D9426 -F5EA0D1D057F431BF6F1B8EAB97F57F874E196D275B8A09CD190E7AFF8B4B21BA561329A3C199291BBB8D61638FFBE10C305E7B51458EF8B6F626E17026B332B -63687953CD6F27F38C27EA585230CD4843ED15EAAA455CE6516A3AA10A55F92B6F81648D736CAC5783F486C5402C7F3B407F7F0C5CC870D3E32ED9AFC4CEBE18 -39B61B3B7CD99CDE4E1BC4FDB8695F804F0729DD07D3E6FD3A84E577B29C330857AB799EC816B03178114B579A9C8956CDAF1D11403CF961B90B18AA30C22729 -2484BD5C83869069CABC2B4793FA02F2AD165750DD5E368E3A204F929A31B52312C9BE796953ECA63468691258AB9C292EED47884225F4B15068AB373E488D11 -A6DE5D714CA888A3E17C8A972C41EC76AD128A636E53D5A41398E71BCCB8A52C88BC09D64BAA2FBC07300D84CE50FB9DBA9C3F9CEB7392ECEEC9897B13AFC002 -A4AAB15D050C747B5159E13B2ED58813B76BA880C9FB3735F1A09F3B11C42A23997D7E265427BA8B63F51B83FA2573ECD81434DC4B02DAFC70C199AD5822812C -7C6BF976B1404B8FB03697163721CA32C462E588A7651C7FC700CB9C7A9F4B0A800A27AA825EFD305F866BB880B72469119D0E5364F5334B449615336F3E4A07 -E524D0FFA653EB84B2C26204692542BF4D3A818D36BD71767B8606F5060E1423B3862CA19071D52E62426D37F6EE3A454BE9C1C7FA1B63014670B519870A4906 -5CB19472B681F1ABEC29E23ECD49FFB0B8FC5DE8A7EC9A5F0C6DA994CCB2F008F635F264EF7762A79617820F409A6F04C46D2DC52362400F4823B09C4F8E2A04 -90B5E0283078947491727C336DAA5AF3555569172359EE81E88B1852D7AEFD0644E6CBB57D049F3C24305968840FE06CE9F0A0BF66F10D9FF1DFAB1C3E4AFF0D -41C57C6EADB4016FD052CBF38815D48826CB3DB6CFA3EE716C23E367A549DA0C19B2C07B317E6D42D2F4958B04AEBCD597C0432B5F1A0B4643ED12D0B88C6B05 -5D2D4761559F6710B437801C43905437AEC6E215CC4D404297B3780E718C0C1DF324D145B437E65692C9E283C89BAAAE0E08B853070D9982B8DD3E8D8E7D7B2B -84E7227606DD7D9820D921AB5497BDFFF607822F42A5ED716E792EE57510E61575FA601171EDC77015B37D15E650B6C642A7F3B157CCB457D1C4C16E71FFF52E -019D17567DC3F9DB4A0F23BB178A75020D171DAF1EFF916CC351668F963A9417C85C7CC96E309D5AC8D46DD95E17D97CF9CF4DE460378901217720826410FC04 -7424B57B1DDC034BB8CDCB9EBAB6331D2F9EE851F1FCD9B395955C199553ED09869BDD42F450BDC1306DF6ADEC96C808395C9E8C49D4A63B529D7A9E16A0940C -CAB3EF3BCB0E270F54C6A3E2599B03F8351C9FB4A16ED2DA55C7A744219B95180D21C9092CFD6D83AF7000DC4EC8767BA89629E803CC7CC1732B64974F931512 -D431325FC3DF683DEBD8FAA5049B97C69FE8A691B3569B778529A09985026C1B0488D5981CE942F4EF428BD9F2F8E8F48050F482ED591B5D75C480E08AFE320E -DED188DEA477A98A9354862C84EE8D008BBBF3843AC706E733265C2C31577A0316EC87F7F3768B101CE5FFA0BB3E5D3F2D11B50E33DD2EECFE8ACEF64765F02A -F8184994EA2746BB16CD868FB8AF1B4D6319FE5473F83270DC6BE7C451085A2397235EC2928920A59DC9637EAC4138B19B77876A0FFC22D6977CFA179F58C326 -9E3B7E43B2E63FFBDBFEB292BFF62416C35973C9DC19B584ED9FE7A6D200B811A7C336C4A18EE619131530DC68E07587B1ADCE141A74BA8F2824ECAC4CEA322F -97BFF10E6CD132035BE95A546EE3C7F9EFD922E822D80F65BF62BC614A589B15E798DA64B4958F2F40A762959FFF5FD2AC17F57C6EB4B0CB80781ABB6F582824 -8215DEAD6DC8C76C22A94440AB7B8D1DD10E5CB3021B189941CC7DE3A7A54C071E6FFD3FB3A4E91EFFFD5A583758ED5C967144E5A7704867431F8D1295AA7F25 -43B69A4034E8AB629D8F47B3DCB1DBF03B8C7EF94168AE85F2989DB394F06402A3D1B86AFF91D47457753FBBA9467D7BFB3E73C4FF0B582DE2AADB5B8DACCC20 -95E67AFCDA0282EFB7EFABFBB844C67925DBB66FE62D8E710DEA637D5D850C24C864FBF3BC95CE12E3B82971F87D0F3FFD13AB2744B2A408C1B9118244B15E25 -C6AE224D73B75D39AA99EBC6B9A449CF420475302C5986445CFA980CFC5DF91ECB7ED05E2F81E62B42855C16908C5EDDB64E6A88A8A8B423B67FED8B51355F09 -2556D0A6358798D32D0F0D6B1F7E3A6D5A71A9C1BEEE27021E4F7C624C6D8726C238D66EA979F1F4C9A13A36DA4D97ACA1B94815811A6D057DA902332AEBF008 -53807F2046F44AD0CC30FFFD986E2B8F8EDE84DD4F89B5A08E53391176ABFA0775891D97F997689BCD90B41749F5E8708A0E90961FA844C00558CEF11581EF18 -789BFF42F1AB3EB16D1C7ED7C960DCAFC7421D5CAC80D953B14D9FC8152202186E9354993BE48472EA62AC1DC4504AF41CB3FB7AC94763101ADDEE11D9999A07 -683EE1C1F21429FB9933A377141658D20316BE8B908B8368EA6E7172D8D59B234167D7729CFCEBBA429F639D5215D53DD0EE517D45A712DAF3AB64DF9A9CC001 -7150A39EDF97302D8EFFF33D47D31DFAA98C8947DF3BEBDD0FCFF4CB518D2E20BA3606F4C945C121A4A256303FD6C42FF93FE6CC1F5A0D14AB0C2B9EDEEFCD03 -06E52649BA82036F295F2B69C5A6A2F25FE197A9B2D6171CAD9CF6980AC109114AA8D3A6915AA615B62405BC3B0D9DAE78E2ABB7B9DA29D404731A48DC98210A -855D3B5EA33927814F52F69AC8139F77980EF9549B719B442EB7267107484F022034AC5E408455BD40D29CD7E49D548FA172F42DB76933E510A5F08B69D79021 -B6645555E9AAC93591A3865215EB907940BE78E7B074128C08DCC29F0BFFC71EE7E8B3B6946AF2BB21FB6EA5965F8B1B8C5FFB5B0FE0A666C7CA7CDF89297A16 -47A23EE9F722C6F2DB031805E752B3CC78FB475C4EF64C20066960E1F2E0731ABCC21393D64752CA0870C269CA15413302F9FF69877DD4CF75800D3B33B24B2A -0DCE73C101ED82C35E4BE8F5AFE38FF4D5DD9AB014892E582CD6BC608200DC1615371A3028892A039BAD8EDF93A15C7B41C664CEF0B2926C31DC42510AB71318 -2BF15CBB195713F672685AECF17DA108EE1B645A6E7C41F436E8110702EFDA06053854FBF030AA49C1DDC268BFD9C9CCCFE3E752941E1B439E93C6FA0C94E405 -BC54D2A8F18C641127BE0314AE0F4413FB92E16E2F085E4A131CFAAC15A74413ABFD29A82AE091EC609E8184FC980D76D1451DC98A1D4D73BE2316E08CA4402C -89749E16E316C02001F526375A17B1A553AD9187D7D6A217EFA2B4DAC131DB1534514E5EBCE9A74BBDE80D60DD2E68EEA253C86C920BAF0B2B9F462DB3DB1502 -307E6488E1A0EF382428A1030B0419A46C5B6C4411F926CB9683B8F4A0296C2ABD81E0E521605E54B88961156155D79B922AB498EC4DBB4528471F0C645E6114 -76DF0C106BA8D55D05A7DC7F560049C1330BAE2A5BB90D1CA8C2E09875CFD312C86F81D713BCE0A4D5753DBFAA43C61C5446901E9DC31166F498E98BF0E5D51F -0120915B3ADC3A1A2AB662B302471351AA05124539F796DE5DE6FCAC93B6EF1D20DE369C9FB5C357E6819616B8D155DBB54F8FF2FBF73114293D2B167F368B03 -C653B06A119861E1004C88033AFAB82A994C23EEEC355A03B244F8903D71ED27EB047B1AADE16AC4519AE8775C7DAF68185379A2F858629A7D7490F6472CE409 -3AF3ED3EF8536C989E60D7DAFEA0F4C01B1124E466D818A9FFD91AF20638342FDA149B7AE2BE6E9E091BA9149FFED3F755AA588C727C18299C344EB9A990E01F -56692CC0838BFE67B80F01F618C22A814CBB815C55F586CD7FD42951DB9E1D23E75B8ABC9D1FA99996A7EA3FA00AB0E436F2C0A541119BFE084FA56BEDDCD825 -03B8E82EC97552EE41430F312FE0DED21D94A67F9FD1368ACFF93E5F4800A12A300865596DB3BA4584329A9C51A66F10B677A8A359CA53C05DF23B2DF1570B1E -D63F317BF06146B87CAEB8448D4B804AFB582B748691F8E444F91F6226AF231307A46BC7AD993D7020D88893565F7B6A5ACF654835E063F17F89481497FDF81A -94C7D9D5BFD7ADC3241D7EC4547A02533F94E0910D4CC9426965E2D273A2B0217614F6FD8A2A2FE42739DFB4407388F92A51AAF43CA7E0B870BF9C6A7D8A3917 -928C630305F1075E750B0F29FAFCF726903B71517EC8EF090A990E2B9F9BFD2F0D4530B788E01524D8CD9F0C3591082D7475E05DCF04E7637792A8F8CD3C121F -E296EDC225797C92EE6A57936735A3DC052F8C552BD78FA8A5F382A202EA481F901ED795A095229DE58DA130BD39120B3A719C3CA03E7A5E4C16B64AD3071E1E -3D6CE3486A4D7182D61245FB86E50EEAD687989009DCD2C1B437822A878EBD11A252A5FDC78C1CB7E53BE963746EBF22916F319BCA2684DE0BFC65F3ABBE670D -28EF7F39AB358851FDAC1D50167591380E43BEB4982D40A5AB07D3059C744715E458AFB74873D2B82C8DA334B3F9E31C90D09D9B880B0558144344D9E321AB10 -4838A24DD2DE31AE4C2076491E513ACE79E3E669BFC1F9987BE328B04A6FC9222B3D371D2FD2B5ADA5997B1ABCF3B13B94E74BB4401B96B9662821BDDE65EE05 -CA632C6F4C76C81B5411A29A1A55C23773C86C5EE88127B39A3C5494B98995121F06E02108941B376F5766E193F1DB6D0C65C3A56D001CF55E3BA5471BFBAC29 -5EF27DB421CFB5389081EFDFDEB50287C6435BBEB638C42E79119B061E44942FB572DA4338B6B928EC03DE6E0A3CF29E322DB0F1586351E111241D1F4F186220 -2E5A4E7B2348852DBC8CD2B9E77B21D42DDAC3635D49133E2C5CE9504AE2C22757A5A0EEAFDB88C426AAEAE02BB155AE40E963206A2F601A9A74D8434ABCEA1B -6F3C8BF417999A31368994C604CBF4221E82230F2EA0218F7DEB8E7FDB85DD24C82830A978523C1040ED1557417C3E4905EFD886404A2D8A26100ED41521AA20 -AD93C1A79FB1C88742E4BC4513E869941343CD1082A8254E9019EE6984455111766AC5ADCECCB72E29ACAE258E7EE00AC826E00490E665947A54DFF32DACDF25 -278A3F4410C15FF5356C02ABF118FE9D698D62464A6D1D1929B27F46E50D7409B0B9A502D70D896A7B826971FDF04F101A9C4809AC4A0ED8AF8E4D42FC90B615 -739120D500418B0944107FBE9C2E22F511A716AF4E448EADA482C661F5ABB82D9275D16CA0E015DD0A88FA84BC8A9508CF3E95E8DD24BC589F1B9422CD0CE00A -3086BCE9EDB92D8E22F9D9875E4B2F06C5ED10A369967D959401C3B7A7BD5C1111664DB0AC4444A17801DEDD4065D3B096BB0B5D16AAA07DAB8D4D0BA7A7091A -5EB79E8531EAB32B51CACDF0EC22704B90287613DA201F8932379B050D2B9A19426913A0A9AD32DDE9C8D1890227E12D329B6A1911D16619D2EF262DAB7F2B2F -03D735CF3445A72FD15B5ADFEFE11612282F902D3D6F44D63BED4062D4CA4028A6BDD033D388BAA0EC619A00B6BEE7487CBF3416D9D680A1901E546A9CEB1807 -E35C86483FD539189E70D263359F08A9CEE2BFF9FC917B1513C801613A1BBF096BCDD33963DBBF02839DF19B113E179F40FB64EBB7B515C5CA2A7037E5411614 -A6749CB8620380E2001D7E954E2CACB314A6CF3172F1453A580AD6F21C3DF10F2D19A996EECDA0437465CD83C108EC51CC14315E0408EB29007BBA9DF8491C1A -6F7FD7016195DF8669AE30965A9C85E50540408D7F60F5AC42934849438F272E52938EFEF2630EF91437501472EAED10E9A44B7FA47244550D54429F194B0B17 -641F40F3C55C538F16F2DD956DC21EF6811AD4225AFE2F4F1B0A4F71C7971119D3C4373B6AD99D253B6891D86C7DB12597CB21F188EAF06B6BBF96CB8E371006 -6ADC7782271165C19686CFBCD4883F1F1A99764675C54CD68689403F12054B26A54C8A0542F7288E6E1B3CEB8F7E0F98EBBFDBFB20D2A8A58CC0245AC07F0323 -2839B297DB062F74FE35D7C8C621A08321E5B7A3F417B8FCF90CAB3D02D8C01230E6B5D476096B6C38A7384114D352DFE6EF170A5400E06A57A53DE740CC2A0B -E33C9D434FC1426320B698EC9358E8D672BA53473D198251FFFD303D756B3001F9F6266ED8B5D40A8EDBE5998234FEA8AA575911A94927969287BABBC09EEC16 -E7023D6FF394A4D1649579E42283E51056BADD5CCDB091DFF545D36C1EAD841852BCF8F5ACAE21AA2040CB030E644687BACE1986DC5413B628D3CAC60B15D20C -43DA0E561C9C48C6D0867A62AC1DDE9E1B760684BE3589865A15095B9B8C9B2A87985AD1DEEEB9FD8533DA8DCE9B9DF61D97CDE6E0DDC0CA2F8BB528ADEF8010 -02E2DF6A27672078A85DE44C509271DF64A6A395EF3787B1132F012DD1A8D017D63C558A6988118DD8C2058A59917FC304B4CB693F10C2F390CE2E92DF2DE203 -67F84EA2991652F2C826952F7411A483C1212C8DBA7D6AE92A7F09A38FC79106CE1F28F854BE544818F8C1B8A8A7CAE184A32A42B26A7ABD05709026ED261811 -7A4B91E035A9E43933E75F75D6F5BFE9D812169A96870E2539DA086F950FFA2D2B0045003992B75B09B8F9B731D5C8F091BAA3A9D098D31DAB829739642A0518 -92AE800A45E8E3A6E6C3A4C770BD318E990AF4B6A80319D954F7ACD30D9FDE1F7D8C8EC626C8D8B7DB0BD4C23B1F40B7E49ACCAE084B0D72778FDEE4D919592B -31D4A03B43A675EB5B1007C2F78D5630F8927433F2506EF528BCD41F9A94A505E353E1E4E234750FF9FC3AED59285417B13BC7FB1B47394842E50741E901651E -71D6EFA5A183AD846EDFA55B2789823E5BC6AA0A3852A190A23C31CC1FACBD26B01B329A3088B7DF620036B6BA9A65FF09E4E6E77983103B4E65B7D64448411C -66FDE902DE2797874D1A231AB4C8F3BBB2E5BE10C2E3D30DC13B06C7119239168975CE9CA676DCED5041577233B643EC9B95EA05D699C73BD72A3738A9AE0806 -B83F655AEAA7B59A742F79900E28C979589FE227FA67EAA8918D0C09C66B961510FA80C98D39ED2326CE3C361AA9AC8EEECEAC87A28D87B3949F8DF1EDE94518 -20BA884F8BD37B2425C767B0246087CF87860DA09B0281B2B1BC0D9DDE06BF13E2E985A6202064851DE00926CED14C7726DA9F3E7D029CE4584F54A4F91CD924 -31BE2ACE9F04C1C3FEFB9241131E112071B4C55DDFF8C3DDB563648FA8199F0E27FF505010853E37B056F9EEB91AECE7472D63079B5CBA130987AD61EE8AA621 -B3C158D6A6A12E3E459D5BB838F682DBF660F77A7B04E4670C708F459BB409220AE34D6D4AC99BA97E95C18247C4F887A43416E78A55D39B3C804A7B88CFC818 -178EDF27F568CC9373E8D4EB135142C9D8B3A2BEDC469E3C5CB6581F32F067056919D7D5EECBE8027274FD1091CBCCB00761C8B4E55B737811528801FFC5111E -A1F193FC7986A67C064B4750E6F55BBAEFA5598C4CE36CDB6DE36124EA569507DD4834A52CB9E9DFBCC8795A0C15A405FDF1BFE5EA4C3C67548D610B79F1A023 -702A7A0D96A608F8C2806780B9A45DA67D9E1687FAB8F75E46AC2F9072741E21A09582B9C4C4E8CAFECE29F930DE2DABF44AF6EE70AC8C9D93C98EFFE1DE2614 -2FD04E8F9B64F3CEBB8315EDD6EC5790DC41C3B5965A9C60705182132FC5C22D9962930CED494525C6B10D99E542522763D80294B159A70D32E0B4830827042F -34DDDF1F07995C283E24D7805FFB33D4CDFDB728D3461ADF34F2E486D1AB151E33D7624B0F0216F17D51E37E04355FEC1B4A0C881B43901255BE84BA01D3DD1D -2ED722445F807A9AD86C2E67EA82DEE873CB43B3E671B49D1EE8B917EB2D1E2073497F84EB48FB3BFCC5BDC4B1568B88D9B7C961BC8F7784542E18785F00BD13 -DE235DAFF2CE99637BAF2736F63D3015BEA2A8E9D7C6D09EB009F65A60196324716E7E3855FBD58A75820370AC4731F08C60ABBE809BEAFCD0D80A331A1FEB05 -3B53CCF385C0F4D68BF00A4A52DA0AF05E91A1FA6A869F6A01CFF29C58C295174AAE28EC0AC0399A0937F1F765A42E2205EE03856DAD92C8BFB46B5B7F5CA416 -643747970E375188CAB7FF2899BA84D21B492DBD70FCE8FBE0D4DE122594522C13AB8F25495CA61E6ECF84F095EFC6CA61166CADE9BC7EAF7C20D3FE01CD3813 -59BB8AB3CE0A17B0415226DEB0C421CB105DA7B341C68BF818987B3D8DB96408C2BFD549B9B0E32DC9FE3B8E8E45D487DC13589120E7CF65D1B67ABE19AE6A1C -996575E800D4AACE2591C385287A8E6600C0CA7380E9721A2EEF44D55E9D9C23935A955CF4F012E5B8A552F79BACF64157978018121ACCBAAC518A3E87B82E1D -60E981F12DC9F65EC87AD08C594F2270C7F362D6C8A6D9A6FEE40D8660F2220254BC2E0879A6931272832C467B317DD2EFC9DDFB167D3D14C0CC4C41BCF6491A -69BE3B9E87490102D6912D2565A51FDD4B822FE26A5BEEDFCC3FA00810733116164D622FFA25FDF305F5FC86D53A7B5F179595856797229F2357C4D64EEF9B04 -A2EA81DF0DB50CB1C681A3FEEDBB270F1D3F531F64074FE1E014C28DDA8E071832C89737EBFF1DDF6751E5C1E2D50BC33DA4BEA9CB4024518BB149546F1E150D -72451CD6A6F862119E1B5FAE474CD9672BD391863245399AD7F776C6ECEC941150AC2438A41AE363B61850D28CDE0FE19D68A3EC8574BE9C6159ACBE5117BB10 -A556B170862A60C54E71DE059B4336CE5DA9E135B94F9D434A97EDBBB15E7312A172B61BA0F3CCF2818413C7A81469BD851308BBA6F0875A5913BA09FA141219 -A4D214A0F831EEA23D7C540B1450B0B19F62A123F3C655661BEEE0D8996DE61432BF08C5B5922CD330F06EB996E0FEC0278A392E72C32BAF41FD4464045FB113 -3327C9ACA4CB81189E3126577E4957AB77B520C4E1CE5FD9C1D2629E12E6CE1FDDC64423C4B43BBF7A8990B59CF7F33154D6EC71CDF8225E52D1EFB2E8384525 -97A255A3876EF7BC0F040B2DC9FA9F3BD466CD2F4B64E22D83F9BC63F8D37800A9B181CE4EE25082D961F185A81B69B6938963DF87F07235ABC7ACF42C11C42C -9A75EC86255874A63B708293B6AB3EC85E65B31EF4AF0757CFE31C46475245239707D9D5C1BF3A035C4A3E04C4DA10E5BD60A8798B939C4694866FEC2B27971C -0B83C8C4385019F6ABB537CFA206F29CBBB38B64F8E67C966DAB45171F8ABC1A8F2102DB572C96059FE4D21E667F42F4ADBB76CBC1F615F7B46C8C9F31B1D027 -556E1EFDFBB2556860D2CFC2D6784DBF05C82CA8D2AB22F4D82BA3F761E20919C183731E6189B46A6D25764E5CCE89AFC171D5D3C9DDED451D132245C793281F -2BC9F60CB35224CD5AA53F0F918CF2D941038CD40D644858072871E05377A2201883EA937D23086391820191CC5EEA8A4D863AEAD63424A2256A7F651A16B42F -8643AC71500AB5D9940327C1E920CF0439B83C0833266E0F22E7EB7D4F39791A55D07E08F63F6EFA2F41445872FCF5054E2782F84DEF0E4ABD012DF67A926E27 -3617E73B997957E974047A8F98D2B30578CA2DE376F886001A68617AA4C89F206F1AA8ED197C60220EA23CC255E77CC23B92A6B3D27BFBCF59235E7F7CCB0B27 -79058427105B65D007554EA391846549F225E77C7BE3907E854C0DDF490DF00DD26CBD9C6B860E5D32CEE7E069E6CDA377F884C547EAD5DAF4C5865DFF382328 -6B2501E6D4C292A4B8A3899B241552C0197F74CC470F6ADE5CCFC6B839D0460546F34DDB5178C45DA8666097F343E471FB60B216C4DBBC04EDE936F785338020 -74D4D131796E14AC5B395EFC4D68411574172D2C823737B558990BE6518E3E10153AC6B631B782A23864A1308F925E154E9975C861A2D71E4F73ABEB44224800 -39B9ECC9FD7CFE3266F8FABB089CD8155311A432CF44AD9B855E36B4AB58F42B4356730D466160531B1ED9D51E0A4B4FC765FFB41556E3F3D01846662D89B10A -5CC2B7317CC423517235F54F2767FD254DF08C76EC05CA917E24F0D7F8CFD62F2A08CF27F41C816B293D9AFBC884BF968894895FAD4E382703BFA1FC1F75B702 -BBDCE26191EBA53CCF74BC126E6A9FBD8246E0DED8677374623717CB76999D2023B6ADDAD350DB5F2816461F30BF591ADF5A71C2BE263F4BB13687609294B11E -279A81567077C863F304C94BD705D1DC883CA394C5DB847EB93F1D6EAF50852A591856DC48933F90594185B97279FE5BBB408F0B3332E952D95C7A3B31C5D31A -F4305EEDC38611887AB67E1FB99C056931E1CED19DFB4EA8B348E586A6EC5C095A9BD371463FA46E92E90A134B47456CB88CE7132ED2B0F0E73C57AF612DEF16 -E72BBD506BC3BBB98E26F578BC42F3082A16E58653FD8F0EDFF24EA0600E5327651500B1B17EC6C0339C6B5FF3B6F4B0B730E4885A98179F4BDA0E4BC18A141C -DD834F8838449F0CE5AD1B26301077F457A5AAF5F1536C50E0329D69958F2204DDA8AE22B7C11AC655F24AC0B4585EB356E39882F418326D9A273020AF622B18 -D57EBB37795976587A1C190A31396B50343C473B793C6F86EC422ABD49FA841060B91EE48B3435EAE9D442528A57C7C420D060E3018621C8EE873FD990C6BF2B -BAB32FEC1B1CE117CA9A9165701EB8801FE27CBBB2C87F972B2A969627CF201B654498DBD621F74E45D1FEDAE6224F9E070B76A51A1B85EE79C895C07631C614 -46562DE10B9F0E3CF473C46BE490AA84F1250845DB786DBC672700337F0935266609ACA5D48C1DE770F3B3A64EF2AC8F57063E596F3C10110CD875E775078D04 -87BF47BD1EE0781F8A541B7B60ECF6042D39680043253428763E58B86F1C2C1D6099D0DC3E2FB48EECBE4382F8CEC13E3BB6738A4394AD832E9FD367AC9D9A1C -A568C462D1094CF533CE35738352EB0965A71AD836D4492302FBFCE646219C0128D4FD18CF070E3FCBBA97EC66615F03F6CD2A92C24F736E353A2F3845A0AE29 -FC1160F6BAD7CE2C63FD97CC02DB73FFAB7D01479F611B3879E56A1EE166AB0A9D64646759114BA02B35E66E86F21EE92FEE9408CD3C6EBAB18DC91C4B0E8018 -2DD03BAD9186F3084463B22E9802975836BC5252BF50EA3141BCCE84E3821F211D6BA98B9483B805D1F7ADE30380EB0BFC55C9148A8EC48F3EB4F2A6848FEF14 -A0C5213A8443FB6B371EBC7264DCF4DBA7B05BE1565DC1E8912D4EAE5EA44F04C9ACA4F6C974409D769A70B7D964196FF3FAC7AFA87CA72B7A47FC988A1FCB14 -CB01DFB19CCD5E54A8DBB8800C1016C862E8D066BCA2F6411F034745B87CFA2ED1D089C2FD60EAD7054ACE84309523112C2158B0771C54E228F44AC42BA58A12 -EFD9314D793D0E6B50656A487863A0F51F09D9E55CBEC6D3EB96BAD9BF43BE1AB9F7FFE32D74BA6B69E990FF1DCFEAC41925A39FD1B830B0BA584CE1EDD8B60E -8D7594C792F6CDD0389921F6FAD01B460CE2DE7FC7F54D6650BDB57BD702CD20A26254A6F29C94A5608162D3CF63D9F420C55BA433D707AA1E7727E1F761182A -65E613FD2A9D81C7E0BD7C477781DD82262277EF18B7FD8E1ECFBFC10760DC16A288C1559B09A6924DEC2A371716BF1D4B79237F98F8D5CC5DB98D6DD1508F0B -7B7D3FFE770F3EDBD0DB435991A7D64CD61A9D0268C2615BD5CCFB2FD0BE532298A5AB947C0478FE82289F5DA7B3D44C63A9B4A9EAEC98952D2982908862792C -B2A476F3D1FCBC2BAED90985B08298FEF23388EFE998DE34D41193A6D544AF193E2C4C0C1588672B2680DD2ED03FC8E5FB55B8AFF425F885C7E78E34F238DC1C -BC1AA1301E28C28B21697800760ADEEA0F6B1C58569DF05405FE5D9440D5750D8DDDC9AE08C1FC1CF0058B1880811BDCF18105F3B7EC2A194D6762346AAF8505 -A69C83426416DB684ACA9F54C5E915E4347BBB4B48F7891ED15599A7BEAB1A282B5DE13695900CB708DA4F118B7301C0C84BDA65CDC3821135CE00EE5C2F5406 -AEEE8F22C33B697DAFF85233D7D0247F432F4760527834DBF282B4FF368E3F169968AEBE267F646CD515D1EDCEDF7B13561F656A6E49BF1B01C2E63888436624 -DEC063938AEE36CBDC16ECFAC34058D9F9016E7B4C6B9364014267AEB7CB9F0A86BA9E7E4BA65278104035FE5A53FC10E37DA982FBE9E69A2B52D0F33A9D6F01 -6C3AE8F16F1CEA9793B634FD7BD022703F963241D8D0129E5E6FCBE604C9C22E951C81625C939D3EF1069E5DD9371F247D8D92F83EDB5D075C2CAEC8B6A60E06 -5673C51BEA0915C9A3F3925EF2EB75B7C13115E33EDB4C7AFEBBE5CB388D2D129C1D1FCE0C94A4A19159FC350A6A2938310910F41779FE09BAB5404CA6F58F16 -52CA342054AEA2E5DF626A56CD325D8C5415117874FD4775F126F111111FD703EE05972A733000DF75CD0070CFCA0120EC5682C0EA0A8399423015C4EDF94D17 -0400D275394C142826E8199F2693250F9702F9AA2115C8C1AE23A65EFA85482780C4F834176E1A34CFBA4288688C48F398C853C36D6D4C01882AE19788F7C31F -880063547278CB535E423C49081CBEDF93EF6244211025BCC4862DE37851860D54E4EB2CBB66A3739DEB8AB89A6F0F8AD00C1EBE65150B1413C18FB260DB5C21 -9DCD8AAF81A5CA73D00190445177B0FC593DEB2CE5D95397484B39690F5D0930FA740157FD577ADEDE98B0F05256EA430033822A8DE105DF76427ECDFDDCD722 -4DE273D8B3D7E4CF0D4C63A96C3E9E20225287C77B0D0D6EBA8A78FFD85DA30689EA8F575F8BEECEBE6E10A6D95551196FEF140814FE61EC092E492DC76CE523 -40D39A7C65C93A89E84C5A6C08AB2B620E37C47837B4B1A43F0BE892DBD4FA1B8D90F4528224FD66C09ED7E7AA48697B1289E014BF3032FC052AC6962A94DE2C -6FB35836889D28ACAE0C8485024B9D177A9785B42E235BE9EDEE5F1381D280012D34D80338BD1787AA1CDB013320776BC0DDB7E581FCEE6413FDEA189E806019 -690BB7B0090798873231DDE71C7A488239639E14C1F2D1A413C8E949F55C5715C0C7808A77FF97CF782F29769765216FD7ED681401913A0D10E554BC490C791F -0D1CBFF34D43BBCE501C557F8A104C560454016D8939359141F1E8A4DBAF5A1DF595F89232207CA69FBCB0A7B997B29AD37CBCBAB0BC0569475A2905C2E80614 -B3F29420B058C2D337A13A732BBA7647AF200FC6C623F9E8F3C8152FB16A512DC44B47D4900873BB77B5E8000FBF5C1366F38407BBD6A9F189A38C17BEB5540D -635597961DF1E3040BA73CE22803C0C16EE4FF500DFFD77B58526C41D65D841F401139519EC4C709EF144B2E8568BDE878D0822ADBAEA18CC76CEE42FB1DAC1E -B170A0452E5C2E3166EE4729E5D6F610B5668D6D8D4BBE44731975E493DCEF0E5211B2B3E1E2677270E451106167015F52AA00DB68B1DCC8300DEBEE21924620 -FF57064D5C793F5ECA58D8209E17350F7AFAB4943723E153BD0F4155136CCD039DD463712CB4E0E58A3E5E2C2CA41F5949840B5DAE969A711613CDF6345EA41F -030156C3676C5A639BD51F1494DE7A976BB3ABB589282AD28C7934463584FA28D74220393D76C974A1C3375D63D137544C072E9A36885E2D88088ED3757BE41F -70228CA760AE074CB8A7C1A1B308D8D6A04FF2714FD858ABD4CEE63A73EA5A2CD3F54BFA648043F49F31B5C7047D648412CC9C644E755812154DB8411EA81B12 -85F2234CF91D76BDFBCED72002D70BA79D10D28C5BF1D8B381C7BCA25433802478114EF4290DD6FCFC9B60F0366CDA32F90533224EC920B214AD0D989BCBA92F -C69A1B645874695E2ED17809C43A1A16327B75BCD5385D2E91E0002AFA435F0395590B02F85BD1C97778DA9916B6316B0AFE14A657DF60F4BA8A7EB8DF480D23 -B2F3173C1DFF0F2B7D57BAB698CDEF79695E1260B2F050BDAD9F4B1F2FB6140EE92281521DD93A448E4090DE02E6D3C70CAB27DCB4A460FA299632A949972A21 -50F81522EA6C6440DF21B43F91948B0D1EB4F398D3303452D51E3C356A5E5F06A9137CEEB28C5CFB4E78D9A439D8CA2213A0C8B3BAC6DE1B0C5687775DFB5621 -0611B90202EC1B6B626EC974328CFF5ED54C2F35E796538BE184DDD5D5553802ED810381AADD67407D422CE1E99F8FFF6826FD2D3602182C5E17790C199E730B -FD0E9B4365D61EDF5AC67A2016DD9B425FDE44924B98B8633F0858B45D70F21A515CF41905DE4B992DCA6787A63683C2F3E7E3E672EE18731D20F78831197105 -B921E895E54F25743449B13701F2630D8ED8AD1D0F868A018839462402F9F10591B696679110026557FC2CF94CF2F0FF356A61029C30755C87A7CBE9A358B021 -D487BC359EB75F7C16E0A75A62DA17C9227C5B19BD981E96A700606C7DFDFB2B35C12D56E58E7AD877C6CA8FFCEE588E619FAB23A3AC5D55C490DC7021D87E12 -B2B96812185A72FB528DC006E3FA967FB647F0F49D28E71A5B9B92A19F45ED036EF18427D9D5EEA2A82ABFA78D92085659803A84FEDACDBCEABEF92EF50A7F19 -52A4CD2B068E3FA3AF8477A8E63E5A09C3C0667C4C24092B4C5D0ECD318DD926AD2299B4A7418525AB6263656BD6C3582D08C24D140D0BFB2F21A21857B6181D -2302CAA1648AA75948168870E54FECDC08BBE6D74C04C4E716A06E048049730EB9A4815598FA98B528F5F0ADEBD21D58A176739117AF02A8399EED9AB20CEA27 -0CFFD7B4FA1F4E36C848637AE35B91B3756D8147CC0D752C17D811A97353EA2F68BD3790E4F398A8EC86B143F2864696B0286ECE316BB29FBC63A34FA9008A16 -FD41B143CF8889CB1EEA73DA3489AFC86EAED1830CA9BADAA7794E67EC8D1E096D3315709A1027FF9708AE52FAEDDC687E5955B2272121EBA994AD6124429611 -A2256A435569C45304669B0DBB75AB64DC9DC1644C718D9F0FEC3070F150F702084392250D56B9A4DA275DA37EE092516AC55991EA472780FD22A9D85F3A8916 -04A1D9DE4880E98B0A3CB18FB88B4B275096623CAE0547878E54009198A3EC0EAEC939151B92068CF5EAA9BB796B0178B3806B1BAC856EAA9CA19AA68B042209 -16DD61FEAF06A84F575FDEDEAB7CDC2A69F31528C96FC0B22AFC3C06838DDD063CA60449ACE56D17A45BB518CA0138EB7CE34143B45813620569159A9A02D912 -0A79AD1DF915424CDC00E6847602DA6A1E6CE7EA33C51118736888705A5FC71414194382547C456DC6596A3F417E815804F378536F1E9147E8C692260041481F -DA9ECA33A18EF8BC41783CF5D37CC4A09B849F9DED990B5642249405CAED77215D06B4F84CF3E828621DFE167495B83EF29746739F6A91AF6F20B02DDEBFFC24 -AF471335C960144A6F2281E91B4C2412086E873B7950AFA6546FC953D177621CBAC6E2EE6D789853EAF448337A8FE74991A15EAD93B4C8A688EAD2DF980D8317 -25EB94C7681AB5B0FAEF55A7ABB7658E4A4C3C0A171B961FD817282854B626139E2D9CAE9F9D4F45EAA6FB83C59981E047FBD6BECC2A96C2E6767D5D5E86D52B -4BC0D91E057E5653D4711E905ED3A17A5DF723368CDE4AA9FE50412A457C7A270E87AFBC5F69B99D2D0DDE6A191CAB9AFAE1C5AA4AF2AA5188FF070A36DB8004 -A6E014A84B1A6095640F732C7DCC9D971118A025EBAA0C23392EDA2B65ED5902E3118672AB26E4458E2701A45CA91F5C14FD27E2D023E904C4973D2915D80000 -A91EF53B9BCDE4A00100013F541A60AA51ADFA0AF763A4DADE460D3990ED7B26AC7F3D26FFA4B367C6475B51A085FF1DDAB22B3E46D15201AF3CBDEAD8140D19 -90038980E787532B32F5834E501637343C2C88CDAB35149C5346E9EB3203AB287C77026A8ABFB323BCDCCA5F10F6BBF2EEE6520D5D105AB5C55285076008CB29 -3EB5AB6733F624C4C502C953A0AD842E0376CFEBF2EAE9EBF10E0A7DCCCDE003FF183626FD186B2BDBEEBC7E0E3E23DF7220B830E10F51351A093BA9B2535019 -F538A8DF69D3A6AA71AEE7E92DC629E4438A9966741761DA361352BCB30F7A24C06B97013964A4B1FDA23D001F6525E4C8629EC0C948F7FB62A92CB6778AC725 -050A6E0B198B044A1C28F8803E22ED7B1D44906A776823FD3465A19C77FC311B0629B714015DCCE5D86CAE2905135C905E22DD9FFCE34FFFD08FF8EBA478522B -EEE5AB8D085F9288D2191B76A51496DBF267E6F021181727A5C19FA41A4FFF1389E78B0FF4DA66671BE3F4C2AD71FBF4B5A7F57081917270D50F66BF7E37361B -D5CA723A4DCCF28DA89633439C9BF504FF7FF00FCB0030B365800E39854EEB1013D78F7B74CB499C26D5B0B478B5D1C821DC61CEA61DE43BA21A4288E9DFAC06 -0FEEC46EDAD3F1178B3A2129D318570F9DD37452C29AE4732F1862A6C62D040D35FB37E74B92F281F78D8DCE7D6A8A58D2318407C36EA3DD8FE1815D59627604 -D022559EC38211451013E931E7AE465A03C04BAB8151022122042A6EFCE71B08A218F849C231EE0385B6ECF03146B1D7C53FA5B949006CC9A526C3A5C7C48E0D -F3459773DEB28BEAE30C1EA24FD0A7202CE31B6ECB539F2740AA31F9C958352D35F68009592798D4D3C406634EB425EF9B1247584F718EA7B2D8EC2CCF5CEB16 -234CAC28BFB929FED873DB9A4582E7323D474F31A9A508DB999A0D876E7D0421FFCD1E825D95B8DF0764477DA453BE48CC3FE24EEFF3DB29A985E08218EB020D -5EC0300E0A35054940ED3B4DC25583A653D38F605C31CB156D7571095164CC02FB3CC4F3791251FAB939AA07C82BE60DDAF466F7FF5F1CB53A827F25EEF0221F -5558725DB4162463C8D0B8C00508B86F11C881B1BDD7CE7CFF7B79977A51200787EB0B40859D2F8BDDFA5AD55532DFD0ABC97EE9A5C5ADDADBAA12CED22B8403 -26A7D07D40634C2AFE7783ABE4E7F36ED67995664B46EEFB6A975760E2570300869F4D6970AB1E3C249623A0BB6E0A4253138B3AF75C4BB12915167D1395D029 -7506A46C552D7EC76152CC8844FE31BFEAAE220F3FA4AD75AA90586DCB7996093A191C55573C7E51243F61CEFF0B50A2D4161D90F7C93A7080897AE7D70B5024 -2278663C01C28CFDDB9C28243B7B34DFD8F1F412DACBECDE194378D8E4BFDA2C0DCF0EE2A593267262811A1D32DE9FA5BE09798BDD4663BC286FB36DDA49E001 -23E6D3BBC09BBE8870C9EB5A375F930244D0DB02A508AC73A47195CBD2AB3A15F59240DE70881BA092D06FA814707354AC3BA0CE2A6073762D2AE1577CE48B19 -A2F8A39E0205D00B767331635C9547EB611D94BED7382DA59197497E9691382740331660698E8CFD6366026A1E7D4725001EED8458AF2EA14237598A8B6B3526 -0A2E9C3C1B871C11C324E4AB4A31134522343DEABC0F19B73F0DDEB8494EF50E583CDAF7FEA60A9BDA8532C2EE9A19FCA7F67ADFB8DBE4A3B5635497A04DBE2A -A6AEC2E9E234C3A2C5E23A4D89D76280E39CC7A83D02F10397E1882B3CA459055912E452BC9D3A3411ED55A61AE6B1218857D0B40A1AE3621F11039419C1D21D -D96E1E24ACD2637006F6FDF24D83D046811BBD7F0205ACAA78C2D644D409BA14D6CE474B030B767F86BDC4B66CFBC73A70943A8E37C3BE7F433C398E6BD69E00 -6F28812D1967432997D40123B21855732991EA0E21F81B7F695A382CA73DB32C37EAA5CAB156DDE3DFD17D1E173971E71871EBBA91E08B33ED5D4D80248BCC04 -48FF2DA69E380169B5B96BA9E1443E6B623402150DDB7BEC2E28BB4F4EDFD92474E04C5A5253458C832ED383CEF119D66DD7B9348A159AE0F5FA32663C8EBA03 -AC9EF8FD747BD9B5D8C4A74D2DD825E30DA97B2965F9BEBB02491847B64E0311A2856878268FABA38BB8BF545E7AAF38F016503B800E05A16FF3C415BB6D1926 -53B5CAF7C0125E6CC39210746679A0AB799D93C509750D19B7F7513E78FA980766E800BADFB9B80D6DB872A83A93857B1C0789F987FE4929699B68081DE9F412 -5508CC9A13920ED7E205AD1143A8209DE0AC1BE9E96D4D20BD768BBA94F9BE237BC42DC831405CF84FCB9A1080BF3A3833E02299CF91B274A2A988B0DE6E3015 -A859597115EBD2C3E0223ED19E4EB6BE50B7F8BF0A654F857D96D57345435905C689CDEC247E3BCDE7FF35E4E31DC6C1AD4437D814E55F2D0E5F50711049D206 -AE8CADF29AD7152BB48BDE3CFDB7111B6A06D56956A8D2DBE43AE2AAEC1F1B02FA271BF3ED1343E1E4E0BA0E31421AADC0957E86DCBD5CE57C01F520075D982B -B4F4689A8F2ACC5E5ADE7DA6193D56F6F6BE8373CF400582C58A2AEBC361B12298869D18F0434EA4D8DB3D461FD0089501F04337F9BCB2BA43D835E6C2601310 -79242A55F96ED8ED6C4311A5E5E6EC1698260895B64FBCDC156EC6C65F10451E58DEDFE626B7E0BDD86F1681BFFB2A837A1B249DAE275709241CEC3B46ABE323 -65B8AE5895A83C8DDF0E2ADEBEA905B58E0648F6121EDC9111D3A50FF6E868069069F842946091CDBFF58E73D5F571B49B53AF864387B23E808DE3CE51A36C1B -B4F2E07E14737E7172029166136F8FEDB8380CD000E6585FC7CBEED9796C6C0AFDEFD39DE7750A23F5E9746C6AB6019124DDF077ED6EA91CEF3157768D831C1C -61428A9B7A50AC424ACF9EDDA41AB55089555592D89D6BE6C8FE494CA8A3FE0DB3627365144B0D5557725FECAADE861905FB3E138EF85AC22E4B35D027658F04 -F6B3BBA76A46BBFA243D5435D1D72A8E861024A876E55E0FE8E94732CEC026164EF005A77F62C5DF855B851EBD36BC6B7E857CF1340507F15BFC2800EACF6F0E -7AEDB36856952715C28C8C6C17FB66C25A053484622EF1E5525A8C730B916818AC206620B115C8BB58A7B815D4B638B9CCB119ADCA7A81B265C9A866379E991A -822C8E9F7E8F8B1B867A5CA2376A77F67EC2F9A94478A9D23319B20E7C041105D14A427CD4645B2A5607EA77E931BC1A6FE362AEBCAA3CEAECE0C48FA16E630E -31EA42FEBA8EB96EEBF7738DD73926683B00F12A4D124AA296A32DF8A82EB42396310E163F13C058AFC077FD22F3E5FF0DA8D46837495E4DC02C2A4D9C90C20C -2EA065D9E0130F856B5DC6C85736A765BD5B30FD995CB859FC320509F296F410CDA921FA3FA1773D0F128178F4FC7FB92C2F07F1D0D50B7930A40D6B9FFE6713 -15B1C2943A2176EEB7D08FE02FF18A4094CB34082A4DB3440E7CFE3AC5098813A5EA4B612F0E4BE103D3A0A45CE53D2B98BCC4D6664ECF5F864FDDB7F33C1F00 -428D191B695E8E85F85F215DCE15DB3CC758273967B19219D879389645DF8F145340A854E244630B324233B129AED906712969A364CEDE8D51B09394B343900E -B69712323A314B33DE950C61DE64599AF9D40B587D14863293BF762CC3A7FF1C0C7C1621DD161CF9C2F3BC4C76CA26E65B8B3B53B52E6D1FCA7F4E9836B06903 -04A3DA9E06CE1AD96A952D6FDC4FFDDE565907041C21D8CCC1876DBEFDC83F1FFD91317F81F8E6963C45048CECE17584729B252A444DDB6CEF640C48FF0F1F0D -45FE5DAA8CB7F93B6593E5A0D7F861FDB8F4E8DE671048FE5B17B570E1513509F79477B0791169C32B94241CD3DAE6B72810AEF6124D659A9FEF72B192F7C605 -9C89C0395C2A5BB1B7BD96364146654C6E1F092ECB8A34020778DE36ABE81D276126E84A40F5F1095FE28675C3FDC85968C5E85B3287862B19CF320FF22F8D24 -C63665779388FA1B0554BDF034B8432A7318B8E9B090F6154424A8895731EF2C619A682071CFB54EEEBD508CDE1DA9F8BC79FF7AA54D915333D321F2C16B4929 -9CA337D91067B60983670210F4A2A598B9E7E29FA77709B86FA472FC9DE39609017163F277C9B4B9FE8ED52F59B31D096131A3DB6164AD32AC1E95EE5D853206 -12C1714FF3A927136B525E13FC6C0EF007C0FE6542B51E3A1A26748360521718F79FBD0B900F7A38018CFE4A25E484DEF169B39ACDF8EFC620088AF269E7E214 -F3B3FCBA4E152D32FACDE273E758C172A4BD7A6BA4226AC9BC639DFDBD6C4D184898BD90433378AF3E55F5D3352420566D38327B61F080C7279FCD85D9F7CE09 -AA2B37662F059C5C907BEED541E0BED9B3E685EFEAD80F9D724BDB1391FCC100CCF4D5C032D44DD9E3D8AC6CDA007E8532FA80EC00E9D801F25939171098570F -BBE356448205633EF928711C68964105F515ECAC374DDCB8415EFFA12E393211B123130B51067E4BDB10F31DD9E4FEB63162C70ED0AFD93CD834CCC3F3F0A813 -58B1834BD9C133799A67056F4E637754EF35FC289035C4118CC23A762B18280DDDFCA3F3593321C93E33B8D9515DE81B3B918AC080466172093927FB69FFF900 -35F753281B34FB83A304D1BC9513D2F12AF4325320B39108D96B0B94971DA90658D46797F4FD0F2F3F104E4D81F86251141A798B543844B665A9FBC868252523 -A055920CD65BDB322C31F30133A4107EAC66513EAAAE2D8DF7A33C672FC456138591F04FBAC1E32D424DB4716DDE800FAADAC79DEA17B3EE1EAFA4EB1796F101 -C997C909D59B127B5709F6B5753CBD4D49C217F76E02D8F7943F72F827904E2892032ADFD676E44A3137A4F7A36CECCE7B33F401A9E3AD97D74E5A6132686026 -8E5CDA53EC2D17C6696E74362F3B6D841204C41674E8ED00A410BAB75D92AA088E45225ECDD9A4212EF2E43F3A8A41E28320D10F886624285BDA08BE88445804 -6B8A3C6EA9B9B13200302D02D213410BA11B4FD5F2ED2241225C7E86C2781F1AF16E533839FB02D28132E18A2FF2FF62513005249A0FB4107A05C4F131B5A003 -AFF984C0A8F27229455E3ABFDA0A110DB712D99F4488A0A0177103EEE86BC90254B262FAD86B1D61126C8CE82F6E8A3E23A632E255E12BBAA95A7BFBA007E417 -92780C8D0A809BABAB343EFB1897BE050A316A6F827A709847A6F19F44B9DA2621AFE7D72C2F8DDE6F16D74FE119BE2FD5D136E8F13CA4B8967DA5CA1514CB1E -2503F105EE789BE33FDF44DE93C1D39887C7693E0080C68A3AE31F7F64D8E4113088CD9A4DF42D22899A2F493A068190D15C570FC1B38CC0BC14F18586A95D0E -E7017D488EE91B64C3442120126CB8F0F6C22AB0352F87AF9CD75558C62D5A032FB9407014AA2777B69978C11ABCE5F530E393B11087027D2DDBC57A7610F507 -3EBD0D3D3AF752581DA2E67F0BE4DE27AC0112820880756BEFA9D3640650982CE1BCB72AAA2D6961247B59052634AE18B89325ABCD561190F4EDE07E8E4C9008 -B4DE24187AF1FF41FFB8FBE418A4FE973B36A3C9DCD026336F2A9E1BE8FFCC0623EA3ABF3260402B81E23722A6BD32DA9697668522E053A619F28902A610BD2D -2C211B2A6DD48BA71BE33BA87BF7F7FF174D36731202040FAAEDD2E8D2B67427AF21E2F4173C68D55F88A526CC19F7788561E1E5F3ADD3C0913E1B67C847B005 -B3E349DE533A0AE74BF8BA131400980C8CB9CA1F237DD43DA4F1FDA3A812171157926F7E3A85787B55D8EDCE4326E324E9A4B1B7593F3BEB8D6A18B759742C26 -B0EB371F2E851291EEF43EAA6D6EE3FDC1A929314982D7A81518C9F15603942C4AA2B268189677BC3826FC2BCDFDC26182A3F263C45DD301BC8E2A217FBB3023 -99A9F377BB559A2A2BD0D71277CF5DCC24332DBD7CFAEE3AE16412DB47206C154E5B3D489222D8CCD6B58B54797884F6E5454921467CE868E50B795369CB7915 -66DC80CFCEB24C47CFF8888890F469E77376C9628C7859676F1763C3CDB3FA06A722F9435866364CA8AE42D453C3272D87C4CD611DC6248DAB762B2EDD2F881B -7C296EF5201F2D2949A749737ABC81D3B867BCA3BA87BD8976AB3B2CE136982F4D38448C1BBF6311FE1A1DBCB94F992DAABA04F7F9310104E17E6B181EA83806 -411972720F2335DCCE8B540FCBF92E85BE72A7B04D0FAAAA35EBBC9018A3B0122C87ED998715C027BFE5D06EDE3CA930E1C4B7199A728AEF5AA31818F6C05F13 -AC4A459495B5CFD1D195F69FEC30F759A7A96E07D5C7A6053BD4BC62AFA31C18A387EFB6CBC8351EA402BAFD0386837C67BF22772F366DAC7599F1E0796F910C -A2A461421D959BCD38FF09E3E0B3EB1CE78C37382405F94775CA598A2959062BDA77F04A8F74DB960AF110D6304E1D8CF9D4B91D8093761A6305CC5686B77113 -233C887D39B48AB784EF9141427A25103BEEFC12A5DE25256D3A3E50F8934606B07A67E5DDC8A4F5BFF7A495B0D53865559C3BCD0C97A7D116799E42C57FC32B -3728406DD144EDF52728EB317DEC9D85C2F86627A3ED8923019D5EDD1FB15E1A24419073B2D5BF9A06D655DDA4AB9F114D1A3345BE91C7AB5E5733762FE05427 -48AA29BAAE203C35410A1F8AB61D5485561695E4C5169F9DEDBB07A49F79AB0A2A559B0D714AD02DAACE41D94303ED39C1052C637439E63362C9D973D5B8DD1D -2682E08D5DED4842883B782EFBB1837535A437C1F12066C3E87AE9EED4B4070F90FE9ABF79DC281DB0DE5A72E40A07B7CCA5476583C6E887928246D75294B113 -0DF59336C5AF301D943677E5939DEC569715006E1C078F7F552BD5C0C6D80205B0E424F0B1E5709AD57F38A983D4133CD098B88889B5EDA1E7A65FF839DF332A -25B09E1DCF64A78D41F42E3417E67B6445CAF431B5CFC2E0638ED7787280301C30FB197A5509A2EE59214E125447879B89DD90B97FC388E5307881BBE7104200 -E76BC2A185EE289637FE790FB6BC3DE5C389D75BC028087F7B0809B9BCD7852F24E3F5E19C6CBE2CF359B3011AD28B9D296DCC7BEBC2C2FD0226F2D1B8CBAF01 -55FDB6A8F9F0355ACF4F7186DCE1DFC90976F2E290BD5927A08AB78BBA623325F1AFE8BAB2E49A70EB157C6AA9E443CE791B7C612237F119E32B89B60299DB23 -2B0F49AEE970C48C24D22186B0219425342A9ADE72CC2944CFABF7E1FCABD414335DD7D0E961868CEC606B512C98BC363D3564E30AA8CAE649D16FDB5504C007 -388681E1AFC08D384372C56390D2D29AF77BB3A780E41745051B70FDE24D742AC3B3AB5F05BF3E7B2E4EBBD22BEE247838CF2C277868B8ABF6926EE50CF1BA27 -8C8E745A17A39F1BFD0A91CDECEFF2BCE6475F9D5589D4A7511435293CB7882A11ECAE252860EB5E98280106D112AF1BFC0CD92A22034962997D8F5C9569770D -4546948385AB5D110CF48C6974A6013024F6B6F470692C57A36BC4BA540E2419C16136F95F739E335CCF247A89E5A713400180BB5F1D8BF2C6BB259D69EDD207 -A6DB172BF546DBBD4CF72079980F109F4BE3340D96CA2437F15C51E1062A920BAAD2C6F80B70628476FB8A875A1ECDE93B0A65579409BE7F7DFAFADD459F5919 -29B1DFC1C0C00569BBF93376606C58A4DA76F37F3016B97F01093001B1D89B03E0538498054DDAAF155C41EB94DB856CCA1814D75336C6D260B600E7F499BA0A -14776F3BB450431D0B3FA803B2A1AC7EAF6F440BC2DB4E877A18F798CF564310FE308C33B6ED176D6A1A48D6BADC39B5BD18560AEED0BA26F78D1BDC70DEE92C -2FD30E435041477281FAC6469C4967A235C4D64ECA1D9E579E41A53921291912CDC4562A8914BB2C1BA9C26B3915D8F07D363591E8F0633802FED10014E93005 -3C79B3B1DF69E2CABC72918D87157777ACF79791846B7194AD7A09EAD3BCBD06E4CE5625C57BB78B57D1AFE9A45E6041728BFE8A66895E85CA437466D373E40A -F14B268419CB6FAFED4DA00F883116C192042184883E9165C0E91102F1F15E102FBA8BC097AFA1458296AA07F9660CFC2055673588C0E85F96BBB465F25D532D -F231FEEE172DB7E8063CD4CF0E91FAAF5EFAA98775E1303BDB13477C95CBDE27A1945D45B586870E432A2BE780952AC4ACB004AC110C717C182D291186727D04 -5FDF92FA37DE827C743F904BDDC42ACF4CB0A0C175F3A66CB16F7793D63ADB08401E09ACC1FC553788CD5D7E83E486BF4B9F47C36994BC6F3C439CBD56239D18 -3E5A3D8536049CD70E1BBF6C0F10D8502B53E4DF4AFA5973EFD372C72EA16E073C54A4BB4B23808216A4AF21B6B27446995C704348C23F69BFBE5B8E36076608 -71896A39AA5690FE0581CBDD1777F9C904B2E2FFCB78B92D15422E5F1C517F2664C50FBAF7C62B789BB678313D5C9A321A838F33894AD515707C376374E6D32D -0A64945DC6A42815ED01B373E9232E241969711EE9BE46787E401F83C2D0A7243D04DADAD96BD8890DD820905CD8D25B79D207580B85151CA9448FAE70E4D621 -238D528BC401923AF6682086B114117A958B5F3D97B2A3B4F7B416DC9AD8CD1691405CBB84EF4680D8F54724DFE45F65E7117D9FC44CDA61C2885418FE95082F -AFE0261E28BE1E5D0A5033CC960893B5E76EDA29AC5E281F0440FCF17CA0D40B04161778C01E198446EC53DD281D46DDE42EAFB28A7C32A814D607D4D8B93301 -0CADC4E86647D735C4BBE1382D93C01B9A1CED978568D1BA964E650B7587AE007BE3E67444EC454BD5AEF7D5D73E7CD6B422EDCEF7775002CE50B3A521B1ED07 -5D6048C1D33D187F208B1E35E3C2D8E66A811DC93532E97763256742939C780D603DF1DBE289F9B2BD6677D082C4B7F35618E38310B36F6CA6FF608A94FAD90F -9315E900955E73B4BBC3FD6F08F1B38796CB76679588FF49462F5770AD168814EF73348BB394A7BB692BB55D0C26D25E61A4ECECB1B79164C7A800E75EE5E918 -F4B2621B3278F2BFB60A57D88E493CDD6017950079AEDAAB4C160996504A6A1FE836AC831901DA117607ABF7FC8B99C16BE5A62EE8474FE49A6F8623533A7605 -DE0AF61A0C9F55A3263B17DCE33AF398F6EFAEF2771FC4815B8B862ADED15624D2494C6847BBFDF3EC748EB21B2357F52A17CE6FC0E1484F819DB619E170590F -1D0C7DF9E7B32DBC6B73FABD1FF453F9D9C3460AE8422EBB0F30AB7A0138C12521B69B59E8E1A9D6E8E0F163FB074781F9EA980004331C3BE3D44B6402E8DA06 -C3786F304CF43224394E134654BD22EAE2D81F5E1B235105DA6CF3F37946490FC82D4FF272AD27E2A574354E4F76EEAB1EF23812F445C5C0F46FFEC42F061407 -82A4FCA068DB512DAB25D4BF0355CDAAB919DAC72F68D96D51AB9E0E6B15D2178CB3B05FE883BD1709262D9931CF3698AD218DD61007F4D6DE73339B5687060D -F3577F1E97900A5876D9BE98ADA663DBC593549D5003F1CD87F48EDAD1C22D2F93406B6A0EB3023B81D46497B9D55B398D825377E7F3D94E84443381AF1BCD2A -6FA387A9F6BFC3502DBC588D506463548045B5510928A8A187ABCCAF40564207CE579303DB6CB73BB4E5C8A6770505D37C7539674F25F9CF8879A01C0013321A -27985C2E39CE13EA01AD3936691A24251017884A91B21AA4D6621937EF501700FB10C0CF62A2F97BD25D1D6EA24360FD25F7B2D5A3B09BC92A5FA70AFFF95225 -A979FA2329FD8132EAC47A15BD22D1669C84E653D9A8D44D9CAF10CE43377620991F2AD9C0EC4464BBCEC958D21863E1549D403A191CA66997CFD82A10FAD119 -6C95C1731D995A4DBE6105AE8FCB6028C86231F4B9214787C5F478D5CCF7412986C0164BE1880F423E6E10E56DE460FA071FD1E711A2AB0F9F30734DE3BBFC2B -AB62AEC322DA8F9F9D557DF6E8B1B412472FA339E5F02C7406D3B5BC4F260A1294596A766F3D789E2D76A2ED2B00C837CAB773846A78323AF1E2854C7297A502 -B3FBB959BE8AE1A742516B754FA0A59A1BF92ED465B1ABD48256D10ED35907178B657F770474F57E35A5D10C1D081EFAEC71610BE201CC4E308295292EE32A07 -8338EFD8F3A21635FA6EF167EBE250F641A137B6C3A6FF9D93446D9495AFB9248D2B1AFC8CE033D992C1EAC2E4B8D3DEEAE34C8E82B2181A65F15DC97EAD1E20 -DA9E874CA516F60922D546F9C09027A732E1FAB147070133BDF285A582C0C80F38FBC1F5A5D1C1603DFACEC25EC52D1B63A1FDD38A3A456BC2D7C40CA7D6352C -6EFC27DBBC7866D274C13B1B1E55642725F6D55DAD578ED58E9BAA4844E98613A265DBDC8100FF3EBA968635D384D02801C845068701DEBFF4F5776C0E0BB608 -8CED9D5D042ECC859DA026FDF0B422046CB7F0DF41B080B5915B32039C7B5C0AF7C49F9DCE58F4725D7EA015978580778F8590AE9E9D2FE028C296F477D19911 -D9EE02CF39493768D7B4A94ADA0CBE5DE5CA587DA618DD7FEAC0A819063898002CBC7847218CF98A24098CF3BD110FECC08D050C7B5D5E9A1F7AB16435CBF42E -CCB65E0B68316308AAA4E729BB61DB2EB45F769A9345601A30C5C55D827A190F8FE30AB133B23B8AC3C247B05D71548344047D5976A6B9E944FB09336A51512E -154EC072AF8B20C8AAC36790DF09A79C6B949BA4A645E7ECA627F753B4A2C02716AA123FE1FE191D0F925DE7D4CF6B408B53EAE78D9119CF8E0E28E049EAB12C -91DCFC537C0356557855F28F322D48D14A812910EB7B7B8D0C018557EEB27B2F7738F76BECA22DC2FB97A6A0FB61D54DB6630CA14C14F1558FABEE028004DD2A -7A505668C558E862E608C1BC4747E80819686B89D952A8170D03BB478A28A40BD9ED2512C013EF26DFBA0B51D9BB02C699364A5B72DA01DB5D2139215DF9EB10 -0F6C386164C3D9FAB1BC9BDFABABE001530FE120158C9D5440F360EDDC214A20B32E5254FF5E614319CE9D9992C58159CC29A9024A61552A658E484F14212B1A -E227CBD6A1F3D3E91107896F6FE72CC91762007AA4F71F8F9C09A24A1199DD29FB7A4E0D56920F78636E95E9CEA44B3A35D710D273267BF2A1DC8865FF242506 -2E3B5A659A5CE93D77484D00E4087A649FD1B525BC7E2A045789D17B33C7BB08D9EAD5B1DE1093BD48F760F9DAEC196233F223DA1ABEB17A45ED315771B0DC1F -3B8FB5DFA765D06D5E6F07A2624FF61CF6CCFDFB2FE800F4137B220A2E8C261B70336CD21C87612835C665A1830DD8A1DEAADDA5EF0434C3E3D470BC06F5D300 -8176E066EFBA0D81218C95F867B6C6E716699372CD10B5B65DB2CF6F84BCAC13CBDC7D02211B2761D6129D40B5F6CD977EA3157BC5E4145D9B51A87E7340BF0D -B122EF89C971AD6683F5A98889CAEA4C1AB38627EA3696D6FD9E8204DAC3BD1CC6328E25737E7DB16C4A6F53F38D154E44C8550AABB47D08092B74DA2088090B -78DAA9148A25334B1BA5BC81190EAB283C0AC742EF11248DBD053434E63F3B0341E275964D12DCC6107221B5CE318C38DD143A5ECF7758769BE1519B985D8E26 -270263EB580D9EE127CE94B44CA844627851E851DC4459AED8246E8F8BD2D82658048D92996AD2C379F0A26C54D7AB64C068D431922BCC32BF1EC3FB14075630 -59D852925221D8D0A59A48D87341762A1DF43DFBAE39D18A922774EEA6A72D305DFD5C15BE14BC3F7EF5AAC172EBB5E432BEDA21693C8E90F162F6704C4ECA29 -323A3396215BD91D7C67399BD8E2B19C3F53EB147406C43211B7C13B37C7040459F2080226ACF159BE4CA1C12587EA1A9B18D792C172C2FE025C69C52002EE1A -ECC7CC97F14115E71B9AA4A275CFEB99306055FF9FD660E09C7B06BDF7D7C203FE655B3E1A606B0F39C0362DE439C14577C8EC2F00CE1F7C5ACD746D2A13850C -56B62864F5DBE2D406B106B6A6F4B31F2AF51ED91D0C12147DC165B0A2D3DC16B2D290AE8CC3E0B2E4F4A78098BB10E449F0D91F96D4B807764CC518076CB92B -C638153E7A88DF4153043D58E353AFF550D2980A2C320CAF7B5B1F4FF01F430F2AC4673C98976554FDE9B3009AB90BA1DE78A0DF19E2A6A62AE6BC69CD073B21 -7A67C74C1DCA9BE41A5A83628218EB4B7B14BF53B088A66FE9F237EF1EB34D2216367C20B79782C7B633EB41922F00E83611B487D04093AEFDED034BC735AB28 -8CAAD687543D4B7C44D0A723F25FB679D96695D01C25AC9AC543DCE6FF2A6908366CF7C231212FD169BC15C64D208B80559B8401FCED34FB75C9403CAC304005 -11E272A48991937649DB576A011BC63AACEAF37B393D03F4AA6D8103C541BE139256DB2AC1CD90C0A91F7555FD6E36C97E04327A9E736ADB59A48760CAFC680C -D6AD012B44F061858125AD603EE4A58A38DB0F918387BD44248955E5F0F7A011CC75E985450B976A30375D21CB6B385896CE639B2AD23C33F2343D30240B9D16 -A2559F597790DE0C93EB7725E7676894D1C88A80BD60AD1A3BFA066C6B98360054C304F4AF5CD02EB50D62FB6E1E89E1C6B45361A2C98406B9C8780FE770692F -AD66FCDF3A67AB7F6CF43FA9DFDECED532D1D92D67D4137AB53A982EAB0D5D1949D0B4163F73879BE6EA30282D96CBC9FF0E7E8006D20D972D644A2ADEF8C903 -0318A60093272EC3643B82417BDABB929A17E725918026159AB8BC0C67C86A2AE0C2F42A5BD300A73D29DD63C432C55C5C50F6EC5F9E45E6985F5F61F413F92C -AE541CF10B5D5B565DC8478843180E1B05EF7752C93726ED4F12EA772939310CA1137ADE56274DF5FDEBDB924AB1F1D8BCFEDF4D1DE0AB89A30E4D9FC7A6C51B -D9ABB770E4D375DE8A9BBB4CBFC7324E63F55216DFA677D60CE713A1CCF786229AA1402F6E4A77884485EAEEA023ACD3866C1DBD2EFF85A26264CDFCA0099B15 -724983D7B39573122D6873892FE15669B3C75272CEDF46510A83AF3F1CA2860A59BD50558407953B6194052109E7734488D13218EC69AA11767C1AA1F4A11C13 -20D8E18B2127A19C3B8C369CD06596F901502EA485C8D076031EBCFB176E5405DEA74D0265606F108273EB188AA4996006E8F50F9904869B5443247AA8DC3100 -FC9B121898D213648F005F274A9087B6C54771CA54DBF622DC176E4652BC86020CD497CA3841F86C6E520D7D05DB699F1A40D51C8348E40FDAC06B075608C709 -2DD5FAA6EE0AA7DD37042D150299BED23AA46C63E459ADFC5A4174DD0E1AAB044EB7455880FA104841F9BF7015A8911F3CA833669ABCB426F7411B12B2043914 -E8C03BB7D5218678657AE9EAC93D333227767DF1115DEE0BAB6991EC1E47FA23714EBEB61C36DDE350F2DDEDF3B7C890495199AC8F8E19BB61EC87FE25A9B41E -3FD952DA6A37FFB792E352256CCD0B381A4A949DFCF24F877A7390427CBE612E993B13D99CA4289044F03037B019554ADEBAB263D617C791E42BC9D8C09CEB1B -2707C2915B7BE9AA958018BC09DC267C05AEB06D2DE3FE21A26FBFCF0BD02600F9E0568E5A5168354C343F3AEF83AAC17D513889F82044BFAA6E232A9FCEE316 -061340BA0F2FCCBBDEBBC2D04614DFD007860C3853C47D646DBDCBA0BD690A01CDC2C5ACC237CD68B1144E0523B1B9041AB0EF6EF72EA63F1297F017BF6F2119 -58646298AC95D4141A20FF7990884447B542A6BB345D7D043E9053A5511B9E08C0051D44134E56BEC7DC0D61A703B6760FB06BF0F1A6D2DDF8BB9C970389AE1B -EE362E9B83577571004653FD8997B1398D7199FEB0DF66B1B31EF1D77108E90B2AFE99D67A05FD595693D95329A4EB20BB59A260B7F082290BC2C01F8F1CF90F -14C6AA499F5BE79AEFFD747EAB2E140B600DA705938CA66DB30C3389E985DF2939F4BE03353B9D9CF3820C8680CA2B08CD3F1F585FEB4A2AE9529044764FD827 -C6E88D3A14C09FF7951D54A9228F83EA85AB0ED2DEA1938F199C0BCB5B07330C80DC9BE019C80DA47A483C430956DA6E03BDE9B9195D3684B25B0D5810473D2F -571C476C2A82220A9589C0C825935DB64D4267EC2669CD215701EF3F9686E01C40DA13EC682D4F92F22DA937E95F671E79011CC4CF25660B87BE59A883962717 -7509E0EDB3E15936B0140AC018F694CF231AB491CF919DEA32F9AF3D9A881823FE7A353FA86042BF63739371A3266FE81E146791C6A8F83B50EDA265FAD7802C -75BD2AECEEE60FD94E052476E598EA792971E1457C5A85D20DE3E41C600B17270BD921187B0581094D3C64C1D7C316C18507DA5D44EED05B5D3340887894A910 -614F34C019E641EA464A0C5A82152535A396EF25853FBD05773A857E99599B175ABF1007223573220B7A3660242CFF28B2654078DCC8452D28FB423124B74B27 -DB893860A172D70CA89BA05DB6797BAA24E3606AEC3EFB745169397248EE3306D31E97D4141E8A44A62BBDD89F5FD91424D6FF5E78121528AE096A7FEC531A0B -D837BD8F68A1EA84234C51BDD65F28F7CC5BC7B8557CC8F82AF7C62A249AC7224EFCBF0078E0AF01494B7C73694CEB913968293BBFF25E269A28A13757FD420B -001E8DDEE7E883CF5536C0659CD215387B79EFF08E2C4021D20F195479B86C105502C3FCFE3879C58B353A3AFE0CDCFFB5CC9F36D4858D16860DD19978524B1E -09FC2370DEE0655082B6D257B77B36B8A1C5863A05E135FB9ADBB897196C251DA9F62F2641F1DAE95CD3BBC5B9686DC61771F2CB0EAE61D401EB3FD0E0168C07 -DF0ACFB41E42D56DBDD90E36883842E631E06217C18E2C296BE73326BA55B42FED1609101789B8548EBEA38A15A221E1697F7297EBE7E55E67A228CB0CAB411A -69A99CF9F580EE8E46962472C6C33A775F8E5A1488E7F00CD7CA775A617BBE126E83C3A7C6AA7D43EB9F462A90952AE3BED0C18CD41A6B494057F55E54767F07 -9378977DACB51873D29037F32D8A2D0B0F0958543EB379D930B191DF5FCE0C187536B19835A70A8A432D773E8BAA18957923B6F33306F7662C1BA1A9FAB9E005 -32B943CB87DE8C78E2F4B1DBE0643C55CB65E4D5CA7CC135F1FA80D4B18EFB047710A4CF4234F0C4D0EA959D0E5BF547BF6C72A13E4E148FEE685DB27CF8471C -14DA81A3E1854EA8FA9F4C1195FAEBD30B8D984CCACCB930371021DDFB4B0E17869753B901D9FAC7550D9CEFAA5B44F548B7AE8E5D47F23756C591E24A32592A -BEAD5FDD246C6F1A7AB90BAEA140CAA8C56BAF683DD6C529841845F9451F790446F0D95E0160B3071E52D445DB4D32D81A54760B4A79EB46C7B30D39C8EC9811 -81958541E4B6606852E2B2C3A15F0A3582ED2BF0FD532728B8B0F29554EC51094B49A26A0A1459AE8243FEF31CFCEBA68772B012EC2C591D8C60ABA374DA4605 -FC1E468F5ADA86115555BD4EF8B0DD5983E7B745F119A2057580B00CC0BAA3143C864C162F992619FCAF43F534A081B408C4FE4BF2AA5C07AF1A6106C5225B1C -9749D8ACA396BF7DD5D15297F9CFCFECBD6CCC244E5B9CA6A6477A9DC194532E7C4AF2372F6C2D515BE9CFC7F76AFFBF769B39DE5DB57FD3505ADB3CFF68D008 -5A3323AC9D34B37842D9249EA3988F68F6E0BE3AB29A3E2EA2F58D9BC917E02020CF5B474C3CA88E6BF3415CA8CA4CCC0B0A723EECD5291BA86AD4088AB34921 -F79BF0AE53AC5A95D690587A2F5ADB905E0CE08D5FA139D717DF85D081A79F054718EEEE30BD0FFFFA8D085D9F0FB1C055173F2EC3EE2EF3EF3674AFB37E5C02 -60CFC8C51E2C4EB241049BE8D2F70591604EC9814D1F9DFD9CFA5E143E988903B33C0F4F55F766121DF87DFFEA8E9D14846B52F8649B064D2E87252EF6E0570A -385042C23CF4EAB70AAAFF79A64504405021B894E79C667C740B371DE0225D235AEC72477762E1A770CCCC19AC582E3BC58301EABA426AFEF25F6E71B460B824 -11CC806D37EB9C5ACD31FA17598D1E215622210E510538582CBED6DA1F09652BDA536109F4A954C72E05EBDB4B1C2F250392A71CB66FF06973FA3D11BC89A323 -1591226E6A351D8868F94531BD7425302AFFF7A5FE57BE7BC9E14DA05306DD03FF0A0769D8BA16070B5D4B5452547445219A42E45D0A2D9B3B694DE6E2B7BC0E -C066AD38C874CF7A6C8D8DAF4E0451C55B9BE4AA8AFA6EB879D32CE807DD4124AE7C518F6B1A167BA81FF02884C06A350FB8B634BCFE4D40F72981E3939B6301 -FE5BA31E6CA79FD6A77FF8014FBC6B7D5048226C433E75741B736B803EB281186811A04C4F23258AD9F3AFDF0475DE965BCDB1B0EDE738D8EDE1EE20892A0416 -E5E7ECD402AAD649614008A8A660E6F08F050D605DDA6092E91CB5021DBE4E28D73CC706E5C4E4980EC6697E7F5427F94C0BD033B99CB4A967C4DB0A1EFE8B29 -E6C75EB4F9A7C7FE5C44AD8D7DF394535B98E50D96D934ACE67502903140B11265F303A26F8FA13545D87B51268D80F3E5098304C20D506F81E8064D4F281315 -F3AC73807F9F8756029DE59247EC4CE85AB700B88A38C1B6DC19E53FC07D6D09AC826E096D0BC97622C4AEDF17DF39CB6E7140F753F4B88CDDF358A8321BC412 -3F07BE324FAFC3D6E860C8570FECA9B14799F7988768034D7D6104D80D5B7B0AE6A15EB14C6A2859AE92BC1CE83C7958140FFE3981551B45E636B6BC1CF20C21 -29D099C6A5E85F789405797E107796310BEC84AFAFF267A25A352811E277F30DE76DE969C9FE482E9CA92501E2A85B6E33C322174C05BB8C092F578E5DD44F25 -9B1A19881BEF970F5A36FFDC8DA76DD447E15E1350A4FC2F015A0FC174592102E70BC438D16B95E191E2A0AC24BB753A4C8AB1FAFD7611E5184D163ACFB1CA24 -45DCC66E359B36A2816239FDE43AA43D665C64EDE5C803ED271D4EFFB1653F0CFA9E821DEC92A38D9AB26B7CC788EA63125A0E506E39E5424F4118966333732D -45D3E905E8F4928C508C538FEBF267CF273B9E8B68E49974A27FF86E34885C1D95DD898F19991326470732A6CB03F0FF1569FCF1BC75E28445BACCB5B3488D15 -05ABAAED613FA4BFABA504F45590C0E44907BF2CA3B697999ED89660280E4E0A3158A7ACC1F5F55A9F933994288537E25CF2B36410499A2D961675002B095B0D -8E83FB6E1782CC6E6BB23E87D837B939B57A497AF8707D588DD3DB1478333D2F3E7419591F28DEE24EB625E31ED4BF4519D53637C1577E103674426CD6A3F51A -AB2C61C165B7FD6CFFCBF5246844B6BEA87994F487DEB37CE99360097A4E7F11FE9687DD6EC9627C93CACB34B1A005AD984A79A861775C9864DF6A6EDC46210A -C6702EFFFC22F4E5A1033537CC1A8F21106A3C6A0DC09A1F68F95B617AB5050AC462F1AF86C1EDA5F0A615F9BD207501274EFD041DB49C3DF0BC27DDEF653F21 -6740960123926A6E3B640153284E7178ABD4C982113D0FEB0C15896DFE0DCC10D6FAD92CCD3F10A49FC50598E76BEC5CC00256A0DF92891F8F252B4E5469C718 -9E0DB4AF37BDBDA16BD7EC20EED34B4D5CBBB69937FBC8CE90A35817E820952911A3CCF81898FF974217F6142242A9315DA32A11A8466E118E5FAC95F5EB1E2D -70621696B7B54DC8E2776E6EE9E5C24E826351AEF521C2A0543753CAF0144D28B0FA63CF48C41DAAAD0FFAA272D77E9EF4EFB4BABE9C5F6DCA4F21AD5F09F22D -F97841791F2C51D6A4DADA2E625A2EF67717299D2067954213E22D20B771CC110C276D21748F5FCF67E63C37947C8FD1C89DC2FFAED593627B6860B195D3992B -F595803A412D55398B2B7928A981838269C0DF35E2277FE3FA16843FB0DB0830AA12323E6E836571C755EC5B904DD6D3D9337BFE70F3BB7331015FE868EEDC25 -B7745BCF541DF28501CD0B868B4C5A967F8EFB44B49899B4A9ED09588F17642D60A325082FDA52625A8E37AA2882A9554CB064D08A32C0B53293CBBC6A97E51B -A63BFFAF14CA17D32BC723DD006E0E85F927B283DDEF71CF406734CD1E726602F6307E823827AB6575654B21FC42DE350684D086E73D3FBCC5F0B74FE1B2AF12 -820BDCEAB86D851013F6614A5343231CFFA8C8DA8F28C0E54BCE937DE3E64E14F39A9B8523004A5AEDE5DDAFBF0516CF23EEAFC30A5C21B0EAB0E4C6F18EC41F -5D7F4937872331847D0F2C8AAF9E313AF6039FC868C2AA2527FFA28254AAE9122A8C8B507BFE082BA89A503F26DA3B3668554A0604F5BF3003268FF1581D430D -DF55CA2BA7B6373731BE8D2D7959124CCEE0BE5F7015C2D0EAB3199B289AF12E043E340F5CCC158B15B14002A4D2B512D888A914C9514C6294AA02F23AEC410C -5624AD6DC1299852C5D920C3E5141DD158117FBF53B9E24E9B64D6E33D7ACA0E43F4AF5E455A73B63E4679D29F780786283DD6F2911CFCBC7B7430BAEF9B6716 -12ADAB5E6E995007500E83AC9966759D275D0A895545D7EB9F2313E7095DD729024B26AD4EE26E89D0FA9342EAC4D72DD46E38FADCE07B5FD6B024E736AC9425 -E23E71BED62BA078A9CC11AF79EA14137206F3805AAF26DFE98F08A0402C6E0CAEA3FC9F04F4FB371757BC3D336102C6E787AF509128F4FFD3FF9C069D09D912 -8006A8725F09F7C3B81B0BFE517E754DE683ECE894C078F301FB8169D7D453237962DD678AE4209E281575FCED6F74ABD60410982139D37D9942AE13FF6FBD01 -80A2AA939CF13876E97FF835153F23A5ADABD94E4F43EA0FDE65F21C7E172905EB4D74E02E2698C0216EEC76337ABFC4B259C94F3F872D7627C0D1FB2EFA5508 -6F62BFAA9E54172CEBADE61EEFD0C08B0979C8BCD77A2F318CF677B2C76EAC2B7EAFBB0A5870A99409CAE9CE2A7530864CD647CA271339A09C3D7DDA64B2862D -F9190A7D0AAF31B34D2CA6EEA5D91BCC09431A1591C82033D36D655936060F273761DAF29A73A4C736A931128C0BC2B4F91028A6F619DE515EA6CCCDBBA16A14 -B617037BF92A205676247833D30004CBC8785EDE80600DA4061B4D3729FA3B2F70AB82ED6DC0A92076E01FD751501E14CFFE634C43E6AFAC15F833CD47EF8125 -8B60FF81A51E858C67AEFEC2B418A57E4090387044DA4B49B7A09E9A419B540A3F9B51125DCAA668A6DB429A20C76EFD9273D15257366DF4E5116437E4535B21 -2C390C96657B060AB1368D0919BA95E8334D9954B64E400312CDA64D31053D06498D963D57C5147C33DC372112D6FE901978463CBC58897F16EB1F2C977A0611 -7DD13601B7D5DBA563E82A6F8E5691C59BA5916379F58DB71793BDBBE6225F11ED5E632FA85BFCCFE2FF3CEA1951FF3C547A4A8AAD2873F0152ACEEFD5D3EA24 -942F0C3B52DC6CAD8E37CE234AC1A196C1AD5B1FB38A93B7BE1455396F7E6422406E499E3C785229FAD6AB5ECE279D226741A857194EEE12B00EDD9389820016 -F62030CE0AB995A444285FE6E1F82159D7AE7F2C0A677FD1BD01E7C46EEFD1114400AF22F50192159220AF680003136429D38BFD55A263E49F6AF5CFFC2C570E -D8D8BA112B0A280ADB90B9424FC60029B3AB84C0073DB2D0D6A0D93D43A7C0160D6D5508AF29776BE56CC49BF8C2DF5BD66D2B6E29F8D586E8AE9C0F9E89E115 -9D791E836A6BD16F043C48B5DB3E47426B6349956F194F7DC20257434D050F22B0A46B714F98963B1FA719EF05A26331FF176C65260055ECB179B3CD1F030E06 -F065726156A8E516BCF3038E189145AC57186CE3D3CDEFC62D38B1852F256A0AD5BC8B505777C5DA05226026D73C29D70D24AD5E3C8BA94A05A4690E4871B629 -5709B98E2678C2238F99B734253F99D5904277FCFDC16A763B847D6F30DCC419E9DFD83D9F6A0796F11AAE939016DFAB20B82559A98C39C2ADB6C1F40AA41316 -EDCF26DDA6DFAA6EA4F7236E158FDA5244045098D1A5D56F8199CBCDC242AF2A8BF71C74CA50F7EAA27019C2B0DC55BAC4BA36CA6DD86171E4695721B6809426 -EB544020E4E0B57F38570367A75EE3D1E5FC75692722FEAE471F17A764F99127E17F7DF5F17BA891DE8520D9674AC7E80E4A1F17A693A0AE4FB3929EE6584624 -C2F9613294B2324119D770F636B7CE68369716F93A55462F3BD320B4A0432118C3EAD6AF4F76016F4D7B418D16AEE3033952B7415ABAC0C96AC876826CAF7016 -C0A951CC7F576038AE8B46D325E37964DE76FBDF23B51B6FC0F294D9E59065110E7D2CBDBE103C3F14A5B8C17C29B3B56A90C75F968731DA9860E26E86BE8413 -A99BF22D22FE98BF56D8EF728B9DE687697E4E70D7E8C17D54493F6245ACDF0264D0F6E45B69A481CEE6CF77DE526FAA18C85386409C8B8ED7B9DFA967FC8F16 -BAC965122E733A55FC31D902F3A66208530420E7B16A3EA434CAA8802A8D7D197DA3DF1DAD2956176E2F3E4A8BC235D0E32B4196DA6D8A9E8A4BD19C7ED94327 -945DDA7FB412E0367ECE5EED6916C6A054B650BB2114FA36FC65B9E2915CCD1F0512255D95F50CFB3109185AF4F55DD2A24C21E5BC22350E364E53967AEC5C0E -FA7119350BAC6475D3A5BA772D333E05F883DBEE3C5B0DCE543E320A4281D92F58AF0C3668F8F97646E40FBE349AE849DA8BC593E83AB17036B5EF38F436D420 -E718CB823208C10AC22BC24F5FF5E80F4ED9C38479CBF8287660D943CF042A108F1D725492AFC31C919CB45E5AFD91A673C2B4785351B8DA64F08694AF709E1F -A432E5E012E5E78EBB78912345D28577641724ECC61262C6F789C73A219E11054B383E30844CD0BD4B35D0CD3CB21035A7F675DA16D65D8B12A3E4C0ABEC9320 -1B5768AEB7D11D1FF6F2769C83FDC5E0C5CCDB657495DCE96ABB41684C406E1C274DAD27ACECCC4A961211247317D03BA7BD089E929FA79A7382A4074DD3DA06 -F043AAA18CD055DB9E204A1403BCEDB068208FC0D246D2C1D6F34AEFAC792D206C55FD6E4BEA14153AEAEE6479AB2E7BA844C4B417214471BF4F8AA5A887422E -88B3768CFB1D17B2F4219556611A92742A4ACA90FA9CEDA3DE733BE2261A1B2F16BCE1AD92E9A4F8FFA2A757E783031AA9487675FFCCDA1323FEB0376EC9DF2F -001D4D00BE069824CC28DBA4B3288E41B07FDC74AF2E5F06BB6BB03DD02F861CE915AB734706CA45BCB920CA724C85FF802D0DDA8834564626FA606943A9EE00 -7A62156AC1BAAC99F980DF89CDF7BEFB7B4515C40312270D69BFFACA948A7F2D02809C7DECEE6ECBA54E4784AE516DB7A3D4F4A43C7993850B4D9509EDCA0611 -351840EEA42138DF307D00FBACD4B2D74E297DCB97CF0EB8622954F0C4A4E41678F6452D9692515F0ED356F7FC1D0FBEEC4E578728B5BEB0342BE23EC24FC220 -9EDF973B0A0E52DF4F90F39DCD91AC5F6AA9B70624B18700FA5BD03DEF3A6E176D20B4FA4C3EFC7536106359970B8D69DCE42561BE6F44465EA896CA1E750125 -5AA3E6FBA52465B659AA8125B0274F91AA3D237BDF577A09FFF207F095F19706B7DCAB506842D519EE050D6D7C54AB4C2ADDC965400A39A44BEFDFB8098EC31F -DB7D19BB263260B6F8E8236D4B8C8791C098B40A1C6500F6EC695A711125CE0F1E1141C456C092D5A0B3F468F8399AE4E617310AC4A3BDD817BEEFA3C6C15B03 -24BB6078DFD6EDB56F9D6DF8E4996D5DDAC2C25BB4C8E694ABBAFBAD44BFB0003FA017AAD96711F72418EBEFF4F6220586EFA3BC57826DDD9F1F52CC6365B41A -19C3D0610145AFE0F5521112F8DE1F6CB875A7847EF9B5C105E66EE255409A11FA842200D595A7DE1D96383D3E7E20A367911DA58E64B36ED4B31EC2069C5D0A -2D21C3480F22370A0F1108A9573F04670BAB786A096F98C83C09E5E508E49C2888D34EDDD6F55FAF2B65BEFAB57146C2451E04E25789EA28E10543FCF3904929 -5DFC9956DE79E9F4F2FB3AF8C46661404DD05B417E3D519020923811F483E301B82AD87E3B2D3FB2E32DA532AF7D6CAF044893C5DEDBAF8A9CB01BCCFBAD4C10 -6DEC8AA82DA71D5C50960772F2B0608D8AA26974AC1E32531A93D1E95937301C52395AAB786B194109D61F085301890BFC75884BAF816767896AF6DE1322BD27 -818B827ABF60194FC72EA0BF5EE71E706FEC3C68571387CF86C82EFA05C90326FD85BE12C446539897DC4174A3367372C154488EFA40CF574466A4FC8BDF780C -8794D89551B3CBA11BEC7A1673E178FB7E18DFBB5AEA2A107D3BC997B53B8129249CCC8BEF27184AE1B52C27B0D3EF925D2DAC5267A28BFD01D4BE0EDB3E0704 -275F0BFE92459A1A527E0E98791D1D293ED80DFCB0F3C31E0F2261BCA774F6296DE3B898498C73454FA086137388CFC7603DF14A9D1957B93A73E9E9528A701C -79AD10AA6459AD86D43BBAE8DB270A3C56A103BFA4B3E348A97050E66936EE0DDFD063235231876BAA625050B1D83DE38150E160EF751DFDBC41A2088EB97E28 -47454C17951E65E10E7AABE604B315467C11550F2862425EABE531988694081ACFCA1D340A038E2718EED181A48B312249D27993E32977525902482D10F0DA0C -61C9C64125BBA5E1108957B877ABF5322A093893B01A01FBE6704FAD63EB75008773DC6556593A42F8E55223901EFA607E2FE4382BF291C59E3CCA067EF0B215 -997E0F73238D5AA7426544BB1C6D5584989874069632E3BD3E6618C7C5A2061554ECE597E92E4AD6C997A3C0ED44E90CDECFCE4D4779D7DB45A1C1ACBC54A71A -8E04CD1C737D4094DE96A0C199B9DFFFD9F84C637675CC77A29D632BF5B35026FEBF94F7C1DE988E160499659C883537BB99E5CE8866A71BCBB3AD630B2A742F -8E5F184E4B90AFFC71141836C06FA381E328BCBDC9547200E721E824E845560172431631E0759EC1F44F74A152F6611B8B24CAB6046B75572350D84EFFD44700 -6FDDFB910BBD56425894FC6E9E0F1D962F38DEF11A3FF4376FE4EF5301F43C1AE96645647DE8410B9C7FECDE9BDCF0843AA845EB7B15F78430B41F2E3EE5D419 -452AC2CAF76A72BC9A3E11BC7BE5A78649D29EB5975178D10A6A223B19B8AD068138DBC9C6AEAFC65141C86B4C72720A17372D9C45707201BB68D5F9DECF321B -66AC0C1A6CBA19C7B9EF9290074C148E6C4A1059D94B2315E538209ADE52D31F9C16B5A895525D8FB0DF1093CDD0FAAE64915690B8B276F65302284D5627A324 -72569F5AAE8A690A43DB30307FA901D9EAB4BBE52B9CB9A0702A2C41AAF5971F4532B34A0CDAB8A227766C64A7FBF960939988A0B7538EA48670D516697A3D28 -6DD118F60769A65C654F393854B1862769D13DD291B250F97EF1B4522688431E24334B1F6972B7F6E22F9DFD90DEAC83CF938D9F6A7284FF21B147898D7A1D1E -40EC2A9181A2B2AE7B356A5AB7C54B143F119E7A7F336D703C5D6C22C63F0400271C83406565BE772313CD27816C49C215EBCB9B90D5B0CBB3C33A363A63F520 -C9C03D393EA1CC3FCB1A191356E6572D2565FCB6DD64C539F822ADE81F43D517593857C737C824A7BF36A7C32E5935012CCB4422E6E59C31C156A3E6519A1818 -47EAFF738BC18C11C82D08045A3B51743D5CF06534261D59EB87288E193E4930884564E7E98D3F36A4DDC0F17767AD1539C3701162B9494838DF4D7C32325A2C -796105CA2969CC39E086E7FD7B2727A137B0D0C2E22E030662897A78B282A403A03778EF40C56E7D8D7BECC8C0374C6D474C038D44F7040A38EF530B82972127 -FFA1D0594400C41DE6A0856307A2BAF7EDA4DD070F009D4A38151F3D46F28716BBF231A7B41BAD4A845BAF0AB2204A9456049491A17E09A3DD53DF7C714FA923 -75E12B49C836AEDEC8D96B6811BED9FDDF5AAB35E0D4AD5EAFD07B23C7554A18C4A91FA685FF6F8344B9EF044281BF50B003393B3DD1CD5E1ADF8F85FF6BE412 -23BFCA5B1CA917F57BF5D8FD2D32A48107C8985DBD37E7D25D3471190778F11BC6776CDB4F8E5FF4B40618759DC4481ADDE903F3AEC4427CFEAA9FABE5C31022 -FE5F596C2570D9D0C9B7A1E04CCA204537521BC959F073734E184309515BAA290D449993562FA1D8E286FA295BDD659F29C37EC31667D4A665DC5FF1DC9CDB28 -84E039F9D369E9331EFC9026E0605575C93F990BB51E41FB0EBD498DDCECD52B82C63C9845079D6DF2847BD5E2C57A08EA6A9CDBFF6D30338C8A77511480C02E -AB6994D90979202DEF8074D22BB31FC89733195055EA48C80E462E59CFDA2203EE6A4955213E7DE7E268B69FBD33B67E57F47E1B2D94161D52E30C2CDBF16F00 -CAC95C7E2719878B2FA7051050FEB87E23BE5F09B04F32895567A12618CE542AE331CC7361FAC6ED32D696530478442DF2586D0E75821CFD780FA377050D6128 -6A276B985E0B7BB075B7A04931B2C816D7541384E78CDF1B69F626BED418E50B09635495B58B7C4044487BAC13EA6655CC5064306CA9026EFB9227007DBD5424 -688EEBC80B792FC212F74CE74EC510853A13716777DA3424DA31183FEDA31A25463A9B84DABEF5BCEBA18A6C634D5228F3A613B10C2A71C49870A386B3A58727 -D731AB0B08843D5908AD4E08C529449FB684B977D395BC299A4212AC7056952A5A7312CE59EAFB3ED6CDCA41F9CFEE77BA35BD217508D452AC2F732E8382FB26 -1B8FA0FA918B8E6B5C322E16C1F561E80E594BA028795C0F72C5DFA44F7A461DFEE0C294A120E203188EDC83707CA9AC5ADE6287296A8B4DD982764E9444170D -1FA6F4B115DEEF920DF47B8A96DD150A06D5AB0CA59D33ED7F26D5FFC2FB451936000CE1BED81389E0B72205EF8796BE01D40E83A30DCFFB5FF0B17D6A19780F -781EEFAA20CEF4FFFC1DFAE1E0C6827DA7AC9911491008BA166E751BE9BB4A1F9C4F40D9A4F7F225209FA01E5CB866D531F8DB19E9E87700FD28D9DD99F76F15 -BF20899C59ADD6C62B5C724AEA838C3B3C32FC1E201C4EA535D4EB7E462CE81B5A4CFC94225E462344BE7E43CDF9158709E4D8B2B20E00C7A6F76BB68420222F -96614E5C88B8794DCA1F164E19DEC7710BE5A7F97939BE4054DC698514B2F32C3D1007A453ACBD5FA6D761E01E3774678EF33C2DBBC3268F44DF862FA6414E00 -39542FEF30186843993B5AEBB119354183DBE8AEBA1BFF775B0C4A5648221A1518134902B905399B221C325B82517E03E059771C66E71FAE9CDF7D47E23C3E19 -CACE00375429A271D844A307E14D41C7346766E06AF5AAF340511F9EABC39926CF5C9DB011BE4384C682323856BFDEE2B9EE0B63464696791A32C9EFD769752E -C4C8280F1B069D5C79B2EB77E62F31B45F9733F8D7FEAFAED0AD9EC8AE8EDD298F74BFE97763B6613B051DA1FC1524C525D63240146E3122605F6E69D9F0E72A -CFD0567EA477C98B3A4303B3F6B143A93411BA3A100A3EC29E06D04F33BAF3093BBC1C3FE05B6F3177DD6CC8228B3773240EED18E09B5ED0C97F1F18154D7707 -A7ACF919FF3C9B24B14F38CA12184D12E100B35A87B4EEBE2C33AE6D48596E1E27D5BB2A0A041DA2BD742DFCD9C641B35D70E76BD80F2C92C0740B7C5196301D -90E72C9AD1A0747A44C37F4E289EC0BB63B4B88DBB5F2E87417965BC582CA819963A720CB9889D06197FFB3D25E8C4A7BECC9F29BC374D2F9E1FD938BB41142F -262452689844026B43631EF17F66F6EE1233D9CB4EBFBEED35EA448973FD9F28297490D823EE63BDACE1D01A636C8E089F023EF0BBD251B00DBA7175FB2D2E00 -4DADBF2C34875A0D0073C14AA63BC1F7DCD16F3F8EEA69CD179A37D87E41BF249F308D11AF8BA8FD4C875784F4998F1FD4A0ED61F61402DFB5DFE8622DFFB013 -D75B5C0A152C25A52E1D851E6AB80E0393C44BE3A6D03868E83C72B30EA91F10ED3E6DC739D0ADE590FEF2962EE772BF1B75389E5776A2B46ABD9EDB01DAF10F -15BB2C85710BDA102F74E343A14E317E07C4CD2FCA1E7121E05A16B1DF53671D89B4C45C9B4C1091111BFD46B0835812D4D7A2606450E81AF28DB7391C6B4A0F -96448F1C68538E9B86EF352EB260A413D2EEDC66052327E2CC6F0B6266D118251EE2FC89B92951AB476F85777CA9478FA68443FF7FFD496D76FE287B41308F09 -3B116ADA75AD424783230645243B6D6B9363ABF6753C0B35A8A8B98BCDABFC2340F992E5EBC350BF8626AE49134D820BC785D2294364012602161D6525336211 -1263707433784664E253CE9A49A233307B9BA3F3AC853220553B66379AC1570ECA96D5C7B826B3027FA098A2D04A54A00A6A595BC085BC2CF4A3DA834F248103 -136FC3657C4B390550FA8D786CBD5AA836099D698E53B487D7A4C4F58443C704DD3C85FDEC8F9B3246E6D3777C627555A21D6458B03E0642496CBB5279089922 -95F4D94F3FAF76B100F0691423C16DB5ABAA5FEB57618CFA08E394A5EB0B402832525FBF90D0E1EFD7441A5B897F3DCA568F69DA8A7CB5ED993627D99D1E841E -1472D76198FE28F2F2579ECB2C7255FCA8FA8209F086B59C2C9B67E38FFB490AFCCB65D197541730D2EB969BFAE3D01A6E9C222164FC488D6BEE22CB3EF38B2D -D0875C1239AD247549AB84397AD04BAC0AAAE7DAD2284394A723C51090D7C9134FB4584E5306A126F125C1D66029BDF75FE96A1AAEF97A1CD2D6058008D88B14 -034C6728FC35FF1CE3B2A50F00A1C6E244755B5EFFD5D2F2F9DBEBAE912BCC2C7E322500F3C8389875A0AF149784C619EFC99CCDE8E73FD1DB2140A7EC23EE03 -1B35C318518480D31A02F2CF090594F452E45839B2AD2E370031569900371021744BE2C2101010B36A56795E4F0883B58139C7B38C730C10102366B0F6E2981B -CEF8429C3509F57CE665DEE4A8BC347748F2383177E2558DC709E33755F72F06580D9455CE168691E6E24F56B42804A293F738602D9ABC79315077078DF2591F -2C866EEF9D9AE40681615426EB77B473A3F78E2245876CE6ED67ADB407266C1599D92BA4D2FE4B8DCB7E913D7EC50E85A9B5C8609586491458269512B0A9540E -04A5EC8313711626454B5ADE56D508A4EDD2E64F1389598EABBA8A8E2CFADD107849AEDD1476659036B2A9605FB0314ED7430835BAC40756F38369BE9F018B2E -82A62066766A5EC16E7F0E241B55FD5DEACD7EE9F48478438E05152505D12817B72335FD3F4B8F8C282048F6463D5AFE2205F5751D3ABF8C90756C1F0576BD16 -315896D318020D99D2169F7D1AE6BB4888AF8FD111B568CC65ED2EE3259F89005AC2C3666FC9C2579B9875B8854DC73FA2832EBBB08C339B908A041F9853ED0C -FA5274DBFF2FB3774BF7DFA35DC0F6306AAF10015285D788526E8F4D059DEE14E7BF9823800E99FE1913283C42FD10ACA5B6E1D088D08A6975FE3D78705AE40F -09A3A0B64CDB3F4AD0497ADBC61CAF8B1307D5968F365533C9226BC3EB1FA82C81D2D6366A7C8FC5C86314FD0E883D65D4B41918251C03DAA36B8FAD6A11691B -4B23870BB595FD79D543C021D313AA9CE475F96048F5314386830CE9B5742014CF349AC5F742F881C408C41EF3AB5296FE743609F85416BA3194B1017AFBC608 -E920422433E3EB5C8B0317BADC909F928B3D281FBDC492FD2D2D10753B0EF30D6F07BD54768EADD7A6BE6E83D8F6D41DFEABF125A56409A4FFFE7D41306F0A2B -FA43FCDC5E3491C727A553FB6178066859104CB33329F5D5A0A2FF4F6C97410F1E080EB233438261E0045BC17C8440339D7A7DE9833645FC63360CFA7337F20A -E97A5F82A8A37071760FA557099E9E48838FC8EAE0B66E222139C3978AB7A116AC577E408186844F381575936430E1DD65A27312C6B836973D7B6959C40E2A11 -A59652E6E6D6986306F7969D77E54AC4547E31434113935E31FB328BC49C76204C342BBAF30634CDF9063F16631B565D495CE7F6D717AA6EBFC597571A5C0C2E -B4C52364FA5B010E3AF74FBCF4C96AED2A7061BAC6A899BDD5E83386F1C01424DEF786EF90655ED630633927127169BCD316F36874B37444DF2B3D249D68BB0D -8908247E8B0FBB5BD116D1EB3336F11D4D471EE933F6124151D003E2D7112C08735A97AE3EB8E2848EE86ACE5C5205A21316D52CC0542755B6F0FC42F0FE9A28 -A0C63FC652459C1F6949C40AF2A8426A433C03DCA7790893D6920F06233413158554363EC74DD78A400F6168973C6D00762C62A982CCFE54453AC19C1A986E2F -B7FADC57D8A6AE08655331FC110915DCD554B9DD7945114F08B4025E03E14D0AFC3EA01514AD9F8D5193BD5CD0FE3C1911291D700F7014E99BF31EDF657FCA17 -1AB52204F7679FD339DD48AEDA0956A920313A636542E31FF685A0336784A616D68CFDE5D8414CF3806E84B66E831FE30CC1AAE715DA4528CC70C37437482B01 -303E9D88CD87CE659388D27168407D85180D56D0DF655F249CD2BBA928EEDF1CF714FF5A6C1308EA50FD8D87F6A193C01CC5F22036B121058029B385E7838604 -2FD699318428074CE669C971C89E460CE76E9534396A0EF7AA01B96CC3540A00A03E247D99236BB23C2F16EAAFB9D82A12F5A3C95E2DB2B9F3A8F4D67C8C2A1D -984A33A3E968E7EB38CD5919DD87744B3ED885374059E43DE8EFEDB4CFA1341E646497E83885DC180A78D58CA5FC363FB8820C140681CBECAAFDBEE559F29C0C -FB41A8B735ECAF07C6877F9610CF7EA3F06AF8140F19B08204A387729C0EA413DC8C937FC7E7A6C0FC8AC0B62A4DFD36F7D45938A2C6D65DE51B9FCFFC17AF23 -42DDB728E7B1606C656FDB83526E81B23B799491F8F16B6EEB10E2DB4B6D212A8B215CFF911B615B6D6814A311916760B1884FE550321309B203B5C82539EE1C -DB6664E655F74539294CED01C9CEECCC827B9D0DE99D3058C9939821F8DAEE2F5A1E93AE99BA337CE9AA793859036464F6243684BC1BAC7AD1171E5D246D5D2B -C638C9355C43475063BA7918103B10C0DC0B8B3196DAA09154D6C9129623A102D20C767860630250E4A10222274102642D498CEAE8013183B001BC7D4F0CE019 -F4384DC3BD5869CDDBB9C85255E5AEC1A27155D1F8D1296C5EE40CA8969CA129ED04EAFD2DFF5A48521E4D4A8E527AA41265B17499B6B7F5A6ACD27B9869F92D -972673DA0F662E7729E93DB6F5AAFC07C3F4F229B19B6AA4F77838ADEF49440D4E163922C77EB152052CAE4132A4BDB63A2937F99BAD13FC451D4B962C6AA429 -D3CBAD5F9E5D3D19069BD181BDE35F04C839D244105A3EF9B416D1E98FD032015D141F11282327875F88D6E71BED4988EC3EBE3D39AA75305C3697A164940C07 -C864AB1690E64ADE0F3A0339E342427E6F17653F3452D601F12345879F766B11279EABA637CE63EE87B7DBB090941B493D49F7C92DABD961265A6309B727A22C -7DD3799C111DFB2D5C47741BFD75BE5913F357FDF72DF1259B35388C7287540A2F82DF5FD9BE689980B704FE0F50A212B1736BC9BAE70B12FAB12C3DED5BD223 -6618004ED91F4B07C391FD8D204185B5589CA67B8B14494CC438ACB6AC612C2DC1C3FB45E7C02F0BC2C797C8B400A5105FE2AFEE6FBBD07360E090166B39421C -ACD19A063A3C193A71B6CEC89467A9FE2510A7856B2496EB1676466C954C291FFC75B5532DEB73CCD179DB424432D6A29FEF557D1B620BE8BE35412DC29EE909 -308B54E7433D7EB6610853A3F33392F88098E4AE04E49593BB9A739CE151FD27713384C802350C84FCD4D944D105FAB21551102E4A494D6A3A6554D2B161BD0A -2FFAE202AC56DDC2F2B817BEDE0DA3619D22FBBD3D9A9453B2CDE9D0AED0A101A178F02F7E25E57DE22DF6476BB22D6A60C86E643044FD66F3CEB5F0A1300A02 -0B1BDE3316A99B58AA83AB76E1AB5A1BF2F2E8804674D62044A962C0307F9323209BE329B7AD7A6AC54E37F96545702DA429A92C7ECD87C9E8BA87C351505F12 -0F98ABF7882A7DD81C645F56432C455D2D40E09873BA78616AFC06DA4A642C308E4BC164678474AF704C4438C5B7CBA3685AE64CE637613E1FF2104156B85814 -7B62823C5BFBB11727F6264A632D970E7C31919F61FE40CC51AAD081B8155C180EAFFAB4D62CB025B26887B34D3CE883F946C8BBEDC89876D04D6C5CD368812D -6AD5E2D2F8DBD1C1F86DC0B0F91DA414889E67D117786E700329A240511C6018744B8452DDC0AD005A4F1611CF881CAEC5BBEB971D9A59C12601F7694993920C -D5FA761CC1FAD88F6F3A77932AB4843D8DC4557322BD1DF348693BC5DAE05E08DB85DC1B9221E90FB168F4567514BC12D9F7FE76CCE8547145628B0E7C790F25 -CA62BFE289EF2EE6A56489EBDF4202C4D7AF9012274A7E5ADA552219AB55A9163C6010176E06D9361C539836D996311693A5091DF3D64265A91FFD905E0D3B12 -E4523AF2A3D0981DC75B573CF669B8FF8CA560FA8D3FA5849E526ED572C1282E194B98DBFF9268852425A9030BD898F7AC8722F9BB81F25D1666713D6718DF11 -B16BB525BE541D04BBEBC33A4074F7B37084B197D2D55934985B9691DBE5751EE0C3CE75C4E817BD3FF9FA503482350A93D8F7D33D89150B9AC030FDAEFFAD2F -7D5AAF73A1F62ABA34767C4B64DFEA751F5ADC2059A042E15BF182AA2BEF861E94E00627AD05B1316F8026C7C268268E99BBD35F24D0B6C961559FA5982B631C -FF8AC2CDCD76F2DDF16E6218BABBA4BAC56942142C18BAC8EC2A525D516F9A074A6586611A2C8C49AC50B62573AB3825ED1CF22BAD4B4A40931175180F552E2F -9BBAF85FB9396E17DCAAA136C871AAD2BF37C5E3C009860ACCAF132ED4190B2378CF410FB5CB65984BAA5D5B097227547905A94DB1A6708CEF55EF9C0F4FC302 -FC2CDE390F2EDD85A1487DA9FDCD39CC6B82ED69FE4916524BC3CC29155D9219600A77FB6ACDFEE1B5CCB5B7BBD03F23B5FBE8FB76D61DDE92DAB8BA53AE4C2C -03FE13183BD95BCAD33AC01E14865FE22D99973806DDD9D9A5E262C271EA541E50B51C44F3C012E3CB552B0891FD1B448F75D8F3AB6D37EED2F40EFD79FCAA0B -62C1FB60BA55107C0F64B914875687B45EEE67177C295A5E0A9A639A0F3EE1123EC6113A9063A1800396A2C296CBAA37554BA1D9FDD837E1B6B6B805F4038B02 -E68BA0ED819D98D8FEC107494D54E4735A2042CBD75F7AAAB12B9E6003841F0CDD75155B0ABB7C8953776B9E1A83A95A22296A9565FDB94E4BC664CF270E0C26 -3681DBF59E826EAF8DC2EE2BF075A9984DB4D688C18C79B01F6A6B8C4BF999162430C8ACF2E523FAA1D574E07BCB4B0B3D3C49F160DFDF713CD4132548C5BD2A -A2C02AF56D609B16C9D50CD718946A55FA5F5E296CCDA2E33479BE6DD048D60F2AB41BCD63CDBDD2BB072C4AD3927FFBA3B60EB072B593CB5FD3B06C690A9F1C -66C0A9BC5FD8115E7FF5E3B6280F3515563B70AC86F5479BDC335818C8DA5701A22CC7BBCA6F05B60E9936F6C73F259AA7BA172F4B0EC92100773CF301013227 -069600AC5E81DBAA209EC0B2D3B7909B02AE14D710C2635D410F12182ADC400152C97DEA9642C09F750339F5A6891D75C70EA70302A9D20A255C2939E8110312 -060B11A5AD6AE1F7D70E4ABA6A96FC23472CE988AD468DFA88017C2B1AE61426D14555005068F156F62ACAE44C403ADC366F6A006A7B9A78072F176FE2684301 -E3435745D217E54AE64B6D87B623601CC90ADE9F6E626569C84D3817F129320C1806FFF284D89119D10B8109192E10D4B4A3585AA905776059161B96082EED20 -F2A2BE90FA76E7BE1F14BF20097525BBAA3FD6CC3572E933AB81CF88C610322EDFFF5A2ED53A8EBDFF5DED2BAFABD77CAD5F774052079ED2460B945295526A10 -ABDF2F12410F8EF68D3E5A0BD9B6A659C0271814101A9A02927CAF768040522CA4562C0419290FBF10482F86E949985D603C48A504C811E27C0F27C62F47F121 -E62901F74C202F060D98423F21132371C4DADB06B9DF54197FFBF9D68036AB02C6466D555F4770A22CFFBE6AED1A6AAFB7AE5BE188B584C8A10B9F1CFE5B5918 -AFB1486C7E84DBB42A76F28E5A783E1BEBC9C1171D4B7189A81082FB89C17619C7247F93881FC02B9F34DAC7B77090AE9B3CEB0F96F878420D18AE53D2D0B120 -E43E68C74D054A4926D506D23412108A1491DBBAA2D0892DB1525992961FCC1BCB5B3A3CFC686FD50FDA41069FCE5FD3D11A367C19CCDA8E3A2D7229C17D5A18 -EA6113A65BF9CA5B9892097F37DC413407C2B97FB7711F1EBDC7D37E328EA008135CD7F047F886AD3C4A3084D03FF13853044383F19BE2A6FCC4AAF799DC2B02 -47C9B38F7300E7BA3FAB928C63CB2EAF43EE26C244A9C0F79032C80A7B680107AFFAD3B2E5131DAAA85540C260F6798735E04A452741DDE630BD4E8691311D1A -DE0A186AE028312D86F175EF0630B258A9B8116D5001A82227A5A73094EA64284687E576E5A0006C4DC38C2C13E4A0C3A2E5AC9F695F5ACE67E788A9EAD28B0B -1F981F3A2FDC0B7DC59AC44AAB1FC2D59249C9010D093E0562F52FB282AC5A18D0A4FBFCCF64D2CBED11572199E73BE1A048AA1F23AB77851715BA467A3C0902 -278380D7A9638BC6410F983B4FB62037D0F3A9750F95DB43F2890C8CD688A9038A421AFD6F345B66F4E36D31BBD3B7AA90E607EFED5B36A134D787516D30050F -31E934A348B9318218954178E689737DAED63EF05613F2BEB23241DEF61D4A2338FD6AF13D45A74DBF80D46943B39AEA21025CDCB0C1E173FE0772E84F28D628 -B98B158DACAEA6DD0212A94924AE507A5C9BF02C3C8347E75E40E359250E1D0D755D537BF52D32D98D653ED18747D3E78B4CD89B41C1359BAF02C85BD36F7A26 -BCF5A4D30BACA03951A7056A18F051EBEF901121401A14E4016DAC415EF4CF03E66BD2A0874BFC73B9564A5DE20341FB756C441CCA2289494987B7EB48E5AB2B -9A104654EEE29F5DE126E200ED241BA686D6B312F69C4478504544D921CAC10B2E16E66AE1A22CD604B196D6D97FC1E6146D4AF1745E1FE9D5575A1C5AE5D71F -2DAEC41DA15A5E7C97F7CFF0732230F3654AB69018CD677D3E6EB6EA0C8E620D5E9038EB3C21EA1CDF8A7FBE6F7F1051F8EEA5EB3416A63E24BFD9F7FFCB2400 -26400E4782B61C883BC99C2CFA3B4A09CF92950641936FA2FFE7E15751B02F1106942A88271389F4CD412763D7EC60FC38CCDDF3B8CEBE0074637770BBDB9D1B -C6526478E7139FDD245312D20E4BF7C87B01C0F1AC5E52244BD116803FCA241FDE1DDC3CB085DB7DE4CAEC048CEF75EE9B6A0C27365C04BB29C41AB242E6F806 -01603D2D04C5357B57A7A4C486D781B0E37D5906FF65F9B87E9F9F98D34B312AF89EC8FFA9274333994468DF3F4F7CFE32BF01D24B0F39754D9F2D3D6BCDF126 -16C6767D15305CADE98315036BEE70A82FCCCB0AE4C93F61477D009B8803721CDAF20544FC662687BBFCAAB6CFDB9E477FA79E61C7CA779FC64FE24BB7076329 -1F605BAB57AEB83D29F0D7900E2D90AFB1C9B899FA2111959846E5DA9E04CA28C6AB10B5CEAAD9178448B03FD7C8F058835466380D798DBA4D9853E02E98DA1C -16B2E83DCBA6F33DEB0924A2D308107C0180F5A5B372B5DEF89CDF209CCC88079082C815F86D9809C899DF0E32822811EF6E659026C45E4ADB0FF22CCC7C210E -5621816A372F39DC221A31BD93FC2F981EA7CFE91C585F22D5C5175A5C14B3011AC15E34FF2A27D3A382D6009D0DBCC0FF9C70BA6B5AC7A507FB40EE87581328 -9B1414DF63659BB414DD85F97BF73ED834E48DAD87FB4B4FB51A899A46229E2870B808B3F548385897379B86E3E68F05D6D3C63E8BB567D0918C5D6F8120A10F -5DECC1521C8E850D770BA639D672F4167279CE08E405CEB17973F8F4A3762E23EA3120CFBF41A1DB3F1DEDCF38349551BC790162EFF154B87CCBBD337788BA03 -9F593AAE62437F650932ED634518873D403AC745939387A8951D916032D26F055ACA3BC26263B60DD131288DF54FF5676D8BAD85742909C0E6B13794651A6420 -EEED91966D4B753B14C38C8FA32095DE78FCB82E03B5B62D73745BC417868E26E5586F894859643212062BA862DCD41502BCD466544B541A52C9D07A21FEB315 -CAB2E64BF75A9B34E0AEA1CFFE8FAE58EDD94FAAA35DD6F4D1206B9DBA9CFE1DEAD632F84DA75A98578F14F50F2F15E7853C26960C3A78E3FE5A2A725731A109 -23474A7DDFE06B0232B61F606FDAED0921CD7D8D14B48B900E40FAD4D29041069BC07B5588081D8367C08CFCE7F3257751FFB4B4727E9D421AFCC9C1FE19D013 -58F69CC6422E69FCA4C5E1C61CF4DEBB9D8C4ED800685EE842BA942C86B74C145CEB778578FF72ACA05AEA3AC8530335C8533BCBC94C63657B54AC7888F1310A -F0D73B0FCA764178B8CB8E65A771537499885FB3F4CA83DC7A33524CC520CE2080E5F749B4FBA64F136AC408059C250107205718AFD8BABF3DAA9DDE55CEDA2B -B8ACD9E5B5FF42E225D38DEC04BD7799F5579A8DFBA6D1409EE9C08FCB90C21944A8D752ED4400F97C63D23584FD1733D139F555CB3ABA292D7AF0DF8D8DC110 -19BB2B7E6D4295AB63090D3B2A9D156A39BA5E125BD25CB2ED9AF0254D51BB1B14AFC534CE44B284D171B6B3DBA4F3C0FC53A0A89B89D5CDC82B805F22488B22 -85AD9F6F9A44DE90682F3491AC78D271B19FC61343F47A002AFBA0B66CAA600B1E5C7B11DB8695474DCF43B0ED1967784F1BDFC27AFFA77E1B14B8EE461C292D -86D3D90E06D41266111E01FF4BF5ACE93B408548CDD21E7FC536A64D9096DE153F4D68B22FA9E8197B79D3452ABDFFB1AE9CDADDB6F9F6E282E41B8B96FB5923 -38C894851A283AA6A30879071BC2F7880D56EEB279E52372E29D9025F127691C29AB20BDA4206B5272EC890D79E5C4D17882650C31D5E1D3CAE389DCA9C49F15 -F306CA8994C59C339B8848ACF30D5D9057B825470E325B3B5592B4C51B353F00491A323E0154C9B21CD1C43D8D2BAD4B27779B2BAE62AD41EBBEC97AD078A420 -CEEDA060C0BD28456BC195E7761365B489128BF1B7556BE6D1491DF137248422258270F3E293A75D3EEA1BBD90A6CC04DE5A0469EAD655C3E5433630632BDE16 -5BD151EB80D5BE5BA813E3A14F399FF018E03B75053F6F25A5CAF08DB23E191AF310FCCFDDE7BC97271397A97145D164CC847B55037CE4A3F29225CDE2B7FD07 -AA1CABA7CB258AE01546BC00293F76A997C90C542F44AD60B2A77D706EEF80185FC52B04B9FA2A41C69F8219F497B4232F84CC874276A42BC0F5CCAE360B0704 -30DFBC4E0F731A4EFBD1EA0DA58C12EA763F1814193F40CDB579A7FA5D3A8A29BD6636AE02286FC337BCBAEC688FEB1751CBF39D50D29986F65A9FC725E00E11 -92DA94101A3884A88E0CE937DA7EB269A151D164E3C7C639003FF5C4E96AC216D06D2CDA703EC02E0D19CB73C64225589377AF470F8F1E27A455437F4CD3B520 -F5BF08397409BA44B1316201246B97D61053B948DDCAC0D02C2940DA4AAC6C22A65980BE9D1D0A6BEA0A9484482E9FC2D734AFB51135D0F5210FABCAE91CD728 -89E4113764DD41EE72DC5D711C027B7EA4C17A2AA32DEA9A5318A02E4A1B93210DC2A9C65AE0D70A121BB14B7C42682873764BCDD94BE009F8B708F9F2610315 -702F1EDF9EEB2487936A0E19F9E38B894144246A134C40BF78A05F15B561AE1BBEB4D5D4C25E2962B4E2E9CF4E1EC968E40A6EE729382D2D18117FA753B2492D -6B7AAE1B8A961113A6A5AC147E94A71342F400CC96EC79E1ADD398D168FA140B406263A80EA6FAE7338368C3CF251F416378A65F028FA57752F4513CC9569919 -4ECBD35E8E67569B40FBF114AB9DC8C4E98779A13BC10F1BC70EE4054D652C12B72F5156F3822E5B79C1521C933CFAB07DF2B853A711790A32C420FC3B690A23 -8346C5B6300DD7D582C6E3716E12F056C41CB90BE15A8819FD6264C188F80320F3DDD6AF167CBED1F54DF91CE95562E639EE505F87AB4DA70AF4EC33BE0A4020 -481E8F0CA5BAAE9AA7D87B75961A7EC41D648B0774F035489CE083BF0E926C24B9E22213C2EACD16F5F899B4D651F14FD2B0B5C01AAF30D15B5351D5183D120A -538979D67DDBAE3C0182AF0CABDED9EBDF465CCC322B843828EB097CE38AC209F7BCE9A4008979899DD73CFEB4F98FE9342A179B810715E305E79CB92DCEE307 -DF344DDFE5F1D24A8FBD1EE8A208D5297034AA9C0C1C455A4C619353249B6F2192A58C3FB1A8344DBA513893B41F84FCBEC2F67A0D1C2C67F8E48F85D847F225 -B73755C5E35E8A08841AC59D5696A53C8F9C80C3A3BF9139B264ECD406EFCA0DA3858B4D811E1744E5D69FCDD7C4C0E00E6AAE0010E5CEC03DA8BDAC4946C516 -DF1F3776A809B558675D45C62BAF5556B735EAFAB5C3064DD24F6C18FD0CCD153CDF6B5727350B0ED6C61E334CC1993BFDE82AC2F8D7F9B64B2ACB1E6C7B770F -EDD44DC47800B2B68EDFA3DC387C6A211AC07503EF7FDF6591350706CA4BDC2B7AEB3F290D2032B58261956F2D8CC440962ACBFEA643E6259023E058A0353E30 -AE696B59F291EF1BAE7F88B6286F14F231F92DD2322E798411F5232807D611265464098698234CBEDEEE1F577702F4F8C07BA195383B92BFE7064A1473FED815 -C45DACEC44CE2775862146040BA57B1D24C353304428BA581226EC532AF43C11FB5F68E7A51932BF10AAB4FF76BE21E8985A168A4702D3B5540448615829091E -683AC774BE13A9DFD3541C4589EF72E03098669CF61A91487D939A4B1F722A27CAC5409DBC95B0EF3029FD7DE9D52AAC3102AF7B8A7D978955368D002DA06B09 -58D993820DBADF5C29C984043E6DFBF15A963139E9C00CFBB4C9BE15E0199527CB323BBDE27513740991809603BC95B9BD87DB255C641BD75A7C2BB8E959F32D -915B0D499E00B81D0AE4DA5CDAB23297B47333A25F95FFC0904701D460C3EF0D2BF503CF46182414EE2C02AD0156630E0B7FC2E0B3CAC74999DA79B296C4301D -4B1BF403DEBB00802ABA7049DAA4062D02002F69B475D0AE923DC5A0A2806423E3CF32A0675914F724BEE6F6BCD571497133571AC1D2D7AC86F6D0522B79632F -8128362B1CED7833EE00276B7101DC8CA32C7C3DA0DF465ED17BD3F8ABA1DD1131AC32B0669E7F2514F8849BECB0CB84F18F5C458F243C65BC1DE7C01F91DA15 -7C58F82B1B3689F5BBE3D0D0D623A9A8CEFB65F90AA532DBDF5C8945BFADA308CF4969AC24A8E07CD896F3C9FB880BA3F290FF7B6B76FC79AE4AD60F2D964A03 -FBA12B20EF5892ACF7C7DD51A876A940E7E2628896F03CA58C8D99AFE817590AD0213A2694D0A7F19B4C91330957004A6CB58363ACEF8A0D103535D42FEA6828 -1CC5BE45453A1A8D81CAFD11D1BC2D2E23FF871E934E32FC7AD4C9461ECBDD1072D1239E6553219D0215A39A78A9122D56903F34F7FE6E6C08374B8A45DFF72F -5AB946B8B6A2021C5EDBBB00CB5284E47E4F236B464E658DF48910D09AFF721843BFBCF17B9EAF5088488AD32EDE63850C4187718C467EB438730E2E20E33F1A -DA96CD0FCDE65AFC08A72FE8D06817E230E289CE1B8330361E8C2538F13CB021B7658A37ADE4E916D60726737CCCC9A3FF4AB46B311D750A1463613BA2E38117 -C5900703FB707B707853B7383496603B805E57F151D3CC0F62324CBD08F1801ECD21015D6D4AF36CCBBFB43F01ED8DB2D7AA0F91D806BB96D75A2EDE1A5AE32E -FE82797030533514F157520707A2A9CE4A1186B9EE72837B01DD907AF1263B2E43D913AC233AECCFE022DEB61CAF9783012A57FE33A12A3647B22D47A976CB1D -DC880F060DA52CEF2CE165304303D1B7C82313BEF00BF56702F0771B5327FD208B279EB97B3E05C46AA7DF83D53FA061C87311E98AA3466D0BCB73F282913200 -678621C2BD9288ABDED3E7934683AA3CF700EB8C341BD52B1D095A7C64297A085A5868B635879AD426F263A269DA2F3FDDDC3763FEE38A80D7A28B699C28F401 -002647D43DEFEBC320B0FD4FCDE65C71A09B87CB6F3D2E41B49E9FEE2C83A32B5DA94F022913245A75E9E3F0E523D28AA130F446D22811DBF6F57A95122D1F20 -D19B3FB1E04272A6DF7467FDE529DC82ED638F6B04D7E0013CCC841663840127D273309F99B5312D7809F68D0DC1CE8D6857658F8C24E61606B1A3AA68C0CC13 -9501E8B0F67E1017A802482C9A3AC9B5A53F8CD62379C828B39722CDF7082C172EFFA3D69B38EA4B700469AA466909903AF8A64FFA76FF3ADD4C90E122B9801C -8FA8D44592A6C0D24603380027191398C9C190DBE33CA27DE5AA89522F5BFB2BE5C53A43F17D1574FF8E207ADE487C7C7670E7E6173DAF8157AF6A984AC1E22E -8067A51E3A7CEA41EEACB67F84B1B275F174D8623A0045E979072DECB2554818C1B4CD33213603B4D9F5E8D5EB7575F804E00DE056B0716AB6D43A7321E2BF1D -477D25AAFA98C49AA059F4DED1EE22449B5C28B7D67D5530EE5E62B4507B5810BCF54A105F60C50841FA89532AC8AE86544F378474D95A6E01E828F5A7DA9D2D -0FE0FE6EBD7F1D50AEB14C21D99E372ED551C1923BF599F245364FAECA2E052F8A0E5A8D5229D9F5FF7D576D230760DE161E735B729833C2303398E21ABEA41A -ED55638E316F6FFCC8ED4B2AB548539A9AF6BE68224BFCB7F1DF9717E41BBB1C845117E52B6274A80C81EC590DC8B14EEE81AFAB61F4C3E2158F0089E4C8112F -B5242C59918F08B3D7C55B33F1A0209D2206681C3E9EE369A0CF2EEDB0AB82067674A53EB8EF1746360B71F8B06A781ADECE305326190D74BA31BC8DBB749C22 -186C245064A5F9A3A2CC5E0264D4B84600F7A0C5E8F7F840EC3F7635E3CD211843E33C7A65E5A3E916894BDA31B5F45C341653CD3E26B89257A6CBB51228D904 -7CDA772CDE3FEDC1278BD1851217FD9F5ED4564A6ABE4DCF0027A1CE073404207B1A5F0181F2303BB1F69FF7BF7A175F90FD81939B105197A87E32A6E8584215 -C3F59971768963B892E1D9F90EB72A2C7D54E96715495EC7514FD9BC678B671F5DACB5EF03B6C5DAC7E9AE583A28F5717A7763B03EDB41C6E542053564C58E13 -36535DA9130CD9C28610877B4360F125AF0795FA5B319E6057CE133979BEA50CABD1D7421C9FD90A7332A8ACA7290A9BFB5F08CB6F9FAD3287DAF8915E3A6001 -5FBB50B641163A617C0D208D47F5FE0B4ED6977886D4DA8A457A7B37E092F3213082FD32419C325B4C138BD2082DF697FFE989D984648F3FE343527AD7F3651B -77FF733B9FC045AF761B010D071CE4F01600F0540420E4DEFB6B57E4A168E00A31D439D6DE65FDC3E91525CB12FA5F80BADC627B9947E4DA4743BC91D4FC812F -02AC277EB23AD2C616D1F38C9F6CAE0D93EEFE58B15A8303806BF2047D3A35155252EE9E81E0F074DFF1B4D8E92029388B8FE81FA4A7CE8236DADC6B79B7FA22 -E82E69E03632096FE7460CCD5EE30A19B1D88785D9F6E0A33F2BC80FF6E7C614026105C01AB3363794FAD6D37C7080E59D70F32A69A2F6747B8B492E9454C60C -B365002C00CA6432AE9825C8E989C0900582443D8192667F4B8554B738420E228962B505F8F7A232994DC585E67D3480715906804D8F76E49ACADA648E608004 -8A523F69B651380E5A1ECD21CD77670F0623F9EEBFF659EA67D5C623991B6912487BC7E734E6EFAA3B93A308201B2D6D23F7E94CDC9225EC4087C2073530AF04 -07F6F6B86BFBB5E70BAA7E2526B3EA4D6D06FF3F94E142443F987183F82A02249FA2B9BD75DC0BE7B43AAEC361E668E5A137678642EB8D27348ACEC3AED5FD14 -2C33343A93EE27FF87830BA1965FF1F6BF7F28F7E2963E763162CA02B343CA161BCB5945FF4E9A6973AD501C737384D5C255309AEABAE0FFAFE5254A012FCE03 -11602D7132FE1EEBF1CCF70A2DE823720F56D392A2EBE6216B33843F84F86013F9EFC5C7B660D6857B41B29C663248C0B943FDA0050E51E6DA6790B9CCD6A216 -99B8CF25797CEEA276D9A5914A017C8B6A25212BF111BE59414114AD3E45B62C8C98946397040202D64FBBA9A45FB3ACD07A17608140EB76E174E036B1FC0B10 -1EACA3FED474CBD9319FAE36C2C9A91FAAB37749A94A98C24C1EB5669CE5F6172046B610D5DD78A421FA94FE051040B24B082CA3D5A3EB369A8B37D2885A952A -52F477CF782E74C252F3FCB28B82685698E6DE38AF1865004E46FBF5603F300B540740FFEB424A148B700F8ED9CE47BF32BA751B877E9FB3750DB34BAF07892F -C693E8552C6939FEE57AF265F3B8CC76CE6E89F18EC1852B639220E6BE1D4C2B49C4E015203EC0ECF5575E8670CFDE8E4D981996ED359C448499A9983D866620 -1A9AF6ECB39E4752ED9D7CE7CFB0BC8DEE44C2C54F2C30203F2111CE14778303CEC9741150AEB273CAE4C7A938A9FBD228D065815BF013911CA1CFECCDB0EB19 -D2EA29B5BC56BC6EA811F09851327F91246883784844FBF3DAD29A5FD6A5B119552ACB81EB86FBEF6F4CAC0713F0365752B81673D4FE2A523F35305F15A95D02 -E15339DC078443D9A108B9EE9A180CC718102CC6B2131F577533EF84186E8720114F61B030F5347D174949F674446C66416EDC63E755512F2CFE304ECC20120F -494D6454D9A398AEA97949920015A9AE650D29A6B323705682C599B8425FEB0A34EB79C3A5A760D27AC558CB11E759ECF4FE356A9CDC9D5C78A9279CBFB52F13 -ADBBA4A25080865A0E22E5051035EF3C3EEBA1EFD2DE86DF2D90BED4852952221DF2A22165831E229582B75ADE33199653A1371AFD4B72D6B14B76928097870C -9BAE0B784A8AE6B990541198D7C41A8E066C8F0BC74D02B6720A9FC51D3DD82FC2BCB8D1DEAE238D52DA2377F905CF4B1F80EB8E3B9D340E85831940A9C79D04 -8996B8C14C0F7446D900412FDB1D5DE78FDAA4383B3A8F20902977C9A6B32B0EBB1920F65C5897406E20D107DB9003E7D7AE25878FBCA1BD3B09402C37EFF52E -C11D2D0E943E3D0A8E52C5D49C5F74C37C8DD42E8B3D8E2CDAEF5DF694A8850AB13E64118619440D1BE893BC9D5E456C45318B70B4315D51EF9839478BB4071D -FA0B4D75F8D88B2F3CBDE1FBEB1C14B48754519DBA7EF0FB3C8496F9ADB81A22E7AE7FAA2BFB2B3559241D79797542A57D8C6DA46E199578564803781D6D1F0F -B268DA8141ADA18CE7A764880A2AB9D9B20200AB23BD7CEA1C16D4954D55850ACC6D0E43A24512385FB88180BCED3959C0A39673F98112BBD80B604EBE91A421 -96D69403055F93169EFC18F52DB80862506F5F01BB976008BE7FB2BD833EC11EFA6ECDE4B6A645D101627A3387B0E89719A3C7D0AC5309A80EE610B62758652A -97FF9F16115439AF0160C834981C7E62A56E65241A4B8BDC62945B6EC9072910A719064C065E0E578877D714DE6B61628752FBBBD76139C6887AD97888BB8E2B -D4F41B7AA8FF5AA3BBF12330E6FE7AC3A18E434D8BAD933A0318954A3FBA7812DFB3652A237C88238D117BB4555403AF4DF9950F47B333C0F8E9F9E151978A1C -EA9375DA65C8AE80A6B0430FABFCE551798005427A9028AC8DF6DC06212DF00C7A8599ADFE083BCF0265B7F7CCE20E90BEED1656B734E892926886EF5715782B -FE4285E1A77EDFCAF27AA09272AC3545BBE04F04D030242D5F1055B0F009CE29D29667C8F373794BA79B0A206729661BD624F0E0B57754C89BC91C371416D92E -F1EA679D611EE398CC0D4B1C83C4F84AB5C1FD1FFF09D706797084E40735DC231C43F5C427C59055B0A98BC39D831CDC372CAA19C868D4E2C8CE314D95B05914 -57826768725F3884DF6F9F936928CF80D3D8250E806D6C4B39EBB90E6CD871160F7AEC54554633E7C9A6FBF23F57FEB2B61C2430C5CE44E390B8F38CF1F13F13 -C1745258A1F4F9956818B87F5B6924C1D9470F9CA7C7F499FCD24D4CFFB9EC17BBAF13654A50392FD73A097306CE3AAEAA696AB08D49DB977DE1FEDE63B34415 -5A8B545DFDB3E306D9DC4E477CF6101DF1705F419D5FA6E6BCCF4F71CA574F2ED2605B07CD14A41EDF0DCDC758DF5054655805BE377B1A9E4B2EE7026CB02321 -C8E045E5A6F7946546ADD94F02CDBC973D8DD76BF97203AE8403904221E66612B093DE612998E9C124E47EA646BA471AA3B9CE9A531AC0AF851C68DDF1B6B812 -7DBDDE874EB9885EB28B420BF3DB2C47EB2D70816C298F1A1399FC7054A7EF02A818554D47E3C23C20B5CCB9DBC9A1DBC166DB657C0FBC56320DDDE5979CCF04 -190C72533CEF240001F31BC95040D957C94A9A4CF77BF0A5D2B8F268F1B3D108BD6CB2B2A70C7DD99686EC92F6F282E9A01D763D341287AA7859B51C0F875F18 -20F821995896E71B602C2B9668E08375D93BB9E1FA003E43315FA16EDB38551A312DDA1748103DD0DDF4FA65CD2BBBB19986FD2A84DF919670272DB270946E12 -623B3AD40A739478BE0FEFE0E6D4F2913F992771E5F8D972A468F3F085C86D2308FC6DAB735CF93FAF15D0C38472E8C8DC00E4B8A81D95789C9A64D471CD6C21 -00807B27179E7F06066F4D3ACA03C05FEEF33B0EF13219F025D5D418B691F7177F20FCA7808B2B64E29435F862C18D9C9BE2F164FD2F473EA5D4A9402C81560C -E520C6BCB39F378499BACFC1AEBFC91B7F7E2D304A37057588FB49B61F661821E20831AE2ACF0C0FF9635A2CA1FAC2A774293BEB647898C1B3A328FF0F45AC1E -FA16A405F8A15FD20CCE16222B98C4B2029ABC60CEA0E3C3DF27F7E599F2C91526F0931B4BC42DE1E435D97F9A96ED624EC8E8D99311F8F0E92972B584DF9405 -47FBB47F4A4985B41A2AA399CB46001362363F4B54C69AF67CC7A1E340A3AE2337A6ACF7E6388660B1D3ECD4E38CB76010EB267AF2DE98CBA72F5DFC311E452A -2951065F040D2623F16733F0AEA5C0A8BF1DF22AD3BF02CA743C0A3A0BCF7B12C53756CD773A121F2936964C51862A4E5A629C03E9E92559256BD4840A6D950F -D7873F7CEC95FE2E4CEE582CBB5B9D02C7E082FFE3D0E91C9791B5C98074F30C08DEFC8D72FA804127226834E0453FA0745296C93CD66BC5E046F4DFE4962010 -606E7A001C202D1F4FB669387A79C5971967860D09423EA36CC8F9ABEF574C189586154DB5F703CA7656F683540B97FC1BF750CE95F28412A35C21B314DDA22D -C55681D343E7249101C848794C51ADDD0720F61881E1AFFCBE45D8659F68F228E86850D0215D462EFE2109F430CA9EF7B16521052C3DA427720295DCCD17E72D -311EB82BE90D4BED908B139156063FD9EE382040440A12A42FEFF0753928290B9E170459790AF91903CB733A415A4CD98D7804EEE3CDE1FF7F91304E55B49525 -94623B25B7BAD0F4A81BD909E1E62FF79DE9C8251CFF2BD10E397CDE10B3B91A6A4268DAFA3757528D8D87EE8BB10744988EA96A98B39CA69CD02FD8F5B79803 -A69AE7713EC2962DECE1BD41A913DBB7707C4F8BB802ABB4AAA358FBB64CD8254FA78F426CEA005486A50720AB47900C49A7DFFD68A74BDC1ACA0489469E6A00 -084EBED237AD24C88C93CA5F509883B6E4D6506D5E17181FD074C1B91A4E3700FCE0942E19956454E1D2430091F90AC7F9B76FFC57B85E9D2C1EA05FED767313 -ABF3B02CF497977478599B1C9EAB25F813DA645FC983AECBA6D3073CF00F9A077B70CD00966DFB6DA12751F751C1DEB82AF47ACD7DF1D46A26B485F47BB1160D -6BF0E6C0B8E8E140EAD9345865EBA53BFB00E80BF52540EA9981B8FD9F2C55015CABA4CB559769FE10C78BC43676DEBAA871F07908BF301A37905D04EF14B915 -E8752CDA8F4676F5917C74B7C1E0619268DF2028074D82E5D2060D1E3C78B02CDA51B1FC4CAE2FB6B058B3E352AB084CFAF91B7418014326FF6F28D5CBF8381D -4099722D64C5F2B45D079127196F9D1E84569006402943D138376A1A2CC845263D38F7BB6B283F3956F6A2E356C58B8DD00A89B30CE109B4CA10DA3DFBA13A19 -E7159686CAC6168D7BDC4EBD6554ADD003F727C2CC77570F80D5A4528B1E042D265D12D2CEB9D67906C5117711E390D5A518DF5D4B99A92B68B9F98CE16E8C2F -0270D33D70EAA518CD2695220E749B41C37FEC347E2A97BE130D192A6B03B72E3638C3F885A10DD4410E0992B81B8922E0EABC991F4FCE9131D4F2DD2BB91129 -1B713FEEC0F4AEC329E4A7E982BDAC9A3D3DA368A9C97B7AC86C178871EFDC2781A786D9B0BAD31DEE09D95E3E713C5D99279E5E415B81A5B47DCCDC8634171B -4BBD10A76EB37D6A33C2D6C11B93A0C8CE71EF2C20AF661149DDA034A30F9513978174D1043FC591134EE3196C37E4C46AC5AED3D1BFA7FAB87142947E6CF11B -D8D57D2148399D78B60C368CB5792B8F88DE5D694189E94C2288226487F077223AE54BB213EC78A8C04D732CA2087F6CA2DA838B62EBF65BB32E8B6FFF54991A -68BAA068AD630DED0A429471C45EB9B372F8F2B8905054FA61855AB5810E0E18214EF6C614E4873D903240C9835F53A525AA7074F4A08D0735E2983F34291622 -99116CC47593BA1A16D0A4FAA59955531CBC067188F923A115B74B98C76056151EF1908641667F96F4F1040AEE756433BC86E8662FCB0B3D7BE259661B9C6121 -2C252ADE16F19A74A4B3A8015B3D61D348108E658003ED9A6796C2F468ED8319EA0EAF56F6555EB1D460199311474EF6760716B1B08C50541D7B852D4E7A641D -1CEC64BBD5705212E33429E2EADF09CE01385133085B728960B2260034DCA722587A0B60AECB16AD1DAF55D00BAF3EE10945225B41E63D270DB35196D61B4718 -0E5D30193FF7133A74BF64257CB49BB217BB2D46EDA269CBCDD88A085054F20CEB108F05144EB283F160D5152C5D48EBE38C08C79403FF06C7590CC20E8A5219 -24A04A8ABCDFA8BFD16FB298ED552F42D83C9D501E0906516C9B24E4E15AC708C1097B0EA09F7AAD8771F29A552123DF3EA39C5212288BEFDFB66866E327580A -47A344D0769894573E307B3BC985244B2B4670BD0A4A5E6D16021B513E3477150A1C6598F57237BDA4D799B6BBCA8162E947CEE9C8A008DEF092C5C7EF08311D -829D033B1FFB4E838649A450880F4297D8BA58F40DFC41F039381A2B5DA0690F1BC77B2A787B3C43059CCE8919E9CFF9FEB799E07B5DCB5102F13278C2EB8322 -612A455E734A41F81C1836C2BD7CAF04AD08D8A73A5AEDADB7F6034BE093C11A6A55AA353FCBFBBC0CABB141EB0816E2646E0776FDAA0C1A46A60C33356A9528 -3DF09AA36E7EF0A45A2D6640204283F5502D3D53B9095FC85BC3E995D22FCF24CC59BA0AE2EF767C3A4E29031EFB1CF6F437A88ED27641A247EB9A4491689401 -49A2D1BF1EEF73694502479D03BB9EFAFA61F09331CD64D5D55D0936D1FDA5245AD525474FF968B03840A0249575AFBDE8818D406831D7C5F797E92EA06C8F2E -B8E1BF067F7736ACD3BD1C0F5111531EBE19D6F1B08E5FEDE3DB263B85AF9D1B6627916DA8EF66A7CBE9973C919CA501C62EC23C9BDE5E54850088CB70B1BB18 -71BA378052FFD95BCD699FE07F284F52533156FA07AEFCBEAF48C20E9ADCB1062944475FFEA2DABE4DFB7B55B56B99594EBAE0EB1B7915A941F8200EB67A940C -A647ACAA6CC29C769131AE5E69840B0D0C167B5A23A57885A917131E2486A724B9D6EC54611E2EDF89E4D78F0DE9B9EABD8103DEB3F76E23C441B0173F69B51C -3CCD02E616D6AAABB7B5606CF7D2DA17264B40820FEBE5B75078B0C4D08E8F093CAB5B0EF59620959984D43CC520E856D83FA0ED1A22EEED379BE28C02409304 -CAE6D13AED9397AF76C2A47144EDB7B51465709870851B81BF8B4FCCF1F8121909E50C4E76793F238B7CE086332AABF50CEF8EFA54F8AEA14A6C265E2E3A6316 -61186585300FC5F5EFEE9FC4B2AEE79A8A7F0ECF14871AE24CBDF39CCCEC3A28FD7BBC4E0E4BF8B805922D9A8150A196ECFFD4B99EAE37D477B2D7E2E45DDB1E -448D40D3812A3115CC2ACA72C39E086CA54D573975C274725703EC6B7A08EC2C6F101A0E829AF5CA6228349E58D6C4E92B2FE0DD86D0B114217567FE1937F928 -E5EBF4DE31F152DE51F157FEF4A83047B3B6E2C7621E5E4804C9569A01E3F91998DA53A679F2EAE30DA7B6D2D5FC3716AD920AA5AC7A8DD4B7E016DED57ED122 -755D334E88EB2E38C0C7F5A936F0EC1728E5C50BE2A3FF76DCCA0E9C497D850E356B82735841E7A24E7E8B6BD8FCDAD44C74C24901A223EE37DDD23AE9B16202 -B12A16FB5FEF6F5E333F77C13E4074B9267718BE45C5A5A736C989F3181CC71EDA55E60D271635155214541D9671D631C97297050BA6D230B655A1D9090C180C -36995E4D2459E5FF8B4677E2658C39C51581C56A5F564A32A2D40D8D5E64F52F665EC0BE347B7352933395D1DEC872072E620FF420D3067ACFF9744F6138B822 -634E5C656130FADA46C0519BDE7CBC6FB2226BA3FE145ED55A0ADD1C86EF191822E2D91D40E7C22EC15803C1330F8399E72F333162795B447A4F7101CEA53116 -A72A8CB7377A3A13642C6D6D146A3794D11B4C472DE36D6010833B690263902350EB1A5917151CB89B9A0924C353EBE03D2B568EE79C22BCFA3B837098024427 -2A8BDFD0B11F4179717FA8EEC6C57D196E487C17ED98D0E5445FD865CBC60E1ABFEF005AD864F88EE3BDD0C06477A9F5F2216CB8D8ED1C2745D904D451ECA425 -E87B43737AE2CAE900A0C476773C03C01E63A3AC86AFDF21F87BF7390C003120A994154D7223CADEAA09A779B0D58BF54E7E71459BD09CB71A885D2CE5A3FF0F -856D9C942AAC5C8699B079C54E71CC7F872DEFBDC3B60C341819D57734555A069925FC5C16AF4EAD60B134899FDB0EC3BFAC35608AD06FD42639D3CEDFCB2B1B -32C208F3B9D6E19D6570E1A43664E1AC53E0DD5D5CDE26424FA3A84A4DC9E82B73256CE774FB2DF95377CA27F126A89A91BCC4AE3E45292E6FFC39AB3E396A19 -411920EBDBB010916DE0734431D053451A8E2CC052892C343479FAB39D04201F2165D1CAE4711BFF479B10A25DF33411A748E68079E5624C58832C60EFE4560B -9ED1F8F1B4B0EDFA5DCCA6EB7AB2F4FD7B8D3C4826EDCBC48EB3DD4B48E6D01FDCA73A78FDBA5E83D42DDC3AD8795883026F0E9602BF27AA7BEC3521638BA805 -DB32ED0A6256BADE414D2F23BAC4BA5380CEDAE8769EBED090B1117C865DF812BC024984E115FD4B9351682F502E020688E884E9CC53021A23E327D00B72791C -A3527A8D13281568F53432A1A88F89EC7C32754C48D7C2CA0F41BD34A1D7602ECA78CE4706C7B602442C80EC368CBA93F52CBFCF51C18D315F7894247A4E5418 -6141BC77EDA9E82B9A8F42CF06BB82098F7B9DC668B978D6327C343CA2B5C20D597339F1B4FC869098FF91C552140801E34DBE80FFCC16A1B698712A3D547017 -5396188204BC40B67D199995D534B9DA0C82161DD3F08AC6B30C1B050E538814366A023A840925BA00E380713C4653639CA89EC3432F6F144BF00AE4812FD20B -ED210BA27F6C5C5E41981E27A9186FE2AABD79BFE98748368CDD00779BD1991E7B5C6BF74551B9A9405ECB6C636D10D98737D2F6FDDCE828E20F914329320528 -8ACD4621069437F55E58CC33ACC2F46B3B0019D0802308DC41183A63C62AE30BC86F2903F7E8E0856533E851AB5DE83B7F04DD48CDD7EDA71B50407EEABDF920 -77E6A667E6B97C36E639DFBC5570AB82415E4D39A3F231D6BB46D1E97D5F400E76349F303BA2BC014D2F065DFB8E785344766AD6AE82DF6604ED43CC9439A02E -4EE98ECBC11F416F5C3A9770567817CBA92FD792DB9D8F0D232A08F4D92F510B01995574570E7DA1326EBD919C9A3493114FE7AD117A198ED1F232E54D774A07 -A1E339EAAAC2DE605D5CE9F042D668C10F4EA12710F0BCC9DB890974E5683C04B87B263080F1E84A179318593CCD16A24627223DB20FA539DA34206ECCFF852E -F0AA005504C4BC7996F0108E4B897D742748DC72FDB9C0C01A2815D68CEB4F092029E05DEE7B6CFABA36EADFD636B1F76F69EFDC0515744E93BE72246CCAFD26 -2826DCC2330B5BBB1B1B7D366F5341927A07E51CC1E9402CA08989AE603A4102676FE4100318574469AF7A806468697EE92C33FE49F58F6B083BFD8A6184E023 -320D6CDC7F595EB1F81AE9DD43D436EE99A1F6A38C7F5CB87425AB3014B0C201F067FA62DFE45E74990832C74A6D97A86FA382BB0C127C996158F754CCC10E0F -809C2BEFA383B4BB8FC97B7D9D0B404F6FD7CFBFEE163BB134667FB887D1E6111CD2C5EB782BCC7FE0898FAB7F47B615BC7DE54EBA70610A4903C4244303742F -64E94FAD741060860D73DFDF37EFD9A907A03B6930155C66FF9A604A55FED5260C6C4A4B56D2E52C532CE7DBD6A61741EC51F83A025345300C2E2C2E88AE7C24 -7D149B79F1D1792B951AB9FA63260E362B6829C8FE6D864E1889022CDB4AB00A29DAB68503D180229B8CD572B440797BA37319C3AD7CACF0A8125E2678FF9901 -4B2F62B0F6F76ACE36067E08C555F6956B365D94DDB4A2E36AA2E9AB1791F621764D1F9CB474349943DBD2888DD997DF03B2016B087FCF1E63D8EB32792E5F16 -B0AA002C4E01127E24DE7D3BB05509E81B1B8E782317F4C6139756AC285E690C58CF7D05217175C733CBD590483F3B05572052B3AD99B9305C680FC192913B2D -B1D9B99373314BF0D89443FD27931B3CB65C22BA41CC90C3A717052626BD922907938CC4CBFA6B90EFF498BD385EFCA85C247BC731AB49252505E90A77974D15 -3C60A7B584D5A9010DBD95709697BA2755FB5D11F6614C9D37CEBBEF1C4B6401FD0D49877F477B1EC215AAFC43FF9780DD87492C4540C285F9E260ED6F50F004 -64E451565B41D6B5A5D718BA3F446426EE132ABAAE27F127BDFEE951B73CE31BD9D07FD7887CEB4D7362E6F74DC719C0236A85F64D9538E29F577ED72F76190D -37D6601D684748A1935C3C6206C14545D386E2CE94DCF5DA297A3AD108C661240AC908185B161A364D9A67B09AA419FF4BC5C7A34E227E39E64EB5A2DF89B90C -96316E9D752C51A1F27F67A6B24D115C559745E36CBEA718B47610D7BD99E4243CFE3FDC8AFABC03B313E65F4DEE4CB0B111B11861AD327154192C92142ABA25 -EFDA71DEB91688D6A9ED1E02C71B83A088CDAFCB6A436140AC641C90429FD91C2A97C6FC9827BE5F999730874A012C22DA2C0C3669530A6777119E5A5308471D -E234A31A16532967901B25B098C7CCC9ADDABF5239EAE7520A5C9DE1A1ACFC2403EDA92A30A55DAB564DE0939D4C30015EE49A9EB50D005E962556DAC4C31925 -F48D6D859C6B0114D836354269F8DC5E2A37C8A52E3C6215593934FA8DB531188FA8DE519F17144BB30D94FA705F648C942E97393D5D0CED98A86CB6DAF02E12 -2EDA10F83D9AD2D0B68855117EB4FDF24D261B506BC040C44F02C58ABFA2B326CA95AE8FF83C9F88C3B5DBF16011216F6B1D6CAE936C13E9207882BEFE73AB12 -0311BAD98B67A03D18734D5CC40E192A83275D35E3EF4B3B44C85925274E960E16E948D04952A36269FA3059214CD5B4E7F66349DC215CEF33BBFE60E6DAB91B -DFD920AE2091C0ACA9D58CD20DCEFDA290A20BA4AEA96CE72B9D0C7DE40A632329768A8F271DA8A677E667C973874F2CB63252E85A970916AD36B9FD9BE81412 -2AA7E2E9C056BE1BD3877299D8525F8848523180D4896DADC1F50D36F00C24005775CB102F11C8F282221ECC8E5A59B4C8902953969D9787D6BF3E696E3E7C10 -F5D33C48702DED4EB0A811CA4CFF0B16BE9C496F66C57BEB966136BFADA87B25637932B22D52126637873A67D852732398F66AAF94BDE98D9B11AA78EF15EA2A -FC71BCBFA0A84796B7ED304ABB04E7BF8BBD9BDD887EF7A31FB98AC3E72E9A040552B205EC849112CB55A94DC1B59FD70418ACE491815EDE0CF715A956B40715 -46B25CFFA5293F6D845A3F910FAE518E25996C332F1A8F07B90144EB272D932107C3AD07E9B23EA5804F6B9600CD64D9D249264BD2D74B378DF1ABE242F70618 -E69704661D106A9BC1006B893822C453B46648D891B3D4FA241F792C2BAA8718DD87A315EDC4C82CB244E6A2661AC9FF8C4A4744D43049E0A8050C8FC827321A -E11EE75D7CE26DE89EE85C464237D2A29BD40A75F33305FAC65343114944421B0DD0189B84A0C2C257AB8D6F7F9C7780FFF37400764491FED24B9641FD503A09 -D837E09DA2C630FA59A7CAE089B1476B8BBCD939C2F02F9F296DE42AEE1D1A10D8373E9451A8B7814FB67B93B3759128370F7495B0CEC2EFA4D7A5A996990306 -7D6EE96143A551E3E2A99D3E2814743F96B63B3BEE2674D155EDF7D5CAD4D22CE407D1FACFFA5D92AD15F62A5EDF117907554DF93C179B99447B2F4019D5671C -7D887F05EB020D7BDD7F7C43700755360FE4508CFDB8299749A7B064087D7F0E528EB91AD98BDB86361D72D62E72BB57AF420704D333AAB77BA95D62D47A751B -CCFCBB9708773D1686574DD6C0DBE6F94581E9B5DC26CE78C49BFAE3777A6328A3372022EEC35604D52952F2C023F751CA4FC1566F82A1A8D218266E64D9A70E -C11E222E2A97008FE921C6BCCBC480DA3477E56C2553CB4293E4C59923EBF2000287E1E1D041ACC2E37D32750712D8441C76594260700C07A1D66A5F2DFB3623 -E18925A7D4D040D05358FA345671FC927263005159E866725E1CDCEE04357D2E7EE7A924C220F9A29BC2FCEDCAC0FD45DDF03235BB89E65BB04FE4E24DBB6E11 -49AD6CB5B890F0329EC8B3BD3B99FDCFF4D23C023CF863DEF6224E3701401E241A0D5DBE09A6DB5C82B4A5341E733B8AFFB19AFCDC69AE075BB88C656E25F925 -67A0E63CD8E779693A568153E95EACA05AD062C46892DCA5C023C7B704A4790E078DA5FEFD2FEE53AA5DB4C163172C6D903B442C50D2B3850C9961AB380E0612 -B5462074C4437B4D4EB6C18069C4403B8820745C2A6F1164AC7246AF7AD62F23F73FD9247195861E4004D5845DAA6977C3816D707E2B782E057C7849BAFED105 -D0D9C5CD9D6BC6A7CCAB6CEEE6F78B72B545107FE8D2683FCD5FB0B32DC9CB05D4C65ADC35B02C4AE7A2FEDD7F679876EC53D93321E4138978B6526A272F3C29 -4AADD31B72B699854F85E446BDB884BFC03E97295B5BA862C4D2861C7E7B0618BF5E228E752ABA75C03E60663BAC6D5CE2F1E98976F0C9BADB5CCFE3490DD308 -6F11FF77461139AA3D9797490DF63393EE8A078AF5D0A2DC7194F32BC4F60505CED723D6144172CD1517056EF212653A41FCBABDD3049A4807F4AE03D2A3772A -01BBD48361CCA65F375552BE013A8C75255C41DC3F59F9EB16704A1E1293070612FB5F10AD7F0190501AD4F5F67630598DB69AC0D78FE7E32B3BA0709DD9DE27 -3FCEBC9BD7C7DFFD5551CF667EF04EE4A8154C428C5DD1156711E1C53C1BAE0F9ED885840AC042351A8D7D3D102796D38CB0F128B3B4563C4AAA37704923BB0B -8ACCDCB4D358FE474CACACD229AF9879A23234EAB221602DDD179D9B3CE31302A29F0A2C4B5D8875116ABCC76887372A1383E0F3A73271F400DF8006FCF6FB1F -D7B7A5C4B5E6133BC3A0BEF4C0D7E732F3A47C72C82CA3DAEAB0D2867951162B0A4587B41866B736D29EF09C3D2A8DB42A01B468EECB02020ED49FE371C10610 -4F68CFCF0D9CB97C12864B32BC5176453F0CCFE9FB487FC4BB19EDC5A08E331509A661261F83984E8E612D223C9E683F5C62A6B158B8E9CD6A058DC8BBB90406 -94016A24AB26863D37AB48C56EBF200FDE3BBC3661EE1484236789E400FE25119FB1A4EEFFA8D4566837A6CD9F19CF4F367389E876FD5C3CD5D0D8E5B072A207 -4B6C2D993F00BE22A11313CB1FCB6A10F8FC09A1E03E487D1FBC8E52643BAF2CB638E88D9CCED7F5B5B9557FD43FCFD8176196BC580DCBEF5E4346B7AB53BF1B -A4FA25657241AA36EFCD1496022D9999FA25E1189916641D7173AE0A19C5CF1E8228645ADC2F221F94FA348DCB789F7636185936BE6257204AF34C51C0B88A2C -34E2BF344A8D79846A56A2BBB28AD7E182651F8AFD840F305998A6BF1C1447274404F5B02779A9D826AAAB32D1BE43D142C1408E802EF8BA618738D9786F141B -ED6E7EB8DD09E54F8B8BC4408CFD4B82F7C449E950ABEBE587F9B4BABC96E5202079B19DF5500A5C37C5097380B2D56D562A81061675532C9FEA31D466E9F101 -FEBC4AE354D218AC513384A52D8D251BEDA60EC2BF5D74D9FEBC9E125B5BB918CC3F17BC349664D3E54D9BFF5D2047ED348BE53EE34C3D6E24EA21D43D07CE09 -E3A4A7640CDA89B83F6E03D2F6B311BFA01EF6245550D5E116D9F46BFEB6A70DFEB3ADCB4B3FD8F39F44BC3EDF82015FA3DBAD85AD370C629F63BE42C2CA0E09 -9C0C032364A728ADF653D8593B2BCA0BF075E9F1E83FD8B49439E143E905D02F0CE2D14F2FA9AAD221D92C8113AF7C5E69D68BC9021A69D1366C94FA3623E629 -CECAD293ACFD1CFAC27544192A17C4DAF70EE3BB0B97013768D0EDE330DF0622ACA677649D20D8E1311225975B4EA4D43F805DF69EE4CCCFEEF2AC2BC1F4BE22 -6E49897CE0D40383DB80FF300B6D781C9E02311A41190805C6AE415B8D65F920BE4B5B7CC4B63710FE50C859CC60C3408D805E08F4A0CE90F7E3EF34FD01F526 -5C81A3D5F747E1A533A6863C72B7722599D8745E3B9AF03A6BCC0815BB55AB02F00B57170DD250EDCCB43BE0EC15CEAB1A2F471D32794F6831C0FD28AE6E361A -7D223D0DE563C0F87BB10BC56306DB3D99A0C0742D22DCCDEF138BD472B21B222D9F8AB85BF761CE6C98A8214A06521F223DED7EE34B37BC3D819BF8EFA95C07 -B0CE83079FE26CCC37BE897D7E79B809B077C46C14643AD5EF465C1676DE701EAA78EE018094B949ACD195C782022BCA5EEAC179DB04F247C6EA710981307A24 -88E2340B46F4E6F3303F60CD8A30051C42BB9CFA5A52A9FC115444DB38D61A289353AE58A167894986895D24581EF3CEC177A25EE37E592B54B8315C5B673D23 -D2AFD9E32989F040D5FFCC55ECB78E81F5FC5CFE176A783EB0CBAE697B4B7D12C2AE38588D2FB0437E8951A7B5E4B21099234847C9331584C946D3EE5E1A6F06 -16E3F3D8C2616A9DA1F19B596DB9509C22941D793959DF74954B2F08DA02FA00913DE23E65BB72C4FFAC808026E81C195B967F11FC5907633F66199069FDFB09 -B2764F8CF19EA985AF477AC46728845C8125AF015A83D109B89EA28F821A32079E119FC339CAB7E0662CC9CECD1B055CDBA49C434B72B06853E09103126B6325 -582A33B98929414B4A0A3969A872E02FED964007EBD6F35C9735F4A563771E0DCDB81996490D85AAE1ECF3F963AFCF680DACAD5546C4678EE316A49BF198072C -96E0B1D1F0246362BCEBF87B5973F38CE5530A385A15B845C732656A70B20D05931BC8266C1537733099F1C721C0B35BC557DDDF9A399B0B81A4B74AD2351306 -6DEE57B3EBD11BCA3D199D575DBA2926DE8D920C266D44F2481843C6DCE16118908B2CEFBFD99A7B77BD19F5697823900E2858A722F43BDBBB7F3CA4F10D4E1A -DFBD186A80C8C69F5BB18A3C498604BF20D8399B8EF819A56D869CB74F2DC709976E10B920F29C67CE06786CED53EA94B085D58B3D163F97DC3DF3561D562C1E -E5F9179BE37E565F55D762B3919F6D399571243BD4E590DABEE8304C35D55619E2EF6CDE994E7FFBBDC6C7875B43564E3B9BFEE2846418C229A6CD09EA07EE02 -914830E74B5E49D4B477CB009CEDF4A53EEF28483EB25642B39A0B0FED2D522FA1BC13184DFAAECA262F7D967B56FC9524C51C2ADFBECE42EFCB42A369C1891C -5795740E7C5C8241CB1F67A438E05138EA8A2D9276D4F33F029AA1ABE9EC0B00A07B55DA0006FCEF56C47426FFE2858B4091B37948FBB2BF8B3D158CBA7FE629 -78385C38C3329AD5881D6D4C103DFB725FF69154A231A5723241A789273B0316A2BBD77B2C0BFEB4C9F18621F19D10D6548C370A18A81B2868B441BBA81C3729 -A99317E4CEEF0FB5B57E7AE3CABAED71BA0D0E6870B9323B571DA104D6A7811BDAF1948BB1A9EA7DC1193482F406920B9DF744FC04CAE6B203E2ACE960750823 -3BB5F9093A80D9F5165CB452B24D1CB07CA5FBA229024C199956E37152888D20732114C554A4D56271D5B443AB693D9671CA15E2A724F0B31AC91535007F4F19 -EF284C1D53969756A9B67AC9B80D340F66EAF516CD964F717482617C1DC33F15DCC6243B98E0CC34466229634BE668EC50E2B172B95B431BFEB484C198B15E21 -605ABE7A615A1569DEEB8C8DB30E76B03806C4292A452EDA4AA92B2CEBC25C143E30FA1B9BF3B6FBB5A4CA14CDEC172F354A6DF654BF38C8E05B6786B62FA60E -924D2E1992D51E23E6B096EBB72A10613FFFD33A13F5B36CE6B72E2DE291F328703B2AFEE42962E4FEAD7F153AA3C2BC61BE64FB8383E444881522185A5AB21E -49AA58419FF4D62ACF19460BA964FDE3743F3FACBA09D4102BEE8154A4E8C6047F285AE443523AC24822EA629159ABEEFD7A1A7DBDC1F3011E599B25F86B4E16 -388E711321DDC4FD822F632B3397227549370D2CB0D46EFC8B491CDF3210731CF1F6AD17D4DAA44B40CA43FF165BC5D58636346EC2D42A189DFC03709F21221D -A3BAC46F2AA11B1EE6F33BC23B12B9842AC382A7617DB697D1398247C13093063E33170353883AE6D8302D127A09402B6AA8801D04B71C31E929D958B25F6229 -49E2A5E196F19430050B3B155363FF829A988DE1559D1FE3DA698C96A46060274587198C4D89BF081EC7523B5E139EFCE29C5FC2D060BCDBFEDD3C3BA0005C01 -80FB15E98D5D71071157BA1E18608AD780D81A2346F612C6D988A498E33718289BFD4E8A76A95F2A6A876C3513FB34280ADC904161E3B9450E9101468B80091A -0D3B6C486908B183E68E2AD9664E3E1D91C9DAC5CEF0DC20FC80DAB2765E7624916A8543D5D1922B93642090EB8892A3E07DDBBCE7CF5773F2984274D884942E -8D0A346A19FD3DB95E760A611E07B67B07D18816F7D1D11836CA6AF9888A19042C4EAD27C96E201A6FA1938A9035D59E455E9CB62146A5BFB5E0D88A6C75A812 -194F2432BE568528FAC87682CF0A11D8252B3CB4B6047EACB88E76BEF72F17227CEBD5D086AA4D505FAC2C4E3A36DBACF9F88BDC8CB1480E302B5D1D9BC9E717 -80D9FA9BB1015DDAA267A2F37E137199C84FE12FD3E0322FD32B7ED69249D50E172E7B225C0CB15D48E8040D4123970A06E37C6FC884F7D482ABD89B1AF06230 -FD182BBBBC32615E502C2DE09ADC8B8C0ECAB879E99039FCD39CAE66E453440B9DEB8BC333FAC62A4E62C32F1AC6FD83E3C539CA07577C17104CB0A0AC0C071F -8DDBA665ACDF1F7489E24C370388E79B4D5E56DB21CFF0E3D5F1BFF35B832B0C8A6413994494EB9FDA22339483C5449F989F037DDD11FC60F03BA42072CB171D -2808BE6DB3596DF0F9CECE8CFC717AE8DB2A3225169BE81221FF1964D270A62E6FDF216D9C0197D0261A1DB0428DFFF5D903321199F37A319B8BD904F9578F1B -BA963600B8C2EBB62D13382574AA8790D3BC8EC76028FF80E8BBABAA22EBFC1A728566C81C6FAA512B5CC7B191D7012746D528D310424272C7F5E8197A3A8328 -D2E67581E81BF2D1B3E5929EFC3F03A13ACC0A41858270247EA003EA5189DC23F9024F9363FE1EDD341CEF668C441E1821805392DA2212C33AB8F6F5ADFBC42F -28BB536C47793CAE5482144E983B5CB3E1BF1FB66BF86A59B4D90209F577B300B28D1EB627FFCA81CA70DB266B4D09D139407CF7D0388B49BC4BA50AAFBD192E -04E14B784393CEF24117A005F4C036274179B42792A585C90C2280179435170ABE6328AA4B4D6877896C93AF1D56FA35F00155DC18439663D9D5B90445A1831C -35B6371A70B8701EA6903D327E43448FDFA8AFEF5D563E5ED648E688A0D18B1BF9DAE87C6971DCEA9AFC1EA7173AFE41384706D943908462895967CBA6523F20 -C86E689122527334E3D4937B18DC30A28DD9691D8300812F115861377814D70B24D68916FA56247818DA7ED535C0533CF69872C9507BB5EA136E71B9E642372B -F58553DECB1125B38CBB9A8D4C8A4B4A428BE085E808C1AD94903935C7170D1FE3415A87863225BA8F9FE5AA411CFA45D6EBFD4890A024BC497A86635289A203 -8C9415C23E80381EB635347BC1A1E84BB6E561E2442204B39F20DA2D09804C30D74F05E95AE75B321971B40290DB56376CC8FFE059732F3D38CCA1840FC74A14 -4BA8AD030A5B649180475AB7FC0A3D7267E3389B29918EA6028609E944679F03E4F14757A6A28E37D983D3262982FCD273D7EF3A3FE336390555ADFB4427E62D -4E750B7F593D3F8E8D589A66A434346E3B5DB040052DAE7107D0593576ACF02EE1114D32C8D60AE980739C1BF12D7B91B13A66AE3FF7F6FAD0EB226C60A7BA0E -8359119438C7587FAEB09A053F203C38D2F515B3DB2BE4E18C513EF90A2F8329539BB51486E7ABB341EF25144312D94F860111932EC981D42227DBA8FD07A924 -3E4B47874C9D8353D2E6B796C03AA4CE74C248C2009BD3F1E5F665DCFDBE0C14A6E596B21828B86CAD6AD6D0CF5423B093E9AB92725C182D5D9EA5511B9AF523 -0CA55561A8C33BD0308B46B6F4FC44D6B5965EFEF30A35FF095103C268971528FED14C6FB1CF7B88BA1AF17019C0796D5C8BDF9C354A034EF7BC5CD15B7B7A20 -32A6970285804290FDDF299189931825CDCAD78C8817B99CD91AB0F50ABFDA0AA90427638E996F5C807A02324081691B34F8CA4F6B1FCECF85A79BE42542421A -060B0A503172BE9F8B935B4B0B2EFD33C48FDF36A960B2FEFDE0003FD1421E108F4DF5572A9C6DCA66A4AF2429B205AB28F150AD1D5A08095160A8A0CB1F331A -DA4107271AF4102D3A0AC48F35B6DEFC27ED3ECF4CDEBD53AE9EF7B4E408D306430C283D1CBC6D1A67191FDBCE8562A3CDC116145C76EA40B2D4EC45367D242B -1ABC141B5FEE7A9026608BA3F03663798D5C0D43A10ED786A2F79145A82BB40A6A0A7A051C46B1379BAD49F1739FD9927A03EE7D2D3296F6099CDAFD475D3D1E -7CDBD314BBB83D44363375596008C1412E13C8063C3E4388384B60449CF83E1CA280BCE126287E150743C227E4C62532720573A96E81B4090CC9C197F1AF9415 -6D2FBB1E824AB12EC99F43D799E4B79A96B596CBEEC0B100F05446463B68812BBDBF5860CEEBD6A60AFA21891C7B6A006F5E8E2821620D18A30E32B1AB43FA0C -312FED551F428916F196D15772DFF5F04E73C576F3E7EF807051EB5117D7D808EFD1378932F1B2D72F9FEBDE9E5236044C6489C7B9536695ECFEE74272501F2D -D7DEDEECBE6234A7F601875FDF154BA54D5F25C19A49E36EFDBA9909F5DB3E2BE37CD2D7BE9D2E8695278162AFB88157AA9FA29C8F35068B4C182FD862F28E1F -41131B65E273357CDDFB1F55B7F44680F38E05F40259009545A6C413494B551BADD6724383D658EAA2650FE1D6E209440E4D1EAB42DE696A7F70D577CB6BE40C -D215A8D24C329E94977CD274D29744CA24E6521035F5BCFCAF5CE32B735ED602F97DD6E2A1A23F86AFA58C7572A6DB3A2B767414FE88AD963D14BB5B0BA0FC07 -D4CE0BD7CA46973821CB07069D1A0B6FB85D5451A3466089FCB3D2CC65AAEC01CD58F07DAE4A515182039183D8BEA453CD209496AA4DFE04CE63729FD18D5522 -3B092FEF295555C31F3883084A91193836741CFB3B5D5B49C1B1E84001534211840C1911C5FCB241F334BAF337B80B7F1AAC7BE73263A909DC74F3BADF5A410F -131BFF2924DF83DD6B89344836D07BE9F9DAEAEF68A86BC04C00C98B4733E82316A3A078400945BB1223A5D312B69F6CD20393210FF7EC941E1345F64B2FEC15 -2FACFC2BACCC8CE23608E4E28A88537BD3D5FB4E65AE95573904602E27466D2BBD0E406DBD5DDB7431AF412F527F0007E8F755936166FF9E385A53FE55311D1F -744DD75FD74DDA0CE8F3E1B70F0B6D9F57721FAF4D748F2724FE9D3824FEFC2CC5AFC7FC893539F65F14AEAB76B4F98330F080C31E15BF5E41F0251D8C200B26 -33BF96C5AF4E80EE45502F40829E5002D6C63D4DC4689D886728FB22F9114816009AA5D045433823930CC87A8A3423210BF9FCE4754C1E015F1F92542FE9BF21 -2E1EDF3C30A7697F09AC93848475065BE3580DD102E87D694BFF0DB6908AA0028CFB9F9F882027BB84DCF712F1E0797ACA6AA38BF4EB77BB7D967729839BD41E -9C40EB58457434561F4A5D4198B7CDA14ECD90EA5122E7DD79F59EC17295C3007A8C0C35185BC63B0A27B1CCBC60965DFB705C22C01A3FB1324BF2D4B2202925 -E5A52FA99E81B46ED389557C0AAA122BB783EE1E3842C758F6576DB4D93F87151C75AADC23D256C0BC9721126311E7900A71B84BD845FD09886888238132AF05 -A5B8AC8CEB8DE1D0EE07F85BEA368F4CC53BF3B0FDD96EDFBD32604EF955D80923537ADFAFFE0BAF5B3C6F203352D8952A098769141AD023EEF0D62B784A6D28 -2209EFEDAB698081636872727E1D106CA0F939232D4FAC96FDE239972ED3DE22620CA8BCC42310BA0AAE9884B54C8E330E6EB69B3AC8087B571905CD0B9EED26 -C9DA95B205424CC8266554C94B316D1D64CE6F4017C98823A4A88B9F2E219023BC8BBD3456BE27609275168AE8F816DB343CFCBB6BEBD3A238C8B1742122000A -531DB55E77513F238E957FCA7CC5F769DB94A42CA10AD88F8956A35CAA2FCF254328B1186C4B2FD715C7E011F13ABBDD64209991B79BFB401E347A9E532C0A16 -77729269171AB266BD89A278A49A7132B9097A45CF94E3ED547950864ACC5F26462612370AC7C5A938EAD105731C7830884512DFF9EC5520E46F86C9FC586B1D -7D31C70E0C8918879724A12CB1AD7404A6EA73E69F446399DC47F912A594F61B191924680CADD7DC6BABBD8825C5E6B769D4D0B72DFAC1B4A6151064AD9A8021 -11820A33ACC695846CB33FFB3C6BCE75EC1723FC615E51CBBC7A4CE0B60FEC03BE271DE02FEF8B26E78C6D3B115A51AA2111673BAD4A856BE1665DF430351A01 -332244F3F75D008914EE4DCE8AADB065957A328D0A51C7E4853ACE2F210DB317DD7A4E3FC7D92FC75B186AC25E5E46B0F8105D597B8D064F057234FFDCB31A2C -05FC79F4CA557FCB342632ED990D6665C61FDBA8CC132633AA08453440D174280AD9EAA9B5C9C42F47FB0154C6DC06661610FDC9CDD4D9FC6FD256B7BC3C2003 -40124EB336C49152CB8F558B2F75DA9AD5EAD3A4E297FDD92DB6B93C07397F0829C16E9EEA0CBA58536AE3B0E76839D3C9568ACAF5B1CD112A250C26E736BF0E -7B674109ACF78DB8A208983235D680D7AF5EE7CE7C2A5F7756EFA689C02DE82DF8CD02178554E09DADDE95A341872D5B0D84FDB19AD1AE71769259B75B9F9D1D -E83B974E348FA337F5957D2C290F3AB5A9DB2C2FC95D871E48F8B6C524D2D1227790A9E8740904C3D649DCFE255CC23EDFC440ECCAE4CDE2B979D65335B4C302 -56606BBF5328EC42E91BFD325491BFFA91B64ECF6921B1F231B74EB635A29B26E0DDE396F0ACD7042C717C20FA2BCF3E5081BF62BA737258B4645F6B7078A21E -86B5CAE08171D55421EF245DE58DFF86D89710F3BCAEF3CDC8EA3468F8FDA9242A946FD2D4E743ADFBBE52F7025FBB4322D7A258BBD377F59971E689449DB60F -6C4CB9423EF6B97643567E057E80621D9FDCD928BE8C42B323FA50883DFF7A0E60A9229EBB24B320B8F737E188C6B8D6781001DEB1346AFFB256F50465212430 -1B9B155A50C1AF0F39BA9C625EBBC28C454DE8D2FF1BF11948F77AF6A4B4C321E5BE13715BECA232928C6EE66E0F24148ED3B82D36A723E018385321932A3428 -4393F0CAB2E130B0EE727CDC5EDB0A5E2580F40B1D260D964EC45D279B188105DAA8E499FE76A717007033351D6DEAE319BD11686E10F31405568DEFE8AD530F -BAEC385DBC960837C588F2BB581F51B867D18F19B855D7CA1542A186A72824306ABF948DCDC8E2E1C58F667F45624344C2918600059C8A166D87A4D24BDBEC14 -50DD211C98FDE2E85157B86B0977B029F0EE95CFFEA5C891F6CE6576A134AC1D0D366948EB19C9F1C0C48DB3EE6FF577D63489E563D895110546C91F29AB5C13 -A1B243A28C00488DAED05C16D3A6F6E3C7F6B16FCE3A93132C4D6FEA159620114D4A0568E261A63F07DC4CE8FC90B2C13FC65BED4303701FD252DC2C5EA52E15 -D2536E0929664440E1B0F8E0D7763AFD5B2BBBA18BB9592002A9A1EEF3E57C103F7792523FA395796BBFC43527C6685915ADFE8ADD16B01BF142EF241B69F909 -5353DE268886F244D905F77351A7704E8832463A60FAF1C7EA1FD884FBEA4F1F4A460B51E7CC3EDFD8E38C9EF004176DBA90ED6054531B63256834B7E9902E08 -02FEB0ED3EC926E9F3DA9AF3B96A2AB735CECD48B4F241CDFA14BEA17A6A7A013496648371990389E63B91E6711D7150377DB65333B0E99F65F9105BC301A406 -3E74692EC9FF6FF4EC188CC09EC137E85C0CD1C95F455AA1FA3967FD5154F4108C6436711104D47537E25223872FEC79F180DC2CA98C4FFC9A229E52F675B70C -F87636B34B66332DC8DA1772D3A56EE0770914896AE1237B2B3D056E8D923603719F03245430103ADCB552837A79EB900F79652A31A4DEA08E488C14CFFBC20B -B546C8F1632F53A20286F7302A711290B7C5943840B10498D184ADFE70EC22294928DFB19BCC11A6AA7100F7ED42794FDDEE6B558F415DD48EE244FC05ADB801 -E2D6B4C1BDF345EA454F59CE62AFF31185B28AAAC2D479F3512997A2D2989401A09AFF26B94BACFD76812F31991901379DC4C430325E375FA70E8F0B774BD62B -92C350A9F1D6B9261031FB421E2BF7FBD34321EE92CF528E9366BD3A9030B01F3FE0AC68CF1114C142D7B89DB24EBC0AD87BBB93580B3DA1519A9AEBF4A36B22 -D19BF147DCE7E5A2DEF8D09AFB46F8BB3B28389B69C89C7688407CCD478B792C10DCE6FFF235A39E9F27ED3119AD7F3956514337364D635CA89C733BA5821C22 -37C9730DF959C81C93A03802495553B503864700248C9BA48E65AACFA51BB017CDACFF27673FA8B00614C349F3106F993D1A904F95CD2FBA08D0C5078781D60B -B5E3DE95EB2B66311381332ABB783DF314094E6DC88EABDCBF1892B3D70BE305EBE68A30D628547700D66C02831D95799F9A0D34BF21521E0DD5D0C011AB3F2D -0484699C5BCA9244D4AAA8D186E971596280A7336FE48B77E63F881A409382065E0EBC9B864059941D2192A9A242D79625998FE11F4C5F67BC98FC42A574F702 -CDBF430271AA7038640144FE699F6B97DEF33380DF91621E3378A970C8575C166B9F7FB38FA1D2EE17C071E79D6C88FA623079CB8AF3F3613F1F9A8C18B9922B -4F31D493DE74DF9BE8DA88EBD121CBA28D2B21DEA327263AB2A0A36918969C2720F9E788B9BB8F5E7E1B4AC3043EA4675402ECD74BE5E9F8F1A1FE27624A5320 -6A1F05A63E277F7427A04BF5346FA4A74E2D756229BDCD9D35823B17B0DC250D4CC625B0CFE2CC46074E4CF9A16A856908A188966BEEA26DA5A795A67CB9F328 -FE4E49E3897B15985220979766EF55F288E7F3BB9A03B75098A58E9793EFAF006FE70AF6C87CD2A8A4816D41271B00E8DB3C48D1570B8A0E1B9C008656B0D029 -EA9D213F5F34D63B5166F17F6B1C12EE14D3B266BD4D39C0B1F53E0EA03C8D14E6E280ABFB7CB7CA3122960FEE3FE6AD680D0CE53834919489B96C5E092DFA18 -2D3BCFEEE158845E74CCACD912143A76262FDC5F276770751563CE431782C610B01150A3B2FCA8C7DA61402049B5ED97A12855703E07DC22639A2E4F0E3BC503 -9500978FF78DF7BFB8D2541019A320521341D04448BE1C7F2EFA70098001ED15185E8691FDC9109DE50CD21EE5EDBA39B1F579858A75BCD16B85F47BF5781521 -FBFFF2F0783FCD694630508BCCA27ACB045EC2845C25BE0F150B9F3DFAE68D2661E4E954C74E28E2F11DF4071C971DEA818211EE1425A4BFE3BAFD74B651DF21 -EE6BB89DFEA52A594D5694EE9FAB53B0225147508056D8ABCBDF8BF6EAB2450FF953AEF1CF08470702D077E0F3AE342AFB9BEFEDAF7328F9960F610F6CA4812A -25A8403793F104C3CC8BE4CC7DC74E62EFA401E32E2FC165715719291AC77A28E37F81596DB1E89930D7F916B6E1DE845A0AB92181507C1089980235BC473426 -8404F564F665DDA2863F8428D9536FDEC687822A495427308811ADD0765EA91DF86E86F68321C4A29DBD5D396E433F756B9BF2A295C4139FE09CACBDDDBB9E14 -22750A64FC62E6FD5D61C77DC0BCDA893C62F20A0C7B6DD4D794EEC2C71484029DD803E4CCBE0F34C17BEA5C88D77B688169864B734C2238F2F532A007587106 -0795F876275C0D5E7233871C35A2524A69A233B1710D8CD77B39BD236F25941830F9BCB709C459581B90548BF9B54EEFD49265930B6C86ED9404D1A061F3F310 -6248A06DC6E941A359913535288920474A4BBE75ACE33DD9B3C3EDE52FD4A02927DB64BEEB119EE5934CE706F8E87F407CF4734B7D3425798679E2421C101C1D -B494E21115136C86D8AB4A02BDD13B78A7ACC3BC816BE8D3371DB8717AF056129CA071865890D21D4E1A6EA80FF304A2C9C783D3B9455057DBE955DFA68EA220 -EA53EA97803BB585B5514E4E32924BEC85B7EB26F184A80B4CF1738C95FD4D1492DAC8398BC3608C2BD332BC08E6175ED575130325ACD7B929AC21D95854401B -D6F9F78771563873B007297B54487568AB6046F6C437D25F7A3871211B1F9B0BE928D13D3506221BD8DEE62CA71B6AC10075FAC0C0EFD43B21922BE927557B2A -F1E9CFC425BBC1C5E82B68FFCB1F4308FFE60AD90FCEDEE64F74BBC0321523156BDDCA0F1FBE8B59EFA5C99A8A1AA7D095E32F3C7E55B77C997E5DB8298C3C0B -D017A3E0643612D15DE0DB3D3FBB6C1C6A7F07929DFD402EFFF21FFAA9E42F19600C0D8C1365B6FA2CCC97861EA1A2D879CFFF3CE140D973FE210C3DC93E402F -CAD01AF9F248C55E2A7FB9921528A79301ED4A2A08C5416D0B015678D012D90C50005F1984CC0D0AE19F2B07C822663412477265D3D7F8808D8E0F82DFFDC709 -026032D28D3A737CE1361EE233476D31D883E4FE06CB70820271594A239F221A20584866D113988F3E20B8301BCBCADE7652370E2BCE8851265B630CF8E3E312 -726E87081D94C17AC0B7404CBDF9D9076A4B7B45897A84AEF1480BBA19F0C102954E922D04A85D6C2482FD5B07C92B2CDCCD09796596539FE3D8D272F097DC04 -1D7E44DEC9D02CF6D7188243BD2BD62D543BDEB6A8A612A9C34D72E254F9CD15F79E64106002DFD75F4A3ACBCAC4C95C9ECB2F0F758FE3619D33260A3840BF2B -40B6CABB54201084652F50723B6C81941B0B5A83906B13B8AC3621DF3CBE4D0B78B3E833F5B10D98C507495B95D35F97FEAC9C9CBFD52B8FC3D48FB68205E61B -6612FEF8DD32080F0C33C161A4A0F762451E9B1FB38C91F753FB8C73179E1217461D8AB2470489932A94EBC96B40220238D2F2137DA5DE6837410A524F723F08 -394F75268675C4C5C7377AB55B792F149D9FB91E4047494334F66CCAE0BA76180BA6C872A64F6FD6EF6083D6BA231FB348A3019909CFFA7A0B7C6CE744FE8317 -A95D38B4FA449001B2C7E64D66F2A9E7DD73CFA25D0AC3D14B9760094FA0320E3B2903F2270A25ECBBA9A8D11EED8D04DD7A4E50E58B42950BE0054723CBD310 -071F6CAEA9EE3599EC48BA047EF5F4A4FFD132235FCC7B776C887888C18E8E2FE5F942D3E0EDD5AE993AC88D640543C97F7E1824A848E86A1BE3196D2BE14B10 -F8911E683DD073A74B249DB6A1FC17CD58D3BFE571C7FD285733D17056BCDA15ED39FBF6607CD06F614BB070D1DFC594EBB37F844030B74F637ECC394B24EC1E -593515FAEF06F2919B9ACDA9768689B68FEB38D58957B40C665B5626ED39EA06D6B071AF28BFD730830F9FD5586EDAF069B77D2B738F5636796A740F8B12D82B -70F484608A0251ED88F67F1EA3D9FE962A8900F6B0647695A7773DBF2F9A8D17F14772152F984C2F8612653736CAA8A86813C3BE29FC5D5C50C14DD1DD537C1E -DD2F6205BADD1C19A087642D59632708C21083769E019FF8B0385DE002E58A0E53A2E4EBBB0E93A5C76F055EA24F77A40AB711E4B4029702DA4BA168F3F4980E -ECAB354E1EAA6F27CC1949702BC2C739D215E121D4216D51946594E3848D5106E4F2B9F20C10DB3D0F4363446AB59EC2C36DB0DE4924F0178C39BDC0949D172F -5CFD740CD46E009D0DE68B7E2F67D06A998D660262AF77B4BDE2FC31F760FC00461D25ADBB7564C4BB6FEB167C54FE28E737AB12EBABE5C8FD52959292D05806 -BF193AEACD1B31BEF38B88A986D5C596DA1DACAE02F7C8D94A8715F35A52FA0805C30630204C46957B75EC09FB0813CBE882D5906AE1B1A092C8128C9552672F -6AA37B88834F06FE3FB4F9EB0F0681B8E9C37B2B1F8F1A50119ABDCB8B7D06080B790B3683E073C1D3836D15C1CB8DF954DAF60103146BBF11F2323C7CB04D14 -815691F9516DE75AC810674AD20463EB31873D5AA66919F86CD11C4F50C0BD10B2A6135A4F93705921847BB58FA5FABC4AAAAAF227891F0E1F7D8D5F43295F27 -DBFB75FFED0CC914335796DEC2F40F0C21C2865C15D695D676D37868B682A027BEA9E250D9905FA529B88805D31135923042069EFFF606BA097050DEF5434507 -3CAF4B83272C738402099B5716DEA0E78C5CA071D2C2EFD6D1E7074F699B752D881F98D3E769AA069E0946A2B21E24B2DD316D28917BEF48CBA52574DA6C4E2B -CDF014F94C8BB7488B5B1805C09157AF5F90ACA156C9E14B56A1A60EF47D7307991637D5C625CFA701FBBEC0DD353D926FF4F958A7F07BB40BD8FB28F258EF2E -BA5539983848BC56E6BBD7F109C9B16BF43B2E74FC62C4001BDB92BCC434B211A310755C6AC272BD07B0417570D528686AF12EA33AC60543E914DC0A20744B09 -829D86F1486C819BCC4ADCC0CA4D4143CE1F871C88B2511A5C90D89528DAC2056C618EB53E72881D7A058FEE8D8FFA921781078510357B961E9FC03205DBA20F -A8958FB2C7AFAA0510D5B96C07317F6E79E72BBE5266E74382C6BCADB890A20BA820CBD133A0952D07B3367A869D615A239A22FC6CFA7C6C9CAA9AE8FE5C192C -DADCAC0AD8EE0121558AAE6A8B98A82DCE7671AED3AB4836ED3C6DB81531F22576808A9DFCD6FFC707A17022535C5A1CEF6AD446E766AD82C233086786540528 -F5ABC952E82B9F66CFC8E1346FF097E91C816DD8691D0ECF99D2CD0FC74D040E05B689D5401274C2357811AAFCE2F205935C42023B11C823705F56487D7A7F10 -5FF46EC5098ED69890C9A5CC9DB4D679DD31AE3484939B57E36EFDE9376E68165554C82DC985A5715B6D0C0DC685B9A0694A4E5184278D5B321843A20D01E52C -902B51F8B552A99F6F226EC6629468C95DA3A9CF270386752416FC68B40EB4050F1342D30FE177260A0FD08E238AADB5C7D336306831DAE45A034B6E32260029 -C6772BBB693398DFFAB093772421503069D5BD62A41E2E10A8516BDC6E4EB41D33AC7FDAC8EE2A61912EAEE6567B02E1589459F37C49D618719F4D6E03DE1D11 -C99C0723A17D7B4FBDDD4EFEBE711F77380811A5E506FE0585A583234651A706452CB2A7829DD2BC3AF36123BA58EFB7E53EF2653AF2C9E7BA474B0231CB7611 -467E29A6349C16E7943080B1A5D476FD4DF999A25F94BA7140D44F2504D9DC00DC30D133CA0803450FA78F723C073EADF7B93053303790021418B6CD5AF8D921 -C8B8C7EB403DC9D2BA3A298A9AD184B55FE7BFBD1840295760CB5DCAD1C2772F423D7F30802AC125D05FEEC681E16D12AAB2BACF08ED27CCCB9B9E7037B39C09 -715BCEA383C48023A0389E759C3E1C16B21B7D4C4C6276027BC3013941F275042E0C803487A6FC623A24859AE2806B967A5711EE75074F270A146E8C41B46011 -DD564B62D28C5F6DB47BC3E5F40049E6B065AF4E1FAA1B6EAE14EDC10C22901D3A8A11C7FC8E1F5ED50531D92D4FD4C9A8A5A46682D337A5D4AF7879C4260213 -12C13EFCB9EFDC550F4812195D3F734278E6B70683813703FEBE6972A6A8B429CBD86D1350598FCBD3DAA40A67EB2FD5750E46CFDA6313376EAEF8C9D0CAFA20 -1882CC15B0D156A80C97553D72E5EAC5E1B298EE84600D959BBF9F9E05D82A00C4F868681FAB9342E8162A352786249352F3D32E40CC549F4B2DA346CB330C03 -72FFF80AD7252971E518A0212912BB9C06DBB71430F38F029F6A2DB71A2D1D2D757DE6F3505B5A78A10EA79D44DC48BB9E2271148B52D316357A48981CAF7023 -A32A2562EC4251CE1773B80731B7DAD7C38E061727BFBBA22E847448F91A6A198264FC1B0598AF0C30A05167B2AA57FC34DA934A94288C69C608AD3F18653D2A -41B8F35653F936F55A39149E45D31C7121A6C7CAFD066A8485535EAF0D04AD2DCB5DA6581AF4C4AC4FF76EE440A07A8362371C6364A368B82247513A0D1C7719 -D099E455E83F2228D5468C04F40BF570D0EEF509340C8AAF8D6973F411CC1B0DE1F771C9ECDEEA97E3ABD9C7728D9003592CF822263EDAE98FD78C8F2D7B4315 -19179477A835C5DD6D857F61926AAD9FD13728CFD6E6D1F648219DDAAFB25C086AF23E3FAC713FA66FB85A89ACBAF88BA9106252B672959F8EC6F5ADE0A81C2F -E45BBB2CA95D99A5A1FEAD70EA2A716CFF5125D744CB723E76EC3CD1A7FA68277FE2E3E9EDC0DD88B76B2216ADDE6AF6F93C0EBE0AE522801D308E3F0EEC5813 -6F5D0450F8421A1BD314C8A3728778FD1CB1AC8F20D365DC0A8DA00A2BBA0E14F017C326436A977D04A133097DE353C5FBEE163C7A15BBBAE9724FD78A830004 -32CEE13257845F9621A45636404862725BA17DC4536818DC6C5232D992B1671AFEDFA99CA0172277C6D1F8ED7CFBCD4A35F4458CD32181500FBB734C12099C04 -DC12FEBA5804C9E3F902D3672993B713E9450AA773A4B2A15980E7BDA078461FC6299E1258BD66B9F5A2960D4D1D26118C11BFC5020C242EE1D700BD4178C201 -EDB32D2AA5C99D9348374A1E2BD6800247FA4A00D7880EB9F3A7EE00E809A10B9A2C04B20BD7E1C953D6777C4CCD52E055353BF7C620AAC51D9304DAA1D27F29 -BED7BC86975EF7A261C64976677B212DB70881DE37879710C97A202F28504929B399DFABE010C2028F640C2AAC8512B20038AD72E087061220E91BEC1DEEA22D -56C557924CBAE44CAFB7EEE69F73B163B612A1F323A7B3A28CBE51BC0BD8FD15FD5A43A7BA009A3677CDBCDD6ADEF44CA0C1AD50C25FFC7962EF8C20B841BB25 -9492B8C45182F564B14EA698D43B43F9AE0F9DAA54D21B358F34D20AD592FF1FB320BD3B0EEAA818BE5C05A9988BCF4440F2F98CF035D2121FCE9BB996B64810 -FECBACA6AE0888DE7E41F9021A88CB1DFAE500BA6F6A50722F78CC858E799F256A1EE489FB6A2F1E7CD28DF125FE006063B80E9C1D293D716A3C08FB5868B129 -CF83BA530E88AFC3F0BEB36A3233CD2D329070EC99FD30EA3EEF71E98D92050D4E56CB83C7D85427F299D61CCD1091693BFAA63D56A9D3AED6C86534E1539E13 -5DF8C77674992A46F7BF304FFBE554A910BA9EA72BD242FA0F5DE077CCD5DB0D6B661049FB422B82CCBAB49571103DF53A9B19F4A7353D5A81D1B9E8084E4115 -4A2D9CEA602168BB08B9AF41034A6E96CA332302DA149BBDEAFC634E4820BD1A3AC451C5E5F175E26B599D2720421C3FEF36EC5343D656E144CF90A669E80230 -5C0D670593953C899BA111A476552D75985EA7C0B4D939ADDC29A1FF962A640F506A841C47ACF8F334961BC5B402A79EEF398F32AEA72A6C589EFCE70CBFC72A -C0E700DD228C48C1F80F99F336A6720B02C188C62312A1AB35CC232CAC0AB225056D48FFFF2B26EF44E2FC2674CA4E86B42E54C8AF1549C40B41DE6928A45D20 -37F3AB31350A445020E99860E9FC83B3D30D4DF7D42D39B3AE1AF47953568E0273CD73F2487D6797FCA4B1FC7ACF1C1DE302E25D81A0795C5B6A20A57A430511 -DF297DF92EF22F40BD729079709B01A1677819E47B2C18AAFD45DFB9C512DE0A42C871A5A416472119928BECC597ABD70809216419185039C06A898D7B5CCE27 -4D62690EEFBC4D3F85944FFED2C3CDDD824C45B771ED865B9B95096EA8BADD2C3D716D8655CBE82730588B5D12318BC331DFBA6A33C584E027DB186997764A0D -A6C65E75F504C674DE51980214E8B6FA40AA0B94DEECC1D12EA394CCE1DDA4037D085BFAD3FE18774F8AB34BDCB0A0B2C5F553C31F147A6F235859FDFD66190B -D1D2A9C9E148C1BE4FD3514AEF17AB368589DBAAD9B28FCA1D94C4F1F05EAF066E4321275B104AE45BB63B0BEAC13273AF480D57FE8F96BD717FC728A821041F -8149A68D0F140BC643134E32DA052F305ADAFF4B986C0FD4087F387637C2B61A7D375298EBB62EDCF89DA1CAA49BD942AE6A079C05EF49C4460F1C89F7595017 -74BE3143256DB0B993DA0DCA087FE60C7B7E8E9CB62540D1F0065671E2EBDD0C58F005D20834A41107D5616D1FC4410748E5E19D3036FA6A5E326E0E98618214 -D0A71127EF533E6B520EADFD4B2A9755556A82E3682DA8AB3467C8A28D2A6E24CCE710DE0604D29AA68F8422112F03899A160A7078A5DD379E9DDDC6313F0407 -64FB0F324C5CB90A1C9203AAE547C4FAAD179FAE853C93F90DDB08413EFD9F29BA66618DBABFFA54A6227FA72182E3B1590EFDA1F10CD20C0845044D18080517 -7EABE11D14E0C27940A8E930D670668FA3C4EA585992A10699B544CD0E07E40CE11ED90F7FCCF9E8C882D39C96CF572D170CAD0378A170FAF07052BC25BF3602 -C8AC1F2EA65C9568B2366B7A1D5CD8538694AF692C734A03431156C4CB4B4F281F0E4930EA7BE7E36C3D263F5FDBE59E44FBFCD9B45204594D437FE775FFA304 -584919302A7BA4239857953AD3BFC402F7553962FB00252CF3B6AD9D7AF5D9238715A59D8F13C4D972B71AA002173539B4114612980150BA7ED3E377BF671210 -24AEDD1CB8C37C1E3BA0A7586AAB889A6A27DB7F359A964A16F978F9B8A5B914579BE03A0406959BE4DF61C1842BB0634FE97A3A893DBF24BACCF34022E8581E -8514DD88D3B8A4BEA84C10D732524D5B62F058240055E360641B4C2E6181B01D4821F698E6C26AC9D37D05A09C9566D73605E7A0F2C33F369E6AE02103644402 -968A6C255D6DD0A5454BFCE20FBF289AD828CBFFCDDC50DE14F6D5695C56260084ADFAC919E5F4ED7663336B0A690BA4709E57F0048FBB2EF4B87DD47852F82D -6ED19103671C717F29692D292A7C3C2C066FDFEFE4E171FC7127D2392BD9DB22EBF8948427AE46343AA1D1722FF82F6CD2172154F7BF3A972CC7BE6BD74BD317 -C9E29B1539D39BFED1D4E0741879DEA475927939FDB12AC0AE964A81F142FC26DA4F19AF77A54FC21FDCBAACA2235C294C87E59FF3A3284729BD72B427736909 -AAE3716A476721935E81A83484DEFC1F7A9E7D59081BE869CA9F92AE7E643D05601504342CC7A5044106C38E4C94D038AF78979C6C0BAFD0EB552846C9598119 -1DE6D3F4BB9526E51F029E7E20D5A9E074C6C7AA32125C7332A6F7CCDC40531A4FEFEDCD50EE248FDADEC56DAC9A2FC34AB79A037549611DB71273209C513727 -63154F5BEA4C8535C420E4A57515DB10F6A81737C870D19820C4CA7CB411BD2F6D3955F8C47C13D1D8893E7F96A0E5B42CA3CA3E41521DC734A8CA38DE09552F -2216C9EC63A271153CC60C91CD3D053CA8778AAB0F5BC9D198BCF8F23414B51B4F5C6DFDD354781B4C9DFB4DF0FB1C703A38D54995EF52015052357636E0A911 -D18FC864E5C553FCB0DA7C84FB688DA180BF9DDC73797006A2AEAC1E3F33482695CA3077FE4AF36EAFC7C52E834097EEC43EA6613DC94BF383BFEE23F1CEB427 -2DA58625370C9D37D7E565F41F92D39EA925A33FE7E0A23F596D786BFA1B961FBEECB237EA476F4996A3DBAA7C01A829F0055884126A571133D9F0A26B68EA1F -F326209A090A1D548D0161EB8F9924964C063F6F0ABFB1C1B8EC5A964659231253BD1752E29B8178C1174242A962C36957FA32955FA188C57DA2B99D19341428 -61C028026EE4530B724B402E604582AC31BE4CA341F5683B6176017C07E71830BB4CEE9C38324FA93EF511B05780A3FABE7B0D89936E34863A2E634F1D3C0816 -37014DBCE1B8A83257D291062CAFACB5EF25C7F817EC7A20750A8FABEDB9D01EF8757A3241FCB6199306073821BE9E773C2E7759699260D23B01AFE5E4C86C25 -14EC9F0303C94BD4536803CE3DDB9DD5C7AA37264F083DC4DB56B44B196E5106B8D2FE274214B8A23E924AC55BF284B0464A1EFB3E301E5119ABC3B7503A611C -58EC6C9DFF06FA48A4BD1EE5C6B554D064AF08BB748B605BE1B44B2D27BFF812CF8FFD75E5DF8ED15A19DF335763DF790553B67E37212392D0E8FA2FB718DF19 -883F273E2D15D8307FC2063AD4D352A4E0FD6C43F897C9D066182C6E037B6628C7E019EDB289418273D13268F625B57F1500A843132A76A4FB5FD5FB8EABA729 -467C025CE2DA8650565833AFA76D242F36183805702884255730BCD75283F628AF1A13CBA0518421238B0FBCD6C97114153E6BE999708BD3EB729596D1A7420D -918DE7CA7E90BA7067803987CEB0C7A4303BA3E76A2FF3566036DE580C658D159C2E581532FB45E30CA970B0773BB15D7A28CC42D6834AA8B2F89A2BF28D8B1B -066F0201BF409C23766FE8C78E0A54F305BE7CCEDF53CE1B95A34A6AAD9E32174A806836C2E7C052FE22A851390701B2536C04C543914C502D9ACAB76E0A5A2C -8F89C5C9B7357618BD9233555CAFABE44917C4DBAB88BF6A441619A83D5BB31CAAB35D239564719A5F9E05BA20201F5C60F567FFBD69B7F0B24F9BDAEF720106 -6C0C14AE50226FE10B95676C42402119878A0E9C213869FD2D17A792EDDE242EE0FCE3D7A6AB0FF41361B9A57C7C21DC7E729A16A46A291CEF076219E66D1001 -B68C5EEDE895E1CACAEA4D237D2B9C54A94229B354642C87DD3A67F4DF2D7F19F1DD7DB7283F29C26F35DDDEB71DAF6157E7960740BDD5A59522EC743229CF26 -92253795BD132EB168ADD8B4305022413374B0CF14DBCA3200296FA53E99A51559649ABE6B761F139994B500B4FF7EEBF15A5E6188173B7D7AD9FB7CBC9E8B27 -FA54E1E7071D4214E3A22EC4A86411C681893098B11A059DD51102C1E36399094925DB31A0A763673BD4B8BEEC2B4EF26009005D529B64CAF1E755D85CF0492D -308FF712B81FE7BA3009F5063F22159DAAABF61FA638D72B76969A1F4724AB03C27D0AA54B1E6E3CADD479F507E499FFE1E6AEDE3B802E84E41B6B9C0A192E04 -FCF3466D46C30F6D888679A6DEC09B4DC26A1A7783439C6786D4D85A0B340B21EC856C8222992ACA197DFDBB6D50C50FD33CDF69247874EAFDF0F06E1232F90A -E5414AF5BC819E13B7057D46A460E1003589712D3477C220F5102946FEC04428E1FAA235FC188523392C1B2279F60C4E2668F4A094079FC0C8174DBDACA3B723 -97EAA772BBAA136287A73E1B19387863B8A986D533F52911B21A3B4BA7028C2A2C975DBC7419F5D038A1117283C1EFC6827E5EB4691C6BA418A41BF92C70152B -602C8B698873083C341075A168D37D7B0D63254924B8B0C529FCE3DA8A45A822B960652A35510E71D7068FFC33EB00C489E426930CDA16989892E91F1218A92F -5F462546E10587CE869645F7D8EE42F4D7499C5637F41AC25D18575FA121222940D850C9251748C7146C12B43967348B7F3D5A4A6A4ABB5DE8CBF1583CC86400 -1E6B8BF5F7CB8F290911DD4283FEB44830E138CAFA6E46DA039808D5A544CE00F09737CAED54EC7BC771E32E558FD452A9B23681FB6D17B169CA0D5237FF2F20 -EB0F5DC2322FBAF7894E9FF830455171B26FCD3DDD6DF6E4B6FC747D235581181155DB0EB352BA1DE770B42FC9CF83A6EDBA4BEEB05548162B3CC98B87F4912C -F6ED53CB22ED5A7AA6E7B1963CBB9AA56073FBA109CD6F6B0706223D974C561E2BF5929A0414A51C92D1D1572ED249AB55498CE6951EAD1F57FA2B159E59582F -B693251F66B6F8C50E419CAC2FDAD0043ED2BA80CFB91723633F1B92F6DA6A19AE652E8CBE9339A6F6D9EB6092262FCA1517C49123D9C076387CE2E3930CA026 -E305E79D34D35C157C7ADD5BD2E8183164634DB8EC89D75731E9EEC9F213E916A0AC7725D7A27767DA8D05D2700CBA512EC7346804EEDDA9F494D52B6511900E -B1708976004293BA1423517DC81E8B430DF7A951634CB59B42E6DAFA7E2133018621037E131685E82A250F92ABDEB3B33CEBD7B1912F7B189D478A104CAF5407 -7A6D71F3E5469BF44BF5C096C831F7020C973642B09CD2D78415474A71DA102D1A8B7208FC6EE9704475B28911BADC83DAB12D22A1140D8769D4528E9FFD960D -C86BDAA531BED4DF54AA1C5C4C3996E4CE1EFE89B8D76DDC039A32496D580C1320A4A71CFA1E0A36CFE9962027CCBAD8D2A65526318C0DB2B82147C117D20808 -AB53B4221E7D1E81B474ACA9C25B62F5D2D9724417A3A1E6C83F9FA131E5182F6C9289F40E66CCD541CD5BF0567C7D6BBC55E119D5E24FF7920E264725473D30 -74E0527DD84A5519AFF5747AA2FBC07182081104085E43BA541D57A57AFF50195EADC8451A021F7CCD1F92B670BE1B8634D316ED8CA0D1950F735FAF75AF530E -7B63EA95E61F5A99F95EC1823126D825C3BAD3A5B8A2EA79DB67AA8690478807C84CA1A5700403BAEC849BE210E2FFA0572673FCE1236968D52102C41D7B2312 -7CA4ED291A71C86B248181FA0023BB9390989C4E06B48273C3E3401C31424F0F234C2C56F8F336E2C73DC8F0312E649442BD226D8A5F8FF1B651F0EEA1670C23 -74D5F631A4A9D71B706D5D9B4C6D34020683BF0BD075236D68A51F08084A5F253A410BA4A285B092581CC0E643BD4B071B2A7C6D251B78BD3B679BC1B4D0B52D -DB58CBB898E12E143EB2818C00F391E934EFEB9F19F1F5E4C8FCC663525EAF273ED688E03F8C875E3B361FEA75724DAEBE00166535DCF5778235A01003BF7A04 -5371AC0A65A3F91C6A67AD0D6D79E720BFD6DE741915A00F2199AA720281180FEC8E42BCA2FEF579E9EC70C40FB491C68E6A91D054966BFA6285E455F9F8C52A -623AB5DAC118BE290D49D623AA15D5DC58C913C1A6CFA3DBD999AA036EAA800E4AB5F79F3BDC2535EA08091C9EE6464D51B2AC3578E3E43A43786390773FC218 -569E47C404B61EF7D1B01339C009F47B525B48CCE855F1C238925AF192C191138C0625F87337204C8F8F764270F87829B22696A94FD52C2CDABC6A8870D9F613 -2E896AE531CBE67D62B044987D4230B570C2E4C7897C17E6786597B6C042621C558AFBD8B81580260491F4F299DC7B97D9CC93AE00D51E701FE11B990D96E314 -A757126BB5CB7FCA044DC17F8DBA35DA63F5C87D0FE27E15DCEEF35FBA35960A59D61C74920B295A7252262F22D6827FAFE0BC01653F8277A9B1298F35AA3B16 -FD53F2835C6FC8D01A81DC373CB0182DD3F7AB7B112A450BE6D8ADCE2702FE224C28C716FE2A1044C1864500F1974345DE1AFB3CD214E11C4A6D6E845F07912F -A6057E46DF1536967C7928C9810C733A24023E5D3031E699407E13623905BA03EFFA956AC1CB48BECF0570AD6BFF8925853E879C91F3E4829256D2E131A0FC07 -20738C8F0B0ED0B5095EE7AA8AA82D58BE7516A0DF389FE721983891582A4A214494F588E67C79FB3C3D3501BA77F173911DA0CFAFB2D8427741473B5AB50A20 -6472AD9126F072B99042F93C84EF09C35269B893EF1CD8089109CBADB0D4011969D2273C8C2A81776D0DFC2DAAE8E28E07C4D918D51593FE84CD28EFFFBD071D -57B79A5951038BCC1967E2407E44CDBDD82AFB32F69AD678893D951920875914B912CB45F6E83C2E36BF32CE24D3796A1F843594BDB9D6E87459BAE9F6E7F909 -437F80599F5D4F0279429965939508946F35EEA7A9507CEEF01FA2D8D879F128789A7CA25CB19E84CC4EA40AB55C9E3AE48CC2CDCF23C4DE9A829997574FDD0D -05779304696EF1FEF942B89DBBAFD26B6546F66D1CE30425CE01555866C98F0E47C168A4B455B806EE53EE1CE9852CB5F914CEE948608B25A0E00951D5B93615 -45DE46B21658B533E7B5010CAFE119364BFDA3F0A1E470EDEA984500F3B5862A503C81D779307944BFB577FA3834A34DFC995B3477CA43EDBC60B04F5790A42C -CC3453F53C366023BB160E2FC4ADA9C4CA8E7041D5CB4B7C473C65E6FB23DE213B2B1CE035CB83C0F6A1316D41C6324CEFAFC2EDE66FE626E0D548130F48F618 -FF9B3408F36D9C84B0684606D53A574AC18D5014654ACD18C4117023EAD717235AD1652B348988B2DB52A66E5040D3B0DA321BD51D9E2D84FBB3B57D9D0DEC0B -B8CB716257C014552A4B8651F409CC64E3D375434D4826CD2016F12362B6F81DDAAF472F18E78A3D5F081372127C3D2D5C3BDAF343DA387B0EB3FF7DB37AFE20 -07BBD02D7C264741A7344C3537DE81E6DAC1774C87220059A9C2710BCF80B41FB055A1F852DFCF50FD5427E3DE7E51B1DDEBDF650D3088C4F8F1ACB42B111B0D -D41DF460A6E17731D82A8146C4965F8FCA50BE2679D862C5EA23AFCFC6ADB02329FD7ACE28F49ECE5A846650A3522C70DA18ECD43602A2CDFD8D52B50639B105 -179784072913120CE263EC5FCF2CA2390D3244878104B29B02509BE5FE673C1F313EB4E22C20F56562C3C43C0D81EFE0670587924443C9B5A4ECEF4238AF4729 -D3ABDD5AD1FDA7D82D207FF7331E2D323E730AB50E2412A6D1CD99F7BA06EE24414C17870F6BE9F33DBB6D28A27D41F197B6451490048D283FE9FE0EC4E65B03 -B32A3835B828A3C8BC6DCFFCA881B2DCBA103BD4CADAB1184B7107D2AA308E0F7D3BF388EB1887DDC958AB5815183F2180BF8E66DFD080FB09ED4EF13A3BFC0A -B37E9C0533D1A8A53AB50C6C6C960E01BA839A70218ED888B474E73BBCBBD301230AFFFA6AE256C5583FEEBFC85C8FC86C91DD57A23098486E3206C3CF1EDF20 -36B0FAAD4032798558EF74EA61F365E7A91ADC742F289D56DF92B3D0DA8362251837B985440B78FFD6EC8D0BF8544A77E0BCA8DCE5A7F200315A4B779CFA1004 -BE4B239377F87FD6F78A24FD982B38CE38570259FAFC685A4003798D992F950F35F0A65A74A0E56E21913A85698C66EDBC54921EF2A40B4EA744A7B5107DB10F -66D7ECC22BB7DA362FFEB262D48A1AA0337EA0A9B6DF908DE2E2AA46B4594C19184B445664237B1403F0F350682864E1ED3E5D26535D7A3AFB4AE2581E2A8D2E -411D084EF37963DEB4EAC6B736BE269B2C6593C6F11475D856DDEBA3AC954107F4FD876A8C3CF69FC10758BD72BE17F9A17A0810B885A47BCE0DF95E53BA1C08 -5B840898F6D5217E488DF05AE2F362678A0C046CACB7AB2801A5995611F142048BC0D0A13606A64C1226A6FE83B19171BEC846C4B04AE700FF2A403876F2CD1B -B4C3BE0CED48061ED1DDD14D54795B45A9F3573D731A88CD83180C557DFDFF1DA96A1F10161BCC64F4EDC12A4C0BA17D55394FDEC6B085A539648B21209CCE12 -9E62453BA43E40713FD594E50C5D0DDC6DECB93F0F273E767BBF0FEFB4F7F7010A496BEB40AE0600272BA89B5033382430A3CF9F336CC2F54432256639695A20 -8D59BAE2887AC2B0263DABE5FAD735FA32400AABBD5DA96B86C4BAAD51970A1CFEC787D55D735AB2AF9ABCC48A91BF6F959965218231F26BEB493B7BC3751A27 -0BE0A3460E300444D692377AC77457F6C2AAF0031A3FD41B1A6FC3D4149BAE27AB6C26F78AF043CEA36511A2FC036B65FC56D0124F7F07D75DF9C0483A976122 -E8AF9D01D301AA283CE4CB37449B10FAF80436A0873FDF207CEBA5BE814A51111976C1DFC115068B384B426565D25B0D021F713486ABEFBB8960247A025E6511 -C6CE786B4355C51A73A45E1D0ACF20BE23DFF00E09D08626FF2BC7F2205D1B18BEFD9B0C60697B5A5A0B834703CB5417D57E687E745A2A74DAFD2E88D931A81C -61A4E79B380BE1EB9145F119A801DCC6AA6EB417C139E9491B2B28C2B1F6A213013F5E3BA377FAD7DEE824EB686290C7E425B799DC357DE5EE83EA544047F809 -418DF85A7258AEADC3AD0F98E0A808761F64DB5C1EAC2F76BE8B5BEAD923FC14E7EB63B3B0103FEB42A837001BE3F334947E8C821C12537300520B124A391925 -15B25CEB3E6574AAA01BA5679170057B47D6B65B20C6632C7E4999A86E55ED0AF2597246CF2A6EBFDCB52943867E87F14EDE7717659B85E6A8473F698170FA26 -CD1DE886BF4603965FB78ED9EDEC8BA1D0C92BA8661F1EC2EE5D3BE96B9D071DF88EF8889764E5AE31A2AC2588224BDCD939EFC4789D6E0498602248E86E0021 -FE0E95AC3ABE24DB40AA1781F0E1CD4F2F06510299643CE40433BA74755AB617D5C0933D88B6399D5A4182DDDBB2DDAB3423C2280BAEBA70B2F7E402F329A12A -C7AA303B7070364996631C0F0EB99E1D5FD339DFD4D791A7015FB498607924117719EEE3A11AFF0BA49E3D50002D13FEB0D533A1E4355732A294BAA3D4285E0A -5BD2F0866C8CC57B06CEB39D5856B3E3DFCECDF653A43A89B1C37C5C5D6DB72BEA148292548108FC8E855CA19C9F3EE4CC499A698DB4A7E23384E0F60519BC1D -ED0D249D4143FEFCCB36BCE932B8E00117EC0D79E7B95C67F3DC6705ED05DD25A6E26CA32300AEA5DBE35CFA5BFF6473ABA608C688EDE67D3B6C258804A47828 -64B6231C4247CDC6020AA95955D531412B7F484C2BA4428B070643441815A21CCE6B1910D8DE2C0FB7984DE185C1E481D5492BB499320FDFEF2BB2BFF2852919 -3F0832D5DE9017BBC3DB0A27AE87990D1D18EBBD26EDA77EFD9CB8BEC6D4BB2AE8EBDA8D4E0BBEFA4CCC45E77C72DAF8DD354D0AD7E9F5545450B68D0C7F0D1D -507C6C82D839EC21E1060010AF5BB95484BE0A803DEA01EEC38525F31F1F830B4B4D5EADB5737D54F5EEAF1CC57F93DC270733105D62B1CC3B3A3084BDFA8127 -60415F108BFC61326E0CB2A37E465819B4158E2F862AF47752B211EA555CAC1D27C140E63894D55C38950A65B9F1631D90EE7D9E8F9882D22ADCA24B6F3BDC10 -334D50320990F7693162E8D35313B3B0B82D18FAC639B5BBF0FA480CE915B526A0A2F1014439805706D17B1F02FC3C2FAFD88FCEF57A27278184CF57D3359F2B -B42871E11B124E69E3B131EB73278EA21A5B2A3B1B3F8E3D80F616AA4F180130A95084DDB34197402D0B6C7D322C294BFE491F14ADB63BD30E09B96CEA0BE809 -5891DE1262AC4ED61A45A3D7DEBA04D99A87FBD502B759422228AAEC39908D292EDD6D1BCCE5DA6E8D9A17219674F0856EB36FFC807CDA5A0C613A7B562A8C00 -9EC6BF0042F023AE6036100D25FE174A3B4A5873A89FE431034B1DF98379D11F604E95FCE19F557E9F9C3E7115A501799A21F3B848A2EE85C7FD009C7AAFF212 -8CEE3FC222D52C11C7EACFDA9553E2A16B3157C33C2F8559B611CB702F13C02659F2550305ACF4918828E424514A21FB169B44DD615A05F74F9A816DC557B216 -FF8507973C12132557D0D1B3A8352D3DF00B6BD7AB55E11CA7C9AB945A7177247559783A1BA06AE338276DD7269D2E4DAFAD4EABE4C5469FE79857DAE788B60D -38DD44317DA0A61BCFF62FE744A71DDC9352C943C3E18A258CD0DEF79873010A783AD91EB317B9C80C5243DC6682267F3A1AA8FB8E4110C8F0AFD49D062D8C08 -3A28BF236E59D0867A2244623CE7586A4A1D6EEFE75C421F0F8817595B078706BDEE6FC2611C9699C24F09E2684093CC07A5084674EA80702A02A97F7A52EF01 -AF7B813EFC517C82B0501EB7EE378212F81B3CA9EF3B316468FE9C08B1A1841959FB3B38D72FAC1FC4B3C2B84F7149BC87004FB7F9C9CB3879C89440CF44DA00 -1492A768829DA88C8AE67B770DE1972F3475BEE85CF231347E69B5ABF22F7308FC5EC23C5332903D9074FF7314CB7CEBE4217E11F1DB45D377A85BB9AB6E340B -AEC243D93779A3E6E5D4B5D4B8C6DC19104F5A3634AA192F778573030705C62498ADEE67F5DCC21647E048C9D638A5C09792854069B3FACD63A3702BE713470D -679A18BF9DEDA1B3A5D08D8BD4675E8166FBBAF445EAE41D7B6F6E4F8E877D2E5BD2EFB321D3F6F19D2491BB97112257E6BF11107AB0862A42BBA63F3372D51F -C2BF016FB2B24DDC90D34827E9AF5768D07BC34182F13980273D74CA514C880FA07B3ED69DF839D600406219C098070AD0F66561430BA9F6E36DD6DA7767B32A -DBBEB72E449C820C841E70167B6DDF9AD0F2CFEBE2E9D444D6D47768C058B71AC6725DD02AF475789863DAF44D85E9AA2C65D55EB9D06067C7A97729BA14470E -4C9757BF6FD5A46B068C42E51EC960F52904C2FCE4D18D4BD6DF9933B46ACE065DABC5BEE8C79774398CC6F4A84AFBD0775FEDE82AC274226A9B3279C9577E26 -CA556B62DD8CE85E507169AB0BA8B0D2B0604C5DDF9DA4A559783D0DAF23F413E16219EA1E62DD436C98648A44ECC7529931DC18231B877BEEB8F1637E65E810 -A48EC79CCA4B5AA59D4AEB33612D0E3BEB9310D65577D08B2DA6E566F72CB91BF817A898727605713338A5AB59A299E97D6F374BF754875AA0318EBED0C95603 -68A494A57D00DCDC0202BC5CC4684AA4A421097725EED68CF0F7D02FB74BB30D383B874454FCD737DCBA81B73F28167217CCD4449B08096532D1BAA00B0A6C12 -D07B1FB00DDDB399D5FB17AB9C9D9A13E1BC34BC5CDA95EC06B749FE46A5FB0FCE531A670B29A147CCB6BEE8FD24B94FD3B1444F53716E16C3FB884074F8E609 -64E8D394C5A98EECC645A47F37D1BA0369A30D82393B9CBC0AA7D9A872617C2A6AA66FEBD279BE3B2DE0DB3781A2183D0ECC63016AC77E3406BE997EAFD32E01 -8C69DE0E9EA07116A70B9971ED8B3EDC36E178BD44B797C681513BAE6C13DE16295E1B7515AF496D100A7D136F1A18B2790DE93807CC1E9C972EC27D0BC3C900 -1A22E68E680AA88494B14B43FFDF4BF9DF53B1C1C35674B791A11A26ADC5891F0B96E0C6D5659CDB48CA9919174C7DEA10CF412C4CC8258B50372F41E11E3000 -6B27C5E87B08CFD06533FDCB874DB138341BA4FD27F3C8C61D00945A71FD16088C920F2CDCDF7E8D9F09CB026735450C6C16B277646DF10CC6ADF2DB078CD803 -0F6897A896A019F5E9AC9D3D36B53EC27FABD3B80432AAD9E6511B84BAA7C30D97D5C422908462C389534A9600350EF16038F15BEEAD15573BE9D5DF19BF4920 -DA13C2B90681F65DC7BFEB9D6EED14976ED41E18B0668ADC95261030E90CA2009C81A61EB00FC6E8A8259FFE591CC5A777E145BD257FE128C62F910A73BE7227 -DA1510A04813F31FE3E793712AE5FE553E0D22AEC76C2E93A3A80D63D52C112F30394D3EBAD058E98B3FCDBC9806C9183FB5B708FAE7A0847288D6E36908CD2C -32C337E62131417D5162A3F5120B5CFEEBAC2D68066B68B846510F8082237F2F4E77893D69775BBE9D1E52AC28FBA1EDF2471C948C064DCE64B4AF60199B631C -3C6581A68D4A72484FCBE7DFBDB27F2982F10B52812BB168E8E1FE9276A1060F1B6A45A8982EFE7AACED66B923861AF317A97E20EB309137543D4584997E7502 -507334EE34449763AAE18203C9C1F2F4C923BBCAD094563717B73CBA83A00D10D1D84FBC4718A51532EA932B18CB4698D19B23713110F2ED6C06A42E47403527 -924E4B38BCD855233C4EC05C272700F608CB7399B30BEA66CECE16F936544408FE1C87EDB39A93C1F0B89176BB60FBDE949F6D3175CF81AA77D3065B9B189A10 -AFE070D86801B154BB4D7DE1A24FC80C78E635A54BAD7EE407005E9775DD3005DAA3D44E25A31A929F84AD1D6F5378137341F8D97A896F3908DAE9CFC76A1B2E -A135FEC096DE09D42CC514FDDD703E4FDD33DF8FC6F14BE2225F149BC2CEBD2A9BFA048B1430C3B40F896989E08D4B1A3D6902E3C7786C73A1747B6ED2AE2C28 -F40B7DD08E724DF5399BE8C89A9D5256215173DA516E281492A0097BE5DAE50478713C92D8582C6DE3C5290E9CD858F7B2569BAF34E12EE8494B9FD4B5D23025 -58DD4273431A1AF63FA0839AA432F84CEA3EDA9F61C9CF24D839F77FD967A22600D7B4BCEF631F1FDCF95E9D241160146B13AD6D1B78570D83C3097791D38F01 -A08FAFE699BAD25AC401EE25F32660C4E0DEDD6D50F28D0FB478977B04ED91291B19E3435691E7F87225A49A10DA8B11FD02FFFAD1F43A113D7CB2EF2F23B218 -A101DBF773663F94AE6563127CE806B42ABCBAC452525B9C90DBDEAC569D091739EF9C5C8B7974DA704DACE97F88419BF909A727B272A07DA1A64F1D98676F2B -E184B9231B7B509285BD67CBAAF9F71220D0EF56D3BDEA2D567114F7FE4B912084995FD3BA11E51EE29788E81E9AFFCD9F195194DFD278F5C62AE9CAA6689501 -5E5C1E71C2A071565E08DB4C59F21FA0B8D43C580FBF8C5FBA8C6204B044BF010BD2C8A728D983B92A9B11DCBE12EBC1EE1039774E456328834089DE951E9207 -B5BA831DBBE49DA454E01E9009C822B2F93E85B6B36DC1D85541ED500ACDE10FF5C22CABD2B5C2AB532D2BF200499E3968E235416EA6323410BA7D6FA56F7A2A -88DE9D8BF1EB0AF5698F2F5909024FE5ECFFFD34C6608325995BEAF41680D1132E37DAEF23BF79A6A1BDB344CB2E7CF7609F026D76ABF83516184EF0A323E315 -3BFE56DE611B407A26A73150570523D5ED152203EDDA5025A3B00CFF01A8E30B1079BFB87997A7106D0D19012FBD858F0ED185CCAB62D784CA68F8AFE2A3D311 -50279C9C210EF2149898DB504E5DCF4935C49832844F9B1C50C3EDB42116471021665F6927662959849D04A683B24B4E78A6C5BA7AEE597A88A7F2A473070B06 -DB73D175E3E83592E9596E1EDBF88796953C7DA82E3B6BB9AE5D157991361D15D7844ED34FA329BB0D6C02EA28853C86D180399D518BB41F7D14874BF2794914 -CE1AA3F3E984338C7C9529FE2C5C2E0EA5EB511F8F34A3C0E2437AC1FD6200166361639A5F02FD45D4B9BFEB892ACDA02E237821B39D880EC344FEBB9343EE08 -76C6666D2A4C4926D241AD9278D00CE4A50B54AF413DC44B49D76D3D89A18E17363EC761B6676354E7D2313FDF711D7435564C4E712342BD1802E6D90D33ED02 -DDEE24999EBFD217219AF5692B975BE30E035D9C953D68F0DCC1A2CD85B5F205186DE927EA625D5364BA55659013F7440EF1ED81C31DDB80455F9A6C83B45516 -F2F750ACCE7D65444D26B2F656D997495EDB3A83C867EC292318FDAB13D9CA0D040DA0257DDEE8937EE2C1D6355F0B6F9E80EB9E1EAD3BF3DC3E585F033F2D16 -CC78A3C412370A0FD0680A58DED99BEF7D617BFF84F07B882836FF23BE459E2320D3591C6EFBEEDD52EDC21AC4B85C7BC0823F9EE48F804A3A3EEB825791E602 -5A8FB9AD5558F2EACF0D42B0122B55100AF867B4A411A319966200AEE88A5B20943D745C4059CFBF4985721ACE1077DD5A9E7EAABFA5C23C8F6478933088B227 -27CEA07A22A62DF44C3309F745179E00BC0E66111CDE30D85619A4ADF649BB1EAC5E939A90346478DDD9B61177E6E5A50762731CC3F3A6FE6464E0947F559125 -332D1C30BC17F7356FEB6D0DAF11A414BABF110F69678A80C5547E394A699D00FD0F4BA61C4B6B77BBD4E8FF64652BD21581500BC31734F7B46F06F20F594303 -8B1B6A3F5EC38D7542C2C1E9EDB48F0EAC456A47BBFD456AB11AFE6926631B2F740D129B2E7CC75BC032D267DA518C13091929ADA862943111814CDCE8AC9A22 -CB7D12B6B79F274015F97AF0C81A87F315FA41090F6AC640D554B0AFDBFA4F241E2C09AEE0968FD7F6CEA496EBA000AB80278B080F009E6D19EF41ABD0038B2E -B95E20D90729D2D144FB739CD0CCE8B6E0917DA4FD6759F8A57813B280354C0C23F12FF51D88A4D26ED3DFCB795B1B7BF59FDEE03CFF575D079479F1AE467F1B -85C081F9C4C835AF519D6AD68D961CDDEF842C5B9B6B3C24C835B70278FAE9278171E4F1258899C9E9BDEE1369239D2FB44B1CCE963DE57EEA271BA1DFA62B06 -A4B64B474D232F6D869B6208D44321C238B44C363828F8865E4CDF8AA132FB2239D81645F011C2AD7CDF87F576400085118AE6DF01E67E066A29514CD208491D -02215544E287A889E8EAF26E3C6E595072E9281A50F3F9BEEFA892BCB78F8621469F22AC4E0C3D9BC21599FB20C25B82369A34241B94A34E36D9BA77B1EF812F -18A81AA4EDC51F8FB3C306BDAA90FF589610DE3A566F6501B2720ABA3AEC0403E81F68195A135AF60A3BA1B7B01528345CA1903698D1066F319414C408E45217 -5BA4AD3A3DAA922EDA22A02244A4214934FF7CE79C24053C700916409526B305862DD50F678D4D9AB1F140855E1A0BE1CE9D58BDDCA991EAF0B1490B7F1F772A -1FCF9C41E60C65B1EDACC69861330AB81402046789754E805250117EF4DD940F86268122C6580EDE759BC803D67142814C49DF428D91D6E9FEA3C4A452E52424 -30B37BD5D8DBDA21412194EB7A703BC188C6DF7B426DCE0BFFB928D14F167B1A50A91A5C6FF8EB81EA96469358170FC145B9C50026F04630701D62A93C6B701A -F59B74E7CAF40721361017D216BE12082F4DA26AED2DDB5953A2D2D73BFD3F01E7E7285A88FAEE8ABD1CD703FC3CB7F3C87910EE14187A4FCFD12391FB901013 -B87FDC6643307E4E4C0B29C24B1B77FB43262A6086C185DBC1AE8D26016CE30842B4DDFFE387386CC6D8E1D92BAA528633E64E5CAA7CFD480F67E204E0A5302F -BFACEF3CAAB48C527A0FAD8EFEFD2265A2687F76F112DBBA02C6F5C7DA31B10B756B33DBC08267A8B3D5B6FEC817801DDE848117C2B46BF545E7305F9FD1FB2F -91A160898DFCD75D1B215DB27AC41795C3A82DDFBFB51A7FD804634EE5FFA11D81DF211735F3FEF0515784435E0C65157B48F05D3B487373A563908339A3CB28 -BC400DC187AD4E9F5DDE3009FD6B97CAF490337E21B92C1D44D1ED613B4C491D109C2404532DE88F73E4E0A6BCFBE2FDF4439E819D7F9DE10433B2B60F01F71C -5A26B67C5066F8C874BF08CEDF4FED647A5E09B773E8F58DB0757BF570465A17C3B33DAAECB026D0F097131661FFF5A76FDBA737C632852E51F6BFB0BEA1E00A -2D5A1296DE0FB50A72B62D19C21A4DDF1EF4C5F71CE0C8B2EF5359CE13D01404181264811C2F2F20EB383FDE328318C253D0CA953DBACA677A75F4E86EE79023 -D1FB37D6B9AED8CB88110926BEF2F19A15CFEA9569E8C4BA9C01C15C5416241AAA6787B48AB1723F91F2F41AA64BEC3BCAAB1B0F91DE9F94FDF79B380E1A6322 -1436005B4EF168C213D2F6A5EFE22A5F96BF9FEE18A0DCB9693966481B3CCD16A6FF7C12E4356B07B8C3E5BD67D736AE6A3D1C98D0AE45597F0272E8EDCCEE1A -745D4AC3AF76E2109A00EFFD7209EE74474C7C4404B072238BF6C99D8CBC4B086A65AFF84F9BB9CD18D5B1C9EDCBA1168C154E3FDC5B51F8BAC57137AC33521A -81043A1DDA2D2E74CED5D120AD370A05683E71CD1760885AA98E92C65B150410CAA147277464591403E9CBB81C701063A744114F623BACC9A434ACE46753C811 -956E93333FC721442EA37E61DB6CF08D1E6A525F612120EC0D62D61C9EF13D156013C9DC6AA2C390099D2490BDBBD7C58D42B6B66FDFE313465D89F426EBBC05 -78DB13C04F04D512ED8887F4BA21F945F990BB9E5FF219E499BEEAA59ADC5E11A5D9F9D182724974B136131D3E215B263A9BB5734C465216DD7868E909BEA81B -BE91F9B6961F7350C90E87E7CBEEB1134C83B31847E948963FEB66CB5F577316B5B7D5C260ABE212D1A69A7146C5690023AC2E026EE5383E08F2F1B91A6B822C -A9787B6BCFFE9B6AEEAAF4D2C02AFF5113B6203A13FAF21CEF6F9656F86C2D114C5C2353A0BDB9E224F307E1F4F0630EA68C0CE19FA8CBFD00D7602AC26FC010 -DCCFC097CDCCC73D9E6F077AE86F0CF205778E2DA46ADBDAE6426296CFFDA7082394557EF5B98AB8302186576E9774DD2B2E51EB2472379BD88EE151DC3D7519 -2108C9B7191103A55515C0CDB1B3ACC4A547D2D58280EF3B7D0C857FA4D2F62F2FF439BE68642FD2DCE18B6BD629E5FCCEBE7BE65425850B73E5D7C994AD5B0C -E9503B389D2F7B4F03C2C25C8FF659C18936A30B17B169943101AAC04F2B450E311397203A252038B8D310154B7BFE02BDDE07DDF019F01C017F7EC5959DE911 -4FC52347357426FDCF99E5EA51E7CD68C5C47C2E50A2E3BBFC054DE2C9A0D204B0149A3A0E92F1A7655C96DF487FDDBD5183328EA4A0B6BAB344D0EFE743AD15 -BC403F088DCC4F27082CF57A9698A1BC2963BCD5D348C361A88E20EB6720A01F60B52BFAE85CE5B7DFCCBC5613E490FF4AA9C3001B90B62AB7C58328EA4BA301 -1D0D8B80821296FA57407853F41E943BF5AD7C3A53F8D95C7FA61E20D398C40AF3CC0387C5615DB07D648B3498B86704F50E5A9D38FBC748B633824F320C2203 -B19BDDFE89F579234543CE6410F4744C783514B1F1068CAE8207C6A20A433921A69BC8406D84085EDB35EC56276D6CDE2C38F9287AE3FA1D089C0C769AF1CA06 -34F450F9C39DCE7C49FF625FB43F001E051D4890DAFAF54DFB15AF8AE4C862099D4A1A9F311EC814B4993A680A05EF9E33DD12E5CBFB1D2212DE7C7A5206C719 -0F691FA45B25324F8EE7D92EC9003628EF37F7597E999A374634DCAE1CBFBE003DE9B75C48EA24C9BC353EF6074355DDEED2642BAD2F761C299BB760B17F9625 -1B0B9B6767A66E700344A562C57388A10A90D781A9010B7AD59980A593C0F32A5C8E3ACC72F0C99A1B9C54FC6989E064D0836B2E9593E69E4068D58666FE0529 -E37CC88544433C1B2E76F5588F85444D1E25A59F5E8EF48870B1E68B8B61D810F1FBA70638A1CAD715F81414645092CC84C8A9BD5AFE731D29817E1A7A075E04 -BC86CD0298A4B75A1B5698DB0064CCCAE975DF681D6155D499610B467CAFB82B7AFDC0D77A29DA34480358104D277CDFE7B54FFC25BE17E5CBC1166989330929 -AB5095E23036CEAB4B0CB3C464AD009730E1FA7918180E07C2B6D6C0B879770EBEF09FD01882BD0FADE9B2E8D4DFCD350BE33339A0625A2B596081D1F0A12208 -7DAF27570812E0DF35E4D6D600163045861291BAE64D4C2D5600FC507D073A2B4DB249103AC889B97166D1AC9CE576ACA1763A432592ECCA9FA99D8339B6CA15 -407F0E3472478229CAEC05E7B5F033A616B29CF72D9A1EA80E646F7051B3E212E81DF54A4360C50836424BB507DC3E27D4338200AF49029B7166F481E2615C17 -FDBFCD42FA7D7494F4093470D130F2E4962A02F400F650102AFB6353D5A8050AD14D9E498F904327E9FEAAC663A727E39595EA72B3F3595C04DA82CC3927EE04 -EF1573EE7CA7B17F97A90B0F5A6154D92FE0DDEBF32445B7950341BB91D7721F277562F2E2E782FD09E3CB4F25624FCBAD190B0A47461693F717687830134A2E -DB466E3D0DF68AF1672CEC8E9D9ED01DE3714253E4D5BE86D2DDC4B8E14E220273A1A2003B48012E53B182BB54700101B52C0CF43BDFEDD15DAE6AB93C53CB18 -BCCB3827FFD2B2DEE9EB9328CA9A4A8C030B74ACEEF1C38C6F8F54AF0C5A5213DFAA2A0BD47F09410CEBE4FD7D57CA298D576107030D40285A2D35287E462D0F -26CF1B8190B302E77D77F061AFBCB8AE5B5286B6FF1AC2FB8DF1C3D78F25360D2E6AABD5E54E33AEBF965948B30982EF226C5C8B8499D9D72939D0056B633E06 -D3D439D390F6B1D114DEB24BB8AA2F3A7C5E83C320E47C14E271159FB7F0D92A68667ADE843D2791C513C0813ECCD73AE63D7C47FCDBE8DD0BFEA1EC646CA521 -18EDC0F714DDF6B322F5544D332EA06D4A3E0DC5FACA0693D3DB3FF9CAFFC122759483F9BA5D7F4FF818999FA06C981E7608C86D4CA8C1E2BEF9BD8D55398F1C -0E1316F13977FA76C0DBFF75EC9B59F6D150E69C735A7E9F8675654DBBB32C21DBAD3608E994AE037EE87F58D59F1A9360EAAA567852091C3B403A53F1BD2C28 -0CBE484F0BD809527E06FBAF61AA2EA680C5E39FBF9687D09057579DAC60F80B11F17082DC78EAE01993779D444F786033193725CE4BEED2A1D62F24AECD3317 -D9D776DCC8CEBEFDE3511B878DD78D3629E8764868DA1CC2911F1446A424B20207DDBB7618EC3E7C82B938B084A8050214AE242AC3948EDDB0D718E58692C12C -F0E22E9E6644C9FE9E8F0E2EFA78076C4EEEE196DA1E919C72ECE2A311F830054EED2F5A41CA332DE1917047D0FB57ACAB4E917B2E830B1733219F1E6CD0FA1B -0AC8AD279EA079F1542026FB8769C97C1AB4BD42D54BBE8CC08DBCFE67F9471DCA67B3B2916EE0255CAEC18FDABC34051ED5E219FBEEFB1CA46F8D4FC013EB0E -B836B468AE8F679E85E23994BE734D84ACF37604DD9D9CD60B10ECECF3A1CB0DFA84A62A83400FEFE4B90D22ED62EA67CD90B70DAD36BEE5FFBB30AA45156210 -FDFCEAB1E5AFBA078AFA6E4BD12779567767EB0FAEF1F4C527AEE5281E5D3004976441A1F003ECFD244E1340F1660A9840AE9854781CB95DAFCEC3A012FB6E12 -04C4D4F20850CB4EEB034B69CB7A9FC34830F1C6131E73330C29D6CC49156E0CBC54A94FFCCE25D39E64EDCAC08CAD5BFF4B3D6AC4D404D9261C10E8CFF3F221 -161F1334E4555673A77E51411B78717047D9CC6EF56713C599E37F143F5CB2235855BE4EE3A336F2666B608F72BC794BCE929FD2D6C1E02F90F191A57522D012 -45C1C24BAEC23EB14BECA759A3FB3788509A5454728348900166B68056783C1955E34BC7B7DD8B6F96F653F909E0B4FCCE5C186F9162E96E52B757DC9265331A -894AEB0D79AF5F34F79786EA854BB0F6F116D6D90D8BE5279CB370F9ECD20727E2342752F0BFD92F78A4F9A13B6F982A6B312C23F1C654C5DAD4883A4244451B -AE1E5963BDB45C38D1F4E75967E7E10A8E30ED972340F856AEADB1DF3CEF8220EAF15DF526E40B6B81544A25721C5C91B6FFFD2518282CA1FD2A7D2312A2682B -23BFAE1BF04366A02639B3A258845FB9C4AC4A8D727D34D545387BED37B92D2D46959855B9622762C0E2E6800FD96E88A9703B02EA5FA24DBF17C72F18E19615 -5813BA0578DBE69626AFB335D297CEAD0024D1F95272BC08192331A7D205720D10B111FE0BD5E68D79379BB0D6AD114910A5BD023B78D67D26C294D8F422D926 -1AD1CCC2DCFB9361AD8DA791A1C6934D57EFD70EFAD4F3B2ABCBBF8DD02C170745F73DEEF395FF2ED48FDC9BF558376E0219723FB93A0B18D598BAFF0AE8DA25 -BD3BCF9317CE020A134D9A5274F34054A21483143200587C0BC185F6269C351C5DB01F4911E09C75948082C5AFCE4B7A1CD01808A61203C86C2C6198F11EDC25 -A029AF9E500D27E717C1D55E2F2B3B11C72B0F9F282D748CC851B4ECA4CB81207F1AA5C1A0237F2B689DFE550D776717047550BD10D6A4694F5AA97C9329D90D -1C84D2ADEAF684F1929404E04F07CB9494390FF408DEAA4A2393EA8BF7D32D29CE4E3BCB09BE559EBF0F52C7681DB64A27C5ACBC8D15304B0BFD50228DC47E00 -366CD3C980AD4C0A1689F28183115ABB126C682E2E3906D5DF87010CFBB76104FD26CC8F964738FE0CF999AD8B6F932E712FD2BB9ACDA0C173C0FA05E4976823 -162CC47C7C5794C260F22868F4251C0FF402A062005344FF26982365A65EA112B326567136DC2E10868828CDD825F0F6E2C94F5275C6DBA27F34633D3AB14E16 -2B915FF5C8D4AB68A4BFC659043533547738FF8361CE442F9C4D8D98A6D0240E28F70BD6040C6E7016083EA9529819B7B34F332A35E98F9BCF732B9F1233C22D -85D16EDF774517E8D917C16A2187DC94410841E8A3E40183CFFE5CC4AB99E8233B87CF2CBC6E85DD0812EBC88750AACA7BE56F63EA8CF68E9EB9B1767D05B22D -2C244F1E20D5C5A475D30C235D5837F5C2CDB4AC9BC137EC038F3B1F991D162BDFAC335F67B879360A1B9F5EAC86E3820756B86C8F7C233F211A084DA7421406 -CB7F1041849527A9849510E317B906E02DBC74564F743B2BE39180692BFD882B65A17BAA2232DF74707A290331034238C0542CDADCD3981C10D9A5342795E219 -CF1BAC84F2454F4206E174C0C25F11541B8D38E065B7AE5F44A78A8C0BC35D09E4FA26AF28FA4FBFC18AEFEBB53D79C377070328AB8FA4EE4245BCDB92696B0A -29A01658B1E7D5F9CE7CA78EA428D3B53FCC9EFD6664B875FEFB47BB53800D2AD5919B860E96D22F7D1E4B246B1CF1D2B476E5F6ADD3A0F07FED8BB88D113325 -06753715181117B7F97B2C4B95C6D94CE6A54A14FFD017CD30A7C424DA055426DB5E865DAAB99B39B6AEECA13D5B4533425437EC0D249138C468DBAE83BF2107 -C0B2D967A23612C9F01F8A8A2FDD8EF3C10F375C0E278527B287249AA5126508296A64277FFE524B9863F47111E6123A7A8C05008BF84064A8B65B2FA33DB505 -150F5601812EE12529E61D35CDB9DD08DCA48E9F280996082E602A1D0FB5DF0102D843DEE1A655F4ECBF36D846DF1CD9299B16B39B368C5ADD3AD9F234B50E24 -F272DEC912F887C9406DFC20A5233FA95E31E05919AAD9BC7AD4BCB49710FA01B7D0B7B3945F69D3572019B22F20ECB8F5778E234CD06A7BDA225DC6E698D21B -BA60B940CF5A5F5DCA7B45E2CE6F1A9091C31253A2A203D826DD43156F237701C71C56A1BC444D26824D4F7644BB2AB00D4915B94134798547AC0985817D4913 -B3A8AA222AF9822FBD5EE8F971323ED95036BF4865AD99F54627D3B40DFED90ACDDA7C16DD9A00ABBA1E5C713421B5AFD0BB95F988D5C7B28C213D3CEED2E91F -696661EF8CFE8E4831421E0BDB24A8D8BDE826AB379830AB473FF520BF41FC1F2F64103FEF0D8DCD158C7C9C0886C7DDE1F2616888F298883424FB993D024F29 -AEC1A9441D1C87A13FE1A2A0BD48600C741B723A5BDBDBC386F608CA2903B412D5AE74F09713D8972996EC77CD0BE17F50B859C64A986B8FB10B6A59704B5300 -DD9B21700E5E8C561BB432D3079A988373F02399D0C7665CBE0E8C66679E6D10CBE8CBF603EF7A7ED567D2976A7466A9E4786F4207E4A26C67CA32E240EE7721 -EB1936A6CCD7259A783BD9DB9A307264EE45BFB4070CE5CB11CDB5BF7E05162D5C34EE6872EF6F2AA79387347572B9B82501DA33F6C06DE8A9621FEAE48EBE1D -6FA0656EE8839597BAD999C692B15DBC0E50485228850A7A0FE897A8A77ABA110972A5A95FDE38D8F0791AA576A4C2B4EC8681759544D666E1D9A6A317D31424 -64D16CB5169CFAE122A44597F141536810A669B365F95360BED2EABBFB257613A38EF47741EC56EF9150DF4EB7EBA8DE0FBB5E1A71B7014C4F901648702D2B23 -5DF35861095F21CD7253C3E7A5B46A9CAC6FE2364C033336E263F4A7EED98020520BDB74081C004DD7CEBABFBAD71202CA8FB07E5D36BFD21492721739744515 -72F7ACE024C1274796C7796868EBBDF548147579594767103FE9A8E792FA980BBDE7C45DC1199EF687B4D74484E64DD200D801C4F15A901B1D3D33F76E64F121 -562E250969995BEDAC5BD4815E3F46D75D71E2500C7980F169C74B498AB2052680F3EE263FD919A975FB307F59282F6262265BA440F28E987481F173A2326D03 -057729C42D481E792D4926056146476279957A08B1A8BA93049C1BBF0D935F2A0182F8ADDB143373D534603E96669140F9A862F94A19089732A09DCF3751A60C -858CF7DC851C7EAE7A2E7414FB4B79223620A39D84A5C6B12DFD2271BAC56123C8B0E7AB440F3CC1A96BC2EB669E6FE76060865B31A1E844815D788BC00A2A1B -F7C9673DB6820F926DD14C4DE6D6E1782E796EBD3CDAF12CE185864509393D295BC90ADDA9DD0935E9A3B6F570BFBBAECE3F760A4B008D655C89E6CC0880D00C -AE657C71A8BA304FA5D7CE57C6B822C9A73B3DB79375F6AC7F78892604CE3E0643F70DBBB1A989AF8BEB2895BCF593A99BAF58C42E0ED21CF0DC3D05A51F7312 -0001E4F4522F243A59C11A6710253B2AF7A5F77BC7DE6C417D09751A610CB8061F7A618ED4F423F04FC3A200C597B38BF5CDE261BC7B1F025A596E96F60EBF1A -9D455301587EE8A90DDBA4592F2BCDA19A55CEE41730F9C3E30312381E8783200E8C7D60FD3612AD00DEF6F4CEAB157798BA5FD7E0977D33509FB3EC7E5A4003 -D6C45EDF11616CA1AA38DC344608F83B0979B03C9E7B54FCC5152E7CDE85F61563A12E81BFB77F104F7792650DA6275A7CE80BAAF846EB0518BFF3158F69EC18 -E6D3A245265537D62B122D6C3CF6943083DDB0B786F6A0CD9B93F400CBCD4A0977E88CC8A01B71B679B11D67FEA57ED96BF648904CCAA50A1B04F647D0DE8F24 -D7B5297D16B7D6BBC7172E45DA977D5AE2ED3533BCB41749C6E2E45C01535D1DF208171011E9BF837FF38E1869CE73B04709DB76CF42FA34D4F1F41351BEB619 -BCBBB562D7BA4195A2DEDE8FF0F80A2B90BB3DE4243B8397588102B8AC9DDD279C4FC9453D197731A6973BE46097593DAA5AD704B904DED4C4B8F00E2600AF0A -9364A69BEB5C0E18BA2BC6917C1CDDE1AC00E5A9458E5103E6F5B70370E3F8194FCB861E4BE3DC185089B95FF021066E85DD89644486CE7A8B35181B04E57328 -A64C914C87C82EB972D9B671109B06924EE3F1E2A69D6917664970D3D6DD112508681302557D21240356DCBA2877CF1DE1C71E8AEE7AAC902E1E8AE428A9B220 -23BDCBF9EA932E51F80CEA597C06F75B59CFBE8EC0BEE0BCAF249FFF33FD482F6F011B3415BE0D397F4882D092F2A3CE731DF62F16F0D06708A1ACA1B4DEA82B -C78C0BBFD2F367D16E05068C215D080CF96C6047D269113C523165F1FDFD9015988D51633B51AF2508B07939A97077D848D52C9A0791C122EB77764DBC6E6601 -436E2FE64E62BEE479E365EFCE71EC6D7CEDA82AFF4905F243E2C1C767453D1A5D947ABAFC3ED4756CFF1D1121AD360864F3C890D07E0E3224E861FD5B1F4E1D -A8C24CEB1821A818D9B1ED50E6393FB96D6D22AFDBF78D796AB7FFAE39B1252D7A277E6FC33A6FF5C25291F1C077B4C922F0980291A773A140769FEEC1736613 -26042266B2A11758BAA485827F21E3058148F69ADCEEF7BBA7D4F165E0EC0B2811DC967A6E54495972435CACA9FE3CD56BCC4ADEEF4C89A782C598D50AFD6614 -0687D93B08D6D1D55A5AF03D367BD765669B77C2BA6B0D228D6F910CB7287E02BCBE1ECC87D135FE37419CB34ED50D54125826594280747AB7DF49965F73C20C -20A92A1423DAF90FD91E4ADAAD175DF064CD5911CEF26C7E1193B069207B2D1B5C90DF30D5DEABE2C310717298216C3FEDE791E1D6783D9DCE6F6F70203D4200 -982CB5E174E306382117F090BDD3374C4468908C81B01D4DF4049E2C400EF911E351776690A82478B42B875ABEB520D60DBD2F568581EC9C6EB2B68A08059F18 -9A44E45BF13821A6B9A31346B446DE71BF23D3780FA846404F7C8CA5DD452804211735CB77420DBF480AB60A6A28A0A689C0B5661B7ECB8A674023D01C1EA024 -CEE9FD008D46686DC2B4D14471F3FAA2FEFA001879E9D95D438242B6A3471523EA9D8460D75E1A6A4B2F888DD1CA0A9A4253E0F16F43C12F7A52049632493329 -4FDD7E5D2FF18352D3ED566C7677754AD640EB61A3C9D2DBFCD5974AE517F6003ACC4BBFA163E81FE66EA3FC697E4D48CDDA9F05C0C3BF81E7BFD407D5F12A1A -A7A3E2D9EA8B3F2F5A426525ECDC4BBB03E94D105DADD35540620548CF986618E4293E9B2266222BEA5F76138A929007F81CE301BDA2E765A3DFECC844D79C2D -432A0E03A246370F577D29D2DFE7638097216009DF0C4DF55F1DDBEE1F9D6F25D32E4EB60DFD46D0B092761F9B1E25CA243266C01036312B8786395C15378E06 -E1E32CD5FB8EC62BB743BB40FC102FEE7F00BCF5F72BA0931A546D65AB79BF2DB1082E390CE99BBE27DF3FBD95DE90249F89FAB3B32C1864CAC8833CBF41AF1F -F8870CF421F4D0353CA7E1C667DE7643CABE3E7B07235F06083F1B21400DCF062AB54122657FCEA4B6E20B4546011A61484F3A62638044DE7E0D8722EAE4F21B -4C8EF49B851A7F3A8C19BF9077EBCB4CBAAB68C3D4F609B34CB92693DAC0122E7C7FEC94A156FFC7C9956ABA3719DD1B5F77132DB8695DC142A1FFF881366D0E -14F88A4FD44061A1F1BC86F91833EBD3077C9D0EF498C6BFC7120BC1F33D9B1FBAA3EF0258B99D29688D3CEA75086A9AA1F603F0B96C34675F90139FB079F11D -F8869FC8A8D3B6CAFD27F029830E318C687870F9C5C99698E0603AA673C55D130D5F6B5EBB2833D545C6A2D6084977C27D0914BF232EF251D8DF298FFA8D1530 -84FBA2A8B96892FD71FC48C294168B6D1A437334BA3F92C0C8F404537B34BD1F3B9DCF2AC2E7B6F72F34C410FADDD3D2815905A87875EA4E4FB10FA2F6516305 -7D14B60AFA77ADE482BDE645E3D0F1F215AFBF4BFC9571D05F6B77FCEFB3600F67E6BC8E947538224F4D2FBE4B5AFA2AF0317641A0DF87AE8097E0D10750F22B -A8AF7486FA891592595943A1C93EE717BCD69D4D1ACAD4885BEAE00156B6D62B31921A6B7BC562A05711BBF67B2F9CBDBB3FAB8358E29E0AFEA24DBECD269817 -C81987569A67F08C4A6CCB240612A9A18249B137536110BFCD2610E5EDA6AE17444F93C177D50DFE6A912B749914934642F482B9308C8410DC76D8A5D5767B2D -78BA4250FC1F4BB8A6405CC916108B2C478006B41D1A4FA83822334DE195A1133D287F960A02F2443C004F263FFCC2C6C88A61B04BA2F0623CBF8178CF3EA92D -69691A526428E8A144E79B40AA1560BCBAA29435DF25F033D08FE85317C22C00A953D8B0B5538C41BC0611DFCC470CD81C9A1F44706CB443341A2C428B32E403 -B962DEBF4ABCA6A536F7D25727581750BAB4E81E0D14E6342BBCE18C56A9B11CBC4C5D1BD651FE48D20A3AF5579AE7EC88F56C87A245CC5913340CD4FF65B422 -1A142B98D3DFF856D659E6CF25736E623C2B849D1884B3788A305760F83B29254D497389A64FA7D93E5E33DD3E875FA76CAB04494344073A273845ACEC7A770D -2141AD3E0ADE969E5B6B47E85A2A539BCF3CEAB8036F9C59D3EAF684B04D391919EB41E3A20F6C3A1F2093A271B221F4C0CF19E5D4D02BEE6CF0F17E9302210F -0AA7287A9A5CB053F671270329AB9E87C6DE9A376577A6259CE747C24D3AAD013A956275304C2C7AD88519A1C55CB62F046C564DDC1ABBF03238DBC32D616B16 -CB0E4F308C1C68D4B20426C878EF48AC646E37F34A786DCDBFEADCF222767B1B1DF3E62A8CF1D6A67140A1D53C9ED157BB8FA01AD4008E1B097AFD917C57DA09 -49E8E6D7CA9DC6E95EE13A1B3E380774EACC4DCB0957C9A53EEC0ABB3BED5B188473BA0191AC6899B9C8C59568EF24BD5A96458D0EE1ADCFB151FAE3714CA107 -B9C7845B71871F66ABB127389E913D01FE2684CA4DD4E1BB351023C29052651C4DE02412BB3175B3CB3391F7D3BF1B55AE180D01B0ED2798C8281F9EBCD96503 -526FEEBFAC7433792FAB400D73D5EB7C972E65A3F8CD07D554272966214FFA1974B608F5027A58376C3C8C6EC9FAE3A66828705B078230D47DB1D0EEE7130315 -3186D7976D5C48A321CC04BA1F18570FFEF0AB7E87D935CF8A311F72DC41BF1A9CF3EAB52A747008DC2B95D588056498E183DAF5DEC4EE990F9EB351011E1810 -6FCBECA6AB49EF9729D6603900028462066B1FF2DC4633B8DC4942AEF7AA340186EC19622649A5CE40A107CF4AEDE52C7B18688A33A1E814954128EE9FB7F615 -9DC6249ED77C6BCB76AC236FE6490BC934212A36A030BBEDC9DC8F2459174A1D68784643064607C2554566C24862DD5C0CEB8BE33DFDF62759297D3A6790B016 -211629DA9C545682FF263B9127F467AEFA2AC9456CF58071109A3B4214647808C8F4835DA06E4F97539CE199A68338C9A7E91B87787B0098BE29AE0CA8981018 -459028B0B8D948637786EBB50C323071C7C364956B7428F7688C88D742FAE016816C1536049973B01DA5F5BEC7607C49B7FEA39630C086E6622CEAB9A7B6881A -73151AB9FC4CF52239EDBF3E07F26D1BCED4181E213A86C0051DC4063069292D51BA2EBD9ADC26AE858CC74F0A0EA33D62723ADA0126CA9767551FBDE18EB010 -620F70EA28669DA0DF2031B601F56EC68F60316C32A2750E0AA78DDA4007563078356018F64AD9D648885817158ECD90B2BC32C22BC4C128D8B68952393B6A2D -CC422083A1B5076477FA805D48D32B5FEE4DB5237B49B3CE563F7E2C9CA94C08C41ABF2F9E7AB61BDB01B54F8771D9C23E3845E4F7CB1C75CB8CC644865E132E -B049AD9D0C7546183D490046480EB63B32A389504D9150D9F81DFD28E4D0E91A56AA49BEFFA5F073584AF601CBB0D67E94371EA9B33182A4CBA53DFAFD53451F -498FC15E3DB81868D9028E4EBD18B82E517EE09B1299EB022D054774623EF1258D929ABEC4F2790D9C4903E7016260CB394F6EDBA6978623D79C408D36A41C0B -2460B76A6BD97562102738DC57524CECB2A4AF86FC16BF06E70D5AFDDF43BF2D36F2E1EE1CAE76605FBF72B73061CF71B51639AC65C1E625FB4FC32F2D90F60D -076A2BE6B2CECD3AF6AF179F62EAD9E441FD5CA55D0EA01FE8D00414086AEC186B8FC736B055D11949E7C5B2841F37FDC0502579C81995437C5FE0E8A175E020 -C24A092B8642AD841F175FA0A71C580A20861F6709BC96EE14E1C0C13E9FFB2FDFBE62A0A94D69317B3D9C515A55EBA3E070712A145E1AC9DAD3AA18CBE8220C -943861FFE214ED97ADB2EE1EABBE35B2C152D394D5135BDF8BE73ED5A6B6591C15B1FEB70DF4CBB29918617964FD5F315994167F7762D6CB5FA4CBD03FF9FB09 -EC7B73597F82332881D5B27C09F269E41C214393AFF2CA830A2F97F73DAC8E2DFC9329330C75608526108AB27AC0FCDDCB9ED66CD8D269E2E6D3F39FDD0C5726 -721E5E7BA1E1D03DEA047374D392AF58A99D008BCC7619D7E8C306E797FDFF1C32EA955CAE3383A06DC8B2A1D214AF10DA334AB10960D2F0CCC2FE08227BC40F -0F309195F1D6960E35D21A83ED3E7457F2F7ACDF2FA61E332F8FC3B558A71513E3277BE8192805D31B25865FE20678BA461A5107D57B40703B51DD3BE0E4551E -A0F8281CFB0547039DE445A4EF28714B9CE8F1394B9C01C369A2252149F4651CE571F341B530111D2A283BF4B5566A1983DB5FCDD4E9992955423E0C696D8E1E -77488E795F89EEE96D312067288883F2F23833A742CBD9267EEA28709C3B672452294004EEA95B63473DEBA1A5ED4325AA028036C97222566BED89764520932B -2EEEF836370172F9AF825A02B6D8EE2959F14B4FC2F6E96EEB22AE5211B9561DFC98747AF394E56BC4C80620021778E199D6408ECC7F76886D051AC0BDEC641E -A45FD83B771FC7A1E6CB4ECF55CE30B94D308E5B2EC17D4513E473092250350595B870512E5C6BDFC1E62061694D98AEC7BB3982EF277AAC8ABE59BC83BF9826 -9FD6DA85B56A918FBE073B4DA8B5609A7E14B3CC150543082A05ECD3C489D817711224B2D8AB8A4586408A5A1159DD0D7F6CA9A7D3C493253D258CA573C23214 -CA5862EBA072B09A24D6F8A912EDE6997804E56B5B4010B46D4C76D0E100532AA8F9A404AC39DEA317E67FC0687F7431E3B5129EF61ED0E939BD77EDF433FC09 -0FB84AB777BB9CB05318644CB632DA846ABA7D1454FD8B015F4BBFE3F6E43013EAC29C738CFA972097FE508C337B248BC5A5DE5CD484C4F41E9F28C59DC8602F -B071B3417EF91EC1AC80FCAEA9B2B31B7B68A7F863EDB3EB026464FE2B6140039045BF0974A4DD3CD8F1957D5A5EBE5FD71FED4BF92C15046A6A3C70B88ECE23 -85C50566948705202AD9BCD45F6D640A7DD90B6CAAE25A2AB27D2BBCEB73860751B311E0B730DD7F86BB57DAAC7D31D34A11BCC4398DD1775D8FD6F0B4FF1708 -AFDAB027810225BB0A9B79AF40F62AAE52CFDD0A45805FB774A5D0C0162EAC2F4CF1D217712F8B05B475C435216E5EE34EBE0F35C9214A5076B8E733698DD327 -C38A2DF17BEE396B9E35ACBE22F04390935546FF62CF01CDF41E7552C1634C10FE4D7C7817F99BAB95E2E7DCE9AA183B12F8302617354C80A891E4F2EE649B2C -0FF9ADD18ACF946B82FDBA8CFDD79751CDD88C26D1A7A3D4DD477D9A7E487A2140E141D4F23FFF087763F7BECFEDA2BF528FF680B7C89CACE6731E581AD69E2F -BE8A3D4BA75C6FB7D481A29A13C211D83C80FAD21A13A9616BB76EA4E01DB32836682DAAE638D10CF7BD80219FF6F3CB3D65112A9943328D93FE9302ADD9EB05 -AA519EA00D5A6E76165FC1D457AC25A170687FC9DFA4291720743D4AD555851D5CFE28491027E4F314221C761B297095E2616A7A1001C478CD914D3D7C571F2A -7787A0E74E7F05242516FD3865E046EF46023D9346616934119A2AF8593B331E93B31EE18AF9F5EB596FF093A7D2453FE0CDFF8AA5C688F1E2654C2194931716 -6C50328C3EE4EC4B2D088C73DED9AC36EDCDD464E8781448E763B3AE86A765043FC5BDEF6B849637EF131B361FB62FAB3CE58CA576DEFD6D187B3FB2E95CD912 -B096A41960A85B18FB0159DBF0A9C71336AA0BB8881E8FDBE703A4B6AB0C7907702915A5FD6F0ADF7C861CD63F2D70394902A8FAD09DCA59AB7C50C5D77B7421 -BA6BB22C9C0282D9ED3A44AB48E421845D85D22C9806330C2E0E9BD30F29D4261977C95C5B55CD5C5EDA984E42816D1B8DA41A0E270DCB265969BA88AF4B721C -BF29898E094A22793B734E8FB06965EAB29BE260B66027A9E1BC085B6DC5361E4A45C9D8EABAF4AB539D5859D12969B58F239C968AA04AC6E2987D2F8C15421A -A6183D83F6FA8C647F700FD9F7E2F8A4A8E29239C8EC5C283A83EE5A52364C082E4FFD49AAA456F2A8380530CF39E30F9C0DE00E80F2B9B626737A641C49820F -A043606803EE0130AB0EE9AE83F2C685EFDC9629A38A76E34D09E88ABD4B7E06C6F72EE3F2A1D8A3C78AD04E68B43ABC70E5C11E83A490F1C8CC899D75078A1A -4AC725C3F4007B7DC9EDE8DC2F454E0C173DEED0C6B7F72E9C57C3D960A470246588D43EFA20AF22D42C3933F7DC162294788FD0E5F3002063093A36C6913616 -D0B4FB6501187E59582FCB2CE09DDAEC497B6E4804A79A7B83BC0F1A0C75352C75BDDA2ECBEB4C49D9EC6C54ABADCA14223454D7F60042F918972C3705B4602F -CABB5E1D9CE9561F008CCA0488236E1EAA3F28C596A9006BC051F232FDC92C0295828410D7216EA2E7DD2CE01F5088EBE768179C21E93C24A9958922D5B15703 -19BC5045283D93BF984955D8F63DFEFC8511717ECA508177F8606C401FEDE42706C1DF15C752D93DB2BD614F71BD7D8496A737DC13C1658DD5BC36E9967DF11B -389B1F5B7D9615E89FDA4D4C5B0D52A339383DEEC71FEF96B348437CE905AA0252B1DB292A5483FD8CE319B425DD43B251811B476A716174C9288DA0719CD60A -ECEA6F8A2B5FB65622BCDEEC85B206AC4D3154FAFCF0DABA11632FAD17598F06FD36B31AD6D55489F7209B198C55D1DE857A423BBB7DD3B11B095E774A94B529 -2C0504C35A3F734CDB03C11C3697D26C18AFF2B67318CC9FAF06200188592708FBFA2144AE5366765D862572F82B492CD3EB76B06F37026395D189189ED2F711 -9685322E4EB6BB10F5CB2205A49957BC7713818D48C5C1736520F0D0F5C94F25B7430F10FE778450AF5D518160D8DFF2632E1BEF00D2BF347362EC61905C0228 -AFE71BAB8B6FFC0EE6416857E3672D7C24751C1B7AFA10705E9FDD089E799828A584AB12DA6B0655CFF42929A233BD2970AC2904D861D92AAD3D42D636417F14 -DB654B40E70CC0FE8CBE120C333CE3637C8C6BA8E8BB5E95AB4B80E7779FD81872D88CC0182204F715F3D12C1EC8C27BEB2DA4D030E49FE931D37AB9F6814F10 -6095040CEF69A7E7E16FAB423E3FEAE2AF19D1D618C805844F9D93E9B5D1982DAA1787D13392B4C0E0A9AE9D74A4D7B6C8D569C159BF3A8040F5422C43BAB703 -9AD226A7BD540BE7758A7E904CBB44916AC1C4F12CCBA4A6F2ECA538874C9A1D1340195917D8C37E2BED2F25A2C0EEB58AD5415EEC7A14972A555C8EAF66AF0E -29371DDE3A61ABE14498ED522372F947154C512003F79BE95BD8A6BB4F04B71DAF2914E03BC004E364C51569361A2B1A95CC8BD1F3B268D20FF71592634E6C29 -FCB1E9CD89C0DED50F69DC80D471592DAD21E156D6F4C68C6669C3902365DF0CFF3E4D259D62D583C9D19A7D8B71044112C10038EBE389B49A2D70F4192A581C -94F13744D6F574D92E2B82523254766DEE63EE5CC76836F42E9755EDCC033C2C193E7DFBB366C6BBD682992D6AB6C0D22C400C48F4E97BEDB5DBF324E9BAD015 -F7BC0BB3619DB9FBA5B39B5BBE2F3365FA345F911E6238C2F778A9E9D311DB24E9FE3833E092B254ED5833EDA09D69F61A508381A2EC285F15F0F01F3152B80A -D32A91F8B3AAD05AE3DDBA3C47593EF2A541CD68BD3291251957BC0F3DBC5C3096D84B03C8907B817FC4F46FF6716B27EA39EABFC3E711B71C25D3DF33EA750A -9EDADB17A759C70F17A15A33E9D7250E75FED9C649B8255F2C8AABAE0FA6F003E2DCB985C9B3A9054BBFEEF4F9F57DDF9AF26BA064C725D6EAE10B1AC20A2E20 -A6AB5157972A5F28C43A06936E4D123C7EEBA066B7118510476DD303ACDF8D1893CE45FAB0909200171436ABAAF7025E3181AB9D8C31A8E70526311421949E18 -4A2B11733A357F1DADC4649D8E21B03F4F00D5830A9D09DB22108A956455FE2B8AD45C0F25C18D89A10EDE09F77B721AE46284B54171CA0226B2D78FA8B9952C -261B6219F386F3F29390866267BF0568E7D858B5B0B60C3A1AB62C81F0B10A299AEAAD95B6218F5FF07D480FFC397E52C5DBBEE40F4071EDC04F8A3C0510A729 -578DAFF77EBA15178F56DD636D7D360553575920C978622A690B398CDD68C123F272021ED0CDF43C9234853317B0A32DA082C1DDBB9F6CFE2188187565AD2A10 -42A9C978E09596B0ADF59EC4D69AC1BBD77584028071B9186F53B91077D002116FF970D95A8F6DDEA5F626A1EA6373E87E03CF37D10650C4D51666BD13C81C13 -98E29F067430FF3BA262CB8245561204663FCF35B2CAE960DD8445DF6726D2072FB96682F6138AA446BA570E79B0F4EEA28514F3325EBC705882AD74FCD93313 -FFFB9FFF917333660B1CBEFCF87B9C250F99B049A18ED4D29F03F646A7F46619963B9302E1E6873952B19557738A27E40447230E3C79426C6D4BAD456AC6E415 -DDCC05EBF0AE20E6E6776CD0A9B4D623CAB7648EB94D53AD049CA6E6AF07162CCB72330D0FF35E75EDD094F966D3D28B8AC9635CAB670ADA9BCB94D55ED6A618 -1C72A3955ED5638AD58DBCCF65703A2454063F9A6FA8B93AC26E569555772421CEA10F04BDC6FBCAE226207F745C761C0B2AF249F4953301A29C0B388D44BD2A -24586CAF23B8F945F1671DF83B3DBEC984AD3F0783A9D34D2C3CEB44C6A2A5102DA961EDBC8D2FC614357A88372E27C418B2FC3ECCF1FA421D3F7B2F6B20E303 -527D5108567C128F0306A03CAF56CFCAF53BB5094B13096593043823FA3812052665EF336DEE89D0FDACAD1FF39012BFAF8282C3A593C48B899914EB04B21924 -F49C3F32415F242D1BB45134889C3C92D028234689532E64D06884C445A41B2FF28AB58634D538CE72EA95CD8C657B4F645767BFF382422DF498142FE5E10602 -170FECF53BDD2322506B87A068ACEA060C70A947C3224A0BFC94ED3BAFB2B71ED5573F698E353833CF7D367516A072B48BD4CE1871BEF4FCD6C2F36C922E6223 -8AC766612E777DBA0298160DA0FE7BFF56C5E3E6BE6F99CAC9D0A8FBF4806C2DA25E03524AC40352F34824FE80D2DE52DCBA922CF2317C97CA17B28F68A14711 -EE1AC0D1FE1AAB8D1F8339567ACAB3DCD8222B2A1448B58BEE5FDD1A3AF22706593C72B2E77F46073E5EEB51B9C2ABDAD6F71DBF669519A7CE6C57A2D2F3D70F -A3A4BD1B63EB12E160C7AE4BF69868DCEB528A3B4A0CA626A14AF6C8A3C2CD24E2E34BF5CF0349E80A981327A273BA6AABEB066EBFC3DF215BD28F118519E810 -788B470C84A4641F526C8781D52F8E6D1F88ECD0731B1D826B263597E8EBB52AEE3B3EBCD289453940925DE0160B6E03D204FC9E85BD24962EC29C64A329601A -1226AFA3B16990D2976F1B6EB73C24CB57AE12C821911B7EA386BF33DFA6DA05259FA85220F5D7C6224E0922FCD2A7A478B91B6719402F774EC789B040256708 -F6F0594E61E2E3E9C95B0CBA00BD3D94CD17CE30B7FEE18D2F4B8F5EE30E491640A90E64DFE2623577E88C78DB75277FAD031B001E4D2A7C972649CF8FFD331E -81988E6971A403DE9BA23AA1CF623982A2C2DADD9686173FEB91EAA4BA613C1471EFD613C4F03FDF4C4AE2C2F94810BCAC79989E1EB1528E9EED60524A6C5D1C -C37F1674BFF8E748556D4741BF468A98599AE7D08D20393E2534C9A9E96DA10C3A34454F3BB9C51E6CA78F9EA9B8134DFBE83B0EB310908A452DE27C60F3772B -78767971904FE3014A55DA1774A112DD50D596AB4E94B56E3FBD0EFFD4C7D721690285E762C57A9ACEC781C5C6676AA79E52B03578A8B7F285D218610982DC09 -55BBCACCBDE0A21B07C02D9A0F334A7840717D2648063D650DFCDCD384341903CA408A216ACD148055077AB3BB28234346BCDDB0182250AA4A0673DF161AF11A -C79CADBF7237B9DA5CC35413FC7D47D655CC2D12B0DBE9C6F892FDE5F794312306DAE9403357873CF93DA6E252B19C2B9290FCFB0749C3D45AAC7AD5A3CBDC04 -E33B08EFB02908AF3C4D2FF7961B24D7DE43572FA9177ED97687B1972EF4AB1B7F4A1765F3BF4519420DF5B3C35A6E2374BBEAF4258BC956C724CB16D11B5407 -8DA6D6F73100D7E9B211C2C382B8447260A287F0ECC526CAF7FF06C34DA4520900ADD43CC47DE49DB321ABA00D476A142A290E2834F912F27577202E4C19D611 -F1EE069CDBCE6D7BFEE8F60582D577667DEBB40272833D5B03FE2B94CE28E7228B610F168DBB60BBA6ED8FBE14551C2AFCD93FF9CE9BA71B34C511B5FDE58205 -2A640B3B8168B06CE2BB84553826CFEEB84F02C1C6D44D1D77FA43B25B257A0956A54A98A9995E413A6D1A8ABA034C912EDD9A7C7DD89E11AECF6B13CC114B22 -A59AE233837CE0780571FB2FBE3986F415788507CECD98AB2F0964336E07412DEE3E63B2BA7EEA29FAF7544053BA84306BBF1098E0E0DAFA95B15AFB2C819C28 -AE1A118983C525A8C03FEE6E434E08C83B28DD2B68E5D31B6E1980F55FB99322C43184CF5E4AF33E3058E633264472337EED28BDF894C21B286AB6031DFE8F29 -A5CF0454DC4844053A590B296C2A21A9523296FE15285F34F8963B4FABA8B7243CE2E8C9A399417856FD6B84F8C5AE2E8BD3C386589A2067753709AF127D4D16 -232532861766C7C8D1D7E3FD5E8D130E460EE53A8C28E96C624411063FE7891D57F7303DC77885964503929C256A3ACE55CD9992E787C705B303F6BC388CFA27 -7FB9A49904140E67E90B85E292D89E056E5081D687CB797D36B31B0ACFA4712C3E0D3C6E5A2035770C21662EDEB56F07DF5162F281BD5D99F732FCE62FDD4803 -BD1B6DCD7291D9D00C0FD9C0A4FF0C2F05D7991D4EDDF6D7844597ADFFD62A205653803A94B2F6C0EDC6C1E28395D525707B8500443FED0218A1EEFA92093701 -BFE78B8DE0D7E41F035F8EF06B7ECC4FCC119EC4E265CEE56767586E3B68C7106F0E913D9A547D2DFF76B691FDA9C9ED1FCE47F1C6E7A2DEA8E42CAA52007C19 -03DD90C1895312D059E808ABF08CB445FF303D90A3FEBFA09D54957465D4C91F755BA1E1523D62F80A09C2398C43B939653C101A0B83EACBE6ECB8A08E6D0119 -E0649661E4A6DFCA4904C7401497FE6343B248845A6E311086ADC683D2166228F69F059CF12C2E023DD3505280B109719DF4F56ED347C66011936FD4FA7AEC2C -93F1463056069870888D4975A2564A1046478514041B2DB603CB3700AF72070A0011B9E2F6BFCA843AD36F995914FE7942AEC1E4289A4233F337113E29ED7625 -9B413133B58A640E1BC56D34ABB7786FFEA478A9A45A0B57603819CCCE384D0C3E7FA44FF07EEB5AE22C44D2C56601A6A1F3379922B2ED50B52EB4B78906A50B -AE4AA5798598B4CF8FF4519EDD21D5599350B095DB72D84B0D63F1295F78AD1958367BE297C502BC753882E75C178950ACF70935D7D42FE4A0741E305E6A2F0C -35903DC29A4019EFBA9AE9BCAE73894D3BC017B413F8A488885ECBC37B58E72060ABCCC4B4AC9CA75737232113FCB886606800F40AE0B93FED71B6B9CD5C1915 -CF1E1C39135E94EF8DC9C9B1AD8B4F3D2731693312506E40ABB2E26BA60C1C00B4423088B406344066E6ECE3BFA84D71AEE6F5676D1261D845A66A7C0586E81A -98496A48CE24966B5C671724783C3F6E7A3BF4ACE80AF4F7D4A07423C219050E1FA296428E346781CE909D6051D860C6286B7EDAB0F62D4F821D8DAD7DF7D60D -B8CA2B3CDB8337A99FCF243EECD6B65095FC00D065640C8FFF84F83E66AFF41D195BD2675FAC6D7218DBD715D7F1B2FE6A7BE83E8434E5E176B3574F3AE04608 -16942EAE3EDA4DC9A1C8AE08DBD90D808CBAAFAEDB4403646FF5363D5E7DA7107EDEB2B50CE45EA5A9C77E8BF330D2D4A93A684F0362A3024D374BB6754AB128 -0D055AED829C2E109FFB9A64E7D91AF370213F921525DCFD0E4DFDBB4467B12F29FCF7B7A5B89B15DE26903F9CDEA6C257D01704BC6C50A1D181CB6C3B1C9123 -714582B779F02E9E867ED155DFDC78B1299387078233FB97F5BA42878121CD2292DA32E0E28E381178C927EDE7A9808A789763D2595FD184F7E83AA3E1E26714 -6F7AA779670B0243CE334428121983FC817417981155C5618472CFF967EB2704EC521CC09107D47A7A7F6FE534A63F2C8400977DCDD575A857632F9BC931FD16 -E40D94D9EA75880EA2C414A05EC285FF35702BF67048C9B5708FE2B347C966169B3018A68B21C59055A6BAF4640D8DBE3EB3840AFF0971036A03F5AD73565725 -72681C2FE075419C0AAD2F90501D1700B105576206A7E31510B7D30E2DD4AC189D284CAB45F74DD2D00226E479C0B0153CAC7E6306E76C2B11F2078694A4552A -78D64CC3325F5612F3D442E3F7E285A0B855C75873788322E31328188EC25805D8494C25B76758D024BEEBA447E217BCEC89BBC14C8283E25833188B04A30202 -71D6D5C0CA42F999BAAEF570076DA6BB18EA7241B7121E18F8747820A0F49B0F0F9D7C7A6176317592AD167B864AE3B1C3F23CD0838DFD25094C3061AF8B3A28 -23BBACCB74E6DD42CE28057B48787543863104A7951E258779E703754AC9D514463F11A15D781EAF361B8BFA6D5D72649B952674CBBA97A33BDB5268D8D3FB25 -FAE751A65FAF16288D9A17F62CFB1B8BE415814CE50FDADBB13629BBBAA54510521D1E4C16734023AC996E422B07CE56B28B3462E86B95A199A65E31A06D3106 -78C8B2C10E0032A313CA4FF8632E4F09ED9D3710F99E738468C2F6708A2E3418EE6346773215892DACB89130CCEAF40A045996E11021AA22562CDA187904F609 -6BB5E24C6DCE2C0948CD95C2802FF648112D62F8B3BF7C9B30E51C1C92020007B2E57D7B393B22EC6731EAA0446B7AC1AB824A63BA1E99ADF7410507957F5923 -C49875A4130895483F9DD3380F1C577C67F35E92584C48DF35A4A6FC5DFAB8234C08967B5E2CE8380AA380E602417FE5A0EF251A5C6921931FABCBB7FDA9A522 -F8E227465A87103A23A10D35DC611AC9B2F14E16A6817B7A039FD7FD42A61A20B11135A3B0693DB7F13996F6810DC5518CD62C5D397E0D29CF02E7069B29702A -1051C83C293018E19571CB3EB9DBF2F1FBAA13BAF109C8328769A7BCB90748270AD681E0F7C45722E15DC0F23BB9F5FD687C3087C82EF92D2C67E73A4770DC24 -6DA39F560613C222E3434CFB1597E888D00B11EFF400D2FC03D5FA4BA468F40F60DD0B965E5A2B5311E9DBDDC0F107CC5230A2BA67BFFE49F617B60A047B8028 -600351E578D2B8F39229B1B39105D5E0F3444E8B3979ADCD3962990FA8F70827D8F28FBA046ABD56F5BC85BC0AE7FC87A82650D56707E26187BA412328868913 -14A46DB6F685F807BA0F30803DF002AC3B0FDEE7B51C435ED51C03B5306F0524BFE174FC8F23860697F4D10328AFEA9ECF9F239B6EFCB7BFDAAB7DDF44CBCF27 -818D9F7D9AC17DF4D8D511D31ADB4EA84A40247CC5CDB1AFAE3E04876E784D030B5325329129720D8FC49B6571FD73287945E85D4554B7C86051E5701FDC8229 -DC85B84E6CDE94D7613A9E0AE5E3F6D490626C53B2746FCCC7326235C2CF242A12C35D3D895673B223C687E6B91794FF5877A6565805C1F5A80D982952B87625 -07D34AA1DA86D8F0945E3B60AA691A90451F8C980CD3D736580502C5BCFB29079B391D621E3BAA17B74E55268792A8F2425DFD724BE53E543593F1A10F649E0F -D66D4823979D5612211864FF53DC8DFA2AD6FAEBFC2545C4A4E733E1923D111E21E63BE42C10733ED3747E625081B8A42779679D86602CEF53662F02C9BBC324 -95EEE6CE6DC7281CCCBC0F3702480EE9D23CCCC652289A022A910814AA953A1EE5591A6871DE2A695081349DCB5CDD8CE4A5253579CEA1BD7BDFB96031FBA717 -4356D8E7AE447AB7BA5F830C934A3E4E8A123FF685DB95D6C075319C9BCD931F8B8B0DD62313A599B0266E3210ACD2137B0669360E3529082124D5239AE71310 -4E7707EFF6C79145BAB26A6C99370FC12D6348A7978883E7412B382DFF740B27F85A28F0D5C318E295BA31DCD80E5E2956049EB0EF2A161465E2A80C2EB02010 -5278DF2E23171EAD1EA144CA68CB5123CD1A775BFFF17220445D01B12D520B1B33E411EE39A34EB95736FF9ABA829E436E027A3E60844336146AC47A86CF3A2F -1615D6AE11B2236EB7613B26EA1F395C161122D80ACEDD00FB32EE7D24B8501D1139CD5803889389C703FD2FC5AA702095F4CF6143F6CDDBD0F0FD817599601D -FE08F561EE1D1712C6F869008B2E68D78CBEF16CDE564EF6F70DC5B8EBFE8E27E146467B8D37D9EB0BB5443703761F45BF42D2F3449F32132C57042CBBDC191C -9FAF7419E3D78008A122A68C57DAFA211D5C4CBCB9B9012349FA80924C4C0629BD210D8355B8241FE9FDFF6ACC72ED4A53CF5462905259957F47E0E7A872670A -00CDFF1F187F778D55759E709740C183B9F21B1E6EF3384583A74DF16CCD7A11DD3E1E3192A0E1AAA2853D5B622306341281F201A5DB13810DABF3F1B486042F -0BB5C0EEA665F92BE4D680FBC69F796EE720AD09BAE9E94DF7DDABD00D6AB60B3F27343D0E014AC1D0BF09F704CAA015376131A7D1ED97803FCE4996CCF39D12 -E752DA62A20F909C1B40D069B240BE9CE2B9CD76E8E7987CE601696CB974E816C3E970B77238D60E68CFDA90D6FCBB05E9586B1D4C6B8D354EAB214AF3B6440C -8A9A0A8CC933C64094A0EFB2C338506B3857F411A0E6B75DFEAFD4EF368E920986278A201BE874979B9B9B9784A49C763C86CC5CBEE5B4D779C4CEECC2D8930C -01F8937A3247300AEBF0D988129CE5BEA3D5ADDD3E2929A974A09008414D941C424F7C138615CEC960E069234568083845C9D30D80F86B81238719F00D3A6315 -92FAD628E3A141BFC42E7EB013833A709AABBF971C9C08F7A24AA224949AE4273507E9E8DC497D1D694BE550DD6B0A4091089656738A7370A4DC3FD0F81C1300 -8C1DCD238F5A6847A4BAA479979E8EC3BDB414C7307C82C8B2EC4B9A3779800C006FABDB22C0055CC7025F40CD1624B470E5D665D064ED53E76267686AEA732F -296DC73F8E174F2A8F70293FAC0AA526A3EFDC935933DD72ED74407293F20814D1045E9521D41BAA3989486786619B17E0182223A81F4A5A0F1CA25356D04F10 -52B5A127E79DC56584B7C69C6BD042BE0091BCE952CF6EBCB6A6A38A6D44B90136B228F6D2589EB8136F52E4DC4514C3016BFA2C58F28824DC8E5C3613815614 -684F917D335884C865FF92B4FAAD25FDE6F18C28F5A9FA07D273FB29DB95351A14EFDE6700B7A04D0ADA0A04C6F2E4167D7F505499884BF49FC2E8EFDCAF9F02 -512BCFF3FBEDF9F9813B84F4138A9878A091CA716184174275CA053284582B27A361E6FA2D5E0FDB28C297FB2F7881259BB9F5FB173E47262F42B40B4C494921 -6B1004C89603DA9C20ADCAE2043D83F163EDA892B3058B486AAF0DAC278FBF089C0F225D71626ABA442CC60C5FBF1C8257D335AA1D3D3DF9D695676186E75E23 -964016A2F18EF83BCCF6D781D8C68F39FB7B661B32291674976B45B18441D301C8E2532ADC2F763654C5777263EA9644866A5AE3FBEA3F69C29B17D12E33251A -7AF25A2020788584980B4867AA79055502CF11F9DEAD8D2546BE5720A8E5CE2872EB4DECC89AD503DF2CF4508A0B19335457570C84BA281A628AE3553746E111 -50102C6D5451FE6445A0B4416D3084BE496FA3B884F3F577DDA5A29548966E2F3F4C77BB7C68D5E25187F16D0B8C110C38DA8B3F9F78E82023111EE78B98122D -4FC93245C7A90F2D88CB2ACC8099F407ABD20B74837D43E7A33AD047AC14BA1E7D5454B61635C5C77B649030EE1F5B1724E12B2C1290B2F551099ABB65F67907 -0D011FD7DAB0D2C64E34DA3ED76AE7829BA88D470FB0AA4ABE2D43732DCB180FFEA00BA02E095CD7455DE16E29473EEA848B564D1315C73491AC6B3BF8065828 -60CE18853E5738096E8600E13D2647D920ED98588F0FEE7B0343F12F661A3816295E6314746BA351FD24B279F3E3150CFE50C71DD98AB27E8846474037689D08 -C72814147CAA289716988E92581D335E726E44FE061DEBDAD7470766EC4AFD249AD0BB72BFC6D476A4697677962C29CD86926F63EF288116751DA928634B810E -13F8AB0BF2A2524B7203F1738ADD9D8F93000D7E4CABCAC79AECC052C8197D079DF66A70C51CE28B0F870CA10CE3EB5E0C056256923F6528C9FDEA5767D80E04 -4E660740D6A791B3880A9B809589A6FC35FAFBECFD9245D29AD4B08475ACFE09AEFB7D0F277DFA04BFF16273B488C5B9228635E892442AA1BCAD3C19B9E78509 -576C48FB20168E3A0BF68EFCD40F4F017FBFCD38598BB497722D9EA34850FB2D3279F57051A30CEADF06819E81B8D4286287102B7BF0A1EA48312206F8759503 -A8F6DFFE07B6A337CBDC8B58859E3AF40F991289EECB6624E55E8A2B82DD230D6E19FA8344F1CC4B844652B0D5380BE92272D4A85C072344D351C3E112D8531E -9CDB7571411094DC4141615317C8B61B8A3FCD587F84BAD8EA368327E015E12C2F9322E52BE8F648B0F91F8153BB8173271BD3288DF655A7B0EFDE348FA71A30 -38CCD91482063E8947BFCC9478BC18B26C594D9646364673E8D5EB886CEE632762F383D93B570BB4C4F1BFBC4661F18C6F5F674AA9C4D858B15409D7C1D37B25 -070884772FCBD3B179FAA667B3F8B8B6B669BA5ABBF8E0E4D3FE98DDEC9CC801C58AC5C538456FEBCFFE3109E4E967A808C223C3A12AC499D61B488B91662E04 -90CFEC9D2FD522DF7B2B69B3FFD712425DEECA914ADCB71FF5B24C6F9AFBEE0766F7E9080D80D9F74174CFBCE0B3C1731F47BCA5793E659BB0B5C2092A02861B -59A58FF3A5B04A51DB43127124F911BDADD8F0D4080945B94A4103962745EB02865C081F1C2AA2B30DD859141214722A8011DDAD700554B429FCFF0384C7541C -D75D1826B3964A65CD0939FDD3A71BF1C1FCDD9B182F55B8EA37305E3606282CED5002698A9990795D0F4C2CDFD6C75FC75CAF54A4DC5357561E27D98CDFD408 -B5C9781BB5F0847A6EED27B3425FF723B5EB78971A08F70E555D1C6E58F59516A2D04B58A4444186F81CA9D0E7B6DF4A9A779390017E2C1A236A211389F55825 -8197714FD69EB1689680255AF12BDD671389E4487146224BD17B76FB6D7CE006C42C3836EDD3FAE3CD91EB1828B2886E18DA06FA0076147A706CF6B0AE44EA2E -BA3C38FEB6525037E1A8E3A2E2DFF513F96409A325FD4429A3123F4192A0D80AB2F5DB4E95CDF3984EE5F8DFBFF5CBF45506EE8FCDF6E84EA8E4D5F05BE79010 -43F23F4F4E9B2286A3D86A278820C29645304C7E8DE5C7E584541D99ED89DE0EB22AA9B4DD0049BBA14150CA1E2EEF2716FF47A31A49761BD3D92E5A3D6C5721 -317E6B2AB86244E3B4BAE0D935A3EE64CF371D05DCFE8F96F7C103837599BC0622B150F37E13A7E119C95F6D797C135F6AB1EAFF7A612CDDDAF8E4D6952E1205 -76F3D7C1AAC2E1108F62540557EA4D88C3CC25BA9087D99CDABA9942AB66E705F7884AD7B737A124C798258EF17186D1F2FEEDE3A6B7BE80AE7AE9978817D102 -5A480982D0A22BCFC3EFEBDDA1DE70438752269CAE1C2FB7DA1D32AD6BD30E0FF229FEBDDAD290D0BABEF1D861CBDEF3EE56AD79C9D2C1EE86E33A3B087FC917 -1E43DACF694276C2789C89B1FC7B609C51CFE401A71C803D01C7C6D94857281675A3729F427161534B83CC7895C1E554595C4DF970CC3A16C5102A180B877C2D -D79B406E462B0D1E78D80CD148FB0CDBA993565A9B9318FFF024512A475FE12A994C144D2676F89CF12C7168FECBD4BB4FF04803A6BD5B3FACE6478A7332D902 -0F3E5D5EC65AA8810B33EB9DE747ED962F0999C7C6D72AA4CF532BD0806A312BC6778C3EA0892DE9E9568ACA02DBDCB74E4665690756C6DDA818DC803DD4680E -F79D82CF301DFEB84B036AB22A8D06F2A329F677C2D4532AD7C0D955ED85190B1225A3D74221FD2EE43AC635C7A26965058C33D5314C6D278680B9C249D2D407 -6831CC854ED5A072007A3C5B3D12B348E2DEB70106E0F028D12932210A813D2809D88774BEF51B2CD3E5A3E7899ED89D6CA1F3345726215BC966A7AF8DBAFC25 -2495DB1DAAADEA25330F621B2811D95727442957C0B9BC25E2F9E1FCE5340B2E74838EE773CF4080DEF98580A4660A2CEAC8DA6CEBA51C1044A9757C7CD47223 -DCB90AFFFD8D6444525D0942325C642B4B017E896E6FFEF9EB4CDC586F47C519B0A556C1E87CABCBE297CA56E082EC3FB70096E2C1D7398B0703641AB47B4403 -7752D07900456F90E6B51B1F13C15793269B96798AC4558E4D6C4C574077212DCB3BF115EBA41E6C5FCC1722C1544036E17A5809B04AE66826290FCE7A1AFF23 -27CFD7AA8792CABD830C046A4782546A4130F09F4C15BC88CFB67F51296BFC2E044DEFC6E7CE0C016DD3FA49BF6C3EBA9B42B3CDD63368A780FDED4404C4630F -8520D45148C06DC12E4C26B72055C064328AE41E271A4CFA4CC5145BDEEA6E06DE25159B6FBA503D395C1C0CFFAE72EADC438C1968BCFDFCA95F7E20BFF59311 -331D59DAC98C6F8AC003EF8AE28B8527F1B08F8338BF0CEBDC2C6BBC921B0623EAB6C23751C0B66AC6FB0C12FEE64364BFC80AD4D057BA6F06CCBBA193E11F19 -1CE5B6D52EDC199BAAD05390992FC4AF4F5423C18082F91077F8FCB51991F31907E6243E8FCC9925074B429975094F6B17C705A4735351654B1680F61C7DF20E -418D969A3833006317BEB8458FEFE1C5847334197DF083854671383164028D2E1B84DA486805E6D84F29F12744F6388138A8BB99518641BEC8E3FC0B102E432A -EC6A1540D3A9299C06363675B6C8625A44E18704FC54080A2E848B51D8E5BC2DBC5D9EAA92BBAF8F927F5F0A5ED29F7DE5FFD4E74A6E04BBE74EE5358588B62F -30DE7437BB244F926E01201534E373D6AA268F0FF45FDD0AAA2C6C7BC74D292051A6749875489631AACE1CFA07BD3EF0D8EB6BFD7D3647FE34D596F66D0F7D1A -508E6EC6794F1DA12D614CE12690E023AFD2E9046B1DE9DD3319969297FA8324498EF1358F800245067F1E0DEE80E002C031470554EDFBB2B033C416AAEC4100 -969378AC459152E1C502E7ACA9594D10AB2BB4F1C6A9FFC0D8B07DE5018DED2198B1995C3D3929A51E96440FC589715C325BB2B9D981993019D07943CB8E4A0D -0588BFFC48DCF5C8367F904A5A199B450E4A0B80ADA97F4977DC92A4BB0445276FED1D3FB2B71D1C417AD685F69EF4E1D936135EA29ED2C1678B2202E884392F -670F6D48570E74CBA8C331BA4DBD81BE24BC0095D4E17925545E242890647408E83AF7CB5CEC00061430279D43CD8E477DA4D645DCC549AF02F9D17B785F1408 -F9CDA88A398F702DCAB59026CA48D3819C1DFA4B27F0E7C986B6DE7CBE60A715269CDB637D7280CCD232550219B58E986E94438117B303F6D8839D7FF5B74A02 -99D841CF8DE04DA1EB4CA93B343B4DD3EC5B24E0CE32CB310E6943C73D90252CDFFE048CE48A98C9C43FF2F4644890AC3F7D0F1C0D9D44705A3A0AA7A411DE0D -79475FA490BC086DB992A7DC4A85CB0BEC3BC3CD552DC4EDFC154136F5DB97224FF45C0A41B0C8CF68ABECC05D8F42D2FD374C40276184D9EC59684334DE6A18 -8CF75D702B72014170EC22538E123ACFDFF3290A0C9E9F461CFA8438058A5514EBB0BC889E56DFBE109135679FFF0746088F4F066460A3195C336BE38D26DB24 -87BFAD363780F92EE45ECA08442BA855476C05EFDE97C4636A1D908DA349A912797C77FCB525326184B53F0ADA0CAA664A7DD5C546B3B5B99A265EA873E38F14 -FA933366856D4E6B648B1CF979025303F10635DAE1B3F944CA7A447293C5B82AAE220E7574EE558494559A5B0BB19AF742EB5EC355B2FA65D05E836E194E842F -AFDD9F42DDE5BDDB222E6573B7241415AA5D187500D680A1CCF3C659E46BF916E9F2A4C21FBA3C668FDBAB823E90205432E18FE709C76143EEC82242E5B0F301 -8F4FB727834F7FDCFD04BE904CC43E889A99283C0E8FCA912AE7D186BCCCCB2700CC74D6D0E1DEADA2CA7CA7A9D985B1F6CF5A989953380C74B7521AEF1F2824 -F897C46712FE23384301C05A33FAE0425BEEE0F0749301F8A3C2F09458C59C23AA6B29404C94A7B37C1A4A5C341102E2E93B858E66F95AA31232B2521D139026 -EEFAB6EC5B4388CE92F9072D0402A8C047E517E579D9D32CDA5E142822A9FD1F91F7BFBFAD68B65FD9805DB759831B4731825C3F157F94C3D02B53526AD6E928 -2678D5EA3EAA9FE350DFA31961888C35039942C3F583A42826F41C59F71E1F1D936D4423238A7A6CD6173E988B745B11EA0FD236B2C530128C1284DDE560EE1C -67635C8B6ACBF3074305AADE444DEC5AAB6E626E3CDD289AFAB5FCE9536F8815AC4C1BADFCDB0E72F33EA80A4E4093D9395C70959C461BA5B1B1F0F322075010 -A58851C3E6AAC5406EE30EF34C54F8FE82965B064F3A485F5E40FDD59A5FBD2D6B6A5C7D5F3422DB8A12EEE642E4D96A5C8E98264E796CD9BB816DD93C619C1D -4AAAB625D06803CB8D45D2CFE944510B5C3633492037663996597B7F326889144421BB3591440700F8D176D3D2392133F9AB3A6C790E8CEE4B2FB2FD8D551021 -4BAEB75821EBDC338F304A1A1FD68E7E9D99CF1AA8E0CB0063E74B2CEC1CEB031638E1F26C61FBCFE5C4197BAAB4CCD8DFEB9170765C974C447DD4783C813607 -78BE370BD674ADA68167F95027A582735513910DFD694FA2D43E4ECEC8675F16756E8E191267C8568DAB4234B0AB0E4808B870AF8F5302667C6703060572F421 -300174AC93BEA0514FE475BA6EBDA3942A26A4CA9CD4E5F55E6A6029BC513F20026C4B02CFA03489D58D1856D664D560198CBED1F64951DAB3BCC036A1549D2A -F3BFE468466E672499A028A4AE13790DCC5A0B6660A8BAD9D0B0000CC7FCEC11597B776F2418AC4F0DBD6AD1D2CE1511147040F480F03E4143651909C129210B -3C545DCC93343C2EA0AAF15684C6619DE168358AB108C949028C6E61D988FD07887E17F0A6BC0D29FFF1C0F0E5FAF72955203FC152DD46D6A522FC45334E972E -67BB2FCF55DE4A3A3EC28951327075704A9681F1011F84E2D8EF7E8F9BFF0E2587250E8033299169127E86C7A8582FBDBD7824DD272848A17E9A517FCD408013 -8E8C544652DB8E14AD63CF439316C7CE5B92BBE673DBEC879629AD7D0919562449E79F6956C61184EE9BC04C956B411054B3140C7C0D2F78C804918DCC1DFE2D -0203B1368C214726D3BC3361AFEAD6DA1EB224E58BCBC389FDD5853155ED8A272CEA2CF296D90F22B34D3509EB024F5EA9B2A2E69A0D2830467B0C195C91E51C -652263ED4C25FC9D6A9769290262F880E798829158DB103CF4044231D0C3151CF16DEDA6C66D5D2025D5DA2CE7B006DACC7768ABF7AD97C4C75E93DF7D2DB50C -8E4753D6135BC7271631484C1C7AF9756B2B939622DD10F703B1D82421732624FE680BCA35BDD5C4A31A7CCAEF39FECBC85522D4C9D05253189B00B27366CF0D -9A9694813E3CA41A0DE14C4299A8CC4D11CB08188327C3E68320A9309309D8279C7D20A73B2807ED8DBCC8C4494444666040479A86D98331F3F8477D15931809 -C207E75B09E867A70D2063CA15349CED8937245D314F0EE2F1896A7D3EDA6610AFA1F68E6744E899E310F8E5C2A3B20F71D882FEBC5D899D8E24D73ED3DE121A -1FE9F91A5E0399F65FA6D22C21672085F3431A2784E3ECB44E4A2DBCC3252206A13A9AFC207CD56AAD6005A7B267908E072F3654F058F696DFB5DB3A6E863C2E -011167A325D185A212DAB24D7E16C11E7D3F15653EF8DF93AC765D36120A961974B237B9E342021CA2309D2D684F9A02E57EF8C66E489C8DF513EBEBE8034727 -BB38A23E9C9250558FDA32EC84B28E71CF26CE86CAD1CB7231A5740AE24FC30C44BCFC77F6ECD743F156456D9AC55030D3424976BA7F22C6AA290CA3526F611E -ACB931CB7920BEFE0C9AC67E41F392B484994C912CF8D137E5E6959E9E53391F8C9CBCA5B94517E3EEDD3D0114CC88837EBE53A70F437426D554E86D7D43E916 -455C3BE050AF8AB80FC19D133F6D9FD9F1C828E3332BFCBC21A0D0FCF685102E14A6FEBA247349E9D1538108E8C1C883A59ED92CEAEDFBFAC217A9E2ED39DF01 -19BB298F47A8CEF70D3205FA60B0E3882B273223B908B5D7EEEC5D80694E3D2B481DC17E3FD42C0BE2835220FC7B4027333A2CE47184A680B0D57808ED749F0C -1B2DB1E01D135FC7B82EDF74A4A41D8C0B101A0B71561C7BBAEBF96675999502B61ED170D1F96B13F8AF2CADE5D5F2124A048B19D34F1E217CA7403BEF4BD02D -1F8550FD7D1C98C3050C62D06E2936523DC5CEBE9C78273DD85DF72DD865121C617E6996CB3ACF25BC42367EB29D3B2B4E72CEAA6B128C2EA33BB487A2366E17 -7DA5A124D5BC572206A6CFACD77A4F48DE100CF94493ED212A84B3988565C00F5F1E26C4B51FBDCF32485EDD85E47880276407CF63D7C2A793B7D12A888AB604 -6860E45588D1DA54800C31741BA0B420A69DF03CA05C8B3DF0B3B9DEBCF9851BFCD3EF6ADE014997A25918D6E97ED07F6F79A2A54E7896AA93831B81CADFDC1C -EB4A40AB8C8BF358FDF0CD80C55A0F40F171536EE533A8F6794170B6AAB27817CCA7CC6D80F82DA13CE7A0D596635BA16CF2DF490C2772CC8D41E73C5E32220C -8CBD5BF23A27BC16F9B7E7D3758B60A829AB95AEC0D8A1A96966366057D8C62532C0B00F5E6857479A0AFC231A8CDA3D28B6FAFD00BEC06DFF68C58FF7766917 -94EF117CF8B46A3A8B68F2A811F652467134FD8423F4401D08D4D5607871AA0ED0C3F2E28AF38B24C394A34DF073D4A5592372DA54B9BD8EA487A4F955C78D03 -B85A2134A96E2ABE15342A697F48ADFBA94BF5C4DEB49CB53141EF5DD63EDE2F756750F99FF32140EFA21FEEA46AF5566BEA99B0B85D66B70A7F2D4D7DE74511 -73BA03971EF8B48354B414E13C804A81D85189CA304E7F09CDF67EC477849E23E7BA4816F6A31AEBABC8CD2E121069B1E821568DF2717D7B88CB020CAA78FD12 -7730B5D50D7375B9F1863EA78856DC1820A120F4CE132F1E1FFBA37E7F4FA8117D562C8FAF4725EC628A3EB9A7605D5DEAA699533C7AD7B52E78F61586D05A2E -7E963970906E5849D558D45A58DD966C7A34250169C78F94C669B09ADBFB271FB5D16BEE651650B3C72327F1F0F751BD06007524EB138391315D95577981AE23 -B3930095065FCC360D7AE6FAB26D044031AA03D604A9DBFE82BB99171DC2A21CB25A386E2C514B152B70E68C5346E50B16505969678841E0446DB90A20CF0E14 -E2DFB4B42354B79CEFA3DA2D160E4AB1F61FCB27B55F8C8D9958037F9E797D2E4628E09A30482C04AF4053EEC14CBC467BFFF0FF6C63403168508C0A2F572530 -65840C4B7E90A386F945E189853022F204DC1B9E9C6F29EDB4EA5ED0ABE2EC0E7A93C39439650A3AA17E0C9D17198E85EACD546DC2A8A64459ACF57C1EAF6907 -5178D4A95C9384BA04A779858049C3D1872722EF2C2586E0B36B1B383BD0AB075A674D0BBAE2D0F051DCCDB604E54B47017A8D05352BFAAC98368DCE0F4B801D -A7F45E8779A9C11C29803C2E642AAD551C53379EB05466E93FE6FFA6BE395806588494BEC7358047B02F2E5804E11BB8BBDE928BFD8A164085506947E710DD27 -3AE36B243B3A93D190AD6C587D4D778A7BE032A48F4A7AE3B8FFAEFAD64A6D15E181CAEEABBBA65C86B67E914DC248090A9C9CCE85C67C3B0E451A5BBA12FF03 -23C6AAA6D7FF2A17C2527BE5B50AB7B7A75B04DD00A58777DBE9151AB30BD7100F76C5CB714DE200279C66A9E57451DE6F7D30D0732977D78B1D4FD601001C06 -E4698E1E2207BC9B815919872C499BAD6B9E8270ABEBC29522A3A18265865A041D0DD53AE7EBCFFC28AE1F5F931C05626F74DBCA0A0EA182D9CBF2187442A32B -AE765D044364596356A95F57175D33F8A9615FC0FEBB7E103227FF306084DC10A648AFF837F2B73990219F90304AAB033D3AFCDB65639804A8E434A90CEAFD2C -A1C046F8D4F1E21B8EE550544EFC8B7448EECA7A0B67889036B04AEAFF3C1626AD3BC8D329C0EF4DF79E39BE285D0AB9CFBFEEE569A1F39BE25DD04E1577A22F -042DF94383DB66E075AD5028D7670AFD25581DA4C2056BBA974DE1576092DB1FB2A31393879012592E9279390AD131BBB2D1D634C1E4D0C085CC32C24B90E21E -0801AE5CA2619711548D6E12EE43E62953A6AF9DDC93B7AD338E83BB4810341CB3C46EF1C12B7897EA30043AFED4CF93046A0CEB13A0E2B74CE13194FC8C9E1F -CB77F21F83FBAF80E7AE5F0A1B8550F9BBB5A98E2E3732FFA15AA6D916DB16169F7F260B2C7B1475C85CDE9B9FFE4E64939CDC8E85EED149352697C56F311E0F -37ACA383480ECBAD7D63AFCC07464EE61F9249832E9E08455AC7F4790C7C7516054AE717A63216FA6C4149ED7D413C36544519516AB0F491BF90EB4AA35DD920 -B74FCBA08E578DC4336E251A8606DC90FC14F1BF16D6065136B7B770D6D52504603D2D48E6F938C744DE55AD933A1F2CCD10EDDF4DBA43164FD5A522CE5FB21F -ED8F7D66B5A29EE278CA6C2AB41FA73DE64B85F85C5C3A2210DA9255A91965207BB5D0505C1EBE47E63B5B6CB1BFC612FD5E42111A030E5D5897B9789605D205 -CEDF4A00B3CE1281F1A7CBE952CF200470D7A9EE2AF4F8FFBE1BF99CDCB35C276057FC819895CE0B9345329C3F35C5FEEA863032684A1976D032CE27E6C4B609 -8FD861D8E2AADBDD66F3BD65A1BDD0701A784828B2D9B4713EB17DB888452313269183ADFD20E453A07B06FA47EA573512B3A91FE93944AAA137BD461D4F0027 -BE0A1B62497491D796F0A23837FC65A55272281AA235977D8508BCBB9150A207CD982C5FA478E6015F1A646B59D700ED1ABC5E40C796E0DAC6770DC5DB42C008 -EE9D5F8A8C79BC85D4DB93D0567AB6C437B558E028404929710415371CE6DA2A97BEFE95706B6C2653A94E59374FFFB5A8B52D10E0C5ED838E83A84232E1161A -C025B5E60F663B6C2C3E847742F502575FBB9C3410B3D8DBC26333301133C407DB8E2E378057D5B44DCB488770EAA582FA34225EB315D78EF836AC5A74CF332C -7F35F77844CCB94EE31C1676DCE3A473829445AA9B5B1AF80C2203A681284B28D768D21C2A18EFBD8CC4CB97454757ED1E6F0E2094D43CD6DC4B7CB5637DA405 -2F7A1924026A7D9568358A01EF052B9876E9393B30D0D30E28E2DFE2D1ECCE0313CD09B7B662E886DD475E2EB4DE7F7A40770EF73B93E636C85EC0D1DB649F16 -4DA92F3A6369FD9A7933C06497399034144FA22DED9EC8E795F2B9669089C810D1A815E3FEF423085B7582A798D345D1BAA213DB6F32CE1A99B81076CDD1D822 -405C6CFE62E599498A1E8DDFB612894F9AD022D626A4AF0255979986ED45DE22BD9BBE9DC65E4B0AD76393D1473A51680323F3770E8354D954E49E8858F12709 -5464A801ABA1B4740E812AFBF54361188123000C839696FDE556DE91E5C37A153C486F651D056ADF8D7886F76D377D45ED0FBFFAA45C198B4794D1F1400ABF2B -BFD8A037D23FCBBAE9F5A4782DABFAD310281CFE69F3F13367C75E52BC89461A0F0D009BE327E46F255A9AED9BCD98143B2B91C3599A73F5B82161E6A107BD0F -8B71E4A71BB602AA439E35FC0D4AA52487AA8C7FB91EF5E22D473D49D3601610AA49556696C4E81CD6C38AEC54284B8C0E6DFC76FFAF0BC1D6B77A26668B1E00 -B348D47877C4333D945EB468B44F6704F9FF079E06F695A2F1A30F2027A70204E0B83A0025497AE93E7994EA08DC32216928768956F8DB6360331C8CA99AB41A -1E9BA1D5E8F5868D140E180052723F928753C613EE747F157FC3AD1F352AE708408AAFE50EDC48E1F85593ED3C21D9C4C1B708C88179AF8746D2D819102E4D17 -A5E1ADEDC2D5A5B78A106AEDCF788E9E2CB1FB9E1425024D9D130B82CB2AAC0F026B527B1EE0BDC1F4C19BE7ADE50B03C95D3518BEAF17D2336E1CCD3F9A5728 -80FACF1B9FD9592E4FBBC7D3E456F116A58132F82D3F9A7CA388530B2907B521CFDB820BEE6167713C62D4B9ACAFC27C3FC23266B96F932CFDDA5C766874C004 -37DA5620BD10EF2FB99A1A92F9D1EE99195D11E198918364564F026AF655782AFDDC2A7E9FA6107A5D5BDB8578D3C5061D78FDC1A55B059596A6BD9C1DC19922 -F2D30A1CE2D47EC96EC0E2CB6E18178DCDF78CEB8657A865734C9409AA42A70D165317E4B2095B7334FB531AEC8DF89717C2F605DE8F8719F5D2F85F608BE31C -BF363DBA93B8EA7C1A109E4393E66687A2DF4AB66989C013FC76F4E88BE03D227104D32AAA967EB3646EBED96BF7F8CAC8E18A812AB644AB55BF765E7F32BF03 -E55AFF32A51D2888494CCAADD1895E29CD62CB3BECCC2246DAAB3053AC6C3D193C0E3F63AA25F2490B50EE2CE13E9B46A85C439D9A1AE2B3BA9C917AE1500D24 -E5CB953EBBB7AB07548F5AB201F0332FAC97682A7B1927502CFD03723D10201EEC114244388F4A4C996FA206F8AC624A1A026864225151EC3DBAC42C97B11314 -AC8A8DAF4414A4EE498A64C2A001CF6B7391CA899321336AB8B702C7BEE39E2513DF9BE355E39690C37566904E1F42AE9C247948B777D7E9EE93D44DC94C0B1A -C4BA7B54736D5366841EF3A74DA7D688D1ABCB2A7E24AA0188AF4EB808455B1F3B87F45F1D610693778FCFBF8E459B788C4FA63EC14EBC9D00550844A16E4104 -8998AEAEFD14A8989AE5FFE8E3395F78610E5FDFF29B44210BDFCDCB391AC021568347FD7EBEB45C14EDA9C43878B73221002F1B63DD3F2436BD5D3AA3E8BD0E -F72B27032BA706B8DDE3D3507D07465EC94BF28077AC0A4E71771B9F33CA3E2822C5FC6A732F919AC369ECEAC45E27D76E11C4381080986AAD32ABFB83CC6615 -0CE544EF41C5563FCC020492CF53BDB024E64A570F4077F8701DCF4589372F05B28177A592C357B6BBBB284F7DA56A3DBAD4B3682DA465B8F55CDC1AA0081A1C -82FB9CFFF21689C320D343C52039B5547DC6E926D290823E03A58E21A673B802EEC81E1753CEABC7677051C806D117D62D9A225C0C7A99ACD21FBE724AAAF308 -6EC2C7CE0A5864E8066201021217FEB124357218282DAFF5F27D47348C71D70E4AD9E1C763076C15D413EBC893E0077325A33499AD3B05D64243625551727124 -B584CCF64FFFB8CC5BE14C5AA091155E883C00E7E2160B45B950D88BE1154114F89BFE3CBC659B451FBC4B5FF6C38DAF774262BB6AA925878E671A6D4CD76509 -A29243F3F508E8B067970FECB1CB9E8DD19843374E793F7A09E63E547B65D51672E4D9F300512754E9BFCB13AE6EEE817B455F4E3E9EC4EE8312348F8FD4B818 -F705C3BB86C524D4685BE86F753D3DC2F8511F60D3EE80259270230968D9152CF13AADA598AD5DF78A19EEB971386FC73F771A5F00F5938E6F193A08315BC323 -08BCCC95D71478400BBEBFD76943864CDD1378025A4365FEFD2CA28FDA7F8D2B8C6CD7078699F5A8FC473EC0CCDC238BA0D6FC810F0DD8ADB0646038925D2718 -05B8C08E0530E5120BB4D0EC302A772619B54A67A2686788C6D1829F4271B7247A6321459098B4E88760EEF3B45D4D97BFC0B945C0F73E678C8F252C6748A92A -FDB5C51DD5F1A07B37D8F6D0B456D9218742BAD966F1CD7424E74B90035ED025A2BD8F91F59724D7705F28227C0CF7C1060E5440CBB216436375D499939DD426 -90C2BEB192342D5F2142688E51B60D62A24D6ABA59B1065C3F729B6F6D6E141B6DC2DF6325C29B2FDEE82F484DE6D059287944A98250D6C185CC9805AAA91B2F -A7BC30D9896D56318A4BECEE58ED2FCF771BF5EB9AFC2C7481B5EBFA5A4C7C0D72C37DE65B0395EC16B7E4EA045C6A281D7161DBF4224385B8D71CAC22E4A31B -B61D324D6B83C9C5445BA1A983590805D65527550492E2221ED98A7594951C0A1EA4E83FED0624C7FD3597C3C256BF048E785C0C400A1F721AA98A7079B27300 -93EC901E54F74A12A883895455A81348ED9FCA39ED8B8880F085C1CD7867AC17B60C84E90074798830B532FE4E55C68E09FCDE22A80A33F7BB62DD5AA2167413 -BFC1D3BEF9F29CC7251C6BF752EBDC844405CBE031D978F44E92A3570FAC2A2BDAF0423D3B0FF92413CEA1F7D1B593B8AB57DB86B529B55C99E3264AACEFAF01 -B38A450529F35362FD45EE7BFFE1294EDAF210062A19A1E62D57629343DC391CB9EA78A523EBC19D2A5185897134FEF9E61BF35014E44A8E3B0F13BA536B3A04 -386703BB6A96C392BC10E0EC7C449B9F55CC20D931EA4D688CC5149E7E29600FE9A150A259C375230C9B9114DA2DD63967EC71084F459AF4105ACE139B563C19 -5551C74A756DB01FCE50142BE110455FFCEFA4DCBDBF0FCFA64164B141F4622E424BFA4CBC3C97BE6701BDD0117F60F9E7921BF02AD322C99DA90944BF0A591D -80F8DF46B18B8D926AB6D8C9792FB9F13376DDA64FDD5CF2260FAE5242D1AA17DD1F5901A79836870E33B988EEC6BDE1D2200260E4B5574D1D01C4D196A0CA1D -B14D29F7B71275468296AB767E0CBF304BE7279F08110D2FF471194CDC9D52055DEDA81BC3E0E339951B70D607D01B57E56A44751B6C78A05176B1BAF6FD6A26 -3280598EB3168214E4F5A7F2A12A0EEE41E05D8AE95346A7DC457D20835F781B7C81AAE88C3886BD0117814D0E120C5B2EB5DE2683801F9086F77C7D5055622D -96173AA40422534A443DFFEAAEEDB657529DFDD3186164023B0137424D59B32995DBE1FA302A4680C7EF16752EEF5BFD1718FD75F7FACAF7BF0113036C75220D -30C478D8E51F7AA26D06C2127FA7958A0D2573D5EFB64CE36EB9067DDC64A90101BA5CB3BDA8016086B09AC84183A0957F71B2171FA884A8BDBB902272BDAE00 -CCE5D066B5C0E97934BB525B30EC739ECB2DE36E43C6438C12D2AB39C5CCFD000D909322F16AE59455B5AE1B0C0C5911245A81F004C46A032CE8C9CD0D4A7709 -280CB62664E4A52961047025B1DDC83D7CB51D9D6C03863DF501B3419FE68E26CD9B8DF7803F60D47AC08DF9E37B2A031C44C5B1878CEFEB334D49531331FF29 -F8217E6A07FB76DBDAC33F75C023E339D54D7861C94E6511FC5CB230C106E4041B74E60A69FF1481572D73C89B4187FF6AF792A1DABF2FF12518904BBFB2791E -B521361BFD607D4A954B3D6FB2325F3584ACF4E0C6B091EFEE09DECBEAE62011BBA927717A2D0FD9AB4961CAB5A5C45708215D690FCD6C67441EDB49D1E29603 -69E72656F7B7BEB4B5B68298E00D74727BAB0E22FD642F2868F765AC772C440CAD641454789B22B3701F6D72EEED4C3A5AA0D6ABE63DFC6D3444148072192D0D -9BA6FB9E6990F5D2D1DA016675972B4D0C59E2A3B16BEE6AF14E2DB2205701166D6AEBFC6A0D1E6B97597F618617FEBA0E83A9066CF74D438D4CF2413CCEFA0E -D982A163BE02284C1890327FA866EFB89EA877E9AC60746D3CB8F737AE39F02FC2CFCC2EBBD98E0FB981D04ABC785187659B9894696D9866EDC88CF5B3EFAC18 -2FC9AFA3E3171272BF517429B73FB350326763E08CF35905256FF149F73F3E0892A0C2ACE717585EB8E06101FE3E671CB31CDED34E4AC4D9D62A470BE21B871F -2BF68CA66C61C4171E9BD2D36D37CE089B8A5FFAECA4CC1D9BB344083848B2175EF03853B5F51AF12EA967179B22AE4A3A2533016B3B4BF8236814A2EF0ABE2A -B851DF78D45FA368F812E988C5D7C47E26AB1D96D492EA40D33303DF7E462E1CC4C7BCCED565B507174850951EE07A2B59983A8C994FC67C723AFDBC24BC2114 -FCA5CC71625E26CD089C6DADA27CB6F9C7508FF4081F96E025DC4193271C740AD303B0BDF571586E1681062D12D8C5B37D670EEBF368810032E068C02E09250A -DA4304989C45FFB13615C01170460C38877649FC35021F8A9A04819289FD282E85C93774C9C95C847C1FCC292CAD2A1A6FF96CDD5536FA7CCFC50A3B7D114E1B -EE0DD53A581A41A0E7EDA01039B56205D0A63763371EFB159400B033BA1ECC17C9339460CCD91230C657DB690D6FD93ECAAC6FF4B02D3D8F63698DDC71FF4217 -4ED77C9956C53AC98A1AA84B95E341E7A56F3530082E24C54574D17D2749F12440CBE90EEEA83A1B3BE2106982310343C7756D5193CD81984887CA521A882612 -BDF5CC7A5E207F4602F865956ABF408E7ABC4BE5EC7D9C4A50C478DB2D61121BE94611A5BB98A150BA08605636F6EA10EC6BE7530CFBBCF7DEE3677E2532722F -6A8A2497E2C37423FCFBCD7F8A95C7E97C8B33D3246E814A60AC2AEF3CA8150F66D2B44D4D658DAC2CFB743D165D924367971CF1CA1F85D81D437FF55D3BB51B -B7BA5527C99A68181805CCB9A4CFC43F66BB75B9E1EB2F227D499FDB28C07904CDD4C301C97B0F05C24A97CE7017B4627483DEBEF102CE4D88B08A0FD3FD6B0D -E459EE2E54D3AE5B00E19498A0AEFF0D54AFC5240E9544AD1B7AE5485AD2B329B0443A8B1610342A6E5EF251AF7E20334D730008447B46CD01D3E9A772AD0F29 -3E00381B252C5A21C785F25D4C0D7C280D26D69DF46C72C50C15916FB51991288F55106A39F28BA177D5DE9939937633936BCCC5795711E04BF1BFF2C8241110 -17638B174EE6B05D03042D0F7765D0AE6DF80B3400364DA57DB8AF9553BEF20496F41DFBE7CDCDF1525524B562F3A091E1F559BA80177900A07225CFC29E812B -FC35B29EB768F1A9FE070F0BC66128112B3A78D86244C083EFCBBAB2DE011627E526C6031C3F9E10B795CFABF0520EF7677ABE7DA6354A4CB1018071D2115100 -A6AD87AD2F2C7BFC8C00DD30C1159FACA9F9C9EEBF21807465353A5D23CBA12D34E4A600041610CA06A04AF70DAA3138486F77F1AE3AD110962A63C5B7AF4116 -A7A838808D3810A02513D40BB76F9634B53B7D9A8F4A2DEE2E020691490C811747C736F0B579371936F080EDC1C91AD1ECBB14C8FBAC8D796A9000F4AEF1A812 -FBDAFD438BC3265D48B14495E71C9CD4D2E3663AA895AD8276E5F92F2DCB1511A87EDACD3BCC34DDB99B0AAA818570453A4677959A1B99BC5588114AE180CC12 -74EDB45DB0C0D0BBB4F776DFC354EB93D5C6AA283B34BAA038608368242C1605481AA04234DBA92E467BD08B46A6E5A26BBC9AB3F7BB71EDAAD2A61C600FD225 -F75336E684B3562CD02C7973F7214DAA2543E0297D41B55D355A989669CD3D0CDF9D00AA8388CE3F54CB35DED0EC8B9F28F540CC5A9B1B683D747417E718352F -031F607DE9B89B7495EDC282A3167150502E1096D4CDA627F099F05CDFF16B14CA97C3EC2D6A5BF26715B41618285E1EBD6D8479933846BAD82C7FC9B11FAB22 -CCD5111B895E7296FA3B500249F6048C1D6CC95E9D8498E2D5635DEE1D0E650495F67694EE8E8213FED9E5AC384857D45811DA8E188E455107326E766301C22D -3346552204E3D044920660738B993CDF3005CE76AB15B90A89BD0851BEB2BE04043CBE4680BB8011D7482A3EA95C2A2C22495E596986B69DDEF8CA584DD3FC2C -D634E152F25DC44A2FB0C3BBE70C4E2A7605B34FF29CE666060FF1AAA43F9F2A2A302C1C853A46007A0674111E714B6684832DF2533FFBC997ABE901AF097724 -386F8777984DBA2F577660A0651F2E3E648CDA908502572B7C47CE65716EA321BD4AFD28F4ADF29D80EDDC43828451760C6B3172E17182F7D23FD2BA841CA50A -A729938AD2EA39877DDFCDD955BD5DF3222F9863FD83C49C6F29661397F77A0A4D0B13C74C01421F3D202CC240228209540A72B6F051749E4E24650A51CEA226 -574781EF9F14682473E44AE561B3473E7F658C907CDFC0243B9D8F65D20F250598524D731443B467B229D031408D439B92246F241C5D9BFE2676729144766125 -6FDD786C9F1180FF217298AC014E81252473DCE00157A8B0939742FD17DCDD19F705BEFA8D9751A5329E14A3BA4F47E198694AD07054724F9A829345359A291C -7A2801E22E2E413CBB5BF4257D649115FFD9B96924958BE63BFAAC8C98AA6004E44F1CC844B95479D0B45B1CBDA314541D542B38E44D28CAF073AC9EC6076716 -D689FC0D2C88038644884A7AE10040C4489DDA652C2DEC6BFE2152C46887DA2C2BD7ECF1B40FAE7A78288F015EBF1AACD5E0D023B1B77C4F43A6735D818A0930 -FC35592395824D3CD3E5599751DD94EDFC4B4759D2B318B27E4A34F00993A61EE1BC1755DCB1EC4A18F6F074B42F438097BC524D384DB5F23295AC7D49E48021 -96291BF9AE570004EC6701361495616BAC48B5B66286106CC3C0732240D6982BE21D122C8442311124CC733A719EA298EAD6F3E7D4CD8823A90213D5EFDE982B -08964637BDD95E23E84D33001263B9E018803415C076621CD385C846702DE210546B996A1D756ED16029AE71A6146D5B143EEB541B049CAE0C61FA3EBFCDDF01 -7243551A5A34594E617FC739CC93BE90E66D5344FEDC5DC9EB032B8E5856C82D199178D9B04DFBC68C1C0CCCF8E2433AF7F3C037384DD187F48445B83B61A12C -6EF17DD7FCF2E649161A40B2B4A9EE8FF797752FDC7B41F102D9568E77D8B22A7E86A42187F66E914DA19A90E38B8DE8109F73A9DAB0E0B6B5A78852CAD5A91F -B77AEDC1936FE19CF745416A98D4095FF0C898356F66B35BDE40568D51C3B12972660E168E9343847FE96DED0C7C6688A5825AEE44B8B303F46409676AA4532E -100E6C52C08E6A924BE38CC77E4C0E69F705EBAA8CB2BBB46259710DB5D3AB2B8F7452AACBE7ECFDABF61283CDB482AA1A3F96CA56FA592630F5773E6E74DC0C -0CE97EF69FBF25121368B2E0EE6202121573DBC4F20E19487FB830E0A2D86F2916784C2F021BB04AC45827184107D4C5AE1CF586E71C82AB75488532AF44E61A -15A2D993F98FB3267077D13FE1620FF937D90A3B871B503CA5177B35A8BD2101B4671B8B70A5E67AD911ED19AF20DE3AD05F35CCE56E1880184A77E61991DA22 -4047FD5D74BE88AE38B1F9E4AA4B429BD0AD35169E6853ED86CCF5E2823A522CECB28416AA1F623AC88A2288700FC6E8F14E45874BD3B62CD6A64C80A0736D0E -8722647AD8DC7DAC1BDDD284DA60D8FD4286CB3CBEA16754ED1E75CA726C7C24E0BD9F83BA5851CF9B97E8B9C95333A8381720E427FB9AB6BBE999C5C7432B06 -F39D4D4F97C48E76F9A51E08CB3DA59AF024992710457C8A1C13B6AA2ACA1221FC913B5C6F2D17F4BD831ABE8210E78DAA8C4F90E99299CE602BF025E7ACFE26 -351607D136FEABBE97F015A2FAF6DF60D8865B98DC33DAEF84D51DFBFDF3060E49EA852CB84933206CD67103259A72F3AE353B5C3D4AE38149D5FA11C0BAEE1B -B53426D11FB4964186A83D22FEFDE69BE73CBE709E22836BEF30A310081F942DBF532452D2AA605EC5CDBF57CF558C5449DCD5FF62695AEC24B9128E69CA4305 -248E09F38B18B473F1FC50804986F1F712D1EAC9D1A174043F3641426783F10BE8D375B06551E02F42CDCDFC782C557E8372A5C919EF936E62531B8B2BF91D13 -FF2E73091DF2514F30F5B4269C2C81556E49665C0AE804399310039541E30122DFBD126720C7467D5BAFD4E7C9B0E2ECC49037F82BD05249D403753157F0B20F -25150B9C90B56DF122654E96D29DA517A745DF8EF0F48F7306685AEF06C303237C726A825380FDCD28A007293538F6F241B6E7B7815DFB2F29D54B8C5301E729 -2ABB9228A800ACB73FF9FA5B8CEEAB18FECE17B17AAAB655ACB3C6FF0CC122280BEFD924CAB15A0AAA5A3FBA6A6247CD466D2D6D8FCC4A9ECB2B95D437A4E001 -7CCCC6D4CC5F4D3EE28924485171B5CC47B1DEC5D81F8EA3915FE427CB99BC1E741AE63199FF12077E454A1B99BC04D4C391F51E960444B583F725AE4863CE1D -CF2543CE54D921D4A9DE05ECDD63FDED2814BCF74832DBACE21D5E691FD4331A7F199DC667C1F94B5E4361F4BAA3E41D484377515ECF77E8AE46846367D9AA06 -604EA91260FF0E6FD083CB1F6CD8A2DFC073679B78E5A89AAB64AFE2705C1F0AC5CC702E988A0BBB3F0D6C7A9FA6D1FD95FDFAD4C6E4D840E1EB1DD3B3954E11 -A03446D1DA39A2FA828801F082AA344156BF9C45CF7023133C0260BBA320C62FA1D6FAB77559AE70814A65F4AC297A50372A83A0A656E1BA5E1953C40529DE0E -2FF47893E47C2A6CA12AF02E5AAD2669B57240F161DE356A3ED7D6A8BDA4BD025AF40E7066CB30420C3333B84DCF841DCC6BBBF803236728F2F2507BA97A472C -F5F862696C7B0833200DCED8838A7A932B9EFCFBAB97CD05B0DBF443019E5E23CEE311F3BB015324144579DCB1A11E021FF73AC326B970A5E87DC49B0925AA2D -40378C0A954F87528EE1E709F6BDA13534901C559C0A9BCF1CD74BDC3CBCE312D915B9C81F62C50E879DC6D601DA61D6DBE0D0B1BB7FF478CF37C336EA679E2C -1CCB47CF650EB6102A52EAA7E13BFA7958E3D32B860E87255650427410D2FF0C3C7CADD29AE2E4D422BC61CDCA67C38FD0B0AB463DF1726B85A2B344188B4E16 -461F5E9AAA279B37CD37284AE26FFB08F4CF06DCD3332C1E45B9200B42DF1C215412E2A5F65FA4D7491E0297E50CAEE7D72C4B615A730C49A1D47EDF43E14A2C -DF9E705C02D02FD9D6B194770AABE66A37FE6E62563F38741067CB361085C4119142D17C47889B01D4243D694308ECD487A15DA46D48B4EA94D39B4C5B1ADB02 -FF46A27ACB4EA2029496D6CD408E9760A6926F4E5B5A5D87203DA5102E389D249819C168410949CD0B4B713C1DB748B507ABD30C9CD5342A7AF4B892D4498309 -49CB16FC20D72B9F74709EF8AE69BE77F376545BA647A9D426FCD1EA0FB2261776BE98845144C04045FF0ECA91DCBBAABB64C64A15F065CDA0DEAE74BBCAE80A diff --git a/src/client/main.rs b/src/client/main.rs new file mode 100644 index 0000000..1018b0c --- /dev/null +++ b/src/client/main.rs @@ -0,0 +1,747 @@ +use ark_bn254::{Bn254, Fq, Fr}; +use ark_ff::PrimeField; +use ark_poly::{ + univariate::DensePolynomial, EvaluationDomain, GeneralEvaluationDomain, UVPolynomial, +}; +use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Read}; +use ark_std::{test_rng, Zero}; +use clap::{arg, command, Parser, Subcommand}; +use clap_num::number_range; +use ethers::contract::abigen; +use ethers::core::k256::ecdsa::SigningKey; +use ethers::middleware::SignerMiddleware; +use ethers::prelude::Wallet; +use ethers::providers::{Http, Middleware, Provider, StreamExt}; +use ethers::signers::{LocalWallet, Signer}; +use semacaulk::prover::prover::{Prover, WitnessInput}; +use semacaulk::{ + accumulator::{compute_lagrange_tree, compute_zero_leaf, Accumulator}, + bn_solidity_utils::{f_to_u256, u256_to_f, f_to_hex}, + contracts::compute_signal_hash, + keccak_tree::flatten_proof, + layouter::Layouter, + mimc7::init_mimc7, + prover::{Proof as SemacaulkProof, ProverPrecomputedData, PublicData}, + setup::{g2_str_to_g2, setup}, + verifier::Verifier as SemacaulkVerifier, +}; +use std::convert::TryFrom; +use std::process; +use std::string::String; +use std::sync::Arc; +use std::time::Duration; + +/* +RPC: https://rpc2.sepolia.org +Address: 0xaaaa553ECd8C7cFBcA9396A5746956ef738BeEd4 +Private key: cf3a4fe3eaa7533fd3a5b19f874a0ff67749a926b80d4074 cc3b1c634b536c47 (remove the space) +*/ + +#[derive(Debug, PartialEq)] +pub enum Error { + InvalidSk, + InvalidLog2Capacity, + InvalidIdNulOrTrap, +} + +#[derive(Debug, Parser)] // requires `derive` feature +#[command(name = "client")] +#[command(about = "A Semacaulk client", long_about = None)] +struct Cli { + #[command(subcommand)] + command: Commands, +} + +fn log_2_capacity_range(s: &str) -> Result { + number_range(s, 10, 28) +} + +#[derive(Debug, Subcommand)] +enum Commands { + /// Deploy a Semacaulk contract + Deploy { + /// The Ethereum node URL + #[arg(short, long, required = false, default_value = "http://127.0.0.1:8545")] + rpc: String, + + /// The deployer's Etheruem private key + #[arg( + short, + long, + required = false, + default_value = "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + )] + sk: String, + + /// The powers of tau (PTAU) file containing a phase 1 trusted setup output + #[arg(short, long, required = true)] + ptau: String, + + /// The capacity of the accumulator expressed in log_2 (e.g. log_2(1024) = 10) + #[arg(short, long, required = false, default_value = "10", value_parser=log_2_capacity_range)] + log_2_capacity: u8, + }, + /// Insert an identity into an existing Semacaulk contract + Insert { + /// The Ethereum node URL + #[arg(short, long, required = false, default_value = "http://127.0.0.1:8545")] + rpc: String, + + /// The deployer's Etheruem private key + #[arg( + short, + long, + required = false, + default_value = "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + )] + sk: String, + + /// The powers of tau (PTAU) file containing a phase 1 trusted setup output + #[arg(short, long, required = true)] + ptau: String, + + /// The Semacaulk contract + #[arg(short, long, required = true)] + contract: String, + + /// The identity nullifier, in hexadecimal + #[arg(long = "id_nul", short = 'n', required = true)] + id_nul: String, + + /// The identity trapdoor, in hexadecimal + #[arg(long = "id_trap", short = 't', required = true)] + id_trap: String, + + /// The capacity of the accumulator expressed in log_2 (e.g. log_2(1024) = 10) + #[arg(short, long, required = false, default_value = "10", value_parser=log_2_capacity_range)] + log_2_capacity: u8, + }, + /// Insert an identity into an existing Semacaulk contract + Prove { + /// The Ethereum node URL + #[arg(short, long, required = false, default_value = "http://127.0.0.1:8545")] + rpc: String, + + /// The powers of tau (PTAU) file containing a phase 1 trusted setup output + #[arg(short, long, required = true)] + ptau: String, + + /// The Semacaulk contract + #[arg(short, long, required = true)] + contract: String, + + /// The index of the value in the accumulator + #[arg(short, long, required = false)] + index: usize, + + /// The external_nullifier nullifier, in hexadecimal + #[arg(long = "ext_nul", short = 'e', required = true)] + ext_nul: String, + + /// The identity nullifier, in hexadecimal + #[arg(long = "id_nul", short = 'n', required = true)] + id_nul: String, + + /// The identity trapdoor, in hexadecimal + #[arg(long = "id_trap", short = 't', required = true)] + id_trap: String, + + /// The identity trapdoor, in hexadecimal + #[arg(long = "signal", short, required = true)] + signal: String, + + /// The capacity of the accumulator expressed in log_2 (e.g. log_2(1024) = 10) + #[arg(short, long, required = false, default_value = "10", value_parser=log_2_capacity_range)] + log_2_capacity: u8, + + /// If specified, use this semacaulk_precompute endpoint to privately retrieve precomputed data + #[arg(short, long, required = false)] + semacaulk_precompute_endpoint: Option, + }, + BroadcastSignal { + /// The Ethereum node URL + #[arg(short, long, required = false, default_value = "http://127.0.0.1:8545")] + rpc: String, + + /// The deployer's Etheruem private key + #[arg( + short, + long, + required = false, + default_value = "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + )] + sk: String, + + /// The Semacaulk contract + #[arg(short, long, required = true)] + contract: String, + + /// The identity trapdoor, in hexadecimal + #[arg(long = "signal", short, required = true)] + signal: String, + + /// The nullifier hash, in hexadecimal + #[arg(long = "nul_hash", short = 'h', required = true)] + nul_hash: String, + + /// The external_nullifier nullifier, in hexadecimal + #[arg(long = "ext_nul", short = 'e', required = true)] + ext_nul: String, + + /// The serialised proof + #[arg(long = "proof", short, required = true)] + proof: String, + }, +} + +#[tokio::main] +async fn main() { + let args = Cli::parse(); + let result = match args.command { + Commands::Deploy { + rpc, + sk, + ptau, + log_2_capacity, + } => deploy(&rpc, &sk, &ptau, log_2_capacity).await, + Commands::Insert { + rpc, + sk, + ptau, + contract, + id_nul, + id_trap, + log_2_capacity, + } => { + insert( + &rpc, + &sk, + &ptau, + &contract, + &id_nul, + &id_trap, + log_2_capacity, + ) + .await + } + Commands::Prove { + rpc, + ptau, + contract, + index, + ext_nul, + id_nul, + id_trap, + signal, + semacaulk_precompute_endpoint, + log_2_capacity, + } => { + prove( + &rpc, + &ptau, + &contract, + index, + &ext_nul, + &id_nul, + &id_trap, + &signal, + semacaulk_precompute_endpoint, + log_2_capacity, + ) + .await + } + Commands::BroadcastSignal { + rpc, + sk, + contract, + signal, + nul_hash, + ext_nul, + proof, + } => broadcast_signal(&rpc, &sk, &contract, &signal, &nul_hash, &ext_nul, &proof).await, + }; + + if result.is_err() { + #[allow(clippy::unnecessary_unwrap)] + match result.unwrap_err() { + Error::InvalidLog2Capacity => { + println!("--log2_capacity should be between 10 and 28 (inclusive).") + } + Error::InvalidSk => println!("--sk should be a valid hexadecimal value."), + Error::InvalidIdNulOrTrap => println!("-n or -t should be a valid hexadecimal value."), + }; + process::exit(1); + } +} + +abigen!(SemacaulkContract, "./src/contracts/Semacaulk.json"); + +type SemacaulkContract = semacaulk_contract::SemacaulkContract< + SignerMiddleware< + ethers::providers::Provider, + ethers::signers::Wallet, + >, +>; + +fn parse_sk(s: &str) -> Result { + let mut bytes = s.as_bytes(); + + if s.starts_with("0x") { + bytes = &bytes[2..]; + } + + let s = String::from_utf8(bytes.to_vec()).unwrap(); + + let hex = hex::decode(&s); + if hex.is_err() { + return Err(Error::InvalidSk); + } + Ok(s) +} + +fn get_provider(rpc: &str) -> Provider { + Provider::::try_from(rpc) + .unwrap() + .interval(Duration::from_millis(10u64)) +} + +fn create_wallet(sk: &str) -> Result { + let wallet = sk.parse::(); + if wallet.is_err() { + return Err(Error::InvalidSk); + } + Ok(wallet.unwrap()) +} + +pub type EthersClient = Arc, Wallet>>; + +async fn create_client(rpc: &str, sk: &str) -> Result { + let provider = get_provider(rpc); + let wallet = create_wallet(sk)?; + let chain_id: u64 = provider.get_chainid().await.unwrap().try_into().unwrap(); + let client = Arc::new(SignerMiddleware::new( + provider, + wallet.with_chain_id(chain_id), + )); + Ok(client) +} + +fn parse_id_nul_or_trap(s: &str) -> Result { + let mut bytes = s.as_bytes(); + if s.starts_with("0x") { + if s.len() > 66 { + return Err(Error::InvalidIdNulOrTrap); + } + + bytes = &bytes[2..]; + } else if s.len() > 64 { + return Err(Error::InvalidIdNulOrTrap); + } + + let hex_str = std::str::from_utf8(bytes); + if hex_str.is_err() { + return Err(Error::InvalidIdNulOrTrap); + } + let hex_str = hex_str.unwrap(); + let mut h = hex_str.to_string(); + while h.len() < 64 { + h = format!("0{}", &h); + } + let hex_str = h; + let hex_buf = hex::decode(hex_str).unwrap(); + let hex_buf: Vec = hex_buf.iter().copied().rev().collect(); + + Ok(F::read(hex_buf.as_slice()).unwrap()) +} + +use semacaulk::contracts::format::proof_for_semacaulk::{format_proof, ProofForSemacaulk}; +async fn broadcast_signal( + rpc: &str, + sk: &str, + contract: &str, + signal: &str, + nul_hash: &str, + ext_nul: &str, + proof: &str, +) -> Result<(), Error> { + let ext_nul = parse_id_nul_or_trap::(ext_nul)?; + let nul_hash = parse_id_nul_or_trap::(nul_hash)?; + + let client = create_client(rpc, &parse_sk(sk)?).await?; + + let a = str_to_ethers_address(contract); + let semacaulk_contract = SemacaulkContract::new(a, client); + let proof = + SemacaulkProof::::deserialize(hex::decode(proof).unwrap().as_slice()).unwrap(); + + let result = semacaulk_contract + .broadcast_signal( + ethers::types::Bytes::from(String::from(signal).as_bytes().to_vec()), + p_to_p(&format_proof(&proof)), + f_to_u256(nul_hash), + f_to_u256(ext_nul), + ) + .send() + .await + .unwrap() + .await + .unwrap() + .expect("no receipt found"); + + let tx_hash = result.transaction_hash; + println!("Transaction hash:\n{:?}", tx_hash); + Ok(()) +} + +#[allow(clippy::too_many_arguments)] +async fn prove( + rpc: &str, + ptau: &str, + contract: &str, + index: usize, + ext_nul: &str, + id_nul: &str, + id_trap: &str, + signal: &str, + semacaulk_precompute_endpoint: Option, + log_2_capacity: u8, +) -> Result<(), Error> { + let ext_nul = parse_id_nul_or_trap::(ext_nul)?; + let id_nul = parse_id_nul_or_trap::(id_nul)?; + let id_trap = parse_id_nul_or_trap::(id_trap)?; + + let table_size = 2u64.pow(log_2_capacity as u32) as usize; + let (pk, lagrange_comms) = setup(log_2_capacity as usize, ptau); + + let zero = compute_zero_leaf::(); + let mut acc = Accumulator::::new(zero, &lagrange_comms); + + // Use a dummy secret key; we shouldn't be signing any txes anywaya + let sk = "0000000000000000000000000000000000000000000000000000000000000001"; + let client = create_client(rpc, &parse_sk(sk)?).await?; + let c = remove_address_prefix(String::from(contract)); + let address = hex::decode(c).unwrap(); + let a = ethers::types::H160::from_slice(address.as_slice()); + let semacaulk_contract = SemacaulkContract::new(a, client); + let events = semacaulk_contract + .event::() + .from_block(0); + let num_leaves = semacaulk_contract.get_current_index().call().await.unwrap(); + let mut stream = events.stream().await.unwrap().take(num_leaves.as_usize()); + + let mut identity_commitments: Vec = vec![zero; table_size]; + let mut i = 0; + while let Some(Ok(f)) = stream.next().await { + let id_comm = u256_to_f(f.identity_commitment); + identity_commitments[i] = id_comm; + acc.update(i, id_comm); + i += 1; + } + + let mimc7 = init_mimc7::(); + + let leaf = mimc7.multi_hash(&[id_nul, id_trap], Fr::zero()); + assert_eq!(identity_commitments[index], leaf); + + let acc_on_chain = semacaulk_contract.get_accumulator().call().await.unwrap(); + assert_eq!(u256_to_f::(acc_on_chain.x), acc.point.x); + assert_eq!(u256_to_f::(acc_on_chain.y), acc.point.y); + + let nullifier_hash = mimc7.multi_hash(&[id_nul, ext_nul], Fr::zero()); + + let mut rng = test_rng(); + + let assignment = Layouter::assign(id_nul, id_trap, ext_nul, &mimc7.cts, &mut rng); + + let domain = GeneralEvaluationDomain::::new(table_size).unwrap(); + let c = DensePolynomial::from_coefficients_slice(&domain.ifft(&identity_commitments)); + + let mut precomputed = ProverPrecomputedData::precompute_fixed(&mimc7.cts); + precomputed.precompute_w2(&pk, &[index], table_size); + + if semacaulk_precompute_endpoint.is_some() { + let mut endpoint = semacaulk_precompute_endpoint.unwrap(); + while endpoint.ends_with('/') { + endpoint.pop(); + } + + // Fetch precomputed data + println!("Fetching precomputed data from the Blyss proxy at {endpoint}..."); + let url = format!("{endpoint}/{index}"); + let mut res = reqwest::blocking::get(url).unwrap(); + let mut body = String::new(); + res.read_to_string(&mut body).unwrap(); + let w1 = g2_str_to_g2(&body); + + precomputed.update_w1(index, w1); + } else { + precomputed.precompute_w1(&pk, &[index], &c, table_size); + } + + let witness = WitnessInput { + identity_nullifier: id_nul, + identity_trapdoor: id_trap, + identity_commitment: identity_commitments[index], + index, + }; + + let signal_hash = compute_signal_hash(signal); + let signal_hash_f: Fr = u256_to_f(signal_hash); + + let public_input = PublicData:: { + accumulator: acc.point, + external_nullifier: ext_nul, + nullifier_hash, + signal_hash: signal_hash_f, + }; + + let proof: SemacaulkProof = Prover::prove( + &pk, + &witness, + &assignment, + &public_input, + &precomputed, + &mut rng, + table_size, + ); + + let is_valid = SemacaulkVerifier::verify( + &proof, + pk.srs_g1[table_size], + pk.srs_g2[1], + acc.point, + &public_input, + ); + + assert!(is_valid); + // Serialise and print proof + let mut serialised_proof = vec![]; + let _ = proof.serialize(&mut serialised_proof); + let proof_hex = hex::encode(serialised_proof.as_slice()); + println!("Nullifier hash:\n{}", f_to_hex(nullifier_hash)); + println!("Serialised proof:\n{}", proof_hex); + Ok(()) +} + +pub fn remove_address_prefix(addr: String) -> String { + if addr.starts_with("0x") { + return addr.chars().skip(2).collect::(); + } + addr +} + +pub fn str_to_ethers_address(addr: &str) -> ethers::types::H160 { + let c = remove_address_prefix(String::from(addr)); + let address = hex::decode(c).unwrap(); + let a = ethers::types::H160::from_slice(address.as_slice()); + a +} + +async fn insert( + rpc: &str, + sk: &str, + ptau: &str, + contract: &str, + id_nul: &str, + id_trap: &str, + log_2_capacity: u8, +) -> Result<(), Error> { + let id_nul = parse_id_nul_or_trap::(id_nul)?; + let id_trap = parse_id_nul_or_trap::(id_trap)?; + + let (_pk, lagrange_comms) = setup(log_2_capacity as usize, ptau); + + let client = create_client(rpc, &parse_sk(sk)?).await?; + + let a = str_to_ethers_address(contract); + let semacaulk_contract = SemacaulkContract::new(a, client); + + // Get the index to insert to + let index: usize = semacaulk_contract + .get_current_index() + .call() + .await + .unwrap() + .as_u64() as usize; + + let mimc7 = init_mimc7::(); + let new_leaf = mimc7.multi_hash(&[id_nul, id_trap], Fr::zero()); + + // Construct the tree of commitments to the Lagrange bases + let tree = compute_lagrange_tree::(&lagrange_comms); + + let proof = tree.proof(index).unwrap(); + let flattened_proof = flatten_proof(&proof); + let l_i = lagrange_comms[index]; + let l_i_x = f_to_u256(l_i.x); + let l_i_y = f_to_u256(l_i.y); + + // Insert the leaf on chain + let result = semacaulk_contract + .insert_identity(f_to_u256(new_leaf), l_i_x, l_i_y, flattened_proof) + .send() + .await + .unwrap() + .await + .unwrap() + .expect("no receipt found"); + + let tx_hash = result.transaction_hash; + let event_index = result.logs[0].topics[1]; + println!("Transaction hash:\n{:?}", tx_hash); + println!("Identity index:\n{:?}", event_index); + + Ok(()) +} + +async fn deploy(rpc: &str, sk: &str, ptau: &str, log_2_capacity: u8) -> Result<(), Error> { + if !(10..=28).contains(&log_2_capacity) { + return Err(Error::InvalidLog2Capacity); + } + let client = create_client(rpc, &parse_sk(sk)?).await?; + + let (_pk, lagrange_comms) = setup(log_2_capacity as usize, ptau); + + let zero = compute_zero_leaf::(); + let acc = Accumulator::::new(zero, &lagrange_comms); + let empty_accumulator_x = f_to_u256::(acc.point.x); + let empty_accumulator_y = f_to_u256::(acc.point.y); + let tree = compute_lagrange_tree::(&lagrange_comms); + let root = tree.root(); + + // Deploy contract + let semacaulk_contract = + SemacaulkContract::deploy(client, (root, empty_accumulator_x, empty_accumulator_y)) + .unwrap() + .send() + .await + .unwrap(); + println!("{:?}", semacaulk_contract.address()); + + Ok(()) +} + +fn p_to_p(p: &ProofForSemacaulk) -> Proof { + let m = MultiopenProof { + q_1_opening: p.multiopen_proof.q_1_opening, + q_2_opening: p.multiopen_proof.q_2_opening, + q_3_opening: p.multiopen_proof.q_3_opening, + q_4_opening: p.multiopen_proof.q_4_opening, + f_cm: G1Point { + x: p.multiopen_proof.f_cm.x, + y: p.multiopen_proof.f_cm.y, + }, + final_poly_proof: G1Point { + x: p.multiopen_proof.final_poly_proof.x, + y: p.multiopen_proof.final_poly_proof.y, + }, + }; + + let o = Openings { + q_mimc: p.openings.q_mimc, + mimc_cts: p.openings.mimc_cts, + quotient: p.openings.quotient, + u_prime: p.openings.u_prime, + p_1: p.openings.p_1, + p_2: p.openings.p_2, + w_0_0: p.openings.w_0_0, + w_0_1: p.openings.w_0_1, + w_0_2: p.openings.w_0_2, + w_1_0: p.openings.w_1_0, + w_1_1: p.openings.w_1_1, + w_1_2: p.openings.w_1_2, + w_2_0: p.openings.w_2_0, + w_2_1: p.openings.w_2_1, + w_2_2: p.openings.w_2_2, + key_0: p.openings.key_0, + key_1: p.openings.key_1, + }; + + let c = Commitments { + w_0: G1Point { + x: p.commitments.w_0.x, + y: p.commitments.w_0.y, + }, + w_1: G1Point { + x: p.commitments.w_1.x, + y: p.commitments.w_1.y, + }, + w_2: G1Point { + x: p.commitments.w_2.x, + y: p.commitments.w_2.y, + }, + key: G1Point { + x: p.commitments.key.x, + y: p.commitments.key.y, + }, + mimc_cts: G1Point { + x: p.commitments.mimc_cts.x, + y: p.commitments.mimc_cts.y, + }, + quotient: G1Point { + x: p.commitments.quotient.x, + y: p.commitments.quotient.y, + }, + u_prime: G1Point { + x: p.commitments.u_prime.x, + y: p.commitments.u_prime.y, + }, + zi: G1Point { + x: p.commitments.zi.x, + y: p.commitments.zi.y, + }, + ci: G1Point { + x: p.commitments.ci.x, + y: p.commitments.ci.y, + }, + p_1: G1Point { + x: p.commitments.p_1.x, + y: p.commitments.p_1.y, + }, + p_2: G1Point { + x: p.commitments.p_2.x, + y: p.commitments.p_2.y, + }, + q_mimc: G1Point { + x: p.commitments.q_mimc.x, + y: p.commitments.q_mimc.y, + }, + h: G1Point { + x: p.commitments.h.x, + y: p.commitments.h.y, + }, + w: G2Point { + x_0: p.commitments.w.x_0, + x_1: p.commitments.w.x_1, + y_0: p.commitments.w.y_0, + y_1: p.commitments.w.y_1, + }, + }; + + Proof { + multiopen_proof: m, + commitments: c, + openings: o, + } +} + +#[test] +pub fn test_parse_id_nul_or_trap() { + let s = String::from("0x1"); + assert_eq!(parse_id_nul_or_trap::(&s).unwrap(), Fr::from(1)); + + let s = String::from("0x01"); + assert_eq!(parse_id_nul_or_trap::(&s).unwrap(), Fr::from(1)); + + let s = String::from("0x0000000000000000000000000000000000000000000000000000000000000001"); + assert_eq!(parse_id_nul_or_trap::(&s).unwrap(), Fr::from(1)); + + let s = String::from("0x0101"); + assert_eq!(parse_id_nul_or_trap::(&s).unwrap(), Fr::from(257)); + + let s = String::from("0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); + assert_eq!( + parse_id_nul_or_trap::(&s).unwrap_err(), + Error::InvalidIdNulOrTrap + ); +} diff --git a/src/contracts/Semacaulk.json b/src/contracts/Semacaulk.json new file mode 100644 index 0000000..d97d442 --- /dev/null +++ b/src/contracts/Semacaulk.json @@ -0,0 +1,6621 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_lagrangeTreeRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_accumulatorX", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_accumulatorY", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_identityCommitment", + "type": "uint256" + } + ], + "name": "InvalidIdentityCommitment", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidProof", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_nullifierHash", + "type": "uint256" + } + ], + "name": "NullifierHashAlreadySeen", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_generatedRoot", + "type": "bytes32" + } + ], + "name": "RootMismatch", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "_signalHash", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "_externalNullifier", + "type": "uint256" + } + ], + "name": "BroadcastSignal", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "_identityCommitment", + "type": "uint256" + } + ], + "name": "InsertIdentity", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_signal", + "type": "bytes" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "q1_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q2_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q3_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q4_opening", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "f_cm", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "final_poly_proof", + "type": "tuple" + } + ], + "internalType": "struct Types.MultiopenProof", + "name": "multiopenProof", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "q_mimc", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mimc_cts", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quotient", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "u_prime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "key_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "key_1", + "type": "uint256" + } + ], + "internalType": "struct Types.Openings", + "name": "openings", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "w0", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "w1", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "w2", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "key", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "mimc_cts", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "quotient", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "u_prime", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "zi", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "ci", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "p1", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "p2", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "q_mimc", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "h", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "x1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y1", + "type": "uint256" + } + ], + "internalType": "struct Types.G2Point", + "name": "w", + "type": "tuple" + } + ], + "internalType": "struct Types.Commitments", + "name": "commitments", + "type": "tuple" + } + ], + "internalType": "struct Types.Proof", + "name": "_proof", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_nullifierHash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_externalNullifier", + "type": "uint256" + } + ], + "name": "broadcastSignal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "_leaf", + "type": "bytes32" + }, + { + "internalType": "bytes32[]", + "name": "_proof", + "type": "bytes32[]" + } + ], + "name": "genRootFromPath", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getAccumulator", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCurrentIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "identityCommitmentHistory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_identityCommitment", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_lagrangeLeafX", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_lagrangeLeafY", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "_lagrangeMerkleProof", + "type": "bytes32[]" + } + ], + "name": "insertIdentity", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "lagrangeTreeRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "nullifierHashHistory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "q1_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q2_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q3_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q4_opening", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "f_cm", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "final_poly_proof", + "type": "tuple" + } + ], + "internalType": "struct Types.MultiopenProof", + "name": "multiopenProof", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "q_mimc", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mimc_cts", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quotient", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "u_prime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "key_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "key_1", + "type": "uint256" + } + ], + "internalType": "struct Types.Openings", + "name": "openings", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "w0", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "w1", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "w2", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "key", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "mimc_cts", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "quotient", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "u_prime", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "zi", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "ci", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "p1", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "p2", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "q_mimc", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "h", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "x1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y1", + "type": "uint256" + } + ], + "internalType": "struct Types.G2Point", + "name": "w", + "type": "tuple" + } + ], + "internalType": "struct Types.Commitments", + "name": "commitments", + "type": "tuple" + } + ], + "internalType": "struct Types.Proof", + "name": "proof", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "accumulator", + "type": "tuple" + }, + { + "internalType": "uint256[3]", + "name": "publicInputs", + "type": "uint256[3]" + } + ], + "name": "verify", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": { + "object": "0x6853656d616361756c6b60b81b60a052600960805260a9604052620000657f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f804050588f69e25f5fbecd1380a44a9ed58106da09f470b088355b0f7c671a27620000bd565b6004553480156200007557600080fd5b5060405162002ad038038062002ad08339810160408190526200009891620000e0565b600092909255604080518082019091528181526020018290526002556003556200010f565b600082620000db57634e487b7160e01b600052601260045260246000fd5b500690565b600080600060608486031215620000f657600080fd5b8351925060208401519150604084015190509250925092565b6129b1806200011f6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b3da592b11610066578063b3da592b1461010a578063c4cd55961461011d578063cec677b814610140578063f2524d9614610153578063ff40807b1461015c57600080fd5b80630d9005ae1461009857806326e738a2146100af5780637a6a061d146100c457806398ac1f81146100f7575b600080fd5b6001545b6040519081526020015b60405180910390f35b6100c26100bd36600461260e565b61019a565b005b6100e76100d23660046126c8565b60066020526000908152604090205460ff1681565b60405190151581526020016100a6565b6100c2610105366004612761565b61029a565b6100e76101183660046127bb565b610409565b6100e761012b3660046126c8565b60056020526000908152604090205460ff1681565b61009c61014e366004612862565b6108f0565b61009c60005481565b6040805180820182526000808252602091820152815180830183526002548082526003549183019182528351908152905191810191909152016100a6565b60008281526005602052604090205460ff16156101d157604051621d262360e11b8152600481018390526024015b60405180910390fd5b8351602085012060081c6101e361200d565b8281526020810184905260408101829052600061022e866102286040805180820182526000808252602091820152815180830190925260025482526003549082015290565b84610409565b90508061024e576040516309bde33960e01b815260040160405180910390fd5b600085815260056020526040808220805460ff1916600117905551859185917f8147c22f317f8c99f840af736ce6f9cb078c49c2378097fd42202a9efbbeed109190a350505050505050565b60008051602061295c8339815191528411806102b7575060045484145b156102d85760405163f2c27cc160e01b8152600481018590526024016101c8565b6001546040805160208082018790528183018690528251808303840181526060909201909252805191012060006103108383866108f0565b90506000548114610337576040516339c4520b60e11b8152600481018290526024016101c8565b60008051602061295c8339815191526000816103546001846128f4565b6004540990506000828061036a5761036a6128c8565b828b08604080518082019091528a8152602081018a9052909150600061039082846109a1565b60408051808201909152600254815260035460208201529091506103b49082610a4d565b8051600255602001516003556103cb886001612907565b6001556040518c9089907f8702906097e936d09eb559ef170474b37e9aa31ede997a4c1cc4ce8c8d9babf890600090a3505050505050505050505050565b805160009060008051602061295c83398151915290811161042957600080fd5b602083015160008051602061295c8339815191521161044757600080fd5b604083015160008051602061295c8339815191521161046557600080fd5b600061049d604080516060808201835281526000602080830182905282840182905283516104e0810190945280845283015290815290565b90506104e760405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6104ef61202b565b6104f98387610b07565b60408089018051518551805180850182528251602091909201818101929092529182015190840152815160600151865180518086018252825191018084019190915290820151908401528151810151865180518086018252825191018084019190915290820151908401529051820151855180518085018252825191018084019190915291015191015261058c83610b41565b82526105988389610b6d565b6105a183610b41565b506105ab83610b41565b6020838101919091526040808a0180516101a0015186518051608080820183528387015191909201808701919091528251818601526060808401519082015291840151910152516101800151855180518084018252825191018085019190915292015191015261061a83610b41565b60408301526106298389610c2a565b61063283610b41565b606083015261064083610b41565b6080830152610671838951608001519051805160408082018352835191909201602081810192909252920151910152565b61067a83610b41565b60a083015261068883610b41565b60c083015261069683610b41565b60e08301526106a361219a565b60408301517f16e73dfdad310991df5ce19ce85943e01dcb5564b6f24c799d0e470cba9d1811907f1332cb377d53b9c681afa4dc09f66bc37e3f2f33deb33d9b40bd245c971b244790878184099250878183099150508460400151600003610717576107106001886128f4565b835261072b565b6001856040015161072891906128f4565b83525b604085015160a086015160208d015160600151898181038308905089838b0383088a868c0384088b868d03850893508b878d0386088c878e03870895508c878e038908826103e08c0152836104008c0152856104208c01528460208b01528360408b01528260608b01528560808b01528160a08b01528660c08b01528060e08b01525050505050505050506107bf81610df0565b905060008061080c8560400151846000600881106107df576107df6128b2565b602002015160077f300385d5fb6f3ce964dfa52b147e55ac6de38077e8c5fdb0215a31a8c8200001610fa6565b915091508251606085015260208301516080850152604083015160a0850152606083015160c0850152608083015160e085015260a083015161010085015260c083015161012085015260e0830151610140850152816101608501528061018085015261087e8b8587600001518c611018565b6108ca5760405162461bcd60e51b815260206004820152601b60248201527f56657269666965723a206761746520636865636b206661696c6564000000000060448201526064016101c8565b50506108d789838561120f565b6108e38983858b611b00565b9998505050505050505050565b60008083815b84518110156109975761090a60028861291a565b925061091760028861292e565b9650826000036109555761094e82868381518110610937576109376128b2565b602002602001015160009182526020526040902090565b9150610985565b61098285828151811061096a5761096a6128b2565b60200260200101518360009182526020526040902090565b91505b8061098f81612942565b9150506108f6565b5095945050505050565b60408051808201909152600080825260208201526109bd61200d565b8351815260208085015181830152604080830185905280518082018252600080825292810183905291908260608560076107d05a03fa90508080610a0057600080fd5b5080610a425760405162461bcd60e51b815260206004820152601160248201527010938c8d4d0e881b5d5b0819985a5b1959607a1b60448201526064016101c8565b509150505b92915050565b604080518082019091526000808252602082015260408051808201909152600080825260208201526000610a7f6121b9565b855181526020808701518183015285516040808401919091529086015160608301528360808360066107d05a03fa91508180610aba57600080fd5b5081610afd5760405162461bcd60e51b815260206004820152601260248201527110938c8d4d0e881c1b1d5cc819985a5b195960721b60448201526064016101c8565b5090949350505050565b610b25828260005b6020020151905180516020808201835291010152565b610b3182826001610b0f565b610b3d82826002610b0f565b5050565b80518051602080830191822093810184905290915281905260008051602061295c833981519152900690565b610b9c82826040015160a001519051805160408082018352835191909201602081810192909252920151910152565b610bcb82826040015160e001519051805160408082018352835191909201602081810192909252920151910152565b610bfb82826040015161010001519051805160408082018352835191909201602081810192909252920151910152565b610b3d82826040015160c001519051805160408082018352835191909201602081810192909252920151910152565b610c4882826020015160c00151905180516020808201835291010152565b610c6682826020015160e00151905180516020808201835291010152565b610c858282602001516101000151905180516020808201835291010152565b610ca48282602001516101200151905180516020808201835291010152565b610cc38282602001516101400151905180516020808201835291010152565b610ce28282602001516101600151905180516020808201835291010152565b610d018282602001516101800151905180516020808201835291010152565b610d208282602001516101a00151905180516020808201835291010152565b610d3f8282602001516101c00151905180516020808201835291010152565b610d5e8282602001516101e00151905180516020808201835291010152565b610d7d8282602001516102000151905180516020808201835291010152565b6020908101805151835180518085018252018301528051820151835180518085018252018301528051604001518351805180850182520183015280516060015183518051808501825201830152805160800151835180518085018252018301525160a00151915180518083018252010152565b610df861219a565b610e0061219a565b600060008051602061295c83398151915290506040518451602086015183818309835250600190505b6008811015610e595760208102602081018701516020820384015185818309928501929092525050600101610e29565b5060c081015180610e6957600080fd5b50602060e08201526020610100820152602061012082015260c081015161014082015260028203610160820152816101808201526020610280820160c060e0840160055afa8080610eb957600080fd5b505060005b6008811015610ef9578060070360208102870151602082026101a00191508184015185818309928501601f1901929092525050600101610ebe565b508185516101c0830151096102a082015260025b6008811015610f4a5760208181028381016101a0015160011984019092028401519091908581830992850161028001929092525050600101610f0d565b506101a081015183526102a081015160208401526102c081015160408401526102e08101516060840152610300810151608084015261032081015160a084015261034081015160c0840152610360015160e08301525092915050565b600060008051602061295c83398151915280808715610fe05787925060005b86811015610fdb57828485099350600101610fc5565b508790505b610feb6001846128f4565b925081876001830309806001811461100257600080fd5b5050818783878609099350505094509492505050565b600060008051602061295c833981519152818061104d565b600082828309838182098481830991505083838209949350505050565b856020890151610180890151604082015186818309955050508051602082015160c083015160e08401518883830892506110878984611030565b925088818a038408925050508682820990508094505050805160208201516101208301516101408401516101e085015189848b838608089350506110cb8984611030565b925088818a038408925050508682820990508687828609860894505050848883099150805160208201516101e08301516101808401516101a085015189848b85850808935061111a8a85611030565b935089818b0385089350505050868282099050868782860986089450505084888309915080516101e0820151610200830151878189038308905087838209905087888287098708955050868a8509935060c083015191506101008301516101608c015188898386088a0384089350888185099350888985880988089650888c8709955061018085015193506101c0850151915060208b01518b518a85860894508a84870893508a85850893508a848c03830894508a83860994508a8b868a098a0898508a8e890997508a818c0387089550505088818509935050505085868285098508949094149a9950505050505050505050565b600060008051602061295c833981519152905060006060830151608084015160c0850151848384098584820986858209826101a08b0152816101c08b0152806101e08b015287858609888682096102008c01919091526102208b01528784800988858209898682099550816102408d0152806102608d01525050836102808b015260408b015193506000806040516101008751015181526101208751015160208201528860408201526040600060608360076107d05a03fa995060005160205160405192506101408951015183526101608951015160208401528760408401526040600060608560076107d05a03fa8c169b5060405192508183528060208401525050600051604082015260205160608201526040600060808360066107d05a03fa8a1699506000519250602051915060405190506101808751015181526101a08751015160208201528460408201526040600060608360076107d05a03fa8a1699506040519050828152816020820152600051604082015260205160608201526040600060808360066107d05a03fa8a1699506000519250602051915060405190506102808751015181526102a08751015160208201528360408201526040600060608360076107d05a03fa8a1699506040519050828152816020820152600051604082015260205160608201526040600060808360066107d05a03fa8a1699506000519250602051915060405190508281528160208201526102c08751015160408201526102e08751015160608201526040600060808360066107d05a03fa8a1699505050506000516102a08b01515260205160206102a08c0151015260208b015160208101516040820151606083015160a08401518c8b850993508c8d848a09850893508c8d838909850893508c8d8288098508935050505089825182089050806103408d015250505050600080604051604085510151815260608551015160208201528660408201526040600060608360076107d05a03fa88169750600051925060205191506040519050608085510151815260a08551015160208201528360408201526040600060608360076107d05a03fa881697506040519050828152816020820152600051604082015260205160608201526040600060808360066107d05a03fa88169750604051905060005181526020516020820152845151604082015260208551015160608201526040600060808360066107d05a03fa881697505050506000516102c08901515260205160206102c08a0151015260208901516115d8565b60008685840987878609888183089150508781840898975050505050505050565b60c08101516101208201516101808301516115f78a868a8486886115b7565b6102e08d015250505060e08101516101408201516101a083015161161f8a868a8486886115b7565b6103008d01525050506101008101516101608201516101c0909201519161164a8985898685876115b7565b6103208c015250505050602088015188518051608092830151928a015192955090918781818881038508096103608b015250506020015161034088015160a08901519194509086818184810388080994505050826103808801526020880151925087516040810151905060a088015160c08901516103e08a01516101008b01518981830991506104008c0151818b0391508a8282099050816104408e01526101e0890151915061020089015198508a8b828b098c85850908985050505087818309915050806104608a0152868188878a038508096103a08a0152505087516103e08801516104208901516101008a01516101208b01519396509192909190888385098983820990508982820990506104008c015192506104408c015191506101408c01518a85850994508a83860994508a8186099450506101208c01518a0391506101408c01518a038a86850995508a83870995508a8187099550506102e08c015192506103008c015191506103208c01518a82850993508a8b868509850893508a8b878309850893505050506104608a0151925060e08a0151915087828409925060608601519550878389838b038908096103c08b015250506040805183516102400151815283516102600151602082015260c08901518183015260009550859250908260608360076107d05a03fa95506000519450602051915060405190506102a089015151815260206102a08a01510151602082015261024089015160408201526040600060608360076107d05a03fa95506040519050600051815260205160208201528460408201528160608201526040600060808360066107d05a03fa8616955060005194506020519150604051905060c083510151815260e083510151602082015261026089015160408201526040600060608360076107d05a03fa95506040519050600051815260205160208201528460408201528160608201526040600060808360066107d05a03fa861695506000519450602051915060405190506102c089015151815260206102c08a01510151602082015261028089015160408201526040600060608360076107d05a03fa95506040519050600051815260205160208201528460408201528160608201526040600060808360066107d05a03fa86169550600051945060205191508951604051915060808101515182526020608082015101516020830152508460408201528160608201526040600060808360066107d05a03fa8616955050506000516104a08801515260205160206104a089015101525061020086015191506102208601516103608701518586846103808b015109820890508586856103a08b015109820890508586836103c08b015109820890508061048089015288519350858660c08901518651098208915050848561024089015160208601510982089050848561026089015160408601510982089050848561028089015160608601510982086104c0880152508280611a9257600080fd5b50505080611af95760405162461bcd60e51b815260206004820152602e60248201527f56657269666965723a206661696c656420746f20636f6d707574652066696e6160448201526d1b081c1bdb1e481bdc88195d985b60921b60648201526084016101c8565b5050505050565b600080611b1e83611b1988604001516101000151611d7b565b610a4d565b90506000611bd2611bc860405180604001604052807f17a40bf6b2a82570fed3bedb71e3ddf36680b431ffb3641fec94f5478d34dccc81526020017f050852202323c504aab1ae596553781b3dc87cc6793d731d054c7d751e82af0a815250611b1960408051808201825260008082526020918201528151808301909252600182527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd459082015290565b86602001516109a1565b90506000611c4c611c42611c37611bf58b6000015160a001518a60a001516109a1565b611b19611c32611c27604080518082018252600080825260209182015281518083019092526001825260029082015290565b8d6104c001516109a1565b611d7b565b896104a00151610a4d565b8760e001516109a1565b90506000611c63611c5d8585610a4d565b83610a4d565b90506000611c6f611e1b565b90506000611c848b6040015160e00151611d7b565b905060008b604001516101a0015190506000611cb4611caa8e6000015160a00151611d7b565b8c60e001516109a1565b9050600060405180608001604052807f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d81526020017f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e81526020017f1970ea81dd6992adfbc571effb03503adbbb6a857f578403c6c40e22d65b3c0281526020017f054793348f12c0cf5622c340573cb277586319de359ab9389778f689786b1e488152509050611d69868686868686611eec565b9e9d5050505050505050505050505050565b60408051808201909152600080825260208201528151158015611da057506020820151155b15611dbe575050604080518082019091526000808252602082015290565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479050604051806040016040528084600001518152602001828560200151611e08919061291a565b611e1290846128f4565b90529392505050565b611e466040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180608001604052807f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa815250905090565b60008060006040518951815260208a01516020820152885160408201526020890151606082015260408901516080820152606089015160a0820152875160c0820152602088015160e08201528651610100820152602087015161012082015260408701516101408201526060870151610160820152855161018082015260208601516101a082015284516101c082015260208501516101e082015260408501516102008201526060850151610220820152602060006102408360085afa915050600051915080611ffe5760405162461bcd60e51b815260206004820152601c60248201527f424e3235343a2070616972696e6720636865636b206661696c6564210000000060448201526064016101c8565b50600114979650505050505050565b60405180606001604052806003906020820280368337509192915050565b604051806104e001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016120e7604051806040016040528060008152602001600081525090565b8152602001612109604051806040016040528060008152602001600081525090565b8152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200161218d604051806040016040528060008152602001600081525090565b8152602001600081525090565b6040518061010001604052806008906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051610220810167ffffffffffffffff81118282101715612211576122116121d7565b60405290565b6040516101c0810167ffffffffffffffff81118282101715612211576122116121d7565b6040516060810167ffffffffffffffff81118282101715612211576122116121d7565b60405160c0810167ffffffffffffffff81118282101715612211576122116121d7565b604051601f8201601f1916810167ffffffffffffffff811182821017156122aa576122aa6121d7565b604052919050565b6000604082840312156122c457600080fd5b6040516040810181811067ffffffffffffffff821117156122e7576122e76121d7565b604052823581526020928301359281019290925250919050565b6000610220828403121561231457600080fd5b61231c6121ed565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c0808401359082015260e08084013590820152610100808401359082015261012080840135908201526101408084013590820152610160808401359082015261018080840135908201526101a080840135908201526101c080840135908201526101e08084013590820152610200928301359281019290925250919050565b6000608082840312156123e457600080fd5b6040516080810181811067ffffffffffffffff82111715612407576124076121d7565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b60006103c0828403121561244b57600080fd5b612453612217565b905061245f83836122b2565b815261246e83604084016122b2565b602082015261248083608084016122b2565b60408201526124928360c084016122b2565b60608201526101006124a6848285016122b2565b60808301526101406124ba858286016122b2565b60a08401526101806124ce868287016122b2565b60c08501526124e1866101c087016122b2565b60e08501526124f48661020087016122b2565b838501526125068661024087016122b2565b61012085015261251a8661028087016122b2565b8285015261252c866102c087016122b2565b6101608501526125408661030087016122b2565b818501525050506125558361034084016123d2565b6101a082015292915050565b60008183036106e081121561257557600080fd5b61257d61223b565b91506101008082121561258f57600080fd5b61259761225e565b9150833582526020840135602083015260408401356040830152606084013560608301526125c885608086016122b2565b60808301526125da8560c086016122b2565b60a08301528183526125ee85828601612301565b60208401525050612603836103208401612438565b604082015292915050565b600080600080610740858703121561262557600080fd5b843567ffffffffffffffff8082111561263d57600080fd5b818701915087601f83011261265157600080fd5b8135602082821115612665576126656121d7565b612677601f8301601f19168201612281565b9250818352898183860101111561268d57600080fd5b818185018285013760008183850101528297506126ac8a828b01612561565b979a979950505050610700860135956107200135949350505050565b6000602082840312156126da57600080fd5b5035919050565b600082601f8301126126f257600080fd5b8135602067ffffffffffffffff82111561270e5761270e6121d7565b8160051b61271d828201612281565b928352848101820192828101908785111561273757600080fd5b83870192505b848310156127565782358252918301919083019061273d565b979650505050505050565b6000806000806080858703121561277757600080fd5b843593506020850135925060408501359150606085013567ffffffffffffffff8111156127a357600080fd5b6127af878288016126e1565b91505092959194509250565b60008060006107808085870312156127d257600080fd5b6127dc8686612561565b93506127ec866106e087016122b2565b92508561073f8601126127fe57600080fd5b6040516060810181811067ffffffffffffffff82111715612821576128216121d7565b60405290850190808783111561283657600080fd5b61072087015b8381101561285457803582526020918201910161283c565b505080925050509250925092565b60008060006060848603121561287757600080fd5b8335925060208401359150604084013567ffffffffffffffff81111561289c57600080fd5b6128a8868287016126e1565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610a4757610a476128de565b80820180821115610a4757610a476128de565b600082612929576129296128c8565b500690565b60008261293d5761293d6128c8565b500490565b600060018201612954576129546128de565b506001019056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212201617c57887a44e013dbcaa0ad73f8202b37272a05a4a226d3e1323748c27a0eb64736f6c63430008110033", + "sourceMap": ":::-:0;;;1146:29:20;216:24:28;1146:29:20;318:4753;1146:29;256:11:28;318:4753:20;1146:29;1128:69;282:77:17;1136:40:20;1128:69;:::i;:::-;1083:114;;1744:319;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1916:16;:36;;;;2013:43;;;;;;;;;;;;;;;;;1999:11;:57;;;318:4753;;278:209:28;310:1;336;326:132;;380:10;375:3;371:20;368:1;361:31;415:4;412:1;405:15;443:4;440:1;433:15;326:132;-1:-1:-1;472:9:28;;278:209::o;492:306::-;580:6;588;596;649:2;637:9;628:7;624:23;620:32;617:52;;;665:1;662;655:12;617:52;694:9;688:16;678:26;;744:2;733:9;729:18;723:25;713:35;;788:2;777:9;773:18;767:25;757:35;;492:306;;;;;:::o;:::-;318:4753:20;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063b3da592b11610066578063b3da592b1461010a578063c4cd55961461011d578063cec677b814610140578063f2524d9614610153578063ff40807b1461015c57600080fd5b80630d9005ae1461009857806326e738a2146100af5780637a6a061d146100c457806398ac1f81146100f7575b600080fd5b6001545b6040519081526020015b60405180910390f35b6100c26100bd36600461260e565b61019a565b005b6100e76100d23660046126c8565b60066020526000908152604090205460ff1681565b60405190151581526020016100a6565b6100c2610105366004612761565b61029a565b6100e76101183660046127bb565b610409565b6100e761012b3660046126c8565b60056020526000908152604090205460ff1681565b61009c61014e366004612862565b6108f0565b61009c60005481565b6040805180820182526000808252602091820152815180830183526002548082526003549183019182528351908152905191810191909152016100a6565b60008281526005602052604090205460ff16156101d157604051621d262360e11b8152600481018390526024015b60405180910390fd5b8351602085012060081c6101e361200d565b8281526020810184905260408101829052600061022e866102286040805180820182526000808252602091820152815180830190925260025482526003549082015290565b84610409565b90508061024e576040516309bde33960e01b815260040160405180910390fd5b600085815260056020526040808220805460ff1916600117905551859185917f8147c22f317f8c99f840af736ce6f9cb078c49c2378097fd42202a9efbbeed109190a350505050505050565b60008051602061295c8339815191528411806102b7575060045484145b156102d85760405163f2c27cc160e01b8152600481018590526024016101c8565b6001546040805160208082018790528183018690528251808303840181526060909201909252805191012060006103108383866108f0565b90506000548114610337576040516339c4520b60e11b8152600481018290526024016101c8565b60008051602061295c8339815191526000816103546001846128f4565b6004540990506000828061036a5761036a6128c8565b828b08604080518082019091528a8152602081018a9052909150600061039082846109a1565b60408051808201909152600254815260035460208201529091506103b49082610a4d565b8051600255602001516003556103cb886001612907565b6001556040518c9089907f8702906097e936d09eb559ef170474b37e9aa31ede997a4c1cc4ce8c8d9babf890600090a3505050505050505050505050565b805160009060008051602061295c83398151915290811161042957600080fd5b602083015160008051602061295c8339815191521161044757600080fd5b604083015160008051602061295c8339815191521161046557600080fd5b600061049d604080516060808201835281526000602080830182905282840182905283516104e0810190945280845283015290815290565b90506104e760405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6104ef61202b565b6104f98387610b07565b60408089018051518551805180850182528251602091909201818101929092529182015190840152815160600151865180518086018252825191018084019190915290820151908401528151810151865180518086018252825191018084019190915290820151908401529051820151855180518085018252825191018084019190915291015191015261058c83610b41565b82526105988389610b6d565b6105a183610b41565b506105ab83610b41565b6020838101919091526040808a0180516101a0015186518051608080820183528387015191909201808701919091528251818601526060808401519082015291840151910152516101800151855180518084018252825191018085019190915292015191015261061a83610b41565b60408301526106298389610c2a565b61063283610b41565b606083015261064083610b41565b6080830152610671838951608001519051805160408082018352835191909201602081810192909252920151910152565b61067a83610b41565b60a083015261068883610b41565b60c083015261069683610b41565b60e08301526106a361219a565b60408301517f16e73dfdad310991df5ce19ce85943e01dcb5564b6f24c799d0e470cba9d1811907f1332cb377d53b9c681afa4dc09f66bc37e3f2f33deb33d9b40bd245c971b244790878184099250878183099150508460400151600003610717576107106001886128f4565b835261072b565b6001856040015161072891906128f4565b83525b604085015160a086015160208d015160600151898181038308905089838b0383088a868c0384088b868d03850893508b878d0386088c878e03870895508c878e038908826103e08c0152836104008c0152856104208c01528460208b01528360408b01528260608b01528560808b01528160a08b01528660c08b01528060e08b01525050505050505050506107bf81610df0565b905060008061080c8560400151846000600881106107df576107df6128b2565b602002015160077f300385d5fb6f3ce964dfa52b147e55ac6de38077e8c5fdb0215a31a8c8200001610fa6565b915091508251606085015260208301516080850152604083015160a0850152606083015160c0850152608083015160e085015260a083015161010085015260c083015161012085015260e0830151610140850152816101608501528061018085015261087e8b8587600001518c611018565b6108ca5760405162461bcd60e51b815260206004820152601b60248201527f56657269666965723a206761746520636865636b206661696c6564000000000060448201526064016101c8565b50506108d789838561120f565b6108e38983858b611b00565b9998505050505050505050565b60008083815b84518110156109975761090a60028861291a565b925061091760028861292e565b9650826000036109555761094e82868381518110610937576109376128b2565b602002602001015160009182526020526040902090565b9150610985565b61098285828151811061096a5761096a6128b2565b60200260200101518360009182526020526040902090565b91505b8061098f81612942565b9150506108f6565b5095945050505050565b60408051808201909152600080825260208201526109bd61200d565b8351815260208085015181830152604080830185905280518082018252600080825292810183905291908260608560076107d05a03fa90508080610a0057600080fd5b5080610a425760405162461bcd60e51b815260206004820152601160248201527010938c8d4d0e881b5d5b0819985a5b1959607a1b60448201526064016101c8565b509150505b92915050565b604080518082019091526000808252602082015260408051808201909152600080825260208201526000610a7f6121b9565b855181526020808701518183015285516040808401919091529086015160608301528360808360066107d05a03fa91508180610aba57600080fd5b5081610afd5760405162461bcd60e51b815260206004820152601260248201527110938c8d4d0e881c1b1d5cc819985a5b195960721b60448201526064016101c8565b5090949350505050565b610b25828260005b6020020151905180516020808201835291010152565b610b3182826001610b0f565b610b3d82826002610b0f565b5050565b80518051602080830191822093810184905290915281905260008051602061295c833981519152900690565b610b9c82826040015160a001519051805160408082018352835191909201602081810192909252920151910152565b610bcb82826040015160e001519051805160408082018352835191909201602081810192909252920151910152565b610bfb82826040015161010001519051805160408082018352835191909201602081810192909252920151910152565b610b3d82826040015160c001519051805160408082018352835191909201602081810192909252920151910152565b610c4882826020015160c00151905180516020808201835291010152565b610c6682826020015160e00151905180516020808201835291010152565b610c858282602001516101000151905180516020808201835291010152565b610ca48282602001516101200151905180516020808201835291010152565b610cc38282602001516101400151905180516020808201835291010152565b610ce28282602001516101600151905180516020808201835291010152565b610d018282602001516101800151905180516020808201835291010152565b610d208282602001516101a00151905180516020808201835291010152565b610d3f8282602001516101c00151905180516020808201835291010152565b610d5e8282602001516101e00151905180516020808201835291010152565b610d7d8282602001516102000151905180516020808201835291010152565b6020908101805151835180518085018252018301528051820151835180518085018252018301528051604001518351805180850182520183015280516060015183518051808501825201830152805160800151835180518085018252018301525160a00151915180518083018252010152565b610df861219a565b610e0061219a565b600060008051602061295c83398151915290506040518451602086015183818309835250600190505b6008811015610e595760208102602081018701516020820384015185818309928501929092525050600101610e29565b5060c081015180610e6957600080fd5b50602060e08201526020610100820152602061012082015260c081015161014082015260028203610160820152816101808201526020610280820160c060e0840160055afa8080610eb957600080fd5b505060005b6008811015610ef9578060070360208102870151602082026101a00191508184015185818309928501601f1901929092525050600101610ebe565b508185516101c0830151096102a082015260025b6008811015610f4a5760208181028381016101a0015160011984019092028401519091908581830992850161028001929092525050600101610f0d565b506101a081015183526102a081015160208401526102c081015160408401526102e08101516060840152610300810151608084015261032081015160a084015261034081015160c0840152610360015160e08301525092915050565b600060008051602061295c83398151915280808715610fe05787925060005b86811015610fdb57828485099350600101610fc5565b508790505b610feb6001846128f4565b925081876001830309806001811461100257600080fd5b5050818783878609099350505094509492505050565b600060008051602061295c833981519152818061104d565b600082828309838182098481830991505083838209949350505050565b856020890151610180890151604082015186818309955050508051602082015160c083015160e08401518883830892506110878984611030565b925088818a038408925050508682820990508094505050805160208201516101208301516101408401516101e085015189848b838608089350506110cb8984611030565b925088818a038408925050508682820990508687828609860894505050848883099150805160208201516101e08301516101808401516101a085015189848b85850808935061111a8a85611030565b935089818b0385089350505050868282099050868782860986089450505084888309915080516101e0820151610200830151878189038308905087838209905087888287098708955050868a8509935060c083015191506101008301516101608c015188898386088a0384089350888185099350888985880988089650888c8709955061018085015193506101c0850151915060208b01518b518a85860894508a84870893508a85850893508a848c03830894508a83860994508a8b868a098a0898508a8e890997508a818c0387089550505088818509935050505085868285098508949094149a9950505050505050505050565b600060008051602061295c833981519152905060006060830151608084015160c0850151848384098584820986858209826101a08b0152816101c08b0152806101e08b015287858609888682096102008c01919091526102208b01528784800988858209898682099550816102408d0152806102608d01525050836102808b015260408b015193506000806040516101008751015181526101208751015160208201528860408201526040600060608360076107d05a03fa995060005160205160405192506101408951015183526101608951015160208401528760408401526040600060608560076107d05a03fa8c169b5060405192508183528060208401525050600051604082015260205160608201526040600060808360066107d05a03fa8a1699506000519250602051915060405190506101808751015181526101a08751015160208201528460408201526040600060608360076107d05a03fa8a1699506040519050828152816020820152600051604082015260205160608201526040600060808360066107d05a03fa8a1699506000519250602051915060405190506102808751015181526102a08751015160208201528360408201526040600060608360076107d05a03fa8a1699506040519050828152816020820152600051604082015260205160608201526040600060808360066107d05a03fa8a1699506000519250602051915060405190508281528160208201526102c08751015160408201526102e08751015160608201526040600060808360066107d05a03fa8a1699505050506000516102a08b01515260205160206102a08c0151015260208b015160208101516040820151606083015160a08401518c8b850993508c8d848a09850893508c8d838909850893508c8d8288098508935050505089825182089050806103408d015250505050600080604051604085510151815260608551015160208201528660408201526040600060608360076107d05a03fa88169750600051925060205191506040519050608085510151815260a08551015160208201528360408201526040600060608360076107d05a03fa881697506040519050828152816020820152600051604082015260205160608201526040600060808360066107d05a03fa88169750604051905060005181526020516020820152845151604082015260208551015160608201526040600060808360066107d05a03fa881697505050506000516102c08901515260205160206102c08a0151015260208901516115d8565b60008685840987878609888183089150508781840898975050505050505050565b60c08101516101208201516101808301516115f78a868a8486886115b7565b6102e08d015250505060e08101516101408201516101a083015161161f8a868a8486886115b7565b6103008d01525050506101008101516101608201516101c0909201519161164a8985898685876115b7565b6103208c015250505050602088015188518051608092830151928a015192955090918781818881038508096103608b015250506020015161034088015160a08901519194509086818184810388080994505050826103808801526020880151925087516040810151905060a088015160c08901516103e08a01516101008b01518981830991506104008c0151818b0391508a8282099050816104408e01526101e0890151915061020089015198508a8b828b098c85850908985050505087818309915050806104608a0152868188878a038508096103a08a0152505087516103e08801516104208901516101008a01516101208b01519396509192909190888385098983820990508982820990506104008c015192506104408c015191506101408c01518a85850994508a83860994508a8186099450506101208c01518a0391506101408c01518a038a86850995508a83870995508a8187099550506102e08c015192506103008c015191506103208c01518a82850993508a8b868509850893508a8b878309850893505050506104608a0151925060e08a0151915087828409925060608601519550878389838b038908096103c08b015250506040805183516102400151815283516102600151602082015260c08901518183015260009550859250908260608360076107d05a03fa95506000519450602051915060405190506102a089015151815260206102a08a01510151602082015261024089015160408201526040600060608360076107d05a03fa95506040519050600051815260205160208201528460408201528160608201526040600060808360066107d05a03fa8616955060005194506020519150604051905060c083510151815260e083510151602082015261026089015160408201526040600060608360076107d05a03fa95506040519050600051815260205160208201528460408201528160608201526040600060808360066107d05a03fa861695506000519450602051915060405190506102c089015151815260206102c08a01510151602082015261028089015160408201526040600060608360076107d05a03fa95506040519050600051815260205160208201528460408201528160608201526040600060808360066107d05a03fa86169550600051945060205191508951604051915060808101515182526020608082015101516020830152508460408201528160608201526040600060808360066107d05a03fa8616955050506000516104a08801515260205160206104a089015101525061020086015191506102208601516103608701518586846103808b015109820890508586856103a08b015109820890508586836103c08b015109820890508061048089015288519350858660c08901518651098208915050848561024089015160208601510982089050848561026089015160408601510982089050848561028089015160608601510982086104c0880152508280611a9257600080fd5b50505080611af95760405162461bcd60e51b815260206004820152602e60248201527f56657269666965723a206661696c656420746f20636f6d707574652066696e6160448201526d1b081c1bdb1e481bdc88195d985b60921b60648201526084016101c8565b5050505050565b600080611b1e83611b1988604001516101000151611d7b565b610a4d565b90506000611bd2611bc860405180604001604052807f17a40bf6b2a82570fed3bedb71e3ddf36680b431ffb3641fec94f5478d34dccc81526020017f050852202323c504aab1ae596553781b3dc87cc6793d731d054c7d751e82af0a815250611b1960408051808201825260008082526020918201528151808301909252600182527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd459082015290565b86602001516109a1565b90506000611c4c611c42611c37611bf58b6000015160a001518a60a001516109a1565b611b19611c32611c27604080518082018252600080825260209182015281518083019092526001825260029082015290565b8d6104c001516109a1565b611d7b565b896104a00151610a4d565b8760e001516109a1565b90506000611c63611c5d8585610a4d565b83610a4d565b90506000611c6f611e1b565b90506000611c848b6040015160e00151611d7b565b905060008b604001516101a0015190506000611cb4611caa8e6000015160a00151611d7b565b8c60e001516109a1565b9050600060405180608001604052807f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d81526020017f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e81526020017f1970ea81dd6992adfbc571effb03503adbbb6a857f578403c6c40e22d65b3c0281526020017f054793348f12c0cf5622c340573cb277586319de359ab9389778f689786b1e488152509050611d69868686868686611eec565b9e9d5050505050505050505050505050565b60408051808201909152600080825260208201528151158015611da057506020820151155b15611dbe575050604080518082019091526000808252602082015290565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479050604051806040016040528084600001518152602001828560200151611e08919061291a565b611e1290846128f4565b90529392505050565b611e466040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180608001604052807f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa815250905090565b60008060006040518951815260208a01516020820152885160408201526020890151606082015260408901516080820152606089015160a0820152875160c0820152602088015160e08201528651610100820152602087015161012082015260408701516101408201526060870151610160820152855161018082015260208601516101a082015284516101c082015260208501516101e082015260408501516102008201526060850151610220820152602060006102408360085afa915050600051915080611ffe5760405162461bcd60e51b815260206004820152601c60248201527f424e3235343a2070616972696e6720636865636b206661696c6564210000000060448201526064016101c8565b50600114979650505050505050565b60405180606001604052806003906020820280368337509192915050565b604051806104e001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016120e7604051806040016040528060008152602001600081525090565b8152602001612109604051806040016040528060008152602001600081525090565b8152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200161218d604051806040016040528060008152602001600081525090565b8152602001600081525090565b6040518061010001604052806008906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051610220810167ffffffffffffffff81118282101715612211576122116121d7565b60405290565b6040516101c0810167ffffffffffffffff81118282101715612211576122116121d7565b6040516060810167ffffffffffffffff81118282101715612211576122116121d7565b60405160c0810167ffffffffffffffff81118282101715612211576122116121d7565b604051601f8201601f1916810167ffffffffffffffff811182821017156122aa576122aa6121d7565b604052919050565b6000604082840312156122c457600080fd5b6040516040810181811067ffffffffffffffff821117156122e7576122e76121d7565b604052823581526020928301359281019290925250919050565b6000610220828403121561231457600080fd5b61231c6121ed565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c0808401359082015260e08084013590820152610100808401359082015261012080840135908201526101408084013590820152610160808401359082015261018080840135908201526101a080840135908201526101c080840135908201526101e08084013590820152610200928301359281019290925250919050565b6000608082840312156123e457600080fd5b6040516080810181811067ffffffffffffffff82111715612407576124076121d7565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b60006103c0828403121561244b57600080fd5b612453612217565b905061245f83836122b2565b815261246e83604084016122b2565b602082015261248083608084016122b2565b60408201526124928360c084016122b2565b60608201526101006124a6848285016122b2565b60808301526101406124ba858286016122b2565b60a08401526101806124ce868287016122b2565b60c08501526124e1866101c087016122b2565b60e08501526124f48661020087016122b2565b838501526125068661024087016122b2565b61012085015261251a8661028087016122b2565b8285015261252c866102c087016122b2565b6101608501526125408661030087016122b2565b818501525050506125558361034084016123d2565b6101a082015292915050565b60008183036106e081121561257557600080fd5b61257d61223b565b91506101008082121561258f57600080fd5b61259761225e565b9150833582526020840135602083015260408401356040830152606084013560608301526125c885608086016122b2565b60808301526125da8560c086016122b2565b60a08301528183526125ee85828601612301565b60208401525050612603836103208401612438565b604082015292915050565b600080600080610740858703121561262557600080fd5b843567ffffffffffffffff8082111561263d57600080fd5b818701915087601f83011261265157600080fd5b8135602082821115612665576126656121d7565b612677601f8301601f19168201612281565b9250818352898183860101111561268d57600080fd5b818185018285013760008183850101528297506126ac8a828b01612561565b979a979950505050610700860135956107200135949350505050565b6000602082840312156126da57600080fd5b5035919050565b600082601f8301126126f257600080fd5b8135602067ffffffffffffffff82111561270e5761270e6121d7565b8160051b61271d828201612281565b928352848101820192828101908785111561273757600080fd5b83870192505b848310156127565782358252918301919083019061273d565b979650505050505050565b6000806000806080858703121561277757600080fd5b843593506020850135925060408501359150606085013567ffffffffffffffff8111156127a357600080fd5b6127af878288016126e1565b91505092959194509250565b60008060006107808085870312156127d257600080fd5b6127dc8686612561565b93506127ec866106e087016122b2565b92508561073f8601126127fe57600080fd5b6040516060810181811067ffffffffffffffff82111715612821576128216121d7565b60405290850190808783111561283657600080fd5b61072087015b8381101561285457803582526020918201910161283c565b505080925050509250925092565b60008060006060848603121561287757600080fd5b8335925060208401359150604084013567ffffffffffffffff81111561289c57600080fd5b6128a8868287016126e1565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610a4757610a476128de565b80820180821115610a4757610a476128de565b600082612929576129296128c8565b500690565b60008261293d5761293d6128c8565b500490565b600060018201612954576129546128de565b506001019056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212201617c57887a44e013dbcaa0ad73f8202b37272a05a4a226d3e1323748c27a0eb64736f6c63430008110033", + "sourceMap": "318:4753:20:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4866:93;4940:12;;4866:93;;;160:25:28;;;148:2;133:18;4866:93:20;;;;;;;;3565:976;;;;;;:::i;:::-;;:::i;:::-;;1263:58;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7944:14:28;;7937:22;7919:41;;7907:2;7892:18;1263:58:20;7779:187:28;2069:1490:20;;;;;;:::i;:::-;;:::i;308:6681:23:-;;;;;;:::i;:::-;;:::i;1204:53:20:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;82:528:18;;;;;;:::i;:::-;;:::i;372:31:20:-;;;;;;4965:104;-1:-1:-1;;;;;;;;;;;;;;;;;5044:18:20;;;;;;;5051:11;5044:18;;;;;;;;;;;;4965:104;;11133:32:28;;;11203:24;;11181:20;;;11174:54;;;;11106:18;4965:104:20;10935:299:28;3565:976:20;3808:36;;;;:20;:36;;;;;;;;3804:134;;;3867:60;;-1:-1:-1;;;3867:60:20;;;;;160:25:28;;;133:18;;3867:60:20;;;;;;;;3804:134;4829:18;;;;;;4852:1;4821:32;3999:30;;:::i;:::-;4039:36;;;:15;4085;;:32;;;4127:15;;;:28;;;4052:1;4237:46;4244:6;4252:16;-1:-1:-1;;;;;;;;;;;;;;;;;5044:18:20;;;;;;;;5051:11;5044:18;;;;;;;;;;4965:104;4252:16;4270:12;4237:6;:46::i;:::-;4222:61;;4298:7;4293:60;;4328:14;;-1:-1:-1;;;4328:14:20;;;;;;;;;;;4293:60;4428:36;;;;:20;:36;;;;;;:43;;-1:-1:-1;;4428:43:20;4467:4;4428:43;;;4487:47;4515:18;;4503:10;;4487:47;;4428:36;4487:47;3736:805;;;3565:976;;;;:::o;2069:1490::-;-1:-1:-1;;;;;;;;;;;2281:19:20;:39;:103;;;;2359:25;;2336:19;:48;2281:103;2264:234;;;2416:71;;-1:-1:-1;;;2416:71:20;;;;;160:25:28;;;133:18;;2416:71:20;14:177:28;2264:234:20;2524:12;;2579:48;;;;;;;11528:19:28;;;11563:12;;;11556:28;;;2579:48:20;;;;;;;;;11600:12:28;;;;2579:48:20;;;2569:59;;;;;-1:-1:-1;2741:104:20;2524:12;2569:59;2815:20;2741:15;:104::i;:::-;2717:128;;2877:16;;2860:13;:33;2856:118;;2916:47;;-1:-1:-1;;;2916:47:20;;;;;160:25:28;;;133:18;;2916:47:20;14:177:28;2856:118:20;-1:-1:-1;;;;;;;;;;;3027:9:20;282:77:17;3118:5:20;3122:1;3118;:5;:::i;:::-;3091:25;;3084:43;3066:61;;3137:18;3195:1;3158:39;;;;;:::i;:::-;3186:7;3165:19;3158:39;3233:45;;;;;;;;;;;;;;;;;;3137:60;;-1:-1:-1;3208:22:20;3321:18;3233:45;3137:60;3321:3;:18::i;:::-;3401:27;;;;;;;;;3406:11;3401:27;;;;;;;;;3289:50;;-1:-1:-1;3401:27:20;;3289:50;3401:4;:27::i;:::-;3387:41;;:11;:41;;;;;;3485:9;:5;3387:41;3485:9;:::i;:::-;3470:12;:24;3510:42;;3532:19;;3525:5;;3510:42;;;;;2254:1305;;;;;;;;2069:1490;;;;:::o;308:6681:23:-;531:15;;467:4;;-1:-1:-1;;;;;;;;;;;282:77:17;531:35:23;-1:-1:-1;523:44:23;;;;;;606:15;;;;-1:-1:-1;;;;;;;;;;;;598:44:23;;;;;;677:15;;;;-1:-1:-1;;;;;;;;;;;;669:44:23;;;;;;746:46;795:33;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;1098:11:21;;311:4;1135:48;;1122:62;;;1249:35;;;1344:32;;1337:56;1412:39;;;-1:-1:-1;661:797:21;795:33:23;746:82;;838:52;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;838:52:23;900:50;;:::i;:::-;961:62;998:10;1010:12;961:36;:62::i;:::-;3060:17:21;;;;;;:20;2197:9;;2301:14;;2344:23;;;2328:40;;2485:8;;2477:4;2446:37;;;;;;;2439:55;;;;2580:12;;;2574:19;2535:37;;;2528:66;3116:17;;:21;;;2197:9;;2301:14;;2344:23;;;2328:40;;2485:8;;2446:37;;;;;2439:55;;;;2580:12;;;2574:19;2535:37;;;2528:66;3173:17;;:20;;;2197:9;;2301:14;;2344:23;;;2328:40;;2485:8;;2446:37;;;;;2439:55;;;;2580:12;;;2574:19;2535:37;;;2528:66;3229:17;;:20;;;2197:9;;2301:14;;2344:23;;;2328:40;;2485:8;;2446:37;;;;;2439:55;;;;2580:12;;2574:19;2535:37;;2528:66;1111:42:23;1142:10;1111:30;:42::i;:::-;1087:66;;1164:43;1189:10;1201:5;1164:24;:43::i;:::-;1218:42;1249:10;1218:30;:42::i;:::-;;1297;1328:10;1297:30;:42::i;:::-;1270:24;;;;:69;;;;3854:17:21;;;;;;:19;;;5635:9;;5739:14;;5786:4;5782:23;;;5766:40;;5929:12;;;5923:19;5884:37;;;;;;;5877:66;;;;6013:8;;5974:37;;;5967:55;6116:4;6109:12;;;6103:19;6064:37;;;6057:66;6199:12;;;6193:19;6154:37;;6147:66;3927:17;:19;;;2197:9;;2301:14;;2344:23;;;2328:40;;2485:8;;2446:37;;;;;2439:55;;;;2580:12;;2574:19;2535:37;;2528:66;1432:42:23;1463:10;1432:30;:42::i;:::-;1404:25;;;:70;1485:43;1510:10;1522:5;1485:24;:43::i;:::-;1564:42;1595:10;1564:30;:42::i;:::-;1539:22;;;:67;1641:42;1672:10;1641:30;:42::i;:::-;1616:22;;;:67;1694:43;1719:10;1731:5;5479:20:21;:25;;;2197:9;;2301:14;;2348:4;2344:23;;;2328:40;;2485:8;;2446:37;;;;2477:4;2446:37;;;2439:55;;;;2580:12;;2574:19;2535:37;;2528:66;2626:284;1694:43:23;1773:42;1804:10;1773:30;:42::i;:::-;1748:22;;;:67;1850:42;1881:10;1850:30;:42::i;:::-;1825:22;;;:67;1926:42;1957:10;1926:30;:42::i;:::-;1902:21;;;:66;1987:26;;:::i;:::-;3054:4;3029:30;;3023:37;677:66:17;;848;;3115:1:23;3023:37;677:66:17;3088:29:23;3073:44;;3176:1;3169:5;3154:13;3147:31;3130:48;;;3237:19;:25;;;3266:1;3237:30;3233:154;;3297:5;3301:1;3297;:5;:::i;:::-;3283:19;;3233:154;;;3375:1;3347:19;:25;;;:29;;;;:::i;:::-;3333:43;;3233:154;3522:4;3497:30;;3491:37;3582:4;3557:30;;3551:37;3696:4;3685:16;;3679:23;3704:4;3675:34;3669:41;3777:1;3752:23;;;3551:37;3741:38;3723:56;;3840:1;3832:5;3829:1;3825:13;3821:2;3814:28;3915:1;3901:11;3898:1;3894:19;3890:2;3883:34;3994:1;3978:13;3975:1;3971:21;3967:2;3960:36;3930:66;;4075:1;4061:11;4058:1;4054:19;4047:5;4040:37;4160:1;4144:13;4141:1;4137:21;4130:5;4123:39;4090:72;;4257:1;4241:13;4238:1;4234:21;4221:11;4214:45;4388:20;4380:5;4360:18;4356:30;4349:60;4461:14;4453:5;4433:18;4429:30;4422:54;4528:22;4520:5;4500:18;4496:30;4489:62;4649:10;4642:4;4632:8;4628:19;4621:39;4709:14;4702:4;4692:8;4688:19;4681:43;4773:20;4766:4;4756:8;4752:19;4745:49;4843:22;4836:4;4826:8;4822:19;4815:51;4915:23;4908:4;4898:8;4894:19;4887:52;4988:25;4981:4;4971:8;4967:19;4960:54;5063:31;5056:4;5046:8;5042:19;5035:60;;;;;;;;3464:1641;;5146:21;5158:8;5146:11;:21::i;:::-;5135:32;;5179:14;5195;5213:187;5261:19;:25;;;5300:8;5309:1;5300:11;;;;;;;:::i;:::-;;;;;573:1:17;465:66;5213:34:23;:187::i;:::-;5178:222;;;;5606:8;5600:15;5593:4;5573:18;5569:29;5562:54;5687:4;5677:8;5673:19;5667:26;5660:4;5640:18;5636:29;5629:65;5765:4;5755:8;5751:19;5745:26;5738:4;5718:18;5714:29;5707:65;5843:4;5833:8;5829:19;5823:26;5816:4;5796:18;5792:29;5785:65;5921:4;5911:8;5907:19;5901:26;5894:4;5874:18;5870:29;5863:65;6000:4;5990:8;5986:19;5980:26;5972:5;5952:18;5948:30;5941:66;6079:4;6069:8;6065:19;6059:26;6051:5;6031:18;6027:30;6020:66;6158:4;6148:8;6144:19;6138:26;6130:5;6110:18;6106:30;6099:66;6331:6;6323:5;6303:18;6299:30;6292:46;6390:6;6382:5;6362:18;6358:30;6351:46;6438:157;6471:5;6494:18;6530:19;:21;;;6569:12;6438:15;:157::i;:::-;6417:231;;;;-1:-1:-1;;;6417:231:23;;12352:2:28;6417:231:23;;;12334:21:28;12391:2;12371:18;;;12364:30;12430:29;12410:18;;;12403:57;12477:18;;6417:231:23;12150:351:28;6417:231:23;5125:1534;;6709:125;6754:5;6773:18;6805:19;6709:31;:125::i;:::-;6852:130;6877:5;6896:18;6928:19;6961:11;6852;:130::i;:::-;6845:137;308:6681;-1:-1:-1;;;;;;;;;308:6681:23:o;82:528:18:-;214:7;;272:5;214:7;287:291;311:6;:13;307:1;:17;287:291;;;350:10;359:1;350:6;:10;:::i;:::-;346:14;-1:-1:-1;374:11:18;384:1;374:11;;:::i;:::-;;;404:1;409;404:6;400:168;;442:30;451:9;462:6;469:1;462:9;;;;;;;;:::i;:::-;;;;;;;759:13;850:15;;;885:4;878:15;931:4;915:21;;;696:256;442:30;430:42;;400:168;;;523:30;532:6;539:1;532:9;;;;;;;;:::i;:::-;;;;;;;543;759:13;850:15;;;885:4;878:15;931:4;915:21;;;696:256;523:30;511:42;;400:168;326:4;;;;:::i;:::-;;;;287:291;;;-1:-1:-1;594:9:18;82:528;-1:-1:-1;;;;;82:528:18:o;1625:587:16:-;-1:-1:-1;;;;;;;;;;;;;;;;;1751:23:16;;:::i;:::-;1795:4;;1784:15;;:8;1820:4;;;;1809:8;;;:15;1834:8;;;;:12;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;2054:4:16;1784:15;2044:1;2037:4;2030:5;2026:16;2015:58;2004:69;-1:-1:-1;2004:69:16;;2086:38;2101:23;2120:1;2117;2110:12;2086:38;;2152:7;2143:38;;;;-1:-1:-1;;;2143:38:16;;13090:2:28;2143:38:16;;;13072:21:28;13129:2;13109:18;;;13102:30;-1:-1:-1;;;13148:18:28;;;13141:47;13205:18;;2143:38:16;12888:341:28;2143:38:16;-1:-1:-1;2199:6:16;-1:-1:-1;;1625:587:16;;;;;:::o;2282:632::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2461:12:16;2484:23;;:::i;:::-;2528:4;;2517:15;;:8;2553:4;;;;2542:8;;;:15;2578:4;;2567:8;;;;:15;;;;2603:4;;;;2592:8;;;:15;2761:6;2755:4;2517:15;2745:1;2738:4;2731:5;2727:16;2716:58;2705:69;-1:-1:-1;2705:69:16;;2787:38;2802:23;2821:1;2818;2811:12;2787:38;;2853:7;2845:38;;;;-1:-1:-1;;;2845:38:16;;13436:2:28;2845:38:16;;;13418:21:28;13475:2;13455:18;;;13448:30;-1:-1:-1;;;13494:18:28;;;13487:48;13552:18;;2845:38:16;13234:342:28;2845:38:16;-1:-1:-1;2901:6:16;;2282:632;-1:-1:-1;;;;2282:632:16:o;2626:284:21:-;2763:40;2775:10;2787:12;2800:1;2787:15;;;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;2763:40;2813;2825:10;2837:12;2850:1;2837:15;;2813:40;2863;2875:10;2887:12;2900:1;2887:15;;2863:40;2626:284;;:::o;6523:676::-;6661:9;;6717:14;;6780:4;6767:18;;;6757:37;;;6813:21;;;:33;;;6981:21;;;7019:37;;;-1:-1:-1;;;;;;;;;;;7125:23:21;;;6523:676::o;3263:423::-;3382:70;3413:10;3425:5;:17;;;:26;;;2197:9;;2301:14;;2348:4;2344:23;;;2328:40;;2485:8;;2446:37;;;;2477:4;2446:37;;;2439:55;;;;2580:12;;2574:19;2535:37;;2528:66;2080:540;3382:70;3462:64;3493:10;3505:5;:17;;;:20;;;2197:9;;2301:14;;2348:4;2344:23;;;2328:40;;2485:8;;2446:37;;;;2477:4;2446:37;;;2439:55;;;;2580:12;;2574:19;2535:37;;2528:66;2080:540;3462:64;3536;3567:10;3579:5;:17;;;:20;;;2197:9;;2301:14;;2348:4;2344:23;;;2328:40;;2485:8;;2446:37;;;;2477:4;2446:37;;;2439:55;;;;2580:12;;2574:19;2535:37;;2528:66;2080:540;3536:64;3610:69;3641:10;3653:5;:17;;;:25;;;2197:9;;2301:14;;2348:4;2344:23;;;2328:40;;2485:8;;2446:37;;;;2477:4;2446:37;;;2439:55;;;;2580:12;;2574:19;2535:37;;2528:66;2080:540;3960:1351;4079:62;4109:10;4121:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4079:62;4151;4181:10;4193:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4151:62;4223;4253:10;4265:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4223:62;4295;4325:10;4337:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4295:62;4367;4397:10;4409:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4367:62;4439;4469:10;4481:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4439:62;4511;4541:10;4553:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4511:62;4583;4613:10;4625:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4583:62;4655;4685:10;4697:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4655:62;4727:63;4757:10;4769:5;:14;;;:20;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4727:63;4800;4830:10;4842:5;:14;;;:20;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4800:63;4915:14;;;;;;:21;1711:9;;1862:14;;1905:23;;;1889:40;;2013:37;;;2006:52;4989:14;;:23;;;1711:9;;1862:14;;1905:23;;;1889:40;;2013:37;;;2006:52;5065:14;;:23;;;1711:9;;1862:14;;1905:23;;;1889:40;;2013:37;;;2006:52;5141:14;;:22;;;1711:9;;1862:14;;1905:23;;;1889:40;;2013:37;;;2006:52;5216:14;;:17;;;1711:9;;1862:14;;1905:23;;;1889:40;;2013:37;;;2006:52;5286:14;:17;;;1711:9;;1862:14;;1905:23;;;1889:40;;2013:37;;2006:52;2626:284::o;36992:4605:23:-;37076:17;;:::i;:::-;37105:25;;:::i;:::-;37140:9;-1:-1:-1;;;;;;;;;;;37140:29:23;;37220:4;37214:11;38677:6;38671:13;38726:4;38718:6;38714:17;38708:24;38773:1;38768:3;38763;38756:19;38813:17;;-1:-1:-1;38859:1:23;;-1:-1:-1;38844:343:23;38869:1;38866;38863:8;38844:343;;;38930:4;38927:1;38923:12;38993:4;38985:6;38981:17;38973:6;38969:30;38963:37;39064:4;39056:6;39052:17;39046:4;39042:28;39036:35;39124:1;39111:11;39106:3;39099:27;39150:17;;;39143:30;;;;-1:-1:-1;;38886:1:23;38879:9;38844:343;;;-1:-1:-1;39304:4:23;39294:15;;39288:22;;39281:53;39311:23;39330:1;39327;39320:12;39281:53;;39414:4;39406:5;39400:4;39396:16;39389:30;39457:4;39449:5;39443:4;39439:16;39432:30;39500:4;39492:5;39486:4;39482:16;39475:30;39559:4;39553;39549:15;39543:22;39535:5;39529:4;39525:16;39518:48;39611:1;39608;39604:9;39596:5;39590:4;39586:16;39579:35;39652:1;39644:5;39638:4;39634:16;39627:27;39748:4;39740:5;39734:4;39730:16;39724:4;39716:5;39710:4;39706:16;39700:4;39693:5;39682:71;39773:7;;39766:38;39781:23;39800:1;39797;39790:12;39766:38;;;39886:1;39867:403;39900:1;39893:5;39890:12;39867:403;;;39964:5;39961:1;39957:13;40023:4;40020:1;40016:12;40008:6;40004:25;39998:32;40079:4;40076:1;40072:12;40065:5;40061:24;40047:38;;40136:6;40130:4;40126:17;40120:24;40196:1;40184:10;40179:3;40172:26;40222:28;;;-1:-1:-1;;40222:28:23;40215:41;;;;-1:-1:-1;;39925:1:23;39914:13;39867:403;;;39871:18;40431:1;40406:6;40400:13;40375:5;40369:4;40365:16;40359:23;40335:111;40476:5;40466:16;;40459:29;40567:1;40552:435;40577:1;40574;40571:8;40552:435;;;40637:4;40630:12;;;40778:18;;;40678:5;40778:18;40772:25;-1:-1:-1;;40727:9:23;;40723:20;;;40839:18;;40833:25;40630:12;;40772:25;40912:1;40833:25;40772;40887:27;40939:28;;;40960:5;40939:28;40932:41;;;;-1:-1:-1;;40594:1:23;40587:9;40552:435;;;-1:-1:-1;41044:6:23;41034:17;;41028:24;41001:52;;41115:6;41105:17;;41099:24;41092:4;41079:18;;41072:52;41186:6;41176:17;;41170:24;41163:4;41150:18;;41143:52;41257:6;41247:17;;41241:24;41234:4;41221:18;;41214:52;41328:6;41318:17;;41312:24;41305:4;41292:18;;41285:52;41399:6;41389:17;;41383:24;41376:4;41363:18;;41356:52;41470:6;41460:17;;41454:24;41447:4;41434:18;;41427:52;41541:6;41531:17;41525:24;41518:4;41505:18;;41498:52;-1:-1:-1;41012:7:23;36992:4605;-1:-1:-1;;36992:4605:23:o;127:1476:19:-;307:14;-1:-1:-1;;;;;;;;;;;282:77:17;;579:10:19;;575:505;;653:5;632:26;;876:1;862:166;885:14;882:1;879:21;862:166;;;1008:1;989:17;970;963:47;942:68;-1:-1:-1;915:1:19;908:9;862:166;;;866:12;1051:5;1046:10;;575:505;1109:21;1129:1;1109:17;:21;:::i;:::-;1089:41;;1262:1;1248:12;1244:1;1241;1237:9;1230:34;1284:1;1291;1286:9;;;;1316:1;1313;1306:12;1286:9;1277:43;;1572:1;1542:12;1522:1;1507:13;1488:17;1481:43;1457:130;1447:140;;1433:164;;127:1476;;;;;;;:::o;31849:5137:23:-;32066:4;-1:-1:-1;;;;;;;;;;;32066:4:23;;32187:252;;;32216:1;32265:5;32260:3;32255;32248:23;32319:5;32313:4;32307;32300:25;32373:5;32367:4;32361;32354:25;32342:37;;;32419:5;32414:3;32408:4;32401:24;32396:29;32187:252;-1:-1:-1;;;;32187:252:23:o;:::-;32470:11;32530:4;32523:5;32519:16;32513:23;32665:5;32645:18;32641:30;32635:37;32732:4;32719:11;32715:22;32709:29;32792:1;32774:16;32765:7;32758:36;32751:43;;;;32959:11;32953:18;33016:4;33003:11;32999:22;32993:29;33070:4;33057:11;33053:22;33047:29;33124:4;33111:11;33107:22;33101:29;33179:1;33176;33170:4;33163:18;33144:37;;33209:20;33227:1;33214:11;33209:20;:::i;:::-;33194:35;;33291:1;33284:4;33281:1;33277:12;33264:11;33257:36;33242:51;;;;33349:1;33341:6;33328:11;33321:30;33306:45;;33371:11;33364:18;;;;33444:11;33438:18;33501:4;33488:11;33484:22;33478:29;33665:5;33652:11;33648:23;33642:30;33720:5;33707:11;33703:23;33697:30;33776:5;33763:11;33759:23;33753:30;33849:1;33846;33842;33835:5;33829:4;33822:22;33815:36;33796:55;;;33879:20;33897:1;33884:11;33879:20;:::i;:::-;33864:35;;33961:1;33954:4;33951:1;33947:12;33934:11;33927:36;33912:51;;;;34019:1;34011:6;33998:11;33991:30;33976:45;;34088:1;34084;34071:11;34060:9;34053:33;34048:3;34041:49;34034:56;;;;34148:1;34135:11;34124:9;34117:33;34104:46;;34323:11;34317:18;34380:4;34367:11;34363:22;34357:29;34435:5;34422:11;34418:23;34412:30;34490:5;34477:11;34473:23;34467:30;34545:5;34532:11;34528:23;34522:30;34618:1;34615;34611;34604:5;34598:4;34591:22;34584:36;34565:55;;34648:20;34666:1;34653:11;34648:20;:::i;:::-;34633:35;;34730:1;34723:4;34720:1;34716:12;34703:11;34696:36;34681:51;;;;;34788:1;34780:6;34767:11;34760:30;34745:45;;34857:1;34853;34840:11;34829:9;34822:33;34817:3;34810:49;34803:56;;;;34917:1;34904:11;34893:9;34886:33;34873:46;;35057:11;35051:18;35118:5;35105:11;35101:23;35095:30;35174:5;35161:11;35157:23;35151:30;35242:1;35234:5;35231:1;35227:13;35220:5;35213:31;35194:50;;35300:1;35292:6;35279:11;35272:30;35257:45;;35369:1;35365;35352:11;35341:9;35334:33;35329:3;35322:49;35315:56;;;35429:1;35416:11;35405:9;35398:33;35385:46;;35560:4;35547:11;35543:22;35537:29;35525:41;;35614:5;35601:11;35597:23;35591:30;35674:5;35654:18;35650:30;35644:37;35758:1;35753;35747:4;35741;35734:21;35731:1;35727:29;35720:5;35713:47;35694:66;;35812:1;35808:2;35795:11;35788:26;35773:41;;35881:1;35877;35864:11;35853:9;35846:33;35841:3;35834:49;35827:56;;35941:1;35928:11;35917:9;35910:33;35897:46;;36095:5;36082:11;36078:23;36072:30;36060:42;;36150:5;36137:11;36133:23;36127:30;36115:42;;36215:4;36201:12;36197:23;36191:30;36265:12;36259:19;36329:1;36322:5;36315;36308:23;36291:40;;36372:1;36366:4;36360;36353:21;36344:30;;36413:1;36402:9;36399:1;36392:23;36387:28;;36480:1;36476;36473;36469:9;36454:13;36447:35;36428:54;;36534:1;36530:2;36517:11;36510:26;36495:41;;36603:1;36599;36586:11;36575:9;36568:33;36563:3;36556:49;36549:56;;36663:1;36650:11;36639:9;36632:33;36619:46;;36804:1;36784:17;36781:1;36777:25;36771:4;36764:42;36745:61;;;;36858:1;36854:2;36841:11;36834:26;36819:41;;;;;36927:1;36923;36910:11;36899:9;36892:33;36887:3;36880:49;36969:10;;;;;31849:5137;-1:-1:-1;;;;;;;;;;31849:5137:23:o;9064:22779::-;9291:9;-1:-1:-1;;;;;;;;;;;9291:29:23;;9330:12;9417:4;9396:19;9392:30;9386:37;9477:4;9456:19;9452:30;9446:37;9537:4;9516:19;9512:30;9506:37;9631:1;9627:2;9623;9616:17;9683:1;9679:2;9669:8;9662:23;9735:1;9731:2;9721:8;9714:23;9789:8;9781:5;9761:18;9757:30;9750:48;9850:8;9842:5;9822:18;9818:30;9811:48;9911:8;9903:5;9883:18;9879:30;9872:48;10008:1;10004:2;10000;9993:17;10060:1;10056:2;10046:8;10039:23;10106:5;10082:30;;10075:48;;;;10167:5;10143:30;;10136:48;10272:1;10268:2;;10257:17;10324:1;10320:2;10310:8;10303:23;10376:1;10372:2;10362:8;10355:23;10339:39;;10430:8;10422:5;10402:18;10398:30;10391:48;10491:8;10483:5;10463:18;10459:30;10452:48;;;10552:8;10544:5;10524:18;10520:30;10513:48;10614:4;10607:5;10603:16;10597:23;10575:45;;10647:7;10667;10816:4;10810:11;10956:5;10939:14;10933:21;10929:33;10923:40;10910:4;10899:65;11034:5;11017:14;11011:21;11007:33;11001:40;10994:4;10988;10984:15;10977:65;11079:2;11072:4;11066;11062:15;11055:27;11156:4;11150;11144;11138;11135:1;11128:4;11121:5;11117:16;11106:55;11095:66;;11199:4;11193:11;11241:4;11235:11;11370:4;11364:11;11356:19;;11445:5;11428:14;11422:21;11418:33;11412:40;11399:4;11388:65;11523:5;11506:14;11500:21;11496:33;11490:40;11483:4;11477;11473:15;11466:65;11568:8;11561:4;11555;11551:15;11544:33;11664:4;11658;11652;11646;11643:1;11636:4;11629:5;11625:16;11614:55;11605:7;11601:69;11590:80;;11803:4;11797:11;11789:19;;11834:10;11828:4;11821:24;11882:10;11875:4;11869;11865:15;11858:35;;;11936:4;11930:11;11923:4;11917;11913:15;11906:36;11985:4;11979:11;11972:4;11966;11962:15;11955:36;12078:4;12072;12066;12060;12057:1;12050:4;12043:5;12039:16;12028:55;12019:7;12015:69;12004:80;;12110:4;12104:11;12097:18;;12141:4;12135:11;12128:18;;12269:4;12263:11;12255:19;;12344:5;12327:14;12321:21;12317:33;12311:40;12298:4;12287:65;12422:5;12405:14;12399:21;12395:33;12389:40;12382:4;12376;12372:15;12365:65;12467:8;12460:4;12454;12450:15;12443:33;12563:4;12557;12551;12545;12542:1;12535:4;12528:5;12524:16;12513:55;12504:7;12500:69;12489:80;;12725:4;12719:11;12711:19;;12756:3;12750:4;12743:17;12797:3;12790:4;12784;12780:15;12773:28;12844:4;12838:11;12831:4;12825;12821:15;12814:36;12893:4;12887:11;12880:4;12874;12870:15;12863:36;12986:4;12980;12974;12968;12965:1;12958:4;12951:5;12947:16;12936:55;12927:7;12923:69;12912:80;;13018:4;13012:11;13005:18;;13049:4;13043:11;13036:18;;13157:4;13151:11;13143:19;;13232:5;13215:14;13209:21;13205:33;13199:40;13186:4;13175:65;13310:5;13293:14;13287:21;13283:33;13277:40;13270:4;13264;13260:15;13253:65;13355:8;13348:4;13342;13338:15;13331:33;13451:4;13445;13439;13433;13430:1;13423:4;13416:5;13412:16;13401:55;13392:7;13388:69;13377:80;;13631:4;13625:11;13617:19;;13662:3;13656:4;13649:17;13703:3;13696:4;13690;13686:15;13679:28;13750:4;13744:11;13737:4;13731;13727:15;13720:36;13799:4;13793:11;13786:4;13780;13776:15;13769:36;13892:4;13886;13880;13874;13871:1;13864:4;13857:5;13853:16;13842:55;13833:7;13829:69;13818:80;;13924:4;13918:11;13911:18;;13955:4;13949:11;13942:18;;14152:4;14146:11;14138:19;;14183:3;14177:4;14170:17;14224:3;14217:4;14211;14207:15;14200:28;14298:5;14281:14;14275:21;14271:33;14265:40;14258:4;14252;14248:15;14241:65;14376:5;14359:14;14353:21;14349:33;14343:40;14336:4;14330;14326:15;14319:65;14471:4;14465;14459;14453;14450:1;14443:4;14436:5;14432:16;14421:55;14412:7;14408:69;14397:80;;;;;14543:4;14537:11;14528:5;14508:18;14504:30;14498:37;14491:58;14625:4;14619:11;14612:4;14603:5;14583:18;14579:30;14573:37;14569:48;14562:69;14961:4;14954:5;14950:16;14944:23;15012:4;14999:11;14995:22;14989:29;15070:4;15057:11;15053:22;15047:29;15127:4;15114:11;15110:22;15104:29;15179:4;15166:11;15162:22;15156:29;15240:1;15236:2;15233:1;15226:16;15211:31;;15313:1;15309;15299:8;15289;15282:29;15273:7;15266:49;15255:60;;15385:1;15381;15372:7;15362:8;15355:28;15346:7;15339:48;15328:59;;15452:1;15448;15444:2;15434:8;15427:23;15418:7;15411:43;15400:54;;;;;15514:1;15500:11;15494:18;15485:7;15478:38;15467:49;;15578:7;15570:5;15550:18;15546:30;15539:47;;;14659:941;;15774:7;15794;15832:4;15826:11;15907:4;15890:14;15884:21;15880:32;15874:39;15861:4;15850:64;15984:4;15967:14;15961:21;15957:32;15951:39;15944:4;15938;15934:15;15927:64;16028:2;16021:4;16015;16011:15;16004:27;16118:4;16112;16106;16100;16097:1;16090:4;16083:5;16079:16;16068:55;16059:7;16055:69;16044:80;;16150:4;16144:11;16137:18;;16181:4;16175:11;16168:18;;16318:4;16312:11;16304:19;;16393:4;16376:14;16370:21;16366:32;16360:39;16347:4;16336:64;16470:4;16453:14;16447:21;16443:32;16437:39;16430:4;16424;16420:15;16413:64;16514:8;16507:4;16501;16497:15;16490:33;16610:4;16604;16598;16592;16589:1;16582:4;16575:5;16571:16;16560:55;16551:7;16547:69;16536:80;;16644:4;16638:11;16630:19;;16675:3;16669:4;16662:17;16716:3;16709:4;16703;16699:15;16692:28;16763:4;16757:11;16750:4;16744;16740:15;16733:36;16812:4;16806:11;16799:4;16793;16789:15;16782:36;16905:4;16899;16893;16887;16884:1;16877:4;16870:5;16866:16;16855:55;16846:7;16842:69;16831:80;;16995:4;16989:11;16981:19;;17032:4;17026:11;17020:4;17013:25;17081:4;17075:11;17068:4;17062;17058:15;17051:36;17140:14;17134:21;17124:39;17117:4;17111;17107:15;17100:64;17234:4;17217:14;17211:21;17207:32;17201:39;17194:4;17188;17184:15;17177:64;17328:4;17322;17316;17310;17307:1;17300:4;17293:5;17289:16;17278:55;17269:7;17265:69;17254:80;;;;;17400:4;17394:11;17385:5;17365:18;17361:30;17355:37;17348:58;17482:4;17476:11;17469:4;17460:5;17440:18;17436:30;17430:37;17426:48;17419:69;17940:4;17933:5;17929:16;17923:23;17960:458;;;18025:6;18249:5;18243:4;18239:2;18232:23;18304:5;18292:10;18288:2;18281:29;18350:5;18347:1;18344;18337:19;18327:29;;;18398:5;18394:2;18390;18383:21;18373:31;17960:458;-1:-1:-1;;;;;;;;17960:458:23:o;:::-;18467:4;18454:11;18450:22;18444:29;18521:5;18508:11;18504:23;18498:30;18576:5;18563:11;18559:23;18553:30;18615:50;18663:1;18653:8;18649:2;18643:4;18637;18631;18615:50;:::i;:::-;18709:5;18685:30;;18678:51;-1:-1:-1;;;18778:4:23;18761:22;;18755:29;18832:5;18815:23;;18809:30;18887:5;18870:23;;18864:30;18932:50;18980:1;18970:8;18966:2;18864:30;18809;18755:29;18932:50;:::i;:::-;19026:5;19002:30;;18995:57;-1:-1:-1;;;19101:5:23;19084:23;;19078:30;19156:5;19139:23;;19133:30;19211:5;19194:23;;;19188:30;;19258:50;19306:1;19296:8;19292:2;19188:30;19133;19078;19258:50;:::i;:::-;19352:5;19328:30;;19321:59;-1:-1:-1;;;;19501:4:23;19490:16;;19484:23;19545:12;;19717:24;;19787:4;19770:22;;;19764:29;19834;;;19828:36;19764:29;;-1:-1:-1;19545:12:23;;19987:1;19828:36;19987:1;19923:10;;;19717:24;19912:25;19888:114;20046:5;20022:30;;20015:42;-1:-1:-1;;20197:4:23;20174:28;20168:35;20261:5;20237:30;;20231:37;20337:4;20313:29;;20307:36;20168:35;;-1:-1:-1;20231:37:23;20474:1;20307:36;20474:1;20401:15;;;20168:35;20390:30;20366:123;20356:133;;;;20541:2;20533:5;20513:18;20509:30;20502:42;20622:4;20615:5;20611:16;20605:23;20586:42;;20672:5;20666:12;20873:4;20854:17;20850:28;20844:35;20834:45;;20948:4;20928:18;20924:29;20918:36;21029:4;21009:18;21005:29;20999:36;21190:5;21170:18;21166:30;21160:37;21275:5;21255:18;21251:30;21245:37;21366:1;21337:27;21315:20;21308:60;21295:73;;21511:5;21491:18;21487:30;21481:37;21573:27;21570:1;21566:35;21531:70;;21679:1;21650:27;21634:14;21627:54;21614:67;;21783:27;21775:5;21755:18;21751:30;21744:67;21943:5;21930:11;21926:23;21920:30;21907:43;;21999:5;21986:11;21982:23;21976:30;21963:43;;22138:1;22118;22111:5;22104;22097:23;22077:1;22070:5;22063;22056:23;22032:121;22019:134;;;;;22297:1;22271:24;22251:18;22244:55;22231:68;;;22351:5;22343;22323:18;22319:30;22312:45;22474:1;22451:5;22431:1;22423:5;22420:1;22416:13;22412:2;22405:28;22381:108;22533:5;22509:30;;22502:42;-1:-1:-1;;22666:12:23;;23017:5;22993:30;;22987:37;23097:5;23073:30;;23067:37;23182:5;23158:30;;23152:37;23269:5;23245:30;;23239:37;22666:12;;-1:-1:-1;22987:37:23;;23067;;23152;23355:1;23067:37;22987;23302:55;23422:1;23393:27;23386:5;23379:45;23370:54;;23491:1;23460:29;23453:5;23446:47;23437:56;;23753:5;23733:18;23729:30;23723:37;23701:59;;23838:5;23818:18;23814:30;23808:37;23773:72;;23931:5;23911:18;23907:30;23901:37;24011:1;23987:22;23971:14;23964:49;23951:62;;24078:1;24049:27;24042:5;24035:45;24026:54;;24153:1;24116:35;24109:5;24102:53;24093:62;;;24458:5;24438:18;24434:30;24428:37;24425:1;24421:45;24384:82;;24559:5;24539:18;24535:30;24529:37;24526:1;24522:45;24638:1;24616:20;24600:14;24593:47;24580:60;;24707:1;24676:29;24669:5;24662:47;24653:56;;24782:1;24745:35;24738:5;24731:53;24722:62;;;25026:5;25006:18;25002:30;24996:37;24977:56;;25101:5;25081:18;25077:30;25071:37;25046:62;;25178:5;25158:18;25154:30;25148:37;25238:1;25231:5;25218:11;25211:29;25198:42;;25313:1;25309;25302:5;25283:17;25276:35;25269:5;25262:53;25253:62;;25390:1;25386;25379:5;25358:19;25351:37;25344:5;25337:55;25328:64;;;;;25516:5;25496:18;25492:30;25486:37;25473:50;;25600:4;25580:18;25576:29;25570:36;25536:70;;25674:1;25646:26;25639:5;25632:44;25619:57;;25729:4;25710:17;25706:28;25700:35;25690:45;;25802:1;25795:5;25791:1;25783:5;25780:1;25776:13;25772:2;25765:28;25758:46;25848:5;25824:30;;25817:42;-1:-1:-1;;26209:4:23;26203:11;;26332:21;;26355:5;26328:33;26322:40;26298:65;;26410:21;;26433:5;26406:33;26400:40;26393:4;26383:15;;26376:65;26509:4;26484:30;;26478:37;26461:15;;;26454:62;26155:5;;-1:-1:-1;26155:5:23;;-1:-1:-1;26203:11:23;26155:5;26578:4;26203:11;26569:1;26562:4;26555:5;26551:16;26540:55;26529:66;;26619:4;26613:11;26608:16;;26648:4;26642:11;26637:16;;26770:4;26764:11;26756:19;;26837:5;26817:18;26813:30;26807:37;26801:44;26795:4;26788:58;26932:4;26923:5;26903:18;26899:30;26893:37;26889:48;26883:55;26876:4;26870;26866:15;26859:80;27006:5;26986:18;26982:30;26976:37;26969:4;26963;26959:15;26952:62;27088:4;27082;27076;27070;27067:1;27060:4;27053:5;27049:16;27038:55;27027:66;;27121:4;27115:11;27107:19;;27158:4;27152:11;27146:4;27139:25;27207:4;27201:11;27194:4;27188;27184:15;27177:36;27250:1;27243:4;27237;27233:15;27226:26;27289:1;27282:4;27276;27272:15;27265:26;27378:4;27372;27366;27360;27357:1;27350:4;27343:5;27339:16;27328:55;27319:7;27315:69;27304:80;;27408:4;27402:11;27397:16;;27437:4;27431:11;27426:16;;27578:4;27572:11;27564:19;;27642:4;27625:14;27619:21;27615:32;27609:39;27603:4;27596:53;27719:4;27702:14;27696:21;27692:32;27686:39;27679:4;27673;27669:15;27662:64;27793:5;27773:18;27769:30;27763:37;27756:4;27750;27746:15;27739:62;27875:4;27869;27863;27857;27854:1;27847:4;27840:5;27836:16;27825:55;27814:66;;27908:4;27902:11;27894:19;;27945:4;27939:11;27933:4;27926:25;27994:4;27988:11;27981:4;27975;27971:15;27964:36;28037:1;28030:4;28024;28020:15;28013:26;28076:1;28069:4;28063;28059:15;28052:26;28165:4;28159;28153;28147;28144:1;28137:4;28130:5;28126:16;28115:55;28106:7;28102:69;28091:80;;28195:4;28189:11;28184:16;;28224:4;28218:11;28213:16;;28383:4;28377:11;28369:19;;28450:5;28430:18;28426:30;28420:37;28414:44;28408:4;28401:58;28545:4;28536:5;28516:18;28512:30;28506:37;28502:48;28496:55;28489:4;28483;28479:15;28472:80;28619:5;28599:18;28595:30;28589:37;28582:4;28576;28572:15;28565:62;28701:4;28695;28689;28683;28680:1;28673:4;28666:5;28662:16;28651:55;28640:66;;28734:4;28728:11;28720:19;;28771:4;28765:11;28759:4;28752:25;28820:4;28814:11;28807:4;28801;28797:15;28790:36;28863:1;28856:4;28850;28846:15;28839:26;28902:1;28895:4;28889;28885:15;28878:26;28991:4;28985;28979;28973;28970:1;28963:4;28956:5;28952:16;28941:55;28932:7;28928:69;28917:80;;29021:4;29015:11;29010:16;;29050:4;29044:11;29039:16;;29242:5;29236:12;29275:4;29269:11;29261:19;;29341:4;29322:17;29318:28;29312:35;29306:42;29300:4;29293:56;29433:4;29425;29406:17;29402:28;29396:35;29392:46;29386:53;29379:4;29373;29369:15;29362:78;;29477:1;29470:4;29464;29460:15;29453:26;29516:1;29509:4;29503;29499:15;29492:26;29605:4;29599;29593;29587;29584:1;29577:4;29570:5;29566:16;29555:55;29546:7;29542:69;29531:80;;;;29677:4;29671:11;29662:5;29642:18;29638:30;29632:37;29625:58;29759:4;29753:11;29746:4;29737:5;29717:18;29713:30;29707:37;29703:48;29696:69;25887:3892;30049:5;30029:18;30025:30;30019:37;30007:49;;30111:5;30091:18;30087:30;30081:37;30176:5;30156:18;30152:30;30146:37;30275:1;30271;30267:2;30258:5;30238:18;30234:30;30228:37;30221:52;30213:6;30206:71;30196:81;;30371:1;30367;30361:4;30352:5;30332:18;30328:30;30322:37;30315:54;30307:6;30300:73;30290:83;;30467:1;30463;30457:4;30448:5;30428:18;30424:30;30418:37;30411:54;30403:6;30396:73;30386:83;;30521:6;30513:5;30493:18;30489:30;30482:46;30799:5;30793:12;30768:37;;30981:1;30961;30953:4;30932:19;30928:30;30922:37;30902:17;30896:24;30889:74;30865:6;30841:155;30818:178;;;31188:1;31168;31159:5;31139:18;31135:30;31129:37;31121:4;31102:17;31098:28;31092:35;31085:85;31052:15;31028:175;31009:194;;31395:1;31375;31366:5;31346:18;31342:30;31336:37;31328:4;31309:17;31305:28;31299:35;31292:85;31259:15;31235:175;31216:194;;31602:1;31582;31573:5;31553:18;31549:30;31543:37;31535:4;31516:17;31512:28;31506:35;31499:85;31466:15;31442:175;31661:5;31637:30;;31630:55;-1:-1:-1;31706:7:23;;31699:38;31714:23;31733:1;31730;31723:12;31699:38;;29793:1958;;31778:7;31770:66;;;;-1:-1:-1;;;31770:66:23;;13783:2:28;31770:66:23;;;13765:21:28;13822:2;13802:18;;;13795:30;13861:34;13841:18;;;13834:62;-1:-1:-1;;;13912:18:28;;;13905:44;13966:19;;31770:66:23;13581:410:28;31770:66:23;9281:22562;;9064:22779;;;:::o;6995:2063::-;7243:4;7361:23;7387:47;7392:11;7405:28;7412:5;:17;;;:20;;;7405:6;:28::i;:::-;7387:4;:47::i;:::-;7361:73;;7517:23;7543:189;7560:124;7582:57;;;;;;;;1452:66:17;7582:57:23;;;;1554:66:17;7582:57:23;;;7657:13;-1:-1:-1;;;;;;;;;;;;;;;;;442:84:16;;;;;;;;456:1;442:84;;459:66;442:84;;;;;363:170;7560:124:23;7698:19;:24;;;7543:3;:189::i;:::-;7517:215;;7837:23;7863:339;7880:276;7902:192;7928:66;7932:5;:20;;;:37;;;7971:19;:22;;;7928:3;:66::i;:::-;8017:59;8024:51;8028:10;-1:-1:-1;;;;;;;;;;;;;;;;;327:19:16;;;;;;;;341:1;327:19;;344:1;327:19;;;;;251:102;8028:10:23;8040:18;:34;;;8024:3;:51::i;:::-;8017:6;:59::i;7902:192::-;8113:18;:29;;;7880:4;:276::i;:::-;8171:19;:21;;;7863:3;:339::i;:::-;7837:365;;8213:26;8242:22;8247:12;8252:2;8256;8247:4;:12::i;:::-;8261:2;8242:4;:22::i;:::-;8213:51;;8274:26;8303:10;:8;:10::i;:::-;8274:39;;8375:26;8404:28;8411:5;:17;;;:20;;;8404:6;:28::i;:::-;8375:57;;8442:26;8471:5;:17;;;:19;;;8442:48;;8569:26;8598:73;8602:45;8609:5;:20;;;:37;;;8602:6;:45::i;:::-;8649:19;:21;;;8598:3;:73::i;:::-;8569:102;;8681:26;8710:167;;;;;;;;2882:66:17;8710:167:23;;;;2986:66:17;8710:167:23;;;;3090:66:17;8710:167:23;;;;3194:66:17;8710:167:23;;;8681:196;;8945:106;8977:5;8984;9003;9010;9029;9036;8945:18;:106::i;:::-;8938:113;6995:2063;-1:-1:-1;;;;;;;;;;;;;;6995:2063:23:o;1168:363:16:-;-1:-1:-1;;;;;;;;;;;;;;;;;1334:4:16;;:9;:22;;;;-1:-1:-1;1347:4:16;;;;:9;1334:22;1330:195;;;-1:-1:-1;;1379:19:16;;;;;;;;;-1:-1:-1;1379:19:16;;;;;;;;1168:363::o;1330:195::-;1429:9;139:77:17;1429:29:16;;1479:35;;;;;;;;1493:2;:4;;;1479:35;;;;1511:1;1504:2;:4;;;:8;;;;:::i;:::-;1499:14;;:1;:14;:::i;:::-;1479:35;;1472:42;1168:363;-1:-1:-1;;;1168:363:16:o;628:444::-;665:20;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;665:20:16;704:361;;;;;;;;736:66;704:361;;;;820:66;704:361;;;;904:66;704:361;;;;988:66;704:361;;;697:368;;628:444;:::o;3103:1639::-;3352:4;3368:11;3389:12;3452:4;3446:11;3507:2;3501:9;3495:4;3488:23;3562:4;3558:2;3554:13;3548:20;3541:4;3535;3531:15;3524:45;3630:2;3624:9;3617:4;3611;3607:15;3600:34;3685:4;3681:2;3677:13;3671:20;3664:4;3658;3654:15;3647:45;3743:4;3739:2;3735:13;3729:20;3722:4;3716;3712:15;3705:45;3801:4;3797:2;3793:13;3787:20;3780:4;3774;3770:15;3763:45;3869:2;3863:9;3856:4;3850;3846:15;3839:34;3924:4;3920:2;3916:13;3910:20;3903:4;3897;3893:15;3886:45;3993:2;3987:9;3979:5;3973:4;3969:16;3962:35;4049:4;4045:2;4041:13;4035:20;4027:5;4021:4;4017:16;4010:46;4108:4;4104:2;4100:13;4094:20;4086:5;4080:4;4076:16;4069:46;4167:4;4163:2;4159:13;4153:20;4145:5;4139:4;4135:16;4128:46;4236:2;4230:9;4222:5;4216:4;4212:16;4205:35;4292:4;4288:2;4284:13;4278:20;4270:5;4264:4;4260:16;4253:46;4361:2;4355:9;4347:5;4341:4;4337:16;4330:35;4417:4;4413:2;4409:13;4403:20;4395:5;4389:4;4385:16;4378:46;4476:4;4472:2;4468:13;4462:20;4454:5;4448:4;4444:16;4437:46;4535:4;4531:2;4527:13;4521:20;4513:5;4507:4;4503:16;4496:46;4607:4;4601;4594:5;4588:4;4585:1;4578:5;4567:45;4556:56;;;4638:4;4632:11;4625:18;;4670:7;4662:48;;;;-1:-1:-1;;;4662:48:16;;14198:2:28;4662:48:16;;;14180:21:28;14237:2;14217:18;;;14210:30;14276;14256:18;;;14249:58;14324:18;;4662:48:16;13996:352:28;4662:48:16;-1:-1:-1;4734:1:16;4727:8;;3103:1639;-1:-1:-1;;;;;;;3103:1639:16:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;196:127:28:-;257:10;252:3;248:20;245:1;238:31;288:4;285:1;278:15;312:4;309:1;302:15;328:255;400:2;394:9;442:6;430:19;;479:18;464:34;;500:22;;;461:62;458:88;;;526:18;;:::i;:::-;562:2;555:22;328:255;:::o;588:::-;660:2;654:9;702:6;690:19;;739:18;724:34;;760:22;;;721:62;718:88;;;786:18;;:::i;848:253::-;920:2;914:9;962:4;950:17;;997:18;982:34;;1018:22;;;979:62;976:88;;;1044:18;;:::i;1106:253::-;1178:2;1172:9;1220:4;1208:17;;1255:18;1240:34;;1276:22;;;1237:62;1234:88;;;1302:18;;:::i;1364:275::-;1435:2;1429:9;1500:2;1481:13;;-1:-1:-1;;1477:27:28;1465:40;;1535:18;1520:34;;1556:22;;;1517:62;1514:88;;;1582:18;;:::i;:::-;1618:2;1611:22;1364:275;;-1:-1:-1;1364:275:28:o;1644:476::-;1698:5;1746:4;1734:9;1729:3;1725:19;1721:30;1718:50;;;1764:1;1761;1754:12;1718:50;1797:4;1791:11;1841:4;1833:6;1829:17;1912:6;1900:10;1897:22;1876:18;1864:10;1861:34;1858:62;1855:88;;;1923:18;;:::i;:::-;1959:4;1952:24;2024:23;;2009:39;;2109:2;2094:18;;;2081:32;2064:15;;;2057:57;;;;-1:-1:-1;1994:6:28;1644:476;-1:-1:-1;1644:476:28:o;2125:1466::-;2180:5;2228:6;2216:9;2211:3;2207:19;2203:32;2200:52;;;2248:1;2245;2238:12;2200:52;2270:22;;:::i;:::-;2315:23;;2301:38;;2399:2;2384:18;;;2371:32;2355:14;;;2348:56;2464:2;2449:18;;;2436:32;2420:14;;;2413:56;2529:2;2514:18;;;2501:32;2485:14;;;2478:56;2595:3;2580:19;;;2567:33;2550:15;;;2543:58;2662:3;2647:19;;;2634:33;2617:15;;;2610:58;2729:3;2714:19;;;2701:33;2684:15;;;2677:58;2796:3;2781:19;;;2768:33;2751:15;;;2744:58;2821:3;2869:18;;;2856:32;2840:14;;;2833:56;2908:3;2956:18;;;2943:32;2927:14;;;2920:56;2995:3;3043:18;;;3030:32;3014:14;;;3007:56;3082:3;3130:18;;;3117:32;3101:14;;;3094:56;3169:3;3217:18;;;3204:32;3188:14;;;3181:56;3256:3;3304:18;;;3291:32;3275:14;;;3268:56;3343:3;3391:18;;;3378:32;3362:14;;;3355:56;3430:3;3478:18;;;3465:32;3449:14;;;3442:56;3517:3;3565:18;;;3552:32;3536:14;;;3529:56;;;;-1:-1:-1;2261:31:28;2125:1466;-1:-1:-1;2125:1466:28:o;3596:604::-;3650:5;3698:4;3686:9;3681:3;3677:19;3673:30;3670:50;;;3716:1;3713;3706:12;3670:50;3749:2;3743:9;3791:4;3783:6;3779:17;3862:6;3850:10;3847:22;3826:18;3814:10;3811:34;3808:62;3805:88;;;3873:18;;:::i;:::-;3913:10;3909:2;3902:22;;3942:6;3933:15;;3985:9;3972:23;3964:6;3957:39;4057:2;4046:9;4042:18;4029:32;4024:2;4016:6;4012:15;4005:57;4123:2;4112:9;4108:18;4095:32;4090:2;4082:6;4078:15;4071:57;4189:2;4178:9;4174:18;4161:32;4156:2;4148:6;4144:15;4137:57;;3596:604;;;;:::o;4205:1420::-;4263:5;4311:6;4299:9;4294:3;4290:19;4286:32;4283:52;;;4331:1;4328;4321:12;4283:52;4353:22;;:::i;:::-;4344:31;;4398:41;4435:3;4424:9;4398:41;:::i;:::-;4391:5;4384:56;4474:50;4520:3;4515:2;4504:9;4500:18;4474:50;:::i;:::-;4467:4;4460:5;4456:16;4449:76;4557:51;4604:3;4598;4587:9;4583:19;4557:51;:::i;:::-;4552:2;4545:5;4541:14;4534:75;4643:51;4690:3;4684;4673:9;4669:19;4643:51;:::i;:::-;4636:4;4629:5;4625:16;4618:77;4714:3;4750:50;4796:3;4791:2;4780:9;4776:18;4750:50;:::i;:::-;4744:3;4737:5;4733:15;4726:75;4820:3;4857:50;4903:3;4898:2;4887:9;4883:18;4857:50;:::i;:::-;4850:4;4843:5;4839:16;4832:76;4927:3;4963:50;5009:3;5004:2;4993:9;4989:18;4963:50;:::i;:::-;4957:3;4950:5;4946:15;4939:75;5048:54;5098:3;5089:6;5078:9;5074:22;5048:54;:::i;:::-;5041:4;5034:5;5030:16;5023:80;5135:51;5182:3;5176;5165:9;5161:19;5135:51;:::i;:::-;5130:2;5123:5;5119:14;5112:75;5223:51;5270:3;5264;5253:9;5249:19;5223:51;:::i;:::-;5214:6;5207:5;5203:18;5196:79;5307:51;5354:3;5348;5337:9;5333:19;5307:51;:::i;:::-;5302:2;5295:5;5291:14;5284:75;5395:51;5442:3;5436;5425:9;5421:19;5395:51;:::i;:::-;5386:6;5379:5;5375:18;5368:79;5479:51;5526:3;5520;5509:9;5505:19;5479:51;:::i;:::-;5474:2;5467:5;5463:14;5456:75;;;;5567:51;5614:3;5608;5597:9;5593:19;5567:51;:::i;:::-;5558:6;5551:5;5547:18;5540:79;4205:1420;;;;:::o;5630:935::-;5682:5;5721:9;5716:3;5712:19;5751:6;5747:2;5743:15;5740:35;;;5771:1;5768;5761:12;5740:35;5793:22;;:::i;:::-;5784:31;;5834:6;5860:2;5856;5852:11;5849:31;;;5876:1;5873;5866:12;5849:31;5904:22;;:::i;:::-;5889:37;;5964:9;5951:23;5942:7;5935:40;6037:2;6026:9;6022:18;6009:32;6004:2;5995:7;5991:16;5984:58;6104:2;6093:9;6089:18;6076:32;6071:2;6062:7;6058:16;6051:58;6173:4;6162:9;6158:20;6145:34;6138:4;6129:7;6125:18;6118:62;6215:51;6262:3;6256;6245:9;6241:19;6215:51;:::i;:::-;6209:3;6200:7;6196:17;6189:78;6303:52;6351:3;6344:4;6333:9;6329:20;6303:52;:::i;:::-;6296:4;6287:7;6283:18;6276:80;6379:7;6372:5;6365:22;6419:51;6466:3;6461:2;6450:9;6446:18;6419:51;:::i;:::-;6414:2;6407:5;6403:14;6396:75;;;6503:55;6554:3;6548;6537:9;6533:19;6503:55;:::i;:::-;6498:2;6491:5;6487:14;6480:79;5630:935;;;;:::o;6570:1019::-;6689:6;6697;6705;6713;6766:4;6754:9;6745:7;6741:23;6737:34;6734:54;;;6784:1;6781;6774:12;6734:54;6824:9;6811:23;6853:18;6894:2;6886:6;6883:14;6880:34;;;6910:1;6907;6900:12;6880:34;6948:6;6937:9;6933:22;6923:32;;6993:7;6986:4;6982:2;6978:13;6974:27;6964:55;;7015:1;7012;7005:12;6964:55;7051:2;7038:16;7073:4;7096:2;7092;7089:10;7086:36;;;7102:18;;:::i;:::-;7144:53;7187:2;7168:13;;-1:-1:-1;;7164:27:28;7160:36;;7144:53;:::i;:::-;7131:66;;7220:2;7213:5;7206:17;7260:7;7255:2;7250;7246;7242:11;7238:20;7235:33;7232:53;;;7281:1;7278;7271:12;7232:53;7336:2;7331;7327;7323:11;7318:2;7311:5;7307:14;7294:45;7380:1;7375:2;7370;7363:5;7359:14;7355:23;7348:34;7401:5;7391:15;;7425:52;7469:7;7464:2;7453:9;7449:18;7425:52;:::i;:::-;6570:1019;;7415:62;;-1:-1:-1;;;;7524:4:28;7509:20;;7496:34;;7577:4;7562:20;7549:34;;6570:1019;-1:-1:-1;;;;6570:1019:28:o;7594:180::-;7653:6;7706:2;7694:9;7685:7;7681:23;7677:32;7674:52;;;7722:1;7719;7712:12;7674:52;-1:-1:-1;7745:23:28;;7594:180;-1:-1:-1;7594:180:28:o;7971:712::-;8025:5;8078:3;8071:4;8063:6;8059:17;8055:27;8045:55;;8096:1;8093;8086:12;8045:55;8132:6;8119:20;8158:4;8181:18;8177:2;8174:26;8171:52;;;8203:18;;:::i;:::-;8249:2;8246:1;8242:10;8272:28;8296:2;8292;8288:11;8272:28;:::i;:::-;8334:15;;;8404;;;8400:24;;;8365:12;;;;8436:15;;;8433:35;;;8464:1;8461;8454:12;8433:35;8500:2;8492:6;8488:15;8477:26;;8512:142;8528:6;8523:3;8520:15;8512:142;;;8594:17;;8582:30;;8545:12;;;;8632;;;;8512:142;;;8672:5;7971:712;-1:-1:-1;;;;;;;7971:712:28:o;8688:553::-;8799:6;8807;8815;8823;8876:3;8864:9;8855:7;8851:23;8847:33;8844:53;;;8893:1;8890;8883:12;8844:53;8929:9;8916:23;8906:33;;8986:2;8975:9;8971:18;8958:32;8948:42;;9037:2;9026:9;9022:18;9009:32;8999:42;;9092:2;9081:9;9077:18;9064:32;9119:18;9111:6;9108:30;9105:50;;;9151:1;9148;9141:12;9105:50;9174:61;9227:7;9218:6;9207:9;9203:22;9174:61;:::i;:::-;9164:71;;;8688:553;;;;;;;:::o;9246:1013::-;9396:6;9404;9412;9443:4;9488:2;9476:9;9467:7;9463:23;9459:32;9456:52;;;9504:1;9501;9494:12;9456:52;9527:43;9562:7;9551:9;9527:43;:::i;:::-;9517:53;;9589:56;9637:7;9630:4;9619:9;9615:20;9589:56;:::i;:::-;9579:66;;9690:7;9683:4;9672:9;9668:20;9664:34;9654:62;;9712:1;9709;9702:12;9654:62;9745:2;9739:9;9787:2;9779:6;9775:15;9856:6;9844:10;9841:22;9820:18;9808:10;9805:34;9802:62;9799:88;;;9867:18;;:::i;:::-;9903:2;9896:22;9967:18;;;;9938:6;9997:19;;;9994:39;;;10029:1;10026;10019:12;9994:39;10068:4;10057:9;10053:20;10082:146;10098:6;10093:3;10090:15;10082:146;;;10166:17;;10154:30;;10213:4;10204:14;;;;10115;10082:146;;;10086:3;;10247:6;10237:16;;;;9246:1013;;;;;:::o;10264:484::-;10366:6;10374;10382;10435:2;10423:9;10414:7;10410:23;10406:32;10403:52;;;10451:1;10448;10441:12;10403:52;10487:9;10474:23;10464:33;;10544:2;10533:9;10529:18;10516:32;10506:42;;10599:2;10588:9;10584:18;10571:32;10626:18;10618:6;10615:30;10612:50;;;10658:1;10655;10648:12;10612:50;10681:61;10734:7;10725:6;10714:9;10710:22;10681:61;:::i;:::-;10671:71;;;10264:484;;;;;:::o;11239:127::-;11300:10;11295:3;11291:20;11288:1;11281:31;11331:4;11328:1;11321:15;11355:4;11352:1;11345:15;11623:127;11684:10;11679:3;11675:20;11672:1;11665:31;11715:4;11712:1;11705:15;11739:4;11736:1;11729:15;11755:127;11816:10;11811:3;11807:20;11804:1;11797:31;11847:4;11844:1;11837:15;11871:4;11868:1;11861:15;11887:128;11954:9;;;11975:11;;;11972:37;;;11989:18;;:::i;12020:125::-;12085:9;;;12106:10;;;12103:36;;;12119:18;;:::i;12506:112::-;12538:1;12564;12554:35;;12569:18;;:::i;:::-;-1:-1:-1;12603:9:28;;12506:112::o;12623:120::-;12663:1;12689;12679:35;;12694:18;;:::i;:::-;-1:-1:-1;12728:9:28;;12623:120::o;12748:135::-;12787:3;12808:17;;;12805:43;;12828:18;;:::i;:::-;-1:-1:-1;12875:1:28;12864:13;;12748:135::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "broadcastSignal(bytes,((uint256,uint256,uint256,uint256,(uint256,uint256),(uint256,uint256)),(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256),((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256,uint256,uint256))),uint256,uint256)": "26e738a2", + "genRootFromPath(uint256,bytes32,bytes32[])": "cec677b8", + "getAccumulator()": "ff40807b", + "getCurrentIndex()": "0d9005ae", + "identityCommitmentHistory(uint256)": "7a6a061d", + "insertIdentity(uint256,uint256,uint256,bytes32[])": "98ac1f81", + "lagrangeTreeRoot()": "f2524d96", + "nullifierHashHistory(uint256)": "c4cd5596", + "verify(((uint256,uint256,uint256,uint256,(uint256,uint256),(uint256,uint256)),(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256),((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256,uint256,uint256))),(uint256,uint256),uint256[3])": "b3da592b" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_lagrangeTreeRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_accumulatorX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_accumulatorY\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_identityCommitment\",\"type\":\"uint256\"}],\"name\":\"InvalidIdentityCommitment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nullifierHash\",\"type\":\"uint256\"}],\"name\":\"NullifierHashAlreadySeen\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_generatedRoot\",\"type\":\"bytes32\"}],\"name\":\"RootMismatch\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_signalHash\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_externalNullifier\",\"type\":\"uint256\"}],\"name\":\"BroadcastSignal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_identityCommitment\",\"type\":\"uint256\"}],\"name\":\"InsertIdentity\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_signal\",\"type\":\"bytes\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"q1_opening\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"q2_opening\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"q3_opening\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"q4_opening\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"f_cm\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"final_poly_proof\",\"type\":\"tuple\"}],\"internalType\":\"struct Types.MultiopenProof\",\"name\":\"multiopenProof\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"q_mimc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mimc_cts\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quotient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"u_prime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"p1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"p2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w0_0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w0_1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w0_2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w1_0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w1_1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w1_2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w2_0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w2_1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w2_2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"key_0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"key_1\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Openings\",\"name\":\"openings\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"w0\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"w1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"w2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"key\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"mimc_cts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"quotient\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"u_prime\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"zi\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"ci\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"p1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"p2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"q_mimc\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"h\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"x1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y1\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G2Point\",\"name\":\"w\",\"type\":\"tuple\"}],\"internalType\":\"struct Types.Commitments\",\"name\":\"commitments\",\"type\":\"tuple\"}],\"internalType\":\"struct Types.Proof\",\"name\":\"_proof\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_nullifierHash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_externalNullifier\",\"type\":\"uint256\"}],\"name\":\"broadcastSignal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_leaf\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"_proof\",\"type\":\"bytes32[]\"}],\"name\":\"genRootFromPath\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAccumulator\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"identityCommitmentHistory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_identityCommitment\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_lagrangeLeafX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_lagrangeLeafY\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"_lagrangeMerkleProof\",\"type\":\"bytes32[]\"}],\"name\":\"insertIdentity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lagrangeTreeRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nullifierHashHistory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"q1_opening\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"q2_opening\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"q3_opening\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"q4_opening\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"f_cm\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"final_poly_proof\",\"type\":\"tuple\"}],\"internalType\":\"struct Types.MultiopenProof\",\"name\":\"multiopenProof\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"q_mimc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mimc_cts\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quotient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"u_prime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"p1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"p2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w0_0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w0_1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w0_2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w1_0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w1_1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w1_2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w2_0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w2_1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w2_2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"key_0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"key_1\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Openings\",\"name\":\"openings\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"w0\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"w1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"w2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"key\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"mimc_cts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"quotient\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"u_prime\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"zi\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"ci\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"p1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"p2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"q_mimc\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"h\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"x1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y1\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G2Point\",\"name\":\"w\",\"type\":\"tuple\"}],\"internalType\":\"struct Types.Commitments\",\"name\":\"commitments\",\"type\":\"tuple\"}],\"internalType\":\"struct Types.Proof\",\"name\":\"proof\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"accumulator\",\"type\":\"tuple\"},{\"internalType\":\"uint256[3]\",\"name\":\"publicInputs\",\"type\":\"uint256[3]\"}],\"name\":\"verify\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"sol/Semacaulk.sol\":\"Semacaulk\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"sol/BN254.sol\":{\"keccak256\":\"0x3387e0c55cd2bdcedf8d3e5cf66a97f397e4673e8f040af92f16e6ec6b248de6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4fa56bc2c09b9fb96b18a3a4d5bb2734eae0f5b50229cb42bccf9bd4a58e5309\",\"dweb:/ipfs/QmQuAo1NLKqKb1cqx9x8mPxWsPY4LHjbJg5KR7feaDqkPd\"]},\"sol/Constants.sol\":{\"keccak256\":\"0x3e119809d4115dd17bd20fdb86436bd5af327127ed223801456e7a917d6054e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb67d5412ac9bdf638246fae6d7fccc6de23b36486308b578211e44847a64616\",\"dweb:/ipfs/QmQY3Ezd3RHtpofEPRRsipYjMzrgvmk5vG6hNL2bdURMxx\"]},\"sol/KeccakMT.sol\":{\"keccak256\":\"0x090d7ba059de3a5a6e6e87f650e4a783bed78733e26a52d77897dc43106fdb97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5f3785174144e76d936e540c932b5efecbf9645de7875812ecf6c0cdf4f7d8d5\",\"dweb:/ipfs/QmZHjDkETj5aej3zQfEtW3hDsYzwBuYnCHoFXtEtPDKp6i\"]},\"sol/Lagrange.sol\":{\"keccak256\":\"0x9c4449d4146e90a99094c38dffb583c7017a2453b9254b4662d4c91387593405\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://41b3006cbd16acb0f29a008822d65381bbe779eabdf1ce86e952374fa5c75422\",\"dweb:/ipfs/QmYmjRzSEzwxJHkVSb7sZVLCARDz76Gnpdr5xnKfr2wMt2\"]},\"sol/Semacaulk.sol\":{\"keccak256\":\"0x323741f3baeb46574c0ab92b4167535f2822e73364b813b1d4ed93ee2da59743\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dc18d702f5118fa83afee3a231ce8b6fd80708daa7d3f1d20676a686f07df773\",\"dweb:/ipfs/Qmci3vhLmPnxJhWMQmR71gufK9Gmy1AmzgTsqRuSp9Sk4v\"]},\"sol/Transcript.sol\":{\"keccak256\":\"0x376df72539581cd652d4aea09d0c18accc1ee001ee19f80fea89f3e1a7d40e18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0dc8d7f873f9f5d45953bea9a394073ffa2d0930280425b973fc1f8be22a9ec5\",\"dweb:/ipfs/Qmbkg6WS8Ajjr3QLe6TtrdVmyqHaLD7cr8WHjk9uGnPQW1\"]},\"sol/Types.sol\":{\"keccak256\":\"0xbc4b390b5751a05cec4078017017130740d257fa1d4e03ee21315c14876aaaef\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6f30ac31762d9dccdbc1e2c542af5366e4f7513467a8234dc7183f6ce1fc3cb\",\"dweb:/ipfs/QmS8YspTKQNzaAgvdZU1VF8EZSk76Zzh5pKFz1TNghBCKo\"]},\"sol/Verifier.sol\":{\"keccak256\":\"0x1a63ed69635cba15d0863bc2bce9e1c4176fc93eda4103d6077536c953365429\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://92f7ed4b5f2a2d9c090d273462c983ac0759f96bb772603f84c314bb7ba29608\",\"dweb:/ipfs/QmRNLN1iW8xstb8FHixNAmdbD5UHKRqr5KNsva85ugkofC\"]}},\"version\":1}", + "metadata": { + "compiler": { + "version": "0.8.17+commit.8df45f5f" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_lagrangeTreeRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_accumulatorX", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_accumulatorY", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_identityCommitment", + "type": "uint256" + } + ], + "type": "error", + "name": "InvalidIdentityCommitment" + }, + { + "inputs": [], + "type": "error", + "name": "InvalidProof" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_nullifierHash", + "type": "uint256" + } + ], + "type": "error", + "name": "NullifierHashAlreadySeen" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_generatedRoot", + "type": "bytes32" + } + ], + "type": "error", + "name": "RootMismatch" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_signalHash", + "type": "uint256", + "indexed": true + }, + { + "internalType": "uint256", + "name": "_externalNullifier", + "type": "uint256", + "indexed": true + } + ], + "type": "event", + "name": "BroadcastSignal", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256", + "indexed": true + }, + { + "internalType": "uint256", + "name": "_identityCommitment", + "type": "uint256", + "indexed": true + } + ], + "type": "event", + "name": "InsertIdentity", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_signal", + "type": "bytes" + }, + { + "internalType": "struct Types.Proof", + "name": "_proof", + "type": "tuple", + "components": [ + { + "internalType": "struct Types.MultiopenProof", + "name": "multiopenProof", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "q1_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q2_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q3_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q4_opening", + "type": "uint256" + }, + { + "internalType": "struct Types.G1Point", + "name": "f_cm", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "final_poly_proof", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + } + ] + }, + { + "internalType": "struct Types.Openings", + "name": "openings", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "q_mimc", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mimc_cts", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quotient", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "u_prime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "key_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "key_1", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.Commitments", + "name": "commitments", + "type": "tuple", + "components": [ + { + "internalType": "struct Types.G1Point", + "name": "w0", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "w1", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "w2", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "key", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "mimc_cts", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "quotient", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "u_prime", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "zi", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "ci", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "p1", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "p2", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "q_mimc", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "h", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G2Point", + "name": "w", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "x1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y1", + "type": "uint256" + } + ] + } + ] + } + ] + }, + { + "internalType": "uint256", + "name": "_nullifierHash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_externalNullifier", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "broadcastSignal" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "_leaf", + "type": "bytes32" + }, + { + "internalType": "bytes32[]", + "name": "_proof", + "type": "bytes32[]" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "genRootFromPath", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAccumulator", + "outputs": [ + { + "internalType": "struct Types.G1Point", + "name": "", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getCurrentIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "identityCommitmentHistory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_identityCommitment", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_lagrangeLeafX", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_lagrangeLeafY", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "_lagrangeMerkleProof", + "type": "bytes32[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "insertIdentity" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "lagrangeTreeRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "nullifierHashHistory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "struct Types.Proof", + "name": "proof", + "type": "tuple", + "components": [ + { + "internalType": "struct Types.MultiopenProof", + "name": "multiopenProof", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "q1_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q2_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q3_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q4_opening", + "type": "uint256" + }, + { + "internalType": "struct Types.G1Point", + "name": "f_cm", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "final_poly_proof", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + } + ] + }, + { + "internalType": "struct Types.Openings", + "name": "openings", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "q_mimc", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mimc_cts", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quotient", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "u_prime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "key_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "key_1", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.Commitments", + "name": "commitments", + "type": "tuple", + "components": [ + { + "internalType": "struct Types.G1Point", + "name": "w0", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "w1", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "w2", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "key", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "mimc_cts", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "quotient", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "u_prime", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "zi", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "ci", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "p1", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "p2", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "q_mimc", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "h", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G2Point", + "name": "w", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "x1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y1", + "type": "uint256" + } + ] + } + ] + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "accumulator", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "uint256[3]", + "name": "publicInputs", + "type": "uint256[3]" + } + ], + "stateMutability": "view", + "type": "function", + "name": "verify", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + ":ds-test/=lib/forge-std/lib/ds-test/src/", + ":forge-std/=lib/forge-std/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "ipfs" + }, + "compilationTarget": { + "sol/Semacaulk.sol": "Semacaulk" + }, + "libraries": {} + }, + "sources": { + "sol/BN254.sol": { + "keccak256": "0x3387e0c55cd2bdcedf8d3e5cf66a97f397e4673e8f040af92f16e6ec6b248de6", + "urls": [ + "bzz-raw://4fa56bc2c09b9fb96b18a3a4d5bb2734eae0f5b50229cb42bccf9bd4a58e5309", + "dweb:/ipfs/QmQuAo1NLKqKb1cqx9x8mPxWsPY4LHjbJg5KR7feaDqkPd" + ], + "license": "MIT" + }, + "sol/Constants.sol": { + "keccak256": "0x3e119809d4115dd17bd20fdb86436bd5af327127ed223801456e7a917d6054e8", + "urls": [ + "bzz-raw://fb67d5412ac9bdf638246fae6d7fccc6de23b36486308b578211e44847a64616", + "dweb:/ipfs/QmQY3Ezd3RHtpofEPRRsipYjMzrgvmk5vG6hNL2bdURMxx" + ], + "license": "MIT" + }, + "sol/KeccakMT.sol": { + "keccak256": "0x090d7ba059de3a5a6e6e87f650e4a783bed78733e26a52d77897dc43106fdb97", + "urls": [ + "bzz-raw://5f3785174144e76d936e540c932b5efecbf9645de7875812ecf6c0cdf4f7d8d5", + "dweb:/ipfs/QmZHjDkETj5aej3zQfEtW3hDsYzwBuYnCHoFXtEtPDKp6i" + ], + "license": "MIT" + }, + "sol/Lagrange.sol": { + "keccak256": "0x9c4449d4146e90a99094c38dffb583c7017a2453b9254b4662d4c91387593405", + "urls": [ + "bzz-raw://41b3006cbd16acb0f29a008822d65381bbe779eabdf1ce86e952374fa5c75422", + "dweb:/ipfs/QmYmjRzSEzwxJHkVSb7sZVLCARDz76Gnpdr5xnKfr2wMt2" + ], + "license": "MIT" + }, + "sol/Semacaulk.sol": { + "keccak256": "0x323741f3baeb46574c0ab92b4167535f2822e73364b813b1d4ed93ee2da59743", + "urls": [ + "bzz-raw://dc18d702f5118fa83afee3a231ce8b6fd80708daa7d3f1d20676a686f07df773", + "dweb:/ipfs/Qmci3vhLmPnxJhWMQmR71gufK9Gmy1AmzgTsqRuSp9Sk4v" + ], + "license": "MIT" + }, + "sol/Transcript.sol": { + "keccak256": "0x376df72539581cd652d4aea09d0c18accc1ee001ee19f80fea89f3e1a7d40e18", + "urls": [ + "bzz-raw://0dc8d7f873f9f5d45953bea9a394073ffa2d0930280425b973fc1f8be22a9ec5", + "dweb:/ipfs/Qmbkg6WS8Ajjr3QLe6TtrdVmyqHaLD7cr8WHjk9uGnPQW1" + ], + "license": "MIT" + }, + "sol/Types.sol": { + "keccak256": "0xbc4b390b5751a05cec4078017017130740d257fa1d4e03ee21315c14876aaaef", + "urls": [ + "bzz-raw://d6f30ac31762d9dccdbc1e2c542af5366e4f7513467a8234dc7183f6ce1fc3cb", + "dweb:/ipfs/QmS8YspTKQNzaAgvdZU1VF8EZSk76Zzh5pKFz1TNghBCKo" + ], + "license": "MIT" + }, + "sol/Verifier.sol": { + "keccak256": "0x1a63ed69635cba15d0863bc2bce9e1c4176fc93eda4103d6077536c953365429", + "urls": [ + "bzz-raw://92f7ed4b5f2a2d9c090d273462c983ac0759f96bb772603f84c314bb7ba29608", + "dweb:/ipfs/QmRNLN1iW8xstb8FHixNAmdbD5UHKRqr5KNsva85ugkofC" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "ast": { + "absolutePath": "sol/Semacaulk.sol", + "id": 25471, + "exportedSymbols": { + "BN254": [ + 24968 + ], + "Constants": [ + 25007 + ], + "KeccakMT": [ + 25090 + ], + "Semacaulk": [ + 25470 + ], + "TranscriptLibrary": [ + 25964 + ], + "Types": [ + 26183 + ], + "Verifier": [ + 26738 + ] + }, + "nodeType": "SourceUnit", + "src": "32:5040:20", + "nodes": [ + { + "id": 25140, + "nodeType": "PragmaDirective", + "src": "32:24:20", + "nodes": [], + "literals": [ + "solidity", + "^", + "0.8", + ".13" + ] + }, + { + "id": 25142, + "nodeType": "ImportDirective", + "src": "58:42:20", + "nodes": [], + "absolutePath": "sol/KeccakMT.sol", + "file": "./KeccakMT.sol", + "nameLocation": "-1:-1:-1", + "scope": 25471, + "sourceUnit": 25091, + "symbolAliases": [ + { + "foreign": { + "id": 25141, + "name": "KeccakMT", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25090, + "src": "67:8:20", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 25144, + "nodeType": "ImportDirective", + "src": "101:36:20", + "nodes": [], + "absolutePath": "sol/BN254.sol", + "file": "./BN254.sol", + "nameLocation": "-1:-1:-1", + "scope": 25471, + "sourceUnit": 24969, + "symbolAliases": [ + { + "foreign": { + "id": 25143, + "name": "BN254", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24968, + "src": "110:5:20", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 25146, + "nodeType": "ImportDirective", + "src": "138:53:20", + "nodes": [], + "absolutePath": "sol/Transcript.sol", + "file": "./Transcript.sol", + "nameLocation": "-1:-1:-1", + "scope": 25471, + "sourceUnit": 25965, + "symbolAliases": [ + { + "foreign": { + "id": 25145, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "147:17:20", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 25148, + "nodeType": "ImportDirective", + "src": "192:36:20", + "nodes": [], + "absolutePath": "sol/Types.sol", + "file": "./Types.sol", + "nameLocation": "-1:-1:-1", + "scope": 25471, + "sourceUnit": 26184, + "symbolAliases": [ + { + "foreign": { + "id": 25147, + "name": "Types", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26183, + "src": "201:5:20", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 25150, + "nodeType": "ImportDirective", + "src": "229:44:20", + "nodes": [], + "absolutePath": "sol/Constants.sol", + "file": "./Constants.sol", + "nameLocation": "-1:-1:-1", + "scope": 25471, + "sourceUnit": 25008, + "symbolAliases": [ + { + "foreign": { + "id": 25149, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "238:9:20", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 25152, + "nodeType": "ImportDirective", + "src": "274:42:20", + "nodes": [], + "absolutePath": "sol/Verifier.sol", + "file": "./Verifier.sol", + "nameLocation": "-1:-1:-1", + "scope": 25471, + "sourceUnit": 26739, + "symbolAliases": [ + { + "foreign": { + "id": 25151, + "name": "Verifier", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26738, + "src": "283:8:20", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 25470, + "nodeType": "ContractDefinition", + "src": "318:4753:20", + "nodes": [ + { + "id": 25160, + "nodeType": "VariableDeclaration", + "src": "372:31:20", + "nodes": [], + "constant": false, + "functionSelector": "f2524d96", + "mutability": "mutable", + "name": "lagrangeTreeRoot", + "nameLocation": "387:16:20", + "scope": 25470, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 25159, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "372:7:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "public" + }, + { + "id": 25162, + "nodeType": "VariableDeclaration", + "src": "409:20:20", + "nodes": [], + "constant": false, + "mutability": "mutable", + "name": "currentIndex", + "nameLocation": "417:12:20", + "scope": 25470, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25161, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "409:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "id": 25165, + "nodeType": "VariableDeclaration", + "src": "435:25:20", + "nodes": [], + "constant": false, + "mutability": "mutable", + "name": "accumulator", + "nameLocation": "449:11:20", + "scope": 25470, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage", + "typeString": "struct Types.G1Point" + }, + "typeName": { + "id": 25164, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 25163, + "name": "Types.G1Point", + "nameLocations": [ + "435:5:20", + "441:7:20" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25971, + "src": "435:13:20" + }, + "referencedDeclaration": 25971, + "src": "435:13:20", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage_ptr", + "typeString": "struct Types.G1Point" + } + }, + "visibility": "internal" + }, + { + "id": 25179, + "nodeType": "VariableDeclaration", + "src": "1083:114:20", + "nodes": [], + "constant": false, + "mutability": "mutable", + "name": "NOTHING_UP_MY_SLEEVE_ZERO", + "nameLocation": "1091:25:20", + "scope": 25470, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25166, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1083:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 25178, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "hexValue": "53656d616361756c6b", + "id": 25172, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1163:11:20", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_804050588f69e25f5fbecd1380a44a9ed58106da09f470b088355b0f7c671a27", + "typeString": "literal_string \"Semacaulk\"" + }, + "value": "Semacaulk" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_804050588f69e25f5fbecd1380a44a9ed58106da09f470b088355b0f7c671a27", + "typeString": "literal_string \"Semacaulk\"" + } + ], + "expression": { + "id": 25170, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1146:3:20", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 25171, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1150:12:20", + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "1146:16:20", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 25173, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1146:29:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 25169, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1136:9:20", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 25174, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1136:40:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 25168, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1128:7:20", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 25167, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1128:7:20", + "typeDescriptions": {} + } + }, + "id": 25175, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1128:49:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "%", + "rightExpression": { + "expression": { + "id": 25176, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "1180:9:20", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 25177, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1190:7:20", + "memberName": "PRIME_R", + "nodeType": "MemberAccess", + "referencedDeclaration": 24976, + "src": "1180:17:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1128:69:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "id": 25183, + "nodeType": "VariableDeclaration", + "src": "1204:53:20", + "nodes": [], + "constant": false, + "functionSelector": "c4cd5596", + "mutability": "mutable", + "name": "nullifierHashHistory", + "nameLocation": "1237:20:20", + "scope": 25470, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bool_$", + "typeString": "mapping(uint256 => bool)" + }, + "typeName": { + "id": 25182, + "keyType": { + "id": 25180, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1213:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Mapping", + "src": "1204:25:20", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bool_$", + "typeString": "mapping(uint256 => bool)" + }, + "valueType": { + "id": 25181, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1224:4:20", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "visibility": "public" + }, + { + "id": 25187, + "nodeType": "VariableDeclaration", + "src": "1263:58:20", + "nodes": [], + "constant": false, + "functionSelector": "7a6a061d", + "mutability": "mutable", + "name": "identityCommitmentHistory", + "nameLocation": "1296:25:20", + "scope": 25470, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bool_$", + "typeString": "mapping(uint256 => bool)" + }, + "typeName": { + "id": 25186, + "keyType": { + "id": 25184, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1272:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Mapping", + "src": "1263:25:20", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bool_$", + "typeString": "mapping(uint256 => bool)" + }, + "valueType": { + "id": 25185, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1283:4:20", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "visibility": "public" + }, + { + "id": 25191, + "nodeType": "ErrorDefinition", + "src": "1349:61:20", + "nodes": [], + "errorSelector": "f2c27cc1", + "name": "InvalidIdentityCommitment", + "nameLocation": "1355:25:20", + "parameters": { + "id": 25190, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25189, + "mutability": "mutable", + "name": "_identityCommitment", + "nameLocation": "1389:19:20", + "nodeType": "VariableDeclaration", + "scope": 25191, + "src": "1381:27:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25188, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1381:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1380:29:20" + } + }, + { + "id": 25195, + "nodeType": "ErrorDefinition", + "src": "1415:43:20", + "nodes": [], + "errorSelector": "7388a416", + "name": "RootMismatch", + "nameLocation": "1421:12:20", + "parameters": { + "id": 25194, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25193, + "mutability": "mutable", + "name": "_generatedRoot", + "nameLocation": "1442:14:20", + "nodeType": "VariableDeclaration", + "scope": 25195, + "src": "1434:22:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 25192, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1434:7:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1433:24:20" + } + }, + { + "id": 25199, + "nodeType": "ErrorDefinition", + "src": "1463:55:20", + "nodes": [], + "errorSelector": "003a4c46", + "name": "NullifierHashAlreadySeen", + "nameLocation": "1469:24:20", + "parameters": { + "id": 25198, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25197, + "mutability": "mutable", + "name": "_nullifierHash", + "nameLocation": "1502:14:20", + "nodeType": "VariableDeclaration", + "scope": 25199, + "src": "1494:22:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25196, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1494:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1493:24:20" + } + }, + { + "id": 25201, + "nodeType": "ErrorDefinition", + "src": "1523:21:20", + "nodes": [], + "errorSelector": "09bde339", + "name": "InvalidProof", + "nameLocation": "1529:12:20", + "parameters": { + "id": 25200, + "nodeType": "ParameterList", + "parameters": [], + "src": "1541:2:20" + } + }, + { + "id": 25207, + "nodeType": "EventDefinition", + "src": "1564:82:20", + "nodes": [], + "anonymous": false, + "eventSelector": "8702906097e936d09eb559ef170474b37e9aa31ede997a4c1cc4ce8c8d9babf8", + "name": "InsertIdentity", + "nameLocation": "1570:14:20", + "parameters": { + "id": 25206, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25203, + "indexed": true, + "mutability": "mutable", + "name": "_index", + "nameLocation": "1601:6:20", + "nodeType": "VariableDeclaration", + "scope": 25207, + "src": "1585:22:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25202, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1585:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 25205, + "indexed": true, + "mutability": "mutable", + "name": "_identityCommitment", + "nameLocation": "1625:19:20", + "nodeType": "VariableDeclaration", + "scope": 25207, + "src": "1609:35:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25204, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1609:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1584:61:20" + } + }, + { + "id": 25213, + "nodeType": "EventDefinition", + "src": "1651:87:20", + "nodes": [], + "anonymous": false, + "eventSelector": "8147c22f317f8c99f840af736ce6f9cb078c49c2378097fd42202a9efbbeed10", + "name": "BroadcastSignal", + "nameLocation": "1657:15:20", + "parameters": { + "id": 25212, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25209, + "indexed": true, + "mutability": "mutable", + "name": "_signalHash", + "nameLocation": "1689:11:20", + "nodeType": "VariableDeclaration", + "scope": 25213, + "src": "1673:27:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25208, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1673:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 25211, + "indexed": true, + "mutability": "mutable", + "name": "_externalNullifier", + "nameLocation": "1718:18:20", + "nodeType": "VariableDeclaration", + "scope": 25213, + "src": "1702:34:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25210, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1702:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1672:65:20" + } + }, + { + "id": 25235, + "nodeType": "FunctionDefinition", + "src": "1744:319:20", + "nodes": [], + "body": { + "id": 25234, + "nodeType": "Block", + "src": "1859:204:20", + "nodes": [], + "statements": [ + { + "expression": { + "id": 25224, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 25222, + "name": "lagrangeTreeRoot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25160, + "src": "1916:16:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 25223, + "name": "_lagrangeTreeRoot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25215, + "src": "1935:17:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "1916:36:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 25225, + "nodeType": "ExpressionStatement", + "src": "1916:36:20" + }, + { + "expression": { + "id": 25232, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 25226, + "name": "accumulator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25165, + "src": "1999:11:20", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage", + "typeString": "struct Types.G1Point storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 25229, + "name": "_accumulatorX", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25217, + "src": "2027:13:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 25230, + "name": "_accumulatorY", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25219, + "src": "2042:13:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 25227, + "name": "Types", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26183, + "src": "2013:5:20", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Types_$26183_$", + "typeString": "type(library Types)" + } + }, + "id": 25228, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2019:7:20", + "memberName": "G1Point", + "nodeType": "MemberAccess", + "referencedDeclaration": 25971, + "src": "2013:13:20", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_G1Point_$25971_storage_ptr_$", + "typeString": "type(struct Types.G1Point storage pointer)" + } + }, + "id": 25231, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2013:43:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + "src": "1999:57:20", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage", + "typeString": "struct Types.G1Point storage ref" + } + }, + "id": 25233, + "nodeType": "ExpressionStatement", + "src": "1999:57:20" + } + ] + }, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "parameters": { + "id": 25220, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25215, + "mutability": "mutable", + "name": "_lagrangeTreeRoot", + "nameLocation": "1773:17:20", + "nodeType": "VariableDeclaration", + "scope": 25235, + "src": "1765:25:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 25214, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1765:7:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 25217, + "mutability": "mutable", + "name": "_accumulatorX", + "nameLocation": "1808:13:20", + "nodeType": "VariableDeclaration", + "scope": 25235, + "src": "1800:21:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25216, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1800:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 25219, + "mutability": "mutable", + "name": "_accumulatorY", + "nameLocation": "1839:13:20", + "nodeType": "VariableDeclaration", + "scope": 25235, + "src": "1831:21:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25218, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1831:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1755:103:20" + }, + "returnParameters": { + "id": 25221, + "nodeType": "ParameterList", + "parameters": [], + "src": "1859:0:20" + }, + "scope": 25470, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 25355, + "nodeType": "FunctionDefinition", + "src": "2069:1490:20", + "nodes": [], + "body": { + "id": 25354, + "nodeType": "Block", + "src": "2254:1305:20", + "nodes": [], + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 25254, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 25250, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 25247, + "name": "_identityCommitment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25237, + "src": "2281:19:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "expression": { + "id": 25248, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "2303:9:20", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 25249, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2313:7:20", + "memberName": "PRIME_R", + "nodeType": "MemberAccess", + "referencedDeclaration": 24976, + "src": "2303:17:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2281:39:20", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 25253, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 25251, + "name": "_identityCommitment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25237, + "src": "2336:19:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 25252, + "name": "NOTHING_UP_MY_SLEEVE_ZERO", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25179, + "src": "2359:25:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2336:48:20", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2281:103:20", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 25260, + "nodeType": "IfStatement", + "src": "2264:234:20", + "trueBody": { + "id": 25259, + "nodeType": "Block", + "src": "2395:103:20", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "id": 25256, + "name": "_identityCommitment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25237, + "src": "2465:19:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 25255, + "name": "InvalidIdentityCommitment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25191, + "src": "2416:25:20", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 25257, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [ + "2444:19:20" + ], + "names": [ + "_identityCommitment" + ], + "nodeType": "FunctionCall", + "src": "2416:71:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 25258, + "nodeType": "RevertStatement", + "src": "2409:78:20" + } + ] + } + }, + { + "assignments": [ + 25262 + ], + "declarations": [ + { + "constant": false, + "id": 25262, + "mutability": "mutable", + "name": "index", + "nameLocation": "2516:5:20", + "nodeType": "VariableDeclaration", + "scope": 25354, + "src": "2508:13:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25261, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2508:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 25264, + "initialValue": { + "id": 25263, + "name": "currentIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25162, + "src": "2524:12:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2508:28:20" + }, + { + "assignments": [ + 25266 + ], + "declarations": [ + { + "constant": false, + "id": 25266, + "mutability": "mutable", + "name": "lagrangeLeaf", + "nameLocation": "2554:12:20", + "nodeType": "VariableDeclaration", + "scope": 25354, + "src": "2546:20:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 25265, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2546:7:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 25274, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 25270, + "name": "_lagrangeLeafX", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25239, + "src": "2596:14:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 25271, + "name": "_lagrangeLeafY", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25241, + "src": "2612:14:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 25268, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2579:3:20", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 25269, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2583:12:20", + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "2579:16:20", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 25272, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2579:48:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 25267, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2569:9:20", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 25273, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2569:59:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2546:82:20" + }, + { + "assignments": [ + 25276 + ], + "declarations": [ + { + "constant": false, + "id": 25276, + "mutability": "mutable", + "name": "generatedRoot", + "nameLocation": "2725:13:20", + "nodeType": "VariableDeclaration", + "scope": 25354, + "src": "2717:21:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 25275, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2717:7:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 25282, + "initialValue": { + "arguments": [ + { + "id": 25278, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25262, + "src": "2770:5:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 25279, + "name": "lagrangeLeaf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25266, + "src": "2789:12:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 25280, + "name": "_lagrangeMerkleProof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25244, + "src": "2815:20:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", + "typeString": "bytes32[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", + "typeString": "bytes32[] memory" + } + ], + "id": 25277, + "name": "genRootFromPath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25078, + "src": "2741:15:20", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_bytes32_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (uint256,bytes32,bytes32[] memory) pure returns (bytes32)" + } + }, + "id": 25281, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2741:104:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2717:128:20" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 25285, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 25283, + "name": "generatedRoot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25276, + "src": "2860:13:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 25284, + "name": "lagrangeTreeRoot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25160, + "src": "2877:16:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2860:33:20", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 25291, + "nodeType": "IfStatement", + "src": "2856:118:20", + "trueBody": { + "id": 25290, + "nodeType": "Block", + "src": "2895:79:20", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "id": 25287, + "name": "generatedRoot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25276, + "src": "2947:13:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 25286, + "name": "RootMismatch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25195, + "src": "2916:12:20", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$__$", + "typeString": "function (bytes32) pure" + } + }, + "id": 25288, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [ + "2931:14:20" + ], + "names": [ + "_generatedRoot" + ], + "nodeType": "FunctionCall", + "src": "2916:47:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 25289, + "nodeType": "RevertStatement", + "src": "2909:54:20" + } + ] + } + }, + { + "assignments": [ + 25293 + ], + "declarations": [ + { + "constant": false, + "id": 25293, + "mutability": "mutable", + "name": "n", + "nameLocation": "3035:1:20", + "nodeType": "VariableDeclaration", + "scope": 25354, + "src": "3027:9:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25292, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3027:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 25296, + "initialValue": { + "expression": { + "id": 25294, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "3039:9:20", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 25295, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "3049:7:20", + "memberName": "PRIME_R", + "nodeType": "MemberAccess", + "referencedDeclaration": 24976, + "src": "3039:17:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3027:29:20" + }, + { + "assignments": [ + 25298 + ], + "declarations": [ + { + "constant": false, + "id": 25298, + "mutability": "mutable", + "name": "negZero", + "nameLocation": "3074:7:20", + "nodeType": "VariableDeclaration", + "scope": 25354, + "src": "3066:15:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25297, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3066:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 25306, + "initialValue": { + "arguments": [ + { + "id": 25300, + "name": "NOTHING_UP_MY_SLEEVE_ZERO", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25179, + "src": "3091:25:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 25303, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 25301, + "name": "n", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25293, + "src": "3118:1:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 25302, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3122:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3118:5:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 25304, + "name": "n", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25293, + "src": "3125:1:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 25299, + "name": "mulmod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -16, + "src": "3084:6:20", + "typeDescriptions": { + "typeIdentifier": "t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 25305, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3084:43:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3066:61:20" + }, + { + "assignments": [ + 25308 + ], + "declarations": [ + { + "constant": false, + "id": 25308, + "mutability": "mutable", + "name": "vMinusZero", + "nameLocation": "3145:10:20", + "nodeType": "VariableDeclaration", + "scope": 25354, + "src": "3137:18:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25307, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3137:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 25314, + "initialValue": { + "arguments": [ + { + "id": 25310, + "name": "_identityCommitment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25237, + "src": "3165:19:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 25311, + "name": "negZero", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25298, + "src": "3186:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 25312, + "name": "n", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25293, + "src": "3195:1:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 25309, + "name": "addmod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -2, + "src": "3158:6:20", + "typeDescriptions": { + "typeIdentifier": "t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 25313, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3158:39:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3137:60:20" + }, + { + "assignments": [ + 25319 + ], + "declarations": [ + { + "constant": false, + "id": 25319, + "mutability": "mutable", + "name": "l", + "nameLocation": "3229:1:20", + "nodeType": "VariableDeclaration", + "scope": 25354, + "src": "3208:22:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point" + }, + "typeName": { + "id": 25318, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 25317, + "name": "Types.G1Point", + "nameLocations": [ + "3208:5:20", + "3214:7:20" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25971, + "src": "3208:13:20" + }, + "referencedDeclaration": 25971, + "src": "3208:13:20", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage_ptr", + "typeString": "struct Types.G1Point" + } + }, + "visibility": "internal" + } + ], + "id": 25325, + "initialValue": { + "arguments": [ + { + "id": 25322, + "name": "_lagrangeLeafX", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25239, + "src": "3247:14:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 25323, + "name": "_lagrangeLeafY", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25241, + "src": "3263:14:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 25320, + "name": "Types", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26183, + "src": "3233:5:20", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Types_$26183_$", + "typeString": "type(library Types)" + } + }, + "id": 25321, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3239:7:20", + "memberName": "G1Point", + "nodeType": "MemberAccess", + "referencedDeclaration": 25971, + "src": "3233:13:20", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_G1Point_$25971_storage_ptr_$", + "typeString": "type(struct Types.G1Point storage pointer)" + } + }, + "id": 25324, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3233:45:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3208:70:20" + }, + { + "assignments": [ + 25330 + ], + "declarations": [ + { + "constant": false, + "id": 25330, + "mutability": "mutable", + "name": "newPoint", + "nameLocation": "3310:8:20", + "nodeType": "VariableDeclaration", + "scope": 25354, + "src": "3289:29:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point" + }, + "typeName": { + "id": 25329, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 25328, + "name": "Types.G1Point", + "nameLocations": [ + "3289:5:20", + "3295:7:20" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25971, + "src": "3289:13:20" + }, + "referencedDeclaration": 25971, + "src": "3289:13:20", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage_ptr", + "typeString": "struct Types.G1Point" + } + }, + "visibility": "internal" + } + ], + "id": 25335, + "initialValue": { + "arguments": [ + { + "id": 25332, + "name": "l", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25319, + "src": "3325:1:20", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + { + "id": 25333, + "name": "vMinusZero", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25308, + "src": "3328:10:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 25331, + "name": "mul", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24862, + "src": "3321:3:20", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_G1Point_$25971_memory_ptr_$_t_uint256_$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function (struct Types.G1Point memory,uint256) view returns (struct Types.G1Point memory)" + } + }, + "id": 25334, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3321:18:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3289:50:20" + }, + { + "expression": { + "id": 25341, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 25336, + "name": "accumulator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25165, + "src": "3387:11:20", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage", + "typeString": "struct Types.G1Point storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 25338, + "name": "accumulator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25165, + "src": "3406:11:20", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage", + "typeString": "struct Types.G1Point storage ref" + } + }, + { + "id": 25339, + "name": "newPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25330, + "src": "3419:8:20", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_storage", + "typeString": "struct Types.G1Point storage ref" + }, + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + ], + "id": 25337, + "name": "plus", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24927, + "src": "3401:4:20", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_G1Point_$25971_memory_ptr_$_t_struct$_G1Point_$25971_memory_ptr_$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function (struct Types.G1Point memory,struct Types.G1Point memory) view returns (struct Types.G1Point memory)" + } + }, + "id": 25340, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3401:27:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + "src": "3387:41:20", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage", + "typeString": "struct Types.G1Point storage ref" + } + }, + "id": 25342, + "nodeType": "ExpressionStatement", + "src": "3387:41:20" + }, + { + "expression": { + "id": 25347, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 25343, + "name": "currentIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25162, + "src": "3470:12:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 25346, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 25344, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25262, + "src": "3485:5:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 25345, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3493:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3485:9:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3470:24:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 25348, + "nodeType": "ExpressionStatement", + "src": "3470:24:20" + }, + { + "eventCall": { + "arguments": [ + { + "id": 25350, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25262, + "src": "3525:5:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 25351, + "name": "_identityCommitment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25237, + "src": "3532:19:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 25349, + "name": "InsertIdentity", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25207, + "src": "3510:14:20", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 25352, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3510:42:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 25353, + "nodeType": "EmitStatement", + "src": "3505:47:20" + } + ] + }, + "functionSelector": "98ac1f81", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "insertIdentity", + "nameLocation": "2078:14:20", + "parameters": { + "id": 25245, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25237, + "mutability": "mutable", + "name": "_identityCommitment", + "nameLocation": "2110:19:20", + "nodeType": "VariableDeclaration", + "scope": 25355, + "src": "2102:27:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25236, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2102:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 25239, + "mutability": "mutable", + "name": "_lagrangeLeafX", + "nameLocation": "2147:14:20", + "nodeType": "VariableDeclaration", + "scope": 25355, + "src": "2139:22:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25238, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2139:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 25241, + "mutability": "mutable", + "name": "_lagrangeLeafY", + "nameLocation": "2179:14:20", + "nodeType": "VariableDeclaration", + "scope": 25355, + "src": "2171:22:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25240, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2171:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 25244, + "mutability": "mutable", + "name": "_lagrangeMerkleProof", + "nameLocation": "2220:20:20", + "nodeType": "VariableDeclaration", + "scope": 25355, + "src": "2203:37:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", + "typeString": "bytes32[]" + }, + "typeName": { + "baseType": { + "id": 25242, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2203:7:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 25243, + "nodeType": "ArrayTypeName", + "src": "2203:9:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", + "typeString": "bytes32[]" + } + }, + "visibility": "internal" + } + ], + "src": "2092:154:20" + }, + "returnParameters": { + "id": 25246, + "nodeType": "ParameterList", + "parameters": [], + "src": "2254:0:20" + }, + "scope": 25470, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 25435, + "nodeType": "FunctionDefinition", + "src": "3565:976:20", + "nodes": [], + "body": { + "id": 25434, + "nodeType": "Block", + "src": "3736:805:20", + "nodes": [], + "statements": [ + { + "condition": { + "baseExpression": { + "id": 25367, + "name": "nullifierHashHistory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25183, + "src": "3808:20:20", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bool_$", + "typeString": "mapping(uint256 => bool)" + } + }, + "id": 25369, + "indexExpression": { + "id": 25368, + "name": "_nullifierHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25362, + "src": "3829:14:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3808:36:20", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 25375, + "nodeType": "IfStatement", + "src": "3804:134:20", + "trueBody": { + "id": 25374, + "nodeType": "Block", + "src": "3846:92:20", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "id": 25371, + "name": "_nullifierHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25362, + "src": "3910:14:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 25370, + "name": "NullifierHashAlreadySeen", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25199, + "src": "3867:24:20", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 25372, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [ + "3894:14:20" + ], + "names": [ + "_nullifierHash" + ], + "nodeType": "FunctionCall", + "src": "3867:60:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 25373, + "nodeType": "RevertStatement", + "src": "3860:67:20" + } + ] + } + }, + { + "assignments": [ + 25377 + ], + "declarations": [ + { + "constant": false, + "id": 25377, + "mutability": "mutable", + "name": "signalHash", + "nameLocation": "3956:10:20", + "nodeType": "VariableDeclaration", + "scope": 25434, + "src": "3948:18:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25376, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3948:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 25381, + "initialValue": { + "arguments": [ + { + "id": 25379, + "name": "_signal", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25357, + "src": "3980:7:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 25378, + "name": "hashSignal", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25452, + "src": "3969:10:20", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (bytes memory) pure returns (uint256)" + } + }, + "id": 25380, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3969:19:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3948:40:20" + }, + { + "assignments": [ + 25387 + ], + "declarations": [ + { + "constant": false, + "id": 25387, + "mutability": "mutable", + "name": "publicInputs", + "nameLocation": "4017:12:20", + "nodeType": "VariableDeclaration", + "scope": 25434, + "src": "3999:30:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3]" + }, + "typeName": { + "baseType": { + "id": 25385, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3999:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 25386, + "length": { + "hexValue": "33", + "id": 25384, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4007:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "nodeType": "ArrayTypeName", + "src": "3999:10:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_storage_ptr", + "typeString": "uint256[3]" + } + }, + "visibility": "internal" + } + ], + "id": 25388, + "nodeType": "VariableDeclarationStatement", + "src": "3999:30:20" + }, + { + "expression": { + "id": 25393, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 25389, + "name": "publicInputs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25387, + "src": "4039:12:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3] memory" + } + }, + "id": 25391, + "indexExpression": { + "hexValue": "30", + "id": 25390, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4052:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4039:15:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 25392, + "name": "_externalNullifier", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25364, + "src": "4057:18:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4039:36:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 25394, + "nodeType": "ExpressionStatement", + "src": "4039:36:20" + }, + { + "expression": { + "id": 25399, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 25395, + "name": "publicInputs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25387, + "src": "4085:12:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3] memory" + } + }, + "id": 25397, + "indexExpression": { + "hexValue": "31", + "id": 25396, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4098:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4085:15:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 25398, + "name": "_nullifierHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25362, + "src": "4103:14:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4085:32:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 25400, + "nodeType": "ExpressionStatement", + "src": "4085:32:20" + }, + { + "expression": { + "id": 25405, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 25401, + "name": "publicInputs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25387, + "src": "4127:12:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3] memory" + } + }, + "id": 25403, + "indexExpression": { + "hexValue": "32", + "id": 25402, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4140:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4127:15:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 25404, + "name": "signalHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25377, + "src": "4145:10:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4127:28:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 25406, + "nodeType": "ExpressionStatement", + "src": "4127:28:20" + }, + { + "assignments": [ + 25408 + ], + "declarations": [ + { + "constant": false, + "id": 25408, + "mutability": "mutable", + "name": "isValid", + "nameLocation": "4227:7:20", + "nodeType": "VariableDeclaration", + "scope": 25434, + "src": "4222:12:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 25407, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4222:4:20", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 25415, + "initialValue": { + "arguments": [ + { + "id": 25410, + "name": "_proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25360, + "src": "4244:6:20", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 25411, + "name": "getAccumulator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25469, + "src": "4252:14:20", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function () view returns (struct Types.G1Point memory)" + } + }, + "id": 25412, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4252:16:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + { + "id": 25413, + "name": "publicInputs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25387, + "src": "4270:12:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + }, + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3] memory" + } + ], + "id": 25409, + "name": "verify", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26479, + "src": "4237:6:20", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Proof_$26182_memory_ptr_$_t_struct$_G1Point_$25971_memory_ptr_$_t_array$_t_uint256_$3_memory_ptr_$returns$_t_bool_$", + "typeString": "function (struct Types.Proof memory,struct Types.G1Point memory,uint256[3] memory) view returns (bool)" + } + }, + "id": 25414, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4237:46:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4222:61:20" + }, + { + "condition": { + "id": 25417, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "4297:8:20", + "subExpression": { + "id": 25416, + "name": "isValid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25408, + "src": "4298:7:20", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 25422, + "nodeType": "IfStatement", + "src": "4293:60:20", + "trueBody": { + "id": 25421, + "nodeType": "Block", + "src": "4307:46:20", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 25418, + "name": "InvalidProof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25201, + "src": "4328:12:20", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 25419, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4328:14:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 25420, + "nodeType": "RevertStatement", + "src": "4321:21:20" + } + ] + } + }, + { + "expression": { + "id": 25427, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 25423, + "name": "nullifierHashHistory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25183, + "src": "4428:20:20", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bool_$", + "typeString": "mapping(uint256 => bool)" + } + }, + "id": 25425, + "indexExpression": { + "id": 25424, + "name": "_nullifierHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25362, + "src": "4449:14:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4428:36:20", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 25426, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4467:4:20", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "4428:43:20", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 25428, + "nodeType": "ExpressionStatement", + "src": "4428:43:20" + }, + { + "eventCall": { + "arguments": [ + { + "id": 25430, + "name": "signalHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25377, + "src": "4503:10:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 25431, + "name": "_externalNullifier", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25364, + "src": "4515:18:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 25429, + "name": "BroadcastSignal", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25213, + "src": "4487:15:20", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 25432, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4487:47:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 25433, + "nodeType": "EmitStatement", + "src": "4482:52:20" + } + ] + }, + "functionSelector": "26e738a2", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "broadcastSignal", + "nameLocation": "3574:15:20", + "parameters": { + "id": 25365, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25357, + "mutability": "mutable", + "name": "_signal", + "nameLocation": "3612:7:20", + "nodeType": "VariableDeclaration", + "scope": 25435, + "src": "3599:20:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 25356, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3599:5:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 25360, + "mutability": "mutable", + "name": "_proof", + "nameLocation": "3648:6:20", + "nodeType": "VariableDeclaration", + "scope": 25435, + "src": "3629:25:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof" + }, + "typeName": { + "id": 25359, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 25358, + "name": "Types.Proof", + "nameLocations": [ + "3629:5:20", + "3635:5:20" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 26182, + "src": "3629:11:20" + }, + "referencedDeclaration": 26182, + "src": "3629:11:20", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_storage_ptr", + "typeString": "struct Types.Proof" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 25362, + "mutability": "mutable", + "name": "_nullifierHash", + "nameLocation": "3672:14:20", + "nodeType": "VariableDeclaration", + "scope": 25435, + "src": "3664:22:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25361, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3664:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 25364, + "mutability": "mutable", + "name": "_externalNullifier", + "nameLocation": "3704:18:20", + "nodeType": "VariableDeclaration", + "scope": 25435, + "src": "3696:26:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25363, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3696:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3589:139:20" + }, + "returnParameters": { + "id": 25366, + "nodeType": "ParameterList", + "parameters": [], + "src": "3736:0:20" + }, + "scope": 25470, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 25452, + "nodeType": "FunctionDefinition", + "src": "4730:130:20", + "nodes": [], + "body": { + "id": 25451, + "nodeType": "Block", + "src": "4804:56:20", + "nodes": [], + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 25449, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "arguments": [ + { + "id": 25445, + "name": "_signal", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25437, + "src": "4839:7:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 25444, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "4829:9:20", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 25446, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4829:18:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 25443, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4821:7:20", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 25442, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4821:7:20", + "typeDescriptions": {} + } + }, + "id": 25447, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4821:27:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "38", + "id": 25448, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4852:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "src": "4821:32:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 25441, + "id": 25450, + "nodeType": "Return", + "src": "4814:39:20" + } + ] + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "hashSignal", + "nameLocation": "4739:10:20", + "parameters": { + "id": 25438, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25437, + "mutability": "mutable", + "name": "_signal", + "nameLocation": "4763:7:20", + "nodeType": "VariableDeclaration", + "scope": 25452, + "src": "4750:20:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 25436, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4750:5:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4749:22:20" + }, + "returnParameters": { + "id": 25441, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25440, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 25452, + "src": "4795:7:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25439, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4795:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4794:9:20" + }, + "scope": 25470, + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "id": 25460, + "nodeType": "FunctionDefinition", + "src": "4866:93:20", + "nodes": [], + "body": { + "id": 25459, + "nodeType": "Block", + "src": "4923:36:20", + "nodes": [], + "statements": [ + { + "expression": { + "id": 25457, + "name": "currentIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25162, + "src": "4940:12:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 25456, + "id": 25458, + "nodeType": "Return", + "src": "4933:19:20" + } + ] + }, + "functionSelector": "0d9005ae", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getCurrentIndex", + "nameLocation": "4875:15:20", + "parameters": { + "id": 25453, + "nodeType": "ParameterList", + "parameters": [], + "src": "4890:2:20" + }, + "returnParameters": { + "id": 25456, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25455, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 25460, + "src": "4914:7:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 25454, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4914:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4913:9:20" + }, + "scope": 25470, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 25469, + "nodeType": "FunctionDefinition", + "src": "4965:104:20", + "nodes": [], + "body": { + "id": 25468, + "nodeType": "Block", + "src": "5034:35:20", + "nodes": [], + "statements": [ + { + "expression": { + "id": 25466, + "name": "accumulator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25165, + "src": "5051:11:20", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage", + "typeString": "struct Types.G1Point storage ref" + } + }, + "functionReturnParameters": 25465, + "id": 25467, + "nodeType": "Return", + "src": "5044:18:20" + } + ] + }, + "functionSelector": "ff40807b", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAccumulator", + "nameLocation": "4974:14:20", + "parameters": { + "id": 25461, + "nodeType": "ParameterList", + "parameters": [], + "src": "4988:2:20" + }, + "returnParameters": { + "id": 25465, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25464, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 25469, + "src": "5012:20:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point" + }, + "typeName": { + "id": 25463, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 25462, + "name": "Types.G1Point", + "nameLocations": [ + "5012:5:20", + "5018:7:20" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25971, + "src": "5012:13:20" + }, + "referencedDeclaration": 25971, + "src": "5012:13:20", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage_ptr", + "typeString": "struct Types.G1Point" + } + }, + "visibility": "internal" + } + ], + "src": "5011:22:20" + }, + "scope": 25470, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + } + ], + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 25153, + "name": "KeccakMT", + "nameLocations": [ + "340:8:20" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25090, + "src": "340:8:20" + }, + "id": 25154, + "nodeType": "InheritanceSpecifier", + "src": "340:8:20" + }, + { + "baseName": { + "id": 25155, + "name": "BN254", + "nameLocations": [ + "350:5:20" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 24968, + "src": "350:5:20" + }, + "id": 25156, + "nodeType": "InheritanceSpecifier", + "src": "350:5:20" + }, + { + "baseName": { + "id": 25157, + "name": "Verifier", + "nameLocations": [ + "357:8:20" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 26738, + "src": "357:8:20" + }, + "id": 25158, + "nodeType": "InheritanceSpecifier", + "src": "357:8:20" + } + ], + "canonicalName": "Semacaulk", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "linearizedBaseContracts": [ + 25470, + 26738, + 24968, + 25090 + ], + "name": "Semacaulk", + "nameLocation": "327:9:20", + "scope": 25471, + "usedErrors": [ + 25191, + 25195, + 25199, + 25201 + ] + } + ], + "license": "MIT" + }, + "id": 20 +} \ No newline at end of file diff --git a/src/contracts/Verifier.json b/src/contracts/Verifier.json new file mode 100644 index 0000000..a003d85 --- /dev/null +++ b/src/contracts/Verifier.json @@ -0,0 +1,31742 @@ +{ + "abi": [ + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "q1_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q2_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q3_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q4_opening", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "f_cm", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "final_poly_proof", + "type": "tuple" + } + ], + "internalType": "struct Types.MultiopenProof", + "name": "multiopenProof", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "q_mimc", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mimc_cts", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quotient", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "u_prime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "key_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "key_1", + "type": "uint256" + } + ], + "internalType": "struct Types.Openings", + "name": "openings", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "w0", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "w1", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "w2", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "key", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "mimc_cts", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "quotient", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "u_prime", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "zi", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "ci", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "p1", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "p2", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "q_mimc", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "h", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "x1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y1", + "type": "uint256" + } + ], + "internalType": "struct Types.G2Point", + "name": "w", + "type": "tuple" + } + ], + "internalType": "struct Types.Commitments", + "name": "commitments", + "type": "tuple" + } + ], + "internalType": "struct Types.Proof", + "name": "proof", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct Types.G1Point", + "name": "accumulator", + "type": "tuple" + }, + { + "internalType": "uint256[3]", + "name": "publicInputs", + "type": "uint256[3]" + } + ], + "name": "verify", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": { + "object": "0x608060405234801561001057600080fd5b506122cf806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063b3da592b14610030575b600080fd5b61004361003e366004612140565b610057565b604051901515815260200160405180910390f35b805160009060008051602061227a83398151915290811161007757600080fd5b602083015160008051602061227a8339815191521161009557600080fd5b604083015160008051602061227a833981519152116100b357600080fd5b60006100eb604080516060808201835281526000602080830182905282840182905283516104e0810190945280845283015290815290565b905061013560405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61013d611baf565b6101478387610543565b6040808901805151855180518085018252825160209190920181810192909252918201519084015281516060015186518051808601825282519101808401919091529082015190840152815181015186518051808601825282519101808401919091529082015190840152905182015185518051808501825282519101808401919091529101519101526101da8361057d565b82526101e683896105a9565b6101ef8361057d565b506101f98361057d565b6020838101919091526040808a0180516101a001518651805160808082018352838701519190920180870191909152825181860152606080840151908201529184015191015251610180015185518051808401825282519101808501919091529201519101526102688361057d565b60408301526102778389610666565b6102808361057d565b606083015261028e8361057d565b60808301526102bf838951608001519051805160408082018352835191909201602081810192909252920151910152565b6102c88361057d565b60a08301526102d68361057d565b60c08301526102e48361057d565b60e08301526102f1611d1e565b60408301517f16e73dfdad310991df5ce19ce85943e01dcb5564b6f24c799d0e470cba9d1811907f1332cb377d53b9c681afa4dc09f66bc37e3f2f33deb33d9b40bd245c971b2447908781840992508781830991505084604001516000036103655761035e600188612236565b8352610379565b600185604001516103769190612236565b83525b604085015160a086015160208d015160600151898181038308905089838b0383088a868c0384088b868d03850893508b878d0386088c878e03870895508c878e038908826103e08c0152836104008c0152856104208c01528460208b01528360408b01528260608b01528560808b01528160a08b01528660c08b01528060e08b015250505050505050505061040d8161082c565b905060008061045a85604001518460006008811061042d5761042d612220565b602002015160077f300385d5fb6f3ce964dfa52b147e55ac6de38077e8c5fdb0215a31a8c82000016109e2565b915091508251606085015260208301516080850152604083015160a0850152606083015160c0850152608083015160e085015260a083015161010085015260c083015161012085015260e083015161014085015281610160850152806101808501526104cc8b8587600001518c610a54565b61051d5760405162461bcd60e51b815260206004820152601b60248201527f56657269666965723a206761746520636865636b206661696c6564000000000060448201526064015b60405180910390fd5b505061052a898385610c4b565b6105368983858b61153c565b9998505050505050505050565b610561828260005b6020020151905180516020808201835291010152565b61056d8282600161054b565b6105798282600261054b565b5050565b80518051602080830191822093810184905290915281905260008051602061227a833981519152900690565b6105d882826040015160a001519051805160408082018352835191909201602081810192909252920151910152565b61060782826040015160e001519051805160408082018352835191909201602081810192909252920151910152565b61063782826040015161010001519051805160408082018352835191909201602081810192909252920151910152565b61057982826040015160c001519051805160408082018352835191909201602081810192909252920151910152565b61068482826020015160c00151905180516020808201835291010152565b6106a282826020015160e00151905180516020808201835291010152565b6106c18282602001516101000151905180516020808201835291010152565b6106e08282602001516101200151905180516020808201835291010152565b6106ff8282602001516101400151905180516020808201835291010152565b61071e8282602001516101600151905180516020808201835291010152565b61073d8282602001516101800151905180516020808201835291010152565b61075c8282602001516101a00151905180516020808201835291010152565b61077b8282602001516101c00151905180516020808201835291010152565b61079a8282602001516101e00151905180516020808201835291010152565b6107b98282602001516102000151905180516020808201835291010152565b6020908101805151835180518085018252018301528051820151835180518085018252018301528051604001518351805180850182520183015280516060015183518051808501825201830152805160800151835180518085018252018301525160a00151915180518083018252010152565b610834611d1e565b61083c611d1e565b600060008051602061227a83398151915290506040518451602086015183818309835250600190505b60088110156108955760208102602081018701516020820384015185818309928501929092525050600101610865565b5060c0810151806108a557600080fd5b50602060e08201526020610100820152602061012082015260c081015161014082015260028203610160820152816101808201526020610280820160c060e0840160055afa80806108f557600080fd5b505060005b6008811015610935578060070360208102870151602082026101a00191508184015185818309928501601f19019290925250506001016108fa565b508185516101c0830151096102a082015260025b60088110156109865760208181028381016101a0015160011984019092028401519091908581830992850161028001929092525050600101610949565b506101a081015183526102a081015160208401526102c081015160408401526102e08101516060840152610300810151608084015261032081015160a084015261034081015160c0840152610360015160e08301525092915050565b600060008051602061227a83398151915280808715610a1c5787925060005b86811015610a1757828485099350600101610a01565b508790505b610a27600184612236565b9250818760018303098060018114610a3e57600080fd5b5050818783878609099350505094509492505050565b600060008051602061227a8339815191528180610a89565b600082828309838182098481830991505083838209949350505050565b856020890151610180890151604082015186818309955050508051602082015160c083015160e0840151888383089250610ac38984610a6c565b925088818a038408925050508682820990508094505050805160208201516101208301516101408401516101e085015189848b83860808935050610b078984610a6c565b925088818a038408925050508682820990508687828609860894505050848883099150805160208201516101e08301516101808401516101a085015189848b858508089350610b568a85610a6c565b935089818b0385089350505050868282099050868782860986089450505084888309915080516101e0820151610200830151878189038308905087838209905087888287098708955050868a8509935060c083015191506101008301516101608c015188898386088a0384089350888185099350888985880988089650888c8709955061018085015193506101c0850151915060208b01518b518a85860894508a84870893508a85850893508a848c03830894508a83860994508a8b868a098a0898508a8e890997508a818c0387089550505088818509935050505085868285098508949094149a9950505050505050505050565b600060008051602061227a833981519152905060006060830151608084015160c0850151848384098584820986858209826101a08b0152816101c08b0152806101e08b015287858609888682096102008c01919091526102208b01528784800988858209898682099550816102408d0152806102608d01525050836102808b015260408b015193506000806040516101008751015181526101208751015160208201528860408201526040600060608360076107d05a03fa995060005160205160405192506101408951015183526101608951015160208401528760408401526040600060608560076107d05a03fa8c169b5060405192508183528060208401525050600051604082015260205160608201526040600060808360066107d05a03fa8a1699506000519250602051915060405190506101808751015181526101a08751015160208201528460408201526040600060608360076107d05a03fa8a1699506040519050828152816020820152600051604082015260205160608201526040600060808360066107d05a03fa8a1699506000519250602051915060405190506102808751015181526102a08751015160208201528360408201526040600060608360076107d05a03fa8a1699506040519050828152816020820152600051604082015260205160608201526040600060808360066107d05a03fa8a1699506000519250602051915060405190508281528160208201526102c08751015160408201526102e08751015160608201526040600060808360066107d05a03fa8a1699505050506000516102a08b01515260205160206102a08c0151015260208b015160208101516040820151606083015160a08401518c8b850993508c8d848a09850893508c8d838909850893508c8d8288098508935050505089825182089050806103408d015250505050600080604051604085510151815260608551015160208201528660408201526040600060608360076107d05a03fa88169750600051925060205191506040519050608085510151815260a08551015160208201528360408201526040600060608360076107d05a03fa881697506040519050828152816020820152600051604082015260205160608201526040600060808360066107d05a03fa88169750604051905060005181526020516020820152845151604082015260208551015160608201526040600060808360066107d05a03fa881697505050506000516102c08901515260205160206102c08a015101526020890151611014565b60008685840987878609888183089150508781840898975050505050505050565b60c08101516101208201516101808301516110338a868a848688610ff3565b6102e08d015250505060e08101516101408201516101a083015161105b8a868a848688610ff3565b6103008d01525050506101008101516101608201516101c09092015191611086898589868587610ff3565b6103208c015250505050602088015188518051608092830151928a015192955090918781818881038508096103608b015250506020015161034088015160a08901519194509086818184810388080994505050826103808801526020880151925087516040810151905060a088015160c08901516103e08a01516101008b01518981830991506104008c0151818b0391508a8282099050816104408e01526101e0890151915061020089015198508a8b828b098c85850908985050505087818309915050806104608a0152868188878a038508096103a08a0152505087516103e08801516104208901516101008a01516101208b01519396509192909190888385098983820990508982820990506104008c015192506104408c015191506101408c01518a85850994508a83860994508a8186099450506101208c01518a0391506101408c01518a038a86850995508a83870995508a8187099550506102e08c015192506103008c015191506103208c01518a82850993508a8b868509850893508a8b878309850893505050506104608a0151925060e08a0151915087828409925060608601519550878389838b038908096103c08b015250506040805183516102400151815283516102600151602082015260c08901518183015260009550859250908260608360076107d05a03fa95506000519450602051915060405190506102a089015151815260206102a08a01510151602082015261024089015160408201526040600060608360076107d05a03fa95506040519050600051815260205160208201528460408201528160608201526040600060808360066107d05a03fa8616955060005194506020519150604051905060c083510151815260e083510151602082015261026089015160408201526040600060608360076107d05a03fa95506040519050600051815260205160208201528460408201528160608201526040600060808360066107d05a03fa861695506000519450602051915060405190506102c089015151815260206102c08a01510151602082015261028089015160408201526040600060608360076107d05a03fa95506040519050600051815260205160208201528460408201528160608201526040600060808360066107d05a03fa86169550600051945060205191508951604051915060808101515182526020608082015101516020830152508460408201528160608201526040600060808360066107d05a03fa8616955050506000516104a08801515260205160206104a089015101525061020086015191506102208601516103608701518586846103808b015109820890508586856103a08b015109820890508586836103c08b015109820890508061048089015288519350858660c08901518651098208915050848561024089015160208601510982089050848561026089015160408601510982089050848561028089015160608601510982086104c08801525082806114ce57600080fd5b505050806115355760405162461bcd60e51b815260206004820152602e60248201527f56657269666965723a206661696c656420746f20636f6d707574652066696e6160448201526d1b081c1bdb1e481bdc88195d985b60921b6064820152608401610514565b5050505050565b60008061155a83611555886040015161010001516117b7565b611857565b9050600061160e61160460405180604001604052807f17a40bf6b2a82570fed3bedb71e3ddf36680b431ffb3641fec94f5478d34dccc81526020017f050852202323c504aab1ae596553781b3dc87cc6793d731d054c7d751e82af0a81525061155560408051808201825260008082526020918201528151808301909252600182527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd459082015290565b8660200151611913565b9050600061168861167e6116736116318b6000015160a001518a60a00151611913565b61155561166e611663604080518082018252600080825260209182015281518083019092526001825260029082015290565b8d6104c00151611913565b6117b7565b896104a00151611857565b8760e00151611913565b9050600061169f6116998585611857565b83611857565b905060006116ab6119bd565b905060006116c08b6040015160e001516117b7565b905060008b604001516101a00151905060006116f06116e68e6000015160a001516117b7565b8c60e00151611913565b9050600060405180608001604052807f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d81526020017f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e81526020017f1970ea81dd6992adfbc571effb03503adbbb6a857f578403c6c40e22d65b3c0281526020017f054793348f12c0cf5622c340573cb277586319de359ab9389778f689786b1e4881525090506117a5868686868686611a8e565b9e9d5050505050505050505050505050565b604080518082019091526000808252602082015281511580156117dc57506020820151155b156117fa575050604080518082019091526000808252602082015290565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4790506040518060400160405280846000015181526020018285602001516118449190612257565b61184e9084612236565b90529392505050565b604080518082019091526000808252602082015260408051808201909152600080825260208201526000611889611d3d565b855181526020808701518183015285516040808401919091529086015160608301528360808360066107d05a03fa915081806118c457600080fd5b50816119075760405162461bcd60e51b815260206004820152601260248201527110938c8d4d0e881c1b1d5cc819985a5b195960721b6044820152606401610514565b50909150505b92915050565b604080518082019091526000808252602082015261192f611d5b565b8351815260208085015181830152604080830185905280518082018252600080825292810183905291908260608560076107d05a03fa9050808061197257600080fd5b50806119b45760405162461bcd60e51b815260206004820152601160248201527010938c8d4d0e881b5d5b0819985a5b1959607a1b6044820152606401610514565b50949350505050565b6119e86040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180608001604052807f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa815250905090565b60008060006040518951815260208a01516020820152885160408201526020890151606082015260408901516080820152606089015160a0820152875160c0820152602088015160e08201528651610100820152602087015161012082015260408701516101408201526060870151610160820152855161018082015260208601516101a082015284516101c082015260208501516101e082015260408501516102008201526060850151610220820152602060006102408360085afa915050600051915080611ba05760405162461bcd60e51b815260206004820152601c60248201527f424e3235343a2070616972696e6720636865636b206661696c656421000000006044820152606401610514565b50600114979650505050505050565b604051806104e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001611c6b604051806040016040528060008152602001600081525090565b8152602001611c8d604051806040016040528060008152602001600081525090565b81526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001611d11604051806040016040528060008152602001600081525090565b8152602001600081525090565b6040518061010001604052806008906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051610220810167ffffffffffffffff81118282101715611db357611db3611d79565b60405290565b6040516101c0810167ffffffffffffffff81118282101715611db357611db3611d79565b6040516060810167ffffffffffffffff81118282101715611db357611db3611d79565b60405160c0810167ffffffffffffffff81118282101715611db357611db3611d79565b600060408284031215611e3557600080fd5b6040516040810181811067ffffffffffffffff82111715611e5857611e58611d79565b604052823581526020928301359281019290925250919050565b60006102208284031215611e8557600080fd5b611e8d611d8f565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c0808401359082015260e08084013590820152610100808401359082015261012080840135908201526101408084013590820152610160808401359082015261018080840135908201526101a080840135908201526101c080840135908201526101e08084013590820152610200928301359281019290925250919050565b600060808284031215611f5557600080fd5b6040516080810181811067ffffffffffffffff82111715611f7857611f78611d79565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b60006103c08284031215611fbc57600080fd5b611fc4611db9565b9050611fd08383611e23565b8152611fdf8360408401611e23565b6020820152611ff18360808401611e23565b60408201526120038360c08401611e23565b606082015261010061201784828501611e23565b608083015261014061202b85828601611e23565b60a084015261018061203f86828701611e23565b60c0850152612052866101c08701611e23565b60e0850152612065866102008701611e23565b83850152612077866102408701611e23565b61012085015261208b866102808701611e23565b8285015261209d866102c08701611e23565b6101608501526120b1866103008701611e23565b818501525050506120c6836103408401611f43565b6101a082015292915050565b600082601f8301126120e357600080fd5b6040516060810181811067ffffffffffffffff8211171561210657612106611d79565b60405280606084018581111561211b57600080fd5b845b8181101561213557803583526020928301920161211d565b509195945050505050565b600080600083850361078081121561215757600080fd5b6106e08082121561216757600080fd5b61216f611ddd565b6101008084121561217f57600080fd5b612187611e00565b9350873584526020880135602085015260408801356040850152606088013560608501526121b88960808a01611e23565b60808501526121ca8960c08a01611e23565b60a08501528382526121de89828a01611e72565b6020830152506121f2886103208901611fa9565b6040820152945061220587878301611e23565b935050506122178561072086016120d2565b90509250925092565b634e487b7160e01b600052603260045260246000fd5b8181038181111561190d57634e487b7160e01b600052601160045260246000fd5b60008261227457634e487b7160e01b600052601260045260246000fd5b50069056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212208ebbbd2776a1bfcdcf6dc76c7e32d8ac06189974c659ed61d99c28991f7b4cbc64736f6c63430008110033", + "sourceMap": "275:41324:23:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063b3da592b14610030575b600080fd5b61004361003e366004612140565b610057565b604051901515815260200160405180910390f35b805160009060008051602061227a83398151915290811161007757600080fd5b602083015160008051602061227a8339815191521161009557600080fd5b604083015160008051602061227a833981519152116100b357600080fd5b60006100eb604080516060808201835281526000602080830182905282840182905283516104e0810190945280845283015290815290565b905061013560405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61013d611baf565b6101478387610543565b6040808901805151855180518085018252825160209190920181810192909252918201519084015281516060015186518051808601825282519101808401919091529082015190840152815181015186518051808601825282519101808401919091529082015190840152905182015185518051808501825282519101808401919091529101519101526101da8361057d565b82526101e683896105a9565b6101ef8361057d565b506101f98361057d565b6020838101919091526040808a0180516101a001518651805160808082018352838701519190920180870191909152825181860152606080840151908201529184015191015251610180015185518051808401825282519101808501919091529201519101526102688361057d565b60408301526102778389610666565b6102808361057d565b606083015261028e8361057d565b60808301526102bf838951608001519051805160408082018352835191909201602081810192909252920151910152565b6102c88361057d565b60a08301526102d68361057d565b60c08301526102e48361057d565b60e08301526102f1611d1e565b60408301517f16e73dfdad310991df5ce19ce85943e01dcb5564b6f24c799d0e470cba9d1811907f1332cb377d53b9c681afa4dc09f66bc37e3f2f33deb33d9b40bd245c971b2447908781840992508781830991505084604001516000036103655761035e600188612236565b8352610379565b600185604001516103769190612236565b83525b604085015160a086015160208d015160600151898181038308905089838b0383088a868c0384088b868d03850893508b878d0386088c878e03870895508c878e038908826103e08c0152836104008c0152856104208c01528460208b01528360408b01528260608b01528560808b01528160a08b01528660c08b01528060e08b015250505050505050505061040d8161082c565b905060008061045a85604001518460006008811061042d5761042d612220565b602002015160077f300385d5fb6f3ce964dfa52b147e55ac6de38077e8c5fdb0215a31a8c82000016109e2565b915091508251606085015260208301516080850152604083015160a0850152606083015160c0850152608083015160e085015260a083015161010085015260c083015161012085015260e083015161014085015281610160850152806101808501526104cc8b8587600001518c610a54565b61051d5760405162461bcd60e51b815260206004820152601b60248201527f56657269666965723a206761746520636865636b206661696c6564000000000060448201526064015b60405180910390fd5b505061052a898385610c4b565b6105368983858b61153c565b9998505050505050505050565b610561828260005b6020020151905180516020808201835291010152565b61056d8282600161054b565b6105798282600261054b565b5050565b80518051602080830191822093810184905290915281905260008051602061227a833981519152900690565b6105d882826040015160a001519051805160408082018352835191909201602081810192909252920151910152565b61060782826040015160e001519051805160408082018352835191909201602081810192909252920151910152565b61063782826040015161010001519051805160408082018352835191909201602081810192909252920151910152565b61057982826040015160c001519051805160408082018352835191909201602081810192909252920151910152565b61068482826020015160c00151905180516020808201835291010152565b6106a282826020015160e00151905180516020808201835291010152565b6106c18282602001516101000151905180516020808201835291010152565b6106e08282602001516101200151905180516020808201835291010152565b6106ff8282602001516101400151905180516020808201835291010152565b61071e8282602001516101600151905180516020808201835291010152565b61073d8282602001516101800151905180516020808201835291010152565b61075c8282602001516101a00151905180516020808201835291010152565b61077b8282602001516101c00151905180516020808201835291010152565b61079a8282602001516101e00151905180516020808201835291010152565b6107b98282602001516102000151905180516020808201835291010152565b6020908101805151835180518085018252018301528051820151835180518085018252018301528051604001518351805180850182520183015280516060015183518051808501825201830152805160800151835180518085018252018301525160a00151915180518083018252010152565b610834611d1e565b61083c611d1e565b600060008051602061227a83398151915290506040518451602086015183818309835250600190505b60088110156108955760208102602081018701516020820384015185818309928501929092525050600101610865565b5060c0810151806108a557600080fd5b50602060e08201526020610100820152602061012082015260c081015161014082015260028203610160820152816101808201526020610280820160c060e0840160055afa80806108f557600080fd5b505060005b6008811015610935578060070360208102870151602082026101a00191508184015185818309928501601f19019290925250506001016108fa565b508185516101c0830151096102a082015260025b60088110156109865760208181028381016101a0015160011984019092028401519091908581830992850161028001929092525050600101610949565b506101a081015183526102a081015160208401526102c081015160408401526102e08101516060840152610300810151608084015261032081015160a084015261034081015160c0840152610360015160e08301525092915050565b600060008051602061227a83398151915280808715610a1c5787925060005b86811015610a1757828485099350600101610a01565b508790505b610a27600184612236565b9250818760018303098060018114610a3e57600080fd5b5050818783878609099350505094509492505050565b600060008051602061227a8339815191528180610a89565b600082828309838182098481830991505083838209949350505050565b856020890151610180890151604082015186818309955050508051602082015160c083015160e0840151888383089250610ac38984610a6c565b925088818a038408925050508682820990508094505050805160208201516101208301516101408401516101e085015189848b83860808935050610b078984610a6c565b925088818a038408925050508682820990508687828609860894505050848883099150805160208201516101e08301516101808401516101a085015189848b858508089350610b568a85610a6c565b935089818b0385089350505050868282099050868782860986089450505084888309915080516101e0820151610200830151878189038308905087838209905087888287098708955050868a8509935060c083015191506101008301516101608c015188898386088a0384089350888185099350888985880988089650888c8709955061018085015193506101c0850151915060208b01518b518a85860894508a84870893508a85850893508a848c03830894508a83860994508a8b868a098a0898508a8e890997508a818c0387089550505088818509935050505085868285098508949094149a9950505050505050505050565b600060008051602061227a833981519152905060006060830151608084015160c0850151848384098584820986858209826101a08b0152816101c08b0152806101e08b015287858609888682096102008c01919091526102208b01528784800988858209898682099550816102408d0152806102608d01525050836102808b015260408b015193506000806040516101008751015181526101208751015160208201528860408201526040600060608360076107d05a03fa995060005160205160405192506101408951015183526101608951015160208401528760408401526040600060608560076107d05a03fa8c169b5060405192508183528060208401525050600051604082015260205160608201526040600060808360066107d05a03fa8a1699506000519250602051915060405190506101808751015181526101a08751015160208201528460408201526040600060608360076107d05a03fa8a1699506040519050828152816020820152600051604082015260205160608201526040600060808360066107d05a03fa8a1699506000519250602051915060405190506102808751015181526102a08751015160208201528360408201526040600060608360076107d05a03fa8a1699506040519050828152816020820152600051604082015260205160608201526040600060808360066107d05a03fa8a1699506000519250602051915060405190508281528160208201526102c08751015160408201526102e08751015160608201526040600060808360066107d05a03fa8a1699505050506000516102a08b01515260205160206102a08c0151015260208b015160208101516040820151606083015160a08401518c8b850993508c8d848a09850893508c8d838909850893508c8d8288098508935050505089825182089050806103408d015250505050600080604051604085510151815260608551015160208201528660408201526040600060608360076107d05a03fa88169750600051925060205191506040519050608085510151815260a08551015160208201528360408201526040600060608360076107d05a03fa881697506040519050828152816020820152600051604082015260205160608201526040600060808360066107d05a03fa88169750604051905060005181526020516020820152845151604082015260208551015160608201526040600060808360066107d05a03fa881697505050506000516102c08901515260205160206102c08a015101526020890151611014565b60008685840987878609888183089150508781840898975050505050505050565b60c08101516101208201516101808301516110338a868a848688610ff3565b6102e08d015250505060e08101516101408201516101a083015161105b8a868a848688610ff3565b6103008d01525050506101008101516101608201516101c09092015191611086898589868587610ff3565b6103208c015250505050602088015188518051608092830151928a015192955090918781818881038508096103608b015250506020015161034088015160a08901519194509086818184810388080994505050826103808801526020880151925087516040810151905060a088015160c08901516103e08a01516101008b01518981830991506104008c0151818b0391508a8282099050816104408e01526101e0890151915061020089015198508a8b828b098c85850908985050505087818309915050806104608a0152868188878a038508096103a08a0152505087516103e08801516104208901516101008a01516101208b01519396509192909190888385098983820990508982820990506104008c015192506104408c015191506101408c01518a85850994508a83860994508a8186099450506101208c01518a0391506101408c01518a038a86850995508a83870995508a8187099550506102e08c015192506103008c015191506103208c01518a82850993508a8b868509850893508a8b878309850893505050506104608a0151925060e08a0151915087828409925060608601519550878389838b038908096103c08b015250506040805183516102400151815283516102600151602082015260c08901518183015260009550859250908260608360076107d05a03fa95506000519450602051915060405190506102a089015151815260206102a08a01510151602082015261024089015160408201526040600060608360076107d05a03fa95506040519050600051815260205160208201528460408201528160608201526040600060808360066107d05a03fa8616955060005194506020519150604051905060c083510151815260e083510151602082015261026089015160408201526040600060608360076107d05a03fa95506040519050600051815260205160208201528460408201528160608201526040600060808360066107d05a03fa861695506000519450602051915060405190506102c089015151815260206102c08a01510151602082015261028089015160408201526040600060608360076107d05a03fa95506040519050600051815260205160208201528460408201528160608201526040600060808360066107d05a03fa86169550600051945060205191508951604051915060808101515182526020608082015101516020830152508460408201528160608201526040600060808360066107d05a03fa8616955050506000516104a08801515260205160206104a089015101525061020086015191506102208601516103608701518586846103808b015109820890508586856103a08b015109820890508586836103c08b015109820890508061048089015288519350858660c08901518651098208915050848561024089015160208601510982089050848561026089015160408601510982089050848561028089015160608601510982086104c08801525082806114ce57600080fd5b505050806115355760405162461bcd60e51b815260206004820152602e60248201527f56657269666965723a206661696c656420746f20636f6d707574652066696e6160448201526d1b081c1bdb1e481bdc88195d985b60921b6064820152608401610514565b5050505050565b60008061155a83611555886040015161010001516117b7565b611857565b9050600061160e61160460405180604001604052807f17a40bf6b2a82570fed3bedb71e3ddf36680b431ffb3641fec94f5478d34dccc81526020017f050852202323c504aab1ae596553781b3dc87cc6793d731d054c7d751e82af0a81525061155560408051808201825260008082526020918201528151808301909252600182527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd459082015290565b8660200151611913565b9050600061168861167e6116736116318b6000015160a001518a60a00151611913565b61155561166e611663604080518082018252600080825260209182015281518083019092526001825260029082015290565b8d6104c00151611913565b6117b7565b896104a00151611857565b8760e00151611913565b9050600061169f6116998585611857565b83611857565b905060006116ab6119bd565b905060006116c08b6040015160e001516117b7565b905060008b604001516101a00151905060006116f06116e68e6000015160a001516117b7565b8c60e00151611913565b9050600060405180608001604052807f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d81526020017f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e81526020017f1970ea81dd6992adfbc571effb03503adbbb6a857f578403c6c40e22d65b3c0281526020017f054793348f12c0cf5622c340573cb277586319de359ab9389778f689786b1e4881525090506117a5868686868686611a8e565b9e9d5050505050505050505050505050565b604080518082019091526000808252602082015281511580156117dc57506020820151155b156117fa575050604080518082019091526000808252602082015290565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4790506040518060400160405280846000015181526020018285602001516118449190612257565b61184e9084612236565b90529392505050565b604080518082019091526000808252602082015260408051808201909152600080825260208201526000611889611d3d565b855181526020808701518183015285516040808401919091529086015160608301528360808360066107d05a03fa915081806118c457600080fd5b50816119075760405162461bcd60e51b815260206004820152601260248201527110938c8d4d0e881c1b1d5cc819985a5b195960721b6044820152606401610514565b50909150505b92915050565b604080518082019091526000808252602082015261192f611d5b565b8351815260208085015181830152604080830185905280518082018252600080825292810183905291908260608560076107d05a03fa9050808061197257600080fd5b50806119b45760405162461bcd60e51b815260206004820152601160248201527010938c8d4d0e881b5d5b0819985a5b1959607a1b6044820152606401610514565b50949350505050565b6119e86040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180608001604052807f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa815250905090565b60008060006040518951815260208a01516020820152885160408201526020890151606082015260408901516080820152606089015160a0820152875160c0820152602088015160e08201528651610100820152602087015161012082015260408701516101408201526060870151610160820152855161018082015260208601516101a082015284516101c082015260208501516101e082015260408501516102008201526060850151610220820152602060006102408360085afa915050600051915080611ba05760405162461bcd60e51b815260206004820152601c60248201527f424e3235343a2070616972696e6720636865636b206661696c656421000000006044820152606401610514565b50600114979650505050505050565b604051806104e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001611c6b604051806040016040528060008152602001600081525090565b8152602001611c8d604051806040016040528060008152602001600081525090565b81526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001611d11604051806040016040528060008152602001600081525090565b8152602001600081525090565b6040518061010001604052806008906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051610220810167ffffffffffffffff81118282101715611db357611db3611d79565b60405290565b6040516101c0810167ffffffffffffffff81118282101715611db357611db3611d79565b6040516060810167ffffffffffffffff81118282101715611db357611db3611d79565b60405160c0810167ffffffffffffffff81118282101715611db357611db3611d79565b600060408284031215611e3557600080fd5b6040516040810181811067ffffffffffffffff82111715611e5857611e58611d79565b604052823581526020928301359281019290925250919050565b60006102208284031215611e8557600080fd5b611e8d611d8f565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c0808401359082015260e08084013590820152610100808401359082015261012080840135908201526101408084013590820152610160808401359082015261018080840135908201526101a080840135908201526101c080840135908201526101e08084013590820152610200928301359281019290925250919050565b600060808284031215611f5557600080fd5b6040516080810181811067ffffffffffffffff82111715611f7857611f78611d79565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b60006103c08284031215611fbc57600080fd5b611fc4611db9565b9050611fd08383611e23565b8152611fdf8360408401611e23565b6020820152611ff18360808401611e23565b60408201526120038360c08401611e23565b606082015261010061201784828501611e23565b608083015261014061202b85828601611e23565b60a084015261018061203f86828701611e23565b60c0850152612052866101c08701611e23565b60e0850152612065866102008701611e23565b83850152612077866102408701611e23565b61012085015261208b866102808701611e23565b8285015261209d866102c08701611e23565b6101608501526120b1866103008701611e23565b818501525050506120c6836103408401611f43565b6101a082015292915050565b600082601f8301126120e357600080fd5b6040516060810181811067ffffffffffffffff8211171561210657612106611d79565b60405280606084018581111561211b57600080fd5b845b8181101561213557803583526020928301920161211d565b509195945050505050565b600080600083850361078081121561215757600080fd5b6106e08082121561216757600080fd5b61216f611ddd565b6101008084121561217f57600080fd5b612187611e00565b9350873584526020880135602085015260408801356040850152606088013560608501526121b88960808a01611e23565b60808501526121ca8960c08a01611e23565b60a08501528382526121de89828a01611e72565b6020830152506121f2886103208901611fa9565b6040820152945061220587878301611e23565b935050506122178561072086016120d2565b90509250925092565b634e487b7160e01b600052603260045260246000fd5b8181038181111561190d57634e487b7160e01b600052601160045260246000fd5b60008261227457634e487b7160e01b600052601260045260246000fd5b50069056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212208ebbbd2776a1bfcdcf6dc76c7e32d8ac06189974c659ed61d99c28991f7b4cbc64736f6c63430008110033", + "sourceMap": "275:41324:23:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;308:6681;;;;;;:::i;:::-;;:::i;:::-;;;7287:14:28;;7280:22;7262:41;;7250:2;7235:18;308:6681:23;;;;;;;;531:15;;467:4;;-1:-1:-1;;;;;;;;;;;282:77:17;531:35:23;-1:-1:-1;523:44:23;;;;;;606:15;;;;-1:-1:-1;;;;;;;;;;;;598:44:23;;;;;;677:15;;;;-1:-1:-1;;;;;;;;;;;;669:44:23;;;;;;746:46;795:33;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;1098:11:21;;311:4;1135:48;;1122:62;;;1249:35;;;1344:32;;1337:56;1412:39;;;-1:-1:-1;661:797:21;795:33:23;746:82;;838:52;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;838:52:23;900:50;;:::i;:::-;961:62;998:10;1010:12;961:36;:62::i;:::-;3060:17:21;;;;;;:20;2197:9;;2301:14;;2344:23;;;2328:40;;2485:8;;2477:4;2446:37;;;;;;;2439:55;;;;2580:12;;;2574:19;2535:37;;;2528:66;3116:17;;:21;;;2197:9;;2301:14;;2344:23;;;2328:40;;2485:8;;2446:37;;;;;2439:55;;;;2580:12;;;2574:19;2535:37;;;2528:66;3173:17;;:20;;;2197:9;;2301:14;;2344:23;;;2328:40;;2485:8;;2446:37;;;;;2439:55;;;;2580:12;;;2574:19;2535:37;;;2528:66;3229:17;;:20;;;2197:9;;2301:14;;2344:23;;;2328:40;;2485:8;;2446:37;;;;;2439:55;;;;2580:12;;2574:19;2535:37;;2528:66;1111:42:23;1142:10;1111:30;:42::i;:::-;1087:66;;1164:43;1189:10;1201:5;1164:24;:43::i;:::-;1218:42;1249:10;1218:30;:42::i;:::-;;1297;1328:10;1297:30;:42::i;:::-;1270:24;;;;:69;;;;3854:17:21;;;;;;:19;;;5635:9;;5739:14;;5786:4;5782:23;;;5766:40;;5929:12;;;5923:19;5884:37;;;;;;;5877:66;;;;6013:8;;5974:37;;;5967:55;6116:4;6109:12;;;6103:19;6064:37;;;6057:66;6199:12;;;6193:19;6154:37;;6147:66;3927:17;:19;;;2197:9;;2301:14;;2344:23;;;2328:40;;2485:8;;2446:37;;;;;2439:55;;;;2580:12;;2574:19;2535:37;;2528:66;1432:42:23;1463:10;1432:30;:42::i;:::-;1404:25;;;:70;1485:43;1510:10;1522:5;1485:24;:43::i;:::-;1564:42;1595:10;1564:30;:42::i;:::-;1539:22;;;:67;1641:42;1672:10;1641:30;:42::i;:::-;1616:22;;;:67;1694:43;1719:10;1731:5;5479:20:21;:25;;;2197:9;;2301:14;;2348:4;2344:23;;;2328:40;;2485:8;;2446:37;;;;2477:4;2446:37;;;2439:55;;;;2580:12;;2574:19;2535:37;;2528:66;2626:284;1694:43:23;1773:42;1804:10;1773:30;:42::i;:::-;1748:22;;;:67;1850:42;1881:10;1850:30;:42::i;:::-;1825:22;;;:67;1926:42;1957:10;1926:30;:42::i;:::-;1902:21;;;:66;1987:26;;:::i;:::-;3054:4;3029:30;;3023:37;677:66:17;;848;;3115:1:23;3023:37;677:66:17;3088:29:23;3073:44;;3176:1;3169:5;3154:13;3147:31;3130:48;;;3237:19;:25;;;3266:1;3237:30;3233:154;;3297:5;3301:1;3297;:5;:::i;:::-;3283:19;;3233:154;;;3375:1;3347:19;:25;;;:29;;;;:::i;:::-;3333:43;;3233:154;3522:4;3497:30;;3491:37;3582:4;3557:30;;3551:37;3696:4;3685:16;;3679:23;3704:4;3675:34;3669:41;3777:1;3752:23;;;3551:37;3741:38;3723:56;;3840:1;3832:5;3829:1;3825:13;3821:2;3814:28;3915:1;3901:11;3898:1;3894:19;3890:2;3883:34;3994:1;3978:13;3975:1;3971:21;3967:2;3960:36;3930:66;;4075:1;4061:11;4058:1;4054:19;4047:5;4040:37;4160:1;4144:13;4141:1;4137:21;4130:5;4123:39;4090:72;;4257:1;4241:13;4238:1;4234:21;4221:11;4214:45;4388:20;4380:5;4360:18;4356:30;4349:60;4461:14;4453:5;4433:18;4429:30;4422:54;4528:22;4520:5;4500:18;4496:30;4489:62;4649:10;4642:4;4632:8;4628:19;4621:39;4709:14;4702:4;4692:8;4688:19;4681:43;4773:20;4766:4;4756:8;4752:19;4745:49;4843:22;4836:4;4826:8;4822:19;4815:51;4915:23;4908:4;4898:8;4894:19;4887:52;4988:25;4981:4;4971:8;4967:19;4960:54;5063:31;5056:4;5046:8;5042:19;5035:60;;;;;;;;3464:1641;;5146:21;5158:8;5146:11;:21::i;:::-;5135:32;;5179:14;5195;5213:187;5261:19;:25;;;5300:8;5309:1;5300:11;;;;;;;:::i;:::-;;;;;573:1:17;465:66;5213:34:23;:187::i;:::-;5178:222;;;;5606:8;5600:15;5593:4;5573:18;5569:29;5562:54;5687:4;5677:8;5673:19;5667:26;5660:4;5640:18;5636:29;5629:65;5765:4;5755:8;5751:19;5745:26;5738:4;5718:18;5714:29;5707:65;5843:4;5833:8;5829:19;5823:26;5816:4;5796:18;5792:29;5785:65;5921:4;5911:8;5907:19;5901:26;5894:4;5874:18;5870:29;5863:65;6000:4;5990:8;5986:19;5980:26;5972:5;5952:18;5948:30;5941:66;6079:4;6069:8;6065:19;6059:26;6051:5;6031:18;6027:30;6020:66;6158:4;6148:8;6144:19;6138:26;6130:5;6110:18;6106:30;6099:66;6331:6;6323:5;6303:18;6299:30;6292:46;6390:6;6382:5;6362:18;6358:30;6351:46;6438:157;6471:5;6494:18;6530:19;:21;;;6569:12;6438:15;:157::i;:::-;6417:231;;;;-1:-1:-1;;;6417:231:23;;7878:2:28;6417:231:23;;;7860:21:28;7917:2;7897:18;;;7890:30;7956:29;7936:18;;;7929:57;8003:18;;6417:231:23;;;;;;;;;5125:1534;;6709:125;6754:5;6773:18;6805:19;6709:31;:125::i;:::-;6852:130;6877:5;6896:18;6928:19;6961:11;6852;:130::i;:::-;6845:137;308:6681;-1:-1:-1;;;;;;;;;308:6681:23:o;2626:284:21:-;2763:40;2775:10;2787:12;2800:1;2787:15;;;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;2763:40;2813;2825:10;2837:12;2850:1;2837:15;;2813:40;2863;2875:10;2887:12;2900:1;2887:15;;2863:40;2626:284;;:::o;6523:676::-;6661:9;;6717:14;;6780:4;6767:18;;;6757:37;;;6813:21;;;:33;;;6981:21;;;7019:37;;;-1:-1:-1;;;;;;;;;;;7125:23:21;;;6523:676::o;3263:423::-;3382:70;3413:10;3425:5;:17;;;:26;;;2197:9;;2301:14;;2348:4;2344:23;;;2328:40;;2485:8;;2446:37;;;;2477:4;2446:37;;;2439:55;;;;2580:12;;2574:19;2535:37;;2528:66;2080:540;3382:70;3462:64;3493:10;3505:5;:17;;;:20;;;2197:9;;2301:14;;2348:4;2344:23;;;2328:40;;2485:8;;2446:37;;;;2477:4;2446:37;;;2439:55;;;;2580:12;;2574:19;2535:37;;2528:66;2080:540;3462:64;3536;3567:10;3579:5;:17;;;:20;;;2197:9;;2301:14;;2348:4;2344:23;;;2328:40;;2485:8;;2446:37;;;;2477:4;2446:37;;;2439:55;;;;2580:12;;2574:19;2535:37;;2528:66;2080:540;3536:64;3610:69;3641:10;3653:5;:17;;;:25;;;2197:9;;2301:14;;2348:4;2344:23;;;2328:40;;2485:8;;2446:37;;;;2477:4;2446:37;;;2439:55;;;;2580:12;;2574:19;2535:37;;2528:66;2080:540;3960:1351;4079:62;4109:10;4121:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4079:62;4151;4181:10;4193:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4151:62;4223;4253:10;4265:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4223:62;4295;4325:10;4337:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4295:62;4367;4397:10;4409:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4367:62;4439;4469:10;4481:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4439:62;4511;4541:10;4553:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4511:62;4583;4613:10;4625:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4583:62;4655;4685:10;4697:5;:14;;;:19;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4655:62;4727:63;4757:10;4769:5;:14;;;:20;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4727:63;4800;4830:10;4842:5;:14;;;:20;;;1711:9;;1862:14;;1909:4;1905:23;;;1889:40;;2013:37;;;2006:52;1604:470;4800:63;4915:14;;;;;;:21;1711:9;;1862:14;;1905:23;;;1889:40;;2013:37;;;2006:52;4989:14;;:23;;;1711:9;;1862:14;;1905:23;;;1889:40;;2013:37;;;2006:52;5065:14;;:23;;;1711:9;;1862:14;;1905:23;;;1889:40;;2013:37;;;2006:52;5141:14;;:22;;;1711:9;;1862:14;;1905:23;;;1889:40;;2013:37;;;2006:52;5216:14;;:17;;;1711:9;;1862:14;;1905:23;;;1889:40;;2013:37;;;2006:52;5286:14;:17;;;1711:9;;1862:14;;1905:23;;;1889:40;;2013:37;;2006:52;2626:284::o;36992:4605:23:-;37076:17;;:::i;:::-;37105:25;;:::i;:::-;37140:9;-1:-1:-1;;;;;;;;;;;37140:29:23;;37220:4;37214:11;38677:6;38671:13;38726:4;38718:6;38714:17;38708:24;38773:1;38768:3;38763;38756:19;38813:17;;-1:-1:-1;38859:1:23;;-1:-1:-1;38844:343:23;38869:1;38866;38863:8;38844:343;;;38930:4;38927:1;38923:12;38993:4;38985:6;38981:17;38973:6;38969:30;38963:37;39064:4;39056:6;39052:17;39046:4;39042:28;39036:35;39124:1;39111:11;39106:3;39099:27;39150:17;;;39143:30;;;;-1:-1:-1;;38886:1:23;38879:9;38844:343;;;-1:-1:-1;39304:4:23;39294:15;;39288:22;;39281:53;39311:23;39330:1;39327;39320:12;39281:53;;39414:4;39406:5;39400:4;39396:16;39389:30;39457:4;39449:5;39443:4;39439:16;39432:30;39500:4;39492:5;39486:4;39482:16;39475:30;39559:4;39553;39549:15;39543:22;39535:5;39529:4;39525:16;39518:48;39611:1;39608;39604:9;39596:5;39590:4;39586:16;39579:35;39652:1;39644:5;39638:4;39634:16;39627:27;39748:4;39740:5;39734:4;39730:16;39724:4;39716:5;39710:4;39706:16;39700:4;39693:5;39682:71;39773:7;;39766:38;39781:23;39800:1;39797;39790:12;39766:38;;;39886:1;39867:403;39900:1;39893:5;39890:12;39867:403;;;39964:5;39961:1;39957:13;40023:4;40020:1;40016:12;40008:6;40004:25;39998:32;40079:4;40076:1;40072:12;40065:5;40061:24;40047:38;;40136:6;40130:4;40126:17;40120:24;40196:1;40184:10;40179:3;40172:26;40222:28;;;-1:-1:-1;;40222:28:23;40215:41;;;;-1:-1:-1;;39925:1:23;39914:13;39867:403;;;39871:18;40431:1;40406:6;40400:13;40375:5;40369:4;40365:16;40359:23;40335:111;40476:5;40466:16;;40459:29;40567:1;40552:435;40577:1;40574;40571:8;40552:435;;;40637:4;40630:12;;;40778:18;;;40678:5;40778:18;40772:25;-1:-1:-1;;40727:9:23;;40723:20;;;40839:18;;40833:25;40630:12;;40772:25;40912:1;40833:25;40772;40887:27;40939:28;;;40960:5;40939:28;40932:41;;;;-1:-1:-1;;40594:1:23;40587:9;40552:435;;;-1:-1:-1;41044:6:23;41034:17;;41028:24;41001:52;;41115:6;41105:17;;41099:24;41092:4;41079:18;;41072:52;41186:6;41176:17;;41170:24;41163:4;41150:18;;41143:52;41257:6;41247:17;;41241:24;41234:4;41221:18;;41214:52;41328:6;41318:17;;41312:24;41305:4;41292:18;;41285:52;41399:6;41389:17;;41383:24;41376:4;41363:18;;41356:52;41470:6;41460:17;;41454:24;41447:4;41434:18;;41427:52;41541:6;41531:17;41525:24;41518:4;41505:18;;41498:52;-1:-1:-1;41012:7:23;36992:4605;-1:-1:-1;;36992:4605:23:o;127:1476:19:-;307:14;-1:-1:-1;;;;;;;;;;;282:77:17;;579:10:19;;575:505;;653:5;632:26;;876:1;862:166;885:14;882:1;879:21;862:166;;;1008:1;989:17;970;963:47;942:68;-1:-1:-1;915:1:19;908:9;862:166;;;866:12;1051:5;1046:10;;575:505;1109:21;1129:1;1109:17;:21;:::i;:::-;1089:41;;1262:1;1248:12;1244:1;1241;1237:9;1230:34;1284:1;1291;1286:9;;;;1316:1;1313;1306:12;1286:9;1277:43;;1572:1;1542:12;1522:1;1507:13;1488:17;1481:43;1457:130;1447:140;;1433:164;;127:1476;;;;;;;:::o;31849:5137:23:-;32066:4;-1:-1:-1;;;;;;;;;;;32066:4:23;;32187:252;;;32216:1;32265:5;32260:3;32255;32248:23;32319:5;32313:4;32307;32300:25;32373:5;32367:4;32361;32354:25;32342:37;;;32419:5;32414:3;32408:4;32401:24;32396:29;32187:252;-1:-1:-1;;;;32187:252:23:o;:::-;32470:11;32530:4;32523:5;32519:16;32513:23;32665:5;32645:18;32641:30;32635:37;32732:4;32719:11;32715:22;32709:29;32792:1;32774:16;32765:7;32758:36;32751:43;;;;32959:11;32953:18;33016:4;33003:11;32999:22;32993:29;33070:4;33057:11;33053:22;33047:29;33124:4;33111:11;33107:22;33101:29;33179:1;33176;33170:4;33163:18;33144:37;;33209:20;33227:1;33214:11;33209:20;:::i;:::-;33194:35;;33291:1;33284:4;33281:1;33277:12;33264:11;33257:36;33242:51;;;;33349:1;33341:6;33328:11;33321:30;33306:45;;33371:11;33364:18;;;;33444:11;33438:18;33501:4;33488:11;33484:22;33478:29;33665:5;33652:11;33648:23;33642:30;33720:5;33707:11;33703:23;33697:30;33776:5;33763:11;33759:23;33753:30;33849:1;33846;33842;33835:5;33829:4;33822:22;33815:36;33796:55;;;33879:20;33897:1;33884:11;33879:20;:::i;:::-;33864:35;;33961:1;33954:4;33951:1;33947:12;33934:11;33927:36;33912:51;;;;34019:1;34011:6;33998:11;33991:30;33976:45;;34088:1;34084;34071:11;34060:9;34053:33;34048:3;34041:49;34034:56;;;;34148:1;34135:11;34124:9;34117:33;34104:46;;34323:11;34317:18;34380:4;34367:11;34363:22;34357:29;34435:5;34422:11;34418:23;34412:30;34490:5;34477:11;34473:23;34467:30;34545:5;34532:11;34528:23;34522:30;34618:1;34615;34611;34604:5;34598:4;34591:22;34584:36;34565:55;;34648:20;34666:1;34653:11;34648:20;:::i;:::-;34633:35;;34730:1;34723:4;34720:1;34716:12;34703:11;34696:36;34681:51;;;;;34788:1;34780:6;34767:11;34760:30;34745:45;;34857:1;34853;34840:11;34829:9;34822:33;34817:3;34810:49;34803:56;;;;34917:1;34904:11;34893:9;34886:33;34873:46;;35057:11;35051:18;35118:5;35105:11;35101:23;35095:30;35174:5;35161:11;35157:23;35151:30;35242:1;35234:5;35231:1;35227:13;35220:5;35213:31;35194:50;;35300:1;35292:6;35279:11;35272:30;35257:45;;35369:1;35365;35352:11;35341:9;35334:33;35329:3;35322:49;35315:56;;;35429:1;35416:11;35405:9;35398:33;35385:46;;35560:4;35547:11;35543:22;35537:29;35525:41;;35614:5;35601:11;35597:23;35591:30;35674:5;35654:18;35650:30;35644:37;35758:1;35753;35747:4;35741;35734:21;35731:1;35727:29;35720:5;35713:47;35694:66;;35812:1;35808:2;35795:11;35788:26;35773:41;;35881:1;35877;35864:11;35853:9;35846:33;35841:3;35834:49;35827:56;;35941:1;35928:11;35917:9;35910:33;35897:46;;36095:5;36082:11;36078:23;36072:30;36060:42;;36150:5;36137:11;36133:23;36127:30;36115:42;;36215:4;36201:12;36197:23;36191:30;36265:12;36259:19;36329:1;36322:5;36315;36308:23;36291:40;;36372:1;36366:4;36360;36353:21;36344:30;;36413:1;36402:9;36399:1;36392:23;36387:28;;36480:1;36476;36473;36469:9;36454:13;36447:35;36428:54;;36534:1;36530:2;36517:11;36510:26;36495:41;;36603:1;36599;36586:11;36575:9;36568:33;36563:3;36556:49;36549:56;;36663:1;36650:11;36639:9;36632:33;36619:46;;36804:1;36784:17;36781:1;36777:25;36771:4;36764:42;36745:61;;;;36858:1;36854:2;36841:11;36834:26;36819:41;;;;;36927:1;36923;36910:11;36899:9;36892:33;36887:3;36880:49;36969:10;;;;;31849:5137;-1:-1:-1;;;;;;;;;;31849:5137:23:o;9064:22779::-;9291:9;-1:-1:-1;;;;;;;;;;;9291:29:23;;9330:12;9417:4;9396:19;9392:30;9386:37;9477:4;9456:19;9452:30;9446:37;9537:4;9516:19;9512:30;9506:37;9631:1;9627:2;9623;9616:17;9683:1;9679:2;9669:8;9662:23;9735:1;9731:2;9721:8;9714:23;9789:8;9781:5;9761:18;9757:30;9750:48;9850:8;9842:5;9822:18;9818:30;9811:48;9911:8;9903:5;9883:18;9879:30;9872:48;10008:1;10004:2;10000;9993:17;10060:1;10056:2;10046:8;10039:23;10106:5;10082:30;;10075:48;;;;10167:5;10143:30;;10136:48;10272:1;10268:2;;10257:17;10324:1;10320:2;10310:8;10303:23;10376:1;10372:2;10362:8;10355:23;10339:39;;10430:8;10422:5;10402:18;10398:30;10391:48;10491:8;10483:5;10463:18;10459:30;10452:48;;;10552:8;10544:5;10524:18;10520:30;10513:48;10614:4;10607:5;10603:16;10597:23;10575:45;;10647:7;10667;10816:4;10810:11;10956:5;10939:14;10933:21;10929:33;10923:40;10910:4;10899:65;11034:5;11017:14;11011:21;11007:33;11001:40;10994:4;10988;10984:15;10977:65;11079:2;11072:4;11066;11062:15;11055:27;11156:4;11150;11144;11138;11135:1;11128:4;11121:5;11117:16;11106:55;11095:66;;11199:4;11193:11;11241:4;11235:11;11370:4;11364:11;11356:19;;11445:5;11428:14;11422:21;11418:33;11412:40;11399:4;11388:65;11523:5;11506:14;11500:21;11496:33;11490:40;11483:4;11477;11473:15;11466:65;11568:8;11561:4;11555;11551:15;11544:33;11664:4;11658;11652;11646;11643:1;11636:4;11629:5;11625:16;11614:55;11605:7;11601:69;11590:80;;11803:4;11797:11;11789:19;;11834:10;11828:4;11821:24;11882:10;11875:4;11869;11865:15;11858:35;;;11936:4;11930:11;11923:4;11917;11913:15;11906:36;11985:4;11979:11;11972:4;11966;11962:15;11955:36;12078:4;12072;12066;12060;12057:1;12050:4;12043:5;12039:16;12028:55;12019:7;12015:69;12004:80;;12110:4;12104:11;12097:18;;12141:4;12135:11;12128:18;;12269:4;12263:11;12255:19;;12344:5;12327:14;12321:21;12317:33;12311:40;12298:4;12287:65;12422:5;12405:14;12399:21;12395:33;12389:40;12382:4;12376;12372:15;12365:65;12467:8;12460:4;12454;12450:15;12443:33;12563:4;12557;12551;12545;12542:1;12535:4;12528:5;12524:16;12513:55;12504:7;12500:69;12489:80;;12725:4;12719:11;12711:19;;12756:3;12750:4;12743:17;12797:3;12790:4;12784;12780:15;12773:28;12844:4;12838:11;12831:4;12825;12821:15;12814:36;12893:4;12887:11;12880:4;12874;12870:15;12863:36;12986:4;12980;12974;12968;12965:1;12958:4;12951:5;12947:16;12936:55;12927:7;12923:69;12912:80;;13018:4;13012:11;13005:18;;13049:4;13043:11;13036:18;;13157:4;13151:11;13143:19;;13232:5;13215:14;13209:21;13205:33;13199:40;13186:4;13175:65;13310:5;13293:14;13287:21;13283:33;13277:40;13270:4;13264;13260:15;13253:65;13355:8;13348:4;13342;13338:15;13331:33;13451:4;13445;13439;13433;13430:1;13423:4;13416:5;13412:16;13401:55;13392:7;13388:69;13377:80;;13631:4;13625:11;13617:19;;13662:3;13656:4;13649:17;13703:3;13696:4;13690;13686:15;13679:28;13750:4;13744:11;13737:4;13731;13727:15;13720:36;13799:4;13793:11;13786:4;13780;13776:15;13769:36;13892:4;13886;13880;13874;13871:1;13864:4;13857:5;13853:16;13842:55;13833:7;13829:69;13818:80;;13924:4;13918:11;13911:18;;13955:4;13949:11;13942:18;;14152:4;14146:11;14138:19;;14183:3;14177:4;14170:17;14224:3;14217:4;14211;14207:15;14200:28;14298:5;14281:14;14275:21;14271:33;14265:40;14258:4;14252;14248:15;14241:65;14376:5;14359:14;14353:21;14349:33;14343:40;14336:4;14330;14326:15;14319:65;14471:4;14465;14459;14453;14450:1;14443:4;14436:5;14432:16;14421:55;14412:7;14408:69;14397:80;;;;;14543:4;14537:11;14528:5;14508:18;14504:30;14498:37;14491:58;14625:4;14619:11;14612:4;14603:5;14583:18;14579:30;14573:37;14569:48;14562:69;14961:4;14954:5;14950:16;14944:23;15012:4;14999:11;14995:22;14989:29;15070:4;15057:11;15053:22;15047:29;15127:4;15114:11;15110:22;15104:29;15179:4;15166:11;15162:22;15156:29;15240:1;15236:2;15233:1;15226:16;15211:31;;15313:1;15309;15299:8;15289;15282:29;15273:7;15266:49;15255:60;;15385:1;15381;15372:7;15362:8;15355:28;15346:7;15339:48;15328:59;;15452:1;15448;15444:2;15434:8;15427:23;15418:7;15411:43;15400:54;;;;;15514:1;15500:11;15494:18;15485:7;15478:38;15467:49;;15578:7;15570:5;15550:18;15546:30;15539:47;;;14659:941;;15774:7;15794;15832:4;15826:11;15907:4;15890:14;15884:21;15880:32;15874:39;15861:4;15850:64;15984:4;15967:14;15961:21;15957:32;15951:39;15944:4;15938;15934:15;15927:64;16028:2;16021:4;16015;16011:15;16004:27;16118:4;16112;16106;16100;16097:1;16090:4;16083:5;16079:16;16068:55;16059:7;16055:69;16044:80;;16150:4;16144:11;16137:18;;16181:4;16175:11;16168:18;;16318:4;16312:11;16304:19;;16393:4;16376:14;16370:21;16366:32;16360:39;16347:4;16336:64;16470:4;16453:14;16447:21;16443:32;16437:39;16430:4;16424;16420:15;16413:64;16514:8;16507:4;16501;16497:15;16490:33;16610:4;16604;16598;16592;16589:1;16582:4;16575:5;16571:16;16560:55;16551:7;16547:69;16536:80;;16644:4;16638:11;16630:19;;16675:3;16669:4;16662:17;16716:3;16709:4;16703;16699:15;16692:28;16763:4;16757:11;16750:4;16744;16740:15;16733:36;16812:4;16806:11;16799:4;16793;16789:15;16782:36;16905:4;16899;16893;16887;16884:1;16877:4;16870:5;16866:16;16855:55;16846:7;16842:69;16831:80;;16995:4;16989:11;16981:19;;17032:4;17026:11;17020:4;17013:25;17081:4;17075:11;17068:4;17062;17058:15;17051:36;17140:14;17134:21;17124:39;17117:4;17111;17107:15;17100:64;17234:4;17217:14;17211:21;17207:32;17201:39;17194:4;17188;17184:15;17177:64;17328:4;17322;17316;17310;17307:1;17300:4;17293:5;17289:16;17278:55;17269:7;17265:69;17254:80;;;;;17400:4;17394:11;17385:5;17365:18;17361:30;17355:37;17348:58;17482:4;17476:11;17469:4;17460:5;17440:18;17436:30;17430:37;17426:48;17419:69;17940:4;17933:5;17929:16;17923:23;17960:458;;;18025:6;18249:5;18243:4;18239:2;18232:23;18304:5;18292:10;18288:2;18281:29;18350:5;18347:1;18344;18337:19;18327:29;;;18398:5;18394:2;18390;18383:21;18373:31;17960:458;-1:-1:-1;;;;;;;;17960:458:23:o;:::-;18467:4;18454:11;18450:22;18444:29;18521:5;18508:11;18504:23;18498:30;18576:5;18563:11;18559:23;18553:30;18615:50;18663:1;18653:8;18649:2;18643:4;18637;18631;18615:50;:::i;:::-;18709:5;18685:30;;18678:51;-1:-1:-1;;;18778:4:23;18761:22;;18755:29;18832:5;18815:23;;18809:30;18887:5;18870:23;;18864:30;18932:50;18980:1;18970:8;18966:2;18864:30;18809;18755:29;18932:50;:::i;:::-;19026:5;19002:30;;18995:57;-1:-1:-1;;;19101:5:23;19084:23;;19078:30;19156:5;19139:23;;19133:30;19211:5;19194:23;;;19188:30;;19258:50;19306:1;19296:8;19292:2;19188:30;19133;19078;19258:50;:::i;:::-;19352:5;19328:30;;19321:59;-1:-1:-1;;;;19501:4:23;19490:16;;19484:23;19545:12;;19717:24;;19787:4;19770:22;;;19764:29;19834;;;19828:36;19764:29;;-1:-1:-1;19545:12:23;;19987:1;19828:36;19987:1;19923:10;;;19717:24;19912:25;19888:114;20046:5;20022:30;;20015:42;-1:-1:-1;;20197:4:23;20174:28;20168:35;20261:5;20237:30;;20231:37;20337:4;20313:29;;20307:36;20168:35;;-1:-1:-1;20231:37:23;20474:1;20307:36;20474:1;20401:15;;;20168:35;20390:30;20366:123;20356:133;;;;20541:2;20533:5;20513:18;20509:30;20502:42;20622:4;20615:5;20611:16;20605:23;20586:42;;20672:5;20666:12;20873:4;20854:17;20850:28;20844:35;20834:45;;20948:4;20928:18;20924:29;20918:36;21029:4;21009:18;21005:29;20999:36;21190:5;21170:18;21166:30;21160:37;21275:5;21255:18;21251:30;21245:37;21366:1;21337:27;21315:20;21308:60;21295:73;;21511:5;21491:18;21487:30;21481:37;21573:27;21570:1;21566:35;21531:70;;21679:1;21650:27;21634:14;21627:54;21614:67;;21783:27;21775:5;21755:18;21751:30;21744:67;21943:5;21930:11;21926:23;21920:30;21907:43;;21999:5;21986:11;21982:23;21976:30;21963:43;;22138:1;22118;22111:5;22104;22097:23;22077:1;22070:5;22063;22056:23;22032:121;22019:134;;;;;22297:1;22271:24;22251:18;22244:55;22231:68;;;22351:5;22343;22323:18;22319:30;22312:45;22474:1;22451:5;22431:1;22423:5;22420:1;22416:13;22412:2;22405:28;22381:108;22533:5;22509:30;;22502:42;-1:-1:-1;;22666:12:23;;23017:5;22993:30;;22987:37;23097:5;23073:30;;23067:37;23182:5;23158:30;;23152:37;23269:5;23245:30;;23239:37;22666:12;;-1:-1:-1;22987:37:23;;23067;;23152;23355:1;23067:37;22987;23302:55;23422:1;23393:27;23386:5;23379:45;23370:54;;23491:1;23460:29;23453:5;23446:47;23437:56;;23753:5;23733:18;23729:30;23723:37;23701:59;;23838:5;23818:18;23814:30;23808:37;23773:72;;23931:5;23911:18;23907:30;23901:37;24011:1;23987:22;23971:14;23964:49;23951:62;;24078:1;24049:27;24042:5;24035:45;24026:54;;24153:1;24116:35;24109:5;24102:53;24093:62;;;24458:5;24438:18;24434:30;24428:37;24425:1;24421:45;24384:82;;24559:5;24539:18;24535:30;24529:37;24526:1;24522:45;24638:1;24616:20;24600:14;24593:47;24580:60;;24707:1;24676:29;24669:5;24662:47;24653:56;;24782:1;24745:35;24738:5;24731:53;24722:62;;;25026:5;25006:18;25002:30;24996:37;24977:56;;25101:5;25081:18;25077:30;25071:37;25046:62;;25178:5;25158:18;25154:30;25148:37;25238:1;25231:5;25218:11;25211:29;25198:42;;25313:1;25309;25302:5;25283:17;25276:35;25269:5;25262:53;25253:62;;25390:1;25386;25379:5;25358:19;25351:37;25344:5;25337:55;25328:64;;;;;25516:5;25496:18;25492:30;25486:37;25473:50;;25600:4;25580:18;25576:29;25570:36;25536:70;;25674:1;25646:26;25639:5;25632:44;25619:57;;25729:4;25710:17;25706:28;25700:35;25690:45;;25802:1;25795:5;25791:1;25783:5;25780:1;25776:13;25772:2;25765:28;25758:46;25848:5;25824:30;;25817:42;-1:-1:-1;;26209:4:23;26203:11;;26332:21;;26355:5;26328:33;26322:40;26298:65;;26410:21;;26433:5;26406:33;26400:40;26393:4;26383:15;;26376:65;26509:4;26484:30;;26478:37;26461:15;;;26454:62;26155:5;;-1:-1:-1;26155:5:23;;-1:-1:-1;26203:11:23;26155:5;26578:4;26203:11;26569:1;26562:4;26555:5;26551:16;26540:55;26529:66;;26619:4;26613:11;26608:16;;26648:4;26642:11;26637:16;;26770:4;26764:11;26756:19;;26837:5;26817:18;26813:30;26807:37;26801:44;26795:4;26788:58;26932:4;26923:5;26903:18;26899:30;26893:37;26889:48;26883:55;26876:4;26870;26866:15;26859:80;27006:5;26986:18;26982:30;26976:37;26969:4;26963;26959:15;26952:62;27088:4;27082;27076;27070;27067:1;27060:4;27053:5;27049:16;27038:55;27027:66;;27121:4;27115:11;27107:19;;27158:4;27152:11;27146:4;27139:25;27207:4;27201:11;27194:4;27188;27184:15;27177:36;27250:1;27243:4;27237;27233:15;27226:26;27289:1;27282:4;27276;27272:15;27265:26;27378:4;27372;27366;27360;27357:1;27350:4;27343:5;27339:16;27328:55;27319:7;27315:69;27304:80;;27408:4;27402:11;27397:16;;27437:4;27431:11;27426:16;;27578:4;27572:11;27564:19;;27642:4;27625:14;27619:21;27615:32;27609:39;27603:4;27596:53;27719:4;27702:14;27696:21;27692:32;27686:39;27679:4;27673;27669:15;27662:64;27793:5;27773:18;27769:30;27763:37;27756:4;27750;27746:15;27739:62;27875:4;27869;27863;27857;27854:1;27847:4;27840:5;27836:16;27825:55;27814:66;;27908:4;27902:11;27894:19;;27945:4;27939:11;27933:4;27926:25;27994:4;27988:11;27981:4;27975;27971:15;27964:36;28037:1;28030:4;28024;28020:15;28013:26;28076:1;28069:4;28063;28059:15;28052:26;28165:4;28159;28153;28147;28144:1;28137:4;28130:5;28126:16;28115:55;28106:7;28102:69;28091:80;;28195:4;28189:11;28184:16;;28224:4;28218:11;28213:16;;28383:4;28377:11;28369:19;;28450:5;28430:18;28426:30;28420:37;28414:44;28408:4;28401:58;28545:4;28536:5;28516:18;28512:30;28506:37;28502:48;28496:55;28489:4;28483;28479:15;28472:80;28619:5;28599:18;28595:30;28589:37;28582:4;28576;28572:15;28565:62;28701:4;28695;28689;28683;28680:1;28673:4;28666:5;28662:16;28651:55;28640:66;;28734:4;28728:11;28720:19;;28771:4;28765:11;28759:4;28752:25;28820:4;28814:11;28807:4;28801;28797:15;28790:36;28863:1;28856:4;28850;28846:15;28839:26;28902:1;28895:4;28889;28885:15;28878:26;28991:4;28985;28979;28973;28970:1;28963:4;28956:5;28952:16;28941:55;28932:7;28928:69;28917:80;;29021:4;29015:11;29010:16;;29050:4;29044:11;29039:16;;29242:5;29236:12;29275:4;29269:11;29261:19;;29341:4;29322:17;29318:28;29312:35;29306:42;29300:4;29293:56;29433:4;29425;29406:17;29402:28;29396:35;29392:46;29386:53;29379:4;29373;29369:15;29362:78;;29477:1;29470:4;29464;29460:15;29453:26;29516:1;29509:4;29503;29499:15;29492:26;29605:4;29599;29593;29587;29584:1;29577:4;29570:5;29566:16;29555:55;29546:7;29542:69;29531:80;;;;29677:4;29671:11;29662:5;29642:18;29638:30;29632:37;29625:58;29759:4;29753:11;29746:4;29737:5;29717:18;29713:30;29707:37;29703:48;29696:69;25887:3892;30049:5;30029:18;30025:30;30019:37;30007:49;;30111:5;30091:18;30087:30;30081:37;30176:5;30156:18;30152:30;30146:37;30275:1;30271;30267:2;30258:5;30238:18;30234:30;30228:37;30221:52;30213:6;30206:71;30196:81;;30371:1;30367;30361:4;30352:5;30332:18;30328:30;30322:37;30315:54;30307:6;30300:73;30290:83;;30467:1;30463;30457:4;30448:5;30428:18;30424:30;30418:37;30411:54;30403:6;30396:73;30386:83;;30521:6;30513:5;30493:18;30489:30;30482:46;30799:5;30793:12;30768:37;;30981:1;30961;30953:4;30932:19;30928:30;30922:37;30902:17;30896:24;30889:74;30865:6;30841:155;30818:178;;;31188:1;31168;31159:5;31139:18;31135:30;31129:37;31121:4;31102:17;31098:28;31092:35;31085:85;31052:15;31028:175;31009:194;;31395:1;31375;31366:5;31346:18;31342:30;31336:37;31328:4;31309:17;31305:28;31299:35;31292:85;31259:15;31235:175;31216:194;;31602:1;31582;31573:5;31553:18;31549:30;31543:37;31535:4;31516:17;31512:28;31506:35;31499:85;31466:15;31442:175;31661:5;31637:30;;31630:55;-1:-1:-1;31706:7:23;;31699:38;31714:23;31733:1;31730;31723:12;31699:38;;29793:1958;;31778:7;31770:66;;;;-1:-1:-1;;;31770:66:23;;8234:2:28;31770:66:23;;;8216:21:28;8273:2;8253:18;;;8246:30;8312:34;8292:18;;;8285:62;-1:-1:-1;;;8363:18:28;;;8356:44;8417:19;;31770:66:23;8032:410:28;31770:66:23;9281:22562;;9064:22779;;;:::o;6995:2063::-;7243:4;7361:23;7387:47;7392:11;7405:28;7412:5;:17;;;:20;;;7405:6;:28::i;:::-;7387:4;:47::i;:::-;7361:73;;7517:23;7543:189;7560:124;7582:57;;;;;;;;1452:66:17;7582:57:23;;;;1554:66:17;7582:57:23;;;7657:13;-1:-1:-1;;;;;;;;;;;;;;;;;442:84:16;;;;;;;;456:1;442:84;;459:66;442:84;;;;;363:170;7560:124:23;7698:19;:24;;;7543:3;:189::i;:::-;7517:215;;7837:23;7863:339;7880:276;7902:192;7928:66;7932:5;:20;;;:37;;;7971:19;:22;;;7928:3;:66::i;:::-;8017:59;8024:51;8028:10;-1:-1:-1;;;;;;;;;;;;;;;;;327:19:16;;;;;;;;341:1;327:19;;344:1;327:19;;;;;251:102;8028:10:23;8040:18;:34;;;8024:3;:51::i;:::-;8017:6;:59::i;7902:192::-;8113:18;:29;;;7880:4;:276::i;:::-;8171:19;:21;;;7863:3;:339::i;:::-;7837:365;;8213:26;8242:22;8247:12;8252:2;8256;8247:4;:12::i;:::-;8261:2;8242:4;:22::i;:::-;8213:51;;8274:26;8303:10;:8;:10::i;:::-;8274:39;;8375:26;8404:28;8411:5;:17;;;:20;;;8404:6;:28::i;:::-;8375:57;;8442:26;8471:5;:17;;;:19;;;8442:48;;8569:26;8598:73;8602:45;8609:5;:20;;;:37;;;8602:6;:45::i;:::-;8649:19;:21;;;8598:3;:73::i;:::-;8569:102;;8681:26;8710:167;;;;;;;;2882:66:17;8710:167:23;;;;2986:66:17;8710:167:23;;;;3090:66:17;8710:167:23;;;;3194:66:17;8710:167:23;;;8681:196;;8945:106;8977:5;8984;9003;9010;9029;9036;8945:18;:106::i;:::-;8938:113;6995:2063;-1:-1:-1;;;;;;;;;;;;;;6995:2063:23:o;1168:363:16:-;-1:-1:-1;;;;;;;;;;;;;;;;;1334:4:16;;:9;:22;;;;-1:-1:-1;1347:4:16;;;;:9;1334:22;1330:195;;;-1:-1:-1;;1379:19:16;;;;;;;;;-1:-1:-1;1379:19:16;;;;;;;;1168:363::o;1330:195::-;1429:9;139:77:17;1429:29:16;;1479:35;;;;;;;;1493:2;:4;;;1479:35;;;;1511:1;1504:2;:4;;;:8;;;;:::i;:::-;1499:14;;:1;:14;:::i;:::-;1479:35;;1472:42;1168:363;-1:-1:-1;;;1168:363:16:o;2282:632::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2461:12:16;2484:23;;:::i;:::-;2528:4;;2517:15;;:8;2553:4;;;;2542:8;;;:15;2578:4;;2567:8;;;;:15;;;;2603:4;;;;2592:8;;;:15;2761:6;2755:4;2517:15;2745:1;2738:4;2731:5;2727:16;2716:58;2705:69;-1:-1:-1;2705:69:16;;2787:38;2802:23;2821:1;2818;2811:12;2787:38;;2853:7;2845:38;;;;-1:-1:-1;;;2845:38:16;;8863:2:28;2845:38:16;;;8845:21:28;8902:2;8882:18;;;8875:30;-1:-1:-1;;;8921:18:28;;;8914:48;8979:18;;2845:38:16;8661:342:28;2845:38:16;-1:-1:-1;2901:6:16;;-1:-1:-1;;2282:632:16;;;;;:::o;1625:587::-;-1:-1:-1;;;;;;;;;;;;;;;;;1751:23:16;;:::i;:::-;1795:4;;1784:15;;:8;1820:4;;;;1809:8;;;:15;1834:8;;;;:12;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;2054:4:16;1784:15;2044:1;2037:4;2030:5;2026:16;2015:58;2004:69;-1:-1:-1;2004:69:16;;2086:38;2101:23;2120:1;2117;2110:12;2086:38;;2152:7;2143:38;;;;-1:-1:-1;;;2143:38:16;;9210:2:28;2143:38:16;;;9192:21:28;9249:2;9229:18;;;9222:30;-1:-1:-1;;;9268:18:28;;;9261:47;9325:18;;2143:38:16;9008:341:28;2143:38:16;-1:-1:-1;2199:6:16;1625:587;-1:-1:-1;;;;1625:587:16:o;628:444::-;665:20;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;665:20:16;704:361;;;;;;;;736:66;704:361;;;;820:66;704:361;;;;904:66;704:361;;;;988:66;704:361;;;697:368;;628:444;:::o;3103:1639::-;3352:4;3368:11;3389:12;3452:4;3446:11;3507:2;3501:9;3495:4;3488:23;3562:4;3558:2;3554:13;3548:20;3541:4;3535;3531:15;3524:45;3630:2;3624:9;3617:4;3611;3607:15;3600:34;3685:4;3681:2;3677:13;3671:20;3664:4;3658;3654:15;3647:45;3743:4;3739:2;3735:13;3729:20;3722:4;3716;3712:15;3705:45;3801:4;3797:2;3793:13;3787:20;3780:4;3774;3770:15;3763:45;3869:2;3863:9;3856:4;3850;3846:15;3839:34;3924:4;3920:2;3916:13;3910:20;3903:4;3897;3893:15;3886:45;3993:2;3987:9;3979:5;3973:4;3969:16;3962:35;4049:4;4045:2;4041:13;4035:20;4027:5;4021:4;4017:16;4010:46;4108:4;4104:2;4100:13;4094:20;4086:5;4080:4;4076:16;4069:46;4167:4;4163:2;4159:13;4153:20;4145:5;4139:4;4135:16;4128:46;4236:2;4230:9;4222:5;4216:4;4212:16;4205:35;4292:4;4288:2;4284:13;4278:20;4270:5;4264:4;4260:16;4253:46;4361:2;4355:9;4347:5;4341:4;4337:16;4330:35;4417:4;4413:2;4409:13;4403:20;4395:5;4389:4;4385:16;4378:46;4476:4;4472:2;4468:13;4462:20;4454:5;4448:4;4444:16;4437:46;4535:4;4531:2;4527:13;4521:20;4513:5;4507:4;4503:16;4496:46;4607:4;4601;4594:5;4588:4;4585:1;4578:5;4567:45;4556:56;;;4638:4;4632:11;4625:18;;4670:7;4662:48;;;;-1:-1:-1;;;4662:48:16;;9556:2:28;4662:48:16;;;9538:21:28;9595:2;9575:18;;;9568:30;9634;9614:18;;;9607:58;9682:18;;4662:48:16;9354:352:28;4662:48:16;-1:-1:-1;4734:1:16;4727:8;;3103:1639;-1:-1:-1;;;;;;;3103:1639:16:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:127:28:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:250;213:2;207:9;255:6;243:19;;292:18;277:34;;313:22;;;274:62;271:88;;;339:18;;:::i;:::-;375:2;368:22;146:250;:::o;401:255::-;473:2;467:9;515:6;503:19;;552:18;537:34;;573:22;;;534:62;531:88;;;599:18;;:::i;661:253::-;733:2;727:9;775:4;763:17;;810:18;795:34;;831:22;;;792:62;789:88;;;857:18;;:::i;919:253::-;991:2;985:9;1033:4;1021:17;;1068:18;1053:34;;1089:22;;;1050:62;1047:88;;;1115:18;;:::i;1177:476::-;1231:5;1279:4;1267:9;1262:3;1258:19;1254:30;1251:50;;;1297:1;1294;1287:12;1251:50;1330:4;1324:11;1374:4;1366:6;1362:17;1445:6;1433:10;1430:22;1409:18;1397:10;1394:34;1391:62;1388:88;;;1456:18;;:::i;:::-;1492:4;1485:24;1557:23;;1542:39;;1642:2;1627:18;;;1614:32;1597:15;;;1590:57;;;;-1:-1:-1;1527:6:28;1177:476;-1:-1:-1;1177:476:28:o;1658:1461::-;1713:5;1761:6;1749:9;1744:3;1740:19;1736:32;1733:52;;;1781:1;1778;1771:12;1733:52;1803:17;;:::i;:::-;1843:23;;1829:38;;1927:2;1912:18;;;1899:32;1883:14;;;1876:56;1992:2;1977:18;;;1964:32;1948:14;;;1941:56;2057:2;2042:18;;;2029:32;2013:14;;;2006:56;2123:3;2108:19;;;2095:33;2078:15;;;2071:58;2190:3;2175:19;;;2162:33;2145:15;;;2138:58;2257:3;2242:19;;;2229:33;2212:15;;;2205:58;2324:3;2309:19;;;2296:33;2279:15;;;2272:58;2349:3;2397:18;;;2384:32;2368:14;;;2361:56;2436:3;2484:18;;;2471:32;2455:14;;;2448:56;2523:3;2571:18;;;2558:32;2542:14;;;2535:56;2610:3;2658:18;;;2645:32;2629:14;;;2622:56;2697:3;2745:18;;;2732:32;2716:14;;;2709:56;2784:3;2832:18;;;2819:32;2803:14;;;2796:56;2871:3;2919:18;;;2906:32;2890:14;;;2883:56;2958:3;3006:18;;;2993:32;2977:14;;;2970:56;3045:3;3093:18;;;3080:32;3064:14;;;3057:56;;;;-1:-1:-1;1794:26:28;1658:1461;-1:-1:-1;1658:1461:28:o;3124:604::-;3178:5;3226:4;3214:9;3209:3;3205:19;3201:30;3198:50;;;3244:1;3241;3234:12;3198:50;3277:2;3271:9;3319:4;3311:6;3307:17;3390:6;3378:10;3375:22;3354:18;3342:10;3339:34;3336:62;3333:88;;;3401:18;;:::i;:::-;3441:10;3437:2;3430:22;;3470:6;3461:15;;3513:9;3500:23;3492:6;3485:39;3585:2;3574:9;3570:18;3557:32;3552:2;3544:6;3540:15;3533:57;3651:2;3640:9;3636:18;3623:32;3618:2;3610:6;3606:15;3599:57;3717:2;3706:9;3702:18;3689:32;3684:2;3676:6;3672:15;3665:57;;3124:604;;;;:::o;3733:1420::-;3791:5;3839:6;3827:9;3822:3;3818:19;3814:32;3811:52;;;3859:1;3856;3849:12;3811:52;3881:22;;:::i;:::-;3872:31;;3926:41;3963:3;3952:9;3926:41;:::i;:::-;3919:5;3912:56;4002:50;4048:3;4043:2;4032:9;4028:18;4002:50;:::i;:::-;3995:4;3988:5;3984:16;3977:76;4085:51;4132:3;4126;4115:9;4111:19;4085:51;:::i;:::-;4080:2;4073:5;4069:14;4062:75;4171:51;4218:3;4212;4201:9;4197:19;4171:51;:::i;:::-;4164:4;4157:5;4153:16;4146:77;4242:3;4278:50;4324:3;4319:2;4308:9;4304:18;4278:50;:::i;:::-;4272:3;4265:5;4261:15;4254:75;4348:3;4385:50;4431:3;4426:2;4415:9;4411:18;4385:50;:::i;:::-;4378:4;4371:5;4367:16;4360:76;4455:3;4491:50;4537:3;4532:2;4521:9;4517:18;4491:50;:::i;:::-;4485:3;4478:5;4474:15;4467:75;4576:54;4626:3;4617:6;4606:9;4602:22;4576:54;:::i;:::-;4569:4;4562:5;4558:16;4551:80;4663:51;4710:3;4704;4693:9;4689:19;4663:51;:::i;:::-;4658:2;4651:5;4647:14;4640:75;4751:51;4798:3;4792;4781:9;4777:19;4751:51;:::i;:::-;4742:6;4735:5;4731:18;4724:79;4835:51;4882:3;4876;4865:9;4861:19;4835:51;:::i;:::-;4830:2;4823:5;4819:14;4812:75;4923:51;4970:3;4964;4953:9;4949:19;4923:51;:::i;:::-;4914:6;4907:5;4903:18;4896:79;5007:51;5054:3;5048;5037:9;5033:19;5007:51;:::i;:::-;5002:2;4995:5;4991:14;4984:75;;;;5095:51;5142:3;5136;5125:9;5121:19;5095:51;:::i;:::-;5086:6;5079:5;5075:18;5068:79;3733:1420;;;;:::o;5158:646::-;5208:5;5261:3;5254:4;5246:6;5242:17;5238:27;5228:55;;5279:1;5276;5269:12;5228:55;5312:2;5306:9;5354:2;5346:6;5342:15;5423:6;5411:10;5408:22;5387:18;5375:10;5372:34;5369:62;5366:88;;;5434:18;;:::i;:::-;5470:2;5463:22;5505:6;5546:2;5534:15;;5561;;;5558:35;;;5589:1;5586;5579:12;5558:35;5613:6;5628:146;5644:6;5639:3;5636:15;5628:146;;;5712:17;;5700:30;;5759:4;5750:14;;;;5661;5628:146;;;-1:-1:-1;5792:6:28;;5158:646;-1:-1:-1;;;;;5158:646:28:o;5809:1308::-;5959:6;5967;5975;6019:9;6010:7;6006:23;6049:4;6045:2;6041:13;6038:33;;;6067:1;6064;6057:12;6038:33;6090:6;6116:2;6112;6108:11;6105:31;;;6132:1;6129;6122:12;6105:31;6158:22;;:::i;:::-;6199:6;6225:2;6221;6217:11;6214:31;;;6241:1;6238;6231:12;6214:31;6269:22;;:::i;:::-;6254:37;;6329:9;6316:23;6307:7;6300:40;6402:2;6391:9;6387:18;6374:32;6369:2;6360:7;6356:16;6349:58;6469:2;6458:9;6454:18;6441:32;6436:2;6427:7;6423:16;6416:58;6538:4;6527:9;6523:20;6510:34;6503:4;6494:7;6490:18;6483:62;6580:55;6627:7;6621:3;6610:9;6606:19;6580:55;:::i;:::-;6574:3;6565:7;6561:17;6554:82;6672:56;6720:7;6713:4;6702:9;6698:20;6672:56;:::i;:::-;6665:4;6656:7;6652:18;6645:84;6752:7;6745:5;6738:22;6792:55;6839:7;6834:2;6823:9;6819:18;6792:55;:::i;:::-;6787:2;6780:5;6776:14;6769:79;;6880:59;6931:7;6925:3;6914:9;6910:19;6880:59;:::i;:::-;6875:2;6864:14;;6857:83;6868:5;-1:-1:-1;6983:54:28;7029:7;7009:18;;;6983:54;:::i;:::-;6973:64;;;;7056:55;7103:7;7096:4;7085:9;7081:20;7056:55;:::i;:::-;7046:65;;5809:1308;;;;;:::o;7314:127::-;7375:10;7370:3;7366:20;7363:1;7356:31;7406:4;7403:1;7396:15;7430:4;7427:1;7420:15;7446:225;7513:9;;;7534:11;;;7531:134;;;7587:10;7582:3;7578:20;7575:1;7568:31;7622:4;7619:1;7612:15;7650:4;7647:1;7640:15;8447:209;8479:1;8505;8495:132;;8549:10;8544:3;8540:20;8537:1;8530:31;8584:4;8581:1;8574:15;8612:4;8609:1;8602:15;8495:132;-1:-1:-1;8641:9:28;;8447:209::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "verify(((uint256,uint256,uint256,uint256,(uint256,uint256),(uint256,uint256)),(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256),((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256,uint256,uint256))),(uint256,uint256),uint256[3])": "b3da592b" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"q1_opening\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"q2_opening\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"q3_opening\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"q4_opening\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"f_cm\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"final_poly_proof\",\"type\":\"tuple\"}],\"internalType\":\"struct Types.MultiopenProof\",\"name\":\"multiopenProof\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"q_mimc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mimc_cts\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quotient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"u_prime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"p1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"p2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w0_0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w0_1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w0_2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w1_0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w1_1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w1_2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w2_0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w2_1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w2_2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"key_0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"key_1\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Openings\",\"name\":\"openings\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"w0\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"w1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"w2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"key\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"mimc_cts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"quotient\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"u_prime\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"zi\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"ci\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"p1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"p2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"q_mimc\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"h\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"x1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y1\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G2Point\",\"name\":\"w\",\"type\":\"tuple\"}],\"internalType\":\"struct Types.Commitments\",\"name\":\"commitments\",\"type\":\"tuple\"}],\"internalType\":\"struct Types.Proof\",\"name\":\"proof\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.G1Point\",\"name\":\"accumulator\",\"type\":\"tuple\"},{\"internalType\":\"uint256[3]\",\"name\":\"publicInputs\",\"type\":\"uint256[3]\"}],\"name\":\"verify\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"sol/Verifier.sol\":\"Verifier\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"sol/BN254.sol\":{\"keccak256\":\"0x3387e0c55cd2bdcedf8d3e5cf66a97f397e4673e8f040af92f16e6ec6b248de6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4fa56bc2c09b9fb96b18a3a4d5bb2734eae0f5b50229cb42bccf9bd4a58e5309\",\"dweb:/ipfs/QmQuAo1NLKqKb1cqx9x8mPxWsPY4LHjbJg5KR7feaDqkPd\"]},\"sol/Constants.sol\":{\"keccak256\":\"0x3e119809d4115dd17bd20fdb86436bd5af327127ed223801456e7a917d6054e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb67d5412ac9bdf638246fae6d7fccc6de23b36486308b578211e44847a64616\",\"dweb:/ipfs/QmQY3Ezd3RHtpofEPRRsipYjMzrgvmk5vG6hNL2bdURMxx\"]},\"sol/Lagrange.sol\":{\"keccak256\":\"0x9c4449d4146e90a99094c38dffb583c7017a2453b9254b4662d4c91387593405\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://41b3006cbd16acb0f29a008822d65381bbe779eabdf1ce86e952374fa5c75422\",\"dweb:/ipfs/QmYmjRzSEzwxJHkVSb7sZVLCARDz76Gnpdr5xnKfr2wMt2\"]},\"sol/Transcript.sol\":{\"keccak256\":\"0x376df72539581cd652d4aea09d0c18accc1ee001ee19f80fea89f3e1a7d40e18\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0dc8d7f873f9f5d45953bea9a394073ffa2d0930280425b973fc1f8be22a9ec5\",\"dweb:/ipfs/Qmbkg6WS8Ajjr3QLe6TtrdVmyqHaLD7cr8WHjk9uGnPQW1\"]},\"sol/Types.sol\":{\"keccak256\":\"0xbc4b390b5751a05cec4078017017130740d257fa1d4e03ee21315c14876aaaef\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6f30ac31762d9dccdbc1e2c542af5366e4f7513467a8234dc7183f6ce1fc3cb\",\"dweb:/ipfs/QmS8YspTKQNzaAgvdZU1VF8EZSk76Zzh5pKFz1TNghBCKo\"]},\"sol/Verifier.sol\":{\"keccak256\":\"0x1a63ed69635cba15d0863bc2bce9e1c4176fc93eda4103d6077536c953365429\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://92f7ed4b5f2a2d9c090d273462c983ac0759f96bb772603f84c314bb7ba29608\",\"dweb:/ipfs/QmRNLN1iW8xstb8FHixNAmdbD5UHKRqr5KNsva85ugkofC\"]}},\"version\":1}", + "metadata": { + "compiler": { + "version": "0.8.17+commit.8df45f5f" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "struct Types.Proof", + "name": "proof", + "type": "tuple", + "components": [ + { + "internalType": "struct Types.MultiopenProof", + "name": "multiopenProof", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "q1_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q2_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q3_opening", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "q4_opening", + "type": "uint256" + }, + { + "internalType": "struct Types.G1Point", + "name": "f_cm", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "final_poly_proof", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + } + ] + }, + { + "internalType": "struct Types.Openings", + "name": "openings", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "q_mimc", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mimc_cts", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quotient", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "u_prime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w0_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w1_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "w2_2", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "key_0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "key_1", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.Commitments", + "name": "commitments", + "type": "tuple", + "components": [ + { + "internalType": "struct Types.G1Point", + "name": "w0", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "w1", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "w2", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "key", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "mimc_cts", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "quotient", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "u_prime", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "zi", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "ci", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "p1", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "p2", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "q_mimc", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "h", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct Types.G2Point", + "name": "w", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "x1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y1", + "type": "uint256" + } + ] + } + ] + } + ] + }, + { + "internalType": "struct Types.G1Point", + "name": "accumulator", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ] + }, + { + "internalType": "uint256[3]", + "name": "publicInputs", + "type": "uint256[3]" + } + ], + "stateMutability": "view", + "type": "function", + "name": "verify", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + ":ds-test/=lib/forge-std/lib/ds-test/src/", + ":forge-std/=lib/forge-std/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "ipfs" + }, + "compilationTarget": { + "sol/Verifier.sol": "Verifier" + }, + "libraries": {} + }, + "sources": { + "sol/BN254.sol": { + "keccak256": "0x3387e0c55cd2bdcedf8d3e5cf66a97f397e4673e8f040af92f16e6ec6b248de6", + "urls": [ + "bzz-raw://4fa56bc2c09b9fb96b18a3a4d5bb2734eae0f5b50229cb42bccf9bd4a58e5309", + "dweb:/ipfs/QmQuAo1NLKqKb1cqx9x8mPxWsPY4LHjbJg5KR7feaDqkPd" + ], + "license": "MIT" + }, + "sol/Constants.sol": { + "keccak256": "0x3e119809d4115dd17bd20fdb86436bd5af327127ed223801456e7a917d6054e8", + "urls": [ + "bzz-raw://fb67d5412ac9bdf638246fae6d7fccc6de23b36486308b578211e44847a64616", + "dweb:/ipfs/QmQY3Ezd3RHtpofEPRRsipYjMzrgvmk5vG6hNL2bdURMxx" + ], + "license": "MIT" + }, + "sol/Lagrange.sol": { + "keccak256": "0x9c4449d4146e90a99094c38dffb583c7017a2453b9254b4662d4c91387593405", + "urls": [ + "bzz-raw://41b3006cbd16acb0f29a008822d65381bbe779eabdf1ce86e952374fa5c75422", + "dweb:/ipfs/QmYmjRzSEzwxJHkVSb7sZVLCARDz76Gnpdr5xnKfr2wMt2" + ], + "license": "MIT" + }, + "sol/Transcript.sol": { + "keccak256": "0x376df72539581cd652d4aea09d0c18accc1ee001ee19f80fea89f3e1a7d40e18", + "urls": [ + "bzz-raw://0dc8d7f873f9f5d45953bea9a394073ffa2d0930280425b973fc1f8be22a9ec5", + "dweb:/ipfs/Qmbkg6WS8Ajjr3QLe6TtrdVmyqHaLD7cr8WHjk9uGnPQW1" + ], + "license": "MIT" + }, + "sol/Types.sol": { + "keccak256": "0xbc4b390b5751a05cec4078017017130740d257fa1d4e03ee21315c14876aaaef", + "urls": [ + "bzz-raw://d6f30ac31762d9dccdbc1e2c542af5366e4f7513467a8234dc7183f6ce1fc3cb", + "dweb:/ipfs/QmS8YspTKQNzaAgvdZU1VF8EZSk76Zzh5pKFz1TNghBCKo" + ], + "license": "MIT" + }, + "sol/Verifier.sol": { + "keccak256": "0x1a63ed69635cba15d0863bc2bce9e1c4176fc93eda4103d6077536c953365429", + "urls": [ + "bzz-raw://92f7ed4b5f2a2d9c090d273462c983ac0759f96bb772603f84c314bb7ba29608", + "dweb:/ipfs/QmRNLN1iW8xstb8FHixNAmdbD5UHKRqr5KNsva85ugkofC" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "ast": { + "absolutePath": "sol/Verifier.sol", + "id": 26739, + "exportedSymbols": { + "BN254": [ + 24968 + ], + "Constants": [ + 25007 + ], + "Lagrange": [ + 25138 + ], + "TranscriptLibrary": [ + 25964 + ], + "Types": [ + 26183 + ], + "Verifier": [ + 26738 + ] + }, + "nodeType": "SourceUnit", + "src": "32:41568:23", + "nodes": [ + { + "id": 26185, + "nodeType": "PragmaDirective", + "src": "32:24:23", + "nodes": [], + "literals": [ + "solidity", + "^", + "0.8", + ".13" + ] + }, + { + "id": 26187, + "nodeType": "ImportDirective", + "src": "58:36:23", + "nodes": [], + "absolutePath": "sol/Types.sol", + "file": "./Types.sol", + "nameLocation": "-1:-1:-1", + "scope": 26739, + "sourceUnit": 26184, + "symbolAliases": [ + { + "foreign": { + "id": 26186, + "name": "Types", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26183, + "src": "67:5:23", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 26189, + "nodeType": "ImportDirective", + "src": "95:44:23", + "nodes": [], + "absolutePath": "sol/Constants.sol", + "file": "./Constants.sol", + "nameLocation": "-1:-1:-1", + "scope": 26739, + "sourceUnit": 25008, + "symbolAliases": [ + { + "foreign": { + "id": 26188, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "104:9:23", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 26191, + "nodeType": "ImportDirective", + "src": "140:53:23", + "nodes": [], + "absolutePath": "sol/Transcript.sol", + "file": "./Transcript.sol", + "nameLocation": "-1:-1:-1", + "scope": 26739, + "sourceUnit": 25965, + "symbolAliases": [ + { + "foreign": { + "id": 26190, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "149:17:23", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 26193, + "nodeType": "ImportDirective", + "src": "194:42:23", + "nodes": [], + "absolutePath": "sol/Lagrange.sol", + "file": "./Lagrange.sol", + "nameLocation": "-1:-1:-1", + "scope": 26739, + "sourceUnit": 25139, + "symbolAliases": [ + { + "foreign": { + "id": 26192, + "name": "Lagrange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25138, + "src": "203:8:23", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 26195, + "nodeType": "ImportDirective", + "src": "237:36:23", + "nodes": [], + "absolutePath": "sol/BN254.sol", + "file": "./BN254.sol", + "nameLocation": "-1:-1:-1", + "scope": 26739, + "sourceUnit": 24969, + "symbolAliases": [ + { + "foreign": { + "id": 26194, + "name": "BN254", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24968, + "src": "246:5:23", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 26738, + "nodeType": "ContractDefinition", + "src": "275:41324:23", + "nodes": [ + { + "id": 26479, + "nodeType": "FunctionDefinition", + "src": "308:6681:23", + "nodes": [], + "body": { + "id": 26478, + "nodeType": "Block", + "src": "473:6516:23", + "nodes": [], + "statements": [ + { + "assignments": [ + 26213 + ], + "declarations": [ + { + "constant": false, + "id": 26213, + "mutability": "mutable", + "name": "p", + "nameLocation": "491:1:23", + "nodeType": "VariableDeclaration", + "scope": 26478, + "src": "483:9:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 26212, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "483:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 26216, + "initialValue": { + "expression": { + "id": 26214, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "495:9:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 26215, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "505:7:23", + "memberName": "PRIME_R", + "nodeType": "MemberAccess", + "referencedDeclaration": 24976, + "src": "495:17:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "483:29:23" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 26223, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 26218, + "name": "publicInputs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26207, + "src": "531:12:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3] memory" + } + }, + "id": 26220, + "indexExpression": { + "hexValue": "30", + "id": 26219, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "544:1:23", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "531:15:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 26221, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "549:9:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 26222, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "559:7:23", + "memberName": "PRIME_R", + "nodeType": "MemberAccess", + "referencedDeclaration": 24976, + "src": "549:17:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "531:35:23", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 26217, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "523:7:23", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 26224, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "523:44:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 26225, + "nodeType": "ExpressionStatement", + "src": "523:44:23" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 26232, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 26227, + "name": "publicInputs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26207, + "src": "606:12:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3] memory" + } + }, + "id": 26229, + "indexExpression": { + "hexValue": "31", + "id": 26228, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "619:1:23", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "606:15:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 26230, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "624:9:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 26231, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "634:7:23", + "memberName": "PRIME_R", + "nodeType": "MemberAccess", + "referencedDeclaration": 24976, + "src": "624:17:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "606:35:23", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 26226, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "598:7:23", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 26233, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "598:44:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 26234, + "nodeType": "ExpressionStatement", + "src": "598:44:23" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 26241, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 26236, + "name": "publicInputs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26207, + "src": "677:12:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3] memory" + } + }, + "id": 26238, + "indexExpression": { + "hexValue": "32", + "id": 26237, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "690:1:23", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "677:15:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 26239, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "695:9:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 26240, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "705:7:23", + "memberName": "PRIME_R", + "nodeType": "MemberAccess", + "referencedDeclaration": 24976, + "src": "695:17:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "677:35:23", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 26235, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "669:7:23", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 26242, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "669:44:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 26243, + "nodeType": "ExpressionStatement", + "src": "669:44:23" + }, + { + "assignments": [ + 26248 + ], + "declarations": [ + { + "constant": false, + "id": 26248, + "mutability": "mutable", + "name": "transcript", + "nameLocation": "782:10:23", + "nodeType": "VariableDeclaration", + "scope": 26478, + "src": "746:46:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript" + }, + "typeName": { + "id": 26247, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26246, + "name": "TranscriptLibrary.Transcript", + "nameLocations": [ + "746:17:23", + "764:10:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25487, + "src": "746:28:23" + }, + "referencedDeclaration": 25487, + "src": "746:28:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_storage_ptr", + "typeString": "struct TranscriptLibrary.Transcript" + } + }, + "visibility": "internal" + } + ], + "id": 26252, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 26249, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "795:17:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TranscriptLibrary_$25964_$", + "typeString": "type(library TranscriptLibrary)" + } + }, + "id": 26250, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "813:13:23", + "memberName": "newTranscript", + "nodeType": "MemberAccess", + "referencedDeclaration": 25527, + "src": "795:31:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_Transcript_$25487_memory_ptr_$", + "typeString": "function () pure returns (struct TranscriptLibrary.Transcript memory)" + } + }, + "id": 26251, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "795:33:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "746:82:23" + }, + { + "assignments": [ + 26257 + ], + "declarations": [ + { + "constant": false, + "id": 26257, + "mutability": "mutable", + "name": "challengeTranscript", + "nameLocation": "871:19:23", + "nodeType": "VariableDeclaration", + "scope": 26478, + "src": "838:52:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript" + }, + "typeName": { + "id": 26256, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26255, + "name": "Types.ChallengeTranscript", + "nameLocations": [ + "838:5:23", + "844:19:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25997, + "src": "838:25:23" + }, + "referencedDeclaration": 25997, + "src": "838:25:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_storage_ptr", + "typeString": "struct Types.ChallengeTranscript" + } + }, + "visibility": "internal" + } + ], + "id": 26258, + "nodeType": "VariableDeclarationStatement", + "src": "838:52:23" + }, + { + "assignments": [ + 26263 + ], + "declarations": [ + { + "constant": false, + "id": 26263, + "mutability": "mutable", + "name": "verifierTranscript", + "nameLocation": "932:18:23", + "nodeType": "VariableDeclaration", + "scope": 26478, + "src": "900:50:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_VerifierTranscript_$26079_memory_ptr", + "typeString": "struct Types.VerifierTranscript" + }, + "typeName": { + "id": 26262, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26261, + "name": "Types.VerifierTranscript", + "nameLocations": [ + "900:5:23", + "906:18:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 26079, + "src": "900:24:23" + }, + "referencedDeclaration": 26079, + "src": "900:24:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_VerifierTranscript_$26079_storage_ptr", + "typeString": "struct Types.VerifierTranscript" + } + }, + "visibility": "internal" + } + ], + "id": 26264, + "nodeType": "VariableDeclarationStatement", + "src": "900:50:23" + }, + { + "expression": { + "arguments": [ + { + "id": 26268, + "name": "transcript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26248, + "src": "998:10:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + }, + { + "id": 26269, + "name": "publicInputs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26207, + "src": "1010:12:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3] memory" + } + ], + "expression": { + "id": 26265, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "961:17:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TranscriptLibrary_$25964_$", + "typeString": "type(library TranscriptLibrary)" + } + }, + "id": 26267, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "979:18:23", + "memberName": "round0PublicInputs", + "nodeType": "MemberAccess", + "referencedDeclaration": 25605, + "src": "961:36:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Transcript_$25487_memory_ptr_$_t_array$_t_uint256_$3_memory_ptr_$returns$__$", + "typeString": "function (struct TranscriptLibrary.Transcript memory,uint256[3] memory) pure" + } + }, + "id": 26270, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "961:62:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 26271, + "nodeType": "ExpressionStatement", + "src": "961:62:23" + }, + { + "expression": { + "arguments": [ + { + "id": 26275, + "name": "transcript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26248, + "src": "1058:10:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + }, + { + "id": 26276, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26200, + "src": "1070:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + }, + { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + ], + "expression": { + "id": 26272, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "1033:17:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TranscriptLibrary_$25964_$", + "typeString": "type(library TranscriptLibrary)" + } + }, + "id": 26274, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1051:6:23", + "memberName": "round1", + "nodeType": "MemberAccess", + "referencedDeclaration": 25643, + "src": "1033:24:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Transcript_$25487_memory_ptr_$_t_struct$_Proof_$26182_memory_ptr_$returns$__$", + "typeString": "function (struct TranscriptLibrary.Transcript memory,struct Types.Proof memory) pure" + } + }, + "id": 26277, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1033:43:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 26278, + "nodeType": "ExpressionStatement", + "src": "1033:43:23" + }, + { + "expression": { + "id": 26286, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 26279, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26257, + "src": "1087:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + }, + "id": 26281, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "1107:1:23", + "memberName": "v", + "nodeType": "MemberAccess", + "referencedDeclaration": 25982, + "src": "1087:21:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 26284, + "name": "transcript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26248, + "src": "1142:10:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + ], + "expression": { + "id": 26282, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "1111:17:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TranscriptLibrary_$25964_$", + "typeString": "type(library TranscriptLibrary)" + } + }, + "id": 26283, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1129:12:23", + "memberName": "getChallenge", + "nodeType": "MemberAccess", + "referencedDeclaration": 25963, + "src": "1111:30:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Transcript_$25487_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct TranscriptLibrary.Transcript memory) pure returns (uint256)" + } + }, + "id": 26285, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1111:42:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1087:66:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 26287, + "nodeType": "ExpressionStatement", + "src": "1087:66:23" + }, + { + "expression": { + "arguments": [ + { + "id": 26291, + "name": "transcript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26248, + "src": "1189:10:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + }, + { + "id": 26292, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26200, + "src": "1201:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + }, + { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + ], + "expression": { + "id": 26288, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "1164:17:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TranscriptLibrary_$25964_$", + "typeString": "type(library TranscriptLibrary)" + } + }, + "id": 26290, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1182:6:23", + "memberName": "round2", + "nodeType": "MemberAccess", + "referencedDeclaration": 25689, + "src": "1164:24:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Transcript_$25487_memory_ptr_$_t_struct$_Proof_$26182_memory_ptr_$returns$__$", + "typeString": "function (struct TranscriptLibrary.Transcript memory,struct Types.Proof memory) pure" + } + }, + "id": 26293, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1164:43:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 26294, + "nodeType": "ExpressionStatement", + "src": "1164:43:23" + }, + { + "expression": { + "arguments": [ + { + "id": 26298, + "name": "transcript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26248, + "src": "1249:10:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + ], + "expression": { + "id": 26295, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "1218:17:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TranscriptLibrary_$25964_$", + "typeString": "type(library TranscriptLibrary)" + } + }, + "id": 26297, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1236:12:23", + "memberName": "getChallenge", + "nodeType": "MemberAccess", + "referencedDeclaration": 25963, + "src": "1218:30:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Transcript_$25487_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct TranscriptLibrary.Transcript memory) pure returns (uint256)" + } + }, + "id": 26299, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1218:42:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 26300, + "nodeType": "ExpressionStatement", + "src": "1218:42:23" + }, + { + "expression": { + "id": 26308, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 26301, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26257, + "src": "1270:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + }, + "id": 26303, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "1290:4:23", + "memberName": "hi_2", + "nodeType": "MemberAccess", + "referencedDeclaration": 25984, + "src": "1270:24:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 26306, + "name": "transcript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26248, + "src": "1328:10:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + ], + "expression": { + "id": 26304, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "1297:17:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TranscriptLibrary_$25964_$", + "typeString": "type(library TranscriptLibrary)" + } + }, + "id": 26305, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1315:12:23", + "memberName": "getChallenge", + "nodeType": "MemberAccess", + "referencedDeclaration": 25963, + "src": "1297:30:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Transcript_$25487_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct TranscriptLibrary.Transcript memory) pure returns (uint256)" + } + }, + "id": 26307, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1297:42:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1270:69:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 26309, + "nodeType": "ExpressionStatement", + "src": "1270:69:23" + }, + { + "expression": { + "arguments": [ + { + "id": 26313, + "name": "transcript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26248, + "src": "1375:10:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + }, + { + "id": 26314, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26200, + "src": "1387:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + }, + { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + ], + "expression": { + "id": 26310, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "1350:17:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TranscriptLibrary_$25964_$", + "typeString": "type(library TranscriptLibrary)" + } + }, + "id": 26312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1368:6:23", + "memberName": "round3", + "nodeType": "MemberAccess", + "referencedDeclaration": 25717, + "src": "1350:24:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Transcript_$25487_memory_ptr_$_t_struct$_Proof_$26182_memory_ptr_$returns$__$", + "typeString": "function (struct TranscriptLibrary.Transcript memory,struct Types.Proof memory) pure" + } + }, + "id": 26315, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1350:43:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 26316, + "nodeType": "ExpressionStatement", + "src": "1350:43:23" + }, + { + "expression": { + "id": 26324, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 26317, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26257, + "src": "1404:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + }, + "id": 26319, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "1424:5:23", + "memberName": "alpha", + "nodeType": "MemberAccess", + "referencedDeclaration": 25986, + "src": "1404:25:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 26322, + "name": "transcript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26248, + "src": "1463:10:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + ], + "expression": { + "id": 26320, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "1432:17:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TranscriptLibrary_$25964_$", + "typeString": "type(library TranscriptLibrary)" + } + }, + "id": 26321, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1450:12:23", + "memberName": "getChallenge", + "nodeType": "MemberAccess", + "referencedDeclaration": 25963, + "src": "1432:30:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Transcript_$25487_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct TranscriptLibrary.Transcript memory) pure returns (uint256)" + } + }, + "id": 26323, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1432:42:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1404:70:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 26325, + "nodeType": "ExpressionStatement", + "src": "1404:70:23" + }, + { + "expression": { + "arguments": [ + { + "id": 26329, + "name": "transcript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26248, + "src": "1510:10:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + }, + { + "id": 26330, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26200, + "src": "1522:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + }, + { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + ], + "expression": { + "id": 26326, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "1485:17:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TranscriptLibrary_$25964_$", + "typeString": "type(library TranscriptLibrary)" + } + }, + "id": 26328, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1503:6:23", + "memberName": "round4", + "nodeType": "MemberAccess", + "referencedDeclaration": 25880, + "src": "1485:24:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Transcript_$25487_memory_ptr_$_t_struct$_Proof_$26182_memory_ptr_$returns$__$", + "typeString": "function (struct TranscriptLibrary.Transcript memory,struct Types.Proof memory) pure" + } + }, + "id": 26331, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1485:43:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 26332, + "nodeType": "ExpressionStatement", + "src": "1485:43:23" + }, + { + "expression": { + "id": 26340, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 26333, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26257, + "src": "1539:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + }, + "id": 26335, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "1559:2:23", + "memberName": "x1", + "nodeType": "MemberAccess", + "referencedDeclaration": 25988, + "src": "1539:22:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 26338, + "name": "transcript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26248, + "src": "1595:10:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + ], + "expression": { + "id": 26336, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "1564:17:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TranscriptLibrary_$25964_$", + "typeString": "type(library TranscriptLibrary)" + } + }, + "id": 26337, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1582:12:23", + "memberName": "getChallenge", + "nodeType": "MemberAccess", + "referencedDeclaration": 25963, + "src": "1564:30:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Transcript_$25487_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct TranscriptLibrary.Transcript memory) pure returns (uint256)" + } + }, + "id": 26339, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1564:42:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1539:67:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 26341, + "nodeType": "ExpressionStatement", + "src": "1539:67:23" + }, + { + "expression": { + "id": 26349, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 26342, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26257, + "src": "1616:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + }, + "id": 26344, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "1636:2:23", + "memberName": "x2", + "nodeType": "MemberAccess", + "referencedDeclaration": 25990, + "src": "1616:22:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 26347, + "name": "transcript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26248, + "src": "1672:10:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + ], + "expression": { + "id": 26345, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "1641:17:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TranscriptLibrary_$25964_$", + "typeString": "type(library TranscriptLibrary)" + } + }, + "id": 26346, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1659:12:23", + "memberName": "getChallenge", + "nodeType": "MemberAccess", + "referencedDeclaration": 25963, + "src": "1641:30:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Transcript_$25487_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct TranscriptLibrary.Transcript memory) pure returns (uint256)" + } + }, + "id": 26348, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1641:42:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1616:67:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 26350, + "nodeType": "ExpressionStatement", + "src": "1616:67:23" + }, + { + "expression": { + "arguments": [ + { + "id": 26354, + "name": "transcript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26248, + "src": "1719:10:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + }, + { + "id": 26355, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26200, + "src": "1731:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + }, + { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + ], + "expression": { + "id": 26351, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "1694:17:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TranscriptLibrary_$25964_$", + "typeString": "type(library TranscriptLibrary)" + } + }, + "id": 26353, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1712:6:23", + "memberName": "round5", + "nodeType": "MemberAccess", + "referencedDeclaration": 25899, + "src": "1694:24:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Transcript_$25487_memory_ptr_$_t_struct$_Proof_$26182_memory_ptr_$returns$__$", + "typeString": "function (struct TranscriptLibrary.Transcript memory,struct Types.Proof memory) pure" + } + }, + "id": 26356, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1694:43:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 26357, + "nodeType": "ExpressionStatement", + "src": "1694:43:23" + }, + { + "expression": { + "id": 26365, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 26358, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26257, + "src": "1748:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + }, + "id": 26360, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "1768:2:23", + "memberName": "x3", + "nodeType": "MemberAccess", + "referencedDeclaration": 25992, + "src": "1748:22:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 26363, + "name": "transcript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26248, + "src": "1804:10:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + ], + "expression": { + "id": 26361, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "1773:17:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TranscriptLibrary_$25964_$", + "typeString": "type(library TranscriptLibrary)" + } + }, + "id": 26362, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1791:12:23", + "memberName": "getChallenge", + "nodeType": "MemberAccess", + "referencedDeclaration": 25963, + "src": "1773:30:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Transcript_$25487_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct TranscriptLibrary.Transcript memory) pure returns (uint256)" + } + }, + "id": 26364, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1773:42:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1748:67:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 26366, + "nodeType": "ExpressionStatement", + "src": "1748:67:23" + }, + { + "expression": { + "id": 26374, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 26367, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26257, + "src": "1825:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + }, + "id": 26369, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "1845:2:23", + "memberName": "x4", + "nodeType": "MemberAccess", + "referencedDeclaration": 25994, + "src": "1825:22:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 26372, + "name": "transcript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26248, + "src": "1881:10:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + ], + "expression": { + "id": 26370, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "1850:17:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TranscriptLibrary_$25964_$", + "typeString": "type(library TranscriptLibrary)" + } + }, + "id": 26371, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1868:12:23", + "memberName": "getChallenge", + "nodeType": "MemberAccess", + "referencedDeclaration": 25963, + "src": "1850:30:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Transcript_$25487_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct TranscriptLibrary.Transcript memory) pure returns (uint256)" + } + }, + "id": 26373, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1850:42:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1825:67:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 26375, + "nodeType": "ExpressionStatement", + "src": "1825:67:23" + }, + { + "expression": { + "id": 26383, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 26376, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26257, + "src": "1902:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + }, + "id": 26378, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "1922:1:23", + "memberName": "s", + "nodeType": "MemberAccess", + "referencedDeclaration": 25996, + "src": "1902:21:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 26381, + "name": "transcript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26248, + "src": "1957:10:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Transcript_$25487_memory_ptr", + "typeString": "struct TranscriptLibrary.Transcript memory" + } + ], + "expression": { + "id": 26379, + "name": "TranscriptLibrary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25964, + "src": "1926:17:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TranscriptLibrary_$25964_$", + "typeString": "type(library TranscriptLibrary)" + } + }, + "id": 26380, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1944:12:23", + "memberName": "getChallenge", + "nodeType": "MemberAccess", + "referencedDeclaration": 25963, + "src": "1926:30:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Transcript_$25487_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct TranscriptLibrary.Transcript memory) pure returns (uint256)" + } + }, + "id": 26382, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1926:42:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1902:66:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 26384, + "nodeType": "ExpressionStatement", + "src": "1902:66:23" + }, + { + "assignments": [ + 26390 + ], + "declarations": [ + { + "constant": false, + "id": 26390, + "mutability": "mutable", + "name": "inverted", + "nameLocation": "2005:8:23", + "nodeType": "VariableDeclaration", + "scope": 26478, + "src": "1987:26:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8]" + }, + "typeName": { + "baseType": { + "id": 26388, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1987:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 26389, + "length": { + "hexValue": "38", + "id": 26387, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1995:1:23", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "nodeType": "ArrayTypeName", + "src": "1987:10:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_storage_ptr", + "typeString": "uint256[8]" + } + }, + "visibility": "internal" + } + ], + "id": 26391, + "nodeType": "VariableDeclarationStatement", + "src": "1987:26:23" + }, + { + "id": 26428, + "nodeType": "Block", + "src": "2023:3092:23", + "statements": [ + { + "assignments": [ + 26393 + ], + "declarations": [ + { + "constant": false, + "id": 26393, + "mutability": "mutable", + "name": "omega_alpha", + "nameLocation": "2897:11:23", + "nodeType": "VariableDeclaration", + "scope": 26428, + "src": "2889:19:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 26392, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2889:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 26396, + "initialValue": { + "expression": { + "id": 26394, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "2911:9:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 26395, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2921:5:23", + "memberName": "OMEGA", + "nodeType": "MemberAccess", + "referencedDeclaration": 24985, + "src": "2911:15:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2889:37:23" + }, + { + "assignments": [ + 26398 + ], + "declarations": [ + { + "constant": false, + "id": 26398, + "mutability": "mutable", + "name": "omega_n_alpha", + "nameLocation": "2944:13:23", + "nodeType": "VariableDeclaration", + "scope": 26428, + "src": "2936:21:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 26397, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2936:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 26401, + "initialValue": { + "expression": { + "id": 26399, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "2960:9:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 26400, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2970:7:23", + "memberName": "OMEGA_N", + "nodeType": "MemberAccess", + "referencedDeclaration": 24988, + "src": "2960:17:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2936:41:23" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "2996:192:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "3010:50:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "challengeTranscript", + "nodeType": "YulIdentifier", + "src": "3033:19:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3054:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3029:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "3029:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3023:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "3023:37:23" + }, + "variables": [ + { + "name": "alpha", + "nodeType": "YulTypedName", + "src": "3014:5:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "3073:44:23", + "value": { + "arguments": [ + { + "name": "omega_alpha", + "nodeType": "YulIdentifier", + "src": "3095:11:23" + }, + { + "name": "alpha", + "nodeType": "YulIdentifier", + "src": "3108:5:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "3115:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "3088:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "3088:29:23" + }, + "variableNames": [ + { + "name": "omega_alpha", + "nodeType": "YulIdentifier", + "src": "3073:11:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "3130:48:23", + "value": { + "arguments": [ + { + "name": "omega_n_alpha", + "nodeType": "YulIdentifier", + "src": "3154:13:23" + }, + { + "name": "alpha", + "nodeType": "YulIdentifier", + "src": "3169:5:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "3176:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "3147:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "3147:31:23" + }, + "variableNames": [ + { + "name": "omega_n_alpha", + "nodeType": "YulIdentifier", + "src": "3130:13:23" + } + ] + } + ] + }, + "evmVersion": "london", + "externalReferences": [ + { + "declaration": 26257, + "isOffset": false, + "isSlot": false, + "src": "3033:19:23", + "valueSize": 1 + }, + { + "declaration": 26393, + "isOffset": false, + "isSlot": false, + "src": "3073:11:23", + "valueSize": 1 + }, + { + "declaration": 26393, + "isOffset": false, + "isSlot": false, + "src": "3095:11:23", + "valueSize": 1 + }, + { + "declaration": 26398, + "isOffset": false, + "isSlot": false, + "src": "3130:13:23", + "valueSize": 1 + }, + { + "declaration": 26398, + "isOffset": false, + "isSlot": false, + "src": "3154:13:23", + "valueSize": 1 + }, + { + "declaration": 26213, + "isOffset": false, + "isSlot": false, + "src": "3115:1:23", + "valueSize": 1 + }, + { + "declaration": 26213, + "isOffset": false, + "isSlot": false, + "src": "3176:1:23", + "valueSize": 1 + } + ], + "id": 26402, + "nodeType": "InlineAssembly", + "src": "2987:201:23" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 26406, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 26403, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26257, + "src": "3237:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + }, + "id": 26404, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3257:5:23", + "memberName": "alpha", + "nodeType": "MemberAccess", + "referencedDeclaration": 25986, + "src": "3237:25:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 26405, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3266:1:23", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3237:30:23", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 26425, + "nodeType": "Block", + "src": "3319:68:23", + "statements": [ + { + "expression": { + "id": 26423, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 26416, + "name": "inverted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26390, + "src": "3333:8:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8] memory" + } + }, + "id": 26418, + "indexExpression": { + "hexValue": "30", + "id": 26417, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3342:1:23", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3333:11:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 26422, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 26419, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26257, + "src": "3347:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + }, + "id": 26420, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3367:5:23", + "memberName": "alpha", + "nodeType": "MemberAccess", + "referencedDeclaration": 25986, + "src": "3347:25:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 26421, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3375:1:23", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3347:29:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3333:43:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 26424, + "nodeType": "ExpressionStatement", + "src": "3333:43:23" + } + ] + }, + "id": 26426, + "nodeType": "IfStatement", + "src": "3233:154:23", + "trueBody": { + "id": 26415, + "nodeType": "Block", + "src": "3269:44:23", + "statements": [ + { + "expression": { + "id": 26413, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 26407, + "name": "inverted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26390, + "src": "3283:8:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8] memory" + } + }, + "id": 26409, + "indexExpression": { + "hexValue": "30", + "id": 26408, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3292:1:23", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3283:11:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 26412, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 26410, + "name": "p", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26213, + "src": "3297:1:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 26411, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3301:1:23", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3297:5:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3283:19:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 26414, + "nodeType": "ExpressionStatement", + "src": "3283:19:23" + } + ] + } + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "3464:1641:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "3478:50:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "challengeTranscript", + "nodeType": "YulIdentifier", + "src": "3501:19:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3522:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3497:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "3497:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3491:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "3491:37:23" + }, + "variables": [ + { + "name": "alpha", + "nodeType": "YulTypedName", + "src": "3482:5:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3541:47:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "challengeTranscript", + "nodeType": "YulIdentifier", + "src": "3561:19:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3582:4:23", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3557:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "3557:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3551:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "3551:37:23" + }, + "variables": [ + { + "name": "x3", + "nodeType": "YulTypedName", + "src": "3545:2:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3601:32:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "proof", + "nodeType": "YulIdentifier", + "src": "3620:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3627:4:23", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3616:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "3616:16:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3610:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "3610:23:23" + }, + "variables": [ + { + "name": "v", + "nodeType": "YulTypedName", + "src": "3605:1:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3646:64:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "proof", + "nodeType": "YulIdentifier", + "src": "3689:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3696:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3685:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "3685:16:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3679:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "3679:23:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3704:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3675:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "3675:34:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3669:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "3669:41:23" + }, + "variables": [ + { + "name": "u_prime_opening", + "nodeType": "YulTypedName", + "src": "3650:15:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3723:56:23", + "value": { + "arguments": [ + { + "name": "x3", + "nodeType": "YulIdentifier", + "src": "3748:2:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "3756:1:23" + }, + { + "name": "u_prime_opening", + "nodeType": "YulIdentifier", + "src": "3759:15:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "3752:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "3752:23:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "3777:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "3741:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "3741:38:23" + }, + "variables": [ + { + "name": "xi_minus_v", + "nodeType": "YulTypedName", + "src": "3727:10:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3792:50:23", + "value": { + "arguments": [ + { + "name": "x3", + "nodeType": "YulIdentifier", + "src": "3821:2:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "3829:1:23" + }, + { + "name": "alpha", + "nodeType": "YulIdentifier", + "src": "3832:5:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "3825:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "3825:13:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "3840:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "3814:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "3814:28:23" + }, + "variables": [ + { + "name": "xi_minus_alpha", + "nodeType": "YulTypedName", + "src": "3796:14:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3855:62:23", + "value": { + "arguments": [ + { + "name": "x3", + "nodeType": "YulIdentifier", + "src": "3890:2:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "3898:1:23" + }, + { + "name": "omega_alpha", + "nodeType": "YulIdentifier", + "src": "3901:11:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "3894:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "3894:19:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "3915:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "3883:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "3883:34:23" + }, + "variables": [ + { + "name": "xi_minus_omega_alpha", + "nodeType": "YulTypedName", + "src": "3859:20:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3930:66:23", + "value": { + "arguments": [ + { + "name": "x3", + "nodeType": "YulIdentifier", + "src": "3967:2:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "3975:1:23" + }, + { + "name": "omega_n_alpha", + "nodeType": "YulIdentifier", + "src": "3978:13:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "3971:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "3971:21:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "3994:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "3960:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "3960:36:23" + }, + "variables": [ + { + "name": "xi_minus_omega_n_alpha", + "nodeType": "YulTypedName", + "src": "3934:22:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4009:68:23", + "value": { + "arguments": [ + { + "name": "alpha", + "nodeType": "YulIdentifier", + "src": "4047:5:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "4058:1:23" + }, + { + "name": "omega_alpha", + "nodeType": "YulIdentifier", + "src": "4061:11:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "4054:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "4054:19:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "4075:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "4040:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "4040:37:23" + }, + "variables": [ + { + "name": "alpha_minus_omega_alpha", + "nodeType": "YulTypedName", + "src": "4013:23:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4090:72:23", + "value": { + "arguments": [ + { + "name": "alpha", + "nodeType": "YulIdentifier", + "src": "4130:5:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "4141:1:23" + }, + { + "name": "omega_n_alpha", + "nodeType": "YulIdentifier", + "src": "4144:13:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "4137:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "4137:21:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "4160:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "4123:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "4123:39:23" + }, + "variables": [ + { + "name": "alpha_minus_omega_n_alpha", + "nodeType": "YulTypedName", + "src": "4094:25:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4175:84:23", + "value": { + "arguments": [ + { + "name": "omega_alpha", + "nodeType": "YulIdentifier", + "src": "4221:11:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "4238:1:23" + }, + { + "name": "omega_n_alpha", + "nodeType": "YulIdentifier", + "src": "4241:13:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "4234:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "4234:21:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "4257:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "4214:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "4214:45:23" + }, + "variables": [ + { + "name": "omega_alpha_minus_omega_n_alpha", + "nodeType": "YulTypedName", + "src": "4179:31:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "4360:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4380:5:23", + "type": "", + "value": "0x3e0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4356:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "4356:30:23" + }, + { + "name": "xi_minus_omega_alpha", + "nodeType": "YulIdentifier", + "src": "4388:20:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4349:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "4349:60:23" + }, + "nodeType": "YulExpressionStatement", + "src": "4349:60:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "4433:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4453:5:23", + "type": "", + "value": "0x400" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4429:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "4429:30:23" + }, + { + "name": "xi_minus_alpha", + "nodeType": "YulIdentifier", + "src": "4461:14:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4422:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "4422:54:23" + }, + "nodeType": "YulExpressionStatement", + "src": "4422:54:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "4500:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4520:5:23", + "type": "", + "value": "0x420" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4496:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "4496:30:23" + }, + { + "name": "xi_minus_omega_n_alpha", + "nodeType": "YulIdentifier", + "src": "4528:22:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4489:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "4489:62:23" + }, + "nodeType": "YulExpressionStatement", + "src": "4489:62:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "inverted", + "nodeType": "YulIdentifier", + "src": "4632:8:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4642:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4628:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "4628:19:23" + }, + { + "name": "xi_minus_v", + "nodeType": "YulIdentifier", + "src": "4649:10:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4621:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "4621:39:23" + }, + "nodeType": "YulExpressionStatement", + "src": "4621:39:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "inverted", + "nodeType": "YulIdentifier", + "src": "4692:8:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4702:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4688:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "4688:19:23" + }, + { + "name": "xi_minus_alpha", + "nodeType": "YulIdentifier", + "src": "4709:14:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4681:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "4681:43:23" + }, + "nodeType": "YulExpressionStatement", + "src": "4681:43:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "inverted", + "nodeType": "YulIdentifier", + "src": "4756:8:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4766:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4752:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "4752:19:23" + }, + { + "name": "xi_minus_omega_alpha", + "nodeType": "YulIdentifier", + "src": "4773:20:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4745:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "4745:49:23" + }, + "nodeType": "YulExpressionStatement", + "src": "4745:49:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "inverted", + "nodeType": "YulIdentifier", + "src": "4826:8:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4836:4:23", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4822:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "4822:19:23" + }, + { + "name": "xi_minus_omega_n_alpha", + "nodeType": "YulIdentifier", + "src": "4843:22:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4815:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "4815:51:23" + }, + "nodeType": "YulExpressionStatement", + "src": "4815:51:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "inverted", + "nodeType": "YulIdentifier", + "src": "4898:8:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4908:4:23", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4894:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "4894:19:23" + }, + { + "name": "alpha_minus_omega_alpha", + "nodeType": "YulIdentifier", + "src": "4915:23:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4887:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "4887:52:23" + }, + "nodeType": "YulExpressionStatement", + "src": "4887:52:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "inverted", + "nodeType": "YulIdentifier", + "src": "4971:8:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4981:4:23", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4967:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "4967:19:23" + }, + { + "name": "alpha_minus_omega_n_alpha", + "nodeType": "YulIdentifier", + "src": "4988:25:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4960:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "4960:54:23" + }, + "nodeType": "YulExpressionStatement", + "src": "4960:54:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "inverted", + "nodeType": "YulIdentifier", + "src": "5046:8:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5056:4:23", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5042:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "5042:19:23" + }, + { + "name": "omega_alpha_minus_omega_n_alpha", + "nodeType": "YulIdentifier", + "src": "5063:31:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5035:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "5035:60:23" + }, + "nodeType": "YulExpressionStatement", + "src": "5035:60:23" + } + ] + }, + "evmVersion": "london", + "externalReferences": [ + { + "declaration": 26257, + "isOffset": false, + "isSlot": false, + "src": "3501:19:23", + "valueSize": 1 + }, + { + "declaration": 26257, + "isOffset": false, + "isSlot": false, + "src": "3561:19:23", + "valueSize": 1 + }, + { + "declaration": 26390, + "isOffset": false, + "isSlot": false, + "src": "4632:8:23", + "valueSize": 1 + }, + { + "declaration": 26390, + "isOffset": false, + "isSlot": false, + "src": "4692:8:23", + "valueSize": 1 + }, + { + "declaration": 26390, + "isOffset": false, + "isSlot": false, + "src": "4756:8:23", + "valueSize": 1 + }, + { + "declaration": 26390, + "isOffset": false, + "isSlot": false, + "src": "4826:8:23", + "valueSize": 1 + }, + { + "declaration": 26390, + "isOffset": false, + "isSlot": false, + "src": "4898:8:23", + "valueSize": 1 + }, + { + "declaration": 26390, + "isOffset": false, + "isSlot": false, + "src": "4971:8:23", + "valueSize": 1 + }, + { + "declaration": 26390, + "isOffset": false, + "isSlot": false, + "src": "5046:8:23", + "valueSize": 1 + }, + { + "declaration": 26393, + "isOffset": false, + "isSlot": false, + "src": "3901:11:23", + "valueSize": 1 + }, + { + "declaration": 26393, + "isOffset": false, + "isSlot": false, + "src": "4061:11:23", + "valueSize": 1 + }, + { + "declaration": 26393, + "isOffset": false, + "isSlot": false, + "src": "4221:11:23", + "valueSize": 1 + }, + { + "declaration": 26398, + "isOffset": false, + "isSlot": false, + "src": "3978:13:23", + "valueSize": 1 + }, + { + "declaration": 26398, + "isOffset": false, + "isSlot": false, + "src": "4144:13:23", + "valueSize": 1 + }, + { + "declaration": 26398, + "isOffset": false, + "isSlot": false, + "src": "4241:13:23", + "valueSize": 1 + }, + { + "declaration": 26213, + "isOffset": false, + "isSlot": false, + "src": "3756:1:23", + "valueSize": 1 + }, + { + "declaration": 26213, + "isOffset": false, + "isSlot": false, + "src": "3777:1:23", + "valueSize": 1 + }, + { + "declaration": 26213, + "isOffset": false, + "isSlot": false, + "src": "3829:1:23", + "valueSize": 1 + }, + { + "declaration": 26213, + "isOffset": false, + "isSlot": false, + "src": "3840:1:23", + "valueSize": 1 + }, + { + "declaration": 26213, + "isOffset": false, + "isSlot": false, + "src": "3898:1:23", + "valueSize": 1 + }, + { + "declaration": 26213, + "isOffset": false, + "isSlot": false, + "src": "3915:1:23", + "valueSize": 1 + }, + { + "declaration": 26213, + "isOffset": false, + "isSlot": false, + "src": "3975:1:23", + "valueSize": 1 + }, + { + "declaration": 26213, + "isOffset": false, + "isSlot": false, + "src": "3994:1:23", + "valueSize": 1 + }, + { + "declaration": 26213, + "isOffset": false, + "isSlot": false, + "src": "4058:1:23", + "valueSize": 1 + }, + { + "declaration": 26213, + "isOffset": false, + "isSlot": false, + "src": "4075:1:23", + "valueSize": 1 + }, + { + "declaration": 26213, + "isOffset": false, + "isSlot": false, + "src": "4141:1:23", + "valueSize": 1 + }, + { + "declaration": 26213, + "isOffset": false, + "isSlot": false, + "src": "4160:1:23", + "valueSize": 1 + }, + { + "declaration": 26213, + "isOffset": false, + "isSlot": false, + "src": "4238:1:23", + "valueSize": 1 + }, + { + "declaration": 26213, + "isOffset": false, + "isSlot": false, + "src": "4257:1:23", + "valueSize": 1 + }, + { + "declaration": 26200, + "isOffset": false, + "isSlot": false, + "src": "3620:5:23", + "valueSize": 1 + }, + { + "declaration": 26200, + "isOffset": false, + "isSlot": false, + "src": "3689:5:23", + "valueSize": 1 + }, + { + "declaration": 26263, + "isOffset": false, + "isSlot": false, + "src": "4360:18:23", + "valueSize": 1 + }, + { + "declaration": 26263, + "isOffset": false, + "isSlot": false, + "src": "4433:18:23", + "valueSize": 1 + }, + { + "declaration": 26263, + "isOffset": false, + "isSlot": false, + "src": "4500:18:23", + "valueSize": 1 + } + ], + "id": 26427, + "nodeType": "InlineAssembly", + "src": "3455:1650:23" + } + ] + }, + { + "id": 26464, + "nodeType": "Block", + "src": "5125:1534:23", + "statements": [ + { + "expression": { + "id": 26433, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 26429, + "name": "inverted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26390, + "src": "5135:8:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8] memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 26431, + "name": "inverted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26390, + "src": "5158:8:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8] memory" + } + ], + "id": 26430, + "name": "batchInvert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26737, + "src": "5146:11:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$8_memory_ptr_$returns$_t_array$_t_uint256_$8_memory_ptr_$", + "typeString": "function (uint256[8] memory) view returns (uint256[8] memory)" + } + }, + "id": 26432, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5146:21:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8] memory" + } + }, + "src": "5135:32:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8] memory" + } + }, + "id": 26434, + "nodeType": "ExpressionStatement", + "src": "5135:32:23" + }, + { + "assignments": [ + 26436, + 26438 + ], + "declarations": [ + { + "constant": false, + "id": 26436, + "mutability": "mutable", + "name": "l0Eval", + "nameLocation": "5187:6:23", + "nodeType": "VariableDeclaration", + "scope": 26464, + "src": "5179:14:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 26435, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5179:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 26438, + "mutability": "mutable", + "name": "zhEval", + "nameLocation": "5203:6:23", + "nodeType": "VariableDeclaration", + "scope": 26464, + "src": "5195:14:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 26437, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5195:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 26451, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 26441, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26257, + "src": "5261:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + }, + "id": 26442, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5281:5:23", + "memberName": "alpha", + "nodeType": "MemberAccess", + "referencedDeclaration": 25986, + "src": "5261:25:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 26443, + "name": "inverted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26390, + "src": "5300:8:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8] memory" + } + }, + "id": 26445, + "indexExpression": { + "hexValue": "30", + "id": 26444, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5309:1:23", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5300:11:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 26446, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "5325:9:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 26447, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "5335:16:23", + "memberName": "LOG2_DOMAIN_SIZE", + "nodeType": "MemberAccess", + "referencedDeclaration": 24982, + "src": "5325:26:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 26448, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "5365:9:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 26449, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "5375:15:23", + "memberName": "DOMAIN_SIZE_INV", + "nodeType": "MemberAccess", + "referencedDeclaration": 24979, + "src": "5365:25:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 26439, + "name": "Lagrange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25138, + "src": "5213:8:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Lagrange_$25138_$", + "typeString": "type(library Lagrange)" + } + }, + "id": 26440, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5222:25:23", + "memberName": "computeL0AndVanishingEval", + "nodeType": "MemberAccess", + "referencedDeclaration": 25137, + "src": "5213:34:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256,uint256)" + } + }, + "id": 26450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5213:187:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5178:222:23" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "5420:987:23", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "5573:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5593:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5569:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "5569:29:23" + }, + { + "arguments": [ + { + "name": "inverted", + "nodeType": "YulIdentifier", + "src": "5606:8:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5600:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "5600:15:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5562:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "5562:54:23" + }, + "nodeType": "YulExpressionStatement", + "src": "5562:54:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "5640:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5660:4:23", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5636:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "5636:29:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "inverted", + "nodeType": "YulIdentifier", + "src": "5677:8:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5687:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5673:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "5673:19:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5667:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "5667:26:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5629:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "5629:65:23" + }, + "nodeType": "YulExpressionStatement", + "src": "5629:65:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "5718:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5738:4:23", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5714:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "5714:29:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "inverted", + "nodeType": "YulIdentifier", + "src": "5755:8:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5765:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5751:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "5751:19:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5745:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "5745:26:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5707:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "5707:65:23" + }, + "nodeType": "YulExpressionStatement", + "src": "5707:65:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "5796:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5816:4:23", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5792:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "5792:29:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "inverted", + "nodeType": "YulIdentifier", + "src": "5833:8:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5843:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5829:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "5829:19:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5823:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "5823:26:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5785:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "5785:65:23" + }, + "nodeType": "YulExpressionStatement", + "src": "5785:65:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "5874:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5894:4:23", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5870:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "5870:29:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "inverted", + "nodeType": "YulIdentifier", + "src": "5911:8:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5921:4:23", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5907:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "5907:19:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5901:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "5901:26:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5863:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "5863:65:23" + }, + "nodeType": "YulExpressionStatement", + "src": "5863:65:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "5952:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5972:5:23", + "type": "", + "value": "0x100" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5948:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "5948:30:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "inverted", + "nodeType": "YulIdentifier", + "src": "5990:8:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6000:4:23", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5986:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "5986:19:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5980:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "5980:26:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5941:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "5941:66:23" + }, + "nodeType": "YulExpressionStatement", + "src": "5941:66:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "6031:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6051:5:23", + "type": "", + "value": "0x120" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6027:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "6027:30:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "inverted", + "nodeType": "YulIdentifier", + "src": "6069:8:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6079:4:23", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6065:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "6065:19:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "6059:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "6059:26:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6020:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "6020:66:23" + }, + "nodeType": "YulExpressionStatement", + "src": "6020:66:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "6110:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6130:5:23", + "type": "", + "value": "0x140" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6106:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "6106:30:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "inverted", + "nodeType": "YulIdentifier", + "src": "6148:8:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6158:4:23", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6144:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "6144:19:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "6138:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "6138:26:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6099:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "6099:66:23" + }, + "nodeType": "YulExpressionStatement", + "src": "6099:66:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "6303:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6323:5:23", + "type": "", + "value": "0x160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6299:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "6299:30:23" + }, + { + "name": "l0Eval", + "nodeType": "YulIdentifier", + "src": "6331:6:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6292:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "6292:46:23" + }, + "nodeType": "YulExpressionStatement", + "src": "6292:46:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "6362:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6382:5:23", + "type": "", + "value": "0x180" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6358:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "6358:30:23" + }, + { + "name": "zhEval", + "nodeType": "YulIdentifier", + "src": "6390:6:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6351:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "6351:46:23" + }, + "nodeType": "YulExpressionStatement", + "src": "6351:46:23" + } + ] + }, + "evmVersion": "london", + "externalReferences": [ + { + "declaration": 26390, + "isOffset": false, + "isSlot": false, + "src": "5606:8:23", + "valueSize": 1 + }, + { + "declaration": 26390, + "isOffset": false, + "isSlot": false, + "src": "5677:8:23", + "valueSize": 1 + }, + { + "declaration": 26390, + "isOffset": false, + "isSlot": false, + "src": "5755:8:23", + "valueSize": 1 + }, + { + "declaration": 26390, + "isOffset": false, + "isSlot": false, + "src": "5833:8:23", + "valueSize": 1 + }, + { + "declaration": 26390, + "isOffset": false, + "isSlot": false, + "src": "5911:8:23", + "valueSize": 1 + }, + { + "declaration": 26390, + "isOffset": false, + "isSlot": false, + "src": "5990:8:23", + "valueSize": 1 + }, + { + "declaration": 26390, + "isOffset": false, + "isSlot": false, + "src": "6069:8:23", + "valueSize": 1 + }, + { + "declaration": 26390, + "isOffset": false, + "isSlot": false, + "src": "6148:8:23", + "valueSize": 1 + }, + { + "declaration": 26436, + "isOffset": false, + "isSlot": false, + "src": "6331:6:23", + "valueSize": 1 + }, + { + "declaration": 26263, + "isOffset": false, + "isSlot": false, + "src": "5573:18:23", + "valueSize": 1 + }, + { + "declaration": 26263, + "isOffset": false, + "isSlot": false, + "src": "5640:18:23", + "valueSize": 1 + }, + { + "declaration": 26263, + "isOffset": false, + "isSlot": false, + "src": "5718:18:23", + "valueSize": 1 + }, + { + "declaration": 26263, + "isOffset": false, + "isSlot": false, + "src": "5796:18:23", + "valueSize": 1 + }, + { + "declaration": 26263, + "isOffset": false, + "isSlot": false, + "src": "5874:18:23", + "valueSize": 1 + }, + { + "declaration": 26263, + "isOffset": false, + "isSlot": false, + "src": "5952:18:23", + "valueSize": 1 + }, + { + "declaration": 26263, + "isOffset": false, + "isSlot": false, + "src": "6031:18:23", + "valueSize": 1 + }, + { + "declaration": 26263, + "isOffset": false, + "isSlot": false, + "src": "6110:18:23", + "valueSize": 1 + }, + { + "declaration": 26263, + "isOffset": false, + "isSlot": false, + "src": "6303:18:23", + "valueSize": 1 + }, + { + "declaration": 26263, + "isOffset": false, + "isSlot": false, + "src": "6362:18:23", + "valueSize": 1 + }, + { + "declaration": 26438, + "isOffset": false, + "isSlot": false, + "src": "6390:6:23", + "valueSize": 1 + } + ], + "id": 26452, + "nodeType": "InlineAssembly", + "src": "5411:996:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 26455, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26200, + "src": "6471:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + }, + { + "id": 26456, + "name": "verifierTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26263, + "src": "6494:18:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_VerifierTranscript_$26079_memory_ptr", + "typeString": "struct Types.VerifierTranscript memory" + } + }, + { + "expression": { + "id": 26457, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26257, + "src": "6530:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + }, + "id": 26458, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6550:1:23", + "memberName": "v", + "nodeType": "MemberAccess", + "referencedDeclaration": 25982, + "src": "6530:21:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 26459, + "name": "publicInputs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26207, + "src": "6569:12:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + }, + { + "typeIdentifier": "t_struct$_VerifierTranscript_$26079_memory_ptr", + "typeString": "struct Types.VerifierTranscript memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3] memory" + } + ], + "id": 26454, + "name": "verifyGateEvals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26710, + "src": "6438:15:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Proof_$26182_memory_ptr_$_t_struct$_VerifierTranscript_$26079_memory_ptr_$_t_uint256_$_t_array$_t_uint256_$3_memory_ptr_$returns$_t_bool_$", + "typeString": "function (struct Types.Proof memory,struct Types.VerifierTranscript memory,uint256,uint256[3] memory) pure returns (bool)" + } + }, + "id": 26460, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6438:157:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "56657269666965723a206761746520636865636b206661696c6564", + "id": 26461, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6609:29:23", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_95d09b04bc630942428b9089eaf74f853c69b428ae4a53604a1f0cf6e8c10673", + "typeString": "literal_string \"Verifier: gate check failed\"" + }, + "value": "Verifier: gate check failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_95d09b04bc630942428b9089eaf74f853c69b428ae4a53604a1f0cf6e8c10673", + "typeString": "literal_string \"Verifier: gate check failed\"" + } + ], + "id": 26453, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "6417:7:23", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 26462, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6417:231:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 26463, + "nodeType": "ExpressionStatement", + "src": "6417:231:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "id": 26466, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26200, + "src": "6754:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + }, + { + "id": 26467, + "name": "verifierTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26263, + "src": "6773:18:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_VerifierTranscript_$26079_memory_ptr", + "typeString": "struct Types.VerifierTranscript memory" + } + }, + { + "id": 26468, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26257, + "src": "6805:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + }, + { + "typeIdentifier": "t_struct$_VerifierTranscript_$26079_memory_ptr", + "typeString": "struct Types.VerifierTranscript memory" + }, + { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + ], + "id": 26465, + "name": "computeMultiopenFinaPolyAndEval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26676, + "src": "6709:31:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Proof_$26182_memory_ptr_$_t_struct$_VerifierTranscript_$26079_memory_ptr_$_t_struct$_ChallengeTranscript_$25997_memory_ptr_$returns$__$", + "typeString": "function (struct Types.Proof memory,struct Types.VerifierTranscript memory,struct Types.ChallengeTranscript memory) view" + } + }, + "id": 26469, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6709:125:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 26470, + "nodeType": "ExpressionStatement", + "src": "6709:125:23" + }, + { + "expression": { + "arguments": [ + { + "id": 26472, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26200, + "src": "6877:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + }, + { + "id": 26473, + "name": "verifierTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26263, + "src": "6896:18:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_VerifierTranscript_$26079_memory_ptr", + "typeString": "struct Types.VerifierTranscript memory" + } + }, + { + "id": 26474, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26257, + "src": "6928:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + }, + { + "id": 26475, + "name": "accumulator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26203, + "src": "6961:11:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + }, + { + "typeIdentifier": "t_struct$_VerifierTranscript_$26079_memory_ptr", + "typeString": "struct Types.VerifierTranscript memory" + }, + { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + }, + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + ], + "id": 26471, + "name": "verifyFinal", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26649, + "src": "6852:11:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Proof_$26182_memory_ptr_$_t_struct$_VerifierTranscript_$26079_memory_ptr_$_t_struct$_ChallengeTranscript_$25997_memory_ptr_$_t_struct$_G1Point_$25971_memory_ptr_$returns$_t_bool_$", + "typeString": "function (struct Types.Proof memory,struct Types.VerifierTranscript memory,struct Types.ChallengeTranscript memory,struct Types.G1Point memory) view returns (bool)" + } + }, + "id": 26476, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6852:130:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 26211, + "id": 26477, + "nodeType": "Return", + "src": "6845:137:23" + } + ] + }, + "functionSelector": "b3da592b", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "verify", + "nameLocation": "317:6:23", + "parameters": { + "id": 26208, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 26200, + "mutability": "mutable", + "name": "proof", + "nameLocation": "352:5:23", + "nodeType": "VariableDeclaration", + "scope": 26479, + "src": "333:24:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof" + }, + "typeName": { + "id": 26199, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26198, + "name": "Types.Proof", + "nameLocations": [ + "333:5:23", + "339:5:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 26182, + "src": "333:11:23" + }, + "referencedDeclaration": 26182, + "src": "333:11:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_storage_ptr", + "typeString": "struct Types.Proof" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 26203, + "mutability": "mutable", + "name": "accumulator", + "nameLocation": "388:11:23", + "nodeType": "VariableDeclaration", + "scope": 26479, + "src": "367:32:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point" + }, + "typeName": { + "id": 26202, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26201, + "name": "Types.G1Point", + "nameLocations": [ + "367:5:23", + "373:7:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25971, + "src": "367:13:23" + }, + "referencedDeclaration": 25971, + "src": "367:13:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage_ptr", + "typeString": "struct Types.G1Point" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 26207, + "mutability": "mutable", + "name": "publicInputs", + "nameLocation": "427:12:23", + "nodeType": "VariableDeclaration", + "scope": 26479, + "src": "409:30:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3]" + }, + "typeName": { + "baseType": { + "id": 26204, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "409:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 26206, + "length": { + "hexValue": "33", + "id": 26205, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "417:1:23", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "nodeType": "ArrayTypeName", + "src": "409:10:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_storage_ptr", + "typeString": "uint256[3]" + } + }, + "visibility": "internal" + } + ], + "src": "323:122:23" + }, + "returnParameters": { + "id": 26211, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 26210, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 26479, + "src": "467:4:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 26209, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "467:4:23", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "466:6:23" + }, + "scope": 26738, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 26649, + "nodeType": "FunctionDefinition", + "src": "6995:2063:23", + "nodes": [], + "body": { + "id": 26648, + "nodeType": "Block", + "src": "7249:1809:23", + "nodes": [], + "statements": [ + { + "assignments": [ + 26500 + ], + "declarations": [ + { + "constant": false, + "id": 26500, + "mutability": "mutable", + "name": "a1", + "nameLocation": "7382:2:23", + "nodeType": "VariableDeclaration", + "scope": 26648, + "src": "7361:23:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point" + }, + "typeName": { + "id": 26499, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26498, + "name": "Types.G1Point", + "nameLocations": [ + "7361:5:23", + "7367:7:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25971, + "src": "7361:13:23" + }, + "referencedDeclaration": 25971, + "src": "7361:13:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage_ptr", + "typeString": "struct Types.G1Point" + } + }, + "visibility": "internal" + } + ], + "id": 26509, + "initialValue": { + "arguments": [ + { + "id": 26502, + "name": "accumulator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26491, + "src": "7392:11:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + { + "arguments": [ + { + "expression": { + "expression": { + "id": 26504, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26482, + "src": "7412:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + }, + "id": 26505, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7418:11:23", + "memberName": "commitments", + "nodeType": "MemberAccess", + "referencedDeclaration": 26181, + "src": "7412:17:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Commitments_$26122_memory_ptr", + "typeString": "struct Types.Commitments memory" + } + }, + "id": 26506, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7430:2:23", + "memberName": "ci", + "nodeType": "MemberAccess", + "referencedDeclaration": 26106, + "src": "7412:20:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + ], + "id": 26503, + "name": "negate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24806, + "src": "7405:6:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_G1Point_$25971_memory_ptr_$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function (struct Types.G1Point memory) pure returns (struct Types.G1Point memory)" + } + }, + "id": 26507, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7405:28:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + }, + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + ], + "id": 26501, + "name": "plus", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24927, + "src": "7387:4:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_G1Point_$25971_memory_ptr_$_t_struct$_G1Point_$25971_memory_ptr_$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function (struct Types.G1Point memory,struct Types.G1Point memory) view returns (struct Types.G1Point memory)" + } + }, + "id": 26508, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7387:47:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7361:73:23" + }, + { + "assignments": [ + 26514 + ], + "declarations": [ + { + "constant": false, + "id": 26514, + "mutability": "mutable", + "name": "a2", + "nameLocation": "7538:2:23", + "nodeType": "VariableDeclaration", + "scope": 26648, + "src": "7517:23:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point" + }, + "typeName": { + "id": 26513, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26512, + "name": "Types.G1Point", + "nameLocations": [ + "7517:5:23", + "7523:7:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25971, + "src": "7517:13:23" + }, + "referencedDeclaration": 25971, + "src": "7517:13:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage_ptr", + "typeString": "struct Types.G1Point" + } + }, + "visibility": "internal" + } + ], + "id": 26531, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "expression": { + "id": 26519, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "7596:9:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 26520, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "7606:10:23", + "memberName": "SRS_G1_T_X", + "nodeType": "MemberAccess", + "referencedDeclaration": 24991, + "src": "7596:20:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 26521, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "7618:9:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 26522, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "7628:10:23", + "memberName": "SRS_G1_T_Y", + "nodeType": "MemberAccess", + "referencedDeclaration": 24994, + "src": "7618:20:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 26517, + "name": "Types", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26183, + "src": "7582:5:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Types_$26183_$", + "typeString": "type(library Types)" + } + }, + "id": 26518, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7588:7:23", + "memberName": "G1Point", + "nodeType": "MemberAccess", + "referencedDeclaration": 25971, + "src": "7582:13:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_G1Point_$25971_storage_ptr_$", + "typeString": "type(struct Types.G1Point storage pointer)" + } + }, + "id": 26523, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7582:57:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 26524, + "name": "BN254", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24968, + "src": "7657:5:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_BN254_$24968_$", + "typeString": "type(contract BN254)" + } + }, + "id": 26525, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7663:5:23", + "memberName": "P1Neg", + "nodeType": "MemberAccess", + "referencedDeclaration": 24744, + "src": "7657:11:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function () pure returns (struct Types.G1Point memory)" + } + }, + "id": 26526, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7657:13:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + }, + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + ], + "id": 26516, + "name": "plus", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24927, + "src": "7560:4:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_G1Point_$25971_memory_ptr_$_t_struct$_G1Point_$25971_memory_ptr_$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function (struct Types.G1Point memory,struct Types.G1Point memory) view returns (struct Types.G1Point memory)" + } + }, + "id": 26527, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7560:124:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + { + "expression": { + "id": 26528, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26488, + "src": "7698:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + }, + "id": 26529, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7718:4:23", + "memberName": "hi_2", + "nodeType": "MemberAccess", + "referencedDeclaration": 25984, + "src": "7698:24:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 26515, + "name": "mul", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24862, + "src": "7543:3:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_G1Point_$25971_memory_ptr_$_t_uint256_$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function (struct Types.G1Point memory,uint256) view returns (struct Types.G1Point memory)" + } + }, + "id": 26530, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7543:189:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7517:215:23" + }, + { + "assignments": [ + 26536 + ], + "declarations": [ + { + "constant": false, + "id": 26536, + "mutability": "mutable", + "name": "a3", + "nameLocation": "7858:2:23", + "nodeType": "VariableDeclaration", + "scope": 26648, + "src": "7837:23:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point" + }, + "typeName": { + "id": 26535, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26534, + "name": "Types.G1Point", + "nameLocations": [ + "7837:5:23", + "7843:7:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25971, + "src": "7837:13:23" + }, + "referencedDeclaration": 25971, + "src": "7837:13:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage_ptr", + "typeString": "struct Types.G1Point" + } + }, + "visibility": "internal" + } + ], + "id": 26563, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "expression": { + "expression": { + "id": 26541, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26482, + "src": "7932:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + }, + "id": 26542, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7938:14:23", + "memberName": "multiopenProof", + "nodeType": "MemberAccess", + "referencedDeclaration": 26175, + "src": "7932:20:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MultiopenProof_$26172_memory_ptr", + "typeString": "struct Types.MultiopenProof memory" + } + }, + "id": 26543, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7953:16:23", + "memberName": "final_poly_proof", + "nodeType": "MemberAccess", + "referencedDeclaration": 26171, + "src": "7932:37:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + { + "expression": { + "id": 26544, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26488, + "src": "7971:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + }, + "id": 26545, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7991:2:23", + "memberName": "x3", + "nodeType": "MemberAccess", + "referencedDeclaration": 25992, + "src": "7971:22:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 26540, + "name": "mul", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24862, + "src": "7928:3:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_G1Point_$25971_memory_ptr_$_t_uint256_$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function (struct Types.G1Point memory,uint256) view returns (struct Types.G1Point memory)" + } + }, + "id": 26546, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7928:66:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 26549, + "name": "BN254", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24968, + "src": "8028:5:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_BN254_$24968_$", + "typeString": "type(contract BN254)" + } + }, + "id": 26550, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8034:2:23", + "memberName": "P1", + "nodeType": "MemberAccess", + "referencedDeclaration": 24731, + "src": "8028:8:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function () pure returns (struct Types.G1Point memory)" + } + }, + "id": 26551, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8028:10:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + { + "expression": { + "id": 26552, + "name": "verifierTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26485, + "src": "8040:18:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_VerifierTranscript_$26079_memory_ptr", + "typeString": "struct Types.VerifierTranscript memory" + } + }, + "id": 26553, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8059:15:23", + "memberName": "final_poly_eval", + "nodeType": "MemberAccess", + "referencedDeclaration": 26078, + "src": "8040:34:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 26548, + "name": "mul", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24862, + "src": "8024:3:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_G1Point_$25971_memory_ptr_$_t_uint256_$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function (struct Types.G1Point memory,uint256) view returns (struct Types.G1Point memory)" + } + }, + "id": 26554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8024:51:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + ], + "id": 26547, + "name": "negate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24806, + "src": "8017:6:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_G1Point_$25971_memory_ptr_$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function (struct Types.G1Point memory) pure returns (struct Types.G1Point memory)" + } + }, + "id": 26555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8017:59:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + }, + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + ], + "id": 26539, + "name": "plus", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24927, + "src": "7902:4:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_G1Point_$25971_memory_ptr_$_t_struct$_G1Point_$25971_memory_ptr_$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function (struct Types.G1Point memory,struct Types.G1Point memory) view returns (struct Types.G1Point memory)" + } + }, + "id": 26556, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7902:192:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + { + "expression": { + "id": 26557, + "name": "verifierTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26485, + "src": "8113:18:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_VerifierTranscript_$26079_memory_ptr", + "typeString": "struct Types.VerifierTranscript memory" + } + }, + "id": 26558, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8132:10:23", + "memberName": "final_poly", + "nodeType": "MemberAccess", + "referencedDeclaration": 26076, + "src": "8113:29:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + }, + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + ], + "id": 26538, + "name": "plus", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24927, + "src": "7880:4:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_G1Point_$25971_memory_ptr_$_t_struct$_G1Point_$25971_memory_ptr_$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function (struct Types.G1Point memory,struct Types.G1Point memory) view returns (struct Types.G1Point memory)" + } + }, + "id": 26559, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7880:276:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + { + "expression": { + "id": 26560, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26488, + "src": "8171:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + }, + "id": 26561, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8191:1:23", + "memberName": "s", + "nodeType": "MemberAccess", + "referencedDeclaration": 25996, + "src": "8171:21:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 26537, + "name": "mul", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24862, + "src": "7863:3:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_G1Point_$25971_memory_ptr_$_t_uint256_$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function (struct Types.G1Point memory,uint256) view returns (struct Types.G1Point memory)" + } + }, + "id": 26562, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7863:339:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7837:365:23" + }, + { + "assignments": [ + 26568 + ], + "declarations": [ + { + "constant": false, + "id": 26568, + "mutability": "mutable", + "name": "a_lhs", + "nameLocation": "8234:5:23", + "nodeType": "VariableDeclaration", + "scope": 26648, + "src": "8213:26:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point" + }, + "typeName": { + "id": 26567, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26566, + "name": "Types.G1Point", + "nameLocations": [ + "8213:5:23", + "8219:7:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25971, + "src": "8213:13:23" + }, + "referencedDeclaration": 25971, + "src": "8213:13:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage_ptr", + "typeString": "struct Types.G1Point" + } + }, + "visibility": "internal" + } + ], + "id": 26576, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 26571, + "name": "a1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26500, + "src": "8252:2:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + { + "id": 26572, + "name": "a2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26514, + "src": "8256:2:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + }, + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + ], + "id": 26570, + "name": "plus", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24927, + "src": "8247:4:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_G1Point_$25971_memory_ptr_$_t_struct$_G1Point_$25971_memory_ptr_$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function (struct Types.G1Point memory,struct Types.G1Point memory) view returns (struct Types.G1Point memory)" + } + }, + "id": 26573, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8247:12:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + { + "id": 26574, + "name": "a3", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26536, + "src": "8261:2:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + }, + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + ], + "id": 26569, + "name": "plus", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24927, + "src": "8242:4:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_G1Point_$25971_memory_ptr_$_t_struct$_G1Point_$25971_memory_ptr_$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function (struct Types.G1Point memory,struct Types.G1Point memory) view returns (struct Types.G1Point memory)" + } + }, + "id": 26575, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8242:22:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8213:51:23" + }, + { + "assignments": [ + 26581 + ], + "declarations": [ + { + "constant": false, + "id": 26581, + "mutability": "mutable", + "name": "a_rhs", + "nameLocation": "8295:5:23", + "nodeType": "VariableDeclaration", + "scope": 26648, + "src": "8274:26:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G2Point_$25980_memory_ptr", + "typeString": "struct Types.G2Point" + }, + "typeName": { + "id": 26580, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26579, + "name": "Types.G2Point", + "nameLocations": [ + "8274:5:23", + "8280:7:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25980, + "src": "8274:13:23" + }, + "referencedDeclaration": 25980, + "src": "8274:13:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G2Point_$25980_storage_ptr", + "typeString": "struct Types.G2Point" + } + }, + "visibility": "internal" + } + ], + "id": 26585, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 26582, + "name": "BN254", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24968, + "src": "8303:5:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_BN254_$24968_$", + "typeString": "type(contract BN254)" + } + }, + "id": 26583, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8309:2:23", + "memberName": "P2", + "nodeType": "MemberAccess", + "referencedDeclaration": 24760, + "src": "8303:8:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_G2Point_$25980_memory_ptr_$", + "typeString": "function () pure returns (struct Types.G2Point memory)" + } + }, + "id": 26584, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8303:10:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G2Point_$25980_memory_ptr", + "typeString": "struct Types.G2Point memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8274:39:23" + }, + { + "assignments": [ + 26590 + ], + "declarations": [ + { + "constant": false, + "id": 26590, + "mutability": "mutable", + "name": "b_lhs", + "nameLocation": "8396:5:23", + "nodeType": "VariableDeclaration", + "scope": 26648, + "src": "8375:26:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point" + }, + "typeName": { + "id": 26589, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26588, + "name": "Types.G1Point", + "nameLocations": [ + "8375:5:23", + "8381:7:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25971, + "src": "8375:13:23" + }, + "referencedDeclaration": 25971, + "src": "8375:13:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage_ptr", + "typeString": "struct Types.G1Point" + } + }, + "visibility": "internal" + } + ], + "id": 26596, + "initialValue": { + "arguments": [ + { + "expression": { + "expression": { + "id": 26592, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26482, + "src": "8411:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + }, + "id": 26593, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8417:11:23", + "memberName": "commitments", + "nodeType": "MemberAccess", + "referencedDeclaration": 26181, + "src": "8411:17:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Commitments_$26122_memory_ptr", + "typeString": "struct Types.Commitments memory" + } + }, + "id": 26594, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8429:2:23", + "memberName": "zi", + "nodeType": "MemberAccess", + "referencedDeclaration": 26103, + "src": "8411:20:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + ], + "id": 26591, + "name": "negate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24806, + "src": "8404:6:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_G1Point_$25971_memory_ptr_$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function (struct Types.G1Point memory) pure returns (struct Types.G1Point memory)" + } + }, + "id": 26595, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8404:28:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8375:57:23" + }, + { + "assignments": [ + 26601 + ], + "declarations": [ + { + "constant": false, + "id": 26601, + "mutability": "mutable", + "name": "b_rhs", + "nameLocation": "8463:5:23", + "nodeType": "VariableDeclaration", + "scope": 26648, + "src": "8442:26:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G2Point_$25980_memory_ptr", + "typeString": "struct Types.G2Point" + }, + "typeName": { + "id": 26600, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26599, + "name": "Types.G2Point", + "nameLocations": [ + "8442:5:23", + "8448:7:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25980, + "src": "8442:13:23" + }, + "referencedDeclaration": 25980, + "src": "8442:13:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G2Point_$25980_storage_ptr", + "typeString": "struct Types.G2Point" + } + }, + "visibility": "internal" + } + ], + "id": 26605, + "initialValue": { + "expression": { + "expression": { + "id": 26602, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26482, + "src": "8471:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + }, + "id": 26603, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8477:11:23", + "memberName": "commitments", + "nodeType": "MemberAccess", + "referencedDeclaration": 26181, + "src": "8471:17:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Commitments_$26122_memory_ptr", + "typeString": "struct Types.Commitments memory" + } + }, + "id": 26604, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8489:1:23", + "memberName": "w", + "nodeType": "MemberAccess", + "referencedDeclaration": 26121, + "src": "8471:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G2Point_$25980_memory_ptr", + "typeString": "struct Types.G2Point memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8442:48:23" + }, + { + "assignments": [ + 26610 + ], + "declarations": [ + { + "constant": false, + "id": 26610, + "mutability": "mutable", + "name": "c_lhs", + "nameLocation": "8590:5:23", + "nodeType": "VariableDeclaration", + "scope": 26648, + "src": "8569:26:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point" + }, + "typeName": { + "id": 26609, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26608, + "name": "Types.G1Point", + "nameLocations": [ + "8569:5:23", + "8575:7:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25971, + "src": "8569:13:23" + }, + "referencedDeclaration": 25971, + "src": "8569:13:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage_ptr", + "typeString": "struct Types.G1Point" + } + }, + "visibility": "internal" + } + ], + "id": 26620, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "expression": { + "id": 26613, + "name": "proof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26482, + "src": "8609:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof memory" + } + }, + "id": 26614, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8615:14:23", + "memberName": "multiopenProof", + "nodeType": "MemberAccess", + "referencedDeclaration": 26175, + "src": "8609:20:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MultiopenProof_$26172_memory_ptr", + "typeString": "struct Types.MultiopenProof memory" + } + }, + "id": 26615, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8630:16:23", + "memberName": "final_poly_proof", + "nodeType": "MemberAccess", + "referencedDeclaration": 26171, + "src": "8609:37:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + ], + "id": 26612, + "name": "negate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24806, + "src": "8602:6:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_G1Point_$25971_memory_ptr_$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function (struct Types.G1Point memory) pure returns (struct Types.G1Point memory)" + } + }, + "id": 26616, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8602:45:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + { + "expression": { + "id": 26617, + "name": "challengeTranscript", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26488, + "src": "8649:19:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript memory" + } + }, + "id": 26618, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8669:1:23", + "memberName": "s", + "nodeType": "MemberAccess", + "referencedDeclaration": 25996, + "src": "8649:21:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 26611, + "name": "mul", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24862, + "src": "8598:3:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_G1Point_$25971_memory_ptr_$_t_uint256_$returns$_t_struct$_G1Point_$25971_memory_ptr_$", + "typeString": "function (struct Types.G1Point memory,uint256) view returns (struct Types.G1Point memory)" + } + }, + "id": 26619, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8598:73:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8569:102:23" + }, + { + "assignments": [ + 26625 + ], + "declarations": [ + { + "constant": false, + "id": 26625, + "mutability": "mutable", + "name": "c_rhs", + "nameLocation": "8702:5:23", + "nodeType": "VariableDeclaration", + "scope": 26648, + "src": "8681:26:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G2Point_$25980_memory_ptr", + "typeString": "struct Types.G2Point" + }, + "typeName": { + "id": 26624, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26623, + "name": "Types.G2Point", + "nameLocations": [ + "8681:5:23", + "8687:7:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25980, + "src": "8681:13:23" + }, + "referencedDeclaration": 25980, + "src": "8681:13:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G2Point_$25980_storage_ptr", + "typeString": "struct Types.G2Point" + } + }, + "visibility": "internal" + } + ], + "id": 26637, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 26628, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "8737:9:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 26629, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "8747:12:23", + "memberName": "SRS_G2_1_X_0", + "nodeType": "MemberAccess", + "referencedDeclaration": 24997, + "src": "8737:22:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 26630, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "8773:9:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 26631, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "8783:12:23", + "memberName": "SRS_G2_1_X_1", + "nodeType": "MemberAccess", + "referencedDeclaration": 25000, + "src": "8773:22:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 26632, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "8809:9:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 26633, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "8819:12:23", + "memberName": "SRS_G2_1_Y_0", + "nodeType": "MemberAccess", + "referencedDeclaration": 25003, + "src": "8809:22:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 26634, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "8845:9:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 26635, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "8855:12:23", + "memberName": "SRS_G2_1_Y_1", + "nodeType": "MemberAccess", + "referencedDeclaration": 25006, + "src": "8845:22:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 26626, + "name": "Types", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26183, + "src": "8710:5:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Types_$26183_$", + "typeString": "type(library Types)" + } + }, + "id": 26627, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8716:7:23", + "memberName": "G2Point", + "nodeType": "MemberAccess", + "referencedDeclaration": 25980, + "src": "8710:13:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_G2Point_$25980_storage_ptr_$", + "typeString": "type(struct Types.G2Point storage pointer)" + } + }, + "id": 26636, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8710:167:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_G2Point_$25980_memory_ptr", + "typeString": "struct Types.G2Point memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8681:196:23" + }, + { + "expression": { + "arguments": [ + { + "id": 26640, + "name": "a_lhs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26568, + "src": "8977:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + { + "id": 26641, + "name": "a_rhs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26581, + "src": "8984:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G2Point_$25980_memory_ptr", + "typeString": "struct Types.G2Point memory" + } + }, + { + "id": 26642, + "name": "b_lhs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26590, + "src": "9003:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + { + "id": 26643, + "name": "b_rhs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26601, + "src": "9010:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G2Point_$25980_memory_ptr", + "typeString": "struct Types.G2Point memory" + } + }, + { + "id": 26644, + "name": "c_lhs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26610, + "src": "9029:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + } + }, + { + "id": 26645, + "name": "c_rhs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26625, + "src": "9036:5:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G2Point_$25980_memory_ptr", + "typeString": "struct Types.G2Point memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + }, + { + "typeIdentifier": "t_struct$_G2Point_$25980_memory_ptr", + "typeString": "struct Types.G2Point memory" + }, + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + }, + { + "typeIdentifier": "t_struct$_G2Point_$25980_memory_ptr", + "typeString": "struct Types.G2Point memory" + }, + { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point memory" + }, + { + "typeIdentifier": "t_struct$_G2Point_$25980_memory_ptr", + "typeString": "struct Types.G2Point memory" + } + ], + "expression": { + "id": 26638, + "name": "BN254", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 24968, + "src": "8945:5:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_BN254_$24968_$", + "typeString": "type(contract BN254)" + } + }, + "id": 26639, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8951:12:23", + "memberName": "pairingCheck", + "nodeType": "MemberAccess", + "referencedDeclaration": 24967, + "src": "8945:18:23", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_G1Point_$25971_memory_ptr_$_t_struct$_G2Point_$25980_memory_ptr_$_t_struct$_G1Point_$25971_memory_ptr_$_t_struct$_G2Point_$25980_memory_ptr_$_t_struct$_G1Point_$25971_memory_ptr_$_t_struct$_G2Point_$25980_memory_ptr_$returns$_t_bool_$", + "typeString": "function (struct Types.G1Point memory,struct Types.G2Point memory,struct Types.G1Point memory,struct Types.G2Point memory,struct Types.G1Point memory,struct Types.G2Point memory) view returns (bool)" + } + }, + "id": 26646, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8945:106:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 26495, + "id": 26647, + "nodeType": "Return", + "src": "8938:113:23" + } + ] + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "verifyFinal", + "nameLocation": "7004:11:23", + "parameters": { + "id": 26492, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 26482, + "mutability": "mutable", + "name": "proof", + "nameLocation": "7044:5:23", + "nodeType": "VariableDeclaration", + "scope": 26649, + "src": "7025:24:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof" + }, + "typeName": { + "id": 26481, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26480, + "name": "Types.Proof", + "nameLocations": [ + "7025:5:23", + "7031:5:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 26182, + "src": "7025:11:23" + }, + "referencedDeclaration": 26182, + "src": "7025:11:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_storage_ptr", + "typeString": "struct Types.Proof" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 26485, + "mutability": "mutable", + "name": "verifierTranscript", + "nameLocation": "7091:18:23", + "nodeType": "VariableDeclaration", + "scope": 26649, + "src": "7059:50:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_VerifierTranscript_$26079_memory_ptr", + "typeString": "struct Types.VerifierTranscript" + }, + "typeName": { + "id": 26484, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26483, + "name": "Types.VerifierTranscript", + "nameLocations": [ + "7059:5:23", + "7065:18:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 26079, + "src": "7059:24:23" + }, + "referencedDeclaration": 26079, + "src": "7059:24:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_VerifierTranscript_$26079_storage_ptr", + "typeString": "struct Types.VerifierTranscript" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 26488, + "mutability": "mutable", + "name": "challengeTranscript", + "nameLocation": "7152:19:23", + "nodeType": "VariableDeclaration", + "scope": 26649, + "src": "7119:52:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript" + }, + "typeName": { + "id": 26487, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26486, + "name": "Types.ChallengeTranscript", + "nameLocations": [ + "7119:5:23", + "7125:19:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25997, + "src": "7119:25:23" + }, + "referencedDeclaration": 25997, + "src": "7119:25:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_storage_ptr", + "typeString": "struct Types.ChallengeTranscript" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 26491, + "mutability": "mutable", + "name": "accumulator", + "nameLocation": "7202:11:23", + "nodeType": "VariableDeclaration", + "scope": 26649, + "src": "7181:32:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_memory_ptr", + "typeString": "struct Types.G1Point" + }, + "typeName": { + "id": 26490, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26489, + "name": "Types.G1Point", + "nameLocations": [ + "7181:5:23", + "7187:7:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25971, + "src": "7181:13:23" + }, + "referencedDeclaration": 25971, + "src": "7181:13:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_G1Point_$25971_storage_ptr", + "typeString": "struct Types.G1Point" + } + }, + "visibility": "internal" + } + ], + "src": "7015:204:23" + }, + "returnParameters": { + "id": 26495, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 26494, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 26649, + "src": "7243:4:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 26493, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7243:4:23", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "7242:6:23" + }, + "scope": 26738, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "id": 26676, + "nodeType": "FunctionDefinition", + "src": "9064:22779:23", + "nodes": [], + "body": { + "id": 26675, + "nodeType": "Block", + "src": "9281:22562:23", + "nodes": [], + "statements": [ + { + "assignments": [ + 26662 + ], + "declarations": [ + { + "constant": false, + "id": 26662, + "mutability": "mutable", + "name": "p", + "nameLocation": "9299:1:23", + "nodeType": "VariableDeclaration", + "scope": 26675, + "src": "9291:9:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 26661, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9291:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 26665, + "initialValue": { + "expression": { + "id": 26663, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "9303:9:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 26664, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "9313:7:23", + "memberName": "PRIME_R", + "nodeType": "MemberAccess", + "referencedDeclaration": 24976, + "src": "9303:17:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9291:29:23" + }, + { + "assignments": [ + 26667 + ], + "declarations": [ + { + "constant": false, + "id": 26667, + "mutability": "mutable", + "name": "success", + "nameLocation": "9335:7:23", + "nodeType": "VariableDeclaration", + "scope": 26675, + "src": "9330:12:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 26666, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9330:4:23", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 26668, + "nodeType": "VariableDeclarationStatement", + "src": "9330:12:23" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "9361:22400:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "9376:47:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "challengeTranscript", + "nodeType": "YulIdentifier", + "src": "9396:19:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9417:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9392:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "9392:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "9386:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "9386:37:23" + }, + "variables": [ + { + "name": "x1", + "nodeType": "YulTypedName", + "src": "9380:2:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9436:47:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "challengeTranscript", + "nodeType": "YulIdentifier", + "src": "9456:19:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9477:4:23", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9452:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "9452:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "9446:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "9446:37:23" + }, + "variables": [ + { + "name": "x2", + "nodeType": "YulTypedName", + "src": "9440:2:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9496:47:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "challengeTranscript", + "nodeType": "YulIdentifier", + "src": "9516:19:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9537:4:23", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9512:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "9512:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "9506:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "9506:37:23" + }, + "variables": [ + { + "name": "x4", + "nodeType": "YulTypedName", + "src": "9500:2:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9600:33:23", + "value": { + "arguments": [ + { + "name": "x1", + "nodeType": "YulIdentifier", + "src": "9623:2:23" + }, + { + "name": "x1", + "nodeType": "YulIdentifier", + "src": "9627:2:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "9631:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "9616:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "9616:17:23" + }, + "variables": [ + { + "name": "x1_pow_2", + "nodeType": "YulTypedName", + "src": "9604:8:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9646:39:23", + "value": { + "arguments": [ + { + "name": "x1_pow_2", + "nodeType": "YulIdentifier", + "src": "9669:8:23" + }, + { + "name": "x1", + "nodeType": "YulIdentifier", + "src": "9679:2:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "9683:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "9662:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "9662:23:23" + }, + "variables": [ + { + "name": "x1_pow_3", + "nodeType": "YulTypedName", + "src": "9650:8:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9698:39:23", + "value": { + "arguments": [ + { + "name": "x1_pow_3", + "nodeType": "YulIdentifier", + "src": "9721:8:23" + }, + { + "name": "x1", + "nodeType": "YulIdentifier", + "src": "9731:2:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "9735:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "9714:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "9714:23:23" + }, + "variables": [ + { + "name": "x1_pow_4", + "nodeType": "YulTypedName", + "src": "9702:8:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "9761:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9781:5:23", + "type": "", + "value": "0x1a0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9757:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "9757:30:23" + }, + { + "name": "x1_pow_2", + "nodeType": "YulIdentifier", + "src": "9789:8:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9750:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "9750:48:23" + }, + "nodeType": "YulExpressionStatement", + "src": "9750:48:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "9822:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9842:5:23", + "type": "", + "value": "0x1c0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9818:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "9818:30:23" + }, + { + "name": "x1_pow_3", + "nodeType": "YulIdentifier", + "src": "9850:8:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9811:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "9811:48:23" + }, + "nodeType": "YulExpressionStatement", + "src": "9811:48:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "9883:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9903:5:23", + "type": "", + "value": "0x1e0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9879:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "9879:30:23" + }, + { + "name": "x1_pow_4", + "nodeType": "YulIdentifier", + "src": "9911:8:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9872:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "9872:48:23" + }, + "nodeType": "YulExpressionStatement", + "src": "9872:48:23" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9977:33:23", + "value": { + "arguments": [ + { + "name": "x2", + "nodeType": "YulIdentifier", + "src": "10000:2:23" + }, + { + "name": "x2", + "nodeType": "YulIdentifier", + "src": "10004:2:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "10008:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "9993:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "9993:17:23" + }, + "variables": [ + { + "name": "x2_pow_2", + "nodeType": "YulTypedName", + "src": "9981:8:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10023:39:23", + "value": { + "arguments": [ + { + "name": "x2_pow_2", + "nodeType": "YulIdentifier", + "src": "10046:8:23" + }, + { + "name": "x2", + "nodeType": "YulIdentifier", + "src": "10056:2:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "10060:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "10039:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "10039:23:23" + }, + "variables": [ + { + "name": "x2_pow_3", + "nodeType": "YulTypedName", + "src": "10027:8:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "10086:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10106:5:23", + "type": "", + "value": "0x200" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10082:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "10082:30:23" + }, + { + "name": "x2_pow_2", + "nodeType": "YulIdentifier", + "src": "10114:8:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10075:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "10075:48:23" + }, + "nodeType": "YulExpressionStatement", + "src": "10075:48:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "10147:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10167:5:23", + "type": "", + "value": "0x220" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10143:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "10143:30:23" + }, + { + "name": "x2_pow_3", + "nodeType": "YulIdentifier", + "src": "10175:8:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10136:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "10136:48:23" + }, + "nodeType": "YulExpressionStatement", + "src": "10136:48:23" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10241:33:23", + "value": { + "arguments": [ + { + "name": "x4", + "nodeType": "YulIdentifier", + "src": "10264:2:23" + }, + { + "name": "x4", + "nodeType": "YulIdentifier", + "src": "10268:2:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "10272:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "10257:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "10257:17:23" + }, + "variables": [ + { + "name": "x4_pow_2", + "nodeType": "YulTypedName", + "src": "10245:8:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10287:39:23", + "value": { + "arguments": [ + { + "name": "x4_pow_2", + "nodeType": "YulIdentifier", + "src": "10310:8:23" + }, + { + "name": "x4", + "nodeType": "YulIdentifier", + "src": "10320:2:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "10324:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "10303:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "10303:23:23" + }, + "variables": [ + { + "name": "x4_pow_3", + "nodeType": "YulTypedName", + "src": "10291:8:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10339:39:23", + "value": { + "arguments": [ + { + "name": "x4_pow_3", + "nodeType": "YulIdentifier", + "src": "10362:8:23" + }, + { + "name": "x4", + "nodeType": "YulIdentifier", + "src": "10372:2:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "10376:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "10355:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "10355:23:23" + }, + "variables": [ + { + "name": "x4_pow_4", + "nodeType": "YulTypedName", + "src": "10343:8:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "10402:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10422:5:23", + "type": "", + "value": "0x240" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10398:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "10398:30:23" + }, + { + "name": "x4_pow_2", + "nodeType": "YulIdentifier", + "src": "10430:8:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10391:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "10391:48:23" + }, + "nodeType": "YulExpressionStatement", + "src": "10391:48:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "10463:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10483:5:23", + "type": "", + "value": "0x260" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10459:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "10459:30:23" + }, + { + "name": "x4_pow_3", + "nodeType": "YulIdentifier", + "src": "10491:8:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10452:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "10452:48:23" + }, + "nodeType": "YulExpressionStatement", + "src": "10452:48:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "10524:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10544:5:23", + "type": "", + "value": "0x280" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10520:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "10520:30:23" + }, + { + "name": "x4_pow_4", + "nodeType": "YulIdentifier", + "src": "10552:8:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10513:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "10513:48:23" + }, + "nodeType": "YulExpressionStatement", + "src": "10513:48:23" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10575:45:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "proof", + "nodeType": "YulIdentifier", + "src": "10607:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10614:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10603:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "10603:16:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "10597:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "10597:23:23" + }, + "variables": [ + { + "name": "commitmentsPtr", + "nodeType": "YulTypedName", + "src": "10579:14:23", + "type": "" + } + ] + }, + { + "nodeType": "YulBlock", + "src": "10633:4012:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "10647:7:23", + "variables": [ + { + "name": "q_x", + "nodeType": "YulTypedName", + "src": "10651:3:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10667:7:23", + "variables": [ + { + "name": "q_y", + "nodeType": "YulTypedName", + "src": "10671:3:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10798:23:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10816:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "10810:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "10810:11:23" + }, + "variables": [ + { + "name": "mPtr", + "nodeType": "YulTypedName", + "src": "10802:4:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "10910:4:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "10939:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "10933:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "10933:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10956:5:23", + "type": "", + "value": "0x100" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10929:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "10929:33:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "10923:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "10923:40:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10899:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "10899:65:23" + }, + "nodeType": "YulExpressionStatement", + "src": "10899:65:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "10988:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10994:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10984:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "10984:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "11017:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11011:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "11011:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11034:5:23", + "type": "", + "value": "0x120" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11007:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "11007:33:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11001:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "11001:40:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10977:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "10977:65:23" + }, + "nodeType": "YulExpressionStatement", + "src": "10977:65:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "11066:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11072:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11062:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "11062:15:23" + }, + { + "name": "x1", + "nodeType": "YulIdentifier", + "src": "11079:2:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11055:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "11055:27:23" + }, + "nodeType": "YulExpressionStatement", + "src": "11055:27:23" + }, + { + "nodeType": "YulAssignment", + "src": "11095:66:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "11121:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "11121:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11128:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "11117:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "11117:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11135:1:23", + "type": "", + "value": "7" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "11138:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11144:4:23", + "type": "", + "value": "0x60" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11150:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11156:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "11106:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "11106:55:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "11095:7:23" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "11175:29:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11199:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11193:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "11193:11:23" + }, + "variables": [ + { + "name": "x1_mul_c_x", + "nodeType": "YulTypedName", + "src": "11179:10:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "11217:29:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11241:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11235:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "11235:11:23" + }, + "variables": [ + { + "name": "x1_mul_c_y", + "nodeType": "YulTypedName", + "src": "11221:10:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "11356:19:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11370:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11364:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "11364:11:23" + }, + "variableNames": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "11356:4:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "11399:4:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "11428:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11422:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "11422:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11445:5:23", + "type": "", + "value": "0x140" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11418:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "11418:33:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11412:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "11412:40:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11388:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "11388:65:23" + }, + "nodeType": "YulExpressionStatement", + "src": "11388:65:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "11477:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11483:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11473:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "11473:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "11506:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11500:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "11500:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11523:5:23", + "type": "", + "value": "0x160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11496:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "11496:33:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11490:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "11490:40:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11466:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "11466:65:23" + }, + "nodeType": "YulExpressionStatement", + "src": "11466:65:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "11555:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11561:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11551:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "11551:15:23" + }, + { + "name": "x1_pow_2", + "nodeType": "YulIdentifier", + "src": "11568:8:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11544:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "11544:33:23" + }, + "nodeType": "YulExpressionStatement", + "src": "11544:33:23" + }, + { + "nodeType": "YulAssignment", + "src": "11590:80:23", + "value": { + "arguments": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "11605:7:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "11629:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "11629:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11636:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "11625:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "11625:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11643:1:23", + "type": "", + "value": "7" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "11646:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11652:4:23", + "type": "", + "value": "0x60" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11658:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11664:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "11614:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "11614:55:23" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "11601:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "11601:69:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "11590:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "11789:19:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11803:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11797:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "11797:11:23" + }, + "variableNames": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "11789:4:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "11828:4:23" + }, + { + "name": "x1_mul_c_x", + "nodeType": "YulIdentifier", + "src": "11834:10:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11821:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "11821:24:23" + }, + "nodeType": "YulExpressionStatement", + "src": "11821:24:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "11869:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11875:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11865:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "11865:15:23" + }, + { + "name": "x1_mul_c_y", + "nodeType": "YulIdentifier", + "src": "11882:10:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11858:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "11858:35:23" + }, + "nodeType": "YulExpressionStatement", + "src": "11858:35:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "11917:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11923:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11913:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "11913:15:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11936:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11930:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "11930:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11906:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "11906:36:23" + }, + "nodeType": "YulExpressionStatement", + "src": "11906:36:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "11966:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11972:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11962:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "11962:15:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11985:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11979:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "11979:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11955:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "11955:36:23" + }, + "nodeType": "YulExpressionStatement", + "src": "11955:36:23" + }, + { + "nodeType": "YulAssignment", + "src": "12004:80:23", + "value": { + "arguments": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "12019:7:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "12043:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "12043:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12050:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "12039:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "12039:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12057:1:23", + "type": "", + "value": "6" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "12060:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12066:4:23", + "type": "", + "value": "0x80" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12072:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12078:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "12028:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "12028:55:23" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "12015:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "12015:69:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "12004:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "12097:18:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12110:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12104:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "12104:11:23" + }, + "variableNames": [ + { + "name": "q_x", + "nodeType": "YulIdentifier", + "src": "12097:3:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "12128:18:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12141:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12135:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "12135:11:23" + }, + "variableNames": [ + { + "name": "q_y", + "nodeType": "YulIdentifier", + "src": "12128:3:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "12255:19:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12269:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12263:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "12263:11:23" + }, + "variableNames": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "12255:4:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "12298:4:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "12327:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12321:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "12321:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12344:5:23", + "type": "", + "value": "0x180" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12317:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "12317:33:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12311:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "12311:40:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12287:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "12287:65:23" + }, + "nodeType": "YulExpressionStatement", + "src": "12287:65:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "12376:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12382:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12372:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "12372:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "12405:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12399:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "12399:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12422:5:23", + "type": "", + "value": "0x1a0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12395:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "12395:33:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12389:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "12389:40:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12365:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "12365:65:23" + }, + "nodeType": "YulExpressionStatement", + "src": "12365:65:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "12454:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12460:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12450:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "12450:15:23" + }, + { + "name": "x1_pow_3", + "nodeType": "YulIdentifier", + "src": "12467:8:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12443:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "12443:33:23" + }, + "nodeType": "YulExpressionStatement", + "src": "12443:33:23" + }, + { + "nodeType": "YulAssignment", + "src": "12489:80:23", + "value": { + "arguments": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "12504:7:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "12528:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "12528:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12535:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "12524:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "12524:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12542:1:23", + "type": "", + "value": "7" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "12545:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12551:4:23", + "type": "", + "value": "0x60" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12557:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12563:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "12513:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "12513:55:23" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "12500:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "12500:69:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "12489:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "12711:19:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12725:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12719:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "12719:11:23" + }, + "variableNames": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "12711:4:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "12750:4:23" + }, + { + "name": "q_x", + "nodeType": "YulIdentifier", + "src": "12756:3:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12743:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "12743:17:23" + }, + "nodeType": "YulExpressionStatement", + "src": "12743:17:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "12784:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12790:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12780:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "12780:15:23" + }, + { + "name": "q_y", + "nodeType": "YulIdentifier", + "src": "12797:3:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12773:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "12773:28:23" + }, + "nodeType": "YulExpressionStatement", + "src": "12773:28:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "12825:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12831:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12821:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "12821:15:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12844:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12838:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "12838:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12814:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "12814:36:23" + }, + "nodeType": "YulExpressionStatement", + "src": "12814:36:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "12874:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12880:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12870:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "12870:15:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12893:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12887:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "12887:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12863:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "12863:36:23" + }, + "nodeType": "YulExpressionStatement", + "src": "12863:36:23" + }, + { + "nodeType": "YulAssignment", + "src": "12912:80:23", + "value": { + "arguments": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "12927:7:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "12951:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "12951:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12958:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "12947:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "12947:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12965:1:23", + "type": "", + "value": "6" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "12968:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12974:4:23", + "type": "", + "value": "0x80" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12980:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12986:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "12936:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "12936:55:23" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "12923:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "12923:69:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "12912:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "13005:18:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13018:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13012:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "13012:11:23" + }, + "variableNames": [ + { + "name": "q_x", + "nodeType": "YulIdentifier", + "src": "13005:3:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "13036:18:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13049:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13043:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "13043:11:23" + }, + "variableNames": [ + { + "name": "q_y", + "nodeType": "YulIdentifier", + "src": "13036:3:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "13143:19:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13157:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13151:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "13151:11:23" + }, + "variableNames": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "13143:4:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "13186:4:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "13215:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13209:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "13209:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13232:5:23", + "type": "", + "value": "0x280" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13205:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "13205:33:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13199:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "13199:40:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13175:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "13175:65:23" + }, + "nodeType": "YulExpressionStatement", + "src": "13175:65:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "13264:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13270:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13260:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "13260:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "13293:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13287:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "13287:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13310:5:23", + "type": "", + "value": "0x2a0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13283:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "13283:33:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13277:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "13277:40:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13253:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "13253:65:23" + }, + "nodeType": "YulExpressionStatement", + "src": "13253:65:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "13342:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13348:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13338:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "13338:15:23" + }, + { + "name": "x1_pow_4", + "nodeType": "YulIdentifier", + "src": "13355:8:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13331:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "13331:33:23" + }, + "nodeType": "YulExpressionStatement", + "src": "13331:33:23" + }, + { + "nodeType": "YulAssignment", + "src": "13377:80:23", + "value": { + "arguments": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "13392:7:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "13416:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "13416:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13423:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "13412:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "13412:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13430:1:23", + "type": "", + "value": "7" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "13433:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13439:4:23", + "type": "", + "value": "0x60" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13445:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13451:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "13401:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "13401:55:23" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "13388:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "13388:69:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "13377:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "13617:19:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13631:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13625:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "13625:11:23" + }, + "variableNames": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "13617:4:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "13656:4:23" + }, + { + "name": "q_x", + "nodeType": "YulIdentifier", + "src": "13662:3:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13649:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "13649:17:23" + }, + "nodeType": "YulExpressionStatement", + "src": "13649:17:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "13690:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13696:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13686:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "13686:15:23" + }, + { + "name": "q_y", + "nodeType": "YulIdentifier", + "src": "13703:3:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13679:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "13679:28:23" + }, + "nodeType": "YulExpressionStatement", + "src": "13679:28:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "13731:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13737:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13727:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "13727:15:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13750:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13744:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "13744:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13720:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "13720:36:23" + }, + "nodeType": "YulExpressionStatement", + "src": "13720:36:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "13780:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13786:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13776:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "13776:15:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13799:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13793:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "13793:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13769:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "13769:36:23" + }, + "nodeType": "YulExpressionStatement", + "src": "13769:36:23" + }, + { + "nodeType": "YulAssignment", + "src": "13818:80:23", + "value": { + "arguments": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "13833:7:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "13857:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "13857:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13864:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "13853:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "13853:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13871:1:23", + "type": "", + "value": "6" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "13874:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13880:4:23", + "type": "", + "value": "0x80" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13886:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13892:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "13842:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "13842:55:23" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "13829:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "13829:69:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "13818:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "13911:18:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13924:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13918:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "13918:11:23" + }, + "variableNames": [ + { + "name": "q_x", + "nodeType": "YulIdentifier", + "src": "13911:3:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "13942:18:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13955:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13949:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "13949:11:23" + }, + "variableNames": [ + { + "name": "q_y", + "nodeType": "YulIdentifier", + "src": "13942:3:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "14138:19:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14152:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14146:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "14146:11:23" + }, + "variableNames": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "14138:4:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "14177:4:23" + }, + { + "name": "q_x", + "nodeType": "YulIdentifier", + "src": "14183:3:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14170:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "14170:17:23" + }, + "nodeType": "YulExpressionStatement", + "src": "14170:17:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "14211:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14217:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14207:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "14207:15:23" + }, + { + "name": "q_y", + "nodeType": "YulIdentifier", + "src": "14224:3:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14200:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "14200:28:23" + }, + "nodeType": "YulExpressionStatement", + "src": "14200:28:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "14252:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14258:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14248:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "14248:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "14281:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14275:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "14275:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14298:5:23", + "type": "", + "value": "0x2c0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14271:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "14271:33:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14265:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "14265:40:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14241:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "14241:65:23" + }, + "nodeType": "YulExpressionStatement", + "src": "14241:65:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "14330:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14336:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14326:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "14326:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "14359:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14353:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "14353:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14376:5:23", + "type": "", + "value": "0x2e0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14349:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "14349:33:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14343:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "14343:40:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14319:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "14319:65:23" + }, + "nodeType": "YulExpressionStatement", + "src": "14319:65:23" + }, + { + "nodeType": "YulAssignment", + "src": "14397:80:23", + "value": { + "arguments": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "14412:7:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "14436:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "14436:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14443:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "14432:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "14432:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14450:1:23", + "type": "", + "value": "6" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "14453:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14459:4:23", + "type": "", + "value": "0x80" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14465:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14471:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "14421:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "14421:55:23" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "14408:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "14408:69:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "14397:7:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "14508:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14528:5:23", + "type": "", + "value": "0x2a0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14504:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "14504:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14498:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "14498:37:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14543:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14537:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "14537:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14491:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "14491:58:23" + }, + "nodeType": "YulExpressionStatement", + "src": "14491:58:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "14583:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14603:5:23", + "type": "", + "value": "0x2a0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14579:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "14579:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14573:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "14573:37:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14612:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14569:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "14569:48:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14625:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14619:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "14619:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14562:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "14562:69:23" + }, + "nodeType": "YulExpressionStatement", + "src": "14562:69:23" + } + ] + }, + { + "nodeType": "YulBlock", + "src": "14659:941:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "14885:7:23", + "variables": [ + { + "name": "q_x", + "nodeType": "YulTypedName", + "src": "14889:3:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "14905:7:23", + "variables": [ + { + "name": "q_y", + "nodeType": "YulTypedName", + "src": "14909:3:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "14925:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "proof", + "nodeType": "YulIdentifier", + "src": "14954:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14961:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14950:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "14950:16:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14944:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "14944:23:23" + }, + "variables": [ + { + "name": "openingsPtr", + "nodeType": "YulTypedName", + "src": "14929:11:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "14980:38:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "14999:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15012:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14995:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "14995:22:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14989:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "14989:29:23" + }, + "variables": [ + { + "name": "c", + "nodeType": "YulTypedName", + "src": "14984:1:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15031:45:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "15057:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15070:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15053:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "15053:22:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15047:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "15047:29:23" + }, + "variables": [ + { + "name": "quotient", + "nodeType": "YulTypedName", + "src": "15035:8:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15089:44:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "15114:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15127:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15110:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "15110:22:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15104:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "15104:29:23" + }, + "variables": [ + { + "name": "u_prime", + "nodeType": "YulTypedName", + "src": "15093:7:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15146:39:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "15166:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15179:4:23", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15162:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "15162:22:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15156:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "15156:29:23" + }, + "variables": [ + { + "name": "p2", + "nodeType": "YulTypedName", + "src": "15150:2:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15211:31:23", + "value": { + "arguments": [ + { + "name": "c", + "nodeType": "YulIdentifier", + "src": "15233:1:23" + }, + { + "name": "x1", + "nodeType": "YulIdentifier", + "src": "15236:2:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "15240:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "15226:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "15226:16:23" + }, + "variables": [ + { + "name": "q2_eval", + "nodeType": "YulTypedName", + "src": "15215:7:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "15255:60:23", + "value": { + "arguments": [ + { + "name": "q2_eval", + "nodeType": "YulIdentifier", + "src": "15273:7:23" + }, + { + "arguments": [ + { + "name": "x1_pow_2", + "nodeType": "YulIdentifier", + "src": "15289:8:23" + }, + { + "name": "quotient", + "nodeType": "YulIdentifier", + "src": "15299:8:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "15309:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "15282:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "15282:29:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "15313:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "15266:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "15266:49:23" + }, + "variableNames": [ + { + "name": "q2_eval", + "nodeType": "YulIdentifier", + "src": "15255:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "15328:59:23", + "value": { + "arguments": [ + { + "name": "q2_eval", + "nodeType": "YulIdentifier", + "src": "15346:7:23" + }, + { + "arguments": [ + { + "name": "x1_pow_3", + "nodeType": "YulIdentifier", + "src": "15362:8:23" + }, + { + "name": "u_prime", + "nodeType": "YulIdentifier", + "src": "15372:7:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "15381:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "15355:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "15355:28:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "15385:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "15339:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "15339:48:23" + }, + "variableNames": [ + { + "name": "q2_eval", + "nodeType": "YulIdentifier", + "src": "15328:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "15400:54:23", + "value": { + "arguments": [ + { + "name": "q2_eval", + "nodeType": "YulIdentifier", + "src": "15418:7:23" + }, + { + "arguments": [ + { + "name": "x1_pow_4", + "nodeType": "YulIdentifier", + "src": "15434:8:23" + }, + { + "name": "p2", + "nodeType": "YulIdentifier", + "src": "15444:2:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "15448:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "15427:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "15427:23:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "15452:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "15411:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "15411:43:23" + }, + "variableNames": [ + { + "name": "q2_eval", + "nodeType": "YulIdentifier", + "src": "15400:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "15467:49:23", + "value": { + "arguments": [ + { + "name": "q2_eval", + "nodeType": "YulIdentifier", + "src": "15485:7:23" + }, + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "15500:11:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15494:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "15494:18:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "15514:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "15478:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "15478:38:23" + }, + "variableNames": [ + { + "name": "q2_eval", + "nodeType": "YulIdentifier", + "src": "15467:7:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "15550:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15570:5:23", + "type": "", + "value": "0x340" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15546:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "15546:30:23" + }, + { + "name": "q2_eval", + "nodeType": "YulIdentifier", + "src": "15578:7:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15539:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "15539:47:23" + }, + "nodeType": "YulExpressionStatement", + "src": "15539:47:23" + } + ] + }, + { + "nodeType": "YulBlock", + "src": "15614:1888:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "15774:7:23", + "variables": [ + { + "name": "q_x", + "nodeType": "YulTypedName", + "src": "15778:3:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15794:7:23", + "variables": [ + { + "name": "q_y", + "nodeType": "YulTypedName", + "src": "15798:3:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15814:23:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15832:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15826:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "15826:11:23" + }, + "variables": [ + { + "name": "mPtr", + "nodeType": "YulTypedName", + "src": "15818:4:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "15861:4:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "15890:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15884:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "15884:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15907:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15880:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "15880:32:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15874:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "15874:39:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15850:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "15850:64:23" + }, + "nodeType": "YulExpressionStatement", + "src": "15850:64:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "15938:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15944:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15934:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "15934:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "15967:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15961:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "15961:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15984:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15957:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "15957:32:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15951:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "15951:39:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15927:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "15927:64:23" + }, + "nodeType": "YulExpressionStatement", + "src": "15927:64:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "16015:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16021:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16011:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "16011:15:23" + }, + { + "name": "x1", + "nodeType": "YulIdentifier", + "src": "16028:2:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16004:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "16004:27:23" + }, + "nodeType": "YulExpressionStatement", + "src": "16004:27:23" + }, + { + "nodeType": "YulAssignment", + "src": "16044:80:23", + "value": { + "arguments": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "16059:7:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "16083:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "16083:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16090:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "16079:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "16079:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16097:1:23", + "type": "", + "value": "7" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "16100:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16106:4:23", + "type": "", + "value": "0x60" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16112:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16118:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "16068:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "16068:55:23" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "16055:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "16055:69:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "16044:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "16137:18:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16150:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16144:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "16144:11:23" + }, + "variableNames": [ + { + "name": "q_x", + "nodeType": "YulIdentifier", + "src": "16137:3:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "16168:18:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16181:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16175:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "16175:11:23" + }, + "variableNames": [ + { + "name": "q_y", + "nodeType": "YulIdentifier", + "src": "16168:3:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "16304:19:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16318:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16312:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "16312:11:23" + }, + "variableNames": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "16304:4:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "16347:4:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "16376:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16370:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "16370:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16393:4:23", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16366:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "16366:32:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16360:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "16360:39:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16336:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "16336:64:23" + }, + "nodeType": "YulExpressionStatement", + "src": "16336:64:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "16424:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16430:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16420:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "16420:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "16453:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16447:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "16447:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16470:4:23", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16443:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "16443:32:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16437:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "16437:39:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16413:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "16413:64:23" + }, + "nodeType": "YulExpressionStatement", + "src": "16413:64:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "16501:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16507:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16497:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "16497:15:23" + }, + { + "name": "x1_pow_2", + "nodeType": "YulIdentifier", + "src": "16514:8:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16490:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "16490:33:23" + }, + "nodeType": "YulExpressionStatement", + "src": "16490:33:23" + }, + { + "nodeType": "YulAssignment", + "src": "16536:80:23", + "value": { + "arguments": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "16551:7:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "16575:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "16575:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16582:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "16571:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "16571:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16589:1:23", + "type": "", + "value": "7" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "16592:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16598:4:23", + "type": "", + "value": "0x60" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16604:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16610:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "16560:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "16560:55:23" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "16547:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "16547:69:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "16536:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "16630:19:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16644:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16638:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "16638:11:23" + }, + "variableNames": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "16630:4:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "16669:4:23" + }, + { + "name": "q_x", + "nodeType": "YulIdentifier", + "src": "16675:3:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16662:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "16662:17:23" + }, + "nodeType": "YulExpressionStatement", + "src": "16662:17:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "16703:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16709:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16699:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "16699:15:23" + }, + { + "name": "q_y", + "nodeType": "YulIdentifier", + "src": "16716:3:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16692:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "16692:28:23" + }, + "nodeType": "YulExpressionStatement", + "src": "16692:28:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "16744:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16750:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16740:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "16740:15:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16763:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16757:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "16757:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16733:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "16733:36:23" + }, + "nodeType": "YulExpressionStatement", + "src": "16733:36:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "16793:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16799:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16789:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "16789:15:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16812:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16806:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "16806:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16782:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "16782:36:23" + }, + "nodeType": "YulExpressionStatement", + "src": "16782:36:23" + }, + { + "nodeType": "YulAssignment", + "src": "16831:80:23", + "value": { + "arguments": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "16846:7:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "16870:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "16870:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16877:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "16866:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "16866:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16884:1:23", + "type": "", + "value": "6" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "16887:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16893:4:23", + "type": "", + "value": "0x80" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16899:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16905:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "16855:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "16855:55:23" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "16842:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "16842:69:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "16831:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "16981:19:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16995:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16989:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "16989:11:23" + }, + "variableNames": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "16981:4:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "17020:4:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17032:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "17026:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "17026:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "17013:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "17013:25:23" + }, + "nodeType": "YulExpressionStatement", + "src": "17013:25:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "17062:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17068:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17058:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "17058:15:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17081:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "17075:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "17075:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "17051:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "17051:36:23" + }, + "nodeType": "YulExpressionStatement", + "src": "17051:36:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "17111:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17117:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17107:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "17107:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "17140:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "17134:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "17134:21:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "17124:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "17124:39:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "17100:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "17100:64:23" + }, + "nodeType": "YulExpressionStatement", + "src": "17100:64:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "17188:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17194:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17184:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "17184:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "17217:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "17211:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "17211:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17234:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17207:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "17207:32:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "17201:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "17201:39:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "17177:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "17177:64:23" + }, + "nodeType": "YulExpressionStatement", + "src": "17177:64:23" + }, + { + "nodeType": "YulAssignment", + "src": "17254:80:23", + "value": { + "arguments": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "17269:7:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "17293:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "17293:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17300:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "17289:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "17289:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17307:1:23", + "type": "", + "value": "6" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "17310:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17316:4:23", + "type": "", + "value": "0x80" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17322:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17328:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "17278:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "17278:55:23" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "17265:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "17265:69:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "17254:7:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "17365:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17385:5:23", + "type": "", + "value": "0x2c0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17361:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "17361:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "17355:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "17355:37:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17400:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "17394:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "17394:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "17348:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "17348:58:23" + }, + "nodeType": "YulExpressionStatement", + "src": "17348:58:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "17440:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17460:5:23", + "type": "", + "value": "0x2c0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17436:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "17436:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "17430:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "17430:37:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17469:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17426:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "17426:48:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17482:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "17476:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "17476:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "17419:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "17419:69:23" + }, + "nodeType": "YulExpressionStatement", + "src": "17419:69:23" + } + ] + }, + { + "nodeType": "YulBlock", + "src": "17516:1878:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "17904:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "proof", + "nodeType": "YulIdentifier", + "src": "17933:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17940:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17929:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "17929:16:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "17923:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "17923:23:23" + }, + "variables": [ + { + "name": "openingsPtr", + "nodeType": "YulTypedName", + "src": "17908:11:23", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "18032:386:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "18223:32:23", + "value": { + "arguments": [ + { + "name": "w1", + "nodeType": "YulIdentifier", + "src": "18239:2:23" + }, + { + "name": "x1_f", + "nodeType": "YulIdentifier", + "src": "18243:4:23" + }, + { + "name": "prime", + "nodeType": "YulIdentifier", + "src": "18249:5:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "18232:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "18232:23:23" + }, + "variables": [ + { + "name": "a", + "nodeType": "YulTypedName", + "src": "18227:1:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18272:38:23", + "value": { + "arguments": [ + { + "name": "w2", + "nodeType": "YulIdentifier", + "src": "18288:2:23" + }, + { + "name": "x1_pow_2_f", + "nodeType": "YulIdentifier", + "src": "18292:10:23" + }, + { + "name": "prime", + "nodeType": "YulIdentifier", + "src": "18304:5:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "18281:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "18281:29:23" + }, + "variables": [ + { + "name": "b", + "nodeType": "YulTypedName", + "src": "18276:1:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18327:29:23", + "value": { + "arguments": [ + { + "name": "a", + "nodeType": "YulIdentifier", + "src": "18344:1:23" + }, + { + "name": "b", + "nodeType": "YulIdentifier", + "src": "18347:1:23" + }, + { + "name": "prime", + "nodeType": "YulIdentifier", + "src": "18350:5:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "18337:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "18337:19:23" + }, + "variables": [ + { + "name": "ab", + "nodeType": "YulTypedName", + "src": "18331:2:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "18373:31:23", + "value": { + "arguments": [ + { + "name": "w0", + "nodeType": "YulIdentifier", + "src": "18390:2:23" + }, + { + "name": "ab", + "nodeType": "YulIdentifier", + "src": "18394:2:23" + }, + { + "name": "prime", + "nodeType": "YulIdentifier", + "src": "18398:5:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "18383:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "18383:21:23" + }, + "variableNames": [ + { + "name": "result", + "nodeType": "YulIdentifier", + "src": "18373:6:23" + } + ] + } + ] + }, + "name": "compute_q4_eval", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "w0", + "nodeType": "YulTypedName", + "src": "17985:2:23", + "type": "" + }, + { + "name": "w1", + "nodeType": "YulTypedName", + "src": "17989:2:23", + "type": "" + }, + { + "name": "w2", + "nodeType": "YulTypedName", + "src": "17993:2:23", + "type": "" + }, + { + "name": "x1_f", + "nodeType": "YulTypedName", + "src": "17997:4:23", + "type": "" + }, + { + "name": "x1_pow_2_f", + "nodeType": "YulTypedName", + "src": "18003:10:23", + "type": "" + }, + { + "name": "prime", + "nodeType": "YulTypedName", + "src": "18015:5:23", + "type": "" + } + ], + "returnVariables": [ + { + "name": "result", + "nodeType": "YulTypedName", + "src": "18025:6:23", + "type": "" + } + ], + "src": "17960:458:23" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18432:41:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "18454:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18467:4:23", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18450:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "18450:22:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "18444:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "18444:29:23" + }, + "variables": [ + { + "name": "w0_0", + "nodeType": "YulTypedName", + "src": "18436:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18486:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "18508:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18521:5:23", + "type": "", + "value": "0x120" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18504:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "18504:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "18498:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "18498:30:23" + }, + "variables": [ + { + "name": "w1_0", + "nodeType": "YulTypedName", + "src": "18490:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18541:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "18563:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18576:5:23", + "type": "", + "value": "0x180" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18559:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "18559:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "18553:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "18553:30:23" + }, + "variables": [ + { + "name": "w2_0", + "nodeType": "YulTypedName", + "src": "18545:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18596:69:23", + "value": { + "arguments": [ + { + "name": "w0_0", + "nodeType": "YulIdentifier", + "src": "18631:4:23" + }, + { + "name": "w1_0", + "nodeType": "YulIdentifier", + "src": "18637:4:23" + }, + { + "name": "w2_0", + "nodeType": "YulIdentifier", + "src": "18643:4:23" + }, + { + "name": "x1", + "nodeType": "YulIdentifier", + "src": "18649:2:23" + }, + { + "name": "x1_pow_2", + "nodeType": "YulIdentifier", + "src": "18653:8:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "18663:1:23" + } + ], + "functionName": { + "name": "compute_q4_eval", + "nodeType": "YulIdentifier", + "src": "18615:15:23" + }, + "nodeType": "YulFunctionCall", + "src": "18615:50:23" + }, + "variables": [ + { + "name": "q4_at_alpha", + "nodeType": "YulTypedName", + "src": "18600:11:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "18689:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18709:5:23", + "type": "", + "value": "0x2e0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18685:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "18685:30:23" + }, + { + "name": "q4_at_alpha", + "nodeType": "YulIdentifier", + "src": "18717:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "18678:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "18678:51:23" + }, + "nodeType": "YulExpressionStatement", + "src": "18678:51:23" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18743:41:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "18765:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18778:4:23", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18761:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "18761:22:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "18755:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "18755:29:23" + }, + "variables": [ + { + "name": "w0_1", + "nodeType": "YulTypedName", + "src": "18747:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18797:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "18819:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18832:5:23", + "type": "", + "value": "0x140" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18815:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "18815:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "18809:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "18809:30:23" + }, + "variables": [ + { + "name": "w1_1", + "nodeType": "YulTypedName", + "src": "18801:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18852:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "18874:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18887:5:23", + "type": "", + "value": "0x1a0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18870:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "18870:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "18864:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "18864:30:23" + }, + "variables": [ + { + "name": "w2_1", + "nodeType": "YulTypedName", + "src": "18856:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18907:75:23", + "value": { + "arguments": [ + { + "name": "w0_1", + "nodeType": "YulIdentifier", + "src": "18948:4:23" + }, + { + "name": "w1_1", + "nodeType": "YulIdentifier", + "src": "18954:4:23" + }, + { + "name": "w2_1", + "nodeType": "YulIdentifier", + "src": "18960:4:23" + }, + { + "name": "x1", + "nodeType": "YulIdentifier", + "src": "18966:2:23" + }, + { + "name": "x1_pow_2", + "nodeType": "YulIdentifier", + "src": "18970:8:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "18980:1:23" + } + ], + "functionName": { + "name": "compute_q4_eval", + "nodeType": "YulIdentifier", + "src": "18932:15:23" + }, + "nodeType": "YulFunctionCall", + "src": "18932:50:23" + }, + "variables": [ + { + "name": "q4_at_omega_alpha", + "nodeType": "YulTypedName", + "src": "18911:17:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "19006:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19026:5:23", + "type": "", + "value": "0x300" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19002:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "19002:30:23" + }, + { + "name": "q4_at_omega_alpha", + "nodeType": "YulIdentifier", + "src": "19034:17:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "18995:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "18995:57:23" + }, + "nodeType": "YulExpressionStatement", + "src": "18995:57:23" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19066:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "19088:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19101:5:23", + "type": "", + "value": "0x100" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19084:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "19084:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "19078:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "19078:30:23" + }, + "variables": [ + { + "name": "w0_2", + "nodeType": "YulTypedName", + "src": "19070:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19121:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "19143:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19156:5:23", + "type": "", + "value": "0x160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19139:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "19139:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "19133:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "19133:30:23" + }, + "variables": [ + { + "name": "w1_2", + "nodeType": "YulTypedName", + "src": "19125:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19176:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "19198:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19211:5:23", + "type": "", + "value": "0x1c0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19194:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "19194:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "19188:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "19188:30:23" + }, + "variables": [ + { + "name": "w2_2", + "nodeType": "YulTypedName", + "src": "19180:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19231:77:23", + "value": { + "arguments": [ + { + "name": "w0_2", + "nodeType": "YulIdentifier", + "src": "19274:4:23" + }, + { + "name": "w1_2", + "nodeType": "YulIdentifier", + "src": "19280:4:23" + }, + { + "name": "w2_2", + "nodeType": "YulIdentifier", + "src": "19286:4:23" + }, + { + "name": "x1", + "nodeType": "YulIdentifier", + "src": "19292:2:23" + }, + { + "name": "x1_pow_2", + "nodeType": "YulIdentifier", + "src": "19296:8:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "19306:1:23" + } + ], + "functionName": { + "name": "compute_q4_eval", + "nodeType": "YulIdentifier", + "src": "19258:15:23" + }, + "nodeType": "YulFunctionCall", + "src": "19258:50:23" + }, + "variables": [ + { + "name": "q4_at_omega_n_alpha", + "nodeType": "YulTypedName", + "src": "19235:19:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "19332:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19352:5:23", + "type": "", + "value": "0x320" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19328:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "19328:30:23" + }, + { + "name": "q4_at_omega_n_alpha", + "nodeType": "YulIdentifier", + "src": "19360:19:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "19321:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "19321:59:23" + }, + "nodeType": "YulExpressionStatement", + "src": "19321:59:23" + } + ] + }, + { + "nodeType": "YulBlock", + "src": "19451:1107:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "19465:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "proof", + "nodeType": "YulIdentifier", + "src": "19494:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19501:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19490:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "19490:16:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "19484:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "19484:23:23" + }, + "variables": [ + { + "name": "openingsPtr", + "nodeType": "YulTypedName", + "src": "19469:11:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19520:37:23", + "value": { + "arguments": [ + { + "name": "proof", + "nodeType": "YulIdentifier", + "src": "19551:5:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "19545:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "19545:12:23" + }, + "variables": [ + { + "name": "multiopenProofPtr", + "nodeType": "YulTypedName", + "src": "19524:17:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19707:34:23", + "value": { + "arguments": [ + { + "name": "multiopenProofPtr", + "nodeType": "YulIdentifier", + "src": "19723:17:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "19717:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "19717:24:23" + }, + "variables": [ + { + "name": "q1", + "nodeType": "YulTypedName", + "src": "19711:2:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19754:39:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "19774:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19787:4:23", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19770:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "19770:22:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "19764:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "19764:29:23" + }, + "variables": [ + { + "name": "p1", + "nodeType": "YulTypedName", + "src": "19758:2:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19806:58:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "19838:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19858:4:23", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19834:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "19834:29:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "19828:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "19828:36:23" + }, + "variables": [ + { + "name": "xi_minus_v_inv", + "nodeType": "YulTypedName", + "src": "19810:14:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19878:124:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "q1", + "nodeType": "YulIdentifier", + "src": "19919:2:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "19927:1:23" + }, + { + "name": "p1", + "nodeType": "YulIdentifier", + "src": "19930:2:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "19923:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "19923:10:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "19935:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "19912:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "19912:25:23" + }, + { + "name": "xi_minus_v_inv", + "nodeType": "YulIdentifier", + "src": "19955:14:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "19987:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "19888:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "19888:114:23" + }, + "variables": [ + { + "name": "f1", + "nodeType": "YulTypedName", + "src": "19882:2:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "20026:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20046:5:23", + "type": "", + "value": "0x360" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20022:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "20022:30:23" + }, + { + "name": "f1", + "nodeType": "YulIdentifier", + "src": "20054:2:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "20015:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "20015:42:23" + }, + "nodeType": "YulExpressionStatement", + "src": "20015:42:23" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20158:45:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "multiopenProofPtr", + "nodeType": "YulIdentifier", + "src": "20178:17:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20197:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20174:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "20174:28:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "20168:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "20168:35:23" + }, + "variables": [ + { + "name": "q2", + "nodeType": "YulTypedName", + "src": "20162:2:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20216:52:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "20241:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20261:5:23", + "type": "", + "value": "0x340" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20237:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "20237:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "20231:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "20231:37:23" + }, + "variables": [ + { + "name": "q2_eval", + "nodeType": "YulTypedName", + "src": "20220:7:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20281:62:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "20317:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20337:4:23", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20313:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "20313:29:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "20307:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "20307:36:23" + }, + "variables": [ + { + "name": "xi_minus_alpha_inv", + "nodeType": "YulTypedName", + "src": "20285:18:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20356:133:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "q2", + "nodeType": "YulIdentifier", + "src": "20397:2:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "20405:1:23" + }, + { + "name": "q2_eval", + "nodeType": "YulIdentifier", + "src": "20408:7:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "20401:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "20401:15:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "20418:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "20390:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "20390:30:23" + }, + { + "name": "xi_minus_alpha_inv", + "nodeType": "YulIdentifier", + "src": "20438:18:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "20474:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "20366:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "20366:123:23" + }, + "variables": [ + { + "name": "f2", + "nodeType": "YulTypedName", + "src": "20360:2:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "20513:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20533:5:23", + "type": "", + "value": "0x380" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20509:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "20509:30:23" + }, + { + "name": "f2", + "nodeType": "YulIdentifier", + "src": "20541:2:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "20502:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "20502:42:23" + }, + "nodeType": "YulExpressionStatement", + "src": "20502:42:23" + } + ] + }, + { + "nodeType": "YulBlock", + "src": "20572:1986:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "20586:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "proof", + "nodeType": "YulIdentifier", + "src": "20615:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20622:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20611:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "20611:16:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "20605:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "20605:23:23" + }, + "variables": [ + { + "name": "openingsPtr", + "nodeType": "YulTypedName", + "src": "20590:11:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20641:37:23", + "value": { + "arguments": [ + { + "name": "proof", + "nodeType": "YulIdentifier", + "src": "20672:5:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "20666:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "20666:12:23" + }, + "variables": [ + { + "name": "multiopenProofPtr", + "nodeType": "YulTypedName", + "src": "20645:17:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20834:45:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "multiopenProofPtr", + "nodeType": "YulIdentifier", + "src": "20854:17:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20873:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20850:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "20850:28:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "20844:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "20844:35:23" + }, + "variables": [ + { + "name": "q3", + "nodeType": "YulTypedName", + "src": "20838:2:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20892:62:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "20928:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20948:4:23", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20924:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "20924:29:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "20918:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "20918:36:23" + }, + "variables": [ + { + "name": "xi_minus_alpha_inv", + "nodeType": "YulTypedName", + "src": "20896:18:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20967:68:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "21009:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21029:4:23", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21005:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "21005:29:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "20999:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "20999:36:23" + }, + "variables": [ + { + "name": "xi_minus_omega_alpha_inv", + "nodeType": "YulTypedName", + "src": "20971:24:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21132:65:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "21170:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21190:5:23", + "type": "", + "value": "0x3e0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21166:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "21166:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "21160:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "21160:37:23" + }, + "variables": [ + { + "name": "xi_minus_omega_alpha", + "nodeType": "YulTypedName", + "src": "21136:20:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21210:72:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "21255:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21275:5:23", + "type": "", + "value": "0x100" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21251:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "21251:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "21245:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "21245:37:23" + }, + "variables": [ + { + "name": "alpha_minus_omega_alpha_inv", + "nodeType": "YulTypedName", + "src": "21214:27:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21295:73:23", + "value": { + "arguments": [ + { + "name": "xi_minus_omega_alpha", + "nodeType": "YulIdentifier", + "src": "21315:20:23" + }, + { + "name": "alpha_minus_omega_alpha_inv", + "nodeType": "YulIdentifier", + "src": "21337:27:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "21366:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "21308:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "21308:60:23" + }, + "variables": [ + { + "name": "l_1_3", + "nodeType": "YulTypedName", + "src": "21299:5:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21459:59:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "21491:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21511:5:23", + "type": "", + "value": "0x400" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21487:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "21487:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "21481:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "21481:37:23" + }, + "variables": [ + { + "name": "xi_minus_alpha", + "nodeType": "YulTypedName", + "src": "21463:14:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21531:70:23", + "value": { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "21570:1:23" + }, + { + "name": "alpha_minus_omega_alpha_inv", + "nodeType": "YulIdentifier", + "src": "21573:27:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "21566:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "21566:35:23" + }, + "variables": [ + { + "name": "omega_alpha_minus_alpha_inv", + "nodeType": "YulTypedName", + "src": "21535:27:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21614:67:23", + "value": { + "arguments": [ + { + "name": "xi_minus_alpha", + "nodeType": "YulIdentifier", + "src": "21634:14:23" + }, + { + "name": "omega_alpha_minus_alpha_inv", + "nodeType": "YulIdentifier", + "src": "21650:27:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "21679:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "21627:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "21627:54:23" + }, + "variables": [ + { + "name": "l_2_3", + "nodeType": "YulTypedName", + "src": "21618:5:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "21755:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21775:5:23", + "type": "", + "value": "0x440" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21751:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "21751:30:23" + }, + { + "name": "omega_alpha_minus_alpha_inv", + "nodeType": "YulIdentifier", + "src": "21783:27:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "21744:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "21744:67:23" + }, + "nodeType": "YulExpressionStatement", + "src": "21744:67:23" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21907:43:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "21930:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21943:5:23", + "type": "", + "value": "0x1e0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21926:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "21926:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "21920:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "21920:30:23" + }, + "variables": [ + { + "name": "key_0", + "nodeType": "YulTypedName", + "src": "21911:5:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21963:43:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "21986:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21999:5:23", + "type": "", + "value": "0x200" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21982:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "21982:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "21976:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "21976:30:23" + }, + "variables": [ + { + "name": "key_1", + "nodeType": "YulTypedName", + "src": "21967:5:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22019:134:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "key_0", + "nodeType": "YulIdentifier", + "src": "22063:5:23" + }, + { + "name": "l_1_3", + "nodeType": "YulIdentifier", + "src": "22070:5:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "22077:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "22056:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "22056:23:23" + }, + { + "arguments": [ + { + "name": "key_1", + "nodeType": "YulIdentifier", + "src": "22104:5:23" + }, + { + "name": "l_2_3", + "nodeType": "YulIdentifier", + "src": "22111:5:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "22118:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "22097:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "22097:23:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "22138:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "22032:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "22032:121:23" + }, + "variables": [ + { + "name": "r3_xi", + "nodeType": "YulTypedName", + "src": "22023:5:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22231:68:23", + "value": { + "arguments": [ + { + "name": "xi_minus_alpha_inv", + "nodeType": "YulIdentifier", + "src": "22251:18:23" + }, + { + "name": "xi_minus_omega_alpha_inv", + "nodeType": "YulIdentifier", + "src": "22271:24:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "22297:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "22244:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "22244:55:23" + }, + "variables": [ + { + "name": "z3_xi", + "nodeType": "YulTypedName", + "src": "22235:5:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "22323:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22343:5:23", + "type": "", + "value": "0x460" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22319:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "22319:30:23" + }, + { + "name": "z3_xi", + "nodeType": "YulIdentifier", + "src": "22351:5:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "22312:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "22312:45:23" + }, + "nodeType": "YulExpressionStatement", + "src": "22312:45:23" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22371:118:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "q3", + "nodeType": "YulIdentifier", + "src": "22412:2:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "22420:1:23" + }, + { + "name": "r3_xi", + "nodeType": "YulIdentifier", + "src": "22423:5:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "22416:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "22416:13:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "22431:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "22405:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "22405:28:23" + }, + { + "name": "z3_xi", + "nodeType": "YulIdentifier", + "src": "22451:5:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "22474:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "22381:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "22381:108:23" + }, + "variables": [ + { + "name": "f3", + "nodeType": "YulTypedName", + "src": "22375:2:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "22513:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22533:5:23", + "type": "", + "value": "0x3a0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22509:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "22509:30:23" + }, + { + "name": "f3", + "nodeType": "YulIdentifier", + "src": "22541:2:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "22502:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "22502:42:23" + }, + "nodeType": "YulExpressionStatement", + "src": "22502:42:23" + } + ] + }, + { + "nodeType": "YulBlock", + "src": "22572:3301:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "22586:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "proof", + "nodeType": "YulIdentifier", + "src": "22615:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22622:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22611:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "22611:16:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "22605:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "22605:23:23" + }, + "variables": [ + { + "name": "openingsPtr", + "nodeType": "YulTypedName", + "src": "22590:11:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22641:37:23", + "value": { + "arguments": [ + { + "name": "proof", + "nodeType": "YulIdentifier", + "src": "22672:5:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "22666:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "22666:12:23" + }, + "variables": [ + { + "name": "multiopenProofPtr", + "nodeType": "YulTypedName", + "src": "22645:17:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22959:65:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "22997:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23017:5:23", + "type": "", + "value": "0x3e0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22993:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "22993:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "22987:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "22987:37:23" + }, + "variables": [ + { + "name": "xi_minus_omega_alpha", + "nodeType": "YulTypedName", + "src": "22963:20:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23037:67:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "23077:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23097:5:23", + "type": "", + "value": "0x420" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23073:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "23073:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "23067:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "23067:37:23" + }, + "variables": [ + { + "name": "xi_minus_omega_n_alpha", + "nodeType": "YulTypedName", + "src": "23041:22:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23117:72:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "23162:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23182:5:23", + "type": "", + "value": "0x100" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23158:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "23158:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "23152:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "23152:37:23" + }, + "variables": [ + { + "name": "alpha_minus_omega_alpha_inv", + "nodeType": "YulTypedName", + "src": "23121:27:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23202:74:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "23249:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23269:5:23", + "type": "", + "value": "0x120" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23245:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "23245:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "23239:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "23239:37:23" + }, + "variables": [ + { + "name": "alpha_minus_omega_n_alpha_inv", + "nodeType": "YulTypedName", + "src": "23206:29:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23289:68:23", + "value": { + "arguments": [ + { + "name": "xi_minus_omega_alpha", + "nodeType": "YulIdentifier", + "src": "23309:20:23" + }, + { + "name": "xi_minus_omega_n_alpha", + "nodeType": "YulIdentifier", + "src": "23331:22:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "23355:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "23302:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "23302:55:23" + }, + "variables": [ + { + "name": "l_1_4", + "nodeType": "YulTypedName", + "src": "23293:5:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "23370:54:23", + "value": { + "arguments": [ + { + "name": "l_1_4", + "nodeType": "YulIdentifier", + "src": "23386:5:23" + }, + { + "name": "alpha_minus_omega_alpha_inv", + "nodeType": "YulIdentifier", + "src": "23393:27:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "23422:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "23379:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "23379:45:23" + }, + "variableNames": [ + { + "name": "l_1_4", + "nodeType": "YulIdentifier", + "src": "23370:5:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "23437:56:23", + "value": { + "arguments": [ + { + "name": "l_1_4", + "nodeType": "YulIdentifier", + "src": "23453:5:23" + }, + { + "name": "alpha_minus_omega_n_alpha_inv", + "nodeType": "YulIdentifier", + "src": "23460:29:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "23491:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "23446:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "23446:47:23" + }, + "variableNames": [ + { + "name": "l_1_4", + "nodeType": "YulIdentifier", + "src": "23437:5:23" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23701:59:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "23733:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23753:5:23", + "type": "", + "value": "0x400" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23729:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "23729:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "23723:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "23723:37:23" + }, + "variables": [ + { + "name": "xi_minus_alpha", + "nodeType": "YulTypedName", + "src": "23705:14:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23773:72:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "23818:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23838:5:23", + "type": "", + "value": "0x440" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23814:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "23814:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "23808:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "23808:37:23" + }, + "variables": [ + { + "name": "omega_alpha_minus_alpha_inv", + "nodeType": "YulTypedName", + "src": "23777:27:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23858:80:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "23911:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23931:5:23", + "type": "", + "value": "0x140" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23907:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "23907:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "23901:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "23901:37:23" + }, + "variables": [ + { + "name": "omega_alpha_minus_omega_n_alpha_inv", + "nodeType": "YulTypedName", + "src": "23862:35:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23951:62:23", + "value": { + "arguments": [ + { + "name": "xi_minus_alpha", + "nodeType": "YulIdentifier", + "src": "23971:14:23" + }, + { + "name": "xi_minus_omega_n_alpha", + "nodeType": "YulIdentifier", + "src": "23987:22:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "24011:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "23964:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "23964:49:23" + }, + "variables": [ + { + "name": "l_2_4", + "nodeType": "YulTypedName", + "src": "23955:5:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "24026:54:23", + "value": { + "arguments": [ + { + "name": "l_2_4", + "nodeType": "YulIdentifier", + "src": "24042:5:23" + }, + { + "name": "omega_alpha_minus_alpha_inv", + "nodeType": "YulIdentifier", + "src": "24049:27:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "24078:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "24035:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "24035:45:23" + }, + "variableNames": [ + { + "name": "l_2_4", + "nodeType": "YulIdentifier", + "src": "24026:5:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "24093:62:23", + "value": { + "arguments": [ + { + "name": "l_2_4", + "nodeType": "YulIdentifier", + "src": "24109:5:23" + }, + { + "name": "omega_alpha_minus_omega_n_alpha_inv", + "nodeType": "YulIdentifier", + "src": "24116:35:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "24153:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "24102:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "24102:53:23" + }, + "variableNames": [ + { + "name": "l_2_4", + "nodeType": "YulIdentifier", + "src": "24093:5:23" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24384:82:23", + "value": { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "24425:1:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "24438:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "24458:5:23", + "type": "", + "value": "0x120" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24434:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "24434:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "24428:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "24428:37:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "24421:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "24421:45:23" + }, + "variables": [ + { + "name": "omega_n_alpha_minus_alpha_inv", + "nodeType": "YulTypedName", + "src": "24388:29:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24479:88:23", + "value": { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "24526:1:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "24539:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "24559:5:23", + "type": "", + "value": "0x140" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24535:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "24535:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "24529:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "24529:37:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "24522:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "24522:45:23" + }, + "variables": [ + { + "name": "omega_n_alpha_minus_omega_alpha_inv", + "nodeType": "YulTypedName", + "src": "24483:35:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24580:60:23", + "value": { + "arguments": [ + { + "name": "xi_minus_alpha", + "nodeType": "YulIdentifier", + "src": "24600:14:23" + }, + { + "name": "xi_minus_omega_alpha", + "nodeType": "YulIdentifier", + "src": "24616:20:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "24638:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "24593:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "24593:47:23" + }, + "variables": [ + { + "name": "l_3_4", + "nodeType": "YulTypedName", + "src": "24584:5:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "24653:56:23", + "value": { + "arguments": [ + { + "name": "l_3_4", + "nodeType": "YulIdentifier", + "src": "24669:5:23" + }, + { + "name": "omega_n_alpha_minus_alpha_inv", + "nodeType": "YulIdentifier", + "src": "24676:29:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "24707:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "24662:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "24662:47:23" + }, + "variableNames": [ + { + "name": "l_3_4", + "nodeType": "YulIdentifier", + "src": "24653:5:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "24722:62:23", + "value": { + "arguments": [ + { + "name": "l_3_4", + "nodeType": "YulIdentifier", + "src": "24738:5:23" + }, + { + "name": "omega_n_alpha_minus_omega_alpha_inv", + "nodeType": "YulIdentifier", + "src": "24745:35:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "24782:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "24731:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "24731:53:23" + }, + "variableNames": [ + { + "name": "l_3_4", + "nodeType": "YulIdentifier", + "src": "24722:5:23" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24977:56:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "25006:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25026:5:23", + "type": "", + "value": "0x2e0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25002:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "25002:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "24996:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "24996:37:23" + }, + "variables": [ + { + "name": "q4_at_alpha", + "nodeType": "YulTypedName", + "src": "24981:11:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25046:62:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "25081:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25101:5:23", + "type": "", + "value": "0x300" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25077:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "25077:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "25071:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "25071:37:23" + }, + "variables": [ + { + "name": "q4_at_omega_alpha", + "nodeType": "YulTypedName", + "src": "25050:17:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25121:64:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "25158:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25178:5:23", + "type": "", + "value": "0x320" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25154:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "25154:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "25148:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "25148:37:23" + }, + "variables": [ + { + "name": "q4_at_omega_n_alpha", + "nodeType": "YulTypedName", + "src": "25125:19:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25198:42:23", + "value": { + "arguments": [ + { + "name": "q4_at_alpha", + "nodeType": "YulIdentifier", + "src": "25218:11:23" + }, + { + "name": "l_1_4", + "nodeType": "YulIdentifier", + "src": "25231:5:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "25238:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "25211:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "25211:29:23" + }, + "variables": [ + { + "name": "r4_xi", + "nodeType": "YulTypedName", + "src": "25202:5:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "25253:62:23", + "value": { + "arguments": [ + { + "name": "r4_xi", + "nodeType": "YulIdentifier", + "src": "25269:5:23" + }, + { + "arguments": [ + { + "name": "q4_at_omega_alpha", + "nodeType": "YulIdentifier", + "src": "25283:17:23" + }, + { + "name": "l_2_4", + "nodeType": "YulIdentifier", + "src": "25302:5:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "25309:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "25276:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "25276:35:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "25313:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "25262:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "25262:53:23" + }, + "variableNames": [ + { + "name": "r4_xi", + "nodeType": "YulIdentifier", + "src": "25253:5:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "25328:64:23", + "value": { + "arguments": [ + { + "name": "r4_xi", + "nodeType": "YulIdentifier", + "src": "25344:5:23" + }, + { + "arguments": [ + { + "name": "q4_at_omega_n_alpha", + "nodeType": "YulIdentifier", + "src": "25358:19:23" + }, + { + "name": "l_3_4", + "nodeType": "YulIdentifier", + "src": "25379:5:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "25386:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "25351:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "25351:37:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "25390:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "25337:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "25337:55:23" + }, + "variableNames": [ + { + "name": "r4_xi", + "nodeType": "YulIdentifier", + "src": "25328:5:23" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25473:50:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "25496:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25516:5:23", + "type": "", + "value": "0x460" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25492:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "25492:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "25486:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "25486:37:23" + }, + "variables": [ + { + "name": "z3_xi", + "nodeType": "YulTypedName", + "src": "25477:5:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25536:70:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "25580:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25600:4:23", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25576:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "25576:29:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "25570:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "25570:36:23" + }, + "variables": [ + { + "name": "xi_minus_omega_n_alpha_inv", + "nodeType": "YulTypedName", + "src": "25540:26:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25619:57:23", + "value": { + "arguments": [ + { + "name": "z3_xi", + "nodeType": "YulIdentifier", + "src": "25639:5:23" + }, + { + "name": "xi_minus_omega_n_alpha_inv", + "nodeType": "YulIdentifier", + "src": "25646:26:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "25674:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "25632:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "25632:44:23" + }, + "variables": [ + { + "name": "z4_xi", + "nodeType": "YulTypedName", + "src": "25623:5:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25690:45:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "multiopenProofPtr", + "nodeType": "YulIdentifier", + "src": "25710:17:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25729:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25706:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "25706:28:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "25700:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "25700:35:23" + }, + "variables": [ + { + "name": "q3", + "nodeType": "YulTypedName", + "src": "25694:2:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25748:56:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "q3", + "nodeType": "YulIdentifier", + "src": "25772:2:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "25780:1:23" + }, + { + "name": "r4_xi", + "nodeType": "YulIdentifier", + "src": "25783:5:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "25776:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "25776:13:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "25791:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "25765:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "25765:28:23" + }, + { + "name": "z4_xi", + "nodeType": "YulIdentifier", + "src": "25795:5:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "25802:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "25758:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "25758:46:23" + }, + "variables": [ + { + "name": "f4", + "nodeType": "YulTypedName", + "src": "25752:2:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "25828:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25848:5:23", + "type": "", + "value": "0x3c0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25824:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "25824:30:23" + }, + { + "name": "f4", + "nodeType": "YulIdentifier", + "src": "25856:2:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "25817:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "25817:42:23" + }, + "nodeType": "YulExpressionStatement", + "src": "25817:42:23" + } + ] + }, + { + "nodeType": "YulBlock", + "src": "25887:3892:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "26155:5:23", + "variables": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "26159:1:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "26173:5:23", + "variables": [ + { + "name": "y", + "nodeType": "YulTypedName", + "src": "26177:1:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "26191:23:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26209:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "26203:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "26203:11:23" + }, + "variables": [ + { + "name": "mPtr", + "nodeType": "YulTypedName", + "src": "26195:4:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "26309:4:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "26338:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "26332:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "26332:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26355:5:23", + "type": "", + "value": "0x240" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26328:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "26328:33:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "26322:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "26322:40:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "26298:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "26298:65:23" + }, + "nodeType": "YulExpressionStatement", + "src": "26298:65:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "26387:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26393:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26383:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "26383:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "26416:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "26410:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "26410:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26433:5:23", + "type": "", + "value": "0x260" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26406:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "26406:33:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "26400:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "26400:40:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "26376:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "26376:65:23" + }, + "nodeType": "YulExpressionStatement", + "src": "26376:65:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "26465:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26471:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26461:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "26461:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "challengeTranscript", + "nodeType": "YulIdentifier", + "src": "26488:19:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26509:4:23", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26484:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "26484:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "26478:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "26478:37:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "26454:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "26454:62:23" + }, + "nodeType": "YulExpressionStatement", + "src": "26454:62:23" + }, + { + "nodeType": "YulAssignment", + "src": "26529:66:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "26555:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "26555:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26562:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "26551:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "26551:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26569:1:23", + "type": "", + "value": "7" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "26572:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26578:4:23", + "type": "", + "value": "0x60" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26584:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26590:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "26540:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "26540:55:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "26529:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "26608:16:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26619:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "26613:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "26613:11:23" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "26608:1:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "26637:16:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26648:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "26642:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "26642:11:23" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "26637:1:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "26756:19:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26770:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "26764:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "26764:11:23" + }, + "variableNames": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "26756:4:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "26795:4:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "26817:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26837:5:23", + "type": "", + "value": "0x2a0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26813:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "26813:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "26807:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "26807:37:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "26801:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "26801:44:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "26788:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "26788:58:23" + }, + "nodeType": "YulExpressionStatement", + "src": "26788:58:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "26870:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26876:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26866:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "26866:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "26903:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26923:5:23", + "type": "", + "value": "0x2a0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26899:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "26899:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "26893:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "26893:37:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26932:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26889:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "26889:48:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "26883:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "26883:55:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "26859:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "26859:80:23" + }, + "nodeType": "YulExpressionStatement", + "src": "26859:80:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "26963:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26969:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26959:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "26959:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "26986:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27006:5:23", + "type": "", + "value": "0x240" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26982:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "26982:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "26976:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "26976:37:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "26952:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "26952:62:23" + }, + "nodeType": "YulExpressionStatement", + "src": "26952:62:23" + }, + { + "nodeType": "YulAssignment", + "src": "27027:66:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "27053:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "27053:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27060:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "27049:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "27049:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27067:1:23", + "type": "", + "value": "7" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "27070:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27076:4:23", + "type": "", + "value": "0x60" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27082:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27088:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "27038:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "27038:55:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "27027:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "27107:19:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27121:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27115:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "27115:11:23" + }, + "variableNames": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "27107:4:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "27146:4:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27158:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27152:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "27152:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "27139:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "27139:25:23" + }, + "nodeType": "YulExpressionStatement", + "src": "27139:25:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "27188:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27194:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27184:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "27184:15:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27207:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27201:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "27201:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "27177:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "27177:36:23" + }, + "nodeType": "YulExpressionStatement", + "src": "27177:36:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "27237:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27243:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27233:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "27233:15:23" + }, + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "27250:1:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "27226:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "27226:26:23" + }, + "nodeType": "YulExpressionStatement", + "src": "27226:26:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "27276:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27282:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27272:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "27272:15:23" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "27289:1:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "27265:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "27265:26:23" + }, + "nodeType": "YulExpressionStatement", + "src": "27265:26:23" + }, + { + "nodeType": "YulAssignment", + "src": "27304:80:23", + "value": { + "arguments": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "27319:7:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "27343:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "27343:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27350:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "27339:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "27339:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27357:1:23", + "type": "", + "value": "6" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "27360:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27366:4:23", + "type": "", + "value": "0x80" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27372:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27378:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "27328:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "27328:55:23" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "27315:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "27315:69:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "27304:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "27397:16:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27408:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27402:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "27402:11:23" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "27397:1:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "27426:16:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27437:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27431:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "27431:11:23" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "27426:1:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "27564:19:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27578:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27572:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "27572:11:23" + }, + "variableNames": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "27564:4:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "27603:4:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "27625:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27619:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "27619:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27642:4:23", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27615:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "27615:32:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27609:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "27609:39:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "27596:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "27596:53:23" + }, + "nodeType": "YulExpressionStatement", + "src": "27596:53:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "27673:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27679:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27669:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "27669:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "commitmentsPtr", + "nodeType": "YulIdentifier", + "src": "27702:14:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27696:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "27696:21:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27719:4:23", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27692:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "27692:32:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27686:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "27686:39:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "27662:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "27662:64:23" + }, + "nodeType": "YulExpressionStatement", + "src": "27662:64:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "27750:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27756:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27746:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "27746:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "27773:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27793:5:23", + "type": "", + "value": "0x260" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27769:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "27769:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27763:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "27763:37:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "27739:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "27739:62:23" + }, + "nodeType": "YulExpressionStatement", + "src": "27739:62:23" + }, + { + "nodeType": "YulAssignment", + "src": "27814:66:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "27840:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "27840:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27847:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "27836:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "27836:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27854:1:23", + "type": "", + "value": "7" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "27857:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27863:4:23", + "type": "", + "value": "0x60" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27869:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27875:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "27825:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "27825:55:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "27814:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "27894:19:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27908:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27902:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "27902:11:23" + }, + "variableNames": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "27894:4:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "27933:4:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27945:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27939:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "27939:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "27926:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "27926:25:23" + }, + "nodeType": "YulExpressionStatement", + "src": "27926:25:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "27975:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27981:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27971:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "27971:15:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27994:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27988:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "27988:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "27964:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "27964:36:23" + }, + "nodeType": "YulExpressionStatement", + "src": "27964:36:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "28024:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28030:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28020:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28020:15:23" + }, + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "28037:1:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "28013:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "28013:26:23" + }, + "nodeType": "YulExpressionStatement", + "src": "28013:26:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "28063:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28069:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28059:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28059:15:23" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "28076:1:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "28052:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "28052:26:23" + }, + "nodeType": "YulExpressionStatement", + "src": "28052:26:23" + }, + { + "nodeType": "YulAssignment", + "src": "28091:80:23", + "value": { + "arguments": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "28106:7:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "28130:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28130:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28137:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "28126:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28126:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28144:1:23", + "type": "", + "value": "6" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "28147:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28153:4:23", + "type": "", + "value": "0x80" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28159:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28165:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "28115:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "28115:55:23" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "28102:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28102:69:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "28091:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "28184:16:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28195:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "28189:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "28189:11:23" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "28184:1:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "28213:16:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28224:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "28218:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "28218:11:23" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "28213:1:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "28369:19:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28383:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "28377:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "28377:11:23" + }, + "variableNames": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "28369:4:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "28408:4:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "28430:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28450:5:23", + "type": "", + "value": "0x2c0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28426:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28426:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "28420:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "28420:37:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "28414:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "28414:44:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "28401:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "28401:58:23" + }, + "nodeType": "YulExpressionStatement", + "src": "28401:58:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "28483:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28489:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28479:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28479:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "28516:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28536:5:23", + "type": "", + "value": "0x2c0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28512:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28512:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "28506:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "28506:37:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28545:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28502:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28502:48:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "28496:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "28496:55:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "28472:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "28472:80:23" + }, + "nodeType": "YulExpressionStatement", + "src": "28472:80:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "28576:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28582:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28572:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28572:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "28599:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28619:5:23", + "type": "", + "value": "0x280" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28595:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28595:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "28589:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "28589:37:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "28565:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "28565:62:23" + }, + "nodeType": "YulExpressionStatement", + "src": "28565:62:23" + }, + { + "nodeType": "YulAssignment", + "src": "28640:66:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "28666:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28666:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28673:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "28662:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28662:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28680:1:23", + "type": "", + "value": "7" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "28683:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28689:4:23", + "type": "", + "value": "0x60" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28695:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28701:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "28651:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "28651:55:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "28640:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "28720:19:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28734:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "28728:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "28728:11:23" + }, + "variableNames": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "28720:4:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "28759:4:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28771:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "28765:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "28765:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "28752:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "28752:25:23" + }, + "nodeType": "YulExpressionStatement", + "src": "28752:25:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "28801:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28807:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28797:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28797:15:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28820:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "28814:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "28814:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "28790:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "28790:36:23" + }, + "nodeType": "YulExpressionStatement", + "src": "28790:36:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "28850:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28856:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28846:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28846:15:23" + }, + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "28863:1:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "28839:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "28839:26:23" + }, + "nodeType": "YulExpressionStatement", + "src": "28839:26:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "28889:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28895:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28885:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28885:15:23" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "28902:1:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "28878:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "28878:26:23" + }, + "nodeType": "YulExpressionStatement", + "src": "28878:26:23" + }, + { + "nodeType": "YulAssignment", + "src": "28917:80:23", + "value": { + "arguments": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "28932:7:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "28956:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28956:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28963:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "28952:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28952:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28970:1:23", + "type": "", + "value": "6" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "28973:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28979:4:23", + "type": "", + "value": "0x80" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28985:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28991:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "28941:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "28941:55:23" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "28928:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "28928:69:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "28917:7:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "29010:16:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29021:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "29015:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "29015:11:23" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "29010:1:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "29039:16:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29050:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "29044:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "29044:11:23" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "29039:1:23" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "29211:37:23", + "value": { + "arguments": [ + { + "name": "proof", + "nodeType": "YulIdentifier", + "src": "29242:5:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "29236:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "29236:12:23" + }, + "variables": [ + { + "name": "multiopenProofPtr", + "nodeType": "YulTypedName", + "src": "29215:17:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "29261:19:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29275:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "29269:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "29269:11:23" + }, + "variableNames": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "29261:4:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "29300:4:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "multiopenProofPtr", + "nodeType": "YulIdentifier", + "src": "29322:17:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29341:4:23", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29318:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "29318:28:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "29312:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "29312:35:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "29306:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "29306:42:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "29293:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "29293:56:23" + }, + "nodeType": "YulExpressionStatement", + "src": "29293:56:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "29373:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29379:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29369:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "29369:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "multiopenProofPtr", + "nodeType": "YulIdentifier", + "src": "29406:17:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29425:4:23", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29402:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "29402:28:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "29396:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "29396:35:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29433:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29392:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "29392:46:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "29386:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "29386:53:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "29362:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "29362:78:23" + }, + "nodeType": "YulExpressionStatement", + "src": "29362:78:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "29464:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29470:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29460:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "29460:15:23" + }, + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "29477:1:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "29453:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "29453:26:23" + }, + "nodeType": "YulExpressionStatement", + "src": "29453:26:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "29503:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29509:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29499:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "29499:15:23" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "29516:1:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "29492:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "29492:26:23" + }, + "nodeType": "YulExpressionStatement", + "src": "29492:26:23" + }, + { + "nodeType": "YulAssignment", + "src": "29531:80:23", + "value": { + "arguments": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "29546:7:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "29570:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "29570:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29577:4:23", + "type": "", + "value": "2000" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "29566:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "29566:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29584:1:23", + "type": "", + "value": "6" + }, + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "29587:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29593:4:23", + "type": "", + "value": "0x80" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29599:4:23", + "type": "", + "value": "0x00" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29605:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "29555:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "29555:55:23" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "29542:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "29542:69:23" + }, + "variableNames": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "29531:7:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "29642:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29662:5:23", + "type": "", + "value": "0x4a0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29638:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "29638:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "29632:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "29632:37:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29677:4:23", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "29671:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "29671:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "29625:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "29625:58:23" + }, + "nodeType": "YulExpressionStatement", + "src": "29625:58:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "29717:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29737:5:23", + "type": "", + "value": "0x4a0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29713:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "29713:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "29707:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "29707:37:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29746:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29703:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "29703:48:23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29759:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "29753:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "29753:11:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "29696:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "29696:69:23" + }, + "nodeType": "YulExpressionStatement", + "src": "29696:69:23" + } + ] + }, + { + "nodeType": "YulBlock", + "src": "29793:1958:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "30007:49:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "30029:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30049:5:23", + "type": "", + "value": "0x200" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30025:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "30025:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "30019:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "30019:37:23" + }, + "variables": [ + { + "name": "x2_2", + "nodeType": "YulTypedName", + "src": "30011:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "30069:49:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "30091:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30111:5:23", + "type": "", + "value": "0x220" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30087:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "30087:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "30081:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "30081:37:23" + }, + "variables": [ + { + "name": "x2_3", + "nodeType": "YulTypedName", + "src": "30073:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "30132:51:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "30156:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30176:5:23", + "type": "", + "value": "0x360" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30152:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "30152:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "30146:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "30146:37:23" + }, + "variables": [ + { + "name": "f_eval", + "nodeType": "YulTypedName", + "src": "30136:6:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "30196:81:23", + "value": { + "arguments": [ + { + "name": "f_eval", + "nodeType": "YulIdentifier", + "src": "30213:6:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "30238:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30258:5:23", + "type": "", + "value": "0x380" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30234:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "30234:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "30228:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "30228:37:23" + }, + { + "name": "x2", + "nodeType": "YulIdentifier", + "src": "30267:2:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "30271:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "30221:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "30221:52:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "30275:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "30206:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "30206:71:23" + }, + "variableNames": [ + { + "name": "f_eval", + "nodeType": "YulIdentifier", + "src": "30196:6:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "30290:83:23", + "value": { + "arguments": [ + { + "name": "f_eval", + "nodeType": "YulIdentifier", + "src": "30307:6:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "30332:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30352:5:23", + "type": "", + "value": "0x3a0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30328:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "30328:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "30322:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "30322:37:23" + }, + { + "name": "x2_2", + "nodeType": "YulIdentifier", + "src": "30361:4:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "30367:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "30315:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "30315:54:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "30371:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "30300:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "30300:73:23" + }, + "variableNames": [ + { + "name": "f_eval", + "nodeType": "YulIdentifier", + "src": "30290:6:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "30386:83:23", + "value": { + "arguments": [ + { + "name": "f_eval", + "nodeType": "YulIdentifier", + "src": "30403:6:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "30428:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30448:5:23", + "type": "", + "value": "0x3c0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30424:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "30424:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "30418:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "30418:37:23" + }, + { + "name": "x2_3", + "nodeType": "YulIdentifier", + "src": "30457:4:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "30463:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "30411:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "30411:54:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "30467:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "30396:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "30396:73:23" + }, + "variableNames": [ + { + "name": "f_eval", + "nodeType": "YulIdentifier", + "src": "30386:6:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "30493:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30513:5:23", + "type": "", + "value": "0x480" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30489:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "30489:30:23" + }, + { + "name": "f_eval", + "nodeType": "YulIdentifier", + "src": "30521:6:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "30482:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "30482:46:23" + }, + "nodeType": "YulExpressionStatement", + "src": "30482:46:23" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "30768:37:23", + "value": { + "arguments": [ + { + "name": "proof", + "nodeType": "YulIdentifier", + "src": "30799:5:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "30793:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "30793:12:23" + }, + "variables": [ + { + "name": "multiopenProofPtr", + "nodeType": "YulTypedName", + "src": "30772:17:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "30818:178:23", + "value": { + "arguments": [ + { + "name": "f_eval", + "nodeType": "YulIdentifier", + "src": "30865:6:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "multiopenProofPtr", + "nodeType": "YulIdentifier", + "src": "30902:17:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "30896:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "30896:24:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "challengeTranscript", + "nodeType": "YulIdentifier", + "src": "30932:19:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30953:4:23", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30928:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "30928:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "30922:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "30922:37:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "30961:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "30889:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "30889:74:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "30981:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "30841:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "30841:155:23" + }, + "variables": [ + { + "name": "final_poly_eval", + "nodeType": "YulTypedName", + "src": "30822:15:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "31009:194:23", + "value": { + "arguments": [ + { + "name": "final_poly_eval", + "nodeType": "YulIdentifier", + "src": "31052:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "multiopenProofPtr", + "nodeType": "YulIdentifier", + "src": "31102:17:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31121:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31098:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "31098:28:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "31092:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "31092:35:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "31139:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31159:5:23", + "type": "", + "value": "0x240" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31135:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "31135:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "31129:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "31129:37:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "31168:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "31085:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "31085:85:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "31188:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "31028:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "31028:175:23" + }, + "variableNames": [ + { + "name": "final_poly_eval", + "nodeType": "YulIdentifier", + "src": "31009:15:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "31216:194:23", + "value": { + "arguments": [ + { + "name": "final_poly_eval", + "nodeType": "YulIdentifier", + "src": "31259:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "multiopenProofPtr", + "nodeType": "YulIdentifier", + "src": "31309:17:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31328:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31305:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "31305:28:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "31299:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "31299:35:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "31346:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31366:5:23", + "type": "", + "value": "0x260" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31342:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "31342:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "31336:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "31336:37:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "31375:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "31292:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "31292:85:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "31395:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "31235:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "31235:175:23" + }, + "variableNames": [ + { + "name": "final_poly_eval", + "nodeType": "YulIdentifier", + "src": "31216:15:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "31423:194:23", + "value": { + "arguments": [ + { + "name": "final_poly_eval", + "nodeType": "YulIdentifier", + "src": "31466:15:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "multiopenProofPtr", + "nodeType": "YulIdentifier", + "src": "31516:17:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31535:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31512:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "31512:28:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "31506:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "31506:35:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "31553:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31573:5:23", + "type": "", + "value": "0x280" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31549:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "31549:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "31543:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "31543:37:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "31582:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "31499:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "31499:85:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "31602:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "31442:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "31442:175:23" + }, + "variableNames": [ + { + "name": "final_poly_eval", + "nodeType": "YulIdentifier", + "src": "31423:15:23" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "31641:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31661:5:23", + "type": "", + "value": "0x4c0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31637:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "31637:30:23" + }, + { + "name": "final_poly_eval", + "nodeType": "YulIdentifier", + "src": "31669:15:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "31630:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "31630:55:23" + }, + "nodeType": "YulExpressionStatement", + "src": "31630:55:23" + }, + { + "cases": [ + { + "body": { + "nodeType": "YulBlock", + "src": "31721:16:23", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31730:1:23", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31733:1:23", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "31723:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "31723:12:23" + }, + "nodeType": "YulExpressionStatement", + "src": "31723:12:23" + } + ] + }, + "nodeType": "YulCase", + "src": "31714:23:23", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31719:1:23", + "type": "", + "value": "0" + } + } + ], + "expression": { + "name": "success", + "nodeType": "YulIdentifier", + "src": "31706:7:23" + }, + "nodeType": "YulSwitch", + "src": "31699:38:23" + } + ] + } + ] + }, + "evmVersion": "london", + "externalReferences": [ + { + "declaration": 26658, + "isOffset": false, + "isSlot": false, + "src": "26488:19:23", + "valueSize": 1 + }, + { + "declaration": 26658, + "isOffset": false, + "isSlot": false, + "src": "30932:19:23", + "valueSize": 1 + }, + { + "declaration": 26658, + "isOffset": false, + "isSlot": false, + "src": "9396:19:23", + "valueSize": 1 + }, + { + "declaration": 26658, + "isOffset": false, + "isSlot": false, + "src": "9456:19:23", + "valueSize": 1 + }, + { + "declaration": 26658, + "isOffset": false, + "isSlot": false, + "src": "9516:19:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "10008:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "10060:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "10272:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "10324:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "10376:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "15240:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "15309:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "15313:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "15381:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "15385:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "15448:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "15452:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "15514:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "18663:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "18980:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "19306:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "19927:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "19935:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "19987:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "20405:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "20418:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "20474:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "21366:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "21570:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "21679:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "22077:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "22118:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "22138:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "22297:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "22420:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "22431:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "22474:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "23355:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "23422:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "23491:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "24011:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "24078:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "24153:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "24425:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "24526:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "24638:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "24707:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "24782:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "25238:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "25309:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "25313:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "25386:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "25390:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "25674:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "25780:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "25791:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "25802:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "30271:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "30275:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "30367:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "30371:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "30463:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "30467:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "30961:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "30981:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "31168:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "31188:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "31375:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "31395:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "31582:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "31602:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "9631:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "9683:1:23", + "valueSize": 1 + }, + { + "declaration": 26662, + "isOffset": false, + "isSlot": false, + "src": "9735:1:23", + "valueSize": 1 + }, + { + "declaration": 26652, + "isOffset": false, + "isSlot": false, + "src": "10607:5:23", + "valueSize": 1 + }, + { + "declaration": 26652, + "isOffset": false, + "isSlot": false, + "src": "14954:5:23", + "valueSize": 1 + }, + { + "declaration": 26652, + "isOffset": false, + "isSlot": false, + "src": "17933:5:23", + "valueSize": 1 + }, + { + "declaration": 26652, + "isOffset": false, + "isSlot": false, + "src": "19494:5:23", + "valueSize": 1 + }, + { + "declaration": 26652, + "isOffset": false, + "isSlot": false, + "src": "19551:5:23", + "valueSize": 1 + }, + { + "declaration": 26652, + "isOffset": false, + "isSlot": false, + "src": "20615:5:23", + "valueSize": 1 + }, + { + "declaration": 26652, + "isOffset": false, + "isSlot": false, + "src": "20672:5:23", + "valueSize": 1 + }, + { + "declaration": 26652, + "isOffset": false, + "isSlot": false, + "src": "22615:5:23", + "valueSize": 1 + }, + { + "declaration": 26652, + "isOffset": false, + "isSlot": false, + "src": "22672:5:23", + "valueSize": 1 + }, + { + "declaration": 26652, + "isOffset": false, + "isSlot": false, + "src": "29242:5:23", + "valueSize": 1 + }, + { + "declaration": 26652, + "isOffset": false, + "isSlot": false, + "src": "30799:5:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "11095:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "11590:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "11605:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "12004:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "12019:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "12489:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "12504:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "12912:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "12927:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "13377:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "13392:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "13818:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "13833:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "14397:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "14412:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "16044:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "16059:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "16536:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "16551:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "16831:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "16846:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "17254:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "17269:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "26529:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "27027:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "27304:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "27319:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "27814:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "28091:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "28106:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "28640:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "28917:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "28932:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "29531:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "29546:7:23", + "valueSize": 1 + }, + { + "declaration": 26667, + "isOffset": false, + "isSlot": false, + "src": "31706:7:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "10086:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "10147:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "10402:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "10463:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "10524:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "14508:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "14583:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "15550:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "17365:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "17440:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "18689:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "19006:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "19332:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "19838:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "20026:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "20241:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "20317:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "20513:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "20928:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "21009:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "21170:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "21255:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "21491:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "21755:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "22323:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "22513:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "22997:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "23077:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "23162:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "23249:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "23733:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "23818:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "23911:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "24438:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "24539:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "25006:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "25081:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "25158:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "25496:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "25580:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "25828:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "26817:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "26903:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "26986:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "27773:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "28430:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "28516:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "28599:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "29642:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "29717:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "30029:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "30091:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "30156:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "30238:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "30332:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "30428:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "30493:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "31139:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "31346:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "31553:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "31641:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "9761:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "9822:18:23", + "valueSize": 1 + }, + { + "declaration": 26655, + "isOffset": false, + "isSlot": false, + "src": "9883:18:23", + "valueSize": 1 + } + ], + "id": 26669, + "nodeType": "InlineAssembly", + "src": "9352:22409:23" + }, + { + "expression": { + "arguments": [ + { + "id": 26671, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26667, + "src": "31778:7:23", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "56657269666965723a206661696c656420746f20636f6d707574652066696e616c20706f6c79206f72206576616c", + "id": 26672, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "31787:48:23", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_6a84651e4ba1403bee9a55ea50e12d3e3ca72e7f61b89a7bfc82bc3191ad39c8", + "typeString": "literal_string \"Verifier: failed to compute final poly or eval\"" + }, + "value": "Verifier: failed to compute final poly or eval" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_6a84651e4ba1403bee9a55ea50e12d3e3ca72e7f61b89a7bfc82bc3191ad39c8", + "typeString": "literal_string \"Verifier: failed to compute final poly or eval\"" + } + ], + "id": 26670, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "31770:7:23", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 26673, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "31770:66:23", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 26674, + "nodeType": "ExpressionStatement", + "src": "31770:66:23" + } + ] + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "computeMultiopenFinaPolyAndEval", + "nameLocation": "9073:31:23", + "parameters": { + "id": 26659, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 26652, + "mutability": "mutable", + "name": "proof", + "nameLocation": "9133:5:23", + "nodeType": "VariableDeclaration", + "scope": 26676, + "src": "9114:24:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof" + }, + "typeName": { + "id": 26651, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26650, + "name": "Types.Proof", + "nameLocations": [ + "9114:5:23", + "9120:5:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 26182, + "src": "9114:11:23" + }, + "referencedDeclaration": 26182, + "src": "9114:11:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_storage_ptr", + "typeString": "struct Types.Proof" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 26655, + "mutability": "mutable", + "name": "verifierTranscript", + "nameLocation": "9180:18:23", + "nodeType": "VariableDeclaration", + "scope": 26676, + "src": "9148:50:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_VerifierTranscript_$26079_memory_ptr", + "typeString": "struct Types.VerifierTranscript" + }, + "typeName": { + "id": 26654, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26653, + "name": "Types.VerifierTranscript", + "nameLocations": [ + "9148:5:23", + "9154:18:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 26079, + "src": "9148:24:23" + }, + "referencedDeclaration": 26079, + "src": "9148:24:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_VerifierTranscript_$26079_storage_ptr", + "typeString": "struct Types.VerifierTranscript" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 26658, + "mutability": "mutable", + "name": "challengeTranscript", + "nameLocation": "9241:19:23", + "nodeType": "VariableDeclaration", + "scope": 26676, + "src": "9208:52:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_memory_ptr", + "typeString": "struct Types.ChallengeTranscript" + }, + "typeName": { + "id": 26657, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26656, + "name": "Types.ChallengeTranscript", + "nameLocations": [ + "9208:5:23", + "9214:19:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 25997, + "src": "9208:25:23" + }, + "referencedDeclaration": 25997, + "src": "9208:25:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ChallengeTranscript_$25997_storage_ptr", + "typeString": "struct Types.ChallengeTranscript" + } + }, + "visibility": "internal" + } + ], + "src": "9104:162:23" + }, + "returnParameters": { + "id": 26660, + "nodeType": "ParameterList", + "parameters": [], + "src": "9281:0:23" + }, + "scope": 26738, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "id": 26710, + "nodeType": "FunctionDefinition", + "src": "31849:5137:23", + "nodes": [], + "body": { + "id": 26709, + "nodeType": "Block", + "src": "32072:4914:23", + "nodes": [], + "statements": [ + { + "assignments": [ + 26694 + ], + "declarations": [ + { + "constant": false, + "id": 26694, + "mutability": "mutable", + "name": "p", + "nameLocation": "32090:1:23", + "nodeType": "VariableDeclaration", + "scope": 26709, + "src": "32082:9:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 26693, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32082:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 26697, + "initialValue": { + "expression": { + "id": 26695, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "32094:9:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 26696, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "32104:7:23", + "memberName": "PRIME_R", + "nodeType": "MemberAccess", + "referencedDeclaration": 24976, + "src": "32094:17:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "32082:29:23" + }, + { + "assignments": [ + 26699 + ], + "declarations": [ + { + "constant": false, + "id": 26699, + "mutability": "mutable", + "name": "rhs", + "nameLocation": "32129:3:23", + "nodeType": "VariableDeclaration", + "scope": 26709, + "src": "32121:11:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 26698, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32121:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 26700, + "nodeType": "VariableDeclarationStatement", + "src": "32121:11:23" + }, + { + "assignments": [ + 26702 + ], + "declarations": [ + { + "constant": false, + "id": 26702, + "mutability": "mutable", + "name": "lhs", + "nameLocation": "32150:3:23", + "nodeType": "VariableDeclaration", + "scope": 26709, + "src": "32142:11:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 26701, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32142:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 26703, + "nodeType": "VariableDeclarationStatement", + "src": "32142:11:23" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "32173:4780:23", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "32218:221:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "32236:35:23", + "value": { + "arguments": [ + { + "name": "val", + "nodeType": "YulIdentifier", + "src": "32255:3:23" + }, + { + "name": "val", + "nodeType": "YulIdentifier", + "src": "32260:3:23" + }, + { + "name": "prime", + "nodeType": "YulIdentifier", + "src": "32265:5:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "32248:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "32248:23:23" + }, + "variables": [ + { + "name": "val2", + "nodeType": "YulTypedName", + "src": "32240:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "32288:37:23", + "value": { + "arguments": [ + { + "name": "val2", + "nodeType": "YulIdentifier", + "src": "32307:4:23" + }, + { + "name": "val2", + "nodeType": "YulIdentifier", + "src": "32313:4:23" + }, + { + "name": "prime", + "nodeType": "YulIdentifier", + "src": "32319:5:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "32300:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "32300:25:23" + }, + "variables": [ + { + "name": "val4", + "nodeType": "YulTypedName", + "src": "32292:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "32342:37:23", + "value": { + "arguments": [ + { + "name": "val2", + "nodeType": "YulIdentifier", + "src": "32361:4:23" + }, + { + "name": "val4", + "nodeType": "YulIdentifier", + "src": "32367:4:23" + }, + { + "name": "prime", + "nodeType": "YulIdentifier", + "src": "32373:5:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "32354:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "32354:25:23" + }, + "variables": [ + { + "name": "val6", + "nodeType": "YulTypedName", + "src": "32346:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "32396:29:23", + "value": { + "arguments": [ + { + "name": "val6", + "nodeType": "YulIdentifier", + "src": "32408:4:23" + }, + { + "name": "val", + "nodeType": "YulIdentifier", + "src": "32414:3:23" + }, + { + "name": "prime", + "nodeType": "YulIdentifier", + "src": "32419:5:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "32401:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "32401:24:23" + }, + "variableNames": [ + { + "name": "r", + "nodeType": "YulIdentifier", + "src": "32396:1:23" + } + ] + } + ] + }, + "name": "pow7", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "val", + "nodeType": "YulTypedName", + "src": "32201:3:23", + "type": "" + }, + { + "name": "prime", + "nodeType": "YulTypedName", + "src": "32206:5:23", + "type": "" + } + ], + "returnVariables": [ + { + "name": "r", + "nodeType": "YulTypedName", + "src": "32216:1:23", + "type": "" + } + ], + "src": "32187:252:23" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "32453:28:23", + "value": { + "name": "v_challenge", + "nodeType": "YulIdentifier", + "src": "32470:11:23" + }, + "variables": [ + { + "name": "rolling_v", + "nodeType": "YulTypedName", + "src": "32457:9:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "32494:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "proof", + "nodeType": "YulIdentifier", + "src": "32523:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32530:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32519:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "32519:16:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "32513:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "32513:23:23" + }, + "variables": [ + { + "name": "openingsPtr", + "nodeType": "YulTypedName", + "src": "32498:11:23", + "type": "" + } + ] + }, + { + "nodeType": "YulBlock", + "src": "32550:258:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "32620:52:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "32645:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32665:5:23", + "type": "", + "value": "0x180" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32641:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "32641:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "32635:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "32635:37:23" + }, + "variables": [ + { + "name": "zh_eval", + "nodeType": "YulTypedName", + "src": "32624:7:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "32685:53:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "32719:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32732:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32715:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "32715:22:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "32709:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "32709:29:23" + }, + "variables": [ + { + "name": "quotient_opening", + "nodeType": "YulTypedName", + "src": "32689:16:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "32751:43:23", + "value": { + "arguments": [ + { + "name": "zh_eval", + "nodeType": "YulIdentifier", + "src": "32765:7:23" + }, + { + "name": "quotient_opening", + "nodeType": "YulIdentifier", + "src": "32774:16:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "32792:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "32758:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "32758:36:23" + }, + "variableNames": [ + { + "name": "rhs", + "nodeType": "YulIdentifier", + "src": "32751:3:23" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "32822:574:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "32939:32:23", + "value": { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "32959:11:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "32953:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "32953:18:23" + }, + "variables": [ + { + "name": "q_mimc", + "nodeType": "YulTypedName", + "src": "32943:6:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "32984:38:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "33003:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33016:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32999:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "32999:22:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "32993:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "32993:29:23" + }, + "variables": [ + { + "name": "c", + "nodeType": "YulTypedName", + "src": "32988:1:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33035:41:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "33057:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33070:4:23", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33053:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "33053:22:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33047:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "33047:29:23" + }, + "variables": [ + { + "name": "w0_0", + "nodeType": "YulTypedName", + "src": "33039:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33089:41:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "33111:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33124:4:23", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33107:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "33107:22:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33101:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "33101:29:23" + }, + "variables": [ + { + "name": "w0_1", + "nodeType": "YulTypedName", + "src": "33093:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33144:37:23", + "value": { + "arguments": [ + { + "name": "w0_0", + "nodeType": "YulIdentifier", + "src": "33170:4:23" + }, + { + "name": "c", + "nodeType": "YulIdentifier", + "src": "33176:1:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "33179:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "33163:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "33163:18:23" + }, + "variables": [ + { + "name": "gate_0_eval", + "nodeType": "YulTypedName", + "src": "33148:11:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "33194:35:23", + "value": { + "arguments": [ + { + "name": "gate_0_eval", + "nodeType": "YulIdentifier", + "src": "33214:11:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "33227:1:23" + } + ], + "functionName": { + "name": "pow7", + "nodeType": "YulIdentifier", + "src": "33209:4:23" + }, + "nodeType": "YulFunctionCall", + "src": "33209:20:23" + }, + "variableNames": [ + { + "name": "gate_0_eval", + "nodeType": "YulIdentifier", + "src": "33194:11:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "33242:51:23", + "value": { + "arguments": [ + { + "name": "gate_0_eval", + "nodeType": "YulIdentifier", + "src": "33264:11:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "33281:1:23" + }, + { + "name": "w0_1", + "nodeType": "YulIdentifier", + "src": "33284:4:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "33277:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "33277:12:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "33291:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "33257:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "33257:36:23" + }, + "variableNames": [ + { + "name": "gate_0_eval", + "nodeType": "YulIdentifier", + "src": "33242:11:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "33306:45:23", + "value": { + "arguments": [ + { + "name": "gate_0_eval", + "nodeType": "YulIdentifier", + "src": "33328:11:23" + }, + { + "name": "q_mimc", + "nodeType": "YulIdentifier", + "src": "33341:6:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "33349:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "33321:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "33321:30:23" + }, + "variableNames": [ + { + "name": "gate_0_eval", + "nodeType": "YulIdentifier", + "src": "33306:11:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "33364:18:23", + "value": { + "name": "gate_0_eval", + "nodeType": "YulIdentifier", + "src": "33371:11:23" + }, + "variableNames": [ + { + "name": "lhs", + "nodeType": "YulIdentifier", + "src": "33364:3:23" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "33410:754:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "33424:32:23", + "value": { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "33444:11:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33438:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "33438:18:23" + }, + "variables": [ + { + "name": "q_mimc", + "nodeType": "YulTypedName", + "src": "33428:6:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33469:38:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "33488:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33501:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33484:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "33484:22:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33478:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "33478:29:23" + }, + "variables": [ + { + "name": "c", + "nodeType": "YulTypedName", + "src": "33473:1:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33630:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "33652:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33665:5:23", + "type": "", + "value": "0x120" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33648:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "33648:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33642:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "33642:30:23" + }, + "variables": [ + { + "name": "w1_0", + "nodeType": "YulTypedName", + "src": "33634:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33685:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "33707:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33720:5:23", + "type": "", + "value": "0x140" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33703:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "33703:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33697:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "33697:30:23" + }, + "variables": [ + { + "name": "w1_1", + "nodeType": "YulTypedName", + "src": "33689:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33740:43:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "33763:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33776:5:23", + "type": "", + "value": "0x1e0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33759:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "33759:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33753:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "33753:30:23" + }, + "variables": [ + { + "name": "key_0", + "nodeType": "YulTypedName", + "src": "33744:5:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33796:55:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "w1_0", + "nodeType": "YulIdentifier", + "src": "33829:4:23" + }, + { + "name": "key_0", + "nodeType": "YulIdentifier", + "src": "33835:5:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "33842:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "33822:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "33822:22:23" + }, + { + "name": "c", + "nodeType": "YulIdentifier", + "src": "33846:1:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "33849:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "33815:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "33815:36:23" + }, + "variables": [ + { + "name": "gate_1_eval", + "nodeType": "YulTypedName", + "src": "33800:11:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "33864:35:23", + "value": { + "arguments": [ + { + "name": "gate_1_eval", + "nodeType": "YulIdentifier", + "src": "33884:11:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "33897:1:23" + } + ], + "functionName": { + "name": "pow7", + "nodeType": "YulIdentifier", + "src": "33879:4:23" + }, + "nodeType": "YulFunctionCall", + "src": "33879:20:23" + }, + "variableNames": [ + { + "name": "gate_1_eval", + "nodeType": "YulIdentifier", + "src": "33864:11:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "33912:51:23", + "value": { + "arguments": [ + { + "name": "gate_1_eval", + "nodeType": "YulIdentifier", + "src": "33934:11:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "33951:1:23" + }, + { + "name": "w1_1", + "nodeType": "YulIdentifier", + "src": "33954:4:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "33947:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "33947:12:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "33961:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "33927:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "33927:36:23" + }, + "variableNames": [ + { + "name": "gate_1_eval", + "nodeType": "YulIdentifier", + "src": "33912:11:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "33976:45:23", + "value": { + "arguments": [ + { + "name": "gate_1_eval", + "nodeType": "YulIdentifier", + "src": "33998:11:23" + }, + { + "name": "q_mimc", + "nodeType": "YulIdentifier", + "src": "34011:6:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "34019:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "33991:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "33991:30:23" + }, + "variableNames": [ + { + "name": "gate_1_eval", + "nodeType": "YulIdentifier", + "src": "33976:11:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "34034:56:23", + "value": { + "arguments": [ + { + "name": "lhs", + "nodeType": "YulIdentifier", + "src": "34048:3:23" + }, + { + "arguments": [ + { + "name": "rolling_v", + "nodeType": "YulIdentifier", + "src": "34060:9:23" + }, + { + "name": "gate_1_eval", + "nodeType": "YulIdentifier", + "src": "34071:11:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "34084:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "34053:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "34053:33:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "34088:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "34041:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "34041:49:23" + }, + "variableNames": [ + { + "name": "lhs", + "nodeType": "YulIdentifier", + "src": "34034:3:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "34104:46:23", + "value": { + "arguments": [ + { + "name": "rolling_v", + "nodeType": "YulIdentifier", + "src": "34124:9:23" + }, + { + "name": "v_challenge", + "nodeType": "YulIdentifier", + "src": "34135:11:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "34148:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "34117:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "34117:33:23" + }, + "variableNames": [ + { + "name": "rolling_v", + "nodeType": "YulIdentifier", + "src": "34104:9:23" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "34178:755:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "34303:32:23", + "value": { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "34323:11:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34317:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "34317:18:23" + }, + "variables": [ + { + "name": "q_mimc", + "nodeType": "YulTypedName", + "src": "34307:6:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34348:38:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "34367:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34380:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34363:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "34363:22:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34357:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "34357:29:23" + }, + "variables": [ + { + "name": "c", + "nodeType": "YulTypedName", + "src": "34352:1:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34399:43:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "34422:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34435:5:23", + "type": "", + "value": "0x1e0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34418:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "34418:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34412:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "34412:30:23" + }, + "variables": [ + { + "name": "key_0", + "nodeType": "YulTypedName", + "src": "34403:5:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34455:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "34477:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34490:5:23", + "type": "", + "value": "0x180" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34473:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "34473:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34467:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "34467:30:23" + }, + "variables": [ + { + "name": "w2_0", + "nodeType": "YulTypedName", + "src": "34459:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34510:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "34532:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34545:5:23", + "type": "", + "value": "0x1a0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34528:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "34528:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34522:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "34522:30:23" + }, + "variables": [ + { + "name": "w2_1", + "nodeType": "YulTypedName", + "src": "34514:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34565:55:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "w2_0", + "nodeType": "YulIdentifier", + "src": "34598:4:23" + }, + { + "name": "key_0", + "nodeType": "YulIdentifier", + "src": "34604:5:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "34611:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "34591:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "34591:22:23" + }, + { + "name": "c", + "nodeType": "YulIdentifier", + "src": "34615:1:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "34618:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "34584:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "34584:36:23" + }, + "variables": [ + { + "name": "gate_2_eval", + "nodeType": "YulTypedName", + "src": "34569:11:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "34633:35:23", + "value": { + "arguments": [ + { + "name": "gate_2_eval", + "nodeType": "YulIdentifier", + "src": "34653:11:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "34666:1:23" + } + ], + "functionName": { + "name": "pow7", + "nodeType": "YulIdentifier", + "src": "34648:4:23" + }, + "nodeType": "YulFunctionCall", + "src": "34648:20:23" + }, + "variableNames": [ + { + "name": "gate_2_eval", + "nodeType": "YulIdentifier", + "src": "34633:11:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "34681:51:23", + "value": { + "arguments": [ + { + "name": "gate_2_eval", + "nodeType": "YulIdentifier", + "src": "34703:11:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "34720:1:23" + }, + { + "name": "w2_1", + "nodeType": "YulIdentifier", + "src": "34723:4:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "34716:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "34716:12:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "34730:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "34696:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "34696:36:23" + }, + "variableNames": [ + { + "name": "gate_2_eval", + "nodeType": "YulIdentifier", + "src": "34681:11:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "34745:45:23", + "value": { + "arguments": [ + { + "name": "gate_2_eval", + "nodeType": "YulIdentifier", + "src": "34767:11:23" + }, + { + "name": "q_mimc", + "nodeType": "YulIdentifier", + "src": "34780:6:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "34788:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "34760:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "34760:30:23" + }, + "variableNames": [ + { + "name": "gate_2_eval", + "nodeType": "YulIdentifier", + "src": "34745:11:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "34803:56:23", + "value": { + "arguments": [ + { + "name": "lhs", + "nodeType": "YulIdentifier", + "src": "34817:3:23" + }, + { + "arguments": [ + { + "name": "rolling_v", + "nodeType": "YulIdentifier", + "src": "34829:9:23" + }, + { + "name": "gate_2_eval", + "nodeType": "YulIdentifier", + "src": "34840:11:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "34853:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "34822:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "34822:33:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "34857:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "34810:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "34810:49:23" + }, + "variableNames": [ + { + "name": "lhs", + "nodeType": "YulIdentifier", + "src": "34803:3:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "34873:46:23", + "value": { + "arguments": [ + { + "name": "rolling_v", + "nodeType": "YulIdentifier", + "src": "34893:9:23" + }, + { + "name": "v_challenge", + "nodeType": "YulIdentifier", + "src": "34904:11:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "34917:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "34886:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "34886:33:23" + }, + "variableNames": [ + { + "name": "rolling_v", + "nodeType": "YulIdentifier", + "src": "34873:9:23" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "34947:1996:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "35037:32:23", + "value": { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "35057:11:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35051:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "35051:18:23" + }, + "variables": [ + { + "name": "q_mimc", + "nodeType": "YulTypedName", + "src": "35041:6:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35082:43:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "35105:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35118:5:23", + "type": "", + "value": "0x1e0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35101:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "35101:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35095:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "35095:30:23" + }, + "variables": [ + { + "name": "key_0", + "nodeType": "YulTypedName", + "src": "35086:5:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35138:43:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "35161:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35174:5:23", + "type": "", + "value": "0x200" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35157:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "35157:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35151:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "35151:30:23" + }, + "variables": [ + { + "name": "key_1", + "nodeType": "YulTypedName", + "src": "35142:5:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35194:50:23", + "value": { + "arguments": [ + { + "name": "key_0", + "nodeType": "YulIdentifier", + "src": "35220:5:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "35231:1:23" + }, + { + "name": "key_1", + "nodeType": "YulIdentifier", + "src": "35234:5:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "35227:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "35227:13:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "35242:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "35213:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "35213:31:23" + }, + "variables": [ + { + "name": "gate_3_eval", + "nodeType": "YulTypedName", + "src": "35198:11:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "35257:45:23", + "value": { + "arguments": [ + { + "name": "gate_3_eval", + "nodeType": "YulIdentifier", + "src": "35279:11:23" + }, + { + "name": "q_mimc", + "nodeType": "YulIdentifier", + "src": "35292:6:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "35300:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "35272:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "35272:30:23" + }, + "variableNames": [ + { + "name": "gate_3_eval", + "nodeType": "YulIdentifier", + "src": "35257:11:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "35315:56:23", + "value": { + "arguments": [ + { + "name": "lhs", + "nodeType": "YulIdentifier", + "src": "35329:3:23" + }, + { + "arguments": [ + { + "name": "rolling_v", + "nodeType": "YulIdentifier", + "src": "35341:9:23" + }, + { + "name": "gate_3_eval", + "nodeType": "YulIdentifier", + "src": "35352:11:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "35365:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "35334:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "35334:33:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "35369:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "35322:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "35322:49:23" + }, + "variableNames": [ + { + "name": "lhs", + "nodeType": "YulIdentifier", + "src": "35315:3:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "35385:46:23", + "value": { + "arguments": [ + { + "name": "rolling_v", + "nodeType": "YulIdentifier", + "src": "35405:9:23" + }, + { + "name": "v_challenge", + "nodeType": "YulIdentifier", + "src": "35416:11:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "35429:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "35398:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "35398:33:23" + }, + "variableNames": [ + { + "name": "rolling_v", + "nodeType": "YulIdentifier", + "src": "35385:9:23" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35525:41:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "35547:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35560:4:23", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35543:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "35543:22:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35537:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "35537:29:23" + }, + "variables": [ + { + "name": "w0_0", + "nodeType": "YulTypedName", + "src": "35529:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35579:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "35601:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35614:5:23", + "type": "", + "value": "0x100" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35597:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "35597:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35591:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "35591:30:23" + }, + "variables": [ + { + "name": "w0_2", + "nodeType": "YulTypedName", + "src": "35583:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35634:47:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "verifierTranscript", + "nodeType": "YulIdentifier", + "src": "35654:18:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35674:5:23", + "type": "", + "value": "0x160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35650:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "35650:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35644:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "35644:37:23" + }, + "variables": [ + { + "name": "l0", + "nodeType": "YulTypedName", + "src": "35638:2:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35694:66:23", + "value": { + "arguments": [ + { + "name": "key_0", + "nodeType": "YulIdentifier", + "src": "35720:5:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "35731:1:23" + }, + { + "arguments": [ + { + "name": "w0_0", + "nodeType": "YulIdentifier", + "src": "35741:4:23" + }, + { + "name": "w0_2", + "nodeType": "YulIdentifier", + "src": "35747:4:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "35753:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "35734:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "35734:21:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "35727:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "35727:29:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "35758:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "35713:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "35713:47:23" + }, + "variables": [ + { + "name": "gate_4_eval", + "nodeType": "YulTypedName", + "src": "35698:11:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "35773:41:23", + "value": { + "arguments": [ + { + "name": "gate_4_eval", + "nodeType": "YulIdentifier", + "src": "35795:11:23" + }, + { + "name": "l0", + "nodeType": "YulIdentifier", + "src": "35808:2:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "35812:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "35788:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "35788:26:23" + }, + "variableNames": [ + { + "name": "gate_4_eval", + "nodeType": "YulIdentifier", + "src": "35773:11:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "35827:56:23", + "value": { + "arguments": [ + { + "name": "lhs", + "nodeType": "YulIdentifier", + "src": "35841:3:23" + }, + { + "arguments": [ + { + "name": "rolling_v", + "nodeType": "YulIdentifier", + "src": "35853:9:23" + }, + { + "name": "gate_4_eval", + "nodeType": "YulIdentifier", + "src": "35864:11:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "35877:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "35846:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "35846:33:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "35881:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "35834:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "35834:49:23" + }, + "variableNames": [ + { + "name": "lhs", + "nodeType": "YulIdentifier", + "src": "35827:3:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "35897:46:23", + "value": { + "arguments": [ + { + "name": "rolling_v", + "nodeType": "YulIdentifier", + "src": "35917:9:23" + }, + { + "name": "v_challenge", + "nodeType": "YulIdentifier", + "src": "35928:11:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "35941:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "35910:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "35910:33:23" + }, + "variableNames": [ + { + "name": "rolling_v", + "nodeType": "YulIdentifier", + "src": "35897:9:23" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36060:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "36082:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36095:5:23", + "type": "", + "value": "0x180" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36078:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "36078:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "36072:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "36072:30:23" + }, + "variables": [ + { + "name": "w2_0", + "nodeType": "YulTypedName", + "src": "36064:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36115:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "openingsPtr", + "nodeType": "YulIdentifier", + "src": "36137:11:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36150:5:23", + "type": "", + "value": "0x1c0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36133:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "36133:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "36127:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "36127:30:23" + }, + "variables": [ + { + "name": "w2_2", + "nodeType": "YulTypedName", + "src": "36119:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36170:51:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "publicInputs", + "nodeType": "YulIdentifier", + "src": "36201:12:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36215:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36197:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "36197:23:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "36191:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "36191:30:23" + }, + "variables": [ + { + "name": "nullifierHash", + "nodeType": "YulTypedName", + "src": "36174:13:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36234:44:23", + "value": { + "arguments": [ + { + "name": "publicInputs", + "nodeType": "YulIdentifier", + "src": "36265:12:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "36259:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "36259:19:23" + }, + "variables": [ + { + "name": "externalNullifier", + "nodeType": "YulTypedName", + "src": "36238:17:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36291:40:23", + "value": { + "arguments": [ + { + "name": "key_0", + "nodeType": "YulIdentifier", + "src": "36315:5:23" + }, + { + "name": "key_0", + "nodeType": "YulIdentifier", + "src": "36322:5:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "36329:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "36308:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "36308:23:23" + }, + "variables": [ + { + "name": "two_key_0", + "nodeType": "YulTypedName", + "src": "36295:9:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36344:30:23", + "value": { + "arguments": [ + { + "name": "w2_0", + "nodeType": "YulIdentifier", + "src": "36360:4:23" + }, + { + "name": "w2_2", + "nodeType": "YulIdentifier", + "src": "36366:4:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "36372:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "36353:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "36353:21:23" + }, + "variables": [ + { + "name": "r", + "nodeType": "YulTypedName", + "src": "36348:1:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "36387:28:23", + "value": { + "arguments": [ + { + "name": "r", + "nodeType": "YulIdentifier", + "src": "36399:1:23" + }, + { + "name": "two_key_0", + "nodeType": "YulIdentifier", + "src": "36402:9:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "36413:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "36392:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "36392:23:23" + }, + "variableNames": [ + { + "name": "r", + "nodeType": "YulIdentifier", + "src": "36387:1:23" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36428:54:23", + "value": { + "arguments": [ + { + "name": "nullifierHash", + "nodeType": "YulIdentifier", + "src": "36454:13:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "36473:1:23" + }, + { + "name": "r", + "nodeType": "YulIdentifier", + "src": "36476:1:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "36469:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "36469:9:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "36480:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "36447:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "36447:35:23" + }, + "variables": [ + { + "name": "gate_5_eval", + "nodeType": "YulTypedName", + "src": "36432:11:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "36495:41:23", + "value": { + "arguments": [ + { + "name": "gate_5_eval", + "nodeType": "YulIdentifier", + "src": "36517:11:23" + }, + { + "name": "l0", + "nodeType": "YulIdentifier", + "src": "36530:2:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "36534:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "36510:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "36510:26:23" + }, + "variableNames": [ + { + "name": "gate_5_eval", + "nodeType": "YulIdentifier", + "src": "36495:11:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "36549:56:23", + "value": { + "arguments": [ + { + "name": "lhs", + "nodeType": "YulIdentifier", + "src": "36563:3:23" + }, + { + "arguments": [ + { + "name": "rolling_v", + "nodeType": "YulIdentifier", + "src": "36575:9:23" + }, + { + "name": "gate_5_eval", + "nodeType": "YulIdentifier", + "src": "36586:11:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "36599:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "36568:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "36568:33:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "36603:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "36556:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "36556:49:23" + }, + "variableNames": [ + { + "name": "lhs", + "nodeType": "YulIdentifier", + "src": "36549:3:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "36619:46:23", + "value": { + "arguments": [ + { + "name": "rolling_v", + "nodeType": "YulIdentifier", + "src": "36639:9:23" + }, + { + "name": "v_challenge", + "nodeType": "YulIdentifier", + "src": "36650:11:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "36663:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "36632:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "36632:33:23" + }, + "variableNames": [ + { + "name": "rolling_v", + "nodeType": "YulIdentifier", + "src": "36619:9:23" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36745:61:23", + "value": { + "arguments": [ + { + "name": "w2_0", + "nodeType": "YulIdentifier", + "src": "36771:4:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "36781:1:23" + }, + { + "name": "externalNullifier", + "nodeType": "YulIdentifier", + "src": "36784:17:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "36777:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "36777:25:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "36804:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "36764:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "36764:42:23" + }, + "variables": [ + { + "name": "gate_6_eval", + "nodeType": "YulTypedName", + "src": "36749:11:23", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "36819:41:23", + "value": { + "arguments": [ + { + "name": "gate_6_eval", + "nodeType": "YulIdentifier", + "src": "36841:11:23" + }, + { + "name": "l0", + "nodeType": "YulIdentifier", + "src": "36854:2:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "36858:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "36834:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "36834:26:23" + }, + "variableNames": [ + { + "name": "gate_6_eval", + "nodeType": "YulIdentifier", + "src": "36819:11:23" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "36873:56:23", + "value": { + "arguments": [ + { + "name": "lhs", + "nodeType": "YulIdentifier", + "src": "36887:3:23" + }, + { + "arguments": [ + { + "name": "rolling_v", + "nodeType": "YulIdentifier", + "src": "36899:9:23" + }, + { + "name": "gate_6_eval", + "nodeType": "YulIdentifier", + "src": "36910:11:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "36923:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "36892:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "36892:33:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "36927:1:23" + } + ], + "functionName": { + "name": "addmod", + "nodeType": "YulIdentifier", + "src": "36880:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "36880:49:23" + }, + "variableNames": [ + { + "name": "lhs", + "nodeType": "YulIdentifier", + "src": "36873:3:23" + } + ] + } + ] + } + ] + }, + "evmVersion": "london", + "externalReferences": [ + { + "declaration": 26702, + "isOffset": false, + "isSlot": false, + "src": "33364:3:23", + "valueSize": 1 + }, + { + "declaration": 26702, + "isOffset": false, + "isSlot": false, + "src": "34034:3:23", + "valueSize": 1 + }, + { + "declaration": 26702, + "isOffset": false, + "isSlot": false, + "src": "34048:3:23", + "valueSize": 1 + }, + { + "declaration": 26702, + "isOffset": false, + "isSlot": false, + "src": "34803:3:23", + "valueSize": 1 + }, + { + "declaration": 26702, + "isOffset": false, + "isSlot": false, + "src": "34817:3:23", + "valueSize": 1 + }, + { + "declaration": 26702, + "isOffset": false, + "isSlot": false, + "src": "35315:3:23", + "valueSize": 1 + }, + { + "declaration": 26702, + "isOffset": false, + "isSlot": false, + "src": "35329:3:23", + "valueSize": 1 + }, + { + "declaration": 26702, + "isOffset": false, + "isSlot": false, + "src": "35827:3:23", + "valueSize": 1 + }, + { + "declaration": 26702, + "isOffset": false, + "isSlot": false, + "src": "35841:3:23", + "valueSize": 1 + }, + { + "declaration": 26702, + "isOffset": false, + "isSlot": false, + "src": "36549:3:23", + "valueSize": 1 + }, + { + "declaration": 26702, + "isOffset": false, + "isSlot": false, + "src": "36563:3:23", + "valueSize": 1 + }, + { + "declaration": 26702, + "isOffset": false, + "isSlot": false, + "src": "36873:3:23", + "valueSize": 1 + }, + { + "declaration": 26702, + "isOffset": false, + "isSlot": false, + "src": "36887:3:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "32792:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "33179:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "33227:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "33281:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "33291:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "33349:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "33842:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "33849:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "33897:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "33951:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "33961:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "34019:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "34084:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "34088:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "34148:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "34611:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "34618:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "34666:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "34720:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "34730:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "34788:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "34853:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "34857:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "34917:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "35231:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "35242:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "35300:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "35365:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "35369:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "35429:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "35731:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "35753:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "35758:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "35812:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "35877:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "35881:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "35941:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "36329:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "36372:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "36413:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "36473:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "36480:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "36534:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "36599:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "36603:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "36663:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "36781:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "36804:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "36858:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "36923:1:23", + "valueSize": 1 + }, + { + "declaration": 26694, + "isOffset": false, + "isSlot": false, + "src": "36927:1:23", + "valueSize": 1 + }, + { + "declaration": 26679, + "isOffset": false, + "isSlot": false, + "src": "32523:5:23", + "valueSize": 1 + }, + { + "declaration": 26688, + "isOffset": false, + "isSlot": false, + "src": "36201:12:23", + "valueSize": 1 + }, + { + "declaration": 26688, + "isOffset": false, + "isSlot": false, + "src": "36265:12:23", + "valueSize": 1 + }, + { + "declaration": 26699, + "isOffset": false, + "isSlot": false, + "src": "32751:3:23", + "valueSize": 1 + }, + { + "declaration": 26684, + "isOffset": false, + "isSlot": false, + "src": "32470:11:23", + "valueSize": 1 + }, + { + "declaration": 26684, + "isOffset": false, + "isSlot": false, + "src": "34135:11:23", + "valueSize": 1 + }, + { + "declaration": 26684, + "isOffset": false, + "isSlot": false, + "src": "34904:11:23", + "valueSize": 1 + }, + { + "declaration": 26684, + "isOffset": false, + "isSlot": false, + "src": "35416:11:23", + "valueSize": 1 + }, + { + "declaration": 26684, + "isOffset": false, + "isSlot": false, + "src": "35928:11:23", + "valueSize": 1 + }, + { + "declaration": 26684, + "isOffset": false, + "isSlot": false, + "src": "36650:11:23", + "valueSize": 1 + }, + { + "declaration": 26682, + "isOffset": false, + "isSlot": false, + "src": "32645:18:23", + "valueSize": 1 + }, + { + "declaration": 26682, + "isOffset": false, + "isSlot": false, + "src": "35654:18:23", + "valueSize": 1 + } + ], + "id": 26704, + "nodeType": "InlineAssembly", + "src": "32164:4789:23" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 26707, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 26705, + "name": "lhs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26702, + "src": "36969:3:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 26706, + "name": "rhs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26699, + "src": "36976:3:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "36969:10:23", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 26692, + "id": 26708, + "nodeType": "Return", + "src": "36962:17:23" + } + ] + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "verifyGateEvals", + "nameLocation": "31858:15:23", + "parameters": { + "id": 26689, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 26679, + "mutability": "mutable", + "name": "proof", + "nameLocation": "31902:5:23", + "nodeType": "VariableDeclaration", + "scope": 26710, + "src": "31883:24:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_memory_ptr", + "typeString": "struct Types.Proof" + }, + "typeName": { + "id": 26678, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26677, + "name": "Types.Proof", + "nameLocations": [ + "31883:5:23", + "31889:5:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 26182, + "src": "31883:11:23" + }, + "referencedDeclaration": 26182, + "src": "31883:11:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Proof_$26182_storage_ptr", + "typeString": "struct Types.Proof" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 26682, + "mutability": "mutable", + "name": "verifierTranscript", + "nameLocation": "31949:18:23", + "nodeType": "VariableDeclaration", + "scope": 26710, + "src": "31917:50:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_VerifierTranscript_$26079_memory_ptr", + "typeString": "struct Types.VerifierTranscript" + }, + "typeName": { + "id": 26681, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 26680, + "name": "Types.VerifierTranscript", + "nameLocations": [ + "31917:5:23", + "31923:18:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 26079, + "src": "31917:24:23" + }, + "referencedDeclaration": 26079, + "src": "31917:24:23", + "typeDescriptions": { + "typeIdentifier": "t_struct$_VerifierTranscript_$26079_storage_ptr", + "typeString": "struct Types.VerifierTranscript" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 26684, + "mutability": "mutable", + "name": "v_challenge", + "nameLocation": "31985:11:23", + "nodeType": "VariableDeclaration", + "scope": 26710, + "src": "31977:19:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 26683, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31977:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 26688, + "mutability": "mutable", + "name": "publicInputs", + "nameLocation": "32024:12:23", + "nodeType": "VariableDeclaration", + "scope": 26710, + "src": "32006:30:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr", + "typeString": "uint256[3]" + }, + "typeName": { + "baseType": { + "id": 26685, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32006:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 26687, + "length": { + "hexValue": "33", + "id": 26686, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "32014:1:23", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "nodeType": "ArrayTypeName", + "src": "32006:10:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$3_storage_ptr", + "typeString": "uint256[3]" + } + }, + "visibility": "internal" + } + ], + "src": "31873:169:23" + }, + "returnParameters": { + "id": 26692, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 26691, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 26710, + "src": "32066:4:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 26690, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "32066:4:23", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "32065:6:23" + }, + "scope": 26738, + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "id": 26737, + "nodeType": "FunctionDefinition", + "src": "36992:4605:23", + "nodes": [], + "body": { + "id": 26736, + "nodeType": "Block", + "src": "37095:4502:23", + "nodes": [], + "statements": [ + { + "assignments": [ + 26726 + ], + "declarations": [ + { + "constant": false, + "id": 26726, + "mutability": "mutable", + "name": "results", + "nameLocation": "37123:7:23", + "nodeType": "VariableDeclaration", + "scope": 26736, + "src": "37105:25:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8]" + }, + "typeName": { + "baseType": { + "id": 26724, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "37105:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 26725, + "length": { + "hexValue": "38", + "id": 26723, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "37113:1:23", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "nodeType": "ArrayTypeName", + "src": "37105:10:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_storage_ptr", + "typeString": "uint256[8]" + } + }, + "visibility": "internal" + } + ], + "id": 26727, + "nodeType": "VariableDeclarationStatement", + "src": "37105:25:23" + }, + { + "assignments": [ + 26729 + ], + "declarations": [ + { + "constant": false, + "id": 26729, + "mutability": "mutable", + "name": "p", + "nameLocation": "37148:1:23", + "nodeType": "VariableDeclaration", + "scope": 26736, + "src": "37140:9:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 26728, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "37140:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 26732, + "initialValue": { + "expression": { + "id": 26730, + "name": "Constants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 25007, + "src": "37152:9:23", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Constants_$25007_$", + "typeString": "type(library Constants)" + } + }, + "id": 26731, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "37162:7:23", + "memberName": "PRIME_R", + "nodeType": "MemberAccess", + "referencedDeclaration": 24976, + "src": "37152:17:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "37140:29:23" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "37188:4378:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "37202:23:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37220:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "37214:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "37214:11:23" + }, + "variables": [ + { + "name": "mPtr", + "nodeType": "YulTypedName", + "src": "37206:4:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38660:24:23", + "value": { + "arguments": [ + { + "name": "inputs", + "nodeType": "YulIdentifier", + "src": "38677:6:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38671:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "38671:13:23" + }, + "variables": [ + { + "name": "a_0", + "nodeType": "YulTypedName", + "src": "38664:3:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38697:35:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "inputs", + "nodeType": "YulIdentifier", + "src": "38718:6:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38726:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38714:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "38714:17:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38708:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "38708:24:23" + }, + "variables": [ + { + "name": "a_1", + "nodeType": "YulTypedName", + "src": "38701:3:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38745:30:23", + "value": { + "arguments": [ + { + "name": "a_0", + "nodeType": "YulIdentifier", + "src": "38763:3:23" + }, + { + "name": "a_1", + "nodeType": "YulIdentifier", + "src": "38768:3:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "38773:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "38756:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "38756:19:23" + }, + "variables": [ + { + "name": "b_1", + "nodeType": "YulTypedName", + "src": "38749:3:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "38820:4:23" + }, + { + "name": "b_1", + "nodeType": "YulIdentifier", + "src": "38826:3:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "38813:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "38813:17:23" + }, + "nodeType": "YulExpressionStatement", + "src": "38813:17:23" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "38891:296:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "38909:26:23", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "38927:1:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38930:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "38923:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "38923:12:23" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "38913:6:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38952:48:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "inputs", + "nodeType": "YulIdentifier", + "src": "38973:6:23" + }, + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "38985:6:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38993:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38981:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "38981:17:23" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38969:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "38969:30:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38963:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "38963:37:23" + }, + "variables": [ + { + "name": "a_i", + "nodeType": "YulTypedName", + "src": "38956:3:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "39017:54:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "39046:4:23" + }, + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "39056:6:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39064:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "39052:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "39052:17:23" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39042:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "39042:28:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39036:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "39036:35:23" + }, + "variables": [ + { + "name": "b_i_minus_1", + "nodeType": "YulTypedName", + "src": "39021:11:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "39088:38:23", + "value": { + "arguments": [ + { + "name": "a_i", + "nodeType": "YulIdentifier", + "src": "39106:3:23" + }, + { + "name": "b_i_minus_1", + "nodeType": "YulIdentifier", + "src": "39111:11:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "39124:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "39099:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "39099:27:23" + }, + "variables": [ + { + "name": "b_i", + "nodeType": "YulTypedName", + "src": "39092:3:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "39154:4:23" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "39160:6:23" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39150:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "39150:17:23" + }, + { + "name": "b_i", + "nodeType": "YulIdentifier", + "src": "39169:3:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39143:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "39143:30:23" + }, + "nodeType": "YulExpressionStatement", + "src": "39143:30:23" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "38866:1:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38869:1:23", + "type": "", + "value": "8" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "38863:2:23" + }, + "nodeType": "YulFunctionCall", + "src": "38863:8:23" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "38872:18:23", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "38874:14:23", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "38883:1:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38886:1:23", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38879:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "38879:9:23" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "38874:1:23" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "38848:14:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "38850:10:23", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38859:1:23", + "type": "", + "value": "1" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "38854:1:23", + "type": "" + } + ] + } + ] + }, + "src": "38844:343:23" + }, + { + "cases": [ + { + "body": { + "nodeType": "YulBlock", + "src": "39318:16:23", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39327:1:23", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39330:1:23", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "39320:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "39320:12:23" + }, + "nodeType": "YulExpressionStatement", + "src": "39320:12:23" + } + ] + }, + "nodeType": "YulCase", + "src": "39311:23:23", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39316:1:23", + "type": "", + "value": "0" + } + } + ], + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "39298:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39304:4:23", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39294:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "39294:15:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39288:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "39288:22:23" + }, + "nodeType": "YulSwitch", + "src": "39281:53:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "39400:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39406:5:23", + "type": "", + "value": "0x0e0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39396:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "39396:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39414:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39389:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "39389:30:23" + }, + "nodeType": "YulExpressionStatement", + "src": "39389:30:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "39443:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39449:5:23", + "type": "", + "value": "0x100" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39439:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "39439:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39457:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39432:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "39432:30:23" + }, + "nodeType": "YulExpressionStatement", + "src": "39432:30:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "39486:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39492:5:23", + "type": "", + "value": "0x120" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39482:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "39482:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39500:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39475:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "39475:30:23" + }, + "nodeType": "YulExpressionStatement", + "src": "39475:30:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "39529:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39535:5:23", + "type": "", + "value": "0x140" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39525:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "39525:16:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "39553:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39559:4:23", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39549:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "39549:15:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39543:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "39543:22:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39518:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "39518:48:23" + }, + "nodeType": "YulExpressionStatement", + "src": "39518:48:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "39590:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39596:5:23", + "type": "", + "value": "0x160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39586:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "39586:16:23" + }, + { + "arguments": [ + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "39608:1:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39611:1:23", + "type": "", + "value": "2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "39604:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "39604:9:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39579:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "39579:35:23" + }, + "nodeType": "YulExpressionStatement", + "src": "39579:35:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "39638:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39644:5:23", + "type": "", + "value": "0x180" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39634:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "39634:16:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "39652:1:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39627:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "39627:27:23" + }, + "nodeType": "YulExpressionStatement", + "src": "39627:27:23" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "39667:86:23", + "value": { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nodeType": "YulIdentifier", + "src": "39693:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "39693:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39700:4:23", + "type": "", + "value": "0x05" + }, + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "39710:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39716:5:23", + "type": "", + "value": "0x0e0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39706:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "39706:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39724:4:23", + "type": "", + "value": "0xc0" + }, + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "39734:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39740:5:23", + "type": "", + "value": "0x280" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39730:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "39730:16:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39748:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "staticcall", + "nodeType": "YulIdentifier", + "src": "39682:10:23" + }, + "nodeType": "YulFunctionCall", + "src": "39682:71:23" + }, + "variables": [ + { + "name": "success", + "nodeType": "YulTypedName", + "src": "39671:7:23", + "type": "" + } + ] + }, + { + "cases": [ + { + "body": { + "nodeType": "YulBlock", + "src": "39788:16:23", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39797:1:23", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39800:1:23", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "39790:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "39790:12:23" + }, + "nodeType": "YulExpressionStatement", + "src": "39790:12:23" + } + ] + }, + "nodeType": "YulCase", + "src": "39781:23:23", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39786:1:23", + "type": "", + "value": "0" + } + } + ], + "expression": { + "name": "success", + "nodeType": "YulIdentifier", + "src": "39773:7:23" + }, + "nodeType": "YulSwitch", + "src": "39766:38:23" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "39930:340:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "39948:22:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39961:1:23", + "type": "", + "value": "7" + }, + { + "name": "index", + "nodeType": "YulIdentifier", + "src": "39964:5:23" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "39957:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "39957:13:23" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "39952:1:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "39987:43:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "inputs", + "nodeType": "YulIdentifier", + "src": "40008:6:23" + }, + { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "40020:1:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40023:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "40016:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40016:12:23" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40004:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40004:25:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39998:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "39998:32:23" + }, + "variables": [ + { + "name": "a_i", + "nodeType": "YulTypedName", + "src": "39991:3:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "40047:38:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40065:5:23", + "type": "", + "value": "0x1a0" + }, + { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "40076:1:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40079:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "40072:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40072:12:23" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40061:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40061:24:23" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "40051:6:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "40102:42:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "40130:4:23" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "40136:6:23" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40126:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40126:17:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "40120:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "40120:24:23" + }, + "variables": [ + { + "name": "t_i_plus_1", + "nodeType": "YulTypedName", + "src": "40106:10:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "40161:37:23", + "value": { + "arguments": [ + { + "name": "a_i", + "nodeType": "YulIdentifier", + "src": "40179:3:23" + }, + { + "name": "t_i_plus_1", + "nodeType": "YulIdentifier", + "src": "40184:10:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "40196:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "40172:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "40172:26:23" + }, + "variables": [ + { + "name": "t_i", + "nodeType": "YulTypedName", + "src": "40165:3:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "40226:4:23" + }, + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "40236:6:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40244:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "40232:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40232:17:23" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40222:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40222:28:23" + }, + { + "name": "t_i", + "nodeType": "YulIdentifier", + "src": "40252:3:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "40215:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "40215:41:23" + }, + "nodeType": "YulExpressionStatement", + "src": "40215:41:23" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "index", + "nodeType": "YulIdentifier", + "src": "39893:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39900:1:23", + "type": "", + "value": "8" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "39890:2:23" + }, + "nodeType": "YulFunctionCall", + "src": "39890:12:23" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "39903:26:23", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "39905:22:23", + "value": { + "arguments": [ + { + "name": "index", + "nodeType": "YulIdentifier", + "src": "39918:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39925:1:23", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39914:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "39914:13:23" + }, + "variableNames": [ + { + "name": "index", + "nodeType": "YulIdentifier", + "src": "39905:5:23" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "39871:18:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "39873:14:23", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39886:1:23", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "index", + "nodeType": "YulTypedName", + "src": "39877:5:23", + "type": "" + } + ] + } + ] + }, + "src": "39867:403:23" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "40324:122:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "40369:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40375:5:23", + "type": "", + "value": "0x1c0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40365:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40365:16:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "40359:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "40359:23:23" + }, + { + "arguments": [ + { + "name": "inputs", + "nodeType": "YulIdentifier", + "src": "40406:6:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "40400:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "40400:13:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "40431:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "40335:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "40335:111:23" + }, + "variables": [ + { + "name": "c_1", + "nodeType": "YulTypedName", + "src": "40328:3:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "40470:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40476:5:23", + "type": "", + "value": "0x2a0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40466:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40466:16:23" + }, + { + "name": "c_1", + "nodeType": "YulIdentifier", + "src": "40484:3:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "40459:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "40459:29:23" + }, + "nodeType": "YulExpressionStatement", + "src": "40459:29:23" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "40599:388:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "40617:25:23", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "40634:1:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40637:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "40630:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40630:12:23" + }, + "variables": [ + { + "name": "offst", + "nodeType": "YulTypedName", + "src": "40621:5:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "40659:32:23", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40678:5:23", + "type": "", + "value": "0x1a0" + }, + { + "name": "offst", + "nodeType": "YulIdentifier", + "src": "40685:5:23" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40674:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40674:17:23" + }, + "variables": [ + { + "name": "t_offst", + "nodeType": "YulTypedName", + "src": "40663:7:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "40708:35:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "40731:1:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40734:1:23", + "type": "", + "value": "2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "40727:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40727:9:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40738:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "40723:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40723:20:23" + }, + "variables": [ + { + "name": "b_offst", + "nodeType": "YulTypedName", + "src": "40712:7:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "40761:36:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "40782:4:23" + }, + { + "name": "t_offst", + "nodeType": "YulIdentifier", + "src": "40788:7:23" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40778:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40778:18:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "40772:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "40772:25:23" + }, + "variables": [ + { + "name": "t_i", + "nodeType": "YulTypedName", + "src": "40765:3:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "40814:44:23", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "40843:4:23" + }, + { + "name": "b_offst", + "nodeType": "YulIdentifier", + "src": "40849:7:23" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40839:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40839:18:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "40833:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "40833:25:23" + }, + "variables": [ + { + "name": "b_i_minus_1", + "nodeType": "YulTypedName", + "src": "40818:11:23", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "40876:38:23", + "value": { + "arguments": [ + { + "name": "t_i", + "nodeType": "YulIdentifier", + "src": "40894:3:23" + }, + { + "name": "b_i_minus_1", + "nodeType": "YulIdentifier", + "src": "40899:11:23" + }, + { + "name": "p", + "nodeType": "YulIdentifier", + "src": "40912:1:23" + } + ], + "functionName": { + "name": "mulmod", + "nodeType": "YulIdentifier", + "src": "40887:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "40887:27:23" + }, + "variables": [ + { + "name": "c_i", + "nodeType": "YulTypedName", + "src": "40880:3:23", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "40943:4:23" + }, + { + "arguments": [ + { + "name": "offst", + "nodeType": "YulIdentifier", + "src": "40953:5:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40960:5:23", + "type": "", + "value": "0x280" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40949:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40949:17:23" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40939:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40939:28:23" + }, + { + "name": "c_i", + "nodeType": "YulIdentifier", + "src": "40969:3:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "40932:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "40932:41:23" + }, + "nodeType": "YulExpressionStatement", + "src": "40932:41:23" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "40574:1:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40577:1:23", + "type": "", + "value": "8" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "40571:2:23" + }, + "nodeType": "YulFunctionCall", + "src": "40571:8:23" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "40580:18:23", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "40582:14:23", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "40591:1:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40594:1:23", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40587:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "40587:9:23" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "40582:1:23" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "40556:14:23", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "40558:10:23", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40567:1:23", + "type": "", + "value": "2" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "40562:1:23", + "type": "" + } + ] + } + ] + }, + "src": "40552:435:23" + }, + { + "expression": { + "arguments": [ + { + "name": "results", + "nodeType": "YulIdentifier", + "src": "41012:7:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "41038:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41044:6:23", + "type": "", + "value": "0x01a0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41034:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "41034:17:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "41028:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "41028:24:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41001:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "41001:52:23" + }, + "nodeType": "YulExpressionStatement", + "src": "41001:52:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "results", + "nodeType": "YulIdentifier", + "src": "41083:7:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41092:4:23", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41079:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "41079:18:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "41109:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41115:6:23", + "type": "", + "value": "0x02a0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41105:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "41105:17:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "41099:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "41099:24:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41072:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "41072:52:23" + }, + "nodeType": "YulExpressionStatement", + "src": "41072:52:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "results", + "nodeType": "YulIdentifier", + "src": "41154:7:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41163:4:23", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41150:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "41150:18:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "41180:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41186:6:23", + "type": "", + "value": "0x02c0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41176:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "41176:17:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "41170:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "41170:24:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41143:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "41143:52:23" + }, + "nodeType": "YulExpressionStatement", + "src": "41143:52:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "results", + "nodeType": "YulIdentifier", + "src": "41225:7:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41234:4:23", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41221:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "41221:18:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "41251:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41257:6:23", + "type": "", + "value": "0x02e0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41247:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "41247:17:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "41241:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "41241:24:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41214:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "41214:52:23" + }, + "nodeType": "YulExpressionStatement", + "src": "41214:52:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "results", + "nodeType": "YulIdentifier", + "src": "41296:7:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41305:4:23", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41292:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "41292:18:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "41322:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41328:6:23", + "type": "", + "value": "0x0300" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41318:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "41318:17:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "41312:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "41312:24:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41285:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "41285:52:23" + }, + "nodeType": "YulExpressionStatement", + "src": "41285:52:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "results", + "nodeType": "YulIdentifier", + "src": "41367:7:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41376:4:23", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41363:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "41363:18:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "41393:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41399:6:23", + "type": "", + "value": "0x0320" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41389:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "41389:17:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "41383:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "41383:24:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41356:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "41356:52:23" + }, + "nodeType": "YulExpressionStatement", + "src": "41356:52:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "results", + "nodeType": "YulIdentifier", + "src": "41438:7:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41447:4:23", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41434:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "41434:18:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "41464:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41470:6:23", + "type": "", + "value": "0x0340" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41460:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "41460:17:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "41454:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "41454:24:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41427:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "41427:52:23" + }, + "nodeType": "YulExpressionStatement", + "src": "41427:52:23" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "results", + "nodeType": "YulIdentifier", + "src": "41509:7:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41518:4:23", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41505:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "41505:18:23" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "mPtr", + "nodeType": "YulIdentifier", + "src": "41535:4:23" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41541:6:23", + "type": "", + "value": "0x0360" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41531:3:23" + }, + "nodeType": "YulFunctionCall", + "src": "41531:17:23" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "41525:5:23" + }, + "nodeType": "YulFunctionCall", + "src": "41525:24:23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41498:6:23" + }, + "nodeType": "YulFunctionCall", + "src": "41498:52:23" + }, + "nodeType": "YulExpressionStatement", + "src": "41498:52:23" + } + ] + }, + "evmVersion": "london", + "externalReferences": [ + { + "declaration": 26714, + "isOffset": false, + "isSlot": false, + "src": "38677:6:23", + "valueSize": 1 + }, + { + "declaration": 26714, + "isOffset": false, + "isSlot": false, + "src": "38718:6:23", + "valueSize": 1 + }, + { + "declaration": 26714, + "isOffset": false, + "isSlot": false, + "src": "38973:6:23", + "valueSize": 1 + }, + { + "declaration": 26714, + "isOffset": false, + "isSlot": false, + "src": "40008:6:23", + "valueSize": 1 + }, + { + "declaration": 26714, + "isOffset": false, + "isSlot": false, + "src": "40406:6:23", + "valueSize": 1 + }, + { + "declaration": 26729, + "isOffset": false, + "isSlot": false, + "src": "38773:1:23", + "valueSize": 1 + }, + { + "declaration": 26729, + "isOffset": false, + "isSlot": false, + "src": "39124:1:23", + "valueSize": 1 + }, + { + "declaration": 26729, + "isOffset": false, + "isSlot": false, + "src": "39608:1:23", + "valueSize": 1 + }, + { + "declaration": 26729, + "isOffset": false, + "isSlot": false, + "src": "39652:1:23", + "valueSize": 1 + }, + { + "declaration": 26729, + "isOffset": false, + "isSlot": false, + "src": "40196:1:23", + "valueSize": 1 + }, + { + "declaration": 26729, + "isOffset": false, + "isSlot": false, + "src": "40431:1:23", + "valueSize": 1 + }, + { + "declaration": 26729, + "isOffset": false, + "isSlot": false, + "src": "40912:1:23", + "valueSize": 1 + }, + { + "declaration": 26726, + "isOffset": false, + "isSlot": false, + "src": "41012:7:23", + "valueSize": 1 + }, + { + "declaration": 26726, + "isOffset": false, + "isSlot": false, + "src": "41083:7:23", + "valueSize": 1 + }, + { + "declaration": 26726, + "isOffset": false, + "isSlot": false, + "src": "41154:7:23", + "valueSize": 1 + }, + { + "declaration": 26726, + "isOffset": false, + "isSlot": false, + "src": "41225:7:23", + "valueSize": 1 + }, + { + "declaration": 26726, + "isOffset": false, + "isSlot": false, + "src": "41296:7:23", + "valueSize": 1 + }, + { + "declaration": 26726, + "isOffset": false, + "isSlot": false, + "src": "41367:7:23", + "valueSize": 1 + }, + { + "declaration": 26726, + "isOffset": false, + "isSlot": false, + "src": "41438:7:23", + "valueSize": 1 + }, + { + "declaration": 26726, + "isOffset": false, + "isSlot": false, + "src": "41509:7:23", + "valueSize": 1 + } + ], + "id": 26733, + "nodeType": "InlineAssembly", + "src": "37179:4387:23" + }, + { + "expression": { + "id": 26734, + "name": "results", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 26726, + "src": "41583:7:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8] memory" + } + }, + "functionReturnParameters": 26720, + "id": 26735, + "nodeType": "Return", + "src": "41576:14:23" + } + ] + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "batchInvert", + "nameLocation": "37001:11:23", + "parameters": { + "id": 26715, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 26714, + "mutability": "mutable", + "name": "inputs", + "nameLocation": "37040:6:23", + "nodeType": "VariableDeclaration", + "scope": 26737, + "src": "37022:24:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8]" + }, + "typeName": { + "baseType": { + "id": 26711, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "37022:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 26713, + "length": { + "hexValue": "38", + "id": 26712, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "37030:1:23", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "nodeType": "ArrayTypeName", + "src": "37022:10:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_storage_ptr", + "typeString": "uint256[8]" + } + }, + "visibility": "internal" + } + ], + "src": "37012:40:23" + }, + "returnParameters": { + "id": 26720, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 26719, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 26737, + "src": "37076:17:23", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_memory_ptr", + "typeString": "uint256[8]" + }, + "typeName": { + "baseType": { + "id": 26716, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "37076:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 26718, + "length": { + "hexValue": "38", + "id": 26717, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "37084:1:23", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "nodeType": "ArrayTypeName", + "src": "37076:10:23", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$8_storage_ptr", + "typeString": "uint256[8]" + } + }, + "visibility": "internal" + } + ], + "src": "37075:19:23" + }, + "scope": 26738, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + } + ], + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 26196, + "name": "BN254", + "nameLocations": [ + "296:5:23" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 24968, + "src": "296:5:23" + }, + "id": 26197, + "nodeType": "InheritanceSpecifier", + "src": "296:5:23" + } + ], + "canonicalName": "Verifier", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "linearizedBaseContracts": [ + 26738, + 24968 + ], + "name": "Verifier", + "nameLocation": "284:8:23", + "scope": 26739, + "usedErrors": [] + } + ], + "license": "MIT" + }, + "id": 23 +} \ No newline at end of file diff --git a/src/contracts/format/proof_for_semacaulk.rs b/src/contracts/format/proof_for_semacaulk.rs index 100ea17..2479735 100644 --- a/src/contracts/format/proof_for_semacaulk.rs +++ b/src/contracts/format/proof_for_semacaulk.rs @@ -4,10 +4,7 @@ use crate::prover::{Commitments as RustCommitments, Openings as RustOpenings, Pr use ark_bn254::{Bn254, G1Affine, G2Affine}; use ethers::prelude::abigen; -abigen!( - SemacaulkContract, - "./src/contracts/out/Semacaulk.sol/Semacaulk.json" -); +abigen!(SemacaulkContract, "./src/contracts/Semacaulk.json"); pub type ProofForSemacaulk = Proof; @@ -44,7 +41,7 @@ pub fn format_commitments(commitments: &RustCommitments) -> Commitments { w_1: g1_affine_to_g1point(&commitments.w1), w_2: g1_affine_to_g1point(&commitments.w2), key: g1_affine_to_g1point(&commitments.key), - c: g1_affine_to_g1point(&commitments.c), + mimc_cts: g1_affine_to_g1point(&commitments.mimc_cts), quotient: g1_affine_to_g1point(&commitments.quotient), u_prime: g1_affine_to_g1point(&commitments.u_prime), zi: g1_affine_to_g1point(&commitments.zi), @@ -60,7 +57,7 @@ pub fn format_commitments(commitments: &RustCommitments) -> Commitments { pub fn format_openings(openings: &RustOpenings) -> Openings { Openings { q_mimc: f_to_u256(openings.q_mimc), - c: f_to_u256(openings.c), + mimc_cts: f_to_u256(openings.mimc_cts), quotient: f_to_u256(openings.quotient), u_prime: f_to_u256(openings.u_prime), p_1: f_to_u256(openings.p1), diff --git a/src/contracts/format/proof_for_verifier.rs b/src/contracts/format/proof_for_verifier.rs index e4ecc5b..0f9cd0e 100644 --- a/src/contracts/format/proof_for_verifier.rs +++ b/src/contracts/format/proof_for_verifier.rs @@ -4,7 +4,7 @@ use crate::prover::{Commitments as RustCommitments, Openings as RustOpenings, Pr use ark_bn254::{Bn254, G1Affine, G2Affine}; use ethers::prelude::abigen; -abigen!(Verifier, "./src/contracts/out/Verifier.sol/Verifier.json"); +abigen!(Verifier, "./src/contracts/Verifier.json"); pub type ProofForVerifier = Proof; @@ -41,7 +41,7 @@ pub fn format_commitments(commitments: &RustCommitments) -> Commitments { w_1: g1_affine_to_g1point(&commitments.w1), w_2: g1_affine_to_g1point(&commitments.w2), key: g1_affine_to_g1point(&commitments.key), - c: g1_affine_to_g1point(&commitments.c), + mimc_cts: g1_affine_to_g1point(&commitments.mimc_cts), quotient: g1_affine_to_g1point(&commitments.quotient), u_prime: g1_affine_to_g1point(&commitments.u_prime), zi: g1_affine_to_g1point(&commitments.zi), @@ -57,7 +57,7 @@ pub fn format_commitments(commitments: &RustCommitments) -> Commitments { pub fn format_openings(openings: &RustOpenings) -> Openings { Openings { q_mimc: f_to_u256(openings.q_mimc), - c: f_to_u256(openings.c), + mimc_cts: f_to_u256(openings.mimc_cts), quotient: f_to_u256(openings.quotient), u_prime: f_to_u256(openings.u_prime), p_1: f_to_u256(openings.p1), diff --git a/src/contracts/sol/Constants.sol b/src/contracts/sol/Constants.sol index de8ee93..1521f1c 100644 --- a/src/contracts/sol/Constants.sol +++ b/src/contracts/sol/Constants.sol @@ -13,7 +13,11 @@ library Constants { // Compute this value with Fr::from(128).inverse().unwrap() uint256 constant DOMAIN_SIZE_INV = 0x300385D5FB6F3CE964DFA52B147E55AC6DE38077E8C5FDB0215A31A8C8200001; uint256 constant LOG2_DOMAIN_SIZE = 7; + + // The 1st root of unity (counting from 0) of the subgroup domain. uint256 constant OMEGA = 0x16E73DFDAD310991DF5CE19CE85943E01DCB5564B6F24C799D0E470CBA9D1811; + + // The nth root of unity (counting from 0) of the subgroup domain. uint256 constant OMEGA_N = 0x1332CB377D53B9C681AFA4DC09F66BC37E3F2F33DEB33D9B40BD245C971B2447; // These values should be replaced with new ones from a trusted setup. @@ -25,43 +29,32 @@ library Constants { // Using the Hermez Network phase 1 SRS (the 54th contribution of Perpetual // Powers of Tau plus a random beacon) + // For a table size of 2 ^ 10: + uint256 constant SRS_G1_T_X = 0x17A40BF6B2A82570FED3BEDB71E3DDF36680B431FFB3641FEC94F5478D34DCCC; + uint256 constant SRS_G1_T_Y = 0x050852202323C504AAB1AE596553781B3DC87CC6793D731D054C7D751E82AF0A; + // For a table size of 2 ^ 11: - uint256 constant SRS_G1_T_X = 0x195B22E5A84C5D5A70E8FAEA64DB9BFE8EB57577CFEB3A7798F5470C60B99BED; - uint256 constant SRS_G1_T_Y = 0x15D250AF555DC3DBF386C1BBDD00D9AB2B6908120041BC75F496A6FBE051A494; - uint256 constant SRS_G2_1_X_0 = 0x26186A2D65EE4D2F9C9A5B91F86597D35F192CD120CAF7E935D8443D1938E23D; - uint256 constant SRS_G2_1_X_1 = 0x30441FD1B5D3370482C42152A8899027716989A6996C2535BC9F7FEE8AAEF79E; - uint256 constant SRS_G2_1_Y_0 = 0x1970EA81DD6992ADFBC571EFFB03503ADBBB6A857F578403C6C40E22D65B3C02; - uint256 constant SRS_G2_1_Y_1 = 0x054793348F12C0CF5622C340573CB277586319DE359AB9389778F689786B1E48; + //uint256 constant SRS_G1_T_X = 0x195B22E5A84C5D5A70E8FAEA64DB9BFE8EB57577CFEB3A7798F5470C60B99BED; + //uint256 constant SRS_G1_T_Y = 0x15D250AF555DC3DBF386C1BBDD00D9AB2B6908120041BC75F496A6FBE051A494; // For a table size of 2 ** 12: //uint256 constant SRS_G1_T_X = 0x160220880FDFD72FA9C1D4B6477B5AC9BF0310BE9C5C491F3F52EFD8573A2A14; //uint256 constant SRS_G1_T_Y = 0x094E210CAF49A96E4433927B1D17309B7724958FACADE891C041CDC196E4BCB8; - //uint256 constant SRS_G2_1_X_0 = 0x26186A2D65EE4D2F9C9A5B91F86597D35F192CD120CAF7E935D8443D1938E23D; - //uint256 constant SRS_G2_1_X_1 = 0x30441FD1B5D3370482C42152A8899027716989A6996C2535BC9F7FEE8AAEF79E; - //uint256 constant SRS_G2_1_Y_0 = 0x1970EA81DD6992ADFBC571EFFB03503ADBBB6A857F578403C6C40E22D65B3C02; - //uint256 constant SRS_G2_1_Y_1 = 0x054793348F12C0CF5622C340573CB277586319DE359AB9389778F689786B1E48; // For a table size of 2 ** 14: //uint256 constant SRS_G1_T_X = 0x1820CAC999202BEBA571F32647CA77E38AA8AA2C6286857D68CAAA0C8F6EA688; //uint256 constant SRS_G1_T_Y = 0x1F93BBD6833793937E7971F0D99FDC98521C1869870763F17F0730850C476F69; - //uint256 constant SRS_G2_1_X_0 = 0x26186A2D65EE4D2F9C9A5B91F86597D35F192CD120CAF7E935D8443D1938E23D; - //uint256 constant SRS_G2_1_X_1 = 0x30441FD1B5D3370482C42152A8899027716989A6996C2535BC9F7FEE8AAEF79E; - //uint256 constant SRS_G2_1_Y_0 = 0x1970EA81DD6992ADFBC571EFFB03503ADBBB6A857F578403C6C40E22D65B3C02; - //uint256 constant SRS_G2_1_Y_1 = 0x054793348F12C0CF5622C340573CB277586319DE359AB9389778F689786B1E48; // For a table size of 2 ** 16: //uint256 constant SRS_G1_T_X = 0x0E4753DD9EC507F7B9A3DB6069A6686872963B01D260378F4619E3166CA1481A; //uint256 constant SRS_G1_T_Y = 0x08DEAB995B28148852575D6BDB33AE1B5719861E09EC2FA4B6D295A74110BFCF; - //uint256 constant SRS_G2_1_X_0 = 0x26186A2D65EE4D2F9C9A5B91F86597D35F192CD120CAF7E935D8443D1938E23D; - //uint256 constant SRS_G2_1_X_1 = 0x30441FD1B5D3370482C42152A8899027716989A6996C2535BC9F7FEE8AAEF79E; - //uint256 constant SRS_G2_1_Y_0 = 0x1970EA81DD6992ADFBC571EFFB03503ADBBB6A857F578403C6C40E22D65B3C02; - //uint256 constant SRS_G2_1_Y_1 = 0x054793348F12C0CF5622C340573CB277586319DE359AB9389778F689786B1E48; // For a table size of 2 ^ 20: //uint256 constant SRS_G1_T_X = 0x28ECE6AC832172CE0174B269049E9BF74F739090D042E277AFADB9B047937885; //uint256 constant SRS_G1_T_Y = 0x2C408B09EA45E3DC700AD3830D57080CA519AF5EDCABFCEB47EB64E08BB75D79; - //uint256 constant SRS_G2_1_X_0 = 0x26186A2D65EE4D2F9C9A5B91F86597D35F192CD120CAF7E935D8443D1938E23D; - //uint256 constant SRS_G2_1_X_1 = 0x30441FD1B5D3370482C42152A8899027716989A6996C2535BC9F7FEE8AAEF79E; - //uint256 constant SRS_G2_1_Y_0 = 0x1970EA81DD6992ADFBC571EFFB03503ADBBB6A857F578403C6C40E22D65B3C02; - //uint256 constant SRS_G2_1_Y_1 = 0x054793348F12C0CF5622C340573CB277586319DE359AB9389778F689786B1E48; + + uint256 constant SRS_G2_1_X_0 = 0x26186A2D65EE4D2F9C9A5B91F86597D35F192CD120CAF7E935D8443D1938E23D; + uint256 constant SRS_G2_1_X_1 = 0x30441FD1B5D3370482C42152A8899027716989A6996C2535BC9F7FEE8AAEF79E; + uint256 constant SRS_G2_1_Y_0 = 0x1970EA81DD6992ADFBC571EFFB03503ADBBB6A857F578403C6C40E22D65B3C02; + uint256 constant SRS_G2_1_Y_1 = 0x054793348F12C0CF5622C340573CB277586319DE359AB9389778F689786B1E48; } diff --git a/src/contracts/sol/Semacaulk.sol b/src/contracts/sol/Semacaulk.sol index 827e446..2141b20 100644 --- a/src/contracts/sol/Semacaulk.sol +++ b/src/contracts/sol/Semacaulk.sol @@ -30,8 +30,10 @@ contract Semacaulk is KeccakMT, BN254, Verifier { uint256(keccak256(abi.encodePacked('Semacaulk'))) % Constants.PRIME_R; mapping (uint256 => bool) public nullifierHashHistory; + mapping (uint256 => bool) public identityCommitmentHistory; // Custom errors + error InvalidIdentityCommitment(uint256 _identityCommitment); error RootMismatch(bytes32 _generatedRoot); error NullifierHashAlreadySeen(uint256 _nullifierHash); error InvalidProof(); @@ -58,6 +60,13 @@ contract Semacaulk is KeccakMT, BN254, Verifier { uint256 _lagrangeLeafY, bytes32[] memory _lagrangeMerkleProof ) public { + if ( + _identityCommitment > Constants.PRIME_R || + _identityCommitment == NOTHING_UP_MY_SLEEVE_ZERO + ) { + revert InvalidIdentityCommitment({ _identityCommitment: _identityCommitment }); + } + uint256 index = currentIndex; bytes32 lagrangeLeaf = keccak256(abi.encodePacked(_lagrangeLeafX, _lagrangeLeafY)); @@ -92,7 +101,7 @@ contract Semacaulk is KeccakMT, BN254, Verifier { function broadcastSignal( bytes memory _signal, - Types.Proof memory proof, + Types.Proof memory _proof, uint256 _nullifierHash, uint256 _externalNullifier ) public { @@ -109,7 +118,7 @@ contract Semacaulk is KeccakMT, BN254, Verifier { publicInputs[2] = signalHash; // Verify the proof and revert if it is invalid - bool isValid = verify(proof, getAccumulator(), publicInputs); + bool isValid = verify(_proof, getAccumulator(), publicInputs); if (!isValid) { revert InvalidProof(); } diff --git a/src/contracts/sol/Transcript.sol b/src/contracts/sol/Transcript.sol index b132941..0c0a7fc 100644 --- a/src/contracts/sol/Transcript.sol +++ b/src/contracts/sol/Transcript.sol @@ -47,9 +47,10 @@ library TranscriptLibrary { return bytes32(x); } - function updateWithU256(Transcript memory self, uint256 value) internal pure { + function updateWithF(Transcript memory self, uint256 value) internal pure { bytes memory dataPtr = self.data; assembly { + let v := mod(value, PRIME_R) // update length of transcript data let array_length := mload(dataPtr) mstore(dataPtr, add(0x20, array_length)) @@ -71,14 +72,19 @@ library TranscriptLibrary { } } - function round1( + function round0PublicInputs( Transcript memory transcript, - Types.Proof memory proof, uint256[3] memory publicInputs ) internal pure { - updateWithU256(transcript, publicInputs[0]); - updateWithU256(transcript, publicInputs[1]); - updateWithU256(transcript, publicInputs[2]); + updateWithF(transcript, publicInputs[0]); + updateWithF(transcript, publicInputs[1]); + updateWithF(transcript, publicInputs[2]); + } + + function round1( + Transcript memory transcript, + Types.Proof memory proof + ) internal pure { updateWithG1(transcript, proof.commitments.w0); updateWithG1(transcript, proof.commitments.key); updateWithG1(transcript, proof.commitments.w1); @@ -107,23 +113,23 @@ library TranscriptLibrary { Transcript memory transcript, Types.Proof memory proof ) internal pure { - TranscriptLibrary.updateWithU256(transcript, proof.openings.w0_0); - TranscriptLibrary.updateWithU256(transcript, proof.openings.w0_1); - TranscriptLibrary.updateWithU256(transcript, proof.openings.w0_2); - TranscriptLibrary.updateWithU256(transcript, proof.openings.w1_0); - TranscriptLibrary.updateWithU256(transcript, proof.openings.w1_1); - TranscriptLibrary.updateWithU256(transcript, proof.openings.w1_2); - TranscriptLibrary.updateWithU256(transcript, proof.openings.w2_0); - TranscriptLibrary.updateWithU256(transcript, proof.openings.w2_1); - TranscriptLibrary.updateWithU256(transcript, proof.openings.w2_2); - TranscriptLibrary.updateWithU256(transcript, proof.openings.key_0); - TranscriptLibrary.updateWithU256(transcript, proof.openings.key_1); - TranscriptLibrary.updateWithU256(transcript, proof.openings.q_mimc); - TranscriptLibrary.updateWithU256(transcript, proof.openings.c); - TranscriptLibrary.updateWithU256(transcript, proof.openings.quotient); - TranscriptLibrary.updateWithU256(transcript, proof.openings.u_prime); - TranscriptLibrary.updateWithU256(transcript, proof.openings.p1); - TranscriptLibrary.updateWithU256(transcript, proof.openings.p2); + TranscriptLibrary.updateWithF(transcript, proof.openings.w0_0); + TranscriptLibrary.updateWithF(transcript, proof.openings.w0_1); + TranscriptLibrary.updateWithF(transcript, proof.openings.w0_2); + TranscriptLibrary.updateWithF(transcript, proof.openings.w1_0); + TranscriptLibrary.updateWithF(transcript, proof.openings.w1_1); + TranscriptLibrary.updateWithF(transcript, proof.openings.w1_2); + TranscriptLibrary.updateWithF(transcript, proof.openings.w2_0); + TranscriptLibrary.updateWithF(transcript, proof.openings.w2_1); + TranscriptLibrary.updateWithF(transcript, proof.openings.w2_2); + TranscriptLibrary.updateWithF(transcript, proof.openings.key_0); + TranscriptLibrary.updateWithF(transcript, proof.openings.key_1); + TranscriptLibrary.updateWithF(transcript, proof.openings.q_mimc); + TranscriptLibrary.updateWithF(transcript, proof.openings.mimc_cts); + TranscriptLibrary.updateWithF(transcript, proof.openings.quotient); + TranscriptLibrary.updateWithF(transcript, proof.openings.u_prime); + TranscriptLibrary.updateWithF(transcript, proof.openings.p1); + TranscriptLibrary.updateWithF(transcript, proof.openings.p2); } function round5( diff --git a/src/contracts/sol/Types.sol b/src/contracts/sol/Types.sol index 66bcb95..05b0007 100644 --- a/src/contracts/sol/Types.sol +++ b/src/contracts/sol/Types.sol @@ -72,7 +72,7 @@ library Types { /* 0x40 */ Types.G1Point w1; /* 0x80 */ Types.G1Point w2; /* 0xc0 */ Types.G1Point key; - /* 0x100 */ Types.G1Point c; + /* 0x100 */ Types.G1Point mimc_cts; /* 0x140 */ Types.G1Point quotient; /* 0x180 */ Types.G1Point u_prime; /* 0x1c0 */ Types.G1Point zi; @@ -86,7 +86,7 @@ library Types { struct Openings { /* 0x00 */ uint256 q_mimc; - /* 0x20 */ uint256 c; + /* 0x20 */ uint256 mimc_cts; /* 0x40 */ uint256 quotient; /* 0x60 */ uint256 u_prime; /* 0x80 */ uint256 p1; diff --git a/src/contracts/sol/Verifier.sol b/src/contracts/sol/Verifier.sol index 59b2823..fc8eda5 100644 --- a/src/contracts/sol/Verifier.sol +++ b/src/contracts/sol/Verifier.sol @@ -23,7 +23,8 @@ contract Verifier is BN254 { Types.ChallengeTranscript memory challengeTranscript; Types.VerifierTranscript memory verifierTranscript; - TranscriptLibrary.round1(transcript, proof, publicInputs); + TranscriptLibrary.round0PublicInputs(transcript, publicInputs); + TranscriptLibrary.round1(transcript, proof); challengeTranscript.v = TranscriptLibrary.getChallenge(transcript); diff --git a/src/contracts/sol/tests/TestTranscript.sol b/src/contracts/sol/tests/TestTranscript.sol index 0e26ebc..5776701 100644 --- a/src/contracts/sol/tests/TestTranscript.sol +++ b/src/contracts/sol/tests/TestTranscript.sol @@ -13,13 +13,13 @@ contract TestTranscript { ) public pure returns(uint256, uint256) { TranscriptLibrary.Transcript memory transcript = TranscriptLibrary.newTranscript(); - TranscriptLibrary.updateWithU256(transcript, u1); + TranscriptLibrary.updateWithF(transcript, u1); TranscriptLibrary.updateWithG1(transcript, pt1); uint256 challenge_1 = TranscriptLibrary.getChallenge(transcript); - TranscriptLibrary.updateWithU256(transcript, u2); + TranscriptLibrary.updateWithF(transcript, u2); TranscriptLibrary.updateWithG2(transcript, pt2); uint256 challenge_2 = TranscriptLibrary.getChallenge(transcript); diff --git a/src/contracts/tests/mod.rs b/src/contracts/tests/mod.rs index 71e5496..3e0e7b9 100644 --- a/src/contracts/tests/mod.rs +++ b/src/contracts/tests/mod.rs @@ -21,6 +21,9 @@ mod crypto; #[cfg(test)] mod verifier; +#[cfg(test)] +mod transcript; + pub type EthersClient = Arc, Wallet>>; pub async fn setup_eth_backend() -> (AnvilInstance, EthersClient) { diff --git a/src/contracts/tests/semacaulk.rs b/src/contracts/tests/semacaulk.rs index 03b1ee6..0f0d662 100644 --- a/src/contracts/tests/semacaulk.rs +++ b/src/contracts/tests/semacaulk.rs @@ -7,7 +7,7 @@ use crate::layouter::Layouter; use crate::mimc7::init_mimc7; use crate::prover::prover::{Prover, WitnessInput}; use crate::prover::{Proof as SemacaulkProof, ProverPrecomputedData, ProvingKey, PublicData}; -use crate::setup::{load_lagrange_comms_from_file, load_srs_from_hex}; +use crate::setup::setup; use crate::verifier::Verifier as SemacaulkVerifier; use crate::{ bn_solidity_utils::{f_to_u256, u256_to_f}, @@ -26,10 +26,7 @@ use ethers::core::utils::hex; use ethers::middleware::SignerMiddleware; use ethers::providers::Http; -abigen!( - Semacaulk, - "./src/contracts/out/Semacaulk.sol/Semacaulk.json", -); +abigen!(Semacaulk, "./src/contracts/Semacaulk.json"); type SemacaulkContract = semacaulk::Semacaulk< SignerMiddleware< @@ -40,8 +37,8 @@ type SemacaulkContract = semacaulk::Semacaulk< pub async fn deploy_semacaulk( client: EthersClient, - srs_hex_filename: &str, - lagrange_comms_filename: &str, + log_2_table_size: usize, + ptau_filename: &str, ) -> ( SemacaulkContract, Accumulator, @@ -51,18 +48,16 @@ pub async fn deploy_semacaulk( ) { let zero = compute_zero_leaf::(); - // This file is generated by https://github.com/geometryresearch/export-ptau-points - // If you change this file, use `cargo run setup ` - // to regenerate the lagrangeCommsX file. Also remember to update Constants.sol. - let (srs_g1, srs_g2) = load_srs_from_hex(srs_hex_filename); - let lagrange_comms = load_lagrange_comms_from_file(lagrange_comms_filename); + let (pk, lagrange_comms) = setup(log_2_table_size, ptau_filename); + let srs_g1 = pk.srs_g1; + let srs_g2 = pk.srs_g2; let acc = Accumulator::::new(zero, &lagrange_comms); let empty_accumulator_x = f_to_u256::(acc.point.x); let empty_accumulator_y = f_to_u256::(acc.point.y); // Construct the tree of commitments to the Lagrange bases - let tree = compute_lagrange_tree::(&lagrange_comms); + let tree = compute_lagrange_tree::(&lagrange_comms.to_vec()); let root = tree.root(); // Deploy contract @@ -85,9 +80,10 @@ pub async fn test_semacaulk_insert_and_broadcast() { // During development, remember to update Constants.sol's SRS values if you change the table // size! - let table_size = 2048; + let log_2_table_size = 10; + let table_size: usize = 1 << log_2_table_size; - let r = deploy_semacaulk(client, "./11.hex", "./lagrangeComms_11").await; + let r = deploy_semacaulk(client, log_2_table_size, "./11.ptau").await; let semacaulk_contract = r.0; let mut acc = r.1; let srs_g1 = r.2; @@ -185,7 +181,7 @@ pub async fn test_semacaulk_insert_and_broadcast() { let accumulator = commit(&pk.srs_g1, &c).into_affine(); assert_eq!(accumulator, acc.point); - let precomputed = ProverPrecomputedData::index(&pk, &mimc7.cts, index, &c, table_size); + let precomputed = ProverPrecomputedData::index(&pk, &mimc7.cts, &[index], &c, table_size); let witness = WitnessInput { identity_nullifier: identity_nullifiers[index], @@ -274,7 +270,7 @@ fn p_to_p(p: &ProofForSemacaulk) -> Proof { let o = Openings { q_mimc: p.openings.q_mimc, - c: p.openings.c, + mimc_cts: p.openings.mimc_cts, quotient: p.openings.quotient, u_prime: p.openings.u_prime, p_1: p.openings.p_1, @@ -309,9 +305,9 @@ fn p_to_p(p: &ProofForSemacaulk) -> Proof { x: p.commitments.key.x, y: p.commitments.key.y, }, - c: G1Point { - x: p.commitments.c.x, - y: p.commitments.c.y, + mimc_cts: G1Point { + x: p.commitments.mimc_cts.x, + y: p.commitments.mimc_cts.y, }, quotient: G1Point { x: p.commitments.quotient.x, diff --git a/src/contracts/tests/transcript.rs b/src/contracts/tests/transcript.rs index deda880..37cd995 100644 --- a/src/contracts/tests/transcript.rs +++ b/src/contracts/tests/transcript.rs @@ -1,23 +1,9 @@ -use std::ops::Neg; -use ark_poly::{EvaluationDomain, GeneralEvaluationDomain}; -use ark_bn254::{Bn254, Fq12, Fr, G1Affine, G2Affine}; -use ark_ec::AffineCurve; -use ark_ec::PairingEngine; -use ark_ec::ProjectiveCurve; -use ark_ff::BigInteger256; -use ark_ff::Field; -use ark_ff::One; -use ark_ff::Zero; -use ark_ff::{PrimeField, UniformRand}; -use ark_std::test_rng; -use ethers::contract::abigen; -use ethers::types::U256; -use tokio::test; use super::setup_eth_backend; +use crate::bn_solidity_utils::f_to_u256; use crate::transcript::Transcript; -use crate::{ - bn_solidity_utils::{f_to_u256, format_g1, format_g2}, -}; +use ark_bn254::{Fr, G1Affine, G2Affine}; +use ark_ec::AffineCurve; +use ethers::contract::abigen; abigen!( TestTranscript, @@ -46,27 +32,35 @@ pub async fn test_transcript() { let anvil = eth_backend.0; let client = eth_backend.1; - let contract = TestTranscript::deploy(client, ()).unwrap().send().await.unwrap(); + let contract = TestTranscript::deploy(client, ()) + .unwrap() + .send() + .await + .unwrap(); let u1 = Fr::from(100); let u2 = Fr::from(200); let g1 = G1Affine::prime_subgroup_generator(); let g2 = G2Affine::prime_subgroup_generator(); - let (ch_contract_1, ch_contract_2) = contract.test_challenges( - f_to_u256(u1), - f_to_u256(u2), - g1_affine_to_g1point(&g1), - g2_affine_to_g2point(&g2), - ).call().await.unwrap(); + let (ch_contract_1, ch_contract_2) = contract + .test_challenges( + f_to_u256(u1), + f_to_u256(u2), + g1_affine_to_g1point(&g1), + g2_affine_to_g2point(&g2), + ) + .call() + .await + .unwrap(); let mut transcript = Transcript::new_transcript(); - transcript.update_with_u256(u1); + transcript.update_with_f(u1); transcript.update_with_g1(&g1); let challenge_1 = transcript.get_challenge(); - transcript.update_with_u256(u2); + transcript.update_with_f(u2); transcript.update_with_g2(&g2); let challenge_2 = transcript.get_challenge(); diff --git a/src/contracts/tests/verifier.rs b/src/contracts/tests/verifier.rs index b9e44a3..ad60f5e 100644 --- a/src/contracts/tests/verifier.rs +++ b/src/contracts/tests/verifier.rs @@ -1,14 +1,14 @@ use super::setup_eth_backend; use crate::contracts::format::proof_for_verifier::{format_proof, ProofForVerifier}; use crate::prover::prover::{Prover, WitnessInput}; -use crate::setup::load_srs_from_hex; +use crate::setup::setup; use crate::verifier::Verifier as SemacaulkVerifier; use crate::{ bn_solidity_utils::f_to_u256, kzg::commit, layouter::Layouter, mimc7::init_mimc7, - prover::{ProverPrecomputedData, ProvingKey, PublicData}, + prover::{ProverPrecomputedData, PublicData}, }; use ark_bn254::{Bn254, Fr}; use ark_ec::ProjectiveCurve; @@ -29,7 +29,8 @@ abigen!( pub async fn test_semacaulk_verifier() { let mut rng = test_rng(); - let table_size: usize = 2048; + let log_2_table_size = 11; + let table_size: usize = 1 << log_2_table_size; let domain = GeneralEvaluationDomain::::new(table_size).unwrap(); let mimc7 = init_mimc7::(); @@ -57,13 +58,9 @@ pub async fn test_semacaulk_verifier() { identity_commitments[index] = identity_commitment; let c = DensePolynomial::from_coefficients_slice(&domain.ifft(&identity_commitments)); - let (srs_g1, srs_g2) = load_srs_from_hex("./11.hex"); - let pk = ProvingKey:: { - srs_g1, - srs_g2: srs_g2.clone(), - }; + let (pk, _) = setup(log_2_table_size, "./11.ptau"); - let precomputed = ProverPrecomputedData::index(&pk, &mimc7.cts, index, &c, table_size); + let precomputed = ProverPrecomputedData::index(&pk, &mimc7.cts, &[index], &c, table_size); let witness = WitnessInput { identity_nullifier, @@ -79,8 +76,6 @@ pub async fn test_semacaulk_verifier() { nullifier_hash, signal_hash, }; - //println!("{}", pk.srs_g1[table_size].clone()); - //println!("{}", srs_g2[1].clone()); let proof = Prover::prove( &pk, @@ -95,7 +90,7 @@ pub async fn test_semacaulk_verifier() { let is_valid = SemacaulkVerifier::verify( &proof, pk.srs_g1[table_size], - srs_g2[1], + pk.srs_g2[1], accumulator, &public_input, ); @@ -157,7 +152,7 @@ fn p_to_p(p: &ProofForVerifier) -> Proof { let o = Openings { q_mimc: p.openings.q_mimc, - c: p.openings.c, + mimc_cts: p.openings.mimc_cts, quotient: p.openings.quotient, u_prime: p.openings.u_prime, p_1: p.openings.p_1, @@ -192,9 +187,9 @@ fn p_to_p(p: &ProofForVerifier) -> Proof { x: p.commitments.key.x, y: p.commitments.key.y, }, - c: G1Point { - x: p.commitments.c.x, - y: p.commitments.c.y, + mimc_cts: G1Point { + x: p.commitments.mimc_cts.x, + y: p.commitments.mimc_cts.y, }, quotient: G1Point { x: p.commitments.quotient.x, diff --git a/src/demo/main.rs b/src/demo/main.rs index baa84e2..dfdae58 100644 --- a/src/demo/main.rs +++ b/src/demo/main.rs @@ -7,10 +7,6 @@ use ark_std::{test_rng, Zero}; use ethers::contract::abigen; use ethers::middleware::SignerMiddleware; use ethers::providers::Http; -use std::env; -use stopwatch::Stopwatch; -//use ark_ec::ProjectiveCurve; -//use semacaulk::kzg::commit; use semacaulk::accumulator::{compute_lagrange_tree, compute_zero_leaf, Accumulator}; use semacaulk::contracts::compute_signal_hash; use semacaulk::contracts::format::proof_for_semacaulk::{format_proof, ProofForSemacaulk}; @@ -19,17 +15,16 @@ use semacaulk::layouter::Layouter; use semacaulk::mimc7::init_mimc7; use semacaulk::prover::prover::{Prover, WitnessInput}; use semacaulk::prover::{Proof as SemacaulkProof, ProverPrecomputedData, ProvingKey, PublicData}; -use semacaulk::setup::{load_lagrange_comms_from_file, load_srs_from_hex}; +use semacaulk::setup::setup; use semacaulk::verifier::Verifier as SemacaulkVerifier; use semacaulk::{ bn_solidity_utils::{f_to_u256, u256_to_f}, keccak_tree::{flatten_proof, KeccakTree}, }; +use std::env; +use stopwatch::Stopwatch; -abigen!( - SemacaulkContract, - "./src/contracts/out/Semacaulk.sol/Semacaulk.json", -); +abigen!(SemacaulkContract, "./src/contracts/Semacaulk.json"); type SemacaulkContract = semacaulk_contract::SemacaulkContract< SignerMiddleware< @@ -40,8 +35,8 @@ type SemacaulkContract = semacaulk_contract::SemacaulkContract< pub async fn deploy_semacaulk( client: EthersClient, - srs_hex_filename: &str, - lagrange_comms_filename: &str, + log_2_table_size: usize, + ptau_filename: &str, ) -> ( SemacaulkContract, Accumulator, @@ -54,15 +49,11 @@ pub async fn deploy_semacaulk( // This file is generated by https://github.com/geometryresearch/export-ptau-points // If you change this file, use `cargo run setup ` to regenerate the lagrangeCommsX file. Also remember to update Constants.sol. let sw = Stopwatch::start_new(); - let (srs_g1, srs_g2) = load_srs_from_hex(srs_hex_filename); - println!("\tload_srs_from_hex() took {}ms", sw.elapsed_ms()); + let (pk, lagrange_comms) = setup(log_2_table_size, ptau_filename); + let srs_g1 = pk.srs_g1; + let srs_g2 = pk.srs_g2; - let sw = Stopwatch::start_new(); - let lagrange_comms = load_lagrange_comms_from_file(lagrange_comms_filename); - println!( - "\tload_lagrange_comms_from_file() took {}ms", - sw.elapsed_ms() - ); + println!("\tsetup() took {}ms", sw.elapsed_ms()); let acc = Accumulator::::new(zero, &lagrange_comms); let empty_accumulator_x = f_to_u256::(acc.point.x); @@ -87,16 +78,19 @@ pub async fn deploy_semacaulk( #[tokio::main] async fn main() { - // demo + let args: Vec = env::args().collect(); + if args.len() < 2 { + println!("Usage: demo "); + return; + } + // demo let _ = 1; // Change this value between builds to force the compiler to rebuild the binary properly let sw = Stopwatch::start_new(); println!("Started"); - let args: Vec = env::args().collect(); - assert!(args.len() > 3); - let log_2_table_size = &args[args.len() - 3]; - let srs_hex_filename = &args[args.len() - 2]; - let lagrange_comms_filename = &args[args.len() - 1]; + assert!(args.len() > 2); + let log_2_table_size = &args[args.len() - 2]; + let ptau_filename = &args[args.len() - 1]; let log_2_table_size: usize = log_2_table_size.parse().unwrap(); let table_size = 2u64.pow(log_2_table_size as u32) as usize; @@ -108,7 +102,7 @@ async fn main() { let mut rng = test_rng(); let mimc7 = init_mimc7::(); - let r = deploy_semacaulk(client, srs_hex_filename, lagrange_comms_filename).await; + let r = deploy_semacaulk(client, log_2_table_size, ptau_filename).await; println!("deploy_semacaulk() took {}ms", sw.elapsed_ms()); let semacaulk_contract = r.0; let mut acc = r.1; @@ -141,7 +135,6 @@ async fn main() { identity_nullifiers.push(identity_nullifier); identity_trapdoors.push(identity_trapdoor); - //identity_commitments.push(new_leaf); identity_commitments[index] = new_leaf; // Insert the leaf on chain @@ -169,7 +162,7 @@ async fn main() { }; let mut rng = test_rng(); - let index = 1; + let index = 0; let nullifier_hash = mimc7.multi_hash( &[identity_nullifiers[index], external_nullifier], Fr::zero(), @@ -187,7 +180,7 @@ async fn main() { let c = DensePolynomial::from_coefficients_slice(&domain.ifft(&identity_commitments)); let sw = Stopwatch::start_new(); - let precomputed = ProverPrecomputedData::index(&pk, &mimc7.cts, index, &c, table_size); + let precomputed = ProverPrecomputedData::index(&pk, &mimc7.cts, &[index], &c, table_size); println!("Precomputation took {}ms", sw.elapsed_ms()); let sw = Stopwatch::start_new(); @@ -269,7 +262,7 @@ fn p_to_p(p: &ProofForSemacaulk) -> Proof { let o = Openings { q_mimc: p.openings.q_mimc, - c: p.openings.c, + mimc_cts: p.openings.mimc_cts, quotient: p.openings.quotient, u_prime: p.openings.u_prime, p_1: p.openings.p_1, @@ -304,9 +297,9 @@ fn p_to_p(p: &ProofForSemacaulk) -> Proof { x: p.commitments.key.x, y: p.commitments.key.y, }, - c: G1Point { - x: p.commitments.c.x, - y: p.commitments.c.y, + mimc_cts: G1Point { + x: p.commitments.mimc_cts.x, + y: p.commitments.mimc_cts.y, }, quotient: G1Point { x: p.commitments.quotient.x, diff --git a/src/gates/mod.rs b/src/gates/mod.rs index a87732f..c4ff608 100644 --- a/src/gates/mod.rs +++ b/src/gates/mod.rs @@ -25,11 +25,11 @@ impl Mimc7RoundGate { } } -pub struct KeyEquality { +pub struct KeyEqualityGate { _f: PhantomData, } -impl KeyEquality { +impl KeyEqualityGate { pub fn compute_in_coset(omega_i: usize, key: &[F], q_mimc: &[F]) -> F { let key_next = positive_rotation_in_coset(key, omega_i, 1, EXTENDED_DOMAIN_FACTOR); q_mimc[omega_i] * (key[omega_i] - key_next) @@ -52,11 +52,11 @@ impl KeyCopyGate { } } -pub struct NullifierGate { +pub struct NullifierHashGate { _f: PhantomData, } -impl NullifierGate { +impl NullifierHashGate { pub fn compute_in_coset( omega_i: usize, nullifier_external: &[F], // rename to w2? diff --git a/src/layouter/mod.rs b/src/layouter/mod.rs index 5143ad6..4ff2f51 100644 --- a/src/layouter/mod.rs +++ b/src/layouter/mod.rs @@ -77,7 +77,7 @@ impl Layouter { Self::blind(&mut identity_commitment_col, rng); //--------------------------------------------------------------------- - // Assign the nullifier_external column + // Assign the external_nullifier column let mut external_nullifier_col = Vec::::with_capacity(SUBGROUP_SIZE); external_nullifier_col.push(external_nullifier); @@ -141,7 +141,7 @@ mod layouter_tests { let nullifier = mimc7.hash(identity_nullifier, Fr::zero()); let identity_commitment = mimc7.multi_hash(&[identity_nullifier, identity_trapdoor], Fr::zero()); - let nullifier_external = + let nullifier_hash = mimc7.multi_hash(&[identity_nullifier, external_nullifier], Fr::zero()); let assignment = Layouter::assign( @@ -197,7 +197,7 @@ mod layouter_tests { // Check that the public nullifier is calculated correctly assert_eq!( - nullifier_external, + nullifier_hash, assignment.external_nullifier[n_rounds] + external_nullifier + Fr::from(2u64) * assignment.key[0] diff --git a/src/mimc7.rs b/src/mimc7.rs index 9cc4f5b..102a590 100644 --- a/src/mimc7.rs +++ b/src/mimc7.rs @@ -53,15 +53,34 @@ impl Mimc7 { r } + pub fn multi_hash_two(&self, arr: &[F], key: F) -> F { + assert_eq!(arr.len(), 2); + let mut r = key; + let h0 = self.hash(arr[0], r); // n round functions, then add key + r += arr[0] + h0; + let h1 = self.hash(arr[1], r); // n round functions, then add arr[0] + h0 + r += arr[1] + h1; + r + } + pub fn hash(&self, x: F, k: F) -> F { - let seven = [7u64, 0, 0, 0]; - let mut round_digest = (x + k).pow(seven); + //let seven = [7u64, 0, 0, 0]; + //let mut round_digest = (x + k).pow(seven); + //for i in 1..self.n_rounds { + //round_digest = (round_digest + self.cts[i] + k).pow(seven); + //} + let mut round_digest = self.round_function(0, x, k); for i in 1..self.n_rounds { - round_digest = (round_digest + self.cts[i] + k).pow(seven); + round_digest = self.round_function(i, round_digest, k); } round_digest + k } + fn round_function(&self, i: usize, digest: F, k: F) -> F { + let seven = [7u64, 0, 0, 0]; + (digest + self.cts[i] + k).pow(seven) + } + fn initialize_constants(seed: &str, n_rounds: usize) -> Vec { let mut cts = Vec::::with_capacity(n_rounds); cts.push(F::zero()); @@ -130,5 +149,8 @@ mod mimc7_tests { "5233261170300319370386085858846328736737478911451874673953613863492170606314" ) ); + + let hash2 = mimc7.multi_hash_two(&[F::from(1), F::from(2)], F::from(0)); + assert_eq!(hash, hash2); } } diff --git a/src/multiopen/prover.rs b/src/multiopen/prover.rs index d4aab4d..7f58141 100644 --- a/src/multiopen/prover.rs +++ b/src/multiopen/prover.rs @@ -24,14 +24,14 @@ impl Prover { w2: &DensePolynomial, key: &DensePolynomial, q_mimc: &DensePolynomial, - c: &DensePolynomial, + mimc_cts: &DensePolynomial, quotient: &DensePolynomial, // caulk+ related polys u_prime: &DensePolynomial, p1: &DensePolynomial, p2: &DensePolynomial, // proof specific information - v: Fr, + u_prime_opening: Fr, alpha: Fr, omega_alpha: Fr, omega_n_alpha: Fr, @@ -50,7 +50,7 @@ impl Prover { // define qi-s let q1 = p1.clone(); let q2 = q_mimc - + &(c * x1_powers[0]) + + &(mimc_cts * x1_powers[0]) + (quotient * x1_powers[1]) + (u_prime * x1_powers[2]) + (p2 * x1_powers[3]); @@ -58,7 +58,7 @@ impl Prover { let q4 = w0 + &(w1 * x1_powers[0]) + (w2 * x1_powers[1]); // prepare vanishing polys - let z1 = DensePolynomial::from_coefficients_slice(&[-v, Fr::one()]); + let z1 = DensePolynomial::from_coefficients_slice(&[-u_prime_opening, Fr::one()]); let z2 = DensePolynomial::from_coefficients_slice(&[-alpha, Fr::one()]); let z3 = &z2 * &DensePolynomial::from_coefficients_slice(&[-omega_alpha, Fr::one()]); let z4 = &z3 * &DensePolynomial::from_coefficients_slice(&[-omega_n_alpha, Fr::one()]); diff --git a/src/multiopen/verifier.rs b/src/multiopen/verifier.rs index 822e806..9906519 100644 --- a/src/multiopen/verifier.rs +++ b/src/multiopen/verifier.rs @@ -157,9 +157,7 @@ impl Verifier { .take(4) .collect(); - /* BEGIN: construct qi-s */ - - //q1 + // q1 let q1 = *p1; let q1_eval = p1_opening; @@ -195,8 +193,6 @@ impl Verifier { w0_openings[2] + x1_powers[0] * w1_openings[2] + x1_powers[1] * w2_openings[2]; let q4_evals = [q4_at_alpha, q4_at_omega_alpha, q4_at_omega_n_alpha]; - /* END: construct qi-s */ - let (f1, f2, f3, f4) = Self::evaluate_fs( q1_eval, proof.q1_opening, diff --git a/src/prover/mod.rs b/src/prover/mod.rs index 3f51671..4b4dc61 100644 --- a/src/prover/mod.rs +++ b/src/prover/mod.rs @@ -17,19 +17,19 @@ pub mod precomputed; #[allow(clippy::module_inception)] pub mod prover; -use crate::prover::precomputed::Precomputed; +use crate::prover::precomputed::CaulkPlusPrecomputed; #[derive(CanonicalSerialize, CanonicalDeserialize, Clone, Debug)] pub struct Proof { pub(crate) multiopen_proof: MultiopenProof, - pub(crate) openings: Openings, + pub openings: Openings, pub(crate) commitments: Commitments, } #[derive(CanonicalSerialize, CanonicalDeserialize, Clone, Debug)] pub struct Openings { - pub(crate) q_mimc: E::Fr, - pub(crate) c: E::Fr, + pub q_mimc: E::Fr, + pub(crate) mimc_cts: E::Fr, pub(crate) quotient: E::Fr, pub(crate) u_prime: E::Fr, pub(crate) p1: E::Fr, @@ -53,7 +53,7 @@ pub struct Commitments { pub(crate) w1: E::G1Affine, pub(crate) w2: E::G1Affine, pub(crate) key: E::G1Affine, - pub(crate) c: E::G1Affine, + pub(crate) mimc_cts: E::G1Affine, pub(crate) quotient: E::G1Affine, pub(crate) u_prime: E::G1Affine, pub(crate) zi: E::G1Affine, @@ -67,23 +67,32 @@ pub struct Commitments { #[derive(CanonicalSerialize, CanonicalDeserialize, Clone, Debug)] pub struct ProverPrecomputedData { - pub(crate) c: DensePolynomial, // mimc round constants poly - pub(crate) c_coset_evals: Vec, // evaluations of mimc round constants over coset + pub(crate) mimc_cts: DensePolynomial, // mimc round constants poly + pub(crate) mimc_cts_coset_evals: Vec, // evaluations of mimc round constants over coset pub(crate) zh_inverse_coset_evals: Vec, // evaluations of vanishing poly over coset pub(crate) q_mimc: DensePolynomial, pub(crate) q_mimc_coset_evals: Vec, pub(crate) l0_coset_evals: Vec, - pub(crate) caulk_plus_precomputed: Precomputed, + pub caulk_plus_precomputed: CaulkPlusPrecomputed, } impl ProverPrecomputedData { + /// Precompute everything (both fixed data, W1, and W2) pub fn index( pk: &ProvingKey, mimc_round_constants: &Vec, - index: usize, + indices: &[usize], c: &DensePolynomial, table_size: usize, ) -> Self { + let mut p = ProverPrecomputedData::precompute_fixed(mimc_round_constants); + p.precompute_w1(pk, indices, c, table_size); + p.precompute_w2(pk, indices, table_size); + p + } + + /// Precompute only fixed data + pub fn precompute_fixed(mimc_round_constants: &Vec) -> Self { let domain = GeneralEvaluationDomain::::new(SUBGROUP_SIZE).unwrap(); let extended_coset_domain = GeneralEvaluationDomain::::new(EXTENDED_DOMAIN_FACTOR * SUBGROUP_SIZE).unwrap(); @@ -93,16 +102,24 @@ impl ProverPrecomputedData { compute_vanishing_poly_over_coset(extended_coset_domain, domain.size() as u64); ark_ff::batch_inversion(&mut zh_inverse_coset_evals); - // Compute c coset evals + // Compute mimc_cts coset evals assert_eq!(mimc_round_constants.len(), NUMBER_OF_MIMC_ROUNDS); - let mut c_evals = mimc_round_constants[..].to_vec(); + let mut mimc_cts_evals = mimc_round_constants[..].to_vec(); let mut to_append: Vec = iter::repeat(E::Fr::from(DUMMY_VALUE)) - .take(SUBGROUP_SIZE - c_evals.len()) + .take(SUBGROUP_SIZE - mimc_cts_evals.len()) .collect(); - c_evals.append(&mut to_append); + mimc_cts_evals.append(&mut to_append); - let c_poly = DensePolynomial::from_coefficients_slice(&domain.ifft(&c_evals)); - let c_coset_evals = extended_coset_domain.coset_fft(&c_poly); + // A polynomial over the multiplicative subgroup which evaluates to the MiMC7 round + // constants at each root of unity. The subgroup size is the number of MiMC7 rounds. + let mimc_cts_poly = DensePolynomial::from_coefficients_slice(&domain.ifft(&mimc_cts_evals)); + + // We first compute a polynomial which evaluates, at each root of unity in the subgroup + // domain, to a vector (of the size of the subgroup) consisting of the evaluations of the + // MiMC7 round constants, padded by dummy values. Next, we perform an FFT over the coset of + // the extended domain on the coefficients of this polynomial to obtain + // \\(\mathsf{mimc\\_cts\\_coset\\_evals}\\). + let mimc_cts_coset_evals = extended_coset_domain.coset_fft(&mimc_cts_poly); // Compute q_mimc coset evals let mut q_mimc_evals: Vec = iter::repeat(E::Fr::one()) @@ -113,6 +130,8 @@ impl ProverPrecomputedData { .collect(); q_mimc_evals.append(&mut zeroes); + // A polynomial whose evaluations at the roots of unity over the subgroup domain of size + // 128 are 91 `1` values, followed by zeroes. It represents the q_mimc selector column. let q_mimc = DensePolynomial::from_coefficients_slice(&domain.ifft(&q_mimc_evals)); let q_mimc_coset_evals = extended_coset_domain.coset_fft(&q_mimc); @@ -124,21 +143,44 @@ impl ProverPrecomputedData { let l0_coset_evals = extended_coset_domain.coset_fft(&l0); // Precompute w1 & w2 for the Caulk+ part of the proof - let domain_t = GeneralEvaluationDomain::new(table_size).unwrap(); - let mut precomputed = Precomputed::::empty(); - precomputed.precompute_w1(&pk.srs_g2, &[index], c, &domain_t); - precomputed.precompute_w2(&pk.srs_g2, &[index], &domain_t); + //let domain_t = GeneralEvaluationDomain::new(table_size).unwrap(); + let caulk_plus_precomputed = CaulkPlusPrecomputed::::empty(); Self { - c: c_poly, - c_coset_evals, + mimc_cts: mimc_cts_poly, + mimc_cts_coset_evals, zh_inverse_coset_evals, q_mimc, q_mimc_coset_evals, l0_coset_evals, - caulk_plus_precomputed: precomputed, + caulk_plus_precomputed, } } + + /// Update one W1 commitment + pub fn update_w1(&mut self, index: usize, new_w1: E::G2Affine) { + self.caulk_plus_precomputed.w1_mapping.insert(index, new_w1); + } + + /// Precompute the W1 commitments + pub fn precompute_w1( + &mut self, + pk: &ProvingKey, + indices: &[usize], + c: &DensePolynomial, + table_size: usize, + ) { + let domain_t = GeneralEvaluationDomain::new(table_size).unwrap(); + self.caulk_plus_precomputed + .precompute_w1(&pk.srs_g2, indices, c, &domain_t); + } + + /// Precompute the W2 commitments + pub fn precompute_w2(&mut self, pk: &ProvingKey, indices: &[usize], table_size: usize) { + let domain_t = GeneralEvaluationDomain::new(table_size).unwrap(); + self.caulk_plus_precomputed + .precompute_w2(&pk.srs_g2, indices, &domain_t); + } } pub struct ProvingKey { diff --git a/src/prover/precomputed.rs b/src/prover/precomputed.rs index 481da07..f5b8b86 100644 --- a/src/prover/precomputed.rs +++ b/src/prover/precomputed.rs @@ -17,18 +17,19 @@ use crate::kzg::commit; so we optimize precomputed data needed to store */ #[derive(CanonicalSerialize, CanonicalDeserialize, Clone, Debug)] -pub struct Precomputed { - w1_mapping: BTreeMap, - w2_mapping: BTreeMap, +pub struct CaulkPlusPrecomputed { + pub(crate) w1_mapping: BTreeMap, + pub(crate) w2_mapping: BTreeMap, } -impl Precomputed { +impl CaulkPlusPrecomputed { pub fn empty() -> Self { Self { w1_mapping: BTreeMap::default(), w2_mapping: BTreeMap::default(), } } + pub fn get_w1_i(&self, index: &usize) -> E::G2Affine { match self.w1_mapping.get(index) { Some(element) => *element, @@ -50,12 +51,16 @@ impl Precomputed { c: &DensePolynomial, domain: &GeneralEvaluationDomain, ) { + // As defined in the [Caulk+ paper, section 3](https://eprint.iacr.org/2022/957.pdf). for index in indices { let w_i = domain.element(*index); let mut num = c.clone(); num[0] -= c.evaluate(&w_i); + // denom = (X - w_i) let denom = DensePolynomial::from_coefficients_slice(&[-w_i, E::Fr::one()]); + + // w1_i = (C - c_i) / (X - w_i) let w1_i = &num / &denom; let w1_i = commit(srs, &w1_i); self.w1_mapping.insert(*index, w1_i.into()); @@ -68,6 +73,7 @@ impl Precomputed { indices: &[usize], domain: &GeneralEvaluationDomain, ) { + // As defined in the [Caulk+ paper, section 3](https://eprint.iacr.org/2022/957.pdf). let zh: DensePolynomial<_> = domain.vanishing_polynomial().into(); for index in indices { let w2_i = &zh @@ -94,9 +100,9 @@ mod precomputed_test { use rand::rngs::StdRng; use crate::kzg::{commit, unsafe_setup}; - use crate::utils::construct_lagrange_basis; + use crate::utils::construct_lagrange_basis_polys; - use super::Precomputed; + use super::CaulkPlusPrecomputed; // TODO: make this as a macro fn to_field(evals: &[u64]) -> Vec { @@ -105,7 +111,7 @@ mod precomputed_test { // zH = w2 * zI fn compute_w2( - precomputed: &Precomputed, + precomputed: &CaulkPlusPrecomputed, indices: &[usize], domain: &GeneralEvaluationDomain, ) -> E::G2Affine { @@ -129,7 +135,7 @@ mod precomputed_test { // C - cI = zH * w1 fn compute_w1( - precomputed: &Precomputed, + precomputed: &CaulkPlusPrecomputed, indices: &[usize], domain: &GeneralEvaluationDomain, ) -> E::G2Affine { @@ -164,7 +170,7 @@ mod precomputed_test { let indices = [1, 3, 4, 5, 7]; - let mut precomputed = Precomputed::::empty(); + let mut precomputed = CaulkPlusPrecomputed::::empty(); precomputed.precompute_w2(&srs_g2, &indices, &domain); @@ -191,7 +197,7 @@ mod precomputed_test { let indices = [1, 3, 4, 5, 7]; let elems: Vec<_> = indices.iter().map(|&i| domain.element(i)).collect(); - let t_bases = construct_lagrange_basis(&elems); + let t_bases = construct_lagrange_basis_polys(&elems); let c_evals = [12391, 3219031, 32131, 412331, 31231, 3213, 938532, 49802342]; let c_evals = to_field::(&c_evals); @@ -216,7 +222,7 @@ mod precomputed_test { let c_commitment = commit(&srs_g1, &c); let ci_commitment = commit(&srs_g1, &ci); - let mut precomputed = Precomputed::::empty(); + let mut precomputed = CaulkPlusPrecomputed::::empty(); precomputed.precompute_w1(&srs_g2, &indices, &c, &domain); @@ -249,7 +255,7 @@ mod precomputed_test { let indices = [1, 3, 4, 5, 7]; let elems: Vec<_> = indices.iter().map(|&i| domain.element(i)).collect(); - let t_bases = construct_lagrange_basis(&elems); + let t_bases = construct_lagrange_basis_polys(&elems); let c_evals = [12391, 3219031, 32131, 412331, 31231, 3213, 938532, 49802342]; let c_evals = to_field::(&c_evals); @@ -267,7 +273,7 @@ mod precomputed_test { let c_commitment = commit(&srs_g1, &c); let ci_commitment = commit(&srs_g1, &ci); - let mut precomputed = Precomputed::::empty(); + let mut precomputed = CaulkPlusPrecomputed::::empty(); precomputed.precompute_w1(&srs_g2, &indices, &c, &domain); precomputed.precompute_w2(&srs_g2, &indices, &domain); @@ -303,7 +309,7 @@ mod precomputed_test { let indices = [1, 3, 4, 5, 7]; let elems: Vec<_> = indices.iter().map(|&i| domain.element(i)).collect(); - let t_bases = construct_lagrange_basis(&elems); + let t_bases = construct_lagrange_basis_polys(&elems); let c_evals = [12391, 3219031, 32131, 412331, 31231, 3213, 938532, 49802342]; let c_evals = to_field::(&c_evals); @@ -338,7 +344,7 @@ mod precomputed_test { let c_blinder = &DensePolynomial::from_coefficients_slice(&[r2, r3, r4]); let c_blinder_commitment = commit(&srs_g2, c_blinder); - let mut precomputed = Precomputed::::empty(); + let mut precomputed = CaulkPlusPrecomputed::::empty(); precomputed.precompute_w1(&srs_g2, &indices, &c, &domain); precomputed.precompute_w2(&srs_g2, &indices, &domain); @@ -370,7 +376,7 @@ mod precomputed_test { let indices = [1, 3, 4, 5, 7]; let elems: Vec<_> = indices.iter().map(|&i| domain.element(i)).collect(); - let t_bases = construct_lagrange_basis(&elems); + let t_bases = construct_lagrange_basis_polys(&elems); let c_evals = [12391, 3219031, 32131, 412331, 31231, 3213, 938532, 49802342]; let c_evals = to_field::(&c_evals); @@ -384,7 +390,7 @@ mod precomputed_test { let (_, srs_g2) = unsafe_setup::(max_power, max_power, &mut rng); - let mut precomputed = Precomputed::::empty(); + let mut precomputed = CaulkPlusPrecomputed::::empty(); precomputed.precompute_w1(&srs_g2, &indices, &c, &domain); precomputed.precompute_w2(&srs_g2, &indices, &domain); diff --git a/src/prover/prover.rs b/src/prover/prover.rs index ce782fe..3b7ca86 100644 --- a/src/prover/prover.rs +++ b/src/prover/prover.rs @@ -13,12 +13,14 @@ use rand::RngCore; use crate::{ constants::{EXTENDED_DOMAIN_FACTOR, NUMBER_OF_MIMC_ROUNDS, SUBGROUP_SIZE}, - gates::{ExternalNullifierGate, KeyCopyGate, KeyEquality, Mimc7RoundGate, NullifierGate}, + gates::{ + ExternalNullifierGate, KeyCopyGate, KeyEqualityGate, Mimc7RoundGate, NullifierHashGate, + }, kzg::commit, layouter::Assignment, multiopen::{prover::Prover as MultiopenProver, MultiopenProof}, transcript::Transcript, - utils::construct_lagrange_basis, + utils::construct_lagrange_basis_polys, utils::shift_dense_poly, }; @@ -146,14 +148,13 @@ impl Prover { let (w0, key, w1, w2) = Self::assignment_round(&mut state); - transcript.round_1( - [&w0, &key, &w1, &w2], - [ - public_input.external_nullifier, - public_input.nullifier_hash, - public_input.signal_hash, - ], - ); + transcript.round_0_public_inputs([ + public_input.external_nullifier, + public_input.nullifier_hash, + public_input.signal_hash, + ]); + + transcript.round_1([&w0, &key, &w1, &w2]); let v = transcript.get_challenge(); @@ -186,7 +187,7 @@ impl Prover { key_openings_0, key_openings_1, q_mimc_opening, - c_opening, + mimc_cts_opening, quotient_opening, u_prime_opening, p1_opening, @@ -198,9 +199,9 @@ impl Prover { //// Sanity check multiopen_proof //if cfg!(debug_assertions) { //let mut transcript = Transcript::new_transcript(); - //transcript.update_with_u256(public_input.external_nullifier); - //transcript.update_with_u256(public_input.nullifier_hash); - //transcript.update_with_u256(public_input.signal_hash); + //transcript.update_with_f(public_input.external_nullifier); + //transcript.update_with_f(public_input.nullifier_hash); + //transcript.update_with_f(public_input.signal_hash); //transcript.update_with_g1(&w0); //transcript.update_with_g1(&key); //transcript.update_with_g1(&w1); @@ -215,28 +216,28 @@ impl Prover { //transcript.update_with_g2(&w); //transcript.update_with_g1(&h); //let alpha = transcript.get_challenge(); - //transcript.update_with_u256(w0_openings_0); - //transcript.update_with_u256(w0_openings_1); - //transcript.update_with_u256(w0_openings_2); + //transcript.update_with_f(w0_openings_0); + //transcript.update_with_f(w0_openings_1); + //transcript.update_with_f(w0_openings_2); - //transcript.update_with_u256(w1_openings_0); - //transcript.update_with_u256(w1_openings_1); - //transcript.update_with_u256(w1_openings_2); + //transcript.update_with_f(w1_openings_0); + //transcript.update_with_f(w1_openings_1); + //transcript.update_with_f(w1_openings_2); - //transcript.update_with_u256(w2_openings_0); - //transcript.update_with_u256(w2_openings_1); - //transcript.update_with_u256(w2_openings_2); + //transcript.update_with_f(w2_openings_0); + //transcript.update_with_f(w2_openings_1); + //transcript.update_with_f(w2_openings_2); - //transcript.update_with_u256(key_openings_0); - //transcript.update_with_u256(key_openings_1); + //transcript.update_with_f(key_openings_0); + //transcript.update_with_f(key_openings_1); - //transcript.update_with_u256(q_mimc_opening); - //transcript.update_with_u256(c_opening); - //transcript.update_with_u256(quotient_opening); + //transcript.update_with_f(q_mimc_opening); + //transcript.update_with_f(mimc_cts_opening); + //transcript.update_with_f(quotient_opening); - //transcript.update_with_u256(u_prime_opening); - //transcript.update_with_u256(p1_opening); - //transcript.update_with_u256(p2_opening); + //transcript.update_with_f(u_prime_opening); + //transcript.update_with_f(p1_opening); + //transcript.update_with_f(p2_opening); //let n = SUBGROUP_SIZE; //let domain = GeneralEvaluationDomain::new(n).unwrap(); @@ -260,7 +261,7 @@ impl Prover { //&q_mimc, //q_mimc_opening, //&c, - //c_opening, + //mimc_cts_opening, //"ient, //quotient_opening, //&u_prime, @@ -279,7 +280,7 @@ impl Prover { //} let q_mimc = commit(&state.proving_key.srs_g1, &state.precomputed.q_mimc).into_affine(); - let c = commit(&state.proving_key.srs_g1, &state.precomputed.c).into_affine(); + let mimc_cts = commit(&state.proving_key.srs_g1, &state.precomputed.mimc_cts).into_affine(); let p1 = commit(&state.proving_key.srs_g1, &p1).into_affine(); let p2 = commit(&state.proving_key.srs_g1, &p2).into_affine(); @@ -288,7 +289,7 @@ impl Prover { w1, w2, key, - c, + mimc_cts, quotient, u_prime, zi, @@ -302,7 +303,7 @@ impl Prover { let openings = Openings { q_mimc: q_mimc_opening, - c: c_opening, + mimc_cts: mimc_cts_opening, quotient: quotient_opening, u_prime: u_prime_opening, p1: p1_opening, @@ -397,7 +398,7 @@ impl Prover { i, &w0_coset_evals, &zeroes, - &state.precomputed.c_coset_evals, + &state.precomputed.mimc_cts_coset_evals, &state.precomputed.q_mimc_coset_evals, ); @@ -407,7 +408,7 @@ impl Prover { i, &w1_coset_evals, &key_coset_evals, - &state.precomputed.c_coset_evals, + &state.precomputed.mimc_cts_coset_evals, &state.precomputed.q_mimc_coset_evals, ); @@ -417,13 +418,13 @@ impl Prover { i, &w2_coset_evals, &key_coset_evals, - &state.precomputed.c_coset_evals, + &state.precomputed.mimc_cts_coset_evals, &state.precomputed.q_mimc_coset_evals, ); // Gate 3: numerator_coset_evals[i] += v_powers[3] - * KeyEquality::compute_in_coset( + * KeyEqualityGate::compute_in_coset( i, &key_coset_evals, &state.precomputed.q_mimc_coset_evals, @@ -440,7 +441,7 @@ impl Prover { // Gate 5: numerator_coset_evals[i] += v_powers[5] - * NullifierGate::compute_in_coset( + * NullifierHashGate::compute_in_coset( i, &w2_coset_evals, &key_coset_evals, @@ -511,7 +512,7 @@ impl Prover { // 2. compute lagrange basis polynomial t_i over w^j for j = index let omega = state.domain_t.element(state.witness.index); - let ts = construct_lagrange_basis(&[omega]); + let ts = construct_lagrange_basis_polys(&[omega]); // 3. define and mask zI` let mut zi = DensePolynomial::::from_coefficients_slice(&[r1]); @@ -669,7 +670,7 @@ impl Prover { let key = state.key.as_ref().unwrap(); let quotient = state.quotient.as_ref().unwrap(); - let c = &state.precomputed.c; + let mimc_cts = &state.precomputed.mimc_cts; let q_mimc = &state.precomputed.q_mimc; let zi = state.zi.as_ref().unwrap(); @@ -697,10 +698,9 @@ impl Prover { h_zv }; - // compute all evaluations - let v = u_prime.evaluate(&alpha); - // compute all openings + let u_prime_opening = u_prime.evaluate(&alpha); + let w0_openings = [ w0.evaluate(&alpha), w0.evaluate(&omega_alpha), @@ -722,10 +722,9 @@ impl Prover { let key_openings = [key.evaluate(&alpha), key.evaluate(&omega_alpha)]; let q_mimc_opening = q_mimc.evaluate(&alpha); - let c_opening = c.evaluate(&alpha); + let mimc_cts_opening = mimc_cts.evaluate(&alpha); let quotient_opening = quotient.evaluate(&alpha); - let u_prime_opening = v; - let p1_opening = p1.evaluate(&v); + let p1_opening = p1.evaluate(&u_prime_opening); let p2_opening = p2.evaluate(&alpha); assert_eq!(p2_opening, Fr::zero()); @@ -743,14 +742,14 @@ impl Prover { key_openings[0], key_openings[1], q_mimc_opening, - c_opening, + mimc_cts_opening, quotient_opening, u_prime_opening, p1_opening, p2_opening, ]); - // compute proof + // Compute the multiopen proof let m = MultiopenProver::prove( &state.proving_key.srs_g1, w0, @@ -758,12 +757,12 @@ impl Prover { w2, key, q_mimc, - c, + mimc_cts, quotient, u_prime, &p1, &p2, - v, + u_prime_opening, alpha, omega_alpha, omega_n_alpha, @@ -784,7 +783,7 @@ impl Prover { key_openings[0], key_openings[1], q_mimc_opening, - c_opening, + mimc_cts_opening, quotient_opening, u_prime_opening, p1_opening, diff --git a/src/setup/main.rs b/src/setup/main.rs index 99ea3da..e510534 100644 --- a/src/setup/main.rs +++ b/src/setup/main.rs @@ -1,4 +1,4 @@ -use semacaulk::bn_solidity_utils::f_to_hex_le; +use semacaulk::bn_solidity_utils::{f_to_hex, f_to_hex_le}; use semacaulk::setup::setup; use std::env; use std::fs::File; @@ -6,20 +6,29 @@ use std::io::prelude::*; use std::io::LineWriter; /* - * Usage: cargo run setup - * Reads the SRS G1 and G2 points from , and writes the commitments to the Lagrange + * Usage: cargo run setup + * Reads the SRS G1 and G2 points from , and writes the commitments to the Lagrange * basis polynomials to . */ fn main() { let args: Vec = env::args().collect(); + if args.len() <= 3 { + println!("Usage: cargo run setup "); + println!( + "Reads the SRS G1 and G2 points from , and writes the commitments to the Lagrange basis polynomials to ." + ); + return; + } assert!(args.len() > 3); let log_2_table_size = &args[args.len() - 3]; - let hex_filename = &args[args.len() - 2]; + let ptau_filename = &args[args.len() - 2]; let lagrange_comms_out = &args[args.len() - 1]; let log_2_table_size: usize = log_2_table_size.parse().unwrap(); - let (_pk, lagrange_comms) = setup(log_2_table_size, hex_filename.as_str()); + let (pk, lagrange_comms) = setup(log_2_table_size, ptau_filename.as_str()); + let srs_g1 = pk.srs_g1; + let srs_g2 = pk.srs_g2; let file = File::create(lagrange_comms_out).unwrap(); let mut file = LineWriter::new(file); @@ -30,4 +39,31 @@ fn main() { file.write_all(b"\n").unwrap(); } file.flush().unwrap(); + + let table_size: usize = 2u64.pow(log_2_table_size as u32) as usize; + println!("Update Constants.sol with these values:"); + println!( + "uint256 constant SRS_G1_T_X = 0x{};", + f_to_hex(srs_g1[table_size].x) + ); + println!( + "uint256 constant SRS_G1_T_Y = 0x{};", + f_to_hex(srs_g1[table_size].y) + ); + println!( + "uint256 constant SRS_G2_1_X_0 = 0x{};", + f_to_hex(srs_g2[1].x.c1) + ); + println!( + "uint256 constant SRS_G2_1_X_1 = 0x{};", + f_to_hex(srs_g2[1].x.c0) + ); + println!( + "uint256 constant SRS_G2_1_Y_0 = 0x{};", + f_to_hex(srs_g2[1].y.c1) + ); + println!( + "uint256 constant SRS_G2_1_Y_1 = 0x{};", + f_to_hex(srs_g2[1].y.c0) + ); } diff --git a/src/setup/mod.rs b/src/setup/mod.rs index 40bb38b..c6d7a35 100644 --- a/src/setup/mod.rs +++ b/src/setup/mod.rs @@ -1,5 +1,4 @@ use crate::accumulator::commit_to_lagrange_bases; -use crate::bn_solidity_utils::f_to_hex; use crate::prover::ProvingKey; use ark_bn254::{Bn254, Fq, Fq2, G1Affine, G2Affine}; use ark_ff::bytes::FromBytes; @@ -10,48 +9,16 @@ use std::path::Path; #[cfg(test)] pub mod tests; -pub fn setup( - log_2_table_size: usize, - srs_hex_filename: &str, -) -> (ProvingKey, Vec) { - assert!(log_2_table_size < 28 && log_2_table_size > 0); +pub fn setup(log_2_table_size: usize, ptau_filepath: &str) -> (ProvingKey, Vec) { + assert!((10..28).contains(&log_2_table_size)); let table_size: usize = 2u64.pow(log_2_table_size as u32) as usize; + let num_g1_points = table_size + 1; + let num_g2_points = table_size; - let (srs_g1, srs_g2) = load_srs_from_hex(srs_hex_filename); - println!("{}, {}", srs_g1.len(), table_size); - assert!(srs_g1.len() > table_size); - assert!(srs_g2.len() >= table_size); + let (srs_g1, srs_g2) = + ppot_rs::ptau::read(ptau_filepath, num_g1_points, num_g2_points).unwrap(); - println!("Update Constants.sol with these values:"); - println!( - "uint256 constant SRS_G1_T_X = 0x{};", - f_to_hex(srs_g1[table_size].x) - ); - println!( - "uint256 constant SRS_G1_T_Y = 0x{};", - f_to_hex(srs_g1[table_size].y) - ); - println!( - "uint256 constant SRS_G2_1_X_0 = 0x{};", - f_to_hex(srs_g2[1].x.c1) - ); - println!( - "uint256 constant SRS_G2_1_X_1 = 0x{};", - f_to_hex(srs_g2[1].x.c0) - ); - println!( - "uint256 constant SRS_G2_1_Y_0 = 0x{};", - f_to_hex(srs_g2[1].y.c1) - ); - println!( - "uint256 constant SRS_G2_1_Y_1 = 0x{};", - f_to_hex(srs_g2[1].y.c0) - ); - - println!(); - println!("Computing commitments to Lagrange basis polynomials..."); let lagrange_comms = commit_to_lagrange_bases::(table_size, &srs_g1); - (ProvingKey:: { srs_g1, srs_g2 }, lagrange_comms) } @@ -75,30 +42,6 @@ pub fn load_lagrange_comms_from_file(filename: &str) -> Vec { lagrange_comms } -pub fn load_srs_from_hex(filename: &str) -> (Vec, Vec) { - let mut srs_g1 = vec![]; - let mut srs_g2 = vec![]; - if let Ok(lines) = read_lines(filename) { - for line in lines { - let val = line.unwrap(); - if val.len() == 128 { - let g1 = g1_str_to_g1(&val); - srs_g1.push(g1); - } else if val.len() == 256 { - let g2 = g2_str_to_g2(&val); - srs_g2.push(g2); - } else if val.is_empty() { - // do nothing - } else { - panic!("Invalid line detected - was this file generated correctly?"); - } - } - } - assert!(!srs_g1.is_empty()); - assert!(!srs_g2.is_empty()); - (srs_g1, srs_g2) -} - pub fn hex_to_fq(val: &str) -> Fq { assert_eq!(val.len(), 64); let bytes_vec = hex::decode(val).unwrap(); diff --git a/src/setup/tests.rs b/src/setup/tests.rs index 3abd9f3..7f12333 100644 --- a/src/setup/tests.rs +++ b/src/setup/tests.rs @@ -1,4 +1,4 @@ -use super::{g1_str_to_g1, g2_str_to_g2, load_srs_from_hex, setup}; +use super::{g1_str_to_g1, g2_str_to_g2, setup}; #[test] pub fn test_g1() { @@ -13,17 +13,15 @@ pub fn test_g2() { let g2_str = "edf692d95cbdde46ddda5ef7d422436779445c5e66006a42761e1f12efde0018c212f3aeb785e49712e7a9353349aaf1255dfb31b7bf60723a480d9293938e19aa7dfa6601cce64c7bd3430c69e7d1e38f40cb8d8071ab4aeb6d8cdba55ec8125b9722d1dcdaac55f38eb37033314bbc95330c69ad999eec75f05f58d0890609"; let g2 = g2_str_to_g2(&String::from(g2_str)); assert!(g2.is_on_curve()); -} -#[test] -pub fn test_load_hex() { - let (srs_g1, srs_g2) = load_srs_from_hex("./11.hex"); - assert_eq!(srs_g1.len(), srs_g2.len() + 1); + let g2_str = "7fa3b682a9ca88c26d79614ba1983b2b9592ccff25bdeeb4f20a2b8dbafbd116267e64cba10106b2fe21069bdf1455802bec49d0d0166a675d5fc9d17ec43b0833a2d46d92dea96d2b0471181d6cd1ed8d08026bc9d358b1b1da0cb1011ee4011b90877c247ea9c4fc2312d977361e50949e426f27646d42f98ff36ae9ffe918"; + let g2 = g2_str_to_g2(&String::from(g2_str)); + assert!(g2.is_on_curve()); } #[test] pub fn test_setup() { - let pk = setup(11, "./11.hex"); + let pk = setup(11, "./11.ptau"); assert_eq!(pk.0.srs_g1.len(), pk.0.srs_g2.len() + 1); assert_eq!(pk.1.len(), pk.0.srs_g2.len()); } diff --git a/src/tests/prover_and_verifier.rs b/src/tests/prover_and_verifier.rs index 0805a3e..685dde0 100644 --- a/src/tests/prover_and_verifier.rs +++ b/src/tests/prover_and_verifier.rs @@ -1,29 +1,28 @@ use crate::prover::prover::{Prover, WitnessInput}; -use crate::setup::load_srs_from_hex; +use crate::setup::setup; +use crate::utils::construct_lagrange_basis_poly; use crate::verifier::Verifier; use crate::{ kzg::commit, layouter::Layouter, mimc7::init_mimc7, - prover::{ProverPrecomputedData, ProvingKey, PublicData}, + prover::{ProverPrecomputedData, PublicData}, }; use ark_bn254::{Bn254, Fr}; -use ark_ec::ProjectiveCurve; +use ark_ec::{AffineCurve, ProjectiveCurve}; use ark_ff::{UniformRand, Zero}; use ark_poly::{ - univariate::DensePolynomial, EvaluationDomain, GeneralEvaluationDomain, UVPolynomial, + univariate::DensePolynomial, EvaluationDomain, GeneralEvaluationDomain, Polynomial, + UVPolynomial, }; -use ark_std::test_rng; +use ark_std::{test_rng, One}; #[test] pub fn test_prover_and_verifier() { let mut rng = test_rng(); - let table_size: usize = 2048; - let (srs_g1, srs_g2) = load_srs_from_hex("./11.hex"); - let pk = ProvingKey:: { - srs_g1, - srs_g2: srs_g2.clone(), - }; + let log_2_table_size = 10; + let table_size: usize = 1 << log_2_table_size; + let (pk, _) = setup(log_2_table_size, "./11.ptau"); let domain = GeneralEvaluationDomain::::new(table_size).unwrap(); @@ -52,7 +51,9 @@ pub fn test_prover_and_verifier() { identity_commitments[index] = identity_commitment; let c = DensePolynomial::from_coefficients_slice(&domain.ifft(&identity_commitments)); - let precomputed = ProverPrecomputedData::index(&pk, &mimc7.cts, index, &c, table_size); + let mut precomputed = ProverPrecomputedData::precompute_fixed(&mimc7.cts); + precomputed.precompute_w1(&pk, &[index], &c, table_size); + precomputed.precompute_w2(&pk, &[index], table_size); let witness = WitnessInput { identity_nullifier, @@ -82,10 +83,148 @@ pub fn test_prover_and_verifier() { let is_valid = Verifier::verify( &proof, pk.srs_g1[table_size], - srs_g2[1], + pk.srs_g2[1], accumulator, &public_input, ); assert!(is_valid); } + +#[test] +pub fn test_update_precomputed_w1() { + let mut rng = test_rng(); + let log_2_table_size = 10; + let table_size: usize = 1 << log_2_table_size; + let (pk, lagrange_comms) = setup(log_2_table_size, "./11.ptau"); + let zero = Fr::from(0); + + let domain = GeneralEvaluationDomain::::new(table_size).unwrap(); + + let mimc7 = init_mimc7::(); + + // Alice's public and private inputs + let identity_nullifier = Fr::from(100u64); + let identity_trapdoor = Fr::from(200u64); + let external_nullifier = Fr::from(300u64); + let signal_hash = Fr::from(888u64); + let nullifier_hash = mimc7.multi_hash(&[identity_nullifier, external_nullifier], Fr::zero()); + let identity_commitment = + mimc7.multi_hash(&[identity_nullifier, identity_trapdoor], Fr::zero()); + + let mut identity_commitments: Vec<_> = (0..table_size).map(|_| zero).collect(); + + // Alice inserts to index 0 and Bob inserts to index 1 + let index_alice = 0; + let index_bob = 1; + identity_commitments[index_alice] = identity_commitment; + + // Compute the accumulator + let accumulator_alice_poly = + DensePolynomial::from_coefficients_slice(&domain.ifft(&identity_commitments)); + + // Precompute + let mut precomputed = ProverPrecomputedData::index( + &pk, + &mimc7.cts, + &[index_alice, index_bob], + &accumulator_alice_poly, + table_size, + ); + + let accumulator_alice = commit(&pk.srs_g1, &accumulator_alice_poly).into_affine(); + + let identity_nullifier_bob = Fr::from(300u64); + let identity_trapdoor_bob = Fr::from(400u64); + let identity_commitment_bob = + mimc7.multi_hash(&[identity_nullifier_bob, identity_trapdoor_bob], Fr::zero()); + + // The identity commitment which Bob replaces + let original_bob = identity_commitments[index_bob]; + + // Check w1_alice + let w_old = precomputed.caulk_plus_precomputed.get_w1_i(&index_alice); + let w_i = domain.element(index_alice); + let denom = DensePolynomial::from_coefficients_slice(&[-w_i, Fr::one()]); + let mut num = accumulator_alice_poly.clone(); + num[0] -= accumulator_alice_poly.evaluate(&w_i); + let p = &num / &denom; + let p_comm = commit(&pk.srs_g2, &p).into_affine(); + assert_eq!(w_old, p_comm); + + // Bob replaces the leaf at index_bob + identity_commitments[index_bob] = identity_commitment_bob; + let accumulator_bob_poly = + DensePolynomial::from_coefficients_slice(&domain.ifft(&identity_commitments)); + let accumulator_bob = commit(&pk.srs_g1, &accumulator_bob_poly).into_affine(); + assert_ne!(accumulator_alice, accumulator_bob); + + // delta + let delta = identity_commitment_bob - original_bob; + + // Check the new accumulator + let l_j_comm = lagrange_comms[index_bob]; + let l_j_delta_comm = l_j_comm.mul(delta).into_affine(); + let new_c = accumulator_alice + l_j_delta_comm; + assert_eq!(new_c, accumulator_bob); + + // L_j(X) / (X - w_i) + let elems: Vec = domain.elements().collect(); + let l_j = construct_lagrange_basis_poly(&elems, index_bob); + let w_i = domain.element(index_alice); + let denom = DensePolynomial::from_coefficients_slice(&[-w_i, Fr::one()]); + let p = &l_j / &denom; + let p_comm = commit(&pk.srs_g2, &p).into_affine(); + + let delta_p_comm = p_comm.mul(delta); + + let w_old = precomputed.caulk_plus_precomputed.get_w1_i(&index_alice); + let w_new = w_old + delta_p_comm.into(); + + // Use update_w1() to update Alice's precomputed data + precomputed.update_w1(index_alice, w_new); + + // Generate proof for Alice + let witness = WitnessInput { + identity_nullifier, + identity_trapdoor, + identity_commitment, + index: index_alice, + }; + + let public_input = PublicData:: { + accumulator: accumulator_bob, + external_nullifier, + nullifier_hash, + signal_hash, + }; + + let assignment = Layouter::assign( + identity_nullifier, + identity_trapdoor, + external_nullifier, + &mimc7.cts, + &mut rng, + ); + + let proof = Prover::prove( + &pk, + &witness, + &assignment, + &public_input, + &precomputed, + &mut rng, + table_size, + ); + + let is_valid = Verifier::verify( + &proof, + pk.srs_g1[table_size], + pk.srs_g2[1], + accumulator_bob, + &public_input, + ); + assert!(is_valid); + /* + */ +} diff --git a/src/transcript.rs b/src/transcript.rs index 52df28a..192452d 100644 --- a/src/transcript.rs +++ b/src/transcript.rs @@ -21,10 +21,13 @@ impl Transcript { [0u8; 32] } - pub fn round_1(&mut self, g1_vals: [&G1Affine; 4], f_vals: [Fr; 3]) { + pub fn round_0_public_inputs(&mut self, f_vals: [Fr; 3]) { for val in f_vals { - self.update_with_u256(val); + self.update_with_f(val); } + } + + pub fn round_1(&mut self, g1_vals: [&G1Affine; 4]) { for val in g1_vals { self.update_with_g1(val); } @@ -43,7 +46,7 @@ impl Transcript { pub fn round_4(&mut self, f_vals: [Fr; 17]) { for val in f_vals { - self.update_with_u256(val); + self.update_with_f(val); } } @@ -51,7 +54,7 @@ impl Transcript { self.update_with_g1(f_cm); } - pub fn update_with_u256(&mut self, x: Fr) { + pub fn update_with_f(&mut self, x: Fr) { let mut x_bytes = x.into_repr().to_bytes_be(); self.data.append(&mut x_bytes); } diff --git a/src/utils.rs b/src/utils.rs index b7f4665..f6665dd 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -54,24 +54,34 @@ pub fn shift_dense_poly( DensePolynomial::from_coefficients_vec(coeffs) } +pub fn construct_lagrange_basis_poly( + evaluation_domain: &[F], + index: usize, +) -> DensePolynomial { + let mut l_i = DensePolynomial::from_coefficients_slice(&[F::one()]); + let x_i = evaluation_domain[index]; + + for (j, &x_j) in evaluation_domain.iter().enumerate() { + if j != index { + let xi_minus_xj_inv = (x_i - x_j).inverse().unwrap(); + l_i = &l_i + * &DensePolynomial::from_coefficients_slice(&[ + -x_j * xi_minus_xj_inv, + xi_minus_xj_inv, + ]); + } + } + l_i +} + // Compute the Lagrange basis polynomials in O(n^2) time. This is not recommended for domains of // size above 32. -pub fn construct_lagrange_basis(evaluation_domain: &[F]) -> Vec> { +pub fn construct_lagrange_basis_polys( + evaluation_domain: &[F], +) -> Vec> { let mut bases = Vec::with_capacity(evaluation_domain.len()); for i in 0..evaluation_domain.len() { - let mut l_i = DensePolynomial::from_coefficients_slice(&[F::one()]); - let x_i = evaluation_domain[i]; - - for (j, &x_j) in evaluation_domain.iter().enumerate() { - if j != i { - let xi_minus_xj_inv = (x_i - x_j).inverse().unwrap(); - l_i = &l_i - * &DensePolynomial::from_coefficients_slice(&[ - -x_j * xi_minus_xj_inv, - xi_minus_xj_inv, - ]); - } - } + let l_i = construct_lagrange_basis_poly(evaluation_domain, i); bases.push(l_i); } @@ -113,7 +123,7 @@ pub fn is_pow_2(x: usize) -> bool { #[cfg(test)] mod util_tests { - use super::construct_lagrange_basis; + use super::construct_lagrange_basis_polys; use ark_bn254::Fr as F; use ark_ff::Zero; use ark_poly::{ @@ -126,7 +136,7 @@ mod util_tests { let domain = GeneralEvaluationDomain::::new(domain_size).unwrap(); let elems: Vec = domain.elements().collect(); - let bases = construct_lagrange_basis(&elems); + let bases = construct_lagrange_basis_polys(&elems); assert_eq!(bases.len(), domain.size()); let to_field = |x: &u64| -> F { F::from(*x) }; @@ -152,13 +162,4 @@ mod util_tests { assert_eq!(f_from_bases, f_from_ifft); } - - //#[test] - //fn test_lagrange_bases_speed() { - //let domain_size = 1024; - //let domain = GeneralEvaluationDomain::::new(domain_size).unwrap(); - - //let elems: Vec = domain.elements().collect(); - //let bases = construct_lagrange_basis(&elems); - //} } diff --git a/src/verifier/mod.rs b/src/verifier/mod.rs index fabe168..7ad2f0b 100644 --- a/src/verifier/mod.rs +++ b/src/verifier/mod.rs @@ -26,15 +26,13 @@ impl Verifier { let mut transcript = Transcript::new_transcript(); // Update transcript and derive challenges - transcript.round_1( - [ - &proof.commitments.w0, - &proof.commitments.key, - &proof.commitments.w1, - &proof.commitments.w2, - ], - [external_nullifier, nullifier_hash, signal_hash], - ); + transcript.round_0_public_inputs([external_nullifier, nullifier_hash, signal_hash]); + transcript.round_1([ + &proof.commitments.w0, + &proof.commitments.key, + &proof.commitments.w1, + &proof.commitments.w2, + ]); let v = transcript.get_challenge(); @@ -63,7 +61,7 @@ impl Verifier { let key_openings = [proof.openings.key_0, proof.openings.key_1]; let q_mimc_opening = proof.openings.q_mimc; - let c_opening = proof.openings.c; + let mimc_cts_opening = proof.openings.mimc_cts; let w0_openings = [ proof.openings.w0_0, proof.openings.w0_1, @@ -94,17 +92,18 @@ impl Verifier { // combination of the gate evaluations should equal let pow_7 = |x: Fr| x.pow([7, 0, 0, 0]); - // Gate 0: q_mimc_opening * ((w0_openings[0] + c_opening) ^ 7 - w0_openings[1]) - let gate_0_eval = q_mimc_opening * (pow_7(w0_openings[0] + c_opening) - w0_openings[1]); + // Gate 0: q_mimc_opening * ((w0_openings[0] + mimc_cts_opening) ^ 7 - w0_openings[1]) + let gate_0_eval = + q_mimc_opening * (pow_7(w0_openings[0] + mimc_cts_opening) - w0_openings[1]); - // Gate 1: q_mimc_opening * ((w1_openings[0] + key_openings[0] + c_opening) ^ 7 - w1_openings[1]) - let gate_1_eval = - q_mimc_opening * (pow_7(w1_openings[0] + key_openings[0] + c_opening) - w1_openings[1]); + // Gate 1: q_mimc_opening * ((w1_openings[0] + key_openings[0] + mimc_cts_opening) ^ 7 - w1_openings[1]) + let gate_1_eval = q_mimc_opening + * (pow_7(w1_openings[0] + key_openings[0] + mimc_cts_opening) - w1_openings[1]); // Gate 2: - // q_mimc_opening * ((w2_openings[0] + key_openings[0] + c_opening) ^ 7 - w2_openings[1]) - let gate_2_eval = - q_mimc_opening * (pow_7(w2_openings[0] + key_openings[0] + c_opening) - w2_openings[1]); + // q_mimc_opening * ((w2_openings[0] + key_openings[0] + mimc_cts_opening) ^ 7 - w2_openings[1]) + let gate_2_eval = q_mimc_opening + * (pow_7(w2_openings[0] + key_openings[0] + mimc_cts_opening) - w2_openings[1]); // Gate 3: // q_mimc_opening * (key_openings[0] - key_openings[1]) @@ -158,7 +157,7 @@ impl Verifier { proof.openings.key_0, proof.openings.key_1, q_mimc_opening, - c_opening, + mimc_cts_opening, proof.openings.quotient, proof.openings.u_prime, proof.openings.p1, @@ -190,8 +189,8 @@ impl Verifier { &[proof.openings.key_0, proof.openings.key_1], &proof.commitments.q_mimc, q_mimc_opening, - &proof.commitments.c, - c_opening, + &proof.commitments.mimc_cts, + mimc_cts_opening, &proof.commitments.quotient, quotient_opening, &proof.commitments.u_prime, @@ -221,13 +220,13 @@ impl Verifier { // // A: [1] is E::G2Affine::prime_subgroup_generator() // A1: - // C is accumulator + // C is the accumulator // ci is proof.commitments.ci // A2: // xi is hi_2 // (x^n - 1) is (public_input.srs_g1[common_input.domain_h.size()] + -E::G1Affine::prime_subgroup_generator()) // A3: - // s is the separator challenge + // s is the separator challenge // zq is final_poly_proof.mul(x3) // -y is g1.mul(final_poly_eval).neg() // p is final_poly