{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Devices in `vipdopt`\n", "\n", "The `Device` class is how optical devices are represented in `vipdopt`. A `Device` object contains a 3D voxel-grid design region, with each voxel having its own refractive index, along with a number of helpful methods for interacting with the rest of the code library.\n", "\n", "\n", "For later cells to work, please run the following block first." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# imports\n", "from pathlib import Path\n", "import sys \n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "np.set_printoptions(threshold=100)\n", "\n", "# Get vipdopt directory path from Notebook\n", "parent_dir = str(Path().resolve().parents[2])\n", "\n", "# Add to sys.path\n", "sys.path.insert(0, parent_dir)\n", "\n", "# Imports from vipdopt\n", "from vipdopt.optimization import Device, Sigmoid, Scale\n", "from vipdopt.simulation import LumericalFDTD, LumericalSimulation, Source\n", "from vipdopt.GDS import GDS\n", "from vipdopt.STL import STL" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating a `Device`\n", "\n", "A `Device` requires a number of parameters to be created:\n", "\n", "* The size of the 3D-grid in voxels, given as a 3-tuple of integers\n", "* A Minimum and maximum permittivity\n", "* The coordinates of device in 3D space\n", " * This utilizes a `Coordinates`, which is just a dictionary with 'x', 'y', and 'z'\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Initial Design Variable')" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "device_size = (5, 5, 5) # use a 5x5x5 grid for the design region\n", "permittivity_bounds = (0, 1)\n", "\n", "# Center the device at the origin with a voxel size of 1\n", "coords = {\n", " 'x': np.linspace(-2.5, 2.5, 5),\n", " 'y': np.linspace(-2.5, 2.5, 5),\n", " 'z': np.linspace(-2.5, 2.5, 5),\n", "}\n", "\n", "dev = Device(\n", " device_size,\n", " permittivity_bounds,\n", " coords\n", ")\n", "\n", "# By default the device will have density 0.5 everywhere\n", "# Plot the design variable (the slice at z=0)\n", "im = plt.imshow(dev.get_design_variable().real[..., 0])\n", "plt.colorbar(im)\n", "plt.title('Initial Design Variable')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Optional Parameters\n", "\n", "There are a number of optional parameters when creating a `Device`:\n", "\n", "* The name of the device (defaults to \"device\") \n", "* A list of `Filters`\n", "* Initialization parameters that are further described in the following section\n", "\n", "### Initialization Parameters\n", "\n", "When creating a new device, there are a number of settings that can be tweaked to\n", "change the intital permittivity values it will be populated with\n", "\n", "#### Initial Density\n", "\n", "The initial density of the device is the parameter we are optimizing (frequently \n", "referred to as the \"design variable\"). It is then passed through `Filters` (possibly \n", "non-linearly) and then scaled to the permittivity contraints.\n", "\n", "The `init_density` can be specified, or it defaults to 0.5. If `randomize` is `False`,\n", "the entire design varibale will be set uniformly to the initial density.\n", "\n", "#### Randomization\n", "\n", "If `randomize` is set to `True`, then the values will be drawn from a normal\n", "distribution centered at `init_density`, with scale 0.27.\n", "\n", "A random seed can be specified by providing an integer. By default, the random seed is \n", "`None` which effectivley makes the seed random as well.\n", "\n", "#### Symmetry\n", "\n", "If `symmetric` is set to `True` the design variable will be symmetric over the line $y=x$.\n", "\n", "### Miscellaneous Parameters\n", "\n", "Additional paramerters can be passed into the `Device` using `kwargs`. These values won't\n", "be used for any internal functionality in the `Device` but can be accessed as attributes\n", "if desired.\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Randomized Design Variable')" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Make the device randomized and symmetric this time\n", "dev = Device(\n", " device_size,\n", " permittivity_bounds,\n", " coords,\n", " randomize=True,\n", " symmetric=True\n", ")\n", "\n", "# Plot the design variable (the slice at z=0)\n", "im = plt.imshow(dev.get_design_variable().real[..., 0]) # Plot first layer \n", "plt.colorbar(im)\n", "plt.title('Randomized Design Variable')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `Filter`\n", "\n", "The `Filter` class is used to apply modifications to the design variable before\n", "converting to permittivity values. If you're familiar with machine learning,\n", "`Filter`s are analagous to activation functions.\n", "\n", "A `Filter` is essentially three functions bundled together:\n", "\n", "* `forward`: passes an array through the `Filter`'s function\n", "* `fabricate`: similar to `forward` but binarizes array values for fabrication\n", "* `chain_rule`: the gradient of the `forward` function\n", "\n", "There are two `Filter`s included in `vipdopt`:\n", "\n", "* `Sigmoid` which applies a sigmoidal projection to push values to the 0/1 extremes.\n", "* `Scale` which scales the input to a specified range\n", "\n", "If a `Device` is created and there are no filters provided, or the last filter is not a `Scale` filter, a `Scale` filter will be appended to the end of the list with the permittivity constraints." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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j02cONGt9yFJ48ePN19XFAc3NAxD8+bNM/8ePHiwgoKCdOedd5qPOTbVv5jjPuTq+8iaajtrkFIpc3DTnL43V9M9x8XFaezYsWrZsqV57JcvX16tWrXSuHHjdOTIEZfvPae65ujRo3rllVfUsmVLVapUSYGBgSpVqpTLvC4WHx/vNF6Bry4i//33X73++uvq3r27qlevruLFi6t48eKqXr26evbsqddffz3PgWDPnj2r+fPn6/7771erVq1Urlw5BQcHKzIyUrVr19aAAQP0+eef53qcXqr8qMeQM47twndsezrd/RdffKHevXuratWqCgkJUVRUlLp37665c+ea4/TkdJ6/WE5pzpw5o0mTJql169aqUKGCgoODVatWLf3nP//RwYMHs+Vx8uRJvfrqq2rZsqXKly+vEiVKqGHDhnr66aedWse4IyYmRg8//LAaN26s0qVLKzQ0VFFRUbrhhhs0ffp0t2a/ytonbTabW931zp49q4kTJ6pFixYqXbq0wsPDVb9+fd13333atGmTR+Uv7Kg7Cl/d4YjrAs+0a9fOXE9ISNCpU6fyNf+iKsMwPF5gcYYXOnXqZEgyJBnjx4/PMU10dLSZplOnTkZqaqpx3333mY/ltDRv3tw4ceJEntt2TJ/Xc66W2bNn5/qeoqOjc9x2TEyMER4e7lb+NWvWNDZv3pzne9m7d6+ZvkaNGnmm9cTXX39tlCpVKteyhYSEGB988IFH28/IyDCef/55IzQ0NM/3HRQUZIwdO9aw2+255jV06FCn7+HPP/80GjZsmGe+48aNy7N8x44dM9q0aeP297906dIc88nv/ev77783H6tbt26e78Hxs65evbr5usWLF7v1usJk1apV5vsLDQ01zp49axiGYWzYsMF8vFixYsbx48dzfL3jPuTOd+HJd5eT8+fPG/fff78RGBiY52uLFy9uvP3223m+94vrmkWLFhmlS5fOllfJkiU9/lxPnDjhlMePP/7ocR55ycjIMF544QWjRIkSLj/HgIAA488//8yWx1dffWWEhIS49V00bdrU+Oeff/Is08XnGlflz696LDeO9aokY+/evR7nUZhxbBe+Y9vVZ5TlzJkzRvfu3fP8nNq1a2ccPXo023k+Jxen2bRpk1GzZs1c8y5durTTddXixYvzvNapWrWqsWvXLpfvPykpyejfv7/L/ady5couP3fHfXLo0KF5pl29erVRpUqVPOvQF154wTAM97+jwoy6o/DVHYbBdYG3tm3b5pR/bvs1Mp09e9aQZOzfWcU4fTjK7WX/zsw6Nqs+gfUUWP+CESNGaO7cuQoICFCrVq3UoEED2e12xcTEmC11Nm/erCFDhnjdXPGhhx6SJH3zzTfmnYhbbrlFVatWzZa2YcOGHud/+vRpJSUlSZIqVKigxo0bKyoqSmFhYUpOTtbu3bu1YcMGpaena9++ferUqZM2b96cZ7/s/LZ48WLdcccd5t3JgIAAtWvXTvXq1VNSUpJWrVqlo0eP6r777tO0adPcyjMjI0P9+/fXV199ZT5WtWpV805kUlKS1q9frz179ig9PV2vvPKKTpw4oZkzZ7rM+8iRI7ruuut09OhRlSpVSh06dFClSpUUHx+v5cuX6+zZs5KkF198UY0aNVL//v1zLF+vXr2c7iJeeeWVuvLKK1WqVCmdP39ex44d0++//35Js195s3/17NlT1apV08GDB/X3339r1apV6tixY57bWbp0qQ4cOCBJ5l3Zosbx7mafPn0UGRkpSWrRooUaNGignTt36sKFC/rss880cuTIbK+/7rrrFB6eOYKhq++jYcOGeuihh5SYmGjedY2IiNCQIUPcKuu5c+d0/fXXO7XQq127tq655hqVLl1ap06d0tq1a3XkyBGlpKTokUceUUJCgsaOHesy73Xr1mnChAm6cOGC2Uq0XLlyOn78uLZs2eJW+RyVKVNGpUqVMme/eeONN3T99dfnSzeFjIwM9evXz2nK7eDgYLVp00Y1a9ZUsWLFdOzYMW3atElHjx6V3W7PsYXo8ePHzbu0UVFRatSokSpVqqQSJUooKSlJcXFx2rx5swzD0O+//66OHTtq69atKlu27CWX31f1GP4fx3amwnRsuyM1NVU33HCDYmJizMeqVKmiDh06KDw8XHv27NGaNWu0du1a3XrrrapVq5ZH+R86dEhPPfWUTpw4oXLlyqlTp04qU6aM9u/fr+joaF24cEGnT5/W9ddfr7///ltbt27VLbfcogsXLigqKkrt2rVTZGSkdu3apdWrV8tut+vw4cO69dZbtWXLlly70yYnJ6tr167asGFDju9r9+7dWrNmjTIyMnT06FHdfPPNmj9/vm6//XbvPsj/2bRpk3r27GleU0rStddeqyZNmigtLU0xMTHa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k+P4ubjL8Vrt0KFDMgzXfUiK6ph11B3WxXVB/pgyZYqee+458+/nnntOTz31lE+2dbmwG54vsLYi2TLKF90CHfuJuzPo9qpVq/K9DHlxnHFu586dOnv2rMsxFVzNBFO5cmVVq1bNvBBat26drrvuuksvbAErX768Ro4cqWuvvVbt27eXJP3555/6559/VKtWLY/zu5T96+abb1alSpV07Ngx/frrrzpw4IDOnz9v3nUKDw83W0sVJT/88INOnTolKXMcD3cH6LTb7ebAn7/99pt27drl9bhfnn5vV199tUJCQpSamqrjx49r9+7dTrM5FSWOM19dPKNVxYoVVbNmTfNH2PLly112pciNP+rRolKPWRXHtrXldWy76+qrr9aePXskSevXr1ffvn3zTJ+SkmJOxmFVNptNV199tbkPrlu3zuV4Wunp6U4DUTdv3tzj7V511VUKCAiQ3W5XQkKCduzY4XIQc29m7SsMqDusjeuCSzNz5kw9/vjj5t8jR47USy+9lK/buBxleNgyypO08I8i2TLKsQLNacBrb2SN9SO5blp95MgRffvtt/myXXc1aNBAlSpVkpR5weTqbpM7aSQ5TVvr2N+5MGrXrp05LbPkPACjJy5l/woKCtLw4cMlZV5QzZ49Wx999JH5/J133nnJ/e+tyPHuZc+ePRUTE+PWsmHDBqdZlubNm+d1GTz93ooXL+40jW9h3//z4tjVIKfBcnv27Gmuz5gxw627+TnxpB7dtGmT0w+/S1GU6jGr4di2NlfHtjs6d+5srn/++ecux0r56quvlJKS4tW2CpLjPjB37lyX9dqiRYt08uRJSZn7nDez3EVERDgFvT7++GOXr7mUY8PKqDusjesC733yySdOXfHuueceTZ48OV+3cbnKCkZ5ssDaimQwKqs7liQdPnw4X/J0bEHz3Xff5ZouIyNDI0aMcBqcuiAEBATo7rvvNv9+4YUXnGZtudibb75p9tHOy6hRoxQYGChJ+uabbzRnzhy3y1RQTZjdndHmzJkzTn3bK1So4NX2LnX/uvfee827cbNnz3a6ICuKXfROnDihJUuWmH8PGjTIo9c7pv/444+9vuApVaqUedFz4sQJty48x4wZY66//fbb+vXXX93enj+a8Kelpenhhx/2aL9cuXKlli5dav6d01Tljz32mPnZ/fbbb3rttde8Kp+79Why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ZtNVV12l2rVrq2zZskpMTNTRo0cVGxurc+fOSZKWL1+u1q1bKyYmRq1atcrXMgGSlJaWpmPHM7R3Uw1FRrg/ylBCol1XXLNfaWlptI6yKIJRADxy4cIFDRw40LzYrFKlimbMmKGbb75ZAQHZTxAnTpzQt99+q48//lj//PNPAZf28nLXXXdpwYIF5t+NGjXSSy+9pF69eikkJCRb+iNHjmjBggV67bXXdPz4cSUnJxdkcVEAfHW8zpkzx/LjEBUmWT/irW7fvn1q06aNjh07Jinzh+qAAQM0duxYNW7cOFt6wzAUGxurt99+W59++qnsdjv1TCHBub5gdejQQffee6/69u2riIgIp+eSkpI0btw4TZ48WVJml8nx48frtddey7ftf//997rtttt04cIFSVJYWJieeOIJPfTQQ6pYsWK29Kmpqfr111/16quvas2aNZKklJSUfCsPkJOw8MzFXRmF49R6WWMAcwAeWbRokXbu3ClJKl68uKKjo3XLLbfkeHEqSeXLl9e9996rlStXMjCtD7311ltOgajBgwfr999/16233ppjIErK/HHxxBNPaM+ePXrooYcY46MI4nhFfklLS1O/fv3MQFRoaKi+/vprffrppzkGoqTMYFWLFi00b948/f7777ryyisLssi4BNQdBePaa6/VihUrtGrVKg0ZMiRbIEqSwsPD9dZbb+nRRx81H5syZYoSEhLypQz//POPhgwZYgaiatSooU2bNunFF1/MMRAlSSEhIerVq5dWr16tr7/+WqVLl86XsgB5scvweIG1EYwC4JFffvnFXO/Tp4/q1avn9mtr167tiyJd9vbu3aunn37a/LtXr16aO3eugoLca/waHh6u6dOn6/333/dVEeEnHK/IL6+//rpiY2PNv+fOnatbbrnF7ddfeeWViomJUffu3X1QOuQ36o6Cce+996pTp05upX3xxRcVHBwsKTM4/Ouvv+ZLGUaMGGG2gAsPD9fy5ctVv359t1/ft29fxcbGqlq1avlSHiA3di/+wdoIRgHwyOHDh831GjVq+GQbGRkZ+vzzzzVkyBDVr19fpUuXVrFixVS2bFm1atVKI0eO1LJly3Lt2mK327V69WqNGzdOPXr0UPXq1VWiRAmFhISocuXK6tq1q15++WXFx8f7pPwXLlzQxx9/rDvuuEO1atVSRESEwsLCdMUVV2jA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SspsFdO8eXM1atRIxYsX1+HDh7Vq1SolJibqyJEj6t69u5YsWaIuXbq4lb8jXx6v7pg2bZoef/xx8++QkBB16tRJ1atX1+nTp7Vy5UrFx8fr9ttv18SJEz3O/5577tGCBQsUFBSkdu3aqU6dOkpOTtby5cvNWdxeeOEF1a9fX7fccot69OihrVu3KjQ0VB07dlT16tV15swZLVu2TKdPn5ZhGHr00Ud1zTXXqE2bNrlu980339STTz6Z6/uKjo7WqVOnlJGRoSlTpujAgQP68ssvL2lctgsXLqhXr15atWqV+VilSpXUsWNHRUREaPfu3VqzZo3WrFmjvn37etW6ITeOrWeqV6/udusmb2zfvl3PPPOMkpKSVKFCBXXo0EFly5bV4cOHtXz5cqWkpCgjI0MPPPCAmjRpotatW+eYz+nTp5WUlCRJqlChgho3bqyoqCiFhYUpOTlZu3fv1oYNG5Senq59+/apU6dO2rx5s+rUqeNWOUeMGKG5c+cqICBArVq1UoMGDWS32xUTE6O//vpLkrR582YNGTIkxxZ6WXbv3q1u3brpxIkT5mNNmjTR1VdfrYCAAG3dulW///673n///RzHE8rN5MmTNWrUKLNlTmRkpNq0aaOoqChlZGTozz//VGxsrAzD0A8//KDOnTtr7dq1KlGihCTO9Xnxx7leyhw0/O+//zb/zo9ucY7Hdp8+fczv3xfmzJmjBx98UJJUv359XXvttSpevLh27typtWvXyjAMnTx5UjfffLPi4uJUsmTJHPM5cuSIMjIyJGW2yGrYsKHKly+v0NBQnTlzRn/88Yf+/PNP8/1dd911iomJyXX8TEdJSUm64YYbtH37dpUoUUIdOnRQtWrVlJiYqOjoaB0/flySNHv2bNWvX9+8PsnJN998o0GDBpllDQwMVLt27VS3bl0lJSVp7dq1OnTokO677z69/fbbbn2GGRkZ6t+/v7766ivzsapVq6ply5YqX768kpKStH79eu3Zs0fp6el65ZVXdOLECc2cOdOt/K3OLkMZMjxKD4vzaygMQKGzfPnybHexXn/99Uu+87d582anuzzNmjUzYmJickx79OhR44033sixxUxqaqoxfPhwIzo62khLS8vx9efPnzdef/11IygoyJBklCpVykhMTMy1bO7cLd2+fbtRvHhxQ8psXTF69Gjj9OnT2dLt2bPHaN++vZlfz549c92uO1566SUzr4CAgDzfhzccW0Zl3c3s2bNntu/7woULxujRo820NpstzzvLDz74oLF48eJcW1Clp6cbs2fPNsLCwgwps4XUP//8k2t+jt9RSEiIeSf84juC27dvd7qbPnz48Fzz/PDDD5329VGjRhnnz593SvPvv/8aPXv2dPp8pNxbRiUlJRkNGzZ0+v53796dLd3Zs2eNBx980ExXuXLlbC0X3OGr49WdVjc7duxwahHVvXt348iRI05p0tLSjGeeeSbb5+dOy6is9G3btjX27NnjlC45Odno16+fmbZu3brGI488Ykgy+vbta/z7779O6U+dOmV07NjRTN+lS5dc3/vatWud7sr37NnTOHbsmFOa8+fPG08++aTTZz9p0qRc83RMl5sXX3zR6fh6+eWXs7W4+uuvv4ymTZsakpw++0ttGeXYAqRfv36XlFdOHFtGhYSEGIGBgcakSZOMCxcuOKU7cOCAceWVV7r1PcXExBhjx441/vjjj1zT/Pvvv8bgwYPN/Lp165Zr2pz2vRYtWhhxcXFO6ex2uzFlyhSn73TlypU55mm32532u7Jlyxo//fRTtnTLli0zKlSoYNhsNqfvNbc69tdffzUCAgLM/eDVV1/NscXLli1bjEaNGpn5Pfjgg+ZznOv35pjGX+d6wzCMTz/91KkOuLge89TBgwedvuMZM2Zcchkv5ph/SEiIUb58eWPJkiXZ0q1cudKIjIw0077wwgu55jlr1izj7bffznNf/P33341rr73WzO+ll17KNa1jy6isY3vo0KHGyZMnndKdO3fOGDBggJk2PDzcSEpKyjHP48ePG2XLlnXaz3ft2uWUxm63G9OmTTMCAwOdzn95tYx6/vnnzXSVKlUyvvrqqxxbPn3++edOLXcXLlyYa56FQVbLqD07KxnHD1dxe9mzsxItoyyOYBQAj/Xu3dvpAiPrwqh+/frG4MGDjalTpxrr16/P9kMiL+3atTPzuvbaa/M9qJKTV1991dzmO++8k2s6dy5Qu3btaqZ566238txuUlKS0w+A3C7E3XHPPfeY+dSsWdPrfHLjGIySZHTo0CHX79Vutzt1v3v11VcvefsLFiww83vqqadyTef4HdlsthwvdrP88MMPTheTOb2f9PR0p6DV/fffn2t+qamp2bod5haMcgwo9O3b12Uzf8egj7ef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S5kDn44bN05PP/10vs429fbbb5uDVi5dujTP8kvSrl279NJLL6lmzZr50ox89OjRuv32282/58yZo2bNmmnRokW5XiwfOXJEb731lmrVqqXp06cXSLexcuXKmV017Ha7br/9dv31119Oaex2u2bMmKHBgwcrMDAw3wdtdUdQUJAmTJhg/v3OO+9ozJgx2T7LEydO6LbbbtP69evd6s42atQoNW7cWFLmnfBrr71WX3zxRa6z/MTHx2vmzJlq3rx5tv3dHb46Xt0xfvx4s3XU5s2b1adPn2zbv3Dhgp5//nlNnjzZq+6A/jBx4kTzB8Hq1at12223mQGnLGlpaXrmmWc0efJk87Hx48d7PYNYyZIl9dRTT5l/jxs3Tq+99lq22bn+/vtvde/eXUeOHMk2EcClCgkJ0RdffGHe8U9JSdEtt9yiIUOG5NrCxTAMbdy4UUOHDlXTpk3ztetgXnr16mUGvVesWKHRo0dnm9nt2LFjuu2227R48eJ8PRd4omfPnubg8Ha7Xb17984xALRixQrdeOONysjIcPm9BgYG6t133zX30dmzZ6tXr155tkLaunWrxowZo2rVqpkBEc71Ocvvc/3p06fVo0cP8zxYrlw5LV26VLVr1863MrtSu3ZtzZ0712xhvXfvXjVv3lwTJkzI9XtPTU3Vjz/+qI4dO6pv374FNrZj7969zfWJEyfm2Fpw8+bN6tSpkw4ePOi3Y3vUqFFm98pDhw7p+uuv1+7du53SGIahd955R0888YRb57/atWvrueeeM/++++67NXr0aMXHx+eYPj09Xb/88osGDx7s1NW7MKNlVNGTf/ODArisxMbGKjY2Vg899JBq166txo0bq1y5cgoKCtKJEye0devWbAOU9u3bV4888kiO+TVv3lyzZs3SsGHDlJ6eri1btqh169aqX7++mjVrppIlS+rs2bPasWOHtm/fLrvdrpEjRzrlERAQoJdeesm827x06VLVq1dPbdu2VY0aNXTy5EmtWLHCvGiaOXOm7rrrrnz5PK688krNnz9f/fv3V3JystavX6/WrVurdu3aat68ucqUKaPz58/r+PHj2rZtm0ctYtxhs9m0YMECPfHEE5o2bZqkzJYIffv2VVhYmFq1aqXKlSsrLCxMx48f1969e7Vt2zanAJSvBki92EsvvaQePXrIbrdry5YtatKkidq1a6datWopKSlJq1evNge+ffnllzVz5ky/DEJ67733avHixWYXntdff12zZs1S586dVaZMGR06dEjR0dE6f/68atWqpT59+pjBh9wCOOHh4fruu+903XXXae/evTp27JjuuOMOM0hXqVIlGYahU6dOaceOHfr777/NQJW3Xbyk/D9e3dG4cWO9+uqreuKJJyRJP//8s2rUqKHOnTurevXqOn36tFauXKkTJ04oODhYr7zyikaNGiUp98/PCtq2batXX31VTz75pKTMlojVq1dXly5dVK1aNZ0+fVrR0dE6efKk+Zq+ffte8l36Z555RkuXLtXatWtlGIaefvppTZ06VZ06dVJ4eLh2796t1atXKyMjQ61atVLt2rXzfUKDWrVqaf369erdu7dZD3/88cf6+OOPVbNmTV111VUqV66cMjIydOzYMW3dujXbj9mCqGcaNGigwYMHa968eZKkSZMm6bPPPlOLFi1UoUIF7du3T6tWrVJaWpoiIiL0xhtv6IEHHvB5uS5ms9n00UcfqU2bNjp58qTi4+PVvXt3NW3a1GxV9Pvvv2vr1q2SMm86fPHFF2Z9mNtxct111+ndd9/Vgw8+qIyMDC1ZskQ//fSTGjVqpKuuukqRkZFKTk7W0aNH9fvvv+vEiRO5lpFzvbP8Ptfff//9Ti23rrzySre7YNWtWzfbZ+OtW265RUuWLFG/fv105swZJSUl6YUXXtCLL76opk2bqnbt2ipbtqwSExN19OhRbdy40WkGuICAgAIJ/AwdOlSTJk3Srl27lJqaqsGDB+uVV15R06ZNFRoaqu3bt5uzCjdt2lTXX3+9Xn/9dZ+X62IVK1bU+++/r/79+5szHTdo0EAdOnRQnTp1dO7cOa1Zs8ZsTTZlyhTzmMnr/Dd+/Hjt27dPc+fOlWEYmjRpkt5++21de+21ql27tkqUKKGEhATt27dP27ZtM7+jsmXL+v5NA94wAMADM2fONK644gpDkttL8eLFjRdffNG4cOGCy/yXLVvmdv7PPvtsjnmMHTs2z9eFhoYa7733nmEYhtPjualRo4aZZu/evXmWf+vWrcY111zj9mdTs2ZNY8uWLS4/F08sXrzYaNasmdtlKF26tPHss88aZ8+ezZbX7NmzzXRDhw51ue29e/ea6WvUqJFrunfffdcICgrKtUwBAQHGuHHjDLvd7tbn78l3ZBiGMXToUDP97Nmzc013/vx5484778zz82vYsKGxc+dOp/1u8uTJeW7/5MmTRr9+/QybzebWd1SqVCljzpw5Lt/XxXx1vLr7+RmGYbzxxhtGsWLFct1eyZIlje+++8745ZdfzMf69OmTY17R0dFmmk6dOrl8/57uv+PHjzfTjx8/Ps+0H374oREZGZnnZxkYGGiMHDnSSE9PzzMvd+ohwzCMs2fPGjfccEOe22zbtq1x5MgRj74jTyUmJhovvviiUapUKbf3q6ZNmxrffPNNjvl16tTJTBcdHe1y++58T+fOnTN69OiRZ5mioqKMNWvWuLVfebrvGYb73+vWrVtdHqcjRoww0tLSjCpVqpiPnT59Os98ly9fbtStW9ft76hx48bG4cOHDcPgXF9Q53rHfd/Txd390BP79+83hg8fbgQGBrpVhoCAAKNXr17G1q1bc8zP3WMgizt1wV9//WXUqlUrz3K1a9fOOHTokFt1hSf1vmF4Vhd8+umnRnh4eK7lDAkJMWbOnGns2rXLqa50Zdq0aUbp0qXd+o5sNptx8803u8zTys6ePWtIMpZvr2Zs2F/D7WX59mqGpByvb2ENtIwC4JH77rtP9913n7Zv366VK1cqJiZGO3fu1P79+3X27FkZhqGIiAhVqlRJV111lbp06aJ+/fqpdOnSbuXftWtX/fXXX1qwYIF++OEHxcbG6vjx40pNTVXJkiVVp04dtWnTRn379lWHDh1yzOPll19Wz549NX36dK1Zs0YnTpxQRESEoqKidMMNN+iee+5R3bp18/NjMTVt2lSxsbH65ZdftGjRIq1du1ZHjhzRmTNnFBISovLly6t+/fpq1aqVrr/+erVp08bsTpJfbrzxRvXs2VOrV6/Wzz//rJUrV+rw4cOKj49XWlqaSpUqpWrVqqlFixbq1q2bevfuXeBdpB544AG1a9dOkydPVnR0tI4cOaLixYuratWq6tq1q+6++25LNCsPCQnR/PnzNXz4cH344Yf67bffdPz4cZUuXVp16tTRnXfeqeHDhyssLMxpTIisgcpzU6ZMGX3++efavn275s+frxUrVmjv3r06efKkAgICVKpUKdWpU0fNmzfXddddp+7du3vVXdHXx6s7Ro8erV69emnGjBn65ZdfdOjQIYWEhKh69erq3bu37r//flWrVk0LFy40X+Pq87OCe+65R3369NEHH3yg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jAIAAAAAAJaVYQQow4MxozxJC/8gGAUAAAAAACzLLpvs8qSbnvtp4R8EowAAAAAAgGXRMqroIRgFAAAAAAAsy/PZ9AhGWR3BKAAAAAAAYFl2wya7J7PpeZAW/kG4EAAAAAAA4H/279+vUaNGqUGDBgoLC1OZMmXUokULvfHGG0pOTs637SxZskR9+/ZVVFSUQkJCFBUVpb59+2rJkiVu55Genq733ntPHTp0UPny5VW8eHHVrl1b999/v/788898K2t+o2UUAAAAAACwLLuH3fTsl9Du5vvvv9egQYOUkJBgPpacnKzY2FjFxsbqww8/1OLFi1WnTh2vt2G32zVixAjNmjXL6fHDhw/r8OHDWrRoke699169//77CgjI/b3Ex8frxhtv1MaNG50e/+effzRz5kzNnTtX06dP17333ut1WX2FllEAAAAAAMCy7EaAx4s3tmzZov79+yshIUHh4eF6+eWXtW7dOi1btkz33XefJGnXrl3q1auXEhMTvX4/zz77rBmIatasmebPn68NGzZo/vz5atasmSTpww8/1HPPPZdrHhkZGerbt68ZiLr11lu1ZMkSrV+/XtOmTVOFChWUmpqq+++/36OWVgWFllEAAAAAAMCyMmRThtwfB8qTtI5GjhyplJQUBQUF6ZdfflGbNm3M57p27aq6devqqaee0q5duzRp0iRNmDDB423s2rVLb775piTp2muv1apVq1S8eHFJUosWLXTzzTerU6dOio2N1RtvvKG77747x1ZYc+fO1Zo1ayRJ//nPfzRjxgzzuZYtW6pnz5665pprlJCQoEcffVRxcXEKCrJOCIiWUQAAAAAAwLIKomXUhg0btHr1aknSPffc4xSIyjJq1Cg1bNhQkjR16lRduHDB4+1MmTJF6enpkqS3337bDERlKVGihN5++21JmeNBTZ48Ocd8sgJaZcqU0RtvvJHt+Tp16uiZZ56RJO3evVvffPONx2X1JYJRAAAAAADAsjL0/62j3Fs8t2jRInN9+PDhOaYJCAjQkCFDJElnzpxRdHS0R9swDEPffvutJKlBgwZq3bp1julat26t+vXrS5K+/fZbGYbh9PyuXbsUFxcnSbrjjjtUokSJHPMZNmyYuU4wCgAAAAAAwE0F0TIqq8tbWFiYrrnmmlzTderUyVxfu3atR9vYu3evjhw5ki2fvLZz+PBh7du3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i/K9730vJ5100m41vvzlL+dP/uRPWsKsqVOnZvXq1ampKfZnbjIKAAAAKK9DeDJq27ZtmT17dpJk5MiRufHGG3dbc/rpp+eKK65IkixdujQvvPBCp2otWLAgb775ZpLkpptu2iWIajZr1qwcccQRLfdt9fKzn/2szSCq2Ve+8pWWKau1a9fmpZdeKtyrMAoAAAAor0M4jFqyZEk+/PDDJMlll12Wbt3ajmFaTygtWLCgU7UeffTRNp/XWp8+fXLRRRclSVauXNkysVXUH/3RH7Xcr127tvD3hVEAAABAeVVqil8lsWzZspb78ePH73HdqFGj0qdPnyTJ8uXL96nW8OHD233TXes+Oltr69atLffdu3cv/H1hFAAAAFBalUrxqyxWrlzZcj9ixIg9ruvRo0dOPPHEJMlrr71WuM7GjRuzbt26vdb5+OedqZXs3E7YbOTIkYW/L4wCAAAAyquT2/QaGhp2uVpP8xws77zzTpKktrY2hx9+eLtrBw0alCR5//33C/faXCdJBg4c2KE6SVoCrCJ+9atfZeHChUmSz3/+88IoAAAAgGRn6FJfX99yzZgx46D3sGHDhiRJ375997q2tra25X7jxo2dqtORWvtSZ+vWrbnyyiuzY8eOJMktt9xS6PvNenTqWwAAAAAHQ9FzoH6/dt26damrq2v58WGHHba/O9urLVu2JEl69uy517Wt+/voo486VacjtfalzpQpU7JixYokOw9kP++88wp9v5nJKAAAAKC0airFrySpq6vb5WovjKqpqdnn6/7779/tub169UqSNDY27vXfs/XWvN69exf6M2qu05Fana0zY8aM3HPPPUmS0aNH58c//nGhHlszGQUAAACUV6tzoDq8viT69euXpGPb4TZt2tRy35FtfW3V6UitztT5x3/8x3znO99JsvMA9EWLFu2y3a8oYRQAAABQXp3cpldEZ98q19pxxx23288GDhyY5557Lps2bcoHH3zQ7iHmzYeJDxgwoPCWwuOPP77lvvVh5u3VSXY9zHxPfvKTn+Saa65JkgwePDhPPPFE+vfvX6i/jxNGAQAAAOV1ECajRowYUfxLHXDSSSfl4YcfTpK8/vrrOfXUU9tct3379qxduzZJOvV2un79+mXQoEFZt25dXn/99XbXtv58b7X+9V//NV//+tfT1NSU4447LosXL97r2/o6wplRAAAAQHlVOnGVxLhx41ruly5dusd1K1asaNk+N3bs2H2qtWrVqrz77rt7XNe6j/ZqLV68OBdddFG2b9+eo446Kk888USGDh3aqd4+ThgFAAAAlNchHEadccYZqa+vT5I88MADqVTabq714eeTJk3qVK0LLrigzee1tnnz5jz00ENJdk5tDRs2rM11Tz/9dL7yla9k69atqa+vz+OPP57Pfe5zneqrLcIoAAAAoLyaz4wqcpVEz549c+211ybZeS7VbbfdttuaZ555Jvfee2+SZPz48Rk9enSbz2p+a98JJ5zQ5ueTJk3KkCFDkux8813ztr/Wpk2blvXr17fct+Xll1/Oueeem02bNqW2tjYLFy7MF7/4xfb/RQtyZhQAAABQWjWVnVeR9WUybdq0/OxnP8sbb7yR6dOnZ82aNfna176W3r17Z8mSJfnBD36Q7du3p3fv3rn99ts7XedTn/pU7rjjjpx33nlpaGjI2LFj893vfjdjxozJ+vXrc/fdd7ecXzVu3Lhceumluz1j7dq1Ofvss/PBBx8kSb7//e+nvr4+r7766h7rHn300Tn66KML9SqMAgAAAMrrIBxgfiD169cvCxcuzIQJE7J69erMmzcv8+bN22VNXV1d5s+fn1NOOWWfak2YMCFz587NlClT8t5772Xq1Km7rRkzZkwWLFiQ7t277/bZL37xi/z2t79t+ecbbrhhrzW/973v5a//+q8L9WmbHgAAAMABdOKJJ+all17KzJkzM2rUqBx++OHp06dPhg8fnhtuuCGvvPJKJk6cuF9qTZ48OS+++GImT56cIUOGpFevXjnqqKMybty4zJkzJ8uXL0///v33S63OMhkFAAAAcIDV1tZm+vTpmT59eqe+v6fDz9ty8skn7zZ91RGXX355Lr/88sLfK0oYBQAAAJRWTQqeGXXAOmF/EUYBAAAA5VX0DXklepsebRNGAQAAAOV1iB9gzu6EUQAAAEB5CaOqjjAKAAAAKK2aSsEzo4RRpSeMAgAAAMrLZFTVEUYBAAAA5SWMqjrCKAAAAKC0bNOrPsIoAAAAoLwqNTuvIuspNWEUAAAAUF626VUdYRQAAABQWrbpVZ9uXd0AAAAAAJ8cJqMAAACA8rJNr+oIowAAAIDyKrhNTxhVfsIoAAAAoLxMRlUdYRQAAABQXsKoqiOMAgAAAErL2/Sqj7fpAQAAAHDQmIwCAAAAyss2vaojjAIAAABKyza96iOMAgAAAMpNwFRVhFEAAABAedmmV3WEUQDAfrF+Q+9029Grq9vYqyOXfLqrW+iwmccs6uoWOuyNbY1d3UIht33xf3d1Cx2yecOOXNLVTQDAfiaMAgAAAErLmVHVRxgFAAAAlJdtelVHGAUAAACUlsmo6iOMAgAAAMrLZFTVEUYBAAAA5SWMqjrCKAAAAKC0bNOrPsIoAAAAoLxMRlUdYRQAAABQXsKoqiOMAgAAAErLNr3qI4wCAAAAystkVNURRgEAAAClZTKq+nTr6gYAAAAA+OQwGQUAAACUl216VUcYBQAAAJSXMKrqCKMAAACA0qr5/VVkPeUmjAIAAADKy2RU1RFGAQAAAKXlbXrVRxgFAAAAlJfJqKojjAIAAADKTcBUVYRRAAAAQGnZpld9hFEAAABAedmmV3WEUQAAAEBpmYyqPsIoAAAAoLxMRlWdbl3dAAAAAACfHCajAAAAgNKyTa/6CKMAAACA8rJNr+oIowAAAIDyEkZVHWdGAQAAAKXVvE2vyFVGmzdvzq233prRo0fnyCOPTG1tbUaMGJEbb7wxb7/99n6t9eqrr+aqq67K0KFD07t37wwYMCBf+tKXMnfu3Gzfvr3T/Q8ZMiQ1NTWpqanJCSec0On+TEYBAAAA5VUFk1Fr1qzJhAkTsnr16l1+vmrVqqxatSr33HNP5s+fn4kTJ+5zrbvvvjtTpkxJY2Njy8+2bNmSZcuWZdmyZbnvvvuycOHC9O/fv9Bzb7755vz617/e5/4Sk1EAAABAidVUKoWvMtmwYUPOPffcliBq8uTJWbx4cZ5++unccsst6du3bxoaGnLxxRfn5Zdf3qdaixYtytVXX53GxsYcc8wxmT17dp577rk89thjufDCC5Mkzz//fCZNmpQdO3Z0+LkvvfRSbr/99vTq1Sv9+vXbpx4TYRQAAABQZpVOXCUya9asvPHGG0mSW2+9NfPmzcuZZ56Z0047Ld/5znfy+OOPp0ePHtm8eXOuv/76TtfZtm1bpk6dmqamptTV1WX58uWZOnVqxowZk3POOScPP/xwrrnmmiTJsmXL8uCDD3bouTt27MjkyZOzY8eOfOc738mRRx7Z6R6bCaMAAACA0jqUz4zatm1bZs+enSQZOXJkbrzxxt3WnH766bniiiuSJEuXLs0LL7zQqVoLFizIm2++mSS56aabMnTo0N3WzJo1K0cccUTLfUf86Ec/yosvvpjhw4fn29/+dqd6+zhhFAAAAFBeh/Bk1JIlS/Lhhx8mSS677LJ069Z2DHP55Ze33C9YsKBTtR599NE2n9danz59ctFFFyVJVq5c2TKxtSdvv/12br755iTJ3Llz07Nnz0719nHCKAAAAKC0DuXJqGXLlrXcjx8/fo/rRo0alT59+iRJli9fvk+1hg8fnmOPPXaP61r3sbda11xzTTZt2pRLL700Z5xxRqf6aoswCgAAAOAAWLlyZcv9iBEj9riuR48eOfHEE5Mkr732WuE6GzduzLp16/Za5+Oft1frpz/9aRYtWpQjjjgif//3f1+4p/YIowAAAIDyOoS36b3zzjtJktra2hx++OHtrh00aFCS5P3338/WrVs7VSdJBg4c2KE6SVoCrI9bv359y2Hqf/d3f5cBAwYU6mdveuzXpwEAAADsR0W33jWvbWho2OXnhx12WA477LD92NnebdiwIUnSt2/fva6tra1tud+4cWOhXpvrdKTWx+u0Zdq0aXnvvfdy2mmnZfLkyR3uo6NMRgEAAADl1cnJqEGDBqW+vr7lmjFjxkFvfcuWLUnSoYO/W4dPH330UafqdKTW3ur853/+Z/7pn/4pPXr0yNy5c1NTU1Ool44wGQUAAACUWmcOJV+3bl3q6upa/rm9SaP9Ebjcd999u73FrlevXkmSxsbGvX6/9da83r17F6rdXKcjtdqrs3Xr1nzjG99IpVLJddddly984QuF+ugoYRQAAABQXpXKzqvI+iR1dXW7hFFdoV+/fkn2vB2utU2bNrXcd2RbX1t1OlKrvTq33HJLVq1alUGDBuVv/uZvCvVQhDAKAAAAKK3OnhlVRGfeYPdxxx133G4/GzhwYJ577rls2rQpH3zwQbuHmDcfJj5gwIDCZ1sdf/zxLfetDzNvr06y62HmSTJz5swkyR//8R/n3/7t39r8fnOYtWnTpvz0pz9Nkhx99NE588wzO9yvMAoAAAAor6JvyOtEGDVixIjiX+qAk046KQ8//HCS5PXXX8+pp57a5rrt27dn7dq1SZKRI0cWrtOvX78MGjQo69aty+uvv97u2taff7xW8xa/++67L/fdd1+7z/mf//mf/Nmf/VmSZPz48cIoAODgu+uL/19q+5X/3Sj/T8+9n9lQFmu3be/qFjrsz175i65uoZAff+4nXd1Ch2zq3tTVLQB0uZqmnVeR9WUxbty4lvulS5fuMYxasWJFy8TR2LFjO13rJz/5SVatWpV33303xx57bJvrli5d2nLf2Vr7qvx/YwQAAAA+uTr5Nr0yOOOMM1JfX58keeCBB1LZw9lX999/f8v9pEmTOlXrggsuaPN5rW3evDkPPfRQkp1TW8OGDdvl80qlstdr8ODBSZLBgwe3/Oypp54q1KswCgAAACit5jOjilxl0bNnz1x77bVJdp5Lddttt+225plnnsm9996bZOd2t9GjR7f5rJqamtTU1OSEE05o8/NJkyZlyJAhSZIZM2a0bPtrbdq0aVm/fn3LfVcRRgEAAADl1fw2vSJXiUybNq1lAmn69Om56qqrsmTJkjz77LOZMWNGvvzlL2f79u3p3bt3br/99k7X+dSnPpU77rgj3bp1S0NDQ8aOHZs777wzzz//fB5//PF89atfzV133ZVk55a+Sy+9dH/863WKM6MAAAAADpB+/fpl4cKFmTBhQlavXp158+Zl3rx5u6ypq6vL/Pnzc8opp+xTrQkTJmTu3LmZMmVK3nvvvUydOnW3NWPGjMmCBQvSvXv3faq1L0xGAQAAAKV1KG/Ta3biiSfmpZdeysyZMzNq1Kgcfvjh6dOnT4YPH54bbrghr7zySiZOnLhfak2ePDkvvvhiJk+enCFDhqRXr1456qijMm7cuMyZMyfLly9P//7990utzjIZBQAAAJRX0UPJSxhGJUltbW2mT5+e6dOnd+r7ezr8vC0nn3zybtNX+8tbb721z88QRgEAAAClVXTaqYyTUexKGAUAAACUV9FDyUt2gDm7E0YBAAAApWUyqvoIowAAAIDyqpIzo/i/hFEAAABAaZmMqj7CKAAAAKC8mio7ryLrKTVhFAAAAFBetulVHWEUAAAAUFo1KbhN74B1wv4ijAIAAADKq1LZeRVZT6l16+oGAAAAAPjkMBkFAAAAlJa36VUfYRQAAABQXg4wrzrCKAAAAKC0aiqV1BQ4B6rIWrqGMAoAAAAor6bfX0XWU2rCKAAAAKC0TEZVH2EUAAAAUF7OjKo6wigAAACgvCqVnVeR9ZSaMAoAAAAorZrKzqvIespNGAUAAACUl8moqiOMAgAAAEqrpmnnVWQ95datqxsAAAAA4JPDZBQAAABQXrbpVR1hFAAAAFBeld9fRdZTasIoAAAAoLRqKpXUFJh2KrKWriGMAgAAAMrLNr2qI4wCAAAAyquSpMgb8mRRpSeMAgAAAErLNr3qI4wCAAAAyquSgtv0Dlgn7CfCKAAAAKC8nBlVdYRRAAAAQHk1JakpuJ5SE0YBAAAApeXMqOojjAIAAADKyza9qtOtqxsAAAAA4JPDZBQAAABQXiajqo4wCgAAACgvYVTVEUYBnVb5/S/5rZu2dXEnUH2a/39VOQT+MtXc46aNh8araxp6Hhp9JsnGHYdOrzs2b+3qFgrZtOHQ+LNt/v/VofS7wN8LYP87lP5ecEB4m17VEUYBnbZhw4Ykye1nPdnFnUD12rBhQ+rr67u6jXY1/y746un/fxd3Qtf6+65uoJAvd3UDBR1Kvwv8vQAOnEPhd8GB4G161UcYBXTapz/96axbty79+vVLTU2R/1QB7E2lUsmGDRvy6U9/uqtb2Su/C+DA8bsASA6t3wUHhG16VUcYBXRat27dMnDgwK5uA6rWofJfPv0ugAPL7wIgOXR+FxwQTZWkpkDA1CSMKjthFAAAAFBeJqOqjjAKAAAAKLGCYVSEUWUnjAIAAADKy2RU1RFGAQAAAOXVVEmhaSdnRpWeMAoAAAAor0rTzqvIekqtW1c3AAAAAMAnh8koAAAAoLycGVV1hFEAAABAeTkzquoIowAAAIDyMhlVdYRRAAAAQHlVUjCMOmCdsJ8IowAAAIDyMhlVdYRRAAAAQHk1NSVpKrieMuvW1Q0AAAAA7FHzZFSRq4Q2b96cW2+9NaNHj86RRx6Z2trajBgxIjfeeGPefvvt/Vrr1VdfzVVXXZWhQ4emd+/eGTBgQL70pS9l7ty52b59e6FnPfnkk7n88stz4oknpra2NvX19Rk2bFi++tWvZs6cOdm4cWPh/moqlZL+rwQAAAB8YjU0NKS+vj5/3P8v0qNbzw5/b3tTY578n3/Khx9+mLq6ugPYYcetWbMmEyZMyOrVq9v8vK6uLvPnz8/EiRP3udbdd9+dKVOmpLGxsc3Px4wZk4ULF6Z///7tPmf9+vX58z//8/zLv/xLu+teeumlnHLKKYV6NBkFAAAAlFdTpfhVIhs2bMi5557bEkRNnjw5ixcvztNPP51bbrklffv2TUNDQy6++OK8/PLL+1Rr0aJFufrqq9PY2Jhjjjkms2fPznPPPZfHHnssF154YZLk+eefz6RJk7Jjx449PufDDz/MWWed1RJETZo0KfPnz8+zzz6bF154IY888kiuu+66DBw4sFN9mowCAAAASqd5Mur/PeKywpNRi9c/UJrJqJtvvjl/+7d/myS59dZbM23atF0+f/rppzN+/Phs374948ePz1NPPdWpOtu2bcuIESPy5ptvpq6uLr/85S8zdOjQXdZ861vfyl133ZUkue+++3L55Ze3+ayvf/3refDBB3PYYYfloYceyvnnn9/mukqlkh07dqRHj2JHkpuMAgAAADgAtm3bltmzZydJRo4cmRtvvHG3NaeffnquuOKKJMnSpUvzwgsvdKrWggUL8uabbyZJbrrppt2CqCSZNWtWjjjiiJb7tixbtiwPPvhgkuT73//+HoOoJKmpqSkcRCXCKAAAAKDMKgW36JVoA9iSJUvy4YcfJkkuu+yydOvWdgzTekJpwYIFnar16KOPtvm81vr06ZOLLrooSbJy5cq88cYbu6258847kyT19fWZMmVKp3rZG2EUAAAAUF6H8Nv0li1b1nI/fvz4Pa4bNWpU+vTpkyRZvnz5PtUaPnx4jj322D2ua93Hx2s1Nja2nBN11llnpVevXkmSHTt2ZN26dXnrrbeyZcuWTvXXmjAKAAAAKK+mpuJXSaxcubLlfsSIEXtc16NHj5x44olJktdee61wnY0bN2bdunV7rfPxzz9e61e/+lVL2PT5z38+DQ0Nuf7669O/f/985jOfyWc/+9nU19fnrLPO6vTZVokwCgAAACizTk5GNTQ07HJt3br1oLf+zjvvJElqa2tz+OGHt7t20KBBSZL333+/cK/NdZLs9Q13zXWStARYzVqHZ01NTRk1alR+9KMf5YMPPmj5eWNjY5588smceeaZmTlzZqE+mwmjAAAAgNKqNDUVvpKdoUt9fX3LNWPGjIPe+4YNG5Ikffv23eva2tralvuNGzd2qk5HarVX53e/+13L/cyZM7N69eqcc845ef7557Nly5b89re/zZw5c1JfX59KpZK/+qu/atnWV0TxI88BAAAADpZKJUmBc6B+Pxm1bt261NXVtfz4sMMO28+N7V3zlreePXvudW3r/j766KNO1elIrfbqbNq0aZdnnnXWWfn3f//3dO/ePUkyYMCAXH311Tn55JMzfvz4NDU15aabbsr555+fmpqaDvdrMgoAAAAoryJv0mu+ktTV1e1ytRdG1dTU7PN1//337/bc5gPAGxsb9/qv2XprXu/evQv9ETXX6Uit9uq0fk6yczqqOYhqbdy4cbnwwguT7Dx36r/+678K9SuMAgAAAMqrUkkqTQWu8rxNr1+/fkk6tu2u9VRSR7b1tVWnI7Xaq9P6OQMGDMgf/uEf7vE5Z599dsv9Cy+80OFeE9v0AAAAgBKrNFVSqel4wFTpRBjVmTfYfdxxxx23288GDhyY5557Lps2bcoHH3zQ7iHmzYeJDxgwoPCWwuOPP77lvvVh5u3VSXY9zPzj/1zkIPT333+/Q302E0YBAAAA5VVpStJUcH0xI0aMKPydjjjppJPy8MMPJ0lef/31nHrqqW2u2759e9auXZskGTlyZOE6/fr1y6BBg7Ju3bq8/vrr7a5t/fnHa33uc59rud+xY0e7z2n9eY8exeIl2/QAAACA0qo0VQpfZTFu3LiW+6VLl+5x3YoVK1q2z40dO3afaq1atSrvvvvuHte17uPjtQYPHpzPfOYzSZK33nqr3Smz5vAs2XUyqyOEUQAAAAAHwBlnnJH6+vokyQMPPLDHcKf14eeTJk3qVK0LLrigzee1tnnz5jz00ENJdk5tDRs2bLc1f/qnf5okaWhoyOLFi/dY75FHHmm5bx26dYQwCgAAACit7ZWt2d5U4Kps3ftDD5KePXvm2muvTbLzXKrbbrtttzXPPPNM7r333iTJ+PHjM3r06Daf1fzWvhNOOKHNzydNmpQhQ4YkSWbMmLHL5FKzadOmZf369S33bbn++utb3qr3l3/5l2loaNhtzT//8z/nqaeeSpKce+65u509tTc1lc6c7AUAAABwAG3ZsiWf/exn291ytifHHntsfv3rX7eEKl1pw4YNGTVqVN54440kyTe+8Y187WtfS+/evbNkyZL84Ac/yMaNG9O7d+88/fTTOeWUU9p8Tk1NTZKdW+neeuutNtcsWrQo5513XpqamnLMMcfku9/9bsaMGZP169fn7rvvbjm/aty4cXnqqafSvXv3Np8za9asTJ8+PUkyfPjwfPvb384XvvCFNDQ05JFHHsmcOXOyY8eO1NXVZcWKFfmDP/iDQn8mwigAAACglLZs2ZLGxsbC3+vZs2cpgqhma9asyYQJE7J69eo2P6+rq8v8+fMzceLEPT6jI2FUktx9992ZMmXKHv/cxowZk4ULF6Z///7t9nzTTTdl5syZe9xaePTRR+fRRx/Naaed1u5z2iKMAgAAADjANm3alB//+Mf5+c9/njVr1qSxsTGDBg3KhAkTct1112Xw4MHtfr+jYVSSvPrqq5k9e3YWL16c3/zmN6mtrc3IkSNzySWX5Morr+zw2++eeeaZzJkzJ7/4xS/y3//93+nVq1eGDRuW888/P1OnTm05D6soYRQAAAAAB40DzAEAAAA4aIRRAAAAABw0wigAAAAADhphFAAAAAAHjTAKAAAAgINGGAUAAADAQSOMAgAAAOCgEUYBAAAAcNAIowAAAAA4aIRRAAAAABw0wigAAAAADhphFAAAAAAHjTAKAAAAgINGGAUAAADAQfN/ACfpvOEyzwheAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sig_fil = Sigmoid(0.5, 1)\n", "scale_fil = Scale((0, 1))\n", "\n", "dev = Device(\n", " device_size,\n", " permittivity_bounds,\n", " coords,\n", " randomize=True,\n", " init_seed=5,\n", " filters=[scale_fil, sig_fil]\n", ")\n", "dev.update_density()\n", "\n", "# Plot the initial density and after applying each filter\n", "gridspec = {'width_ratios': [1, 1, 1, 1]}\n", "fig, axes = plt.subplots(2, 4, sharey=True, figsize=(16, 8), gridspec_kw=gridspec)\n", "fig.delaxes(axes[1, 0])\n", "\n", "min_val = dev.w.min().real\n", "max_val = dev.w.max().real\n", "for i in range(4):\n", " im = axes[0, i].imshow(dev.w[..., 0, i].real, vmin=min_val, vmax=max_val)\n", " # axes[0, i].set_xlabel('x')\n", " # axes[0, i].set_aspect('equal')\n", "\n", "axes[0, 0].set_title('Initial density')\n", "# axes[0, 0].set_ylabel('y')\n", "axes[0, 1].set_title('After Scale1')\n", "axes[0, 2].set_title('After Sigmoid')\n", "axes[0, 3].set_title('After Scale2')\n", "fig.colorbar(im, ax=axes[0, :])\n", "\n", "differences = np.diff(dev.w[..., 0, :]).real\n", "for i in range(1, 4):\n", " im = axes[1, i].imshow(differences[..., i - 1], vmin=differences.min(), vmax=differences.max())\n", " # axes[0, i].set_xlabel('x')\n", "\n", "# axes[1, 1].set_ylabel('y')\n", "\n", "fig.colorbar(im, ax=axes[1, :])\n", "axes[1, 1].set_title('Scale Change')\n", "axes[1, 2].set_title('Sigmoid Change')\n", "axes[1, 3].set_title('Scale2 Change')\n", "\n", "for ax in axes.ravel():\n", " ax.set_xticks([])\n", " ax.set_yticks([])\n", "\n", "\n", "# axs[0, 0].plot(dev.get_design_variable().real[..., 0])\n", "# axs[0]\n", "# plt.colorbar(im)\n", "# plt.title('Randomized Design Variable')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Working with Simulations\n", "\n", "`Device`s can be imported into `LumericalSimulations`. To do this, a `LumericalSimulation`\n", "**must** have an `Import` object to store the refractive index. Using `Device.impurt_cur_index`,\n", "the relevant values will be saved into the `Import` object until the simulation is loaded\n", "into Lumerical. For more details, see [the notebook on simulations](simulation.ipynb)\n", "\n", "The index may need to be reinterpolated to match the size of the voxel grid in Lumerical." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\tytym\\Documents\\Schmidt Academy\\SonyBayerFilter\\vipdopt\\optimization\\device.py:274: RuntimeWarning: invalid value encountered in sqrt\n", " return np.sqrt(np.real(permittivity))\n" ] } ], "source": [ "# Set up simulation and get the Import object\n", "sim = LumericalSimulation('simulation_example.json').with_enabled([Source('forward_src_x', 'gaussian')])\n", "import_obj = sim.objects['design_import']\n", "\n", "dev = Device(\n", " device_size,\n", " permittivity_bounds,\n", " coords,\n", " randomize=True,\n", " init_seed=0,\n", " filters=[Sigmoid(0.05, 0.5)],\n", ")\n", "\n", "# Store refractive index data in `import_obj`\n", "_ = dev.import_cur_index(import_obj, reinterpolation_factor=1)\n", "\n", "fdtd = LumericalFDTD()\n", "fdtd.connect(hide=False)\n", "fdtd.load_simulation(sim) # This automatically imports the data stored in `import_obj`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exporting a `Device`\n", "\n", "After an optimization, a finished `Device` can be exported to a .GDS or .STL file.\n", "The `Device` permittivity will also be *binarized* (all values will be converted to 0 or 1)." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZUAAAGKCAYAAADE29x1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABY10lEQVR4nO3dd3hUZfo38O+ZkkklPaEmAULvXUQEG1LSEFjQFRBRLKy6bhF/8rrqqou6urKyq1wLWHBXXCUBFEEQKQKiEEhooQQICUkI6SEzk2TKOe8f2RmHkDLlOXPOmbk/18UlwuTMQzJzvvPUmxMEQQAhhBDCgErqBhBCCPEdFCqEEEKYoVAhhBDCDIUKIYQQZihUCCGEMEOhQgghhBkKFUIIIcxQqBBCCGGGQoUQQggzFCqEEEKYoVAhhBDCDIUKIYQQZihUCCGEMEOhQgghhBkKFUIIIcxQqBBCCGGGQoUQQggzFCqEEEKYoVAhhBDCDIUKIYQQZihUCCGEMEOhQgghhBkKFUIIIcxQqBBCCGGGQoUQQggzFCqEEEKYoVAhhBDCDIUKIYQQZihUCCGEMEOhQgghhBkKFUIIIcxQqBBCCGGGQoUQQggzFCqEEEKYoVAhhBDCDIUKIYQQZjRSN4D4H0EQ7L/nOE7ClhBCWKNQIV4lCALMZjMaGhqgUqmg0Wig0WigVqvBcRyFDCEKR6FCvMZqtcJsNoPnefsvs9lsDxO1Wg2tVgu1Wg21Wg2VikZnCVEaTnAciyBEBIIgwGKxwGKx2P/MZDLZQ0MQBAiCAJ7nIQiCPWQcezEUMoQoA4UKEZWtN8LzPIDmORTbEFhbQ10tQwbATUNlFDKEyBOFChGFLRTMZvMNvQ+gOWhMJpPTcyjUkyFEOShUCHO2nojVagWAm8LD1VBp7fqOvRjbcziGjEajoUl/QiRAoUKYsvVOrFYrVCpVqzd2T0OlJceQsfVkVCqVPVwcV5cRQsRFoUKYEAQBVqsVFosFPM+3GSgA+1BprS1thYzj6jIKGULYo1AhHutouKslsUOlZdtsz9kyZFrOyVDIEOI5ChXiEce9J+31Thx5M1RaopAhRFwUKsQtjntPBEFwOlBsX9vU1CSLHfQUMoSwRaFCXMbzPCwWi9PDXS0JggCTyWT/WjmxBYttXsbWPgoZQpxDoUKc1t7eE1ev0zJUNh8vw5qDRegdE4wZg+Nwd/8YqGWw76RlyACw92S0Wq09ZFzpqRHiyyhUiFNaHrXiydCVY6gAwNNfnsa+/Go4vhA5ALFhARjRPRypQ+Jwe3KULG7aFDKEtI9ChXTIce+J7QbqCVuoXK4y4qFPT6DaaO7wa1QcEN9Jh9EJ4cgYGo8xiRGyuGm3FTIt98hQyBB/QaFC2uTK3hNXr/vJj5fx5ncXwbv56lNzQNeIQIxLjMB9IzpjSNdOHreLhdZCRqVS3TQnQyFDfBWFCmmVq3tPnGW28nj00xwcKqjx+FqONCoOPSIDMb5nJGaP6II+cSFMr+8ux5Cx/VKpVDAYDAgPD0dAQACFDPEpFCrkJrZ9JCx7JwBwrqwe8z8+iroGS8cP9lCAmkNSdDBu6xWJ2SO7oEdkkOjP6QxbsOzbtw+jR49GUFDQDXMyjueWUcgQJaIiXcTONtxlW93FMlD+tb8Af/v+Irz1EcZkFXC+3IDz5QZ8+FMxdBoVescEY1KfKMwa0QXxYTrvNKQFx7CwDYU5DjM6FiyjqphEiainQgCIN9zVZLZi4SfHkHOlzuNrsRSsVaFPXAju6BuD+4bHIzI4wKvPv3v3bowfPx5BQTf2oNo65p+qYhKloFAhN/ROWH4iPl5ch4fXH4O+ycrkemIK1anRPz4Ud/ePRsbQzgjRiduJbytUWqKQIUpDw19+jOXek5b+vvsiPthXAKV8YtE3WZFdVIfcK3X49OdifPubW0R7LtvnOGe+17afScvSyxaLBWZz81JsqopJ5IRCxU+1LPPL6iZkaLLgwY+OIu9qPZPreVOAhoPJIqCmwTs9K3cCvK2QMZvNNxzSSSFDpEKh4mccj1phvbrrcEE1lvwnFw1mnsn1vEmjag4UALBYxW0/yxHn1kLG9vO19WSoKibxJgoVP9JyMp5loKz49jw+PlTE5FpSsLi7C1NmbPMtNo4h01pPhqpiEtYoVPyEM2V+3VHXYMID647iQoXB6a/RcICllXu4bfjJX3jjRu5MyFBVTMIShYqPE+uoFQDYd74ST/33BJosrg0XtZUb/hIoUi64dDZk6Jh/4i4KFR8m5nDX69vO4t8/F0N5syfyIYcbtWPIOBYsM5lM9kJqFDLEFRQqPsqdMr/OqKxvwgMfZqOwuoHJ9fyRXLeG2V4jFDLEExQqPsa2h6GgoADXr1/H4MGDmb3hvz19DX/IPAWzVZ43RcJWayFj+9XU1GSviUMhQxxRqPgQx6XCtqEvVkfV/yHzFLaevMaglcRGaTdex82xtjPLHEPGsSfjeDgmncDsXyhUfEBrZX5VKpV9Y6MnrtY14v61R3D1ehODlhJAvsNfrmovZBobG+2PoaqY/oVCReHaOghSpVJ5fPPalFuK/7fljM/s4ZAbX7uxOhsyVBXTt1GoKFh7e0886akIgoClG47j+3OVrJrqFJ2GQ5MfLCv2lZ5KR9oKGZ7nKWR8GIWKAjmz98TdULlcZcCvPzyKSr2JVXOd5g+B4s/aC5mmpiY0NjZCpVLBarVCq9UiMDCQQkaBKFQUxtm9JxzHufyJ+D+Hr+C1befcrhvvLQFqDiYfWIHm7zfKlqdi20ImPz8fgYGBSExMpKqYCkShoiCu7D1xpaditfJY8p9cHLhYzaqpolJ6oPjL8JerbGEhCAJVxVQwChUFcKx74myZX2d7KvnX6vHgR0dR64W68Z4IDVDDYLIqpj6LM+hG2DrH13h7tWTaChk65l9aFCoyx/M8LBaLy0etONNTWXewEH/9Lt9rdeM7EqpTt1klUm+Sf/VIZ1FPpX08z7c5pOtsyFBVTOlQqMhUa3tPXPlky3Fcm6HSZLZi0focHC2qZdRaNpRQdtifWXkeT39xGpUGMyb1icKsEV0QH6Zj/jy24d2OUFVMeaJQkSEWZX7b2qdysrgOD3mhbjwH+NRQFUuulBOWi4r6JsxZdwxVhuabdV6ZHh/sL0KwVoU+cSG4o18M7hsWj8jgAI+fy9lQaamjqpgAhYw3UKjIjOPeE8c3iKtaG/5atecS/rn3kks3e3dXWik5UHi5L3/zsqNFtVjy2clWXwdGM4/jJfU4XlKPlbsLEKpTo398KO7uH42MoZ0RonP9FmPrmXuKqmJKg0JFJljXPXGcqDc0WbDg46M4Vep63Xilr7Ryh0UA7vz7TxjRvRPSh8ZjYnIU8xuNUm5c/z5cjLe+c/6DiL7JiuyiOmQX1eGNnZcQHqjBwC6huHdALFKGxEOn6fhDkrs9lY60V0umtZChqpjuoVCRATHqnth6KkcuV+Gp/55EjVHeq7vkpkJvws6zldh5thIqDugSHohxieGYPbILhnTt5NG1lTJR//zmM/jmdIVH16hrtOBQQS0OFdTi5W35iArWYkjXMEwbFIspA2KhVd8cHmKFSktUFVMcnKCUV7iPstWqYF33pLGxEb/9eB9+uKaBlYZzmNKoOCRGBeG23pH41cguSIgKdunrjUYjDh8+jMmTJ4vTQA81mK349Ue5yHehRLQ7OAAxoQEY1r0TUgfH4Y6+0eA4Dj/++CMGDBiAyMhIUZ+/I7aQsc3NUC0Z51CoSMQ23GVb3cUyUOobzJi39gguVBqZXI+0T6dRITk2GJP7RGPOiC6IDm1/stpgMODIkSOyDJUrNQ2Y92EOrjd6v2fLcUB8mA4JgU2YO64n7hnSXTY3bMeCZRQy7aNQkUBbJwuzcOBCJZ7c4HrdeOI5jQqICgnA90/f0u7j5BoqP+RX4ZmNebI5lVrFAV3DAzEmMRz3De+M4d3DpW6SHYVM22hOxcsceyesj5d46esz+Dy7hNn1iPO0KsDMA3VOnkwgtxvNB/sL8f4PhVI34wa8ABTXNqK4thGbjl+DWsWhR0QgbukZgdnDO6Nf5zDJ2tZe6WV/r4pJoeIlLPaetKXKYML9a49Q3XiJqLjmQAHg1Kd8OQ0OCIKA33xxGj9ckP+5b1ZewOXqBlyubsDnR68iUKNCv/gQjOzRCfcN74KkaNfmtlhyDJnWqmI6hoyvV8WkUPECxzK/AJiubNmZV47fbTzp9brx/lL7xBmOOeLs7UEON5L6RgvmrjuGK7WNUjfFLWYrjxP/2yPz0U8l0GlU6BkdhInJ0Zg9ojO6hgdK1jZ/ropJoSIixyWKrFd3CYKAZVmnseVEGZPruaploKg5wA+3tLhFDj2V89f0mL8+F0aTMufeVK283posPM5eM+DsNQPWHCxCkFaF3rHBuKNPNGaP6IKoEM93+7vLn0KGQkUkYuw9sblW14h567JRWiefT5gt3+DtHQ5JpO2pfHPqGl74Sv51c9rjTNsbzDxOlepxqlSPVfsKERKgRr+4ENzVLwYzh3dGWKB0tz9XSy9fuHABXbt2RUxMjGRtdhaFigjaK/Prqa+OX8X/bZbPCp22UKDI05vfXcS/D/vnYg6DyYpjxddxrPg6/vr9JYTp1BjYJRRT+sciZUgcggPkFzK2if/HHnsMjz/+OBYuXChZG51FocIQ66NWWl776f+ewM4znu1wFpu/HyTpzI9biuEvK8/j4X+fwLEr1516vG01201/rua8Pn8nlvomK36+XIefL9fh1W8vICJIg8FdwzBtYBymDWp9t7+3tFzIYzAYEBoaKll7XEGhwoiYw11F1UY8sC4bFRLUjW+LRsXBwgsI0qrQYObtB0/6xu3GfRargO/PVuLOftHt/vy9OfxVpTdhzrpjLr1+WgsUAD4TKK2pbbDgwMUaHLhYg+Vfn0N0iBbDunfC9IGxuLt/DNQSnWYsCAIMBgPCwqRbQu0KChUGXCnz66rPjxTjz9+cld0kuG34reF/dx9/PHiyNQKA32bmgeOALp10GJsYgdkjOmOYw8Y9b/dU0v+V7fT+GfKLKoMZu89VYfe5KnAAYsMCMLJ7OFKHxIlyyGh7DAYDQkJCvPZ8nqBQ8UDLvScsA8Vq5fHYZ8ex/0IVk+u1x9bbYC0kQA2jj5UAdpYgAKV1Tdh84ho2n7h2w3lh0/qEevWGRIHiOQFAeb0J356pwLdnKqDigM6ddBidEI6ZwztjdEKEqM+vpOEvOqbFTS33nrDczHihXI8HPzqKGqOZyfV0GhUd2yIzASqgb+dQ3NU3BrNGdGZS3Ko1giBg6F/2i3Jt8gs1B3SLCMS4pAjcN7wLBndlN1TF8zwiIyORn5+P3r17M7uuWChUXORpmd+OfPRjId7ame/yck8V59wyS7H5+0S9u8J0agzqEoapA52vO+IMk4XHqDcPOP14WgruGQ7N38OnJyVi3pjuTK5pMBjQpUsXXLt2DXFxcUyuKSYa/nKBmAdBWqw8Hv13Dn68VOPW18shUAAKFHfVN1nx0+Va/HS5ue5IdIgWI3uEI3VwLCb3jXH7dWa2utZDpUDxjIpr/lkGaNUdP9hJBkNzCQKaU/ExYu49AYCcK3VuBwrxPVUGM/ZfqMLe/CpYeQFdOukwLinC5SJhJhdDpSMhAWoYTBQ8bbGtVwkL1DK7pl6vh1qtRmCgdMfOuIJCpQO2yfjCwkLEx8dDq9WKMskq5cYrIj9aNYdGh6NwSuqakHX8GrKON0/6J0UHYWLvKPxqZBd0jwxq8zqsV+VRoDgnPJBtTyUkJMQr1TBZoDtZO2zDXRaLBadPn0Z0dDQCAsSZUA3RKeMFQ7yjvf0gFl7AhQojLlQY8dFPxQjSqtAnNgR39o/B7OGdER70y6dkk48v0NCoADn+EyOC2PVUlLScGKBQaVPLvSe2mu9iCdO5/iK0bUAk/q3BzONEaT1OlNZj5e4CdArUYFCXUEwbGMt0FZIrArUqNJl50efY5BgoABAexO7WSqGicI57TxzL/KrValFDJVTneneZAoW05nqjBYcKanGooFayNjSKsO9JSTqJ0FNRymnFFCoOeJ6HxWJp9agVlUpl/3Mx6BiuFvFVtFyZKEUQw/ezXq9XzMZHgEIFgHN7T8TuqYjJ8RBAJd+YldpuQjxhNBpp+EtJnC3zK3ZPBRDvhu846Us3ZkLEpWI8SqXX6ylUlMJx74mt6lpbvNFT4bjmM6O8SS478QnxFSrGcx9KOvcL8NNQcafuiVd6KhKkCgUKIWypGXdVjEajokLF7zZH2Pae2OZPnN0d742eCutuMyG+To7vGdahorThL78KFVtpTovFYh/ucnaZnlqtFr2nwrrbzJqKaz4mX6dRQd4tJf5Cjj1tDeNQoeEvGbINd7naO3Ek9uZHQLpPXcEBapgs/A37XlobieMFiFJ3hRBvUHPwSrE7rZp9qFBPRUYch7sA9wtpeaOnwrrb7CyjyXrTRkoqiCAPQVqff4t6jbeKkwYwrm1PS4plhGWZX29M1HsrVFQAQKu+FIF6hsoToKHhL58jRplfb/RUWI/FtoUHaMMKISLRadiejqG0UPG5vjXP8zCZTMzrxvtST4UQXxWg5iRfRMKqaifQ/AHZaDQiLEyag0Hd4TOhYpuMN5lMTm1mdJU3lhRrRKqX4M64fADjyUZCWGh5vw7+32vb1ss3WQXJO+GBjOfBaKJeArbJeJPJ5Pbqro54o6fCetVIsLb5eu6My7Mu7kQICy2Pujf+77UtpxO7WR4mCShv+Evxcypil/m18UZPRctw1QgHwGiWzxuNEH8RzDBUeJ6nUPEWd45a8YTSeioUJ4RII5hhFVej0QgAigoVRQ5/uXvUiie80VMJYDjBR3xDaADV2WHFW2+vkAC2VR8BZYWK4noqLPeeuMIbPRXWm6aI8ulN4r7m/Im3Sg+7U8W1LQaDAVqtFjqdjtk1xaaYUBFj74krqKdCCHFGmI7dbdV2mKRSSgkDCgkV22S87abeViEtMVFPhRDiDNY9leDgYGbX8wZZ38Uc957wPO/yycIseaOnEkg9FUJkyZW9J2GBWmbPq7SVX4CMeyq2yXhb70CK3okjbxzTomO8vp0QwkajC3u9woPYTtQrbfhLlh+NHY9akbJ34sh29L0g4vG9OjqRlrRge0lwaF4Jppxbi/8KD2QbKkrrqcjqLmabjLcdtSKHMLFRq5t7EWIOgTnuxGV5fhBRliCtCtr/HTti+4AsoHklGO0/kjedRoVOgf49pyKb4a+Ww11yChQA9nPErFarPWBYa76ZNB9J3+St9Y9Edvz1uHsOgJoTYBHk8753RYCaQ5OFR2QIu+W/er1ecT0VWYSKVHtPXCF2T8Vq5XH8Sh389H5CCARAsYEC/HJeHstRBiUOf0kaKo57T7y1M95dtoUCYkzWF1UbMW9tNqoMJubXJr4vQMPBbJH+dF7CntFoVNzwl2QD97a9J1JtZnSHGMuKN+WWYuqqQxQoxG0mPw0UOa5rYV0SiXoqTrLNn9j2nsg9TGxYLisWBAHPfnkS20+XM7keIf6m+b4hrzhVMb6X6fV69OrVi+k1xSZJqNiWCQuCoJhAAX5ZVuyp8vpGzF2TjdK6RgatIkR5QgJUMJg8ey/xIi7vdxfrQzEaGhoUVaALkHBORUk9FBsWPZXvzpTj2S9PwkxFsIgf8zRQAFuvQGbvI57HTz/9hKioKERGRiIyMhIajfu3WdvZX0oii9VfSuFpT+VPX+Xhv0dLGbaIEP8l5mdSFde8tN9VugAtevfujerqaly8eBENDQ0ICwuzh0x4eLhLZc4NBoOi6tMDEvdUlMbdnkpdgwlz12SjoMooQqsI8U8cxOupuFudWKvmEBsbi9jYWABAY2MjampqUF1djdLSUlgsFkRERNhDJjQ0tN17odLq0wPUU3GJOz2VQxer8dhnubSZkRDGWH4uDdaq7PXuPdHypPHAwEB06dIFXbp0gSAIMBgM9pApKCiASqVCZGSkPWSCgoLsXysIAoxGo9dWfy1btgxvvfWW/f/37NmDyZMnu3wdChUXuNpT+evOfKw9WChiiwjxXUFaVbunC7AMFRaBArRfE4njOISGhiI0NBQ9evQAz/O4fv06ampqcPXqVZw7dw6BgYGIiopCbW0tEhMTvbakODc3F3/729+YXItCxQXO9lQazBY8sO4o8q7We6FVhPimjo6r4WR4vKYru+lVKhUiIiIQERGBnj17wmKxoLa2FjU1NVi5ciW2b9+OyMhIrFmzBvX19ZgwYcINPRlWeJ7HkiVLYLFYEBcXh/Jyz7Y5SLZ9yFfnVI4X12HCW/spUAjxQ54c0aLRaBATE4M+ffpgw4YNyM3NhcViwfXr17Fo0SJERkbi7bffZtjaZu+99x6OHDmC/v37Y/HixR5fj3oqLuio+uPqHwqw8vuLclvkSIhPkuPH0iCG2/wjIyNRV1eHDz74AFFRUcjPz2f+YbyoqAgvvvgiAGD16tXYs2ePx9ekUHFBW8e0mK08HvrkGLILa73fKEKIbAQxLLRnMBgAwL5CrG/fvsyubbN06VLo9XosXLgQkyZNUnaoKHH4S6VSwWS68YyuC+V6PPBhNuoaLBK1ihA/1c4tRKvmJNlgHBzANlR0Oh20WnbliR198cUX2Lp1K6KiopgOq1FPxQUteyr/OXwFr2075/aadkKIB9o5pkWqEytYh4pYpYRra2vxzDPPAADefPNNxMTEMLs2hYoLbHMqgiDgsf/kYl9+ldRNIsSPyW+0I0THLlT0er1ox94/99xzKCsrw4QJE5hMzjui4S8X2Hoq01cdwiXaHU+IpOQ4QBASwL4+Pet75f79+7F27VpoNBqsXr2a+fVlWJFAvmw9lcvVFCiESI31icAshDHsqYhxRIvJZMKSJUuaS288+ywGDx7M9PqAxKGitN6KSqWCXq+XYaebEGUIZFhqt7V5kwC1tO/OsEC2PRXWofKXv/wFZ8+eRUJCAl566SWm17aRYdbLU2NjIy5dugSLxQKNxC9cQpSqkeEZeK0Nf5kkLinRScahcvbsWaxYsQIAsGrVKtEOqqSJeidUVVXh+PHjCAsLg9VqhUbFownsa9UTQpznao0unVqFJqu4B7t2CmI/p8LKu+++C5PJhF69esFoNOLzzz+/6TGnTp2y/3737t0oKysDAKSmpjodQpKGCsdxEGRYvc1GEARcunQJly5dwoABAxAcHIwTJ05AzboQNSHEdS7eO1oGSqCGQ6OF7f2nk06+odLU1AQAuHTpEu6///4OH//qq6/af19QUKCMUJEzk8mEEydOwGg0Yty4cejUqRPq6upgtVqhVdO3jRCpedrnYB0oABAZzG6josFgEG1JsZhoTqUVtbW1+PHHH6FWqzF+/Hh06tQJwC9LijVyXHZCiJ+R4yhHBONQYdlT+fjjjyEIQru/HCfv9+zZY//zpKQkp59H8uEvOREEAUVFRTh//jySk5ORlJR0QxttS4qlXmFCCHF9TsVdHdV1caRl+IHTW7VUWKNxnP+xWCw4deoUampqMHr0aERGRt70GLW6eQ06yxcOIcQ93joeydlAYc1oNCqulDBAoQIAqK+vR05ODoKCgjBhwgQEBAS0+jiVqjlMqKdCiHicPQxSboNfrNfv6PV66qm4Sg7DXyUlJcjLy0NSUhKSk5PbbZOtp+JJIR5CSNt0ag5NEu81cVdMSOsfRt1lMBgQFhbG9Jre4Ld3R6vVilOnTuHs2bMYMWIE+vTp02HI2f6eeiqEiEOpgaLiAKOJbfkLKYa/Xn75Zfvk/OTJk926hl8OfxmNRuTk5ECtVuPWW291uu4zx3FQq9XUUyGE3IAX2A7HCYJAE/XukGL469q1azh58iS6deuGfv362edJnKVWq6GjngohkuMgr3kVjYv3ko6IcfaXN/hNT4XneZw/fx7FxcUYPHgwOnfu7NZ1VCoV00PxCCHukVOgAM0LDFhS6pyKX4RKY2MjcnNzYbVaMX78eI/Sv3n4i3oqhJAbaRl+2LRYLGhqaqKeihxVVlbixIkTiI2NxcCBA+0ruNzV3FOhUCGE3CiA4f41vV4PANRTcZWYcyqCIODixYsoKCjAgAED0L17dybXVavVYHi6NSHEDWLOpwRrVTC6seGR5QIeg8EAADRRLxetHQbJikqlQiC74m6EEDeoOECs1cfuBAoABGrZhkpQUJDHIytS8LlQqampwfHjxxEeHo7x48dDq2V3wBvQ3FMJouEvQqTFsKsSqFExKR7GcgGP7YRiOWwQd5XPDH8JgoDCwkLk5+ejT58+SExMFOUHQnMqhEhPBQ5WRqnCqhplkJZdr0Kv1ytykh6QQU+FRaEui8WCkydPoq6urs3DIFlRq9UIplAhRFJy/AAfHMAuVGwbH6mnIgHHwyBvvfXWNg+DZEWlUiFII7cV8oT4l+abrbzehyEMQ0WpJxQDCg+V4uJinDlzBj179kTv3r29kurNcypsz/ghhLiGk1mgAECwjoa/AIWGitVqRV5eHsrLyzFixAjExMR47blVKhWClbcggxCfIs+eCtv69BQqbnJ1TsVgMCA3NxdqtRoTJkxAYGCgiK27mVqtRqBamqI9hJBmHY1JhOrU0DdZvdIWm04M9xoo9TBJQAah4oqysjKcOnUK3bt3R9++fV0+DJIFtVrtvTqmhJBWdTTS7e1AAYAwHbvbKc2piIzneZw7dw4lJSUeHQbJgq1OvSONCmC0KpEQ4hT5rYoKY3jUhlKrPgIyCJWOJtcbGhpw/PhxJodBsqBWq8HzPLRqDharABVHgUKIt8lxpW14ENs5laioKGbX8ybJQ6U9FRUVOHHiBOLj4zFgwABZHFmgUqlgsVgQGaRFud4k2lERhJC2sa4Hz0J4ELvTO4xGI/VUWBIEARcuXMDly5cxcOBAdOvWTeom2VU3WPGHfQZUNkjdEkL81/VG78+ZdCSCYajQRL0HWg5/mUwmHD9+HA0NDbjllltkdfTz3vOVWLrhPA13ESJTUi40Zj38JfVQv7skDxVHNTU1yM3NRWRkJEaMGAGNRj7Ne2PHeXz0Y5HUzSCEtEPK0Wgtw3oqSq36CMgkVARBwOXLl3HhwgX07dsXCQkJsjnzpslsxa8/OoqTJdc9uo5axcHK0wQMIVIRc5Um67uV7ZRiJZI8VCwWC3Jzc1FXV4cxY8YgIiJC6ibZXSjX4/512bje6PmxLBQohEjLMVBYD5Ox/AwsCAL1VDxRU1MDnue9chikKzKPleD/fXUGlAWE+B7Wb2sV45EVmlPxQFxcHCIiImQz3CUIAv6QeQpbT16TrA2BWhUa3aw+RwhhR+1khUk14zXO1FPxAMdxsgmUugYT5vzrCAqrpV0vTIFCiDw4uw9NwzBUTCYTzGYzLSlWuiOXa/DIpznMqsARQvwHy1AxGAwAQKGiZKt/KMDK7y/K7CBtQohSxHdiNx+s1+sBgOZUlMhq5bH43zk4dKlG6qYQ4vMC1BxMPniuUXigBmseGMrserYTiqU4hZ0FyUNFqvmU0poGzFl7BJV6kyTP3x6tGjDL7xQKQjziGCgqDrJeWalVczA7EYBRwVpsfWIM8xOKg4ODZTPX7CrJQwVwvVCXp3bmlePZL0/CItNXNQUK8XW2t543w0UFoOWMaVuru5wJlLiwAHz9+GgEM6z4CCh7OTEgk1Dxple3ncW/fy4W/Xl0GhWaaNKfkHZ583Nda+9Gd0fjuobr8NXjY6DTsB+istWnp56KzDWYLZi3Nhtny/RMrqdVAe2t/KVAIUQ8oTo1IAB6k/e79XGBAl4br8G10mJERUUxDwAlV30EZBIqYg9/nSmrx4MfZrtcYrS9oxzktJVEp+HQZJHnUB4hYpCiXDAA9IkNwScP9ENdbS2qqqpw6dIlaDQaREdHIyoqClFRUdBqPTsC39ZTUSpZhIqYNhwpxp+/OetWN1spt2kTBQohohvcJRSfLRoBjuMQFhqK7t27g+d51NbWorq6GpcvX0ZeXh7CwsLsIdOpUyeXezFKrqUC+Hio/P7Lk9h6SrrjVryFIoUQcY3q0QkfzR92U0CoVCp7DyU5ORlNTU2oqqpCdXU1rly5AgD2v4+OjoZOp+vwuZRc9RHw8VDxh0AhRAk4ACE6tWTDVp6Y0CsSq+8f4tRjdTodunbtiq5du0IQBFy/fh3V1dUoLS3FuXPnEBwcbO/FREREtLoXhVZ/MSDWKgcpq8B5oqNFAIQojQDp5kE8cVe/aKycPcitr+U4DuHh4QgPD0fPnj1hNptRXV2N6upq5OXlwWKxIDIy0h4yQUFB4DgOer2eeU8lOzsb27Ztw4EDB5CXl4eKigpotVp07doVEyZMwOLFi3HbbbcxeS5O8OYGkTZYLBZYrexfcANf3uX2kkEpUUEvQpo5e0qwGFIGx2FFen9Rrm2rmVJdXY2qqirU1taiqKgIe/fuhdVqRXJyMv76178yea7bb78d+/fv7/BxCxYswJo1azwuQSKLnopYVCoOVhdfkXLo3VCgENLM8e0bEqCGwUtLiGcP74yXZvQV7focxyE0NBShoaFISEiA1WpFdnY2Dhw4gP379+Prr79GdnY27r33XkybNg3Dhg1z+7lKS0sBAF27dsWcOXMwceJE+3MeOnQI77zzDkpKSrB+/XqYzWZ89tlnnv3b5NBTsVqtsFg8r67Y0vDXdqOBxpEI8SlqFWAV8W394NhuWHZPb/GeoAOzZs3Crbfeivj4eOzYsQNNTU3Yvn2729dLSUnBggULMGvWLKjV6pv+vrKyEhMmTMD58+cBAPv27cPtt9/u9vP5dE+F5XHUhBB5EDNQHrm1B565o6d4T+AEg8GAxMRELFq0CE888YTHe/i2bt3a7t/HxMTgnXfeQWpqKgBg48aNHoWKMo/BdJJWLe9/nhhHPBDi7zjOvRvb05MSJQ8U4OZ9Kt44ruWOO+6w//7ixYseXUsWPRWxvmlakW/aHJpfwO5OgdBRLoSwJwiuz4suu6cXHhzbXZT2uEIQBEmOaWlqarL/vrUhMlfIIlTEohO5pyKg+QUMNB+VzfOCIlebEeKv1BywfGoy5ozsKnVT7PR6vdfr0+/bt8/++wEDBnh0Ld8OFa33hpecOSqbECIfahWHZyYnyipQAO9vfuR5Hm+88Yb9/3/1q195dD1ZDOqLNfwVqPGsG0cI8U1qrnnpft84eR2HYhv+8mZP5d1338Xhw4cBAPfddx9GjRrl0fVkESpiCfRiT4UQohy2gYVQnbw+eDY1NcFisXjt7K99+/bh+eefBwDExcXhgw8+8PiaPn3XDQqQ1wuGECIvLMsAs2AwGADAK6Fy+vRpzJw5ExaLBYGBgfjyyy8RFxfn8XVlESpiDX+FUKgQQtoRHuhZ7RPW9Ho9OI5DcHCwqM9TUFCAKVOmoKamBmq1Gp9//rlHe1McySJUxBKik9enEEKIvHQKktc9wracWMy9KaWlpbj77rtRWloKjuPw4YcfIj09ndn1ZRMqYnwTQylUCCHtkNsGabHr01dWVuKee+7BpUuXAACrVq3CggULmD6HvL6jjIkdKmoRN7rSCTOEOMeXjmMSczlxXV0d7r33XuTl5QEA3njjDSxdupT58/h0qHQKFHdOxZWdKa6+7KU/5pMQZbC4eaSFF04/cZktVFj3VIxGI2bMmIFjx44BAJYvX45ly5YxfQ4b2YSKGN09MVZ2OH4ocuW17OrLnjKFkNaxulPI5ubnQIyeislkwsyZM3Hw4EEAwDPPPIPXXnuN6XM48ulJh/Agtis7AjUqNNJ5XYRIitUHLpUMh81scyos3X///di5cycA4M4778TixYtx6tSpNh8fEBCAvn3dryXj06ESwThU5BwoGhXn9jAAIf5ILcPxr5YnFLOQlZVl//3u3bsxdOjQdh+fmJiIy5cvu/18sukBijH8FREsrzXoYqJAIcQ1ahn2VKQ4oZg13+6pBHtWa5kQ4rvkuGpMr9cz76l4u7ivbHoqYoiQ2REMhBD50Ii5J8BNYgx/eZtPh4paZhubOiK/lzghvktuGx+B5uEvChVGxNpBqpQbdahOLeq+F0LIjbQy7amIfe6X2GQTKmKR47LB1uibrC49nqblCfFMgAx7KjT8pQAy/DBCCJGBAI38bn8UKgyJNfxle+FQvS5CiCOdDEPFF5YUy++7ylh0sBYqAGb57lv0eUFaFc0BEdkJlFmoCIIAg8Hg1VLCYvDpNbdGoxE1+kZQnkirgRKdyJAcy42LsU/F22TzXWU9/FVVVYVDhw5BK6NPI1SJkhD5CNTI7/1IcyoyJAgCLl++jGPHjqFv374ICdJJ3SQ7g8m1FV6EEPEEBsjr9icIgk/MqfjU8JfVasXp06dRVVWF0aNHIzIyEjpNscvX4UBLdgnxdUFaefVUGhoawPM8zamw4unwV0NDA3JycsBxHMaPH4/AwEAAQKAbLxwKFEJ8X7DMhqMNBgMAKH74Szah4omamhrk5OQgLi4OAwcOhEr1S7dWbp9GCCHi0mk4NFk6/mgYIrOJeoPBALVabf9ArFSyChWO41w+UbOoqAjnzp1Dv3790KNHj5t6PEEye+EQQsTlTKAAQIhOVrc/+xEtjh+KlUhe31UX8DyPvLw8lJeXY9SoUYiKimr1cSE6cXsqGhUHrZqjZbOEKEyQlgPP87K5ifvCcmJAoaHS2NiI3Nxc8DyP8ePHIygoqM3Hiv1pxMILsPACOAAqFWB1MluCA9Qw0mowQiSh4oBu4QGwWCzN/69S2X9JRYz69FKQVag4M/xVW1uLnJwcREdHY9CgQVCr2++JhAZ4558o4MZA0ao4BGhUMFl5mK3N/ybHkr8UKIRI56lJSRjXKxZWqxU8z0MQBHvAcBwHlUpl/6+3GI1GBAcHi3ZklbfIKlQ6UlxcjDNnzqBPnz5ITEx06psfKtG4qZkXYG4RHFTylxDxBKg5mKwdv8d+f1cvLJ6QCAD20OB5/oZfVusv711v9WJo+MuLeJ7H2bNncfXqVYwYMQIxMTFOf22nIEX8EwkhTtCpOTS1ERzOBMof7+mNReMTbvpzx9Cw9VxsAeOtXowv7KYHZBYqrfU8TCYTcnJyYDabMX78eJcL2HQK1LJqHiFEYm0FijP+795kzB/Xo8PH2cLCNrRu67nYgkasXgzNqXhBXV0dcnJyEBERgVGjRkGjcb254dRTIcTvLZ/aB78e292tr22tF2Obi7H9sj2O4zi3ezEUKiIrLS3F6dOn0bt3b/Ts2dPtyavwIPn0VNQurA4jxBsCNSpo1ByazFafLQ/xp+l9MG+0e4HSUlu9GMchM8C9YTIa/hIBxzWvGz9//jyKi4sxfPhwxMbGenTNyGD5hAoFCpGbRgsPWKRuhXheTemHWSO7inb99noxrQ2T2X7fGr1ej+joaNHa6i2yChWTyYSjR4+isbER48ePZ9IVFDtUNCrAQmFBiOy8ntYfM4d38drzddSL6Wiy32g0IiHh5kUESiOrUCkpKYFarcb48ePdmj9pjdjDXx7MGxJCRPJGRn+kDfVeoLSmZS+moyXLNKcigp49e6J79+5MN/+IvZHIxaPKCCEi4gC8OXMgUobES92UGzizZPnMmTMYPHiwxC31nKxCxbZygv112d38HXfFy5lWBfAC9aSI/+AAvDNrEKYOipO6Ke1qbZjsr3/9K8rKyjBkyBApm8aErEJFLCqOg5VRqighUAD47EoeQlrDAVg5ZxDuGSDvQGlJEASsWrUKq1atwr59+zBq1Cipm+QxvwgVNQfQSVuE+CaOA96bMwR39Xf+pA05EAQBH3zwAd58803s2LHDJwIFkFmNerHmPzQyOdqaEMKWigP+OVeZgbJu3Tq8+uqr2Lp1K8aNGyd1k5jxi56KRs0BZqlbQQix0aiaS32bLLxTZ3a1RsUBq+8fituSlbW3QxAErF+/HsuXL8fXX3+N2267TeomMeUXoaJVK/soaVZUXPPkPSFSs/CAvumXQemQADUEQYDRyclAFQf864FhuLV368X55EoQBGzYsAF//OMfsXnzZkyePFnqJjEnq1ARa/grQE3DX8DNgaJVc/ZaL4RIyeBQJkKn4aBVq9Bgsra6elHFAWseHIbxPZUVKACQmZmJ3/72t/jiiy9w9913S90cUcgqVMQSoKFQaQ0FCpGjJouAJktzyKg5IChADbNVQJOFh07D4V8PDMOYpEiJW+m6LVu24IknnsCGDRswffp0qZsjGtmFijPVH10V6BAqKgC02pYQZbAKvwyThelUePL2JEUGyjfffINHHnkEn3zyCdLS0qRujqj84iN8iE5jn1ehQHFPsNYvXipEpjgA9U08IkN0UjfFZd999x0WLVqEtWvXYvbs2VI3R3R+caeIDNbQUI+HnJ1AtQnU0OIIwo7t3RsSoJa0Ha7au3cvfv3rX+P999/HvHnzpG6OV8guVMSYrOcFusF5m9j1vIl/ClZQqOzfvx9z587FypUrMX/+fNHPIZQLv3jnB+uU80L0FRoVBx31VtzG4hO5Tg1w8K0eulJ6Kj/99BPmzJmDN954A4sXL/abQAH8JFRCFfJC9BVqrnlStcki7xuanEPPcYmtu5qsgAD5/hvdEaKT3dqim2RnZ+O+++7Dn//8Zzz55JN+FSiADENFjB9AaKBrL0SViK8BF5uiOBwH/CV9AHRa+f9D5R56rfGv29PNQmU+6pCbm4v09HS88MILeOaZZ/wuUAAZhooYQl38dCPmrvNGBZVuVXGu3cS0ag6fLBiO1KGdRQ1md2jk1iA3KS8G2XL1A6I3nTp1Cmlpafj973+PP/7xj34ZKIAM96mIIUwBXWaptFdrxpVwDQlQI/PR0UiIDgYAqGV2E1dKyQLSvmCtPHsqZ86cQUpKCp544gksX77cbwMFkGGoiPHDELuksJKx2GcaFxaALY+PveH7rPbjNxVrGhWg06hh5QU0Wvx7p5Ucb9b5+flISUnBokWL8Morr8iyjd4ku1ARgzdDRa3iYPWjT8X940Px30dGQdvifDWVzHoqSmbhAQuDiXvC3qVLl5CSkoK5c+dixYoVtJQefjKnEhHsvVDxp0C5o280MpeMvilQAHF6Kr4UUxoVx2Sex59OOpBbB6CwsBAzZsxAamoq/va3v1Gg/I/seiriDH/J7p+pePPHdcP/3du3zb8XY05FKXGt03AdrixjNcfj6kkHSianW3ZJSQlmzJiBKVOm4B//+AcFigO/uNtGBwdI3QSfsnxqH/x6bPd2H+ONiXqtqnloSKqwCQlQt7qfRIlLlZVALnMVZWVlmDFjBiZOnIjVq1dToLTgF6Ei52WISqLmgPfmDsEdfTsu3eqNJbxSf0hnsUGROE8OKwrLy8uRkpKCUaNGYd26dVCr5bkaTUqyu9uK8WlELp9wAOVWX9RpVPhs0UgM6BLm1OMtZpPILSLexqF5L5K75X89JXWmVFVVIS0tDQMGDMD69euh0cju9ikLfvNdaW8/hjcpMVAigjTY9NgYxHcK7PCxgiCgsLAQRoMevjW1TgRAskABpO2p1NTUID09HUlJSdiwYQO0Wtqm0Ba/CRU1x8Eih1RRmB6Rgch6bAxCAjp+qQiCgHPnzuHatWuIjowAaurEbyDxG1KFSl1dHTIyMhAfH48vv/wSAQE0R9sev5lhon0TrhvRvRO+/c0tTgWK1WrFiRMnUFVVhbFjxyJQJ90bj4P8z4girpPiqJ36+nrMmjUL4eHhyMrKgk6nvCJh3ia7UBFj/kMQBGhkNK/iLJ1Guh/PLZ1VeDixFrm5uSgpKYHJ1PYcidlsxrFjx9DU1IQxY8YgKChI0rO2BPxSgpb4Dt5ixuXLl2EwGLzyfAaDAXPmzIFWq8WWLVsQFBTkledVOlkOf7GsUy8IAqxWKzRqDjAzuaTXNLl4JAereaMnbk/EU5N7wWAwoLy8HCUlJThz5gzCw8MRFxeH2NhYBAc3n/HV2NiIY8eOISgoCEOHDrWvhpHDSh0iLs3/lnR7S4BWg+rqaly8eBGBgYGIjY1FTEwMIiIimC/rbWhowNy5c8HzPLZv346QkBCm1/dlsgwVVmyBwvO8vUa9L+scpsMnC0dg3Y9F2H2uEhV611ZgcQBeT+uPjOFdAAAhISHo2bMnevbsiaamJpSXl6OiogL5+fkICQlBeHg4ysvLERsbiwEDBtzwxvaVU4FJ27x9DFmQTouRI0fCYrGguroaFRUVOHnyJHieR0xMDGJjYxEdHe3xJHpjYyMeeOABGAwG7Ny5E2Fhzq14JM18MlQEQYAgCOB5HjzPQ6VSIaCVo0R8jYUX0D0yCC/N6IeXZvRDjdGEjw5dwY68chTXNLa7SVCj4rDm18Mwrmdkq3+v0+nQo0cP9OjRA2azGYWFhbh8+TIAoLq6Gvn5+YiNjbV/aqRQUZZArQqNjDb+BAeoYDSxTxzbcUAajQZxcXGIi4uDIAioq6tDZWUlCgoKcOrUKURGRtpDxtajdpbJZMKCBQtQUVGBXbt2ITw8nPm/w9fJMlQ8Gf5yDBOguVY6x3EIkHB+wltu631jIEQGB+B3d/XG7+7qjQazFZ9nl2DL8TJcqDDcsLQ5JECFLx8djaRo57r4VVVVKCwsxIABA9C5c+cbPjUKgoDY2FiYTQoba3SDigOCtGoY/7cJ0tORxyCNCo0WXpITAlgFCgB7oHAAQnRqZvNbrZ0xx3EcIiIiEBERgeTkZDQ0NKCiosLeow4ODkZsbCxiY2MRHh7e7pyt2WzGokWLUFRUhN27dyMqKopJu/2NLEPFXbbhLlsgOQ7HBPr4wXsP3dIDz01JbvPvg7RqLBqfgEXjEyAIArYcL8MXx0rRaLZi3fzhiHTyKJuioiJcuHABQ4cORWxsLADY37S2T43l5eWor6tg8u+SM15gu6u+wceOtWe9YCLAiSHsoKAgJCQkICEhARaLBVVVVaioqEBubi4A3DBM5rh50WKx4NFHH8W5c+ewd+9exMR0fGoEaZ3PhIrj/Imtd+IoUKbFfVqjVXMwO7nJjAPw4vQ+mDe6/bO4bvgajkPG8C72uRNnCIKA/Px8lJaWYtSoUa0OCzh+akwoVAHFV5y+vq/RqDjwgqDIza5y5epqSI1Gg/j4eMTHx0MQBNTW1qKyshIXL17EyZMnERgYiB9++AEZGRlYuXIljh8/jr179yIuLk6kf4F/8IlQEQQBFktznd7WAgVoHlqQCw7tD5U4GygaFYcP7h+KCb3F7abzPI/Tp0+jrq4OY8eOdWqcWuMHCyPaQ5UmnRfg5NEvngxhcxyHyMhIREZGok+fPjAajTh69Ci2bduGN954A1qtFo888ggKCwsRHx9Ph0R6QJbfOWf3qtjmT2xDXhzHtfm1QQHy6amwuN0Ea9XIemyM6IFiNpuRk5MDo9GIMWPGOD3xqaWJeuIkZ49+YblvKzg4GBMmTMCYMWOQlJSEt956C9XV1Zg+fToSExPb3ZdF2qfYnkpbE/JtCfGhHdaxoQHY/PgYp+dB3NXY2IicnBzodDqMGjXKpQP0NPRJjzDGMlR4nsf//d//Ydu2bdi7dy969+6Np556ChaLBadPn6ajWDygyFBpb0K+LY5HjXQ0/CRnbZXvZU2v1yMnJwdRUVE37UFxhr8PfxG2tGoO6UPjmVyL53n86U9/QmZmJvbs2YPevXvb/06j0WDYsGFMnsdfyTJU2utxtNx/4uxQWYhODTXXHCZKHe6+q18MVs0dIvrz1NbWIicnBz169EDv3r3dOjrH1zabsioIFhzwyxJkf+dsGQgOwNv3DcRtyZ6vyBIEAa+//jr+85//YM+ePejXr5/H1yQ3UtQYha2HYrVaXQoUALgjORq9Y5V71MKi8T28Eijl5eU4duwYkpOTkZyc7PZZbGL3pLzNzKjCpL8FSnuvHmcD5Z1Zg3DPAM9XZAmCgL/+9a9Ys2YNvvvuOwwcONDja5KbybKn0hpb78TVHorNqKRIbH58LAwmC9YfKsbXp8pQWNUg+2EwDsBLM/riV6O6if5cV65cQX5+PgYPHuzxskotzan4ndZ25Xvy/uIAvD1rIKYOYhMof//73/Hee+/hu+++w9ChQz2+JmkdJ7A6uZEhnudhNjfvyLYduWK1Nn/Ca2+Fl6uaLFZ8fqQEm1rZZS4HGhWH1fcPxa0ir/ASBAEXLlxASUkJhg8fjoiICI+vuSm3FP/vq3PgFFrpkkiLA/DmzIFIGeL5PIogCHj//ffx+uuvY8eOHRg3bpznDSRtknWouDMh7y4rzyMz5yq+PHYVZ6/pYZX4ThgcoMYXi0ehl8hDdjzPIy8vDzU1NRg5ciSz01jzr+nx/7aeRd5V6b+XxDPO7iNh6c2MAUgd2tnj6wiCgLVr1+JPf/oTtm3bhgkTJjBoHWmPbEPFZDLZ96C4M9zlCUEQ8M2pcmzILsap0nqnNyOy4q0lwxaLBSdOnIDJZMKIESNEKUBktvLYeKwUmbllOCeDsCby9xeHk7I9IQgC1q9fj+eeew5ff/01Jk+e7HnjSIdkGSrnzp1DaGgowsLCoFarvRoordlzvhKf/nQFOcXXXa5x4qr+nUPx38XiLxluampCTk4OtFothg0b5tIeFHcJgoAdeRXYkF2CEyXify9JMxXXPN9h5QU0WWT3dr/B62n9MZNRoHz22Wd49tlnsWXLFtx1110MWkecIctQeeyxx/Dxxx/jjjvuQEZGBmbMmIGoqCjJwwUAfi6owUc/XUH25VoYzWxX8nhrybDBYEBOTg7Cw8MxaNAgyY6k+LmgBp/8dAVHCmuZHsxIlOnVlH6YNbIrk2t9+eWXePLJJ7Fx40ZMmzaNyTWJc2QZKoIg4Ny5c8jMzERWVhZOnjyJiRMnIiMjA6mpqYiNjZVFwJwsrcO6g1dw6FIN6pssHl3r4VsT8Ie7e3f8QA/V1dUhJycH3bp182jJMGvnrtVj3Y9F2HO2CgbGYU3k72WGKxw3b96MRx99FBs2bEBaWhqTaxLnyTJUHAmCgEuXLtkD5ujRoxg/fjwyMjKQlpaGLl26yOLGeKHCgDUHCrH/QjVqG5yvJcIBeHlGP8wZxeYTWntsNU+Sk5ORkJAg+vO5Y+/5Sjz5+Umpm0G86E8unrLdnq1bt2LRokVYv349Zs2axeSaxDWyDxVHgiCgqKgIWVlZyMrKwqFDhzB27Fikp6cjPT0dPXr0kEXAFNc0YM3BIuw5V4lKQ9sH03lryTAAFBcX4/z58xg0aBDi49kcdyGGAxeqsOSzE1I3w2cFaVRQqzk0WXivL0BpzfKpffDrsWwCZceOHZg/fz7Wrl2LefPmMbkmcZ2iQsWRIAgoLS3Fpk2bkJmZiQMHDmD48OH2gOnVq5csAqZS34S1B4uw80wFyq432f88VKfG5w+Lv2TY1tMrKirC8OHDERnZerlguThUUI3Fnx6XuhnEC1gGyp49ezB37ly8//77mD9/vize+/5KsaHiSBAElJeXY/PmzcjMzMTevXsxcOBApKenIyMjA3379pXFi6yuwYyPDl3BqdLreGfWIIQHaUV9Pp7ncebMGVRVVWHkyJEIDQ0V9flYOHK5BgvX50rdDKfoVICJFyC0exgJeyo0H9jJeu9IkFYFDoCRYWnhtjw/JRkLbunB5Fr79+/H7NmzsXLlSjz88MOyeK/7M58IFUeCIKC6uhpbtmxBVlYWdu3ahd69eyM9PR0zZ85068RdJbJarThx4gQaGxsxYsQIBAYGSt0kp+RcqcOvPzom2vVdqapJxPHHe3pj0Xg2c3qHDh3CzJkz8cYbb+CJJ56gQJEBnwuVlmpra/H1118jKysLO3bsQPfu3e0BM3ToUJ8MGJPJhJycHKjVagwbNgxarbg9IpZOltZh7lrxQsWRkksgKNXv7+qFxRMSmVwrOzsbaWlpeOWVV/D0009ToMiE791RW4iIiMD8+fOxadMmXLt2Da+++ioKCwtx7733YsiQIXjhhRdw+PBhe7EvpTMajTh8+DCCgoIwcuRIRQUKAGg5770kKVDc426xrGfvZBcoubm5SE9Px/Lly2UVKMuWLbOfT8hxHPbu3St1k7zO53sqbTEajfj222+RmZmJb775Bp06dUJaWhrS09Nxyy23QK1WXqXIuro65ObmonPnzrKZR3JVfrke6auPSN0Mwtgzd/TEYxOTmFzr1KlTmDZtGp599lksX75cNq/z3NxcjBkzBhbLL3vW9uzZ43fHw/h8T6UtwcHBuO+++/Cf//wHZWVl+Oc//wm9Xo+5c+eib9+++O1vf4t9+/bd8AKRs8rKShw9ehSJiYno16+fbN5ortJQbXuf89QkdoFy5swZpKSkYOnSpbIKFJ7nsWTJElgsFo/LRiid34aKo8DAQKSmpuLjjz9GWVkZPv74YwiCgIULFyI5ORlLly7Frl27YDK1vedESqWlpTh+/DgGDBiApKQkqZvjEbWPFffyZxyAJyf2wBOTkphc7/z580hJScGiRYvw8ssvyyZQAOC9997DkSNH0L9/fyxevFjq5kiK3sEtBAQE4N5778WaNWtQWlqKzz//HEFBQXj88cfRq1cvPPbYY9i+fTsaGxulbioEQUBBQQHOnTuHESNGoEsXzw/ik5pWJj2VkACVz5VE9rbHJibiN3ckM7nWpUuXkJKSgnnz5mHFihWyWmBTVFSEF198EQCwevVqBASIe7q43MnnJyNDGo0Gd955J95//31cuXIFmzdvRlRUFJ599ln07NkTDz/8ML766isYjUavt00QBJw9exZFRUUYPXo0oqLE35XvDRqZ3MgNpl92nMukSZIL0jp/u1hyWwKevqMXk+ctLCzEjBkzkJ6ejnfeeUdWgQIAS5cuhV6vx8KFCzFp0iSpmyM5ef10ZEytVuP222/H3//+d1y+fNm+PHn58uVISkrC/PnzsXHjRuj1etHbYrVacfz4cdTU1GDs2LEICwsT/Tm9RY5zKv60rSU4oO1bQoOTmyIfmZCA397J5nDUkpISzJgxA/feey9WrVolu0D54osvsHXrVkRFReHtt9+WujmyIK+fkEKoVCrccsstePvtt5Gfn499+/ahb9++eP3115GUlIR58+Zhw4YNqKurA+vFdSaTCUePHoXZbMaYMWMQFBTE9PpSC6A5Fa/guOY6Ky0ZTZ4trV80vgd+dxebQCkrK8P06dNx++2344MPPpBdoNTW1uKZZ54BALz55puIiYmRuEXyIK+fkgKpVCqMGjUKK1aswNmzZ/Hzzz9j+PDhWLlyJZKSkjB79mysX78e1dXVHgdMQ0MDsrOzodPpFLkHxRlqGmtiIlDT/vdREADWRTgX3tIdf7yHzRxKeXk5ZsyYgTFjxmDt2rWyXOL/3HPPoaysDBMmTPD7yXlHFCoMcRyHIUOG4M9//jNOnDiB3Nxc3HrrrfjXv/6FXr16IT09HR9++CHKy8tdDpj6+nocPnwYkZGRGDp0qCzfZCzIZaJe6Rq9XOFxwbjuWDalD5NrVVZWIjU1FYMGDcInn3zilaqkrtq/fz/Wrl0LjUaD1atXy2olmtQoVETCcRwGDBiAF198EUePHkVeXh7uuecefPrpp+jTpw+mT5+O1atXo7S0tMOAqaqqQnZ2NhISEtC/f3+ffgGrZTbEITZfWGH24NhueP5eNoFSU1NjP2X8s88+k2Vv3GQyYcmSJRAEAc8++ywGDx4sdZNkxb/ewRLhOA7JyclYtmwZfvrpJ1y4cAHp6enIyspC//79MWXKFKxatQpFRUU3BUxpaSlyc3PRr18/9OzZ06cDxR85Hm6pUQGhAWq3j0GRwv2ju+GFqX2ZXKuurg4ZGRno3LkzvvjiC9kuzf3LX/6Cs2fPIiEhAS+99JLUzZEd5bx6fQTHcUhMTMTvfvc77N+/H4WFhZg3bx62b9+OIUOG4I477sC7776LCxcu4MUXX8STTz6JYcOGoWtX8StDEmlZeEBvsqLJooxz6OaO6ooXp7MJlPr6etx3330IDw9HVlYWdDodk+uydvbsWaxYsQIAsGrVKoSEiFsPSYnkN1jpRziOQ7du3fDUU0/hN7/5Da5du4bNmzdj48aNePXVVxEQEICFCxeiqqoK0dHR1EshsjFnZFe8NKMfk2sZDAbMmTMHOp0OW7ZskfWKxnfffRcmkwm9evWC0WjE559/ftNjTp06Zf/97t27UVZWBgBITU31ixDy2wMl5aqxsRELFizA0aNH8eijj2L//v3YtWsX+vTpc0NNGF8OmIF/3iN1E0g7Zg3vglfT+jO5VkNDA+bMmQOTyYTt27fLfs/VQw89hE8++cStry0oKFD8MUrOoJ6KzLz22msoKirCzz//jJiYGCxbtgx1dXX46quvkJWVhXfffRc9evSwV7X01ZowcqLm/GsDZHum94/EKylshrwaGxvxwAMPwGg0YseOHbIPFOIc6qnIjMFgAIA2u8n19fX45ptvkJmZie3btyMuLg5paWmYOXMmRo0a5RMBQz2V1nEAQnRqGJqsktSCuT1Bh/t7msHzPGJjYxEXF4fo6Gi3lrebTCY8+OCDuHr1Knbt2oXIyEgRWiyNl19+Ga+88goA/zz6nnoqMtPRmGtYWBjmzZuHefPmwWAw2GvCpKWlITw8HGlpacjIyMC4ceMUu5eFKjK2TgCgb7La/z84QOXxDnhnpQ6Jx5szB0IQBNTV1aGiogL5+fk4efIkoqOjERcXh5iYGKdWbJnNZjz00EO4cuUKvv/+e58KFEKhomghISGYNWsWZs2ahYaGBnz33XfIzMzEr371K/tx/jNnzsStt94qyw1kbaJUcYq3AmX6oDi8OXMggObFJREREYiIiEBycjIMBgMqKipw5coV5OXlISIiAnFxcYiNjW11wt1iseCRRx5Bfn4+9uzZQ0eb+CAF3WlIe4KCgpCWloa0tDSYTCbs3r0bGzduxPz588FxHFJSUjBz5kxMnDhRtuv/bTQq7ob9G0Q6UwfG4u1Zg1r9O47jEBoaitDQUPTs2RONjY2oqKhAeXk5zp8/j9DQUMTGxiI4OBjx8fEQBAFPPvkkTpw4gb179/p9MStfRaHigwICAjB16lRMnToVq1evxr59+7Bx40YsWbIETU1NSElJQXp6Ou68805Z7geICw1Aud5EwcJISIAaBpO14we2MGVALP422/nd4oGBgejRowd69OgBs9mMyspKlJeX4ze/+Q3y8/ORlJSEwsJCHDx40Cdq/5DW0US9H7FarTh48CA2btyITZs2ob6+HtOmTUN6ejruvvtuBAcHS91EAICV5/HlsVJszLmKc2UGWOkl6nV394/Be78awuRa169fx9NPP41Dhw7BYDBAo9EgLS0N8+fPp/ojPohCxU/xPI+ff/7ZHjAVFRWYMmUKMjIycO+99yI0NFTqJgJoLka29eQ1bMguwanSelhYH61LbnJnvxj8Yy6bQOF5Hs8//zy2bNmCvXv3IjExEQcPHsTmzZuRmJiI3/72t0yeh8gHhQoBz/M4duwYNm7ciKysLBQXF+Puu+9GRkYGpk2bhk6dOslis6UgCNh9rhKf/lyM4yXXFXOciZLc1TcKq+YNY3Itnufxpz/9CZ9//jn27t2Lvn3Z7G8h8kahQm7A8zxOnTqFL7/8Eps2bcKFCxdw5513Ij09HTNmzEBkZKQsAgYADhVU4+NDV5BdWOt0VULStkl9ovDB/WwCRRAEvPbaa/jwww+xZ88eDBw4kMl1ifxRqJA2CYKAM2fO2IfITp8+jUmTJiEjIwMpKSmIiYmRTcCcKK7D2h+L8FNBzQ17OfyZTqNyujd3W+8o/OvX7ALlrbfewj//+U/s3r0bQ4cOZXJdogwUKsQpgiDgwoULyMzMRFZWFnJycjBhwgSkp6cjLS0NnTt3lk3A5JfrseZgIQ5cqEZtg0Xq5sje+J6RWDd/OJNrCYKAlStX4p133sF3332HUaNGMbkuUQ4KFeIyQRBQWFhoD5jDhw9j3LhxSEtLQ3p6Orp37y6bgDlXXIV3tp/EqWoOtU2+NUTGYo/oLUkR+HDBCBbNgSAI+Oc//4kVK1Zgx44dGDt2LJPrEmWhUCEeEQQBJSUlyMrKQmZmJn788UeMGDECGRkZSE9PR1JSkmQBo9frcfToUXTp0gV9+vRBpd6ENQcLsetsJcquN0nSJjkZkxiBTxayC5Q1a9bgpZdewrZt2zBhwgQm1yXKQ6FCmBEEAdeuXcOmTZuQmZmJH374AYMGDbIHTJ8+fbwWMNevX8exY8fQo0cP9OrV66bnrWswY92PRfj2dDmKaxu90iY5GZUQjvULRzD5eQiCgE8++QTLli3D1q1bae+Jn6NQIaIQBAFVVVXYsmULMjMz8f3336Nv3772I/vFrAlTW1uLnJwc9OzZ06n6FQaTBZ/+VIyvT5bhclWDzx87NrJHOD59iF2gfPbZZ/jd736HzZs346677mLQQqJkFCpEdIIgoLa2Fl9//TUyMzOxc+dOJCYm2gNmyJAhzI7sr66uRm5uLvr06YMePXq4/PVNFiv+m12KrNyruFBhgONeSxUApc/KDOveCZ8tGsksUDZu3IilS5di48aNmDp1KoMWEqWjUCFed/36dXtNmG+//Rbx8fH2mjAjR450O2AqKytx4sQJ9O/fH127dvW4nVaeR1ZOGTYeK8Y1vRkV9SZF92KGduuEDQ+zCRQA2Lx5Mx599FFs2LABaWlpTK5JlI9ChUjKYDBg+/btyMzMxLZt2xAREWGvCTN27Fina8Jcu3YNp06dwqBBg9C5c2fm7RQEAdtOl2PDkRKcLL2uuMMuB3UJwxePjGIWKFu3bsWiRYuwfv16zJo1i8k1iW+gUCGy0dDQgJ07dyIzMxNbt25FUFAQUlNTkZGR0W5NmKtXr+LMmTMYMmQIYmNjvdLWveebj4s5dqVO9sfFDOwcii8fHc0sUHbs2IEHH3wQ69atw7x585hck/gOChUiSyaTCbt27UJmZia++uorcBxnLzo2ceJEaLVaAMB3330HtVqNYcOGITo6WpK2Hrlcgw8PXcGRwloY3ThiXkz9O4cik2Gg7NmzB3PnzsX7779vr9VDiCMKFSJ7ZrPZXhNm8+bNMJvNSElJgVqtxhdffIEffvgB/fv3l7qZAICTpXVYd/AKDl2qQX2TtLv5+8WHIGvJGGY3/v3792P27NlYuXIlHn74YQoU0ioKFRFlZ2dj27ZtOHDgAPLy8lBRUQGtVouuXbtiwoQJWLx4MW677Tapm6koVqsVBw4cwPPPP4+jR48iKSkJo0ePtteEaa2ErVQuVBiw9mAh9udXo6bB7NXn7hMbgs2PswuUQ4cOYebMmXjjjTfwxBNPUKCQNlGoiOT222/H/v37O3zcggULsGbNGtmX+JULQRCwfPlyrFu3Djt27IDRaLT3YCoqKnDvvffaa8KEhIRI3Vy70roGrDlQhO/PVaJSbxL1uXrHBuOrx8cyu/EfOXIE6enpeOWVV/D0009ToJB2UaiIJDk5GRcvXkTXrl0xZ84cTJw4EQkJCbBarTh06BDeeecdlJSUAADuv/9+fPbZZxK3WBmqq6uRnp6OtWvXol+/fvY/53keR48etZ+oXFJSclNNGLmo1Ddh3Y9F2JlXgauMj4vpFROMLY+PgZrRvp+cnBykpKTghRdewB/+8AcKFNIhChWRpKSkYMGCBZg1a1ary2IrKysxYcIEnD9/HgCwb98+3H777d5upiIJgtDuzY3neZw4ccIeMBcvXsRdd91lrwkTEREhm5tjfaMZH/14BdtOl+NKjWe7+XtGB+GrJ8YyC5STJ09i+vTp+N3vfocXXnjB698zGj5WJgoVCW3duhWpqakAgKeeegrvvfeexC3yPY41YbKyspCXl4fJkyfba8JER0fLJmAazFb8++dibDlRhoIqI1x5ZyZGBWHrk+wC5cyZM5g2bRqeeOIJvPzyy17/HtHwsXJRqEjIYDDYa8FPnz4d33zzjcQt8m22mjC2gMnNzcVtt91mrwkTHx8vm4AxW3l8cbQUmTlXcb5cf8NxMS0lRAZh69Kx0DAKlPPnz2PatGlYuHAhVqxYIcn3hIaPlYtCRULV1dX2vRWpqan46quvJG6R/xAEAZcvX7bXhDly5AhuueUWe02Ybt26ySZgBEHA5uNl+O/RUuRdrYfFIWF6ROiwdekt0KrZBMqlS5cwdepUzJkzB++88w6zM9lcRcPHykWhIqFNmzbhvvvuAwA899xzePPNNyVukX8SBAHFxcXIyspCVlYWfvzxR4wcOdJ+ZH9iYqKsAmbnmQr853AxLDyPTxaOZBYohYWFmDp1KlJSUrBq1SrJAsVZNHwsTxQqEuF5HuPHj8fhw4cBNE9KUulV6QmCgLKyshtqwgwZMsQeMMnJybIJGJZKSkowZcoU3HPPPVi9erXsAwWg4WO5kv8rx0e9++679kC57777KFBkguM4dOnSBU8++SR27dqF0tJSPPnkkzh06BDGjh2L8ePHY8WKFcjLy4OvfB4rKyvD9OnTMWnSJHzwwQeKCBQAaGr6ZTm2swePEvEp49XjY/bt24fnn38eABAXF4cPPvhA4haR1nAch9jYWDzyyCPYtm0bysrK8Pvf/x7Hjx/HxIkTMXr0aPz5z3/GiRMnwPPyPlSyLeXl5ZgxYwbGjh2LtWvXKurmvG/fPvvvBwwYIGFLiCMa/vKy06dPY+LEiaipqUFgYCB27NhBE4wKdP36dWzdutVeE6ZLly72mjAjRoxQxKf9yspKzJgxA/3798dnn31mP6RTCWj4WL4oVLyooKAAt912G0pLS6FWq5GZmYn09HSpm0U8pNfrb6gJExUVZT9RecyYMbL89F9TU4OUlBQkJCTgyy+/VNw+j3feeQd/+MMfADQPH2dmZkrcImJDoeIlpaWlmDhxIi5dugSO4/Dxxx9jwYIFUjeLMNbQ0IAdO3bYa8IEBwfbi46NHz++zZow3lRXV4fU1FTExcVh06ZN0Ol0UjfJJfv27cPdd98Ni8WCuLg4nDx5EnFxcVI3i/wPhYoXVFZWYtKkScjLywMA/OMf/8DSpUslbhURW2NjI77//ntkZWVhy5YtUKvV9qJjjjVhvKm+vh7p6ekICwvD119/jcDAQK+3wRM0fCx/FCoiq6urw5133oljx44BAN544w0sW7ZM4lYRbzObzdi7dy8yMzPtNWFSU1ORnp6OyZMne6W3YDAYMGvWLKhUKnzzzTeyOsXZGTR8rAwUKiIyGo2YMmUKDh48CABYvnw5XnvtNYlbRaRmsVhw4MAB+5H9er0e06dPR0ZGBu666y5RasI0NDRg9uzZMJvN2L59O8LCwpg/h5ho+Fg5KFREYjKZkJqaip07dwIAnnnmGaxcuVLaRhHZsVqt+Omnn+wBU1VVZa8JM2XKFCa9icbGRsybNw/Xr1/Hjh07EB4ezqDl3kPDx8pCoSKSWbNmISsrCwBw5513YuXKle3uxA4ICEDfvn291TwiQzzPIzs7235kf2lpKe655x5kZGRg6tSpbtWEaWpqwoMPPoiysjLs2rULkZGRIrRcPDR8rDwUKiJx9SiPxMREXL58WZzGEMXheR7Hjx+3B8ylS5dw991322vChIeHd/gaM5vNWLBgAS5fvozdu3fbDy9VCho+ViYKFZFQqBBWBEFAXl6e/cj+M2fO4I477kB6enqbNWEsFgsWL16MvLw87NmzR3FLbmn4WLkoVAhREEEQkJ+fbw8Y25Ex6enpSE1NRXx8PHiex+OPP46jR49i79696Ny5s9TNdhkNHysXhQohCiUIAgoKCuw1YbKzszFu3DiYzWZUVlbihx9+QLdu3aRupluop69cFCqE+ABBEHDlyhV8+umnePfdd7F//35FH7JIoaJcFCpElpYtW4a33nrL/v979uzB5MmTpWsQIcQp8j9Klfid3Nxc/O1vf5O6GYQQN1CoEFnheR5LliyxHxZICFEWChUiK++99x6OHDmC/v37Y/HixVI3hxDiIgoVIhtFRUV48cUXAQCrV69WXI0PQgiFCpGRpUuXQq/XY+HChZg0aZLUzSGEuIFChcjCF198ga1btyIqKgpvv/221M0hhLiJQoVIrra2Fs888wwA4M0330RMTIzELSKEuItChUjuueeeQ1lZGSZMmECT84QoHIUKkdT+/fuxdu1aaDQarF692uWd1IQQeaFQIZIxmUxYsmQJBEHAs88+i8GDB0vdJEKIhyhUiGT+8pe/4OzZs0hISMBLL70kdXMIIQxQqBBJnD17FitWrAAArFq1iknZXEKI9DRSN4D4p3fffRcmkwm9evWC0WjE559/ftNjTp06Zf/97t27UVZWBgBITU2lECJEpuiUYiKJhx56CJ988olbX1tQUICkpCS2DSKEMEHDX4QQQpihUCGS+PjjjyEIQru/HCfv9+zZY/9z6qUQIl8UKoQQQpihUCGEEMIMhQohhBBmKFQIIYQwQ0uKCSGEMEM9FUIIIcxQqBBCCGGGQoUQQggzFCqEEEKYoVAhhBDCDIUKIYQQZihUCCGEMEOhQgghhBkKFUIIIcxQqBBCCGGGQoUQQggzFCqEEEKYoVAhhBDCDIUKIYQQZihUCCGEMPP/AVIiFhmyPYMCAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dev = Device(\n", " device_size,\n", " permittivity_bounds,\n", " coords,\n", " randomize=True,\n", " init_seed=0,\n", " filters=[Sigmoid(0.05, 0.5)],\n", ")\n", "\n", "# ========= Export to STL ========\n", "# STL Export requires density to be fully binarized\n", "full_density = dev.binarize(dev.get_density())\n", "stl_generator = STL(full_density)\n", "stl_generator.generate_stl()\n", "stl_generator.save_stl(dev.name + '.stl')\n", "stl_generator.viz_stl()\n", "\n", "# ======== Export to GDS =========\n", "\n", "# GDS Export must be done in layers. We split the full design into individual\n", "# layers, (not related to design layers). Express each layer as polygons in an\n", "# STL Mesh object and write that layer into its own cell of the GDS file\n", "\n", "layer_mesh_array = []\n", "for z_layer in range(full_density.shape[2]):\n", " stl_generator = STL(full_density[..., z_layer][..., np.newaxis])\n", " stl_generator.generate_stl()\n", " layer_mesh_array.append(stl_generator.stl_mesh)\n", "\n", "# Create a GDS object containing a Library with Cells corresponding to each 2D\n", "# layer in the 3D device.\n", "gds_generator = GDS.set_layers(\n", " full_density.shape[2],\n", " unit=1e-6\n", " * np.abs(dev.coords['x'][-1] - dev.coords['x'][0])\n", " / dev.size[0],\n", ")\n", "gds_generator.assemble_device(layer_mesh_array, listed=False)\n", "gds_generator.export_device('.', filetype='gds')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] } ], "metadata": { "kernelspec": { "display_name": "venv", "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.10.5" } }, "nbformat": 4, "nbformat_minor": 2 }