Skip to content

Instantly share code, notes, and snippets.

@chatziko
Last active October 3, 2022 12:54
Show Gist options
  • Save chatziko/e5a67b55c9d75e4bad1979db582411fe to your computer and use it in GitHub Desktop.
Save chatziko/e5a67b55c9d75e4bad1979db582411fe to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Cost of tilting a Uniswap V2 pool\n",
"\n",
"Consider a Uniswap V2 pool of tokens `A,B` with reserves $x_0, y_0$. We start with an amount $x_{in}$ of `A` tokens,\n",
"and swap it getting $y_{out}$ tokens of `B`.\n",
"Then we swap back the whole amount to `A`. The question is how much\n",
"do we lose in fees in this procedure.\n",
"\n",
"Let $x_1,y_1$ and $x_2,y_2$ be the pool's reserves after the first and second swap respectively.\n",
"Also let $\\varphi=0.003$ be the Uniswap fee, and $\\tilde{\\varphi} = 1-\\varphi$\n",
"(note that there is also a separate \"protocol fee\" which however is currently disabled).\n",
"\n",
"#### First swap\n",
"\n",
"In the first swap, the pool adds the whole amount $x_{in}$ tothe pool, so\n",
"$$ x_1 = x_0 + x_{in}$$\n",
"The [main formula](https://docs.uniswap.org/whitepaper.pdf) that Uniswap checks is:\n",
"$$\n",
"(x_1 - x_{in}\\varphi) (y_1 - y_{in}\\varphi) \\ge x_0 y_0\n",
"$$\n",
"In our case we only input `A` ($y_{in} = 0$), and we'll clearly ask to minimize $y_1$ (get back as many `B` tokens as possible),\n",
"so we'll have\n",
"$$\n",
"y_1 = \\frac{x_0 y_0}{x_1 - x_{in}\\varphi}\n",
" = \\frac{x_0 y_0}{x_0 + x_{in}\\tilde{\\varphi}}\n",
"$$\n",
"and $y_{out} = y_0 - y_1$.\n",
"\n",
"#### Increase in the reserve product\n",
"\n",
"Uniswap V2 is a constant product AMM, so without fees we would have $x_1y_1 = x_0y_0$. Due to the fee, however, the product does increase, the\n",
"question is how much? We have\n",
"$$\n",
" x_1 y_1 = (x_0 + x_{in})\\frac{x_0 y_0}{x_0 + x_{in}\\tilde{\\varphi}} = x_0y_0 \\frac{x_0 + x_{in}}{x_0 + x_{in}\\tilde{\\varphi}}\n",
"$$\n",
"so the product increases by a factor $\\frac{x_0 + x_{in}}{x_0 + x_{in}\\tilde{\\varphi}}$. The main observation here is that, no matter how large $x_{in}$ is,\n",
"this factor is bounded! We have (good old [L'Hôpital's rule](https://en.wikipedia.org/wiki/L%27H%C3%B4pital%27s_rule)):\n",
"$$\n",
" \\lim_{x_{in}\\to\\infty}\\frac{x_0 + x_{in}}{x_0 + x_{in}\\tilde{\\varphi}} = \\frac{1}{\\tilde{\\varphi}}\n",
"$$\n",
"Moreover, since $\\varphi \\le 1$, the factor is always bounded from above by $\\frac{1}{\\tilde{\\varphi}}$, that is:\n",
"$$\n",
" x_1 y_1 \\le \\frac{1}{\\tilde{\\varphi}} x_0 y_0\n",
"$$\n",
"\n",
"##### Second swap\n",
"\n",
"For the second swap, we have:\n",
"\n",
"\\begin{align*}\n",
"y_2 &= y_1 + y_{out} = y_0 &&\\text{(we give back all B tokens)} \\\\\n",
"x_2 &= \\frac{x_1 y_1}{y_2 - y_{out}\\varphi}\n",
" = \\frac{x_1 y_1}{y_0 - (y_0- y_1)\\varphi}\n",
" = \\frac{x_1 y_1}{y_0\\tilde{\\varphi} + y_1\\varphi}\n",
"\\end{align*}\n",
"\n",
"Finally, note that $y_1 \\ge 0$ (in fact $\\lim_{x_{in}\\to\\infty}y_1 = 0$), and from our bound on $x_1 y_1$ we get:\n",
"$$\n",
"x_2 \n",
" \\le \\frac{\\frac{1}{\\tilde{\\varphi}}x_0 y_0}{y_0\\tilde{\\varphi} + 0 \\varphi}\n",
" = \\tilde{\\varphi}^{-2}x_0\n",
"$$\n",
"\n",
"The amount we lost from the double swap is equal to the increase in the pools reserve, that is:\n",
"$$\n",
"cost = x_2 - x_0 \\le (\\tilde{\\varphi}^{-2} - 1) x_0\n",
"$$\n",
"So the cost is bounded from a quantity that only depends on the initial reserve $x_0$, no matter how large $x_{in}$ is.\n",
"\n",
"For $\\varphi = 0.003$ this gives $cost \\le 0.006027108 x_0$.\n",
"\n",
"The plot below gives the cost as a function of $x_{in}$, clearly showing that the cost is bounded by $0.006 x_0$.\n",
"It also shows that for small values of $x_{in}$ (up to a few percent points of $x_0$), the cost is approximately equal to $0.006 x_{in}$."
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA4gAAAFSCAYAAACwivGuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABlvklEQVR4nO3dd3xV9f3H8deHTMImbMJeyhCQAA7ctSCtIooVR91S+9O66t7VYkWt1llr3VYLiqhYEbWKW0BQ9pANYZOQvW++vz/ugYaQhIy7kryfj0ceuffcc773cw6X+83nnO/5fM05h4iIiIiIiEijcAcgIiIiIiIikUEJooiIiIiIiABKEEVERERERMSjBFFEREREREQAJYgiIiIiIiLiUYIoIiIiIiIigBJEERERERER8ShBFBEREZGIYWYbzewXZR8H6z0igZn1M7NFZpZlZteGOx5p2JQgitRzkdQJqgMUEam7zGyUmX1nZhlmlmZm35rZ8HDHVU/cAsxxzjVzzj0Z7mCkYVOCKFJGJCVU9ZA6QBGROsjMmgP/AZ4CWgOdgT8BBeGMqx7pBiwPdxAioARRJCjMLDrcMUQodYAiInVTXwDn3L+dcz7nXJ5z7hPn3BLYf3L1ZjNbYmY5ZvaimbU3s4+8USP/NbNW+xozs9vMbJ332gozG1/dgMzsVjObXmbZE2b2ZHXew8ycmfUu9fwVM/tzqeedzOwdM9ttZhtKj4DxYtjqvcdqMzulgvc43My+MLN0M1tuZmeUeu1z4CTgaTPLNrO+5Wz/sJm9V+r5I2b2mZnFVuFQiVSLEkSRKjpUR+N1jrea2RIgx8xGmNlP3vpvm9m0qnY4ZdoNSAforRu2TrAqHaC3njpBEZHI8zPgM7NXzey00sleKWcDp+JPJk8HPgLuANri/5uzdD+3DjgOaIH/SuS/zKxjNWOaCow1s2YAZhYF/AZ4M1DvYWaNgA+Axfivmp4CXG9mo82sH3ANMNw51wwYDWwsp40Yr41PgHbAH4A3vO1xzp0MfA1c45xr6pz7uZxQpgAnmdlQM7sKGAOc5ZwrrM7+iFSFEkSRqqtKR3Me8Cv8HcDbwCv4h+L8G9ifuFXW4ZTzvkHvAA8VUyA6wSp2gKBOUEQk4jjnMoFRgAP+Cew2s5lm1r7Uak8553Y657bi/76f55z7yTmXD7wLDC3V3tvOuW3OuRLn3DRgDTCimjFtAn7kf/3ryUCuc25uoN4DGA60dc7d75wrdM6t9/Z/IuAD4oD+ZhbjnNvonFtXThtHAU2Bh7w2Psc/XPe8auxrKvA48CpwOzDWOZcBYGbXmFmfau6XSIWUIIpUURU7miedc1uAwUC097zIOTcDmF9qvco6nLLvG4oO8FAxqRMUEWngnHMrnXOXOOeSgIFAJ+BvpVbZWepxXjnPm+57YmYXmb9oWbqZpXvttalBWG/yvz7mfP538jRQ79EN6LSvDa+dO4D2zrm1wPXAfcAuM5tqZp3KaaMTsMU5V1Jq2Sb8J2Or4ydgEHC797cGAM65p51za6rZlkiFlCCKVFEVO5p9X9idgK3OOVfOa1BJh1PB2we7A6w0JnWCIiJSmnNuFf5RMgOru62ZdcN/AvIaINE51xJYBlgNQnkbONHMkvCfSH2zBu+RCySUet6h1OMtwAbnXMtSP82cc2MBnHNvOudG4e9DHf5RMGVtA7p4I3X26QpsrepOmtkg4O/4T55eVua1L7zf883sKe/2jj9UtW2RspQgilRBNTqafQnhdqCzmZV+vUupx5V2OOUIRAcI6gRFRKQGzOwwM/uj1w9hZl3wn7icW4PmmuDvR3Z7bV1KDRJNAOfcbuAL4GX8fdjKGrzHIuB8M4syszHACaVemw9keffhN/bWGWhmw80/ddPJZhYH5OO/SlpycPPMw9//3mJmMWZ2Iv57NKdWZR/NrDP+2zeuAv4PGOS1gZm1wX/itg2QiP/E7vHAaVVpW6Q8ShBFyhdjZvH7fvDf31edzux7/MMyrzGzaDMbx4HDPivscMprLEAdIKgTFBGRmskCRgLzzCwHf2K4DPhjdRtyzq0A/oq/r9yJf8TIt7WI7U3gF5QaXVPN97gOf1+VDlwAvFeqHR/wa2AIsAHYA7yA/++COOAhb9kO/Pfe3162ce8e+tPx91d7gGeBi7yrsJUy//Qis4DHnHMznXO5wCPAZG+VI4Cl3u+pzrks/KORNh6qbZGK2IEj4ETEzDbiv0pW2mT8V+V+jz8xeg0YBrzunHuh1HZXOOf+6z1Pxt+J9MZfyS0K+Mk594D3eif8nddJ+DuZ1cBd+7YvJ67feu97i3PukVLLJ1c1Li+mV/Ff1XsP/32S65xzd1UWE7DL25fDgSLgO2CSc25bOXEOwN/5DcF/5fBO59y73mtfAP/aF1uZ7ZrjL2rwovPmSDSzm4Dxzrljzexk4Fj8Hfwpzrk7zaw//qI3/1feMRMREanPzOx6/Mlgd/y3eLxjZucBzZ1z/whjaFKHKUEUCREzmwc855x7Odyx1EXqBEVERA5kZi/iP4l9J/Cgc26dmT0EvOucmxfe6KSu0hBTkSAxsxPMrIM3xPRi/MM/Zoc7rjpsELDE+73IWza41GMREZEGxTl3uXNuvfd7nbfsNiWHUhu6gigSJGY2CXgA/32C6/FX5PwwvFGJiIiIiFQspFcQzWyMma02s7Vmdls5r8eZ2TTv9Xlm1r3Ua7d7y1dbqcnEzaylmU03s1VmttLMjg7R7ohUyjn3vHOuvfNPCn+EkkMRERERiXQhSxDNLAp4Bn8Fp/7AeV6BidIuB/Y653rjnyh7irdtf/yTdQ8AxgDPeu0BPAHMds4dhn+42UpERERERESk2qJD+F4jgLXOufUAZjYVGAesKLXOOPwTcQNMB5725pEbh790bwGwwczWAiPMbAX+MveXwP4ywoWVBdGmTRvXvXv3AO2SiIhEsoULF+5xzrUNdxx1hfpIEZGGobL+MZQJYmf8E3Hvk4J/Pp1y13HOFZtZBv75zjpz4ESsKd6yPPzzv71sZoOBhcB1zrmc0o1694JNAujatSsLFiwI1D6JiEgEM7NN4Y6hLunevbv6SBGRBqCy/rGuVzGNBo4E/u6cGwrkAAfd2+jdC5bsnEtu21YnkkVERERERMoTygRxK9Cl1PMkb1m565hZNNACSK1k2xQgpVQp3+n4E0YRERERERGpplAmiD8Afcysh5nF4i86M7PMOjOBi73HE4DPnX8ejpnARK/KaQ+gDzDfObcD2GJm/bxtTuHAexpFRERERESkikJ2D6J3T+E1wMdAFPCSc265md0PLHDOzQReBF73itCk4U8i8dZ7C3/yVwxc7ZzzeU3/AXjDSzrXA5dWN7aioiJSUlLIz8+v5V5Grvj4eJKSkoiJiQl3KCIiUoc0hD4ylNQfi0ikM/8FuoYjOTnZlb0Bf8OGDTRr1ozExET8RVPrF+ccqampZGVl0aNHj3CHIyISMma20DmXHO446oqG2EeGkvpjEYkUlfWPdb1ITUDk5+fX647PzEhMTNTZXxERqbb63keGkvpjEakLlCB66nvHV9/3T0REgkd9SODoWIpIpFOCKCIiIiIiIoASxIiyY8cOJk6cSK9evRg2bBhjx47l559/rlYbDz74YJCiExGR2jKzMWa22szWmtlB8/Z61bqnea/PM7PupV673Vu+2sxGH6pN85tsZj+b2UozuzboOxgk6h9FREJHCWKEcM4xfvx4TjzxRNatW8fChQv5y1/+ws6dO6vVjjpAEalrfCWOnIJi9mQXkLI3l7W7sliakkFmflG4QwsoM4sCngFOA/oD55lZ/zKrXQ7sdc71Bh4Hpnjb9sdf2XsAMAZ41syiDtHmJfjnED7MOXc4MDWIuxc06h9FRErJTYPti4P6FiGb5kIqN2fOHGJiYrjqqqv2Lxs8eDDOOW6++WY++ugjzIy77rqLc889l+3bt3PuueeSmZlJcXExf//73/nwww/Jy8tjyJAhDBgwgDfeeCOMeyQidZlzjoLiEvIKfeQW+cgv8pFX6KOg2EdeYYn/ufdT4P3OLyrxfu/78W+fX+zfNr/MOv5tSyj0lZQbw8uXDuekfu1CvOdBNQJY65xbD2BmU4FxHDh/7zjgPu/xdOBp89+0Ng6Y6pwrADZ400GN8NarqM3fA+c750oAnHO7grhvQaP+UUTEs+FrePd30CgK/vAjRAVnuhwliGX86YPlrNiWGdA2+3dqzr2nD6h0nWXLljFs2LCDls+YMYNFixaxePFi9uzZw/Dhwzn++ON58803GT16NHfeeSc+n4/c3FyOO+44nn76aRYtWhTQ+EUkchX7Ssgt8pFb4CO3sJjcQp/3U0xeoY+cQh95ZZbnFvq810o//t96+14rqcEsSDFRRnxMFPExUTSOiSI+phGNY6KIi4miZULs/ufxpX72rxd74LKBnVoE/oCFV2dgS6nnKcDIitbx5g/OABK95XPLbNvZe1xRm72Ac81sPLAbuNY5t6ZsUGY2CZgE0LVr10p3IBx9pPpHEWnwigvhiwfhm79B655w9gtBSw5BCWLE++abbzjvvPOIioqiffv2nHDCCfzwww8MHz6cyy67jKKiIs4880yGDBkS7lBFpAqcc+QW+sgpKCaroJicgmKyC4rJzi8mp9D/O7vAR3ZBETkFvgNey8r3r59TUOwldL4Kr75VpHFMFE3iomgcG0VCTDQJcVEkxPqTt4RY77WYaBJio/yvxUTtT9z2JXaNY6OIj46icWwj4qL/93p8dCOio3TnQgSJA/Kdc8lmdhbwEnBc2ZWcc88Dz4N/HsTQhlhz6h9FpEFIXQfvXA7bfoIjL4LRf4G4pkF9SyWIZRzqSl+wDBgwgOnTp1d5/eOPP56vvvqKDz/8kEsuuYQbb7yRiy66KIgRikiRr4Ss/GIy84rIzC864HFmXjFZ+UVk5vsTuX0J3r4kMKdUoleVK3NRjYwmsVE0i4+hSVwUTeOiaRYfTaeW8STERtMkNorG+39H+ZfF+ZO4hNj/JX4JMdE09hK/+OgoGjVSif0w2or/nsB9krxl5a2TYmbRQAsg9RDbVrQ8BZjhPX4XeLmW8Yelj1T/KCINknPw07/go1v9Vwt/8xr0HxeSt1aCGCFOPvlk7rjjDp5//nkmTZoEwJIlS2jZsiXTpk3j4osvJi0tja+++opHHnmETZs2kZSUxJVXXklBQQE//vgjF110ETExMRQVFRETE7zLziJ1VUmJIyu/mL25haTnFZGRV3TIZK/067mFvkrbN4NmcdE0i4+haVw0TeOjadE4hs4t42kaF02TuGiaeb+bxkf7l8X+7/H+deKjiYtupPnS6p8fgD5m1gN/EjcROL/MOjOBi4HvgQnA5845Z2YzgTfN7DGgE9AHmA9YJW2+B5wEbABOAKpX9jNCqH8UkQYnNw3+cz2seB+6Hwfj/wEtOh9ys0BRghghzIx3332X66+/nilTphAfH0/37t3529/+RnZ2NoMHD8bMePjhh+nQoQOvvvoqjzzyCDExMTRt2pTXXnsNgEmTJnHEEUdw5JFH6iZ8qbecc+QU+tibU0hGXpE/4cstIj23kL25Rfsfp3uvZeR6v/OKKr16F9XIaB4fTfPGMTSPj6F542jaNWtK8/gYmu1f/r/X9y/zljeJjdYVOqmQd0/hNcDHQBTwknNuuZndDyxwzs0EXgRe94rQpOFP+PDWewt/8Zli4GrnnA+gvDa9t3wIeMPMbgCygStCta+BpP5RRBqUfYVosnfCL+6DY671F6UJIXOuztxuEBDJycluwYIFByxbuXIlhx9+eJgiCp2Gsp9S95SUODLyikjNKSA1u5DUnEJSswu834Wk5RSyJ7uAtBx/ApiRV0iRr+LvrqZx/it3LRNiaJUQS4uEGFolxNCycSwtE2JomRBLqwR/YteiVDLYOCZKV+3qGTNb6JxLDnccdUVD7iNDScdURA7iK4I5kw8sRNP5yKC9XWX9o64gikhQFBaXsCe7gF1ZBezKzGd3dsFByd6+ZHBvbiG+Ci7ttUqIoXWTWBKbxtG7XdP9yd2+RK9l4xhaNfH/bpkQS4vGMcRGq1CKiIiI1BGlC9EM/S2MeSjohWgqowRRRKolt7CYXZle4peVf8Dj3VkF3vN89uaWP8l58/hoEpvGkdgklu5tEjiyWyvaNI3dnwQmNokl0XveOiFWVTFFRESkfgpjIZrKKEH0OOfq9dCyhjaUWGomM7+I7en5bM/IY3tGPtvT89iW8b/nuzILyC4oPmi7mCijbdM42jaPp2tiAsndW9GuWTztmsfRrlkc7ZrF07ZZHK2bxOrqnoiIiEjeXvjgurAVoqmMEkQgPj6e1NRUEhMT62WS6JwjNTWV+Pj4cIciYVTkK2Fbeh5b0vLYlp7Htow8fzKY6U8Et2fkH5T8NTJo1yyeDi3iOaxDM47v09ZL+uL9iZ/3uGXjGBVnEREREamKCChEUxkliEBSUhIpKSns3r073KEETXx8PElJSeEOQ4KopMSxMyufLWl5bEnLJWVvHlv25u5/vD0j76AKnm2bxdGxRTw92zbh2N5t6NQyng4tGtOpRTwdWzamXbM4YjTEU0RERKT2yhaiufzToBaiqSkliEBMTAw9evQIdxgih1TsK2Freh7r9+SwcU8OG/bksDHVnwRu3ZtHoa/kgPXbN4+jS6sERvRoTZdWjUlqnUCXVgkktWpM++bxGu4pIiIiEgoRVoimMkoQRSKMc44dmfls8BLADbtz2Jiaw/o9OWxJyz1geoemcdF0b5PA4R2b8cv+7b0EsDFdWifQuWVj4mMiZ7iCiIiISIMToYVoKqMEUSRMnHNsy8jn551ZrNmZxc87s1mzM4u1u7LJKfTtXy82uhE9EpvQt10zftm/Az3bNKF7myb0aNOENk1j6+V9syIiIiJ1XgQXoqmMEkSRENiVlc+KbZms2ZnNzzuz+HlXNmt3Zh2QCLZpGkff9k05J7kLvdo2oUebpvRo24SOzeNVAEZEGrzZs2dz3XXX4fP5uOKKK7jtttuqvE5l26anp3PFFVewbNkyzIyXXnqJo48+OmT7JSL11MZvYMakiC1EUxkliCIBVFLi2Jiaw/JtmazYnsmKbZks35bJnuyC/euUTgR7t2tK3/bN6NOuKa2axIYxchGRyOXz+bj66qv59NNPSUpKYvjw4Zxxxhn079//kOv069ev0m2vu+46xowZw/Tp0yksLCQ3Nzdcuyki9YGvCOY8CN88HtGFaCqjBFGkhkpKHOt2Z/PTlnSWpmSwYnsmK7dnkutdFYxuZPRp34wT+7Wlf8fmHN6xOYd1aKZEUESkmubPn0/v3r3p2bMnABMnTuT9998/IEGsaJ0TTzyxwm0zMjL46quveOWVVwCIjY0lNvbQ39EnnXQSd9xxB6eeeip33XUXGRkZPPXUUwHeaxGpc+pQIZrKKEEUqaKdmfks2pLOoi3pLN6SzpKUjP3zBjaLi+bwTs35TXIX+ndqzoBOzendrilx0XVjKIGISJV8dBvsWBrYNjsMgtMeqnSVrVu30qVLl/3Pk5KSmDdvXpXWqWzbDRs20LZtWy699FIWL17MsGHDeOKJJ2jSpMn+9XNzc2ncuPEB93v/6U9/4p577mHXrl389NNPzJw5s2b7LiL1Qx0sRFMZJYgi5Sj2lbByexbzN6axYGMai7aksz0jH4CYKOPwjs0ZP7QzQ7q0ZHCXlvRs00T3CYqI1DHFxcX8+OOPPPXUU4wcOZLrrruOhx56iAceeGD/Oj179mTu3Ll07959/7Ljjz8e5xyPPfYYX3zxBVFR/pOBd9999wHbikgDkLcXPrgeVrznFaJ5DlrU7bnHlSCKAPlFPhZvSeeHjWnM37iXHzft3X91sEvrxozo0ZrBSS0Z0rUl/Ts21/QRItIwHeJKX7B07tyZLVu27H+ekpJC586dq7ROZdsmJSWRlJTEyJEjAZgwYQIPPXTgPv7000+0a9fugGVLly5l+/btJCYm0qxZMwB27NhBUVERW7du5cILL+SMM85g7ty5TJs2LQBHQEQiUh0uRFMZJYjSIBX7Slicks7Xa/bw3dpUFm1J3z/JfL/2zThzaCdG9EhkRPfWdGgRH+ZoRUQatuHDh7NmzRo2bNhA586dmTp1Km+++WaV1unXr1+F23bo0IEuXbqwevVq+vXrx2effXbAfY0AHTt2POD59u3bueCCC3j//fe59tprmT17NmPGjGHRokUMGTKExYsXc/7553PllVdywQUXBPfAiEh4HFSI5hPoPCzcUQWMEkRpEJxzrN+Twzdr9vD1mj3MW59KVkExZjCocwsuObY7w7u3JrlbKxWRERGJMNHR0Tz99NOMHj0an8/HZZddxoABAwAYO3YsL7zwAp06dapwnYqWAzz11FNccMEFFBYW0rNnT15++eUK48jNzeWss87ir3/9K4cffjh33303t9566/4E8cwzz+Tdd99l/PjxAJqnVqQ+Sl0H71wB234MSyGaz1buZEtaLpcc2yNo76EEUeqt/CIf363bw39X7uKLVbvY5t1D2KV1Y349uBPH9WnDMb0SaZmghFBEJNKNHTuWsWPHHrR81qxZh1ynouUAQ4YMYcGCBVWKISEhge+//37/8+OPP37/8zVr1tC3b1/Wrl1L37592bNnDx06dKhSuyJSB4S5EM2GPTnc/8Fy5qzeTf+OzbnwqG5ERzUKynspQZR6ZVdmPp+t2sVnK3fyzdo95BeV0CQ2ilF92nD1yb05rndbuiYmhDtMERGpZ1588cUDfrdp04ZHH300nCGJSKCEsRBNbmExz8xZyz+/2kBsdCPuHHs4Fx/TPWjJIShBlHpgc2ouHy7dzkfLtrMkJQOAzi0bc25yF045vD0je7bWdBMiIiIiUn2lC9Gcci8ce11ICtE455i1dAd//nAF2zPyOWtoZ2477TDaNQ9+bQwliFInbUnzJ4UfLtnO0q3+pHBwl5bcPLofpxzejn7tm+neDxERERGpmTAWolmzM4t7Zy7nu3WpHN6xOU+eN5Th3VuH5L1BCaLUIXuyC3h/0TZmLtrKYu9K4eCkFtwx9jBOG9iRLq01dFREREREaumAQjQXwpgpISlEk5lfxBP/XcOr322kSVw0D4wbwPkjuxEV4rm2lSBKRCssLuHzVbt458cU5qzaRXGJY2Dn5tx+2mGMHaSkUEQkFJxzGpURIM65cIcgIhVxDha9AbNu8ReiOedVGHBm0N+2pMTx7k9b+ctHq0jNKWDi8K7cPLofrcNUWT+kCaKZjQGeAKKAF5xzD5V5PQ54DRgGpALnOuc2eq/dDlwO+IBrnXMfe8s3Alne8mLnXHJIdkaCavWOLP49fzPvL9rK3twi2jaL4/JRPTh7WBJ92zcLd3giIg1GfHw8qampJCYmKkmsJeccqampxMdrfl2RiBOmQjTLtmZw78zlLNy0lyFdWvLSJckckdQy6O9bmZAliGYWBTwDnAqkAD+Y2Uzn3IpSq10O7HXO9TazicAU4Fwz6w9MBAYAnYD/mllf55zP2+4k59yeUO2LBEdhcQkfL9/B699vYv7GNGKjGnHqgPZMGJbEcb3bBLVak4iIlC8pKYmUlBR2794d7lDqhfj4eJKSQlP9UESqaOM3MON3kL0jZIVo0nMLefST1bwxbzOtE2J5eMIRTDgyiUYhHk5anlBeQRwBrHXOrQcws6nAOKB0gjgOuM97PB142vynK8cBU51zBcAGM1vrtfc9Uudtz8jjzXmb+ff8LezJLqBr6wTuGHsY5wzroknrRUTCLCYmhh49gjchs4hI2PiK4Iu/wNePhawQja/EMfWHzTz68Woy84u55JjuXP+LvrRoHBPU962OUCaInYEtpZ6nACMrWsc5V2xmGUCit3xumW07e48d8ImZOeAfzrnny76xmU0CJgF07dq19nsiAbFqRybPf7memYu34XOOk/u148Kju3FCn7YRcfZEREREROqpMBSiWbhpL/fOXMayrZmM7NGaP40bwGEdmgf1PWuiPhSpGeWc22pm7YBPzWyVc+6r0it4SePzAMnJybo7PIycc8zbkMZzX67ji9W7SYiN4qKju3Ppsd1VcEZEREREguuAQjTRISlEszurgCmzVzF9YQrtm8fx5HlDOf2IjhF7X3coE8StQJdSz5O8ZeWtk2Jm0UAL/MVqKtzWObfv9y4zexf/0NMDEkQJP+ccX/y8myf+u4ZFW9JJbBLLTb/sy4VHdaNlgoaRioiIiEiQhbgQTbGvhH/N3cRfP/2Z/CIfvz+xF9ec1JsmcZF9jS6U0f0A9DGzHviTu4nA+WXWmQlcjP/ewgnA5845Z2YzgTfN7DH8RWr6APPNrAnQyDmX5T3+JXB/aHZHqsI5x3frUvnrJ6v5cXM6Sa0a8+czBzJhWBLxMcG9+VdEREREBAh5IZoFG9O4671lrNqRxXF92nDfGQPo1Tb4cykGQsgSRO+ewmuAj/FPc/GSc265md0PLHDOzQReBF73itCk4U8i8dZ7C39Bm2Lgauecz8zaA+96l2ejgTedc7NDtU9SuR82pvHox6uZtyGNji3imTx+IOcM60JstKqRioiIiEgIHFCIpkfQC9HszirgoY9W8c6PKXRqEc9zFx7J6AEdInY4aXlCen3TOTcLmFVm2T2lHucD51Sw7WRgcpll64HBgY9UamNTag5/mbWK2ct30LZZHPed3p+JI7rqiqGIiIiIhE4IC9GUHU76fyf24pqTe5MQG9nDSctT9yKWiJWZX8Qzn6/l5W83Eh1l/PHUvlxxXE8axyoxFBEREZEQCXEhmgUb07j7/eWs3J5Z54aTlkcJotSac463F6Yw5aNVpOUWMuHIJG4a3Y/2zePDHZqISEQxszHAE/hvtXjBOfdQmdfjgNeAYfiLtJ3rnNvovXY7cDngA651zn1cWZtm9gpwApDhNX+Jc25REHdPRCT8Shei6TYKzvpH0ArR7Mn2DyedvjCFji3i+fsFRzJmYN0aTloeJYhSK2t3ZXPHu0uZvyGN5G6tePWMEQzs3CLcYYmIRBwziwKeAU7FP5/vD2Y20zm3otRqlwN7nXO9zWwiMAU418z6478vfwD+Ym3/NbO+3jaVtXmzc2560HdORCQShKgQTbGvhDfmbebRT1bvr076hzo6nLQ89WMvJOTyi3w8+8U6/v7FWhrHRPHQWYP4TXIXTXAvIlKxEcBa7/55zGwqMA5/AbZ9xgH3eY+nA0+b/1T0OGCqc64A2OAVcxvhrXeoNkVE6rcQFqJZuCmNu99bzortmYzq3YY/javbw0nLowRRqm3Z1gxumLaINbuyOXNIJ+78VX/aNosLd1giIpGuM7Cl1PMUYGRF63jVvzOARG/53DLbdvYeV9bmZDO7B/gMuM1LMA9gZpOASQBdu3at5i6JiIRZ6jqYcSVsXRjUQjR7sguY8tEq3vaGkz57wZGcVg+Gk5ZHCaJUWbGvhL9/sY4nPltDYtNYXrl0OCf2axfusEREpHy3AzuAWOB54FbKmSvYOfe89zrJyckulAGKiNSYc7DoTfjoFv8w0nNegQHjA/42vhLHm/M28cjHq8kr8nHVCf7hpJE+2X1t1N89k4DauCeH66ctYtGWdM4Y3IkHxg2kRUJMuMMSEalLtgJdSj1P8paVt06KmUUDLfAXq6ls23KXO+e2e8sKzOxl4KYA7IOISPiFqBDNwk17uef9ZSzf5h9Oet8ZA+jdrn4NJy2PEkQ5pI+Wbufm6UuIamQ8dd5QTh/cKdwhiYjURT8AfcysB/4kbiJwfpl1ZgIXA98DE4DPnXPOzGYCb5rZY/iL1PQB5gNWUZtm1tE5t927h/FMYFmQ909EJPg2fgszJgW1EE1qdgFTZq/irQUpdGgezzPnH8nYQfVzOGl5lCBKhQqLS/jLRyt5+duNDOnSkqfPH0pSq4RwhyUiUid59xReA3yMf0qKl5xzy83sfmCBc24m8CLwuleEJg1/woe33lv4i88UA1c753wA5bXpveUbZtYWfxK5CLgqRLsqIhJ4IShEU3o4aW6hj9+d0JNrT+5Tr4eTlqdh7a1U2Y6MfK7610IWbUnnsmN7cNtphxEb3SjcYYmI1GnOuVnArDLL7in1OB84p4JtJwOTq9Kmt/zk2sYrIhIRQlCI5sfN/uGky7ZmckyvRO4fN4De7ZoF9D3qCiWIcpDFW9K58rUF5BQU8/cLjuS0QR3DHZKIiIiINDQhKESTml3Aw7NXM23BFto3j+Pp84fyq0EdG8xw0vIoQZQD/GfJNv741mLaNovj9cuPpV+HhnnmRERERETCKG8v/OcGWP5uUArR+Eocb87fzKMfryanoJjfHd+TP5zSh6YNbDhpeXQEBADnHE9/vpa/fvozyd1a8dxvh9GmqeY2FBEREZEQO6AQzT1w7PUBLUTz0+a93O0NJz26p384aZ/2uiiyjxJEoaTE8acPlvPq95sYP7QzD509iLjowFaDEhERERGpVJAL0ezNKWTK7FVM/cE/nPSp84by6yMa9nDS8ihBbOCKfCX88a3FzFy8jStG9eCOsYfTqJH+k4iIiIhICAWxEE1JiePthVt46KNVZOYXc+VxPbjuF301nLQCOioNWH6Rj9//ayFzVu/m5tH9+L8Te+kMioiIiIiETpAL0azYlsld7y3lx83pDO/eij+fOUg1Ng5BCWIDlV/k48rXFvDN2j1MHj+QC0Z2C3dIIiIiItKQBLEQTXZBMY9/+jOvfLeRFo1jePScwZx9ZGddDKkCJYgNUEGxj9+9vpCv1+zh4QlH8JvkLuEOSUREREQakiAVonHO8eHS7TzwnxXsyirg/BFduXl0P1omxNY+5gZCCWIDU1hcwu//9SNf/rybh84apORQREREREIniIVo1u/O5t6Zy/l6zR4Gdm7OP36bzJAuLQPSdkOiBLEBKSlx3PT2Yj5ftYvJ4wcycUTXcIckIiIiIg1F2np454qAF6LJL/Lx7Jy1PPfleuKiG3H/uAFcMLIbUSq8WCNKEBuQB2etZObibdwypp/uORQRERGR0AhiIZo5q3dx7/vL2ZyWy/ihnbl97GG0axYfkLYbKiWIDcQ/v1rPC99s4OKju/H7E3qFOxwRERERaQiCVIhmW3oe93+wgtnLd9CrbRPevHIkx/RqE4CARQliA/Dhku1MnrWSsYM6cM/pA1S9SURERESCLwiFaIp8Jbz0zQae+GwNJc5xy5h+XDGqJ7HRjQITsyhBrO+Wb8vgj28v4siuLXnsN0M0FltEREREgstXBF88BN88Bq26B6wQzbz1qdz9/jJ+3pnNqf3bc8+v+9OldULt45UDKEGsx1KzC5j02kJaNo7lud8OIz6m9qWDRUREREQqVLoQzZAL4bTaF6LZk13Ag7NWMuPHrSS1aswLFyXzi/7tAxSwlKUEsZ4q8pVw9Zs/sju7gLd/d7Ru1hURERGR4HEOFv8bZt0csEI0vhLHm/M388jsVeQV+bj6pF5cc1IfGsfqokcwKUGsp6Z8tIq569N47DeDGaz5X0REREQkWPL2wn9uhOUzAlaIZmlKBne9t5TFKRkc0yuR+8cNpHe72k+JIYemBLEe+nzVTl74ZgMXHd2Ns46sfZUoEREREZFylS5Ec/LdMOqGWhWiycgr4q+frOb1uZto0zSOJyYO4YzBnVRkMYSUINYzOzLyuentJRzesTl3jD083OGIiIiISH1UthDNZZ9AUs0L0TjneG/RViZ/uJK0nEIuPro7N/6yL83jYwIXs1SJEsR6xFfiuH7aT+QX+Xj6/KEqSiMiIiIigZe2Ht65ErYuCEghmjU7s7jrvWXM25DG4C4teeXSEQzs3CKAAUt1KEGsR174ej1z16fxyIQj6NVWY7RFREREJIACXIgmt7CYpz5fyz+/Wk+TuGgeHD+IicO70EjTsoWVEsR6Yu2ubP766c+MHtCeCcN036GIiIiIBFBeOvznBq8QzbEw/h/QskuNm/t81U7ufm85W9PzOGdYEreddhiJTeMCF6/UmBLEesBX4rh5+mISYqN44MyBuolXRERERAJn47fw7u8ga3utC9Fsz8jjTzNXMHv5Dvq0a8q0SUcxsmdigAOW2lCCWA+8+M16ftqczhMTh2i+QxEREREJjNKFaFp2q1UhmmJfCa9+v4nHPllNcYnj5tH9uPK4nsRGNwpw0FJbIU0QzWwM8AQQBbzgnHuozOtxwGvAMCAVONc5t9F77XbgcsAHXOuc+7jUdlHAAmCrc+7XIdiViLEpNYe/fvIzv+zfnjMGdwp3OCIiIiJSHxxUiOYhiGtWo6YWbUnnzneXsnxbJif2a8v9Zwyka2JCgAOWQAlZguglcc8ApwIpwA9mNtM5t6LUapcDe51zvc1sIjAFONfM+gMTgQFAJ+C/ZtbXOefztrsOWAk0D9HuRIz7P1hBdCPj/nEaWioiIiIitRTAQjSZ+UU8+rF/TsN2zeJ49oIjOW1gB/3NGuFCeQVxBLDWObcewMymAuOA0gniOOA+7/F04Gnzf4LGAVOdcwXABjNb67X3vZklAb8CJgM3hmJHIsV/V+zks1W7uGPsYXRooaGlIiIiIlILASpE45zjgyXbeeA/K0jNLuDio7vzx1/2pZnmNKwTQpkgdga2lHqeAoysaB3nXLGZZQCJ3vK5Zbbt7D3+G3ALUOE1bzObBEwC6Nq1a413IJLkF/n403+W07tdUy49tke4wxERERGRumzTdzBjUq0L0Wzck8Pd7y/j6zV7GNS5BS9dPJxBSZrTsC6p00VqzOzXwC7n3EIzO7Gi9ZxzzwPPAyQnJ7vQRBdcz325ji1pebx5xUhionRzr4iIiIjUgK8IvpwCX/+1VoVoCop9PP/lep6as5bYqEb86YwBXHhUN6I0p2GdE8oEcStQ+hp1kresvHVSzCwaaIG/WE1F254BnGFmY4F4oLmZ/cs5d2FwdiEy7MzM57kv1/GrQR05pnebcIcjIiIiInXRAYVoLoDTptSoEM3361K5672lrNudw68GdeSe0/vTvrluf6qrQpkg/gD0MbMe+JO7icD5ZdaZCVwMfA9MAD53zjkzmwm8aWaP4S9S0weY75z7HrgdwLuCeFN9Tw4B/vbfn/GVOG4dc1i4QxERERGRuqZsIZoJL8PAs6rdTGp2AZNnrWTGj1vp0roxL186nJP6tQtCwBJKIUsQvXsKrwE+xj/NxUvOueVmdj+wwDk3E3gReN0rQpOGP4nEW+8t/AVtioGrS1UwbVDW7spi2g9buOjo7ioPLCIiIiLVE4BCNCUljrcWbOEvH60it7CYq0/qxTUn9aFxbPXvWZTIE9J7EJ1zs4BZZZbdU+pxPnBOBdtOxl+ptKK2vwC+CESckezh2atJiI3mDyf3DncoIiJSTcGYD7gKbT4JXOacaxrEXRORuiAAhWhW78jizneXsmDTXkZ0b83k8QPp075m8yNKZKrTRWoamh837+WTFTv546l9SWwaF+5wRESkGoIxH7C3TYVtmlky0CoEuycikSwAhWhyC4t58rO1vPD1eprFR/PwhCM4Z1iS5jSsh5Qg1iFPfraG1k1iuWyUprUQEamDgjEfMBW16SWkj+C/379ms1yLSN0XgEI0n6/ayd3vLWdreh6/SU7ittMOp3WT2CAFLOGmBLGOWJKSzherd3Pz6H40idM/m4hIHRSs+YAravMaYKZzbntlZ/jr41zBIkJACtFsz8jjTzNXMHv5Dnq3a8q0SUcxsmdikAKWSKFMo4546vO1tGgcw0VHdwt3KCIiEuHMrBP+e/pPPNS69XGuYJEGr5aFaIp9Jbz6/SYe+2Q1xSWOm0f348rjehIbrbm3GwIliHXAyu2ZfLpiJ9f/og/N4mPCHY6IiNRMMOYDpoLlQ4HewFrv6mGCma11zqnCmUh9t68QTea2GhWiWbQlnTvfXcrybZmc2K8t958xUJXzGxgliHXAM3PW0jQumkuP0b2HIiJ1WMDnAwasvDadc8uBDvsaNbNsJYci9VzZQjSXf1qtQjRZ+UU8+vFqXpu7iXbN4nj2giM5bWAHFaFpgJQgRrit6Xl8tGwHl4/qQYsEXT0UEamrgjUfcHlthnrfRCTMalmIZvayHdw7cxm7sgq46Khu3DS6n0atNWBKECPca99tBODiY7qHNQ4REam9YMwHXF6b5ayjORBF6qPShWis+oVotqXnce/M5Xy6YieHdWjGcxcOY2hXzYzT0ClBjGA5BcW8OX8zYwZ2oHPLxuEOR0REREQiRS0K0fhKHK9+t5G/frIan3PcftphXDaqBzFRKkIjShAj2vSFKWTlF3PZsbr3UEREREQ8tShEs2xrBne8u5QlKRmc0Lctfz5zIF1aqwiN/I8SxAhVUuJ4+dsNDOnSkmHddKlfREREpMGrRSGa3MJiHv/0Z176diOtEmJ48ryhnH5ERxWhkYMoQYxQ36zdw8bUXJ44tW+4QxERERGRcKtFIZo5q3Zx13vL2Jqex3kjunDbmMNV/FAqpAQxQk39YTOtEmIYM7DDoVcWERERkfrJOVg8FWbdVO1CNLsy8/nTByv4cOl2erdrylu/O5oRPVoHOWCp65QgRqA92QV8umInFx3dnbjoqk9sKiIiIiL1SOlCNF2PgbOer1IhmpISx5vzNzNl9ioKiku48dS+/O6Envq7UqpECWIEmvFjCkU+x8ThVatEJSIiIiL1TA0L0azekcUd7y5l4aa9HN0zkcnjB9KzrWa6kapTghhhnHNM/WELw7q1ok/7qk9wKiIiIiL1QA0L0eQX+Xjq8zX848v1NI2P5pEJRzBhWJKK0Ei1KUGMMPM3pLF+dw6PTOgV7lBEREREJJRqWIjm27V7uPPdpWxMzeWsIztz59jDSWwaF4KApT5Sghhhpi9MoWlcNL86omO4QxERERGRUDioEM1LMPDsQ26Wml3A5A9XMuOnrXRPTOCNK0ZybO82IQhY6jMliBEkv8jH7GU7GDOwAwmx+qcRERERqffy0uHDG2HZO1UuROOc4+2FKTw4ayXZ+cVcc1Jvrjm5N/ExKkIjtacsJILMWbWLrIJixg3pFO5QRERERCTYDihEcxeMuvGQhWjW787mjneXMnd9GsO6teIvZw2ir+pWSAApQYwg7y/aRpumcRzTS0MDREREROotX7FXiOZRrxDNJ5CUXOkmBcU+nvtiPc/MWUtcTCMmjx/IecO70qiRitBIYClBjBAZeUV8vnoXF4zsSpT+o4uIiIjUT2nr/VcNU36ociGa+RvSuH3GEtbtzuFXR3Tk3l/3p13z+BAFLA2NEsQI8fGyHRQWlzBuSOdwhyIiIiIigVaDQjQZuUX85aOVTP1hC51bNublS4Zz0mHtQhSwNFRKECPEf5Zup2vrBAYntQh3KCIiIiISSNUsROOc46NlO7jn/eWk5RRw5XE9uOHUvipiKCGhT1kEyMwv4vt1e7js2B6azFRERESkPtn0vVeIZmuVCtFsz8jj7veW89+VOxnQqTmvXDqcgZ11AUFCRwliBJizahdFPscvB3QIdygiIiIiEggHFKLpeshCNCUljn/N28TDs1dTXFLC7acdxuWjehAd1SiEQYsoQYwIs5ftoF2zOIZ2aRnuUERERESkttI2wIwr/YVoBp8PYx+utBDNmp1Z3DZjKQs37WVU7zY8OH4QXRMTQhiwyP8oQQyz/CIfX6zezVlHdlaZYhEREZG6zDlYMg0+vAms0SEL0RQU+3h2zjqe/WItTeKi+es5gznryM665UjCqtoJopmdD5wB+AADPnDO/TvQgTUUX6/ZQ16Rj9EaXioiUieoHxSRch1UiOYf/qGlFViwMY3bZixl7a5sxg3pxN2/7k+bpnGhi1ekAjW5gniCc27ividm9gygjrGGPlm+g2bx0RzVMzHcoYiISNWoHxSRA1WjEE1mfhEPz17Fv+Zu9k9dcelwTuqnqSskctQkQYwzs18BW4AkoHFgQ2o4Skocc1bv5oS+bYmN1g3IIiJ1hPpBEfGrZiGaT5bv4O73l7E7q4DLju3BH3/ZlyZxuuNLIktNPpH/B5wFDAJSgGsCGlEDsmJ7JnuyCzhRZ41EROoS9YMiUq1CNLsy87l35nI+WraDwzo04x+/TWaIihNKhKpygmhmTwDXO+dygX8FL6SG48ufdwNwfN82YY5EREQORf2giADVKkRTUuKY+sMW/vLRSgqKS7h5dD8mHd+TGE1dIRGsOp/OLGCmmTUBMLPRZvZtcMJqGL78eTcDOjWnXbP4cIciIiKHpn5QpKHLS4d3roB3fwcdBsHvv6kwOVy3O5uJ/5zLHe8uZUCn5nx8/fFcfVJvJYcS8ap8BdE5d5dXue0LMysEsoHbqvNmZjYGeAKIAl5wzj1U5vU44DVgGJAKnOuc2+i9djtwOf6qcdc65z42s3jgKyDO25fpzrl7qxNTuGTmF7Fw015+d3zPcIciIiJVEIh+UETqsNKFaE66C44rvxBNYXEJz3+1jic/X0t8dCOmnD2I3yR30dQVUmdUZ4jpKcCVQA7QEbjMObe6GttHAc8Ap+K/Z+MHM5vpnFtRarXLgb3Oud5mNhGYApxrZv2BicAAoBPwXzPrCxQAJzvnss0sBvjGzD5yzs2talzh8t3aPfhKnO4/FBGpI2rbD4pIHVWNQjQ/bd7Lbe8sZfXOLH41qCP3ntFfI8WkzqlOkZo7gbudc9+Y2SBgmpnd6Jz7vIrbjwDWOufWA5jZVGAcUDpBHAfc5z2eDjxt/tMt44CpzrkCYIOZrQVGOOe+x38GFyDG+3HV2Kew+fLn3TSLi2Zo15bhDkVERKqmtv2giNQ1VSxEk11QzKMfr+bV7zfSoXk8L1yUzC/6tw9DwCK1V50hpieXerzUzE4D3gGOqWITnfGXBN8nBRhZ0TrOuWIzywASveVzy2zbGfZfmVwI9Aaecc7NK/vGZjYJmATQtWvFE5aG0tdr9nB0r0SNQxcRqSMC0A+KSF1RjUI0n6/ayV3vLmN7Zj4XHdWNm0b3o1l8TIgDFgmcGk+84pzb7g23CSvnnA8YYmYtgXfNbKBzblmZdZ4HngdITk4O+xXGLWm5pOzN44pRPcIdioiI1FCk9IMiEmD5GfCfG2HZdOh6DJz1D//Q0jJ2ZxVw/39W8MHibfRp15TpVx3DsG6twhCwSGDVamZO51xeNVbfCnQp9TzJW1beOilmFg20wF+s5pDbOufSzWwOMAY4IEGMNPM2pAFwVK/EMEciIiK1Uc1+UEQiXRUK0TjneHthCpM/XEleoY8bT+3LVSf0IjZao8KkfgjlJ/kHoI+Z9TCzWPxFZ2aWWWcmcLH3eALwuXPOecsnmlmcmfUA+gDzzaytd+UQM2uMvwDOquDvSu3MXZ9Kq4QY+rYrfzJVERGpn8xsjJmtNrO1ZnZQBVSvn5vmvT7PzLqXeu12b/lqMxt9qDbN7EUzW2xmS8xsupk1DfoOitRVvmL4fDK8MhYaNfIXojnh5oOSw82pufz2xfncMn0Jfds3ZdZ1x3HtKX2UHEq9cshPs5m97v2+rjZv5JwrBq4BPgZWAm8555ab2f1mdoa32otAoleE5ka88uHOueXAW/gL2swGrvaGlnYE5pjZEvwJ6KfOuf/UJs5QmLs+lZE9EmnUSOWORUQiXaD6wVLVvE8D+gPneVW6S9tfzRt4HH81b8pU8x4DPGtmUYdo8wbn3GDn3BHAZvx9sIiUlbYBXh4DXz0MR0yEq745qEqpr8TxwtfrGf23r1i0JZ0/nzmQaZOOpnc7nXeR+qcqQ0yHmVkn4DIzew04IKtxzqVV9c2cc7OAWWWW3VPqcT5wTgXbTgYml1m2BBha1fePBLr/UESkzglUPxjwat7eeuW26ZzL9JYZ0Jg6UuVbJGSqWIhm9Y4sbn1nCYu2pHPKYe348/iBdGzROAwBi4RGVRLE54DPgJ74q4WW7hidt1yqaO76VACO7tUmzJGIiEgVBaofDEo178raNLOXgbH4k9A/lhdUJFb6Fgm6KhSiKSwu4Zk5a3n2i7U0i4/hyfOGcvoRHTXhvdR7h0wQnXNPAk+a2d+dc78PQUz12tz1abRuEksfDUkQEakT6nI/6Jy71BuG+hRwLvByOetEVKVvkaDbPBfeubLSQjQ/bd7Lre8s4eed2Zw5pBP3nD6A1k1iwxSwSGhVZx7E35vZYOA4b9FX3hBPqYZ5G1IZ0b217j8UEaljAtAPBqua96GqfPu8oae3UE6CKNJg+Ir99xl+9Yj/auFlH0OX4QeskltYzF8/+ZmXvt1Ah+bxvHRJMicfpgnvpWGpcsklM7sWeANo5/28YWZ/CFZg9dGurHxS9uaR3F1z5IiI1DUB6AcDXs27ojbNr7cXtwFnUAeqfIsEzb5CNF9O8Rei+d3XByWH36zZw+i/fcWL32zggpFd+eSG45UcSoNUnXkQrwBGOudyAMxsCvA9/mErUgU/bU4HYGjXlmGNQ0REaqRW/aB3T+G+at5RwEv7qnkDC5xzM/FX837dK0KThj/hw1tvXzXvYv5XzZsK2mwEvGpmzfHfM7kYqFPDY0UCZvE0+PCPFRaiycgtYvKsFby1IIUebZowbdJRjOypuaql4apOgmiAr9RzH2UquUnlfty8l5goY0CnFuEORUREqq/W/WCgq3lX0mYJcGx1YhOpd/Iz/Inh0reh69Fw1vMHFaKZvWwHd7+/jLScQn5/Yi+uO6UP8TFRFTQo0jBUJ0F8GZhnZu96z8/Ef6ZTquinzen079RCXzwiInWT+kGRuuIQhWh2ZeVz38zlzFq6g/4dm/PyJcMZ2Fkn8EWgekVqHjOzL4BR3qJLnXM/BSWqeqjIV8KSlHTOG6ES4iIidZH6QZE64BCFaJxzTF+Ywp8/XElekY+bR/dj0vE9iYmqclkOkXqvOlcQcc79CPwYpFjqtdU7ssgvKmFoVxWoERGpq9QPikSwtA0wYxKkzIfB58FpD0N88/0vb0nL5Y53l/L1mj0M796Kh84+gl5tNe2YSFnVShCl5n7cvBeAI1WgRkRERCSwSheiOftFGDRh/0u+Eser323k0U9WY8AD4wZwwchumnJMpAJKEEPkp83ptG0WR+eWjcMdioiIiEj9cIhCNGt2ZnHLO0v4aXM6J/Zry+Txg/S3mMghVDtBNLOjgPuAeOBvzrn3AhxTvfTT5r0c2bUl/umoRESkrlI/KBIhKilEU1hcwnNfruPpz9fSJC6Kx88dzJlDOuvvMJEqOGSCaGYdnHM7Si26ERiPv7T3POC94IRWf2TkFrExNZdzkruEOxQREakm9YMiEeYQhWgWb0nn1neWsGpHFqcP7sS9p/enTdO4MAYsUrdU5Qric2b2I/CwNz9TOjABKAEygxhbvbF8ewYAg1Q+WUSkLlI/KBIp9m70XzUspxBNXqGPxz5dzYvfbKBtszj+eVEyp/ZvH954ReqgQyaIzrkzzex04D9m9hpwPXA+kIB/Dig5hOVb/X8/DOjU/BBriohIpFE/KBIhKilE8926Pdz2zlI2p+Vy/siu3HbaYTSPjwljsCJ1V5XuQXTOfWBms4D/A94FJjvnvgpqZPXIsm0ZdGoRT6KGN4iI1EnqB0XCqJJCNFn5Rfzlo1W8OW8z3RIT+PeVR3F0r8QwByxStx1yVlAzO8PM5gCzgWXAucA4M5tqZr2CHWB9sGxrBv07aXipiEhdpH5QJIw2z4XnRsGyGf5CNJd8uD85/GL1Ln75+FdMnb+ZK4/rwezrjldyKBIAVbmC+GdgBNAY+Ng5NwL4o5n1ASYDE4MYX52XU1DM+j05nD64U7hDERGRmlE/KBJqvmJ/EZqvHoYWXQ4oRJORW8QDH65g+sIUerdryvTfH8ORXVuFOWCR+qMqCWIGcBb+ey127VvonFuDOsVDWrk9E+dgoK4giojUVeoHRUKpkkI0nyzfwZ3vLSMtp5CrT+rFtaf0IS46KrzxitQzVUkQxwPnAUX4b8qXali21V/BdKAqmIqI1FXqB0VCpYJCNKnZBdz3wQo+WLyNwzo04+VLhutvK5EgqUoV0z3AUyGIpV5ati2TxCaxtG+uAjUiInWR+kGREKigEI1zjg+Xbufe95eTmV/Ejaf25aoTehEbfcgyGiJSQ1WqYio1t3pHFod3bI6ZhTsUERERkcizeS7MuBIytsJJd8KoGyEqml1Z+dz93jI+Xr6TI5Ja8MaEkRzWQVOGiQSbEsQg8pU41uzK4oKR3cIdioiIiEhkqaAQjXOOGQtTuP8/K8gr8nHbaYdxxageREfpqqFIKChBDKItabnkF5XQr32zcIciIiIiEjlKF6I5YiKMfQTim7M9I487ZixlzurdDOvWiocnHEGvtk3DHa1Ig6IEMYhW7cgCoG8HJYgiIiIiQLmFaJxzTJ2/mQc/XElRSQn3/Lo/Fx/TnahGukVHJNSUIAbRzzu9BLG9znyJiIhIA1dBIZotabncNmMJ365N5aierZly9hF0S2wS7mhFGiwliEG0emcWXVsnkBCrwywiIiINWDmFaEosite/28iU2asw4M9nDuT8EV1ppKuGImGlzCWIVu/Ioq/uPxQREZGG6qBCNLOhywg27Mnh1ulLmL8xjeP7tuUvZw2ic8vG4Y5WRFCCGDQFxT427MlhzIAO4Q5FREREJPT2boQZk2DLvP2FaHyxzXjpq/U8+slqYqMb8ciEI5gwLEnTgYlEECWIQbJ+dw6+EqcCNSIiItLwLHnLf78htr8QzZqdWdw8/TsWbUnnF4e3Y/L4QbRvHh/uSEWkDCWIQbKvQI2muBAREZEGo5xCNEXNknh+zlqe+O8amsRF8cTEIZwxuJOuGopEKCWIQbJuVzaNDLq3SQh3KCIiIiLBt3kezLjigEI0y3fmcMtr37J8Wya/GtSR+84YQNtmceGOVEQqoQQxSNbtyaFL6wTioqPCHYqIiIhI8JRTiKawYzJPf76WZ+espWVCDH+/4EhOG9Qx3JGKSBUoQQyS9btz6NlGc/iIiIhIPVZOIZplqY6bnv6GVTuyOHNIJ+49fQCtmsSGO1IRqSIliEFQUuLYsCebY3olhjsUERERkeDYX4gGOPtFCg8/i6fn+K8atmoSyz8vSubU/u3DG6OIVFujUL6ZmY0xs9VmttbMbivn9Tgzm+a9Ps/Mupd67XZv+WozG+0t62Jmc8xshZktN7PrQrg7FdqemU9+UQk92+oKooiIiNQz+RnwzpX+ie/bD4CrvmFZ61M54+lvePKzNZw+uBOf3nC8kkOROipkVxDNLAp4BjgVSAF+MLOZzrkVpVa7HNjrnOttZhOBKcC5ZtYfmAgMADoB/zWzvkAx8Efn3I9m1gxYaGaflmkz5NbvzgagZ5um4QxDREREJLDKFKIpPPp6nv5yI8/O+VZXDUXqiVAOMR0BrHXOrQcws6nAOKB0MjcOuM97PB142vw1kMcBU51zBcAGM1sLjHDOfQ9sB3DOZZnZSqBzmTZDbv3uHAB66QqiiIiI1AflFKJZHtWPm/4+j5XbMxk/tDP3nt6flgm611CkrgvlENPOwJZSz1O8ZeWu45wrBjKAxKps6w1HHQrMK/vGZjbJzBaY2YLdu3fXbi+qYP3ubJrGRauMs4iIHCDQt1pU1qaZveEtX2ZmL5lZTNB3UOqnvRvhlbHw5UMw6DcUXvkVj61qybinv2VPdgH/vCiZx88douRQpJ4I6T2IwWJmTYF3gOudc5llX3fOPe+cS3bOJbdt2zbo8azfk0OPNk00AayIiOxX6laL04D+wHneLRSl7b/VAngc/60WlLnVYgzwrJlFHaLNN4DDgEFAY+CKIO6e1FdL3oLnjoNdK+HsF1l+1MOMe2Gp7jUUqcdCOcR0K9Cl1PMkb1l566SYWTTQAkitbFvvjOg7wBvOuRnBCb161u/OIbl7q3CHISIikSXgt1p465XbpnNu1r5GzWw+/r5TpGryM+DDm2DpW9DlKArH/YNnfirkmX/rXkOR+i6UVxB/APqYWQ8zi8V/JnRmmXVmAhd7jycAnzvnnLd8ojf0pgfQB5jvdZovAiudc4+FZC8OIb/Ix7aMPBWoERGRsoJxq0VVbsGIAX4LzC4vqFDfhiF1wOZ58NwoWPYOnHQny0e/ybg3tvDEZ2v49REdddVQpJ4L2RVE51yxmV0DfAxEAS8555ab2f3AAufcTPzJ3uvemdE0/Ekk3npv4T/LWgxc7Zzzmdko/J3eUjNb5L3VHaXPmobaptRcnIPubRLCFYKIiEhpzwJfOee+Lu9F59zzwPMAycnJLpSBSYQpU4im6OJZPLO2NU8/O4+WCbE8/9th/HJAh3BHKSJBFsohpniJ26wyy+4p9TgfOKeCbScDk8ss+waIqBv9NqflAtAtURVMRUTkAEG51aKyNs3sXqAt8LsAxC/12d5N/nkNt8yDIyay6sh7uOH99azcvoYzh3TivjMGqAiNSAMR0gSxIdiXIHZtrSuIIiJygP23WuBP4iYC55dZZ9+tFt9T6lYLM5sJvGlmj+GfD7gPMB//SdJy2zSzK4DRwCnOuZJg75zUYUvegg//CEDx+H/y9O4hPP38Yl01FGmglCAG2Ja0XJrGRdMqQdXERUTkf4JxqwVAeW16b/kcsAn43quqPcM5d3+IdlfqgjKFaNaMeozrZqexYvsaxg3pxH2nD6BVE101FGlolCAG2Oa0XLq0TtAUFyIicpBA32pRUZvecvXxUrHN82DGFZCxFd8Jt/NM8TiefHUDLRNi+cdvhzFaVw1FGix1HgG2OS2XXm11/6GIiIhEoDKFaDac8Q5XfxXNiu3rddVQRAAliAFVUuLYkpbLSf3ahjsUERERkQOVKkRTMuhc/tHk9/z17e26aigiB1CCGEC7swsoKC6hqyqYioiISCQpVYhm6ylPMemnHizftk1XDUXkIEoQA0gVTEVERCSilCpEU9JlJK91uJPJs3No0bhAVw1FpFxKEANoc6oSRBEREYkQpQrRpA7/I5evP4FFX2dz+uBO3H+GrhqKSPmUIAbQ5rRczKBzy8bhDkVEREQaKl8xfP0ofPkwrkUS7w99gVu+b0zTuEL+fsGRnDaoY7gjFJEIpgQxgLak5dKpRWNioxuFOxQRERFpiEoVosnqN4Hfp03km+8KGT2gLZPHD6JN07hwRygiEU4JYgD550DU1UMREREJgyVvw4c34oCvBz3EpEXdiY0q4W/nDmHckE6ao1lEqkQJYgCl7M1jVJ824Q5DREREGpL8DJh1MyyZRkHH4dzku4YPfojhxH6JPHTWEXRoER/uCEWkDlGCGCBFvhJ2ZuXTSfcfioiISKh4hWhcxlaW9fk/Llg9ihKLZsrZh/Ob5C66aigi1aYEMUB2ZubjHHTSWToREREJtlKFaIqbdeYv7R/jxaVtOaZXIg9POIKkVqqoLiI1owQxQLZn5APQUVcQRUREJJj2boIZk2DLXDYnnc65KWeTvrcx9487jAtHdqNRI101FJGaU4IYINvS8wDo3FJXEEVERCRIvEI0Jc7xUrs7+PPagQzr1oo3zxlMjzZNwh2diNQDShADZFu6dwWxha4gioiISIDlZ8Ksm2DJNNISj+TCtMtZuy2RO8b25fJRPYnSVUMRCRAliAGyLT2P5vHRNInTIRUREZEA2jwPZlyJy9jCR4mX8IetpzAgqTUfnjOYPu2bhTs6EalnlM0EyPaMPFUwFRERkcApVYgmN6Ejf2j0AF9u78n1p/bhqhN7ERPVKNwRikg9pAQxQLala4oLERERCZBShWgWtvglF+/8DUkd2vP+5YMZ0KlFuKMTkXpMCWKAbMvIY2jXluEOQ0REROo6rxBNcUkJD0Rfz+u7RvD7k3px7Sl9iIuOCnd0IlLPKUEMgLxCH+m5RbqCKCIiIjVXqhDNxoRBXJh5BXFtujPj4iEM6dIy3NGJSAOhBDEAtmX4p7jopCkuREREpCa2zId3rsBlbOGlmIn8Ze+vuOTY3tw0uh/xMbpqKCKhowQxAPbNgagpLkRERKRafMXw9V9xX04hPaY9VxTcw+7GQ3hz0mBG9Ggd7uhEpAFSghgA2705EDtriKmIiIhUValCNP+NPpEbMi9k/FGHc9tph2naLBEJG337BMC2jDzMoH1zDTEVERGRKljyNu7DGygsLuHWoquZH3cKz10+mFF92oQ7MhFp4JQgBsD29HwSm8QRG635iERERKQSpQrRrIw+nEm5v2PE0KHMPmMAzeNjwh2diIgSxEDYlZVP++Zx4Q5DREREItmW+bh3rsClb+Fp3wReb3QOD1wwhDEDO4Q7MhGR/ZQgBsCurALaNVOCKCIiIuUoVYhmd6M2XFVwD60PO45ZZw2irf5+EJEIowQxAHZlFTCwU4twhyEiIiKRZu8m3IxJ2Ja5fOCO48GSy/nj2clMGJaEmYU7OhGRgyhBrCVfiSM1u4B2GmIqIiIipS15m5L/3EB+kY/bCq9mV/fTmX7OYJJaJYQ7MhGRCilBrKXU7AJKHBpiKiIiIn6lCtEsoR83Fl/NBWOP59JjutOoka4aikhkU4JYS7uyCgBo20xTXIiIiDR4W+ZTMv0KyNjCE0Vn80X7i/nHuUfSp32zcEcmIlIlShBraVdWPoCGmIqIiDRkpQrR7HCJXFd0L8ecOJbpJ/cmJkrTYIlI3RHSbywzG2Nmq81srZndVs7rcWY2zXt9npl1L/Xa7d7y1WY2utTyl8xsl5ktC9FuHGBXpv8KooaYioiINFB7N+F7eSx88SDvFR/F75r+jbuuuoQbTu2r5FBE6pyQfWuZWRTwDHAa0B84z8z6l1ntcmCvc6438Dgwxdu2PzARGACMAZ712gN4xVsWFv8bYqoEUUREKhekE6Xltmlm13jLnJm1CfrONVRLp+N79ljyUpZyXeH/sWTEI7x93RgGd2kZ7shERGoklKe1RgBrnXPrnXOFwFRgXJl1xgGveo+nA6eYvwb0OGCqc67AObcBWOu1h3PuKyAtFDtQnl1Z+bRMiCEuOurQK4uISIMVjBOlh2jzW+AXwKag7lhDlZ+Jb/qV8M7l/FTQkYtj/8q5l/2Re08fQHyM/iYQkborlPcgdga2lHqeAoysaB3nXLGZZQCJ3vK5ZbbtXNU3NrNJwCSArl27VjvwyuzKLNDwUhERqYr9J0oBzGzfidIVpdYZB9znPZ4OPF32RCmwwcz2nyitqE3n3E/esqDuVIO0ZT6Fb11OVFYKjxedzbYjrublcUfQPD4m3JGJiNRagxgY75x73jmX7JxLbtu2bUDb3pVVQDtVMBURkUMr70Rp2ZOdB5woBUqfKC1v26q0WSkzm2RmC8xswe7du6uzacPjK6ZkzkOUvDSGnZl5XNHofg4/70EeOXeYkkMRqTdCeQVxK9Cl1PMkb1l566SYWTTQAkit4rZhsTurgJ5tm4Q7DBERkRpxzj0PPA+QnJzswhxO5Nq7iYK3Lidu+w+86zuWOb1u4ZEJR9OmqUYRiUj9EsoriD8Afcysh5nF4r+XYmaZdWYCF3uPJwCfO+ect3yid/N+D6APMD9EcVfIOcduXUEUEZGqqc6JUqp4ojRiT6DWJ27J2xQ+cwxF25Zxq/sDxeP+wRMXn6DkUETqpZBdQfTuKbwG+BiIAl5yzi03s/uBBc65mcCLwOvevRVp+JNIvPXewn+fRjFwtXPOB2Bm/wZOBNqYWQpwr3PuxVDsU3puEYW+Et2DKCIiVbH/RCn+JG4icH6ZdfadKP2eUidKzWwm8KaZPQZ04n8nSq0KbUpN5WeSN/NGGq94myUlfXmtw53cct4vSWqVEO7IRESCJpRDTHHOzQJmlVl2T6nH+cA5FWw7GZhczvLzAhxmle2b4qJdcyWIIiJSuSCeKD2oTW/5tcAtQAdgiZnNcs5dEcJdrtu2zCf335cSl7uVJ30TaHrqbfxtVG8aNVLRHxGp30KaINY3u7LyATTEVEREqiRIJ0oPatNb/iTwZC1DbnhKfOTPeZiYrx8htaQ1T7Z8mN9deB692zULd2QiIiGhBLEW9mT7ryC2aRob5khERESk1vZuIvPfl9F81wLe8x1LytEP8ODoocRENYii7yIigBLEWknNLgQgUTepi4iI1GlFi97C98H1WHEJD8TfwNjzr+PMbq3CHZaISMgpQayF1JxCYqKM5vE6jCIiInVSfiaZM66n+c/vsKSkD5/1/zM3jv8FTeLUt4tIw6Rvv1pIyy6kdZNYzHTDuoiISF1Tsnk+2f++lCa5W3mu0W/o/Zv7uGVg53CHJSISVkoQayE1p4DWTTS8VEREpE4p8ZH16UMkfP8oGSWJPNP5b1x5wXma11BEBCWItZKaU6gCNSIiInVJ+mZSX7+YxNQf+cCNonD0w9x2TH+NBhIR8ShBrIXU7EK6ttZkuSIiInVB7sJp8OENxPpKeLzFzYy/6Aa6t2kS7rBERCKKEsRaSMspJFFDTEVERCJbfia7pv2Bdhve48eSPiwd+Sh/GHM80Zq+QkTkIEoQayi/yEd2QTGJGmIqIiISsQo2ziXn35eRmL+NV+MmMvTCyVzctU24wxIRiVhKEGsoLcebA7GJEkQREZGIU+Jj16zJJC54nJySRGb0e5YLzjmXxrFR4Y5MRCSiKUGsodRsf4LYWgmiiIhIRPGlbWLXqxfRMWMRH9nxND3nb1wxqFe4wxIRqROUINZQak4BgIaYioiIRJA9c9+k8cc30bSkhJc63MH4i26glU7miohUmRLEGtp3BVFFakRERMLP5Wew+V/X0C1lJotcX7b/4ikuHTVS01eIiFSTEsQa2ncPYmtdQRQREQmrzDXfUTDtMpKKdvB20ws46tKHGNKmebjDEhGpk5Qg1tCenAJioxrRLE6HUEREJCxKfGx49090WfoUGS6RD458kbNOP4uoRrpqKCJSU8puaigtu5DWTWI1dEVERCQM8ndvZOcrv6VHzhI+izmBThc8w5ndu4Q7LBGROk8JYg2l5RSqgqmIiEgYbP7ydVrPuZXWroT3et7LmPOvIz5G01eIiASCEsQa2ptbSKsmMeEOQ0REpMHw5WWy5pWrOGznhyy1fhSc+Q/OHDI03GGJiNQrShBrKD23iI4tG4c7DBERkQZh18pvKJl+BX2Kd/Bh4sWMumwKLZqqHxYRCTQliDWUnldEy8a6gigiIhJUJT5WvnUvfVY9w06XyNejXmPsL05XDQARkSBRglgDJSWO9NxCWiXoHkQREZFgydq5nl2vXMTheUv5Kv5Eel78D07s2CHcYYmI1GtKEGsgq6CYEgctE3QFUUREJBjWfv4q7b+6jXbOMbvf/fzi3D8QHdUo3GGJiNR7ShBrID23EICWuoIoIiISUEW5Gax++SoG7p7Fskb94Kx/Mmbg4HCHJSLSYChBrIH03CIAWukKooiISMBsW/Y1NuMKDvft5JN2l3DMZVNo2jg+3GGJiDQoShBrYO/+K4hKEEVERGrL+YpZOu1e+q9+lp2WyPwT3+CXJ/0q3GGJiDRIShBrICPPfwVRQ0xFRERqJ33bOna/dhFH5C/j24ST6H3p8xzdrl24wxIRabCUINbA3hzvCqKmuRAREamxlZ+8TNJ3d9DROeYM+DMnTLiGRo00fYWISDgpQayBdO8KYgsliCIiItWWn53OqpeuYkjaRyyPOozYc17gpMMGhTssERFBCWKNpOcW0Sw+WuW2RUREqmnj4i+JfX8Sg3w7+aLjZRx16UPEx8WFOywREfEoQayB9NxCWun+QxERkSorKS7mpzfvYfC6v7PLEll86r85cdRp4Q5LRETKUIJYA3tzi1TBVEREpIp2p6wh9fVLGFawjLlNT6bPZc9zZGLbcIclIiLlUIJYA+l5RapgKiIiUgWLPnqRXvPuIsk5vh38IMeM/z/MVIhGRCRSKUGsgfTcQrq1Tgh3GCIiIhErJ3Mvq166imHps1kZfRiNz32JY/sMCHdYIiJyCCGtsmJmY8xstZmtNbPbynk9zsymea/PM7PupV673Vu+2sxGV7XNYEjPLaKVhpiKiEg1hbIfNLMeXhtrvTZDNvTl54VzSH98JEP2fsy3nS+n1y1f013JoYhInRCyBNHMooBngNOA/sB5Zta/zGqXA3udc72Bx4Ep3rb9gYnAAGAM8KyZRVWxzYDylTgy84tooSGmIiJSDWHoB6cAj3tt7fXaDipfcTFzX76VnjPPopErYeWYqRx75WPExqrPFBGpK0J5BXEEsNY5t945VwhMBcaVWWcc8Kr3eDpwivlvVBgHTHXOFTjnNgBrvfaq0mZAZeYV4Ry6gigiItUVsn7Q2+Zkrw28Ns8M3q75/fDclRy16TkWNT+JhGvnMvDoMcF+SxERCbBQ3oPYGdhS6nkKMLKidZxzxWaWASR6y+eW2baz9/hQbWJmk4BJAF27dq35HgBxMY2YcvYghnZtVat2RESkwQllP5gIpDvnistZ/wCB7CM7j76eBStHMOz0q1SIRkSkjmoQRWqcc88DzwMkJye72rSVEBvNucNr14GKiIhEikD2kV36DKZLn8EBiUtERMIjlENMtwJdSj1P8paVu46ZRQMtgNRKtq1KmyIiIpEglP1gKtDSa6Oi9xIRETlIKBPEH4A+XlW1WPw3288ss85M4GLv8QTgc+ec85ZP9Kq79QD6APOr2KaIiEgkCFk/6G0zx2sDr833g7hvIiJST4RsiKl3L8U1wMdAFPCSc265md0PLHDOzQReBF43s7VAGv6ODm+9t4AVQDFwtXPOB1Bem6HaJxERkaoKQz94KzDVzP4M/OS1LSIiUinzn2RsOJKTk92CBQvCHYaIiISAmS10ziWHO466Qn2kiEjDUFn/GMohpiIiIiIiIhLBlCCKiIiIiIgIoARRREREREREPEoQRUREREREBFCCKCIiIiIiIh4liCIiIiIiIgI0wGkuzGw3sCkATbUB9gSgnVBQrMFRl2KFuhWvYg2OuhQrBCbebs65toEIpiEIUB9Z1z5noaBjUj4dl4PpmBxMx+RgQe0fG1yCGChmtqCuzK2lWIOjLsUKdStexRocdSlWqHvxip/+3Q6mY1I+HZeD6ZgcTMfkYME+JhpiKiIiIiIiIoASRBEREREREfEoQay558MdQDUo1uCoS7FC3YpXsQZHXYoV6l684qd/t4PpmJRPx+VgOiYH0zE5WFCPie5BFBEREREREUBXEEVERERERMSjBFFEREREREQAJYiVMrMxZrbazNaa2W3lvB5nZtO81+eZWfcwhLkvli5mNsfMVpjZcjO7rpx1TjSzDDNb5P3cE45YvVg2mtlSL44F5bxuZvakd2yXmNmRYYqzX6njtcjMMs3s+jLrhPW4mtlLZrbLzJaVWtbazD41szXe71YVbHuxt84aM7s4TLE+YmarvH/nd82sZQXbVvqZCVGs95nZ1lL/1mMr2LbS744QxTqtVJwbzWxRBduG+riW+10VqZ9ZOVBt+kUzu91bvtrMRoc08CCq6TExs1PNbKH3/2+hmZ0c8uCDpDafE+/1rmaWbWY3hSzoIKvl/50jzOx77ztzqZnFhzT4IKrF/58YM3vVOx4rzez2kAcfJFU4Jseb2Y9mVmxmE8q8Fpg+0jmnn3J+gChgHdATiAUWA/3LrPN/wHPe44nAtDDG2xE40nvcDPi5nHhPBP4T7mPrxbIRaFPJ62OBjwADjgLmRUDMUcAO/BOLRsxxBY4HjgSWlVr2MHCb9/g2YEo527UG1nu/W3mPW4Uh1l8C0d7jKeXFWpXPTIhivQ+4qQqfk0q/O0IRa5nX/wrcEyHHtdzvqkj9zOrngONf437R+zdeDMQBPbx2osK9T2E+JkOBTt7jgcDWcO9PuI9JqdenA28f6vu2rvzU8nMSDSwBBnvPE+vD/50AHJfzgane4wSvL+se7n0K0THpDhwBvAZMKLU8YH2kriBWbASw1jm33jlXCEwFxpVZZxzwqvd4OnCKmVkIY9zPObfdOfej9zgLWAl0DkcsATIOeM35zQVamlnHMMd0CrDOObcpzHEcwDn3FZBWZnHpz+arwJnlbDoa+NQ5l+ac2wt8CowJVpxQfqzOuU+cc8Xe07lAUjBjqKoKjmtVVOW7I6Aqi9X7TvoN8O9gxlBVlXxXReRnVg5Qm35xHP4/5gqccxuAtV57dV2Nj4lz7ifn3DZv+XKgsZnFhSTq4KrV309mdiawAf8xqS9qc0x+CSxxzi0GcM6lOud8IYo72GpzXBzQxMyigcZAIZAZmrCD6pDHxDm30Tm3BCgps23A+kgliBXrDGwp9TyFgxOu/et4f+Bm4D+zE1be5fehwLxyXj7azBab2UdmNiC0kR3AAZ94w2omlfN6VY5/qE2k4j+yI+W47tPeObfde7wDaF/OOpF4jC/Df+W4PIf6zITKNeYfDvtSBcMgI+24HgfsdM6tqeD1sB3XMt9VdfUz25DUpl+sr/92gfpb4WzgR+dcQZDiDKUaHxMzawrcCvwpBHGGUm0+J30BZ2Yfe8MKbwlBvKFSm+MyHcgBtgObgUedczU5qRtpavNdGbDv2eiabCSRy/tyfQe43jlX9kzKj/iHR2ab/96p94A+IQ5xn1HOua1m1g741MxWeVdBIpKZxQJnAOWNcY+k43oQ55wzs4ifz8bM7gSKgTcqWCUSPjN/Bx7An1Q9gH/o5mUhjqG6zqPyq4dhOa5lv6tKD76oK59ZkUDwTipOwX+lqKG7D3jc60/DHUukiAZGAcOBXOAzM1vonPssvGGF3QjAB3TCP5zyazP7r3NufXjDqh90BbFiW4EupZ4necvKXce7xN0CSA1JdOUwsxj8f3C94ZybUfZ151ymcy7bezwLiDGzNiEOc18sW73fu4B3OXioUVWOfyidhv/s7s6yL0TScS1l574hud7vXeWsEzHH2MwuAX4NXOC8gfRlVeEzE3TOuZ3OOZ9zrgT4ZwUxRNJxjQbOAqZVtE44jmsF31V16jPbQNWmX6yv/3a1+lvBzJLw/7+7yDm3LujRhkZtjslI4GEz2whcD9xhZtcEOd5QqM0xSQG+cs7tcc7lArPw33NeH9TmuJwPzHbOFXn917dActAjDr7afFcG7HtWCWLFfgD6mFkP7+rRRGBmmXVmAvsqBE0APq/oj9tg88ZjvwisdM49VsE6HUqN8R+B/98/5AmtmTUxs2b7HuM/a7qszGozgYvM7yggo9Tws3Co8CpMpBzXMkp/Ni8G3i9nnY+BX5pZK2+o5C+9ZSFlZmOAW4AzvM6vvHWq8pkJujL3wY6vIIaqfHeEyi+AVc65lPJeDMdxreS7qs58Zhuw2vSLM4GJ5q9I2AP/KIv5IYo7mGp8TMxfsflD/MWZvg1VwCFQ42PinDvOOdfdOdcd+BvwoHPu6RDFHUy1+b/zMTDIzBK8BOkEYEWI4g622hyXzcDJsL//OgpYFZKog6s2f0MEro90EVCxJ1J/8FfS/Bl/NaE7vWX34/9DFiAef5Wttfg7up5hjHUU/mFvS4BF3s9Y4CrgKm+da/Df9L0YfzGQY8IUa08vhsVePPuObelYDXjGO/ZLgeQwHtsm+BO+FqWWRcxxxZ+4bgeK8J9pvBz/+PzPgDXAf4HW3rrJwAultr3M+/yuBS4NU6xr8Y+Z3/e53VetrBMwq7LPTBhifd37PC7B/4XdsWys3vODvjtCHau3/JV9n9NS64b7uFb0XRWRn1n9HPTvV+N+EbjT2241cFq49yXcxwS4C/89VItK/bQL9/6E+3NSqo37qCdVTGt7TIALve/oZcDD4d6XSDguQFNv+XL8CfPN4d6XEB6T4fj7+hz8f58uL7VtQPpI8xoTERERERGRBk5DTEVERERERARQgigiIiIiIiIeJYgiIiIiIiICKEEUERERERERjxJEERERERERAZQgioiIiIiIiEcJooiIiIiIiABKEEXqNTNra2bfmNkyMzuz1PL3zaxTDdq71sxWmtkbAQ1UREQkhNQ/ilTMnHPhjkFEgsTMrgXSgBnALOfciWZ2OjDMOXdfDdpbBfzCOZcS2EhFRERCR/2jSMV0BVEkRMxsjpmd6j3+s5k9Vc3t3zOzhWa23MwmecuamNmHZrbYOwt6bpnNioAEIA7wmVk0cD3w8CHe60avvWVmdr237DmgJ/CRmd0Q6P0TEZGGSf2jSGTRFUSREDGz44H7gX8C5wNnOOd81di+tXMuzcwaAz8AJwAnAmOcc1d667RwzmWU2qYF8CbQHrgVGABkOudeqeR9hgGvAEcBBswDLnTO/WRmG4Fk59yeQO+fiIg0TOofRSKLriCKhIhz7iv8HcqNwMR9nYOZPVDFJq41s8XAXKAL0AdYCpxqZlPM7LjSnZ/3nhnOuV8555KBH4HTgelm9k8zm25mR5fzPqOAd51zOc65bPzDb46r7v4B8Wb2qvdeF1RxH0VEpIFR/ygSWZQgioSImQ0COgKFzrksb1kHIMbMOntDUG4ws2nlbHsi8AvgaOfcYOAnIN459zNwJP6O8M9mdk8lIdwNTAbOA74BLgbuC9Dulbd/ZwHTvbO3ZwTqfUREpH5R/ygSWZQgioSAmXUE3gDGAdlmNsZ7aQiwCBgMvOmcexwoLqeJFsBe51yumR2Gf3gLXqW1XOfcv4BH8HeG5b1/HyDJOfcF/nsuSgAHNC5n9a+BM80swcyaAOO9ZdXdvyRgi7eKhtKIiMhB1D+qf5TIowRRJMjMLAH/MJQ/OudWAg8A93ovD+F/HeC+Tqa8G4NnA9FmthJ4CP8wGoBBwHwzW+S1+ecKwpgM3Ok9/jfwe/z3aTxRdkXn3I/477GYj//+iheccz/VYP9S8HeCoO8aEREpQ/0joP5RIpCK1IiEkZm9CFyJ/8b1K4HWwG3OuZvCGlgAeGdXnwbygW+cc5obSkREqkT9o0j4KEEUERERERERQJe1RURERERExKMEUURERERERAAliCIiIiIiIuJRgigiIiIiIiKAEkQRERERERHxKEEUERERERERQAmiiIiIiIiIeJQgioiIiIiICAD/DzwAtCucP6/JAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 1080x360 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"R = 100\t\t# x0 = y0 = R\n",
"fee = 0.003\n",
"\n",
"def cost(xin):\n",
"\txin *= R\n",
"\tx1 = R + xin\n",
"\ty1 = R * R / (x1 - fee * xin)\n",
"\tyout = R - y1\n",
"\tx2 = (x1 * y1) / (R - fee * yout)\n",
"\treturn (x2 - R) / R\n",
"\n",
"fig, (ax1, ax2) = plt.subplots(1, 2, squeeze=True, figsize=(15, 5))\n",
"\n",
"x = np.linspace(0, 20, 1000);\n",
"ax1.set_title(\"Large values of $x_{in}$\")\n",
"ax1.plot(x, np.vectorize(cost)(x), label=\"Cost\")\n",
"ax1.legend()\n",
"ax1.set_xlabel('$x_{in}$ as % of $x_0$')\n",
"ax1.set_ylabel('% of $x_0$')\n",
"\n",
"x = np.linspace(0, 0.1, 1000);\n",
"ax2.set_title(\"Small values of $x_{in}$\")\n",
"ax2.plot(x, np.vectorize(cost)(x), label='Cost')\n",
"ax2.plot(x, 2 * fee * x, label=\"$0.006 \\cdot x_{in}$\")\n",
"ax2.legend()\n",
"ax2.set_xlabel('$x_{in}$ as % of $x_0$')\n",
"ax2.set_ylabel('% of $x_0$')\n",
"plt.show()\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.8.10 64-bit",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment