diff --git a/Cargo.lock b/Cargo.lock index e5b21aeef..f6dd7bb71 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1964,7 +1964,7 @@ dependencies = [ [[package]] name = "helium-sub-daos" -version = "0.2.4" +version = "0.2.6" dependencies = [ "anchor-lang", "anchor-spl", diff --git a/packages/helium-admin-cli/delegatedPositions.txt b/packages/helium-admin-cli/delegatedPositions.txt new file mode 100644 index 000000000..bb7277858 --- /dev/null +++ b/packages/helium-admin-cli/delegatedPositions.txt @@ -0,0 +1,1059 @@ +6FToPCHU9vZw4a2UYoHCRRjx1g928aSufzobnHw2cr8X +EKNBWH2Qy7RyguTRyT5J8HcddSQovMy7tGyL2EMht65E +4zoZS9zsQxVk2kf1huJ9XuDbiUt24eBAMUTNrPvXD6Yq +4a8QrPgBYNjXgNLL8yUBSM5H7RYXm7Y7vvgUk4pXuFAF +7QKzHRtwSaPTBGadz8Gz4bUc7kUTggoigfH9smK9btre +Bwdw5JfcnRG2GtHiMMgfY1LwTHx3U4E8wAWHBWciU68D +2pZzAcSy8Q4pQ6tCfbUr8q8Yio2Ji15ttBmGme9hANKT +BQ6pRnE2Y9id3BypxbaLX1oPrxUtLTqdaJeYp27yow3i +awoL84zCbohLNugmqwoZHsSNYRa91TLqfJBBJFS4JxY +9oaByEYU6CJExJ8KvBuzh84873iiQeQSPZXfLYzgWJ4P +8JxUZZoJYBgH7atJLJbJbosEDTVGpt7RMmTK14srMMJe +5ZKmn6QVicqP8t9MMCSaZ9Cb2jjqeUq58ump2suieYLy +73EM6cZ9jJMNJndm51NHxcshB6cEQrxQYSTR8bNiDL9z +5QEZoe2WUSExL1Jay9RB7tWU9Uoi72LbsoCT8WHAWcsU +JXE7CPji47BmzzCfwW9SSKhHiBTfVH6PDmwrUTToLww +5nDRcc8mXBArDdpTzzEeHheJNXxaHk4nMvi4k4TzaiY5 +Fix62uxbPiHhDpFc6vcy1JGFqZwR6DqvD9MoavbhtF2b +AwAWDPYB5YPyrb4z2ufkT7uCNLuY6HkoHS1vtik47XHG +GPa74SrjP6YcdwU3hqkxAb4ifrcTecRi9MEg9Jd4CW8Y +FFQCmVfwYXYgnGNdR8NEzg7CCMnHqpSs2riBsm4W6i7L +8yvHRYg5gDR6edagRdMEkmzyjoA8CC8s6GE63J7n81dJ +4ePyCLR9PdUzV6L1aUxGACJgyHbnDR7wQFziVz3gaSiC +DMoWUu5AUcBFuaLRM98nEqFP8ikrst9vBNg5nsGRMjYF +C5ShCR47KXkcvZEDFdVdCyh81UPD6jN4AybR8c7jkHhJ +7URMmcBc81VKLAaD6BNPa4brnaKEzkpoFy3s1uAZQnU1 +9ojm8d4biavHEsvodRaDjGYWSkZ2AV5Rfn1fefn2g9Ct +4VEWCG4XeMUqPvS5Qr5K3ov6meewR1z3f6YVYU4ZMvtP +HeGSoGDDqCg5hdH1CSw2Bh81P21noaWkhvhKCz6xYbpp +8ztSZVC81CyokgcMNq6b8U37gDg9iLo16CgMDbyQLBbN +7Mdens5fdSA2oeVmcEwZCNsKvZcoRTPGppY2gAL1qBKc +CtEqodNB3zVNXTedszQUuDHrTuZn2eYnUn76iD79cwUQ +C2eP1s1p1yqdLN7bRZE8bb4PK6tmnQfiExRY58bivfAk +BbrhrYZPa7CBefxpzHMuVZFVF96iq64bXMCdEhZH9WEt +Aym3t1d3Wdf4sPGPGoCXngYQ2mXSKiDCKx7Dtkpd5UZx +HSoRQKCsjrhCEq5kjhsrSCwTi1J3KrcSAJcWVoUrfXcN +D67tGwDLzSmCutv8vpkSydajHeZ8FqryEdLVdsSG1rNT +3XjXLV3dY6tzmkqqDjoMfi5wFtNyonhpHvTyStgjFopv +8S37VV7AJmVWxzmhA3jY1rDHQXv69hdDPt7cUJK2yDUs +H39Tg8tL558HXymPZUisqgdfMrRe4G7puJoC3WrDU5T3 +E7cUiFEiyj8E3FtJGE8oREMRGh9Jpywizqey4Wxifi9H +J57dQQiR5y3eaF7AafejSAnUmHFHUZjNchiBnNFTpVSN +GFfDNDZsgrgwZVpqFtjZ9tceQqZKuCPHHZHYCUwW3jii +78thWswJhHuPAQXXLG1AwZuuejDUi2DTLqQPbQW5UPhi +4gxcsv1r6FhxYt4EaqdaEsNBLJFxMSpgMZowfYjW6pmM +GnPyWfsvxyTGpFXrdoEm43UUwmE1ad9bZALb1bAyXqv4 +CAYPAPBjtYZpXdkVrV9vM8vcBkxvGoAJM544SLb2Cmro +BDWkunAHtKQjjM1ATggqPRqjjKTM2g3Expk7JxhLgwyU +5K4GZrfYiLhhg3QX6cs4XyrVhKm3ULNu4gp2Hoewgf23 +8EoYLeQQb8HPejMg8aDFFGDKbk5ScGKScrNoNzkATScq +7WSkSh27n8GwRuNDjTxPqSv2krm1y88N3RHK4osZVLWH +AkRp16vRUYvWgQ5YanUpu6Tt71Fwc9ufsv15kZY2qT9H +GQ8K7eaALeeSuFJ1BKcN8GE7UjVFx19Zisb8wpyepjTp +85gshX23YW569FveZ124xaR9rzWP6zRqtTa3BarFoy3v +awDvfYTR1uNnfbTGRT2WK1tVTyT9CFFtWYtVdLmLB3k +JAKw45eHWxD2XQQHmk3WP3EKKcuG4BfeJ6nvpk7Cne9N +HjDP5Bvukv8k8p5fSvwv5CA39RVWYD5XSR94TGaZ9MHa +91tRBqMG6ghAzZuZF7JdMyLUo76fYENTe1gVcRWWH4Sf +9zZJbmiFJMpEEBtjqeHGsspWyPUAU5iyVuS44qRKePLs +4qQZu6SZnjhCLKdqUxMyu3F5nqmUUWbur2LEdaYnaT4p +3VW6bppMK5Kqi6rRSJFgtX1Pkojr9MvHu36Y7MfvEjyN +Dq44cQo1xj9HeySWcVgKx97fZozXfwmktndwpHM1mWJ7 +58XEvU9sGXdGgPkLviXusJKueTptYSQM5ArfrVByk7K7 +88wtYaUkxJLAX1jYQHM88SxfQ9CZDFsMmCRUHwvv2GUF +HDDZ6zYks2bscC5v2bcAz4vraFTMhPcnefEQq2RPJVAP +2q6mJJc5RfeLW85cD58tTo4phBAaCmHh1g3ZiFV6kVQz +49ugYk76NuMGn6Wbryz3GxVbz3iAGQaFYoK77fD6KhoD +G4qbMuC5zepjFxFEVVkkEcUQnsEa4f9MjPMHPFEwcRUA +HUVqPRNKb5zDZNwBuwxd3DL4frLxQ4Pk12gN2uoSqrUe +6FqGWXv4RMK2xMGTBFuzMheBW1wdG7naJa4bv4kRybu9 +4ngp2RJo8y34xnJyAQMPecBZpZkd6GphqjcES5kTAkvh +Htnxg9FfoiQqWTiGoTgy5mr1NfTYErVQ8pTLUR95J1Df +2CqYVA6BYt7QBGQSaAEV7az1gLL86q2vrhZjyymLW4an +Fzuf2yPATKidHZN2iy717EcQ2ybzDp8fVzz7RFgXaFua +B6gSu3sTqVyuK3gehvGKaf86k8Ri3FZYTvMV9DRdhBcv +BDYTjGtvBS82ffGfmdgL8qVpxncM94m6tbhK4xuWUzXp +5WdfWNxFiFouDQRLPxptP36W4R5EPKvAES4jcfi1c5LM +6ozAqvK5yLU9ZPXinDootbVGc5yRZameECozPWXFZVfX +3smp4yBkYuy6ASfE5oUZN2Zb3KQdgBjCoecdx4gKUpXC +FtojQXTX7V4guf8pxGE39PJ33vpnaYRMefmbjxzWwEuT +Se7HAMAtybcuo7Aseo2ZuQy2sQwz2VeCRNiPL2Ddxkg +5w8DdtuogKwazjiBihVMezoK11o4Vqev6yYmE2Nv2zDW +EJAVYJXGm8pwznEcxbhapGopUMdMYxEMe6MsqZu9PjVz +2WMKFe8XXritJDcAfg5yryATic9Vep4Q6zkob4kq9G6U +13zykYYEsn7fgLNNTFDVC6AnobXP7dD1AvTg3XQitnCS +DhprcoYpgV4bXFKuZBVhULuLHgsu8jZuUAjWkinnJKBn +Dsanp4PxYkqPrNx3A18fhuMJuhs4UHYtdzgKadG9RRSw +7fkuawcjkj9jzT8VFysbyrm2fWXfwAPEsP42kukgurMc +6ykmL9W36XaXiJqmMSUm2NUijywcnVNXvRAajLjLjN67 +G8DapMwwz4AJ6oq3sP2ocCfMMBZ8qjrkfEK1dSyRbDhP +7qmUoois1tXN7NTULWxCgVktFrXxr85HydfhAZRC9A16 +Ffff3TxECtU2Q9aYRLZz7Vf1pbiNr9SizPxFW3jNLWZ1 +KDthcy73RTgf9XGS9WEpo9FCJgs3Cp6pL9feDgPXwhj +ARnxJftBjZN3xkSjrxdqPA5SbAumsjetaSu2YXSeUNoS +9SAjHzdQxe6WhGHQtoe8GYdasgF3AFPtLYskCpW2pULa +EnZ956YbvD1KtiQ8ZLa2LrU142XD6uajxtWNsXFKa2Qe +Bjpfuia14AtRauvzd2gDP4qifFxqyiHWQCay56y2AnRb +ASk1Ee4kWmD4YjQjvVTPgg8qr74xreTSshDUF1wbNcU1 +6VGbK8iCZPTiteme6HL4JnRMP8qczATfYaVc3cUBcaTG +APK4PAwAfSsCPR4We4Q5GNAKXYYNLPtiPnBXJw7fvf7P +3ZUNQ4T7VQbBtisdj3MWcQRjNEp3mULzzV9p8ELht6RY +HBbYfBVH3VFynz5z93vA5DEP3DfjXu2VHnWaKYGg8yvQ +HFdFkshM7UrLhkAF7HJH6BGdSZ2TMXfDDPxmA96qgzYx +Fj3dzgM6SteH3bvFUoaPowrAbCfuD2eJU29dkvKeWJiv +3sRdMTGaLaDw3836KmRQwqyrSXK7S2n1irT7nXBB9mMx +3wC3x7ubJUwQ5omM32pw9ZywAyNTH5tKq3g1UqS1AbSL +EHsYFrxV1TqLKK9L81qai9Xnm9fwTfAo1FtsaD1J4mxE +wvXqhmoA86YSzT41KL2Y4Zi1eMvpRuDUt9YdxsFaigy +GY5ECkBdwpyy8JUdV5AZ41iKNgzQiGW8Rj1uQgzF4j9L +AUCDLZ3NpiY5dUv4rw3wRJTYzHykXL8Dy2exCjBDRZ6T +8sEZKkPzYsyeYs6PpPwo1Mix8FCjXapDgGXB8jpkRPCw +EZiWMThe2gpZLzCAFzrk6jxcejGw4XsKeJX78Z7ne8TX +9sn5QdZnoGGWvpa2snY2crfT6FvFHKKRmpPEws1z2Vpd +FkHC65ckubDkr7exg9PTT9v8Az5TVTP8HuHRP1p4DKSv +5QUEQCfU1aZEwyWB7qnoDKJMp2oCX9axNbNZtKhhAMAU +5a9hwiQeFt3ZbUzL79kRcn7D3yEZPvMacoBszsE7TfJ +HdvCnpULqnk8Bvz6qrEWgAQt48YwqnFzmiADr71ZQmP1 +8AgPiPk6JkkVtmmGxJANkSMQLQrdaHLjQ24yWU5aszGj +6KVTnk5TjWQjkpG1FdZZb82gkfsG1PQG684RFYMsC7dK +5BLCRAyExDBtyCcQZ1iSFZaNcnS3a3Fgr3bY8KJxa3cp +CFPjrqhDUzUWVY78spByVsmE62hyhh4SnQxUEVnrqxuM +66cohSpA2YUpEaQToA1WkigZ4Zs5vVq361c3RBKsckNr +6ijySzNkAmeBpQFQrDdfGVKLtyhnWMg47gnG5PK13RJW +AbrrwmNUcyJYokbfmomPX3FLedVrNNof5swqzx11ADaW +H8WU8RFph8u1Ckt4rDRwY5wnVwky1NjNPMWXaKkFUQxc +FiUYhcFbPn2Thcr2WpSx6eDu6HZsEUBd1UbYLo2ofncx +5w1ZGfa2k2TRKK2xjJziZnnyteK9M6tGJ1C4pF5QBz32 +74bRAA3P5yPj38ZkUHv2KRiKGgT3SBAsN6n7AAXC14gY +BEb7dW5kXgfRUUJi1M3Kzb1TCQ6gvyECNP5NrqarNxZd +D9pnbVdyXe9dfyHd7RCpF1uNvayhoUDPEn81xGP9op9R +fMJw6jWHYMzs9CiFhniMSsS7xtSYaJLQw2z4o1FTAg2 +2T2dDUoPEQx7PBkGWC3po9KujMjngaSwzwR1fW5tiH7o +2udit1mPkkDw91Nohq5FDUjXHgw2tuGVgaVR3sfHMxNA +fcsPRgSjAXwGTK8qTNm6uignNt4goVzLqbEbvSrKj4y +GPJZ9teWgEqbWg1oHJ5WRiys7yTDYRzsXvWE5iR6os4t +DX5vLhGZQACYQ1QfxS8YgVKiLYsjmMSNcL595Y4RuGmt +RV4Phx2m9SjCu97VpP3fQp7KYtVLAgHaAnQUAFpYr8r +AdxVGT3PLQLTTFuoR3ghfDT8bgKKE3aSp9q3DQAfn1Yt +6kdTcTsyAYC4h1gqyTDnhHmuY1bAbo5LLfaH8PNYqwFa +G18Ci6FwggXPboFg1AzM7SZ25RAwwGJwD1Qc91zybFR +T3jiN3sqFZBBwciis9Y9m4mL1XU3oz4MPuJS9ruwvkw +Gj56yXTv4hWvV2e7HvJ3MWYRduVXGADpfwXwFDsY8qxa +B1zywJkt4itaaR1Kqvomz9zaJkd8xGLqNy3YYohKHyyZ +3QDdaznaaSnrx8CyzaScxYo3tNBn56J5wi4mvTpGLCxa +8ihcxpgqWsprixsTpfCKJKaBqjorM8z7uuRBPiDZtpDL +69P5DM7kNQ92tz8GFf4WrPDC1A69kK6bVjkRzHTUR5tB +B3T8VVfnAJRtN9Mdr7cdAcGW2Esi5kcA66AhhJcaMTZ2 +7vBpU34uMZqdrCAXrrTabACXj396wkqwQkjWfV6Ly9EV +EgwdTdx72rxh5RYFy1c1rRi2jCAwaKgi2QnwfWYKySzB +Aa7brN8ddKPdAgPrT4SPfM7Sow8QtkqAwsBBJdCLphnT +Go7frSxh8drt3LWeRsVQiJx71aie6B7XDzNuQtHJHtHA +9A5n8Cf5tgpL11UfkPMRNhecZFQsSzVK5WUawk5c64XJ +GZioG5xz2Vx3Ybaa1yNJoN6uAkzCgHqqHVfV9XHezkH1 +G98EhT74vguHbsbe1WCBM5Gu9FXL381wprdH5rqRjTSp +7YUNCXy9NmK5piSdb2WtczDVJxt5DEbNNeJBbJkugewx +25kbyQ2CStHjy36GNYTLTYD5hXSkSfeeSvv2Zm1f7v4m +3vVVX33dSo7L7RVnNXjVZC19i46ZV7nCkqPMx5QvvpaY +HnGrrc1tNV24efDh86K8z4fyW6BTS5Hodrk6kg25mBab +5mT5v64y5oB7McFnXqCk5aaRhaZHQvjCbXXvCkoJvGfQ +2AEpAv11H5HuxqM5H8e5X9fmVz5i3AUeySoidbZMy9GS +7GYvLMTQew3kjoEMDoTuELUNLWNwWpnqSt1B37KBjZDs +Dad3QCrbjwivNncbFExVZftqyWZhvfwxpUk1iMDkBXsQ +D5hjF9gyR4oZqsT7H8H9utigjYXfYnoNfr7kpWmfTr1n +2PTN3aeSA7gBJoxFRZ8hFk4u1WE7woA3nqrYmrfJACp5 +23W6zuywZuYh97Z58DuxPr95QrTBdvMUc4GUR4CEiSMX +HpXVkxgTNAyBK4sUWjHuDZonfw9erJV9FNiwM5yXZa4K +5B2yuTD8oN6BLqh4fGXvzovWfX4FgAZC939twpzrwARR +BvSMazNsYJiiHzh5AxPuM36YvhiYytb18Uv6YWZBB8kR +9gr3RQFmtiXDF2JmnBiub7YzgAWmbTHBnaUVj1pzwpSt +7ZWtWZBc2QQdH9UcTLt9XTPERGi5nRRNjrqYiZDFVyiN +FcujDAWXTgfLGDPsYf616xjHR1vSM6StMTHNqyadkden +13SmC7VmVwmmhqRPS9DG8BU2jKen1BSDzgqEpFiu4Qc8 +58AvkCnkVcSSPLVpCj5g9XHjvqkgyQzSbXyEtnwyz1g3 +6Uvat9REWp4VLjpUVmThCHsc2G8WLeEXvpZCHh4ECxkj +RGtCoRY19Jq3pcmkB4EfgKJKWZbxG3tVT2rFqAt7aTu +7jj914oCbV8c7R7EwYexEeAcg2aVSRYxhWHuAgxxxY9s +CwqpFK3BJNMm8RnYL9aysrDwxqRgrrWD1jkZkVvWpYay +8oEReeSPXkBmG5Vbdefix4s6soK12tVhzkyszrbeui4Z +3bWhaXQkqXZJE3HJANq2YmAvdPC1m9dSyy2w2CQJNnUr +4cj4ossQbRXFEZ98skuQAonWtyqTNk9NKiEW6rrHA3qJ +CcvHS8C1PFCqegzaYmuqYK6oy1LvgbArBFiTuyZgXad2 +DbRLjgCLgif6f44TFUpvnbpD1KJWi8oQWgQhxpwQFAC3 +ErpGXFzZmGLYrGoM3iPPv2zDGWGziXB11hyeNWjH9ZNx +8FnGpBqGk7SL1YmREfT5rT2cbFMQeL5mFDPRb6AZCsMk +2xUTrMrd1Vhzas2Cb147XKXg427CgWYVvA56aRMQGjuF +5C8Z4anvBnc7qcVMJcnRwV5VEHPB7DFhVyrW7STZsK7z +7UCTeXBdUZ9vCR8zAEQzVo6GNbMgynQdHJxQWvTzTndQ +DrxVcjU4PxKi6r3cY3uzAd2VXu59PA5fjPqkVTx7k7NV +6sR53HNBacTPfDQTHiKWm5butyrzpLMxuJWbkLnxijG7 +CBm2ofpmz6uDQtN32MhyyWH1GAbDVFCBizG9Ttm35DmH +GDinHmkWthp1NE7xV9Uw3PaKm1qqb4kKoR4wDoGXvYcP +XEzaphrJrBhbbj66CMQsykVcXC1aZS1QZ555iQQw1Br +HkaD66AyKJGTRBmk37gq4qsqa2BCTXZTjBZrUGyzbtf1 +6ChkTRuQjAUtjmTmhz8PqwLrTQqvUBHtgt3cHWKwZczB +3rMZSYZpbDSHRvoPn4Tc7mJW7Y6FvX8GFj4bm3FgYUDL +2HcNMTfQsGjmLrx973ahwNZA7b9iM72LpE5XCx7FPUSq +EFW5xxvQhCftTfBkqJtc4YbT1gc8wiNGae3dzEKpk6bs +86C3L6yQcHNDM8xce41rA77HDrbgufAoWzdhYEgi6iCE +CxksQiEXrt7FQzyNnZ5DgEp1tz5zhsdoYCeYTYVDdFUg +3Q9cJ5b3ZCbeqYkehtdfXV3X1BNbZeUsJRtAKSNiy6pA +DLNAF7S6FpAGUdP9fnmD8nqwcLrPMnm46MFNS5DUXcEQ +D5TMLHz7BXfK6bw1uRrVoqQnsJ4WvRMa7mB9aFU1U7Q3 +4yvb7MVen8worztXTopjTFV62hBwbs8dLkxjbbU2yHhm +5pnB2vuTLh1ChdnKfiAcT6hWLJQmSTwbGG9o7YBnLfSj +DBGxqzu91YnhWSZdbXtbKcNJ6an6SGNms6ogQWcVakrL +HwEr3z3Am5BjyBZrdDF5J7mrstGsu2GGL4n66H3ztogU +5gSukBnLXLdZ4tbtx9grtwgatRjEbm74ifAm7Dg8wd1H +Hpfa1gYqjLdpYdRGs2jzwhfqB7qKxYQT46YrKpfGLdGt +Cn2fp4EmcsS3xooGRe1hFrNAeXEyKMNaYEQdj8EXE3BG +7qeazWhxrBsP9LQN5SkDEYQGKbKiRreTszPVJcN1S6Tc +BD9Hgyiou9Ro59rVzEyZZDoCxAzrhWNygELRBYbuTZnQ +9gG8oiKS9HvM4ccpXp8mQsnDd71rkCQDAjbQBuPrHcL +FoaqT2mNVQa7r8a3aSUN1FspB7RditjqHpqLd6BmMW7d +DDRwwtbu7C2UUeKTM17ngX1c8D7NqCiLra7s8C6a3tqe +6LppQbab3UDz6avCqqtbP1fv21mh1aaSBEsXitAd3DZ +2G4ZqdqxqHDX4vgJRfga1APX95hwf5yyd28fkc3Hkagk +6S86PuvyAiuVZiB31cBNvF5GEwJqb5m2aVMNDRkr3d9h +47gMTUcFoXa5rzsYbkREU7qsrgrdp5EPDajYT7y54Ts3 +FUokezEfCRqB9GbgQVZsRPYo95v4Q5sHRGmLd2vCriSB +4beYvfsmvcawyiQnN8yZn1jvcmy7UV8fyAxm7P14U3WA +cYBdH7DFdLjUW1oMTNweZGqRXRRTaykBtumUEJMVNdv +6tJDtQGaVkyF5ZWdTYprVU63aLeW6WDDfMaqtA6uTPRg +VjExNtksqyE57F1gGBk2W5iBwvo4qFNaPU6QuaPySuZ +9BpMZENH2pK372eGpFwknkQb2KejFgaJj3jG3QdEF9E9 +9EkigNSep5mTWY4nLNVEfmZ1EGaVyzGDUDUNTUFDzh9M +9jUQwEwvcBvymzrmNxqgf53qEN9CeNsfb48bWHBB3ojP +4BjVC2pf7a9zrPgipZsee5ZerT3tjHMPP6pZJF1cQB2J +G3fTw4ifq1SCqkNn8Vp4L9tL3EVXL4Q8BJSL59moMudF +DeTvcQsofEERPF8ZmMWVkU9DnGyNmJzrNAT4Rn3Brww2 +6PDfLuXXCPChuYKJby2yszUyDWP2ABjrAuEBcV25fj7c +BcPUv4nLVALGSFxLyB1VuY63WQnLezDscgWeXQu26F36 +C4ZdTMcB8em9gUX2Vm4TGPyk8ZA9HftPfEvBkCcFLrpW +9FmvCMWyRycyvLyt8mxtuBf4YQRW4sZjBPUWivSDwqUH +9hv3ZTdQakndWA4jyWMDaTRgqUD7FiKKmmSppXxXubQE +2rrSVU5jVbE943GdZ27X1hkt8sfvPu4LQvAPtZiQDJkH +ZdUjG1zByDQqtxV2otLMgPFQ9ydTke7bke48EvFPdgz +BDYGW6oe9JJ77XK5hjcPifkojfLyJPLeu1ZamAMPfkot +9E8LkA6gXYqS6d6uuyQWVhbU6e1rfWsEpVtbqzB2iKrx +FTEj3bxxpbyZU2T5PAtajrpoAEgmMwVpaeaCUXxyrfUA +ESFKY6dU2vERBLvJMBt7P2aRpdqXdgJXJVGXJuU39hMd +BjHsUbGahNhL2wY3csM6MEpG3gVev9zFN5PbZUJvKXSa +89cYgWEMRH3GoE1zJFWMYQZMo3tHvkkNNaBFCqAwArrS +EHSA5aFhbhr68h23tYcDHwZdL8zg7sQCj7BqVmPd1eLZ +EKW3MBnsskUhqPtbRUZtbyLfM8JmqmvNUNJQ72r7eyZp +5nJm5d9o28PP8pV4rse3WvqpJZEAiqzTCVGP4P6GSPgx +6f6MtFd75Hb38KLgk231Yg3RvphYASmoHhzqPN2Lv5yp +LEEwoMjatRg4aEhUyd436oXKPBLg4qPp4d8votKMyrZ +P837V1HkLHhFUWMnunQa9MsJ3L3DCMo9YYiNeXjS8mY +4usTBryRLPDdApA6THHjXJd9QBUqRwdmBtP8evLniZPb +7eXB797uqV3c3DC4rutMryTVh2yrsu345wa5E6biJeCM +DwM6G3v6Vd3ZjXjNjWBVvNATMsuVj1oRg99wfYZ6SXWp +65e8JyPGjBEwzgymNq5khrPcGuxjr7j5KFZBQM8YPkWx +3Q9Tr8Ymf3eSKD2gsr58L7xjkq7zwJp853ChnenWMUp8 +AJQ4V4ECxtFmnGtysTi8wgFqT6x88jPDGR8qtUrh1KbP +9mgYNJjfZ6WJgGhW34wBrqGuaw7oY7jGjiyLLFALHoJQ +DNcA5QSnJDTQVQoc9xmYkb4ba7Rtoy3ECE8VcFixPBj6 +9deUoBBhGMCC6YRW7wda7rpLZzoweR1nSu2dYMfcfmjS +3LhXgSweV1xiUGJqFZkUyuNKjyqJTZutkUrsApaFzkff +9G5x8N1gehZopUe48CMpnNpMVoQwnv1D6bMB1fdwE2Kd +DApaaTJRxLzwT3eePqdk6vtr46jMQwwdirLfFjo4383d +25f8G9ZEPEgmx6zkPgnCVbmLw8qbxHHgj1eXJmdniXYR +HjYB3xsGXjTHbeaNUnrXiWb685SqXqLEkt3kgBQSy6Pu +EMVJWzhhV1Zvz3xVsw9vcp8pdRhaELU46kn6mgTkQt8o +8NvNxAkmZN5NFRphVxzuL6yBpQYe889V9SJSiZgWqZJu +4ZEn6bPjSxypKEQ7YyWWy66amaKsXKR4PknLtZhmCVmN +ESpkozVR7ujjitVe23hny9YsxWDWB5uyu3zq5eyrPsSo +C8DGtgZmo2H2iKuNsyEJYe2J8DhJw6SyUeyhZLrL5UJk +HZz1nCqophf7Rnc1NXNVDHkkku96uJhm1hWhuziBUnpR +7S8oC4pKnQfza16HkkJYmyDNDhUzsg2k1nq1umXbrC36 +7qSe1QPhEkLGDgp4Zfy3PT8qYZDi3eHp5EZBbkvUQrGX +BWyFTtscrRE87ZfujMqvLVMPGynBwJuBvze5SKV8mcxU +GjefzdxiVFJjw5gykeJu4Fq5vorq3WJz5ruC5b1z8Qqp +xZ6kFkAEcdKw4o7xS4o96d3ULN7ARqiH6PqJfHzjxdN +7vUHdiT1Yi3WvbWE7UKx5u1wGCR3RP3n7tSaERWUhRat +2YaJV8w2gtei9GLYH9oBLGmhHsdBHJH1F2P3NQxhqagQ +CP2P78iKGn4bLHq5VeTvPS3ihv81B2o3DFbH3jvyhz7q +8wUEiScGvvHdStTkoGkRyh7cPjG6otTQEjXJarJKJ7m4 +4DwHBFbm3pE42TgGV8JEFqA5RsPReJS4YD4mEhr9fohd +3ac5oP7yvi6SHjqU3rmYBMYaL4uxgaSQXpGPtE1ZziBA +CVAQeRr8tV1gQDKaKdQm5GwnJLBiqx1CRJubMauSeSNu +2ZcYybap4k99F5zU5aQ85VE2PQVQfmRsmRymjLJ1f7LG +DVRWaQ6RNfoZKtMnRWS6RBLJoqz2Ypbzu7kpUkPEnzbY +32LftD7bCxPxb6xxGitWUuQSzWazkhWDZetZiTdLDMHa +CyqMxQt7bdaHLfP18waXHNAKhxRyq8x5QTwPMRyKyAvf +5YMGrE8DjrwQAiuv6h6thnRrXfL95X4rumLUmZ5VY5AV +B1ExSheBUY1p7Kpv4NrZZLgugh5N7jwbzUaQAU49hcy6 +F2FUFKyGDrZpSpQ5YbqXkKTnUf83orXUkrXVFxHiY5iB +GoRWvwy8zcL8VS7bfpnq79BLBX1XhTcnddjKrRbP1A58 +339cbxs3CtkHTBPhzhMFTQ1k8SdPPokg6MQqtE4afB8c +B5Hf9g1ApxEP37QxwVrtesqRN4bDqEhVbv1CuhWBPLzm +C833RtG1QzZsfVCHYRKyFDm3v86gTATGahJdahPuRi6M +GwBHUgbNNhq2FNLM2j7d1DUZmEoAGNeUSK5TcT8Wjque +GUxUoky5cytVRaqMKNfKu2nLqUFGxW7vSLPoYS7LroSQ +2CLpBGLD9tiW3YWVXNajNENZziJ5hsPCrFBh7HjEnk69 +2ucZqtodYoUgDNFJwNqXHVVo4oDBBQEXPRBN8YttfgfM +6YgtacFpXwgeZEYJfAfUm35NTMU9LEJNVTLjvyQWCrFm +2sswthZf37bCm6PRfVJoPexQhejLpd27zZjmQ33d5Qkq +HiQ2nyQnvqMcdEZ3ySrrkjkwcDbMvEvKzx9bQGtJGrAW +G7pMT3Upbaiqmy4e91ZeFKLdSQCGK4AnDQmQVnxwe2YS +F2BE7iYR9msMexyCaQZfbirRnBRZ7C8smcHf75NAV2Kd +EwV48LST1vP2ehWJYWNzQXAZjGDTBT4PVxia2mgJGM6e +H5QBLLLaFFr7kKAGJn7vYwNpSuqADLXfLnt96GGy9fVN +4BF4shRtTX7wtewxuMrHTRmfX3h3nPVqKgvV9UuGwEQB +8MGH6jcoLC7cxsAV7bse4sWVyqDiEK41DimYRAwdonxA +917niQ7FqFvWj9fqCTaZT5wdTGDeJwDz5AYdnrrLWxNt +442kL8wG5jo8CiuBpe6MLvCUgeTpLztERo65VJumb1Qa +2yNZoEjHRVg7Fppkk4kCbqzT3pQH3pKDXy8CDSa51vFr +3eXSHDMhNGGNrfg5rptfBCtZSnC8armYdzqrYPrN9u2s +4w6kQWiXJX9CENoQU3kpL3QPkJDPqTDruUYzGX8aEvaM +BgtFMYaGaeoB4kDfryPgVDV8QGBQGUAsZj3aHxEuB7or +BYWwyjoWe1QgD5uQU5X6fneguv1uBvZ7oKYmZ7FZj1t7 +Ecy15VFaCeRaciieSgYjWm74xmVHrsqMBTcrftDKS3ow +GqHuogqpYn5b6njn5ozPV1tsfDft1Dt3KL3x6UnJEJDc +8a1uNTBDk1NPrFUwzEBwoTtPGJWx4EkXysYwk1xTgf4X +3bUSyKLKvDg2xMtGdFkQoz15pkiwEiGgZojwXMp7fCXy +G3cmdmYuWMXvtmEcRJJSVNErwRAH5bKiutpJ7yqpsq9h +5pr6ZgTdtRUCg9VV7i4UjScekh5RRaAa3hbFYdFfpp7 +JBaSgnEoCmdra4kqFnL3SWB225h6b14wcUbXdUJ85WMt +C2DvRHcyNio6Pe9dMB2fgAmjaswmiy1rV9g5a1PVvgmE +B2Hiw2kL8E3mWnLnNZufiCYJNmwHtC48hcEEeuVtNTnJ +9HrW48MrXfHSvc85t3PWXpErjk3hKSNMgEgqPg6cCspt +827UihK12fLEK1xY9Rwig2vSGuuCjQCxMUwyWYJaqT5S +AnD9nvjh2VpPeoDXkzWZ8vQ4B8MAq6TqvNsNYNDgTsN1 +5vrKiWzkPPBoZyTY1W3heLad9Qh8tggCVkW8KUf26nyJ +7bA7mGdLa6HHkPC42Jx98c4PbFeUdrBaSnyw77tS4Vr7 +DEA5FDnYvagt5X1uisn9Qb5edrk8yda1ZejZt4sd3M8z +E6yJusdtgP926Aqo8zi9MR6A11gmBWHenr5mEHX5FnY6 +GDN5xgdifpqccGX2zB7cuv38KHdTKjNToBvYF3oP7DYJ +4GzZ88d5pnyCQnJsEZL7fDKzraJ63156TNpAEPkGYKP6 +5umeoLkSaNrr5K9Y3M1zLhQfVpTyagc4Uq6FQ749So5z +94Zutk8hmWP4HNhn2yowAN27NfykZ8vQ518bkFnnXoKz +3UwPQGsu5tSGUUHNqU6EaJfTNvUaMnueYgs9bMmtJ2kK +97iujFRh3KzR5QtyZ6PsM8Qqtkxb8J18CUyJ2EGqNgC9 +8yPGoDvMmRdKWisxQ5sjkDxKMGuNJ3Wzdn5Aq4JyBvaC +Fq91vzvrESWoVCFEpkHRzWhGfL5oTxVCfQRiDKHCkSMP +8nyzaTKev1hS3SKY4L6wi5HSGTHz2acJDezh4uLNSzoZ +2SY8RotEpCktrcpef97g6DThBmJtYfYBgA4KCndSepmB +E2gLdnW9ovWmXcBf7TEdHXcfYJQZEmzUp33z28cuSYXu +BTmw8XCf6DVSGn5daEnt94TwsaCeU4mwRimq3ieMfyaP +EN8L31VpEybPLhMFBUpJiEpUxcVUWBeYctJMc3LcsZMA +9ZNu6wu6Zez71n1fh4fnYWRiN48yFzMvTPFcm4q5w3gd +2LML2zYNXdhvtx1G2eXug6pJjvno7wsH8kvBabJWHAhV +GC95jn9hqb7EU7Kg5yGJQz6mJmvGz1bLK1Bhn2SdeXi6 +55Pkf8PZQaDysC8riPhyttDGBfh12KkwHaRPSmBXUkK +4cTm21Tzr3oBtnCHPRmsCjxKGy2DKKdAEwvGN4RxCyg1 +HQGQREUma6fR6Lc4uSAyEnxgGaZ5iVjq7eq4PwfDCALe +24BcHcvo5cuaKpzzSeohszighUedNPXY7hHu9FrWjVAB +H9rWzugjeumiMgakCC4Tmv9NBWWN2kogqrxK61pTm8VZ +JAaYUp6a29StT9qY9N65XCNwPKPp9nCtpvPK9HmHkXte +Hf2u9a52opfKkreJ8WbFKhFrJ59eir3haDGNoDrfXBzc +FS257DGwqKrHak1epEm2MYxpQr2mEii762Nx6zqRbduR +BXWApyzyoWrnvwgqxZms6BXdGA4WtxbVGoi3Jkijdvgo +8pzqgQQPEPuKc8Cyzq6x7U5CBnBJdfMiG6mwaXakHzQ2 +77CvK1EhAB4pQQkWf74weoLAkWSC3rUkuiUSrYwNSfQr +FWMCeY24sQoWNeiEpuTGdgenongZNc71d6ytVpCzVe3b +DrnWqAebtnYceWbzYcPVNQaciLtnCzb5whWo8YPY38oG +9ukjhiUzT9QvStcm3LmCkmR3d3jxKJn8okd5z8FAbWsU +92fRuuRSXhMFfhMfmBzg7oYYZvBbgbdEHsa1sgnCTsaH +DEQNM66ewAACLZwtXRohMCSUSTrzqjYhw3pRanpD1kCC +GqF9KjjfZiUY9UWFspSK1HXmYjg3mXGWsRMBLPbmKfRo +CNKPZLFawgybQPt54EsQUiqNXJj4q7UbiNoA6iAKXTDo +5ZTHqBoqAw3h5d8pE3dK2GwJajbXQpQukc5dW5Qkzw44 +eFZtf59KoFNG4ZWnYxKiEbHnZyaLFbtnCVMpviTf4U7 +Gh2XjfZeCR2eYgzCC9GF31vkYUTKCaqdWwfs9tPuBY96 +2F1qwVkMyVXyRQKKjdBMhaxR56misFrHM4oRzyGNMaoJ +83RRdRaJNCkgCU731wT3MiGrawBM4WHUAbyZtYwiUpWD +6XqT8frK9F2zALr76TejaWifmadog9LZ5fs7WGehTLGk +4SXfYDyLFZRX7k9aQkmhbQ9Tkbw4dzpUWJx6KFPYnR3j +yezc9YkgfJTd4NLJgWaqgU5Q6MQPPAV3nmkv8bshCSu +EK7me2eCvrFHfphuamTzzqTEuQUfVAd3A7zN9Xj3cRBS +DjMPsWFRQdqenhX8tBrJ53jZemfMUJ58myBLFshBFrTj +ffesP7FUELLpJHRtfLiauspDPNL1enV93uS5CqC8fbu +6wbsDWD4cM63FajyvuC7UAUq6v4oS1Px5bgWjr5dg4Hk +8YheiN5btchiLuWP3Y9MX8RUgYFrs5CSRFedCJtCnCUp +EkfsA5aih894ZCigzCJdanRxdNcHCysBH6nnuCTE5mDC +HXn27FdjcKLHHsRDsPFWg4xStZULrmAqhoNBvsCQvufE +CPerjRPGWJtR6xoUCNQq3dgh7ATKVD34ygFEeiiKaFQ9 +7YZCB2tAqbfpx2gDvQGL3eA8EHGCADqPnSXTKhSQ16fG +Cfho2Yo4jmhByggBo8tijCVvF1SperBAb8gXhx6qMrny +EJ5g2eHvyGej6U9FCnngL5bwuckvDaRRW53dFiXB583L +HoM9iCYMTM1aVBR7vWTpdhvY9LXQgGNi2AsfdojJ5VrJ +D37L6CvbjskZd1K3vQYbBNtDwT4gFFCTiokyBb2bqvVT +9sJDwPv4B8pPRSY7rpY5nfJmQb1DPgN8VCSqNSqRBH5F +FpedJxoW4LVLRAVu5K5nq465hzSrXWeNYQu6sqpece8u +D8KdHXFjNKmgynZu91NoF5s1vWJuYGF5cNhKpXtKY74g +3d1Nu2BLk2Atvhn2a1mRCgtZC2VAKmjWQZb5P69Qe716 +7jxp9jitujapiyGRFsscQoWKNgFpKC5Pmkx2gwFUkwNZ +94SWUYC12BvUfcGJ2TzxUtQXEe8H7gSdS8XkDiVrqMP7 +2DCrqC7FQm3cscSZmeeshk5vjygBudSvwXE2qn4JdHJ4 +DyCevLTEzgzeP1EUDz8aYam2oBm7uQSAbZJhikLLiEso +7iZHDeFvRxLFx8LCXqbkL6rWAkRhFduF33L5nbwu7w5k +CdECLumhAXoiuZWdb91wNXtPiSFNgHzeWqRsFBrXmdKF +A5zJG9473WMqXK9NP5QCE3ZPPaWfXgmNmzykzhDcMnoR +HXA9UCw3vVa9ubbJATVyRdtdzbicDfaugZK7JssLJkG4 +FHTYY8xoit64r5JTxFLjRJU7z112Y6JBWoq4hvkTuC33 +8kmVtJqjbAxgSSmvepgjNQW7P7JZy2e2jRvmWwm72nr6 +74BkXd5oKEKcqGsZNKhr2s4xxEzPAky5z6q7bNk7bEqT +4kuFvbWs7EYT8cJxcZvowWdmkYnD3hYeLjRSYawSq2KW +F9HgTWWejQv7KxaLXMRiYwd8B3cxGKg14k7mkrGwTg98 +6pVW1qNiAivaW7mUFYTfsqCyQSttgUN7DawKFvKpmJy9 +Bj81R3Lb6G7zJkGqQthaTbZufag9NKXdWYwz9ZREdYSe +CLeeMBVB971xbfuwhyGMND2xjMUXuu4W7xj9TnwhrrDW +Cmsncw3zLns3zx86dotZo7Y72HpUo8bQJaS6ueof4D47 +Att9twKA7wJfGdTQmbfCgcdM7reneuSoAFFjzhh5pSUT +6aRi51xAzCxWSVhCQYVxbaoxyjTRqHaUFaEockXgd54e +9rnDs7zv3P7t3eebVzm6ztR1VZHitRfzUroVaSif2gQ8 +EdnPYt16d6dYvmBFwDPWAqxBC5fRt5izE6iWC6vnfMzH +Ham9NZcf3mEVkEhg6w7yZu4Jrch4rThft9zW2Gomqrxt +7dikmzTCP1mV9VGMGyCd17RCjA1jwVDXmWAtzMZWPhyS +2GJn3gACPUpS6vC4tEY1QG2Lcz5vPTPuhQ3PAyPpd9h2 +BUp9dhY8vJCLGptfMbF2EyJci8rJu61CHfdVPHRLkpsQ +3sSxVNDjY6PyXr1aw913RYSqbBDKS64x4ep236rmPvSU +57UnJk4cSrKx2v84xhWw2UvDQVXXWrrXdKjzTpUm8von +2FhDyzBLxKsgYtBjxUtBaVkb47fKHv5sgeY7oXSgqhyn +2Ktoin9ksNSrnLa6GnnG22TNBUc3EGi2CTJvmQqbiofs +GuMa2uttkNo1RJ9zVfy1SZxNwE97McG9MzCBVMHGxAtr +XKYiHMSQdJiMNvy7hsi93Fnw3sTbvszXcbvkodLwXSY +6j1essvST5hp3Y1RQF1R9gA8o4qnSAEZa6u8WNnpXBeM +AaXF5DAo4dKktYzGiLvv8BhzbP4TRSoCEG94ub9nQ95w +92ihcetbRea4eDS7NsKrSAXBLvBBbKJzJphYJXYgmZn1 +7vgYgzD5VT2qWDqXpfs1XMnGt1YQSKj5sZ7swmtapNMH +3Bagk8YTYHghYjm9TVSAXQHdGBTbd7BTD7cFz7onAcDd +EPk7Vnhs5GqNbSmkGtoMPQAh3QipRUuLVrtAbbwubrH4 +7ZsSf4JzoDgbRvJtX8iZQyWxhp9YCvuN9jsRSMmXYMXC +CZ6jyvE5nVrhrzVbAMVaFjvq4b9CrtGJgPdfBeboC5Mv +32U7ugFrS3LXPVCbLz1kywMCwrDMhyCChTEBmyGVSoVS +9HgsV5KFf3GyMLpZzSqFuCCmPpS6xAGwtCHBd4RK3M53 +2Vkaz1EhPqn23H7wp6XaKG2ro36VLTqhzzS2bi4brucT +CFyB2FVQd5nCbaDZjtwSbMhxdaa9fpBbVeNRQTiGLQtR +AF5mam4HDxeD91m6b8SdirPG3kqwWFpMNLw7XPKWoghD +E6wc418QAbikiaXGWZdFBZ8iuHjinEAtFzRywhUkib7Y +2CnBSXT3ypBJdHXnaVspNNoW2KPzCGR9U1AmRGn2K27B +BrshWWKbd38cRj5WZwkmbztxjSVeJK95HFMhWJJUDqLb +54HqTaAs7JMAhFrvaRXWqSABwXZR63SRGxn5HKHfNEyK +DrUEqWZ4LupD4jdbwn7raWNmg5rfBRDYqRC6yDXK79it +CAiQoEaHLDhw6gLQTHDVgX7yqXe1PFn7Dk5Vf15U5etk +F462yije6YtJ7wDhxU4LTNtpBfsBXbTm8FkMZbgBDWM4 +B8PPBpdqCTzxHQy5VHigAAsjkxwdpWmraP7zDw4MJUzG +6vXtmAokxgezxVx1BFcvKWiqKiqxb2yybEWtwbJTXKQq +89o93t2bhrDbUnknXoMUM3EUujYFWoeg5BvuTZTJNYrb +GaR3R6WbWe3tmSmkhDYrXa952zfcPifagyRKqmvZDtHL +D3KPv8jfhDkv6FzKMQPHsu2go8d1vtBEi1FqwUf73TWn +2vysYS1Fdvppg31BUqAUVZ41CqbSTHWmEC8kUWgtYK1d +HHZP7mNmaktX9QSMzUuWPNoD9c5gxNDz6Ag425XJ9JHa +7tbfqz43ffRRz7T2v6wTXjbg5rJ1YVx7JkgV5LaHcEAd +FW8gZB4xPEGKvzB1XVHjJyGY5Jw3XTiCBBkE3Z3KDXAi +7xVrjyV3oP9fH5PrJFVk9fPbsmCUeu5MLD7atTyfkNqF +Gyn6ermAwmTv1wTMHDitSxZGeDEHHWhrHf5bSSeYyyXQ +3SSq6GZ3RrBPSquLcqxekrv3aG8PkXwi5DP6PKAXCEVf +DEwQiNE9iKzKSf733iPMHetYNYtQpxoe3pwBJxMr2AYL +38yiAJgaM4iyn2cb9WtKVDqTAvQKLPQnQducmv7SfYsT +3Licc9XjWQbuTHfz4MWQuLTHCyN1khhrenmZW3AUb3Re +CQpAh5pJywkeGdwXCcKWaG2y2xFkRmwtJdSw5KmALtzp +4QCZvH7ahGiWjY1W87ZpwJ5fMu13YoUfgXyGPUZbvn7G +3aDDwQRVrVB9r6UfW9i2s5J9hbcSv3S4QG5ksWLspeN9 +HMKK9z6dDmZcpHWXy5CUmWmBunH9fZrBx2svFK7dhK4D +BZaZJwsd3pBifihomYNiygF7Gj1QXa9nGJGfX2s1bAz3 +FziCqrZnA96RHafgCb62RmvKBH7mueCR3Qpox55zuyr8 +JDEaNG9ZsZCTmqLSZc9Grg9URBCgALpScpfRrPpdSAfJ +Gr9qm1MkGkUp9eNRpumg9iA7UTm2ESCasi7fLEmPga8A +FJzNSnw9KrCWSGbDVt82mAS59zjdRz1zAgD88FXuQJQh +CKwn5fGU1pygjX622djigvV4K2wWgmGsf8bgAnnFbf53 +uEWKpmARMxjp6JBe8t7nBJPHrUKqJQb6taNAHKoiHzx +7Qkv6DsQb1anqBfxYprBfDH73UhHGfGAVKnF8QBbHhr3 +88MvS39PWJHXN7rvQpiLEnGGs8Z5qKuuiCquJjKNBBr9 +GuMZZ6n1XkQmM8DqGbomuRMdQtGY7TT2Yip6GyGSeAFa +BwU24HngdDvhpGBTym3hSAG3Uxkb7WVBn4ZLzz4Zxd1r +7ot4f7yLgykHh6t2FdDFkdQzCtaD8C4N49citn4VhXmw +3LMf3EoUw89zwuZuibftyu51DTVK1hYeHV2ez73dLiVp +nfBFNvxio1ghKuoLDnULgvtCKPhC3GGV7XLz9dWDH93 +GLaojfg3TR1jcpofzSjBPTW2oY5GaMSapB71szuRyczp +FPwrgMSBpeQeBgkhCcWs5NVvjaohQANmHhac4HvN6sdC +7R87ArcZogvHG2KvM7HxZKaVYFv4Vjuzt9qft9qVHzot +H16Exw1HiMDbazbZRDFRrWc4MVb7MZyeACMSVBMcwVAS +EqouM3BfDXCCq8zNVnbsw2VRpcPnK8P1uRFgaqNpz5hu +EZNSmp7SvYkC81Ffn7FJp767XvmPnnfiq8yRjKEPd1jj +3EtFnEXyfMCyn9X2LrT7PnF4v3L9QnKpXkF94bczumSm +3XBxf2F6RrgRzDPwM9hYawzAp6Ea88m8AFJFUoSurLXw +51KvY9BzLTQQiMoCyEgXVCEAMnhgiUyVEe5SAun7uaKY +7hgBoVGQ4H3e1oZ4hJFTut57qvjUTG1uYiNTmTMfYCBd +633AeGMXmymzBfwPc5aCqRfjRDdLqriq6vQgAQTHEMom +bmWwe6G8gTx42ddHATJYHYy8dt9Np3XDhymnDsZf7ro +6Z6UpTGYWJGRdSPbM4KceEZCb9u9LSYpKfvakixiNU4o +H6CSKpTsrfxvx9z8rXakWXtgkgvL5SPcACZEwXTEccUG +JDqEy12E4eQC4KTyN91rettXStKTAky5duWEbxiQ2ciG +FnPpM1HS2KBcDhN4vqFkWYy4X2GyVzcsZVEf8odnkrEb +7tENUP8J9Dd9jHshBGoAHsRA22mS2zgkEmSWouzaUzLT +FpRZ4rt3tnWEHixxGyaew56y8AsLA9FvpEzYG481xEnw +Ddpn88VFvL38f1W1mxyWYWpUDQriH1u3mEp46p8cLSHa +67gxNKARb9UEeSr6uLqCkk79PKZWquSHUAfEJ25SUA9R +2sXSJjFPDgCRKGmSjMDqFnk9eCPZMgf4Fbk13zxi5TKh +FTA1avPcpSPoeefumn6pMGb9BkJsVybvMvWz3Laac7Qo +2x37pYE3f6FQiDc3FRoBAfL3Gv84NcKbDHqtU2kQUkLv +9dwKb4T6ms84sK7gQqZj7YeJXpcBeB5Xd8cT3osKAPk5 +BbnBC9ZE1Ywuu1E6TutWy6Ya954i4wG3ton8u9H8oL93 +5ndpbzkL3yVrR3ow5McD3aQu4sqr3961kUYKJquzadsT +EabD2bCLV1tjiXr51RQdbQdq92N6Xhe4Rh9YP1CrFFUp +BWFF3Lk7CtZsQEV4vWDerKbAXryuV3uEN85YXkJMGT3m +6XqoQcenTEW1rXjVDpAnSRB92a5YZRXg9Y5RXuQNkuxR +8QstFxvXmyxJbB5Y4pcuZ7dCmwaL8pbuSzk4BRfrva78 +2q2zfnX9eaNGZiHEEJyUyLcD7f1jWELi31RohDHjtDwH +8mr6nEUQ157o47L7ZsVBmhgN3xM9Qz4pKn2nmpg4Hasa +6vbkuik7LXXFcLesMFC4BfTKegSqEpRB8rxsebADNgEX +2AjjVFAEtgDhFipPwCXunEwa9YXKXufMXe4LgAU9CWJD +DAFs1BEUQbv8VP3b2cosCrTCg7hVw9eFaYhn1u6tWE9R +BbNeVwvZi6BvLJ6mNVTYb7Bcbb8oFttFfeLA5wQ6cTy +8PPRxGuqrA1V9yK88bfpgc4SEyNrLyNhTCQUQ4fhcVQw +6Pmho4AAPvUiZvyy5v4E471jeoQAQ7Du4g9sRhyRa6D5 +EkEH3chiXEEL5wobWoB7ZEQULEYtv1nuT8uSM1FoyxcX +85n7vFpysWwxX1bkaVXSM9FVh85Peam2LiJ1uBChXquH +9WeFn8LBpDoZpNsdSqhVdyYM51We1RwA6FkzjWDkEU49 +7pXiumaKYnh6iWh1PTEbc5tutvm8MDu1hYwuFjKT155s +BWdoqKXbZzvzAAunQHRHeyn6gNf6R4WTNHgMtJHfbwvu +7m3ddBb5f3pmTjTBkMJbL29juy7ZYqbNs89Tfh7oLacN +GgdpxsJ6TuDzURBDsmq6NJYcZZtTw8X14nA5ZbMedDXB +Jj5XgHHo2cNf9dyeRTkWQp6sUXuu7ZfgsbDjoimPnnd +AD6wiqt6ErorZvoorJLA1gbwicCc2Xqxbi7eyhbHcbT5 +EXa94LSpQFS1pbtijtpmSMMrZ4kiNpamGR8DZ1moY8JM +6oenC26fSLrkUroz63pV9kiJcaghLsT1sLMTxhipeYGj +DGuP7eBTTRLUkXv9PuPDmF4sud79phb1xpiXe3V1sUTh +2VFMaS8apDC5YpaMhDMN3p81w8t9JsjGbrCuCN9eTBdC +G9F8bNwHn9HkzWxg37t2JoNQooY4KksZXw5WmPM6i8Pd +4TpnRoBeMrCJX8tZZNvWe8BScSsPsR5Ezy4pEBztkg9u +Bm7icUbSjNpDUha4s5kTH9z23nuGrnHXFoscZb2utvcL +43qZYYYMbqHLKWWaTEwERscaVK18G6e4412xh4BLajWT +BugKeQ2jXGygVTGBqscFL1CB5FtYzkJApbLqvQ2NZpsp +2Zg8z5g5Wg3WWq58UdL5aWrEAA9ZULdfkeTumt9eAqbt +GQbjxz4DkqSsTWgP5oASs4ReBsaY4woUhbNTWBwaPH5T +BmURR3RdxgUSyCashjgzRb7kHqaJHYc4P4QvZtzBKbCy +7EuV83HSYbu226zNhYFvRioB3YrkiZdSK3ipeFFXa5Sc +E9WHFWPuVtqNBFMhAjjjvuexNdtQZhXpKXd73ppJF5jc +GT2uqz939gMPNLa3jNqKjXfJrFTuv9dmihZ2iZPJhaP3 +6v444MvjGY4iA9uzS3s1gPQLABrGcNYvh5uWFBMkWoyw +474U9ikd1fDEVTd5bGoit5ZTPZytWGdqdmiGH92femMw +CPTaBGRc9ePPh9tGoTmVHMRYe979EmCvdVRERuRGZ4nq +2YTiR5YnDAL1frpjZxH3VeXPLafYhjU338JKBqZxEtUU +CXjSP9iJ7u6byh1nwtYi3saSQDnRD4bhxSR7CDWb64Mn +2xHXz7dyoNUjeXSGgzyUbhEYDDm7TvrSWUx5FL49qqb4 +Dx9UHJVDmiSEBoWqea9T6j9CfnEPBf8CsMyAS414cU3v +3Hy4YsHodcHTpVR9cKd9ZP1mw3mi6Veb9EhxL6XkcnFH +6XCEnN5CHBctsTnoi2GTmAmJM9KTiafr8ApGsZyZwx2R +8xBYjPgzZnybwXBXgL2RidvSvY8hkqDFkDCi4LVfZcnT +4fcMZJMnyJkqwwaYcECjXk5BnocMEZLn3DXNt2DTPgSv +6JJC9RoRqVkZtJF8R9YUcwNU5Mb4shni6pQCX6bfHCLy +7ZHmQkfV9mHFQvVKEZXjKd2LENVnW3wTdcbC4pc47ThK +FZ7W7iZ6By4X47zZDhU7vuWJsESLYYWqTB1FgDreCACY +FwaRoAjZS2hASZ2SpPH3CB5Xi1xbzVajYFNNj4RNVMaY +J3Vn9iLQJWcXA7TFmTsycSnYZavzLhKz8k8js5cfYADP +4jfg7EkuMijpyQ3Z29HsFSsTUUmzhgpcZbFzQEuAJ9cv +8UeRzuG6u8LbMB8ymHm5tQyajBN97zPGCTBJ5C9Jp1GK +HsagEeVEAjdZPg7fwTQLVHFg1gCZPRpnqBQzCd666C6K +BwvMjcQiiJ1hfZWtvoY7m1z3ykUv53ToBEwFUFYdZ2Ws +4DATo5RMVvKtpwN6jC1ktfys7kQjMXFCYRYxvdRUADKM +6DiFEMRo4ksEUQoanJMyit23dmFGKo69VrfPLUxpLoRp +5nvaKytvBjxzNpinNp1TAvgdg3DziyLHe5X1n4jeerNr +1c8MqzH5yY9NU7LFycXBP6nsG3Pzc2zkdXWYZYMSCKk +2oDmhtjhkF1b4YKoKQkM8iKZceWNGN1yWrPL6vfy5d6X +D3TeRbRny85xuhwPsARwFmfVzNp7BbWE2g1WtANXns9q +rcrsjhj6JYhaQNqDrNoQKkCT428JG6qGL4wCsiommfp +En6dPPs63nzxUMz4m1kwARPGKpDZQTxLkbg3rsXV1emi +B1e94iXENQ4a3AHigL2rh7fpnHXZbQ5N3q5YaNQ8mw2X +BbLZvQntjPiFMseyTpMMjK8pce6bDANZpJZaAJBufRvr +633ds4w1qpzg6a18wJuKuq5SHA8b1BLbh2d4eLJMJHNM +4xMXTtZ1isF5N4nGHcskdiaq1ZwiXXTXPDgyGM9hREcZ +BHMeqn5eijqgwkdoKs91oH4YsowEkSQ7tvfXQzZ2m1w +8ebixx3NAqxmAZCjPfBKC5tAzkYMEkLJpmTtoZ1u429q +ESsxhWs6CmJch8xCNmjh3brRwHkxam9ZxuQk8sVNQ86V +C3cmTSvYRWkCbAhsfbz6oh7dMsL4XDWMmquYKzdHm6L6 +9YfWEL8TySNddgBFAFrWqzxWYhJNN8cojRmuy4em1avD +5SPF7YH11tt3RPNog4uVQmfhYnqjWuJ99RZyXhgCkaYn +1Fk85MTujxSj9iPpKRQK2H1ZUyG1f4XCqGdyMutYBjw +HJGCZ9Yj7mMkK48oxLjYJxhC9WT9AziHZZ81nn6QZhUL +FcWUPYFCyf7Vo8feNSwYLhouqtTPberX3FYFBxi1tpZK +2rqofvpty5sbeLj4ogqesLjBmPnYGJLfAu7Pf39JULpX +6MsaxwydCXgVdccTXTLzojbuG4bfguVhXLwgSJPNbTuw +7vDYfeKirTgAZB5kHifTAsSjuh4pPAg1mirCPSfN1JnX +2STcGW2Sm2TrdYrpFZy78A6L6Z9ijDurBYWC22LJWz82 +FU8SSJe4R5NPxgkBT1FzvYdfATKc4cxvhwymX2yRtpjG +6PBfnYWyGYjnuATaesmSdUQ79fzydjDAbLv7dvekvbcH +Eue4LbrwuUhB2JUyJANi1Kp7XsY8BfoQL4uj6cYhTSsF +4dJzGjgtmoFQkH8n45pK2iYsknA9Pz87uJNRzEmb2TxX +5WYNYuaoumHrBpWGVUirziJQL7SGA99W4FjUAZRPaHdG +347w1uXzw3PB5mA1Nd5SJc1FdwJxgpwrgiFETYQMT28W +EtC9t1YqtFusUy3YvQZdY7yRQMjwA2h7nhZj8EGiroGT +6mtQJ8kBADFLg2ou8wD78m1ecNS2PYrn3fLsYXvWrsLY +8cucTXCuvrPDSxfBa9QxYnNtZi1a2df2YdXvmgtLwTSU +2ZsUmBvCBv38b75Lp1sbG3U9mdELT1JVmdA1cXAkAGu6 +7sNV5qDzvBe8sd8xyVxTCAeJ2S4RRBks2x2nnpb8xfPj +CTnZPyUkvJ7a4P8MQuGdZ2tdppj1inHCYQh7NTNbrXYk +CJ3MG7T2tF5hwfH2PS9xXS6jspPpqxV7JAe7HNYBXfT5 +Fwf2JvHWG2JV7ZLo4aRMf9GMmw6ung3pbxQUvjsGFJdD +GkDrzjCy24oULNzQfVH3YbK3hdSkh9wjj5ngNzpYwiZN +3HcXs2qLVmXhdhtx6GANCBQkqzYTQB7n3ySxjYzdvDba +X8iZm9tPBSRdk43AHFrE1YVT4fkwshqcbzWDA11UFy6 +Be1QvHSmSD8zJ4sUHU9ZqNsZDoQtFp2gxFhk7anNd5D +C8KpUHseX1eErhXJqGwqyCyDxwegfZj9mGEoU3tifcsf +HXNEQoR9BQ3mnkijAZrtMSXrnovzQj4gzRBzHauzmJHv +AdAUFauek2x1bokDAon1L5PjqZEtwfEqbRcB79nZefev +2NgcTRPY2WpHrgCp58osfmiWYgXCr5E5ZqNvRXb6GrZm +ATqPrp14tEqzD5zwmd8thDCnVoaU8wA8qhuyiwP6WXo4 +6Fa3Bkh91VDGiY9wGEjMC6sA8VWVbCFXDU54DnS5H6Bk +C89e3gFCRbe5B8QChojGrsyicCFWsJUg5TubGyRMHS2A +3si5TMAfjiVM35dD1NX9cDoXQ1SaJgRpM1RAHptNibtJ +7rfKK6ZoWaLNgxi736x6CTDwpAi5k17osMGW37qSGsK8 +A6mYYxApb2yvz5GtdiMNF463VTxdmam91uwrXmM5UuVS +ATJXmeHQwpavxpBJiGUk5ENTup2LX6jVrRzF3yYPHCrQ +BBKTWaBj6YXWe9rHnVbybMNKwHytMp3RyUjbXNN8tqVG +HP6HEz9SHHbwmLB2Kq1XHWJRtDHi2EwjnmG469Ssd9QN +8cCqWQ811gQYcrjsks6kjUrPGuso6XMRQyfAW7gFRusn +6c7pf3qtqAr7c8JPnLoNPLKC3NJkbyujUtW1kVY71Qsd +HfCJRsN4hLmtFoLPTovQCAke9yySaVvPKQyM9bZS44QC +5DHFJodCMDaCRSyMRV2VWXBZ9k2TQk9KMzXdee7dvzF2 +AVzc8a8nXAZf7UENykWVqBFqRGnMVAimitB6E37avEvU +3DVmqC4WAep3ZDQgm4dDvx79mLVVp6CbUUpHQ3uwZGp2 +34LY7mbhu1MZ5MiX7U75ffsVAC4pKWkxhKPG27BJAzQZ +EntgJN6z9fU3XM1G18rf8USnxZYacAs1GNcWXamVVUcR +9Depa2NUP76hUg4WjEscMWQ7g7Yun6egRNMHcW6aRkG9 +GHZoiEVsJwgRecKvbXk9PTZmqrwYWcbsNwwYJqjddMPq +2V6T3ijt8kWCF1S7dU6j6osEr7weZmuo7nXjz7ti5T1k +9XH6bUn2ktekHncrTnzsm9Vqr43kKxTQ8G3z1EGYkqmC +9c68rzNR7pJK9qenmXhtquGik2ZzJEXyvEkB4VyzHmq7 +3d16MddqdMczC6vifqT5tRtNHZpQa5DASNa7yrnWVhSF +4kyrE7kuVutQyFuJrpJBd9U73wxwa4nDd7drVjrEFmh4 +JDctD4FEHkq1nDGUkriJQfNcbzR3ausjQ7rmnKPvHJsg +9z3Qb4w41SRyk3Qui1SjB7RjEC6uXaiWrBPuou2jPPc8 +HithQJjwDavt5Xz4qninRS86cTCjQ8pVnkZfbP3q7wwm +6goDLHiTC626h2GEczhnKkSKNEXqrJErLMveRuoXrjdY +2HoSgJvKsZY49Q3cdZqwbC8nMzWdmF9R5EqH5znTX797 +HoQi27sgPDrLiFMqZwgD9FMyEGJEeo5xaxNgLE7YLUFH +4oHXr4wQ6CFzyK154E2MetPVnRibEwX1TCpCYBgYq42T +EFZD46P3kFmEBjXSU5yqq1TzqK4DyS2jRnJdGihkqDzR +J8YR6rZ2GwTpJukTf12MY8iPmpzvyz5HTk11g6q8pJxf +FT77PxN3x3zcjnLYMunBod3VygbCdwuUj71PWKSC5ipd +74ub8bfxsXBwkmNF3G61c5zsQYNZmrwV1sbTNhv2YETw +GyP4BUTBK3jtHsAXh9CiapKt17btjr9vY9S7MR6nnBQF +HV1YeEnDdh13GJ5gGFf1FPaCTeLsMehX8JWYa5fT2Q18 +Cf5TyPHKxJ3C5Uxc99qYhAcS623rdRfGRtfCxU6EkEx +8mwXAdsnDqr1qy8sZuSPyBd9sxbZsZotHL3Z58E6GLn6 +3xfC35C7hgYTo9qp8NbcyJGSVMx1UTH3563EZ1HCVTaf +Bk5x3YWBE7qkDQz5VWL1hRzY2pQ5pCgSeWhTXfek5F1d +A9Cocaqd2gSyUxdDj19uQ6UpeUiT5DEm76r8divV3Gvq +5MiZShBVB1i2uWPgGPoFbogAEJXBFJA9mwvH3MWrzQEc +B5u2D4CMSfcbAJ67TUYqj6VNTDDaFXoxXekcMcXTfr5m +FjDcU1yUZEpjXYKjp7yx25Mck41x2VEeLowqCksbDCMx +2hKFRVkThkaXq3vLgboAi79uWoZomW8Be9qHhzuxY9nY +EmLu547gYCqZFrF71v86XsYSoqegQX8UwUxX8BZ1JAPt +ZXM3LoW1DjRKpb9673RQdYHQo4eFmN2fVgVnxHoH7FP +89ppjFtEYUvPPxcbC6qg7URMfRxFhfcBG3zFmYSECtRw +F5MUNAS8QYHYjoYZEDCx67WwUaRNTF4TWE577VwWxa8s +4Afc1dLXxFo6YpVP833CbD6Jq5mT8sJTG6WvfQbKYNJc +4f9tksSjXwuooUVSxLWg5cSFkPLKYnwM3uyrTBP1ka31 +3RuNLWfQkgJur5iMBB8jUkoU7nHPJG34RKuecA77DNwp +91Xzc3WPE4uHLenkK5XHaZbrKHXUjVwsPCcBppiFDiyX +FkEsAaecUJxiVcFATscBqLrRComrKbDqXg82d82ieV2d +766FMNZkaAS6TjPi863MbxYu3XTnmUdqxFE2z9qKZoMS +9H7xsPwcNyBiT1nQGdwfXe81eZzA8Su7XJfZV2Zhji1u +FnDxtgMscB72PaCR1sM4ndprLXRimGJxA6EHjdL9WxVo +9W7831dsREZBx9N6XxDvQyuzfhA5yaivXpMD3WGmK22N +4j88ohJ1K6sXEFLcNPy1oXZA1koyLpJ2djEpySSAF29C +81gsfnkThMQeWxR5kNDRVpRyKiSeb6JW24yfPuH4Ux4G +CHvENtYp92xkdksqBRhwn4dWSjEha2Rmk2eh1zU7G39R +96LoKA5woYhbMMAqJWjx19XJgzkJsrDuZjb3JbiqtZHa +6z5mCpUEcnoc3dDDrRummpRoR3UxfTmjguzqxfuHcP1y +2VXdtiy4buHV2zcvWiPTx6U7h4JzTsfg3K1A7BwkEmTq +BB2ju3mwNc977YFVAkmEeC4Mwe5z1NSCfoDS2WVaAfXz +AwuNqUMMURUbwoFhKU76btXJqSTGjNMVHDTVFcWSNPpd +8aWKdSthHN1VMYpAFaMxM6ua2bA7jxWbLXccRjHj9JMa +34DZRv7qtzX5SusRrh46sCN4VuLx93BadmRZeneEtk4u +9wkzW6VJFbQ1yPdUvnzHtrxsDEizpwtBy2hpxFnw6px3 +Gr9nwAeiCfaGfo7o9KiXkQSY8JgLxa1HSu28YdqH3f3P +3FYHQdk5JW6V98FdBhtbQTnnLdEoR6xrguWLXaoV5CBt +2N9MAYZM2Mrto2dZB4f4tgYJsbAUyE6FzVNxY6aKJ8jZ +EBCizhtNhbLNk6WLz4pQvzaygEQmiYRfM9UP6u7WtY7C +AUvtCGCEGn2DEpKGL7oej5Zz7zBjRj8kHPCaLfvXDEYS +5RokUer3X71wH3YkB6AxjbUoNuraVw8sbQvxXufwbnqt +3R9xTzy771YZyLP1BD5sWH8TVc5xUiVy3CFrs1fV11mp +F8nqf8qYoMMQP9w5Em2hSfs8uR1Cgpo6tdCv5uqoBmey +CcXByK6SFm1ZiV3b9vd67bu8LCwivEiF2e6mikC3RQ4p +DALgqZVGWcy6zvV7R5BWdhgCPDTPQyQK9tT6UKWLFD7k +FjoGAu2Q26ybwYUe2ghrKj9gvftwXrWiRNgcNNxf7LWh +ANsp5VmVFyyJB6FbqiPHVJpUCMQDj28MVKEMTSz3M6k3 +9fgCiPjuq3aq2NHzM9CRhQ73o3LtzUcMvDSf85nP9orh +EzJP5hLYCoucrH4TpnUTnk9SwPezKXPXgZjewRWaEtUF +A3cqbavAoVGhe35WohPj2hGKc4mZaXVSkCyEDPMhnEhe +BRMH8KFsMm6JSRha1SQT43oPW4roiTMdsw1CqXeoDh8i +GnC3qKcvS4BKBJEARA5rU1BLfqStVF8vhAQ29eHAXZ3U +5XnwESNfQmiigqyJAFxwT3pBwpUjzvTcuwF1fTASHHL +Eip5syioe46b6nnNdsY3yiHPHPypgpcqcAM6dyrYm7ge +4GwEGC83PAeRqM371pxan2PStucxStmGmzBg6mamZGKo +F8S9FLNenYYXxMovZyP1Lceom1WVLYNWN9gofbAAUu4Z +AbnaRKLfGPZDwbnvte1VfJ1LazHsjDhZBWFWKXK1hVeY +9qZKv1G4hL3DXjgHBRnw8h15grGnG4td4Lh8fG9cV4wx +433Uh6VQH7gsR9KokfzEqpwb1TY9rWHLYANzXfJqZjD7 +DCeDT64EPQXru6Gks1YxyCsDcUGdnvFCpSaxst4BekBS +7mTBBh6KkEDiyWfT1w2aNGJPjMzUFaZTXPWsz14d3dVv +BfDJNbqtWkGFMk5V52Pd7XUkwz1cbyQvhxrBPjTKvnHN +9UqXN1UzK66QgyjKtnXE9ApZJtRRCq1odd3Kc88vqn9S +6MRuWntS6bDnMPigi9MiaAkwrpbafCETTcwkC87cpFkR +5QQrFWxLgNrSeCM9STvxeaywcZYx7BED5NrPrBw42K5v +mSjA4SKjbUKYTurYsRHgPyEwrVkQgmFAZVK3cVu4Pez +9M6E6cXTz7oCQ4ZhJUS1pZtvmeMhB3aRzofASRciyH39 +HWhZ6quCPSNFoGwDeStHDzvdkRvn6RUE4jeCqBqAMxWr +FoRbeDkSfQdkNHm5hfrPxmatpbiAeKFk5WcL4snKwdqQ +FdLPZ2E65yrPM2ri5PLQN6eQQPj7ChnmzNdDxRqqB6fF +Gjf7zSbYJaBJNmJNUW8Fa2uZaeLRC6rkxWfpZywKUDkV +ACyKn8cifZdWoBwQTyyq5WiKZFJthvwjaDkvZZaRoPpu +FG2oPyG1XWyqLxZDwrY7TUQ8JdGBkXpPd5d3XrmwYNuM +7ENKX3WUs9VSniFSU2cm2q25zpSs1UVYA151VsDqaL7t +DNKqUPCYR58uMft6JYFp7dEXXqnoCfUpRz4VkcvR7keQ +8j5X7RChdsVR7LxkJfEBDpto5HHDdX8qygrJYwJq41DD +ASPvSc2thtiiUgfY95tP8JTMui6S7vdnNUUfthsSVeHN +9SMJyWZkX9QwqQ6Hade67ZQuuLRCbaGdxjcfJSxqG81S +DTmNdy3nd4eUu8JrWEKD8r29p8HHt9iAsHnRYMPBwoGy +qtPxeBmNWCgfJF3A8uQx5KMEWWNvNcAPa5wK2QC8zdg +EHKMdhrNEQtadSNZSvkbiEwKidtB5FvXqtJCmyaMutng +DnKARdMMjWRvQMG9MB27vL8Z2dbgPKa8aqGpATR4DqBE +C3cXTiZ69nyeXJc12BDD164B7hERGZSg2NN5SWVF335c +7ZqRcqwqJGzG5vxq3Z26zjbYNtxhmb1mizgqdEHWZVrA +5v8cYtD83B9b8M8sGkwG5bL2tguQycy77jkr18LSUEP +X2ahtzsUx6ByPa8r1AQ1tWU5oyt4NEi2XHif9EMxzet +6mxWsunHcKkQ27pRMyQW3xC9ocK5D9LKQXb95eSCjWVH +F4pduJdy9Djwe26SAn1kddPnLpVHjJHWt2x3KDGSsciF +fEPJmYhhYSF8AgQzzRVmspj5nryan42Bj7VcuDkU36h +CxmhGmpf1dqrArD92sgU8Y3cuNTGrN4ef3ANYniR61rP +7aupQWTfmzd24RH3HnSz2zCnAxNsHtjQdqc5t6WUhLJw +9uvSiUuHixG2ZGqugUTSFzK9M8SvkqFMxELg5vVg3XSt +3isJxxSSXRqAQYufk2UoLcQZasbA7T3VAgaUeQVV5Mj4 +EbuG71Edeu2kinDGPLc31y95KQPrbwQdgwuVL71Y1heC +6LepmS3xR2RTGNpAg7p4UmUtn69vJ4J1ScBPWeubvsFR +6EKxzohMecr5nqP2HG5X2FT6LvAttjySGjZ84Bhoc52j +2BzQmBhvth7r8Exnoe9sJYzfdoRk7KbpvJuQVMhemKzV +DuoNqaERoCz9TcS4RBzw4XsKXtYwQ7cLgtX7rvNTifCm +GN4mmgefL9S3mmtytfFU644WBfMBwx8A9CWRTLFMyx5T +HCP3cHXXVf71HyBvVCBohsXtUM2Nps5KBvNdr4VihqjF +HX6cExHiHFwWDNh2rF31cVMPAbNHWBGYWPgtPnGW87on +BGyTNzHMaxsQc2eHwfPnr9QH4UxSK4ThsABVFpd4xJJr +9qYvvdoRS4n1hTFqVreLsdZZ2EBaQw3daPzrcet4DMCP +ARLSwoiH4e3zQxcqwsXmW6noHawErFvc55mMxVMvWcyF +FxHuGz9zKQCzASoSyVWAKxVHqKfQ9CMpo2Mptjz91uLv +Cbyu39G3BN3B9C9iZe362qCz2TnJ4wG3GEteB14TvB3e +AWAkzBaoKxdRddquxo7muFRvQjmRZ8ByMuFgdMibq9FZ +7xmYrQsvzW6t28UwUjs6rH4Vx6GWygR3mP853HLPgspG +eTGtgUtrt6WujwBmcpCkk6gQm6HRMfNqzzHFxsCUedx +96TuEieNbrSwLy2P7D7ktb9ChWpj63pErLvqeZpi6CFE +6NKChnvvqs4ztKtHVRzTfiwQcxoBfcUnTHC7XWUTxkjt +tC6K7KaY3rnsFP8k2EJoqLffktBrNj85wyMZoNZJSWy +Qd4ZHw6X3xNzYCbgmeDXFtpdFo6gNXFpqUAFCNuV5Fo +5ZcXr5SrptrqnnJp78oK8wm2YLUPAM8T18UjfoEYSv1b +8gcraEiiY15BwWgtmZJv8qL2GmNZ5weYffdY4hPygZYA +D6sGVZEpbERMrSegzDYr9HvKzLr5EwfsyqtBpK7pPHkX +2JTuemRYkdbc4pgcRXEJsu4QjAhqVmezniAHLAoqBhES +2ywnpF9f6FEM8zJVa9jPJY6e1fT3cxTQTPs1UmxhM4QA +AtqR6iXfXk9umaLKCHGWghNxc7DYXBQWTxPV7BHAxS5u +3GKyw1xh4iTRzumXXsmiKuqJ7aPPPxJXXqLGWC5r4YF8 +8tBewWxmPyk21hqwpPrSSBDWyc3G2ZDiNXzNpJWGFFMu +BPxxDk46whYpDbZdAnfH7niHjVYTYznzVbuRjM3nytgv +DPCwggnpxFU8nqiL9kaxjuye9KvYM2o4TsSNNVyepqzT +3uogxE16qxnURwuQ3YyLHRJoW4dXRsTnVoh6bhj9ZDuB +uwhhRxaUaUuzE5N98fwSefvau727xxxo6PDXcPQFF2s +FCGPWbETitwEqsbM8naidowTu62Rx4mRFsoQJnmpKCK3 +4DwKnpdtzQFsDPegNMR3vGUL5YnTuECpUmvUBiU6yzub +Fsm91y9kZmy4uosMQZ4Nj9pAB1SRburhuzRkrZbnAbSf +6txpjnbfRGqzuQgFj7gQTNuzusY7FShZni5rZpjyaeas +56KtApWSAFP9Aw2MjvHaouhmVd24jk8rr6bvKsfm4gRT +HGqjVpeHYRmjMGtoiecZXKpH2aFVLmQdNGCarDmSxoAs +CJGDhoofjzkF97DTg9VAwHvWp9knmY3WzYQTp2HYFee9 +6hF64tFDE7enYvLSY5rcMvTh7snfSjC7kSPNxs9PKmP2 +BviMf7acK2hD2W5yFJPNQvdRidZTtc5zVDdDGc8t5c1T +51cHgf9rFzybFsN5gvRoKCpJaAwMEnz4qtGYcAR5sgfN +AHsr836jwUBcKhfJcitgoodK8dYSwfSUVhYZUVaQVuq5 +EDj5fJJZUWaCYDCo9YgqxUgYkKQJKTXfydpq3Gn963JL +3Q63ti93dxikjxrCT1Cdb5ZAFX1NbrDqQrJJwgttoFem +9XC5iwx48bnrotMrrDm3eNMqPdim9bHUsQvWGU662zYm +8CK6aXtFxmADKf9yzmbAuvopqgis5gPAe7vdvgvE7JZS +9jWSqnixdi3WfxKj57yG9G8N1HG7ZmfuwCfvAAcwo2Rp +HXSwc3qzZ5QzAqS8ziQx9iETiPFTkhaFmJ2vWpN1c41k +5fZAEQY6aQPQuEDGaXDCPXhu7nSRuvCouhjznMSooQmH +AnmCoxRPDHMMGTLVT5gQ4CXwGXjdJDB53srMS29Kabmw +BwAM9ijncegr3jDY3xfWin9g6TNyTKWHadm7MmsXErvH +2ioEtN44RkE5aSqosJtU7wwAgNji2Sv6WKWGPciNi3cf +6vZ7cG44d3Dx65CH9patDNpF5ihLg5Zn3XpF8tPR98NG +F2FKYEmYn8txjVXyJQ61bivK2tnhfDwYyFnQhLFmaHQs +7nN6WWH22PyXV6KsFYoJNHsKBzoXoeJR4nHTYsi6CHQr +3euF8AE7m59jkatan7fVNrDhfFWBcnt88JAeHoknPEMA +CaafF4miEFwYpAPunFaNkvrEphoGixMDqMKyvFqUh5TB +7weyNNBjijAqLFFsvHna5fSvmxg8qy1JhwJr8LF27CRt +8abDDA9Brx4PSRQvonDYwkXuqbC5iZKbTwT8dfM598t5 +GsGhTXHfNeUD5dbXBSrMUsoHxqQ4Tgo7JAYNVJg1QyPT +3oFqGfVDn9XyYoMME8B62gAtKapzDws1kkkZ7GLXzmWz +5LcYbx4h4pcHtRYDn4Cw9xuSuEMEt5WxBSis8wg5pAUV +Dbm2XZhn2vHSNT2Ky29VsaaoHwQtkV3nhBuVQkTQG14q +E8HouJfpdYZi7pqw7TjAK7BZ7PpYiqNhv3QdKn8Wqifb +2phyKTgzw6uaX7St5vW72JSxHQgh1MXxXgnV9SFuYY2L +B1Y713xdqN27fsSoiBe2o5zK7XGEAARh9PLzV77Comtu +EpW24drcxhz7ecKCd6GoMcC4JeiQs4qGSSL1WUuTHbrv +4WmwoJnPHpWRo7WuaRC6YxL8MAQJ8b6ywHZg9A69UxQi +HyFXCwKr5DFykSot3dREQ9MTSiHsZ8VYByVCFdgVjEnn +5tfWnekhc1yA7wNTnbvweYbN9Nwd7hym3v6agCHWemF7 +6A2eYX9SYB5rFWMfxEayQp1EWLSjXtxnV6BYojuTHGog +AsmhXEs4VUze7dAY6HrobAHH842b9jWD4gQJGVW3U9rm +GYzPFHHcocm3MWiBvq8kxBMShZmeKGwftNPbK6J1wzEk +3HawkWdZWjAMSCSX7yRLBKgpAgEVanerNydVsDhb39rR +HvKj9M6ULGBdSQqs2SkwV2MHAnuobQqBZZoMXSeKKues +HXjwccvTkqypxUkPrYo57kvSaGeYbPhvFXPdFVSyGuqY +8CWP5DcQCHaobeGsBoXNr9c1GoePKBvAAss3nezrrDfw +2mfLmAaFx3qGztBMbVo3PGykpwCaAw2VUBGdGZRNFAaw +7RaS6mJJocQyEaFz1EAdJBMWALif26wdsByuBMRT5jKM +7XdJkQJPKoMS9gNZDPD5yHKhaDa4YnnUtgfe58ncKVPH +5ovjp2qzaXvy9hif5s6GBCPwwfYcabATkkytrFAaS3ZM +8SAwvF6hNyTWyA5saJxbyywFtCPZj4dSqtjv33uwNeHn +6Cv3qhge7YYEwUvRFf2t586kfm883qWT6YsQTV6duH43 +3jzmnTaq28PMSpia8AEw8EFbF8yVdMg45iLB798RiknA +4R2oNNu2gXWKReVSdQPPk2zTDDQbqPEgwaCEJwgFF8uP +Gw7hoYeSSbYS5KQ2s3D5DcMcUUzf2owejt7g99FozPE7 +3d3NeYS9sNViM9h97FGa6odPCDgLYj2ECk2saAfM7LBW +F2viRhDbFF3MZ5i9THCw5P236jTVkNXts8QpfUXA6K4h +GhRoPBs4XAVhS6hNBjcG7EPnEcjTUFmt42hh7XwMropp +dFboESS3SaHm7rgoAjeLMBu7sKY8NEQ6uWYfxCqVKVk +Hs4ojQAotf7GzpjLGGG86LXNby51fP3iU2YZ1MGPj9nz +84h7RaLNxoWT52g42pvAc8e3VEF6qAodoxYuJ3xJnt6P +BGAB5TTpJeaTCZfkvqgSJxT7PAnUqTvoJemhddckbsLi +5PdM1P54h9rimu7CBdZ9Ekswt35ZG4uteTtjww3Vyvk3 +7mMC3AhjPiqLi5egXANGVTF4YqX45GGU8UZE8CSwrWJS +3QmrC12L3EEADtX7FomQkf3FwMt8KTHZSE9QLQZ6SsCj +RMogz5wvyXvQMMzBvoNs7PuLmMHN1y85cmNi7J1X3RF +5FqXaV4Y88ijJjM6cJNpC5PvdbTcJToc6HmcHp4Ke9sF +2mZsMFKAvM3juss5yHFPphnuBhhmvW9wS3rNHLuAiz6n +3tsV1k1bX3wrpH8Z8LPK8vr2Soaj1vMpPThFci4wts52 +4jn6QTyDjdxT9qsgeFxJxpeZWtXwPMcUW7aca3BTAzfh +3fSZfCMfmHyeLZmthprkq3o6f1SMK5aNzSHJbTgvJCZt +C3fSNq5YC1tPCEjZ991Vu1e8yxMN8fWGTXvuHQ7h45XC +9SZm1SiSp2LTcTvrnfjVaA82AvFiyuAbFU6mwdw4YEoE +74Qzepyyi55whNMF5bSJERggnE7t9e3yzaMP4hkPdmKX +EpKw5ofa6eohpYtAJZRadT8H3F4c3QRQx4eiZw8Ud5pC +EKMfPcoRHF9mqMLyjvxXnkGQEKFwCH3SrA54y9S2Lniq +7DLX23BEZYtAdk75E8RdbCXDnoN1gYfVT3hZzHfump77 +EXFnGmSUFyHrytqX6Hn2mFuekfHMYfrwd2nbKBzFFvyT +HtktnmCFicLGBNHGr16BsY8rThcdKeVeoesi2GoQePo9 +GCpYqPdqJPJgQiBD2NBxuhWqQLs9PoxTrfaYNi978E7a +5FvD5FGVfvDwFLLzZ85Nky9R5PwqPJCoXL2iNnbsxoub +5bcVi3mewmY7f34t3W4CfTqzNe2PTCkdLN3RWd7isuMe +DHK1mbPWe6fBQuCfogUwoELJdhhobDV8eqQsX5G4orFi +GzMYrhcLEZm455jPJFUNT8wqZM3aqkwZYteMEv3NQXdY +8aHkenkskroGPH3qd6X3y98F3UJ9uVYMUUucgySrEGE1 +2hqsnCgrLcb5evc55mor4NMRYS7bNREvD2rcj1R2zaT9 +2vB7kfsYxqo7Jgk1BUsFa3r7MCDzozptUeKfaR2rZDGz +Mu69idi7LEidoh7uvD7GMRUuUASC4JKTiDMs7tJo31N +Fwb7fJ75qJSwktp5MY2XD8RvL7V5kZ76WCRX119qckmJ +AL9KSJkN2272AJExsoC4SXHYo36vYR3nkWnjk3CnKAgg +DH3qHmZsmxBNF742qHsij9nRibAgT9ZsdcQdDMZyQ1zi +DHKmhgvpH8rZmnVJVEUaZCMyzvvkrMorwKSgkmVb8Zgw +6n2cYCHHebQCHUUCz7aSFB1m1qHGngHn6rU7zvCfNbgG +5Z3yFh6amYiSKNnbeKXyDWCskSZnbiy2siFNExomhfsb +fm5PkxuxZqrcv7ybp1BVctm2MCMtB5gnRWbuLKxx6Yu +DR7TQwUQXtFL8zUYXP2xs2n7f8cAQaL6QcXYF3aJ3xUQ +Gn7dhMMd294wEyVrNqq1krExDWcRuQNvcLMso3svFAve +HATKn86wL6drLooEVNbg1ZpnJbwMG2dBWRpVunNZygc5 +9tPW3sJdAU8Py4HKJ9AFSNxAon9noS3maWVKnjd6wcW7 +6kuKmShDobpTxpm1UvQmVyiQ2Cd2x8h9TDEnwLLCKjXe +879gGDsPne1jjbudzLFtNzWrnm2f5ExtBFPnDMfPigUy +FGaALEHTXwxdHVdWN8dTxtd9CKoZH67qWybxAeYSkvHK +CrhijCGLYLmooAsrGqoW2nC4oZd9cRWmShfTEbXmVPx +6B6wpa5Kbon598KdnZAEGpZo7rMpeFnpfJ6ihWej3ExZ +6QRbBDmzN3a8EmtfhKv7Yow1FJCHjKQVNgkcPB3GvYsW +6G8Sh6RehKvKwm2WMXnec7tFtSr7hJTZxoUvuRdfGoW3 +CHd7nsH7oDSytHWmPHAnMghAZTucWeq5jMpT6noAozsv +4aCYFKVUM4fo9K2TFKNsy8T6y9K2hdp7hRTwDzpGkpju +4dwa7nYYJE7NL13bKQeaUYH3LruZwcaZXuhVRBc16H75 +G7bvYtwTBcc189kth8w4oExo83C4QA12zrMeLq1qcZzK +77Lz71hyyrJiTvTEv7JvcnHukupdQEApRDunF18YLQB2 +Hp2Mnqgcsx3vuRZe1vgRPEE8MC8hgJiBMcteYJmbA688 +FKy6eBBwbWkVsFj9EG7x1qTFJxr7K6tvYyZVf5K3PZzW +DadtnggRSpJYgdeib5mqmgj6ctrCXqqu7YWBasZV9xBL +GbfDQyXqA6X6o2AhS2FXVepqAVYFVitAQ9xqSmiX3wvR +3rdBhFV1APGXBYh7rESqP1jVfFtJt3wRyhLX1W6m1PUr +86nfBTu85aXkKGTez4umCjKvyvhpzWjNAyN3pNRGw37Z +HTF51LDzyUZZWEEi2j46hx5zdaNj7ABhQQj6s79KghFe +2vQEvFFjNdx2sQCo7wQQr6xKPQ2CzXUQ64mBmyjj2Uwz +8AS6kWDZDfigbA4aR6iQ3xzEFcigAjJYcjePy5o93QmU +6zAwQMrhqxe9zMwpfogKB8A3GReriqm4ty9cVHW7vzgo +51K8TnP8MbP2rsGYhDoxiRc2ZpqANZjjanJd3o2wxQh7 +BQxtefaAYNUux9DJefCjGyJgLevQQQzFxL3pxdJq5CGw +3nYESs2LY4RQv4EF1NY9V7nsWqk8Zu9Nt5UsFAjuicQZ +9qSsFf7s7cTz2VvVakx6QgpPgFSnKQQbSUzwEaCrGbPq +5aWxX1SgiA74VAomRhxmxDmThPKazibmDRXcWznJEJX2 +DfPfJSVUWcpeFgMGrMKxqmR4H8RjfzWC8UAguTJbweDA +49PnjAjHBf1XGNsFxAARpoeW7Fd6osYhU1jySXbmYLgJ +HSRnnHumAyJ1hgqRHQPGswEsW5WNrttGMjyVjknX75Z8 +9SsNNBiGSiqAWzbZxCBV7PY9S2kUut7o9Rqqs89QbaVx +AjFmNxtFKpSaD4KHHmLkJEty7RjGsHpfruUGC3KoKHVV +3g1ZnE4bfQpU5iHuBvpagPT3GJSYewAC6YA1uDwqn86y +DS5MACVCDhyu1L5Jdou7RTBih3RpcjdPbxwxrHbWdzdx +Hcr3t4QxZZsTup4upjZFhGorjcbiAa7FoEXs7CArCQpE +Hx6KHXBywakNsqY6qcEvD3ZNqmpmugiNawtRUQfdGLcD +9zGJvMYicRRenzRyqFzrQ9m5rNTZnKJTPk7A11JjwEjd +F559pbFyTqFRegpoJSgGmXKC1XJHW7AeYY9PPFvbZxV5 +Gs7GpgqJV3APtTAedjk8X9e3q9NffyeqZY5aDWN65E6K +9XtVoKQREDq2XGy12LpWP4wbKN7VBwRYCMsuFJding9w +4nWiHK7gLwNpu17Bz5idTv61DYMCuLinHUm3bcdH91yr +GTEBaq8sXQdgHBVnefrH9D1szBsVKnZjYrU2pQdhZid1 +EzRf2Hir8xzUG7tG5FnXJjQKQEC1yA9ni5JZrMhcqUoa +8mJnCFJgPwhssmwEKVnqbc3NmonAPPbNcE3xsmmtKFPn +HscFfUzyBq2dbTmmaXC74UXwEHq1ivFxJFrZWfqZJ1Cx +EcJDBKJHit1RwmqC8Awwy4XTJpok8jmc4EP8J1vroGB8 +5mzxAwXh6NGM4WfB3yXpi9PgErQ1nkwkA8ZjxmPcGA9A +GyNDLuvKfRpvbFAjF3zLXxkKCGNytT8tLsipppwuUnRd +C5VhaDJ4QuBChPnATVeeNrJSxrPrg9LUz1gzm2uhPFPi +As8rgiuUMZu2Jeji3a9XXAc2TCGvgzyaGX9vxzVwyL32 +8e7bce8y3JZfUTJ9RLDBEiSzgB7F7tu7PAXUhBtmmLkv +GBH464GoYZKGoF5WuvpWcNupTnQgCsTzLVzBUbH9ej83 +A21w6a7PC7RH2E7LjYzBGdovXDDsRAHZjXMXQzSkLNzb +A9H7yjDXQheQ69Kz3SNU3dLJ52SeQgWgYgwANkwz4Uav +8x9j8r2XZwJB5TqrxcAXYnjZhK4TzEHiEnrVKAUrkAWJ +5WwRX2JURU5yo9ESTzKkPSKGi1TvuSSeujQWK2UcX3zd +7ooqFWKKgvpG9P8H2uGqSEL2DJvrURvdWfw3XQmpoTq9 +2yp5rMajXbAqm2FfzfygJNVx9c8D8bFYxSedYA1qFVMy +2V1Qu1rM6UWT4rCdTH5KVEaxTW63Pyb6eh3CpYvnkpo1 +9h5aKuAP27CYUjSSLLhmGFL1c4qqdxnqwBHGLtKvRvJK +RQizksJnFT32fVEdD5CVNagRodzf51tGBYBZe6cA3wv +4Np6x88WNFFqAuiNeHa8q4inAMGo8gDCcX6DncuLWjeF +CuYd32k8WGtZPZLkEMRFMHiHnVELsTi2pok6xZLLgBGZ +66tgfi8DK3UqH5T2Rji5qzEvazMgHD3N3FNr5LzsDJ9m +6Z1oNqpQ1mCcPfwBcuLe8G3gmop2P39pRwM6gKkamZay +E9P73y66M3YQub2VfrTettk3FuxN2SBiBsgz8ZkzRdf9 +9pVEeohZEBroLC8VV3AQCk5ub6SNywoPm9w8hoDemQz1 +5VMEnmrkSHK2SYKryWW8jkFPvbRNoxG3tTVUnKhdcjgH +5TTkxyBTzRgj79iLtXm4vNVTMh6e9yfc9XL74rkqoPCw +87sDREJgPkcrbvpJL3JdXfJVCASToDrdugJ75BwdAJKJ +81W6SqdBfDoTkEZyjMzGqMNBmCtTuUmdThBSNxb5vyAQ +FLXF6oy3kiXQdnL8JDqwKsvc5qvSWk8nriB5DJCiDK5U +34Lh9ULwL69TbQV8w4qehtWNCASjga9DmsYRx13ENnoz +A4yk6z7QGxGaY9icKsRRxfriZC4fCEW6hWRpkxZgu5YZ +7jvq4kErtbAVc7GyvbWy87m9xXTWK6ymoNnQRJvutkKs +Eji5xqBaPuQwLbB47eCBERit6TF91BtDbfcqzadU4N9z +3zBB4WgsDyxiLkaK2q1fSa9L41B78yAoRWXo2KzgX9iP +2ZLt4gmsf7PsLboBdpmaYQvUKmNRhHJLqUcq5ciUYyUS +AVrxzcqzJY3SaWCPh6jPMobzYANwfsVgu4iYPe6cbMfA +EvWiQA44kTYxztiFo1GEJ8Xx2gMAWhzw8KvmZAydPS5h +8sSkuSXpDR4c5h8MzmNpbTw14eMPkD1ep4MYpThyVewG +Dmf1tUMj5fb76iUDsgHizM6wRDC4rkgSDBgSKgVMtBGa +3egkiVJwz19S5HbGnWNRbWEkUaNm14B3LEfcpcip6zT8 +2kP4bTCQP14Ys9GcQHhewXQ99AJTw7vZfkfMbZtz5gtR +95BXQ6AvqMMyaAgsSCucYfZCDRvjDypDupVDHLFNByms +8F2T8MgAVShEtqN51JtxWtVwM7LVDQDs17K1CCwYQvAt +GsxWr1S32xc5HxLm1FSnBG4P6qrd6t1ALNgag45BnTWi +BV1vnRcpc1SgqhNkHURRA35cYojaSJoeLFYMxZ31kJTq +4icB5RGjzkYg3VHt9MT2jU6sC1Dr77cjib3PnUoMgLDE +73HbHYasdy4WVcBK1DesVGkwNqsoHg1pozZGXNMaauE6 +3PG2VDAY3arn5k22eiz8T8KyGMYaoFviCa8Jfxb7HDSg +E75zdbxVjrMPqXMdZMKcGwAq5k1UdZ28hD4VboJG2PDA +5Jk25w3XzU8jVYFhVKGHkYcg62kBwKLm6tXfj1fZzSbr +47aBsUuMVCQvA2rrbqjgk4Y8AxVf21mAjdLwvHHbkSkh +FkiJfJxHHwP926LAzmwxegFokqc74SRWywo4nK6FDVWB +AsyMechjqePnoX7SEXt4eFG1ET5FJ2rq2AmA3TJR1D8c +GWQbCQBjSAXSMxiGZh7gyBgCW5hsTq67UZzugAq3E2fU +8aQHRaetCkopUPiRcxPitFFYggDgQmAhf8eR9tYssSgw +GqZPYhYjyMA4x29inbyV6xw3kXhg66nSkJn6jYaUKjY5 +DZmuSwHgxGYqtVaiFw1bkJcbrcrsbtchbmMYfk3CHfUR +EBoLh59cZTkQkCV9haYCBm1ueQDdn8UtPmD9TsvSZcJE +3mBQw9mtjjhNrRtDQRC1E62uYBvyUgSj3Ab4S7ESARvv +4QGpdePk9MofZffcxy8vJSDsZi8mGEVnKYDxtgYDHyBX +HRtRCJRug98EGBeVZpu1mtH57Bek4PDc2okbXEtUjPbg +E8wnVwbHYEMVQE2Yffdmx9PraMBLbBKZAZF8zg3FEvLy +aB7YEuNhnBx2URrDVUD8xhanvLh4eNP4TMXhsMjwsAg +J9BYrG289msCzY6TiDUCrN3EJTkowu4PbbQCrQC5oxU9 +13GdxaKHtZ9uX2cfQLgcEmetQx4eXAsk6p8tfkUsRy8q +3uFr4GPhHCNjHkD7es7ZJ42KXPa8WSqhmE46Hr7HLE2o +737noTaxf1jcnTAm38mwdDdimotubWAb8ZxibiF1Fmxq +8nPm5rRVtfrH1gaz3mbzVac9fnFTuJtFKJNLS64sh6z +7ASwu2CHUzFAMv3fZBPJSwbumWnVGtTNy9bCU7aSifPY +3ujKxXYMQDdgyEcggRHUjJi6JwsFP8fF8foUFDx4hJuc +Gx8UsHQhNPmZ9HMbzefjXvTQKZy3MdmoaDeJiQH2HUZ3 +Hu7ggdiZR4gthC14h3YJ4JPUz8cLba3u6mpoz7kouJiF +Foyw5MPnPbQrpCbmprdGXvQnnrqGx72fmYHv2HePEfw9 +96R1VW8GB6rN8E8xVDZ8ghdgH5SjceYgik3BcGogGdQL +9BFdSRWMJvD2z5fXRRTTmvNqmQmhA8XEVqY8ESSnmTwh +Be7P7wmjHCQh2vf6Ex4xxmirsjx3kR2shnB2dXWW8WNS +3X37cUUhjRRA8QDXMp6MarrHGfYEi8wDV9YDBW83GFY3 +A4xwVZu3uhn9DYH4sBvbpdPpKmiVQraZikz2fwQtjYUu +HgfUqWgWSisNERhkGtf3byUcuskxfHkSBKGhwawKyJJ2 +HwN7yY63Vobt6HfMAafbstKgExTstZDMgbYN97Bbso9E +ECNDYinNQxgZ4e85SKCp8yYjj3Q3Pxsw4XrQbHtpJruG +DUg3P8xSDmptE2MLi3pM6rTG7hECT1kdt2V22kCspMpG +bVt5AZQgwRw1nKAd1msLr7ePeYvDq4oREn3PwNWNTTN +GpCW1jaFsmQWdJfS4DWMi6ozFxa9sxMwpYtQNHuYoWaM +J3iNVAL4bAiwxrzhiw1LCgPaawUmHrZQ6X7SV1f9fLwR +DJNM5BLKLcJTH586rsBigwbkEXScVGve2MbioURtKCmm +J9vzkE5MsUx2PRtnQo2wNNRFuwjEc89BkuRSWZoAHeqU +Cq46UavcqiF1GP8Joy4iLLwBXfPubd95SS1HBKwZynSz +GNYmHEZorF6yCSyk48Z3UxtFd2mSwgPBJCTH5NKYLrta +6dKDWHWZfvaAkVvKFzxvi9QCqSHFFnR1d3YqaXSJ9qSn +9U1J43KW5GjrUprbwXxGuDK9AyFwuG8ukSbkpHciX8Za +GPTpMKpbXcMDd8fhkU1ac13s9ZzrWMtSCLyUua1SaV2E +58MXeXt2WxeZjsKnUV3vTrW94KkP1LMtjK9dPQisDu8p +7wHWTmmCRaJ9zvZVPmEs6rGGBGfAX4x6QG4hrJ9PpxF7 +J3teQLTBYPbWmg825Cvrqqf3ZfHT4FmEQixDWUfAxwE5 +DX9yNYxtcd7seyxyqYUrTrKybbeSbBrGtpVgexgxsoAc +Cvi1NNLm2V3ggxUU9maG9pzeUjhSUsiYAEGd9UpBTvf3 +Fho6C1wvtJGJVoKMx2wgtMtS1n8dYSGaTfsRQ1YbyqRZ +5qwpeV3MM4G6dmi8fhZwtk6uPea94uYzVDRyjzG9hrfd +9qwyunrrGH5mGWgrVVJ2w5HfT5soEQDtkYjAy8G1Pc9C +HmvvHWf8HwhWGox3tKwK4Q4M4RqtDQJQZq3MtcmdL7Zm +GkS4PU9fajamVoRQ3trUuavr3VFJJgmzeEGuiCN2jHtL +DF8xLjh67oyBLHScvT9jvpTFYgZ5EKmASjycUbq36GGF +9wkLiaqzCAcS7cM5EfDqQp6Zh4xHzRddVdQ2LzCoQRYC +B5fQBywDxzpYUDBFh1h6Pth5ehWK34ApzDmhPqKm3c2H +2bs3Q7MWL89xD4ddzoESx25SydVL44TSiFVq2qfBQYBz +3W39gWHiFfdVJKkgLibd9zviTZ1sEnJY4GPuajZE8bTL +36cCgCzYgQRSDEJURi6N4xBn6CnzJbvYgQq9A8vjkdbw +G3BGD5sTf6ndWXRoRHXRqBfnFo6mccSiADGcW6ReS7vi +9YWcpxwqxe6GPUxZjUGJMGW484GgVFGZNdugU5n4D6Ka +GjBnAmbD6GrfY5eADymbFmv5RTpyE445PqpPo8g2R2bv +CsJb8ENhgXmMNh6c5j66Rzri6Am2TiEVApGKFhjQ2aY +BBxu761rHNuWTmvDgAKxEZjBgu3L4UKMSfAejMeN6xYz +4ebaTU1yxXnoiPgyWQVMwei8VGku8yeqxnQjkeiqpzVP +EBSeVhLtU5D1hdFhANvRFjVgAmQGAPRL7BkqUPwi8si6 +4xHoMmxEp1mk79pd5YQ4q64jzVvHmJQSZ5Gr4LjKbBk2 +DuC3SUMxrmH1W6BMSDBNHPhTRwqnKzdDCGb6Gz49Q6cJ +AChAW6JGiVZhZ5rGKk5ZSLc4z4meGj8SUrb39HoQAEZR +8fUi62no8wKG1PeWEqvTTLBCPJpaDfXT8CMDahMZHgb5 +B9wp5Jmz2n1jn32WNsdPQhTv26SuvTRQZ4KbznGp2GKJ +GVDrQWt6SLZkugq1hBw47rRPrAAavJPUQFq8g42TjeNN +5TuzjfgbPQ7vM7VymFXMna88iQQWcrrabHCfA8McvPoe +2ZbxK1sHDQZNDWSr1Ym9CDn9bkvDfNt1iCBPu9Y69ANE +3BexJHd6hmJ91StU9dzbuELVEf1TpSgTPLZzBHTWm2hZ +8zg1cgN1ZdyMY8K2TAb9TecFD9wKYY1kJF5AgwFwEa9 +DruNtCjYEM2eJ2LhAu3JPJzBfVyocfa6R7v25mfU6VBD +E1cRVoZV4oooQ5L4q32Qwui6CezXGHuhZKZZqZKN5i1R +H7apruQoE6DmzoyAYZqSE57BU6VS8dP9CenbB99TctKR +FgLeTGbvZwA1idGAgDdMdFn7NBCaz3U4xELsriPHE66s +ACqwp3Uvmmv1LEsf47aeUNRCkrDvkaFDwQt1dD8Xnboi +6y117JoNMM2qMiww4jJjtPCNsTXz62NAajv4h4eXxN35 +7xLbU3XCkiS9xzB6UQh3fsA8FfYVEYon9yAUaEYhApz9 +8kgYR1sKGuas8o4DiY7tfg67b4b8mwSy4n1i4ACEst8Z +7dw3jfQCSJ6jHBGDVDpFAJC6rx8uoQ9LANdzyHZsey9E +CysNB1QM9yNs8mMwNd7ov9umWhvAz9YCq6M1bN4sfCJy +7Sgb7doKdGAgteg8TLW6UqR5ySfnMmjBeRLTqchjB9V3 +H44f9Rj4PJbBjtrU91y7xEXDN5GZC7gFJBws5gCw2uUM +GyXPDV7hvmc2jYKY2B9DE4mkee3Wn7hLxJH8BHBTTqMr +4KydvRkGkehPEWumJ5nQ8Knyacc1escvjPEiKBCpYWFQ +4a2JXtgnFhuFaRh6tDMSBD3WNng2HnvoFbhQr1g5s3MM +2sZPS8Ha9RJhcvFB3UMCprTvKDVW8KmihaG8SNzbB7Hd +8SxMUgvD4kHd3W68WAMpFD6Cd5ySNva1SBkNT1WNoXm5 +9G7vDBcXjQST2WTggAG6BA6Myt5cSy8NsNs3WF1n2Tqz +DLtykKCJ19LDDmd1pA7oDnHrfrxvcSQQ2N4WCy8gBudf +8sXYeR4b6gupn5wumQYJKmC9GN7vmViqkMUREC1LcNan +BC8q2urGjXzwbMJnwSKxxZiDhLRAMrJw9MftAELNGATE +ETaSJadyNbAuJjojU2Pk9PbJQ7iL5QiJcFkmWqtY17Ja +HKBtN3gPGpxoqqDryNAPq85oy7iL3Uha79PYxkRv3YEs +Df62mMUEsjiB3wWHGThxuDSzSMXpsM1NhCamzCnskWBf +3NvYeGVgQ3mVbhuTgC1huobQNRZfUz83r6p4hicKXz1L +4tJD5zo9ZjfRYGunVh8Rhse8H1Aji7kZpdS6ijmk5WSD +HJ4WTCN2459Q1LK4tHGxWF1Az8iesxPk3QDVt5HUtcKq +FsKjKQRAsu8BU6qtk3xuXuhQzLZYzBasxf3aE53Lew1J +9QANiMdvYkr3S99Ywv5d5YYsP21ePCRt22q1nuqAgD5a +BhMPtxtciLe1vttPm6XuPVBgpyQM2cuKMtzJHv9w3kf1 +D8sSQGr2SVjQPytTm6t6zxuremvEnNGLU2nx66zeT1XJ +2BKSgJSbwXC2V5mEu5BExUUtwimLPwS7PTa4Ekj5gVDz +6dGc36rK1EgquVBt93XmsuU3GcysK46umtxLL1MFm9Sc +J6H3AmsFtsi2MECUhJyFW8XzB3oAmUzFNo6mCBSfxzda \ No newline at end of file diff --git a/packages/helium-admin-cli/proxy-seasons.json b/packages/helium-admin-cli/proxy-seasons.json index ddd6555a8..f2aa9a4c5 100644 --- a/packages/helium-admin-cli/proxy-seasons.json +++ b/packages/helium-admin-cli/proxy-seasons.json @@ -1,5 +1,4 @@ [ - { "start": "2023-07-01T00:00:00Z", "end": "2024-08-01T00:00:00Z" }, { "start": "2024-07-01T00:00:00Z", "end": "2025-08-01T00:00:00Z" }, { "start": "2025-07-01T00:00:00Z", "end": "2026-08-01T00:00:00Z" }, { "start": "2026-07-01T00:00:00Z", "end": "2027-08-01T00:00:00Z" }, diff --git a/packages/helium-admin-cli/src/fix-claimed-epochs.ts b/packages/helium-admin-cli/src/fix-claimed-epochs.ts new file mode 100644 index 000000000..6f94efd9a --- /dev/null +++ b/packages/helium-admin-cli/src/fix-claimed-epochs.ts @@ -0,0 +1,67 @@ +import * as anchor from "@coral-xyz/anchor"; +import { + lazyDistributorKey +} from "@helium/lazy-distributor-sdk"; +import { init as initHsd } from "@helium/helium-sub-daos-sdk"; +import { organizationKey } from "@helium/organization-sdk"; +import { oracleSignerKey } from "@helium/rewards-oracle-sdk"; +import { + batchParallelInstructionsWithPriorityFee +} from "@helium/spl-utils"; +import { getAssociatedTokenAddressSync } from "@solana/spl-token"; +import { PublicKey, TransactionInstruction } from "@solana/web3.js"; +import Squads from "@sqds/sdk"; +import fs from "fs"; +import os from "os"; +import yargs from "yargs/yargs"; +import { + loadKeypair, + parseEmissionsSchedule, + sendInstructionsOrSquads, +} from "./utils"; + +export async function run(args: any = process.argv) { + const yarg = yargs(args).options({ + wallet: { + alias: "k", + describe: "Anchor wallet keypair", + default: `${os.homedir()}/.config/solana/id.json`, + }, + url: { + alias: "u", + default: "http://127.0.0.1:8899", + describe: "The solana url", + }, + delegatedPositions: { + type: "string", + describe: "Path to the delegated positions file", + default: __dirname + "/delegatedPositions.txt", + }, + }); + const argv = await yarg.argv; + process.env.ANCHOR_WALLET = argv.wallet; + process.env.ANCHOR_PROVIDER_URL = argv.url; + anchor.setProvider(anchor.AnchorProvider.local(argv.url)); + const provider = anchor.getProvider() as anchor.AnchorProvider; + const wallet = new anchor.Wallet(loadKeypair(argv.wallet)); + const hsdProgram = await initHsd(provider); + + const delegatedPositions = fs.readFileSync(argv.delegatedPositions, "utf-8") + .split("\n") + .filter(line => line.trim() !== ""); // Remove empty lines + + const instructions: TransactionInstruction[] = []; + for (const delegatedPosition of delegatedPositions) { + console.log(delegatedPosition, new PublicKey(delegatedPosition).toBase58()); + instructions.push( + await hsdProgram.methods + .tempFixClaimedEpoch() + .accounts({ + authority: wallet.publicKey, + delegatedPosition: new PublicKey(delegatedPosition), + }) + .instruction() + ); + } + await batchParallelInstructionsWithPriorityFee(provider, instructions, {maxSignatureBatch: 100}); +} diff --git a/packages/helium-admin-cli/src/update-proxy-config.ts b/packages/helium-admin-cli/src/update-proxy-config.ts new file mode 100644 index 000000000..5c8cea01c --- /dev/null +++ b/packages/helium-admin-cli/src/update-proxy-config.ts @@ -0,0 +1,100 @@ +import * as anchor from "@coral-xyz/anchor"; +import { + init as initProxy, + proxyConfigKey, +} from "@helium/nft-proxy-sdk"; +import { PublicKey, TransactionInstruction } from "@solana/web3.js"; +import Squads from "@sqds/sdk"; +import fs from "fs"; +import os from "os"; +import yargs from "yargs/yargs"; +import { + loadKeypair, + sendInstructionsOrSquads +} from "./utils"; + +export async function run(args: any = process.argv) { + const yarg = yargs(args).options({ + wallet: { + alias: "k", + describe: "Anchor wallet keypair", + default: `${os.homedir()}/.config/solana/id.json`, + }, + url: { + alias: "u", + default: "http://127.0.0.1:8899", + describe: "The solana url", + }, + name: { + required: true, + type: "string", + describe: "Name of the proxy config to be updated", + }, + maxProxyTime: { + required: false, + describe: "New max proxy time", + type: "string", + default: null, + }, + proxySeasonsFile: { + type: "string", + default: `${__dirname}/../../proxy-seasons.json`, + }, + executeTransaction: { + type: "boolean", + }, + multisig: { + type: "string", + describe: + "Address of the squads multisig to be authority. If not provided, your wallet will be the authority", + }, + authorityIndex: { + type: "number", + describe: "Authority index for squads. Defaults to 1", + default: 1, + }, + }); + const argv = await yarg.argv; + process.env.ANCHOR_WALLET = argv.wallet; + process.env.ANCHOR_PROVIDER_URL = argv.url; + anchor.setProvider(anchor.AnchorProvider.local(argv.url)); + const provider = anchor.getProvider() as anchor.AnchorProvider; + const wallet = new anchor.Wallet(loadKeypair(argv.wallet)); + const proxySeasonsFile = fs.readFileSync(argv.proxySeasonsFile, "utf8"); + const seasons = JSON.parse(proxySeasonsFile).map((s) => ({ + start: new anchor.BN(Math.floor(Date.parse(s.start) / 1000)), + end: new anchor.BN(Math.floor(Date.parse(s.end) / 1000)), + })); + + const program = await initProxy(provider); + + const instructions: TransactionInstruction[] = []; + const proxyConfig = proxyConfigKey(argv.name)[0]; + const proxyConfigAcc = await program.account.proxyConfigV0.fetch(proxyConfig); + + instructions.push( + await program.methods + .updateProxyConfigV0({ + maxProxyTime: argv.maxProxyTime ? new anchor.BN(argv.maxProxyTime) : null, + seasons, + }) + .accounts({ + proxyConfig, + authority: proxyConfigAcc.authority, + }) + .instruction() + ); + + const squads = Squads.endpoint(process.env.ANCHOR_PROVIDER_URL, wallet, { + commitmentOrConfig: "finalized", + }); + await sendInstructionsOrSquads({ + provider, + instructions, + executeTransaction: argv.executeTransaction, + squads, + multisig: argv.multisig ? new PublicKey(argv.multisig) : undefined, + authorityIndex: argv.authorityIndex, + signers: [], + }); +} diff --git a/packages/helium-sub-daos-sdk/src/resolvers.ts b/packages/helium-sub-daos-sdk/src/resolvers.ts index d1e0cdb83..6a3a2bc2c 100644 --- a/packages/helium-sub-daos-sdk/src/resolvers.ts +++ b/packages/helium-sub-daos-sdk/src/resolvers.ts @@ -170,7 +170,7 @@ export const closingTimeEpochInfoResolver = resolveIndividual( if (positionAcc && (proxyConfigAcc || delegatedPositionAcc)) { const expirationTs = !delegatedPositionAcc || delegatedPositionAcc.expirationTs.isZero() - ? proxyConfigAcc?.seasons.find((s) => + ? proxyConfigAcc?.seasons?.reverse().find((s) => new BN(now.toString()).gte(s.start) )?.end || positionAcc.lockup.endTs : delegatedPositionAcc.expirationTs; diff --git a/packages/voter-stake-registry-hooks/src/hooks/useCreatePosition.ts b/packages/voter-stake-registry-hooks/src/hooks/useCreatePosition.ts index ae02c4dfc..4be8b111d 100644 --- a/packages/voter-stake-registry-hooks/src/hooks/useCreatePosition.ts +++ b/packages/voter-stake-registry-hooks/src/hooks/useCreatePosition.ts @@ -138,7 +138,7 @@ export const useCreatePosition = () => { registrar ); const currTs = Number(unixTime) + registrarAcc.timeOffset.toNumber(); - const endTs = proxyConfig.seasons.find(season => new BN(currTs).gte(season.start))?.end || (currTs + lockupPeriodsInDays * SECS_PER_DAY); + const endTs = proxyConfig.seasons.reverse().find(season => new BN(currTs).gte(season.start))?.end || (currTs + lockupPeriodsInDays * SECS_PER_DAY); const [subDaoEpochInfo] = subDaoEpochInfoKey(subDao.pubkey, currTs); const [endSubDaoEpochInfoKey] = subDaoEpochInfoKey( subDao.pubkey, diff --git a/programs/helium-sub-daos/Cargo.toml b/programs/helium-sub-daos/Cargo.toml index 48f21eb89..ffa75c50a 100644 --- a/programs/helium-sub-daos/Cargo.toml +++ b/programs/helium-sub-daos/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "helium-sub-daos" -version = "0.2.4" +version = "0.2.6" description = "Created with Anchor" edition = "2021" diff --git a/programs/helium-sub-daos/src/instructions/delegation/claim_rewards_v0.rs b/programs/helium-sub-daos/src/instructions/delegation/claim_rewards_v0.rs index 9f2058a0b..547c394f3 100644 --- a/programs/helium-sub-daos/src/instructions/delegation/claim_rewards_v0.rs +++ b/programs/helium-sub-daos/src/instructions/delegation/claim_rewards_v0.rs @@ -60,7 +60,8 @@ pub struct ClaimRewardsV0<'info> { #[account( seeds = ["sub_dao_epoch_info".as_bytes(), sub_dao.key().as_ref(), &args.epoch.to_le_bytes()], bump, - constraint = sub_dao_epoch_info.rewards_issued_at.is_some() @ ErrorCode::EpochNotClosed + constraint = sub_dao_epoch_info.rewards_issued_at.is_some() @ ErrorCode::EpochNotClosed, + constraint = sub_dao_epoch_info.hnt_rewards_issued == 0, )] pub sub_dao_epoch_info: Box>, #[account(mut)] diff --git a/programs/helium-sub-daos/src/instructions/mod.rs b/programs/helium-sub-daos/src/instructions/mod.rs index 416d0077d..a8061204e 100644 --- a/programs/helium-sub-daos/src/instructions/mod.rs +++ b/programs/helium-sub-daos/src/instructions/mod.rs @@ -7,6 +7,7 @@ pub mod initialize_hnt_delegator_pool; pub mod initialize_sub_dao_v0; pub mod issue_rewards_v0; pub mod switch_mobile_ops_fund; +pub mod temp_fix_claimed_epoch; pub mod temp_resize_account; pub mod temp_update_sub_dao_epoch_info; pub mod track_dc_burn_v0; @@ -24,6 +25,7 @@ pub use initialize_hnt_delegator_pool::*; pub use initialize_sub_dao_v0::*; pub use issue_rewards_v0::*; pub use switch_mobile_ops_fund::*; +pub use temp_fix_claimed_epoch::*; pub use temp_resize_account::*; pub use temp_update_sub_dao_epoch_info::*; pub use track_dc_burn_v0::*; diff --git a/programs/helium-sub-daos/src/instructions/temp_fix_claimed_epoch.rs b/programs/helium-sub-daos/src/instructions/temp_fix_claimed_epoch.rs new file mode 100644 index 000000000..0413e3081 --- /dev/null +++ b/programs/helium-sub-daos/src/instructions/temp_fix_claimed_epoch.rs @@ -0,0 +1,23 @@ +use std::str::FromStr; + +use anchor_lang::prelude::*; + +use crate::DelegatedPositionV0; + +#[derive(Accounts)] +pub struct TempFixClaimedEpoch<'info> { + #[account( + mut, + address = Pubkey::from_str("hprdnjkbziK8NqhThmAn5Gu4XqrBbctX8du4PfJdgvW").unwrap() + )] + pub authority: Signer<'info>, + #[account(mut)] + pub delegated_position: Account<'info, DelegatedPositionV0>, + pub system_program: Program<'info, System>, +} + +pub fn handler(ctx: Context) -> Result<()> { + ctx.accounts.delegated_position.set_unclaimed(20117)?; + + Ok(()) +} diff --git a/programs/helium-sub-daos/src/lib.rs b/programs/helium-sub-daos/src/lib.rs index 1d97b22b6..156c136df 100644 --- a/programs/helium-sub-daos/src/lib.rs +++ b/programs/helium-sub-daos/src/lib.rs @@ -147,4 +147,8 @@ pub mod helium_sub_daos { pub fn track_vote_v0(ctx: Context) -> Result<()> { track_vote_v0::handler(ctx) } + + pub fn temp_fix_claimed_epoch(ctx: Context) -> Result<()> { + temp_fix_claimed_epoch::handler(ctx) + } } diff --git a/programs/helium-sub-daos/src/state.rs b/programs/helium-sub-daos/src/state.rs index 699fcc208..5cf909e3d 100644 --- a/programs/helium-sub-daos/src/state.rs +++ b/programs/helium-sub-daos/src/state.rs @@ -231,6 +231,21 @@ impl DelegatedPositionV0 { } } + pub fn set_unclaimed(&mut self, epoch: u64) -> Result<()> { + while epoch <= self.last_claimed_epoch { + self.last_claimed_epoch -= 1; + if self.claimed_epochs_bitmap & 1 != 0 { + return Err(error!(ErrorCode::InvalidClaimEpoch)); + } + self.claimed_epochs_bitmap >>= 1; + } + + let bit_index = (epoch - self.last_claimed_epoch - 1) as u128; + // Clear the bit at bit_index + self.claimed_epochs_bitmap &= !(1_u128 << (127_u128 - bit_index)); + Ok(()) + } + // Add a proposal to the recent proposals list pub fn add_recent_proposal(&mut self, proposal: Pubkey, ts: i64) { let new_proposal = RecentProposal { proposal, ts }; @@ -341,4 +356,33 @@ mod tests { assert_eq!(position.last_claimed_epoch, 2); assert_eq!(position.claimed_epochs_bitmap, 0); } + + #[test] + fn test_unclaimed() { + let mut position = DelegatedPositionV0::default(); + let epoch = 1; + + // First claim the epoch + position.set_claimed(epoch).unwrap(); + assert!(position.is_claimed(epoch).unwrap()); + assert!(position.last_claimed_epoch == 1); + + // Then unclaim it + position.set_unclaimed(epoch).unwrap(); + assert!(!position.is_claimed(epoch).unwrap()); + assert!(!position.is_claimed(epoch + 1).unwrap()); + assert!(position.last_claimed_epoch == 0); + assert!(position.claimed_epochs_bitmap == 0); + + let epoch = 2; + position.set_claimed(epoch).unwrap(); + assert!(position.is_claimed(epoch).unwrap()); + assert!(position.last_claimed_epoch == 0); + + // Then unclaim it + position.set_unclaimed(epoch).unwrap(); + assert!(!position.is_claimed(epoch).unwrap()); + assert!(position.last_claimed_epoch == 0); + assert!(position.claimed_epochs_bitmap == 0); + } }