smoldot 3.5.0 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- export default function () { return "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"; }
1
+ export default function () { return "w/NJUvmpgH611VSoA5qk+Ie2RDt12nkPDfGopDzkbwWyXsaI8yXGOgs4xQIDKHmjxMRuYZl63EwmWmNI4lH9sveNcZKCx+9kfLwV3hWZ8hvTx/Bb/ewDm7OE2y9gRcJtamlQy4V0dskzd9PhhFt97DRimMcPgyijg+yOgjOwnrbw2Sz7w7LvOmQjCucGq3evdZ5RU6pHlckqyES9BVnW2VSfMT6nLZ4kJiP6flzUZAlkn22p1L0tKE8oc3taXCtm8VrCy4XWHz+j5vZw9xiNmlAtnt4A6xPdoJynCHuKDhbyuTosgcezKRrhiJ0ZztInA7LwTxzCZL5W9DLcHeg6x7/1CJKOorMNW34+EtvsZ2wKLNXj96mzesXv4c+Q+tWQjzNWr1Ml7x59WDJFZTOJC8Lxj5KqZwOxP+960Watfu7v9CkmNpM3v+3h+eBxbvLbO2TrMUNHWAKmt4h+HCm98rOhtl0PPhwO3yExKvKhXCKXXAlmnHsV+t7wpSDGIHcCfnRiZcN69Tu0jYwILInf1cQltZ+XC6kj3zoAtsPDrTOZH+YezSYV2rZKWwBSuROxs3TOJmzNfbPOOt6SSUqDL0mh0e77348MFe1SE3fvB316FuOg6ZEvXMGOYObrk5EQjZQqrf0WNdzZO2R3ajKopiRMdKzAD32pb2KOZ2TI3GLcGjM6MVP5zjHDUFDurKhJRBCqXmbOz20Tl46Zt1PKNQV3FFc7FEs4d2IrDU4eUlmMMnyi2/qUIrplMFxv6nPrXqgh+qsJdLE3nj9C6Opu3x7Ig/ZbY6vEeera5TnnffkcMIBxGjBiyplSjIiFgUWsa/pb1d9Uhl/0cGyuYIkhXvfoWYUzuTLCG7/uTPxs18rvDT0UGLlZUvWZ/B0feuIo6WwPLFXeIr23Qnh9IHsymeQp+YRqxFTa6uusj4D+sZpACn7XovTurRNio/RuVt85mcaU7aePqm/73XcRN76/7tT/KytNOmvkJ1sGSiE3jBG9lSu8VScsjMX7rEezVZ1bef3e0jqTNR2/fvtBvsA7s5eE8ngpGW0Cc4+9KKLCI/Yy0m8TNkpAw4389OaZlhjgHYFfDFZGYpY4P62S82qkKwq5rKYm0nhumPa935SwajNGxXrRUlus4+jhi/YD79h5q1dteG0uhannlpHSt7HWxb2sTQveeJOPzaWT7G7W60/5utmEgytrRkpS1XziW23fSO16KeR8zgnTO8mZ3Fy3oFA6LGFbjJGF1T3tjiTZEbZ88mpc0LRsfJj2jQcTJXevSCj9QAR8MjbUUeARj1VAi7Xb/rOxosg0biTErDPTl2utanWR6DpFJ6dhiGFBux9t2HMti/pt3/ud0r22moGNWrTkixV/DQ5zvrNv9GxAQdp77X9x99VxUW1toxvBQTFADGxHHQObEBFFpQUpGVAMhGFmAyNTTBAmCoIdqKjYioiCXYhid2E3NioGBqgIKvdbsffsvcHznu+99697zg9nPSuelXutZz21Gi0QthBl1nut/Tzr2IOAUREjVW/HJVyd1yFN1q3P4sjvT63dYx5EJx4UPtp8v20+Ubbi+IqrhSkbMrvfvNI4823i56m7fp9Iyr5wdS8v0fxqJ5EspI3jnsyblTNC6/FHJ0YniFtbnSvNOr1m96C6Wrt+Ly//CiuI2764/PSaubwmrr8eHRt0OLf5nf1fyl17D28eVJVWerZsXu+6TSxWebX16d28qI3u4OfSePc744+HiDfEj70dfvNVbg+LlSa2n2ynXGgRM6cqpXHupMbrUxKXb/Bx3Pm6f8ht89GtbrpnP8uvv/HKmLAk7Zx7uetTgm+uLBlxcajKPvNGT96VzoFxSdVLCou6uW/miSfXO97LMkgy/aDznT0W3hcGtb5UGqeZ6Njh1VKvde1C8y/xh3zrMTs8ZenCNaUz1ZP3TwtcsLd/j6pI+70u2zv7ZYjWlVh1OF3+c8a5J7eXfXhBVNaVTCv7aT+4yeB5RkW3Fgw7mvRkgsreY17zBjvdbg/f458jSI+dz2tV+nDBg9H1VxcJ7u4YdNEis/B2dkXq3eJEk3tbvIuPtltgaHLr+zbvDh2veheun9CTVCVfSdXe7hApJfinPWIHDT138+ntC8maZ05E+YMPlvUL485bmFRtWRwcQMSYRZVfORV0eO2VhML9pRHDFjSbGXN81Z2lLzrkzugXNGz4fe8v5/oSl+0fdbPYNGWi/9jGG3bkDTrxm3fzy5pLbWe9+tyk3oMsr34Fs937uP4WZ7WTt/BatLjPkNjmH9Z4rfuTam3ku3BMRv7VW627uRad/W05dNbzL5+GdT85+3m/5YE/ppQvfD2mtOeNw/Hf5g8pWpZxLbhVvwrtkZlv7lr3W9jM4aTBrg6D7QImvtw4f+jRPatmfzmZ0e3y6deuj4sPbW1uGvYt/fCJigkOZjmWT7Y0eWSet/fom88Hvw+/3Vw7yvTuEouIp+877pDYjvNs02T5xS5Hrq2PXmr74RjxoNGeS1WDPklPpbrnOW8tHeY3MsSx0iTaaJ9l8GvzkT2abN6yv+Hj16demLb+sShHnf9u1pvPHks3aB4tfVa+b5SplIzs+HFM3mz/m3ktvz7rJTw95KQ0qp8mSJ2k8Vsxv6qpw/mWzk7tC9/5Svw7F+yqXFnv57q0G8VJW8KnCmS5jwYe9zrk/sPtqXpryLX00yPmJB1aaD0/f160X5NvM6bsX5cjIa2H9t2m4G0KUm9aLUq5W/DnT+PJQpMLs3Spbga/m6bYhYaW9NLyCt4ElKQ7/Vq51WjAoc72TYb32rB186+Rg6bfOGu0pVdK87E/zgx/7dh01qeZVZ3ePNL4rMz49jC0UXBEzub8989uXg8bcnLfjUNmpUPTr2R3XWVc9+cCqw7nipeVFB6pDlBN93SP+/L71mrT319Ed9bbZH36OO/dwT8XZgqnKPIvnT+xKLqkzxbJn8niqDYm0oKfuzXnNk+69tux95COI7NELdb41huf1XDjMV7eAmmxaWWb0+EmZYV+norhXb+cfrK04kVZ5ZVPpzc/mjP2UKxD9PhH8pVtn+nGulumV5DN6qfYBMw51jm46ZcV+458nz5mXuSJrJ6lvfoEf5y6YaL2k8WhYfbDHy173Hb0ft/MU9nvi175u7c2z2/6SiYK9ylLi2jevvjehvS3Fu0u/Mzn744Lu2r9KUUwYUkf83aPtc2umeQlVm/P3nHgQP4oQdO0VTMavQ47fse8VeeXUtnHFd+rn5stWrPibM6nbwtOisvbVw5dcGlf0u+D6dGaPXun7MmqWNSvYMOro5Ip7teLnjwKuf5935TcV42/H2vUa9Pc6G0OzpM+X41em7avT5NDXjvOCS/eXCk7meIaFzbpjmTt/UPZk42Pn495O89riqxuaHiq2nOH5F5bjya9Q1afP/fdYVvh6vuOjV6tvJNgOzMhfv+cW6dP+S4wa1ftdTnsy4jLZnbJ+QNHBvdQP732J+9j+z/LXLZ0n02W7vddcWpIt21ZjpOWXbN+98cyvJOjJjXPcnbElbYzQgOGjp3an1cvu6ttj8Rq8cYfXQt3Pz5lfCmg30nbsOqjFw98rlO0dN+cX5FTvjjZD+3160Wuy+14fu6REx/tLJO2rl7byHt78ohlI+5YbUsuEy+pc7bJ09vkhIR1JlNvkZ+P9nf5fqeFV/UBC3efPplDW6QbvFvl5rvw+I1rI/wHLihcXTVDcuLu85i+KacmvJqtOj1z0qapn73H+h7ppokNCeqav2T+LN90ZYXZnQrjiQ7vdnU/+KnriyPz7IJMfswxmlP8aO/mnN0P3/VJfndFm+vWU3nRzz1654W0tWnmxMV5DQZdPvLSgvdw0iHXARbDjiiu1S/Y/nht6uIxxc3rtjObaOJ85eC7bacCK0cv6t3Z3Gum+7b1EjKwrKSi976fOemPO61c6lEwzVIliPv59Meoo0t7TosfY/ep1bnYd1Xzxh4MGvzI9/1ow+gNcc2KK3d+6RzdIK3T649nZs1ePmbd4YcfP7gttMsJLVkt1P3+UWf/7Gb737esc/lRkxnZN38dMHy+vdXGrutPFQTc3RRgPGWz66o7oZ6f3W3kb0ZsWZrc+/Wl6bMe9R7VcFimSrkwrzhvfcHTrIDD0ab+V70v7+3aYavxjhXXt251b5pJ8Kf1jddcEFyZMPNC94bzI4jbCweNWlzZe/r3TZXWpn0TiTnqS9G2CT/b7798uPqmw4ZhPf2Opsy4d6jrxj/Zx1M9L5h9f2FXvvu1dZ5g/cV75b2nXnrQyMUqZMPQ1x/PHWmkTmjr6L9k2VTt7MLQbRU9llxbIfbO1E25NvzA80fS1fmtnw85tivlYps6qzs9DHA9FSVadW3HuLdVm0455SyOvPP19OGhzqvULyq3tKofnR92dkXr25EX16defWwadrluSd7BAv7Fk0dSS4jApvZDPDpHCj5GDdq7vaSzgWWDlykNY0/YLetI7jJRH9zw89rq7EVLVa6HpUPGLWj8ql7FqVNpmrz5y98YNd7bz7xdg4OHDw8aXhZXsPjUcOWEnl/P7eme7dX6850P+8taN7A7uNO+vXVAEV/WoPuL3c8XnBY/PNclVDh3WWfjMQsa77AfO234mtED3uYmfBi+a/fI++c+rx2b1Nu1U8uV3do8ekwurJC5Wb2qiG5uerzic7251cFtJJfXLWxz9uHNUrve83KH9u3kOM1d/SJuSer25Iod90yPTLzS7n7jce/yl70LOHIlpWT/qfXmHiUrt5QM3NLt3fRsQfg+j3srOw9tLJm9cM+r9Td3OGxo1Wj6h4VzhjT/WVq6OSlXYNQvqlDYqufCsYe2v5ufea933cHOp7NDD1pZkUFddl/1SeBdNi9PG9Dk+JDQIIuFidcbvDo27/6RF3cVjQ/1WLtnw5nGa3fuvDZx3DyTmxKd0ZMLugDXsWNnun3ts4B3LG1W8yrzyDufP7+4W+rY8szByZqPa6LDZqXf9XEP8m6vyxx7vfuZlLyug72fr9j+lEzziTGy+ZYd0W/E+geOd3KmT75+7sXQVZbD/iw0zHYvTg/NSI5/tOi4zfUCtVHAyidTfpzYMuqm5tMwV/miWRFD0ndkrOwWK85enu2VmdCUeFM05uS0PcIp5kcCQhoFtzwRFrQr5snaqDb3SrL2mynaf87b3sg4J7xjTNe0t6pLRk3T9126cSHoiLTR7oOdGv0+u2JymGPdQT17nDEb/2qi/5RDUzPy5r80Gpcxae7hhc57d6QtDCuLa3vuy7BWHyP33mo/ZsBe+89Bmwf0WRL61uDp7Ii+Z5+4y6LPvTiaP8hKNK/5BsdBI3I7d45rI9s2d+rAna3rNTKZsOJDTlCn88KPj88/6Oi1eH7/gjfpOt34wGbv2s4O7PMwzumu/7SbaRrpKoFge8nh63duNCguSo27fvp47x23JW9dR5zznbB8v1f4wxWDPyQPadLg06AvYwtERZXXC0Z0y1p45+q7uTv2fMhfNtBtR/s9hV+9Zmz52PJJZPkvlxG99l2bce+aKnVZ4btEq1/NJvwIdd60oI7PtoSkLhuHDMro/+3HzUv9XDY0DX6lqN/oEpH09UDq71/C2S0Vay/NGz7t2ZJDN7TrptoGFUo2TYh7uDY4tgvP/NzaGT0M/3jZLR95tvTWztT0H0adviUVFCU5BAzSuV5tdizDuX+COn1i2pluc9OWExnyk0tnWpgOrntIt6fXj/xE4uIXe3GR+bxzAmHp5Ida/w3tVhhOuPS+xa/vt961bpImqVd8NPnb0ay2R8pnbxEtPzjVq/2HYmvZ9ZclVj2NQ9qlLSxNW1q43iW8j3W1g+f+TDvr7XF5p1JvVx7+c6z+uOc+Z44tW/5637Y5CVHH+ng/yN3t8GNKu8VmJt9HGAxYa2p6f3z9/o8F+5fNL1t3MjlZ2LTx/hHOTfs8P6zczfu6hex+eba/sv6Vo/NvufVxPZQ69Oef7YLLDarf7xp+b2DzLdJFP47d+Vhw7c/rR218Zo9t7Ko5sGLLfjunUNWcfv2WV8w2ibL6dU2U3CTuSo7jlHy7no1O/T7qPKn4zrLjd73bSI1iF1s7HpDKdtUtGJBiuufkKc+MoVmdkz3aeOSe3Spsp7Z5nFho2pNs9SLY4tCN7EzfYU1Fp28Neuq3YIXCPKmkq1W93LZjJSb3NqscTe5tRv+qHK9w/sNspESOav4GDnyBA1eywWFr2LD/aTYsKGeBiekrWTD/6DEW3D26lAX/rLOcVdshl3wmbLbl9lsm3ONN8hJmbeX81wcY8AarbaEvGbDR8YttFjLgs32ObtrDqC3WIbrBEz38do5R5/Nz9XB47tn38Tv0tU2yONT13n0aXpyrsI5PSaXh/aNNhraI2kbDGz9eudbm1C26ccnNholGjkmm4AtbWi0+vEW5hYIdTPnl3RZdvkbByfWXVcQPHDqDamxxg8N294wXbcSw/xPfSKOrF79exHBmeqcZbsOmKH9h2GftAVXP7B1n1yKQ/7nuS28781YDziK4u+xcm2enRz1N/o5g6/Pjm8gc0hs0zUC1TR+8r7nxxcnXVpyAsNn6EfxHw4+0PlXwGcK3U9qXz250wH9VbDocGtdmTa3e+7/IHNrsKOxr0AOL312KWy/0a/UewPVyCkOODSi8nnfjEzDZJoovbRy7o65h3W7ncg6B2tY5en1pdd7l3O5D6cXAHKPu1TVy5fh3k69ZT1sE7C46EzNfzSt71Xrm8ZB9BJE4t1fipiJFv3Ubw/v2f0YQ/B0D+A3uuD2ps2WtY8f5BGF7pVN5V7e7y10a111guYsgnKb33KNK9558e6T757KHxLAmobFFDQebXhWU9Yy9P5u4MLFKajJ7i5Ao/XRwaeMcYpLbJKNG7xZGJZbkZNrfvJN4/+5Kt8WZaqfPMe8jxJtn+XukTO/5MMtjpMw3a9jghlsFDyJDDy5evIo0flHoP6LwurzQ6cfL/eXV610/zjBfNGNmZsc5kxp/qTh+fnlUp3tfO25uNLFnq4DeP3YNPFLn/Xzlu8uLXWPXZ1WUr6438XQXVYPiP/vvCD2u232t49Ypw6JrN7/1i8llvZzD7xnc3Z649tPnTue/TTt86KaDj/O8O8+Se+54X7H3yVYydc6zm3GzGtoM8l66uu/72evLg66I72QVVnt2iD9V1SX6fEz08cFzF5+e3rZbi7JJn9wG+rp/mjfK4WFhzP2PK3IPXH75eZ5uxYcL110W+pYUWGw+1vZjaYBjt6ozt602iT8WjSgVZ2/f6l3RtkoQ6jZh2cRP2iHbLr1dZPdqYOnBu7rDrj3NFwp/v9jnGnJhm8T71psWB9Njso8+CvNyaPfumOmrxVet/riXBM05WjQ7M3Nn03YHnI4VrBTn5EQ3y7nqkxEseXGj98dpg9PTz32Yu0EVdmjagk2DAwuL27X/lb3jwnx78snuyyMsXUK3dBlk/qByV8qf5kXH1pU1PdT4k2fO+V+9mx3vPXeAS7zMWtpfkf5z8sAHfQ7nGgWmG08/fcqz6sfD1EWT3tzjlUy+OEFr8/j3w7f7V+V+Ttkc89HxSPcN0qNNOnc6cS83u+G1qEbvrOud6Xk3p8fuRvdvLjY4vThzqMm3R2RO64X1zidVPkt4eC6ya0LA0FEb91zKy7Qf03JJnoFqdNfCnPoTfr++mqKccKBrHe+P8aIG58ZO2J24v+44q+AZfoF3By6M+6J7vKHj+T2OO0ViqfeFmDvypU0vlti3v9rK4ahhqMM1L8/44KrO58lhG4bnGE1+deJa7xEWa2PXDO0uafQ+PKNdjPPPdiFnliX5WRdc3zKIIBstjSO13xIkL6d9cF10iR/69sjE41GrLrf3LWw6b9W0t7EvJrp9OnV8WlbH0/c/Dl23qdnqsy1y9n1qb/auzLek8Gzxh8RBpV7Xl5t7qYNvfNl4pEN30aVtIa5HVjxeuNNNMbdHV/XPwc10zd8VLLVufa9+72/Bb9pk9ZL6pI1aE6rq2nXwmD7PNxXGnX52UJYU13B333nKSavmnQ4qX/nKQ7LcdE2VvMGHoQMyDqx8ujB3QsEcpwKBxxvTs8TLaSv2jj7Y68OSDx+Dnwu/n1g9wfHpx5cDIg9GWvaVla8K7jguZZ62dCZx81lCQWrMiZ0lXyJ3Ntm+OZE35v6HkgWq1pJSg4fLl13hD1c2frs3OGXxH1un2UWPpzdbULe+1ZPSrbZDZo7c3vz2+jGf3UcUpL+7cfLqi+LbrS8aq3JbrpOts+686sQO01m7i4zORRe+MHSrjj7eb5Uwq23zlEPuSY+SW1S7f5oy/W2hOCOSbCkxf60Ind98p9+XGdNOhA1dNO2yn2fcp4xVm+Wb1n62N7WZcOxl26Acg8SG9S+f7WV86/i3HePFPVrU2eB3+ff3HxfO99U80Ex76GNwpsn6dZUZRY9/v4ns3m7kRoP+d93P5Rk0D/z9fMZeckt951Pz7v/o6tx625SxnTqEGrtLx4x+kxEs3V2yIF5nM2DOitN9e288uTOprWTP3QAiOXrq/snx9b9mZHYuCJkfecJafM3f573bimfudun5h4ZVVFcZbOFHWBSsvH960LZi/4PVk5yvZQ8N+XDs2v65TTsUb346vyTxokf+0gEGe+xkNspzFp87Pz/yIDsv2SnE1YNokNfug+xBD7Nbr4uXaJuPOdEoK63pq/Ot37ks7vsoaseAlRdS41oWJWx8Fbi/qsnplW7H8i2XTQi8f7HdxOeT7pb9uSu3LG93xLbbuoAX8xtGBIdmvVrV8lWJwR63N613L5re50dhyIkJIRLndhYbOz7WdKgsd9GpYvOneap3Gi2fky1sm+DlyZsoffKo8UO3ypy0KLHF2kepRoZ309L871XcPeg8OCT55ja3U2dXj0tLGZeyd5tbflrnuQ2sD838ahf1dWv7Zvei4nJlC6slnXe51vl0o+uDhi7L7xlbd+gQ+3GiqH9SnvFbz4LXrtPfZN3KPnu4TmZW/fA1Mn6L0I2L6zUdEGV41XT+pNOp2Y/sJGOLozt17JQ4Z0Wvh4Genqd+737Ci97WY4Os4JDZ9tWPvjqGpF84K+x/4Xxu8bJlM9OU88uPOBzKdq78adEhf2DnuMv34g8kq7dJ11QphM2MYntUN7r3okth0+TT+V5RrWY1/fbnxvxxn061JMulIadCI4L3Tqtjv+pOQt/jK0WTHlQNjev7yTCl2iu4qvRY5f3CStOgqu3JkcdD+uRvL7UvTPop7JG/fO+GFZXj9/dYniT6Olk7dlnR09mOA7UiXf6rn6UZTWJ+LrN4P9/jxmHzkpC87Qajrg6YVGqed6XT/pwlDvtMTgY9C8/dbvF6es+NLQ7WD/Oxil45efSytU9DYz3XvGyQt+H3rGljP0499b6qZIfTQmNN8rGmi4Kbtd33epKk1c09FxZ12Xl/r2LMy9ANqwrWuz85UrbzwcLQS8rSQUaJdzt/mBsY3Gj44clPupR41eVf6bV1x8SdZhlbW4/albmW1736h9kDo4fLEkdu7NkmpZNRQnXG9lTneiGfb7pWLe7e0230cafl24Re2lzjFg79v+pa9O6bVnnr7fglK+asnu18qH6fKSGrpyQ3eZj/p79oubTL/IGPbE+t3rJ8sXRa0uFKlz6fjM1P7a1TeKTccMKryJ/Lpn5zHXF4l2jGt/hT+aXP2rR7bN1i3dY2+RutLTTSHg/CJUuPr561ZFP3S38eFxrqFk2eGr+rzpv+l/f+GnL7tGuA5uH4nB2i3QbHP63dKqmc2HR2PYcWrSa1PbUz+uz133luLbfPrTdu/crN6oxz390cu41eF7hj7irx0KxU/uCMESnx318E5tpNH1y4aFv3yyeKtrbY32bi6OT1DU6X3fr6+/OdkW03bnKVky5vxsSfObQuvcu+PZnFXpL1zUSq9AOk+9HSDk8arQ9xTB2T0PBXp+rR799tDbrBO9Bw2/3LqUW66hZLv86+4yz4srX+tWMlgcLjjw/1fT9XKP/YpOGMPoIe3T/dKq7cIs++ENVikdnaUa0TdJmLjqa6SqcaKH4GuX4Iu5e2YF/utuWnH8+4OGBiULeBC36onlk0m1wufHFkVvjyPJe8DPf5Cz9cidfKly89kp8VGOEUvGtvN2LFjQuT7CdKr5ccH9nn0TqrE7/qTl7Fe+HU6atF2a/Zhh0qCl5+6OA69ub20qK+g3NOd43d0fZttztfUoIm3hnU4K529637nV/EzB2l1YWTdc/P8vRNjhzVO/W77Ib5kWPn7Lc+EpEGuRXd95+fdU+qqODdCMg/ZnDPzub5mn1d67iNy5ypsbUQudc58SE5bLdzC7XP5sUGIT/v1fncbUv8+Furr/GvlDvt/7HA8IPVtXSbC851LKtjAjbqYowipzkN4RdINyasT7mVXHIunDC94RPV60z94PNR9V5vjp98IsBNNHNA/4Z9fs6c+/TKqAzV1stT9jhvPH909ZKDDYbFhmXN/vMoZOmcnzmn+mc2vr60onDin4D+Fe9/jCpz8TE/k/c9qe4TYcfJZWNbrPRSzZtkM0l9+m52yZjdX9ocG+/dZ8yJln7ahk0lqralmz5qniYoPz8Jb/Jm3pBzN27PWpbdM9dt1OWiuc/7XBvA89p6OM3O4l7PIcvlq/JPnk1t2+TtAKOiKwcXVF7Y0GzVo9t7TJZs6mQyLG3lmnYXxkw395rgc2BETsPrB48ZdnHo12HF4wMbXrS7a5os2enaRzBN82RbTOaCm8Vzbv758G78jhCzUc0WNtrjEdordUh2F21L3bLoVV/8i1rF/ejua973Rt+Lg19WpwfMVW7PeKCKLpg5uarB4+OD3+Q2CDIw8zknE4+tbHzrU4OO9323GwQ+++ExOH58yUvd1mapMSYzbD9U5pLp+16OF954kN3IZ6PT1oEtp0/Z0NY2283slv+G+uZNhj9p7/NqCX9Oz3dJ1kbuOSYfvZaGhRyMij74KnPoLItRPtntKg6Xv3TmvWp3bWHE2pww8y52ZfHXSpJ23kxsFeYcPaXnvZP9LJxfCcYab+xQYZ4y7rv33l9rAtrt7Od5sdvBFZFfbZ49Gey6NfPBlNVVezZPNfg0bGWLLXPf8ur1cVrrm1Iatrx7h4W+OzbVm5uw5MyLbj0O53/N+rIp+PLcD/cOfHu0Rxsp3WW2k7Q4frcsa8kqy0/ZzzbKL+UOLVJc2W32/XhZj1vBJvV/WyxcNrf68bKyT7u/GX/yHvGr6MGagx1MHCuWL/wpaW62q8DL1DVzq7d37JEvA461vt1avrZp0IIboU+F7z6elXecI7qQ3Cuo4sXqaG3a/tWv9n8b/Ns6buLBRzNTmhzaeKpdJ5v5R4c2r5uZ1vntnVdeNlveDd2VY9o7KWtQiz11FzUetvVrqs9ly4rOiy+Na3d+r7nZyE8l/CHa771sC/a+in/aIrBLtGCbz5LWa4Yd/LQwZ97CwB+nDs653pp/+vrmHHX6zj2WBzSC3OSNb8vOzB9lOvhhe+2mxb3vFV+MaVllkT6HnJ02m5w0JavvtAVPfq6tej9t+6F3f1a2WXykyGpU/KzKrPZ3yC1DpnfS9gh60j966fjuNrNCu6UuWj7b4c4oQ/c8zdfpWQO+RJXl95gzt1fy6CyzTx2uz+rtsluq69l79d7vkRO/NZ2p+WXZONxy0Brn0HKDs19Xblo0ef+S/DLPpKZxMc6xfYde1mR0tNumaiu4d7vRLWFV4z9mBtuTbs3v/JG35a24WcjFdduHeVkb2duVD7/2YsqY/ZPP3bn+eEjdcy57Hs5o81i5sXWFSd1lC1MOLSvqbrWkpDjTbHXXpLat9n+dckk99Zu4w7XbJz9vFncQ9W37u/Dx18FbDby+fpg/OHLgIPFRg0sWKfWcFCua3p/1zLDusTszj67d6nXDs6Cl79b7rim9R2zqOWvkWrc1H9Z1vNH47puKIrdBZQEzc54vNTzgfLF48ZFLFia734S3eJjnEr50UAfdRMe1DddsrFpt9ua2Q7xJpPnZhi9SDdymiiYuPiuYF5HYs6rbwxKn9Mc/k/d//9g7Mez7zz0jJTePCO2znmukAzdUaOIn7J0mDrJ9abzg7fPOksnDGzwKnXB0osFjz93hD3s5ZrS+tuSHLvqsgXD84yqz+CvDNjrF5luK2zzfd3jOWpPL0y8YlWyzLB8U/oDfPdf1asH6SjdxoM2XS/mmltb3lg/b4ZFgMWXbibvHbm8bMz0lZPiVKzkLP3qq5pd6NuvXIVs7tvr4qK9R4+f3nTi+1a+uN5tYVSs/9EnSHAo59WBRSHBSzrTqs8LfVhe6fLO+Xqbtkxk0Yfqh7ClD8pV7h57pZ+5w9X3/0OKbba51n1W4ddKEEa6J+2aMKxTfSEyIOD2yld2EoA0dwq1PH637/N4w26z1pw9MvLC18k9ZT48HC/xPLkq1Fc+qHHn4z+fvK/323Lx/+DYxYemaWzbrR2Ucv6Ew9ntbf0b/vNMXCI8PiX1TTC6Eh3s/d84qrzwR3E10pNvVgqkFhVdK3qxcE78ir+0d+8ReRbmGw151PH56VMFrsYnHs/hmK438Q96VanNlz35dCW55ueHTOgGTApZfeO/SsH3iANPfhelJr1tuzc9/HbioS1jdW7+Tpgj4T/1LpPweZX3yznlMu3m1hXbezSVOgZWj29k89m7nMaPtyD4eBwNKKna8Gtr0WfHKjeLin/dfZnWOe1Bk2jJ4UbXrhL5rIhcOj3239V1909GaoXf7D0oy2PuwafFI8srNXn6FIwxNXs14ciN4Qta06cYVS0Smzil9msyb+aOy265dRlXfBy692W3SnR3iAz+/ZDw6m6CtZ39+z32vB0c7xe+cETCg5fC6SW2V56+lHmjeoNGSpZ0WZZzb/NIr4dS2To98/HX27/c65c1fs9bC5vb7kaLMNF5WaPeyezNOla5Ptrl1NKvNmfOPyj75dNK8O7+FqCdb3OnAYfNP0c/fmRYPLCRMUm2jO0Xd07288tWyb/KMYRG3iaTmG18L2yYqyx2KN16fXv/ky7GeYVGdw+btmTPh0pmnI/as2TPO3rmXfWm7Xt9/Hbi3rshwndp9W5uX+9MetVp3wz1p4qlNxrKq6upqU8xc+v9FJ98TG5HozVKAZZhKqZFC2yPig1YA7YL+aJHPPz+JhOFVSyKNlGo1bXXIDovChcxTsPsd4MdNJ4A+cCibi+K6bLsoADPtph5geL25GTEK++00YaRLjf7mkw74KwIu76BLUSJdbAZ9jsVi24qa+TvGkmJgUkXKVdqE7pY1M0SoAKo+/YhoS+R/FzAzga0ZBd/GcLYbqmsutqHqYWRGxGNfel0ZcCBO93c3I2Kwj7uuDHgC9t1GwSLsn4+CSVyGgh2x3x4KdsW+nCjYiwP7c+BRHLibAfI/xYSbMOCfBDv9J8FOX4D9G433Q76rijlwOu4PBa/ELoooeAUnPYMDr+PA6zlwKvZlRMGzsT8jCp7LyT+PAy/gwIs48DDs74mCnbGbJQoG/p7sGLAvHh8K9uPA/hx4JAcO4MBCDhzIgYM48GhOe8Zw0sdy4HEceDwHDuHAEzhwKAcO48DhnPZIOOkkB47gwJEcOIoDSznwRA4czYHlnPYoOekqDhzDgdUcWMOBtRxYx4FjMcz1W00wfEfPxBKsueg3Ef5PEInzEul8MDQDx9fH+ShBzmz8Wx+lg70U/s7D8Dws3ZmDyxni3zr4F1eTaIIDuHwiVR/OkEi1ox6OXxKC9u8y/M048dXAxDFUrNQptPxI6EMSOJ8UKfgj3FxcnEaEuocG+AX5uoa6+AX5BlKGdRqdSqVUa0kJOBMonKV4H+WOWz5pBtdgF+Jve75CwR/iyLfid+0KgoMd+Xa2IBwdjcJRIk0UXyLSiij3ccpYUh0hU8ahvlP2a2ZGtfpEVYuxW0TKnTSEQN9bIpvFzrjdTFxNjAjC3AidiQBuakQQYpFMBixQA0iNTqZ1cNAp4tQiVXfLML5SAUxlw9zU6jBk+snC1cyIjbu5EUEEaSPsoYUdPJ5DdapQrRKaOYciX+stGPbTuQbs8jsMCAIY6dE4oFdIWNpXqSCFSjlJAKX9usBvHbZtx57lmhiYNzVo1pxoYdGyVevqNm3bte/wn9NbM/IBNwY0bqqQedNmzUGJ/2xiz0BF/L9D9W/++6eqOK3671H9ddipDP++0SxUxP87VP/mv79XVaNV/z2qavPqVq3btG9n/G/nsKVBQ8N6dXltm9c3qW5Qx6xRY6MWTZpWNzOFflhfhKM9aBveZ/S+/pycXVzd3D2Ge43w8fUfGSAMHDU6eMxYKtbTa4S3j68fTAiCKagc8hAYGSWdGC2TK5SqGLVGq4uNi0+YhNJr4mdj4voa5GJKCFdI1BGR9uTEaLlYFROv1Frp4qSaSSIb2/5RA+wGUv1xx/4lKXgo9j1Jwb0I/dlE+Un347H3C38MU/vJSE56AI8ggvSeDV2QVby7WiQnoYPWUGA+HS1VALrgrCXyjf8V230zYeD/kgQ28CRfoiTBQcGXKRWRpJpPxks1yBJbJpqUAAzTVVIZ8vOgIbU6lQM/e4YA0tDzvM0g/fAF07i0pbqIP1qkkUv5yMC7p1iu4ksVGq1ahxzmhkOfxzqFxIFPVMwQQP8btp3MIC1w2Aj7lcV3ITXcv/kitVSbwLCFF3r6uPKVKuS1tF88QQTPRP6HpdiDKTNtykx0B6NwikWggzJRpMaBv3ImuntRNlPI+SfWeCCIEp0iWqGMU/D7xUeE8zW6cCbeK1SdbG8Y2A8ldJorVUjIeL5WqeTLROpIkiA+zxRAXx8MvGIuXkESwqtQKiaRaiX0P8wXRYDDPkykVcql4j4RwEMuoA2HJwngXY+Bj+Ti02J8/9ZTpryVGaTztmD/ARS8D8PotAY+EtSkRimLJfk6Dal24D9LEkAfq3nNUf5CfF6LRSqRWKpNYJICZskCOM8Fo5CPk4HYfwZzrRty1r6QRxAeOpFaQkrcFFqpNiESAMBxOglBEGLmD+SUD+LAozjwaA4czIHHcOCxHHgcjyDi4MLHnxRNe0HXxmHAP4MKLJHeUSKFBDh6CIMfCvClrlJqRDLWl0EQv5KRr91h9ZB/ETfst1g//iKJhM+Xakm5BkA+wNu9UAsIMOCxG5Ff4A4xC/kcUcwSwPv0BBL5PS3Fd7N/7x8YUWygbuCeAXSKVGjVCYDlEQbJtQg1SYbxu1sC2jNWJBYpAP2+e5YA3sPqpCCfJlT9j7FfXgq+g+/y1DLhx0WRCtBHwA0BHQQViuSQ+lVGMLtLou8PtAOMVwrilwSlCOA+R+G3xP7RSQWkoHEfafKYryYp19PIc8sGXL6qGaKJF+H9/Z/mWCOVSzizSjxLEUB/wBSe1dgf/d/aEUWKVLgJRPdUAfyGqLKzcBuY+WFt7MYTklQ01y0aIL/JwdjHvn7tABcpJD1yYBGBRbcmFfkQosqFYL/dFOyL4ZVCtPdnYj/KvfhwydLfwnjOtxHCgSdw4AOGbDiUk+7CgbM5+cM46bmc9K4cWMTJH86BxRxYwoFJDhzBgSM58AgO3Jlzz4jipHty4O2c9kt5BCEhNVrwoWEHOtClEbg/R81B65/5HtTsOch3+oGRZtB/S5kh4utMN0brygvz2ijYFfvMJ7DfbFDnRB5BRPP0bZDx6KMS3hXlPP0JCtIVvP/uHgbOYiWn/1V12bCKRxCBSiV6KgQQPnw1dJ2v6UV5jdGIIkhZAvgKgVecbDv0zlUjA7TnMXEZ8QjCXacQM+PqA/xg5+PkjcF5PSXxAWQkO60uOJ9kynCRjB1vzCMIH1KuVCe4irQiNxkpF2qVatJTEg9r8JTE17wJy0gFZMLec0V7lxK/DbPJEc3POcy3DCHQ2bDBAPE9KTgC+xSriRm8MzKY7+Lk7+TiGTiGwr+uzt/eaSAlkWSfKFIaGQVfRIHbPAZ7862o8gdxeQrO58CfsY/9f3/WQJ4yn86vgC68ibbzBZBnS+H1r4vW7V/cfeGGQnY2XWbiX/uq5z84OvIlGi0CqHKBxuidAQq+boToGwpuWvdvfPXaxhB0iDGQDDzAL3zt7UOcH+a6+Fn3b3nBmzJqgB1wKfg9cdnBjvTU0zgMeH97DwfgkJERCMUQR4SDLlcHl6NgKx46zynYnvdPbaPx1tY0Gsewf2ybvn9U46hyTpy2xeC21cSD3jrQqkXi6FAwT/AhnsnwNQ5vMkLrpw4AlTg4AKC7VBJvyXccgj4iR1Y/etUsAn+4Zeg29zKZqm/frb/OI3JQh8eq1jFKqcveG4LroDOZgoHPrr4MeCN+H6Ob0Azy26sbo7GiYEEDlO6kFvMxhUKT7hcWofsSxVvNG2MGadRCPN4U3KAhggPVUkRuaKLUUkU0JFrRXUjNp+4FDRcLYH13A8wgP9/AEPXn/DBEc5zGZxMTHsyAL+B3cVjnIKBvRHIS+FDjd3e05IsU1GUSweCCCzbyQEAtEUT8YgHksS5djPyebV6MaGaqDn9MK1NwEq6TglM5cDqWa1DwapwO3cbBl3MAuagRyUmGOBBR8lIFONFVOi186IZqszIClojQKdAlWova3XaJAO6rVD1u+JyoeUfTgDMHeJEDVyVIrCUvQXfHLUPNIH3Yvg5q81/LQkJTqeZHKcEFGrfEgX9iiQCuNwrPGEM0VqgqBmXa3VJPNYeTgN8AVwZADuqtl4bu6a3T0FxQ+DYaUPj09LJIAXwEKqRaqUgmnURK4ItMgMkgAhXpOxmcJiCsGbje4fHh4BLJAPkAjhs9RgobHKvMNPQWE4WnDOORSzXQ0SDuK/UaVKQUvLvDwPAhTQDPa6r8V4P/MNYqkRSuCYhYSmoc+HAJ91oqgHTb6KUCeBZR+JbXQWNEwV0M2XADPLcV/siP30X8bgsFbzdAPCItOIH7gGHgi3Vq8DaPLAG96hWnVEdr+NDbZwT00UccxW2hcEjwmFBwMsZZy54rhVuZXBRP5XUkas5xhFJNSiMV1NhKFXDNIcaKmoyUarRqOMeDl6E5Xt8SvZtGYlx/HVvWR+TAn70M3fOo8tPwt6ul9i7wflIYYmaFwm1FEwZnGi5CJt2CXFRGgI3HgU9cWCaAPMC+Loi3BfwvNmHiDQvXyVWhCDGpoUjif0JJ8JcLoH9aCmciFycguOnGghuCVAHZUv+qxQShXS6AfAYKf2Qd9KaNGLgXBctAp5IAL5ZgkYuVCo1ODvYkUsZi8KGHpCAjkQSvHoKJBLL+5QL4Fi6Fu8Lgr3QYIJBIhSRUGRGqjSIVoVJNKN1qoHCgUCpIKBeicOXT37UEfiekTAPeVwsnZRraVSf93BRBEFPSBZD3TJUPxHsMPY4qkoyGvewNn0DC4wS4EnCwIKtGC5++E6lJNDS1ZNMcTUd72rV0xPerSEfn5/gBeP4wT5jeR0C7VWplrBRcZuCchYG4MMxMpcpF4bed6PaS8WKZTiONhXcequ3g2cLaGg+f2wLOeiGNzcqg0YrE0fr2yTG/QT8uStVfMf4dHY0vELeb4vfeq3FeqaQKNHFwPdquRHdZKj94b6ozA96E34dS6TRRqDy8ETJWowbRHGB0ZfrzU7sSnVkUnq34m6fgK1jvgoL3UO+IYTgfp2MeOpgnzKpWkzKpIhrMJX3WwS/Bgf9hpQDKAIwbIhxxBPsMkSslOtxEiBCx3vF+5cAn+q1CZwhVPoWoeZbZ2fYOl2r5cnjd5MuUIklfdL4qIyI0pBaOqWoVOsso/n2MMVr74SIN/pipLwbxy2FbgLQZNDLMUz+0Dg4uaAtw15GyMBrfMEM0xxS8xBDRa1rqvt7dEu/fYIlLFXyxUpXAj1QrgXAB8BsykH/lThmIDqDwzDNE3woF16mP2q2nqWrbiVCHACEImi/V8EkF2EUkejxnDBFvjIK71UeyG/AFaZWq3nJA7sCFDCk08BYagxOKPQWDzVALHjKFvAy4PYjoXsIikLF7IUMAvwGqriO4DxR8ldmncBKIXMDSFZPUNgAwxUo1Ui0pocpMMWKPt9wE6ThhRgheRvpTD+H7B+mPA5+YvVoA3y6j24npi7+NJmM/hGoH/L8tEwZOG7xOau7/+Fo8mMVugPu9wFevBwTWviRBIZJLxfqRFuFHOkE/0ZRp0L5EELI1aA82HWNGJAAenMFfcOgUEkpQQeUdjN/Cpb5VFXocEVckUyKJGUE8XoP4p1S5NEzn/eXeSWo6doddVEWJNGQvPnxi1B+EHRxg2JKB6/hfz8v/iMuVjFCLIi31uM7997g8FVKtJYXnJp4HCn7HgV9gOJpMCEXCsO6W9PYiVipiQe2AFIFHC9CajCX5Uis7yPiJBFIlgmi2DskNOqxDfHQKdy6WO6rJyP+IW4cfkVRhXJPXCeC8ULg24fNf0ALp4UVgvT5a4qgUi3UqKbpAqRP0khos5gDtvLIOrS8Kx0SCjVOIcdJnqZrUaUguZpEWSw0J/nq0339PFUCeKIVnDIdmwOscFoJyW6UYSEDpd3ohLYFywf01ar0A8vApfBdrob0pWSnCRX8ZsBKAJG896mtxFzOos0XpmVHwd/wGIgX3xt8PBd/BskEWXUG3lUFNsNtP9NogYOGdZcCh1SHt858RaTeg85/Ck1ArHnwjh1jY5flxUqDbBMk+mAm8Ub8B8QwubUC05acN6N0Aqo5VFI1K+8eXRoTVRkyBqVOqWMQfUzDI3yiAb1g8bYjeK6bG1gV8uYFRamVcABnhFgNY7nJSGCfViqP+Pds1TGpj3UejC+er+eIwsHlq1SKFRiaCcn0NSgZiRzW/tziMIJZuFEC+OtWW38ZIbvC/qdDO9h8rtLNlVGi0iV2fQ31UXwAZ4WljFUBqQfeFOo2KVEhcRDJZABkBdCR8yThXEmgGaEkn8MyyB6mFv96kAv76knHwV0hq4Sg6yWSgmLNUIfG0sfIgtUL0E0QNb6A6ATLvYSkXpSoBBtylMpmz2k/hItJowa+vTibztLN1kkisrO097WyFunAra3shPBgBUhjwJeNQQIgbBVKoQJCahI9WgDePwCjW/EKlChU4epG4kPDZjGg7anw6GCH63QnqDbgDNgxaF7Aj+pbQoSB92dZ1kEyeGiEgvaDCQIoBe6ikOumjk42WSkihPhiEhR5SjViklqAZEkaJ1KQEYgHnCI0SAAAnhd9dGk9KqKF0F0llnjbWqA/eSpEEjCkNBJARThrcjgD4EgmeeIgL5aPmG0FCUkujQ6IYCh+E0MRS5RgQNUFwNUWIdDItEvfQeZkgs5IAeZyfml2lPV0nSmS1wB4sW5FGS/cKQTqZDDQGLD+SmQghnIgmkm4REwTNVyS4oIPRLR58oOwhErLBIJQHF3BSJLDmwD6I2T0niYQFKligUBfOBIOVnMGwsmPNqH0Qc3AAaiaoYIEANQMEqFlDyUANYRtr+qvDc8joNHueQFOs7FjdDBZHRbKaCtKZsI01q+0gP3dGOHAQu34niYQToeBECHXh7IhgpZq58NidCJDH2fupWY0CMPo0UZSvUiuNSGDGjBZJtTbW3Bg7W/3eEIL3BmZnYMWcpomjIjltc5JIuDEKboxQF86JYS6ZAHmclR3oE7OPThIJJ0LBiRDqwtkRwUr2uCCkjAgba+7IwVpYEQpOBKyFGQFq4YySk0TCjVFwY4S6cE5MsFLN2ItqH1y4PlnjxB0XKzvuwFjZcUfGyg4ODWusxFGRrBgXuSqe+THoK2PHKLgx3AHClbGGnYvHxpqLx8aai8fGmosHN5oRgxvNHdgag1ajYC1RNtYwir3ecQXsecKRnKmiBpA5yjiO3QsqktPqWspb2dWGoPZYG2sqNlCdQFO9NO2FOMUcHSOlilSLtICcI/bmCAgrBp1B2WVRun8KzB+j4CjMP/sP981efCEpiwAMA8CzkCrAlZXWW633V7l9rTiCoHzIUl/+Kqa/Kfg+B7bA+NlyxDA3yCgBssIw/f3nRK4A6uJRZTOJv93zNVqRGrIySKCUS+WXEuy6H9VBb8WzeH4QT5RIw6c5Z0y+JrzLDd6B6D0KTxssO62BB7PBIZsMvF1HAtYweKGKgRLIbHaguyE9JhgfUuilG0Vft2keJxKjw1sRXCuQOEXskRqlgCxghwDK49/tEED7If5O9M4UVe8gzG/6Gw9LJpoklSX8K1YW4b1TAO3MKNzJdf5+36XvLXrxJpG9E93DqfJBmFfA0EfW89a04FE+PvF2J+JdUmWysO4hBWdg3gUF/8R3cApubMCGpxlQ4yGTQdG5DEtt0LTCvh7yMSNk2ObNRj92epkmZAgg/iTjEgt1jClj09m7kCzthoUZtOXypN+0g0hYpbGGqVTDtkWSi+Klcp28lqxg3nch+RKF34f4Z70HBccSiCp3ieKd04sajwxme1Byh2s2iF84A8s7/zJ+4SSnIFVuC5ZXKEi0QaLvh1MZxIYKUuU+4XL37M2gDRxc0wx4KoHeoaxlDYpkCfCiJyElfLAPiuCe6wf59/5A+gjWdK896Luh8K3F6+MYgeDmWPZKwa51CKjXQMF9DQj4ziDU4Y0nxTrI3GcMi1TDF8niRAka9sD8iEA8IwtK/oS7TzIXYi3jQpWzx+WGWZgRYmxbZ82Ap+F5peAxHBj8taPmHUtcpAosqMBSDygglugg3w+MqVoqUmg1BCHZi9b2Ai9kS/YE62QYErX/R+WLxmNV+xoFjEWgfqRfpLc6Ih28GNx2Cp6Jzwj8XUaqlXF8EdLuD9cB0SQ/XCSOBrz0BH5Y125gK5GK+XKdlj9OZx8Sxg8nE5QKCR/YZ1OqMwR/nwC+rUnVMQ2fsxn+qO1zMc+RgsOwLTgFkxx4Iobh+IJWIj43mF2ZVqoCzFSpnNQQZ/Yh/eLWEUh/P56o7eyUSxX6rQDptO8TwPmj9JmbYF0kTjnmFoLkgPvZ5Vpgexqgi21jjWZeSrIOObwodCAZtwPMlR6HNV6L/xIHbhOcb2kEX6RIYLRnAMZV25kC8ENta7WDA7pTAaUjbNGhPydpXAMZ7fqbnrk2CiisaLiq5sTwA2iNU7h64nn5J1zos7Gz5SJbdgDZ5lC4umFc1FoBZ1InBpxowE5faYDmloI3GyB7LwpeYIDskChYgXmwFByDy/9f2VQA3a2DSGf0qTH6RsLxupO2R7AWr4V/oCv1ajG9WNOJFHgVUqDsR0YAHoylHu9dTj3HMJ/2L3r/vRiv5gItK7lIFqFUyyniWyVKAOJcBz7BP4T0Sii8DTDd2na0GaQrfXC9FByIvxWaymdQBAyZM+y5hBTLwIGDBOdxUjFJECsPobPmrADpmBVTtCuGv/5n/HD8akNecQitMQoXD6+hf8BFxsPpr4nMNU9A2DJwSf4zrkh4J+PDM+IvLSSIxXlo/VB4XQ3Y/Qf6iLb/XA94VVikpg6o2sYhD8lbKZxd/nPbWVpMFB7vw0g+QuFZz5mrlFr03+itHV1V6BsD2HgzDwugTU45lkFReDQMPXrKVlHNIwgN/tPyEL0B4nU8gojFf8z4OB5BxOM/ZnwCjyAm4T/K/gDYFEzmEcQU/Af+M8PxU3kEMQ3/Mdsz/X/gRPw3g6e3D5/JI4gk/MfEk8wjiFn4jxmfwiOIVPw3m6dvzxweQczFf8z883gEMR//MfMv4BHEQvzHbOei/+n7YvzHHIclPIJIw3/M/Ev/py/L8B/T/mI5jyDSgV0IIn241zBtlFQDiXWdSC1SaDFBq9GJgX1EeRtEX/XBdPJfcOiPRnB1pPgBHNqZwmX1z7jo0uiKQNHhSFqnUMYRZkcF8Fyl8FnXsnapM5a2mUJSMyA1ASKTMLCGw44KoG0EhQfoELX7Cx7YSKjLAfYZNanRMJvqwM8+ivYYChewKbNg3QUx9c5F/A84y48KoH4MhfM3Jd+lB1sdpal9sPm1j60e1zNsV6nHJfuvcb2kcGG5cxjiaIXRImsHPvGsAN17u3VBZaZimpcugwggVplmx9hlSK7+JS1+hpOrANcTKBFV0BcVpL2r0yDiGdjFHkN6d2OPIV0iyTFEP1J1bMX3bbpdiL/DaBVB5B4TQB4WVWYOty/w9GcXenYM2dpSZWIovhBuItTnYW2zfKLZcXb//bHOHdOGaJ2h/jsHfwUce6gVHHupDENsvwRITWzkJ5cq5CJgtiRUiRSIq+UpiUeT6CmJ95SDc3UEmcDEs5JHEOi8AYONJs9TEu8viiQ1zHyreASBUI4mRdFShYJUu8UDJSXEY5DaWIOrIey7VqfhmxifEMA+dj4hoG0JKFyrDSk7KtB4IB8HjddpReFSmVQLBFga7SiRmlWmHg/4z0Lq1qxx4IzLWkPKFgvgxodqqAp0BxP4CKih5ySRarDaGHHmBFoX8LIM8mFFWJD29gSya6ZMC1i2+hIyAACkBLXAT6f1i3CGNx44VQzYUyGRqkmxFkgyA5VQwor0YVylQPlLqXBOGEuqlTjSDxtnOIskSFgHcgRSqULwcTOyCKWRCpFWp0b1AZ0sD7UyThvlBzcFqVLhDV6TJ4EAz9PO1t3G2t3OFnQHKBVAgWAAGcGeL2DfBtfIcGiDp02o6VdlDbCnU4tUWrVIFSpGtlyseeERBENLDPkyAIOLJLrUv5Gsb4IH5P44wRrWyVqT65npNuz6NtBpnnK5jTUrbaM+zc5Wn0ynb6LT3WtN30yngw8NhXxEigQU8iUniZUKiRQzXBm+ICzocr7kpAAykhm2pgFYoR7CLaAj3LkR+jb4kpN80K1V39ZMHkE4Q81ipCCKwi5ylbtIJgPsCFmURh2lQVrvnDnbQpf1hAIaZl+yOGmecrmVHR3hp2YE2UnBSjUzzE50UkjcYiZxQC5qZg4I1aiAmQOB7CxuMYwgO8mXZATZSd5aITMME72jNDXiAlhxQew1sJU5bt7aoFqwBNXEQgqZ4ZplyFpqJoOY4VrKcOuxs3WLYbU1W99WkMYcDTtbeqBAkJ2kHygY5lStjwtgxQWx6t7GrLvmOOnjWEhIITNcs0yNcQJxQcxwLWU49bjr14+7fr24g5nTB6lYMG500FcfS+cFFaAgPCL6QUJDRipCtcCGTqthpFkxwtaMsA0jDDYDBgi2A6C8hBipzPHdDvdjVYI1tj8DYbivwADeY0CYvQXS5X05524OxgcaICMVVNBXqQAnk0ykUkkVkSCWahL4Zaey8OXSeyU4Ij2x1KZfBDynuNGcfWsHu6wcsV/61YzilNvJqRMd0bBO6HanljS0NGrE14yBGVldYQKsdjIBVmU1a2bG1KhNSMpIoHQmQxE21gFRGgbkzYJwkDpc6DQc4c2NQJA7N787N7/+uIqgTPDp8d5F29N7kFrEqUGgkNRCrTcaAqQK6JI+AqK1smPh280jCKSjg/gwKOykFUkk4FLGyruHzosEL1Z2Kq0aRNjZon+dtOiXSgZbJlBd0tABJy0d5GbS0QF9Jh0nk5WdRh+is1nZcZFZ2en0IUY+PT7UZHsNHXDS0kFuJh0d0GfiYgIto0N0NmbLqBidPsTIx8VnY63Rh+h8NtZcfDbWOn2IkY/GRyt4wR9OrJMWBuxs8Q8rGcynJy5JLxxqLewFdwucSDcJZKIinbQs0F4fkMvpMFWSvafsY+C2ZyCn45y0rHvffmZ+WC8F6etnIbCyY6wXbgwzm34AYFgu98RDVWM8DoA24ET2eOBIajwwaK8P6LHaMya3Zu+pODjLzM5iSF+MlZ/RtZoxzGx6vJzOwjsPFWJ2Qr+eaolhZ9Qjh2G8NNxi9OQkoh5pEhIThyyykU0wYsKPRRKyiUFM5rEIQDbph4k6FrnHJvQQGUfTcoh0o+k3TJmxaDY2tYbJLhZBxjlDD6K1w2w4ortYFBmbFsNUFov+YlNekOaC1BaksyCFBWkrSFVBegpSUp421i6ySeBfLfjXX6kSK6CWLtJelUjo7xgqrIJ/9QPlo5Phf3EmV2mskNm3Q+jbBNGMMadBbwoM4oxJHl0uiF2OOU0BpFxI/egz0SCdKYj6YWViYsK6uejuxLpEMa5q6GZGXaCYFyn9nQ3f0Og7FOsyxbi+gZGM4vjEOYz3sSiZcwL61WeFqofgByepgxhpQvxDpQmptAClVoZ/YBqE9Wlq/EOlqak1DRaEnS1YEHa2eEFAjX38L/VpQzVj5oKAau74X5yJWhCMfuaj9c5aEwzQmwK5a+IIXS6IXY75BcDZxz/6TKw1AcEg6oeViYkJK1Ur6P5CjXQ/epCQWjU9oXa21IRS7T2KzwQ4n/BXnxNqZeL5xLA+TYh/qDQhlQbnD/3ANP18wrAa/1Bp9FIbrRapAPlnYw24VQqJvZAOWtmB2uhoKsiMtrEWuttYO4Vr4G4S6W5j7UJKZYAJJlMq1e421oFqnUIME0VqUgO2GmGMGvw4SSTucMtwh5uEO/yCQViqAP+K4t3RhUkjjVSw57oA+JTSJ3rK5e52tqAJYPOKdLezhU2ws0VNsLNFTQCJqAl2trAJcL26w0XqDpelO1wwICwFnCrQBDtbdhPoNhwDbdCnIsqA6quQEQ6iw3a2QkYYzLE+vz6sjwf59WEaj1CkZVaBQFYqoyIE0jipsiyQlcqoFJcFE0PKlVpwLLjb2fqrlRCwsYZTAE0dPNEq0ENBDMjOVsiCguCw6csxIWYaKMeEguANnDIw8SABocCek+OUDzKhdBIJJegIwkWAOQcKgVmTaLQatZgGA5V0ELifZgP6NLd4kVjLKMSGQeaaMcxcQPVBH1DSQbpOGtCncUpzsLHr1BfXxwEjKzrgpI9j53Bi1AP42xJSphXRUI2xPgHkFzJS7qpWqpjxJ3kEAYyUQDzi2oPJQCGASB9yxhYUkHlBhwKV+jDoCBtipsLmMgtyIuiB4aJgRIKO60P46kDfHU7RfuhAqqdcrgc4OCDVygQ56Z5yeW0lGHFg4vQhqp/UdLIhZioHBat3rOXBRcFcMxIynkqWkPFg+mAAzC8MQAkSpPRxyJ0OMZhjgZDDViOiJlOK4nmdBmcgOIXQOWpjLQWAFLE3kASTSgESTbmcigWcMA1k0yOY+gXZNBRgQwW8pRoWMwfqhGpqxmAOEFIU9GN44af5WQYEAQ273dRqmShBqdPSEtc4tVSL9CflUPBWU1UG0DaPkP8fKHaXSzVIBVynUipgeSA44xTqw6cVnKAAlyko70N8foR0z7s8RjI0u8dINoiRwGoYamAirVQTAdxLxeikaijghF6yCML/sQDqSox/jHT0KbmgJ3AUrK9QolPJpGJg6yAhI6AkEDQcSCuhXDksbPVj5K/jPG4H1tuMkCokzCJAJi2F/Dg+Kg4bCuwLcP2Vj5HNObIX/0tJvUE5LN6yCMlHqbK2RcgvGUvpRz/oDEwOnDFGSMcXobZMK0L45uBfuhCaZDTG+OEIEXAkDWPgsBK5RQLCGPAsitBbRieKkG8WB5birT7f5yJkD03l4ypb/bULQOfniQD6HeK29wxP71/0LIfHfI6WQyL2qAYaZgNmORg1GEBNgEFK3RMx08NlbNnheQ7uCxz4Ige+BM6PeBV81IEZf5lHEPCRB0bcL47s/goHlxuUZSPOL2CKdgcidUuC8H+K7MmdgXAUSEmhrJiUYIm+gozXhgIHzGKlTibh00sV6csxjBQSnyLfB2w1FbFSDfYOvV4C7UCP8jWX/RTZmnB8p+mL6j3Z6Z3vAR2UWsrVUh/W5kaVtXwmqOEj+S91YQkFQXjjMswz7yqPIK4x1gzwU3idAd/gwDc58C0OfJtHEHd4el2su5z0e5y5vM+jbSeAUzlaVqBBSw4uTGol4sWJ5ksD3lAJ1ZCRcGMDGhw0YPYcfQttniPdli7P0bro+Rz5hOv3XADbY/8cfYdD8a/7c/TdCvEvtS8iZ+rsdj+A7wyAlkpGiWTgTTCUTvXzIaefJphOEqI2Eo8YfoIf8wiiiKf3I/yEM2ZPeQTxjAE/5xHECwb8kkcQrxhwMY8gXjPgNzyCeMuYkxKOH+J3HPg9p+0feJQfJ7T/UBMRCiYOKuugVLSNYGUaejYIYv8LNP7UfOS/QONNzQc1P9x5OfkCnVPU/Fx9gfLfxPFPXqA9n6lb4Qk0azh3N66f+o8cuBTvTX4qtuYxfU4Ap2nKCPDuHCmSE0TGS+SPk50bvS8A3TmA/fAl0oFBBuUaLSB6EjANxaz7E9T7gJSqp0ILX8BhqLk40c56GJFYG4WRSywmNRr8Op5eeQf2kZrzzzz6/TwhOrSUwBtRoFIJBIk++AujckDLCmdocyGEJgHEF8Z62m8I6DiwEnxFcjJCSsoksGd+Kr1HQGC7gY5MeORDowBlBPLRSFkKADg8gV/DP/fDV8jvZtUrNL8NigWwXtNiQQ0bAup4BMQUqo/y2A762Et/1gMbmWJEP1FnJdumQgRHEfoRZeHRx+h7QhCzi5He785i5K/uX+HS8OOipNCxhypBqoi8XYx0JRmkBWH2GrWNogloy0Z8BPd6LSBMOet7jyEl60cM9wjgoLn3EL5YqSYdHBQ6uYMDfirDwcFXqQCKUYN1NtZD/KNECq1SDralwcDWavZr9F0te43oOQpPhI01FdTpg1JGrJ0tnVcf/KfqpXa2Q/5VMxn5pP8StY31kFHQ55AfdhyEpJ5+KrRtIVdIzPH7CmgQaaRCqgmlXCzJReroGvtIGa3DB6gOZD7LTC+HZwJlWUqb6LpDY4lAJYog2Ti/Qbk/KsE4Hzwl8RyLH0RB6r13AZ/9b5GNUa05I+EuQfi/RbqTtWODy5TQ4jx6H5nQXBHRE0g7N1aq1upEMiYhSxAr3yK9YSZ1e/0tWkM11i91iIPz5K2A7ZMTeHkCGTVybBAH7LqQyVe9ErTXOjjofSrblgjo92iocfyO9eO0YCNXqrA+np+Kop7QrDO/ErbM7gcP0430zqlPyzIkCKzvy6JTeZgnQiq01LHOKlcBeIbATwsmQH8ydN0ruf77OfAvqj8cGf1vTr4/HLiaA8ODkwEbcOA6HNiQA/ON2LCRMfMbAL0iFVw9kLrGBCEEUwnfcmOn8YwJwlkaKUyQSxUaXUSEVCwFmyxtr8d7j9YNdS93Q+6RCMH7mvuesTFBuJISnYpSJmUvcugnErsKI8a8R+fxpADkE7w31jtmz58neiCHUUc9Y4LwEalYcfWNwdyooeqwp8QN6OMjhRWNMEoaoXWCL7C4UYZXBP0fWL8mxoBnGQmK0rQu8KjuL9IA56SsehoYE4STGGxHrtAghlK4odIbgvRwDXDNrtVE1UxvBNupEKtJLdnYWH9+mxoThBkDbmKs34PAUCJ6F9q9a6BaPrwD0h4pWUPuKYn3Bs5IwcemILWiSOia1E8BnPA4yWRO0P8OZ0zNOWusui7VT/ZswCNPv13T+ZvCNaQQqRMCIM2HqCaFN6oZOfTyJEkgoSZJEnhlQX0Ff82MIY/PSR0pkkkjgb53KAzo9239CDDrdOch3gKYq+bGelq9BfDnZazP19KY9f6YL+KW6tO9qX0GavBqE7yVSpVnhJtMQ7opJM5qNQmeEoslQyWkShvlrPbkjl0r0Hfk5wRruAHGFlpFkJmnVqq8gU86D1ILfdOhaBglJLXwN5Bkr7PWxlDWCJRF5ODki8SaI+4ozh1BlB6OkAoE0ao0QjoUROnECKlAEK3WIqRDQbRqipAOBdHqJVg3wB3D7hiWk0DkAvdEzpjsNYSyNTqJim9jjOVGnPi2xliWo9Booc4BEM16QAUDD6hE4AEVBTygTB2k2tl6QMG+BxTee0BpvAcJhB4eQKDiAdroAYQnHiQtKPNEnaMBJHeG7hNUahIUg1JGfQRUJWdEeEK2KzPCzhZ5ogjVTzckvlFQBBytMJIQDMhVFIL3ZUYKvDLXWjJUAi51nDiNmvX+SztjgojCl2JDvLf94fBt2hsTBHANGKomIyAqrZIO6lsj0WgBr0mjFoMffatAPCJ61WIUYOL2AfcmgAepyWHjUuBDTcP2c8ZZKx2MAd2RgBBqRZGM7YXmifCNCUKplkDTBmBdwRrUSB283UIIcVaYKOh6OhoDv5tAXR9V5SSOCSBlQjLGBa1Fau/txNkLOxsDPiq0qoUeYrXqBCl6BgD4faasZFTAgESC3EDz+d0xqFXyiV5f0XtYfl8RHUb5DdHjod+kUzCxANsc7VfEAwXjiu7UAaTYA7gdZrdRAPYLzlnTxRjofkLHeaC70NiYVGuwFzWgqoqCvkq4v8ZgZz3QtZ2NlVu8AmRQQFeESvAvsLqChla0USuwwtMgr93A/gLeHjkcUw1BCMqQb0nPMkRjUvcmKl5WhngJHPyav1RA23oml6H73vYyxMNg0rMU7jNl6A0pvggeZvQNkuKEUPmelaF3AKl88DVgPbuExlevHNFCIrYp61+aqmcp9itH5YPK0V2S4gBS8apyxGfhjrHex7icJJH9uFyq0IGruiiWVIsiSeiMQcNXAc+hVJOUEXwHvig20pGYXY7e47tRjvg5f3u/DdYJzz/aLSPxthzxs/+xDPKYQpdp+w2VQZ7fKQ49OhWR13k2PaiEfqbBu5sJWhLb2Ph/E0B/AggH+ESQnUeNd8NqKb7sG7q/QxsnLGbBvuaBwxDgHgH18l/guv5NAN8UoxxMIYYvRKnhy4GDcr1HcPhQAWNNAKcyoliRVIY3ybbf0TsC9P2KYkew2sD2WRv1HclyGNxmXHkNfzhsNJBQIYg135ENvL5OdFMl9b6ZwNMf1EOfDG+xMqmY1BCPvyNb1n8or/dtBH3ush2Kg++m7Q80l6w3MqhCSPJUAxfFHA/7gezs/zdlmUz8NT9Q/+GbsHQO5uOwLE59TWNfNZ859ZCN+PiHAL43ZBluBv28jMJvmFEweMvGjgHfNPqbv3Dgh0UsUgE3LDJSQeVfa/R3P09heGDCwNN08PaKHsgIg0YP0GyYWFyB+Gm7+pkRY4GeHrYZhfTtcOiTnHVGdOWcdd04cHcO3ITDl7bkpPcwZvmYosxOpVj3v4bzAtB+75/IrzHlQ6NxHeSH7Z/waOnSBLHsJzoHqPJ1/kV5tnMDhOf2T8Q7ofDU+xd46GWFUBBtK9H+R+GoMkA4mGPU05gggPt1lZqMpeaW8aAS4uc76HcvR34v/DiPIz++EvV1XSU68/RyUzKe8gKmF0rqZal5legcPFmJ+FNMz/rYtJKRmyCo/J8rkW949gaDRh9tYQ4M+XaEVMvXM1ahGAKMFvRFjfdwUHcVkhMPrkK8Y68q1CZUN3TiR3eLY3eMDHMx/yC5Cs0Xy9McEA5pCOJolYB+m5fSdehlzKYpexuz13IfY4IAt2rqcRu4v4YiR/7gYRdIlLGe1MFGtNDo829Pv+AANAPGjyCEAgfZBBE3A81hvV+ILmyGf/m/0Nhb/kIyLzsc7/wL0ShjMRyBfz0jmE9qOwMhgkxDhuJbvywhMIpUgF9wo33YBPlfGU1w/Xr/9Y0M9tvXv5CvDuo9hFENkF+jKFKEB+jv/Rr2G8Vz+wXu28we/K/HBextTAQMH0/n8VuvdSneGpjwUgHRsFRAmJUif35NsB8Mc+yHyhT7amqEZTX1MdzwpIDodFJA2JwUEC4nBUTQSQEx8aSASDgpIBadFBBrTgqI7JMCYs9JJBvh4XuYEV5jPFw/D7fHEP9RbQPx++cKiPdfBcSXrwLi1xMBUQ5+vwqIOmUCwgjQuWUCwrRMQJiXCYjmZQKidZmAaF8moHFRf8a43edPCohLJwXE1ZMC4vpJAXHrpIB4eFJA0JQGR9Dz+Q8aE0y/4Y+WncmsGvGmxbSjN3YG22q0ThGhBSkxVnogTqf9JKoS+OGkNo4kFfr3jqBQR6KniICukYYgtNXIV1R/fL41x/41QDLSAaFeCAJSLW2UDrvGUsPLp75cd+zng72vYe+A6GUcRsUO/Ipq9N4WVf4d9X4f1lEC2xybequJhSr7k/gbTQDPglA06MCDOpBmdLf8P+29Z3hU1dYAvM+Zmj70DgOXAwGSkDKZFGogASKhSBKKoMkkM0lGkpkwBYighmZFEeRasCGiIsV27WJHLFcFFTuKerEXUNHrvQL53r3X2ufsczIBvPd7n+/98eV54Mzafa/d1l5r7bVKR4Etq0c6tDs4kBlyUzPQPQHzPIp5OLzYAHN/PkafrP/XfLD+X/d7KvKTR9r+nA9h7n8yyQ5+y8qYXhvjoNILibNacEBQrXMVhJca7ykkSVTbps5PeQp4Lhc6Oz7L9e4J+V05G/2aOL1+ej+g8mEq3uOh2hJQrcagOQewAcVSaWYVnb6lDZ4o9bLmR9U/sLmo06xqZ6aCVjrHV1MUDvuaahpbQJKGNmHY/QPsP6jyKGr3rQ/KFHrg/u1AO4xdMc6JdpqulxXytKyQD2SFWE0K6WdSSI5JIRNNCqk2KSRiUsg6k0LuMylY+tFx8P19HB936/59E787UTZWmArjTY99Pu7sh44+eN0Dxff/695HdrXsnLij6/bvtr189/a7NtzZujV8x8ItDbefv7n5tmW3XnHLLTc/fNObm47e2OXGwht811973Z6//r4xc+PCa+/Z8O36jPXRa55eF79u3tXbrzq5tmLtzittV3qv2HO5cvnll/146exLn71kxCU3rrGvaVn9/SrPqvdXzlz5yoqSFc+3jm+V25JPKH9M/lf4n9t//fYX18+XHv3Hj5N/+Nt3Q7+94+uhXz34xcTDBz+/4DPnp3//5MKPXQd/+vBvHyx7f8p7vd/96cDrb+96a8Oby/b7981/4+zXz3ptyt/PenXGK3Nf9r4U2Xvpi7fsefSFA88fe677c6Of9T1zzdNPP3Vk9192z3ty/ROvPR7/+FmPrX10/yM9Hql+mHGTZvtqC1VxErJK2L2GEa0B70jGkfRHfHr7KJmGu0WWja8NxkGlIoJIyMPkucCv8QecNSHg7QGfDyY3n5gelMtohpeqSX2ug0T/h5b6Eu0hcpjyr3sK8LcIzxviYH5jHpYA1gze0VXX7AQJBltm6k/tih2OMNMsoHkhrkJVpusJVfndrkK+bLSsHaYI+Zhfp0AELWYFwZiwmD6ck3Pa9BxxKrKY0W22/ugJFqilzALgvzqZvE1h+ydPjopwnpA/0iKQ7+Wl04qdwWbwmpK5lJAym8JsDfkbqWeTRl1cs01hNBgvU8dh0/U/J/t0GBJTnAGGoqctMfpnSzztKEbPYBTV+RaHtpiJJ9y0za6QJk+9v5ZOZMqvoVSU1xdhKC901nioOg+NxktluqpxM4ayN6OexjHkfrvC5vtXdoXRplx2LwsbmJO0fm4MlzBc3eypSe66Rk99uNCZGaewvVUrwy6URb7h+liZS+tqqJquOPbeOJwXTc1w6gg8l0I4G4CqUlFJyGVxCtOdFMqtNZa7G8tFlRSwXAtWTKthimfUUQczlPb5NE5hNJ1Qns9YXmI8lKet+8qKSen5YPzYH6hXb+EL6enGHVL5PDQOKk/NXAqenEllvAJ7SLzCaH+tgXy8CFkdD2uCz4OzZLBfyuGXJf2+9C7CaPI1bKTv+fm4P15hZ6Jeoy49WJde52/0oTTTwLcYTekaypXyghOSMTZNl20sleEAm5fl4XYLxzGZC52lQk1oHovu15Sh7Qz72DqvSQDcLk+AOcnHoYbJlZ1IVBQ6NyYA3rR5Fi/O2a8Zz4AdCKy1WLo2c7Sx41F+r3qQADfdE1EVDCHJmfqG4kMe8dQ7PfRtQk2U6VtMSQR8N/UC3wIP4H0TdNbrmBmJpYkK2DHGNLPRXwmNxXkVaKFeZKmVwEAQguhv/BWkCSnMMiwCMpEJDf05Wb6lAZoF0wfoEASC7P9oYyP9gv4Qr/uwGbCaGvLVseYNY7+gJvjtCbTAD9ok/ktMAA3CjIvgC43CAmjT4Kc/J4tXENCKwp+0dTyQ/abFUg/drK6Qr84TaAn56mhH8KPGcGzQ1ItCvjqonmahdYd8df6cLFZSQM1JfzH/ZhCAP1n1qaDRAfgYpgvCfusDKYb0IQxVxqCYeRF5hloWGQIQnYZqGV71YRTBxha3r7J9GMO3MRkGCtgI+eqG6VEhhsD4qCAOlA5un0kYOq3oRSKkDuYwXc/FABheoWntqjAE4XDrkqhhFAuD6TrB2RhtbERYXTelFqJb524L2Gnm8C4Z+AYcfhLh9vdQyokELiN1JwC/qlACAHddXsZNeGfm8J0y2ptH+G8I0ydC2v5Ed6yQL+y/gP1i96cwnORfO4C2E2hb1ZChMz2dykUQO6h0zlnVYJeTRaX7FvtCLREqvUtHu9+qeeuunRTm310rH6UCrHZCIp1gr+Rt5Y6BhSaSjZ0UdocTThW243tARoqbN7cZGp5WWVE0oaykanLZjAlFZeVFFZWziipKp0+umlQ2o6iiqmJGVen0ivLSydOrSuZWlEwvL50xfVbJpJJZJdMnllRVzJtZUj6tsqyitGp2UVllyYTKsqlV00qmzZg1j9K3s0rKiuaWFFfR3xVTZpUUFZeXTymaVVJcVTK7ZNa8iim0HoyoKCotq5pYVFbG6sVCoaiSuRNLZlaUzpheDrDbxZpSXFJcNXHG9PKKiTOmzZwxvWR6RdW0GcUlZZMqp0+kqavUdmI+mrpi1oyyyRMnVpZXzJhWNbNocklVeek5JeWGIqA37UKnl5RXlBRXTS+a1j5u2oxZJVWTyoomt4+hXZlZVlI1q6Sictb08rKSyUUT51VpvZo8ERBZXlE0cWpV+ZzSiokUM3NKi0uqimaVVkyZVlJROvFQJ4Xxxiid8kMnhd3d6Tlv7gzhTFets8J4tJRGGNhZYfJ0erdPw9/0fpLXWWFpx1MfFp0VRqdQv+WTOyugfikRMr2zArIZmZD6zgrwccyENHcGeoxWsBjz0gpWdobzmVawtjPQKLSCjdg2WsEWbBut4IHOCvNnQSvYw9MQM3mrs4K0i50c6Kww/jOt4IvOMO9pBX90VtCe6njSowvQRbSCrC4K6x+t4OwuPC+Ra7oonNo2n9+Ft4HYW7Tfjg96gV+W89GnxfgJKcRXV+cDjQdGYzOqMaYuA+V2dFUYf4pTTUhasmuhRm4xxiuqT3BvQNQ/bkC9SkaQzxpWL3g0C6WeTp8lBu8TJbbBUAZlX4GL6yo8OcjJcQ5Sj/5GwccQSqgFq8Zc0FZIj+d0NYXgOYqQr7spTK566vywj2XU+xhimEy8scXJGXAQ+2dK0L9j1XHIClWxsPi4wlkNImHh+UI12dpdYTomr3SHu8RvFoWtr5po40K+uaqWrME1tiaOVKV57e8SHLfLkN+mG0FwDMynklaeqr1j6A1FPd4r2j0ZoXbaeyjwbpepDoEcUECgxrYM6U8jXl06pfJC9KannUPbeihMls/7Md4CfEEOn2vhfs11r4m5Lwd8cYoY4y/g1Ae6aPIf3+WqamI4Gab0hL2tqiesYQ0trIOG53Vam/wyYXfeiKc+zMNewnsCW7zcbYjqDKXGF9PVkXCl1t7O6jgu5KeesJ8ex7by+5iaqlDU59ZPjsG9oF+5vWDv4m2ltoyZTgdXxdaGQ8SmOrd5MtQworMExDv0giW8vuTlH5bBrwOHj8rgT4TD99N3Oer7CLfLOPHZ6nG70mv8EVRTQ1IHJ96fo3T0eUUfLZwgFWb5f0VTGTLHqEpT1GJujqLhCHUQTRXI6LwRhsGIEfr4hKWm08uDG8bQsJZX5QUZysStBaYlFuqJOJuC4YiTpQo7U12T/RPomVLRB8675j4KrLkzGB++SE5VT/bw4VAVtffTR2F6Bh/1gfOd4zBWFYg0XoUItgjYFR3s8GWhzrUeZvCfJcJpfA8TwvuYifBmRwunfpCz1DfoWvhfzCDTjnjq1bChZqLjhcGTetBRibVAX+4L9ML+vnAWvNkX1vrBvnoenp4fSD6NzQ9sH87T8/Y9h3wr3j7YUfkT/lg7CCEN/YBmWtwPaH22SHgBuBnzEzNWEff0A9rnsX4wt3hWHEXVBECs2g9j3l8wr9sNvsAuQZlRfe0pFwx9PYWGCMIksz+cXbyMa1DPgDoQh1OQFgAWBcLRZvXxeqS/wnRvxolpG/y+kCdU29DC+Flen6+50MmNNDRHGpxpThSrw9GLoWRzf6DdXukPNKZaHqbGvaLOH4ATjjfiaH+Fne3q9biJPcfzoQOXP7dJsdOC1Qri+LDmxgUUBpmqCdNxpeHpsGXV+UA9SX/esqs+DJ3Pi60RPC2hEf8glldfy4uhvLcBCqN/setwIgPvAAta0uAL0DwAUbVVbkr/2ACF6ZcC7+E/qz/TqTCdSH39WOLpGkDXgRNpUV1+yqXwB6Iewb0OKwWErmH2Aqe9X4CHnArTSz2zsjpo0UCF7XN8fsdLsD9xOEEC3xD08NZrTRPiHQg0acz5BQuDNsbjD/AtmTUg5Kulrymjzc5omB43qmZsdX1ttbYyI0FhXZL7BsLYjbcRsg3vkkX07Q59a0XfrdF3dPQdik1rexPKitmSgL7z5c7J+hpfHdUFVpc7cQ5SVJsOnHc+2UbIFJuw/9Hu6QQb+v2nYRCcg9FBMeUi7FpWqOm/QsvoawRnyFcbBel7PT4T2DwI5tuZllFNHxtQiz3VhBwepDD+VW0wUOevj6Iyda0nEAz4a8G1kyq8V0ls2iOqQUyTVmuv8qrD7KIHu1XIV5vOGpgOqsMMCWlsA1B9ldAV5Kev3GqrWNJqkBwsjWjjc5NEyFmx+WfaSyvnaKdaBvXPKczNLShXCzcwAyRUgdEfoOqTjZzfBO5al/hUCp5tlQKTif7U5iO73tGVTBmUUaZVURdtbGwR6rxbAt9b8jlwNlJ9urPpHUfFHwxF7IsGLgNj4j+3E7dbyI2NwSV0Lust+ixp8Nc2aIurvlbQ0VavU6qeKnN0EwykU76oev8Mq8L2M9sfNYqfsutPkUVLyL3o8SJ0u9dpSjHujljEafsJ88owCHWNQQ9VeE1vpsox4vjxvZLJw2OPKyG/9wX+zH6UDYlqsHirxr0G5b5LPJQKD4V93hhJQchJo2m/qEdmurk2+sBGvLkX6G92xbnI4Q9kuMtz+EPkHcfQv6Jrf7QzNcs5erQz2zVMy/M+6pRx+D0T6Fpx+C0DvAvpXxHuJsDPmQjbA2Ntl9rCg42T75tbhwIPm/stpS6M0DAUUERMJ5myrJqa/BHQCKevwHidn5pAR0+EJ2nlUaVIj6FEtvt2VN73hvJmmWGMOTzVTJg/Lf1GCuuztsHHXKx6oyFweKtuvmB1gJdRZgbZg+pDmYpU6CfYvmE8z3ITUfWk+VlVaiPkLJtmO8zjb1TTbzH041YcG6bIKZwKdI6NHwY8AJ7WZgb9Ng47zLD3cbiLAX7CDG8pRJje3yhz0fg+i68d2r7hguzAoD/ONElAwd74EiyWVLjQKQ8HepmX3wvvWRz+BuvT8b74BqPp2Pu4r3Ke7wDmE/imPHe42Vfrr/P7BBfq+t7yMl63YN2oR0sP4mpfwFvNtwkP3yjo6q+h6rWwWwjtWG2B9d++jFPsH/A2jdFqASoI51uPh8voeb3wKmr0COBZd6Bj8mmMvYUqXUItVKuVSk1Th6ltpvKubh3qBzAag6tj0DbTaPCKzqIyl2al0X3XV6h6rPaEYYFAd9RLiKBvKMQ2Bb2+xg4uJVTVJgBHX4N2ccGXU0uEQkRXdeShEQq7538xQiEbUa9arEt4ksSPDn6eUD4H9zNPnRyTtWlAizPFUcNoiPx69eJFeWRpIPvAech5tirrX/V1lg56F+p7MLwtdPAajPniTEsHWvjaLuDnvRH16s+0DCcccfimq9DZnA53N15eNZbH4WuQF83h9ajzyeGVBpjyrnuLb0h407F6vEUjn0eVJzpDviaPP0BnGKwTpAVVHtCQDLhv83pSZMLlB/SZAjgs58UI6ia8gEJnyXSuOSeoA5GGDIX5dVXXnHan5i79nGlIwt2fAbyL1zL0+jTASu3w6kEOZyjsjRFv+2cy+EA2cOzVJvD6VEqPvpcdCXNl9Eg4A3hZ/5QB3zyet80D7WEeEoMRePSJd1c17SUjFbbu9Y8SQp5Ava9QvZWNHkN5fsyg186RIPc4Ix1NkV/OtISQXc7eRnkaD45U2FtQ3o/rkJcnqA1wkjPMeSr4xDMaiJWIyuAy4V6GUif9jdtJyPJM5NVoehanLF9NQH3XZcKecqZ5GfcjTMj7mQqjxbQ9XWWLaBOMnt1ZCltHfPzOtB5utXJ8FtRT6wkMjTibPQF/LdoxBWQwAynajApzvA+2AP3RwV02hp7gmbZMFbWQD7MURofoWY2n4jQS0jUb9rkzrQ3uiGEyJRvqEh68qWwgEeGt2cALNK5lSsVwysBZqP6K2cb7s2H9vJgNY6fKc6jBikL4xMrJ3vGE05yNwWBzOI0dov466vC+xRkMNLbQS6U3WutjvAcqkMGroy+gY+PpT8q+OQrz8b2uF8zT+7MAf4XaARCzD1yudFkO4KMh0uLEu3sNfcHsW+wPRsONLfzQpJsmnztB5JvHoLn43Y58n8P1SgA3IuXF5r0LcMj5w7zsBVbCdFp0NDB0QZcm3M72MH/5RAVaMOoBbkUC99JGlwK2kSAUkJwaHgbcEgikHmXpRPOo7ks1G6N8/9zqgjX3lgvmkL4d/kB7th8hx1wK49vH3KNom3IBH4azgYzPBfy0k1lrj1dUtoLxvi5cqYUeUgo0wCzVzs1VyKz2ZetlgwZLsA/lAg8e1dqFdiBDz9O4xNMSRuK7RRXsqAcE1QHIhf3acM0X+6SxUqg+ils55bkpWipe4FbY+yS+vvmcWWICPUxVLZ9tx01Br7/OX4tkLbLCw5rha0I2u2GsVX0vduZXs6QZqPgcalqSUQ1LmDU67Kz252RXswlY7Xe7KG31vhto99/dsGe0G0/hCQ9isj7ojDSEgtH6BqdHtNLIso4ew/UFCUnNUxjvjj8bCuGY+4U1e8QC8mJDPwDjYkconzMP9Ld5W7U7INtS9UjDQNz0dLg7kKewe6ehTlTNEOocfmrsdc1XmOyG9+UOM9y1OLzdTBidZcBpbTTEHkC2N/sgyLud889la4O9M9PkKfPpm/Pl+dD+B/OBfng5X1HfPBNhb0MjM/jUE5gYgno9+T4f5i9v79cmvYwRGLdIKncgw0srABleYYF+X6VLtJD934HsrwD0riIFoKPV0Rqiepjiu/XNBXra9SMT8AwM+VHcpFHxnNgUSHF27H1aAPeNjph2HKfOQtCR4PX+4gD60J+TTW1k5mTXuV2Ls7LzuTzUZgF5KIe/Rh4Yh78xgw49h38wxP9ohnfKHP7IEH8QeWgcbjPr60vA+lWmA+iOcPycWq2SMU4hIy9vkxnsHIAjA09zYaxxpc/ScaTYIy4v2/voa0h/XTXg2zcK9sFatK8eI22EumJniel9b9Sp99jqkK8uw7eoGjnQ1I4OK7ka6LDq9AB4UXx2FNyrDOWEmSUrWOURz0ImH4n46kNo2j9M7KOBfusgH70v0keWTGagvW2GvONHK2xvO5Mz0tPBKbl8tML4hnzeVTqAB6i9tWhPkPC0czHt6emAMDk+GsalIzx31D5+N0wdA+uIEIf2ZIweE0v4NgSvRxhPG5SRqtkcwKFeOAZknob6+as1npuV1Q7dmvYZ68y2MXCX8/roG7RIB1NSm2bHxijs7Td9Sgs2H53t5QP0bjIWzh3fUn+Y2b0QRB8ajQpCLWcwGkIJkzp2exNAVwmvDFSHAM5rhhd6hDZ7GCM4HAkyy08ob1w7lt+lIrUNVezpbLsOif3ZMxb6w2Z1kIp71YxcDkTl/7qFdmysno8jOQiZfNq5w02zhUn+ONAj0L8wZicH069sGBeTjoRtAAhATesmTHXqDINKGUURT/1l4xSm8xurHGrorl1ZtP9NKunBrvycEqf7wv5xCinpqDyKMWN5gaB4TIed42Hed5Tf2Cad/wr1RQwh1eMVMvZPlMPa4qP+ZXCMhUZtGw/zX9R48AbZqjMua39+mnq0kmPj4R5yJvmy3FrGtCKYn2eQj3iL9HRw+/UeDFSxR4eRIPYXdEGB8Kdlp+m03/T3CXJDkUJmxMIjrNhIEOYBXK38Ec20TZMwE0U6jPJPi0CvLGUCrBHOJxCIykLOB2BEaAstmTWbE5VhX6SalE2AN5m1ngCcOEyLCOjU6npfpFrjkMTcCNZifl3fKC4ngEws1r5SFT51oYcnKKJ8QJ83euq8zomQ95T3NAGXCybCviTUhXT+GTSUELJ2ok4vxpD/NI2leJoY84yB/lJzXcA44KPDLXIzzhkWHm3yhfy17A6w2FdLLaNw/WlqP6ZYIZWnKp8xc05VvjaZebGNxaDDrLsfaoUJtESh0fah0xnp4DCn9FAxjN2xYqC/T7keA/QffQyFpzBc1QUmRpiklsSYmx3lVxcdpTdZx9WTtKEE9nd/ThbjeeCTfvVc2pgCdj70+KBnDhu9QpGfiaQ8H7RgCMdsf4miyWKN48SK+g8GisraJynMlkmMtp1+sCgfaBLMz9OMiUCT6Tc/viMjg53snhRzTNT8sTa745Ngj+N1E3KrivuuyQT0jE7Bc2DbWLtLcxrcmNm64XpU9ACshpeD1YSUTQaeD69r/hnUFW5fVz6rKsvNPmdS8WOTFWYnh9d7YSK85zPUyzb5DvsYu0skcwro3vGyrz2Dstv1qYOy12LZqu1AYReDVxbVhU6N+4G6f/z1BSHvTwFa9tcpMNdOyQv5DwfVWaqQ8tOVHWMQz6Ts5Vg2x62cFHO+6PlI/2E/vjbUNedM6vp/YXJWnKUw+Sevt0sKYXaEVFlJCtGdDbwF+klAyMGzgJfOxzoY8ni99NoarVlKHefw8j4+gzVH2WJLaxvq/xM8pk1VmF06Xt/DZ7AeYtcXe1HcPFVhOjyn5ev9hx34fiq8a1XPojOZB/9FfQvKoD5CNmny1WR423e6Maptav6ztbLH13S+7S9TmK1SXueLifBO4XTjFLPOGFUUT1PIlDMZp/+iExunKcwWG+/DvUkx8dZ+rP6LOu3ToU4i1PuADfQXKCeitkVTagxrv+prDUqKMZQTDYqIwsu+JZQDQM3yNDT5Iv7aiMffCMx6VAml5j/BDBNTFVEtavFXNaiw0KFKaZjJx8HMJ5WLoM0vwQpYmFm9rKKVwi9vKNgMvyhDEH5R2SL8YgwH/Bmq8tfx3JHaBvjJuEbwsy4nu8q3SPtd7xN+R7TfjUJ4oxAe4OFul1aO26WVQ39HtN+NQnijEM7L8Qvt8Qvl09/BEP4W6vKLed0uNQ21yM/TgCUr/puy+eE3sBjxN5saWr88NWEB8Ho1wOtfrAFNnqUC4A8IQLRRxFK9BoSjNVq/tXoooNbjdgn1uF1CPRRQ66GAWg/DRL0GhKM1/pzsDLVQikJPQABqGy8QgMgF4ghcQLOqZdOwcEMjDVNbT8OWBkN+t0uognYiIABaFRSICACtwu0SqqAtbmikYVoVbhetgjKg/TlZ6gBqszccDTf7eH2ck6ktFjoLEKIODwI+zMbZltqY1Pr8wnA1Bj3CgIcXhYSJKqSkU1hLSduvpvSzpVQV1kFRAYro4iJiXKMuX6Mun1Yfg3SlNOpKCQUjjTpIWDxCywCKClBEFxcR4xp1+Rp1+YSWsaWtS6krRWgZQNgycM5R74uIYKMvoNLdYniYJ1P5d8JA1/j5nGAOOcTd0tckgHR06xqDfM9gg02dsmhghLqQ1wZYTEzHW0jsdomJ/TlZVYzlogeF8fH6F4uDR0Fx9KjjTz0oxIYbQmIsBcVYrVV+2EfEsRArougXKkJQiBUrQlCM1SqCpyLq2AEY1oMRHyYGD0hqYgDVxGx5aytXdWsijj41eCvCdX4+/hp7U4QpawRg9Jan1kYR1hxsrg1EDAjMF3Y0rzcrW4B16TkehPhwtEZNj75tqFUv9eqgiwnr0aD1DGCtZ4g1de/jfqT8ejT6L9BhSpiEWkBUPJk8IV9YdxALAXzLydftMyzAOOGy3Pq9IF+3AeiycJSJWVhATjYEAOEk4AIDNGRggIYNDNDQgQEaPihFQDWh1akApIBAVQmWyBBjjGitYubthLMi2NxCaT7hTNCFcBxluY1Yy3KLaKPmbGnf9WgScmkhhn2W4rxdSJT3CtzzCIekOgV5LiEEc1Ga16sjiNj5yZVTtEaDuVHd4BqCYJpxZq8xjO7AupWpW52MvvI1BSM+ildjrXrUdBymR09TtLGKkvAxw6K6yeL1h2s9IS/SG1VAsYs9ULmg7QJpvzQGUR31j2jckKqobr42aZpDQegon/WMPoMZpz/m2bkCp1OswGi7QLqeYgUK06h9RfwA01WkC4y2CxQq0gWqc7GuyhM2jLGw7LRdHjCJjTKQABiq27J5mP6oix0KkwJ2qpihfA2wDdTYBl1o2BdpxwUUNwZ6YYuINRmDozGCNSQag6PabIlVtiE4VmqhbENwVHceGnutD46F+lDTEu1CZhiR/HZDokttGKl8bbKwZWKcLjwY30RqwRFfzNQQrEuNG56xl/pgtZeeQIuKKrCqF3uS6nc8IRxxC3nVojyBlpgLXXeWCvjSX9yE8EDscN3NTAhf2tEwiedvzPbox09/y4vVHn247hoXsz2GiRCjPUgWtGe7xsC8OMfqGNGsOhmkXdeWgS5CPGYEJOiParH1tQ31WoRYlG4jh70w7InE3rd5RLu9m0XE2r95ROw9XE8jCBH6bTt2PwwoqRNJktj9aBfR7mgw9qNdRLSDlWmgUdqvqnZjrs7L9jGBjmLUudkuRp2d+i2wg+0u1LQkvyoYio1jMQYpDIwMBCP+upZYMUs8/oiBDBZi+MiIZ6ieRtOjTWx1+56qM6B9V1WcxogKdBilYrV9VKxNKNS0JMstYs+AV4/X22FUoMOocLSmo6ilHY2Uvhm6KMZ37Gh8xRYaowIdRoktNEQJLWw/kuqgxIgKdBilDkr7KHVQdETO6eaGfgfUIbHDEaNxHQ0ZJeE7GrMst27QjONZ21DfwTaNQoYOBrvDcTO00xjX4cgZ2mmcQR3WByzZDuM6rA94rx3OIhEv+m1fh5cYM6Ljse240FNG0pYKke12IV2D2s1DXWz7qagfZcPswMiOkGSIbo+LUxSe5T516aeLp3S+Pr6Gb494IQpwHmUk1MLcEam2BaYafHo0W6lPCMGH8J/0nbNlDPgx2ovvfv9/P0b/nR8jjs+5MryV80QiVFePSvXOD/rRmkRtsLFRMHVAbbM6xzqjlFtVWDitiMqkd/RxMBnuJrTO3+T3Osc6wfZO9UJ4b87TPID+eSr4m/BwQ8gfWMjezfO3uNx7zOqFYNfj3VkOMpPqIZug3bNB1qjaF6D/ptsICUSbVDt19N8MG/jWpMYBiOD7byb1U0BfElNTReXQuYyMDNK1UWH+1MS0Z1Nfy8yIBCachAJZBJnvBPw9jVFBakQ9/prMNgMESpYKZZVTgxU8AnTAECr2RDwT6atFAcafE4Nen5ifjoQQVkJtsU5k1hnLVUsUYJOL9meWjZBKeJcjRqs4K7cR4veWBLwGOyF0boJP6oncYsF09kBPSHOelZDyYJMvI4OQ6iZFtf3A4ytthFC/q5PAVkJYxHOuYa+YTW11MVsPs5hBg5ooVfBn9sL8wUAw5K+n1uvQfRoaXwgzHeph5IMmha2jT5rgLZTOov2wYeRoE+jInsA20gdq/G2PIwBzIFUzvTRscAD039ICYGdaMwhPyPgA2InmdZUyv/KTmO/42VnZ+WKf+jMf3XXQ5lRqlY+QNQFoKxjjI2RjAOxVqr470GYjL18sr4sBR8yLGPUpHqIOSZypngj36Ze5lOf9MgBvtHh5/nxCEoOAB3+Wm/QMQv9hBpWChgTVcxL8f8w1+NacZxi7EbHaVUrb1eQLUxNuAeYTqqrBH4hw3KYy2wYZGRnDCNkYBJymgv4mC9wWBJuVqagjTQN3B+HdWCoVpWHe/Twv+tQ+HITyhblQCzaECDke1I9dqt/r7NkMY6zih/snopbowWGLX/9SOHOpc7lTt+Cg10ygB/jXG+JXt6RFzYr2Jsfwkl2zY2BQ9+C26ejZFlYtewgm63T2r4SidYaBYz2pFxxTceuxgps3w2vg4YtAf0zvjDksqKuwR4q8AFWnV7PhxFrLZKIxfQ8wVFObMqC3SFNfs0h4yyIafNb84XJdX80AmF//br792RlpEczOkC6dHIRuiZejrZHY429Q2KWephs90bBPfGgKffOFTfFmyUKSEuNshNitCTKckdzXaDz6h0zEvZB+EzAuDn/z9D2TFDIoSSEZSQrJS1JIUZJCZiQpZH6SQmqTFBJMUsgFSQpZlaSQtUkKuT5JIbcnKap/UCv6Ck3Cci0Yzv2VWrEuG8bvSlLIQ0kKeSpJIS8kKeTVJIW8l6SQz5MU8lWSQo4mKeT3JIWcTFKIOVkhyckK6ZYMdvC7oV2zLuiTrxv6Xu2G/oI647+umIaGO5MVkpOskCnJCjknWSFNyQpZnayQG5MVsj1ZIc8kK+TtZIV8kayQfyYrJCFFIf1TFNWfawr6BuiO5SZjeCeMS8G6HBifk6KQiSkKqUxRiDdFIZEUhVzxP2XemqKQnSkKeTpFIftSFPJJikJ+SFEIcSjE4VD4zvfWvduPt7W1/TrxRNvkH35uezTbf8s3W0oLv7Zd8GT2qqxftn3vf/bY5v5XdT1ildvGDvlbvJn8L/+daKO7eNximSTuSSDHvnti7kvlc26YUlUyZ1Zz+dw3ljR9P3vL9b1tC6493PrvF877rdufbf/X3ita+rh/yhx+zhsX7fj4sV/+uaTb3sJXt3W/ST4R+X3k+c8H+jZX1z3qdld7+gzesbWP5c+2/4WS6CWHX0m6/J0712SXD/pleNpFN2XW2S+bOdhx2UVr+yRtabjmo89nHD3ctXCNt9u4pi+6vrlpwZ3nzh05dtWK5y4ZM3DjhOy8mitfLk7N7znW0evE8F0bHj+6fOeM6S39Xj5v5YXHN7yT8GHKHedsuXvfsuUXbRj+3Cc9Dv709PSF719lH3n3gciHlzpffbPf7jeuq5u3Jf2tS088+cNFI5LrXA5CKZxZOI84XI7ziMMVOJ84XGmAZxvgOQZ4GK5JDqcb4CwDTOtWBJjS8AMMMKO5t7e1tbWdfLytrfyBk207+g/+7f7fNr+VWf9M5zW/rJ66xPvezqkTH7m7z9RNX15c8G0nqff/9nz7v1b+//bfpB6uvq4Bh479ZH4z7q4vF8e/88hfyxonf3HVs6tuufaey76rT/9rr4fXjG3ZtP0fr274Yt0Nnf5sf1d2crC55MT5+ZwFfA5brTBfzj8H7f5hmsm+AH38wtx0FhaqfjipXUWffzHzK88dQNAXcerbkN+Xgq2FXi3w7v2dBeBvOyDBGUKQ7iO4Mwaoyhp1M4Iv76ldQ/oUi/q8uyLZQWrpXKX0FrXHle5gPkpW4zzn8BoC9hM4fCnOeUkIc6E9Lw7nIjwR7TZGa8AFaA03AFnjq6WntLOGkgii4SdPxqctiq6+EjwfOXyuoa7zEG5PT3iqGvyUomDP3hhDhOepMZTpI+3xtybdwewQT8Z1zuEpaJuYwzMM8TMN8dQHyhABzjDAWQY42wDnGOBrJeC5cHiDIf5LxAeHvzLAx/Bc5vCvBpgOrAh3lgh7p8DhFAO8Gfc8Dm81lNdgiH9cgvOfw7sNcBrekQl7UxgKtaiujrkpTqS10agIXQ/O5WCPgJdRgOOpJDuIV6BzVG+4vEghDaeLOEzXRC8BpjZTKA+odzysOWqbVIRnm+Adee848Al5TAZakcPbkTfF4S9k6CeHv0J/Ihw+JAMeOfyODHjn8BCTNmdj/d3zpeihkZC4MUBXjn8EvncX6fPT9BR2DEW/vwW4Fs6G7/ogfB3Xwfe5F7W1Qv+yuhB2X325O3z/3hu+4wfAN30wfG8YBt9LR8KXGk0xYfvod1sxfP9RBt9nK+FbUgXfpX74VkWIyiOif561AF92I3yX3Y31PwLfj1+E79x34fvoV5j/3/BdbwX+1WH8Ftjgew1+v8FvsR2+t+OXDir9evC7B7/D4jE/fv+FX28CfN/E7/hE+D6A38FJ8L0Rv45k+F6OX3MKfFek6G16rnBgfCdMj19HZywPv4O7YH34Hd8V24NfbzdsL36v6Y796YH9w6+nJ9bfC/GB3+LeiC/8XtMH8dkX8Yvf9f2w/v7w/Qm/WwfAd54T2z8Qvq/gd/Ug+Bb9BesfDN/n8LtagW/pEMw/FL4f4HdrKnwXDcP6h8O30whsH34fT8P2p8PXn4H9GwnfgZlYfxZ8P8Pvnmz43pOD+V3wbclF/Lrhe3Ye1p8PX7re2PgUwrfXKGz/aPjS9cHGdyx8pXH68ZeKMH4Cpp+I+YuxvBIsfxLWNxnrn4LtKcX2nYXtnYrtL8P+TMP+Tcf+zsD6z0Z8zEL8lCO+KjB/JeJzNuJ3DuJ7HtZ/Do7HfByfBThe52L7q3A8q3F8PTjeNVi/F+eDD+PrcL7UY34/zqfzsfyFON8asf4Azscgtq8Z52sI2x/G+RzB/i3G+b4E62/B9XAB4mcZrpcLMf9FuJ4uRvyuwPW2EutfjetxDY7PpbheL8P2X4Hr+Uoc36tw/V+N9V+D8HqMvxbTb8T812F512P5N2J9m7D+m7E9t2D7bsP2bsb2b8H+bMX+3Yn9vRvrvwfxsR3xsxPxtQvz34f4fADx+yDi+yGs/xEcj0dxfB7H8XoS2/8UjufTOL7P4ng/j/XvwfnwIsa/hPPlFcz/d5xPr2H5b+B824/1v4Xz8QC27x2cr+9h+z/A+fwR9u9jnO+HsP7PcD18jvg5jOvlS8z/Na6nbxG/3+N6+xHrP4rr8Wccn2O4Xn/D9v+O6/nfOL7Hcf2f1K9/ThecJ8Mdg8NeGXzncHihDHygCupAweP1L1WNuKKNnOyMjIwcN1m+Buxr8HwmpDc4nEn09eQgz6pbGtimonTfBAH24z2Bw5TuHiTAo5BOlUcC/DHScRz+EelIQTbm9S+m7+xqWpz0QkPLvwR4oTzPW3j/5nA3CXhRHO5ugKnR5YECPBD9enN4ggT24jk8SQKeAYenIi3L4TmG+nfh3YrDe7BPHL7DkL4v8gKbl4P9zadmA61ZgPSs61wHWUDlGWa4j3F4AMI6+d+lIP+rbYgGFurddvErIYlcCvbiHj7bweSmvyBNSwSZwnwbIUPLHeyNc1sy3G85PDgB5KLv93OQ6cznIdDVlQ5o9yoJ2uX1hWtDfvbQMnUY89Tgaw75qAM/7yhmQaTYH25u9LRseGFH0Hz0aeekpJe2lKVLfRcIso9zbYSI8Hk2CMu8TCFVtv/pr40Qj42w3zUo6/49BfDzJd4PbusKctgFyNcR4fEGeIYBpnM1S+U/+6mLv2bBbyODVdnRZcAb1aUP+xZFdcYqxEBN7mS5HGw0TfGEG1Bu0e4ak3Y52Jw+ayrgWcH7C4eHIx8imh/NyY66XR465MzxfdTt8i2ldyk/2gMmlWeDLHpwHMwxKtffejnIYPi3mprtqNbgxy4HWRmHqemjYB215xMMNvqo8gAhn10O84+nYSbdfKwYctwQx219OsHWZ3XPKwB/PL62wUP5CSx3/hUgj+Jx4Qi7JJKKK4DfziQFTH4VDfgjwAmZAS5M2O+AbwmTVaBtYMR/k6fZF4g2YZaQ3xOI8IQIRqLgQYsBKG5ASB27jEz4ctlqvY2QBirXpXPTWRMMhZjdL2iyh2OLVurBQHrPcJClgpyAl73QRkij8G/0lQoL/8cAB1lMffFKhNmbmklHdSFFyZIGarC+WYWppL8mGIr8z53kSrA3u7Aa+FarcR+6T3IQDz1rZQM/iSkj4gUcjPqS+6+EvYPJGEW6lO5Df1K/RMwbYLiiYilPBKxFhTzUX5BebgZSLub13OmjLQBTyFQ2RQ3IhRpbaNZwJOTzNDm9fmaOhZAfExxsf79CRvvWAc5DAkldqj/sHCZYkRs9hmldsOBr1oLPvq1rgRf35Fqcf0s8zfRNXHCxr6NS1EIOrAW547f45WXMKXew9fwPfKfOilOtfdKchKReBT68jHmrPZFqZ7i50R/RJScVV8E+Ymzv1/Mc7My8WgK7D0eeeard/nL9VXD+WMsd7Mzvi3OxzNMSjEZgxIPCXtxsI2QR1e2gC7CZ2Ei6JEmyJEvSlITMbg7JZ5OtsiyZ/yL17zM/oTAuTuppluIkk2QZYRoVN7yn5MyTJMlsN0smW7zcTyqk2c12KU6Kl3tLslwgmWWzLJtMUn/ZJCVQ2CLJZqmr3N0q0dSyZLZLNlO83F8aJUlSohQnpUomKU+STBaTZLbJCaxUWZYkE8J95QJZq6WfNEUyS7JJkuzS2ZJsS7TXSHJcgq1U7iPRv7xkySLJlgRpcJxUZ5askizLvWSzyWFOkmTZKqVIxETMfU395P7yeFmy2SU5IU5KN0lSVB4kLTaZ5TjJavpIlmlrbbRE2W6Nl6XMDDmxqzkz3mwaEpcoO82yNV9izbDk22X5BpOUJNlodSZ573givTCQmK6Sqp3E6peJWYp3yjNlIpkks9RLtkjXy707J0lD7L0SJCnNlClRlMnSYGmiVZZlOVGySyOlHEkyybJFlqThsl36kSJOIhJxOBxEJtLn0l8txCTJFnOqySzdKRNzkYXI06yTErLMyyR3yjBJluNNWWZZtkljTIMtkn2slCi74iTJbpalKpNstkqydItksndj2IWRSLaZLBMl2UqHSTKZTZKULFfaaSd7UFxDuCzJ30my2SpLch8aK0ny+QxLPjYXJAuJk+RfpXizWbrGLMtmyRmfamWjZ5VNGUmSvFeSTJL0ik2yStKs7rKNlniB1URLtknSFFqdROQE2WWxmHpIRLKmkESTiVhG2Yg0zny2lCATmWTIPYjFZLXbZVt/80YTyTNn26VkqbtFSiE2qRMr1eKVNtuINMZMzCflX2jxskUitiYbqW49qu3XmUsJuWeqg+2R98cDz5bDj8cDPVHnaQz7IqGoLzMzMyszOzMn05WZm+nOzMvMzyzIyszKysrOyslyZeVmubPysvKzCrIzs7Oys7Nzsl3Zudnu7Lzs/OyCnMycrJzsnJwcV05ujjsnLyc/p8CV6cpyZbtyXC5XrsvtynPluwpyM3OzcrNzc3Jdubm57ty83PzcAnemO8ud7c5xu9y5brc7z53vLsjLzMvKy87LyXPl5ea58/Ly8vMK8jPzs/Kz83PyXfm5+e78vPz8/IKCzIKsguyCnAJXQW6BuyCvIL+gIJ2Q+Czo40YZ9rLMjBGZWZk1mVnZOa5cd15+gaem1uur0+CiCROLSyap+cajrhmHiwzwBAM8EeE0Z3xafGpq/LA0wD/fmy6wEbLMRshyGyHOZc5Cp3NZ/IXOC5fNx4sFKMPBeUMd73qaUQ0D3ftQ73QLfS3kqg1gX/GirrAnKmbon74Yf8AfbsBimNaeh+pnUFOc4KubkAOGch6IVU6Nr545ugr4lgCdyfx8c49H6CKIHY4Nmj1+J1ML63st2N/h5X9ggvLPzfwv/4T567bBPUakdZbYtPi8OBiTs/o7GA/7BeStc3iPAf4R74Mi3EmAv6O2rWPKfIKRBl/IOdaZ2T4qEASCi97JM6Gc1XgfaZ/Y66+nAz3a6YpREh3BMKqPjh3jdLVPUROt0+KnFc2tKi+dXFVcOrm0ony6Z7o/UJeZkenLzCyJUfhAmleQWkXKHUzO8CieuTErm595rnOss2Zo5lA1/WOYnsOPG2CrpIdtCPtKfOkl6afpUpNnKb1V8rwX4Nrm8I2o83GopPcY077eXz73x2sn6dx4de+ml3qcbN5x8I8DDJ5xcPfTxx9Y0vbbHwcZnPjuwqIj62c/3en4YQaPPn7xNbsG7L8q7fj3DF61qTIrdcHZb086fozBD79y1651Oxfd4jl+nMF/v/LHvywZdPO3y46b2yjcVL50/PrS1+697ngig+e88ci5LZ1Hr3zgeFcG583+Y5p7o+P5vx/vy+AZN0zJD3573TVfHh/M4JcKVyp/XxN5j5xIY/Cx65+5/vV9l2zuc8LF4C92Du9xQ7zrSO6J0Qy++sHc4X/U5z8480Qxg0eN2/vWoQMvr154oozBT7z+du+hxR+/uOZEBYOve0V58o3bFl67+cQCBq++s+bCwY07P3rihJfBv31YlTS3bscd75xoZPCQn1745NrfP//lyIkIgx9rbdu+bdfDD8efXM7gK89a3mipqrlUObmaweWZz7mq23a/Mu7kWgZXDnli/do106875+RGBj910bDmwUv+dShy8mYGr3vsi8due+rQXetObmXwxgsjl+2ruuf3e07uZPC+m7atu7a5+PE9Jx9i8MJuKc/8ftR+xaGTuxn8SFaWr1K5//V/ndzD4J0XL9u/9/NxN3Zte43B1lEjhu9xLDic0XaAwW9vCPtvHDx4e2nbQQYnv0pW/fzwpSdq2w4z+LvenTZ47V/svqjtewa/dtnMYNxru9fe2HaMwWm+Xp/P7fHom39rO96m3TjG3/xGmyaZctx54Ouv2xIRqtn54ndLd5kY5U7I6riNvy8tGLeiP0oc/9bN9sqyN65/Np9xMQhpXvDtsjeyL1pXTuAQaWj9ZsfW/LfeaWKcLEJKBm3qMWTojNsuY1whQob+sedA1pbaH7awmxch23a9vDbf98n9TzHuCCEf+Xb0vtr+0qr3maYKIZv6LZrwr37n7vmZcRQImftVn7vS/NM2JEmg9fvtVc29vT9KHw6VGhl81pIjm268o2nLBCnC4DULL3xo2dK4nxdIyxm8pOfHLbcfrnhoibSawc+/eNP8DZfMv2SDtJbBY8697uUXy3Nf3ilthP5uvv7fCx4a/teXpJvh7li1+canbpv0yWfSVgYraws+cj1/053HpZ0MXnDbDXeENu39rbv8EIPfePqbivJnDj6aJe9m8OdFg37u8cvxy8rkPQy+c+mCt296w/lanfwagw+VD1z2yzndb1ghH2BwYeaA6w8+vPnzm+SDDL7ub/9YUP7mB9sekQ8zeHTx3Vs/WH7TH/vl72Esi7feXVa2+Mnv5GMM7n3z+EeOXL3jSqvpOIPTVs+5y3FkwH6nyczIrmFZ67/5YqvjplGmRAbfknjz7X/c5Piq0tQV4o+NqvnAmbqz2dSXwWv23X3BeVOLW680DWZw+sc7TeMPD3zmTlMag9e1FZ838ub6q581uRhc9Njam2/pkXPgQ9NoBt/T5x8Pbfio162/mooZ/MGSQ08EnrnuuxRzGYMvsjrYWX8hyps5fEQGepDD/zDAryEc45zKaPIEIvTA42kPSh2dE5iWew91Zw3jeT7GPBz+xADnyHD+ctiNsmwONxrgezo8q7wZTf5ANEwbLKTffor0zY2QnKfdQfRtu/dUddH+juCFCB0X8t9nKI/60Rb7miTp+zZe6ujNCtSXgY5D6UOsVOzuMHqgh4NNVLGVl7PrNO1Wy/F4vanQA7EYtZydWM75Ix3MJ0KCpIcTDXCSAQ5JwLPl8BIJ/IFymNJInQW4TkKdJoTpzB4kwCmG8pMN8GJDe5cY4KUGeJkBfh55Uxz+g+jbIxvae4Ehf4vAR4sH8SHzsULlxJsvkcj4CSmk9bobCPnsVwt5ddOo54I/X0JpmhVHdq6ZX9SUTn2ASAPOf8b7Q37gh+vv/vDYv8Z9Y5rRk0hj/5oRd+Mh04n8bikjD0f+8v2v+962HzTv+fD+13f3ujjnLtOQAd9Mp3y05Rk3zL/07adDt33w/qUju3XeO/OThc2Bs/alvP/XdwKLHhxyf93eXYPd3fqd8/aE0ckVbbXPhitf63HkX76fU3dX/vOlg60Hfwgce+PIwap/llvI0hQHk1dkIE6k/4//yH/9J5/yz2T4M9M/Iff8jIyMc+GuNHoMs2OdSn8MA2ZgmLK5qYfz6srN8PaidjO8MajfDPzlJZuBJ4ba5ZR7xu30epyU6QwuVTyhllHUmDy1NR9gzh6cqTQLZfNR05Pkhs3Ak75jM/jFeWUzvH14czPwyXk9tASdrxbIruYntwNvj6e/ZISD3bPqrXB+cPivBvg6AxyxgDxAhDsz/5tV7KJD3Z+gexAmEUxPN4gG/cBKZW+1nNn0RprjdvoDtY3RsH+xj7TerjA9OakP3DGvxT2SGjmqYuqNFPe+Qmc4GA3V+thI+CgXtD7S4EwdZrT37/VRvwDoe1WXlOpd3Q44tW4B32LeDYCbaNgXSm8OBalI0MuuxJ6QP0y3Vf42Qa2lltoHZD4aVC4ydZoVjHgawU9r2Raw7/6DFfaMBSj7hP7TeYWTQ/SGyd5IQHODdbzFhNy/BebWs1uAxw4pID/zkxymfn5Az5POAE/ESY5tgXGPvwPeR0H54FWZ+yZMvQP4v7xczl8H2YaRv+6spo/EOH+dL9RVG/BtmImQVWYnWW+pJud22Uw693AOSHRWDziSVj1ieOanI4J3bU6TtznT+//hzCAnq923tm12n5AG5knxnrzBSQPzdyTfXjCy58DCX/oPnDredXt5f89nFUfP91TOCH5Wectuz2yyzzPH9+btc8iHA+eST2+fd+/nA+d/f/izBfu/9pzrJD+ed1S6uIpYKcPOLFtsNtluj5PjLQlystkhdZI7W7r07Sp1k3vIvZL6WvrZB0iDpfPNC+WAfJ/pAXm3vE9+Uz6Q+E7cu/J78ofSp5bP5C+lr8xfyz86j5p/l/9t+UNKHDpq7PQZ62699bZlV1573ZYHn7jkAastzj1m7Oxf9r9p7trTnTd7zsXb773vqdxPO196+dW3mpOSO3UeluUqLJlUetb0GV7fFWuvWvfIcy/s2fv3dxc88mifvjZ7fELXHu6Cwm33vP9BXN4167fZ4keNrfOv29ApWPXMj0fOqXn8iWPH28orNt2UMXJoauUtm2+/Y+vd23Y9sXuPNSGxW7/CcSVn33X3a69vtvXqPUgZO+7QV98faXtxr9n5F2VIak5+4ZSzymaWV86ee86C86prfXULw0svvPiKrdvvu//Z/ffeFwi+9PEn1543aJnFZE431ZmkkRmtK/uZslL6mgfH9beMsBSbk4e3brcONg82p9pdCdNNrsQVeXHd4+09R5UUmGrtcZndLQNNfSx9huSbp1pGmuNtcbbxzqHmxDi3qdDS22ZOtM0szctJyrFl2OOtQ0z97HLr/lkOqz1uYIZ9ePfeQ/p27RE33Tw4rjiply3eOsU+NC6aMGHscOsoS7z1bKtkcZgsCfPscr+a/lPs8a13nTeoJCHemtSl0Bpv7do3zdyj9fHR3vLEKXHxk0r6TLGXJ5Xa4mfb5w5KjrdOiu9nmlyaZ0q2x1sLbPHWNHN862+9bKNM/SqllOykVTfVRRNa91xRVpu0OtPRPX7dTZaVkzc9XnjJ3pUFtuHmBdYh8ZPiUy1dVtxf2Lp3vsWVNtVcYOs03pJgi7v53WFOT/j2EytyUqR+1mSzfcXay80LLUmmOJtjXXXrCdOKh6w9UjqlTI6LjG79LT5sb+426YKuiV0T58T1ar10xWTTmgkp3VbPHGC1tr4zwjJ2oNScbuptlleMH9Cp0CKt2D+89d0RZqn1Wbddbv209Z/DyszxZnlVp+KyMa3Pj7ZK5kpLH5e8IjnN7E2cHd96b36/pDRznE1OtrZuWvWBqZMpydT6oTXRLKUkmvPt8dZUe5pZTo4bumKuvZ8pwTTK3N8cb2v9Y7WFSCaLxWqVbVa7La5TfN+EXom9khzJiSlmh6lz5y5x3aUe5p5SL1PvuD5SX3lAd6dphJyekCFlmrPkbOkeebt5h/3f8h+Wk6a2uF1LW668akvmnLlXrr2m78fJKVPL/jieMXLcgnOrPl991dXrN9zzwBNPvrj3lVc/OfxFGzGzJZFXOGpM6Vnnrr56wz0PPPTEk3tffWPf4S+IumBG0RVznte3ev1Nt7zyxr6kTsMKR5WUzpl/XpXXd9X6ex564skXXzl0+IujSZ1KSr2+1tUP7n76mXfeO/rTqjVXbr3r6WdefGnfhx9NueGp1/e+sa90+ow5886ruvzqdQ888ugzz+196b1O3XvMX/DbP0+2tTYt+uRQ8oBAsG+/qgsvuve+Tw5Ne3J39x79B0yaPH0GXTQXXfzwiwfeOXj0p19D4XWR6JCMkXff9+gzL+1779AmMv76GzLXDXijbfqMc+bb7CmOoSN/PBII5o0ZN6GkvD768iv733z/g69OthFn1aCVh8wri+19zNZOK3Ymt+6wOG0r+pp62SXzSLPLbDNJNqutU/zMlM62SpvJ3Dc+zmQ32UyUSkk0W0wJVim5m2W6rY9tjk229EycaZ5oSjdJ5k7WlMRCcz+lytlkPl9pfdmy8n5Tb+vKE6Z5tu5xPePolDvfGm/tbZ1nG2GZFJ9mTjRLpqyENHNva4Kpdac13lrWtfWYfbQpxTTWkm8fYVnZ1qmnfWSndNOg5IEprWvNKzd1T+h22UbLSMsom5zcM6716UGRxNZ3e69wWFo/i/v5VlNe3IoFXVsfs7d+3HW0Kd6ab59kT7RGEvqbzjHPi2td1bNvfPe4MnPrFdYdWxN7mLNuN6/4cIgt0WJZ+TfncGuZufUqc+vTpj6mlCRzsYPpGvQGNV7CYUpXjziNrs6n94CujpCm1tNYG22kXj0YscHcBFIX6sg4p0WEg8z5FJZh3g6+Qas94ZZArbMuUO0EW4ZedBDOOePBAJmyHXwcEUGX5ULDe9mLDPDFVFbf3qNeIWsfFeL6w07VcT0kZMLWrdvBf+ee7XBGjxkzcEwTPELUrnvVjb66iNMZonYBqvHyF+900tBCZzyEFzrJL9uBfjDtALlt7x3oN16XkebArFRvB/OM3gHfMszD83IZ/SMTQP7d1wK67Jwu4N+sfJfLnedyZebl5GUW5FKxk5vHbd4B8u9f1wP9JQt5VZkXIZdN0iT33DGZjmw6vANwxdviQ50hDnssoHsfCD//cLgpHM7IoJQMfd3OadZopC49X1OnCdY5nUCNs8cmnF4au1Nh83TuThgTfwAnhw8LYES/Woou7/Kd4H+F94v32fidMNDBaNNu6O+eCDhp/ZM6EHcPBVr9QjO8a+NwlR30ewoL6+rq6grJ6F2g51JYqKWptMOd0En/gOmhtt2L6TndXCj0a/UuCONfHXmr88EoWJp3qpIqUC2hiy/iLORvD7riWlphI2SljZBVuMbSMHy1jZA1NkIusRHy9XaFfLtdId9vB7pUxjewpGjbweukhK26C+Z/+orzVPnOpMz8nxynjP9/AG5fxyY="; }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Builds the query asking for the addresses of `hostname` of the given family, base64url-encoded
3
+ * as the `dns` parameter of the request carries it. The identifier is `0`, as RFC 8484
4
+ * recommends for GET requests so that HTTP caches can serve identical queries.
5
+ *
6
+ * Throws if `hostname` isn't a valid DNS name: every label must be 1 to 63 bytes of printable
7
+ * ASCII, and the whole name at most 253. A trailing dot is accepted.
8
+ */
9
+ export declare function encodeDnsQuery(hostname: string, family: 4 | 6): string;
10
+ /**
11
+ * Extracts the addresses of the given family out of a DNS response message.
12
+ *
13
+ * Only the answer section is looked at, and only its records of the wanted type (A for IPv4,
14
+ * AAAA for IPv6) whose data has the size of an address are kept, in the order they appear.
15
+ *
16
+ * Throws if the message isn't a well-formed response.
17
+ */
18
+ export declare function parseDnsMessageAnswer(message: Uint8Array, family: 4 | 6): string[];
19
+ /**
20
+ * Resolves `hostname` to an IP address over DNS-over-HTTPS.
21
+ *
22
+ * `family` restricts the address family. When it is `undefined`, A records are looked up first
23
+ * and AAAA records only if no A record was found.
24
+ *
25
+ * A hostname that is already an IP literal of an acceptable family is returned as is. A hostname
26
+ * that isn't a valid DNS name is rejected without any request.
27
+ *
28
+ * `fetchImpl` and `staggerMs` exist so that tests can run without network access and without
29
+ * waiting for the real stagger.
30
+ */
31
+ export declare function resolveDnsOverHttps(hostname: string, family: 4 | 6 | undefined, signal: AbortSignal, fetchImpl?: typeof fetch, staggerMs?: number): Promise<string>;
@@ -0,0 +1,249 @@
1
+ // Smoldot
2
+ // Copyright (C) 2019-2026 Parity Technologies (UK) Ltd.
3
+ // SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0
4
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
5
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6
+ return new (P || (P = Promise))(function (resolve, reject) {
7
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
8
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
9
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
10
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
11
+ });
12
+ };
13
+ /**
14
+ * Resolvers, in the order they are started. The first one is queried right away. Each following
15
+ * one is started `PROVIDER_STAGGER_MS` later, or immediately if the previous one has already
16
+ * failed. The first answer wins and the other requests are aborted.
17
+ */
18
+ const PROVIDERS = [
19
+ { host: 'cloudflare-dns.com', url: 'https://cloudflare-dns.com/dns-query' },
20
+ { host: 'dns.quad9.net', url: 'https://dns.quad9.net/dns-query' },
21
+ { host: 'doh.dns.sb', url: 'https://doh.dns.sb/dns-query' },
22
+ { host: 'dns.google', url: 'https://dns.google/dns-query' },
23
+ ];
24
+ /**
25
+ * Delay after which the next provider is also queried when the previous one hasn't answered yet.
26
+ *
27
+ * A warm answer from a healthy provider takes a few tens of milliseconds and arrives well before
28
+ * this delay, so only one provider is normally asked. A cold lookup or a slow mobile link may
29
+ * exceed it, which merely costs one redundant request that is aborted as soon as the first
30
+ * answer arrives.
31
+ */
32
+ const PROVIDER_STAGGER_MS = 250;
33
+ const IPV4_REGEX = /^\d{1,3}(\.\d{1,3}){3}$/;
34
+ function isIpLiteral(value, family) {
35
+ return family === 4 ? IPV4_REGEX.test(value) : value.includes(':');
36
+ }
37
+ /**
38
+ * Builds the query asking for the addresses of `hostname` of the given family, base64url-encoded
39
+ * as the `dns` parameter of the request carries it. The identifier is `0`, as RFC 8484
40
+ * recommends for GET requests so that HTTP caches can serve identical queries.
41
+ *
42
+ * Throws if `hostname` isn't a valid DNS name: every label must be 1 to 63 bytes of printable
43
+ * ASCII, and the whole name at most 253. A trailing dot is accepted.
44
+ */
45
+ export function encodeDnsQuery(hostname, family) {
46
+ const name = hostname.replace(/\.$/, '');
47
+ const labels = name.split('.');
48
+ if (name.length > 253 || !labels.every((label) => /^[!-~]{1,63}$/.test(label)))
49
+ throw new Error('invalid hostname');
50
+ const header = String.fromCharCode(0, 0, // Identifier.
51
+ 1, 0, // Flags: recursion desired.
52
+ 0, 1, // One question.
53
+ 0, 0, 0, 0, 0, 0);
54
+ const question = labels.map((label) => String.fromCharCode(label.length) + label).join('')
55
+ + String.fromCharCode(0, 0, family === 4 ? 1 : 28, 0, 1); // Root label, QTYPE, QCLASS IN.
56
+ return btoa(header + question).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
57
+ }
58
+ /** Textual form of a 16-byte IPv6 address, with the first run of zero groups collapsed. */
59
+ function formatIpv6(bytes) {
60
+ const groups = [];
61
+ for (let i = 0; i < 16; i += 2)
62
+ groups.push(((bytes[i] << 8) | bytes[i + 1]).toString(16));
63
+ return groups.join(':').replace(/(^|:)(0:)+0(:|$)/, '::');
64
+ }
65
+ /**
66
+ * Extracts the addresses of the given family out of a DNS response message.
67
+ *
68
+ * Only the answer section is looked at, and only its records of the wanted type (A for IPv4,
69
+ * AAAA for IPv6) whose data has the size of an address are kept, in the order they appear.
70
+ *
71
+ * Throws if the message isn't a well-formed response.
72
+ */
73
+ export function parseDnsMessageAnswer(message, family) {
74
+ // Cursor over the message. Every read throws when it would run past the end.
75
+ let position = 0;
76
+ const malformed = () => new Error('malformed answer');
77
+ const take = (length) => {
78
+ if (position + length > message.length)
79
+ throw malformed();
80
+ position += length;
81
+ return message.subarray(position - length, position);
82
+ };
83
+ const u8 = () => take(1)[0];
84
+ const u16 = () => (u8() << 8) | u8();
85
+ // A name is a sequence of length-prefixed labels ended by the empty root label, or cut
86
+ // short by a two-byte compression pointer.
87
+ const skipName = () => {
88
+ for (let length = u8(); length !== 0; length = u8()) {
89
+ if (length >= 0xc0) {
90
+ u8(); // Second byte of the pointer.
91
+ return;
92
+ }
93
+ if (length >= 0x40)
94
+ throw malformed(); // Reserved label types.
95
+ take(length);
96
+ }
97
+ };
98
+ take(2); // Identifier.
99
+ const flags = u16();
100
+ if ((flags & 0x8000) === 0 || (flags & 0x0200) !== 0)
101
+ throw malformed(); // Not a response, or truncated.
102
+ if ((flags & 0x000f) !== 0)
103
+ return []; // Error code.
104
+ const questions = u16();
105
+ const answers = u16();
106
+ take(4); // NSCOUNT and ARCOUNT.
107
+ for (let i = 0; i < questions; i++) {
108
+ skipName();
109
+ take(4); // QTYPE and QCLASS.
110
+ }
111
+ const wantedType = family === 4 ? 1 : 28;
112
+ const wantedLength = family === 4 ? 4 : 16;
113
+ const addresses = [];
114
+ for (let i = 0; i < answers; i++) {
115
+ skipName();
116
+ const type = u16();
117
+ take(6); // CLASS and TTL.
118
+ const data = take(u16());
119
+ if (type === wantedType && data.length === wantedLength)
120
+ addresses.push(family === 4 ? data.join('.') : formatIpv6(data));
121
+ }
122
+ return addresses;
123
+ }
124
+ /**
125
+ * Sends the query to `provider` and returns the first address of the wanted family it answers.
126
+ *
127
+ * Rejects on any failure, with the provider's host prefixed to the reason.
128
+ */
129
+ function queryProvider(provider, query, family, signal, fetchImpl) {
130
+ return __awaiter(this, void 0, void 0, function* () {
131
+ try {
132
+ const response = yield fetchImpl(provider.url + '?dns=' + query, {
133
+ headers: { accept: 'application/dns-message' },
134
+ signal,
135
+ });
136
+ if (!response.ok)
137
+ throw new Error('HTTP status ' + response.status);
138
+ const addresses = parseDnsMessageAnswer(new Uint8Array(yield response.arrayBuffer()), family);
139
+ if (addresses.length === 0)
140
+ throw new Error('no ' + (family === 4 ? 'A' : 'AAAA') + ' record');
141
+ return addresses[0];
142
+ }
143
+ catch (error) {
144
+ throw new Error(provider.host + ': ' + (error instanceof Error ? error.message : String(error)));
145
+ }
146
+ });
147
+ }
148
+ /**
149
+ * Races the providers for the addresses of one family.
150
+ *
151
+ * The first provider is queried immediately. Every `staggerMs`, or as soon as the previous
152
+ * request has failed, the next provider is started as well. The first address received is
153
+ * returned and the requests still pending are aborted. Rejects with the last failure once every
154
+ * provider has failed, with "DNS resolution aborted" as soon as `signal` fires, or right away if
155
+ * `hostname` isn't a valid DNS name.
156
+ */
157
+ function raceProviders(hostname, family, signal, fetchImpl, staggerMs) {
158
+ return new Promise((resolve, reject) => {
159
+ const query = encodeDnsQuery(hostname, family);
160
+ // Aborting `inner` cancels every request of this race.
161
+ const inner = new AbortController();
162
+ let nextIndex = 0;
163
+ let failed = 0;
164
+ let settled = false;
165
+ let timer;
166
+ // The first outcome wins. The race is then over and the pending requests are cancelled.
167
+ function finish() {
168
+ settled = true;
169
+ clearTimeout(timer);
170
+ signal.removeEventListener('abort', onAbort);
171
+ inner.abort();
172
+ }
173
+ function succeed(address) {
174
+ if (settled)
175
+ return;
176
+ finish();
177
+ resolve(address);
178
+ }
179
+ function fail(error) {
180
+ if (settled)
181
+ return;
182
+ finish();
183
+ reject(error);
184
+ }
185
+ function onAbort() {
186
+ fail(new Error('DNS resolution aborted'));
187
+ }
188
+ // Sends the query to the next provider. Called once at the start, then again either
189
+ // when the stagger timer fires or when a request fails. A failure starts the next
190
+ // provider right away rather than after the stagger, unless every provider has failed.
191
+ function startNext() {
192
+ clearTimeout(timer);
193
+ const provider = PROVIDERS[nextIndex++];
194
+ if (provider === undefined)
195
+ return; // Every provider has been started already.
196
+ if (nextIndex < PROVIDERS.length)
197
+ timer = setTimeout(startNext, staggerMs);
198
+ queryProvider(provider, query, family, inner.signal, fetchImpl).then(succeed, (error) => {
199
+ // A request cancelled after the win rejects as well, and must be ignored.
200
+ if (settled)
201
+ return;
202
+ if (++failed === PROVIDERS.length)
203
+ fail(error);
204
+ else
205
+ startNext();
206
+ });
207
+ }
208
+ // An abort listener never fires for a signal that is already aborted.
209
+ if (signal.aborted) {
210
+ onAbort();
211
+ return;
212
+ }
213
+ signal.addEventListener('abort', onAbort);
214
+ startNext();
215
+ });
216
+ }
217
+ /**
218
+ * Resolves `hostname` to an IP address over DNS-over-HTTPS.
219
+ *
220
+ * `family` restricts the address family. When it is `undefined`, A records are looked up first
221
+ * and AAAA records only if no A record was found.
222
+ *
223
+ * A hostname that is already an IP literal of an acceptable family is returned as is. A hostname
224
+ * that isn't a valid DNS name is rejected without any request.
225
+ *
226
+ * `fetchImpl` and `staggerMs` exist so that tests can run without network access and without
227
+ * waiting for the real stagger.
228
+ */
229
+ export function resolveDnsOverHttps(hostname_1, family_1, signal_1) {
230
+ return __awaiter(this, arguments, void 0, function* (hostname, family, signal, fetchImpl = fetch, staggerMs = PROVIDER_STAGGER_MS) {
231
+ const lowercase = hostname.toLowerCase();
232
+ if (lowercase === 'localhost' || lowercase.endsWith('.localhost'))
233
+ return family === 6 ? '::1' : '127.0.0.1';
234
+ if (family !== 6 && isIpLiteral(hostname, 4))
235
+ return hostname;
236
+ if (family !== 4 && isIpLiteral(hostname, 6))
237
+ return hostname;
238
+ if (family !== undefined)
239
+ return raceProviders(hostname, family, signal, fetchImpl, staggerMs);
240
+ // A records are preferred. AAAA records are only looked up when there is none. If the
241
+ // resolution was aborted meanwhile, the second race rejects right away as well.
242
+ try {
243
+ return yield raceProviders(hostname, 4, signal, fetchImpl, staggerMs);
244
+ }
245
+ catch (_a) {
246
+ return raceProviders(hostname, 6, signal, fetchImpl, staggerMs);
247
+ }
248
+ });
249
+ }
@@ -89,9 +89,15 @@ export type ParsedMultiaddr = {
89
89
  } | {
90
90
  ty: "webrtc";
91
91
  targetPort: number;
92
- ipVersion: string;
92
+ ipVersion: 4 | 6;
93
93
  targetIp: string;
94
94
  remoteTlsCertificateSha256: Uint8Array;
95
+ } | {
96
+ ty: "webrtc";
97
+ targetPort: number;
98
+ hostname: string;
99
+ family: 4 | 6 | undefined;
100
+ remoteTlsCertificateSha256: Uint8Array;
95
101
  };
