diff --git a/new_state_fix.json b/new_state_fix.json index 2b1a0b4..f130477 100644 --- a/new_state_fix.json +++ b/new_state_fix.json @@ -1,1055 +1,65 @@ { - "name": "KYVE Testnet", - "ticker": "KYVE", - "balances": { - "vxUdiv2fGHMiIoek5E4l3M5qSuKCZtSaOBYjMRc94JU": 496800.4849859998, - "s-hGrOFm1YysWGC3wXkNaFVpyrjdinVpRKiVnhbo2so": 988900.4059159992, - "74hAWLfZgfGaLBdNAnONmRAsT0LkyQTFGlhZZorc7tg": 132000, - "5OWzyT1suRfinzRPuGpXbqwsxlDdy4SloRLCq5gJHi8": 1000, - "cv-M77pENN2DnThamX6gKyXxZEdPvOWQScb4IUX23eQ": 1000, - "Go2jUnC6Fc_yAmSGIc3kzs2oh7o4KMSFMSIXXQqsKes": 1000, - "xpuZCTFOycRmBC-PmkANf33-HDW19o-60H77tr9gPIM": 1000, - "uvkltYEgzmxaZDPr3jySF5suTgG6D4zQjRQxKlCDiUc": 1000, - "yblubyvpnYLa1x-3jjmtvYRNiEwRdkC2scR_dvGwn9A": 1000, - "QJBBTT-nlw__CRaMrFqspx1ogeJ5iUsljxUmS7J2Dqs": 1000, - "JhoNy3TyF6abVORGzboSB81-Zc7eY5xbVDrlI-JLMTs": 1000, - "eL4c0MdgUobAd862dHkuKL6T7IWe_iO_-ObHy31_G2g": 1000, - "TId0Wix2KFl1gArtAT6Do1CbWU_0wneGvS5X9BfW5PE": 1000, - "UMwzq9ya-9CH-TMKAnfsYQQJchD9SZHvgScMcVL6WeQ": 1000, - "UN1d-J8WzHQbFQRJW7y9uzE7-D0pp1xLI3jPvdPJlws": 1000, - "_bdvjDw6syi2mJgNfwEW_1BGmDUFJAkJrb36w_2Okqc": 1000, - "Uxuo-HElKJs_JmcOxXnSShvJLuGkGfPFLmhitrXFwLg": 1000, - "eUfI213UtoIiik6ePyeR5QZlGS6E7laFeKhnNXeGaGk": 1000, - "KcFvi2uqjXRuf1J2Fe0xpcDff11xUqS9Po-a5fDh31c": 1000, - "1zalEomi6GEsLlBRL0-DmgnVJ2stequ3QGzP3GZRmf0": 1000, - "MHiBr7uUMCuOTwQNmWG5qNVk83WaOEaX6VoWJJByHTc": 1000, - "oOSkJM_o60nZ86BFW2E1v3HvzOzG4WALjnjRjPdoprs": 1000, - "ze5Q4PqNR_R82tWIeZd6RS5sfDbqDAGYz-PLvqCwy3w": 1000, - "C6UHVjiBcjgxpQstYoNW-TQJ5ofCF1D-ti-bqzDxKqc": 1000, - "NnoZLnsCmlLqiQ14VZaE2lpV48kgo-1Vj5Yz1z4zZrI": 1000, - "DzaBE98Ave3xWN-plFlc3AdPPryGjdj61iGqwnL3TkI": 1000, - "wPDdZPv4RExHP5I4lLTtGkMO5SVgu4zBQUGwNPQD8Z8": 1000, - "KX3L-fEGG-XIVgFcOWaKPZnT6Om30xgpj27OcJvyP8A": 1000, - "rKvfIe0ydOyAvxLIvq50nSA5asXN7YJUVpsUPxaLVx4": 1000, - "7LZNlbdtSdSOz5k4BfRucAA0CLRTTG85os6pQz7aUUQ": 1000, - "GndZ9Uha_8S_uqdCGZI8zgdJv6AZu9R-qG-oxGIgdEM": 1000, - "uAxYWwAPrfDUzR1ZBSYYV-E-L3M08zmtdTg5ZmkoWnw": 1000, - "ihTbYNH6F64rOuiVD5QwPqDM8mpYgtwi3QTknsmTi_g": 1000, - "f96PkB8ejlr8V2vMvuiBHWpTjiBIRdINUXn_SBarEro": 1000, - "LA10KNfQBFy7rLOGHmUu5qHFeZLdJU0XSfVTwBbs_FI": 1000, - "JV8dNX232DDOIt-_EgiiWcHocLSlKZRMHhqzi7OZu7c": 1000, - "2JBBksKzmWBf2a4V-coNadNc8SGttZuLvxN6fwvSle4": 1000, - "La0gHIbFeJvc-3hr2ppwb2owFOd23GfCf_5YxDuo7AU": 1000, - "YreTE7yhikvi8cfuKWJUjcrf9ldg0ybpPHIEeByegQo": 1000, - "4TEruFcITA4pUOTNsVtMCYnlRufxiO8XHrpI7HlqY58": 1000, - "TXMXncg2xFHKH9_1o7hHafb1yWPgyqKCMcTe84IZMIU": 1000, - "jrikFzzZrrDkyew6oBoFdR4R7RsEEUAv-h9uYta-UnI": 1000, - "BsqNZfCinMIbtYKjdMLIaxSxtPL1h4jxfFfjmSlXD0A": 1000, - "WR21UFF6DTWHYuLKm1NA_JjRyXVekUukzjY1LWAS5pg": 1000, - "TG51JlpWtC7AMCikqOqjkaUcuHn2HQ2SBNP1u6BYY8E": 1000, - "LLvG7NPe02s_mqgB6crmjoaM1DVimwDpPKP5E_0yUew": 1000, - "soap_Gw7lx6vkfZPsoXQI4x_ShSjfGc70xjZu1Ry6Mg": 1000, - "Myg_rC5z6G9GyC3lOTeMuk8cPeGeKoirwd_VyV7aRsk": 1000, - "iCKby7y_D--ctxXXzAt7l5JfqrErym4nE9yKLWPjuRM": 1000, - "734i6YAZfO2cfxXrw6adph6_A2P-pgOmf1k4PSyNHiI": 1000, - "icwGQoRVw4GCYQpGBAKtMTScYu2mb_bNyU-9qxzRtXw": 1000, - "Ep399j3lz8U6iUiM67Sd410fES8H51rkxc7s-SGWMTI": 1000, - "3ZEFXMDQ3LR2Y2fJKbLsIC3-L7vwnQSE8hJZ2eT3QrA": 1000, - "jaEeQJnIR25B5cEe6Do2APWAPB936d04KmBN5MndAK4": 1000, - "WPN1kAsokxu2-9Zmvq8Xy1ZDdoOovylS96Lu0PBN5gk": 1000, - "3hguGD-WSaNqzr00C9oEVvxOF6BeL-d39zC5ea17Eyw": 1000, - "FP3-xLxvtXXQAg9wn3maO8CTqjnpOiDQa2XaNcCUsbs": 1000, - "BKHdRHmhAYMoKDJLRcIiw7FNgg29VJI1HLbNcJhjLr8": 1000, - "P_AdEra_7UwQWv3SgMcmeyhDezKCwzfjxqyJMnBZQEM": 1000, - "wZCkNcbvLtMgFFoDrDI9seYPdGHJohwA8b8lQKQSmZ8": 1000, - "ObU20MJAXesxGhMxT_61kuzTq3EV0TSYITa0EwFwyMc": 1000, - "ms0pbvc6B4Wx4bJOLH1dAtMf-AvffYhKJCTLp7xTUCo": 1000, - "2MQ3HGj3g7C7tIoiXTS730bz15oArGppwH0polYVLU4": 1000, - "ucb-hAMRRazm2r-Ab_DTgFuB2bNCoegmV1-ZmTLfIZA": 1000, - "5nqRY-3G7ITs30ocKaV0YZ4rkChUr84VFzya682mzRI": 1000, - "C4dYJAf-x8Z2sVMktI2F0mqNPa-SXlux1tJllWYC5zI": 1000, - "4-kjnx6rqY3qhdQqeMuLFJIfppTZ3Oqs7vQJDa-NoTA": 1000, - "jotJOvar0HxHoIjt6sZcNm-FcneMSANAqYyzxVCufbo": 1000, - "VdXCJdKquMZuGK1W0Yi6zk-8HO-UC85vtMhWUOroY9g": 1000, - "ne7Y3-XkriQckIBie0TfODVCZVgC49aA4h-vlHuPDKI": 1000, - "lMfIWbNcXmZzF2GBBfsIe_WoO6hi3Z9Lf8ALz8pox7U": 1000, - "c1hLXZjruPTm0nV8oliewy6cBHpyjsp5-SxZ-vlyh28": 1000, - "1OoK1iSvVZMf2NkycqtitcDktiJtG6mySlbAUfq7Psc": 1000, - "jJKD3HgGEuuebbtZc20Z2EzkFZ9vXxUJ2Q7fWG0Ew5U": 1000, - "B0VxN_TJ8VS46MtdQL2D9qKYf0VkVc_MjX5r36ER6I0": 1000, - "AxYa-OXeonC8_7CpAW7Pzy9L7e4y3j05x0hG1iXIsvA": 1000, - "nEJEoU5vKb2rzGqp4P_k5SVvp9h02dUpAk3TqSyHu8k": 1000, - "_pkpcsQC3Ko8KoHK4yNe1fPAtLke9IkTRVvAp24gfTE": 1000, - "M6vhY28qfXFtA9FA4WYybWK1vlWGr3ynWK08mjyc6Y4": 1000, - "b8Y0DAA5qZ5fvIAeuxnDfIoorNHu8jtLU1n0wmSwcA8": 1000, - "QKqN-Z6n0LWbX9j0n17DqYzcoH6o4RcQ59l9YUI9oUc": 1000, - "BVbTJH2xOqo8PulI1_mrd_LF1Rr6O02d32BZJf8ZM-c": 1000, - "TyFByPOi_JVwqTGpK3oweYLBtYFf5HmRoWp3cC6TnsI": 1000, - "GeGQsu26ZP2LzXhCRyrDCK92kVBOIGrLQvQlU5VBdHA": 1000, - "eosQsxKNy5hMLzQz5dC7i4d8Si7dPt4CEPto1v7Es9Q": 1000, - "Z9eAMiiVp1k30XCMrjwHPDBzdK4sRiR8rP3LrVK_PdU": 1000, - "VK8HDMICUO-NEJNk7sDEzzDPI5NZXjC5KBJAdHDCu7A": 1000, - "cCghzKtaL89bKFIrFJQW53Beyt6rMgOOd5ff7kue-x4": 1000, - "8_0HpzMpKFx9kyltt2M7QcYsPHPM8BM7ZkYahY49glQ": 1000, - "FDAU3o7gAx46onUNf8waoQRoIR7JlKwAmG_9gOhrhbU": 1000, - "v4dXP04WYwCZl3P3zZGLctMGfDkqrLETg8q0VjzIEXA": 1000, - "GjbeJnzZ0Z_jhOQ-4vt3zXLtPH512w3-0fd5gAp8Nqg": 1000, - "2wx9abXEMWvzzCmj0LQ7Ve1L9qn966chHZ_42vOXtdg": 1000, - "ByqfyUvMvd84Vm_UU_b3zd5vKL2hdEI5vTHqMzqEKbY": 1000, - "ac-j1qMUXDgDxpqv5u96SSWn7pCLpKxdLvf67JxRBMs": 1000, - "ndQl1O2kRaFOb5ugkNmkmmVZ1q6h0QhrQU_bhgT2u3A": 1000, - "0-NWoYw4Od4Tmw0bpZdJC4cHo7k0XbyziM_YL1NN-_k": 1000, - "XBpvd1Eo5T7S72j5uRSOZ_OHOlieC1CS7zDVNQZ5ghA": 1000, - "hBb6DW4CeB6A9cqT-JwNQDxbosJ_FHSnuNqtWeQ7wug": 1000, - "0bTbg9p28PK9djt8sW_ri17BkwRtTIaURZD64jEq8aQ": 1000, - "YVwjCkk69Rzn395JkPGAWOUQ7zvUg0EVR1qFF4-R2Lo": 1000, - "qs4ilm6p3gU3BCPOzOz4WEpDNP6_4O9PQvwpi8I1x3Q": 1000, - "Lc9hKoeW7evGp8dCdpdpUYu1VFUW8Zc_Egj3a0IgVxY": 1000, - "sI0XnnOlifS7WJiKqAHuAb_zbMVYvoYyaHiSGhJNwak": 1000, - "syoJvy56npD4zPTuX-pxgseRasTcyneN3pFGF0k03x4": 1000, - "rVie66nCUG9I4XTdK5EW5hVmSnjA4TvfS28nm_E2U3s": 1000, - "RAsIw_uRkYTVBdKRmiG6xZgWy8ZrJpn0EyCYbFg_b2Y": 1000, - "U8l4xwRy8pCW854YtJdPg4XayRpzDTERtYZ8JXbHVlk": 1000, - "RnsTqQ9qXJOnU3b2TeEs6yeG-koJS_jBtSqBioZEAJI": 1000, - "DYegkS_vuZn5b7uDeZlyyFtaUIUP409fIeQIcXNzoIY": 1000, - "kaYP9bJtpqON8Kyy3RbqnqdtDBDUsPTQTNUCvZtKiFI": 1000, - "wjEbMuYmm0e95mzWtL9YpbW9oKBGlbFX7Ye1k9rcr1M": 1000, - "uYZRp5udvNv5lcWVxuXsNE8rR5BeArZf8WFSLWlwdGY": 1000, - "3wizS2roUNJa4h3uN4MZomdwfB0ZE1Vt5vITtbbrPaY": 1000, - "5FmrzdTs7znWOMm_OWf3tB2QbU6K-iyqyUsdy112KuU": 1000, - "MrXL5R9uU2Ey7YlJiEpq838iof-_HKHZ0azXlYEbBC0": 1000, - "n-1xGtjiVIbkbTmxwnaCtstk9pPgPqbPr8eFRp-VN60": 1000, - "AxLrPxmA8GU2Vc6EFI4ci1EmpfFxiauUMGFM3DdvR-w": 1000, - "Fz5rY7S_MZS0sapH0sQ0M9y6aCUWAXI4ckgA21jrBrw": 1000, - "vFqkSeOEt0_IcdnS8CMjm5ZFpScN0Vg9Dhj-m6zAyGI": 1000, - "_PrMvVTdbNkx8T7q2wQuqHvtoPMeANAR-L-jn4B5s6U": 1000, - "48zDZvQamu2wmjfqvhxHUJXR2_CkaznN1T-rACR1a7M": 1000, - "NCHjY4uT2Tnt4Jq9VryZI29hU8QZkX-W5mbYA6W1Qsc": 1000, - "KjfMuqS4St8um8Eti-Ue0qwHPd40DrAj5muAD_PZvAE": 1000, - "hp5A9Duj0brRXNFA3SgjR4XkRxRpzLDT24lseZuZ6mg": 1000, - "Uf1ZvcKnTlnufr21ExRZJw9dgvLE_JQV2S3YdzpCseU": 1000, - "OXzVLb29AOm3d9eZwD9utC0ov04nxq1f3QjcZu2kjc0": 1000, - "GH2I5F_XTwHu4ys0PJZ1yQD0wuEecmtgbGTVfer0WC4": 1000, - "_WuCtxisn6g_SCOH4cUwDJ0U_K35-HXeTDV8XtBvDAw": 1000, - "g_CLPoCrCTKwTEvCkdsYtHauhDexwQMxQnRf5EaOIRE": 1000, - "rBlJOAwMWzQOkKu_Kj8BkwR9BV79clSk3hyPHSyiQG8": 1000, - "O6pzH-TokTCuWvPw8tB_HH8HuKAw2kVVa7CAAboDvMo": 1000, - "7pKOGUkcJ2MCTIL1qWyK8ieUWOWmy3tBAzBLbFqeRfE": 1000, - "scQBTLf-CpqCY4qVM2ucj5YVyMAOrS3d1_SW2lfB_Yk": 1000, - "FRKRqxS15R6gV_XpANwuQ3EyjzAdms5axZDFcHaW95s": 1000, - "U1FhMfa6eJlLfbtfUAeonBVjg7NvWTnmP7tUlW6o_70": 1000, - "m7CbcCpO4RGh3yzKbgV2vmGs3f4vmWX7X4pHzttuHYA": 1000, - "WgTFwKU3Dc6pXAyJK6VjMYNkSfhmA-BL0k2sFO5bRr4": 1000, - "pSRVzok9Sshr4GUd-cgXcEb1uPmzmXR58yw0TYB6y6w": 1000, - "blzozxckWuEJhsnpgeWZYCoQlis8pIjA8nSTkKatEhc": 1000, - "Ixug8Y4qrRLnjz6nxaH3ExEeIyQRM7mYUf9e96zFHro": 1000, - "YuHthVFab6SS9SGcGqD2rZyp4fiXWKbfopBiNIId_ho": 1000, - "Pg0VUxYiKotOSTELH69RZkGM4kMGxG-QLpuCs3C5eSk": 1000, - "-BI6IYl4H5dNJg4hEMW2EfAO6Qaa4CQogyQyoiUAQxQ": 1000, - "E4ExqhK0d3ay7Nocg0bGWCgOnZdAsTvegA_-KJfWKRE": 1000, - "y-4WGA5X-alh1igNNk5cyEO51BqLQrb7Rv-3GyQ4jNY": 1000, - "fHO85uscDSUtpDuJXXJ3g_kueyfvJuaK9TKFHST8pXA": 1000, - "MvwUeA19UOYIXfjj_89hv6gqU3erd41ikN-dBbSADCc": 1000, - "Xio-ECRHdhodaZTPRSXI9yIwGo641MQCEPdjEU6SMbI": 1000, - "0i6TLRlGuHc3_PbwYxeF5m0jDEnivd8SkPAliNAPbus": 1000, - "Gs87jx7ePPpZxR0oHsieKgYo1KOcLmq9nbfg3sIX2i0": 1000, - "mDDf3qDK8XQACciOvoah6zgfdLb6DIKosoLRDrb36xE": 1000, - "7DRXZaBz42VMzXvNgP3SQ2sGc7aamDAs0GokFMQF-AM": 1000, - "jxZ4fOdYKjGz2VS9hyWcUy7IcRD4t_2BkoIaP7Ui778": 1000, - "stqwEr-8S9o6DLulCy0_m-yVlc1v8GYCfcWKwkSNB_Y": 1000, - "ILtHXBonwlA6DidM6Soqqvz_6vWcrbnUvZR7lKWqV8A": 1000, - "et0P0iFWakSKnHnVyxJq7svUfUJCE38zM0Zv2n0ZYs0": 1000, - "JpJc1tcsXG_ZEV6ba1cZkUCxNGDimKDqOX43qWCTg8s": 1000, - "bcpjGzg_4HKFbUOFwXwYGSBFG1ekZ4fxICfyEd4KI8M": 1000, - "vrlzsVKPGri2eGQbrDnYPHN20S3tKiSEI-E_GEkZrFw": 1000, - "6ucOoR_J_IXFNgtxrW0kvINLrMpSYV35nDkgRPOwM5s": 1000, - "m1JpAI57adOXL_nJdtmYYYt72BbEu19Blj73B8urhSw": 1000, - "wGUcCiKgk81QHoHM2XJ3Kx9ucZJ_F9F-G896ch2dPZU": 1000, - "p_MfAkluybBoK8UH8KD6_1oP1wKZEE5xjBL5qi2Q97k": 1000, - "NKIuJiN90UTPqNT3HAfeB4mVw-RTCOwohi80hBVDgyA": 1000, - "Nc0JCokF5iwdcZYUwDjAj3maxAWzd1VualLodNef_Ms": 1000, - "7iF5Jj63f34iATkUmCY_O1ZP5HUOYxZPQUoU4OB0VKI": 1000, - "rcU4rd1uKa1ck2p2RF9WHAt67GiAFzYqlVL1ogyq-pw": 1000, - "p1SYDbcLRlDtUD5cXTKweFu0PVUMTx3h3YBrojsLidI": 1000, - "M7re9GiA2bc0oQvLXqlSeMifDfUfizG_6V9g020hL_s": 1000, - "HKPURYdnBFVfEM2HtwV4vMJZSY0cLQBwpyq0JvKJaZU": 1000, - "viFsz8YQWdltWKMtZiKGP1v2BW_nlY4BQ5CleDGX_0s": 1000, - "FtrD5oG08YFzEhEzjDvB7drPa08-nC4LssH7My_5-K0": 1000, - "Pk3Gx-9pmpJNlicnNHxRWrziVilHjnz4WVdvBBHeHyk": 1000, - "68Irjx3OYkmDrCoW8YJpZOUjXW5cygRA7tB2LXXoHuw": 1000, - "7egPj2Dx7yE2uVVlF3bTfOy8ShZRdgXry74U2MMqbXM": 1000, - "2oUepUQZGaq9TkR3cNGdm-QGm_XoVF8xdlgj5XAGcTM": 1000, - "5LaaMdy0k7zwve7LHOOSy1UqFU1zc-fbIetAtojXo0w": 1000, - "NctwLwthOu5pacUeuuJFKFupd0cwd3PlC-BEMeNoRl0": 1000, - "lJHJ9XuvBHYvNIDBxXdajwk0vOOHsi1q0MaUn8XHYNQ": 1000, - "wY6CVRC-K9lW4DhsZDJETASOLqKxNspNGQwGMC3jXyg": 1000, - "9HjiHdWuloRBIY4_06mTFZUc7j9tnr6mR4CbKl4F49w": 1000, - "kMLaRGcuPpU9K6u3F2L37JHaibK9WiLQHehC_Z3B7pE": 1000, - "53T3fUhzVQkG4aP-eMQieypwY7MEVwOP80XY1PufIGw": 1000, - "6LL7EU-CIVLSIYajnFelAQi6Uefv4lqrZBcv9bNwxFI": 1000, - "YAD9UFphgbN7ChqB0Hc0_qmfco5bWkWN4Zxw4HPg4js": 1000, - "R3pyr94KtaIX5x9YsDODV5cJ0mWjTsbQEYC7LB8DdKY": 1000, - "zv3O9mYIsyqIlKNkuRPoGdxyxcJWCFGElVv9y5oVe2w": 1000, - "ilnKoR2uVAEMZkUP586mnK_IKUK8ALafqZbh1G3NAgM": 1000, - "o0fVUlvUH7BVfMLlS-BvX7xyi9bU6qRWWPmzBNqx7Cg": 1000, - "-5Wi_avMpHAgHykpblIfsKoxoR8yG-P1l4l2nSpCJNQ": 1000, - "tlnGqxUXt-5_38o-ZQVmTSg4dH-5G_7GbgykRX3UFI8": 1000, - "0aBb2lgCUiVBv5h4SCN6OjpTNHGeaAtWVDlRi5h5qyU": 1000, - "tTGWoOBT79BdLbbGufnKTkLg8XPN37n5-lObDQLEXS0": 1000, - "e5tg_piU32KIrkn5d8auDeif5rgfdYWdjoKSovcocmg": 1000, - "Q4TxdQ-tDnN4iavbH4sOBMO-bYyc1avtGYvMwu5KQtE": 1000, - "xQBjjWFhS9kVm7NJgfPl7Fb6NCJBwPm5HpLMHlfJft8": 1000, - "60ClqWAa3_uz-qx0ZbqRz47kjoPHifej7hJQIdy4iJM": 1000, - "I68CUcrvI3SI8UnHvBrkz8zvpyYV7oR36XyREJRZtK4": 1000, - "N4W6ZwQrVe_c-p8R_yLn8wnKhPl-Bom_7QEML8jPuHo": 1000, - "JJp3zizew_2IEB7cSRy8IGFBulOnc9bNq5UubivOfXM": 1000, - "hqWNgQqoSrLBRxuW8Iaedcf_oFWc6K_cXsE_g8kCMiM": 1000, - "gmXs41570O623vldfxJv4pxnLfgHuKM0SZL7fY7cPhM": 1000, - "i4Of6kHjQaMNYeRPnNkc5snYWR8mj1nHAMB97pwnTRM": 1000, - "q3j-Km7bpzqtwKMKELn_T4ULjEYuVQvzgMkQWtS8Bno": 1000, - "BC9OcrWV_MnNEo481sUsjy52XopfTGPGDZ7Jn32Zc8w": 1000, - "u3M3m9AFJqkqEpYzNgVKwh-QRq0jjUjf4R48951zBRY": 1000, - "uTqY-kR8IpA9IKPzzDvrYzHPzMdC_D9Ubf79nAU-KCk": 1000, - "2vsW8GHVWtlsjZltf-c59uor6BCx0YaCSIZ7O2KrbkE": 1000, - "k04jXXFLmhH9L4SaXET4wTcJMh5RzT6i9SSRG48P5jM": 1000, - "qC-DFvOCoHOXc44tH5hZCiK4wOROc44zBnaT5vyJmVQ": 1000, - "cxIuy7Do9rrs8SlZJxfAKcK2qaTEHdeoObiNYZy2XmM": 1000, - "_T9anUFRKF151KwA2yfvk2KiYiBcisTNhs5AAeFNSCw": 1000, - "kYEBWhhrcv-fXEL4YJbzVQ28S1QNKh77Y2SyANNxZDs": 1000, - "fogYy5vM-QoVCBFK1jkxlAgTcU4rvonWtT84nLl8_Vg": 1000, - "fpPLJv0gar9T8nJG-lvkliJq-ph0GBrCKep-ZmQcHac": 1000, - "XfAuixvovsEtPE-pUoa77hTbu8d1yzd5UG9EuXauGXg": 1000, - "hnpVQeB0rYGj61SVHDVURfAPZbpLMWqbfjUaJ-GlbuI": 1000, - "JjnRBnrSg1Jm_aKZaC5g0hfTtJaKJk-5gcGIMBNaFcA": 1000, - "A8jWLJeX4IeQRvkMkdbeAaI34CiNRNPLXfVK--LuFYE": 1000, - "_x7cyrjwL3nq49Gm-uS3FcIHuz2mZAV83JCUukH21dY": 1000, - "XWpkVgzTrPVlYcsRE4GdXhJG5ynQ6hTMdC5RzGk_2FA": 1000, - "n2-quZHCOjqiV-LuVBZ8SFh1jlEAQrAErPDHNr-v8y0": 1000, - "8noBp-XIRf6w_knXYswl6k_dB2VvwikA0VbEWFs4fQE": 1000, - "u3K6cIduArBtLfOLD887jt34u73jS7F6aQONJHnX8XU": 1000, - "giTRLQCh3u06S-dYYf563zeFdCS8wq6VeqhzKrmdYrI": 1000, - "tYeTERdpNZmJkjjYEqhmQ5zzN5sA3tRWMPFo_l-4M7o": 1000, - "fXUU1kc0PCHjQTxg2lhSnG3uh1JGzsJJczomPxmlHwY": 1000, - "adWYIr0WDIAP54mmi2960mJ-dRVdLbHmilq5CKsuGwY": 1000, - "amv7q8rb3lKHvpDBuS6tgpppsrrjESx_5fgtjFKEPPY": 1000, - "zExp5MNcXadUsyp71SBm_qj3E8QOOUKnpBHW38iSQGs": 1000, - "jYUJ7YBM-WsB2AC3y9ROhitMyFfWAg6FY29bbXaFufI": 1000, - "jBo5pZKlO-iO_0ZJ72A8dv6JmlxQ559RQwyN4BxA6dw": 1000, - "7EyO_gT7Jczqek_WZinJSyOFs_WV1_fSa8H2VsFLqxM": 1000, - "ctyPBh16KXA31opBVbt_UGtsSWM_FtMYixH1PTyI6-0": 1000, - "oW42EG8PYvByCBnKm27lX3lqQk8-jajWs2qbkuo37fA": 1000, - "D6UCDChSX2WvvrxI3bB29rrwuUBtV73_Yh93RTemJdY": 1000, - "7hppJPPo5P219YxMP4NdgAr6kJwdhCPcp9tkUX0a4X8": 1000, - "A0v36iqPf5Ctr4MpMUo0mOZiJrsdbBfiylP63ptMUzw": 1000, - "4eWrGSxfIPznz0pAQnmJnN3PjIBLfmmq1As4qGQj3vw": 1000, - "v1IJRFQTdf2zsc0AFRA7KCMAqXAYNrQ4ceutXojW80s": 1000, - "RF_hCIOAxlP4NXeYnceHQJiVs0xsUGNpkhmaExMTee8": 1000, - "AGooAujAw49etgiL5boBEpQN3g16JH9pz5s1548Tckw": 1000, - "MM9oSkeaDHWKAHj-qI6Oz-TZikAX3IB5B5HCSt1jn10": 1000, - "ptbSkk-iica40ayFzGLCasCSTzv9dn4Eri3odC_sOKQ": 1000, - "a1tlJttky9qWatRovDx9LhCpTAGk3cuGiom8ueeE3y8": 1000, - "gntrX_DaCLG2F2lVPuwb5b5rj9N_u3FXHrRlBTc8M4Y": 1000, - "C9k1HzxxvFS84zDhW32JlmXB79hv3PFX5S4pQQZ79dw": 1000, - "pYwNgW1L4WDqTlGUTsAsLOy1X26LdIL-cDF5klLcef0": 1000, - "c9DWhLAXaPg9KJtXWHrdRIETq8p5fuAZzEM0Lm0HGII": 1000, - "sCTH37Ky1uIPcLt2xK5P1KGAYf884-bn9dMvsrHk9ZU": 1000, - "awpT2y2JvULrX2Tj7d9LTpIi7HGmpBzO1D8S8CUdBSg": 1000, - "lZr2vGQxK9hSnjmCJp8tJ_IVsGjy9z5PkD6cBYnPvUU": 1000, - "8sOC9NnvIxTlIg9FZil5QPVTKcreoDU_TjQok5jDO34": 1000, - "YzTPDCCfTEDPdAQf-y9BHlibR3JpNB3LBO6lxKmxDhc": 1000, - "6SXEQpmxbmuQ66IkqHv7Wi3wKOmz3eDbsTPYVdd-CdU": 1000, - "6eFT0FnREYdAYAd3X6MPBVQ7ASbqlLNpDtZksHJ2hCE": 1000, - "Dv74ofWm69SRPFSqF66VzO_eOBT8HCED0WVP6amZlS8": 1000, - "M4dncl74MoJ8FyZzdTH_DmreCTDpVpJnsmSKSbJKHjA": 1000, - "x2-CjWJmCRyphSQDjba47IljAYc5A7bX4rlQt7gf95k": 1000, - "04NugCOxPB0wz2RDg7Uzx7iFn3W1qbT_sa6wpkdXrOY": 1000, - "rIMi0NAb47w-5KfH3Sm5csv0P6IhBnxiKI2IB2k1gpc": 1000, - "d9_zzOhhe4BTbch-IG7VKglrFxfT1ivXKSuNtwpod6M": 1000, - "2Lf6AAl49IDRxTNuVHQeWCu4rRwWCQ77FlvngUMmKrI": 1000, - "eZFGrJhNf191QQJc_Pj4voqhFzJvP4mWNHcYr0OglZk": 1000, - "jAVGiq0LqCSIZj6jGUvBSlaY042c8E_vRQ-AVhwEkuI": 1000, - "XZhUBWIfQLCfrWJvjaV4DYEfckJD9KkpV3a7uMLWsfI": 1000, - "x7AporHo9WBH3NURO8A9erC3HvZm-vPqb4wPrscs-Iw": 1000, - "L1F5IPNntuM1OIDWMEgEzZP1sURTfSEYJdB6STqiG_g": 1000, - "hkfNlKH0qnnOlJNdKMTdMtP8VRwZfBhUx0mpuaon5q4": 1000, - "nL2ad9hms7HSujEmgzH91aq0dMZvkqICn7oYmWuHBfI": 1000, - "HssQwoUR_EoXL7sezDjkPqcJyFeV-wnBDjV-p0QzskA": 1000, - "sGS3A_sFc32ZPNzWy5k9RtjknDHSgeAZx1EyvwSGddo": 1000, - "ceNFs5_dYKBOSzoQljsGaePrEySAAZMfQ6EqtNYuteE": 1000, - "0vZK6-e2ScCbHqYFpgWbIxnnW7NgWgfexpmoLuyenOU": 1000, - "3fSSTd0J4-wpgib1g2zJE84XBoUqe148_95tegXK5yk": 1000, - "eyQG3ZY9EDxu0GE2CeggfYubUpfhQdPqGhgebK0pPhg": 1000, - "M70TGaLcYWJddCYoPw1fa4bp6S9DmP_msP2DDYepkVo": 1000, - "tovwH1I9aj2dYxIGU9A05B0AxVyOkeHD-lbUO_rmvS8": 1000, - "Qse3u1HNJ2U01IpdYupJ1lgr5Kx9iEwWKJlJPW6WGeo": 1000, - "KUG4t2EdvlDswnK4cy-liNWFfAM_ajCmRH3D3avZ71g": 1000, - "1wovoBRUR_k735sMPZC9129JdgTxZdZ10vmrQVxRYDA": 1000, - "wn2pI71Al5t2fl0VGs8Str3cl2K4XVlRH-u1-6pnvx0": 1000, - "9iBv4aFcYXmKL92B0msEk81yeKt8X6bDmimCDjzU1WE": 1000, - "L_kawJnoyrL1YspEqBskDiXk4oU8DN0a12zQvnV90OA": 1000, - "3s33KRGW9qyDCVCSeN_SjwCaCEk5hrtcBfGVmCJrPB8": 1000, - "DZOeoAuUXuU8JT7yV2RU-5FndHVOQFEyKdNBov7XZk4": 1000, - "-Vz2t1AsFFjoXK_8z-S90spmItR1lg_MseDsBSJYn94": 1000, - "tjLt423mUvZ7_MAEOGXn9sOnlfc7sB--zHNvH1Ut0sE": 1000, - "x7mXR8swgn4TrH-oe3r26TCnxZhwJMGLdHrGh4V7QB4": 1000, - "EGxuDtoW8AFPM6fawp-n7TXtrbysNuIcuuoDhO6oym8": 1000, - "x80z0Ztc1Q3lh0j_8vZW-kkA_pUkbJ9_A0311a8xsB4": 1000, - "yYVzfbLRPbdZjv1pRQ6WoHpqChkhZFv1trLnoEqcuns": 1000, - "8q5nGRPxQSqCCsFVqSgisjoVc_Mflb6VkzS-FjhJ_og": 1000, - "zwMpyoY3zL1BlmDTENz458MVtGfChfp3YO6_afHqLHs": 1000, - "vLMktLo0kB-mHZRbxCM1BNR11N9GjLtUncs9z2fTnXw": 1000, - "hb_ODd5aSClAFIYIFtVsE-XYyR-TreTV9Hc7YxS4o-k": 1000, - "OkJaHIfWJL1E04VwX2e4qcTIc9UDZeU_2Ev22Eevuzc": 1000, - "djDUEaHqJ9fVo64Ldn51cSpfUF9-vcNuT2xNiDS2eCs": 1000, - "landHqTas_1abefQTOgEet0ekfBUzybER38g79MquDU": 1000, - "uU0xuc3D33ZR6kax5m5RgSXwRmxgWU_ut8-2kSNPZ8Q": 1000, - "oR3AsV60I4J_AJpMFJQLSz6_nSfB1gH4AZePgPItE7M": 1000, - "4newNYDtwKKTlsmdOKsqc52-THdJqjicFfXCaDMOlAg": 1000, - "JE16boREBZlW35piGFXxg11yyNDsz8cRDwEbq0Yhk6M": 1000, - "7n0jJbnueWTLtlbmpIKlfnvRJd73KN4GKIijwc5196k": 1000, - "iv56-0o7VDRiDTUyY1TLm9APYZf7KRVQyT6Fya8XxOI": 1000, - "aOUpMQf9BCSJamud4yO1TROBRM7iMdq1UbqiUaxyey0": 1000, - "mwcqQ28J0LSEaXC94lzViQKfOs1GaySTZAqbAheJb5w": 1000, - "-1bsVev-CQPqDfwCyE3hzI4SC9JIyTmJomGCnNLeNBc": 1000, - "ZON87wb7TefuI06HOesLB3_AP6fMsqMUZZypZf9StsM": 1000, - "OXCJs-k3HZnVgu5p97219aWkE06pnAvE84VHO0y-nt0": 1000, - "GuTckFoH_9B72IzUaN_5jiFtR-Qe9UJZNXW72xZ7-lc": 1000, - "kWwf3INpI0D5mlIxJNviJ7NyvzYsgWhSBDdFiBerEYk": 1000, - "M6tX9EhDnpvvAhLuZHp7aNfi1ENOiCsRLpZwfwxgEOs": 1000, - "hur8ZpQ6VrVlUOfw3qPVThb1oWCZyBjUDT_Jau6Sr-s": 1000, - "Mt2hJ1O3CzIyREZCiQ-lcDfuaDrDsgeKnPCHPqHawFU": 1000, - "MEzlyQZgMt83Xdxvzva1QOPafLLUhBI5NP3bfHFpZ7o": 1000, - "YmAALC5LeHemJUNwI3vlndIK97DZTOePR3MnGHGUEwk": 1000, - "vax4Axh4NV8XcJ0-Ey6Jral5cVpKNrPOcGg1GJqik8Q": 1000, - "oLUCPTpv3iyqsj-0TsAfR4_Nj4H3XYz7RZ463VZJStQ": 1000, - "VM5hiTAFQ8vj7rjYWeD-H3x0HwW4ppvicp1pBDIec0s": 1000, - "-wpkdSIiHVw74YHKeD59pZ8oDpK8yjw5XN6xMtvZPRE": 1000, - "P8idSwh2iXs8I2TKLoTWzZcwyDGuBIwWaoEY8qfPqr4": 1000, - "RypwYmJyfTjGzHq5PLr54U1pya2nwS_-Bkhhva6wmiM": 1000, - "TyB4GTkoJ_nevQ_fM_rNGPvmsc21XXaCuA9Z2DzaLQ8": 1000, - "wq0ZRfqfFRObq1m_-8uOOVQmEj1YieXtRgVgSdxBi24": 1000, - "1IzN9Um262mhSc4GlecaHC0ox-bIt80LIGrOCRhrQjw": 1000, - "OXxH22JExBVot6gHdSqYdu8e2oytTPchh-yfb3T8MeQ": 1000, - "6IaEmE9H_HJ29PW4ugoKeYcOyjlOh2T7F4yA8_iiaRg": 1000, - "HpXnZAFE3SoWf7gtZlfMicr1apkpFYtdYuH3qdEqlIs": 1000, - "MazeN-RWK69lN_AD7N1MWQz8gPjXAUpp3RXl1wmRKnU": 1000, - "AULezoEflEzCMjEh69dFQgp_mWD35Jt56IKUWLHGXrg": 1000, - "6k0MRRf3nEK_PjdB0LtbzpYtYDy1zKGp2OfNgwqf0iU": 1000, - "ap1tnSw3c2_MmCMgImF_oeOTBJrkd_jPZx62YHaNhzc": 1000, - "5iqoFKg41jDt5-PygKuZnj_k--d8BSH_sAYsgwnBEb4": 1000, - "cVKFYIYeLCFxaPhgY56eAsq5vQpu_qDXGXlMx70P3YU": 1000, - "8ASmB0N6vEj3eZWHUsDHeCsobUlrPxpepyhgOmhy9jE": 1000, - "j5ouL6u39sDIwt0aAcf8Aj9lVoYsLxANlG2gRcZ5V_s": 1000, - "R0QlsB80jP_vuMLkWe7r0VYlzaoQYFH4RBB1X5sDzzU": 1000, - "G7Agkcmf4ye2EvFe_w7kV9pjRAfP1_OwkA7LIwob9Oo": 1000, - "pWVXU2j6jzo-IWVUkg8fL-QtJj-zmvj5UWm5pCm4E5c": 1000, - "y5Z6mRExEXBN3-p_6ZrwEveNwoek_WrUzyl3ekuKGtM": 1000, - "hzApN2vUPvDGkmVr26NiyutmuW3AI2MFHAr4z_skqgo": 1000, - "WQOlBCPeVqyA6HRbJJGsJc6ORHyMpTAwT39kHZwOF2g": 1000, - "fZXESwckqk25rjoOvUEGW-bKTMoBvsk1P6P_zhCZDuU": 1000, - "FMD0_GhgeHzBUjRH4lWpIxTVNT9J7d_o9RZvvGHgDlg": 1000, - "gXerPg-Khp1lZutojXKclRR-G1nzIDEO7n14HK_snjQ": 1000, - "fO1ArtsdRZP2g0qsIUrDemxBg8SKCTNmo_Pg_qTJNJw": 1000, - "JgaPVuIbFeQJaIkxT1sA4EgTen7VBTJCqVx8BBdrqqw": 1000, - "VX5qDpex55-5sz02GjTAlHVMI_uTIithkEog496UGP0": 1000, - "iqGIvRBbX7miitwyNlQg590rvu1-HAuWPNuojFAynVs": 1000, - "WJibYH2ItSO_juF7EMYO8UgP3IC4hK8VhesTY3adESI": 1000, - "feqhibZzFwlsQiwjh5XTJPHAJvbRjHoADjtDMdOvmo4": 1000, - "354vR-ByR8fVll4Pp-xlOAqYOSI4QiMuh-LSAWMJdBo": 1000, - "xi3ZWw442-nafCQKNX9mY_4EpRr3mccO-eTFKzB2_0M": 1000, - "ZgmrctzosupSt-8BgKUJ6YlOs5lds96HNjFV2BzMpVE": 1000, - "sIJDKTI_7G56DIUMfOEtgecp12cuzYmaQuY_34UonlY": 1000, - "6jw62a-EGfTIwR952bnASsRQQYBm3LrdkdUX2LKdx-w": 1000, - "7wo7fZ7eBmWnulxlyL_fyqBlrQvi4lXPkJODKwS7fjo": 1000, - "r6t6UZHcXgb7FkRf7Vmzfu7Ooasgd-C5KbrdDx9cbKo": 1000, - "xjm4JlGSPtKdmhq3ywGR_ub4rc5od5F9kdHWT2HPOHM": 1000, - "z90vN9pCTvEgeQUf78lchv9baqMAkCtlU5TO3ueAAJM": 1000, - "wBaYwRNqjoWMYJr0MBCcy2RurluXh_PXZOxP45bw37M": 1000, - "lT9bqc7soW4kBLcuYhsBlAbNyrVTksr2lTk3GkPxJB0": 1000, - "7_IePCB9_YYczUWT0zpLyjB9HYXp2HltWbVLfP0YkBA": 1000, - "MetwzaLYB2wyUzqu4C8laoHPkbqLgz6CsNJVLdTvgjY": 1000, - "_y9Jpuhi4mvpwFAJCoS0qU-OrkV0xhNAy4rdWt9IJRI": 1000, - "x68Nflop8l4e_tYcVd5vVJF7z6T2qPFzLx-dJwHr4QY": 1000, - "UyHnlOMrFpECs_0rG9VN6WuUSePuG-ggaBgfSXoCpaI": 1000, - "0mml_SjailMcWfPV1Sf4nIzw0b1DERXRUFB9P9NHxZo": 1000, - "b0i9kU615Sv7ppUzD0QjolxdVa_tLHwCRw9NDtPb1cs": 1000, - "vobG3TNXEU7lSMVGmOZfvYUFA0r31J7W7Y7foDp68FI": 1000, - "UDEiq8JB6K4QvSLK-2tnLsDTrpX6m5VYShrUyLDimgA": 1000, - "xzkfyqbZXL8WFoghDi9RqKoOn5Dr3j3VXUJnXecSBkY": 1000, - "3kY_Qd7RvnY8OhW6D_bQaNPDnDlMOfodg-BA1Z-ZNF4": 1000, - "2CksGWr3c89MmmmEZobNcq9ZvduXLcGVHo-o2y7I7-Y": 1000, - "QX4tO0VYa-19_bKqJ9UFSfMS0kFHZj2M4qhdu6W8mSs": 1000, - "V5RV_or721R1xC9gXDFvBMbNyvhGQ6e4cFlpc7Z_otM": 1000, - "_S1hOabv42Fez7VOygJFLFbiEV1toitW-wOprgGOscQ": 1000, - "DcYVApzwNgEAXHGDH1QzBXrShg6ajI9jAvksJxs5rdI": 1000, - "5f9nPqQWCtEuv9nbd5dAb2yePLEUF5jgSo5gCB2duy0": 1000, - "tNXDLrqmxRfw5hNF_NvRBJRnIQ9cJTLARrK7pQJ5Oc4": 1000, - "ZcyRQv5rhGsvkv8zNZP4FJYJNGRkyT4k5d7GihhJsMI": 1000, - "YJM8lBWQPXAqi5A26NpWUlLlCxfqeMvE1pTe3OHvmhE": 1000, - "WlUXvTlMuLEsaCU8FcEnQh7sOCG29PwVC9DvUG-Bg0o": 1000, - "GEHG0KyzmwTMjKiev4A537hr0g3wAO4cn2gG3xUE5fg": 1000, - "Pv3JIaNENkOaGajJdCFuia0KPqAnsCy8LlP2vAipnDc": 1000, - "zSdJAlaVbd84CpOinA7tWsGKXqrLhtxpUPRqWyzZrZ0": 1000, - "VxJHCMarfcI1pe_NfkbVZIFH_wlnPWjzxiyZbG3cmLw": 1000, - "mj9ujTVdzatFdrdKPiKg1d2E1H9nA52kYeGhIm_C_q8": 1000, - "aKUjB4XlfWaD5Mj8iWOQ8tudWxfbfykbiAMP6pqx6uE": 1000, - "oP61zxt0hmnU9c4mcccY0Q6KG6xxXMlHCuBB-LIW2ic": 1000, - "urD-G_9qI8aP4QGaFl_y-IG4dSMJ2q8nBfSjQEEuu_U": 1000, - "rmM3TKKAIaC4XTMCLD0lLKs-vwgDmhYhPHZFURFPKCE": 1000, - "41PdNfOjCzf1JUJQRj19hKa0S6sGN-amcDkHmxr32D4": 1000, - "AxIMDrq6B3_8qHRqdnq26zpvGxxlqdMrCGlV7rmnbTk": 1000, - "ITvmVHINNT0Rw-UPBxyRAYUVC0K-b_v1P2rFdSZLQzg": 1000, - "bmB26DEPmNI84nPgd4icizuQQQc7jqFKeg7SnE-2-PU": 1000, - "q8BMNVH6WTLsCDCHCmkLwxL1fncRb6qkzmIuB70iZXU": 1000, - "KXuDQZjMEGSIj_eTbHNZsoaenywWB3-oD-5XZxmYANw": 1000, - "W2yd55LO3NE3tFhnD9_SlkO0PiSqX10JLaLkeeRFIgg": 1000, - "45mIR2k36h3RCeLW-ZF1RC_KU07HakYgUX0W_orTLsA": 1000, - "I1trB2wjtfggJsywry2GTesjG_83RWbUPZ3ytXyYprk": 1000, - "rBJ4z4Tu5c01SmlRY0hT_HbE_gOxHCQziuF55QP1O4w": 1000, - "KDJkSEviNRklSVyD16vQQYaHnplii9029fR1dbYPlm0": 1000, - "LEoY6xUsOCR0budGS8FXiEt4ill3W1QpeFvR8sDD6r4": 1000, - "8r09g0NFsV-hUvZAPlg1MROQ4fJdBt2ImWjn2M0nT4s": 1000, - "ljvCPN31XCLPkBo9FUeB7vAK0VC6-eY52-CS-6Iho8U": 1000, - "hXBsPaQk88oHfHfgLbSqer9pSrh4qzHcreVe-TJdWj8": 1000, - "GMTswDLONifSog8w-hx5OB6HuCVlozxqSGs30JSZlJo": 1000, - "Tz6et7CVxOu_lyWwyfi0x8J91aZkW6Gtys4Q8fQxinA": 1000, - "MN8E3kuFEdnCohTB7X3Vj_o1qn3tS9d7XSF8nse63as": 1000, - "0DzzT7l13Y47yFI57sttFAJ5CSiLki5GPZr3kSX8Hks": 1000, - "28ruIvybbH3o6exSDnQDvKii1ih4T6_nsB6hszcfgXI": 1000, - "gfO2GDkDa2ANNePuuG7FPOcA-xGOsldWHSy7L5GXvcc": 1000, - "HHEhKuNgUq4pzcf1hWLk3B6xw-fTx4R2Z1_cuOUPvpE": 1000, - "lgeLeZgFwqcfkUe4wPisb7kjJUbtk7GKpz4D2LoSIQw": 1000, - "FzHCs2OLzQbhZrFH7RDWWQmAAxg1aCJQ3iIS1_jtrGY": 1000, - "KVZ-7SilfJFolkaGWaa2lNO3rddI7XgUYUYT5DJjhGg": 1000, - "W2i9pU_fwh6NsKn5cC9ALCSoCuzCp0JWOJzs0Q2I7Zc": 1000, - "zTjiZkNo6PlOTtldKf8spNERpVkObpBfHhww0ZNZgow": 1000, - "zHZBN9gQkfFkbPPGFpM0yV0xGVNJEIimJr3RnPRwGoU": 1000, - "OgxLICZ6OwrmY_t1O3LEdOQNx568HuH9FdLsEWrwyh8": 1000, - "kTc5ycr1js2-Rvj5u-DWqBy5hg8GcHEKeozRGMOio2M": 1000, - "rOkJGXLx7EHAjzhnNzc5F6m_v-yRDZRTffQkhTD-cb4": 1000, - "dN6LPa5Rn1ycE48UpX-QC022Y-Y9tL7_EE_fIqQmM4A": 1000, - "K3BlwjKRMe-U4NUQuDPtJ5yRVcEkasXoVEQzJag-jWA": 1000, - "kIJvIzW9qxpd3rE0ODDw1qFdPth-iAL5smxSZKNHug4": 1000, - "pYV6waE2adtHs6naYV6novVicskhBeARzn9bUdf02R0": 1000, - "5lKhekAhZ6z_i-oWdDekn5x2Zn3yt2WSILt7RAiHrTY": 1000, - "M48Olo3zD3Ft_So5hm8-iepL6LspQB6CAhDk0ycCCQo": 1000, - "ejOWZcyP9OG4c9Gry_EatABVq-Q8jUevt5bCRvXxkUU": 1000, - "xrGChjguEUqpUQhZ1X08cT3lneXh41v8bvQi40cUs5w": 1000, - "kzR125T4r0h1EqGp9WTJHGSHQuz4G-KJ_i44Vp9E14c": 1000, - "xsntg4-AocYS0vENMIejXi0Bn4Yu-LYRV297wHma49k": 1000, - "UvkdWo9QqJlwNn66QV0tP5mdkSJdnXMhINzGUDJfS0U": 1000, - "gB8QVDwLIYwlPys6yerzjiJZNHqlhIpttV76hWH7aKU": 1000, - "q3OBvb_qm3d8T5yhomKF8fA4WvOz8IT0xf26tRJIG_Y": 1000, - "cJqCHt_XcWcZS-EbHbzykHivLm0ow8HVKC77TnXI19k": 1000, - "Kfs9K4b1252BM_Wfi1-dycZiGwTZ66kjzFw12F-E4DI": 1000, - "LNsDo1ZJBqKqna4ve5V_GgKZmjMRpiqvT8XqnG8EOyM": 1000, - "zKxynG7OlL5vAmoOWSp1mAYiwPJYtCms49s_UPJODfU": 1000, - "bZVlgLyuBhrJgIRiSBsex8nxxSv6GAQkjonWpGv4KK0": 1000, - "sitXUFOSzRslb6N2z0FWn7-Y0EW-6gUDYAvIzUNy7cI": 1000, - "85JH3_CsS70Giq8JwWVtjj42xWe0oZeR7qZATUR_ftI": 1000, - "VXKKqVxmCoxuyVqDA0IMWHRvq8nZPjsTLmQiKduXj0o": 1000, - "rK-7IhNEcXY_bRVkcpvoGNZiFmfbRMWPwEF5BS0koJU": 1000, - "X2y8grlhyLqAr7rAlXKwVKupL9YcWDQdN7GN4jS2FmQ": 1000, - "26WkMNKmN3u99KnN5DuKJD0CGYoTdiW6jJ6EyC_ied4": 1000, - "2iy9dvzSyae7dR2WY0KR2BYaMN-akvbDVxzwwjC6PZE": 1000, - "qkWEMzD0OKn5gDc95YWMGLe9TsSd33n8thz-_5hK3LY": 1000, - "7uZaYq70Cu4ekU77AUCuvOky5X_ODGG570aIoGNegiM": 1000, - "XELixb37Sx3TYfOi843YJrNcI6QcKzvJ408dVTFK5g0": 1000, - "en-tqjQjuBlNURx7xAlF7j-PaLZWgCvy5COM0DJemmA": 1000, - "RmvdJ43XDjubXzbx-D5Jr3v5hzphjWyfwsYkV3v33rY": 1000, - "7xL724XhcnozNtfgzFhQafDmKctxV4wBeBhQ08uQwkI": 1000, - "sUTQjM-8W-QS6qMgml6Q3Zewk1uw_bDrfKb18hxVfwM": 1000, - "uRglmpqtO6W_k6WbDNAn20dyfVUVCBvMPD83WJ0WpD4": 1000, - "k2YBhOvv7KiSOOnPA_Aftg5vEbt4p031aYGZDUPL9qg": 1000, - "SAUKIxmVikhj6EcnT_dm3mlTyfaItq4Oa3DPCrEJzAc": 1000, - "gx_vsQ4sO3pjIz6lmh26a6IQbWTBtmZ9c2dlPUSI9uo": 1000, - "Ig6mBCL_Uzqa_GvuEUOVWOC-dsYu4zxMVpuPf7B6EuI": 1000, - "rjw8HyXKc_W9OIh8IhYhd8MzmlEXRTG219CstQ1JAcM": 1000, - "6IfeljGVVymyYZ3vmaeuT-ivqA_yu08cjrt4TGiLbxI": 1000, - "OVykQflMMLIRD-GvWUOX6rGUw_RNhDD0eXf9quwzJjk": 1000, - "6bhDkf-D15hYClAUpyW51cYpTkZWIcONHxDARdZT6vg": 1000, - "AHd3DmjWKUw4TjwCrk2_2rfyEf6jgEdWTpmRJAPdZi4": 1000, - "Kwtu8st1N-GdxPim5jmgFAWq-BwH2O5Ak8ADuf7QEB0": 1000, - "DoD2Ys-J8sbE3R7bzG7oL-5OiPGKpl7MKeZ2EkJseNs": 1000, - "hAe3YVxv1DXFVdjquyl9bvb_0_LQCpK6bjWhKFAc8c4": 1000, - "MUUQ4JCFrwTGLFkp6h6g_6uWSvc5OdaFF1p6AwwwPXQ": 1000, - "oP8eDBQUQYbI1e2C6qxd3ouQWQ3WU9m9kBXnPWM4eO8": 1000, - "Ksr8PLkYxz_N-YhgLAXxfIbaYBGMTkU82H6sgWmQVHY": 1000, - "08LMz8ZnS9FIhgoIt9o7gLmdsI_HdeFdJR-F0j_Q6HI": 1000, - "iCQK86xvLOSA0n-jiH8IpBdU-GR2O8SwyGx4RLg7TAQ": 1000, - "eYtrAFfSb8UDr4SUqLxKEv9h3PPNffIUoqeIcwDJ0CA": 1000, - "euSLZKxZWzGP8jy9JlTvCxsL3AU4YttYrHYoKbdxIa0": 1000, - "5-2s416fN-1QH14ys9gzC0xqDw7kA40qfeBmEQGz4Ys": 1000, - "PNnCbWW-Hh6xy4qHHw02xDFuRJwVqJd8ahhIGMLm-go": 1000, - "biy4pep9KWd2stl5K8iZWObPaaFVhtaa6BO0s2RAL-g": 1000, - "uOyOt8mnX66EApPS9oNyiCJxwe1oIcpHG6M-KpUyRvc": 1000, - "wHYbYbkIsQjfrTR-yUCnNUtksA779g9d46EROP0ZgRQ": 1000, - "WiGInd_0_wQJARxI9cMHq3cdfE3nJ9yu9lPKwG2Ecg8": 1000, - "8rkk8651EC5D-2mFHN2Ggd43844p9L2Iok8AypoLPaY": 1000, - "_V7HmxSiURy-_hy6oqJxZeBn9Z1uRYERvoDE6XbnFVg": 1000, - "5Ggzb4BBxKsXZUcu63Hy3RzdS7jz590OCECz281uYXs": 1000, - "ikntTT5xoAV_L-qN5csIOmb09m4PfZuO05ENazk8ni0": 1000, - "x9eaZWE75fM7Ga2udOoCkgFTC_V4uVQ5BvSVdj8xI6g": 1000, - "WL37NMvvna_zhKzp-BqxLzyPLSZuVOVTdNk5qHULvGo": 1000, - "swkOIzAEwiNaAIOE7QPU8BTDcalw7Ja_egqGxWxMiEs": 1000, - "bmiq2EWxm8s37GrrNjCjuQI5xlLA9u39b8Tsr4O7X7M": 1000, - "iSTI9jcsgf0BsGpfRhxM6I_UDAicBLLK2fyfC-WROeo": 1000, - "Ek5MQTKusredGiHtwJPglt86tcpXh4ngsTBLduW_HBw": 1000, - "u2s-GKZqJjixjQ1eeiX5Je-R6ofJfVKRHO-WIdXSmiI": 1000, - "RnjBoHk8dxy7Aw6sqRdSmc3xjAhD8jlT0wcZaEWYa_M": 1000, - "rWmJWvXwzjemo9KLEjnw7ydFPNDeuBupgY57_NsZPtk": 1000, - "Il9yWON5SR0a00aE_6iowKVs7GYR3ZWGricYT2ugH0o": 1000, - "AT-zgYtLgRrQ3ohRZ6LQ4AvOKraKbLvsQS92C-bzg2o": 1000, - "uY9i1Uo-VtYsHu4d3EMNPpqLQBdwnlA_tPUUugBFa48": 1000, - "JSRefLYn-VDWvw300B72OtaGVVrrQbz0ptJbt9si1A0": 1000, - "MA0G3uK9962aVMSiDLqQxv9ibDTRocXJ2iMbO_LrXTY": 1000, - "b-OcmcO0QhQUSrn5MMfJNU1AxU6Z3C8qMHFI5GqOaYo": 1000, - "Z-4qFwf8NvitFGjbY-sFTvQFhDXasVpX1DoJZQ7tOn0": 1000, - "ZawHsP6gaxIXiHyLGK_Oo0oPOMwkVR7AeK9z5bjx6bE": 1000, - "N8Rw9kJnlFSrjUQCTfuhHyIu2tv370XR-dWbZDVb87A": 1000, - "xdBjV3Cpl21ORZ0XeBKdVxApI6esQhHxjk4cPRxomyA": 1000, - "m9okDtbv5fOuqQAh2terRxXo1ULCy4GDZkzj5RGv_Bc": 1000, - "PNEqejASU1paqTdaG4DfqC55h5W25LPrcjAGxudDvw4": 1000, - "Sjnq7CWRxw1NKW8O1FGjf6vbnhIhrOnGpeZtXv6XykQ": 1000, - "18WpXVWELzQteDAfX1mBSwha30HdoNugQC2alaN81TM": 1000, - "kXMz9-TLehTnAo4vbsIgequuQjbvQ67re9lkoh80Cog": 1000, - "W9bHWH2gNVo-H5Y_N0vllfvegItjK_VQvkd5tcp4CUA": 1000, - "g-fQOHWWXIRBBidHMYwowD_a4IR_ZQUBIloZULRpYuU": 1000, - "E1TKpreFrd4aCvieltcHZsovqM9WvO-4jQ1R37-3kRA": 1000, - "fhjABD00TaxeLlqfq6T7X2B7uTU6qWy2bJVHpNd-lhI": 1000, - "moUccfWqXXAp1WiBY38kEzgwkeRJdbZM3zAryS_rXcc": 1000, - "bvwqItQsNEG5Tpl_jZ4LWs11PQ-Kj6nFfKcZmNJTz6I": 1000, - "K5D9ybDiKgsmej5jISybKIkQGuH9dngsr-Q9idnfXpA": 1000, - "EWhs597J8TYuf0J76XXgtrKF7oi-_TSgKoUZGv_r3sQ": 1000, - "YImlOumuV5rmyop8bVJsr3mAjry0BDtQQISjUlqyCuU": 1000, - "XnvXLMnJGE0RHQNJrcwqZP8BgbkGsvETRCuzfzUzR3o": 1000, - "lDdcZx0zrYgE8bYjD8JtDZ6G9NdrrQJYj7jS1Shtt7s": 1000, - "U4wzu5D0XFA1acpSOXidvcfRcsKXmz1kl47zBzgHTv8": 1000, - "4C4nTvKJwmSiXDDPX3NnEg3mmntEUPeMSLNaB3xd11g": 1000, - "iatW2iBGe9pCpB0Z_wTRnPlBICOGq6nlxOcihZboFlk": 1000, - "GJu32_FZNQKIWffmrWCvBaT7XK9EWOS0N5GeNa8ps-4": 1000, - "QDP9ryjOnghRgWKMuMl7BLeb98fI0VlgCft5UgQ9QYw": 1000, - "9FbMobcHPZOg7UC3bEwxiztHOD26dRFrLoqA0nMr2pI": 1000, - "tpGyuBoD-ygKaJr8bJ4krhAMRnvZmmIM1-KFiQtfmOA": 1000, - "iAcdDCjIxaZkdIsRU-nTleSYue_VMw9OmK9cpX82A1A": 1000, - "OJtIdX1J7KYGz4SHJmGNL7XRc_oJVDgvelTGD1R3mNY": 1000, - "eZx9pnFVS67tPigfgCm6_tD1uNPiDKkKzLx110g8G9g": 1000, - "9Qnc3AibFoqiuibsztJ0XUWJ0c2w6ihgfwMFAVfHxtI": 1000, - "5p0Y3DbfYadQ2hbmZkUfvVKfvPjvgZo80CwLZpGmEOU": 1000, - "YmbG4v12UkeLCw6LSGbwcjJgn576JU0-3hjwwyWi-iM": 1000, - "uq30NLzg_Ohh88ANrX_de_njVQcEmmzxm396tA4ZVcE": 1000, - "MAwq2Ef0qD6SQhs9ycDYaDlODNT3-TG_1NVLirvPfdc": 1000, - "r0GclaMhEEyEnFg7mYkKthDEaAAD6x0DYPEhPz8ByOM": 1000, - "k08Vukwo8ulIWRRoZgFdAXvy4kcE35Wua0Pdu7-oSnQ": 1000, - "WKKsC4OjoEzs3-H0I2z_6wfX0iFyHW-0YwBGV1jgjaw": 1000, - "FezDbG-Tdx7TB8Tu4BdknXp9jAGN6vNxSeYTJaci_uM": 1000, - "6sgwl3ChsWtcXwTNTMpBKlz1ykESi4Ohe42_M6-ttyI": 1000, - "XmyJVx5S_sYkyY8JnQCRrTBo4w6mImzn1KTh-2qwwuA": 1000, - "RSfmOAgPOusRXeaMK7hwL4nFhj61RQ5e1B_Zn8BDqQY": 1000, - "5_oQpPstfbBjcfXFvGiIZDei3sHd2Ueg69KrxK_gZ4Q": 1000, - "tc9zLG9HrXl9JdYUv5CYPGUM-ViXvUF7iKyf0s4UAyc": 1000, - "j_fNUZGSmEc-WvUnJQ9eFdirkb1cz3lfpc2bwQH2trI": 1000, - "X-2QjeFs91dHfUA0E93Zc2dDIvjlJTSYUoxEoQr7K9M": 1000, - "Ji-QM8XvGGYUrD_Wnv8wT2pU6tzBCn8gn5Iq4xa4Bz0": 1000, - "IkLv_CMUV7W5kqwfiCfL6XEU4Q5xETHrkeADPLyX-Os": 1000, - "hx7enkfFzTb9TIsu0sSF5z0yUWbWw9U61xyrhxBVAGk": 1000, - "M00riAZlmN0SiqOx3kDUaWryWQfTwI7D4cgfSuOXwrY": 1000, - "M4RoyxLGfeMNwiRe_tIVBPmfZBg-lqgMjvmNpPfga1c": 1000, - "926eje6FzkfZvNHf5_PjbCtpxkzT_IsmCIV24XqdzMI": 1000, - "joWHqn1ltpbUxK-f5ajdfeNGAwR_T_RHxZ52nHCLLOI": 1000, - "RGABsdLEoZapC3obDOaR7eGMsBf6hMhwSxH9EHixcVk": 1000, - "LLL-S9WavNv-Yq2lNuBDzA_sjEecPr88VB-PDJh4DqE": 1000, - "bEmxFPlsoXROb-sLn7P1zhzwmkJRzJYz5plWGuZsMjg": 1000, - "S5rYd6Ha17WeAqPCJIHhxnjxQosEFSB7sRdNaB5ur_s": 1000, - "uK4RfU3hLZzye1Vi84x_zwt6n_ao_e2jSQSiVcourB8": 1000, - "CY56a10X1u9SW9muJ9tN8IxQ0lXJU4jm_5rwvdVBnwA": 1000, - "OPhX3fkWbJ4hQI5V_aeXMliMXwuIQf_z1v2CawH2bMk": 1000, - "E-M29PMMYi28hpCL8da9rP9lYYcDH1sJJj5ejVC_vzw": 1000, - "v4FgUGJjRDo9QHHR7hoabbarFUHX2Sk0aFaq1KWXoLw": 1000, - "5tXfeDGt3PVKUsdut0B8oZwk379Jd4yQDUZt7pJ-buI": 1000, - "yACHoJNpGzEq-ykdw8hdPJHOxKgpuZciEZ4iX7oajYI": 1000, - "OjL564pN9TxvhoWmIf5r6glixMzQlfuVSo-qw7MwD9Q": 1000, - "Hg0L5LfiKqzunspG6Iefl3yoUErX-OpnNQSP8QpRElU": 1000, - "_OCM8Yk9azW2CBUI43xnzLwIPafbRnBrVgSh7gNuD6M": 1000, - "hnQanJEymuTh_fN-KUs83Ep7KUUptCzg4y_jsVfsrqA": 1000, - "WPtzyZxAj4PqebjyZ5L1TP0cs3Xmee5XrjKXd2xtpjw": 1000, - "lUxX0yvia1n5fYe44_P0b9jDJYOdWaDHpxm76bXSYiM": 1000, - "9A7vCsUt1Oc1nEurd4lKJPRJCcVfFyho1QKdwnCdsXs": 1000, - "GTZPwg9CVv2fPwNgxFDilwshI_In4IqwqL8Y23su2JQ": 1000, - "0JKQCsyPkn-MOrVTur8MT4cacCMa5LHHiiahfoeN0RU": 1000, - "s8uO_FZzqDcSFcAb5sUzs-hH9IPtKnx-qpTqnhhkK6s": 1000, - "k2sXYM-IvH1Q6plkSz2lgR8lll7DhIVOnuz0I_mqLts": 1000, - "lSxP6nuLSvR9b6-uS5GDaMzUHvnySIPLtRpOGtEn-G4": 1000, - "Qfod6da7zH3LLUrys6jmjsUJJtbcikDVK7m3dVEoxG0": 1000, - "bEwTZqYZWPVWubOQAetJZTn0RUAuUqnmxqfHIJWAy_s": 1000, - "wGQWTOJ3axkebA5ZuidlepTlk9WGn1fEJDaje10IpoU": 1000, - "0RWuHL1469WYh146-x-5IKtes0WQweqv8d9OehyxFKw": 1000, - "kmtKTyd_S_eZO3gag2qAspIMtAopJ_wN6qQ5Np0HQVo": 1000, - "waGdO_7V0hUsm5v7lUFC-bT0tSXQG7g_K1s2bheistk": 1000, - "fpr2iOeyXcYJIx9eUr4IdPY9MEbu9fNrktWhsw-8EJs": 1000, - "tR16230Ek7ePgIJ47mbXn5frBFEVENMGRUcSdd0Py3Y": 1000, - "FmYkYVCN7uLK-nlzaPJAIe3Oks8LVG8Qs-XSCpyW1sU": 1000, - "RhWrdI6AmZWJTH241dBIyyhvWkiGfYqS56_w6Ho1NOM": 1000, - "G9e_7kt6JICB-YY_nXVZBJhnBxr-bzP32zLMdFqYGHg": 1000, - "0Ix-re7OkyS91T4QgLSvltuv6iOv_ToFJ16z6Mm2FDA": 1000, - "Yq60floIyldI4cC0Wj-nDLwLn0ok0lNI5sHVId_MTwc": 1000, - "MpfkZF7TiYkziPilLIGaT_qeieDTzmtivT8ttJDfjws": 1000, - "lqiLQZ9NfRlj5CS_s4HzXMCDACLIrj2F4GYaYpVB4Ms": 1000, - "SP-oI5GTEVXBasfgmLjKhGDI2AHaTsadVciLE16Gk0g": 1000, - "RYqqNTxz0F-lVR1iCuBRRbIUKWVLj7C_JFtGY1InfUk": 1000, - "ihuMwxxJhpJgbLMA_A1b1Cj4BJSM116g0_QiSGbuKgM": 1000, - "QmTpGiIYwF5FaZas6YGpEOUKvywY9-311Zqd4ZtwZX0": 1000, - "3P77MkjvEDphXq0Kul-Se7mIvlibjhJ2KqFVZAb-69g": 1000, - "4R87YVk3ksqmvJhUWk2FwPgghADRcmq39_0QI4pgOd0": 1000, - "SLSBWnrskC-AMHzHT8gMwrvh1vYX1c4r9B_t6L0KBGg": 1000, - "sVasdVnOuAUYK0SONsqUA7ldOdC96CfaoPg86qUDyv4": 1000, - "Cw6GFW7irO87P5lTC77YE5IW4PVnzE8X7soiYDxeT1E": 1000, - "xmkUSmmGt1slUtDqRb7CetavddaLcc8pwUpTWxrun-s": 1000, - "AUEBYy4qdrTvVY5Idmfy9PBxcre9YRHec-XyPStMC8s": 1000, - "TGG6fIcxzNTnEEYQAIGTSoKfgeT-JbAqAyDg1B8zxqQ": 1000, - "QYvqdIj4LiYNqANxceM67B3trcSVB_Xtv9a-Un-JI1A": 1000, - "bn0Mmc_LIYRkhcovISgPwUIeA66ujro-gzjkZmNBfG8": 1000, - "kuWmDPggI5c_M98OdVTIWsW9RqfWUR_IteP70JUd4pg": 1000, - "KqkGNNwdHLHzbgBcbMsmQmP89nkUicJV4P5gdgUACKY": 1000, - "9hhmU_pLGJB9e3YXwxgUh7CfxaMiYKgYahIdlHT1Yi4": 1000, - "ILUxv-PV9dyQCc3RW283a5ax6pEErJq-sS2mSVcP0Ws": 1000, - "Nvjjh1JWfEQwkBq50G8qsDSwyN1Lq3mKKHFWbX0b7J8": 1000, - "Ri5bzfmVC9yJ_6fkamkVcBqrF2dfAMGafKOoRIEC4_g": 1000, - "VegtDgqVD4bTNXnCep19-RYsjggqUxNk2lxe0MCDJEc": 1000, - "Am5yXAa9O2ozLqv9nI8xknR5lTPaWfq1dilM4m5YJrg": 1000, - "WAQpIzf4u-OsblVqPufGwVqmcmBtPoJYBYec_DG76zY": 1000, - "4bmekm-HaC6jIs7EIQFBEh9z9h8WQ2S00JWwi4Vr2gc": 1000, - "4zCVnwzbrO5eW8njgqq7xyoNqPlpcNTMbgl25-vH6Oc": 900, - "xiWWnidZQ7Zc0EzjSIv0h8qWgCzEqZLoqYIiMNUVwdY": 1000, - "4CFUZM5yCQg2nPpkFDuwsxLool7ddZh2LRwnlnhAwKk": 1000, - "gDXEtBV3wULq55HKxRcQthwbpg-b3hWex9c7QePjBP0": 1000, - "3sE5C7pSFAanrWlkdJEMLo6troOvtVf2ogi_EBrJgyg": 1000, - "r327AZvCVjLeA47r_Y2blrOo9JtdkVk-dNT2sEHSe20": 1000, - "0ptrCf5BsPgGCMl570eiQd6A4R-Zc0Z_2ulMrpX_7iI": 1000, - "Ex5WxelNLFnXx0MmL4N6F3pnv1A9VN-W0u3S1JZAqwc": 1000, - "25KJ2ZDrO03y0NwOht3-788SyViO7FmZCEc1RombAmg": 1000, - "qaKGfkYu2C3R6hFYMRpwtUooJBXIAoO9X9ilZO60AVA": 1000, - "7ZH7ZQHN_JER8VeNa_LIO1JuPPW2o3as2kVKND6IM90": 1000, - "Ebl7JO99EfL-z4KO9EEK1gUmZmkbZNproFWLpvsnNLM": 1000, - "7SSooYcjsvkfeUCSmfccbWussMuFAm0zrXLgufda8lw": 1000, - "EH3dWnucWNnqBI5NWIabY30tlFb1wuHZ1a48KakfTys": 1000, - "R81K4is3SorqP5YUbBycmdDQUiCXNkPF3xHGfRRhuyk": 1000, - "jzGINpCaC7nPHkmuM_IIxCCZ5S8N8ne19MRoeHlIFns": 1000, - "GhnRxf8CP456vrQrwTZuITQMcunWurAZvtaGTTIMjdc": 1000, - "x6B0nQQkqMjxb9SUITSopxTjCT0UuG6vViDFWUOellk": 1000, - "27kIMFTncLosFWiSoF6lTmQCaWL5cBrsbrLsIeqAjho": 1000, - "9bfsHDr8pGJo8xehDiidcNmNHnrdcKOrgE5aVpCBEh4": 1000, - "N8L8jlpLMf-w77nsAgOWfHo0H-IIDkQkwWGDpk-9h08": 1000, - "zi5jGYHDLteDC4EHoqjLy8dzDm6YCWcRJnsnHXE82eE": 1000, - "8cF9AhmTA-RW05QulLnamLwNswYZwm6TiHkYBE5-cDM": 1000, - "q_-QJ4DkayVo_91RvPdBWQNxzfJB7W_alpFlasud5vM": 1000, - "ZHRRr1P8-g9GiwTnheCbUNDwwA0P58lTBJ91HcUwnio": 1000, - "fDCi7BXyAL6udWUc1D_zXfN8XGEUBayONG8OXFD4s2Y": 1000, - "4fkXbpZF3zmba4dkjsnSATVD2iItQcQiHB9IukLXyzc": 1000, - "yMZJiOwuCAzGRJUfxSLx0_-bmrKuqhbE-HxEzMq3N9o": 1000, - "w2fh8CAgAIP0Ydlsm0J3-KltHtHry-ydkoowaeHevKM": 1000, - "UkXFDiJKecDOE5rfjoofNiUXc3LodG_A6rp7eocQv1o": 1000, - "6RLVpQLMpLvE2tqHqZ4eN0OqeE-Lae1eFumHDCr2_PE": 1000, - "6EUD0ZJpnoZG8x0cpLl9lAxbv_jm0sQuJpAGo4I7Ocw": 1000, - "6tzkCBf5fXkt7WXGAI1HTvkVbPgpmgNlGmAfU0vEtiY": 1000, - "TN3pexTAOq_Jsc8QysJtvQDR06dWBOUm0zbyr_qPfLI": 1000, - "OlCI6nEfn2S0slgSjGAaKNXQsu3FB8wExFQP9-VCQKQ": 1000, - "gO3gggeyEFren8X5LXNpE_Q2ZkrpbCPurFe9f-bxH2U": 1000, - "76eh1v250f6kWZsPgTGYyA7o8iLvBBJ3cBqK3k0OkBQ": 1000, - "L7jagYj_JsqnDtDK1ZdoTnG2XPGQngbO6pw5s5O3rSM": 1000, - "aRwNHz8LF6TuoJWgivZ6xIHv0APBTDrrgyypC2UGe_U": 1000, - "LOHqqHl9s7nxQV7CMs9QDFjO832EkhipjaChIwpeSus": 1000, - "r-1GRGcoMTQwvPXposIwRPY6_r5HONLnIQOYLV_Mk_s": 1000, - "dYwBjCgqvCDZ4XQc8CXhfJU12NI2ihIX6hLkB691Ch8": 1000, - "9iJtbvGZrXCkee00e0qPHkhb6H_Ma-bvDRsKYUjsOL8": 1000, - "rc_HeRV-FkKQ9OvJZTvGplyWuPjtCQFrBBdCnxQYpz0": 800, - "iMo-hOkJwJAM9r7O1ZAqiDo1VRJNlCe_SxaB0twI2Xc": 1000, - "gjVxZaLwARLMy8VYDRx28XTofH_CH5oWFtjjeTBjD9w": 1000, - "wHhKutRiB4ikqZkOQJ7mcAVNyqT08MuhFQ7j-z36tkA": 1000, - "bsSooVRHE7bKVigDzygIu8FgapCGZRz3PN2_EvtyDlE": 1000, - "Huk09jSyn85Kp__v0f2RM1TUCirhwvSE8Zt95lCylAs": 998.99, - "YUs3Ozm8KJDiKdyIKrq6VFLkBA8jaTBjKfFbJQYnTdk": 1000, - "8JSTmiiq-ssoIizpPcUufNKKwCS9jPxwCVN-A1TfxhM": 960, - "WyMqy72TkEuT4EdqjXoWItw3j7TGB0FthfsaeoEk3DA": 1000, - "HLKTIqQjJx5ZOq0E5yJLkl4WzQfg0f69nBMVRW3CyxY": 1000, - "FQnvQuZD6qScETLqK5BPd_rYfgKlceGpUTZcHa7DqdY": 1000, - "c-wmPp5vDaDpP3qKZqXzSRSY_MIPnsnkIsZ_SvuZWlE": 1000, - "DvzZ99pW6GrXV-GQqTqkrQPY5qkMurJWU1rhO66QY4s": 1000, - "fFir29DTXqLSUWqDAtruzmS_bdVmi6vgIelHBQPCbqU": 1000, - "PX0XtT6gmnNfAzsklybsYDi2ggEJrO578oaY9EMSIIg": 1000, - "uhDsQwzKo6ha0bgXlI-Lk6g2xLEO1wfkcp8KDww0t-Q": 1000, - "ndk-RrbncQgyo3QoAfuR6ZazVdclicqvsSy7_sCbJ8Q": 1000, - "aIjyVm1KGozHJQaUQi5dzeqcc_WQK0UeWvz0MoJ-ElI": 1000, - "7g7QhFpy1N8ZTzR2tGe1oa7BjhzuEvgpBna7UPVQzWE": 1000, - "VO4iAQNPaWNH7Xfz6avo5IfAO8DCxtuzrGMvyLuSkII": 1000, - "Dq6Cs8yu6L_UgAKYWcW2L7YveQ0TCkQRWlfVhX5T7gk": 1000, - "49d9OTVzaTE_A_jbelsu0nHFEsvbPWR0YXH_rC8roj4": 100, - "katfyY8SgFHUVSetrQmkr5qkJkTHIdIaL4mRXKGRZlI": 1000, - "g-VO-NvVvtu50dNxX0t3U6gkx_RLigRYhYqMvsmWPtE": 1000, - "2vtV3jS6EThO_x5QGkF-UDa90FOZ4Ld3lBpWf6ev3So": 1000, - "FW5GbyJMRj7tUu56SlUe4hFKaCZD-oVsBXeXsj94OMQ": 1000, - "0CmGtjdgi5g3ZagZ3EbgJi1_xlAfJoOQxdJPaNE9ePM": 1000, - "OIZD9gTYz0U96j9nCEqJvZBq26XSUYnWRS0tu897QtA": 1000, - "RR62mJWUhWv9J6BGp6DIob0MVfJP8rJVrEYQFJkGL7c": 1000, - "bG-dyBJB7bJ3p6PDj3z5l1UcpD1GPPgNXWfftiiHg5c": 1000, - "xRrutE4PujyIuc9v7mLarAUIxSy9R5TaeH-Ixpo1Jpo": 1000, - "nj7AwoC8YN6Qn2SUxFFQHMlePacvrqDlm4VXcs8qsX8": 1000, - "_z_okyj3HZsOkJM4VSPi1SUqZ8Nxck2krzxQPgjtO1A": 1000, - "TaSAp-GFoO1nHR2T2gD7pPTtpIRNQHa_7JWeBWGD8bg": 1000, - "2b5zGFihDe6GpQNpH_hQL8ERIh8YUTJpOvJbR53e35Q": 999, - "iz_tK2DXmPsTpmSfDG-jw_j3KJEqegAXbrFpyoIcXf8": 1000, - "o7GPnl8H_r0ROWcYgL9BxPAVX5asuOT_FmzCoQysBkI": 1000, - "lw3pu-MqpfVY2pfQbpx1Fx3lvjNATT33TohxmzIDT5o": 1000, - "J_tHIZ_LGIrgNxBHAVcIeHmykf1zMkySYOH8Oks-73c": 1000, - "thEAY_UMl2iN5lWgqdiN3jPANufmSuOl7IRpuPv64ZU": 1000, - "8Zzn8oePGZPgg4ZZbsI7eOl2-a2gSBJ4w7gIOW9pV40": 1000, - "xw3PGrZ-hVo472Ogk9qKmtzcLC4MgUTTbJYIP496Q3E": 1000, - "a9BwH0uc3_pu6oZFFDGPF-ejvH5_MMHlI80ZP3AYhTE": 1000, - "dnJvs5tR1YNGOI4uFOIf2tfPV7ZGsWuewqMzX8qzKsI": 1000, - "7z8Vtlbdm-Vw6mQ_jZ7OEh3E-4RtUC1V5U0pQw8Flyg": 1000, - "RoJiM4fsIgKtqYP_1p9xk3pL7wJ2s1AN4EZjXYwu6_Q": 1000, - "wOPPyp2BCmUL3A4rw6xPRfxD9sReftmQYeBdBzUMCgo": 1000, - "0lVBpMaxnZThqlakH4XJVq6SElLY2GMHZg4XedVTiOU": 1000, - "b8mOlcqcCCizjLczCOjB2KWvkIrBAK6CEfHSCEqneQQ": 1000, - "qM_bcBE3fTbsSpC1Zx5BnAAvxNYnQOndJJ05rWCRJB8": 1000, - "2tXCEHYiNHSASKPn5EDbe-4sX9PcFiXkrlcolqemMJg": 1000, - "wFGLJtw-6TRw5XINkzNJxpycSv1jYy30bio5tJTxAwo": 1000, - "GAIV0BG4Peq5v1g8ojyT88aD1JPVUq793tpIkBztRTQ": 1000, - "xbm81t2Q8IuypAF5WvGGtWTqAL-Cg9JI30e45G8ELZ0": 1000, - "xQLEgYe3l9x1mQzblJzyPXdEIPoQ5SMb2tI5bZirzH4": 1000, - "VpXA5iSYcgFUTqkRJxLy9FWBz7mQ9JF9W4h8_myTQH8": 1000, - "tBAz4vhgI74xa-mKVk02qlC2pvlN1lGP5oM5l3dzvEQ": 1000, - "uZLBr6eSRth5tX7O-fmIoIjo-dZnQWZBdyNhFbq9kTQ": 1000, - "HlBpN8LbhOwrGbS1tIoC5AXYTktx29CwG5ulA8IY5bI": 1000, - "6v0BGTBJQBjiR5Tzy_Sfh7am4KoL3Ab6FHeCcIw1P7c": 1000, - "JR-HnNZxglYIlHaz2dQTPgI6W190WkPWlSWGj5RM9mk": 1000, - "nz6d5eiHVen4wrWGvtuLEy9ykKj3cJwdHurSHKPQLyI": 1000, - "2TS4BQ64QpunMgD79F6Tsu6vc4sWbrR-1orpcSLR8s4": 1000, - "ouDl6KKGZmPdn2q1wnsin3wI3SbFUnt1SLNBtntZcTk": 1000, - "ClQCRSHhYs5t7_uMQK9QlEeOJnf7ogrJTp0u8g7AWCg": 1000, - "c62Gq81GEYarVls3YwQKFpErkti_IucgJD3p4rBXA0o": 1000, - "dUnoxZ65BbmWn0kcoTIAaOGj40185EmFzNy17ztZRkY": 1000, - "taKzifLWddIdSbffjABWZO8kd_2iEJl8MPfPUGFKIuY": 1000, - "hhpjHPLdrPyH6HYoMjv-7yytY-29AZf4xnQj5dleemA": 1000, - "ogOHMQPRgQQ8Ql9qQsReatVvuJEuUovumGBpddX0WGk": 1000, - "9bqMC9n5xuHAevxnLoFXm57F34UoJILmShkf81XRKSA": 1000, - "IvTevD627NKgCAj5k8fcVp3bS8h1W9dbPIALqVjspNo": 1000, - "6lkkuTGX0pfApTBZXxf6tPrQ6-bCva-k60Vg1YR62pg": 1000, - "0u3oSxixbl4DKJOOOAncmB0MD2yrP4bCRQUpWnxExD8": 1000, - "3wxUfkLVDHK9PCWE6rngbt_q65xTo11kqTo-q7CrPdk": 1000, - "2J_DstlAYzqk9bUYrNGxFMC_tRUUAFVUo1sAlnXH5kU": 1000, - "KK3RSOm10oLP7Q2CVIOXbPguM1k5qTM2ytENkZHX-1k": 1000, - "adlkaFG_zY2HCRKITaU2JQN2KN-KhiHjsxT68z932s8": 1000, - "_Zg7baeJHoYqoQdnWGtI7Bm01jCXQaKSQ6UIG4hkVIE": 1000, - "ywNB-okcSqfvSce-TkKyScgYXC5fBFn6gYGcWs42rgU": 1000, - "ZTvsGN6ZmeZf8jYzbYmBIiT2HKKJgYR_8AM2mVSh9Xk": 1000, - "s_frg8ERDD6HpbSKzf5er4oGfalCVCcVhFMAnKk5PWg": 1000, - "4deUqgKGeqsBlwP0rhbZn7Ti8hbiaVKKUVONua1yQ60": 1000, - "7W9c7i8yDYWfefSiJ3qETS4B_LuAEn7xvvlA1-v3AYY": 1000, - "x94soCaz9DyWptHgGKiGpgK55g1u7ypGbbdcrqJ72GQ": 1000, - "ztBcSJvUqOfTXNcoNJD5oTYeUzqX39zrcVlDvVMD9eY": 1000, - "ItZpCHFvpUlgTM_6x16DCFq2d_DsF2l5C1kBOAwqLBY": 1000, - "rurb_1WbgYqzg0abO9vPQKpxqUp22FAof73VPg1pK2I": 1000, - "quo6BURIL8XL7Xax95seqQUYlgun8zXQP_YgyBc47mU": 1000, - "zvE3avIGUCS5gPJ5_H33hUiBW4sbtq21j3lb7aKARKc": 1000, - "90s5m4JEnNdngJmjmYwNrGYZDsw15tex4z88n9GMZ8E": 1000, - "WcY7a8SsqGKiRonjEsi_dAcGak5MbVLNJmkZsoTXYFw": 1000, - "-rY4hMBZbJ5d4M9kTNgcdAVWfme7fjIwRVzVHdgUnC8": 1000, - "p9wtLN74tk6OU-Kz22r0YSm_UnFptG0Xdn9Fx2_dnnw": 1000, - "fo3rw3i0cSaEwwBVdfqzds226L7p4rDvzXbvJbCPnvY": 1000, - "jkH1Hp0-41YhIfUkWKWegIf57rBgLrl_ICKShCazWvw": 1000, - "IWnUjD-YlKjq_rxCdshmmer2duFm-LgNFAH4oI-w5fQ": 1000, - "ZTOQRCUWI3wyijEaqXie4BX0p4KSNWxTTAEKoa-hnCA": 1000, - "fRuVIvzrg4nm5cDS80X7G9NevdaInMoLt4IZ4m6cOos": 1000, - "Gig3mYxFnG5xJA35aFzfsjFDx3DMm25XetwOS52WAhs": 1000, - "lvzHcOIDi4nO8mUUCDV61eVB_Id5iRr5ngz8vWzZj5I": 1000, - "WNT5ZfDkFo0l-P-0I_2b4V5KgJaxMb_m-29W58KyaxE": 1000, - "CE6TwrNhbs2ViaEdp8wT3GBk7UaSIpazRqZzPnXUy4E": 1000, - "IrJp_Fa2J_oymrc2k1p91iEsnL7IoONwaolTFqDQkGA": 1000, - "0YURIZ8fXGzzx0VMYa7L3waV_YQs6JgQ5GKwiRUyRZM": 1000, - "NEXwfxrb_uOpcFQn5MwVvPJulWCebtQ6bglgJCtZy3U": 1000, - "YXFzQcuusUWtT-JVnfiiUKHoxZQwq5cPURfunNXd1G8": 1000, - "fDlT96gpmiF4KZA_yTmjq8NICc6S9IpI4m0G6EX26hs": 1000, - "aj9gGr3y_rTQHOzaHaNZK75CHxZ1v3XWeNQQj6k_BxY": 1000, - "Ig-qJmZMO4r0HGquvX3vR4h6FavoCaL8g2LvAwyQgoo": 1000, - "aAaTuGe59RY9p8Cl1A-FgbWau78LZA9wxaZiix828Lg": 1000, - "Gqtagqa7ISTGED9OwF-lGyoliKwVyPFbLeHNkm25md4": 1000, - "ZGLIKYHpywrETL2AtnLGyc2JBmOU1pcEnIjrtIHfFbk": 1000, - "rukuIK_WNIhpU0kT_FxN_2fpKLufLlLpnycX6vfV3Gg": 1000, - "7aE7n5z8dD_i6hV0EP32xjCIHJWkIes-q5f1Ro-7Ogw": 1000, - "uMy8EWVHRwPHL53NLOvUFm31XI0fynpGYuXe73l8m80": 1000, - "yO4MhfwSjHVYrpXA_EcvQTVdueZa6Pi1kJu5G4-TarU": 1000, - "9RLQQhFIshvx1gP7OCyovTDrEvOTnRFUbvRXUK0eYUU": 1000, - "Medf5eOI_ZD5qEnVIcYJ7XAk6Pxp0n5CHJsENRyihl4": 1000, - "9Cf7An918zbH4Q_IwW6EkfwC1kQ_EuLDD5UotKEezQQ": 1000, - "JgjCIF4WNBkgkF4Awq3hmAgcgNQS7v3ZTz1MIzxyvbQ": 1000, - "7Ldaks68VnKVLQ7jKb7JoyGg3dl5iaU6Cu_yDHCBAdE": 1000, - "jl-iGDRL1blSgrzReCKZwn5IVlABx6C1pVC-3OGvJVI": 1000, - "clj6ZL3cLkm9ATSqlYcfKTS1-Wp2LCfLtG3rut1oljw": 1000, - "pr5VmzXHwk03-VLn8Oomu5GiMaARk0SyyKkvMxLdkL4": 1000, - "_slEqQ_an-3x6jb8QaYcKuEzMmjXa-pSJI7NTFJJoMg": 1000, - "zzwyYBUPtvUuHakPB24eHjJkpQppG3zjUyBzzteeGIM": 1000, - "EyUAlxJ7q6ForSRK91SBAWtVbsHEkrWz_ikKecVFU5I": 1000, - "AVf8OfHx1AEAtFOpBhXfBG4-RFDN5n9LO03j75ff2mU": 1000, - "HXOM4_yMA1sZ_YR9kxmybExigCPkYuraeEUCghZDSqU": 1000, - "diCq__2-15KnvBRCPAxWGDezxaI1XW8_TLxDVaQDNtg": 1000, - "-HnQ4lVcuadQQRYOlSensflYXH6_SC_nKaK0P0zin8A": 1000, - "QVtKyv1jDcD2dqTQrNdYvjaFnsBRBd_kRz6Afm_JjZI": 1000, - "GoOm8IA_QcXf2qoOCnRN_PXFjZUrEZZBJnjm0V7xVYA": 1000, - "tLkScCv1D3vOyW6TLIXtGAgsF6YqZt0XGa_Gcwt__iU": 1000, - "Fta9BXwfG_P8kCCsFL_WuVO2Ldc35zXvyFvYfOuZ8_0": 1000, - "dgSQlNVn382pOVDMSNE3iKaGKUX65Az1DVEkPSWFNTk": 1000, - "gF_Q8VbzYWp6PmwB7w2Ousd7_rxh9sVj0hD1tHbJTmE": 1000, - "IQcclu-Bv01x7e7eAxoXGYxyqChmAB0IQXaRnoFAMOw": 1000, - "qiy8SqDczCV4sm5mk-VBGtmXuIJ4FW8WrtCokz2XpfM": 1000, - "23XYyBq_HTwCbELxvf0MfFcs-GT19wGzT8OHF3E_zbs": 1000, - "ldiB13p4jv2aAgkQCzFtiNiGYAQajWLY4x8VSaX6YHU": 1000, - "5MK3EpAppTv0M739mh6CQfim9h-sqzZr9Ebce65RUMU": 1000, - "4vcMGKLzm6ADpiaNl3TniX0k0xnuhTdnixqMh_0CZf4": 1000, - "kV-iqj9HVqdy7hnyn7jGJxlLCg26xHjHK0luSHmwqLc": 1000, - "gZlZjWopKw3qwY4-i93z3TngxQrSkr3ydPofNrRhIJE": 1000, - "sthnCJprScx3npsgFrIaHwDjgFFDyLEHJpJopELDaTI": 1000, - "NngwqfViYiUqvnlAf3upQrpUT9ViL-2lzYLuAwW8UJE": 990, - "UsFtR9iGmv73lGSRKmmzMpa7eQRbnJasmgQEEAHKNiI": 1000, - "fCnhCcMPM7rxqnYXyy4o5Bb9Ba0bWjVszIVHkT-FV0o": 1000, - "vvUmU43EIXd3I_lebQLeuLBLF8-tT3WQ-ocuojg0XHY": 1000, - "LjPuPFm2icp4CT1c15NYusgUtZKG0qISYN7d2LJbHPg": 1000, - "j12D8FZU-EBbIdCSkx6vO2shHlqbv5-5Ufl4jOuzGQw": 1000, - "2QutOD0vP__6wfuog_1JGzt6C0Al70arN8KOKkItAZc": 1000, - "DbPxXddPN3X5j_84DJn_OyVsLGri7xj7__fxRx-pBec": 1000, - "u6sNLQCJLKnC5zZFhQO9CYLd6C0USrt3yA8KNm50AxQ": 1000, - "HyZnpSTCltyAJIE6HTgCfKq0mzSPUdv5gjEu6GlucJk": 1000, - "URtLpa4XiXLjYXkoorOu0JtL7N2qZH1jJ8dtRzcZCvg": 1000, - "aahseRXnne-7FVWaqywuxXSndN5KEf038zhjaapDdEM": 1000, - "_28-Ffz_ephm-LoqAxecZXFsLnZt8UlDrptkbTcV51k": 1000, - "uX5WS4HP77gCtEqxtEGyGBvs6Kh7mFbDTjeieVqfwCk": 1000, - "p81qP39ROOC9w0GmeW8qpLHQOV5AjQAj7uEH7k2ckMo": 1000, - "Q6q74WWQ9mJG4yKkwJBon5qtkaSPAqnwmavoEKcVsDI": 1000, - "S6dblBOVNSlhpXc2UBfSbDirNXdAhCtU9x40fHMnwnk": 1000, - "7aCGa8vwqtViiXCIWGce4V-SF4Szm7r5yXhFbwU9hI4": 1000, - "s3Er7vqz-CyFD7WS3-2Onfav7B96_570MOoTQWj6mR0": 1000, - "RZuyC7Cw1CwC8fp24T3MgAVhjW_SjF39vsR5luzMGUI": 0, - "nCiayz3IPKT7XZFS2MuL1N-V3d4XHY9iYqKWh5fJq1A": 1000, - "jOog5RVPctqmwy6N6vFhQWL0-W9W0p3qpSt2i56oGfQ": 1000, - "D_3Dn8bU4SH9YYabH_YewiS7ot63ov3yBLApQd2u1YQ": 1000, - "QcEw545Wf9Hi-uPMwRbU91Yot-Gvd6D1bfRJ0X6jRB8": 1000, - "41uOpZIN9MfCygfnaUGWYawusTsEYO3sTrhcYklgSjw": 1000, - "X2XSMbqHNoBBtJ9JQKSL4BMJ_YHtrywOsKuBS918mXI": 1000, - "DLtKBI-7exCACP_2a4HZAyp_fXypeA9Knw_c-RWw-o0": 1000, - "2L3IXtJ7XE1lhLHy-vcrx4UmfVVWSYUCQB7bmaKJC6M": 1000, - "ZFexC3yLyyHg2mcLxt8hmpftqqyTLBk1nWWuS7IEEpo": 1000, - "YaOUYyTMCWazBW5dR8CifUf-8R1urUo93vHEMoxu9Jg": 1000, - "5sAs0rD7bEaplaI4yrMucgzDbAn1mYc5FJoJFePKxww": 1000, - "QHshVd4ZaBQJwlLeHdesz9qBlU0xazs4RJmC7eI_hGg": 1000, - "AfPRObrY_vOkIfohQrf2Fx6MNf5BUnsio1PQb_RNj_U": 1000, - "08YUlFYlMzNHUGnA_w85ywmGZ9Z33cQxtolRGGBmh_k": 1000, - "d_MKcMcLWHGf317WLLVqtTlJYiRbdaTtyctmoStfSPw": 1000, - "iNhECNMxVmVWAnrJW2QKJlvIg9jhD8th16FDAbtkKyA": 1000, - "09R9ybn_xaNSRgON2ZZQpvzGn81pY4fHTYC0Xd_B8F0": 1000, - "zx93dsAD0q2NCr4XhyHMENILfesNfNE0A6lehoLo8_U": 1000, - "C67COSusmsQkRvQkTEQ-F2SMJd0wVmg13ZJYZCwO1iU": 1000, - "Jvwa13fy2uilUcUjd51diGmWbGF2p6fAS8Su5OLIhbU": 1000, - "_G2JAfZtjCeO--m_g5-ZzQMFiC_hFEUlFaE1fDOfm34": 0, - "YtUapuvpwFFYD7BNxlhx-5XKU91TQX5pgNW2f9l9G_U": 1000, - "DXkF0NsJeeCgSRQIBpf8VUhPyPWHXeO40Fsv4lJRuAc": 1000, - "B_g_qNucGI734IEQ6fyrBsKR4sPL-TWWY5uDVk8I_8Q": 1000, - "BXQX4enn8wHeIV-DyrLryhUPHWOc2Ge0thQhlVyghvY": 1000, - "cx8VplZ9j0xDQLZw2VJNaVZTYoz7LMUL8JIDq8G9q5U": 1000, - "SXSDUmOF2YazQHWW9OWA9CFbN4IJgvwsgXC7qbOvHKs": 1000, - "H-9QBsJwVLwG6U0GRqqzKy86KC8dg-TC7MD9PsKWTA4": 1000, - "K_U4nZaquraDd8edQNfzWB43l6oZLv_yQw7njH7lk9A": 1000, - "OU8Ty8BmrIE-sp2xNXsL7isWGPtioHMlgF-c8q0dALM": 1000, - "knky7ZT6MA0vgjvwSkNRan9i-f6ie_LtWAmzbZWL2rA": 1000, - "6Pv7YpiYzUyoay3m_X_LEFsiWtvFM1q2ABdsg6rlWuY": 1000, - "RB5HXWXxEwa4EiqRtWh4SjXMKDEZsSaDTz7-w50WfzE": 1000, - "3_Ww31muQLPPlTvAEaD2Noe2i9WpryyLM66XcyArpGc": 1000, - "EjDXLVwfr61qG-bhj6-rYrX-AtH21kITcYOuZT6EY88": 1000, - "5Zi0t5vRhO2oPiHORLeDqS9zb07fUcpnmTY-jCUu8xU": 1000, - "WkO2iWQarjFINMy9Xvt7TQIuxsaee7WzYkaDxVnJpds": 1000, - "M2x03EN8CuNeDffGaOkEmdD8Kg-fiLIsmPGd6mdrMRk": 1000, - "NIRgG8PXSGZ2HhQSFH_uMwQTkkRvuKF1aby7vuvVj7U": 1000, - "kRA4562FHwTs17vjTGi6Dn29DKT2dakbePcHZ2LzmQ8": 1000, - "d_DWZejKaLbDy4hQLmR3nnveXA1Lj7csnAzBGLyARrE": 1000, - "nroIqaA6TNbxGo96m6L_98PKVxWxNa5UOVgXHjUx0T8": 1000, - "1D9Q_BFww3vzuDJuovC50pE3iGwd8k6SDE5dqGv37eU": 1000, - "aD-9EMHyYyMtm08fieDTRQiiILe-ah4YbcAMuU5bJiY": 1000, - "x6HEofkI_ikRKMM90UEqZja8-i20n7FxEXHyRx8D1T0": 1000, - "Cq43aW3OBrzBSYpAFrq_l9QX--KbAhWw7Esq0PdYmtY": 1000, - "40aPqH8vxFzjUlTnu2xK2Umv0z4M_zq2dCmiVFMDaJ0": 1000, - "RA3r9T9aJeJKKTrqqHDjdrdr1GLutzmOMvkCvvZWtQU": 1000, - "A1yWeUlKEYhFxadrLSL7EJOpc9-S7HsEWLjATXVt6gg": 5000, - "UcqU_8POekR752Ut5FTTJNKbJNN3GuzBP5IilU_1PF8": 7421, - "l2QIZHhfRUEMbaw3wZ2FQ6cPRNoWqkmnu8_sNLqu08c": 5500, - "aMPlul_sA2TjcBOGpJndgZAcApZLMvFhUGYAPkZ3uLA": 5499.218195999998, - "W5SqiTJ_Q2zjRa4PJxSY5pGEsAz5NVbNvQj39ZAojgk": 7100, - "z3-tPtqyFvM9XSmN62mFEKT2Jw-qpJtOEjHxDTAsGbs": 5000, - "0g3qikRZlRVtVfkZFf11cEerduD-QVkvuAy-a4Qc5Hs": 5700, - "nUfdgdFO82irpLq8vL1W1amXq9n6ypIaRh_HER6rIsI": 5512.01, - "fkgvD7NU4sbsvkAFuBUsOvWyxvSV2Au2-rvP9T84TaQ": 1000, - "QXH67CUy-doonGwLQLdh-sUfZZt_RObbskg49RCxNOA": 99900, - "3dX8Cnz3N64nKt2EKmWpKL1EbErFP3RFjxSDyQHQrkI": 99700, - "lqY49mllPGIRB_SfBtJo35JK86HbPlGgiheMZHxhD08": 1000, - "j8bTQd1JXsBUSx6EZ2K7wLa2jtPF-Upypscwg1o_FPA": 1000, - "-AF-PlCXRS5LsoDrjNzoQMAeTtF5C4m6-D6j9qs4RZQ": 1000, - "FFkTqUHyGRkqFSSxRc-Jd9AGDkPY7m-yPdiHxsthbWQ": 1000, - "p7d2FB3Q9ssLICdqAE3JFq6CZCcop3T9StYVxbFoAyA": 1000, - "Gj5peOLt14Mi9ARipHg9Vml3JK5Kebz5TaMGXdRgNUo": 0.8909019999949996, - "LY8g8YwEKhZ8OaSB83oUFEuVAyAaoWkjV7TFH2EJ1KU": 1000, - "N_QqeqIJVH5PJPEUuvVxjiglmRGp6U9z22BDQAIcF_0": 7070, - "d7yYfQayRFatGN0wj9wRrZtZgJb0f4WlLZFlS9cOFEQ": 1000, - "qBLLnVRm_xFooTuh3ZbhLX4Qyi2MxrlKAMgVD0h1lvU": 1000, - "GE0f-xVRN8psA6bSiiRsCcqKJ92DLq_CGQ5Zu--j_Fo": 1000, - "4daaKm3XuZqBMoFQ6dS_-M7jiOA9_YbrWeiCF26f5SE": 1000, - "DF_aN8QxYS5AH8wqXXgGFcFqT0JTMauCyOg80KJvtmE": 1000, - "epj4hjuFUECECj3w2gOoZXkQFi8yz7uti5UNeiI6Vkc": 1000, - "8QffvrnWO3z44drMa-oInK3V0E2pUqNw2CwUKx4aImw": 10, - "yAFVIdRnZzZY-m4PCVUVuSfXTczkJYm1aqMr1MduRFs": 1000, - "R3SP-48ZW0PpdXskwU2AMYnOtAvfps6KJWyDk0-REOc": 1000, - "aq7iFVbwYBmyUeoF3wu8ZnnAxLiI8K9rMXFuLsBkHOk": 640, - "TXQ_BTW3oPF0N1WGfvaMXgyDD_c3lFC16LY2kx_4GBM": 1000, - "LTZsJ3FjKpCHOF_nInRSYlqKjlN3YIcMbgnuiT9_h7U": 1000, - "qBXkJCxTHJoU2yce-joRx5jyieZwkFcx9KBZjcuSmg4": 1000, - "loS_4KA3Yp4Zw5CeUxCP41bHsxgm3T-CPpIrL883x_g": 5100, - "bUdoB5OLMzKQW9xY1Y4bWeWz8VOLGUObd66OmMI-df8": 1000, - "pP5yl_ZD9cweeH2bowYAN6VafeDO1U7mlTV6lsf4_ao": 999, - "N03SJn9ncg1NQ6K6NcuS6ZyBnCxwPBxEuiOUty6WuLw": 900, - "cMqN5hC-8UDJ7uX4eilOjXf7dagEhF3ugGaD_3uIB6M": 200, - "lrRLeGClnBHiN0FRxJCFRHvV1gtz-BUvdqOSGpcQTTw": 800, - "T4TIiWHuVlVqgn_D88pyYVjnDFd62nLVRsNVea4nxVU": 1000, - "UCY4BC8NTZ3dR50ApjoAGsztWZ5okWnzVMh8APyGMH0": 1000, - "faTSI18G7zCYxM6-9O1uIlmslKzCxSmUGbJXXcLhYBE": 1000, - "w-zdpfBt4-aUwkPgtBMG7iLKVNk6HfG5F5BkC22ZWG0": 1000, - "l32_jLFVa_WJQZnH7wuUCs0sOhAN1dGAnwlqduCFrV4": 1000, - "LXYKcCXYZkzlrxhAXdYoFhGSbf0qtAoW9ejs1Bni8SQ": 400, - "EOLKiAhE9NZeb18_cqd4mz2Y9HKpti6ndtbPh9uCufo": 800, - "8mdbES0htKKI3_ZOipvv4fxAdl5CvaoVJbajWrbb7eY": 10000, - "nZLcLEKDD0Xi7VRhF2koiGh8zVxB4cCeG647xmqnd2k": 1000, - "yrtCO3-_uquQwydS9vHstzWIGjVioXGWma4dkUI8PMI": 1000, - "YmCWrPKjetl_UClDWFmFEo292HeWyJYWFpip7hN_6c4": 1000, - "-mBSt6EhRx-g8hz_p2L1cmn_g7bY9rnp4cEH7f5UUxw": 1000, - "kjPopxK0f0eXSwktGchqO7z4wG_-dvblUfxbWS7UKkg": 1000, - "GdQeKwc-CE1gLsobVJ54t-3OFuC9TxooxEZm88pwKCo": 1000, - "wkGlQt5EceHdMF9TqkRMcTi_-PSqImuxjCCPUDoXGsY": 1000, - "lXaqXjjjX9Kzwpk-R_vQVvLwm-CoqE6HdqrZfXATx8E": 999, - "Cw8vKC39dA4amb_Vv341KoUL5x1iHxcCrh-lfH7Inb0": 1000, - "I2Hbp8Z92I85LqtVAYwRdcN6ybYbWTUFqmb9_iU6lM4": 1000, - "K9Mtbz2pVEw5iZvb8ZTQJClHaB0ESQqMd_SYzXk5Djc": 1000, - "QSW2uMDWgZZYmYrAG3iTm5k4PdJh6tslb17yo3aXXTk": 300, - "QcWpvDCiMPXUr5SQfCEEoC-5qI5xY2duCd7ZSkd3A1Y": 1000, - "4VeD-b7ufIpIlyVYXsA4E2dOOcpRroZC-yHLdtjmFF8": 1000, - "Nwx2xVjb32iNeyWY2URMZaZ7aR9Fsc6tmLLzp_ar3Ds": 0, - "knpQzszQQ1yyFngdfIhh2lTTCOT7IaAQVg7BJzsyt0c": 1000, - "koiw-O9PkMWbW0nm3IEmZYIZknPw6TNOWh7XlchTUc0": 1000, - "N597vK6RXvu2q4PtFo7r9uM5tjwLj_NhD8ifc_ySZ9o": 1000, - "u1sZO8a0JOuC86Oa9Lnq0EL80XNSWfdmgVl1ehv9ekc": 1000, - "5T2Q5PCthVhI3A890mmQvv_Wa80RZTAvS5ieYUmLkY4": 1000, - "UslAJHtJEIr_iAQhxxLRMsMTe8MjL9DNGVM_N2lEP4M": 1000, - "lG0_I_U1RFgipchhfAcvpHnMPUxVJf_cdKqItOAtjBM": 1000, - "9DV7dRFL2NfSmGaspVPYd4v59ho_vF0mi0kpj0395nQ": 1000, - "YvpP2QG3ZTt1z4JzF6C-rZhzRM8xUvp88h3Wafa4Nl8": 1000, - "PRpIYQqOZJzRGiUnBHVKj_9cuGxI26GcSSOoYqlQETs": 1000, - "mMhCX-WhZOFvYeHvASl0ast2H3SGntZ_LPydqqWDRsg": 1000, - "DloBBMh5COyV0y5v1LV_tBziyFLFPp_N6Wdbf-hJsDI": 1000, - "J5KugcdVHlC6uxD5uEybeQdq-JLpBnXNg5Wrl6ktoRs": 1000, - "txRQ7d9lwBLJprO_MZmt3EWM_Nb4e4bcijRu21vXIvo": 1000, - "TedQ4ZnLAcTt3HCwS4ZGOh2hnUBo5d7rKT1LB7Q84Ng": 1000, - "S2Ys_7fRUQ1jETKkIn_DChF0lg__3PCME_p72_EGyGw": 1000, - "X4T-2TvuNB3n8P68prAmmuCu5IqfR9BvgS7pqOe_yBw": 1000, - "xmrj_x3F56sz61jRj99tF7sEES16RCCL5qoS4-NuNZg": 1000, - "ixy4QfHcW-sbkfmhpds2-pzm9pNYwGNtU-yJxOVEK5s": 1000, - "wWCbjJVifmIqJJYbTkGMbH7R9SSRyE5HBfkB1eCF5PU": 1000, - "4rsFDJ4_sj8XEznwDdNXZHpm4le4MUuYvUbMT4tbGfI": 1000, - "0wGdm2s9wiPqxAPAXaX1aAG23ecRegiEjeod4vEvWts": 1000, - "IGfK2YwMduHmz_-e4H8DekK6lu2FP1uROy43r6kpaxw": 1000, - "NbnoLDwOeSZD8p6ssi6_5ph6tUlTp7W5qjnVoYU6914": 1000, - "wAOTETBMDyJ-lr7hccU-p6nc05eSZpICRWVptmXW2Bg": 1000, - "HfuRNzCvAxN5TmWNQfV4hAq4nmKsHZXbrYgGd8TagTI": 1000, - "E5GTkNQAUWc5jP98g_WctTzKXNBHuaNUCXzmv7YQ3Dg": 1000, - "PDeVK7Asa_ut54zbVdbfPXteIlIW1_kqBg9kpqGjGRA": 1000, - "2sXsW9T_jQqXjn6lgZukuPUDCDhxc3I-6XqlbRbgYkI": 1000, - "QuVjH7F00pcBvGcirB4jpbLWzIGKu5EFrUt85Lm0KY4": 1000, - "dh3rpJZx3J_UIB63hH8aiNKwzFVDURqb-697v4Vt5-s": 1000, - "kI6VDyttk0O2GC6J5VToLW9NwvGkrvJQ6DA2Mg75PWE": 1000, - "YBlPFijH1ylrL-7OM1jQWAWM-L7c4Zv7_3y7NU84Fts": 1000, - "1EPRd_fFWmz1q0B-RhFqt9-6Zwb8EyUPqYhOCJ6pnLg": 1000, - "6iE5P9khF_Tu6b_ZbZQ6Rzrx2Oj18TvRc1KoqoplMx8": 1000, - "J_sUwHRN40D1hpaH_RVU-rjHXMj-9Ga2_XD1D6nvtDM": 1000, - "x6J_j3n4vtB8nsNKhDnWaWtWD2AcxUo66TNRcsQ2BIs": 1000, - "TuBS7l6UIJYOFezlzsifaTE25jmFvN9M5MgQPZgiFPE": 1000, - "_r61SLalX5Ae7sbgLAkG_7sq9ZTIH76RU60ymP-q3gc": 1000, - "oKDViNRZliqNt0pCmW437ORsT-sYDConjBkT5GV--ak": 1000, - "Ci9hd5GLUl9WylG-vwpbG6zM6iV3iuycFyUho1rw7_M": 1000, - "R2OjU25QZ-Lvkll2wUDD9LJmfxlAlpDQEKWzpZucB5w": 1000, - "q_7Qhfuqey59rYGsKoy-Zx8ifEvS2AuVSHaiFzkFpiU": 1000, - "7bkfAvzqHwElJsmOHqsvjYNwSBN7czY-X-vLkR5QEwc": 1000, - "CEGn3q28qDY_J5VLisbcRPCzBw7lC2K7Lh1B-AeC2iE": 1000, - "W14mqIP_-vtFA25MJuW5z7SJnmQAAc4_UywYaZ7yTMU": 1000, - "andQoOEj_4_rq2aUUfAHQxv2ScYE9wi34_cftLgpZFo": 1000, - "IXlBC9OlKc_lrqLrVRSM4UGilvfru3Vv9a8VorXu7gk": 1000, - "-AJ58GGz6ByAdylRtJR2Ma7-7EiIGdr8ajyFAf5OO6Q": 1000, - "h-eeVzLWUEbIJoS5VxkpXmAIQ3M0g0lbDEOur6ZyRY4": 1000, - "zV4IJ-ol74ossr8BvvGPF0uyL1ER7QYpmqY5o0BMoyA": 1000, - "7BcLuh7H5aigVgJ8zYIByKZxw1i8Q645MBgFU9vRJZY": 1000, - "7KpgI_4-unMqDulKtSZ4KSnJRvAd9Y_hG3tjpSw8kw8": 1000, - "njszZ4FOCI7wyQu1bNekbdrbcqMMKQBQKsBvpcInrx8": 1000, - "P1m5WgXGzJfScNTj0Cd4lYSu0TynySWuUuViPME8z6U": 1000, - "C8x5RxmawTj9SmGKTKIYKVU1cxYxoY0pOIShXIGciDw": 1000, - "YohWYecVmTIeUbJoSFvXjTHsv1MIlwU4djDFrmEYvPY": 1000, - "gYqyGN1flmU-gY_IcpLUofvpHVnx04QcnBRFYxh39gE": 1000, - "XetPZ9L9uBJemLi0zEvGqnDgrkVjcsq4pIHOZy7X1cg": 1000, - "6KAnWW9SEkEOL8Elyix3kLQEAUYchWCSJ2xVvz62oUs": 1000, - "IDAExUnM1jpGFypDDtdhwQB6peLh5G29r420sW6XWVY": 1000, - "dc_SkxINdiiZga9FMgE2r3ulPp4seW3hlTfld4LdPRc": 1000, - "cLhe-bfeh06c-SEmBCs8l55omLZpgd9GWnR0Z81_uG4": 1000 - }, - "vault": { - "vxUdiv2fGHMiIoek5E4l3M5qSuKCZtSaOBYjMRc94JU": [ - { - "balance": 1000, - "end": 765032, - "start": 760032 - } - ], - "s-hGrOFm1YysWGC3wXkNaFVpyrjdinVpRKiVnhbo2so": [ - { - "balance": 1000, - "end": 765032, - "start": 760032 - } + "contractTxId": "qHc0mV3c0UQ2ziJYH7vQC-O_Brzou5ehw8kBnVVExV4", + "depth": 0, + "label": "", + "interactions": { + "dataType": "Map", + "value": [ + [ + "m-pDJY4liffNrN8x2kSA2R4mGWugVtJLorgjnV15Frg", + { + "interactionInput": { + "txId": "m-pDJY4liffNrN8x2kSA2R4mGWugVtJLorgjnV15Frg", + "blockHeight": 2, + "blockTimestamp": 1635433824, + "caller": "1-4pCkCSQmFdqa4Q9ZAoahNkb7gHUCDlmz02v2hIg60", + "functionName": "mint", + "functionArguments": { + "function": "mint", + "account": "1-4pCkCSQmFdqa4Q9ZAoahNkb7gHUCDlmz02v2hIg60", + "amount": 10000 + }, + "foreignContractCalls": { + "dataType": "Map", + "value": [] + } + }, + "interactionOutput": { + "cacheHit": false, + "intermediaryCacheHit": false, + "executionTime": 2, + "valid": true + } + } + ], + [ + "ufzd-730hMJQGpoLHw3urLcxWYt_u2xVx3I9cBYkBbo", + { + "interactionInput": { + "txId": "ufzd-730hMJQGpoLHw3urLcxWYt_u2xVx3I9cBYkBbo", + "blockHeight": 2, + "blockTimestamp": 1635433824422, + "caller": "1-4pCkCSQmFdqa4Q9ZAoahNkb7gHUCDlmz02v2hIg60", + "functionName": "approve", + "functionArguments": { + "function": "approve", + "spender": "Ylm6wJC3dtwLT7yW27UAqfrV5LE_r55JbrlYSsDX78g", + "amount": 9999 + }, + "dryWrite": false, + "foreignContractCalls": { + "dataType": "Map", + "value": [] + } + }, + "interactionOutput": { + "cacheHit": false, + "intermediaryCacheHit": false, + "executionTime": 2, + "valid": true + } + } + ] ] - }, - "votes": [], - "roles": {}, - "settings": [ - [ - "quorum", - 0.5 - ], - [ - "support", - 0.5 - ], - [ - "voteLength", - 50 - ], - [ - "lockMinLength", - 5 - ], - [ - "lockMaxLength", - 5000 - ] - ], - "trusted": { - "contracts": [], - "sources": [ - "slRfB7WKAEQb5SiO7e-G_FWoAZ4LkoyAYE31ToPXTV8" - ] - }, - "invocations": { - "aMPlul_sA2TjcBOGpJndgZAcApZLMvFhUGYAPkZ3uLA": "rLam10_EYsGsTWoQsC5lrcHl-S3mbnPHmDpEogqBoJc//199" - }, - "foreignCalls": [] + } } diff --git a/src/__tests__/integration/complicated-contract.test.ts b/src/__tests__/integration/complicated-contract.test.ts index dad1ab2..fe6013a 100644 --- a/src/__tests__/integration/complicated-contract.test.ts +++ b/src/__tests__/integration/complicated-contract.test.ts @@ -16,7 +16,6 @@ interface ExampleContractState { } describe('Testing the SmartWeave client', () => { let contractSrc: string; - let initialState: string; let wallet: JWKInterface; let walletAddress: string; diff --git a/src/__tests__/integration/data/inf-loop-contract.js b/src/__tests__/integration/data/inf-loop-contract.js new file mode 100644 index 0000000..fc73131 --- /dev/null +++ b/src/__tests__/integration/data/inf-loop-contract.js @@ -0,0 +1,29 @@ +export async function handle(state, action) { + if (state.counter === undefined) { + state.counter = 0; + } + + if (action.input.function === 'loop') { + let i = 0; + // well, not really an inf. loop, as Jest will cry here + // that async operations were not stopped. + while (i++ < 2) { + await timeout(1000); + state.counter++; + } + + return { state }; + } + + if (action.input.function === 'add') { + state.counter += 10; + return { state }; + } + + function timeout(delay) { + return new Promise(function(resolve) { + setTimeout(resolve, delay); + }); + } + +} diff --git a/src/__tests__/integration/inf-loop.test.ts b/src/__tests__/integration/inf-loop.test.ts new file mode 100644 index 0000000..4651c0a --- /dev/null +++ b/src/__tests__/integration/inf-loop.test.ts @@ -0,0 +1,103 @@ +import fs from 'fs'; + +import ArLocal from 'arlocal'; +import Arweave from 'arweave'; +import { JWKInterface } from 'arweave/node/lib/wallet'; +import { Contract, HandlerBasedContract, LoggerFactory, SmartWeave, SmartWeaveNodeFactory, timeout } from '@smartweave'; +import path from 'path'; + +let arweave: Arweave; +let arlocal: ArLocal; +let smartweave: SmartWeave; +let contract: Contract; + +interface ExampleContractState { + counter: number; +} +describe('Testing the SmartWeave client', () => { + let contractSrc: string; + + let wallet: JWKInterface; + let walletAddress: string; + + beforeAll(async () => { + // note: each tests suit (i.e. file with tests that Jest is running concurrently + // with another files has to have ArLocal set to a different port!) + arlocal = new ArLocal(1830, false); + await arlocal.start(); + + arweave = Arweave.init({ + host: 'localhost', + port: 1830, + protocol: 'http' + }); + + LoggerFactory.INST.logLevel('debug'); + + smartweave = SmartWeaveNodeFactory.memCached(arweave); + + wallet = await arweave.wallets.generate(); + walletAddress = await arweave.wallets.jwkToAddress(wallet); + + contractSrc = fs.readFileSync(path.join(__dirname, 'data/inf-loop-contract.js'), 'utf8'); + + // deploying contract using the new SDK. + const contractTxId = await smartweave.createContract.deploy({ + wallet, + initState: JSON.stringify({ + counter: 10 + }), + src: contractSrc + }); + + contract = smartweave + .contract(contractTxId) + .setEvaluationOptions({ + maxInteractionEvaluationTimeSeconds: 1 + }) + .connect(wallet); + + await mine(); + }); + + afterAll(async () => { + await arlocal.stop(); + }); + + it('should properly deploy contract with initial state', async () => { + expect(await contract.readState()).not.toBeUndefined(); + }); + + it('should run the non blocking function', async () => { + await contract.writeInteraction({ + function: 'add' + }); + await mine(); + + expect((await contract.readState()).state.counter).toEqual(20); + }); + + it('should exit long running function', async () => { + await contract.writeInteraction({ + function: 'loop' + }); + await mine(); + + await contract.writeInteraction({ + function: 'add' + }); + await mine(); + + // wait for a while for the "inf-loop" to finish + // otherwise Jest will complain that there are unresolved promises + // after finishing the tests + try { + await timeout(2).timeoutPromise; + } catch {} + expect((await contract.readState()).state.counter).toEqual(30); + }); +}); + +async function mine() { + await arweave.api.get('mine'); +} diff --git a/src/contract/HandlerBasedContract.ts b/src/contract/HandlerBasedContract.ts index 13ad5de..8c692d6 100644 --- a/src/contract/HandlerBasedContract.ts +++ b/src/contract/HandlerBasedContract.ts @@ -166,7 +166,10 @@ export class HandlerBasedContract implements Contract { const { arweave } = this.smartweave; if (this._evaluationOptions.internalWrites) { - await this.callContract(input, undefined, tags, transfer); + const handlerResult = await this.callContract(input, undefined, tags, transfer); + /*if (handlerResult.type !== "ok") { + throw Error(`Cannot create interaction: ${handlerResult.errorMessage}`); + }*/ const callStack: ContractCallStack = this.getCallStack(); const innerWrites = this._innerWritesEvaluator.eval(callStack); this.logger.debug('Input', input); diff --git a/src/core/modules/StateEvaluator.ts b/src/core/modules/StateEvaluator.ts index 91be1e9..a0b5e26 100644 --- a/src/core/modules/StateEvaluator.ts +++ b/src/core/modules/StateEvaluator.ts @@ -76,6 +76,8 @@ export class DefaultEvaluationOptions implements EvaluationOptions { maxCallDepth = 7; // your lucky number... + maxInteractionEvaluationTimeSeconds = 60; + stackTrace = { saveState: false }; @@ -103,7 +105,7 @@ export interface EvaluationOptions { // smart contract's source code. internalWrites: boolean; - // maximum call depth between contracts + // the maximum call depth between contracts // eg. ContractA calls ContractB, // then ContractB calls ContractC, // then ContractC calls ContractD @@ -111,6 +113,9 @@ export interface EvaluationOptions { // this is added as a protection from "stackoverflow" errors maxCallDepth: number; + // the maximum evaluation time of a single interaction transaction + maxInteractionEvaluationTimeSeconds: number; + // a set of options that control the behaviour of the stack trace generator stackTrace: { // whether output state should be saved for each interaction in the stack trace (may result in huuuuge json files!) diff --git a/src/core/modules/impl/ContractHandlerApi.ts b/src/core/modules/impl/ContractHandlerApi.ts index 23b383e..baa47c9 100644 --- a/src/core/modules/impl/ContractHandlerApi.ts +++ b/src/core/modules/impl/ContractHandlerApi.ts @@ -11,14 +11,15 @@ import { InteractionResult, LoggerFactory, RedStoneLogger, - SmartWeaveGlobal + SmartWeaveGlobal, + timeout } from '@smartweave'; import BigNumber from 'bignumber.js'; import * as clarity from '@weavery/clarity'; export class ContractHandlerApi implements HandlerApi { private readonly contractLogger: RedStoneLogger; - private readonly logger = LoggerFactory.INST.create('ContractHandler'); + private readonly logger = LoggerFactory.INST.create('ContractHandlerApi'); constructor( private readonly swGlobal: SmartWeaveGlobal, @@ -40,6 +41,10 @@ export class ContractHandlerApi implements HandlerApi { ): Promise> { const contractLogger = LoggerFactory.INST.create('Contract'); + const { timeoutId, timeoutPromise } = timeout( + executionContext.evaluationOptions.maxInteractionEvaluationTimeSeconds + ); + try { const { interaction, interactionTx, currentTx } = interactionData; @@ -57,7 +62,8 @@ export class ContractHandlerApi implements HandlerApi { this.assignWrite(executionContext, currentTx); this.assignRefreshState(executionContext); - const handlerResult = await handler(stateCopy, interaction); + const handlerResult = await Promise.race([timeoutPromise, handler(stateCopy, interaction)]); + this.logger.debug('handlerResult', handlerResult); if (handlerResult && (handlerResult.state || handlerResult.result)) { @@ -86,11 +92,19 @@ export class ContractHandlerApi implements HandlerApi { default: return { type: 'exception', - errorMessage: `${(err && err.stack) || (err && err.message)}`, + errorMessage: `${(err && err.stack) || (err && err.message) || err}`, state: currentResult.state, result: null }; } + } finally { + if (timeoutId !== null) { + // it is important to clear the timeout promise + // - promise.race won't "cancel" it automatically if the "handler" promise "wins" + // - and this would ofc. cause a waste in cpu cycles + // (+ Jest complains about async operations not being stopped properly). + clearTimeout(timeoutId); + } } } @@ -99,7 +113,7 @@ export class ContractHandlerApi implements HandlerApi { if (!executionContext.evaluationOptions.internalWrites) { throw new Error("Internal writes feature switched off. Change EvaluationOptions.internalWrites flag to 'true'"); } - + this.logger.debug('swGlobal.write call:', { from: this.contractDefinition.txId, to: contractTxId, diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 6d9b7db..4abdac3 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -20,3 +20,17 @@ export const mapReplacer = (key: unknown, value: unknown) => { export const asc = (a: number, b: number) => a - b; export const desc = (a: number, b: number) => b - a; + +export function timeout(s: number): { timeoutId: number; timeoutPromise: Promise } { + let timeoutId = null; + const timeoutPromise = new Promise((resolve, reject) => { + timeoutId = setTimeout(() => { + clearTimeout(timeoutId); + reject('timeout'); + }, s * 1000); + }); + return { + timeoutId, + timeoutPromise + }; +} diff --git a/tools/stake.ts b/tools/stake.ts new file mode 100644 index 0000000..309fbed --- /dev/null +++ b/tools/stake.ts @@ -0,0 +1,127 @@ +/* eslint-disable */ +import Arweave from 'arweave'; +import { Contract, LoggerFactory, SmartWeave, SmartWeaveNodeFactory } from '../src'; +import { TsLogFactory } from '../src/logging/node/TsLogFactory'; +import fs from 'fs'; +import path from 'path'; +import ArLocal from 'arlocal'; +import { JWKInterface } from 'arweave/node/lib/wallet'; + +async function main() { + let tokenContractSrc: string; + let tokenContractInitialState: string; + let tokenContract: Contract; + let tokenContractTxId; + + let stakingContractSrc: string; + let stakingContractInitialState: string; + let stakingContract: Contract; + let stakingContractTxId; + + let wallet: JWKInterface; + let walletAddress: string; + + let smartweave: SmartWeave; + + LoggerFactory.use(new TsLogFactory()); + LoggerFactory.INST.logLevel('debug'); + /* + LoggerFactory.INST.logLevel('debug', 'HandlerBasedContract'); + LoggerFactory.INST.logLevel('debug', 'DefaultStateEvaluator'); + LoggerFactory.INST.logLevel('debug', 'CacheableStateEvaluator'); + LoggerFactory.INST.logLevel('debug', 'ContractHandler'); + LoggerFactory.INST.logLevel('debug', 'MemBlockHeightSwCache'); + */ const logger = LoggerFactory.INST.create('stake'); + + const arlocal = new ArLocal(1982, false); + await arlocal.start(); + const arweave = Arweave.init({ + host: 'localhost', + port: 1982, + protocol: 'http' + }); + + try { + smartweave = SmartWeaveNodeFactory.memCached(arweave); + + wallet = await arweave.wallets.generate(); + walletAddress = await arweave.wallets.jwkToAddress(wallet); + + + tokenContractSrc = fs.readFileSync( + path.join(__dirname, '../src/__tests__/integration/', 'data/staking/token-allowance.js'), + 'utf8' + ); + tokenContractInitialState = fs.readFileSync( + path.join(__dirname, '../src/__tests__/integration/', 'data/staking/token-allowance.json'), + 'utf8' + ); + stakingContractSrc = fs.readFileSync( + path.join(__dirname, '../src/__tests__/integration/', 'data/staking/staking-contract.js'), + 'utf8' + ); + stakingContractInitialState = fs.readFileSync( + path.join(__dirname, '../src/__tests__/integration/', 'data/staking/staking-contract.json'), + 'utf8' + ); + + tokenContractTxId = await smartweave.createContract.deploy({ + wallet, + initState: JSON.stringify({ + ...JSON.parse(tokenContractInitialState), + owner: walletAddress + }), + src: tokenContractSrc + }); + + stakingContractTxId = await smartweave.createContract.deploy({ + wallet, + initState: JSON.stringify({ + ...JSON.parse(stakingContractInitialState), + tokenTxId: tokenContractTxId + }), + src: stakingContractSrc + }); + + tokenContract = smartweave + .contract(tokenContractTxId) + .setEvaluationOptions({ internalWrites: true }) + .connect(wallet); + stakingContract = smartweave + .contract(stakingContractTxId) + .setEvaluationOptions({ internalWrites: true }) + .connect(wallet); + await mine(); + + await tokenContract.writeInteraction({ + function: 'mint', + account: walletAddress, + amount: 10000 + }); + await mine(); + + await tokenContract.writeInteraction({ + function: 'approve', + spender: stakingContractTxId, + amount: 9999 + }); + await stakingContract.writeInteraction({ + function: 'stake', + amount: 1000 + }); + await mine(); + + //const tokenState = (await tokenContract.readState()).state; + //logger.info('token stakes:', tokenState.state.stakes); + //logger.info('token balances:', tokenState.state.balances); + //logger.info('Staking state:', (await stakingContract.readState()).state.stakes); + } finally { + await arlocal.stop(); + } + + async function mine() { + await arweave.api.get('mine'); + } +} + +main().catch((e) => console.error(e)); diff --git a/yarn.lock b/yarn.lock index 2f9023e..ecca508 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6380,7 +6380,7 @@ tslib@~2.1.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== -tslog@^3.2.2: +tslog@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/tslog/-/tslog-3.2.2.tgz#5bbaa1fab685c4273e59b38064227321a69a0694" integrity sha512-8dwb1cYpj3/w/MZTrSkPrdlA44loUodGT8N6ULMojqV4YByVM7ynhvVs9JwcIYxhhHf4bz1C5O3NKIPehnGp/w==