From 48a539f3307ea970c7a1fd67266c15108a5fdebc Mon Sep 17 00:00:00 2001 From: Pavel Zbitskiy <65323360+algorandskiy@users.noreply.github.com> Date: Mon, 15 Jul 2024 15:13:26 -0400 Subject: [PATCH] rest api: make RawTransactionAsync developer api (#6069) --- daemon/algod/api/algod.oas2.json | 4 + daemon/algod/api/algod.oas3.yml | 5 + .../v2/generated/experimental/routes.go | 451 +++++++++--------- daemon/algod/api/server/v2/handlers.go | 3 + .../algod/api/server/v2/test/handlers_test.go | 37 +- 5 files changed, 266 insertions(+), 234 deletions(-) diff --git a/daemon/algod/api/algod.oas2.json b/daemon/algod/api/algod.oas2.json index 4cc1e0ced7..9b11f26642 100644 --- a/daemon/algod/api/algod.oas2.json +++ b/daemon/algod/api/algod.oas2.json @@ -1565,6 +1565,7 @@ "/v2/transactions/async": { "post": { "tags": [ + "public", "experimental" ], "consumes": [ @@ -1603,6 +1604,9 @@ "$ref": "#/definitions/ErrorResponse" } }, + "404": { + "description": "Developer or Experimental API not enabled" + }, "500": { "description": "Internal Error", "schema": { diff --git a/daemon/algod/api/algod.oas3.yml b/daemon/algod/api/algod.oas3.yml index 2f57b62453..9b7ec0a37d 100644 --- a/daemon/algod/api/algod.oas3.yml +++ b/daemon/algod/api/algod.oas3.yml @@ -7012,6 +7012,10 @@ }, "description": "Invalid API Token" }, + "404": { + "content": {}, + "description": "Developer or Experimental API not enabled" + }, "500": { "content": { "application/json": { @@ -7039,6 +7043,7 @@ }, "summary": "Fast track for broadcasting a raw transaction or transaction group to the network through the tx handler without performing most of the checks and reporting detailed errors. Should be only used for development and performance testing.", "tags": [ + "public", "experimental" ], "x-codegen-request-body-name": "rawtxn" diff --git a/daemon/algod/api/server/v2/generated/experimental/routes.go b/daemon/algod/api/server/v2/generated/experimental/routes.go index 83312b906f..3d5c749701 100644 --- a/daemon/algod/api/server/v2/generated/experimental/routes.go +++ b/daemon/algod/api/server/v2/generated/experimental/routes.go @@ -130,231 +130,232 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "H4sIAAAAAAAC/+x9f5PbtpLgV0Fpt8qxT5yxHSf74qtXexM7yZuLnbg8TvZ2bd8LRLYkvKEAPgCckeLz", - "d79CN0CCJChRMxMnqdq/7BHxo9FoNBr988MsV5tKSZDWzJ5+mFVc8w1Y0PgXz3NVS5uJwv1VgMm1qKxQ", - "cvY0fGPGaiFXs/lMuF8rbtez+UzyDbRtXP/5TMM/a6GhmD21uob5zORr2HA3sN1VrnUz0jZbqcwPcUZD", - "nD+ffdzzgReFBmOGUP4oyx0TMi/rApjVXBqeu0+GXQu7ZnYtDPOdmZBMSWBqyey605gtBZSFOQmL/GcN", - "ehet0k8+vqSPLYiZViUM4XymNgshIUAFDVDNhjCrWAFLbLTmlrkZHKyhoVXMANf5mi2VPgAqARHDC7Le", - "zJ6+nRmQBWjcrRzEFf53qQF+hcxyvQI7ez9PLW5pQWdWbBJLO/fY12Dq0hqGbXGNK3EFkrleJ+xlbSxb", - "AOOSvf72Gfv888+/cgvZcGuh8EQ2uqp29nhN1H32dFZwC+HzkNZ4uVKayyJr2r/+9hnOf+EXOLUVNwbS", - "h+XMfWHnz8cWEDomSEhICyvchw71ux6JQ9H+vICl0jBxT6jxnW5KPP/vuis5t/m6UkLaxL4w/Mroc5KH", - "Rd338bAGgE77ymFKu0HfPsy+ev/h0fzRw4//8vYs+y//5xeff5y4/GfNuAcwkGyY11qDzHfZSgPH07Lm", - "coiP154ezFrVZcHW/Ao3n2+Q1fu+zPUl1nnFy9rRici1OitXyjDuyaiAJa9Ly8LErJalY1NuNE/tTBhW", - "aXUlCijmjvter0W+Zjk3NAS2Y9eiLB0N1gaKMVpLr27PYfoYo8TBdSN84IL+uMho13UAE7BFbpDlpTKQ", - "WXXgego3DpcFiy+U9q4yx11W7M0aGE7uPtBli7iTjqbLcscs7mvBuGGchatpzsSS7VTNrnFzSnGJ/f1q", - "HNY2zCENN6dzj7rDO4a+ATISyFsoVQKXiLxw7oYok0uxqjUYdr0Gu/Z3ngZTKWmAqcU/ILdu2//3xY8/", - "MKXZSzCGr+AVzy8ZyFwVUJyw8yWTykak4WkJceh6jq3Dw5W65P9hlKOJjVlVPL9M3+il2IjEql7yrdjU", - "GybrzQK029JwhVjFNNhayzGAaMQDpLjh2+Gkb3Qtc9z/dtqOLOeoTZiq5DtE2IZv//pw7sExjJclq0AW", - "Qq6Y3cpROc7NfRi8TKtaFhPEHOv2NLpYTQW5WAooWDPKHkj8NIfgEfI4eFrhKwInDDIKTjPLAXAkbBM0", - "4063+8IqvoKIZE7YT5654VerLkE2hM4WO/xUabgSqjZNpxEYcer9ErhUFrJKw1IkaOzCo8MxGGrjOfDG", - "y0C5kpYLCYVjzgi0skDMahSmaML9753hLb7gBr58MnbHt18n7v5S9Xd9745P2m1slNGRTFyd7qs/sGnJ", - "qtN/wvswntuIVUY/DzZSrN6422YpSryJ/uH2L6ChNsgEOogId5MRK8ltreHpO/nA/cUydmG5LLgu3C8b", - "+ullXVpxIVbup5J+eqFWIr8QqxFkNrAmH1zYbUP/uPHS7Nhuk++KF0pd1lW8oLzzcF3s2PnzsU2mMY8l", - "zLPmtRs/PN5sw2Pk2B5222zkCJCjuKu4a3gJOw0OWp4v8Z/tEumJL/Wv7p+qKl1vWy1TqHV07K9kVB94", - "tcJZVZUi5w6Jr/1n99UxAaCHBG9bnOKF+vRDBGKlVQXaChqUV1VWqpyXmbHc4kj/qmE5ezr7l9NW/3JK", - "3c1pNPkL1+sCOzmRlcSgjFfVEWO8cqKP2cMsHIPGT8gmiO2h0CQkbaIjJeFYcAlXXNqT9snS4QfNAX7r", - "Z2rxTdIO4bv3BBtFOKOGCzAkAVPDe4ZFqGeIVoZoRYF0VapF88NnZ1XVYhC/n1UV4QOlRxAomMFWGGvu", - "4/J5e5Liec6fn7Dv4rFRFFey3LnLgUQNdzcs/a3lb7FGt+TX0I54zzDcTqVP3NYENDgx/y4oDp8Va1U6", - "qecgrbjGf/NtYzJzv0/q/OcgsRi348SFDy2POXrj4C/R4+azHuUMCcere07YWb/vzcjGjbKHYMx5i8W7", - "Jh78RVjYmIOUEEEUUZPfHq413828kJihsDckk58MEIVUfCUkQjt3zyfJNvyS9kMh3h0hgGneRURLJEE2", - "KlQvc3rUnwz0LH8Cak1tbJBEnaRaCmPxXY2N2RpKFJy5DAQdk8qNKGPChu9ZRAPzteYV0bL/QmKXkPie", - "p0YE6y0v3ol3YhLmiN1HG41Q3ZgtH2SdSUiQa/Rg+LpU+eXfuFnfwQlfhLGGtI/TsDXwAjRbc7NOHJwe", - "bbejTaFv1xBpli2iqU6aJb5QK3MHSyzVMayrqp7xsnRTD1lWb7U48KSDXJbMNWawEagw9w9H0rDT+4t9", - "w/O1EwtYzsty3qqKVJWVcAWle7QLKUHPmV1z2x5+HDm8a/AcGXDMzgKLVuPVTKhi040uQgPbcLyBNu41", - "U5XdPg0HNXwDPSkIb0RVoxYhemicPw+rgyuQyJOaoRH8Zo2orYkHP3Fz+084s1S0ONIA2mC+a/DX8IsO", - "0K51e5/KdgqlC9JZW/eb0CxXmoagG95P7v4DXLediTo/qzRkfgjNr0AbXrrV9RZ1vyHfuzqdB05mwS2P", - "TqanwvQDjDgH9kPxDnRCS/Mj/oeXzH12UoyjpJZ6BAojKjKnFnQxO1TRTK4B6lsV25Aqk1U8vzwKymft", - "5Gk2M+nkfUPaU7+FfhHNDr3ZisLc1TbhYGN71T0hpLsK7Gggi+xlOtFcUxDwRlWM2EcPBOIUOBohRG3v", - "/Fr7Wm1TMH2ttoMrTW3hTnbCjTOZ2X+tts89ZEofxjyOPQXpboGSb8Dg7SZjxulmae1yZwulbyZN9C4Y", - "yVprI+Nu1EiYmveQhE3rKvNnM2GxoAa9gVoHj/1CQH/4FMY6WLiw/DfAgnGj3gUWugPdNRbUphIl3AHp", - "r5NC3IIb+Pwxu/jb2RePHv/98RdfOpKstFppvmGLnQXDPvNqOWbsroT7ydcRShfp0b98EmxU3XFT4xhV", - "6xw2vBoORbYvev1SM+baDbHWRTOuugFwEkcEd7UR2hmZdR1oz2FRry7AWvfSfaXV8s654WCGFHTY6FWl", - "nWBhunZCLy2dFq7JKWyt5qcVtgRZkJ+BW4cw7g24WdwJUY1tfNHOUjCP0QIOHopjt6mdZhdvld7p+i7U", - "G6C10skruNLKqlyVmZPzhEooKF75Fsy3CNtV9X8naNk1N8zNjdbLWhYjegi7ldPvLxr6zVa2uNl7g9F6", - "E6vz807Zly7y21dIBTqzW8mQOjvqkaVWG8ZZgR1R1vgOLMlfYgMXlm+qH5fLu9F2KhwooccRGzBuJkYt", - "nPRjIFeSnPkOqGz8qFPQ00dMsDLZcQA8Ri52MkdT2V0c23Ft1kZItNubncwj1ZaDsYRi1SHL26uwxtBB", - "U90zCXAcOl7gZ9TVP4fS8m+VftOKr99pVVd3zp77c05dDveL8daAwvUNamAhV2XXgXTlYD9JrfF3WdCz", - "RolAa0DokSJfiNXaRu/FV1r9BndicpYUoPiBlEWl6zNUGf2gCsdMbG3uQJRsB2s5nKPbmK/xhaot40yq", - "AnDza5MWMkdcDtHXCV20bCy3on5CGLYAR105r91q64qhA9Lgvmg7ZjynE5ohasyI+0XjN0OtaDpyZys1", - "8GLHFgCSqYX3cfDeF7hIjt5TNohpXsRN8IsOXJVWORgDReZV0QdBC+3o6rB78ISAI8DNLMwotuT61sBe", - "Xh2E8xJ2Gfr6GfbZ9z+b+78DvFZZXh5ALLZJobevTxtCPW36fQTXnzwmO9LUEdU68dYxiBIsjKHwKJyM", - "7l8fosEu3h4tV6DRpeQ3pfgwye0IqAH1N6b320JbVyMe7P6Z7iQ8t2GSSxUEq9RgJTc2O8SWXaOOLsGt", - "IOKEKU6MA48IXi+4seQGJWSBOk26TnAeEsLcFOMAjz5D3Mg/hxfIcOzc3YPS1KZ5jpi6qpS2UKTWgBbZ", - "0bl+gG0zl1pGYzdvHqtYbeDQyGNYisb3yPIvYPyD28b+6i26w8WhTd3d87skKjtAtIjYB8hFaBVhN/bi", - "HQFEmBbRRDjC9CincR2ez4xVVeW4hc1q2fQbQ9MFtT6zP7Vth8RFRg66twsFBg0ovr2H/JowS/7ba26Y", - "hyOY2FGdQ/5aQ5jdYcyMkDlk+ygfn3iuVXwEDh7SulppXkBWQMl3CecA+szo874BcMfb566ykJEjbnrT", - "W0oOfo97hlY4nkkJjwy/sNwdQfcUaAnE9z4wcgE4doo5eTq61wyFcyW3KIyHy6atToyIt+GVsm7HPT0g", - "yJ6jTwF4BA/N0DdHBXbO2rdnf4r/BOMnaOSI4yfZgRlbQjv+UQsY0QX7GKfovPTYe48DJ9nmKBs7wEfG", - "juyIYvoV11bkosK3zvewu/OnX3+CpOGcFWC5KKFg0Qd6BlZxf0YupP0xb/YUnKR7G4I/UL4llhPcdLrA", - "X8IO39yvKDYhUnXcxVs2Maq7n7hkCGjweHYieNwEtjy35c4JanYNO3YNGpipF+TCMLSnWFVl8QBJ+8ye", - "Gb11Nmkb3WsuvsChouWlfM3oTbAfvje9h0EHHf4tUClVTtCQDZCRhGCS7wirlNt14cOfQgBMoKQOkJ5p", - "o2m+uf7vmQ6acQXsP1XNci7xyVVbaGQapVFQQAHSzeBEsGZO75zYYghK2AC9JPHLgwf9hT944PdcGLaE", - "6xAz6Br20fHgAepxXiljO4frDvSh7ridJ64PNFy5i8+/Qvo85bDHkx95yk6+6g3eWLvcmTLGE65b/q0Z", - "QO9kbqesPaaRad5eOO4kW07XP2iwbtz3C7GpS27vwmoFV7zM1BVoLQo4yMn9xELJb654+WPTDeMhIXc0", - "mkOWYxTfxLHgjetDgX9uHCGFO8Dk9D8VIDinXhfU6cATs/VUFZsNFIJbKHes0pADxbs5ydE0Sz1h5Amf", - "r7lc4YNBq3rlnVtpHGT4tSHVjK7lYIikUGW3MkMld+oC8G5qIeTRiVPA3ZOuryGnB8w1b+bzUa5TbuZo", - "D/oWg6SRbD4bffE6pF61L15CTjduc8Jl0JH3Ivy0E080pSDqnOwzxFe8Le4wuc39bVT27dApKIcTRx6/", - "7ccxp1/33C53dyD00EBMQ6XB4BUVq6kMfVXLOEY7uArujIXNUJNPXf8+cvxej74XlSyFhGyjJOySaUmE", - "hJf4MXmc8Joc6YwCy1jf/hukA38PrO48U6jxtvjF3e6f0L7Fynyr9F2ZRGnAyeL9BAvkQXO7n/KmdlJe", - "lgnToo/g7DMAM2+cdYVm3BiVC5TZzgsz917BZI304Z5d9L9q4lLu4Oz1x+3Z0OLkAKgjhrJinOWlQA2y", - "ksbqOrfvJEcdVbTUhBNXeIyPay2fhSZpNWlCi+mHeic5OvA1mqukw8YSEmqabwGC8tLUqxUY23vrLAHe", - "Sd9KSFZLYXGujTsuGZ2XCjR6Up1Qyw3fsaWjCavYr6AVW9S2K/1jgLKxoiy9Qc9Nw9TyneSWlcCNZS+F", - "fLPF4YLRPxxZCfZa6csGC+nbfQUSjDBZ2tnsO/qKfv1++Wvv44/u7vQ5OJ22GRNmbpmdJCn/97N/f/r2", - "LPsvnv36MPvqf5y+//Dk4/0Hgx8ff/zrX/9f96fPP/71/r//a2qnAuyp8FkP+flz/zI+f47Pn8hVvw/7", - "J9P/b4TMkkQWe3P0aIt9hqkiPAHd7yrH7BreSbuVjpCueCkKx1tuQg79G2ZwFul09KimsxE9ZVhY65GP", - "iltwGZZgMj3WeGMpauifmQ5UR6Okjz3H87KsJW1lkL4pDjP4l6nlvElGQHnKnjKMVF/z4OTp/3z8xZez", - "eRth3nyfzWf+6/sEJYtim8ojUMA29VaMgyTuGVbxnQGb5h4Ie9KVjnw74mE3sFmANmtRfXpOYaxYpDlc", - "CFnyOqetPJfk4O/OD5o4d95yopafHm6rAQqo7DqVv6gjqGGrdjcBem4nlVZXIOdMnMBJX+dTuPeid+or", - "gS+DY6pWasprqDkHRGiBKiKsxwuZpFhJ0U8vvMFf/ubOn0N+4BRc/TlTHr33vvvmDTv1DNPco5QWNHSU", - "hCDxlPbBkx2HJMfN4piyd/KdfA5L1D4o+fSdLLjlpwtuRG5OawP6a15ymcPJSrGnIR7zObf8nRxIWqOJ", - "FaOgaVbVi1Lk7DJ+kLTkScmyhiO8e/eWlyv17t37gW/G8Pngp0ryF5ogc4Kwqm3mU/1kGq65Ttm+TJPq", - "BUemXF77ZiUhW9WkIA2phPz4aZ7Hq8r0Uz4Ml19VpVt+RIbGJzRwW8aMVU08mhNQfEiv298flL8YNL8O", - "epXagGG/bHj1Vkj7nmXv6ocPP8fIvjYHwi/+ync0uatgsnZlNCVFX6mCC6dnJfqqZxVfpUxs7969tcAr", - "3H2Ulzeo4yhLht06UYchwACHahfQhDiPbgDBcXRwMC7ugnqFtI7pJeAn3MJuAPat9iuKn7/xdh2Iwee1", - "XWfubCdXZRyJh51psr2tnJAVvDGMWOFr1SfGWwDL15Bf+oxlsKnsbt7pHhx+vKAZWIcwlMuOIgwxmxIa", - "KBbA6qrgXhTnctdPa2MoogIHfQ2XsHuj2mRMx+Sx6aZVMWMHFSk1ki4dscbH1o/R33zvVRYCTX12Egze", - "DGTxtKGL0Gf8IJPIeweHOEUUnbQfY4jgOoEIIv4RFNxgoW68W5F+anlC5iCtuIIMSrESi1Qa3v8Y2sMC", - "rI4qfeZB74XcDGiYWDL3lF/Qxeqf95rLFbjr2V2pyvCSsqomnTbwPbQGru0CuN2r55dxQooAHT4przHy", - "GjV8c7cE2Lr9FhY1dhKu3asCFUXUxnsvn4z7nxHgUNwQntC9fSmcjL51PeoSGQfDrdxgt3nWete8mM4Q", - "Lvq+AUxZqq7dvjgolM+2SUldovulNnwFI2+X2Ho3MR9Gx+KHgxySSJIyiFr2RY2BJJAEmRpnbs3JMwzu", - "izvE+MzsOWSGmchA7G1GmETbI2xRogDbeK7S3nPdsaJSVuAx0NKsBbRsRcEARhcj8XFccxOOI+ZLDVx2", - "knT2G6Z92Zea7jzyJYySojaJ58Jt2Oegg3e/T1AXstKFVHTxo39CWjn39sLwhdR2KImiaQElrGjh1DgQ", - "Spswqd0gB8ePyyXylizllhgpqCMBwM8B7uXygDGyjbDJI6TIOAIbHR9wYPaDis+mXB0DpPQJn3gYG6+I", - "6G9IB/aRo74TRlXlLlcxYm/MAwfwqShayaLnUY3DMCHnzLG5K146Nuff4u0ggwxp+KDo5UPzrjf3xx4a", - "e0xTdOUftSYSEm6ymliaDUCnRe09EC/UNqMI5eRbZLFdOHpPxi5gvHTqYFIuunuGLdQW3bnwaiFf+QOw", - "jMMRwIh0L1thkF6x35icRcDsm3a/nJuiQoMk4xWtDbmMCXpTph6RLcfI5bMovdyNAOipodpaDV4tcVB9", - "0BVPhpd5e6vN27SpISwsdfzHjlByl0bwN9SPdRPC/a1N/DeeXCycqE+SCW+oWbpNhkLqXFHWwWMSFPbJ", - "oQPEHqy+6suBSbR2fb26eI2wlmIljvkOjZJDtBkoAR/BWUc0zS5TngLuLQ94j1+EbpGyDnePy939yIFQ", - "w0oYC63RKPgF/R7qeI7pk5Vajq/OVnrp1vdaqebyJ7M5duws85OvAD3wl0Ibm6HFLbkE1+hbg0qkb13T", - "tATadVGkYgOiSHNcnPYSdlkhyjpNr37e75+7aX9oLhpTL/AWE5IctBZYHCPpuLxnavJt37vgF7TgF/zO", - "1jvtNLimbmLtyKU7x5/kXPQY2D52kCDAFHEMd20UpXsYZBRwPuSOkTQa+bSc7LM2DA5TEcY+6KUWwt7H", - "bn4aKbmWKA1gOkJQrVZQhPRmwR4moyRypZKrqIpTVe3LmXfCKHUdZp7bk7TOu+HDmBN+JO5nQhawTUMf", - "vwoQ8jayDhPu4SQrkJSuJK0WSqImdvHHFpGu7hPbQvsBAEkn6Dc9Y3brnUy71GwnbkAJvPBvEgNhffuP", - "5XBDPOrmY+7Tncyn+48QDog0JWxU2GSYhmCEAfOqEsW2Z3iiUUeVYPwo7fKItIWsxQ92AANdJ+gkwXVS", - "aXtXa69gP8U376l7lZHvtXcsdvTNcx+AX9QaLRgdz+Zh3vbmrTZx7d//fGGV5ivwVqiMQLrVELicY9AQ", - "ZUU3zApyJynEcgmx9cXcxHLQAW6gYy8mkG6CyNImmlpI++WTFBkdoJ4WxsMoS1NMghbGbPJvhlauINNH", - "qqTmSoi25gamqmS4/vewy37mZe0eGUKb1j3Xm526l+8Ru361+R52OPJBr1cH2IFdQc3Ta0AaTGn6m08m", - "SmB9z3RS/OPzsrOFR+zUWXqX7mhrfFGGceJvb5lO0YLuUm5zMFonCQfLlN24SPsmuNMDXcT3SfnQJoji", - "sAwSyfvxVMKEEpbDq6jJRXGIdt8ALwPx4nJmH+ez23kCpG4zP+IBXL9qLtAkntHTlCzDHceeI1HOq0qr", - "K15m3l9i7PLX6spf/tg8uFd84pdMmrLffHP24pUH/+N8lpfAddZoAkZXhe2qP82qqIzD/quEsn17RSdp", - "iqLNbzIyxz4W15jZu6dsGhRFaf1noqPofS6WaYf3g7zPu/rQEve4/EDVePy0Nk9y+Ok6+fArLspgbAzQ", - "jjin4+KmVdZJcoV4gFs7C0U+X9mdspvB6U6fjpa6DvAknOtHTE2ZfnFIn7gSWZF3/uF3Lj19q3SH+fvI", - "xKTz0G8nVjkhm/A44qsd6lf2hakTRoLXL6tf3Gl88CA+ag8ezNkvpf8QAYi/L/zv+L548CBpPUyqsRyT", - "QC2V5Bu430RZjG7Ep32AS7iedkGfXW0ayVKNk2FDoeQFFNB97bF3rYXHZ+F/KaAE99PJlEd6vOmE7hiY", - "KSfoYiwSsXEy3VDJTMOU7PtUYxCsIy1k9r4kAxljh0dI1hs0YGamFHnatUMujGOvkpwpXWOGjUe0tW7E", - "Woz45spaRGO5ZlNypvaAjOZIItMk07a2uFsof7xrKf5ZAxOFe9UsBWi813pXXXgc4KgDgTStF/MDk52q", - "Hf42epA99qagC9qnBNlrv3ve2JTCQlNFf470AI9nHDDuPd7bnj48NVM027rrgjntHTOldHpgdN5YNzJH", - "shS6MNlSq18hbQhB+1EiEUYwfApU8/4KMuW512cpjVG5rejezn5ou6e/jcc2/tZv4bDopurYTS7T9Kk+", - "biNv8ug16XTNHsljj7DYw6AbGjDCWvB4Rc6wWAYleB9xSeeJskB0IszSpzKO5Tyl8dtT6WEexL+W/HrB", - "UzVi3FvIwRRtb8dPyioWOocNME2OA5qdRR7cTVtBmeQq0K0NYpiV9obvGpp28oumfcAgRcVPlzm5KZRG", - "JYap5TWXVEXc9SN+5XsbIBO863WtNOaBNGmXrgJysUmqY9+9e1vkQ/edQqwEFciuDUQVmP1AjJJNIhX5", - "KtZN5g6PmvMleziPysD73SjElTBiUQK2eEQtFtzgddmYw5subnkg7dpg88cTmq9rWWgo7NoQYo1izdsT", - "hbzGMXEB9hpAsofY7tFX7DN0yTTiCu47LHohaPb00VfoUEN/PEzdsr7A+T6WXSDPDs7aaTpGn1QawzFJ", - "P2ra+3qpAX6F8dthz2mirlPOErb0F8rhs7Thkq8gHZ+xOQAT9cXdRHN+Dy+SrAFgrFY7Jmx6frDc8aeR", - "mG/H/ggMlqvNRtiNd9wzauPoqS2vTJOG4ajWv68XFeAKH9H/tQrufz1d1yd+xvDNSMwWein/gDbaGK1z", - "xin5Zylaz/RQr5Odh9zCWECrqZtFuHFzuaWjLImO6ktWaSEt6j9qu8z+4p7FmueO/Z2MgZstvnySKETV", - "rdUijwP8k+NdgwF9lUa9HiH7ILP4vuwzqWS2cRyluN/mWIhO5aijbtolc8wvdP/QUyVfN0o2Sm51h9x4", - "xKlvRXhyz4C3JMVmPUfR49Er++SUWes0efDa7dBPr194KWOjdKpgQHvcvcShwWoBVxgxl94kN+Yt90KX", - "k3bhNtD/vv5PQeSMxLJwlpMPgciiuS9Y3knxP79sM5+jYZUiEXs6QKUT2k6vt/vE3obHad369ltyGMNv", - "I5ibjDYcZYiVEe97cq9v+vwe/kJ9kGjPOwrHR78w7d7gKMc/eIBAP3gw92LwL4+7n4m9P3iQTkCcVLm5", - "X1ss3OZFjH1Te/i1SijAQtXCxqHI50dIKCDHLin3wTHBhR9qzroV4j69FHE38V1pb9P0KXj37i1+CXjA", - "P/qI+J2ZJW5gG6Uwfti7FTKTJFM03yM/d86+VtuphNO7gwLx/AFQNIKSieo5XMmgAmjSXH/QXySiUTfq", - "AkrlHplxUaBYn//nwbNb/HwPtmtRFj+3ud16F4nmMl8nvYQXruPfSUbvXMHEKpN1RtZcSiiTw9Hb9u/h", - "DZx4pf9DTZ1nI+TEtv0KtLTc3uJawLtgBqDChA69wpZughir3bRZTVqGcqUKhvO0RS1a5jgs5ZwqoZmI", - "b8ZhN7X1fqsYC+4TDi1FiW6Yabsxtsw0tyMJtLDeeagv5MbB8uOG1Aw0OmjGxQYvZsM3VQl4Mq9A8xV2", - "VRJ63TGFGo4cVaxgpnKfsCUmrFDM1loytVxGywBphYZyN2cVN4YGeeiWBVuce/b00cOHSbUXYmfCSgmL", - "YZk/tkt5dIpN6IsvskSlAI4C9jCsH1uKOmZjh4Tja0r+swZjUzwVP1DkKlpJ3a1N9SSb2qcn7DvMfOSI", - "uJPqHtWVIYlwN6FmXZWKF3NMbvzmm7MXjGalPlRCnupZrlBb1yX/pHlleoLRkNlpJHPO9HH2p/JwqzY2", - "a8pPpnITuhZtgUzR87lBPV6MnRP2nFSoTQF/moRhimy9gSKqdkmPeCQO9x9reb5G3WRHAhrnldMLsQZ2", - "1lpuoujDpvoRMmwHt6/FSqVY50zZNehrYQAj8uEKuukQm9ygXjce0iN2l6drKYlSTo4QRptaR8eiPQBH", - "kmxwKkhC1kP8kZopqsd8bF3aC+yVjsXoFbntWf1Dcr2QYpu99MaFnEslRY6lEFKSNKZum2amnFA1Im1f", - "NDN/QhOHK1lat4kF9lgcLbYbGKFH3NDkH311m0rUQX9a2PqSayuwxnM2KOah0rU3iAlpwFezckQU80ml", - "E05NyUCIxoHiSDLCrEwjGs5v3bcfvP4bk2JcComaLo82/z4jk1VpBFqmJROWrRQYv55uNI956/qcYJbG", - "ArbvT16olcgvxArHIDc6t2zyGR0OdRY8SL3Hpmv7zLX1ufObnzvuYDTpWVX5ScfroCcFSbuVowhO+S0F", - "R5IIuc348Wh7yG2v6zfep47Q4Aq91qDCe3hAGE0t7e4o37i3JVEUtmAUUZlMoCtkAowXQgYTavqCyJNX", - "Am4MnteRfibX3NLbYRJPewO8HAmAwAhlssHfdqh+5QCHElxjmGN8G9sy4COMo2nQSvxc7lg4FI66I2Hi", - "GS8b1+lEUW+UqrwQVWBwUa/Md4pxOMadhZDJDroOhu813bEax7E30ViOwkVdrMBmvChSqa2+xq8Mv4Yg", - "MdhCXjdFqJrowG6O8iG1+YlyJU292TNXaHDL6aK6+QlqiGv3hx3GTDuLHf6bqsA0vjPeafroqNzgIV0c", - "l5h/GGWcknodTWdGrLLpmMA75fboaKe+GaG3/e+U0kO47h8iGrfH5eI9SvG3b9zFESfuHfin09XS5NVF", - "X3CF30PCoyYjZJcr4VU2qDOGXg+4eYkt6wEfGiYBv+LlSCR8bCuh+5XsB2Px8Plo+gZufXouy9leFjSa", - "8oh8hXvWl6EJccw/mNyD785q4de6F6HjtrvvO5Y68hFrmcWohe5mRrR2g4+1on1/NZYiIdTpwO9xPRDv", - "xTP3aeDhSqg6eF8FH+jwJKRffQqeTt2PkfUnIwt+b6vFqI3lja9fS8v0b/LvfyYrLANp9e4PYHEZbHq/", - "qExC2iX1VNuENaUPJ5VC7NyKU2rYpMqleNkw6MqItXRoaVB+ZkBWz6eIAwN8fJzPzoujLsxUyZ0ZjZI6", - "di/Eam0xY//fgBegXx2oSNBWIcAjVikj2gqkpRvMp4Bd43AnU4MNHAGLuKLCcKzghHoFucWys61znQY4", - "pr6CmywYff67MsH4c7qJyfAFCfZVIRjWmj1wxw8SJ0XJv6hO58n0nPtnjQs1RYBdc9Oma+nFTE+O3Fwu", - "IcesyHsTVf3HGmSUBGke9DIIyzLKWyWaOCbM63281rEFaF8eqb3wRPV1bg3OWBz7JezuGdahhmTh0CaI", - "7yaJgxEDZAILOaTHFMnea0yYhjIQC8El2KdibotjjOZ8jtKu3XCuQJLu4mhTse2ZMl30fNJcrutRaR8x", - "JGcsl9WwZvL4++M5lqg23kGON4mH41c6Ox8Wzrn2iYsxrVhjOwkpjMGE30IOQZqlFJe+fgBihSxV11wX", - "ocWdJIWiu0mkgV42M4s2gGPo5JAoxYCxUHmpnBiRjQWUdWMmGofDe4Y8Q9sEPgjXErSGojGJlMpAZlUI", - "+NgHxz5UkPvrjZBgRssfEXCjqa9ft7m9sQwcx1TX3Hu9xgtkGjbcQaejDNzjc+5D9jP6HoLwQxmwgxqm", - "hl4P16MNoTvCDJAYU/2S+dvycHD/TZRNQkrQWbA89dNxy25GNsy7WdQ5XdDxwWgUcpNz5+xhJUk9TT5c", - "Ze+NEAXJX8LulB5BoZBv2MEYaJKcCPQo4Whvk+9U/WZScK/uBLzfN49cpVSZjRg7zoc5xPsUfynyS8Ac", - "gI2L+0iNdvYZ6tgba/b1ehdyZlcVSCjunzB2JimoKBi2u+UFe5PLe3bf/Fuctagprb9Xqp28k+noDEy4", - "r2/JzcIw+3mYAcfqbjkVDXIgQ/VWjrncXGNy/m4Vz5Opr/KhqblfRb4lKoIiJZNckMXqGR70lOIIUyBE", - "uTrQkMmZt3QxU6qUL+9N0jS4odKYiidDgCzIKdkCGij84EkEJOuiJ04hpb7zSe/Ukmlojcg3zf43LOGe", - "etH3Z25m6fK7pdLQKcbuelOmzybwBdNo4n8WwmqudzfJ0TcoIT/Qnoxi+aA7VuOJ1S6k9cYa4rAs1XWG", - "zCpr6lyknraunelexqHoWtvPneoFRH5d3HhBbcfWvGC50hryuEc63pOg2igNWanQzStlgV5aJ3dvMMhL", - "slKtmKpyVQDVi0lT0NhctZQcxSaIvGqSKCDawWhh6hPR8cQp3Z1KdqQMRa3VEbXzc6DI9TarEy06I1vm", - "iMcyGJ/FyWOIGg/h3VP7P82bl2KLdAM6deSXzOoa5sy36NfI9gefa2AbYQyB0tDStShLDBwX28jy2jgu", - "pFE7Ivaeo1vllUDfm24SAZKGK3fnNZkVYh5wEac9YnatVb1aRwmmGzjDk1fX/kEcj/KTqdE9CiPI3BRP", - "2EYZ61+aNFK75Nbl7LNcSatVWXaVUiSir7ym/SXfnuW5faHU5YLnl/fxXSuVbVZazEN8dd85sJ1J91KL", - "dS/gjMqZH07VS+3QVc4T7WQG2WNxRxd2j8B8f5iDHta5nw0X1l9Xl5mmnzFnknGrNiJPn6k/l7fdqI9c", - "ikUlc5ZRbUXKMoHN8LDHl1XjXIEscohmkDxZHO6MeUbgjczIbtx/UQLvj8uW4BnNyEU5ZC5eisryUVmv", - "BwBCSqHPttZUkDGWxBquolaUKgFN5H1AJ94q6Il0O9jcCHcOlIVbATXwfmwA/IyUD3PKLUeelAu1Dd/v", - "t8nnbgT8x/1U3mEeYy5eFy1paXLyColqRjhCOsX1Xn+oNxj2vpjqFdUUz514w0cAjPtJdWCY5C11LBhL", - "LkooslTtxfNGRzWPXto+NKtfEl0Yz8lzXofSh27sWoNPnEIivu7avyruSEk1zYeaZFnAFiiu41fQimoa", - "ziP7C5RU8rCnDFBVVsIVdNzHfDaXGkVNcQWhr2k6swKgQmtkX0eW8ouK7/Ke4sSvPYs8a6ZgN6lJIcTS", - "TrEDapKkUmcrMzomZupRchBdiaLmHfyZY0WOrhrQHeUEqgZvhCy8I6dO8xON8DoMcBb6p0SZgIn30/jQ", - "0Swojbp9DOign2Rtxk69TLtJxqmKGgMLzlY0hlgi8ZZvmIpfy3GF5JDk2+fWxH0SSkaI/WYLOUo1/r0D", - "hX/xjBgpfNYTpHYJUNCrwHVJaNvXIJlUUYnJa26ap0qbQzH8QBNjIyH9a/oGRuXWm/H2O8twMGZ6ydRG", - "HxK6odObq+d/l5O49yCOjpeiEQM+/G+P/itQt392YAMs5S3dfjrZH4s0+lvMc/E5W9RhoLJU11QzMn6H", - "PodgByXqCyYgL5aL5loOXptzn96zr+oQkb/6hu+Y0viPe3X+s+alWO6QzxD4oRsza+5IyBteySPAe4G6", - "ifeLV/MAWNC2qDAVrVtMHTMabudGiYB2F3ko7qPYhl9CvA3o7ED8M7eOcZp6gZoLd2X3tnOIBb/4kKJl", - "w4v4pY+JIrtl1EPqYNf7f7axcPFUIb9bVfI8VAj1JYq6fAarAAfismvY7A+WHPK1QAJNZeGWaHWIri9u", - "oDI9knWlIhDGyq90wB5UXB1UnrnVMiZqfns1NvaEmU5ayl3vwlSvmwHQcZ3GQ+DHZSs/Df6TOVzHljEF", - "/D8K3kcK1cbwUk3aT4DlTgaOBKykrV6obaZhaQ45mJC62j3ndZu7I6hYhcw1cEMeN+c/+odnm6JUSPcQ", - "Jp/QxqbZjFLAUsiWWQpZ1TbxjsFMpXIXISxW+iNaR0xoY1KCEyavePnjFWgtirGNc6eDSjrGJSKCocP3", - "Tagwmjt1OIAw7RsO4zNbNXrczF3gVISK3DWN5bLguoibC8ly0O7eZ9d8Z25uUWqMA4dsSjySZrpZAyLr", - "EpI2AVLuvFH4lvaeBkB+h4afCQYb9AtOGGtItWPViH1mCMOfwmCz4dusVCuMIhw5ED43LVr46AmoJKrB", - "ST6btu4wjxG/wv5pMC2/Z0RW4axTpth/7n/ErcRn5E9S2L0nn3SU/bBO8rulgxmQKlet8z8Ry/A8piJx", - "ffKVOBo3CJshVCXQHkSbCCP2oa5efGQX0Q3Ch3HHSvDp5c66nhapeF/SDGSoMTB73PvBtK7sPPfuWUNV", - "2kDVQEiZ+2jpIzVtpJ8P99IIeFSb3p/17rSNy4wb55gacfvjo7NKVVk+xeeTKncU3kzgIe3COEIfkRFg", - "ZN2Ne4xpatl08h51itocWyZvtKjOIWtXle979I+piUY4etcEoZbIy6hyO2q3MJKnUabM+zFmXTVYwyQY", - "ZxryWqOa+JrvDpcdG8kYffG3sy8ePf774y++ZK4BK8QKTJt1vFe2q/ULFLKv9/m0noCD5dn0JoTsA4S4", - "YH8MQVXNpvizRtzWtClFB0XLjtEvJy6AxHFMlIu60V7hOK1r/x9ru1KLvPMdS6Hgt98zrcoyXfWhkasS", - "BpTUbkUmFPcCqUAbYaxjhF0LqLCtR7RZo3oQc/9eUTYZJXMI+mNPBcKOuFylFjLmUIv8DGO7vdWIwbYq", - "Pa8iS8++dfl3GmnoUGhEr5gFsEpVXrQXS5aCCCOIdBRZ6xWfqBGPfGQbZkvesilC9J7nadKLC2bv5/bd", - "Yq42zendJibEi3Aob0CaY/aJ8bwFN+EkrWr/D8M/EokY7oxrNMv9LXhF8n1ws6L8k0AbBuUnyAMBGIm2", - "7cRJRoFiUSJiTVYCtCcEA3Jf/HjZGpYPhoUgJKHDAfDi8Nm2XRPJ4MH5nTP6vmyQEi3l/RgldJZ/KCI3", - "sN7mIom2yCtNrAVDbEkNxcIo3No8a6KYR14lg2BnrZRl7mValokgadLj4JmKCcc9CfQVLz891/hWaGPP", - "EB9QvB4PjYojZWMkEyrNzfL0veCT5o6iYu9uavkKA7P/A9weJe85P5Q3wg9uM1TuYMX6VbgVKNabXeOY", - "5GT16Eu28MU2Kg25MH3j/nUQTprAUNBi6R1aYWsPRKIeWufPyt6CjJfBE4f9EJm3Gpu9h7A9or8zUxk5", - "uUkqT1HfgCwS+EvxqLg474Hr4paFGW6W9iVK4HZk2pdh2eGpy6PUJu7SqQ0M1zn5tu7gNnFRt2ubmrNo", - "cn2Hd+/e2sWUVEPpWgyuO+Y6upOiDEeVZPgNshwRjvwYft4Uxfw8lveWcruO5Obu7UctyoMOK51M6x/n", - "sxVIMMJgLvG/+9oxn/YuDRBQ5oXhUSVYb5MuhhCTWGtn8miqKIf6hPTpvlsi5zVGNea1FnaHdYODAk38", - "PZmP6bsmt4fPDdPY0vzdZ9UlNLXb20wgtQm363eKl3gfkYlPultIlSfsG8rw7Q/KX+8t/g0+/8uT4uHn", - "j/5t8ZeHXzzM4ckXXz18yL96wh999fkjePyXL548hEfLL79aPC4eP3m8ePL4yZdffJV//uTR4smXX/3b", - "PceHHMgEaEjt/3T2f7KzcqWys1fn2RsHbIsTXonvwe0NvpWXCutaOqTmeBJhw0U5exp++l/hhJ3katMO", - "H36d+fpMs7W1lXl6enp9fX0SdzldYeh/ZlWdr0/DPFhtsCOvvDpvfPTJDwd3tNUe46Z6UjjDb6+/uXjD", - "zl6dn7QEM3s6e3jy8OSRL20teSVmT2ef4094eta476eYX/PU+NT5p02s1sf54FtVUWJ998nTqP9rDbzE", - "BDvujw1YLfLwSQMvdv7/5pqvVqBPMHqDfrp6fBqkkdMPPnPCx33fTmPPkNMPnQQTxYGejedD0ib5QqlL", - "NIkH+eie6flxnMSVuc8Lh35qic4X5rxlhKG8MtqcZ0/fpnQv3oeyqhelyBld30i/bnMi8mrShrTsAxVt", - "s7a0f8sMHYN7mH31/sMXf/mYErL6gLz0BsHWAuJdcjHKCwMUTgJc/6xB71rA0Fo/i8EYmgvT2dO2llW+", - "8IGf7YT95D0d8CvxlMYj1AeFNYnnQqcRwNwQKbgaLLzHGn/o+ofk8Pjhw3DyvVwdkdWpp9YY3V3bw8Av", - "6Jh0Bp3C1wmhyC0mQ3wMKfYnQymXHDaF5ORVj+62G35JVhd0qGPax816jHofXURyEz/ityUw99+wpNGE", - "oGyaaSiUfBxyy5ETGFxpY8VYKUjt592bUrWrP85nT46khr0Kqk7+0AT4L3npQIYipI0hCB59OgjOJXl8", - "umuHrseP89kXnxIH59IxL14ybBmV301QvLyU6lqGlk6WqTcbrncoqdgpe+yzHKEtMbQjuqeLlbsz/HZG", - "bBkLkVSghXsw8nL2/uOh6+X0Qyi7vv8y6pTc9v7KUYeJl9y+ZqcLLLU2tSmYqPH4UlAFZk4/4Akd/f3U", - "a+LTH1GZRlLaaUjyNdKS0rmkP3ZQ+MFu3UL2D+faROPl3Obrujr9gP9BgStaEWWHPrVbeYrOR6cfOojw", - "nweI6P7edo9bXG1UAQE4tVxSrfp9n08/0L/RRB3CbIWaroDyTdTo2Rryy1n67uulzo96MZJH+aKEgpjT", - "kwkdpLJxpxsd6Ncofhj24/dMLBn0pxAmzHDEuaXEoqdY0XXX4jL8vJN58sfhNneSKo78fBqeQynRttvy", - "Q+fP7pEz69oW6jqaBRWJpAUfQuY+1qb/9+k1FzZbKu1z+WEJ+GFnC7w89YU7er+2ubIHXzABePRjHKWW", - "/PWUe1TPKmUSZPuaX0fWvzNsTBICGPu1whfF2O20zRZCIgXFN1SrP6CPQ9l4cC85uQYd5YIJZpiHB5OB", - "aMWLnBssPe5r4Ayk9Y/JY/eppY2vecFCDpWMtbLHmX+ldpb235IITv/5p5v+AvSVyIG9gU2lNNei3LGf", - "ZBM+c2NG+i0Sp+b5JUroDcGSb6Xm192IHJ3OCdEt8RRShACzW7bmsih9FL2qsXadoyw0marIacddQKHE", - "WaU0AkC5I6EgNwZzwi4aJw90majDI6eAKyhVhTYNzIhMk3B0ACEjYHwRdPn/fLbN3CFegcw8G8kWqtj5", - "mkAzza/tlgLiB7yKhMMRRjYQ3VJfvXQy0ig4e4fPrXIxVtahFqFR0719716xWGveKxha3dPT01OM/lkr", - "Y09n7hHe1UvFH983CAslUmeVFldYygGRprRwb8sy88qbthra7PHJw9nH/x8AAP//7vEvy70JAQA=", + "H4sIAAAAAAAC/+y9f5PbtpIo+lVQ2q1y7CfO2I6TPfGrU/smdpIzL07i8jjZt2v7JRDZknCGAngAcEaK", + "r7/7LXQDJEiCEjUzsZOq+5c9In40Go1Go3++n+VqUykJ0prZ0/ezimu+AQsa/+J5rmppM1G4vwowuRaV", + "FUrOnoZvzFgt5Go2nwn3a8XtejafSb6Bto3rP59p+FctNBSzp1bXMJ+ZfA0b7ga2u8q1bkbaZiuV+SHO", + "aIjz57MPez7wotBgzBDKn2S5Y0LmZV0As5pLw3P3ybBrYdfMroVhvjMTkikJTC2ZXXcas6WAsjAnYZH/", + "qkHvolX6yceX9KEFMdOqhCGcz9RmISQEqKABqtkQZhUrYImN1twyN4ODNTS0ihngOl+zpdIHQCUgYnhB", + "1pvZ0zczA7IAjbuVg7jC/y41wO+QWa5XYGfv5qnFLS3ozIpNYmnnHvsaTF1aw7AtrnElrkAy1+uE/VAb", + "yxbAuGSvvn3GPv/886/cQjbcWig8kY2uqp09XhN1nz2dFdxC+DykNV6ulOayyJr2r759hvNf+AVObcWN", + "gfRhOXNf2PnzsQWEjgkSEtLCCvehQ/2uR+JQtD8vYKk0TNwTanynmxLP/0l3Jec2X1dKSJvYF4ZfGX1O", + "8rCo+z4e1gDQaV85TGk36JuH2Vfv3j+aP3r44d/enGX/4//84vMPE5f/rBn3AAaSDfNaa5D5Lltp4Hha", + "1lwO8fHK04NZq7os2Jpf4ebzDbJ635e5vsQ6r3hZOzoRuVZn5UoZxj0ZFbDkdWlZmJjVsnRsyo3mqZ0J", + "wyqtrkQBxdxx3+u1yNcs54aGwHbsWpSlo8HaQDFGa+nV7TlMH2KUOLhuhA9c0J8XGe26DmACtsgNsrxU", + "BjKrDlxP4cbhsmDxhdLeVea4y4q9XgPDyd0HumwRd9LRdFnumMV9LRg3jLNwNc2ZWLKdqtk1bk4pLrG/", + "X43D2oY5pOHmdO5Rd3jH0DdARgJ5C6VK4BKRF87dEGVyKVa1BsOu12DX/s7TYColDTC1+Cfk1m37/3vx", + "049MafYDGMNX8JLnlwxkrgooTtj5kkllI9LwtIQ4dD3H1uHhSl3y/zTK0cTGrCqeX6Zv9FJsRGJVP/Ct", + "2NQbJuvNArTb0nCFWMU02FrLMYBoxAOkuOHb4aSvdS1z3P922o4s56hNmKrkO0TYhm///nDuwTGMlyWr", + "QBZCrpjdylE5zs19GLxMq1oWE8Qc6/Y0ulhNBblYCihYM8oeSPw0h+AR8jh4WuErAicMMgpOM8sBcCRs", + "EzTjTrf7wiq+gohkTtjPnrnhV6suQTaEzhY7/FRpuBKqNk2nERhx6v0SuFQWskrDUiRo7MKjwzEYauM5", + "8MbLQLmSlgsJhWPOCLSyQMxqFKZowv3vneEtvuAGvnwydse3Xyfu/lL1d33vjk/abWyU0ZFMXJ3uqz+w", + "acmq03/C+zCe24hVRj8PNlKsXrvbZilKvIn+6fYvoKE2yAQ6iAh3kxEryW2t4elb+cD9xTJ2YbksuC7c", + "Lxv66Ye6tOJCrNxPJf30Qq1EfiFWI8hsYE0+uLDbhv5x46XZsd0m3xUvlLqsq3hBeefhutix8+djm0xj", + "HkuYZ81rN354vN6Gx8ixPey22cgRIEdxV3HX8BJ2Ghy0PF/iP9sl0hNf6t/dP1VVut62WqZQ6+jYX8mo", + "PvBqhbOqKkXOHRJf+c/uq2MCQA8J3rY4xQv16fsIxEqrCrQVNCivqqxUOS8zY7nFkf5dw3L2dPZvp63+", + "5ZS6m9No8heu1wV2ciIriUEZr6ojxnjpRB+zh1k4Bo2fkE0Q20OhSUjaREdKwrHgEq64tCftk6XDD5oD", + "/MbP1OKbpB3Cd+8JNopwRg0XYEgCpob3DItQzxCtDNGKAumqVIvmh8/OqqrFIH4/qyrCB0qPIFAwg60w", + "1tzH5fP2JMXznD8/Yd/FY6MormS5c5cDiRrublj6W8vfYo1uya+hHfGeYbidSp+4rQlocGL+XVAcPivW", + "qnRSz0FacY3/4dvGZOZ+n9T5r0FiMW7HiQsfWh5z9MbBX6LHzWc9yhkSjlf3nLCzft+bkY0bZQ/BmPMW", + "i3dNPPiLsLAxBykhgiiiJr89XGu+m3khMUNhb0gmPxsgCqn4SkiEdu6eT5Jt+CXth0K8O0IA07yLiJZI", + "gmxUqF7m9Kg/GehZ/gLUmtrYIIk6SbUUxuK7GhuzNZQoOHMZCDomlRtRxoQN37OIBuZrzSuiZf+FxC4h", + "8T1PjQjWW168E+/EJMwRu482GqG6MVs+yDqTkCDX6MHwdanyy39ws76DE74IYw1pH6dha+AFaLbmZp04", + "OD3abkebQt+uIdIsW0RTnTRLfKFW5g6WWKpjWFdVPeNl6aYesqzeanHgSQe5LJlrzGAjUGHuH46kYaf3", + "F/uG52snFrCcl+W8VRWpKivhCkr3aBdSgp4zu+a2Pfw4cnjX4Dky4JidBRatxquZUMWmG12EBrbheANt", + "3GumKrt9Gg5q+AZ6UhDeiKpGLUL00Dh/HlYHVyCRJzVDI/jNGlFbEw9+4ub2n3BmqWhxpAG0wXzX4K/h", + "Fx2gXev2PpXtFEoXpLO27jehWa40DUE3vJ/c/Qe4bjsTdX5Wacj8EJpfgTa8dKvrLep+Q753dToPnMyC", + "Wx6dTE+F6QcYcQ7sh+Id6ISW5if8Dy+Z++ykGEdJLfUIFEZUZE4t6GJ2qKKZXAPUtyq2IVUmq3h+eRSU", + "z9rJ02xm0sn7hrSnfgv9Ipoder0VhbmrbcLBxvaqe0JIdxXY0UAW2ct0ormmIOC1qhixjx4IxClwNEKI", + "2t75tfa12qZg+lptB1ea2sKd7IQbZzKz/1ptn3vIlD6MeRx7CtLdAiXfgMHbTcaM083S2uXOFkrfTJro", + "XTCStdZGxt2okTA17yEJm9ZV5s9mwmJBDXoDtQ4e+4WA/vApjHWwcGH5H4AF40a9Cyx0B7prLKhNJUq4", + "A9JfJ4W4BTfw+WN28Y+zLx49/vXxF186kqy0Wmm+YYudBcM+82o5ZuyuhPvJ1xFKF+nRv3wSbFTdcVPj", + "GFXrHDa8Gg5Fti96/VIz5toNsdZFM666AXASRwR3tRHaGZl1HWjPYVGvLsBa99J9qdXyzrnhYIYUdNjo", + "ZaWdYGG6dkIvLZ0WrskpbK3mpxW2BFmQn4FbhzDuDbhZ3AlRjW180c5SMI/RAg4eimO3qZ1mF2+V3un6", + "LtQboLXSySu40sqqXJWZk/OESigoXvoWzLcI21X1fydo2TU3zM2N1staFiN6CLuV0+8vGvr1Vra42XuD", + "0XoTq/PzTtmXLvLbV0gFOrNbyZA6O+qRpVYbxlmBHVHW+A4syV9iAxeWb6qflsu70XYqHCihxxEbMG4m", + "Ri2c9GMgV5Kc+Q6obPyoU9DTR0ywMtlxADxGLnYyR1PZXRzbcW3WRki025udzCPVloOxhGLVIcvbq7DG", + "0EFT3TMJcBw6XuBn1NU/h9Lyb5V+3Yqv32lVV3fOnvtzTl0O94vx1oDC9Q1qYCFXZdeBdOVgP0mt8ZMs", + "6FmjRKA1IPRIkS/Eam2j9+JLrf6AOzE5SwpQ/EDKotL1GaqMflSFYya2NncgSraDtRzO0W3M1/hC1ZZx", + "JlUBuPm1SQuZIy6H6OuELlo2lltRPyEMW4CjrpzXbrV1xdABaXBftB0zntMJzRA1ZsT9ovGboVY0Hbmz", + "lRp4sWMLAMnUwvs4eO8LXCRH7ykbxDQv4ib4RQeuSqscjIEi86rog6CFdnR12D14QsAR4GYWZhRbcn1r", + "YC+vDsJ5CbsMff0M++z7X8z9TwCvVZaXBxCLbVLo7evThlBPm34fwfUnj8mONHVEtU68dQyiBAtjKDwK", + "J6P714dosIu3R8sVaHQp+UMpPkxyOwJqQP2D6f220NbViAe7f6Y7Cc9tmORSBcEqNVjJjc0OsWXXqKNL", + "cCuIOGGKE+PAI4LXC24suUEJWaBOk64TnIeEMDfFOMCjzxA38i/hBTIcO3f3oDS1aZ4jpq4qpS0UqTWg", + "RXZ0rh9h28ylltHYzZvHKlYbODTyGJai8T2y/AsY/+C2sb96i+5wcWhTd/f8LonKDhAtIvYBchFaRdiN", + "vXhHABGmRTQRjjA9ymlch+czY1VVOW5hs1o2/cbQdEGtz+zPbdshcZGRg+7tQoFBA4pv7yG/JsyS//aa", + "G+bhCCZ2VOeQv9YQZncYMyNkDtk+yscnnmsVH4GDh7SuVpoXkBVQ8l3COYA+M/q8bwDc8fa5qyxk5Iib", + "3vSWkoPf456hFY5nUsIjwy8sd0fQPQVaAvG9D4xcAI6dYk6eju41Q+FcyS0K4+GyaasTI+JteKWs23FP", + "Dwiy5+hTAB7BQzP0zVGBnbP27dmf4r/B+AkaOeL4SXZgxpbQjn/UAkZ0wT7GKTovPfbe48BJtjnKxg7w", + "kbEjO6KYfsm1Fbmo8K3zPezu/OnXnyBpOGcFWC5KKFj0gZ6BVdyfkQtpf8ybPQUn6d6G4A+Ub4nlBDed", + "LvCXsMM390uKTYhUHXfxlk2M6u4nLhkCGjyenQgeN4Etz225c4KaXcOOXYMGZuoFuTAM7SlWVVk8QNI+", + "s2dGb51N2kb3mosvcKhoeSlfM3oT7Ifvde9h0EGHfwtUSpUTNGQDZCQhmOQ7wirldl348KcQABMoqQOk", + "Z9pomm+u/3umg2ZcAftvVbOcS3xy1RYamUZpFBRQgHQzOBGsmdM7J7YYghI2QC9J/PLgQX/hDx74PReG", + "LeE6xAy6hn10PHiAepyXytjO4boDfag7bueJ6wMNV+7i86+QPk857PHkR56yky97gzfWLnemjPGE65Z/", + "awbQO5nbKWuPaWSatxeOO8mW0/UPGqwb9/1CbOqS27uwWsEVLzN1BVqLAg5ycj+xUPKbK17+1HTDeEjI", + "HY3mkOUYxTdxLHjt+lDgnxtHSOEOMDn9TwUIzqnXBXU68MRsPVXFZgOF4BbKHas05EDxbk5yNM1STxh5", + "wudrLlf4YNCqXnnnVhoHGX5tSDWjazkYIilU2a3MUMmdugC8m1oIeXTiFHD3pOtryOkBc82b+XyU65Sb", + "OdqDvsUgaSSbz0ZfvA6pV+2Ll5DTjduccBl05L0IP+3EE00piDon+wzxFW+LO0xuc/8YlX07dArK4cSR", + "x2/7cczp1z23y90dCD00ENNQaTB4RcVqKkNf1TKO0Q6ugjtjYTPU5FPXX0eO36vR96KSpZCQbZSEXTIt", + "iZDwA35MHie8Jkc6o8Ay1rf/BunA3wOrO88UarwtfnG3+ye0b7Ey3yp9VyZRGnCyeD/BAnnQ3O6nvKmd", + "lJdlwrToIzj7DMDMG2ddoRk3RuUCZbbzwsy9VzBZI324Zxf9L5u4lDs4e/1xeza0ODkA6oihrBhneSlQ", + "g6yksbrO7VvJUUcVLTXhxBUe4+Nay2ehSVpNmtBi+qHeSo4OfI3mKumwsYSEmuZbgKC8NPVqBcb23jpL", + "gLfStxKS1VJYnGvjjktG56UCjZ5UJ9Ryw3ds6WjCKvY7aMUWte1K/xigbKwoS2/Qc9MwtXwruWUlcGPZ", + "D0K+3uJwwegfjqwEe630ZYOF9O2+AglGmCztbPYdfUW/fr/8tffxR3d3+hycTtuMCTO3zE6SlP//s/98", + "+uYs+x+e/f4w++r/On33/smH+w8GPz7+8Pe//6/uT59/+Pv9//z31E4F2FPhsx7y8+f+ZXz+HJ8/kat+", + "H/aPpv/fCJkliSz25ujRFvsMU0V4ArrfVY7ZNbyVdisdIV3xUhSOt9yEHPo3zOAs0unoUU1nI3rKsLDW", + "Ix8Vt+AyLMFkeqzxxlLU0D8zHaiORkkfe47nZVlL2sogfVMcZvAvU8t5k4yA8pQ9ZRipvubBydP/+fiL", + "L2fzNsK8+T6bz/zXdwlKFsU2lUeggG3qrRgHSdwzrOI7AzbNPRD2pCsd+XbEw25gswBt1qL6+JzCWLFI", + "c7gQsuR1Tlt5LsnB350fNHHuvOVELT8+3FYDFFDZdSp/UUdQw1btbgL03E4qra5Azpk4gZO+zqdw70Xv", + "1FcCXwbHVK3UlNdQcw6I0AJVRFiPFzJJsZKin154g7/8zZ0/h/zAKbj6c6Y8eu99981rduoZprlHKS1o", + "6CgJQeIp7YMnOw5JjpvFMWVv5Vv5HJaofVDy6VtZcMtPF9yI3JzWBvTXvOQyh5OVYk9DPOZzbvlbOZC0", + "RhMrRkHTrKoXpcjZZfwgacmTkmUNR3j79g0vV+rt23cD34zh88FPleQvNEHmBGFV28yn+sk0XHOdsn2Z", + "JtULjky5vPbNSkK2qklBGlIJ+fHTPI9XlemnfBguv6pKt/yIDI1PaOC2jBmrmng0J6D4kF63vz8qfzFo", + "fh30KrUBw37b8OqNkPYdy97WDx9+jpF9bQ6E3/yV72hyV8Fk7cpoSoq+UgUXTs9K9FXPKr5Kmdjevn1j", + "gVe4+ygvb1DHUZYMu3WiDkOAAQ7VLqAJcR7dAILj6OBgXNwF9QppHdNLwE+4hd0A7FvtVxQ/f+PtOhCD", + "z2u7ztzZTq7KOBIPO9Nke1s5ISt4YxixwteqT4y3AJavIb/0GctgU9ndvNM9OPx4QTOwDmEolx1FGGI2", + "JTRQLIDVVcG9KM7lrp/WxlBEBQ76Ci5h91q1yZiOyWPTTatixg4qUmokXTpijY+tH6O/+d6rLASa+uwk", + "GLwZyOJpQxehz/hBJpH3Dg5xiig6aT/GEMF1AhFE/CMouMFC3Xi3Iv3U8oTMQVpxBRmUYiUWqTS8/zW0", + "hwVYHVX6zIPeC7kZ0DCxZO4pv6CL1T/vNZcrcNezu1KV4SVlVU06beB7aA1c2wVwu1fPL+OEFAE6fFJe", + "Y+Q1avjmbgmwdfstLGrsJFy7VwUqiqiN914+Gfc/I8ChuCE8oXv7UjgZfet61CUyDoZbucFu86z1rnkx", + "nSFc9H0DmLJUXbt9cVAon22TkrpE90tt+ApG3i6x9W5iPoyOxQ8HOSSRJGUQteyLGgNJIAkyNc7cmpNn", + "GNwXd4jxmdlzyAwzkYHY24wwibZH2KJEAbbxXKW957pjRaWswGOgpVkLaNmKggGMLkbi47jmJhxHzJca", + "uOwk6ewPTPuyLzXdeeRLGCVFbRLPhduwz0EH736foC5kpQup6OJH/4S0cu7theELqe1QEkXTAkpY0cKp", + "cSCUNmFSu0EOjp+WS+QtWcotMVJQRwKAnwPcy+UBY2QbYZNHSJFxBDY6PuDA7EcVn025OgZI6RM+8TA2", + "XhHR35AO7CNHfSeMqspdrmLE3pgHDuBTUbSSRc+jGodhQs6ZY3NXvHRszr/F20EGGdLwQdHLh+Zdb+6P", + "PTT2mKboyj9qTSQk3GQ1sTQbgE6L2nsgXqhtRhHKybfIYrtw9J6MXcB46dTBpFx09wxbqC26c+HVQr7y", + "B2AZhyOAEeletsIgvWK/MTmLgNk37X45N0WFBknGK1obchkT9KZMPSJbjpHLZ1F6uRsB0FNDtbUavFri", + "oPqgK54ML/P2Vpu3aVNDWFjq+I8doeQujeBvqB/rJoT7R5v4bzy5WDhRHyUT3lCzdJsMhdS5oqyDxyQo", + "7JNDB4g9WH3ZlwOTaO36enXxGmEtxUoc8x0aJYdoM1ACPoKzjmiaXaY8BdxbHvAevwjdImUd7h6Xu/uR", + "A6GGlTAWWqNR8Av6FOp4jumTlVqOr85WeunW90qp5vInszl27Czzo68APfCXQhubocUtuQTX6FuDSqRv", + "XdO0BNp1UaRiA6JIc1yc9hJ2WSHKOk2vft7vn7tpf2wuGlMv8BYTkhy0FlgcI+m4vGdq8m3fu+AXtOAX", + "/M7WO+00uKZuYu3IpTvHX+Rc9BjYPnaQIMAUcQx3bRSlexhkFHA+5I6RNBr5tJzsszYMDlMRxj7opRbC", + "3sdufhopuZYoDWA6QlCtVlCE9GbBHiajJHKlkquoilNV7cuZd8IodR1mntuTtM674cOYE34k7mdCFrBN", + "Qx+/ChDyNrIOE+7hJCuQlK4krRZKoiZ28ccWka7uI9tC+wEASSfo1z1jduudTLvUbCduQAm88G8SA2F9", + "+4/lcEM86uZj7tOdzKf7jxAOiDQlbFTYZJiGYIQB86oSxbZneKJRR5Vg/Cjt8oi0hazFD3YAA10n6CTB", + "dVJpe1drr2A/xTfvqXuVke+1dyx29M1zH4Bf1BotGB3P5mHe9uatNnHt3/9yYZXmK/BWqIxAutUQuJxj", + "0BBlRTfMCnInKcRyCbH1xdzEctABbqBjLyaQboLI0iaaWkj75ZMUGR2gnhbGwyhLU0yCFsZs8q+HVq4g", + "00eqpOZKiLbmBqaqZLj+97DLfuFl7R4ZQpvWPdebnbqX7xG7frX5HnY48kGvVwfYgV1BzdMrQBpMafqb", + "TyZKYH3PdFL84/Oys4VH7NRZepfuaGt8UYZx4m9vmU7Rgu5SbnMwWicJB8uU3bhI+ya40wNdxPdJ+dAm", + "iOKwDBLJ+/FUwoQSlsOrqMlFcYh2XwMvA/HicmYf5rPbeQKkbjM/4gFcv2wu0CSe0dOULMMdx54jUc6r", + "SqsrXmbeX2Ls8tfqyl/+2Dy4V3zkl0yasl9/c/bipQf/w3yWl8B11mgCRleF7aq/zKqojMP+q4SyfXtF", + "J2mKos1vMjLHPhbXmNm7p2waFEVp/Weio+h9LpZph/eDvM+7+tAS97j8QNV4/LQ2T3L46Tr58CsuymBs", + "DNCOOKfj4qZV1klyhXiAWzsLRT5f2Z2ym8HpTp+OlroO8CSc6ydMTZl+cUifuBJZkXf+4XcuPX2rdIf5", + "+8jEpPPQHydWOSGb8Djiqx3qV/aFqRNGgtdvq9/caXzwID5qDx7M2W+l/xABiL8v/O/4vnjwIGk9TKqx", + "HJNALZXkG7jfRFmMbsTHfYBLuJ52QZ9dbRrJUo2TYUOh5AUU0H3tsXethcdn4X8poAT308mUR3q86YTu", + "GJgpJ+hiLBKxcTLdUMlMw5Ts+1RjEKwjLWT2viQDGWOHR0jWGzRgZqYUedq1Qy6MY6+SnCldY4aNR7S1", + "bsRajPjmylpEY7lmU3Km9oCM5kgi0yTTtra4Wyh/vGsp/lUDE4V71SwFaLzXelddeBzgqAOBNK0X8wOT", + "naod/jZ6kD32pqAL2qcE2Wu/e97YlMJCU0V/jvQAj2ccMO493tuePjw1UzTbuuuCOe0dM6V0emB03lg3", + "MkeyFLow2VKr3yFtCEH7USIRRjB8ClTz/g4y5bnXZymNUbmt6N7Ofmi7p7+Nxzb+1m/hsOim6thNLtP0", + "qT5uI2/y6DXpdM0eyWOPsNjDoBsaMMJa8HhFzrBYBiV4H3FJ54myQHQizNKnMo7lPKXx21PpYR7Ev5b8", + "esFTNWLcW8jBFG1vx0/KKhY6hw0wTY4Dmp1FHtxNW0GZ5CrQrQ1imJX2hu8amnbyi6Z9wCBFxU+XObkp", + "lEYlhqnlNZdURdz1I37lexsgE7zrda005oE0aZeuAnKxSapj3759U+RD951CrAQVyK4NRBWY/UCMkk0i", + "Ffkq1k3mDo+a8yV7OI/KwPvdKMSVMGJRArZ4RC0W3OB12ZjDmy5ueSDt2mDzxxOar2tZaCjs2hBijWLN", + "2xOFvMYxcQH2GkCyh9ju0VfsM3TJNOIK7jsseiFo9vTRV+hQQ388TN2yvsD5PpZdIM8OztppOkafVBrD", + "MUk/atr7eqkBfofx22HPaaKuU84StvQXyuGztOGSryAdn7E5ABP1xd1Ec34PL5KsAWCsVjsmbHp+sNzx", + "p5GYb8f+CAyWq81G2I133DNq4+ipLa9Mk4bhqNa/rxcV4Aof0f+1Cu5/PV3XR37G8M1IzBZ6Kf+INtoY", + "rXPGKflnKVrP9FCvk52H3MJYQKupm0W4cXO5paMsiY7qS1ZpIS3qP2q7zP7mnsWa5479nYyBmy2+fJIo", + "RNWt1SKPA/yj412DAX2VRr0eIfsgs/i+7DOpZLZxHKW43+ZYiE7lqKNu2iVzzC90/9BTJV83SjZKbnWH", + "3HjEqW9FeHLPgLckxWY9R9Hj0Sv76JRZ6zR58Nrt0M+vXngpY6N0qmBAe9y9xKHBagFXGDGX3iQ35i33", + "QpeTduE20H9a/6cgckZiWTjLyYdAZNHcFyzvpPhffmgzn6NhlSIRezpApRPaTq+3+8jehsdp3fr2W3IY", + "w28jmJuMNhxliJUR73tyr2/6fAp/oT5ItOcdheOj35h2b3CU4x88QKAfPJh7Mfi3x93PxN4fPEgnIE6q", + "3NyvLRZu8yLGvqk9/FolFGChamHjUOTzIyQUkGOXlPvgmODCDzVn3QpxH1+KuJv4rrS3afoUvH37Br8E", + "POAffUR8YmaJG9hGKYwf9m6FzCTJFM33yM+ds6/Vdirh9O6gQDx/AhSNoGSieg5XMqgAmjTXH/QXiWjU", + "jbqAUrlHZlwUKNbn/3Xw7BY/34PtWpTFL21ut95FornM10kv4YXr+CvJ6J0rmFhlss7ImksJZXI4etv+", + "Gt7AiVf6P9XUeTZCTmzbr0BLy+0trgW8C2YAKkzo0Cts6SaIsdpNm9WkZShXqmA4T1vUomWOw1LOqRKa", + "ifhmHHZTW++3irHgPuHQUpTohpm2G2PLTHM7kkAL652H+kJuHCw/bkjNQKODZlxs8GI2fFOVgCfzCjRf", + "YVclodcdU6jhyFHFCmYq9wlbYsIKxWytJVPLZbQMkFZoKHdzVnFjaJCHblmwxblnTx89fJhUeyF2JqyU", + "sBiW+VO7lEen2IS++CJLVArgKGAPw/qhpahjNnZIOL6m5L9qMDbFU/EDRa6ildTd2lRPsql9esK+w8xH", + "jog7qe5RXRmSCHcTatZVqXgxx+TGr785e8FoVupDJeSpnuUKtXVd8k+aV6YnGA2ZnUYy50wfZ38qD7dq", + "Y7Om/GQqN6Fr0RbIFD2fG9Tjxdg5Yc9JhdoU8KdJGKbI1hsoomqX9IhH4nD/sZbna9RNdiSgcV45vRBr", + "YGet5SaKPmyqHyHDdnD7WqxUinXOlF2DvhYGMCIfrqCbDrHJDep14yE9Ynd5upaSKOXkCGG0qXV0LNoD", + "cCTJBqeCJGQ9xB+pmaJ6zMfWpb3AXulYjF6R257VPyTXCym22Q/euJBzqaTIsRRCSpLG1G3TzJQTqkak", + "7Ytm5k9o4nAlS+s2scAei6PFdgMj9Igbmvyjr25TiTroTwtbX3JtBdZ4zgbFPFS69gYxIQ34alaOiGI+", + "qXTCqSkZCNE4UBxJRpiVaUTD+a379qPXf2NSjEshUdPl0ebfZ2SyKo1Ay7RkwrKVAuPX043mMW9cnxPM", + "0ljA9t3JC7US+YVY4RjkRueWTT6jw6HOggep99h0bZ+5tj53fvNzxx2MJj2rKj/peB30pCBpt3IUwSm/", + "peBIEiG3GT8ebQ+57XX9xvvUERpcodcaVHgPDwijqaXdHeUb97YkisIWjCIqkwl0hUyA8ULIYEJNXxB5", + "8krAjcHzOtLP5JpbejtM4mmvgZcjARAYoUw2+NsO1a8c4FCCawxzjG9jWwZ8hHE0DVqJn8sdC4fCUXck", + "TDzjZeM6nSjqjVKVF6IKDC7qlflOMQ7HuLMQMtlB18HwvaY7VuM49iYay1G4qIsV2IwXRSq11df4leHX", + "ECQGW8jrpghVEx3YzVE+pDY/Ua6kqTd75goNbjldVDc/QQ1x7f6ww5hpZ7HDf1MVmMZ3xjtNHx2VGzyk", + "i+MS8w+jjFNSr6PpzIhVNh0TeKfcHh3t1Dcj9Lb/nVJ6CNf9U0Tj9rhcvEcp/vaNuzjixL0D/3S6Wpq8", + "uugLrvB7SHjUZITsciW8ygZ1xtDrATcvsWU94EPDJOBXvByJhI9tJXS/kv1gLB4+H03fwK1Pz2U528uC", + "RlMeka9wz/oyNCGO+QeTe/DdWS38WvcidNx2933HUkc+Yi2zGLXQ3cyI1m7wsVa076/GUiSEOh34Pa4H", + "4r145j4NPFwJVQfvq+ADHZ6E9KtPwdOp+zGy/mRkwae2WozaWF77+rW0TP8m//4XssIykFbv/gQWl8Gm", + "94vKJKRdUk+1TVhT+nBSKcTOrTilhk2qXIqXDYOujFhLh5YG5WcGZPV8ijgwwMeH+ey8OOrCTJXcmdEo", + "qWP3QqzWFjP2/wN4AfrlgYoEbRUCPGKVMqKtQFq6wXwK2DUOdzI12MARsIgrKgzHCk6oV5BbLDvbOtdp", + "gGPqK7jJgtHn/1QmGH9ONzEZviDBvioEw1qzB+74QeKkKPkX1ek8mZ5z/6xxoaYIsGtu2nQtvZjpyZGb", + "yyXkmBV5b6Kq/1qDjJIgzYNeBmFZRnmrRBPHhHm9j9c6tgDtyyO1F56ovs6twRmLY7+E3T3DOtSQLBza", + "BPHdJHEwYoBMYCGH9Jgi2XuNCdNQBmIhuAT7VMxtcYzRnM9R2rUbzhVI0l0cbSq2PVOmi55Pmst1PSrt", + "I4bkjOWyGtZMHn9/PMcS1cY7yPEm8XD8Smfnw8I51z5xMaYVa2wnIYUxmPBbyCFIs5Ti0tcPQKyQpeqa", + "6yK0uJOkUHQ3iTTQy2Zm0QZwDJ0cEqUYMBYqL5UTI7KxgLJuzETjcHjPkGdom8AH4VqC1lA0JpFSGcis", + "CgEf++DYhwpyf70REsxo+SMCbjT19as2tzeWgeOY6pp7r9d4gUzDhjvodJSBe3zOfch+Rt9DEH4oA3ZQ", + "w9TQ6+F6tCF0R5gBEmOqXzJ/Wx4O7r+JsklICToLlqd+Om7ZzciGeTeLOqcLOj4YjUJucu6cPawkqafJ", + "h6vsvRGiIPlL2J3SIygU8g07GANNkhOBHiUc7W3ynarfTAru1Z2A92nzyFVKldmIseN8mEO8T/GXIr8E", + "zAHYuLiP1Ghnn6GOvbFmX693IWd2VYGE4v4JY2eSgoqCYbtbXrA3ubxn982/xVmLmtL6e6XayVuZjs7A", + "hPv6ltwsDLOfhxlwrO6WU9EgBzJUb+WYy801JufvVvE8mfoqH5qa+1XkW6IiKFIyyQVZrJ7hQU8pjjAF", + "QpSrAw2ZnHlLFzOlSvny3iRNgxsqjal4MgTIgpySLaCBwg+eRECyLnriFFLqO5/0Ti2ZhtaIfNPsf8MS", + "7qkXfX/mZpYuv1sqDZ1i7K43ZfpsAl8wjSb+ZyGs5np3kxx9gxLyA+3JKJYPumM1nljtQlpvrCEOy1Jd", + "Z8issqbORepp69qZ7mUciq61/dypXkDk18WNF9R2bM0LliutIY97pOM9CaqN0pCVCt28UhbopXVy9waD", + "vCQr1YqpKlcFUL2YNAWNzVVLyVFsgsirJokCoh2MFqY+ER1PnNLdqWRHylDUWh1ROz8HilxvszrRojOy", + "ZY54LIPxWZw8hqjxEN49tf/TvHkptkg3oFNHfsmsrmHOfIt+jWx/8LkGthHGECgNLV2LssTAcbGNLK+N", + "40IatSNi7zm6VV4J9L3pJhEgabhyd16TWSHmARdx2iNm11rVq3WUYLqBMzx5de0fxPEoP5sa3aMwgsxN", + "8YRtlLH+pUkjtUtuXc4+y5W0WpVlVylFIvrKa9p/4NuzPLcvlLpc8PzyPr5rpbLNSot5iK/uOwe2M+le", + "arHuBZxROfPDqXqpHbrKeaKdzCB7LO7owu4RmO8Oc9DDOvez4cL66+oy0/Qz5kwybtVG5Okz9dfythv1", + "kUuxqGTOMqqtSFkmsBke9viyapwrkEUO0QySJ4vDnTHPCLyRGdmN+y9K4P1x2RI8oxm5KIfMxUtRWT4q", + "6/UAQEgp9NnWmgoyxpJYw1XUilIloIm8D+jEWwU9kW4HmxvhzoGycCugBt6PDYCfkfJhTrnlyJNyobbh", + "+/02+dyNgP+wn8o7zGPMxeuiJS1NTl4hUc0IR0inuN7rD/Uaw94XU72imuK5E2/4CIBxP6kODJO8pY4F", + "Y8lFCUWWqr143uio5tFL24dm9UuiC+M5ec7rUPrQjV1r8IlTSMTXXftXxR0pqab5UJMsC9gCxXX8DlpR", + "TcN5ZH+Bkkoe9pQBqspKuIKO+5jP5lKjqCmuIPQ1TWdWAFRojezryFJ+UfFd3lOc+LVnkWfNFOwmNSmE", + "WNopdkBNklTqbGVGx8RMPUoOoitR1LyDP3OsyNFVA7qjnEDV4I2QhXfk1Gl+phFehQHOQv+UKBMw8W4a", + "HzqaBaVRt48BHfSTrM3YqZdpN8k4VVFjYMHZisYQSyTe8g1T8Ws5rpAcknz73Jq4T0LJCLHfbCFHqca/", + "d6DwL54RI4XPeoLULgEKehW4Lglt+xokkyoqMXnNTfNUaXMohh9oYmwkpH9N38Co3Hoz3n5nGQ7GTC+Z", + "2uhDQjd0enP1/Cc5iXsP4uh4KRox4MP/9ui/AnX7Zwc2wFLe0u2nk/2xSKO/xTwXn7NFHQYqS3VNNSPj", + "d+hzCHZQor5gAvJiuWiu5eC1OffpPfuqDhH5q2/4jimN/7hX579qXorlDvkMgR+6MbPmjoS84ZU8ArwX", + "qJt4v3g1D4AFbYsKU9G6xdQxo+F2bpQIaHeRh+I+im34JcTbgM4OxD9z6xinqReouXBXdm87h1jwiw8p", + "Wja8iF/6mCiyW0Y9pA52vf/vNhYunirkd6tKnocKob5EUZfPYBXgQFx2DZv9wZJDvhZIoKks3BKtDtH1", + "xQ1UpkeyrlQEwlj5lQ7Yg4qrg8ozt1rGRM1vr8bGnjDTSUu5612Y6nUzADqu03gI/Lhs5cfBfzKH69gy", + "poD/Z8H7SKHaGF6qSfsRsNzJwJGAlbTVC7XNNCzNIQcTUle757xuc3cEFauQuQZuyOPm/Cf/8GxTlArp", + "HsLkE9rYNJtRClgK2TJLIavaJt4xmKlU7iKExUp/ROuICW1MSnDC5BUvf7oCrUUxtnHudFBJx7hERDB0", + "+L4JFUZzpw4HEKZ9w2F8ZqtGj5u5C5yKUJG7prFcFlwXcXMhWQ7a3fvsmu/MzS1KjXHgkE2JR9JMN2tA", + "ZF1C0iZAyp03Ct/S3tMAyO/Q8DPBYIN+wQljDal2rBqxzwxh+EsYbDZ8m5VqhVGEIwfC56ZFCx89AZVE", + "NTjJZ9PWHeYx4nfYPw2m5feMyCqcdcoU+8/9T7iV+Iz8WQq79+STjrIf1kl+t3QwA1LlqnX+J2IZnsdU", + "JK5PvhJH4wZhM4SqBNqDaBNhxD7U1YuP7CK6Qfgw7lgJPr3cWdfTIhXvS5qBDDUGZo97P5jWlZ3n3j1r", + "qEobqBoIKXMfLX2kpo308+FeGgGPatP7s96dtnGZceMcUyNuf3x0Vqkqy6f4fFLljsKbCTykXRhH6CMy", + "Aoysu3GPMU0tm07eo05Rm2PL5I0W1Tlk7aryfY/+MTXRCEfvmiDUEnkZVW5H7RZG8jTKlHk/xqyrBmuY", + "BONMQ15rVBNf893hsmMjGaMv/nH2xaPHvz7+4kvmGrBCrMC0Wcd7Zbtav0Ah+3qfj+sJOFieTW9CyD5A", + "iAv2xxBU1WyKP2vEbU2bUnRQtOwY/XLiAkgcx0S5qBvtFY7Tuvb/ubYrtcg737EUCv74PdOqLNNVHxq5", + "KmFASe1WZEJxL5AKtBHGOkbYtYAK23pEmzWqBzH37xVlk1Eyh6A/9lQg7IjLVWohYw61yM8wtttbjRhs", + "q9LzKrL07FuXf6eRhg6FRvSKWQCrVOVFe7FkKYgwgkhHkbVe8Yka8chHtmG25C2bIkTveZ4mvbhg9n5u", + "3y3matOc3m1iQrwIh/IGpDlmnxjPW3ATTtKq9v80/CORiOHOuEaz3D+CVyTfBzcryj8JtGFQfoI8EICR", + "aNtOnGQUKBYlItZkJUB7QjAg98WPH1rD8sGwEIQkdDgAXhw+27ZrIhk8OJ84o+8PDVKipbwbo4TO8g9F", + "5AbW21wk0RZ5pYm1YIgtqaFYGIVbm2dNFPPIq2QQ7KyVssy9TMsyESRNehw8UzHhuCeBvuLlx+ca3wpt", + "7BniA4pX46FRcaRsjGRCpblZnr4XfNLcUVTs3U0tX2Jg9n+B26PkPeeH8kb4wW2Gyh2sWL8KtwLFerNr", + "HJOcrB59yRa+2EalIRemb9y/DsJJExgKWiy9Qyts7YFI1EPr/EXZW5DxMnjisB8j81Zjs/cQtkf0EzOV", + "kZObpPIU9Q3IIoG/FI+Ki/MeuC5uWZjhZmlfogRuR6Z9GZYdnro8Sm3iLp3awHCdk2/rDm4TF3W7tqk5", + "iybXd3j79o1dTEk1lK7F4LpjrqM7KcpwVEmGPyDLEeHIj+HnTVHML2N5bym360hu7t5+1KI86LDSybT+", + "YT5bgQQjDOYS/9XXjvm4d2mAgDIvDI8qwXqbdDGEmMRaO5NHU0U51CekT/fdEjmvMaoxr7WwO6wbHBRo", + "4tdkPqbvmtwePjdMY0vzd59Vl9DUbm8zgdQm3K7fKV7ifUQmPuluIVWesG8ow7c/KH+/t/gP+PxvT4qH", + "nz/6j8XfHn7xMIcnX3z18CH/6gl/9NXnj+Dx37548hAeLb/8avG4ePzk8eLJ4ydffvFV/vmTR4snX371", + "H/ccH3IgE6Ahtf/T2f+XnZUrlZ29PM9eO2BbnPBKfA9ub/CtvFRY19IhNceTCBsuytnT8NP/E07YSa42", + "7fDh15mvzzRbW1uZp6en19fXJ3GX0xWG/mdW1fn6NMyD1QY78srL88ZHn/xwcEdb7TFuqieFM/z26puL", + "1+zs5flJSzCzp7OHJw9PHvnS1pJXYvZ09jn+hKdnjft+ivk1T41PnX/axGp9mA++VRUl1nefPI36v9bA", + "S0yw4/7YgNUiD5808GLn/2+u+WoF+gSjN+inq8enQRo5fe8zJ3zY9+009gw5fd9JMFEc6Nl4PiRtki+U", + "ukSTeJCP7pmeH8dJXJn7vHDop5bofGHOW0YYyiujzXn29E1K9+J9KKt6UYqc0fWN9Os2JyKvJm1Iyz5Q", + "0TZrS/u3zNAxuIfZV+/ef/G3Dykhqw/ID94g2FpAvEsuRnlhgMJJgOtfNehdCxha62cxGENzYTp72tay", + "yhc+8LOdsJ+9pwN+JZ7SeIT6oLAm8VzoNAKYGyIFV4OFd1jjD13/kBweP3wYTr6XqyOyOvXUGqO7a3sY", + "+AUdk86gU/g6IRS5xWSIjyHF/mwo5ZLDppCcvOrR3XbDL8nqgg51TPu4WY9R76OLSG7iR/y2BOb+B5Y0", + "mhCUTTMNhZIPQ245cgKDK22sGCsFqf28e1OqdvWH+ezJkdSwV0HVyR+aAP8HXjqQoQhpYwiCRx8PgnNJ", + "Hp/u2qHr8cN89sXHxMG5dMyLlwxbRuV3ExQvL6W6lqGlk2XqzYbrHUoqdsoe+yxHaEsM7Yju6WLl7gy/", + "mRFbxkIkFWjhHoy8nL37cOh6OX0fyq7vv4w6Jbe9v3LUYeIlt6/Z6QJLrU1tCiZqPL4UVIGZ0/d4Qkd/", + "P/Wa+PRHVKaRlHYaknyNtKR0LumPHRS+t1u3kP3DuTbReDm3+bquTt/jf1DgilZE2aFP7VaeovPR6fsO", + "IvznASK6v7fd4xZXG1VAAE4tl1Srft/n0/f0bzRRhzBboaYroHwTNXq2hvxylr77eqnzo16M5FG+KKEg", + "5vRkQgepbNzpRgf6FYofhv30PRNLBv0phAkzHHFuKbHoKVZ03bW4DD/vZJ78cbjNnaSKIz+fhudQSrTt", + "tnzf+bN75My6toW6jmZBRSJpwYeQuY+16f99es2FzZZK+1x+WAJ+2NkCL0994Y7er22u7MEXTAAe/RhH", + "qSV/PeUe1bNKmQTZvuLXkfXvDBuThADGfq3wRTF2O22zhZBIQfEN1eoP6ONQNh7cS06uQUe5YIIZ5uHB", + "ZCBa8SLnBkuP+xo4A2n9Q/LYfWxp42tesJBDJWOt7HHmX6mdpf05JJEku3kOV1A6imFKs0O85xPLMl88", + "/PzjTX8B+krkwF7DplKaa1Hu2M+yCcC5MSv+Fslb8/wSZfyG5Mk7U/PrbkyPTmeV6BaJCklGgNktW3NZ", + "lD4OX9VY/c7RJhpdVeT2466wUCStUhoBoOyTUJAjhDlhF42bCDpd1OGZVBDZoFUEcyrTJBxdSMiMOOEq", + "mc+2meMHK5CZ50jZQhU7X15opvm13VJs/YDtkZw5whMHUmDqqxd0RhoFv/HwudVTxno/VEg0Gr8379yD", + "GMvWe11Fq8Z6enqKgURrZezpzL3nuyqu+OO7BnOh2uqs0uIKq0Ig0pQW7plaZl4P1BZWmz0+eTj78L8D", + "AAD//6UnopQICgEA", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/daemon/algod/api/server/v2/handlers.go b/daemon/algod/api/server/v2/handlers.go index 4e233a8b20..b638825ec4 100644 --- a/daemon/algod/api/server/v2/handlers.go +++ b/daemon/algod/api/server/v2/handlers.go @@ -1102,6 +1102,9 @@ func (v2 *Handlers) RawTransactionAsync(ctx echo.Context) error { if !v2.Node.Config().EnableExperimentalAPI { return ctx.String(http.StatusNotFound, "/transactions/async was not enabled in the configuration file by setting the EnableExperimentalAPI to true") } + if !v2.Node.Config().EnableDeveloperAPI { + return ctx.String(http.StatusNotFound, "/transactions/async was not enabled in the configuration file by setting the EnableDeveloperAPI to true") + } txgroup, err := decodeTxGroup(ctx.Request().Body, config.MaxTxGroupSize) if err != nil { return badRequest(ctx, err, err.Error(), v2.Log) diff --git a/daemon/algod/api/server/v2/test/handlers_test.go b/daemon/algod/api/server/v2/test/handlers_test.go index c0e5c77990..e830c4892c 100644 --- a/daemon/algod/api/server/v2/test/handlers_test.go +++ b/daemon/algod/api/server/v2/test/handlers_test.go @@ -853,12 +853,29 @@ func prepareTransactionTest(t *testing.T, txnToUse int, txnPrep func(transaction return } -func postTransactionTest(t *testing.T, txnToUse int, expectedCode int, method string, enableExperimental bool) { +type postTransactionOpt func(cfg *config.Local) + +func enableExperimentalAPI() postTransactionOpt { + return func(cfg *config.Local) { + cfg.EnableExperimentalAPI = true + } +} + +func enableDeveloperAPI() postTransactionOpt { + return func(cfg *config.Local) { + cfg.EnableDeveloperAPI = true + } +} + +func postTransactionTest(t *testing.T, txnToUse int, expectedCode int, method string, opts ...postTransactionOpt) { + cfg := config.GetDefaultLocal() + for _, opt := range opts { + opt(&cfg) + } + txnPrep := func(stxn transactions.SignedTxn) []byte { return protocol.Encode(&stxn) } - cfg := config.GetDefaultLocal() - cfg.EnableExperimentalAPI = enableExperimental handler, c, rec, releasefunc := prepareTransactionTest(t, txnToUse, txnPrep, cfg) defer releasefunc() results := reflect.ValueOf(&handler).MethodByName(method).Call([]reflect.Value{reflect.ValueOf(c)}) @@ -873,18 +890,20 @@ func TestPostTransaction(t *testing.T) { partitiontest.PartitionTest(t) t.Parallel() - postTransactionTest(t, -1, 400, "RawTransaction", false) - postTransactionTest(t, 0, 200, "RawTransaction", false) + postTransactionTest(t, -1, 400, "RawTransaction") + postTransactionTest(t, 0, 200, "RawTransaction") } func TestPostTransactionAsync(t *testing.T) { partitiontest.PartitionTest(t) t.Parallel() - postTransactionTest(t, -1, 404, "RawTransactionAsync", false) - postTransactionTest(t, 0, 404, "RawTransactionAsync", false) - postTransactionTest(t, -1, 400, "RawTransactionAsync", true) - postTransactionTest(t, 0, 200, "RawTransactionAsync", true) + postTransactionTest(t, -1, 404, "RawTransactionAsync") + postTransactionTest(t, 0, 404, "RawTransactionAsync") + postTransactionTest(t, -1, 404, "RawTransactionAsync", enableDeveloperAPI()) + postTransactionTest(t, -1, 404, "RawTransactionAsync", enableExperimentalAPI()) + postTransactionTest(t, -1, 400, "RawTransactionAsync", enableExperimentalAPI(), enableDeveloperAPI()) + postTransactionTest(t, 0, 200, "RawTransactionAsync", enableExperimentalAPI(), enableDeveloperAPI()) } func simulateTransactionTest(t *testing.T, txnToUse int, format string, expectedCode int) {