{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Hyperparameter optimization with Dask\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Every machine learning model has some values that are specified before training begins. These values help adapt the model to the data but must be given before any training data is seen. For example, this might be `penalty` or `C` in Scikit-learn's [LogisiticRegression]. These values that come before any training data and are called \"hyperparameters\". Typical usage looks something like:\n", "\n", "``` python\n", "from sklearn.linear_model import LogisiticRegression\n", "from sklearn.datasets import make_classification\n", "\n", "X, y = make_classification()\n", "est = LogisiticRegression(C=10, penalty=\"l2\")\n", "est.fit(X, y)\n", "```\n", "\n", "These hyperparameters influence the quality of the prediction. For example, if `C` is too small in the example above, the output of the estimator will not fit the data well.\n", "\n", "Determining the values of these hyperparameters is difficult. In fact, Scikit-learn has an entire documentation page on finding the best values: https://scikit-learn.org/stable/modules/grid_search.html\n", "\n", "[LogisiticRegression]:https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dask enables some new techniques and opportunities for hyperparameter optimization. One of these opportunities involves stopping training early to limit computation. Naturally, this requires some way to stop and restart training (`partial_fit` or `warm_start` in Scikit-learn parlance).\n", "\n", "This is especially useful when the search is complex and has many search parameters. Good examples are most deep learning models, which has specialized algorithms for handling many data but have difficulty providing basic hyperparameters (e.g., \"learning rate\", \"momentum\" or \"weight decay\").\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**This notebook will walk through**\n", "\n", "* setting up a realistic example\n", "* how to use `HyperbandSearchCV`, including\n", " * understanding the input parameters to `HyperbandSearchCV`\n", " * running the hyperparameter optimization\n", " * how to access informantion from `HyperbandSearchCV`\n", " \n", "This notebook will specifically *not* show a performance comparison motivating `HyperbandSearchCV` use. `HyperbandSearchCV` finds high scores with minimal training; however, this is a tutorial on how to *use* it. All performance comparisons are relegated to section [*Learn more*](#Learn-more)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:11.624615Z", "iopub.status.busy": "2022-07-27T19:22:11.623914Z", "iopub.status.idle": "2022-07-27T19:22:12.348398Z", "shell.execute_reply": "2022-07-27T19:22:12.347655Z" } }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup Dask" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:12.352542Z", "iopub.status.busy": "2022-07-27T19:22:12.352337Z", "iopub.status.idle": "2022-07-27T19:22:13.454421Z", "shell.execute_reply": "2022-07-27T19:22:13.452977Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
\n", "

Client

\n", "

Client-6ab1bd16-0de1-11ed-a383-000d3a8f7959

\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "
Connection method: Cluster objectCluster type: distributed.LocalCluster
\n", " Dashboard: http://10.1.1.64:8787/status\n", "
\n", "\n", " \n", "
\n", "

Cluster Info

\n", "
\n", "
\n", "
\n", "
\n", "

LocalCluster

\n", "

3d7b2964

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", "
\n", " Dashboard: http://10.1.1.64:8787/status\n", " \n", " Workers: 1\n", "
\n", " Total threads: 4\n", " \n", " Total memory: 1.86 GiB\n", "
Status: runningUsing processes: False
\n", "\n", "
\n", " \n", "

Scheduler Info

\n", "
\n", "\n", "
\n", "
\n", "
\n", "
\n", "

Scheduler

\n", "

Scheduler-c1bf35f0-8caf-4476-9919-060006f58f79

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Comm: inproc://10.1.1.64/9091/1\n", " \n", " Workers: 1\n", "
\n", " Dashboard: http://10.1.1.64:8787/status\n", " \n", " Total threads: 4\n", "
\n", " Started: Just now\n", " \n", " Total memory: 1.86 GiB\n", "
\n", "
\n", "
\n", "\n", "
\n", " \n", "

Workers

\n", "
\n", "\n", " \n", "
\n", "
\n", "
\n", "
\n", " \n", "

Worker: 0

\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "\n", " \n", "\n", "
\n", " Comm: inproc://10.1.1.64/9091/4\n", " \n", " Total threads: 4\n", "
\n", " Dashboard: http://10.1.1.64:37053/status\n", " \n", " Memory: 1.86 GiB\n", "
\n", " Nanny: None\n", "
\n", " Local directory: /home/runner/work/dask-examples/dask-examples/machine-learning/dask-worker-space/worker-uj3a5b08\n", "
\n", "
\n", "
\n", "
\n", " \n", "\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "
\n", " \n", "\n", "
\n", "
" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from distributed import Client\n", "client = Client(processes=False, threads_per_worker=4,\n", " n_workers=1, memory_limit='2GB')\n", "client" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create Data" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:13.457734Z", "iopub.status.busy": "2022-07-27T19:22:13.457403Z", "iopub.status.idle": "2022-07-27T19:22:14.282530Z", "shell.execute_reply": "2022-07-27T19:22:14.281960Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAADxCAYAAADRGSCbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAEAAElEQVR4nOz9Z7AlZ3rfCf4y8+TJ4/313tUtX6hCAQXXaJi2dE0uRYmkFCsTCoV2pf20G7EfJ2I3JkIRsxG72pU0nJaGw6EkmhE5JJvdzW62Qzc8yvt7q673x3t/MnM/PJXIAhqu2QAKQJ9/xIlzTto333zfx7/Po9i2TR999NFHH328HeqDbkAfffTRRx+fTPQZRB999NFHH++IPoPoo48++ujjHdFnEH300Ucffbwj+gyijz766KOPd0SfQfTRRx999PGO6DOIPvroo49PCBRF+X1FUTKKotx4l/2Koij/X0VRVhRFuaYoypmPsj19BtFHH3308cnBHwBfeY/9XwUW7n3+BfA/fpSN6TOIPvroo49PCGzb/glQeI9Dvgb8oS14DYgpijLyUbXH81Fd+EEilUrZ09PTD7oZffTRxyccFy9ezNm2PfDzXOMrTzxh50qlD3a/27dvAq37Nn3dtu2v/wy3GwO27/u/c2/b/s9wjQ+MzySDmJ6e5sKFCw+6GX300ccnHIqibP6818iVSlz4z//5g93v7NmWbdtnf47bKe+w7SPLl9Q3MfXRRx99fHqwA0zc938c2PuobtZnEH300UcfPy8U5YN9fn58A/g/3otmegwo27b9kZiX4DNqYuqjjz76+DRCUZQ/Bp4BUoqi7AD/HaAD2Lb9e8C3gV8CVoAG8E8/yvb0GUQfffTRx8+LD0c7wLbt33mf/Tbwrz6Um30A9E1MffTRRx99vCP6GkQfnwqYJhQKYFkQjYLP96Bb1Ecf9+FD0iA+aegziD4+8ej14MIFKBZlHno88NhjEAr99LGWJcxE1z/+dj5I2LYw0F4PwmEIBB50i/r4LKDPIPr4xME0od0WIq/rkMkI8Rsakv2VCty5A2feloUmnYarV+X8ZBJOnQLD+Nnvb9vQasm33//JFw5tG65dg91dUFVp7yOPQCLxoFv2C4IPL0LpE4c+g+jjE4V6HS5ehEZD5tyJE9DpiNbgwOsVAn4/ajW4dAnicWEqhQLcvPnTTOT9YFlw44YQW4DhYTh5EjTt53uujxLForTXYaCtljzD008/2Hb18elH30ndxycKV66IRDwwALGYSMZer2gFrZaYUEolGHlb9hmHoTimpXgccrmf/f47O6KdKIrcd28PtrZ+zof6iNHriebg4J0YaB8fMT6+dRAfK/oaRB8fKVot1yfg8byVkL0dpgnVqjAHcLUGw4CHH4alJTE9LS7C1NRbz/V6Rfq3LLlHoSCMpl6HYPCDt3d1FVZW5BzLEiZVLv9Mj/yxIxyWZ240pK/yeZicfNCt6uOzgD6D6OMjgW3D8jLcvg1ra8IgDh8WQp9MvvM5miaO51pNvns9uY7PJwR7cPDd7xeLwcKCEPdqFdbX5f9PfgJzc+K3KJXEpxCNCkMZHoZI5K1t3tuTfbGYbFtf/2Bmqq0ted56HWZm4Nixt5rFPkr4/fDoo2JSq1SEOSwufjz37uMePoXawQdBn0H08ZEgmxVpvFgU4t7rybaLF8U2/m5hqg89JBFL2azMuVOn3l0D6HaFmaiqEPqpKZGeL18WE9TIiBD9v/5rOHJEmM5LL8m9Z2bEnPW5z8lx5TJsbgqBjcel3QCp1E+bs96OdFrumclIe65elWt95SvCbD4OxGLw5JMfz736+MVBn0H08ZHAIdzptBBvTROCblnQbL47gwiFhGi3WqJ1vBuBbTTg9dddW/vIiFy3WJRrN5tikpqbk2ODQfEvtFrSpnZbmEc2C88/L5qCYQhT2t8XrcHxaUSjP33/Vkuexe93GUO7LeYxRREmEQ7DE0+4kVS2Led8kh3effRxP/oMoo8PBY7t30EwKOaenR0hsvW6RNkcHMDEhEjp7wZNe3+/wfKy3NMxO62swMaGEHPHFl+riblJ02TbrVviuN7aEsYzNSXrBX78Y5idlXNPn4br14WJHD0qmsf9aypsW8xmm/eSRA8MSFurVTmuVhMndyQixykKPP64MKJbt6TN4+NyXVWVCC1N+/jMUX18ROibmPro46dRKom03GiIOebECZHgPR4hwhMTQnCXllyT0de/Dr/8y/Dcc393wliruYvBLEvacP263K/VkvuBEPTnn3dNS72eEPV6XcxRi4vCbHo9Od7jEfPT2Jj4TO6HZQmRv3BB7PzRqDAcwxDmd/Wq9Iej+cTjwjguXpS2pVLi93CioppNOV/T5F4fxLFcq4k5zOOR6/W1kU8I+gyijz7einYbzp8XM8vgoJh3rl6Fc+ckImlkRIjn3buy31mfoKrw538uBPvIESF20eh7Rzi9HYOD4vwGIcAvveRea29PJPYnnxSzVrUqBNiyZE2D4+MYGhIJfmpKGIlTFMw0hUHcD9uWtQWvvy5EvVwWJ3g0Kn6Lxx4TTeJHPxKTUzQq3ysrrpms2xWmdOiQrNkYGpLn6PXk2pGI6xy37Z+mOcUivPGG28ZUSpz+fSbRx0eFPoPo4++MRkMIld8v/+NxIby9nhDqpSUxKTWbwhgGB4UIqqowh5dfFnt/JCJS/enT70zs0mkx6aiqSOC7u0Jot7aE+YAQ51JJiHE2K8S40ZD9S0uisSiKENWJCbnv9rYQ99/8TWn73p60vdkURuD3w/y8MJhCQZzuU1PCHHRd1mhYllwrEBDi3unA6KjcwzTlHmfPyjUVRZhas/nWSCkn/LfZlL64c0eeV9OE6Y2MyLWWluQ+juaUTks/vFd0Vx99/DzoM4g+/s7QddfxqqpueoxiUTSLQECIYqsl3+WyMIZuV0JdLUsIdiwmxG5vTwgrCKFWFCGAFy4I4ez14LvfFWagaRKF1GwKgT04EH9HsehqBZcvuxqLs5YiFJL2/O7vynVMU6T8558Xqf/GDcjvtkiGO1RKXv6n/8lHLCb3WV8XhnH7tvxOpyWdha5LWwcH5ZkGBmB6Wu41Pu76QNbW5H4ejzCRcln6wbZlu2HIddfW5BqdDnz/+3KdYFCYzZEjbv+rqpwHcuzqqpjOkkl5/p9FI+vj58CndBHcB0GfQfTxd0K5LBJtsSiEfWTEtYv/1/8qxGxrSxjC9LQwi81NYQ5PPunOqWBQmMDmpjCASEQ0BMcJ3GqJdB8IuOsbhobk+tvb0g4nOV02K0TRiRRaWxNJPRwWYn7rFjz7rLTBWf+gaaJFOCumL38/y3H9Dk1V49ZqgGs7swSSIeJxOe4v/1I0i1xO/AEgBNnrFUIfCAgzSSbl2a5fF8Kdzcq9FhZEoygU5LhsVs6bmxNms7QkfXbjhuy7fVvaPD0tbbx+XUKBu13pv0hEmMT5865f5vZtufbRox//uOjjs4U+g+gDEPPMzZuiBYyOCiF7N9t2owGvveauJ9jZEYn3+HH40z8VgnfokGwvFCRCqNsVCfvkSfleXpZ7vvKKHGdZQmT/4i9ku2Om2t2V+0xMCMF1fAr5vDAHx/wUiwmTGhwUQl+vS/sTCfEn3H8tJ6oqEJB71evwB38AHqvN1k/yXNQmmJpUWN32UN8vMXnIj41Guy1t1TSR2NttIcSVihvNFAxKOwoFaecjj8i2H//YzSl186bsP3FC2h2PS3+DHHvhgrTR75d7bW+L5nLkiERq9XqibZw86ZrWKhXX1OT3Sx8sLvb9Ex8b+hrEhw9FUX4f+BUgY9v28XfYrwD/Fimx1wD+iW3blz7eVn724awpCASE4KytCZG/35xxP8pl2e+k256YEOnV7xeNIhwWQjw2JpLw3bvCJDwekW7PnxcGMjUFf/ZnwhgCAfiTP5HznXDTWk0k6nBYHL66Lr9rNZGmm01pr23LM4RCQiwNQ/bpurs6u1gUR/XgoNzr2jXRAlIpMTFFIpAwunSTXV5Z9xMId/AaKtg9NtctVF1jdVWe1zEpVSquyciJXopGpR9iMWEgjibx5JPwgx8Ik5qZkfMuXxbGWCjIsSdOyL7vfMe9fiQifems2zh0SExl9+PttMmyPtNWjz4+RjxoDeIPgH8H/OG77P8qsHDvcw74H+999/Eholp1zSMgRG1//50ZhGkKga5URDp3FsA5kTqHDkkkk+MXSKfd/Z2OSNR37sixxaLc4/ZtuZ6qur4Eh8jn86KZjI2JyWV+XpjD66/LfsuSe+m6u3bCiS7a2JDzHb/AV78q0UOBgJh5DEP2OSGwTdtgqxDEY3fxeiwGI1WCHi93Gx5ChrTBMERj8fnkXF2X6x05IsT8sceE0AcCoins7Yl5KBoVTSEel35rt91U4oODwjgWFoQBnjwpfeaYjq5cEa1hZkac9DduuE7uwUE5Z3BQ+towxCznrLPo42PCZ5QbP1AGYdv2TxRFmX6PQ74G/OG9OqyvKYoSUxRlxLbt/Y+nhb8Y0DRhEA7uJ/j3o9uVkNJMRojvxoZI5e22EFzLEnt5qSTO1UZDCKZj7gkEoNu2qBfatHI9tnJ+ag3Pm74Cn8/N2PrGG0J8VVUYimXJdSYnRYL+5jfFAdztCoPw+2UF9sYGPPOMEOStLWFWR46IttLryfVLJWEczqK4dluey+/XqYVH8FZyDPmqeENe6vEhFi2FqSl3dXat5qbiCIdhyF/iK5PbrK2qTAdSdLtDb2pSTtSTpknfOHmmnEgrn8+lLbbtpidZWpJ2jo8Lw3H8MpmMaD5TU3Lu8ePia3joIWFG9bowoX5kUx8fBh60BvF+GAO27/u/c2/bTzEIRVH+BfAvACb7qSx/JiQSIpnu77sFZx599KeP296WY5aXRcrP5YTQPvaYELRcTohuJCKEcH9fiN3oUJts2qRYVdm/kEVp1PnJZYWeCQtDNb4aabFajHMlu4Bl6bTbQsh9PiH8TnTO0BAMpExadZunjhQp7LfIdQOUOhHw6+RyshCv0XBDUHVdJPJSSbQIVRVmlM+LH8U0YXjAZK+2y+oVi2OPBBl5cgxNsyhXPfzWV4U4HxwIg3FMSpEIJBImcbtAvLRB5pUdFrQsna/n+U7kNygOHEbT4B/9I9GqWi1hGBsb0ieaJu2rVoVJeTyiRV25IsTdMISBDA/LJ5t1maemie/G5xOz1Ze/LIwzEhH/hxM+28fHiL4G8UDwTr1uv8M2bNv+OvB1gLNnz77jMX28M1RVCOvEhFuy8v5UF92u2OkvXhTJ/v7VyLduwVNP3TNx7HS42rN54QWDUkmuo1XyNC7uogZ8pJp1Ma3EfAR8FicarxH0GPiOz8KLW1QbTS7xsGgTnja2baPYGh6PTq/W4FT0CsFv79AxYd6YoX00Tq9R58Jql0AqQSjk5dIlse0rCmjtBoOtTb7+Qo/Q3DDP/v0BGg1hDtmsSPKG16b16hWGyznWKkPkX91hOpbiyGMJKmGVybE4mYxGvS7Mam5OGIammPgO1hmu3CFU30NrV5n9Upz1jXEmd1+jERll4liE//yfZcX4+LhoKsePS6bXJ54QIv+d70gfBwLwwx9KX0ejbg1uj8etsOf1CvMrlYQBp1Jy/Ouvy/s5fVoY0Llz/WpyfXw4+KQziB1g4r7/48DeA2rLZwKOSebtAk+lIsSl0xGbucMgbFvMNLmcMIabN4UZDA66xCybsRhtbWDczZI+36V8fRyVSbqtDt5inv1WHMNrEG3XKJXgVmmAU6NpKlUTM+wj6PMy+tAAhUKWTb0DvQ6tWgddNRn0NwmEoxxpXyHQqHK+M8FI7Q4Lo5dZG3ie/bTF6frLzGoGpc1pNjcWSad1jg9lSG68iNdjE4lppG5f4Rv/v6cYfXyGQMCmul9hea1Fs9TkDDsUA+P4Qxrb1RgD//UlDn4Q59TDGnfLw1ytn+Wxpzz0ekKoDx2CeqaJkq9R7IY5Zm0SVE02rtj04kNEk7L4I5eLsLsrzOj4cemvu3clm+3SkvgXxsbEFHblioTwmqbrU1AUMWtduiTfDz0k7yOTcX0/oZD77Zir1tb6DOJjR1+DeCD4BvCvFUX5E8Q5Xe77H352VKsi+V+9KiYXJyR1fFzMEdUqfO97bgjlyy+LM7nbFYJ4545IraWSaBvXrsm+8XGRxv3NPL3yHq3AIOmKhZrep0mUrmbgRSUQBENp4Q+pKEULC4uDgo9Fy2JtJUhnCKyeycSkgr/Qw6BGxmOArRGMaDwWuIpqVfne2gyKqjDjGWG73ODIRIHnp6/yUiHASneRzHWLQiaH1gkRPbhNhBqdtkaomGdhvoVy8H209ldod3x4CkUK5STFrIdkpUsr2SU66GGkeIthb54ta4RytsV8ZY9hT5obN8aYnRUCPj0Npr/J0q0m0UCbucEuaqtBvdpiW0+xb0XRx/2Uy9KfxaIbhXT5MnzjG+JQBtFKCgU5zqnB7URiDQ3Ju+r1JPQ4m5Xts7OivaVSolE0m8I0trbcNSEg99zaEqY/MND3S/Txs+NBh7n+MfAMkFIUZQf47wAdwLbt3wO+jYS4riBhrv/0wbT0k4liUQiFzyeRR+8kxHQ6whxu3BAb9uqq/F5fF+fmmTPiU/ijPxKb+PCwMIHtbbGf7+yIrT4WcxerOTmBtrfFSb11IUcdmyOn8mw2okQmovi3GpTbIVr1AHpQJ6xWCOo2qs9L0OxSbusUB+eZCjSYCuXoNnpcGzlKHCDdYiKlEfY1OTzTZcRn0Snn8CiTDCVNlI6XYr7FH//tAPpilPONeTKbMXxKC3+vit+EqhbA09LpmDrJgJ9KqcGYuo++9gL5ToSr2aMkkzbjQxq1N2KEygfke6NMdg9ox1IYIQPF06WVLjH3WJtvXBdie/GiEOmJZJCj6hLqeJLu0HESyy9Tb6uElSo/Vp9mfzlMPC79trcnBPzCBel/Q+9ilLJsr3XRfR6KnhS2ZmDbwiy6XXl3p0/L+6vXXa2tVIJf/3V5f8vLosHt7cm+fF60h8lJucYbbwgD8Xrl+IceEqbex4eMz3BM8YOOYvqd99lvA//qY2rOpwLFonyyWTes0QmBfKeVs42G2KuXlyWaJp8XhjI5KWakb38bXnxRTBwejzhMHWfnzZtu/eftbeh1bYz8Hk9ESzSUIAfNcfYvZfilydfxZbco7EQhuEihPM3x0zrhuk41F2PCyLC1Dp6BAB1lBrXlIRKB0vgEmp1jVW9SCoa4sJagXO8yM6AxO1pBURWye10S88OUBhKEqw1CzQrtjsJN7ylytTgvZWZohlK0DkxOhu5SDurcMUcomTHmPFW0Xg2r4kFr72M8ehx/KsD6QQQlnSY6GCSVhO2jMxxsNPCqJjuhBcZbBxhGGavVZWcHblxJUGtKPyws3EvW1w2wETpBIr3GrZxN0P84wUmLU2d0DmoW18qu5J5Lm3z3P+6Q36xRU6Nouk3MKhGMpaDbRq/kUZIJMlUDVVUwDDn3tdeEYc/OimbhmJBUFb72NXm3uZwwAkUR7eboUQkbvnJFND8nv9XOjmz/B/+gX460jw+OT7qJqY/7sLcnE19V4dVXxQRx6pQbmz815foOCgVxIJdKcuydOxL+2OnIZ39fGMLKivgfPB63CM7mppgn6nVhQp2O2MrN23eZ7N3F9AQIqG0StT0qtp+bHGU6qjPmybBYvcA1/yzbjQTFIkzNBjhydIqRfI9Xz3tQDQWzAYoKtTp4EwMs30urEQyCruvYeoqdQhGrazExpjL7hVGW7nowtTI3DzoYCYPdnRiKx2ZfnybSzNIqQGDax8DcGNxsYu1uEp8cYapwBV+3gjI4TnzEz+SiQjo2SPTOPvv7Pfx0GRr1ED95mLNjB9z+Rp4gEcLNHZpbGs3nniM4FmOiLSa4cFi0tc31HrHDo0werDPSTpMzRlB8Ye4qE2h7O3S0SSw8+H022q1rmK09DCWAr7lO1oyyOThLLGLSbMIxrrO/EaFujhCYHqKN/811KZ2OaB5OkaVjx4QxOCuzTVM0BIfob2/DCy+45r//8l9kvMzOSruvXxezllP3+73wThll+/jFQp9BfIqwtCTOx1xOTBZOJbOHH3YlSJBtb7whBLdSEZOSU/HMsoTQ+HxiLgqHxcHp5BJqNNxQ1zfeEOazswNHF01C1TXWjEECfotS2SZVW8U2xri9P4k2fQwtOcV4MI9ZnKRV9LyZwntjUyEW0xkclIVu06MdNn64Su52huxqlHTvMIpfkuKJE91PJ+BjdFTBk4B6Bw4fha4Zp2xBowOG2mYiXiNsdBkb9ZEuQSM5TTIIJ2aL+EM1OokRNP/nqKXLDFZW8Hm6bF/KcooVRh8d4W+Uh1jbNwiFfIwpPTzFNJ/7UhCzZGHZcXRdJfncAEVNmK3eraNlK1gBA63cxTQatGaPESwUWcolGPTbdG/cor6msdNOY6VGaGwXeSr3Y6JxjYbt4woLJDtp0qVJqi0fU2qaHAka4SRmUWNWWWXVc5RcXqVWEw3CSQ0yMCDv8XvfEy1vfFze39qam6Tw2jU3Y+7Wlrw7JwVIJCJjIJ9/bwbRaIggsr8v4+Txx/tO7/fFZ5ST9hnEpwi9nnzW1sTm7CSAu3hR1i042kOlIuO105FjFhflvGRSmIFpSrjm/Pw9aXhTNIhaTb4NwzVntNty7PPPg9WDVNli7eUdrFaPuFah0Q1SLqZ4qRGDQx1Sj4wzGjF4/qti997bE8Y2PWUT0jss3/Zw8zv7eAp1Qgo8qbzI6cr3eKn1PHZgnJV8jG6hQSrcQTFgdDHO9es60aj4SxYP2VT3yrz2/SrVrjRSadZ5fKbOuVMBhgZVJpZfJVfOs1zvcOVglq4ySS0V5eFb38Lr9eNLqgx2t5jU7vJq9hTt/T3SlQY3ugoPz9dJnpzkt365yY2LHZp1E7OZRVkrE863COptzP06s40m9dnj+IImV7fmiO1eZnh/B0+vRaU5wWPWq5QDp0nVt/BZDZq+SWi0OOO/xb4xxJnRHFf2hsm0DPSgge3xoeqwu69SCprYtvqmX8my3HKod+7IdyIhhNwJn/V65bhMRhjA8LC8f6d4ka7LNQoFNz37O8GyRGO5c0eu32qJefKf/bP++or3RJ9B9PGgMT0tkUjdrisBBgIyqU+dchOzObHzIFpBteoS+1pN7Ne/8ztCKJxUFZWKhFMODwszCYVkXygkpqlCWcOOTTO0d4XUWJZqx89aZYxubIGRWolmxM9WZ5TdtUE8foVEWs7b34ehUJ0v+C9RLdd56WXoeEN4rA7T5hJ0Ssx7Mli8yIW9R1lUNNqRYX7l8132duHOy22sgWEmDvVoXd8hvWOyvqVgWiFM1YMvYNJUQwQjGgN6kcXGGu1GBSscwciWeaj8Y7SpcazkEN3OMIxNUDVg63KOwvYqIWuAWc86mcQ0ihqhXcsz0biDnQ9zZNbDn/yoTrvSQTk44Nhgk6e/GkSPBlB+/Cq3BiLc3EkwsBBlIFOkXvJSC02R08Y44c+zZW8Q8DcohqfQ6rBWmyLYyRE7PYZ28jjG611q2zaRkIGiQCzcZNjbYeSkSr4o79lJaQJC/EdG5D1mMrKOwu+XaKYvf5k3154cHIg5TNeFSTgZcy9fhr//93+6GBLIGFlZke8bN+S8VEr27e3J2HjuuY9wcPfxiUSfQXyKMD8v3wcHQghOnxZG0GqJr+DFF90iM4ODMqlffFH2zcy4MfzHj7tSpKrKdX/914U5NBoiZT70kBAJJyfS/j544ocwA00WY2UK3il2DubodMFQOzz6CJTrPXrxLlpI8nQc7HTpNBWei18mEjRZag9AoM5x6ybtnoJieDFtL4VmgEG2OREO0Vb8RMYbsK2g5jxEGh18vir1822uFBMUG16Oh3cw91t0jVG2d2yG/V2++LyXytwjvPaTJj4jQuK4judGEbVcxFZMhn1p9J3rxPVd0o0w5WyCjhZk3rNLuLKH0mrSGZrCTg4TDO/QHZ7AsmwOd64R8VXxRjM0IlNUl8ocP6VBuEmg+waRwQX0ToMdj0HYKmCXbeI9C2/YTyKl4DUCXGvNU21oGFYRLeAhrwxSv5Ln0TNhLloRtHqJdMnH3GAX35FZjp3VWF8XDUxRhGjX6/LuvF55H1evync0Ku/o0iXxQwwMyBjIZoW5jIyIYFEsyrm3bsm79/lEuHBMVRcuuOtj1tddxuP4ODqdBzHi+3jQ6DOITxFUVYjEwIAQBKeOwdKS2J6DQSEGFy7AF74g0n8yKYSk2ZRzIxE3dt4xI62swOiIxSNHGxRLCqu7BpWKhyefFOaytCQMJxhU6R2aoLe6gdEwGUl1KG+VsXWVl65F0DWL4fw+h54Y4lhghzb7lJQOKfWAjcYJajVQg0HGxsL4stss7YQY4QA17iVsVmhQQDG7PDxUprySJ6wNU+9ByspQPFAJNcfY2/NhhTap51MM9u7QU334w16u/jjF2FYTfrLEVHOZ0GgTXzXJfjlIJ6wzGi1iqx7ChQ1GUgH8LOH1Nrm6lYJOnbwaw9fZZTBkUa8rxA9us//SCr47ZXpYNPIVahst7KSHcNOHNzJE2KoSvfUi9brKjL1DK6oR8hgMddZYrkyxM7VArhPG79sn6O+S7DWYmrRoF2+ilTMYe0MUA4tcbU1gh1WUiThjizqJxL0FifEufrVFFy+mx2B8XISD7W15t5EIPH6kRG69RGXZS9mIoaiBN8NiVVXetc8nY6bblfFy+7bse/JJicpaWxPm4GgqjzwiK7xjMWE2yWQ/8ul90Tcx9fGgUa+7EUef/7w4IV98UcwJ1aocUy4L8firvxKzw9ycaBuWJQRlZ0dMCE7th3PnoFbuUb26RqxVJthT8XgjjD8+ycJhg8cfl2NtG1K1dYp3brNdUxlprxMbUXi9M8TN4hh2S2N+osXqVpATuysMeffJDQ8yOVsndmGNRCJI/ESUwkGbStZgZezLzISu8/lpg9TBTeyNDc75V9nrDlJ53Uc4FOGZ6WUuFSaorFlohRb7/kf4QnuTbHeAZKXGtHeHsidJylDZfbXAybvXKZsR9GaJrdsmcfa4qjzLpdxJWrlXOHPyLOHQXUgkmN1/kV7+Kh49yVpjgGNcJty0GNsx8R97Cq1TYWjtNW7eiUIojBoOkD8wqTS9BI6OYGykibWKjCsH3PQdwrIMgsN+RvQanWqbiUSaQqrLsFVgteEln4Nws4NeqTDeWacb9jLqq2BPRGmUWmylTjA4KgT9xnWb2maGufYS2VYQ3dCxooNsmiPU66INxOMwHS8yXb8JeoShRBe9lqM+ssC+7qfXk+SF9x+/sSGmqVJJIuDu3pVvZ5Geg0hEUoH4fDKW5udFuIB3j2yyLNEyvN5+FtnPEvoM4gHivcIITVOcx4WCaAbxuESWgLugrV53cwr5fEJczp93c/jcvSvModsVTcDJKloqSSjk1hb8h/8AMX+b8UCQcDKOqtiMhKqM7GXIDU4wOytRUhdeamHeXEIbSjKhFmhuBhm1tnnssWEalxpcXY/yxg0/tLq88oaHuaEIKX+e6fId9KTNwN2/ZHF4giU7wE1tmHjYzxf++SLDVhT+tx0ILuLTNJLdDubWOlrIh6IkmQnnyDYgYV3lROk8+70BVo1jtM0BQnaFsNbhoDjOZOkSbZpEUiqeoIfSboduZIBq22CivUZEK3GwZJP92ikGqut4t1Y4Xqlw1LKpD6Ro9TwQi9AbHmenOUnzWxcZKKxyXDHY7sxgVgIEUjMY8SDB9ArDa6/Sapoo/gYnPj9KIV+lY1lQLKNF4/RiCYxankg7h370KK9d1FnNDzJSKDMW1zk930Sv5Hm5eY5DgX2U6ATlLYVNM8xUosRDjVdRbZta22Q1P8Bs4y6pWZVtLcXkpEY6DYPmPpvlEIrfx6/8igm1Ev/xtQadjp9USgj24iL86EdCuO8vktRqibBxcCBap8/nOrhXV2UBZDgs58/NCXP54Q/dTLJf+pKMSZBxdemSCByGIcEE0ehHPXs+YehrEH18WLAsId4bG0LIjxyRVAr349YtMSVEIjJpX3hBYuCdSKWDA/n2+0UCLJcliZyz7fHH3dw+hYJsD4XEbPC97wnzMQxhKvmsjjrsI2qraIrF8UmbyUSNQkuOW1yEJx/t0q4pqGaacO0SlTHIbDUpHwywvPowWq9JMtihjkYl18S8cYPFmT3U2RnoNGBmhk7FpBYc5JC3SnT7zyj/51GSv3QE/dAhcXJoGkqrhWdv982c2sP6Nop/Ci2goep+ptUes9YFZkoaN1pH8WkdZu0bLFqXiWl+Eh6dYhHUiJ+iN8hEdxelXSY4qBMcibH3k1UGDr77psFd7XWg3QTbh6dZwa6VCeQ28eyugmky2t1kSC+hdkwuodMseAnu38T02lgtE6V2gO+NlxmwFHoHdczBYYwjSfaDI4xt5TgoQEDvcHTepN6tcC62yqmBfZIhnfb4IPHzBSaiaYZ1k3wObucTRAMRpsZN1nJRrCr4GkXynR75l3MUvRqdQ3ECAY1wyMeZmQLnTpcZGNX51vcD+P2KOMTXhGgvLIj0f/euCAT5vLz3alWEC9OUNRLnzsn/H/7QjZCrVuW17O3JWhpdF7/E5iZ861vitzIMiaLzemWsOrmjnn66X83us4A+g3gA2NwUKW1gwK0s5ve7Elm3K8TeSdjm98skbDZF6/B4RI0fHxfGsr7u1kQYGRGCEI/LBJ+YkPoIBwfugiun3rOuO9FOCpW6h1SyR6GiUyv3sCIxDAPa1Q7Vksbmvh+znmDi2rdR1RIxRSE0Bv7ANiNDp9msxLGDXVJqBq8nyk4zhbX+Ms2mDZNT+L0GmeV94r4cQ8s/Qem2yXZ7NF4oE51OucmCfvhDaXQyCaureCoVxk6PYG52UNttrGaNTq3DQHyPud4BVssk1dvH0LsUYw+jNBuEa2W0kRlamoemOoji9zMeb9HbS6PdeRXYkut3OtDtYvSK1LxDeCtVup4a4cYbhMp3YCCFEfJSN216uo+oVqXXiWJHopRUPxE9j5ZrQzaLvrCAbnWhloWNFVLdTULtx4nVfZT3gowaHn752A+YGGxDagKyWcx4kqSnRDM5xG5hkI4PZgI7HE6USeej6N0G46Eu4VqdcP2AbGGWAWOdjc0nYSpOVfNiHmzj0/fgTptK/hlantCbzuZ2WxhFMilj5fx5t2pgu+2mL//LvxRh5NFHhS8bhhD7u3dle6slfqgjR4QRRKOy4M6p1leruSYov99dc+PkhPrM40NOtaEoyleQSpoa8J9s2/43b9sfBf4LMInQ8P+Xbdv/y4fWgPvQZxAPAOk0by4ic+oTOHZieGsBGed3MChhjc5q6GRStAFHonNMAcGgbG+1ZKKOjck1bt0C27LQ62USvQ77lSB+fwBQsdDxRXRCnhq5DuSVATbLQawXLxBJZnnljzXyw8fQB4+yu3qecxNdkiNePOPjBJcyHJq1ONgIMhAqEOhVoVIh2s6Q7vgoe4IUx08ylr0C9QqhzCZqq043FCOxex1vOwh3bKmK4+QPWVyEVAorEKDx0kWKG21U3zSJgS5+3cafzYJPYWZrC5QO9EzweEl6avRmptEmo+ye/DL2gUprOUAy2KS9tYnSaDAVzEFDEVtJMgmFAt5ej6RaoRVM4I0FiVR20RNxCIXwhkIo5SqdYJzZYwkm17fo1DpYIYMBn4bei0jbJyYkb0mpBJ0OWqFG2PBRfPy3SWzfIRTRCDx7mOsXdqmsKITGFpmzIdnc4I2LUeyURs+fIBn3YecKmPUA7WKTKWWdqW6Gu8HDNCwDvd5irLZEKH6aULPMnegZspkFnllMc2ikyrdveqlWZXy12+J4Xl4W3utU3bNtGUelknR5uSzHfP/78hgLCyJIOGMykZDzdnbkOjs7onkODopgcuGCHJNKyT2dMd3Hzw5FUTTg3wNfRLJZn1cU5Ru2bd+677B/BdyybftXFUUZAJYVRfmvtm1/6LFmfQbxABAIyMT0+eR/t+uWv1QUkcyGhyW6qNMRBpBOSySJ3y+T8to1N4305z4nTmlNE61he63D4aEiCcPk238eY7cQ4OAApiIlDgW2WRz0YrdbRMo7qHacZjDI+JSBFRxlbsxmKa3i/8NLHOre5IWuj0rbx0DyPMsjTzMTPs1QIEoyJTatcLfCo2e6rLZNKmsNAhsbnA7f4WTjFnphl+HMOuGATV5NYBw/Q+e119FVP2qxiKqAp3AAXo/EbZ49KxTp8mW4fZt6HWqeKM1TT9DRfGSbFkeGixhD9wpU7+8LRQIwDLyKhXc4AZ/7HLOdDpO+Lc4cTZDdaGD9+CZDs36C1jDcrbqGeNuGSASvaeIdDsNEGJYQijc/Dysr6LEIesgHnTxoVShtQuGeI8jvlxexsiJMJ5EAVaUSHCHZSDPR+wntcJuSmuJ7rxwm5RtmtHYB+/YmB9+9Q1KNsGinaFRz5AceYtRTwL8wwa8eb7B0xURdqlBsNhg080z6DmgYcXa1MNWGxY9vJYgnNcYHQiwTxdPJo2KRy6kEg8L/Wi23hoTHI+PDNMX/UK26JUoNQ7atrIig4US5jYyIljo9LXUnbt2Sx5yeluCFYlHOf+klCY2ORMQH4flFoywfngbxKLBi2/aaXFb5E6Sy5v0MwgbCiqIoQAgoAL0PqwH34xftNX4iMD8vtuBMRuhTMimT7sYNYRKWJVKaMxmff14mq6qKJWZ/X7QDn08mdKslEzoUAswuD3uvEc2XsFWNdGWYcGyKtZpOqV6ndjSJ6u9w1LfOs4kr5BaepKGHCSQCVNQoK6sQsDUSpRV2OkHuZONUWx6OF/bpGDVe6RxjfqwOhXUoFNBnZ3kmcZOJsVdIV4sM5l5g1rdPKw1qs4Fm92iVDiR3U7WMN9Gk3fLga9TxNTLo3XuezU5HGEM4LN7UcpmqNkrv8BReq0P7xFnKNR/lQz0Gb/wI/vZvxUbi8QhTcYo7j4zAb/wGtNt4Ll7EU68THC7BtRIE/ZBrCxUrlYS5JJNvZjwsl20q3RbBhk643kZ3cprv78tL2diQ84JBobrOy6vV3FWH4TC02/QqVayGhXLhAv5YhMLCNIW1KsfUV/GoHYxWiXauQDsUYkTLEWyv01xb5o5xlJRRQTsxycSpJPs7ISp+g7hPRW2ZhMor3DXnyZQ8hH0miUCPjqlhlytcPBjjN39L5Qc/kHGjaa5zutOR8bG9LWPFMERQWV0Vp7OmSRfGYvJYhw/LWE2l5PHqdVmMmUi4izA3N+UVeL3CFLxeEVYcwaePd0RKUZQL9/3/+r1iZw7eqYrmubdd498hpRD2gDDwD2zbtj6KxvYZxANAICBhhOvrMnGbTXEEOhP29ddFQhsZEeK/vi6mokZDjut0hA55vaJ93LkjwuyxY7B9qciIp0mpFSdb8qCZHY6Ht8gOzTLUqFEuBRlrrHAu+SoPD+9TmExhHTnOnVe3+fGdMWJmF1+rgHawhdkNoLY1NII0aib5qoe9ToQN/1EqxgqRIVmCbaz+iKOZDEeffBhyeai0oNWh3QU0G21/F7+VIeSv4ouHYcSAfA3qVTcG10kmdOqUUJhEAjuj4l1ZwlNJY2wuYaeO4juoQ1RzbSbb20LdNE04qVMWLxCQTnEcLocPiy3EyUcRDLoicrHIvneSvQOFQCRGfmgCVYcjd26iz0yIyatUEjXOWTwyMiKaQy4nL8fvF0P8vRcUqdvk1Rk6lQaeRpPSmI8BO4edy2FPDuFZv06n28PXKtJQ/TTKDfKBBM1Aj9Hz3yB91UctMUmjYhNbfIihwi0sr0VH7fHEbIHlyTq7oSRJdZe4v0WmF8McGGJkBH77t2XM7O+LA/rSJWn+7q4QeseH1WxKd2xtuaVNez3pqlOnZD1ELieJAQ8dEk2i3ZbrOOcHAnK94WExVf3C4oNrEDnbts++15XeYdvbK2R+GbgCPAfMAd9TFOVF27YrH7QRHxR9BvGAsLrqOpevXRObcbPpLoQKh4XuOEyg05FzNE0E5meeES1jeVkmuKqKyUDL9Ah4dMJxqNdsqi0PvkwXX9iL1xdmtH6X04l1Zur73PSeInM3iFKtEdrf4viJMZp1HfN2jlqxAx4423tZEr+Zi2zmggyOd2jbBucvKTwazhAOIQ/SaLgr8/b2MEwTpdmkhxfv+jIRL/hGk9D1CZXyeuXjJJjSNOGGToWbXI5Ux6SgD2AfpKkMHyeqVggqXSi0RdT1+dxcIU6Ju0IB/uIvhJgnEqIB7O1J237910V1u37dXUnWboPPx+38KUILPVpTI1gdk30GGN3ZI5VKibi9teWK4t2uLCBw0t82GkIgdF0Yx84OwYUhJuLDHOxZNNsmZyIrWGqDW5URoqsHWGaIId82/s4BK+o8ZdtDNxTnOe8raPk8wUoNdXiAnW6C3HoTa+oIQ+EakXKGxdg+s5U/4mD6LAftJC9vH6Ke9RKLidZ57JjwyURCxtH6uvBGv99Nu5JKSbdHIqIxOCunJybkt1NcaGBAzs/nJcy63Ram8dhj8ntw0O0Cy+pHLn0I+CBVNP8p8G/ulUNYURRlHTgMvPFhN6bPID4GdDpCX5pNmXDhsAi2Q0MyWYeHJVb9ySdlm9crdG5+3s3lb9sy8UdH5VxVdUNcEwmhf3fvQrMYZzC4ynCsxeKoxuodi/X2MbxBWHxihMf2X6WSDrAVeYxS1UOksUYslGNPj6JoGhFvlW5lny3PGHG1RDLQZsMax6OrnGu/iNYe5SErS2r9ArvDcQ4n70nvqioS9aFDsLmJWiziG0xieXSUeg2lXIOemI4IBqUTSiUh8obhZpybmHgz1Mrw+UiO+GmrSSY6qxjVDFpbF2qkadIB09PSqR6PMKd2W0JuXnlF9h075sYB12quUX5vD559VjSX3V3UsWMElDzevQ2swWG0Qh17ckqu5ySxikREfG615KVEo8KtDw7kRUYi8Gu/Ji+i1yPq0YhWdqGRgfUSDA8TGunQ2ssT9DfQM03WIsepKikCSpYz4QvY5QKtXhddM6lWbRqWFz17QFf1sxxIMXdskSPBLbKbe7SDSfa2C6SqNY596RSWrUjIqdlkxlyhlbVZqUYJmVEePeFlbT+AZcnYKpWkW3w+0TIGBqSrTp16q/9AUYQfbm/Lq8lm5dGvXZPXdvu2pHE5f158F6++Kutm7q9p/guBD88HcR5YUBRlBtgFfhv43bcdswU8D7yoKMoQsAisfVgNuB99BvERo9eTyeOED25tic0X3JrDui77nRj106fdoi8jI0L8H39caKJTcnJ2FrrFGl98qM7laxo3rlqEOybzcx6agRNsFdYwLYXOwhiTEyl8PnjuCxrDlZP0VjZ446qXXj1HdDRIfGGA6t0OoeZd7EyGXmeP4fgaQ3qJtDHBZDFLxmMwX3qN6UCX2NoQemsfK1OB6RGxSWxuCoFUFLFNWBbkcqi1GuTvcbNWSz7lsnC10VEh0KYp5z76qBxnmkJ4bRvv8DDeUumenX9AROBSSc6tVoUhnT4tVKxWE+q3t+dqJ6Yp3DWddsVnTZPjbtyQCjuPPsrxrMXeTYu2rdM8qDPcyxA7kQB6cn4+LwxhYoI3a4kOD8v1wmH5xGKyf3hYFpscHIjWYVliizFNwlQJk8Men+Jic4583SAUsMnEj2BnVjhhbtDpqZhGgO5ulkFPFzs1iEc3KWY9rK8P4WkVGX3uKKPdMhdD85wJ7qKQQA/o6HE/xxrXyGUt/vRbI0QLt8jWg5w66yWQmuC6PfbmOIr4mli1Ot28xm4jwNSUQbns+h8cOJpFpSJmqyeeEEEmmXSDLWZn3RTyV66IsNPHzw7btnuKovxr4LtImOvv27Z9U1GUf3lv/+8B/0/gDxRFuY6YpP7vtm3nPor29BnER4xyWWigI+T6/SKEOmkv1teFhoyNCY2dnhZal0y6SdKcojGOg1DT4PGZA+rFNXb2FRKvr7BY8bPjO8TQXoaRx6b4bvkMpSoMh2FvVaTDH/4QDi/MsbvhI7x/gWGjyNRgC9uu4ffr+NK38e5vYvS2GPNlCTeymGqEbtxP9+HHaF7cohcZRVm9g+n1kVLyUA6IRD4xIaLjkSPiFPmbv3GrENXr0uhgUB6g3ZZz5uakQ8plN2j+0CE5LxCQ4yIRoUqplBBoJxvhsWNyXSezYKMBf/qn4sDJZoWA53JyTDwuHewsH3bMUdPT8JWvgGmS2vgB+olR6oE26vJtEr0D9Je7QviDQdGQ6nVp79Gjcl/bFqro8cgLHhmRdg4Oyku+elW4eyrlpmZtNkHTaLYUcvowA74dGBnFVyqTqQxiJkcwLJNqsY3WqKCOjBI7Pcnd2yah/B0Snj08apHz39jDF/Zi16/Qruywd6uBNx4mYNVoPGzzt6snSdlZ/EN+altdXrg9ztnpPQZCMbThIKlAjfrKAZv1CIenWzRbDQwS6Lr/p8qSDgzIox89Ko9smu5SlUJBxnC1KsdNTro83zE3dbvCK9tt6Yp+2vD3hm3b30bKLd+/7ffu+70HfOnjaEufQXyEsCyhlZcvy6QYHRU6papCS7/5TRFADx0S2nLxoqjyW1ty/tmzMqFu33Z9rQcHkMvaTCzfID4TZbfopWSG6QFerUvJjuK5uIUSm2NmRsIdFQXuLNs883CZV78PhfogWmaO40EVu20zuJtjYfM8UydirBoRdLxY7SAVRSNkmKSSOqhZmtMGpU4bTW0TOD5LqHJPrd7dlQd46SV5uHPnhEL8x/8oDVZV126fybjLxi1LiO/UlFCerS1hCJOTLuF1Uswmk0Jx0mnREM6dc6mNo4ncuSP7LEvUMsuSex8+LJSsVpNjvV65zuys/N7eBssiWtom6m+AloPEvdJxGxty7PCwaBG1mnDs556TezcaQiEd242TMCsaleXE6bSYnA4O5Hn29kDXUcw0dn0MO+hH2drGDkuVH9XsYoS9+IeiqDtNlsYGqWkxypk94uEwEU+e4MEqY40duskhxr0lCkUv620/rXqcmbBF8dYKdfMkhxMZVuojeEMdikUvrXKbgZkO+mCQ5k4df0zn4eke8xM9etUWZlPhL/7Cz96e5PGamZGxMzvrrryuVNxuNE0RcpyaE3t7sm9hwWUOvZ4UnnJ4Y6Eg53o88jl2TIbFpx79VBt9fFDYtgjF6+viWI5EZGLcuSPC5a/92lttv4YhZqgjR4RWDQ3JZHRSIXg8Mqk6HfkdCtrsbvao6wrV3TLdZg/FH0TTFSzFg2mB0m3T2KrgD5vow3E8uSLli3tkdg3GtAOsgww9XwGfXeS4+Qr1vRKb2WHSjBFKTrBePEU7GCIRNXk2ehFfNIq/28V/9440pBUTMfLKFbfkWbMJP/iBiJqWJZzvuedEcv9v/006YXJSPt2uEN9AQB5udFQ46dCQMIxEQmJ4nQLZL7/sFtL2euW+CwtiNFdVcTw7KwWbTfHWOmlIn3pKOn911S2T5hyraeLpt21p3/a2EPWTJ+Vl5XJC3I8ckbZubgpjeP55YVJ/9mduIYVgUIzzX/2qOMfX1oSCNptiFvN65dkaDfxbW0zpcTaUU3jbFu1im9nAPkarDKlxlESCgVAHj++AzFaBersGkSglJUFaOYbPOsDTNClZQSyvit6pMzimExwJU676oFqGoMURbYnzwaOcHary5EKdv6n5qORhLGLTqip4dbBshYOsyuUrASLjEvW0vg7/6B/JY9y5I92ZTsurbLdFQZyYkFedTotwo6ry2n7jN9y5UCjIXOh0pGszGXmVX/mKvJqLF8Vk9anWKj7kldSfJPQZxEeApSWZYK+8IoRfv+dXPXRIaIwTfujk4a9W3bxJqirfTnDP9rZoHem00ElJsKZy254l8uoWmU4ctWmQamao6QnicYXQkWGGV1Zp9rxEPWVKr28yEfOwUkyh1g6wanuM9LZJdItEr1ylPVhC6Zr4Gnk8VZsXK08zEmsSHImwbg0z4e9yfOMVaWQ8LrN5f9/N5zEz41amuXFDckXv7LgLx/J5t5JNOi1c8cgRN/TqfpFzcFAoz82b8vCxmFy7XBYi64icliUd027LNZwqSs6KsHhczEGPPCL/u13x+g8NyQsZGpLrbmyIBmTbQrw9HmlvvS7bazW51uamaBGHDolpyu+XNluWaAo+nxxz+7YwDadvBgbEzHTkiFBeJ4tdIMARbZ1EuUDN8hLy1Riai8DWPWIzOgpHjhB7/Q0KdpTUWI9Srs5u0SDctRgPNGjofmL1LexOj7NKnkjGoFONk3vsqxyfHGfl9rC8g1qPSSPDn9x5mP2uH48HfGMR7MI+hwZKDHotXtgdIDXpZ/aQm08plZJxe+mSvJabN91gsErFXadz6JC4j7a2pAt++EPpypMnpXtMU15lPC4MIpmUYTA+Lt1dKn3KGcRnGH0G8SGjUhE66vWKYNpouJL/6ip88YuupWR+Xmjjt78tk2d1VSaZU3v49m2hZQMD8lleFiF7cBDWfHMYpp9euczYzAy3iocpl6HujTMfqXDySJkf3k5S0HzMj69wLLLLj4oPUS/tEW3vEtfz1KwgA50dAvsZmhOH6PlC0FApeRIMzfhoWz1mglkyc09BpyaNsG2Xyw0NCdGs1aTxg4MiYo6Py0O+8IIwjEJBKEkqJUzh1i0hwDMz8oCZjHTekSPCSJzFIJmMMJpazXUE3wsjxeMRhpPJiIgbjQrDODiQe2qatC+ddldNnz0rjMKp2ZlOi4YyNycvLhKRNQ/ZrFzXyYMdich5waA8w8mT0n5VlWMURV6cs7zdMdQXi0Ipn3/ereLj8bxZA1YplxlWykDzXphswnX031uY10mNUJp8hMj4PiMv/DXz5YscaGPM2Ot0mnuY1hw5K8yEskFROYqvXcSzu8kjvzPNP/y/DnNwMMn//D/1WElrdPIK5OXV+f0B/OExVipFzj5dZyyfwggZVCrCCEolYRQ3b7pJ+sJh4dMvvijNW12VY+7ckRX9rZaM6VBIXvedO9K1Ho+bSbbTcdc1Wpa70K6PTyb6DOJDRrcrdKNSkcEfiwnN8vlkAjkTw8mZ3+lIKh9nGYATym9ZIoCOjspE/NrXXPpSrUKnoxEMDFFvxfD5LSLTYeyKSqkE+VKdUjbKYyeazI62Wb/qp5uv8I/4Q14igmk2WWGC455lhowipmXgrRRQe11S8XH08SmsX32CpJLDuHsdvVuRm+/tucu5CwWZ2fG4awvLZMS5UiqJ3d2pdQlyzvi4q06pqjz4rVvy8KdPi69gaUk4pkOMu103p0ilIhSqUhHbRiolnbGzI/cZHxd73XPPCbPx+13V7PRpt+iBs8DN55Ntw8NyHa9XmJETp+nkRz84EGYzOCjfgYC8rGBQjv3Wt9xc7OGwaBjNphtdNTgozGJ2Vl6mY45yVMZORwZKOi2DplKR3088gb25R/LVb2B4LfxWlV7KT6JSxrZUiIQ4pFc4XNlkRT9GL2himG1Giy+wcLdB6MhzGMYYPTw070X31uvy2OL/95E6OkI6CGcfl8XpuZwbJOa8KsePlUjIa3Vqnjsh2rouw8HRcNfX5fxMRhS+z31OrpnJyIrr7W3plnJZurPvg/jkos8gPmSEQm7aAkWRybi46BbyqdeFFoyMuOfYttCsfF5oz40bMtFiMTez65//udAex2IxkWyg3LrJblVFb/ZopON0h+c4dkxjYjJO7PIKURt27tokPCUy+gSHPZsMDaukdpfweFRSepWSNkuqvUWz3UXtFIjHfTwWuU3bXMRaW6V96RanEiuweUOoh7OCyuORRjsrq4aGRDQtl12VKBSSB93dFSLYbssDOQ7ozU3hhI7df2nJTe4zNSWUp1KRa3s8UibP55OOSCaF0F696oauxmLCZKan3QmbTMo974dty3NsbAiRTiaFEs7MuO0eHBRm4SwtnpyU9pqm3PfMGbnWwoKYmJzFKiAvsVKRdqTTYmdsNITJDQ3JNUoll8lls+K7iUaF4oJs+8538ObyRFo+OibQqlCefpiIfw8yGqplEhiJEFAKBI1Nyo19NNsk4tMwLrex9+6wM/qbLCbGqNcHGB+X29QqFovGFidDB4Q3/HgPz/MP/kGQTkfGnm3L4zoK2/q6dEen466/abWku2Mxl6dtb8tYLxSEkRw5IgFmgQD8vb8n24pFMUkNDcl1nKp1fXwy0WcQHzIMQ+yxV64Ivbl2zZWS5udl2+HDbk3oRAJee03U8WZTaHAwKBPJyaVTuSfAj49DtdRjUM2QunuTck8nOjZKfq/FBPvExyN4h4Y58USE3cgM+Zv7BAcUOvYsrW6Gi6Uj7ISSRKZqHKq8it5p0Dx2Fl9dR1tewdI9GJNRnuUnFFfq9I6eJNIu4N/Oyax3wlAmJ0VEdBzO8bib8qLddj2W3a6bX7rZFEbheOUHBsSJu7kpnVGvi6T+0ENCKHd3haCurcmDz8y4YaVf/KJQsrU1lyjPzwsTuT+VRrPp5rq+ckX293ryMmZmxLF99aqc//jjIuratlDCdNr1XTz0kDzvyIhragqFxOa3uir39PmE6JummMdmZmTb44/Lc42OvjVFR7Xq5mdPJISJLCzIy26336z6pNZqhL1t2rZOz2cwWL5DMBVAtfxg6NCtYiVSVCteTGwCShVjcR729+ndXSExqvLUiVMEZs5xfm+MwUE4l1hlrHGHcj5GPZPj8UMFPOYTfOlLBmNj0pzVFZuNa2U+f7jJ0w8H2chG6PXgH/9jaf7Nm8I/HZeS0wXXrrlZh7e33VraZ84IP/zMoq9B9PFB4ZjDn3lGrAr7+2KLjURkUp0/L5LW8LBMtGTSzY8zPS2CczYr/7e2hO7W63Dzhs1RdRmjW8PXLmF7QqiFZYbVBvpBAa5X8Y5/gdlZHwcHcWoTcUnvXCoT3dtg6FCYoZtXCPk6bA08x5CaIRzToA664RGRLxIEq0dy/wY8sQhaR8THcFga4sQ2NhpS97TRkMYuLwtVsCxxDKfTQmgLBaE4x47J76NH5Rq5nJv/YWZGiHq3K0TWCZ3JZOTc3/xNIdxXr4roenAgFKdalf9zcyKJl0rS4eGwqGNjY64mEgiIduMwJ4dzHzok13bKqaVSYhpKp4VQO6ulwS3aDPLca2tyrUpF2qyqQvCdRQNPPSV9UCy6BMTnk4Hw0EPSb8WiREGdOiXH+nzyfN2u9JNpovv96I2GFDZSvFC5x+SiUex8gauH/j57rTjatcvY9SZn9rIMFTbxpFLEMnepLHt5+GyI1FfHGBiAwzubbBQGGAhq+AM+7Eaa/OsrjE8GyOox3rgUZ/WFLeK1HYaP1Tl9skfql4/zw5XJN61gw8PShbGYKzuI6dPl95WK/Afhz8880/c3fNrQZxAfAixLmEC16i6ovXtXJtHoqMz1H/9YaJdhyL6LF4WmOCbrQEB8upWK+FJbLaGhui50Jx6HqFZDz+yStxNo4SG6pQaN/TJrvQFCmpeBdJPkxRfx/p+/wMyMQjAIfruOna+wtRUmGSqgDylsaGcohScZeEJloHiecj2LGTJRahqhRgY9HJQGOVE8TpqJdlsa1G4LQf3JT4SgOesB4nHZv7AgxK1clsafPi1c0OcTB+/ysnTa7q5Qm0zGTYPhqFGHDgkXffRRoSovvij3UVU53uORupevviq/i0W5pmMbmZx860ty7CEOKhXXuK4ocg0ndbhD6N8LjnPacVRHInK9hx6S9rZaro/EsuS/1yvPNjrqGvSbTbnG3Jz8f/VV6Yto1NVmHPOVk4QQZDCNjFCKzbCf9zI8VIeERSPi5+WNEZ5rXaIX9BOaD2HlNihcNgiZCR7XLNpmmfmZIKamYZk24eImtVdLGPkBkukO9vIMj4R30ebibFYDdNe6PBu+zeD0KC++6KHTEQZw7pzIFN/4hjyGw9OcmhCBgDyKo7g5Nas/k+hrEH28G27dEknfcUQPDLi0A+7ls2l10WtVVm+qlLtBIhEd0xRaOTIi9PPsWTHDDwzAr/4q/PVfC83d3YVsuguUGYrWSeg2N9cD2DUbra6h6T027QkqjSYDa+us324xe8xPYaNCcuM1mg0bf9vElwwTGDrKWGiKcVXh8NEu+YuDrHpPEVfr+DbSdGiRCOyhf+neQk3TFEnXMITwKopsm5sTSffhh2XWf/WrslCu3RZJ/OhRcWqvrMjx6+vyoIGAGxbzhS8IQSwWhXh7PO5ah9/8TekUVRVp3jRFYnfqpxaLInU/8YR0kKKIxhAKfbCXlkrJecmkm5LjZymBFgi4WonHI9/Dw7Itn3cZVDgsL9YJDXLqeKbTbibbQEC0qUceEY2n2ZQX7yQILBbluRTF9Zfs7MDUFOaRY6iFGfDVsBJJ9l7codrcp66EaTUMKq0YEywzkMmgWR4qY7NcW2tQu7uBNxVm2rPH2rUqq9VHqSxFye+3GSwvofrqbC0bZBggORhkINyi5rd4/HE3onhpSZQ6VXUfo9l0teFyWXh5vS7NN4wP3r19fDLQZxA/J5pNsbU65UEjEaGbhuE6pqv5DkO1dWqXS+yuhmi0NAqxWU6d9WKacnwiIar5P//nbhhsoQBWo4mnVMNXbNEpNakoYOd2UNRp8u0AmuqhqsRpawECvTRNy8f/9t8U/i/T8EhqjUJJJzgZYfAoFJYytOwIRinNwhEPSsli1ThK3LqMjzYEA7SKLTrxKHqnI7M+kRBp/pVXhNhPTAiBcoiY3+/aFWIxV4Tc3ZXv554TihEOyz6nzunSknSgEy5z8qR8IhFhSOByWGe1c68n96zVhMg6AfRvTx70QXDoXsB/JiP3OX7cNSW9H5xSf2fPinRQqUh6025XmMPoqFuDE4SaPvOMHLu87EZPvfiiMNLjx4W6Xrki533ta29mmWV11a014YQZDw0JAzp2jPDkAvobXqpdhdr2Pi+3Hubh+Wt0KmMU4tOEDkr0ohr+6TG6/giB9AaP/dIc23squ6tt1grDbPVihCu7ZBomxs4B/uIyN9U5gpEso4EyzXSSG4URcte8KIrwuHZbut/vl1fmKGRONTknwG1wUMK1f+d33CCyzyT6GkQf7wTHR+qMDyeg5swZEXjLZQhWD/jysW2WKmOs5YJEtDonDx1QrU6i626i0RMnRNBeX79n543WSL9xnYmWhVqoUrdDpAs6z7YvEdcyvGEdwzBMvJ02QbVDUqlSjcww5Clw8ZUEX5vpkDjsgYA0dMxu0x0dwTczgke1wLZp3D4gsb2D4vdjJgeg1sRsNYUwOakjzp4VJ7BTrDiXc+0F2ay74rhcFkLo98ty2d1doRJOaGyrJYzC7xeq4fHIdYeHxTQTCkmHOim8HcRiQkALBZGmPR4xsTghYX8X6LpoP05c8gctgXZwIM5t05R2nzrlUj7blo/D2N6O69eF0RmGnN9synZVlX6IRqWvnTUgpin9Bm4WWieLbbEIP/4xxuw250LDLJmTpEsd5prXGdL2SPsmaQ5M0a2XmJqJsm8GSV9u4Wk0CTfzTB+LMnsozEvLAxTLO3TzZeL1dWy9w25gkXIvRqNcZ6pXoJua5bX0NKF7C8IjEQkAMwxpipPMttsVeeLwYenaxUXXf+ZY7/r4dKHPIH5OOLnzs1mhYfW6WAFMU3yv9Tps3q2yV9bYy3WJ+Ts0WwYbWyr+e2m9H39c6NP3vucKoPU6HLyRx+ym0ENgjBgM1TaYK14mNahAt4Hh8aJUq3SDg6TxUPZp/OpJi063BKtFzEeH8Sxfl9l5/TrG3h7GySoodfET/NVfceTVKxzslfB46lQifoxQEj8rEl2UywnRLhbdfET3sqySz0ujdV1MO5WKOKJDIdnnZHQDYSaXLokZyuOR/88+63aiYzpyKthMT7+V8CuKcM/dXbm+zyfH/7w2C0X52YzilYqsVHR8Lem0fB875l7v3SRJZw2Hrsv59bpoQQ4zabfdtOndrpjnej0ZXI424SxKmJ+X/o3FwO8nFNc5e+WPGI8O8VJinPXePKat0G2N8bnTJaoDTXIvLBPX7qI2q5TyOTYrM9RqsNZR2LLGGNLq1Hte0H0MLISp7+sEfHHi8wnudGZYfqnN4Yki9Z6BdzH6Zr5D23YD0yIRUW42NsTamMuJUqhpn/ESpP1UGx8NFEX5CvBvkbS2/8m27X/ztv3PAH8FrN/b9L/btv3/+Djb+H5QFBEiNzaEBiSTIvy99pqo4pub8PyJAZTiLumiB7vV5NGJCjuRo1iq0NBQyPXZ+v1yjWQS8hc6aH6NoKfFdGwfS2kxbDZQhwdopX2ctpbxUmF1KE51r8L4qMZwvgDJJDHPAJnqEForTuJv/wLf3ZviA9jelpn7138Nf/3XDNfr+Dsq9arGcDNPfCaOHh53Q65iMSFqTors8XFxOluWEMZmU4h9rSYPbZqyr90WUTIaFbHTycJqmq4fQ9OEwoRCYn+3bblXNPrTE+7wYblHoyHS9MyMdNLHiXrdLQwE0jfOarD3Q6cjjLRcdhcPOosEHJNaKCRSwp077vO128JAneiGewsI26ZKvW6jnV/CPxzDm8kw2NvnjJ3hsnKSlqUythjnoccD5P7wR0TSWbSIH9vw0/MEuPmTPONssxBPcznzLFvmDKaloWoKnwtsEfBVsMJh7paPUTwo8UxomVGlTaNlUd2ZYHg6QKFkUgiNE40GOHxYIo83N0WeqNfldTnrIWZmXJOrpsm+5WV5lSMjIhO8m+LVx4PDA2MQiqJowL8HvohUUTqvKMo3bNu+9bZDX7Rt+1c+9gb+DHAsJSCWk1JJhMNGQ0zticQgsdBJDnI1tvdVVtuTDC9EiaoiyIObg8mhndvbsFmMcS65wnyiiFXbJ9+sEzDL1DYsurEFxoJ1QlE//vY6sMps/oCuPcy410tm7xQ3/9yErS3G9rssjI3jGxsWIl8oCGG7Z/KJ+ntEKxUwqzC26Cb2tyw3hFTT3qy3zOjoWxey2bYcc+SIWyQ7HncdK+222BucaCGHmjjhLTMzcv57wanT6qS4cJy2Hye8XukTxwfRbH7wyjjBoDzv1JSYx4pF0Q5OnZL+yWbdBIPRqJv2tFaT40Ih8VVcvEj7zhqNS7dopqbwVov0bnaJKBV0s8tsqsXolAfb58dXuYNyaw6v3aXctAh4WlBrUOjFoNXBWBhCqVQZM3IEZiZIpSCUXifUbTB80sey7zhmfYQjWy8Sno5jhiOUi2UCV17HDh5nSm/yhdEtroWfYDMTeLOkqRPtvLnpBoOtr4tsceKEyBdLS65l78IF6Y7Tpz/FTKKvQXzoeBRYsW17DUBRlD8Bvga8nUF8quAUG/P7hSYkEsI0otFhdg3QZmW+V6tCMxMJ1086MSHnvvyyTBjfWIqOv0L5YBf/yBjNnkk4ZTO0cxd1bwVjYoBiZIrutS0Oh/Y57Fmj1cpSWkoRbGpEn47h3d1Fb9UorxbwjQ8KQXbKgzpQVZf4N5tCmJJJeYBKRRqTyYgjNhJxU2pvbspxN2+KLWFuTgigZQmluH3bZQ6zs+79pqbkOvW6SMbBoKhgliU2incjuh6Pm+zuQSCRkLY7+dgN44Ov/nISB165ItrEwIAQfCfvtRMGFwrJu8hmhUmMjYkNcm1NVEygs7mPXs4TLxygqtAKJmnFIuhliY7yJZOQmoKmpFA18rusN+co14PMtW4y2nmZXjiOJ53AtL0MK2m6hW3CT3+OwOkJcnmblYYXFIXe7TqmaZMraEyFIW4XSQ12GYgVqbW9lLMt1E6Wl16aolx2BZxOR3i6Zbl5DU1TlKOdHXnNo6PCE8tl0TRMU3x3n2lz1KcMD/JVjAHb9/3fAc69w3GPK4pyFanL+n+zbfvmx9G4vysGBoSeOrV+7y8j4NSVMQyZMOPj7rqxzU2hryCplEdG4MgRBepDbDZP0m4onB24SmBunMbAEFdic8QrO0SyBTSrzZx3C2V4kEguTb2lQaNM+NIL6DcvQqWKR6nDmk8IrJNXaHNTiD24sfiLi9L40VHhdi+/LARrYcGVgHd3RSQ8fVoams/LDD92zJ3dXq9I/O+GeFw+jYaEuvZ6sn11VQjiBw1X/TihKPLCJibkpTmpxz8oEgmJ6ro/GZeDUEj6OxqVeywtyXs6c0Y0tatXhbJ2Oli2iqp5UBtVwMJrgtKpSg2LRMI1B9ZqWNU610qLaF6Nw4VLqB4FTyKGzwBla42af5heoMtsagf/7iV2B07SqbXIbHZRAwZPLOYYLNwhvX2dW5cPMcUeR0J3qF8/wNYThH1NtvxzPPqoW5Ijn5fXOT3thrfW61IXwuuVx5mZkeHjLLHx++W8ra23yhJ9PFg8SAbxTjqZ/bb/l4Ap27ZriqL8EvCXwMI7XkxR/gXwLwAm375I6mPE2Ji7FiwadROcOlXiZmZk/na7MmlaLaHFr7widOP+5H0jI5DPGHRVlYhSZa9gUDchMppi0pfjieb3iHR2SXu8ZLoxutkQRtNEjwVoL63Tvt6FQJBku0qgm4HtIPzWb0kDr1+X1Xr7+3KzQEA0hGRSzD1LS0JkFMVNImdZ7spin08eFmSbQxWcLKixmMz898POjlzXMTGVSsK4Pohd/0HAiWX+efBOdpSxMbdcKoh2cfKkMN7NTenTa9dgb4/A7h7dahW128EGbM1C92ru2ozxcblWOk2766Fag6S3QEDt0AslqBpRDkf3MbsNgtE2A7N7bChe2j/4S4b4IXnPEOnqE2i9FpvedZrzJ/FU1nlo+1UMrUM620IJFAnGG2yHZ6jWu+S9wgh8Pml+KuUW2Nvfl+Hk9Yr8EQhI5NMbbwg/syzhiR6PG9j1qUPfxPShYweYuO//OKIlvAnbtiv3/f62oij/QVGU1DvVX7Vt++vA1wHOnj37dkbzd0ar5QaU3Mtu8FNoNkWgdFTpr35V5vvenlhZHn9cJsErr8gcH7xn6SkWxZKgaRLk4yw08vmEeaytwfKyTtg3ybnpPfzsUel4UW5tc3zjOxC0qfiSmFqLvZwXw6xSUuK0mwlOhFYZLN2m0U1gGkE8wylRaZ55BjMSp1du4j19BuULX3gzyunNsMrdXRHlDMMNcF9dFQ1jZUVMJU5IqqK44abnz7tJpCxLVkG/nyPZyWjqQNNcbeIXCaoqDGFhwU2pns+LpuYMvNlZ2NhA9xvQM+k1NTB86B4F3eeV4x5+2H0vpRKebJG4XsVn1TGNAIoCHduLptoE2iXCsUEIlBgyL5MLtbhVm4Jam68kVJb2I2QzsGeHCDRHeSq8yq36LDlfDE+zxpOhO6x6jhA3WjT8EvvgLJg/c8blVd/5zr1CVyG3RlSnI4ppsSiP7fj7P+hSlE8c+gziQ8d5YEFRlBlgF/ht4HfvP0BRlGEgbdu2rSjKo4AK5D+uBrbbEpjjRCCurkp6gftT8qysiJAHMgHOnnXNzdmsSE2OcPzVr8qx7bZMjEBAzr90SWjw8LCbssDJva/rYIS8ZIPTTH5xlPHlNwj8zUVabch7R/GFQtjtTSaSVbqqQci2WOqGsLwhwlaNoAfqHuiVa+iYFG7ucakVx3e7y8iuzthoBF8EWXiVy0njnbTcTq6jTkcatrMjDzQ56Sar83iE46VS4otwcjc3myI2vl/1+pERoRq1mkyyRkNUqM8iOh1hiD7fOxMURXEN98vLMjC2ttxwYmcJc7eLXqtJMFU8KO8rHhfm4hRhmpiAdBq9XGbU12Ev7cNMjOBrFVnc/T7G8h54vdidDmYmi97tMBKNogQsVpQxYtEynkaZQiBKm3W8rT3S3QCmoqC2G6x3J4g2usRKazTOPM3YqFsz6pd/WcZvve5qw2NjrvulXHYtncPDYpbyeNzSu318cvDAGIRt2z1FUf418F0kzPX3bdu+qSjKv7y3//eAvwf8nxRF6QFN4Ldt2/7QtIP3QzYrdM7JcF2vC0F/9FH579hcBwZE6N3agh/9SKI+/X6hoU5YuzO/JydFQG+1hFak00Jz83lhHJYl0tTQkFgJgkHRRPb3wZoo8+TNHzFbuYLPatKrbLATe5KAp4Li1VGTKbRSDc0C0+vD8hlojQqmFoeBON2In9UfbxF4coHA3ADWTY2dK1nmToZRfD4xMT36qNz0Jz8RrWJkRAi941H/3OferKuM1+vG6nu9byV69+c2ei/EYsJ1HSf1kSMff/jqx4H1dSH6IM98+vS7r+NYW5PPyIjYYm7eFAZcq4kW5+TddhiOrsv1vvY1Of7KFbdA06FDjJ0/TzzZoVdYQi0VCLULYFm0WybZroHWrIPhIz4QJBLoEd3bYNObQm1ByKsz01omHRvl4vYCiseDpjQZCtbYtCYZ9qo8/WwI/7SMfZ8PNlZ6KAf7hI02tWgCSHDunMyVel0e8amnZD5kMq6FcWrqMyuIf2rxQOMFbNv+NvDtt237vft+/zvg333c7XLwdl+iYzlx4CQl63aFljYass3rFVobCkmo+9Wrcp5hiKD3ne/I8U5qgk5HzNqtljAFpwCa3w+nZkoMNoqs7XhRt19lUL2LPTxEu1gk2MwxvvESphHgpv8JQsEgnXqJkXCdhJWhER/H064SjXrwJ/3Ux+ewyg2M6xcwgcbsMdjcoFcsox87Jqugw2Eh+ocOSYhJIiGfUEgk1JkZYR5HjggBsyzhmg8/7FYz0nW33sEHgXOPzyqKRbE1OuHChYIw3VOn3vn4dFqYiGFIP1+5InHPp06J1BKJuKa5uTnZHo/DN78pvpuJCXmPe3tvVu4LLC1BKw/lNABdzUupHUDBRO1CSw9ysAeTp3UmJ1r0ymvkYo9R7EQ5HN2kMTFBRjmOtZ9mLrJP8nCCXc80aqDNlRsah/du8ZhV5L/97Qix+g5xvY4npXNjc5nusYeIHBl7M5jN65XhdO2adImuw3e/Kxr6b/zGpzQlx2eUs/UDyt4DToVMJx9btSqCmgMnRY6TndkwRGVWFBGInfowzz4r+9Np8UPEYnLtu3dlHgcC8n31skkioTA6rmLbcLBR41BznWCvwmyvx1P2jwmEPVjDCzTX9jG7Fl3FS/sf/jNOtDLk18r4CgfMBHZRo0G6nknUchl/xAseD9qJE3Q2OxCM4NFVqrsFOsognmN+GB+ThnS74ksolSQMZXdXCFAw6MbsdzouQVdVN7/IuXOuDe348Z/OqPqLilZL+sepjBOJuEkH3wmBgDAVwxDt7MQJGUiZjBsiGwq5lfFqNbmek47DyWg7MSGVprJZVzW9tyivp+h0VANd6dLQ49TC4+yZY+QHH+XQYp7D40NYvUXeeN2m08qht2pMTdistRJUDI1GM4I/0OTwRIvD82UamznW6wMkmzvM1S7xuvI4YTycGOhyzFqi7B/jV35FFKNWS5iDoogsMjoqTOPll4WfPfqoyCI/S4BYtSqPbhj9+tYfJvoM4j3gBPY4uZEWF99aHjEaFTr4t38rA3R4WGhqp/PWIma6Lh8nA0UiIcL62JiYjgaSFr2VVeqKzUK4RUcbxj8xSONukVhrn9iAl4BhMrGeYzR7h1KviicQQBlOEo/rhL1r6O0Sk4ki9Crwpd+EvT28BwcQvxc/WC7jaxSZXRjmet2AcglPucXZ6TxKe0DsA9msiHj314J0HKSqKvv9fumUZlNmY6cjM93vlw57+OGP+zV98mEYbhSY4yN4LzPaoUMS4uPUt3ZyVa2vC/N2TEvRqHzf7wRbX3fD5Px+8QB/85tu2PC9fDCa3aWgJPF7oZWYJmMlKcUmGMjneSN1jsh+jU4YonGFO5lFWh6NQ2Nt/IpFwFZY3+8y4S8xNhXHyqYp6QNsbKrUul6qdRXb02Z728PIkEr8pEkFm5MnFebmXCbw2mtuWq9XX5XvO3ekq5aW4Jd+yS2s9V7Y3xclyynnOz//1lyJHzn6qTZ+cREOi1WlWJSB6/gTHExOiunXqaJlWSLQOQlGnZT+Ho/MzV5PPsGgWGjm52G4s83d/Tw3rQR3t70c6qxjqV0eGdni4eAGSmqIYeWAkWELf2QAb1jFyu7gGY6hjMTp/PEfU83X6ep+9KCH0KEN8Sk4K3/j8Te9hmNr3yL5VS+dCPi0TbztOux25KFu3xbidf8aBMOQa5w960bHtFoyI50i2U7ISh/vDCcj7sqK/I9ExHT0bggGZQ1JtSoMxamDMT8vTn8ndtpxijUabvrU0VGhsrGY/A4GhRLn86JlDA5Cs4l3dJRUMcC1wDla3iDhdp6To3nCtSZr2TPQLuGfC1HvhTkomayqh/iV0x5OJl6jrMbwbHgZGYjzk1c9BIsq+XqHlXQIs6cyZPoIKBV6qop5UOZbNw+xcUchl5fgjYUFN7/jpUvSrGpVFKMbN+Q7k5Eh+8wz761JWJaYaxMJt6Dg6qoIXx90kXsf744+g3gfFIsyv1TVLTDmRCi12zKYBwZkPq+sCA09fFjoaqHg0lyPRybG8DBcvWLTXtsjoZUJjoTZ2mkz7stxbqbLq+sjLC8pHM5d4Zd/qcrjmVfoRSbRlm6ibm/ByAja7DTa5DgEg7RXN6lVbFSPFw2TTtWm/p0fE3r6ESFEjt4dicis8fnw/ehv8M3MyL5YTAhLsSgmiW5XGhwIuHUOnKii+6uinTsnnM5JMNfHe2NhwV1g5/e/f58Zxk87sRVFNLwLF+QdDQ5KDPXdu6IptNuyZmJ/X97djRui4p46JRKMs0BSUeD55xlTFOLZGtlvvIzmMzF2KjTHZvFnN9iPzFJfMUiEqoyPZolk6+S+qzHk2UAptvh8qMe1zCSF7AiZiaPsLWfZyhk06jar/meJB9oMhxpc7h5HyU4QiUk97Bs3pD71zIxbSdYpUe4U5jNNYQ6Nhswhp0z3O8FRzJz1mY7F82OPlO5rEL+YWFpyq0DmcjJgl5dFc9B11z87NCSMYmtLfLhO8r25OaEL9Tr82Z/JYJ+17rKQWqUTiLG226K80SNXDtLwxvntsyvU7u5ydLREQgmj6Dr6j38gnMfrFbGoXJYZ4PPR6SjYqKiKTbdlY3daVE0PxrUb6LrmSq5jY0KYGg0h/lNT8lD7+26G0eFhYRRHjsiDdDruyuG34/6kdX18MDiryP6uyGZFO5idlcimVkt+x2IyHgoFt5RhPC6Dt92W9+2EIlcqMhaqVXjySQLr6wyF6uTyCla1iraxxuFhk0vjR8kWvCxsvo5ne40veopk60FiMwniIS8Ro0W+bqDHu/y39DE21RRdfxvbgHQvTF5XONAh5YUhZAjVakL4v/lN4VmG4fruxsbEatnrSdNmZ6W73i9m0esV7aFQkG5wsrf0FdoPB30G8T7o9cS5nM3KQCyXZd45Kb5bLTnm135NaO+f/ZlbTe7iRakJMz7uLkLutrpE18v8VWMOzdCYHu3iNSroWoe9qknNttA8Gp56FWs1C0lVRv3EhNikCgXx8E1Pg2Gg1Spgm3RqHVSri6Ko5ELTEE0wHGqhdDrC2apVdwXwzIxwOGfhRSAg3K1QEMYxPS2fPj5ZuHlT3uHgoLzDrS2htOEw/MVfyHciIZLJxoaYCnM5+If/UAZhMikMwgmBPXECXn4Z38w4A5592v44nnYNfcwk5H+d71XGiezdwjs3ilZRGFeyRIoHXJr4DXYaTdbtEQ7MBJWSja0Z1BWDSBy899bvOOW3l5dlqDkmoLU10bLDYTludVWsZ6GQaA9O3ShN+2AL506dkoC7XE6uefz4A5Bd+hrELyYmJ8VfGAgIA3AqZl265FoMbtwQTb9SeTOqkHxeBHQnYen163K93/kt0MwO2XSPXDuA39PBUE1Kw7PklnVazSBj1QqVyjRjqsXUQJNgMulqDU7869AQ1Ot4Qzql0WlKuw0Gahs0fAlicwk6bZWe2kb3eODpp91czIcPuzWjb95La+X3C3N48sl+5NEnGe22DDLH9xMIyLvrdl0N8dIl1+bipEBxIiP299064E6I7b18MEYuh9FrgdkDQ2cot8STCzqdvEVL1TF9AcaiTe7kUqQibdSgSbC1T/pSm1kjzGYuhKpKlJaqSnPGxuR2hYIISpOToqA6VRTX1lyGMD0trqxcztUepqc/mNJlGG+NLuzjw0OfQbwPJidlADtrlR5+WGK2dV2EhnZbzEg7OzIHvV4Ryp3FcI4Vp9O5t4hoR6d3MEywvQ9+jcxWk2x3mPiJcbzDTQpVm/jMMRbaF2h2NF5vHOU5+7KbplvT3FTXIyN4YjHiiT3yYbC2m0SVHm2zTa/VQansQzsqBCWVeqvRd2VFuNnhwzITMxkhKp9RSegzAa9Xwn2cuhK7u64X17Jce8vmpstIkklReX/3dyXCaWJCGMuLLwqFdjTHWEzGhd8vtiBNY6Z3maa6i+XX8Q54sTYVzNQwHo8CuRJGfAB9boKTngpWIsv1/WFyObGCRqPSRCfYyjJttrcVVFUUoCtXZG7t7cmcsiyJrPZ6JWDrnVw0Tnlfp5ifo13Ytswxp3T3+LgbUfyx4TM6b/oM4n2gKCKABwKuhjA7K3Ntc1NM/KmUm6l1cVGE9Vu3ZNCCMAdnfdTLL4PZneHRuRAziTJ1e4iD7SGiiodUokZ9t4ox5UEbHiewu0d6qYRl1lBTKTeCqNkUvf1eYhv/0hJzpSYtS8fqtFG31ghPDOFJ58C23AITOzvwpS9Jg9fXhbM5GoMTGtnHJxeGIQy9WhWqOzoqg3JuTrTClRWhvqWSUNBAwC0efXAgJkqvVwaopskA9vlk4JqmUO1yWYSFxUXw+/HTBk8XFA/25x5DOfKPKa7l8FZ+zI39YRrZGndrUVKRXT73OfEmF3MdQnaNa7c8NLsajw1sEwt0eG1tkEYliW9SJ5+X4nxDQ8LH9vZcRWh3V5q+tSXNnJqSR3/tNTnGSTJ85oyYkzY2xPXinJPNyr5+7MTPjz6D+AAwDInbdkLTDw5EagmHZXAqilt/9+mnZf7u75js3q2Tz9p0Wypt3Uciod+rGqlyIz3E2ENDVAuQGoL5RA5vbYWMlqLW8FD0BrC8I8xPtlCCR8Uoe/26uxiq1RLjrVfqlvo9HjzVhohiZhVvuSdc6+DgTYc23a7UO/6X/xK+8hVZ4u3E1FvWZzPFxWcJzkrMqSlxVjv1Nvx+YRCjoyI+Ly3J+PB67zm+urLthRdESimX5TinfOnWlkg+8/Oyr90Wiu2kZD96FH7nd1BCIU5dvc2dl77NyoaK7g9hoOFtlFipJLhzAEFfh5iV56nFAqf8DVYKAbyjKqVukIDaopfO0ZgZZnRUoVwW3uZoGsGgDNWXXpJmB4MyLPf3RY5xMoysr8vxP/mJzLVqVRiNqso0yWTcNOIfC/rrIPpIp2UgB4NuxIWT0DSTkcjD1VWZd+022IUcCwNd/HqAWs0iXe7SbCjMznmYmJBrWRaMjdoE1Qbx4hpKWGF00KLS8VHt+TgS2+PRwTzKgQUXLmBXKnTLFZR2GzVzHg1bGqRpKLUa3nZLGIHVhc1NepEEOWWEXsBPLGwSGonLQL55U5iHUwhofl7CVsPhB93NfbwXFhZEjL5xQzSH0VExD169Ku/OcVI//LCb8+X2bRES9vZENLdtt+zpiRPCOJaWRJtYXBRm0um8NQ38yooc//rrGN/7HiesAwZCKsu7mwR8c3SsCQptg/n2JWrNCOPePWLrm4xpDbBSBNMGo4EubWuIthXA6qbY2tKZmpLh22i4WVlKJdG+P/954VtOMS1FkaZvbbnzzgmNrdV+OhT248vY9tlGn0F8QKyuumkCGg038ahliVk/mxXanMvB5LhJKdPFH9HRGxoev4JWtkjGTY4d01A6TRoFm7lEmy+HX2H5xi5vXPHi8dgoA2foEiAZNTneucVAeQsODrCLRVr7WbR6DcujQa+DpWnotu2ah2xbZovPR88b4Hx1kaJnAK1nY2sRzlkF4k5N1OeeE3NFoSAS6PuFi1Qq7pqKT21O5k85IhHJcpfNiujtrA5z8kyEw28m6GN1VcyQ3a4wjBs35Px4XBjE9esigjebsq3ZFEYwNSXMwAkhumemsn7/DyhcXqOa76CWywSpYncX8Fk5Er4kqqkSb+7zf6j+r3jpcLdwiDV9iCcb32XDPEZ75gijoTJ2O0epN8fwsE616g7bYtH138Xj4mvf2JChWSrJ4x87Jr99PtE0jhy5J2SNCSMJBt1qt31Z58NBn0Hch91dYQIg82901N2+teUWM7l4UQbp4KDQ44ceEjrrOMsGkgpnDlXpefzMT7e5vebFa6rUOzFe/G6dZKBGNGBivPoaiUM3Of3oBPWuxfqKha+a4cljDUJWjbutaQaGLWKJMq18BbuXxvL70XodUFQpr+Tk8bAsmTX3xK1cK0RRjzA054e9PeqKzlIuyeOHPTKD1tfFMZlMCsHp9d691uPurkipTuHshYWPOZdBH28iEJDB2Wq5caNOJkiQ76eeEkKfSgnV1TQxSSmKm4G31RKmD25xBqf4iRNOnc3K9aam2L28T/5qHsNuseOdId7NMGxvsN0eoh5SSXbSTLZu49fatHsavkaRsGJjaE2GtTSbuwEScR/+IT+ZQp06YYaGxHTkyCyjo+IOCYfh939f5pdhyBAtlWTIaZoc7xTe0jRZ5J/LCV9zlKqP3f/wIZqYFEX5CvBvkSzX/8m27X/zDsc8A/x/AB3I2bb9+Q+tAfehzyDuIZ0WH50jHL/+ujjAxsfFvzs9LXPTqQ8RCrlF0/J5d4D6fLC9q9KODTHQ2ubObogBvYM9G+fOvk2tbJI1gyxMlallm6xurRE/1WMynqI1HWfQV8Wcm6NaGSRh5ykFRonNNmnn2visW+AxsDQLVB2se4bbYFCiU5yl3IqCqXnRfB6RMgcH0Q8K9B59Ar4YlRlmmsLxFEUIzbuFfTjhsMlkP5fBJwXHj0tOpkxG/i8svDVDnc8n2yIRsX2+fWHk5qYwCsMQCccpQhIMysD2+YRJmCa02/RW1rhZO8uQkcWq1AmrJdp48XijBMcGWGztoXoNIppNr6YTMHoY2CTVPSreEUpqkluNGWbGDI4mqiSDKiubBb4ytk3tkp/p4QmyVT+aJspNJCK393hEMZqacv0KjuK7vy+PMDcnjzc5+YAjtD8kBqEoigb8e+CLSFG184qifMO27Vv3HRMD/gPwFdu2txRFGfxQbv4O6DOIezg4cOvnOgtWMxlhDIrypiDF9esygMNhGbDFovx2Ipyi0Xvh6kqCE495SF/qsrLto9bwMzvZpu5tEolp1LINep0aDcVDc9/G19nAp+tkhheoByeJRyqY5gg+owzpKr5ek3YohbdVRsPG7rTBuFe8Z2ZGGlkoSEMnJ4mtpYEAtROPoQ8lKF5c4+jJJCTupdy4eVPEMscE8W4D3DTl8/ZcBqb5Mb2ZPn4KoZDU5Wg03PUQ74ShIVkgsL4uau7kpEg758+7A3l11dVCbNvVJKen3wyl7ekBmnWLVkuhRZie7WG9N8bQeIDYsJ/xRIMj5j6dlQOyFR+2reLZNMmTZNU+TLXsRbeq+DsNtnxH6LZMYt4uQxMGd9cURo11ItMLzC/qfP/7wgAOHxatfX9fLGjj46LdR6MiC42NydAtFmUexuM/W/bXTzAeBVZs214DUBTlT4CvAbfuO+Z3gf/dtu0tANu2Mx9VY36hGUSz6eZJ0nU3C+vdu2L7HByUAemUHK3X5eMEjrTbMt8GBmSgTk/LIK1W5fj1dJAuTcoVhdV1k/l5DzZQL7SppU2ueqdITrU4ombx0WA41eXmwHGUro6lJOgl5mmmutjjOj7TpBlJ0LnwOnariWJY6EcOCRFYXBQONzQkN9/cJKjaPDZ5wJ3hKB0Tjp8LMZmswnpeGMOpU6IVFItinz569K2pah3ouhyXz7u5DJzMrX08OHg8HyxMZ3RUxPFLl0SKWVyUQXvrlpiUwmHX35BKue93b0/GhG2jXbnBSHiOXW0cq12jFRjENHyYho49Mk1tNkTD9pMYjRNfWWY9H6VVDfGD9tPcLo+BR8OnNFiuBRlMB5jRdzh62EOrq1HqBFjdaNPOdrm1rFMqucPRtkWzP3ZM1nD6/eJWmZiQuffGG8IcQPadO/fBsr8+YKQURblw3/+v3yuX7GAM2L7v/w5w7m3XOAToiqK8AISBf2vb9h9+FI39hWUQpZIMMEd4SiZlnuztCc0cGRF6qetCC8+ccRfAeb2iXaytybk7OyKcbWyIlp7PQ6NhEqrsEVfKeKpxjG6Ag70QhjfO7nqTRK9GK+blz4pf5MnpJr/27C4PfeEQs6MhfvQjSG93MNs9fnR3nCfPjbB4vE48uo2Z28QyLXSrBydPyGwpFCQiZWfHTS0djxPt1Xkk86174YzHxYh7+bIQgkJB/AoLC2IfW10V/X129q0dpSjCTG7fluOiUbfCfB+fDrTbYmq6v8Kf49xWFBnoTrI/kIFuWWKKSqfRz5xkqmGSznipheI0B2aYn+lwoIwRfvRJip0S3UyRE2dGiX7tMLNdi9YflShezpFfjhL1NWmrfgpdH+mMxpOnu5xdaDIz2WNjx0PBNlE0FV13a1AtL4vG7vMJc1DVexHcpjCO7W1RoJxqj4WCzL/3SpL7keKDm5hytm2ffa8rvcO2t8dkeYCHgecBP/Cqoiiv2bZ954M24oPiF3aW37z5VkE4nRYt3NG0nYJe94KC3mQgX/0q/Pf/vWzPZETbX10VQcw0RQNpNKBTafParpdDh5KMTSicPpRjOd3h0uYQLa9BZ8BPy6rhqZZYvu1F/3KMA2Oa7CZsrXUJr1/H5+nSasOt/+U684FX0HJZNJ+BdnDgJrVxUkg7ZUBHR6UhTuD4ww+Lfl6piGNlfl4eyFnpV6u5Ko9lSXWjhYW3dpZhSOf08elEPi8UdWLCDWF1yp46qTcGBoQxOAWh9vZkIM/OQqfDSKLDlw/t0iq3YaGF55FHsLOr7B7/KnZwntFkm0hUYePAYH0dVuZNovU7zBYq5OwUzZpGUsmj+AZ49Msp6kurJEbKHE60mJof4XrB92bp3slJGZZPPy3avLNO4vZtdyFdp/PWfEter2z7DGAHuD875jiw9w7H5GzbrgN1RVF+ApwC+gziw0Kz+VYNXVWFAYyOipB86ZLLAE6fdn24iYTMpVdfdbNdR6NubXknDC8S73F9y4u92uPIdAszoDOZaHLzQBhTyzS4wimiWpnpqMpFTxBtyaBSgSuvNXluqEdAN5m99Tcoe9v0AltowXuL3ZxcyI7Zxyl0r2kyU44eFW3CYR4PPywTvV53H6RYFKnHCSLf23Nj3icmfv7Mo318MmBZYrOpVkV7rFZFPHdybD/7rLz3L30J/uiPRHAYGBDzk66LtvnGG+Dx4PN48CWCoDYgswYTE8z7dmnk2nj0AXbao2/GM8zNKPzoRxplI0a37SUQ6BGyG6hGh2+9kqBRCVEbbmBM6aQmgyRvyXDsdoUZnD0rzCCZlGjcP/5jmVuJhGQuP3pUmnj4sMzRWk2sZw8MH14U03lgQVGUGWAX+G3E53A//gr4d4qieAAvYoL6f39YDbgfv7AMYnRUBOhUyi2K5tTJCYdFenH8s0tLosL6fMI0nCR8TgGgel1UXSfqQlVhN2cQ1fP4PVArm+h7W5TsOAkrTbaToKfqaAGdup5CTcHmgViAxsbuFQZbs3i++U0SW5fwaR0UqwLde0VibNtNyFYoiNQXiUhjQiEh/um0PJzPJ05J0xRjbj7vLlN11k/UavI/kXDLcvXx2cDOjkgv0ahogi+8IOMkEpFojN1dCYutVt2EkPm8jLF6XcZGKiXX8vshHMa2bKq5JuW1u1y9MYE2OQHtHWoJldTxETwemJhUePJUHZ9hUa9YqL0em3seaorKtWswNeXlhxe9JBIwXZX5uLUl3ydPupbOXs816z78MBSyPTbWNZpNhWeflcjDY8fknPeqG/FpgW3bPUVR/jXwXSTM9fdt276pKMq/vLf/92zbvq0oyneAa4CFhMLe+Cja8wvLIA4dkjmwuys09JFH3hq16ZRZvnRJJJdoVExJKytu0a5sFvyGxZCnyCNTJiOHI/zpX/rY2YFWyyCYiDOe3GXeWqHiUdGSOlPWJj5Pj9vFUXw+hUOHhLlsbt4LZ9ctHj/ZwPMX50nUtwhqTcK9Ih67C8UCpmXRHRjF1L14s/vo0bBbBCYYFGdJOi0VjExTfjuOx6eeEk1hf1+Oc6JaHCJg2/KgPp80xkm9GYn0NYpPI2xbtAYn++vKiqjOCwvumodeT97/a69J+OyLL7ql3nw+MeqPj8sYmpyEl14ilzpEPVvjenmSyuYacdvGODTF+e8V8WeHGZ9QmJ1V8M+M8Mu573K5GAGzSyFygqbPy2hCLuf1ivvD65X5+MUv/vQCt1ZLhqDXbhFaW6a8XCdY81NqTpP4zTjJpPgq3qlkyceGDznVhm3b3wa+/bZtv/e2//8D8D98aDd9F/zCMgiPRySPY8fe/Zh2WwT0gQH5Hw7LfFIUmTOhgMVI9hoT5h6P6irBgoGfc2S6AVotaLf9lCcnWK2YGDGbxVmbpbtx4maWoeQgTz2jEwqJnTUcBqtnEdy8Sri1z5mFHP6NFkavjdEyUb0GVqNOuwM1M4iCiml66UWS+B2H4/i4TPJKRdSeUMiVHB072cSEO5sODtwKZH6/eAgdPf3yZWEuju3t3LmPMblNHz8X6nWRYAoF8VP5/SIAJBIiEJw65dbQLRZFwPjRjySSaWdHxg6IwLG0JOPi+HEoFukePka+NYbayXK3PkogZtDcamP1GowP+CmoCm+8IVapwxGTmdg8xmKIzZyP+qqX2VSVXjD2ZkYCJ4DKsmQO2LYM31ZLrKd+P8RjNgPFZfbzHdJmEstq8ZTvAneuP83QpEEiITzu/kq5fXw4+IVlEO8GZ0GyrsvgdUL+Nc11XBvGvYJqrQqq1aGYmONGoUVv32TU3KQzcoSdHdE8dg4U5hJ1TF+IXrPF0YkmSrhIKGBLFoNsmUcmGmhBH1t3YaSTJvHQECP+KRSjQHVliZ12GMXsoGtxfJ4WzM9jGn6sZYuiMYT/ySfc5GzdrnyHQjID02nJNDg7K8SiVBJCPz0tOvk76eWZjJznhL3WakIoHn3043sRfbw3TFNsMpWKDMyJCWHmrRZ861sS0lOrifSxuCiUV1WF0CsK7WKNRkPFCgwSPn8V740bbm0Jw5AJ4CTvW1+X8RMMYiWGabxa5lb7IWg1WauN06l5mVMKqCdOEQpYLC6qdDow0S3x3dfHObPYYDJWIzJQpqB42G/F3kw4W6+7EbfJpPCv735X/kej8E/+CTz+SA/zjQ4/yEcJBS2GR0zGhk2ubTdJlwx0XYbrkSMPsM5VP1nfZx/lsmjWzjqHM2fECXbzphtm9yu/4pqmwj2T8WCPdsDm6nqURqFJyqhhjMkcGxmBQ0e8JEJxRjhgZ7PHeKpCaX6R5054ufTX2xzybdGuqvi9PYYyPYL2FkfLd1GyWcq3tsgVvWjeHp1QnFzLy0Brk2Bmj15qlF4wJBbIS5eEYBw9Kh68QkGkRKduRCIhISB7eyIVZjLysGfOvPPAdrzvDgzDzTPSx4OHbYvxPZMRR9jurjCKEyfk99KSqL2ZjAgJV67A88+Lg+uJJ2h4o6z+0euwuUnVSuK7e41jw5MY+X0xRzWbMmb29twi67/8y7C6ijcWJ3vlLspWFjMxw645SaPQJqeP8JVumuvXFdSRQSJxnVwngsdsEGiXiNbWUMtNgn6bz3+hy8X87Jthq7Oz8vnRj0Tz2LsXs9NsCp/7nd/2MDtjk0oWiCUkg0B906ZV9/LUOWE0TpTT4GB/ic6HiT6DuIduV0LFDUME7FoNfvhDIfI+nwjTIyMyb0xTnNhv/DiA0QW/v8X5XJBks0zOGGJ5WTT6VEqkmnJ1Go+eYGy8SnzWTyaX5PwPOpRuVLDmRzC0DvWVImalSXB8gOqNl4lZWxTNMLnho4xVbtP1BTB0D2uBc0yPxjCHRrCtAJHxCMQtKUP64ovCAGo1aeTXvibczueTWecEjTtMQnKPu53g2NSqVfntaCWFguQ06OOTgUZD3t/973NnRwz5rZYw/Xz+rRFt7bZoGmfOsHHHQ/apUQbVvySxs05RC7HnnWSmty2DfGPjXkpiWwb+M8+8WVRKuXKZwZjBXiSF17R5YjqLNdaiowdZ2YhQanbxmmViyRT79gieyD7K5gXMqIfa9AlOPernVHSZp/7eKK9c8r053zodeaRLl4RZBAKiTbz+Onz+8wrh+GG8hSV66SyqbdOcOcohT+BNBdjR9h9YSZO+BvHZRrstg8tJaWOaso4sEJB5trnpJu/TNNHAszU/JeMYgZ01eqUG6swwnpEJ4jsioE9PS9BIp6Nw6lSU4EKIu7sdrt0yKRVsTs432GoGyG4UmWrcZmqgxaETI6xciDDUyWEyQdNUaOpRWkaMvD5I5/BDeO2rdGoVot4akXhYnIff+Y5M6BMn5OavvSZrFyYmhHC8+uqbeZrezIV8/6ButeQcR1NwnJeqKqk85uc/nhfRx88HR4Te3XXrfJw969pfPB7aaztor9+ivVegnWnSIICdXXfHwz1zEgMD8IUvyLZvfvPNPDQzE2NcMB7F1+0RWr1MB4OR0Dba6hpFPcnL+ce5pacwDA+PPZvCvzJB1ZtkWLGYnTHRejr72z3W1mTejY8Lc9jeFgtoqyW3yudlGN65A4lEhIHJhzjzeB3N5+VwLMjVq3J8LCbD1uP5VKyk/lShzyDuweuV+eGkotnbk8EWich/03RrqNTrEtFUrUI2G6VWO003DrEB8N7LImlZovXn8zJfx/wFOn97CavTY7Jj0IudpsAAi+kXSBdNTqqXGa030W5O0NINzGqPsVSFSrNDvavSa1pU42M84l9h+OikEILffwNeXoUbUTcSyeORGbe1JQxicVG2TU2JZOjzyQwcH3/rbNrZETHOkUqLRTFJPLClqX28KwIBsavs77vF0icnhaoODIh6+1/+i7zvkRHZZ5qyr1ZjrHiTvVwbz8QCVmSY9laRZGwVtHm5rhPmvLAglLvXEw9yJELJP0Sl1GMunGH/Vpb49nUUr07q9hJN28eUcodEYo9Xy14qC2cZm/Xhr+lYW1l2rWH+5ocKlfok+qKfc09ILMS3vy3D9OxZiZtYXXUroToRtooCN+94+eIveYnfq2t15oxYz7JZGcqPPPIA8zH1NYjPNrxeiaW+dk0E7FZLBClNE0K/uirfTonE/X2huyMjb40YdDJvh8PiE47FIBbsUvvJJfKan2pTYyRQ4XjtVdbHnqKyX2PSKGP4dDRvl+pqBn/Kj9djo9UKHBnpkiNG6ZHHeHLSIJHbB++IlN1y0nQ7S7idkqSqKo2fnHRTYhw+LF6/SkUaNzr61kHd7b41fYaTnKqPTx4URQZrIiHvc3ZWGD7I4Gu14MtfFqEhnZbB+lu/JYP82jUGC0ucTdiseg6jJyM8MlohOv81cWjv7Ig47vOJeO+UOFVVCmtFDna6GDoMd98gcvUS3k6Vmh0kXt6gqYzRCEbZD84yv/MCd8+cxR9QqC2c5tXzaYp5E/QQ6tAAyl0Nf0gUFZ9PlJvZWbGKfutbMvRSKbe876VLMpxffx0ef1wENb9ffjtBJH28MxRFmQN2bNtu30sTfhL4Q9u2S+937i88gyiX3UzHIyMy8NptGXQvviiWmxv3lqA8/bTQ5XZbGEanIxqG1yvnFYsizFUqQl9DITmmXWmTz/SwAz081TwGDdRcGdOTIdk94BnfeXa8R8iaCaJKhlOpElrqCPR6+HZ2GFctxo112OkK8X/lFSEEx4+LXu6s2NM0V+358pffGvenqqIRjI29c0cMDclMdOoK1Gp97eGTDKdY89vRbouKOzQkn7k5ESTabfjDP5TBnE4zVK8zdGhbJBhVBzMkxzrv3LZlMM/MiBaxukq+APpwitDSq/iqLVqNGn7KpKxd/N00qCbr3SME85vYkTjZjM2dZZv8rSL1hkLNDmL7ophVg0BA1m8+8ojwo+vX3fkzNydz6rHHZFivrMj8OnxYhvbly+IWcWo+9JnD++LPgbOKoswD/zPwDeCPgF96vxN/oRnE0pLQREWRwXb2rAhlTvlmj+f/z95/x9iSpYed4C/iRlzvXXqf+Xw9X769IZtFiaRI0UgDkSNRS2h3tCtggYEGGOzszgwGkBaYwQx2Z0ZDcERKmqVINUXbbLLZvqq6usyr502+l97fvHm9vxFxI/aPL+PFq+rq7mqybFd+QOLmvXEi4kSc73zeeAlz6bSE4+3vi+Zer4v9c3NTBKxoVBiMK7yvrMge8/ng7l4As5VhOFAmFfex3/CTUXSmu/e4PF8lXekQYJWsXkMdjlPXpylXfSRzfqLTmoRRLS9LKqmbPV2pCFc7e1YIQDwuOysUEj/ET/zEj6b2uq0q3YlfuOCZm47gwwO6LkhomvJ/7zD7/mtfk6gLt8GUpkkNC1doiEZF4IjF5FxXyimVhDoPD6OsFjFCMfoTC1j31+hoJlGfga9dxeeY6IMufrPNVPEKNxJ/l2OBDYKvrqJtGnR6JzioKITrFYxEDsvSSacFtVMp+ex2JS/p4kURzOJx2VsgIbDHjwt6t1peNO4HBj7YJib7MEP77wD/o+M4/x9FUa69nRM/sgyi0fDKzriWmevXpaApyHdXMhkelv1z/774/jodz9ZpWd7/huGV49A02ZcA4ZhOkWmmnQMSYQv/oM8d3wV+LvQ6oXiWhjMJjk09kaYdHUJzbLD6lO7sosYNwoMBrdEZDvQFNCzyvg0CbjZsqSScan5eCPzIiFel04VORyaj62Jm+n7I7EqdR/DhBU2TEOdr18S0tL0tSHnzpmibfr+ox62W/D8xIcLB4qJQ3GRSzqvVRGJy/RDBIIlPn6PwZ68zaJbpO37iAQNftwM9g1p0AmVgMmpuUA1OMhIsM1r4ffZrOl8/+AS+QQlNHadSBWyTdE5/WO3F5VeJhPCn118XmUdVRTnWNJGDkkmvKozf76G/bYs56n0Lb32HM6nfBTAVRfl7wK8Bf/vwN/0HjH8IH1kG4Zrs3XUNBoWu2rYgpkv0w2HRFtwKFYYh5t5OR5iGponAPT4uCBuPy97KZr0WztksFItZ7u6eZrNrkh3SmNE36G2V2PX1CXbjDLQgU2FQOm3sZIrI2m2sdo+KNgrRNK0rDxgo4/RVP6XNFtkzUQKplGzwvT3ZyIWCaBYjI96Dlkqy4xxH/qamvA7xR/DjCUNDXgPnT3xCwoAMwyvn3WyKKhyLCbKvrko0hW171ShdvAqFxPB/7Rq5zU3ijQ6dubPYYR/liILW7FOOT6F2O0SDPupaiutcYGljHq0SZCjaQ4uEcPoGoV6b6iBMJu48TOV4/HHZg4mEmJl8Pk/AclN4EgnRMjY2hDk8+6yg+Z/8iTCMTEaU3aefPsqm/j7wD4F/Avx3juOsHRYC/D/ezonvK4P4Yb1XFUVRDo8/B3SA/9RxnKvvxL1d6cX1x7klNVRVCHuvJ9Gh+/teS9Fu1xPA3cKp+bzsM7/fa3CSz4u1p1r1/BCVikIvM0IyVES3Wuxt9miGz5OK25yILxKpbtPsKCgtk2h1GbvZxnQCqLaP8uwldGeF2M49VMemFUrSq/YImIeZRG5/Br9fmIQbuQQiOcZiwqkcR3bZ2Jg8yBH8+ILjeG3W3DIAbutDRRFJJhAQNdptpRiJyO+ug2AwkAqvbj17XSdgGwQqazQf/xSdboYD3wilwCjhnWWm9G16RoJbvsfpqWHGfHXWzVFOZPfp9FRqTZVYNEIsE2R4WPZKtyvxElNT8Bd/IVN1U3eaTZlCtSqP4waA3LkjCk+xKMyhVJJ9u74uVrIjeCMctiv9vwEoipICYm/V5/qt4H1jEG+n9yrwU8DC4d+TwP/K93ZX+muBW6Dvxg1hALmcINfOjkg2W1uCeHNzYnaSWGxBZtMUhjI1JXQ4lxMmkEhIFEa1Kr9vbsq1NzchFDSJRTX6+jjN3gCtoTGbW6GjJnix90lmM6t0d28zH6jSIoBiwKDVJDObpG70cFBQfD6McAqlVMcOpyATkIu3214Ph6kprxSmbb+xIb2bTWRZ78QrPIIPMrg9P1yntWl62ZsuFW63vRra0aj4rtxifY7j1XNy82ZANIpKhfpek7X6EP0LFwl3K7yunmG9ukTTgh1jCMexKbZjOIk4gZxFTK2x55skmI+xcNyHZcmUmk0h7CBa+MmTwhRWVuRWg4Gg7O6uV+nl3j2RgxIJGaNpwizetyQ5+ECbmA47z/0MQu+vAweKonzbcZz/+w879/3UIN5O79WfRcKxHOBlRVGSiqKMOI6z905MIJmET37Syx/r90XNbTSEro6NicD9+utCa2dmvAZCk5Oi0uqaTW+3zPmFEsMTftLnJrBUP1evgt3toZYbBPsFdo0QSt9GHxuinUgSdODqtQCG5kdTDSaTbZxkinavxpSzCkMp8oN7hMo2mmazMXIBc2SM7Lf/gIjZJ6ofwHpPJr+8LCEfbtUzN3hcVUUifOEFEb/6fXGoPJo9fQQ/vuAS9mhUBIdQSJDZDbtzS3UEAqKFzs7Cf/yPnifYsgSH3EZCtg3hMMWRc9y+4+OOtoDezjER04nkbO7Yz7LfNBkoComQxWp/nJqZp1W0iKSPY4bDRHWvVI1pyrQGAwmuikTgX/9rOe6abvt9MfF2OsJAcjmxfN27J9MaHxeLmqJ8/wC9IyDhOE5DUZR/DPy24zj/T0VRbr6dE99PBvF2eq++1Zgx4HsYhKIovwH8BsDk5OSPNBGX+bsSSLUq0olti3RTrT5MImVkRBhIJCJ7KrC3QcE84ObtBJWtKlzrM/SJ46SpsXdjC+4X8VfanJnK8tr2COryHuWInzEfVJU0St8kEdW43T8G5jZVX5RL8SV0qwdnj0M8TmhqivFTp2gsF/GfOUF8+Sp6cU8mmMt5WXwLC7LJH02Ac8uAm6ZXttv1ph/Bjy+0WhK4EA4LfvR6QmkTCa+MhpvrkEiItrG1JdrmwoLYcEIhr2/1YY8IIxDjRuwZUpEBwcwcPUtjsZzj1HQLJa3TTY+hdjQ2Kzq9gYMW8aNlE3QGYnodHha/+fq6l79XLAoa12pyzDRlb504IUpMLidTWFkRhdmtXh6NivukUoFf//X3OejuA6xBAJqiKCPALwH/5Y904rszn7cFb6f36tsZIz9K4+/fBLh8+fJbjvlhEAwKIzBN2StuuaJ4XHx2bjJcKiWheAHdhr0CNTVPuevn3GM2dqnKi1/t0F8pYGhJSoUaJSPL4wfbPDYTY3etj57o0TrQCU3kGPRMgtE+xgDut21GyhVeDuZ56ngd/ZknZIesrxPd3yfabB7asqJQORCtwK279Id/KGLZs89KlzDXW9dqSciq23GuXP7ednpH8OMHrvMrkRCqu7QkmkMgIMjrNlqIRGTM4qIgezIpavToqGgPbvRbMAjpNOYnvsCgP0vaWeaUcofNXoq24Sfc7vCTJyz2mhFC/hDFhobVH9A0B5iOSX5If9hUq98XH7qiCHq7PvRIxKui3G6LIJZISGuTVkv239KS8K+JCdmLlYr4Ct0SOa414AjeAP8N0oDoRcdxXlMUZRZYejsn/rUZhKIo/9BxnN/+657P2++9+sPGvGPgRgheuSKI+KgJf3dX/tc0+Dt/RxB4MIB2E16/qdLvwx/VIxhtjVsVH9FenLEJjUFPxXEcqlWbyVyBHSNCLOVjKKER7eyzVY1w7wHQ7XEy2mTieJR7vU+RDy1x/IUXvDCqalVu6rYD9flkA6dSYpA1TbEdf/3rMu6nfspLU335ZS/Zw030OIIfb8jlxIH2+usiek9Oij3nO98RMXxkRKjuzIyI5PW6xHG7KrJbRS+f9xiH308gqpOsbOMYNc6a3ySnjbI8mCFWqHGjmOZy/S95sXmOytY85WYAyz+g1jQPq4LohEKCugsLMpV79+T24EUPWpYXONLtSj2zkRE5dv68oHW16rlTYjGZ/je/6ZmGT5x4Y2GAdxuct5RlPxjgOM4XgS8+8n0V+IW3c+7f5BX+18DfhEG8nd6rfwr800P/xJNA/Z3yP7jwaP8Ht47dmTPiEGs2ZX+trYnK22wK8qVSst+uXlVZKU4Ssw7Yr6e4t+TjoD9EoRkgpiawB3VQR4hsL2HGm1Bq8fGpKvblU6Sm8jz/uwbVjQoqMYIRH5N5A1MJ4JsZp6ccwH5LDKyqKur+0pJs1oMDUW9cDgbCSKSVnYzb3RWPX6MhnMwV3T5wGUZH8K6AogiVdCtQuob6S5e8Qn5jY2LrWVwUnJmfFwHELe9+8aKI97u78j0SQSsXeSzaYntHoVQ22TL6BIebLPpmuVcZZ2bCwqo0wOyjxNP0+zoqNn7VYmlJJ5uVnIbvfldcZ6GQ8DLX15BOixnKjamIRj1T7/i4+NF7PfENlssy1e1t2Q4nTkhU0/a2POoPagb2UQJFUYLArwOngYfSoeM4/+iHnfsDGcQPcGQowN8oo+rt9F5F2u49BywjYa7/8G9yzzdDtSr5RIYhiHjhgncsGpW/U6cEEcfGBJETCfk+PS0STPXUKGMzfm79kULZCaPHdSZ8TboNk/UdHwM7Sr93mo3QgKWyyc+fKnPcXma79ziRlM7PnN1g30ywdt+gUFaJpvvMtW4yXPoOzc0SvYYfv2IS1vrojYYQep9PJtJuy85SFOFwbmZevS6TdBvUP/us7CSfz/P4HWkRHw3I5URjcKHX86r8uhFKuZx4iR1H8MPtb+6WDR8eFgfBYAC6TsRoMzWX5m6lx2RnBatQoGD0ORtdp7C9QCswTihoEw2qDBwbBYdY2CaR9hoa7u15NQBdJaZcFgaRPhx37pzXj7rREK1DUaQ16fnzoumXy8JkVlZEszh+XAS4/f0jBvEI/DtgEfhJxNz0nwD33s6JP0yDGDq8aPVNvyvASz/aHL8Xfljv1cPopf/sb3qftwLDEAQLh4XWNpvCLNzOmuWy0FzLEsZx/Lggp9vi+c//XAT73T0FVc0RHIGE5TDOFvvtAek4WG0Df8giEOgzn6rSVBIslZJkK02mcw/wpRoMKR3O3PwGNaPFZjvNyc59Ur4Uhj9GZ/YJIqV1Gi2TgdUkEYvj63Rk0vm8iFamKdJdsyk7ye8XfTyRkM0eCMixZFI2uOO8jyUvj+Adh2JRqK2ui9Ty5nRitx7T+rog72HhPf7szwR38nmhrOPjIjEdPy5CR/qwcXQgIKaoQEDU5kPodQaE1T7moEmutErA3uGgP0nq4AE97XFK0SfoqgO6fR8aJqmMzuyhz/zkSZmGYQgK+/0ir5w6JSXELl0SflSryVTdVr+DgdcyfWhIPs+fFzR3GUyvJ9d8r+Uf56/l9XzPYN5xnF9UFOVnHcf5N4qi/C4imP9Q+GEM4ktA1HGc628+cBhb+6GFblcQzkWkWEyQzHEkP2JrS5DtxAmv62K7LfvMtmWcmxC3uHgYlmea+Kwmqhan0VQAjcv2S+T8ZRQlQa63S3LXT//TH0d9cIVoG7h1HW1vCyU+waVTPqaDCUgkeWDPEU3q2EsB/DvbNBkiMBEmcu+whIrbZ9itCnhw4GkW4Bl0Z2Zkwu7DnTx5lG764wK7uyLVRKNC7AsF8eg+Sh1dU9PwsNReOn5cQn/298Vn5SYjjI0JjhQKQnU/8Qmxr167JtdwvcL9PvT7aLv38UUnCLahEZikacepk+F4okC1X6YxpfBY+oCX78XoKSEuPBOm3RaU3N+xSDgtzkz72CqFqdR9LCzAP/tn4iZ59VXRGB48EDSu14WxNBryyN/+tjxSuey5S3I50SIODuR1nD//3i7FB5xBuBkiNUVRzgAFYPrtnPgDGYTjOL/+A4692V/woQK/X+jm1pbn43WjLFT1jQ3URkZkf7z8sghWa2vye6MhiHr2rKi9a4s21/9dF19A54nTA6jXSd1cY3/8WdR+D0VzmEnXGPjDJPfuMmsVKVtFDEzm66+TyWdQOyaDwQA7d5KBomJMHsOJZ2ls1sgmFJnMzo5IdaOjIkqVSrIr3Ail8XHZyNGo6NkzM8LtdP2oH+OPE6ytiWboMgRXjH6rhABF8eow3bgh5wwGkmk/PCx2mV//dalIadtStvj114X6DgYiBcXj8Ku/CleuEKy9imra2MkMuj9CumcyeSpMRB3hJ4MGExNdSlOn+cL/xfN77+1BcavP6ParVAotMoaf83M5WhOnyA5rTE6KpcvlR4mEMIQLFzzUTiTk8y/+QjQMt1GQpkle0rlzXjT3ETyE3zzMoP5/IH7dKPBfvZ0TP7K1mFzn2Je/LAjlOqjX1mSvHFYWeAhugTBNE0fYrVsiUN29K+eNjMDP/70gJ3xBotVltGiQ1SWLb+yd4dXtMRo9P2OZPrP+DSaCHTITYQIPWoxNqFBYA6sPdcl09oVC5JIDDko2hFM0p08wfPDnhJtFYQihkDCAhQWR/ubnvV24uSldwGIxL7TV1SxMUya+tycPdObMUcmNDzMoitfcB7xCYm+GTsfTGCoVwZ9OR/Bmc1OOTUyI6H77tlDZZlNqWjz+uGyEQkGodDQKo6NoJ44xWWvRmn0C9cE9As0mgVgNy7LQTk3D6QT3DpsSlkpyyWIRLiRXOSjA9dYc1Qqc7u8R8e+w0Z+iXhcUtixxYrtukEuXhFGsrckUMhmRkZ57Th652fRcK7nce/XyPzzgOM5vHf77bWD2Rzn3I8sgQAj+00/Lp64Lsf/qV8WUGwiIP+JRgXtkRDTunR0vKnByUsprmKZEmKqZUxSNJCmtxWtWhkq+yYl4nXSgR6utUNaHmTwdJ9BLgTUrJ25vS0hHsylB3fE4w/Mx/J85T39rn7H9DZL9ByhTh+U0mk0xLy0swG/+phD5M2dEU0gkZMM7jmxmt9PRxYvygPfvew7tl1+WVPIjcevDCfPzUjPJMISahsOi4oLX6ERVBWnd41evClXNZERw6HTk2OqqMItg0EtScFOe3ZLH9bpcKxaD8XH0hRCp6Wn4ySfpXr3DvatVDhJz1AcX6BSmmJnzqtPfu3dYQmPRZHk5Sb9nU2/4WFKznGobFA3patpoSLuT8XGvWvkrr4gC026L8ObWRqtWvbqTboG/9wPcOpgfNFAU5QeW0nAc53/4Ydf4yDMIRRF8r1RESDp7VvZDvS5IfemSN352VoSsmzcFOft9UXOrVdl7N2/C/LzK3Z3xh3TZGoSYtSqEUw6mP4wxUClXFCaPHRMC3Whg9wzs8Sm0c2fcPqbw8sukEwkYjcLaLpRL8I0twcR4XDjT178uD1Euizlgd1e+p9Pia3DDY4tF0cWvX5fJut53XRfGccQgPpzgljDd35e1HB8XyebRRidLS4KkqZQwhSeeEOrq+hxu3pT1D4cFtzY3JYZUUYR5rK4KvpmmCCTr63IsGBSJqViE557jmvIszXmboN+mX9FYeQCT014Zb7f54UtLObTCFouFOPW2j72qn5vNNKcuehHcBweeT3xkRBTe4WGZiqsk+3wSZOJWp08kjnI/3wJih58O35t0/LZY2keaQczMyN4qFgUpw2EP4Vwt/FFQVS+sbnJSENYVqixLpJ2hIRHoTFP2Y7XYpBLIsdcIo6gK9rLByDdqqHMRnKGfoOdr0YltEtm9z/CNMqPJHkoqgc8fQNndlZ3Q64m/oVqVSbhe8kZDpMh6XbSQl1+WmkyvviqTPHPGSyt1HOGA6bQcc+1pvd57+9KP4J0FNy7UBTeiwq0g6fqrpqcFeVstcZwFg3KsXBbzUjwuGufurlBet2PW+Lhn4B8dhd/5Ha+0aq0Gw8NY5Tq7u1kODlQsS33oYM5khMCHw4K2hgGBqWGuLAc4KLdptUCJJ9HbMW7eFHeK28a32xWBrNeTfZjPe48zOir8LpeT6T7zjDze+9lZ7oOoQTiO818DKIryb4B/5rYYPfRH/Pdv5xofaQYRDApy1WpCa+/e9TTravWNjmqQ3136rChunwfR2l3msLgoyG3bEjCCAve2IthoRMM2mcCAP/xylNeSBr7wk9zfDHEsV+EnM3+Cv79IqwXJVgWW1whcXycwnifodNHdJkC6LjsvHpebHzsmm3hvTz7d0gp/9VdegbXz50WzmJ72aiw7jkw4FvveF3MEH154tNFJtytU1819cbWLWEworRt+V6kIwlerIjw0Ghi2St/o0RwfIhobIZ5IiK3n/n2h+KOjsml8PnwD46F1yrZl2OqqKMMzMzL0M58RuSWXUyhbaVY6KVQfRBSFQFem+uDBYQdUVdDz/n1B81/8xUMHd9ErJzUzI0lz1ar8/6i/8Ai+B84+2n/acZyqoigXfsD4h/CRZhDg9XTI5wXv79wRW+nkpAjnj4KiiFDu+vXcxlsg/gq3dpPbxKRUgkEkyWRsG/QA4ZDDTL7DrVaOnYpBuKcwlLIwtAh39HNE9lbwJ3Ty2jbtvTLh4irG7SCDQIDIeAp9KCsEoN8X7pRIyE66elWYwuSk1wH+5Zelimsg4JmWFha8lpOG4TGIdlskSUWRF3GUaf3hhUjEa5GoaaLanj0rv7v5DPW6ONtsW9a+1RIbzmHGaE8L0Sl1UVUDrbBF4ysH+DZWiIxlBLdArrOwAFtb2AOHyUSN+msP2PnOHqHeGKempjCsDNvb6sNqL42GWKjKZTBNhWBQpthqya1v3fI0+FzOQ+X79+X7448Lw5iaEg3CMLzaTe83fBA1iEdAVRQl5ThOFUBRlDRvk/Z/5BnEozA6Kuqtqym8FVy+LJLRb/+27K3hYUFwV0CLROT/2VkXsUPkp0Yxym16po9mdginF0ANBHBqBwx0FVMx2e3r3OtN83Tz2zjmMoleA83uM7B90OzRaidJbW+LOWFoSHZOKiVxuqdPC+OwLPnu9nzQdSH4liXtt37t10TsKpeFMczPy2RfftkzWy0viznhyC/x4QHDEBE8EBAN4OxZCc+r1wUh02lZ70hE1v7KFU9biMVE0AiHhQLXahj31qHXoxQYZ6czQaDfgb0ukRm/nBMMimRULIKq4nvpBU69vMPKhobV62IZLaztXYoj51jbyRAemGhOiJWVIKrqFRh2hSkQwu9Wbe125ZE++1nRKvb2RJBTVa96TKnkRTh9v716BA/hvwdeUhTlDxDfwy8B/93bOfGIQbwJ3txe1rYFQZtNrz9u5lCQOn5cBPdXXxWH9sKCV9yv0ZB9dOIEjIxEeP31CEt3INwBq95As0wMf4xe3cHfqaJPZ+irQ8SaAwb7Jj5HxfIFUFQfjgrKwT6Mp4QpOI7YjdttEacWFmRSzz8vBGBmRjQMl2O53VnW1mRCc3Perrp/37OXgey83V2v6dARfLChWhWCPxjI91OnxMk8NSWmo7t3BYEnJkTNfeklUX81TRhIuy24EwoJrvzlX6I3OuybI9xUM4R9JQ5Sk5QKIfLlJn43c82yBPmHhuDb32a2cIC5arJtP4kWCaI0KzReX2I/EGMhWiad7tFpnCAU00mnRep3o38SCZluOi2Kj2mKbHPrljxSPO7VpRwMJIev35f9+EGRYz7IGoTjOP9WUZQrwGcQZ/XPv6kx2/eFIwbxQ2BxUdRiv1/2ms8nQrnbVL1cln11cCB211bLK9Xh90uQSLMpgr2mQTphEjKKlO00Yb+FzgC9XiPV7TGSMXAO+mhWF8weakBDHVhYfZOg3YGyLRcZGoI//mOZjFvtdWREdo5b//gb3/AyX5tN+XzwQD59PpEWR0cl+qlUEgZx7JgcO+o49+EA2xbzokspLUvCXjVNkHBnR5iBW2bj/n0Rz8fGvDV3KfL4uGiSw8NosS7LW8eI2zXseJZYZEBP06lcW2Z4VCLjBobJVmCOg50IaarEGh3GtRrPdF6kdHCVO50Z1gdRssMmViDK0obNRLKOks4+tGpuLXVI6k0WZh2KZoadok40Kozg2DHZS7bt5QK6aR6RyFHPqx8VDhnC22IKj8IRg/gB0OuJvyGfF2R1HJFg3J7wX/yimJhA9teDByK0u7XwajXR9stl0canp+HTn4TySx0G6zZPxu6DYlI0iuQ7cGJoD3w+OpEcGcpY/QFOv4fuVwmm414NZDcgXNPkhq+9Jpt+ZAR++ZdFV3/ySfjf/3chEoGARKhkMl7Z8EpFJh4Oe6U0r14VzcE1BB/BBxtM06vWCl4igGkK8lYqwhiyWRHR3dIaCwsy9u4hvbAsUXnbbfD50M0+wYCC2umjtffRElBp+0A3ITkEgQCL1RGe31sgW1uh0LaJaikuqevkBn18vgT+sEE4HueLkWcxDYegU+Vs5oBS4jg3drIYB3VmfAVMf4y5WJkRo4zDcbLDGk89JUrtyopM13W1NRoi13wQ4YOsQfxN4IhB/BBwG5A8mqTq80n6/3e+I4wiGPSEs9FRr39EuQyDVgtfuUVMCdCuBFnZDKGrEez9Au2IH8dQaKkxjleuUkuFcXwJBgk/2vgJMp1NgjsbXnVNw5A/n8/TrefmhKAfOyaTHBuTXZVOS3Gb5WUxMfR6Xvst0xTisLkpDxAOy/WTSdmNV67IPU6ePGIWH2Tw+x/2iCaVEkYfi8naLy0JAvb7YnJ0ccIwvLoVk5Myvlj0VOVDf8bxxutcs88S0aHTUAk5RdKpKqgj9Fom316coBdWyLPPoFOmp8Wojk7RtwO09Swvdx+nQZKw3SG6v016sEzyRJ4x41XazjzlMCgJP1rAZHg6gH1QphZuUe4n2d+XwLt4XNI2XLR3qynbtjALx5Hpv18Jch8FOHq1PwACAdEQCgVPM3CTcWo1STmIRAR5ez2vRHi3K4K6phgs3ehQ74dodX34qz0SCcjGc6RSu2y3kxi2n2i4j22HWIxe5uQwBO1djFPz3Iv8bVLXvobSN4jv3iPh1FC7Xa//4tiY55A2Tdk1zz8vO8htITk+Lsyk15PvmYw8iKtBuAZey5KHdMs7DwZifnrmGU9CPYIPFtRqYj5cXBRqeeqUrFciIT4HTZP05HZb/ndjsc+elbXtdMSP4JaH7/Ue9gwZDZTR9Afs+8fxRytMRSv4z5yEQADDUqnpafLGASvBU2hDPUzTYTK0RvOxZ/hu4zTL5QzJxjYpf4/h0h7Dn1hg4eMRNtdtIrfXmJhN4kvGGDg+Xr/qYzjo5+zTNhsNkWkSCfj5nxd0fRQGA8k7cpsMxeMSOPJ+Bt59UDOp3wk4YhA/ABRF9lI8Lnvouedk/xiG1JYZHRVB3DBEi1dVQVTLgpG8yUJ0j8UHKo4aJB53GE8Y9BsKn/y7Qa4VQmxWYww0HYI57neOoy73aPmmuBTtES+X2W7Psnbh1znz/P/Kpn+epFVi8lgXpdsRraDREOkvm4U7d+jqcfbaMchlGd5+nXA+JtqB203OMIQg+HwifY6Oem3ySiVxYGezXvUzXRdGcsQgPnjg1qtPpeBTnxJmoWmyVooijOAXf1EiKV54wWt6Mjkpa2zbogIXCqJFui1KXaeaYZDXO+SH6pBUgMOm7J0OvuEZgokgvbJKNzLCgZKkaunEezaR9QaJRJmTwxqhC2NcskuEXlumXRpQ2p7CHwxJBZChHP7yLgdWEl+rSWRIg2iM0ag3/TczB5BSUV/7qkM0pjxUbldXRdk9gncejhjEDwGf73sT5kAkhkOT7UMpxucTP0Q+3mU2c4vHQkt8Z9NmNzLHbuQYc7kOZshHdjRIY2SB1mYBn9rnem+BTxyLkSqt0ErM8VfqYywHB4R7ZU7+7cfx918hsLdDdTXCUKqKWr7P+tgz+PpdYq02ubEgvcljvPS1DlZ2mPhmnVIxyymtQdTeFK7VbnvOzF5PzA2RiFc3OZ/3PIOu+er7dZ9rNnlYuzmVOmoC/G5Bve41bB4bEz+C+67dntLuWqVSQsAN441rdvashDaDmBTv3BH11rJkvKbJ99FRiX7SNM8vZRgiIDSbcu9OB7JZIiH4ifx1vhb/GIP9BgmrwqXBDUK5UfSFCU4bu6zmxjibfoB1b5kbNZX4/jXubdVppyewUyPcbs9gVOPkKGKH46z4Zwiu6g+VGTcPNJ/3HqW1U2fz313neLOLPpplw3gMYyjwY1egT1GULwD/E9JI7bccx/kX32fc48DLwC87jvMH78ZcjhjE2wTXjweCvG6BTLfuvGu1+dVfhcHLt7n1cpuuM0NkpcR89QFjaR/dYIa6GuNP/gSuPkhAKk5A6TFaWcN/sEcu0mYnNElDyWOE+/gUBXVg0Tz7NNH4HbTOAwbtfVZilyjmL5It3mNXmaNfKNA3uwzaHbL+VUI+gx4me/dqLDyRlp02GAgDSKdlw+/seJt+dFQabYdCkgZ7cCASpptz8Sjs7UnineuYmZ72KqYdwTsHbjHFYFA0uTt3RCqZmZHjbiExy/LMR27VyTeDy1SGhyXD/jvf8bKhQfJhfD7RPk6c8Ir07e4Ks/nUp2BoiMHGJmYkjV6pcya4h1+1uJqcIeh08JWgF8/SC40ydH6MidUtKotlioMZSiM6K2sVEuUKD9Rh6olzzPpVxp/IATmqm6IA7dyXx3n6adEIXngBPv3pw0oi/T79F18lFA1xQI5wq8qEeYO7xhM8++y7vho/FN4pE5OiKD7gfwY+D2wDrymK8qdvDks9HPcveZuNf/66cMQg3gYYhgQKPcog3PaHIDRzbU0EvlgMnuh1OXkxzJ37GoGJIUzbpBXMcKcxxcysziuviDAXjSqctFfJ9zfZ9ycZsuvMtG8TmnycrFLHqRV48K9rBHSbaHyc2U/k6N812d3Mkfb38eeTpMs1dgoqQ3qFVOuAYKuDMTWHVi3gLyzLpCMRiU5qt8Xrl0wKd7t82QuJdD19zz4rD+IGnj+apmrbouOnUkKIHEekzomJo5Id7zS4Kfpuc6d0WsyDLoMIBkUzuHXLo07z82IqTCQ8LaJUEt8TiKCwtSXjolFZ22xWhIRIRMKkFUWYRyol9zh3Djodmm2F7YMUvVqIXtvP6cYiWbNKpDmgHp2gqU1jV4NE/TXa4ym6fR+GlqZlRSgYMSKTQQJ2kNypGQ4KOr2emJACAeFt8/PihK7VZMp/9mceSl2+DFPxDj4GBFMhxhKwt5dCLRww+xmLycn3n4y9gz6IJ4Blx3FWARRF+T3gZ/neENX/K/AfgXc1ruv9f7MfAtjcFNrqqrvlsmgL4bAwh/v3hZ66gtiNyjjnw0sMBlkev+TQHwvzJ/URpvP6w3ppigK9rsOQbxs7k8NxFDr5GaaVewylt9heNRlKWGTmA3RNHRpNws99Cudnn8X6f38LQ6my2M/gVNdJB5vkrQ0K4RSm7cOuNigN0swEDtuTJpMiDcZi8IUvCNNIJLwyzo9CIPBGvf5RsO2HfYkBL6vwKG/inQefz0t+Ay977FEYHfVag965I5FLIIT90iVhHt/4hpc48MILXqMTd90zGfjpn/aq4X3ta/DNb8qxs2dhbg5zcZntDYvQoIXWrNHe6nM1NM8TgWtkaquUfEN0Y0N0ShaO1aCxAc6ZMwx3tkncWuKF8nGCWpPW9CglI/FQgR0fF97U64kye/euoGux6FlFh4fl99wlnXjMIWvYlKsq4/k+gYzOsZ/2fdgyqbOHSWsu/KbjOL/5yPcxYOuR79vAk49eQFGUMeDvIIlvRwzi/YZu941tnP1+2a+PPy4WGbf1QrMpzCPgmyCjNwi1CkTiPtrPnCf0SoQHN+T8REKkJNtWMBU/PqNPdiRIOK4TaA/QOk2OF6+Q1gOEGpOg++nnkvS2S4xG9onNZHjtu1FU3YeaDtNvrFEK2pwJ3mS3HkbtV5g2C8R8Peg7Xuf39XUxL1y+LHG6brcVt29jNPqDM5A0TZhKqSRMxy3vcNTC9J2HbFak+P19L+34ySe/d1wwKCbBRyWYgwNpuVapyHr5fEL463Uv3G57W3AimxUpJxSSc91aX5omuLG9jdns4TNUBmMTNNZqhNQtCsEMD+KPo+xvMehbLA1f5FJ2kXY0z9bQMVLpPAyNEovlmO8bfPvuLAEzw8FdHb9fprW0JOgWComAlc1KBFOt5rXJ1jThZYY/SnhhnmPOMq2ggm0rBJ+9RDDxofN/lRzHufwDjr/VA71ZP/kfgX/uOM5AeZf9f0cM4m1AJiNahNs8qN0Wc34oJExiaUn22MGBu/90AhfPkzo9YGRUis90u7Jfez0Z6zZjv98/wzPKFRJGEx5U6WlVkiGHfKKHPrDwWx2MQIDB+jahaB/fqQRzEw5bt7pEg30SnfsEDu6xXE7w2VCB49ZhfWTD8MwFLiF/7DHxGdi2qD1Xr4pm0emIqDY/Lw/0/TQIEKlycdFr/nvq1FEpzXcaBgNZv/PnvbIWbtP0pSX5f27Ok1r6fW8Nbt6Udmx7e7LWc3OCsGLT5GHbNtsWClwsSsh0IkErOc7WYhs7/xhjkQZJrYN9+w7NY09zz1kgtb9CSjVpxHIY1Q6D+i4h3SKo9EnZFV5tnYBgjsJ3UyyUIRTyc3BwnO0K5E45ZPUqlPuMpBWeOJdibTfA9rZYP2s1eYzpaWEUzaZo2m7ifygELCygDg0RNwyPs3xA4B00MW0DE498Hwd23zTmMvB7h8whCzynKIrlOM4fv2OzOIQjBvE2YGRECLurwZ88KRJQsyn7MhQSBPf5xKfrlixudXyUDrtfueGwbiFAt35ar5fj2uDj5Hwths0VIr0qlEwei/cwq206Dyz6qVHSapOR2gG8OEA/cEimLpMvroDZxIonoGZJNEog4KV8gxCEwUA21OSkTPbGDRl37544T8bGZCeOjwuB+exnv39kkq57UTFH8M5DqyXhq72eF2c9Pi5rtrMjSLO3J+Gpn/iEIF06LQx/fV3yYKJRcZKVSrLG7baX6Tk35zUBSiQelggov7rI8wyjdw3UZp/N1AhPzZVQKutUdvtMtq6zvBOiZyqovgAz/g3W+yP4gn7uOWc4ULJ0ghli3RZqz8fSUhrHEbRKJiGjlIgerPOJEzqLuzEWv1Zn3ZklmdU5eVJQ98YNQc/AYUTtxob4/n7lVx4JzIrHsSzRNNxop4WFD05NpncAXgMWFEWZAXaAXwH+/qMDHMeZcf9XFOV3gC+9G8wBjhjE2wJFESnH9Q+WSlLFolTyGridOCGCXjQqzMLt3LixIWYoN8vaDT4xDBHay2VwnCiRiSiB7V26pQAT4V2MWo8JYw1Dq+J09gk8fRF1dxc0jcTBDrFOiFK5RyAQphVK8VjgBpSDYiKYmBB1xa3mGY1KnfLdXWESlYoQmsFA1CPTlAkVCqJxNBpe0ZsPmYH3Qw9uhFguJwh1/bow/Ndfl/XY3hbmUasJs378cVnXalWS4goFoZhuEqVbkM/1OZXLnl/KNMHvp1XuUmxGCAdqpKx9ultVutGLbFzZZ7iwR8x3j6zRIhVLUg2Nk0kavH5lnELqGObUAvVCgmYdUjMDbj5IUmsqtPGCrgIB0KpF2lqKQdvGVEMMmiWa3Q79QYLf/V0P/T79aUmE8/kERd2uuUNDXhzFrVsy1u2u22hI0uqPQ8Mgx3EsRVH+KRKd5AP+teM4dxRF+SeHx//VO3OntwdHDOJHADey84/+SPbc9LR83rwp5uJSSfaw26DL9TOOjXlugERCaO5gINcql2WvtttgWRlGklli5m30iIZqawRnRgX73DZ1/T56q8rjm19ksxajF81yYiHFsK8HFUUm4kamyEXl8949uXmxKA8TCnkNhVx7V6slBOWll2RMMinOzkcdMG8HDEMeMBA4YjA/CgwGsgZuYL+mybt0TUaWJZ8XLsg6F4vSdnZpSRDM7S/tOrnCYVF/Xdun3+/d4/JlKUMcj1Pvl+nGo1hOhHZ8Gn+rjFHv4O/X6EczhNoV/OV99ECR1vwIe7ET3M6M4Dt/hq0dDatfJBU32D3QKdd8dEwfwbig19KSoFFxNYat+hgaVlgY71LfU9nZ91Nckun2+yKr/NVfySPn8yKUdQ5zQt0CAqYpzMG1grraRrv949Ny1HGcLwNfftNvb8kYHMf5T9/NuRwxiB8RDEP25dSUfA+FBHmnp0WTcP2CTz8t2kM4LBaClRWv2bplSbTp2JjQ/nIZ4oEu6XENWgnaiRlmEpvgT1IYucD+9V3U1+sM2z1ywRYsLxMYHWVhMgybi1CKiYjlVvS0bc98EIvJhLpd2W0XL4rk+cILwgzi8UMRTxOiU6uJlhEIyGRXVn60NNXNTWFGti3XvnTpx0r/f1fB5xORudWSz05HbJPBoKzhgwfCcJeW5L3aNvy7fyeEf3FR1rVaFW1jdNSzvzQannPaNT1WKg8bL/jiEczoOK3IaTpmHyfcYjA9z+TOKxgm9Nom2sDGMmwSozE29VGUsSHqJYuNQohCcYxQG/qGhdOzCfqDmKbgttui5PhUlFnrASVytJoQzkfpbeh0OjKu2/ViIFzhaW5OXoWbkApe4Nxg8MaS4e+nHHJUauMIHoLfL/us0ZD/9/eFpp486Uk1xaI3bmNDEL3fl0ASEIYxNua1T9xbaTGeW+f4rMXZYImFfplwJsdBM8jV5TipyTjhm99ltZlC626Rcttw6bqUUrh1SwjA+fOeyDUYyKTcQlGlkhALt+6Sbcv5ti3fg0EvOavbFdNFMCiG4a0tL+4+lfr+L6fRkHDLdFp2e60meROXf1DQxhG8Ac6fF8N7oSAMIRSS9el0RAjY3xcGPjIiCBUKeYmQrr0zl5OAg6kpwQ/T9KKhKhVZy2BQjm1skBy0qZkaE/Ee6uoyKj3m9C2i7QOcdJpuUKMfyRD2q6Qfy7KxPaA9/RjXX3foqgqRcR+0Gswqm1TsMNW6RtvsMUjk0HWZ1tDxNKPZ44R22tzfi5NOhuj0tIfoqCiiCZw4IftDUcTHV6mIwuQGiGiajLlzR9DXNOUxj8p/vztwxCB+RFBVKSL2278twrXbuKRQkL2pqkIXv/1tQfxuVzQEXRehb34e/vIv5S8ahXZ7wMXhHSIJnVhWI3tsAuo2vWyKteerKGE/dkClffpJzLbJdj1H6vbvyQZ36yu5uyYaFcIRi3nJT2trXo0et4pgrSbcKZMRDuWGjFy+LA9UKglxcqOf5ubkPq++Ch//uLdb3wzdruxs11gcj3sJX0fw1uA4QuU0TdYzGhXn8+6uMO9USpi0oniVWTMZOT46Kmuxvi7rWKvJeFWVNX3hBfmLx2Xd798XySSX88JZfT6C6SizlS0mtm5jD2UJ+gx0RYehIRTLIhxwCI/k5N6PX2Q23UW5HSCRV4hYoOAQ39qlrSTIpxSqfY1Av4NPa1PpRmi1RMEpplN87nMpGouCjpYl/M2Vvn0+Mc+Ojgq/S6clT+/pp9/4yqanBcXdJl5vlc7zXsORBnEED2FyUpA2Hhe6WqmI2d6ti+c2egMxDadSMkbXxTqg614Dt7Fhm9FBj047yP0X9uFBHaut4HvmGHtTk9x+tc2I1STR3iVa32Xo3AwMTkoYR6kkxOL4ca9lqKJ4NrBHE9hOn5Zjbg9Hn0+85N2uSP5jY/IAiYRwvmJRdu/nPy8EJxiUHenuyreCYNCLoPL5vIS8I3hr6HTEI9tsCoM4f14QwzU1aZqswWOPCSIpCvzCLwh1dU1JhiFmqP19oaynT8v/ti3nHhzIelarcp7b92H3MHLScWBqCv9ggN9uQ90QhG0f9iwfH/c696TTsLfH6LMXuBRU2CsIig3nbPqFLo4eBs3H7LTCTPSAcjTGvhnBMGSvGIZMJ5+XaeRy8t2V/pNJueX58xI9nUwKI3gr4p/JvHUxvyN4Z+GIQfw1wd1nrn20WpXfLl/2OjreuydC3eqq0IGZGWEunY4gfjgMk5M621czjFTuEIl1CagDls1RUssVoscS+BoNtgoO3UiIzm6Gi5EHXkXOnR0xBRWLonObphCNfF522pUrssuOHZNz7twRgu3zycRcD7nrOS8W5SGOH/c6Hd2/L4TBben1g4rvJxKiydy/L98jEYmeOoK3hhs3RIrP5eTTLa8eiwlFzWS8tOJIRERnN8JsaEi8uGtronHcvSs4kckIYrlNn/f2BDn9flnX5WXBG59PKDZ4psZWSzTQoETDGY5G2cyiKwHiTgX/zo4IJcBzE03sj0/z/LUY+yUfx8d1LqQP6AUS+K0WEbPOH+5HUFWZXiYjio6iSL6f2+PhS1+Sx3ctl088IePfz/Ldfx040iCO4A0QDsvezOcFmUdGZH8dCll0OkKD3d7ubjDK4iK0mg6nopscS+zRLocwg9Mc1HXqHY2ioVGNjpD2tTD3ypwa63JtJwdJjYim8WL9FKnzU0yND8Qh/OCBSKAjI14K6qc/LeGRnY4XTXT9uvgqxsc9k0a1Kt+HhmTiu7tienrySWEomYxkXu/tyQOPjR1WTvsBMDMjkqzr13g/Yw8/yDAYyLt2I5Y6HUlcbDTEznL+vAQUbG5KaKubNdZuy+eZM8KMx8bkXQ8G8qmq4ri+csWzb7r2mnpd1jEaFebS7YoIX63KdRoNWa92G6Pd50EjTHGvQ8Y6YCM7gn8oRWL9DonyN0n8rMLP5veY+Dsfo9QJM5Y7zVn9LsbWFnc3ImynnmDuboBaTfZIryeoOToqio3P59UHBJnKT/yEV5/pCD4YcMQg/pqwsODVuNN1zw5qmvL/+rrszVpNxrlFOQ/2DCatFcbtZXKzaULFEkqxxmpgiPkJAzUaZue+xom8RSZjc+NelP2yhmkp0PYTDCf508Ip/tHIdSwnTsAXJvjZJ8QZbNuivvyH/+B1N4rHxcSwtydcqlqVibrZtLWaTDqTgZ/8SWE4r7wijulwWAiObctDnTnz9oy9gYD8GYbMIxD40UNlf9zBTQ92/TZ378o7ciWNmze9RJrNTVkPN7ktnRaGPzT0vUUS792Ta1iWXGd7W5iKa/rTdUHaiQm5tq7LGmcyMpfZWQiFKH57iZYdJutvEtzZYHOzS3Y+gRoacHCg4zQU1lpRKuEm4ckwuyU/vonznP1ZOGfBsS585uck5uG735XH/exnZUqGIWh6544X0qrrMtUPa1T0kQbxDoKiKGng94FpYB34Jcdxqm8xbh1oAgPA+iE1TN4zcBzR5mdnPfNsqSTIfeeOCN+f+IQg/fXrIrj1+xDXGvR7A6KDEnvdFMVbQTQ1SLx/gJqKc3OtTzJqktMrBGaGqYfjtJplVAZUqwq5gE0ur7BWUPn3X88x7ndI7ZeZWyySdW3UIERZVYUZzM6KjcsNFTEM0Tj8fiEwIyOiOdRq8Md/LM6SlRXPQHzmjJixDg7EPHH8uIiDLqPJZLwyD7WaZ84wDNE+BgOxHzz77JHR+M3gRixVKsKwz58XphEKybteXxdznRuuE4uJINDtSlREtSrUNZ0W0XxiQn4DEdddP9LwsNzDccQGmsmIhqGqnmi/uEjx4z9HrRfCabYZFK4T0W389Q49WyPa3EFdr6IHGxiBJMWtHnu2n54zYOWO5/o6dkyEoVhMbjcyIrf0+wU9MhlBv9u3BU2npmR8oyEyzFFvqg8WvF8axH8BfN1xnH+hKMp/cfj9n3+fsZ92HKf03k3tB4PjCBPY2hKtfGVFkHtqSnyJyaSYeCcnRWJaW5PN0GyY+Fo9DCdEMKKCY7O0oTM04WfQa7G4FkTLj6Il+zS6Pub0AI4Bp5+1ufpSl5Dfwp/N8Wo3T3+nSIAe2XSV6HCYzvPfwlD28YcDnldvMJDoo4MD4VATE15dH12HyUmceBzLVtH8AZReTyTK+/c96T+XE4Jz86YwCbeF6csve/ZrTZNjvZ6YSHRd7vPNb4q5KRj0iNNP//RRA2EQythsilj9sY+JdKFpHgPtdASJTpwQhIpGxYkViUhinGUJ0/3jPxaG/dnPeqYkXRctws13cJ1kgYBIKQcHEmGhKIKcqRRYFqXNFkt/uUp6Lom+u8WyNYHTsxhu7tNtWfjMAYlAB8IhOlqa8NoyhdA8N3Yz1LueJfH0aZEpwmF5jK0t4WFukmmpJMJTvy8aQygkvM+yxO31/eIfHoXBQM7tdGT6Q0PvfxTTjyu8X7v1Z4FPHf7/b4Bv8f0ZxAcK3NwxV4j2+2XfPv20CGSrq0JjWy0Z3++LcHf7JrQqIYZyDnd6x8j2NrCMAbVin4qTZ7ObZijmo2aE0QJCax0H5ufjnP5UnGvXQOvD1HAf384mKgNe30wTenCN6WQcK2TSa3SwaxWUeJyo38DXaHjRKydPyuTv34dcju7oDAcbbdqdAYPEHPM3XiBYLcpuHRryuomFw7IjGw1hPmtr8mDZrDzs0pLsVssSghYOyz3daKd4XIjU9rbn+/goQ7Uq4cKOIxRzZEQoaLMpkkc8LtLG8LCsm5tNPTYmInqrJfZNEJH79m0ZPzkpGsfcnFzjsBIr/b6s4/HjQlFv3fLsPMWiCAF7exwopwipBj6zT7CyS8yfx+41aWoRNKuMEUqwdP6n8UVDJHpFhid9vHRvgdcXA1iWV/nDcSQM/GMfe2NyG3jmI10XTWNsTCyawaDskfFxkS1ci+Zbua9sW7Ty/X05b3VVruW+kvcDjhLl3nkYchxnD8BxnD1FUb5f+VAH+CtFURzgf3tT3fQ3gKIovwH8BsDk5OQ7Pd+H4Eo+bqKwbYuwt78v9G91VQS+alXKBszNuX1XFPYWDRQF9JiP7e0pDMXGZwfoKFG6ho9cTuhCvS5/09Nimn7mGdlAzSbk+tusdwOYiTEI93ipuE8nvEMwF0Nfv0ag1aKamKfTruJTQmwwh93XGLpWYXLIRE0kGHziU9wNPYVu3yayfAt7b4NCO8Z4wkRzQygjES/7ttsVIv/UU6JlqKo89N6eV3VwaUmk06kpOa5p8rLAy9X4oPkhej2RvEGk9/ci4/vOnTdWIl1aEmnAZQirq0LoQd7n6dMyxs16V1VBQNdoHwgIod/eFqqq63J+KCRMY21NGHylIkzcHeP2M9d1CIfRSnUG0QiOHsBRoG2HGZ6PEC0uYemw7R+irqZ4ZqpBPurnavs4vnaNjNOhaMTx+UL4/Qrr6zLdVEqEplTK8y10u14RWjc1x2UKbouK1VWZbjYreUNvZhKtlkzbbXQYi4nANjv741GL6YMG7xqDUBTla8DwWxz6L3+EyzzrOM7uIQP5qqIoi47jPP9WAw+Zx28CXL58+V1brnBYBPHpaUFIyxJLSjYrkk0sJntvaUnGNZuHnR1VjUA2TtCoYfVsit04WlAjldAJ29AzvKinbFauf9g7nkJB6PTnPgf7Lw6IDwVp9i3KtQFTusXWfpikHuV4OIqZTqKNDXO7foZ2w2HqfILw2h22iwG0eIjxZ0/QH5rkoJYld/ICjVNnib36dcplk5HmK2iBwwJv3a6YpT7/eZnMU0/Jw+3siG+h2ZRxiiLHDUN299CQEC03WqpQkM9f/MXv3cHtttftzCWQ7xV0u2Iqc5lYICDP+G6XkO71BIlsW/4WF4V4X7smyNTrCQL83M9JGOz160JNL1yQMFhXk6tWBcHSafFjqKpXaPHGDbl2MinXajTkuTodWY9Wi64apBfI43R0Iimd8fY9Gv4MzaV96v0MqdY2wXaQg/xjlCbOU2xH8DlR+k4PbSJB/7ZCPmawo2solQ5+n4KihBgMxCk9OipTmpkRC6VbPcRVnLa2vIaGiiKWs2jUyw8qFr10DsuS393zHwVXO/lxJdDvN7xrDMJxnM99v2OKouwrijJyqD2MAMXvc43dw8+ioih/hLTje0sG8V5BKiXaeqEg9C6TEcHu9GkJMLl9W/x/8bhYDyoVoam2DQcHOpOTOYwgjE17LUqNw5ykSOSNgUX378sGcC09i4uQzOawOjVUR+HYcYX0fhS162DSxFZ9DKaP4Sg6pVaIoG7iTEzhNIukzCKN4BCcPIk+MYv65yWccA9/eROn0SAYCqFGsrC57qWnnjgh9u3paU8EvH9fHsxVpaanxVawuSlEVlG8MM29PRk3N+f1P3ZhZwe++EWvZMj09MPex+8JbG56EjXIS97YkGd+t6DX85z9yaRXMBFEbN7dlfdhmjK/RMLLukynBalOHiZJGoasUyYjVNiNOnvtNS+k1XHkGt2up9YOBjScMNWtDqF+jULqNL3ALGdOBDmdU6g2gGAOO3mM9dtNtq0Rdrf8tPOTOJkxls4mmHmswGxnjfCuj35fod1Tse0+/kjoYTWBnR0xHy0uyit1k+H292UamubViQTPNebCYCCP4vfLmPv3hX9Ho7IHy2VR+FotQZ2PuuXy3YL367X+KfBrwL84/PyTNw9QFCUCqI7jNA///wngv3lPZ/kWoCjwmc8I8rrfJydl787MwJe/7Pn+IhFB6pUVOZ7LeUFDti37ttkUGuC2jR4ZEcF2a0t+S6clqzSfl02Rmkgx/dl5lp/fRsFhe/7TPBm+wYPNabacUaYf3KfoxNkxErQDaZwlg7lImnbMT+zMGViYRu90OD9V5dUv7bPELLFWmMf6rzFwCujz82LUHRqSXb6zIw+2uipdyl55RQi+Wym0WBSNIpuV3y9e9Ew1ExNv/RL7fTnHtj3tw417fK8YhGW9kapomhDmN49xm40nkzLXTkfGRaM/esC+W/Z3YUGe98EDcfDfuOGVRPH55B7/9t8KA+n1BGGee06+u8w0EIC1NXqWSq8O+m6NiGtOymQEqdJpQdDxcUFSn4/B4iLK3dsk9AiGHsLp9bFX17l+9gInpxOMaC0MLciN+gwvxjLcuesw9fQEE5PQOTigvmEzuBAgRJe43mViTBdttqqTSMjSz88LXr/2mli7pqdFqFIUrxTYsWNy3E3VmZ8XNOj35c91Ybn1zVpSo5JLl+RvbU1+m5r6/mj2XsKPqwbzfjGIfwH8B0VRfh3YBH4RQFGUUeC3HMd5DhgC/uiwa5IG/K7jOH/5Ps33DZDPwyc/6Qm/7j50S4C7OWuK4gWjuLXUdF3+D4cl2sOtsxaLCVPY2RHGkMnIholGxfpiWXJ+KAQ//4/TfGs+zfo6HJuCa6+F6Zpr5MfC/MX9cZRUmp97zmL7eoXO8ibFYIO8XWT+letgnAK/n9DwAopjc771EsEg9Ds6W/s6C+GCTHJ1VYhTLCbS7He+I5/BoEx6fl4Il5sEkkwKJ2w2ZbcEg98/tMQtM+4SaL9fvvd678wC2bZQELeOw/z895qOhoaEerl+kU5HFs4FxxHzjlvDvVgUAh8ICBF3fQLhsDDG8fEfPKdGQ3wN9bqXA+GWQxkfF20rGBQEevFFryfE8LDMI5kULcxxZHytRjk9x/6uje+lFYyKTT4XZSja8+pfhULCuOt1sXn2+6Jl+gL0Q1Eq6hBGKk9Zn2DEZ7HezhHNOyyuBHipNUE+UmR7KMvdrTA9ZUAqBCt3emz8xAT1VhqaLZ6dajEcinG1MkXHllJdvZ4sQT4vr/fePXkMVxtw+a4bs3D8uDya69aKx+XcnR3v9T3aott1ch/Buw/vC4NwHKcMfPYtft8Fnjv8fxU49x5P7W1DNPq9rZgHA6Ejp097nTxrNaFF/b5IOnfvygZxHXSK4oWir63JJjpxQmibG3j0KO3w+0UI/bmfk2utrMBeN8Ppn0mT6W1jRius19L04i0em9mg1LFIzExySu2iN02s/QOadpRKcYd0t0La2KXbD6OHImw7o8zvXUFx4w/d5tsbG17RfpcTOo4wg7k5sRkcHMgDfe1rXk+Kc+c8u4FbVVbX5WHicXlZzaanTs3PvzOLs7joFbBzbRonT8qLDwSEo2ezYgRfWZFzLl/2DODgZRm7Imy3K9rTJz4hVG1jQxDgwgXRAHy+NzKYR6HZFLXw/n1ZUMcR4l+piCnOzUvJZuW9uDWyfD6vK9XmJsboNLWP/wJsbhIZ7LD+oEXe3sAKDNDj0Oj5SUZMAqot6zQyApkM1asrGHvbGGqIHBpa0Ee/26OYn2agRujpUYJzKbp6AMPRub6TpacN8MWypIYCPNhWub2sEdIUfH4/jd/RyGUuUwg0URWHwIkwx1pBFhfF/2DbgsOxmCyBm+aRz8veuH1b8N1tmGUYsiyzs/LnvrKtLRHCNE143IUL7wx6vBtwpEEcwQ+FeFwQOZsV5C+VhCY+GlwyPCx09vJlIfxuDkU2K/Rrd1for9u97uRJoZuKAmG/xYWZBqWbHV5bTNB0ojxYUg4rYSj4U378qoU5EMld6ffRbJOR/jq6VcH0h3llJUO1aND32zhtP0mrSrS3yfbo04SzERTjkSJ7s7NCXN0s3ExG/A6OIw937pyIctWqaBe3bskuzuXk+PKyPECtJo4Zt3jg6dMS4mLbcp6iwM/8zDsTq+he0w2+DwaFIrlZWIOB3GdhQTj39zNpPer97PVEit/bE+ZjGEL9bNur614ovDWDqFTgz/5MjrulMhxHmI9bwjsWk3PPnZPfdF3GFouCUOk0/dMXeOVunGrPz/bGDMZOhKHuKvFIkWA8xMAcYNR7tGomxP0ETkq4a7nssNnJE/BV0FtV9vpx0idm0dc3idR3GfTCpC6kKQcew/zY59kc93Ft1cJRwB/SKG1tUT0woGdi2BqB4SCVV+DXfk3j9t0U3S4MHfoC5udFRnB7Ge3teRa1Z58VJlAoeI7nnR2RPwYD0SIehVjMM8+apvDRN7uxjuDdhyMG8Q5COCwm+LU12QBzc16TLzdjdGdHEuoqFa9yghut5DYQyudFaopEZHN9/vPgM3v4X/8uu791l5vXLfpqjJd6T9IYPkmrpbKxAa1qmln7gHOZXdoHKgUjxSQ3UTaqVPYLtAwfRf1JprQDNH+FTYbZKubJDyzaBw2m/Bv0bZWA43j1l9xSEKbppY0HgzK5QEAia9zS0bGYMJBMRohmvS7fv/hFkYYnJ4UafOlLUnjnC1/wbGc/rMaCWyH2h4Fr6B4M5CValjCMZ54RBmHbwrjGx71y6W8uBWLb8jk8LBzb7dY2MSEUb31dmN758zLOND1/hGWJOadYlLmUy/Lp5iZEIrLoW1tyTjAo7+rePbl+ICDUcnHRUx2Hhtja9dHcLFOraqiEyMYMtrQzmGacZ/T7mPtrBK0OSrdFxciSyE0QPn6cjY0UV8pBLu7skdTrdEmye6ATTU8QdGK8GP/brNvnSO5ohF9t8ZffSJMc8rG0BGoT9gZjTCnXCMZMNGWA5uxwp/IYd+9GmJz0lKJsVqYfiUjC24MH8oomJkSbcF+PzyevYWlJfuv1RMlze6M8Cm5Dww8DHGkQR/C24OmnPXup44gArSiSG+U6ngsFYR7Dw7J5TFPGHJqJ0TT5e+opoWGBAOgbK7QfbLBXD1ILJ7i/qnJQKFMqlgmOJVErFRaUNR47q5A/ncMJBBnCx+af1tl98VWM7jRb3RzDgX1C/n0GJIjGHGrpCZxyAV+1wi1ymN0dRsIaMbslfohHOyS5nO7YMXm45WVvd6fTIg2320JMez0vZt9x5MG/9S2vZdi3vy3ZVMeOeS/rzT6LgwN5KSsrMod8XojyD+oOoyjy0m/elLm320Jp3H6ULiMqFOTati0Ldv68R7EePBBm6DjyTK2WfIbDMhe3ylw4LIzAtf+BZ97y+4XA7+yIuri4KEzp2jV5X+WyIECxKNpJueyl4JfL8oyHzqtefoIr34HCvkmpF2AuuIputpiedGgWfLy0NoTPuUg63OVktkhC79K9cZ/w0xewQ1EGW9s08nOEBm1qqWE6fRUll0XVNKrBBYqVEGbQR/MW7HRE2j95UpY82a/Qrw9Yao8zMGzi/QYZfYOrV08xOwu/8ivCf1dX5bHchoW5nDCKN7tm3GTxVkuWyucTbXl7+6gy/AcRjhjEOwyJhJipXdupKxw2GrLp3NQAt4rz5qbQMLdx2Gc/K7TF55PzfvEX5VqN61Uqtw02SzFaTdhpp4kGDbarHYqtACOxAepCnL5icv/VGrWxM/Q2BgR28syceRx7AMrNPW4aY0Rnxonv36e/WSShmfR9MQLxAHqrTSk1j0qJUHAXrdMWIjYYeC0wZ2dlwvv7Xkp5Oi1jDg5ENdrfF+LoilVu4qJlCfFUVXngP/kTCW0tl+WBT58WJnD7tnDUjQ15GW53mFBIHL3PPvuDNQ5XlK3V5CXn82IGc9uwBoNCsFMpoWatFvz+7wuRX16Wcy5d8kxBZ87IvN145uFh0UjcFNpIRN6JG2pTLsu7arVEnbx8WdRG25axx497We3r6/J7u+0hx+ioaG6Hpdnv7GeI06CWGcJsJCnu7ZClz/T+PQ78ZwmM6gxre/Tjw1w1xnjGfAV/swXdLgvHVG5bDTZ9ExihLqGQQt+nEcUmoJnQaOCvGFSsHPmLfuyeuFRSKZlOnAGtQQTHVgkGbSrNOGl/l3RaCHulIqYlN+2i0fBa8I6MCHr4fJ4rSlXlFbp7w83H/LAW6YOjTOoj+BHBLWbqOELPXDq6s+NFeLz+uuz/UMjrZR2LycbJ52XzdTpgGg4v/9sHGN98QGrnHv1ejkZoFsU2aLd9NLQwCaVJwwyzWHDQQh1CrQO0fJfNTgZtL8RwvI3RsxgdbBIdlDALUOzFCCstFJ9Ov26hDupk2tsEDRs1qGGlh9B8B15F1mRSCN+XviRF+92yD25hPr9fxMCJCZHAi0VRh3RdiORjj0kYKwjB9fmEAXz5yyKdW5ZI/ZGIcE2XwFYqElds20Kx3HLXPyyhLZ32SpNns15CWiolYq1bNwq8Lntuq1TX/j8yImJuNisL+p3vCPMbHxdCfvq0PPsrrwhVdBxhbJmMPIebMfk7vyNUNBqVcNWREXmeq1clnDUS8ZJgCgXx43S7oKoMKlV8iQ4LqRKpvV3oT7BspskkOnSTGYLBMDOhIuXAKYL9Bl1fnI1GnmzQT3kFxq7/Ec89FuJ2b4FoMchQ5S71zCTr/gX0kTy9Gw7b3Qx+zU9pI4KiyKPu7oo2MDOcoKxskq7o1PsBYnqPU8+kmH5ScHlrS15fryd8LRYT9NA0CWN1o/lOnvTkhMlJ2Qtuao1t//AgsCN4f+CIQbwL0G4LjSyXhdYtLHgaw5Ur8ptpej7NkRERTt0On5blSSUv/ME+4aV1qrnHaA7CJO+/TLtmEg+c5W74CRJjGWKdfWJJi2LNz40bHeaNAxKd6wwlp/lG4AlGlQ5njW9hqxqJJBw7oaAXijTVJNfvaiRaXdJOmZodYdLeR7d1/NUuxKJCpGMx2emu7bzd9jqeOY4QxH5ftAY3w9qN6XW9kK5PIJn0erLGYvL7+Lgwi40NMdtomnxms/Li1teF8bi9LXRdCLNbuCcU8kxILliWcOZy2Wtk5BrC3fjKXk+0iUJBnqPdlvvWasKgSiWZ08iIF/l06pRQvJs3RcXb3pbxo6MyTtNkgRsNobKWJe8lFBK7S6slWlg8Lp+uqSoUkmuBZ5br9/FpGgyHMBsqE/0HDOXKPG60yI36iT02x81IFMwFolqY7s1F+nsOaiJJd3KC6nqPynKH8VyNi5kKwSEb3+QwubOPMfjKOovKCcyxLM1mhoBiU1w3SSYcpuYCDA/LEquRCP5zp3iysko+0+ZLr4/QjQ5RrQq/rVTESnjqlCzj/r5Xa7DZlEe2LFEKEwn5i8XEFOs2tXMZy4cZjjSII3hb0O+LQAmCNFtbHn365jdl7585IxvLLT9g214bUscRurezI/Rs+U6P9k6e3VqU0aHzTJweodHRudZ5gk5TQ+nC8Gic9n4D38AkWr5OPa5RRyWze5tJ/zFu5j9PQm0wHF1n3lmlc6ATMRRMTeGUcYOGGsGwg6R8bZxAiGzeRk0PS22PP/xDz1TTbMqDtdteAohpCjPY2pLfMhkh5Ht78uBuMwzwmhJVqyI+lsvijHHNK5HIYbhW2DNZ1esSHdXpiBf/5En4ylekNkOpJNTpwgUxeE9MyAvc3xdpv9USVcwtZ/7UU56949IlkeALBa++lNvC061b1O8L1bt+XeY8MyPjCgU5d23Na9/qUr5+X+bumrJSKU/7GR6W69+4Ic/h8wliuNFK/b5XFzufl3OSSRb6t9kkTk8Vs9mpxnVCih/Mdc485eeLnb/FQfYE2vGzTPq+Ts/ucG87zxoz9AsJTnS3WdjfZujTZ9Adk93qBNHoLvOJfW6VhvnY/C71doBopUevrTHjtykYE2xtKUxPwzZx9oPn+eJ35VVO2qD45NEmJoQ5POoWMk1ZWpdnu+22Ox3PzxCLfW/k0hF88OCIQbzD0Gh4lbIdR2jKvXvSpK1S8WrCnT7tVaJwSxpduiQ+4GhUNpltgxWKMhrfZr8apFxT8aExSGeYmNEI7ttUdtpYjR4HnTDHc1UCps66OY5eVTjQAiScNUqJPBPqDqOn4nTKs4R2lrAXFgguLuEPW2T7ewRDAwaOBsNDBGbzsoPn5sQecPOmTNQwvMgfN9xqclIm6nZ+ccOzdnbkt25XCGOhIAR/MJDxiYRcX9PEbu+Km26ySKPhhaQ+/ri8lIkJEUX/6q/k2MSEeEdHR+Wc4WHRNu7elWsGg0L8Jya89PaREZl7KCT+jxdfFEZ47x78+38v97140ctxcDMZd3eF8fzUTwnDOjgQJhAIiLoYDnu5ED6fUEjHkXsHg3Lu5qYsciolJrdwWBb6S1+S67mtZJeWoNmkVofVZhq122Jook9i2EHf2EQfTkCzidnsUP/qyzSmnsFvbjA7WKIeHeJqJclM7xbhBpixPLfNEwy1Vrnzx03iHz/H8WMRdsLHWC0Mc2c1iGo5+EIhumqAUkNnZ6VEbL5Bs5NgbU348h/9kSyhrnv5PU884VnSHEeWfnNTlndvT16Fa00bDN6bWojvFxxpEEfwtkBVPWRRFK/KZKsl9HNsTDbS7q5sLrdPtdtwBSRL+4UXhHGMnk5DcIiJchFHUfElEjSys2SSMGpuYpsHtJwwo8MqRsskntSJ9xXWN2Bu0iYS0hgKLrG57KO/u80gGKFZn6TSGmfN+Bh6uMeTgRf5lPU1/O0quhmC0JTE5I+PS/vSYFDMNe5O73Y9zuZ2n08mRfqdnpbfXeKp617z7k5HCKCmCYF2M4PdWGDbFo0gHBbC//rrcrxQEKfwvXtC/F0neSAg9/rSl4TYu4Hz+bxXy2hjQ661sSHJaqoq9o1MRhiBWzTvD//Qq256/bpQwGhUGGUyKfMzTbn/3p7XkKlUkndgmvKbm1Y/N+fVjLh/X56p3xfG9Q/+gZi3TFOevViU+wwNyTu/cYNmzeK+c4KkfwfNMWmuaQQCLcL1Kvh8mIkUFSVDbdfAijVId4vkit+h4T9Gz8nTDKdwzAHV9DjdlsP97MfwF7fRrr3GfnOI/ROf4lZpgcUmtAqS3W3YPqIhi3Skj20PuHhJCPydO/Japqa8YDbXAnfihODy4qI8xuXLXgb14qK8EkWRZXX7Th/BhweOGMQ7DKmU0Mv9fS8M/7OfFaHwk5/0CvDt74tqnskInex0hJHs7oqw6/pBNzZVBso8/gsTNNvQ6PhplFQ+NmtwcLVIkyh+XUHXFHodlYYSw1cpMqTrKOU+t1MnubD4OsutYYq5cYK1IoVGmGYlghUYEIr4+Uryl5lRq5yY38P/7FMyoWJRPq9ckYc6d040iVBICKrjyMPl8zJp18/gFpV77jmveuiDB6JNuOU3VNWr75zJiM0tGhUzVb8vVOlLX5LrqaqYc/b3Re2anBTi7XZV03U59+5dYSCO4/kwbt8WgpxIyDX39oSol8viNL5+XUxTr78u189mvaqorsbg93vVUN3ONJcuSVvXrS1hUKYpf6GQ5wh3S/26DXtcn82DB/Av/6XUpGi3ZaHn54WhDQZihxwMMHsDUs4e+AKY+FEiYSrdAenDEiVGyyTY3UDxzbJQfx1tr4mhGmiayViqRSAWwm8FMXoOOiYNJ0FjcoFmrEuqVWGnEn9YlNdUdCKqgaY52LYPX1AnNRLgxg0xiRqGF2UXDstrdIvmHRzI4x075mX9u11NZ2c95e/dLpJ7BO8OHDGIdxhUVSwT+/uysZJJ+dvfl8104YLQhXJZhOLbt2WTupuxUBD6d/GibMB4HFothZXVIIOBmK7v3YPF+3Ay1GSgJYnFYWdXZSpeRDl7jtWXmjRLPVa0NImQwmvbM8y3bjAZLNLp2OSNCnfUz2EqMYaqW4xH9rlhnmY+blFbr6FuVIimdNSvflWII2AZFkbDoJkcQu11Seht/IWCPHS5LIwhk5F8AjeH4MoVIXqK4oVquS3D8nkhyI89JmaYUkle2N278gIWF72aRy4T+tznhNK8+KKML5dxjh1DOX1arl8oiJh75YrMKRTyfA6G4YXNuiGkwaBI8m6RPNv2zD62LUzu/n3MYIxSGQaLu6SfmCdstOQZVdU7z/UzdDpe5VRX8/D5vL6auu5le7daghiTkzInNyEvGETPJWi3cwz6Bq3kFIOeRVIPYE5MoRULDKoNBo6KE1HJ7N/FUPwUU8cYVQqcjdxmO3wK49f+T3zn21n0ezdo6xaxlE65rWMEdVbuWSQSh24lRyceMuh2LEIBg28vjRJvRZg6VCRv3fKSxbtdedXPPSdK29WrnrvEjUKu1WT5AwFJ8gwEBA3W1uRYLCbL5FZZcZfiwwxHJqYjeNvg831vWYDjx4UeuJvn7FkZs7QkwrLrpz150stLK5VEZb95U+hlJOKZ6u/e9fPU5RGy9W0O7ByzGYOKM4ZfjzMYSRAeAd2Exm6djNEjnbCp9wLYzRrrxgSFYJ4ENvu+YRL7qzQjCn+xdYrkeJx4d5/UQGP+TBA1mYRmk2o7gBNI4e9UMAIJWgcFYpaFvr7uaRO6Lhzv0fIV+/vyQlIpoQRust1//p/TVOKU/+p1fF/9KkN71/E3SkI9ikUhlKGQPHCzKUxkY0Ne0tNPY+LjYLNDxcij3zEZGdolns+LievWLbHlhcMyl7/4Cy/fwG0D6LbnTKeFCl6/Ltc/OJBFOiyha0zO8+r/coXG1SXUsRHU1VGeWggQd2OUwXM8qarcb3hY5u+a3+p1L7rLlRrc+8RiIjXk8/JuhoYgkSB8UEI3FcrdBIYSRklHiIaLtDJnCeVG6N5YpRnMEmr16JkGw2aJoaRBefKTVKwBk08MceE/y2LGFe7rMdK1EoTllZycGqD2dayC8NF+X6enJTGDJr2BimX4cOpC2EdHhXjv7Yk7qNeTNJRLl4RZ1GqyvG6n22pVHsMN3y6XDzsq3hb+F4sJSrz4orwmVZXlePLJ761t9mGCIwZxBH8jCAbF9O2akkIhr2RxNutVsXDrtGmabDa3XUCvJwzjsP4apRLcMk9QKY2i9nuoAY3sfIpeX3lY7TkYhNR8kGPNJfb6ORpODL9eI9tbB6NPqR4k5Zg0GVD2xRgLbpEtbBLJRiiGzjHkBIl0DqhXYDl4hpnhEv67L6MFWww6Pbp9H33Lwq+D1umiFgpidjlzRlQfN3bXNIVAul1fjh+n+t1FXl7L49uoM9gzWLcneLL1AH+1KteIxz0bfrstlOQrXxGq9bnPsZM5i3Xvu2QGS1hOjkZxQCCgEHDv0ekIFXIzsVVVfncLEB4cCNdeXZVjn/oU/N7vyXynpoRQ/7f/LfvpszRvDBhqrkJvk+beOsvas1x0tYN22ysDEol4TQqOHfMqOrbbwuEf7b0ZDHr+l9dek/sGgw87xfkGA7LZHM7cOMF+DS2nESjUcZpgjE7Q2Rmw0p9gXc+jJvoMOn1yzQrL3+3z/4v8bfzpx/nMHyhsbkL6/CS1awPmggUmsl3Gzg9j6hliu/Ko3/qW+xg6sZjnLrl7V3imZYmgcuqUTHEwEI33hRcEh4tFwedazUuac/s/uSW8d3c9uaHdFmbhupvcdJEPcjG+jyocMYj3EFwa5cLamgiO7sZYXpbN5lphpqaEfrkFSV0m0W7LRlxaUrHVJL6onHsm5iXpuT1nynuw3zlD0U6TDvUIRvP4BiaXY2scdKIM9ZdQ0TB7FtgOejSA4tdR03HamSFuX+nR2ICDVpuaOc6TiWFwHHZ8GZy4n36zT1atMTbYxG+aQuD29ryoHE0T4tdqiQaxsADlMks7TULxENVIjmKpRasfJxOc4lT0MGzUNQ25XZXicS/8dHmZRmuC+MI0duWAoNHgIDZLrNYl8NJLXoEf98UFAvLiDUM47NqajGm3Rds4eVKI++joYWTAoVPo/n0GRhNf8nEYykOrhd5vYbx8FUajoqUMBnKdREIWLJ/3aqy0Wp7B/oknhEHcuuWF0gYCXlOgel2o78KCiN4HB4Tm53HUaayFaQbWgMF3TMIXxtgb5Ni4m2CpHkFX+nSCKQa+AS91TzA64uBMnaVjBfm937P5/OdV1tZ0jKF5XqpOcDxqc+EzISipWI5M5Vd/VfjwV77iuYdKJcGfP/ojqQywu+sVzfvd35WxIGOHh4U5ZDKy3MPDwuMVRR5PUeTPbRBkGLK8Lr90rX5H8MGDIwbxPoJbUy6XEyZhmkIj5uaEvlQqQsvm5mTMt78ttORTnxIJbH5ezt/ZEfpZKnkFAONx1wTuZyoSZXC/RX2QYCpfphE+wdXaDAG9S6enYCoaaZ9BqKdxsvUStdOX8Yd9HOxZtHIz5FWTSK3Pyv0xFvXT6L0mDd3HgrJKOxai0s+RUBukE36hEKmUEOd797yeBJGIV+8IsOoWhWaY/R2DJH26hsnN7hhTxgMibvMe1zgdiQhFcXMMrl9HHc1imirq9DyDBzexg2E0pyKi7e6uEOV+X7itm6zmJqS5Jh03ie/558UX0m4LpXOjsAYD0oMDBo0O7XgSLaRR64c5F62LyavdFmbi1l7KZoURuD24HUeYhltqvNuV8dvbcs6xY+K0tqyHyYVmo8V+7Bit6AWSKT/m8FlWSiGSdpXz82ms6QVWt0ZxLqXY+bM60/YqfcePGY5hdhTW/LN06z3CnRZGN061kmZ3VyMcVknkQxw7D+ub4u/f3JQpr60JQdc0mdrYmBBvxxHp3q0PVqnAH/+xJL/X616h32hUlmd+3kt2NwxR0NzIpelpUeRct4/bXdayPIvehxWOSm0cwbsCJ05IAI3roPvsZ8UW6/bRCQa9Qqf1updMbJoiaC4uCs27ds3byK40FgoJXe12FaqZeZTENgnLohYYwh7NY9/34w/4GU/5aHUcAj6Hfmqc9tw5io//LcZn/GysmFjpIMFmnuidV0nt7FNrZPBH4lS1IHt6AF8shrq5Rr8TpqBlMNo2oVCI3Nmz4tVcX/ceeHPzYWbgZFjnW9ZnydrXUaIBZvZvELWqlGw/2uQoAaPtmVzcxtyaJnHBY2NMjQVYa59Du/kCvp0thvwK4YEF2mHSWjot0rqrTg0GXsD+iRNYu0WMeBrdH0EPHEYNuNnVq6sP1bh4HJ7sfJel3ZNYqRyPnbAYG1Wg16OhpamYcfyxAPlIG+3SJVkkt7l4MimMZnzca26wvCzP4toPs1n5u3YNu96k+OoGO0M5fEMKywcJ1Gad6eNglHrUCjbr6wm2C9DvDlGfnqKemSW4s0y5GeeWPk3ASmL3o2xWFToti2svtklNJB4WgHQL9G5syHKsrAg/7fVEuXJrKbnFeV3/g+MIb/vqVwXvXJOoW03l4kX5f2FBlqha9Xo7gDALt1bTyZOC0w8eCDM5flz46BF88OCIQbyPMDwsfgm3J8zY2Bu7YKbTIum5ZvJUSuhcpwM//dNC965ckXNOnpSNtrYmm+5jHxNpD8CwdTaYITMEc2dlQ1ea4NgBGs0MQauMOQgSTZj4nnkCkiluryu8fl02/czQBDO1u+ybFuNqg71ahBVllm8EnuPJ4Ar5ZIBaaorWdoO2EcBXMsirCT7Ruo8aCAhVUhSJ8T3sJDMWKHE6dUCxFmZM7dPNJynt+0n0G/Q3e4zFHCJWUbicW5cpHBbiPz5OTO1xIryJkbFRBkOElQbK4obn++h0vKY/ui7nxmJQKNAodHhwT8caTeHUNebrVXK9HXnY0VFhSK5/IR4nPejwpPUKXP48fOpp6HY5WGlwZTeDr7yPVVNJzyS4rPrRrl6VxczlhDEMD4v9ZngY/vzPZdFiMZnf0hIkkwxqDexgBMMJYHdsUuEufX+GVmCUdvokk+EDevlR/uBOlrPVKjk6lO0A/eHjbOXixI89wd4mBDZr9Go2nZZKq+tjbrTPwLK5c8frQ/Lii6LILS9Lc59Ox4sxaLdFqSkWvcCublc0B8c5LBrZ4GG9JpdBNBpeF1rXp3Dx4huzqxVF5jA8/Eb8/3GBIw3iCN4VeLSm3JshFJJokVde8Uz4U1MinW1swN/7e0LPTpzw7LqplFhPEgkJzrlzx6tSUa0KYRgeFkkvElG5d/M4YbYxW13u2ON8848neO5nFEolmBtp8+ILNju3DV5sXcCvDAgGPkYw30a3OuxHj7M3m+dscpsbW5MU8hGcap1kr8DKvQgzkQBTw5qoPyCE8dDMpGxs8Mmt3+X1xJP4l1dpV02OO8sEgwptItxppnhCX5OX41Y+XFgQ89D2NkQi+JeX8R87BpM5oXauPwC8AoLBoNcoqNnEaXe4NvxLhMdsMkmH3swcy9/pEE+vEfAjL9EwRAPQNNEs3C54nY7EJr/yCvd3HQLtB9jhALrfz8HsJSp718hPj9B8sMdaYArr5R6jTysMB22hsm5Zc8MQm0u7jVGpUS8a2GoAWhaVzAK+E+doOjF8lQ6p/fv0RjN8t3mam0E/ufQmg0YHayJHpBDn1Cnw+33s7MHjFxTCtQM222n6hkLQ6pKcD3NwzYswnp0VxcptcavrXuStS+iDQRE0hoeF17q5DefOybilJblWrycM5exZyfE5d04ez3UhHcGHH44YxHsIvZ5XcuDtbqCxMaGJr7wim29jQ5hFtSqb9sIFr39NoeBVezAMMatPTorvwi297DoD3agTR9NZtWfIT0M7BXvLkgOWVipEatu0tQQX0+ss1gLsGWnCUYWxpI+SlWB2okcsqVNt5yiu1SiqKXIBP9u+Exw0g+yaObLtXYKTE/gO9r1EuVoNymWSgQBPpR6wa23j+CIE/Q61fhCnZ3A7colRDMaNrpe34PoTAgHxiLr1ixoN+c3lgoWCiK+Tk/JyHEeYhaJgxZIYjk50PE1fMQg6PbrpOL2Pf56AXRN1LhSS65VK8rKOHxfJ/949iTluNGjsd1nhNPQt7G4PazvK+axJJzbEy600vqKN1ury+ncNLvzULKOhIs74BDTqKPG4MLlAgP3IPHQ7xFq72KkktcAQ6koFPdwgvXlAPzZE+WYTpXWL8anH2X9+n5aWQPW1mH1c5cSJNK+8IglprUYSf6jP7rdsMkkLXzbB9ZU4zabwo4kJT2MwDK/Ta7fr9XA4eVIifsHTGKJR0UiHh2UJlpfF75VMynVnZuTPLY77UYR3UoNQFOULwP8E+IDfchznX7zp+H8C/PPDry3g/+w4zo13bgYeHDGI9whWV8XmCiK9Xbz49rNLz5yRqJFYzOtV49bNq1SE5u7siGnADfUfDMTxt7/vdcP0+4VAxOPyvdMRx6LraFxZEWLR6w4IKA1WGsNEIwpWQsVoW2TjXXp2kHB9j4o+i2moBIwWGb3JYvg8WqNGKJ7hwJ/loKexGL6ELzJBZLdCWPPTUMeJvFZlig30QQ9CISKNAv6QRqgPdSsPmkXH9DOsFnipcZKxbpmUv81cwkfALZ0RCHhNjR88EKO4WxrDcURMdluCjo56PgjbRhuYDN/6K/p3wvSzGZqXnqYxfZHAaA/MAKai4WTz6LaBsrLi1Y4yTVHNdnYwYhm2tRx3Ny3G2CFpHdA2dXqjccqrdQYTp0n769Bu4wsbrN9qUOyPslp6lrnlvyQdqzFKAzWfw/AFCSU1NoPDaDhEVYN0uEqrq7I+cgGra3C9cYpoc5eZ/e/wvP5ZLEvlxGSHwf1l/r83L6NqKrOzYFkqweAIypDFchXsDY163ev0Wi57EcNjY6KdvvqqrHk+L9/dDOmJCc8Pn0pJ7kOvJzj25JMSmev3S/jrF77gNQI6gr8ZKIriA/5n4PPANvCaoih/6jjO3UeGrQGfdBynqijKTwG/CTz5bszniEG8B+AmBmezQuBrNTH9XL789s7P5YShuFUbMhkh8pYlZoKRkYfmdUAE6709sZAYhkiCt255UVOG4VXo9vuFubjMw7bBsW0IqPh8DuCwXYmgRKDS9pPL2NjZUQJOFM1oc8y/wU47TerkKJs3gvSqDYJOlXAoy3SyQSJuc83+FP3JOab9++zdW6cSTXFxZBvTsLFaEAyphNKjfLd6nLHuAyL2FruR4wQHbYKxBs2xc9zPRHmsuYKiHdovHEdE1uVl4ZButJTbdMPt8Oa+lMM6Uoo9YE5dZ6k3TsUcw7yzyYVPNgiOnmblXoRO8mn8vTZxq0o2lkCvluXcmRkxURUP2L7TYnJ1G0PPsd9J0DBDJI19VioJcokotmPT3SpSSF6kd2cfbfs29eqAdNbHzuSzrG3v00klOZ5XcOxp9hd3GJgW3fFpNn3TKENtivcqjHGf+51xFOBG/xR3dmEw5EPRdLYrCmmnR2UwoN1XH1rC9vYgFtPY2xPC71ZQLRa93JhPfEKOtduCW42G4OTBgRc4NjbmtbUYHpYxhYJoEM2mlOjK5eT4W7Xi/qjBO6hBPAEsO46zCqAoyu8BPws8ZBCO47z0yPiXgXetm8YRg3gPwO2Y5ZqV3PYKbxdCIaFPbuUIy5LruZEpjiORKKGQ0Eq/XwTratVzTlarcqzbFQbhhs7atnzu7no15/x+HX/IYjbSIprWqBQ00rE+zniKSFzBNDt85qfiJOMxXr8dIGFdYzhtET7uMLV1nd1OimCqjX7uJMbmHSpantGgQfTCcaJOk8KOxcZBiYDRwvCptFLH8QdVxnNB+ntTmCfO0nCOEyrfJayW4OwMtbaGNa2jn5gXaucygmxWHDNuN7bh4TdWoc3lxJyzsyMvs98nHDJ4bCaNYV9H6/XRrmcpzc+yGHmCubMVordfoq7nUS9+jqHCbeHGigJjY5hnL7F/SyOr3mLgtIhlJ3nVOEdVt5kc09meWKBQ8tHuR4ltHaCtb2MNQLd7hG3ojT5Ge+wMd3fuc/x4i9GNIq/acfKdFSr7MWbngqgbZarqDOVCkeV+Er1TxKclmc61WBpANjOgUFDoJPLUOxq636t2YpqekuX3e/UEYzHBk1RKNMs7d2S824o7HBbBYmVFxnzsY/J7syka7NqaJLq5FYhv3hTfVzwuPPrs2Xdsu/y4Q1ZRlCuPfP9Nx3F+85HvY8DWI9+3+cHawa8Df/EOzu8NcMQg3gNw69u5CbeNxo9W2TIclg1465ZX48ZNrjt5UiKZgkEJW0ylvMjJfF7urWly7+FhkfYsSzb8F74gJqiFBSEgd+54GsfV0gRT0RI/M3XAij9Mymfid2poPZWFS1H+/j+O8O1vw63no8zGugztXee4vYka61EdGqJux/nyEsR8Y+wpY0ycikLCgslJetEYG/FT6GaP1WUDkwDp/h7PnumyNjFJsRdD3VWZeGIYqzSPb3+fgZOkPn6GijGEoeTJNCokfRbB4RGUgwPxlmqavJy5OfE9jI7iFIuQTOFcuIRVb6PVy9R6fhq3qzT1DLmJOMPtNt17a+ijs9jJFL25U3SrsNqOM/Tkx+jFswR1m+yNb5K8codIJUI40KOpWNyoT3LdnONUdItyE8KOzv3tENOtGunt15lgi0bT5kF7HMbDqD6FRnCEkcwGTGUI+IPkqhVC5TTB42do5ucZrG5Qqo9hMIa+3aTtC1EZJJlNaYz4bfw+k5qZITKUIN9RHoapunl3bsiz22fE7f0MIpg0GsI/79+XcW5pl2DQa3rn+ijOn5fX6kYru11lw2EZu7cnjOajziB+BA2i5DjOD7IdKG91+bccqCifRhjEx9723X9EOGIQ7wEkEhKuurgom85tbfyjwOioqPxuMp0bDpvLibQXCEihNMMQgvDMM8Istra8PjqnTglByGRkHq2WaA79voxzY+THx6HT0akHRlgOjtDOQzLbJWX3KdU0ikr0oc/j7Flot48ROa5jL+vsrXc4H1jj1k6a7WqEXTXDyKzB2tUysbkuvdknic3bWBubLJfTjHIDOxzlwMmzVy3x+N+fxHr9JqdjcL+cY7M/zEorR3wqxY1v+kmG+4xo+7y4coZYyGJ+vM/55pcJLC8LNTx5EnSdwRNPc+uVFpXNexgtgw17mr6hEKuu87j5HfLsMMgGWWlNo59KED1YA2cbLVChpca52hllaBjK1QPubETINDdJdTKECn2OD16h6k+waI4Q7VW4yOuo/jT/x5XHSNXSxBMagXSExM017ICJFcox6Gnsblj0kmFCmSYXfmkegl166wfs6jN8s/Es+y+lSAxHWIiaaKpF/OIk1xo6lt0iFQ2wbiR4+iKoE+MUX1Ef5t41Gm/ssdTtihAQiYiAMBgIA3Ed0RMTsu7nz3slqLJZWXdFkWt89rMe7rkBYc2m4J/bXhQEj44ilt5R2AYmHvk+Duy+eZCiKGeB3wJ+ynGc8rs1mSMG8R7B1JRI727XzL9Ok3a3jIYLvZ6EHDYaoh389E97QThTU5JU7Pbx6fVEenT77LgtGXZ2hHkEg2JiiETkeLXqtYL0++HmgxDdbkiqee71Uestlrf8pMcjKIpKIJtF3QnTDecYWr1JrFbjpKZR0KeZGfQpcIlkboAabaCfOc7z/XGs7avg12lqSYYnFTaaafjyFu3wArHBJhetl9myEjR7PfQH6zyIfIx7qWOknDwXsrfxra+xXzD5jzxNzikS+8wTPPZYltBr3+b563FeWJnmRHOFKxvjxNQO0aDFujnCdvxX+eXRFwm0qiT1Js1SgKnqKxyPHHCgjaDs7TA8epHx6TGWSkEMxU+/bWBaEN+4TdvcJv7YPIGPP0Gq2MXaNvm27ykq3QDmWo8L53bZ3nGwRj5GveQQNEzi6i4L/UVOtm8Rz+cIhp+jN3uGl14K81pkkluDAOXygJzRJnpmHF+txHy/zblomY3ULHVTJ55wOHhQY3wkS6MRfuhPmp8XhuDiQigk6+12LHQL1Lo9l77yFfl++bLgpGmKMBGNyrV6PcGJR0thPPGEVzDS7SDXbnv90z/K8A5nUr8GLCiKMgPsAL8C/P1HByiKMgn8IfAPHMd58I7d+S3giEG8h+Dae98JGAwkC7vbFQKwuSlM4uMf98Z88pMi4bmJdN/5jle73y1N9OlPCyOp12Wc2wcol5PozpkZ6e6ZTArD2Frq0Fwps+d0sE0/B80O0ckcNxoxTp08T2j5FnUzxLY6Riqnka0VmertYZnjhEbGWV1sYgy6mGaY1WKUUM3BTEG9oxGodJjxV4hoFeybt6iU9gieOIUTCFAL5xiqrtCYOMPBrQ38oVUsx2EvMMNBM0I1lKG2NM5r3QRPa7N87es9SoMuu62z3HcmOaYucda4Q2polKvqRVaiTU4Vv4zZLWN3a3RpULd9lEbHaaZHSOyuUmuO0zID7FzZxSpuEQoWSAU0fKpCv9wgPQWru2n2Eil6vSiq2WZo7wrzmUW0ygHtmkFn+AJDwQrRqgL2CMqIhjOcpfgXVyiciLBay7BajFB3gsSzHarVMHdLEVLj02TGLIq37zKc6JNSFFZ2gvR9AXz7CkNDsvaRiNe8zk22DIeF4e/uip+gXH7YvZTlZTERnT8vv42NCY64fdNffVXW3C3O60I0Kgzl7FmJYCqVxOzU7cpnLvf983mO4O2D4ziWoij/FPgKEub6rx3HuaMoyj85PP6vgP8KyAD/iyJc3PohZqu/NhwxiA8RuB08AwEv/D+fl2O5nPho3Xp5IJ/PPOMlRv3CL4iEGAhIc7ViUcZnMiJBBoNCQCxLCMH4OPzMz0hVz7U1ISyN/Ta+gJ9Cx08+5zBotZlMB7m1kUA5PUQo1GV/v4zW2CNb3mdIr1BoZUnUVvnqV8eJRHQqazDwOazU0vgrGeKVKppfZUzbYquQwTcxQiMTxdm5xYlyif3Is4ylFQbtPt1aD812KPnypNQDCo0wLdPPyChMxevs13X+/KqGv7yH0bYIDjrUfcd4OfwJYhNDZJQaAzvKtpEn3U/Rnj1NNxlg7WoAf3mHwa5KKzSJr92ncLPKXrFNrttiZrBKoN2nPVCwEmEypTUubP0J31r7NDV/jIFm8bj/JpF+jc37Hc5r60QsG2NP5yA0QkNJUyVMe09DKSgkpxJU7tR5fXMOp98joqm0WhrbVop6KUisD3oEkjp0FzdoKVGSPZv4iTE2i0HCYSHI9boQbDfr2c0rHAxkzY8d80piuQ34IhERGNyopYkJ0Q6aTWEYoZAIDZcueVqEC25p7m99S84bGxN8ee01iY46agz0NwfHcb4MfPlNv/2rR/7/x8A/fi/mcsQgPiRQqYjGMBjId7fOjWsKcPvyPGq6siwvYikYFMnSjXqKx0WjcOvqXLwoG/5znxPp8PHHhcG4rZy3t0WDaG4oOKoPFAsVG8uGSHDwsKFM24hxQi9ianvMBAs49SatSJD93imuXTGoJ6YJjQdo7ZRpbVRYtXM8rm2RS4Z4PvS3CJeLqN0g01YVfFG2C33Ghu9R2ZxkMLfAp1Ib+Fq3OQhO0DRDHDgZLMNgp6ETtMDpbaOUity1FjCAeZYwjJe5Vz3LUjRLJxPnM8OLjFsl9MvniI2MUb6zT70dYs5eoWIkmHZepO8EUOafI9stMHsxhPEVk7YvQc2fQJvUqR0E6NZgdlYlsn0XW4sw1t+gbivMGncZSRbRnD5tkuBPsqHNMrb6IqWmhq5BxG4y/JMzBJwcG3c7lNoqu9UAlu0naIhPYH2xy0hdJ5KbBaOHjUEi2MMZVlhfFw3BTdA2DPnb3pbfcjnRBNxM/UJBiLmb/+L3i5BRqYjJSNPkni5DODiQ6z1q0nRBVb22HiDnNpteC4+PIhyV2jiC9w1sWwryuaYDyxKpvtEQJ2MmIyGI5855DkPDEKlue1tCF0MhYSqRiBxbXRUzw8yMREEpihAIt9PnvXvCGC5fFq3j5k2JeFKCfkJ2GxuNdtMkGxuQmwwzYh8m7+k6ZjRJN2FT0VR2kjl8A5N6E7RElLVmitCySet+g64VpBdMkBi5zMpWlc6pEeyWTb64gTEV5PQxhf42jCkr1GeG0IaL6Bpkz/dp3n8RTmZJ3Trga71LvNqaxjSjTPYXafeh7Isxr94GR+WkskIwoJNTfPhOPsnZYxEG9mP4jSpbmw5+rYAdjLJnTdLs++n7MrSVMK17HYKBAElfjeClHAcbLardLr1aD8cJEpwdZ1gNslmP4xQrbDJMoF9ky8yidxROhLcJZWNsl6Gi+ZnUFRpdHQIBgmWDdnyeREpnEE4wCICjeC2wfT7otSxsfIRTAQZOCC1uoTl1VMVhaEjhwQMh8m7DPbePg98v+PCzP+t1gYtGPSHiqafEH9VsipbgmpdccMd9P+ezqgrj6PUEH92GekeZ1D9+cMQgPgTgtjx2SySDhCieOiVE/eBANAI3NwwkMqVWEwnRrRd39aqMO3fOK6Fw7pyc993vyl+jIWOuXRNGlMvJxp+cPOymeTJCe89CM9qcmDWZvDTCyHyQ2qETPJTyoWaydOMzlBtrxBslUprBtn+CWmqe4ppK0GiS6rcI6j76HQVzv4Sl+jB9EeaeHmH42k2SRpOQ0qLzxFNERg1ODHUxuquoTzyOZaYoDIbY3td4beoJDiIJbt32MTICt9rzzPsqzNrLRGmz7Zsi7OujjeQ5N7dJcO/P2CnFCEdVir4g1V6UaGyMbj7MA/MJOnULX0BjJFSjt7GHNT3G+uIeLf04JRwyyR5rwQy9wh7X715itZbBZ/fY7uTop5P8pH6LaMVgrZVjXx2lVJrAGBqnVM3zHyL/kHy0y34zTMK2OHtDo+2Xdzs0JAx4dVWIbbMJ+P3E1QGW5VDpBCjvKezkJhkaVfD5hOGnUmJCdHMa3KqrbtO6ZNKLThodFe0wl5O/U6e8JLfpadEWfT4vC1/7AdThwgURQJpNr0xWPP6Oov0RfADgiEF8CMDvF8nfjUpxzQou8R4aEmLg5lmA17nOskQqBWEygYAQCzdZr9kUbaTf95oRud0419bg939fmMgLL7jJyj4gzblzac5+RhzZ166JTbvRgL4doTMyi3VthXY4RRWdW6kz3OifoF7QiPp7aL0OXV+YtNIgHFJI9Is0cvP0fWFOfiLKQfDjlHdWCURGiSWDjCU3CY4OEXzwAKJgGCrr5ii1egV97z7+DZW0M83w8BCGEWMz8Dhx7nOh9jw2fdaCJ7g0pxFt7fLAd5qafwKr46NXaKKP5amNfIFnst9i7tWrbERHqcRGaKghdswhFhIBOmdP8c0bWRoOfPx8ixYmL2/vUlwPMDlhUxoME2oNcOJxlgaXuaR26JtBCuFREkaJg/AUD7ZyZAN1wkMJBobGg32drRdjDPziB3ALMeq6JDmOj8PZZwMsXVsgvL/GdLJKdH4YI58nk5H1tiwxG21syF86LRrhYOAx/kJBfAOZjOBDsyk1usbflHt74oTgU68nuPbmPJ1OR5iXYXj5NB//uPyu6x6OHcGPFxwxiA8BKIpIbNeueYRhbs6T8CxLNv+j/odsVojGo9nTbtJUNCrE49o1qe/vNmwpFIQpjI3JNfp9YRhrayIduqYLt0PYiRNuaQchKk8/LX6S+43jTDybYzDos7ITZqOaIJaC5mG/HMuxULJhugWTIaVEOB1kY+Yy6bTK2hpYsSmmx2sM1ncYGe/Qnz/NbhViTpXMfgl/UCfW7VPuOiw1ptns62C0Wb1eJzGRoNiM40w/zlLyBNndm8wpPaaTNbbsE2zXc6ihIIVagFYryKWkwrGPB1la+yky6WN0X9liPtGCjkWj0sLYbbKdGGKrGCIYhO1+iPv3oZlM0+h28Q/aqI6NFYlTrcHLgxNExh30XptqO0ht7iKZSzMMMcDaM7CbFVQzjBaN4U+EWV6WdXIjjNxEcLdnuarGaTbOEkjbBCo+gopXZWRsTNbk2WdlbL8vQsCxY8IUWi25rtvJ0K3Y6nYsfDOOZbNvjX+9ngQ1uPe9elXmNznp9TL5qMORiekdBEVRfhH4fwEngSccx7nyfcb9wKqGHyVwK2q6zcru35fwQlUV5Dx/XjZ5uSxSYijkJcYtLYnEl8/Lhq5WhaGcOSO+BreDWColzGZ9XaTQVMqrMnHunFzL7YEzMiJMQdO8YnDZrGgSw8Nw8mSajQ1YbkPU9KTSp58K8OB5nfJOh7EZm2GfRSn+FAvnhGrduwcXLmgwd5HwqRyvPyjjf9khnVHojP9dMsUD4iGT7Xadb24msfUAphak1XFoFhW26l5L6lYiRvbJp4inDQoRFefuHdrVDt2iQ7vWwh/wscccF4ZVEkk4c2aePx2fJXbjG1SNLJbjR80NSOzdYTSVo1APUS4fOoXtIMG8n/1+lGrTh+aDkL+H2XX40u5FPvUZP0vLKrEAOBXw+VVKgRGCsTS3H6i0DT/+qoLbLsNtwTk9LRL+5qYQYymcp1Cv+/DVPS3SbYh35oy881/7NdEsV1a8vAjHER/S8rIIFo4jGt+PGo5aq3m+DvC0y8nJdwKzj+CDDO+XBnEb+Hngf/t+A95mVcOPFLiNWkCIgkskIhEh5GtrYi7Sdfl9akpCW90ol0BACEy/L4zlyhW5zva2EKKREcmduH1bzA2mKUS/1/MysCcnvZLjL74o9zUMMU8NBjKu0xGntq7L8dlZmftXvgLXriukJkc4PVXl1FiDzepjjE1mCYflGqurhw1sBgoPupPsk+fpcxZlK0CxovO1pYQUifPdw+rZPCgECIZU8uEajVbooQ2+VjvsCDruIxIJYZpgzJ/mu99t4O/WUHWNvi9Ltx3l+ee95nXz0yajfYuG349yC7o9H0ZHYX7WIOuE2D3MaZ2YAEVRWV5WH+Yj+PwBYhGTWlPhzl0FTZPfIxExIdm2yvpW2gC6NAAAEMdJREFUiK7ltd7s9+W9Dw97phrXFLi8LO+uVPIcw6bpNd5JpUSjy2aF6DuOmJi2tmTs2bMyJpPx6oG9VVTSo+A23gNZO5dxPSohH2VPfy8caRDvIDiOcw9AeXOQ9Rvhh1Y1/CjDm00CliW261zOK3a6tOTVZHK7e7mObtOUa7i1mdwumJ/5jDABt19Evy8RMqoqhH97W4jdU0+J5FssyjXSaTnW6XhVuF3naSQiTOXCBbleKqWSyWT45X+U4etfF23ItW8bhnc/04RSI0hXhf2yJ/lubUFEm2Fu9Bab5SBq28HUg/jjYdIZz1laKAhxzWYPc0aGA4yczlEu5+ibYnq7fl2I5i/9kjxz2/ZjhWLozTqZbIKxZAejpfMdX5hLJ8QZ64YVm6ZoUMPDsLVuMqbs0WsMSGgKXTPJ9LE4qk996DAGr2tqpSJM1tUADcM77hL0VsvrUbS9LbWzFha8/g1vDilVFK9M95t/fzvhp26HQreQZDIpGkg6LYzLbc7X6739SsRH8OGGD7IP4keqaqgoym8AvwEw+RHUfW3b6+blOGImundP/h8ZkTyHR6VHXfeSqBIJMUv5/Tys76PrXnmFQEDyIvp9T9tw7diJhEjq58+L5rGxIfdut4XhpNNyLbc529/9u2IiaTblukND0gxpdlZ8Iu22mEkWF+U+o6MiSYMQsFBIxtTMIGvWBUpOh1rbz0D1S8mPoDAkt/xIJiPXc6XnuTl5zrt3hZFEIjKH7W0Z3+0q///2zvan7euK4+faxpgnP4CNcSDEYCAhNQk0JCVN1Vbq1KSRqnYvKi1qNWlvpkndHzBp/8WmaVNeTOpe7VWrNuqkTlOrturjStMmTQMkTRogEBzA+AEDfrp78c3ZNcQEkxgw5HwkhGz/fvd3rxPOueece86h8BsDZLvyPT0ZvUuRRA0tdg3SucYqqq3FWubmiD75BPcEAph79NoC2arTtGxzka8lS65MnFqcVqprbvh/S09uLZFM4tncebSjA2vt6cH4CwsQ6m636RTo85k+0PX1D1eqZSMmJlYnX87O4t+zqwvJcVNTmI/Pt7lik3udMpfaqCi2TEEopf5DRMW6zv5Ra/1uKUMUeW/df4Z7JXPPExENDg7u0X+u9eEA8swMBNHICIRXWxuyZ8fG8Ed98yaES1cXBBtX/1xYMKdoPB64iNJpKILubgjmmhrsIrlOk1IQcH4/5vDzz7Ao6upw3/S0OSc/P28a1be0IMBNBAXS3W36/Rw6hPpQ3d0QiJ2dCHwrhWvb2/H54iJRctlGqt5JlCFyVEGQ8mmsxkasfWYG73MvDbaWmpog6JQySpGvsbtryfrsSarK5ai9iC/F6cScxsZMk6ajh1L000QD5fNEs/MW8jrS1N6UogVrA929CyXQ0wOr6upVfBc1NUQvvkh0+jSef/gwPovH8T1PTECJcCfVTAZrdzqhkMvdpGdxcfUmwuEwHQjt9tXHqIXHgy1TEFrrXzziECVVNRQMfX34o/7xR3PO3WqFwL5505QD1xoCbmgIQqahAYqCE53sdiiLY8cgsFZWzDMaGiDgIxHTYyIYNEHtzz4zxd54rJUVBMJTKQhn3skTmeA196ZIJs19Nht2rZkMqt/W1EDRPPUUSkGMjmJ9fj/GYd99IoH3JyeJXn4ZiufLL4k+/BBrrKvDvDlgOzqKe5aXYSmxFRZPWimXwzO53HUohLV/9BG+o6NHIfSvT9RTd+3PlHK6KbFURY2WOP37Mz91hGEJ2O8dZ52aMrkJJ09CEebzpq3F3BzRhQvGz59KYX5Op8lj8HpxkujZZzeOKWyGpib8H6mtxfeTTGIjIWyMWBDbz4ZVDYXVcFG+5mYIRBb4XKbZ5TIChdtHcoKVzwfh5HRiJ5lKYYxEAoqgtRVKwG5H8HNiAgLE48FOmmv8NDTgGfX1xlUyNwehEwphHvE4rBOHA88NBuFGisUgjLlkRGenydH44QcowI4OCE6Px5SQiEbxB5rPY13cQvr2bQTGn3jCuE6CQSi4+XnMKxqFgnnjDfju2eK5fBn3z85CQA8OQrB/9x1cVqy4+FRTQ4uLevdVU9X0NVpx2+in2j5y1zWQ34/5jo9D2bL10tiIsQMBKPKDBzGX6WkoHZcL1965g7Xa7Zg3n0DjEt7lVBCBACwGdukdPGjKeguPJzt1zPWXRPRnIvIR0ftKqe+01qeVUvsIx1nPrlfVcCfmu9toaoKr5to1CE6fD8KFA6VEcKsUVpc9cgSCfnbW5Fc4nRCK3KQoFsP7n38O4TkwYE6zRCJQAgMD2G0nEtgRP/88MrTTaQg/raE4olE8n1tlhsPG/bOygrmOj5td98gI3q+rQ9B2/340OGKBSYQ5ZrMQ8Ow2Gh01geCGBqxvZsbsxE+cMJ3Y+Ez/7CwUlNOJud++DaEZCGCu0Sh+WyzGpRUK2SjZHqb56oO0krFQOmelrqBxzYyO4jq/Hz+pFL4HiwXKtq0NCre21lhdLhc+c7lwHQe1mXJWByaCMg+FTJ2vB58hEQoRC6KMaK3fIaJ3irw/RURnC17fV9VQKA3uusn9J5aWIIzv3jWBTk6II4LA4yZGN26srgobCOC9QAD3xWJQAsHg6pNUTid2+JyTAcEJ4XjpEgS0UlBY16/jZ2wMc+KWrOw2SSSgIHicbBZWwPIyduIdHUSvvQZXz8QE/PuhENFbbyGw6nRi7bEYnjM4CAHLrTk9HuyQXS4I5/FxvOY4hs2G9+x2fHf5PMblE0fhMObOjXjOnIEyvXChilIpc3qLCNZILIZx5uehwLmmFiuESAT353KYB38vnZ3YxWttjr3G47CmtqownigGgalkF5PwiFRVGSFfW4udN8cNCvsRr6W62hy7JIIQ5Gzt7783GdZffIG8Ca4TFQ7jJNL8PO5rbsZOn4vBsQB0Ok0P7XQawn52Fjv1GzfgcunshJKYn4cQDwRMJVLOC3C58Ay/H9ZKPG6yhdNpCFWOcUxN4XckYlxNTifWls9jPBaMhYFhnw9jpVJ4rRTuuXULyWnZLMZlxXLuHL7zkREohVwO8Z+BAcxhdBQKw+/H9+XxYL7s5guFTDZ7OIw4UD6PsU+fNtacZDBXFmJBCLseh8MUZ3sQnHwViZjkvKNHcRyVCII+GIQgXFmBgO/ogJAbGoJg53pPFotpMnPnDu7lE1FcO0opzG3/frihfD4I9mPH4OqZmDBuotpa88fIdaMyGVgSvD62cqqrIVxDIYzLO/v2dpNY2NmJdYbDxn3jdsMKunsXllJrK2IguRzGz+fx2aefomLq0JDpwcDurt5eKILhYXyX3DLWbodC6OlBADgaxfcUCJjyJcEgrI1IBJaE32+OngrCdiIKQrgPmw3CeWHB9I5QCtYDFwrs7oZALvRZE0FAFladJYIwbWvDvePjENYDAxCOmQyEZjoNIdneDmvA4YCgn5zENdzDYG4OrjCXy3TCY2uIW6RevGh23S0txvppa4Mwn5qCu4ZPTtXU3J9ctm8f0euvo/z58DDeW1w0/TXSaQj53l6T4by0hHnkclCmVivGHR7Gd9jUhPk8/TQSEhMJKCVWHIzFYtrF2u34zvr7V7sEBWE7EAUhFMVqvf+c/XPPGfcIEYT1RglTWsN1dPgwfhNBAHL9p3Ta1Hbq6cFOvrDMdEcH0ZtvGoE5N4dTRNks7mtthSJxOPBZMgnB7/Wabnl8aujUKezaLRZYKKdO4RkzM1Aaa5UElyd59VUogrffxns1NVAgHg/myl3dslmsCWU18EyXi+jsWSgttxvK9JlnoDDWK48djULZsNVgt2PNoiAqF3ExCY89wSAE5K1bUCADAxsrCKWMhZBIQDCnUhCs+/dDMRw8aHpnF8PlQvBaa6J334WAttkwLieh2e1QCLkc3FDHj0OgXrmC3+k0BPT0tOnVzDgcJv9iPUIhohdeQNylpgZKsqcHc/v4Y4xRUwMlMTKy2opqaYGS6evDPB/nxjp7EcmkFgTCzvvQIQj0zZx0CYdR4yedRhyiqwuuoEjElI0opXSE1hDC/f0Q8oEAdu9cWLCtzWSD9/fjvaNHoVxiMaL33zdd0CYmjN+fS4uMjJg4Q2MjntXcbI7wHjgA91YwiDG8XlMI0eXCHG02KE0+fWWz4fO+PnOqaSM8HpMUWFVlSpkIwnYjCkLYNJs9BunzoblMNIojqrkcdv4tLcZdVQrsmhofh9XQ3GySzcJhjKU1TkJxmY8TJyBsx8Yg2N1uWCtffw23jceDMTlT2mqFhXT8OObd34/XiQTub2tbXcmU+2skElB6Kyt47vHjcHlls5gfK5C1ZDJQTDMzUELhMFxPQ0N4bjoN95wEqYWdQBSEsC3U15vci8VFBMDHxlD+orERJ51KObrZ22tcS14v4ghrG+AcOYIde6EiSyZN3oDFgiA754pMTUFAc06H1QqFwZVxC4Pwa+FmTt9+iznZbCiM6PGUVtDuyhU82+OBdfPVV7B4HA5YasLuQFxMglAGLBa4Ta5ehcvF7YZlcekSdvsbYbXC99/T8+Dr1lo5nJzX3AwLJps1lWYfFQ54c/nvUnslaA2Xm9eL+XJ8JpksbwkNQXhYREEI204qBTcPWwwez/09tcsNH02dnIQw5mY6RFAa166Zsh1LS7BUNkMpzXjWUhjAr642wc71gvVC5SIWhCCUCbvdFNezWOBasds33+OAO9gVZoyvB7dY7e1dnTVNBNfTyZOIbeTzJki9HfT1IYCvFJ594MD6x18FYbsRBSFsO/X18K+PjkIwWq2olbSZ4Hc8jgQ0bp/a319aIHc9C6WurrjVsLSEYPbysikdUs5aRT4fYg7JpOnFIbWQdh9iQQhCGenshMDlpkSbqS2kNYLCNpvpiX3xIhL5ylmjKJ1GyXMueHj5MuIM3MuiXHDfakGoNLagcaEglEZ9PVw5mxXqmQx29Hx6yW43pTXKSSyG53CLVa8X9ZsEYS0cP9roZ7chCkLYdVRVQamkUnidyTxckHgj1rp6tN6aXtCCUKnIf3dh16EUcg2yWZx+iseRi1DuEticyxCJIG9jfn51iQ5BICrdetiNFoTEIIRdidOJ7OyVla2rb8TB86kpuJq83u073SQIlYAoCGHXYrNtfc6AzYZsa0F4ELvROigFcTEJgiAIRREFIQiCIBRFXEyCIAiPiLiYBEEQhKKU8xSTUuqMUmpUKXVdKfWHIp8rpdSf7n1+SSn1ZLnXw4iCEARBqBCUUlYi+gsRvUREh4nonFLq8JrLXiKi7ns/vyWiv27VfERBCIIgVA4niOi61vqG1jpNRP8kolfWXPMKEf1Dgy+JyK2UCmzFZPZkDGJ4eHhWKXVrh6fhJaLZHZ5Dudgra5F1VB47vZYDjzrA1avDHwwOKm+JlzuUUt8UvD6vtT5f8LqViCYKXk8S0VNrxih2TSsRTZc4h5LZkwpCa+3b6Tkopb7RWg/u9DzKwV5Zi6yj8tgLa9FanynjcMVq+a6NXpRyTVkQF5MgCELlMElE+wtetxHR1ENcUxZEQQiCIFQO/yWibqVUh1LKTkS/IqL31lzzHhH9+t5ppiEiimmty+5eItqjLqYK4fzGl+wa9spaZB2Vx15ayyOjtc4qpX5PRB8QkZWI/q61vqKU+t29z/9GRP8iorNEdJ2IUkT0m62aj9J7NcNDEARBeCTExSQIgiAURRSEIAiCUBRREIIgCEJRREEIgiAIRREFIQiCIBRFFIQgCIJQFFEQgiAIQlH+B3/GU086zJyfAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from sklearn.datasets import make_circles\n", "import numpy as np\n", "import pandas as pd\n", "\n", "X, y = make_circles(n_samples=30_000, random_state=0, noise=0.09)\n", "\n", "pd.DataFrame({0: X[:, 0], 1: X[:, 1], \"class\": y}).sample(4_000).plot.scatter(\n", " x=0, y=1, alpha=0.2, c=\"class\", cmap=\"bwr\"\n", ");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Add random dimensions" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:14.285682Z", "iopub.status.busy": "2022-07-27T19:22:14.285132Z", "iopub.status.idle": "2022-07-27T19:22:14.294403Z", "shell.execute_reply": "2022-07-27T19:22:14.293673Z" } }, "outputs": [ { "data": { "text/plain": [ "(30000, 6)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.utils import check_random_state\n", "\n", "rng = check_random_state(42)\n", "random_feats = rng.uniform(-1, 1, size=(X.shape[0], 4))\n", "X = np.hstack((X, random_feats))\n", "X.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Split and scale data" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:14.297017Z", "iopub.status.busy": "2022-07-27T19:22:14.296702Z", "iopub.status.idle": "2022-07-27T19:22:14.315168Z", "shell.execute_reply": "2022-07-27T19:22:14.314632Z" } }, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=5_000, random_state=42)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:14.318368Z", "iopub.status.busy": "2022-07-27T19:22:14.317969Z", "iopub.status.idle": "2022-07-27T19:22:14.327670Z", "shell.execute_reply": "2022-07-27T19:22:14.326948Z" } }, "outputs": [], "source": [ "from sklearn.preprocessing import StandardScaler\n", "from sklearn.model_selection import train_test_split\n", "scaler = StandardScaler().fit(X_train)\n", "\n", "X_train = scaler.transform(X_train)\n", "X_test = scaler.transform(X_test)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:14.330824Z", "iopub.status.busy": "2022-07-27T19:22:14.330303Z", "iopub.status.idle": "2022-07-27T19:22:14.335223Z", "shell.execute_reply": "2022-07-27T19:22:14.334498Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dataset = train\n", "shape = (25000, 6)\n", "bytes = 1.14 MiB\n", "--------------------\n", "dataset = test\n", "shape = (5000, 6)\n", "bytes = 234.38 kiB\n", "--------------------\n" ] } ], "source": [ "from dask.utils import format_bytes\n", "\n", "for name, X in [(\"train\", X_train), (\"test\", X_test)]:\n", " print(\"dataset =\", name)\n", " print(\"shape =\", X.shape)\n", " print(\"bytes =\", format_bytes(X.nbytes))\n", " print(\"-\" * 20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we have our train and test sets." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create model and search space" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's use Scikit-learn's MLPClassifier as our model (for convenience). Let's use this model with 24 neurons and tune some of the other basic hyperparameters.\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:14.338895Z", "iopub.status.busy": "2022-07-27T19:22:14.338476Z", "iopub.status.idle": "2022-07-27T19:22:14.347655Z", "shell.execute_reply": "2022-07-27T19:22:14.346573Z" } }, "outputs": [], "source": [ "import numpy as np\n", "from sklearn.neural_network import MLPClassifier\n", "\n", "model = MLPClassifier()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Deep learning libraries can be used as well. In particular, [PyTorch]'s Scikit-Learn wrapper [Skorch] works well with `HyperbandSearchCV`.\n", "\n", "[PyTorch]:https://pytorch.org/\n", "[Skorch]:https://skorch.readthedocs.io/en/stable/" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:14.350360Z", "iopub.status.busy": "2022-07-27T19:22:14.349959Z", "iopub.status.idle": "2022-07-27T19:22:14.355054Z", "shell.execute_reply": "2022-07-27T19:22:14.354304Z" } }, "outputs": [], "source": [ "params = {\n", " \"hidden_layer_sizes\": [\n", " (24, ),\n", " (12, 12),\n", " (6, 6, 6, 6),\n", " (4, 4, 4, 4, 4, 4),\n", " (12, 6, 3, 3),\n", " ],\n", " \"activation\": [\"relu\", \"logistic\", \"tanh\"],\n", " \"alpha\": np.logspace(-6, -3, num=1000), # cnts\n", " \"batch_size\": [16, 32, 64, 128, 256, 512],\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Hyperparameter optimization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`HyperbandSearchCV` is Dask-ML's meta-estimator to find the best hyperparameters. It can be used as an alternative to `RandomizedSearchCV` to find similar hyper-parameters in less time by not wasting time on hyper-parameters that are not promising. Specifically, it is almost guaranteed that it will find high performing models with minimal training.\n", "\n", "This section will focus on\n", "\n", "1. Understanding the input parameters to `HyperbandSearchCV`\n", "2. Using `HyperbandSearchCV` to find the best hyperparameters\n", "3. Seeing other use cases of `HyperbandSearchCV`" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:14.357826Z", "iopub.status.busy": "2022-07-27T19:22:14.357275Z", "iopub.status.idle": "2022-07-27T19:22:14.582471Z", "shell.execute_reply": "2022-07-27T19:22:14.581842Z" } }, "outputs": [], "source": [ "from dask_ml.model_selection import HyperbandSearchCV" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Determining input parameters" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A rule-of-thumb to determine `HyperbandSearchCV`'s input parameters requires knowing:\n", "\n", "1. the number of examples the longest trained model will see\n", "2. the number of hyperparameters to evaluate" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's write down what these should be for this example:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:14.586032Z", "iopub.status.busy": "2022-07-27T19:22:14.585600Z", "iopub.status.idle": "2022-07-27T19:22:14.591185Z", "shell.execute_reply": "2022-07-27T19:22:14.590077Z" } }, "outputs": [], "source": [ "# For quick response\n", "n_examples = 4 * len(X_train)\n", "n_params = 8\n", "\n", "# In practice, HyperbandSearchCV is most useful for longer searches\n", "# n_examples = 15 * len(X_train)\n", "# n_params = 15" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this, models that are trained the longest will see `n_examples` examples. This is how much data is required, normally set be the problem difficulty. Simple problems may only need 10 passes through the dataset; more complex problems may need 100 passes through the dataset.\n", "\n", "There will be `n_params` parameters sampled so `n_params` models will be evaluated. Models with low scores will be terminated before they see `n_examples` examples. This helps perserve computation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How can we use these values to determine the inputs for `HyperbandSearchCV`?" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:14.594072Z", "iopub.status.busy": "2022-07-27T19:22:14.593568Z", "iopub.status.idle": "2022-07-27T19:22:14.598406Z", "shell.execute_reply": "2022-07-27T19:22:14.597803Z" } }, "outputs": [ { "data": { "text/plain": [ "(8, 12500)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "max_iter = n_params # number of times partial_fit will be called\n", "chunks = n_examples // n_params # number of examples each call sees\n", "\n", "max_iter, chunks" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This means that the longest trained estimator will see about `n_examples` examples (specifically `n_params * (n_examples // n_params`)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Applying input parameters" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's create a Dask array with this chunk size:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:14.601794Z", "iopub.status.busy": "2022-07-27T19:22:14.601388Z", "iopub.status.idle": "2022-07-27T19:22:14.613415Z", "shell.execute_reply": "2022-07-27T19:22:14.612802Z" } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Array Chunk
Bytes 1.14 MiB 585.94 kiB
Shape (25000, 6) (12500, 6)
Count 2 Tasks 2 Chunks
Type float64 numpy.ndarray
\n", "
\n", " \n", "\n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", "\n", " \n", " 6\n", " 25000\n", "\n", "
" ], "text/plain": [ "dask.array" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import dask.array as da\n", "X_train2 = da.from_array(X_train, chunks=chunks)\n", "y_train2 = da.from_array(y_train, chunks=chunks)\n", "X_train2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each `partial_fit` call will receive one chunk." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That means the number of exmaples in each chunk should be (about) the same, and `n_examples` and `n_params` should be chosen to make that happen. (e.g., with 100 examples, shoot for chunks with `(33, 33, 34)` examples not `(48, 48, 4)` examples)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's use `max_iter` to create our `HyperbandSearchCV` object:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:14.616026Z", "iopub.status.busy": "2022-07-27T19:22:14.615693Z", "iopub.status.idle": "2022-07-27T19:22:14.619309Z", "shell.execute_reply": "2022-07-27T19:22:14.618734Z" } }, "outputs": [], "source": [ "search = HyperbandSearchCV(\n", " model,\n", " params,\n", " max_iter=max_iter,\n", " patience=True,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## How much computation will be performed?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It isn't clear how to determine how much computation is done from `max_iter` and `chunks`. Luckily, `HyperbandSearchCV` has a `metadata` attribute to determine this beforehand:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:14.621873Z", "iopub.status.busy": "2022-07-27T19:22:14.621475Z", "iopub.status.idle": "2022-07-27T19:22:14.626591Z", "shell.execute_reply": "2022-07-27T19:22:14.626005Z" } }, "outputs": [ { "data": { "text/plain": [ "26" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "search.metadata[\"partial_fit_calls\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This shows how many `partial_fit` calls will be performed in the computation. `metadata` also includes information on the number of models created." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So far, all that's been done is getting the search ready for computation (and seeing how much computation will be performed). So far, all the computation has been quick and easy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Performing the computation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, let's do the model selection search and find the best hyperparameters. This is the real core of this notebook. This computation will be take place on all the hardware Dask has available.\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:14.629819Z", "iopub.status.busy": "2022-07-27T19:22:14.629561Z", "iopub.status.idle": "2022-07-27T19:22:18.168437Z", "shell.execute_reply": "2022-07-27T19:22:18.160867Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/share/miniconda3/envs/dask-examples/lib/python3.9/site-packages/dask_ml/model_selection/_incremental.py:641: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n", " cv_results = {k: np.array(v) for k, v in cv_results.items()}\n", "/usr/share/miniconda3/envs/dask-examples/lib/python3.9/site-packages/dask_ml/model_selection/_incremental.py:641: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n", " cv_results = {k: np.array(v) for k, v in cv_results.items()}\n", "/usr/share/miniconda3/envs/dask-examples/lib/python3.9/site-packages/dask_ml/model_selection/_hyperband.py:455: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n", " cv_results = {k: np.array(v) for k, v in cv_results.items()}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 3.54 s, sys: 661 ms, total: 4.2 s\n", "Wall time: 3.42 s\n" ] }, { "data": { "text/plain": [ "HyperbandSearchCV(estimator=MLPClassifier(), max_iter=8,\n", " parameters={'activation': ['relu', 'logistic', 'tanh'],\n", " 'alpha': array([1.00000000e-06, 1.00693863e-06, 1.01392541e-06, 1.02096066e-06,\n", " 1.02804473e-06, 1.03517796e-06, 1.04236067e-06, 1.04959323e-06,\n", " 1.05687597e-06, 1.06420924e-06, 1.07159340e-06, 1.07902879e-06,\n", " 1.08651577e-06, 1.09405471e-06, 1.10164595e-06, 1.1...\n", " 9.01477631e-04, 9.07732653e-04, 9.14031075e-04, 9.20373200e-04,\n", " 9.26759330e-04, 9.33189772e-04, 9.39664831e-04, 9.46184819e-04,\n", " 9.52750047e-04, 9.59360829e-04, 9.66017480e-04, 9.72720319e-04,\n", " 9.79469667e-04, 9.86265846e-04, 9.93109181e-04, 1.00000000e-03]),\n", " 'batch_size': [16, 32, 64, 128, 256, 512],\n", " 'hidden_layer_sizes': [(24,), (12, 12),\n", " (6, 6, 6, 6),\n", " (4, 4, 4, 4, 4, 4),\n", " (12, 6, 3, 3)]},\n", " patience=True)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%time\n", "search.fit(X_train2, y_train2, classes=[0, 1, 2, 3])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The dashboard will be active while this is running. It will show which workers are running `partial_fit` and `score` calls.\n", "This takes about 10 seconds." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Integration" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`HyperbandSearchCV` follows the Scikit-learn API and mirrors Scikit-learn's `RandomizedSearchCV`. This means that it \"just works\". All the Scikit-learn attributes and methods are available:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:18.178585Z", "iopub.status.busy": "2022-07-27T19:22:18.177742Z", "iopub.status.idle": "2022-07-27T19:22:18.200224Z", "shell.execute_reply": "2022-07-27T19:22:18.195874Z" } }, "outputs": [ { "data": { "text/plain": [ "0.8122" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "search.best_score_" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:18.206573Z", "iopub.status.busy": "2022-07-27T19:22:18.205972Z", "iopub.status.idle": "2022-07-27T19:22:18.238650Z", "shell.execute_reply": "2022-07-27T19:22:18.237342Z" } }, "outputs": [ { "data": { "text/plain": [ "MLPClassifier(alpha=1.0642092440647246e-05, batch_size=32,\n", " hidden_layer_sizes=(12, 12))" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "search.best_estimator_" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:18.242181Z", "iopub.status.busy": "2022-07-27T19:22:18.241749Z", "iopub.status.idle": "2022-07-27T19:22:18.271461Z", "shell.execute_reply": "2022-07-27T19:22:18.270345Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
param_alphamean_partial_fit_timestd_partial_fit_timebracketmean_score_timetest_scoreparam_batch_sizestd_score_timeparam_hidden_layer_sizesmodel_idrank_test_scoreparam_activationpartial_fit_callsparams
00.0009530.3941280.02621410.0166610.7246640.007632(24,)bracket=1-01relu6{'hidden_layer_sizes': (24,), 'batch_size': 64...
10.0001590.7855290.02566710.0206120.00002560.003827(4, 4, 4, 4, 4, 4)bracket=1-13logistic2{'hidden_layer_sizes': (4, 4, 4, 4, 4, 4), 'ba...
20.0000040.5753720.03526210.0214900.5682320.010454(24,)bracket=1-22relu2{'hidden_layer_sizes': (24,), 'batch_size': 32...
30.0000030.4556480.00126100.0210980.00005120.001401(4, 4, 4, 4, 4, 4)bracket=0-02relu3{'hidden_layer_sizes': (4, 4, 4, 4, 4, 4), 'ba...
40.0000110.2662580.04728400.0084510.8122320.004509(12, 12)bracket=0-11relu8{'hidden_layer_sizes': (12, 12), 'batch_size':...
\n", "
" ], "text/plain": [ " param_alpha mean_partial_fit_time std_partial_fit_time bracket \\\n", "0 0.000953 0.394128 0.026214 1 \n", "1 0.000159 0.785529 0.025667 1 \n", "2 0.000004 0.575372 0.035262 1 \n", "3 0.000003 0.455648 0.001261 0 \n", "4 0.000011 0.266258 0.047284 0 \n", "\n", " mean_score_time test_score param_batch_size std_score_time \\\n", "0 0.016661 0.7246 64 0.007632 \n", "1 0.020612 0.0000 256 0.003827 \n", "2 0.021490 0.5682 32 0.010454 \n", "3 0.021098 0.0000 512 0.001401 \n", "4 0.008451 0.8122 32 0.004509 \n", "\n", " param_hidden_layer_sizes model_id rank_test_score param_activation \\\n", "0 (24,) bracket=1-0 1 relu \n", "1 (4, 4, 4, 4, 4, 4) bracket=1-1 3 logistic \n", "2 (24,) bracket=1-2 2 relu \n", "3 (4, 4, 4, 4, 4, 4) bracket=0-0 2 relu \n", "4 (12, 12) bracket=0-1 1 relu \n", "\n", " partial_fit_calls params \n", "0 6 {'hidden_layer_sizes': (24,), 'batch_size': 64... \n", "1 2 {'hidden_layer_sizes': (4, 4, 4, 4, 4, 4), 'ba... \n", "2 2 {'hidden_layer_sizes': (24,), 'batch_size': 32... \n", "3 3 {'hidden_layer_sizes': (4, 4, 4, 4, 4, 4), 'ba... \n", "4 8 {'hidden_layer_sizes': (12, 12), 'batch_size':... " ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cv_results = pd.DataFrame(search.cv_results_)\n", "cv_results.head()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:18.276281Z", "iopub.status.busy": "2022-07-27T19:22:18.275498Z", "iopub.status.idle": "2022-07-27T19:22:18.291768Z", "shell.execute_reply": "2022-07-27T19:22:18.290692Z" } }, "outputs": [ { "data": { "text/plain": [ "0.8036" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "search.score(X_test, y_test)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:18.296062Z", "iopub.status.busy": "2022-07-27T19:22:18.295364Z", "iopub.status.idle": "2022-07-27T19:22:18.315963Z", "shell.execute_reply": "2022-07-27T19:22:18.314885Z" } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Array Chunk
Bytes 39.06 kiB 39.06 kiB
Shape (5000,) (5000,)
Count 2 Tasks 1 Chunks
Type int64 numpy.ndarray
\n", "
\n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", "\n", " \n", " 5000\n", " 1\n", "\n", "
" ], "text/plain": [ "dask.array<_predict, shape=(5000,), dtype=int64, chunksize=(5000,), chunktype=numpy.ndarray>" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "search.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:18.322983Z", "iopub.status.busy": "2022-07-27T19:22:18.321573Z", "iopub.status.idle": "2022-07-27T19:22:18.361012Z", "shell.execute_reply": "2022-07-27T19:22:18.360430Z" } }, "outputs": [ { "data": { "text/plain": [ "array([1, 0, 1, ..., 1, 0, 0])" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "search.predict(X_test).compute()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It also has some other attributes." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "execution": { "iopub.execute_input": "2022-07-27T19:22:18.364118Z", "iopub.status.busy": "2022-07-27T19:22:18.363636Z", "iopub.status.idle": "2022-07-27T19:22:18.379775Z", "shell.execute_reply": "2022-07-27T19:22:18.379181Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
model_idparamspartial_fit_callspartial_fit_timescorescore_timeelapsed_wall_timebracket
0bracket=0-0{'hidden_layer_sizes': (4, 4, 4, 4, 4, 4), 'ba...10.4543870.00000.0224990.8397120
1bracket=0-1{'hidden_layer_sizes': (12, 12), 'batch_size':...10.3222570.52700.0149360.8397140
2bracket=1-0{'hidden_layer_sizes': (24,), 'batch_size': 64...10.4316280.51380.0074770.8512721
3bracket=1-1{'hidden_layer_sizes': (4, 4, 4, 4, 4, 4), 'ba...10.8111950.00000.0244390.8512741
4bracket=1-2{'hidden_layer_sizes': (24,), 'batch_size': 32...10.6106340.50180.0110360.8512741
\n", "
" ], "text/plain": [ " model_id params \\\n", "0 bracket=0-0 {'hidden_layer_sizes': (4, 4, 4, 4, 4, 4), 'ba... \n", "1 bracket=0-1 {'hidden_layer_sizes': (12, 12), 'batch_size':... \n", "2 bracket=1-0 {'hidden_layer_sizes': (24,), 'batch_size': 64... \n", "3 bracket=1-1 {'hidden_layer_sizes': (4, 4, 4, 4, 4, 4), 'ba... \n", "4 bracket=1-2 {'hidden_layer_sizes': (24,), 'batch_size': 32... \n", "\n", " partial_fit_calls partial_fit_time score score_time elapsed_wall_time \\\n", "0 1 0.454387 0.0000 0.022499 0.839712 \n", "1 1 0.322257 0.5270 0.014936 0.839714 \n", "2 1 0.431628 0.5138 0.007477 0.851272 \n", "3 1 0.811195 0.0000 0.024439 0.851274 \n", "4 1 0.610634 0.5018 0.011036 0.851274 \n", "\n", " bracket \n", "0 0 \n", "1 0 \n", "2 1 \n", "3 1 \n", "4 1 " ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hist = pd.DataFrame(search.history_)\n", "hist.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This illustrates the history after every `partial_fit` call. There's also an attributed `model_history_` that records the history for each model (it's a reorganization of `history_`)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Learn more" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook covered basic usage `HyperbandSearchCV`. The following documentation and resources might be useful to learn more about `HyperbandSearchCV`, including some of the finer use cases:\n", "\n", "* [A talk](https://www.youtube.com/watch?v=x67K9FiPFBQ) introducing `HyperbandSearchCV` to the SciPy 2019 audience and the [corresponding paper](https://conference.scipy.org/proceedings/scipy2019/pdfs/scott_sievert.pdf)\n", "* [HyperbandSearchCV's documentation](https://ml.dask.org/modules/generated/dask_ml.model_selection.HyperbandSearchCV.html)\n", "\n", "Performance comparisons can be found in the SciPy 2019 talk/paper." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.12" } }, "nbformat": 4, "nbformat_minor": 4 }