96
102
  export interface Instance {
97
103
  request: (request: string, chainId: number) => number;
@@ -180,7 +180,8 @@ export function startLocalInstance(config, wasmModule, eventCallback) {
180
180
  return config.forbidWss ? 0 : 1;
181
181
  }
182
182
  case 16:
183
- case 17: {
183
+ case 17:
184
+ case 18: {
184
185
  return config.forbidWebRtc ? 0 : 1;
185
186
  }
186
187
  default:
@@ -228,14 +229,23 @@ export function startLocalInstance(config, wasmModule, eventCallback) {
228
229
  const targetPort = buffer.readUInt16BE(mem, addrPtr + 1);
229
230
  const remoteTlsCertificateSha256 = mem.slice(addrPtr + 3, addrPtr + 35);
230
231
  const targetIp = buffer.utf8BytesToString(mem, addrPtr + 35, addrLen - 35);
231
- address = { ty: "webrtc", ipVersion: '4', remoteTlsCertificateSha256, targetIp, targetPort };
232
+ address = { ty: "webrtc", ipVersion: 4, remoteTlsCertificateSha256, targetIp, targetPort };
232
233
  break;
233
234
  }
234
235
  case 17: {
235
236
  const targetPort = buffer.readUInt16BE(mem, addrPtr + 1);
236
237
  const remoteTlsCertificateSha256 = mem.slice(addrPtr + 3, addrPtr + 35);
237
238
  const targetIp = buffer.utf8BytesToString(mem, addrPtr + 35, addrLen - 35);
238
- address = { ty: "webrtc", ipVersion: '6', remoteTlsCertificateSha256, targetIp, targetPort };
239
+ address = { ty: "webrtc", ipVersion: 6, remoteTlsCertificateSha256, targetIp, targetPort };
240
+ break;
241
+ }
242
+ case 18: {
243
+ const targetPort = buffer.readUInt16BE(mem, addrPtr + 1);
244
+ const familyByte = buffer.readUInt8(mem, addrPtr + 3);
245
+ const family = familyByte === 4 ? 4 : familyByte === 6 ? 6 : undefined;
246
+ const remoteTlsCertificateSha256 = mem.slice(addrPtr + 4, addrPtr + 36);
247
+ const hostname = buffer.utf8BytesToString(mem, addrPtr + 36, addrLen - 36);
248
+ address = { ty: "webrtc", targetPort, hostname, family, remoteTlsCertificateSha256 };
239
249
  break;
240
250
  }
241
251
  default:
@@ -11,6 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  });
12
12
  };
13
13
  import { start as innerStart } from './internals/client.js';
14
+ import { resolveDnsOverHttps } from './internals/dns-over-https.js';
14
15
  export { AddChainError, AlreadyDestroyedError, CrashError, JsonRpcDisabledError, QueueFullError } from './public-types.js';
15
16
  /**
16
17
  * Initializes a new client. This is a pre-requisite to connecting to a blockchain.
@@ -185,17 +186,46 @@ function connect(config) {
185
186
  openOutSubstream: () => { throw new Error('Connection is closed'); },
186
187
  };
187
188
  }
188
- const { targetPort, ipVersion, targetIp, remoteTlsCertificateSha256 } = config.address;
189
+ const { targetPort, remoteTlsCertificateSha256 } = config.address;
189
190
  const state = {
190
191
  pc: undefined,
191
192
  dataChannels: new Map(),
192
193
  nextStreamId: 0,
193
194
  isFirstOutSubstream: true,
195
+ dnsAbort: null,
194
196
  };
197
+ // The SDP answer needs the literal IP address of the remote.
198
+ // Browsers expose no DNS API, so a multiaddress with a domain name is resolved over
199
+ // DNS-over-HTTPS. Resolution is started here and is only awaited in
200
+ // `onnegotiationneeded`, where the IP is actually needed.
201
+ let target;
202
+ if ("targetIp" in config.address) {
203
+ target = Promise.resolve({ targetIp: config.address.targetIp, ipVersion: config.address.ipVersion });
204
+ }
205
+ else {
206
+ const { hostname, family } = config.address;
207
+ const controller = new AbortController();
208
+ state.dnsAbort = controller;
209
+ const timeout = setTimeout(() => controller.abort(), 10000);
210
+ const finished = () => {
211
+ clearTimeout(timeout);
212
+ state.dnsAbort = null;
213
+ };
214
+ target = resolveDnsOverHttps(hostname, family, controller.signal).then((ip) => {
215
+ finished();
216
+ return { targetIp: ip, ipVersion: ip.includes(':') ? 6 : 4 };
217
+ }, (error) => {
218
+ finished();
219
+ throw error;
220
+ });
221
+ target.catch(() => { });
222
+ }
195
223
  // Kills all the JavaScript objects (the connection and all its substreams), ensuring that no
196
224
  // callback will be called again. Doesn't report anything to smoldot, as this should be done
197
225
  // by the caller.
198
226
  const killAllJs = () => {
227
+ if (state.dnsAbort)
228
+ state.dnsAbort.abort();
199
229
  // The `RTCPeerConnection` is created pretty quickly. It is however still possible for
200
230
  // smoldot to cancel the opening, in which case `pc` will still be undefined.
201
231
  if (!state.pc) {
@@ -216,6 +246,18 @@ function connect(config) {
216
246
  state.dataChannels.clear();
217
247
  state.pc.close(); // Not necessarily necessary, but it doesn't hurt to do so.
218
248
  };
249
+ // Due to <https://bugzilla.mozilla.org/show_bug.cgi?id=1659672>,
250
+ // connections from Firefox to a localhost WebRTC server always fail:
251
+ // Firefox gathers no loopback ICE candidate.
252
+ //
253
+ // Returns `true` if the connection was refused, in which case the caller must stop.
254
+ const refuseIfFirefoxLoopback = (ip) => {
255
+ if ((ip !== '127.0.0.1' && ip !== '::1') || navigator.userAgent.indexOf('Firefox') === -1)
256
+ return false;
257
+ killAllJs();
258
+ config.onConnectionReset("Firefox can't connect to a localhost WebRTC server");
259
+ return true;
260
+ };
219
261
  // Function that configures a newly-opened channel and adds it to the map. Used for both
220
262
  // inbound and outbound substreams.
221
263
  const addChannel = (dataChannel, direction) => {
@@ -278,19 +320,10 @@ function connect(config) {
278
320
  RTCPeerConnection.generateCertificate({ name: "ECDSA", namedCurve: "P-256", hash: "SHA-256" }).then((localCertificate) => __awaiter(this, void 0, void 0, function* () {
279
321
  if (state.pc === null)
280
322
  return;
281
- // Due to <https://bugzilla.mozilla.org/show_bug.cgi?id=1659672>, connections from
282
- // Firefox to a localhost WebRTC server always fails. Since this bug has been opened
283
- // for three years at the time of writing, it is unlikely to be fixed in the short
284
- // term. In order to provider better user feedback, we straight up refuse connecting
285
- // and stop the connection.
286
- // Note that this is just a hint. Failing to detect this will lead to the WebRTC
287
- // handshake timing out.
288
- // TODO: eventually remove this if the Firefox bug is fixed
289
- if ((targetIp == 'localhost' || targetIp == '127.0.0.1' || targetIp == '::1') && navigator.userAgent.indexOf('Firefox') !== -1) {
290
- killAllJs();
291
- config.onConnectionReset("Firefox can't connect to a localhost WebRTC server");
323
+ // A literal loopback address can be refused before anything is created. A domain
324
+ // name is checked once resolved, in `onnegotiationneeded`.
325
+ if ("targetIp" in config.address && refuseIfFirefoxLoopback(config.address.targetIp))
292
326
  return;
293
- }
294
327
  // Create a new WebRTC connection.
295
328
  state.pc = new RTCPeerConnection({ certificates: [localCertificate] });
296
329
  // We need to build the multihash corresponding to the local certificate.
@@ -365,6 +398,25 @@ function connect(config) {
365
398
  sdpOffer = sdpOffer.replace(/^a=ice-ufrag.*$/m, 'a=ice-ufrag:' + ufragPwd);
366
399
  sdpOffer = sdpOffer.replace(/^a=ice-pwd.*$/m, 'a=ice-pwd:' + ufragPwd);
367
400
  yield state.pc.setLocalDescription({ type: 'offer', sdp: sdpOffer });
401
+ // The answer needs the literal IP address of the remote, resolution was already stared.
402
+ let targetIp;
403
+ let ipVersion;
404
+ try {
405
+ ({ targetIp, ipVersion } = yield target);
406
+ }
407
+ catch (error) {
408
+ // `reset()` aborts the resolution, and a failure reported through
409
+ // `onconnectionstatechange` closes the connection.
410
+ if (state.pc.signalingState === "closed")
411
+ return;
412
+ killAllJs();
413
+ config.onConnectionReset("DNS resolution failed: " + (error instanceof Error ? error.message : String(error)));
414
+ return;
415
+ }
416
+ if (state.pc.signalingState === "closed")
417
+ return;
418
+ if (refuseIfFirefoxLoopback(targetIp))
419
+ return;
368
420
  // Transform certificate hash into fingerprint (upper-hex; each byte separated by ":").
369
421
  const fingerprint = Array.from(remoteTlsCertificateSha256).map((n) => ("0" + n.toString(16)).slice(-2).toUpperCase()).join(':');
370
422
  // Note that the trailing line feed is important, as otherwise Chrome