{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Measuring Performance\n", "\n", "Here's some examples of how to find the optimal worker count and chunk size for different Dask operations. See the scripts in [the github repository](https://github.com/coecms-training/parallel/tree/main/case-studies/read_speed) for samples of how these were measured.\n", "\n", ":::{note}\n", "The first time a file is read can be quite slow if it's not in cache. When running benchmarks make sure to load the file fully once (e.g. with `data.mean().load()`) before doing any timing.\n", ":::" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas\n", "import numpy\n", "import dask\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ERA5 single level one year mean\n", "\n", "Lets look at performance for reading in a year of ERA5 single level data. This data comes from compressed netcdf files, so the time spent decompressing will affect our measurements.\n", "\n", "I've run for various chunk sizes and Dask cluster sizes\n", "```python\n", "path = \"/g/data/rt52/era5/single-levels/reanalysis/2t/2001/2t_era5_oper_sfc_*.nc\"\n", "with xarray.open_mfdataset(\n", " path, combine=\"nested\", concat_dim=\"time\", chunks=chunks\n", ") as ds:\n", " var = ds[variable]\n", "\n", " start = time.perf_counter()\n", " mean = var.mean().load()\n", " duration = time.perf_counter() - start\n", "```\n", "and saved the results in a netcdf file" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "hide-output" ] }, "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", " \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", "
durationdata_sizechunk_sizetimelatitudelongitudeworkersthreads
038.05881736379929600194987520NaN18236041
138.4754153637992960097493760NaN18218041
238.9621013637992960048746880NaN9118041
339.0112923637992960097493760NaN9136041
450.40636036379929600609336093.09118041
...........................
11217.29666236379929600609336093.091180161
11318.4605713637992960097493760NaN182180161
11418.5793013637992960097493760NaN91360161
11520.26324836379929600194987520NaN182360161
11620.70285936379929600389975040NaN182720161
\n", "

117 rows × 8 columns

\n", "
" ], "text/plain": [ " duration data_size chunk_size time latitude longitude workers \\\n", "0 38.058817 36379929600 194987520 NaN 182 360 4 \n", "1 38.475415 36379929600 97493760 NaN 182 180 4 \n", "2 38.962101 36379929600 48746880 NaN 91 180 4 \n", "3 39.011292 36379929600 97493760 NaN 91 360 4 \n", "4 50.406360 36379929600 6093360 93.0 91 180 4 \n", ".. ... ... ... ... ... ... ... \n", "112 17.296662 36379929600 6093360 93.0 91 180 16 \n", "113 18.460571 36379929600 97493760 NaN 182 180 16 \n", "114 18.579301 36379929600 97493760 NaN 91 360 16 \n", "115 20.263248 36379929600 194987520 NaN 182 360 16 \n", "116 20.702859 36379929600 389975040 NaN 182 720 16 \n", "\n", " threads \n", "0 1 \n", "1 1 \n", "2 1 \n", "3 1 \n", "4 1 \n", ".. ... \n", "112 1 \n", "113 1 \n", "114 1 \n", "115 1 \n", "116 1 \n", "\n", "[117 rows x 8 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pandas.read_csv('read_speed/era5_t2_load.csv')\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To start off with, let's look at the mean walltime for a given cluster and chunk size. I'll focus on a single thread as well." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "mean = df.groupby(['workers','chunk_size','threads']).mean().reset_index()\n", "one_thread = mean[mean.threads == 1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and to narrow the results down further I'll select a single chunk layout of `{'time': None, 'latitude': 91, 'longitude': 180}`. This is the file chunk size in the horizontal dimensions, about 49 MB per chunk." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "tags": [ "hide-input" ] }, "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", "
workerschunk_sizethreadsdurationdata_sizetimelatitudelongitude
workers
11487468801192.9430193.637993e+10NaN91.0180.0
2248746880186.1721583.637993e+10NaN91.0180.0
4448746880139.2694193.637993e+10NaN91.0180.0
8848746880121.8748523.637993e+10NaN91.0180.0
161648746880113.1597393.637993e+10NaN91.0180.0
32324874688017.9599643.637993e+10NaN91.0180.0
48484874688016.3443613.637993e+10NaN91.0180.0
\n", "
" ], "text/plain": [ " workers chunk_size threads duration data_size time \\\n", "workers \n", "1 1 48746880 1 192.943019 3.637993e+10 NaN \n", "2 2 48746880 1 86.172158 3.637993e+10 NaN \n", "4 4 48746880 1 39.269419 3.637993e+10 NaN \n", "8 8 48746880 1 21.874852 3.637993e+10 NaN \n", "16 16 48746880 1 13.159739 3.637993e+10 NaN \n", "32 32 48746880 1 7.959964 3.637993e+10 NaN \n", "48 48 48746880 1 6.344361 3.637993e+10 NaN \n", "\n", " latitude longitude \n", "workers \n", "1 91.0 180.0 \n", "2 91.0 180.0 \n", "4 91.0 180.0 \n", "8 91.0 180.0 \n", "16 91.0 180.0 \n", "32 91.0 180.0 \n", "48 91.0 180.0 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_91_180 = one_thread[(one_thread.latitude==91) & (one_thread.longitude==180) & numpy.isnan(one_thread.time)]\n", "df_91_180 = df_91_180.set_index('workers', drop=False)\n", "df_91_180" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plotting the walltime taken for different worker sizes looks good, ideally this should be proportional to $ 1 / \\textrm{workers}$.\n", "\n", ":::{note}\n", "The maximum number of CPUs on a single Gadi node is 48, and the default Dask cluster can't go beyond that.\n", ":::" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "wall = (df_91_180['duration'])\n", "wall.plot()\n", "plt.ylabel('walltime (s)');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Gadi's run costs are proportional to $\\textrm{walltime}\\times\\textrm{workers}$. The cost minimum is at about 4 workers.\n", "\n", ":::{note}\n", "Remember this is the cost for _just_ loading the data and calculating the global mean. Further processing can affect the cost scaling as well\n", ":::" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cost = (df_91_180['duration'] * df_91_180['workers']/60/60*2)\n", "cost.plot(color='tab:orange')\n", "plt.ylabel('cost (Gadi SU)');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To find a good balance of walltime and cost we want to minimise $\\textrm{walltime}\\times\\textrm{cost}$. The best worker count by this metric for this single operation is 32 workers." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAEKCAYAAAAW8vJGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAkBklEQVR4nO3deZwcdZ3/8denZyaZTG5IhoScEwhHBJmEcAZCCOSYEWVXUUFx2QQMoCjgiYgg+tt1URY5FNgoiYK3K7uAzuQwQjiUIwkD5IAFMgk5yUXua47P74+qhOlhjpqZ7qme6ffz8ehHd1VXdX+6xHnnW1Xf79fcHRERkUMScRcgIiKZRcEgIiJJFAwiIpJEwSAiIkkUDCIikkTBICIiSdIWDGY2xMyeNLMVZrbMzK5vYJsJZrbDzCrCx63pqkdERKLJTeNnVwNfdfclZtYTWGxm8919eb3tnnH3i9JYh4iItEDaWgzuvsHdl4SvdwErgEHp+j4REUmNdLYYDjOz4cBo4IUG3j7LzF4B1gNfc/dlDew/A5gB0L1791NPOOGENFbbvrbt38aGPRs4ru9x5CXy4i5HRDqpxYsXb3H3/lG2tXQPiWFmPYCFwL+5+6P13usF1Lr7bjMrBe5x95FNfd7YsWN90aJF6Su4nS3buoxL/3wpPxz/Q0qKSuIuR0Q6KTNb7O5jo2yb1ruSzCwP+BPw6/qhAODuO919d/i6DMgzs37prCnTHN/3eLrldqNiU0XcpYiIAOm9K8mAh4AV7n5XI9sMCLfDzE4P69marpoyUW4il5P7nczLm16OuxQRESC91xjGAZ8DXjOzinDdzcBQAHd/ELgEuNbMqoF9wKWehcO9FhcW89BrD7G3ai8FeQVxlyMiWS5tweDuzwLWzDY/AX6Srho6itGFo6nxGl7b8hpnDDwj7nJEJMup53MG+HD/D2OYTieJSEZQMGSAXl16cUyfY6jYXBF3KSIiCoZMMbpwNK9uepVar427FBHJcgqGDFFcWMyuql28tf2tuEsRkSynYMgQo/uPBlB/BhGJnYIhQwzuOZgj849UMIhI7BQMGcLMKC4s1p1JIhI7BUMGGV04mrW717Jl35a4SxGRLKZgyCDFhcWArjOISLwUDBnkxCNOpEuii4JBRGKlYMggXXK6cFK/k3h5s64ziEh8FAwZ5pTCU1i+dTn7q/fHXYqIZCkFQ4YZ3X801bXVLN9af2psEZH2oWDIMIcuQOu2VRGJi4Ihw/TN78vwXsN1AVpEYqNgyEDFhcVUbK4gC+csEpEMoGDIQKMLR7P9wHZW7VwVdykikoUUDBmouH8xoI5uIhIPBUMGGt57OL279tbEPSISCwVDBkpYguL+GlBPROKhYMhQxYXFVO6oZPv+7XGXIiJZRsGQoQ5dZ3hl8yvxFiIiWUfBkKFO6ncSuZar00ki0u4UDBkqPzefE488URegRaTdKRgyWHFhMUu3LKWqpiruUkQkiygYMlhx/2IO1Bzg9W2vx12KiGQRBUMGG104GoCyyrKYKxGRbKJgyGD9C/rz8ZEf51crfsX9Ffdr7CQRaRe5cRcgTbv1zFupqa3hgVceoMZruK74Osws7rJEpBNrMhjMLB+4CDgXOBrYBywF/uLuy9JfnuQkcvjeuO+Rm8hl5qszqamt4fox1yscRCRtGg0GM/su8DHgKeAFYBOQDxwH/EcYGl9191fTX2Z2S1iCW8+6lYQleGjpQ9R6LTeeeqPCQUTSoqkWw0vu/t1G3rvLzAqBoakvSRqSsATfOfM7JCzB7GWzqfZqvj726woHEUm5RoPB3f9iZjnAf7j71xt4fxNBK0LaiZnx7TO+TW4il0eWP0Kt1/LN076pcBCRlGryGoO715jZqWZmrltiMoKZ8c3TvknCEjyy/BGqa6u5+YybSZhuMBOR1IhyV9LLwGNm9kdgz6GV7v5o2qqSJpkZXx/7dXItl9nLZlPrtdxy5i0KBxFJiSjBcASwFZhYZ50DTQaDmQ0BHgYGALXATHe/p942BtwDlAJ7gX919yWRq89iZsaNp96YdEH60AVqEZG2aDYY3H1aKz+7muCupSVm1hNYbGbz3X15nW1KgJHh4wzggfBZIjAzrh9zPTmJHGa+OpPq2mpuP/t2chI5cZcmIh1Ys/+8NLPjzGyBmS0Nlz9sZrc0t5+7bzj0r3933wWsAAbV2+xi4GEPPA/0MbOBLf4VWczMuK74Oq495Voee/sxvvPcd6iprYm7LBHpwKKcd/gZ8C2gCiDst3BpS77EzIYDown6Q9Q1CFhTZ3ktHwwPzGyGmS0ys0WbN29uyVdnBTPjC8Vf4IvFX+SJlU9w87M3U11bHXdZItJBRbnGUODuL9a7JTLyXx0z6wH8CbjB3XfWf7uBXT5w95O7zwRmAowdO1Z3RzXimlOuITeRyz1L7qHWa/nBuT8gN6FRT0SkZaL81dhiZscQ/sE2s0uADVE+3MzyCELh143cxbQWGFJneTCwPspnS8OuOvkqEpbgx4t/TI3XcMf4O8hL5MVdloh0IFGC4YsE/1o/wczWAZXAZ5vbKbzj6CFghbvf1chmjwPXmdnvCC4673D3SKEjjZt+0nRyLIc7F91J7cJafjT+R+TlKBxEJJooweDufqGZdQcS7r7LzIoi7DcO+BzwmplVhOtuJhxGw90fBMoIblV9i+B21dbeASX1XPGhK8ixHO546Q6+uvCr/Od5/6lwEJFIogTDn4Ax7r6nzrr/Bk5taid3f5aGryHU3cYJWiSSBpePupycRA7//sK/c+NTN3LXhLvoktMl7rJEJMM1NbrqCcCHgN5m9vE6b/UiGGVVOoDLTriMHMvh+89/n+ufvJ67z7+brjld4y5LRDJYUy2G4wnmYugDfLTO+l3A59NYk6TYp47/FAlLcPs/bufLf/sy95x/D/m5ynYRaVhTo6s+RjBG0nh3f7rue2Y2Lu2VSUpdctwl5FgOt/39Nr70ty9x78R76ZbbLe6yRCQDRengdncD6+5LcR3SDv555D/z/XHf54UNL3DdguvYW7U37pJEJAM1dY3hLOBsoL+ZfaXOW70ADcbTQV187MUkLMEtz93CFxZ8gfsvuJ+CvIK4yxKRDNJUi6EL0IMgPHrWeewELkl/aZIuHz3mo/zgnB/w8qaXufav17Knak/zO4lI1mjqGsNCYKGZ/cLdV5tZ93q3rEoHVjqilEQiwU1P38TV86/mwQsfpEeXHnGXJSIZIMo1hqPNbDnB6KiY2Slmdn96y5L2MHX4VH503o9YtmUZV8+/ml0Hd8VdkohkgKgXn6cQTNaDu78CjE9jTdKOJg2bxJ0T7mT5tuXMmDeDHQd2xF2SiMQs0nRf7r6m3ioN+N+JXDD0An484ce88d4bfH7e5xUOIlkuSjCsMbOzATezLmb2NcLTStJ5TBgygbvPv5u3t7/NVfOuYvv+7XGXJCIxiRIM1xCMZzQIWAcUo/GNOqXxg8dz78R7Wbl9JVfOu5Jt+7fFXZKIxKDZYHD3Le7+WXc/yt37u/vl7r61PYqT9jdu0Djuu+A+Vu9czZVzr2TrPv1PLZJtosz5PMLMnjCzzWa2ycweM7MR7VGcxOPso8/mpxf8lLW71nLl3CvZsm9L3CWJSDuKcirpN8AfgIHA0cAfgd+msyiJ3xkDz+D+C+9n/Z71TJ87nc17Nde2SLaIEgzm7o+4e3X4+BUNzMssnc9pA07jgQsfYOOejUyfO51397wbd0ki0g4aDQYzO8LMjgCeNLObzGy4mQ0zs28Af2m/EiVOpx51Kv816b/YvG8z0+ZOY+OejXGXJCJpZsEkag28YVZJ0DJoaBY2d/dYrjOMHTvWFy1aFMdXZ7WKTRVc+9dr6dO1D7OmzGJgj4FxlyQiLWBmi919bJRtG20xuHuRu48In+s/dPE5yxQXFjNz0kx2HNjBtLnTWLd7XdwliUiaROr5LAJwcv+T+dnkn7Hz4E6mzZnGml31O8SLSGegYJAW+VC/D/HzyT9nb/Veps+dzjs734m7JBFJMQWDtNioI0fx0OSH2F+9n2lzp7Fqx6q4SxKRFIrSwW2cmXUPX19uZneZ2bD0lyaZ7PgjjuehKQ9RXVvN9LnTWbljZdwliUiKRGkxPADsNbNTgG8Aq4GH01qVdAjH9T2OhyY/RI3XMH3OdN7e/nbcJYlICkQJhmoP7mm9GLjH3e8hmOJThGP7HsvsKbMxM6bPnc6b770Zd0ki0kZRgmGXmX0LuBz4i5nlAHnpLUs6khF9RjBryixyLIcr517JG9veiLskEWmDKMHwaeAAcKW7byQYfvtHaa1KOpyi3kXMnjqbvJw8rpp3Fa9vez3ukkSklaIMu73R3e9y92fC5XfcXdcY5AOG9RrGL6b8gvzcfK6ceyXLty6PuyQRaYWmxkp6NnzeZWY76zx2mdnO9itROpIhvYYwe8pseuT14Kp5V7Fsy7K4SxKRFmpqSIxzwuee7t6rzqOnu/dqvxKloxncczCzps6iV5defH7e53l186txlyQiLaAObpIWg3oMYvaU2fTu2psZ82dQsaki7pJEJCIFg6TNwB4DmT11NkfmH8nV869mybtL4i5JRCJQMEhaDeg+gNlTZ1NYUMg1f72GRRs1ZLpIpmsyGMwsx8z+2l7FSOdUWFDIrCmzGNB9AF9Y8AXuePEOXtv8Go3NBSIi8WoyGNy9hmA4jN4t/WAzm2Vmm8xsaSPvTzCzHWZWET5ubel3SMfRv6A/s6bMYtzR4/j9G7/nM2WfofTRUu5dcq96S4tkmEZncDu8gdkfgDOB+cCeQ+vd/cvN7Dce2A087O4nNfD+BOBr7n5RSwrWDG4d386DO1mwegHlleW8sPEFar2WY/scS2lRKVOLpjKk55C4SxTpdFoyg1uUYLiiofXu/ssIhQwH/qxgkMZs2beFeavmUV5ZTsXmCgBO7ncyJUUlTBk+hcKCwngLFOkkUhoM4Qd2A4a6e4sGwYkQDH8C1gLrCUKiwd5QZjYDmAEwdOjQU1evXt2SMqSDWL97PXNWzaG8spzXt72OYYwdMJaSohImDZ1En/w+cZco0mGlusXwUeBOoIu7F5lZMfA9d/9YhEKG03gw9AJq3X23mZUSjNw6srnPVIshO6zcsZI5lUFIrNq5ilzL5exBZzN1+FQmDp1I97zucZco0qGkOhgWAxOBp9x9dLjuNXc/OUIhw2kkGBrYdhUw1t23NLWdgiG7uDsrtq0IQmJVORv3bCQ/J5/xg8dTWlTKOYPPoWtO17jLFMl4LQmG3AjbVLv7DjOru67N9xma2QDgXXd3Mzud4A6prW39XOlczIxRR45i1JGjuOHUG6jYVEFZZRnzV89n3up59MjrwcShEyktKuWMgWeQm4jyn7SINCXK/4uWmtlngBwzGwl8Gfh7czuZ2W+BCUA/M1sL3EY4j4O7PwhcAlxrZtXAPuBS143t0oSEJRhz1BjGHDWGm06/iRc3vEhZZRkL3lnA428/Tt+ufZk8fDIlRSWMLhxNwtR/U6Q1opxKKgC+DUwGDJgD/D9335/+8j5Ip5KkvgM1B3h23bOUV5azcM1C9tfsZ0D3AUwdPpWpRVMZdcQo6rV4RbJOqq8xjHD3jJnpXcEgTdlTtYcn1zzJnMo5PLfuOaq9mmG9hlFSVEJJUQkjeo+Iu0SRWKQ6GJ4mmLXtJeBp4Bl3f63NVbaSgkGi2nFgB/NXz6e8spyXNr6E4xzf9/jDIXF0j6PjLlGk3aSjH0MX4DSCawZXAz3c/Yi2FNlaCgZpjc17NzN31VzKK8t5dUswP8Qp/U853JGuX7d+MVcokl6pbjGcA5wbPvoAFQStht+2rczWUTBIW63ZtYa5q+ZSVlnGm++9ScISnD7gdEqKSrhg6AX07triocFEMl6qg6EGWAT8AChz94NtL7H1FAySSm+99xblq8opryxnza415CZyOWfQOZQWlXLe4PMoyCuIu0SRlEh1MPQBxgHjCU4n1QL/cPfvtLHOVlEwSDq4O8u2LqOssoy5lXPZtG8T3XK7MWHwBEqKShg3aBxdcrrEXaZIq6XjGsOJwHkEp5POBt5x9/PaVGUrKRgk3Wpqa1iyaQnlleXMXz2f7Qe207NLTy4ceiElRSWcPuB0chI5cZcp0iKpbjG8DbwBPAs8A7wQ5+kkBYO0p6raKp5f/zzlleUseGcBe6v3cmT+kUwZPoWSohJO6X+K+khIh5DqYEi4e21KKksBBYPEZX/1fp5e+zRzVs1h4ZqFHKw9yNHdj2Zq0VRKi0o5ru9xCgnJWKkOhsHAfQTXGZyg5XC9u69ta6GtoWCQTLD74G7+tuZvlFWW8fz656nxGop6F1FSVEJpUSnDeg2Lu0SRJKkOhvnAb4BHwlWXA59190ltqrKVFAySad7b/x7zV8+nrLKMJe8uwXFOPOLEwzPSDeg+IO4SRVIeDBXuXtzcuvaiYJBMtnHPxsMd6ZZtDeadGlM4htKiUiYNn8QR+bH0CxVJeTD8FfgFcKhD22XANHe/oC1FtpaCQTqK1TtXU14Z9JFYuWMlOZbDmQPPpKSohIlDJ9KzS8+4S5QskupgGAr8BDiL4BrD3wmuMcQyv6aCQToad+f/3vs/yivLmbNqDut2r6NLogvnDj6XkqISzht8Hvm5+XGXKZ1cyvsxZBIFg3Rk7s6rW16lvLKcuavmsmXfFgpyC5g4dCIlRSWcdfRZ5CXy4i5TOqGUBIOZ3UcTM7W5+5dbV17bKBiks6ipreGld19iTuUc5q+ez86DO+ndtTeThk2itKiUMYVj1JFOUiZVwXBFUzu6+y9bUVubKRikM6qqqeK59c9RXlnOk2ueZF/1Pgq7FTJ5+GRKi0o5qd9J6iMhbaJTSSId2N6qvTy99mnKKst4dt2zVNVWMbjH4MPzSIzsOzLuEqUDSlWLYSZwr7svbeC97sCngQPu/uu2FNtSCgbJJjsP7mTB6gWUV5bzwsYXqPVaju1z7OE+EkN6Dom7ROkgUhUMxcDNwMnAUmAzkA+MBHoBs4AH3f1ACmqOTMEg2WrLvi2HZ6R7edPLAJzc7+TDkw0VFhTGXKFkslTfrtoDGAsMBPYBK9z9jTZX2UoKBhFYv3s9c1bNobyynNe3vY5hjB0wlpKiEiYNnUSf/D5xlygZRtcYRLLIyh0rmVMZhMSqnavItVzOOvqswx3puud1j7tEyQAKBpEs5O6s2LYiCIlV5Wzcs5H8nHzGDx5PSVEJ5w4+l645XeMuU2KiYBDJcrVeS8WmCsory5m3eh7b9m+jR14PJg6dSGlRKWcMPIPcRG7cZUo7UjCIyGHVtdW8uOFFyirLWPDOAnZX7aZv175MHj6ZkqISRheOJmGJuMuUNEvHsNufdPft4XJf4HfuPqWthbaGgkGk9Q7UHODZdc9SXlnOwjUL2V+zn6MKjmLq8KmUjChh1BGj1JGuk0p1MLzs7qObW9deFAwiqbG3ai9PrnmS8spynlv3HNVeTZ+ufeiR14Nued0oyC2gW243uuV2oyAveB11Xd3XGvspM7QkGKKcZKw1s6Hu/k744cNoYgwlEekYCvIK+MiIj/CRER9hx4EdzF89n+Vbl7Oveh97q/YGz9V72bZ/W9K6fdX78Bb8CchL5LU6YApyC+iW1y3p/UPv5efkq3WTJlGC4dvAs2a2MFweD8xIX0ki0t56d+3NJcddEmlbd2d/zf4PBMi+6n3sq3r/dd0gaWjd1v1bP7CuqrYqcs2GNdxSqRcgkVo39fbJ9gvzzf56d59jZmOAMwEDbnT3LWmvTEQyktn7f5BTPSNdVW3VB0Olfvg0s25P9R627N+S9Bn7qve1qI68RF7rWjfNtHi65nTtEK2cRoPBzE5w99fDUABYHz4PDU8tLUl/eSKSTfISeeR1yaNXl14p/dxar2V/9f7I4bK3ei/7qj7Y2tm8d/MHWkjVXh25joQlDodHo62bJlo8x/Q+hhF9RqT02DSkqRbDVwhOGf1nA+85MDEtFYmIpFjCEhTkFVCQV5Dyz66qqXo/PMJAaWy5sUDafXA3m/ZuSmrhNNTKufKkK7nh1BtS/hvqazQY3H2GmSWAW9z9ubRXIiLSAeXl5NE7pze9u/ZO6ecmtXLCcEn1dzSmyWsM7l5rZncSzPcsIiLtJKmV062dvzvCNvPM7BPWEa6YiIhIm0UJhq8AfwQOmNlOM9tlZjub28nMZpnZJjP7wEQ/4ftmZvea2Vtm9mqdi9wiIhKjZoPB3Xu6e8Ldu7h7r3A5yi0DvwCmNvF+CcGkPyMJLnI/EKVgERFJr2aDwcwWRFlXn7s/DWxrYpOLgYc98DzQx8wGNve5IiKSXk31Y8gHCoB+4cB5h64x9AKOTsF3DwLW1FleG67b0EAtMwh7Ww8dOjQFXy0iIo1p6q6kq4EbCEKgbme2ncBPU/DdDV3MbnAAFnefCcyEYBC9FHy3iIg0oql+DPcA95jZl9z9vjR891pgSJ3lwbzfu1pERGIS5a6kWWZ2i5nNBDCzkWZ2UQq++3HgX8K7k84Edrj7B04jiYhI+4oyhOAsYDFwdri8luD21T83tZOZ/RaYQHCNYi1wG5AH4O4PAmVAKfAWsBeY1vLyRUQk1aIEwzHu/mkzuwzA3fdF6ezm7pc1874DX4xWpoiItJcop5IOmlk3wgvDZnYMcCCtVYmISGyitBhuA+YAQ8zs18A44F/TWZSIiMQnykQ9881sCe9P1HO9JuoREem8opxKgqDjWQ7QBRhvZh9PX0kiIhKnZlsMZjYL+DCwDKgNVzvwaBrrEhGRmES5xnCmu49KeyUiIpIRopxK+oeZKRhERLJElBbDLwnCYSPBbapG0A3hw2mtTEREYhG15/PngNd4/xqDiIh0UlGC4R13fzztlYiISEaIEgyvm9lvgCeo0+PZ3XVXkohIJxQlGLoRBMLkOut0u6qISCcVpeezRj0VEckiUXs+i4hIllAwiIhIEgWDiIgkiTJW0lcaWL0DWOzuFSmvSEREYhWlxTAWuIZghNVBwAyCKTt/ZmbfSF9pIiIShyi3qx4JjHH33QBmdhvw38B4grmgf5i+8kREpL1FaTEMBQ7WWa4Chrn7PjTFp4hIpxOlxfAb4Hkzeyxc/ijwWzPrDixPW2UiIhKLKB3cvm9m5QRzPRtwjbsvCt/+bDqLExGR9helxQDwMrD+0PZmNtTd30lbVSIiEpsot6t+CbgNeBeoIZyPgWC6TxER6WSitBiuB453963pLkZEROIX5a6kNQQd2kREJAtEaTGsBJ4ys7+QPB/DXWmrSkREYhNpBrfw0SV8iIhIJxbldtXb26MQERHJDI0Gg5nd7e43mNkTBHchJXH3j6W1MhERiUVTLYZHwuc726MQERHJDI0Gg7svDp8Xtl85IiISt6ZOJb1GA6eQDnF3dXATEemEmjqVdFG7VSEiIhmjqVNJq9v64WY2FbgHyAF+7u7/Ue/9CcBjQGW46lF3/15bv1dERFovylhJZwL3AScS9GPIAfa4e69m9ssBfgpMAtYCL5nZ4+5ef6juZ9xdrRMRkQwRZUiMnwCXAW8C3YCrCIKiOacDb7n7Snc/CPwOuLi1hYqISPuIEgy4+1tAjrvXuPts4PwIuw0iGGfpkLXhuvrOMrNXzKzczD7U0AeZ2QwzW2RmizZv3hylZBERaaUoQ2LsNbMuQIWZ/RDYAHSPsJ81sK7+XU5LCKYJ3W1mpcD/AiM/sJP7TGAmwNixYxu9U0pERNouSovhc+F21wF7gCHAJyLstzbc9pDBBJP9HObuO919d/i6DMgzs34RPltERNIkSothC3DQ3fcDt4cXlbtG2O8lYKSZFQHrgEuBz9TdwMwGAO+6u5vZ6QQBpHkfRERiFKXFsAAoqLPcDfhrczu5ezVBK2MusAL4g7svM7NrzOyacLNLgKVm9gpwL3Cpu+tUkYhIjKK0GPIPne4BCK8HFDS1Q51ty4CyeuserPP6JwR3PYmISIaI0mLYY2ZjDi2Y2anAvvSVJCIicYrSYrgB+KOZHbpwPBD4dNoqEhGRWEWZqOclMzsBOJ7gFtTX3b0q7ZWJiEgsmj2VZGafJLjOsJSg5/Lv655aEhGRziXKNYbvuPsuMzsHmAL8EnggvWWJiEhcogRDTfj8EeABd3+MYDA9ERHphKIEwzoz+y/gU0CZmXWNuJ+IiHRAUf7Af4qgk9pUd98OHAF8PZ1FiYhIfKLclbQXeLTO8gaCgfRERKQT0ikhERFJomAQEZEkCgYREUmiYBARkSQKBhERSaJgEBGRJAoGERFJomAQEZEkCgYREUmiYBARkSQKBhERSaJgEBGRJAoGERFJomAQEZEkCgYREUmiYBARkSQKBhERSaJgEBGRJAoGERFJomAQEZEkCgYREUmiYBARkSQKBhERSaJgEBGRJAoGERFJomAQEZEkaQ0GM5tqZm+Y2VtmdlMD75uZ3Ru+/6qZjUlnPSIi0ry0BYOZ5QA/BUqAUcBlZjaq3mYlwMjwMQN4IF31iIhINOlsMZwOvOXuK939IPA74OJ621wMPOyB54E+ZjYwjTWJiEgzctP42YOANXWW1wJnRNhmELCh7kZmNoOgRQGw28zeaOa7+wFbWlpwJ5PtxyDbfz/oGICOAbx/DIZF3SGdwWANrPNWbIO7zwRmRv5is0XuPjbq9p1Rth+DbP/9oGMAOgbQumOQzlNJa4EhdZYHA+tbsY2IiLSjdAbDS8BIMysysy7ApcDj9bZ5HPiX8O6kM4Ed7r6h/geJiEj7SdupJHevNrPrgLlADjDL3ZeZ2TXh+w8CZUAp8BawF5iWoq+PfNqpE8v2Y5Dtvx90DEDHAFpxDMz9A6f0RUQki6nns4iIJFEwiIhIkk4VDM0NwdEZmdksM9tkZkvrrDvCzOab2Zvhc984a0w3MxtiZk+a2QozW2Zm14frs+Y4mFm+mb1oZq+Ex+D2cH3WHAMIRlwws5fN7M/hcrb9/lVm9pqZVZjZonBdi49BpwmGiENwdEa/AKbWW3cTsMDdRwILwuXOrBr4qrufCJwJfDH83z6bjsMBYKK7nwIUA1PDO/2y6RgAXA+sqLOcbb8f4Hx3L67Td6HFx6DTBAPRhuDodNz9aWBbvdUXA78MX/8S+Kf2rKm9ufsGd18Svt5F8IdhEFl0HMJhZXaHi3nhw8miY2Bmg4GPAD+vszprfn8TWnwMOlMwNDa8RjY66lB/kPC5MOZ62o2ZDQdGAy+QZcchPI1SAWwC5rt7th2Du4FvALV11mXT74fgHwPzzGxxOJQQtOIYpHNIjPYWaXgN6bzMrAfwJ+AGd99p1tB/Ep2Xu9cAxWbWB/gfMzsp5pLajZldBGxy98VmNiHmcuI0zt3Xm1khMN/MXm/Nh3SmFoOG13jfu4dGqQ2fN8VcT9qZWR5BKPza3R8NV2fdcQBw9+3AUwTXnrLlGIwDPmZmqwhOI080s1+RPb8fAHdfHz5vAv6H4BR7i49BZwqGKENwZIvHgSvC11cAj8VYS9pZ0DR4CFjh7nfVeStrjoOZ9Q9bCphZN+BC4HWy5Bi4+7fcfbC7Dyf4//7f3P1ysuT3A5hZdzPreeg1MBlYSiuOQafq+WxmpQTnGQ8NwfFv8VaUfmb2W2ACwdC67wK3Af8L/AEYCrwDfNLd61+g7jTM7BzgGeA13j+/fDPBdYasOA5m9mGCC4s5BP/g+4O7f8/MjiRLjsEh4amkr7n7Rdn0+81sBEErAYLLBL9x939rzTHoVMEgIiJt15lOJYmISAooGEREJImCQUREkigYREQkiYJBRESSKBhEUiAc1bJf3HWIpIKCQaSNwpF9W7tvZxqWRjoJBYNkNTP7hpl9OXz9YzP7W/j6AjP7lZldFo5vv9TM7qiz324z+56ZvQCcVWd9NzObY2afD3uizjKzl8I5Ai4Ot/lXM/ujmT1BMODZQDN7OhxDf6mZndu+R0EkmYJBst3TwKE/xGOBHuG4S+cAbwJ3ABMJ5jg4zcz+Kdy2O7DU3c9w92fDdT2AJwh6nP4M+DbB0AynAecDPwqHKoAgTK5w94nAZ4C57l4MnAJUpOenikSjYJBstxg4NRxj5gDwD4KAOBfYDjzl7pvdvRr4NTA+3K+GYNC+uh4DZrv7w+HyZOCmcCjsp4B8gmEJIBgW+9CwBC8B08zsu8DJ4ZwSIrFRMEhWc/cqYBUwDfg7wZhL5wPHEIwr05j94TDXdT0HlNj7430b8IlwNq1idx/q7odmF9tTp4anCQJnHfCImf1LG3+WSJsoGESC00lfC5+fAa4hOJ3zPHCemfULLzBfBixs4nNuBbYC94fLc4EvHQoKMxvd0E5mNoxgLoGfEYwSO6atP0ikLRQMIkEYDAT+4e7vAvuBZ8LZrr4FPAm8Aixx9+aGLL4ByDezHwLfJ5hi81UzWxouN2QCUGFmLwOfAO5p288RaRuNrioiIknUYhARkSQKBhERSaJgEBGRJAoGERFJomAQEZEkCgYREUmiYBARkST/Hw2gDEcQkTraAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "(wall * cost).plot(color='tab:green')\n", "plt.ylim([0,2.5])\n", "plt.ylabel('scaling metric (lower is better)');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We've worked out the best worker count to use, how about the chunk size? The best size here is in the 50 to 100 MB range. Generally the chunk size should be an integer multiple of the file chunk size to make things easy for the NetCDF library, but this doesn't have a huge effect." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "one_thread[one_thread.workers == 32].plot('chunk_size','duration', legend=False)\n", "\n", "xlabels = ['0 MB', '100 MB', '200 MB', '300 MB', '400 MB']\n", "plt.xticks([dask.utils.parse_bytes(x) for x in xlabels], labels=xlabels)\n", "\n", "plt.xlabel('chunk size');\n", "plt.ylabel('walltime (s)');" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "tags": [ "hide-input" ] }, "outputs": [], "source": [ "def result_scaling(df):\n", " wall = df['duration']\n", " cost = df['duration'] * df['workers'] / 60 / 60 * 2\n", " scaling = wall * cost\n", " return wall, cost, scaling\n", "\n", "def plot_results(csv, target_workers=32):\n", " df = pandas.read_csv(csv)\n", " \n", " mean = df.groupby(['workers','chunk_size','threads']).mean().reset_index()\n", " one_thread = mean[mean.threads == 1]\n", " df_91_180 = one_thread[(one_thread.latitude==91) & (one_thread.longitude==180)]\n", " df_91_180 = df_91_180.set_index('workers', drop=False)\n", " \n", " wall, cost, scaling = result_scaling(df_91_180)\n", " \n", " ax = plt.subplot(2,3,1)\n", " wall.plot(ax=ax, color='tab:blue')\n", " plt.ylabel('walltime (s)');\n", " \n", " ax = plt.subplot(2,3,2)\n", " cost.plot(color='tab:orange')\n", " plt.ylabel('cost (Gadi SU)');\n", " \n", " ax = plt.subplot(2,3,3)\n", " scaling.plot(color='tab:green')\n", " #plt.ylim([0,1200])\n", " plt.ylabel('scaling metric (lower is better)');\n", " \n", " df_chunksize = one_thread[one_thread.workers == target_workers].set_index('chunk_size', drop=False)\n", " wall, cost, scaling = result_scaling(df_chunksize)\n", " \n", " xlabels = ['0 MB', '100 MB', '200 MB', '300 MB']\n", " \n", " ax = plt.subplot(2,3,4)\n", " wall.plot(ax=ax, color='tab:blue')\n", " plt.xticks([dask.utils.parse_bytes(x) for x in xlabels], labels=xlabels)\n", " plt.xlabel('chunk size');\n", " plt.ylabel('walltime (s)');\n", " \n", " ax = plt.subplot(2,3,5)\n", " cost.plot(ax=ax, color='tab:orange')\n", " plt.xticks([dask.utils.parse_bytes(x) for x in xlabels], labels=xlabels)\n", " plt.xlabel('chunk size');\n", " plt.ylabel('cost (Gadi SU)');\n", " \n", " ax = plt.subplot(2,3,6)\n", " scaling.plot(ax=ax, color='tab:green')\n", " plt.xticks([dask.utils.parse_bytes(x) for x in xlabels], labels=xlabels)\n", " plt.xlabel('chunk size');\n", " plt.ylabel('scaling metric (lower is better)');\n", "\n", "def optimal_size(csv):\n", " df = pandas.read_csv(csv)\n", " mean = df.groupby(['workers','chunk_size','threads']).mean().reset_index()\n", " \n", " cost = mean['duration']*mean['duration']*mean['workers']\n", " opt = mean.iloc[cost.sort_values().index[0]]\n", " print(f'Workers: {opt.workers:2.0f}')\n", " print(f'Threads: {opt.threads:2.0f}')\n", " print(f\"Walltime: {pandas.Timedelta(opt.duration, 's').round('s')}\")\n", " print(f\"Cost: {(opt.duration/60/60)**2*opt.workers*2:5.2f} SU\")\n", " print(f\"Chunks: {opt[['latitude', 'longitude']].to_dict()}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ERA5 10-year climatology\n", "\n", "Calculating a daily mean climatology from 10 years of hourly ERA5 data, using climtas functions for resampling and groupby, saving the results to a compressed netcdf file.\n", "\n", "\n", "```python\n", "path = \"/g/data/rt52/era5/single-levels/reanalysis/2t/200*/2t_era5_oper_sfc_*.nc\"\n", "var = 't2m'\n", "\n", "with xarray.open_mfdataset(\n", " path, combine=\"nested\", concat_dim=\"time\", chunks=chunks\n", ") as ds:\n", " var = ds[variable]\n", " if isel is not None:\n", " var = var.isel(**isel)\n", "\n", " out = os.path.join(os.environ['TMPDIR'],'sample.nc')\n", "\n", " start = time.perf_counter()\n", " daily = climtas.blocked_resample(var, time=24).mean()\n", " climatology = climtas.blocked_groupby(daily, time='dayofyear').mean()\n", " climtas.io.to_netcdf_throttled(climatology, out)\n", " duration = time.perf_counter() - start\n", "\n", "```" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Workers: 48.0\n" ] }, { "data": { "image/png": "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qKu1Vrv7/ba1y9b+/HYP2zpqxQ0qah3Vuq0DBwiKioKKgoyETQIJSci4fn+cOxoxhAA55z4n5/18PM7jnHOPc97xYD451/0ZP8mk/1Z9/aZ2oseZ1E70PJfaiU3Pp3ai+yxqJ0K8qZ3ocSa1Ez3LlHFtxEZyqZ3oWaaw//8LrZ2w4I1ERERERERERETSRsP3REREREREREQk7VSUEhERERERERGRtFNRSkRERERERERE0k5FKRERERERERERSTsVpUREREREREREJO1UlBLpBWY2z8yGhp1DREQyk9oJERHpjtoJyVUqSolsITPL34JzC3ozi4iIZB61EyIi0h21E5LLVJSSnGZmPzCzbwWP/2xmzwSPDzezO8zsTDN7y8xmmtlvO51Xb2ZXmtkUYL9O24vN7DEz+6qZRczsJjN71cxeN7Pjg2PON7N7zOzfwBNmFjez581sRvA+B6b3v4KIiGyI2gkREemO2gmRLaOilOS654GOX9rjgBIzKwQOAN4HfgscBowF9jKzE4JjI8BMd9/H3ScH20qAfwMT3f2fwE+AZ9x9L+BQ4PdmFgmO3Q84z90PA84CHnf3scBuwIzU/KgiIrIZ1E6IiEh31E6IbAEVpSTXTQf2NLOBQDPwMsnG5ECgFnjW3Ze5eyswATgoOK8NuG+913oQuNndbwueHwn8yMxmAM8CRcCIYN+T7r4yePwqcIGZ/QLYxd3X9OYPKCIiW0TthIiIdEfthMgWUFFKcpq7twDzgAuAl4AXSF6F2AaY382pTe7ett62F4FjzMyC5wac7O5jg9sId58V7GvolOF5ko3TIuB2M/vyFv5YIiLSS9ROiIhId9ROiGwZFaVEkl1u/ye4fwG4hGSX11eAg81saDD54JnAc928zs+BFcC1wfPHgW92NCpmtntXJ5nZVsDSoIvueGCPLf2BRESkV6mdEBGR7qidENlMKkqJJBuOOPCyuy8BmoAX3L0GuBz4L/AG8Jq7P7iR1/oOUGRmvwN+BRQCb5rZzOB5Vw4BZpjZ68DJwNVb9uOIiEgvUzshIiLdUTshspnM3cPOICIiIiIiIiIiOUY9pUREREREREREJO1UlBIRERERERERkbRTUUpERERERERERNJORSkREREREREREUk7FaVERERERERERCTtVJQSEREREREREZG0U1FKRERERERERETSTkUpERERERERERFJOxWlREREREREREQk7VSUEhERERERERGRtFNRSkRERERERERE0k5FKRERERERERERSTsVpUREREREREREJO1UlBIRERERERERkbRTUUpERERERERERNJORSkREREREREREUk7FaVERERERERERCTtVJQSEREREREREZG0U1FKRERERERERETSTkUpERERERERERFJu4KwA2yJoUOH+siRI8OOISKSkaZPn77c3cvCzhEmtRMiIl1TG5GkdkJEpGvpaieyuig1cuRIpk2bFnYMEZGMZGYfhZ0hbGonRES6pjYiSe2EiEjX0tVOaPieiIiIiIiIiIiknYpSIiIiIiIiIiKSdipKiYiIiIiIiIhI2qkoJSIiIiIiIiIiaaeilIiIiIiIiIiIpJ2KUiIiIiIiIiIiknYqSomIiIiIiIiISNqpKCUiIqEzsyIzm2pmb5jZ22b2y26O3cvM2szslHRmFBGR9DOzmJnda2azzWyWme1nZr8ws0VmNiO4faHT8Zeb2Rwze9fMjgozu4iIbJyKUj3wv/e8wY/uezPsGCIifVkzcJi77waMBY42s33XP8jM8oHfAo+nN95G3HEKPHNV2ClERPqiq4HH3H0MsBswK9j+Z3cfG9z+A2BmOwJnADsBRwPXBu1GqNa1rePMh8/k7tl3hx1FRCTjFIQdIBusbFhHdV1T2DFERPosd3egPnhaGNy8i0O/CdwH7JWmaD2zpgYWq0kVEelNZjYIOAg4H8Dd1wHrzGxDpxwP3OXuzcBcM5sD7A28nPq0G9Yvvx8frfmIObVzwowhIpKR1FOqBypKi6mubQw7hohIn2Zm+WY2A1gKPOnuU9bbXwGcCFwfQrzuRaugbmHYKURE+pqtgWXAzWb2upndaGaRYN83zOxNM7vJzEqDbRXAgk7nLwy2hS4RSbC4YXHYMUREMo6KUj2QiBVT19hCfXNr2FFERPosd29z97FAJbC3me283iF/AX7o7m3dvY6ZXWxm08xs2rJly1ITdn3RSqibn573EhHJHQXAHsB17r470AD8CLgO2IbkcO8a4I/B8V11ofpMr9sw2ol4JE51Q3Va3ktEJJuoKNUDiVgxgHpLiYikgbvXAs+SnA+ks3HAXWY2DziF5FwhJ3Rx/g3uPs7dx5WVlaU2bIdoJTTVQdPq9LyfiEhuWAgs7NRz9l5gD3dfElzIaAf+SXKIXsfxVZ3OrwQ+UwkKo50oj5RT01CTlvcSEckmKkr1QEVQlFq0SkUpEZFUMLMyM4sFj4uBI4DZnY9x91HuPtLdR5L8YnKpuz+Q5qhdiwXfgTSET0Sk17j7YmCBmW0fbDoceMfM4p0OOxGYGTx+CDjDzPqb2ShgNDA1bYG7kShJsGbdGurX1W/8YBGRHKJZWXvg46KUekqJiKRKHLg1WCUpD5jk7g+b2SUA7p5580h1Fu1UlBq+Y7hZRET6lm8CE8ysH/AhcAHwVzMbS3Jo3jzgawDu/raZTQLeAVqByzY25Dtd4pFkHa2moYbR/UaHnEZEJHOoKNUDwwb2pzDfNHxPRCRF3P1NYPcutndZjHL381OdaZN8XJRa0P1xIiKySdx9Bsnh252d283xVwFXpTLT5oiXdCpKlaooJSLSIWXD94KVMJaa2cxO23Yzs5fN7C0z+3ewzGvHvsvNbI6ZvWtmR6Uq1+bIyzPKo0XqKSUiIl0rGQ55hSpKiYhIlz7uKVWveaVERDpL5ZxSt/DZSWpvBH7k7rsA9wP/C2BmOwJnADsF51wbDOHIGIlosXpKiYhI1/LyYFBCc0qJiEiXhhYPpSCvQJOdi4isJ2VFKXd/Hli53ubtgeeDx08CJwePjwfucvdmd58LzOGTVTQyQkVpsSY6FxGRDYuNgFr1lBIRkc/KszzKB5RT3fCZxQBFRHJaulffmwkcFzw+lU+WbK0AOv8lvzDYljEqYsUsXt1Ea1t72FFERCQTRSvVU0pERDYoXhJnccPisGOIiGSUdBelLgQuM7PpwEBgXbDdujjWu3oBM7vYzKaZ2bRly5alKOZnVcSKaXdYsqY5be8pIiJZJFoFa6qhrTXsJCIikoHikbiG74mIrCetRSl3n+3uR7r7nsCdwAfBroV80msKoBLosm+ru9/g7uPcfVxZWVlqA3eSiBUDaAifiIh0LVoJ3p4sTImIiKwnHomzdO1SWtpbwo4iIpIx0lqUMrNhwX0e8FOgY6nvh4AzzKy/mY0CRgNT05ltYzqKUprsXEREuhStTN5rCJ+IiHQhHonT7u0sW5u+0R4iIpkuZUUpM7sTeBnY3swWmtlFwJlm9h4wm2RPqJsB3P1tYBLwDvAYcJm7t6Uq2+ao6OgppaKUiIh0JTYiea/JzkVEpAvxkjgA1fXqUSsi0qEgVS/s7mduYNfVGzj+KuCqVOXZUsX98hkc6aeilIiIdG1QsD5HnYpSIiLyWfFIsiileaVERD6R7onOs1oiVqTheyIi0rV+A2DAEA3fExGRLpVHygG0Ap+ISCcqSm2CilixJjoXEZENi1app5SIiHSpuKCYwUWDqW7Q8D0RkQ4qSm2CRKyY6tpG3D3sKCIikomileopJSIiG1QeKdfwPRGRTlSU2gQVsWIa1rVR16hlXEVEpAuxEcmJznXxQkREupCIJKipV1FKRKSDilKbQCvwiYhIt6KV0NIAjavCTiIiIhmoo6eURl6IiCSpKLUJEkFRqrq2KeQkIiKSkaKVyXsN4RMRkS7EI3EaWxtZvW512FFERDKCilKboKI06Cm1am3ISUREJCNFq5L3muxcRES6kChJAFBdr8nORURARalNMiTSj/4FeVTXqaeUiIh04eOilHpKiYjIZ8UjcQBNdi4iElBRahOYGRWxYs0pJSIiXYsMhYIi9ZQSEZEuxUtUlBIR6UxFqU2UiBWzaJWKUiIi0gWz5LxStSpKiYjIZ5X2L6V/fn+twCciElBRahMlYkVUq6eUiIhsSLRSw/dERKRLZkY8EldPKRGRgIpSm6giNoCla5ppbm0LO4qIiGSiaJWG74mIyAapKCUi8gkVpTZRIlYEwGJNdi4iIl2JVkH9EmhtDjuJiEjWM7OYmd1rZrPNbJaZ7Wdmvw+ev2lm95tZLDh2pJk1mtmM4HZ9yPG7FC9RUUpEpIOKUpuoorQYQJOdi4hI12LBCnyrF4WbQ0Skb7gaeMzdxwC7AbOAJ4Gd3X1X4D3g8k7Hf+DuY4PbJemPu3HxSJzljctZ17Yu7CgiIqFTUWoTVcSCopQmOxcRka5EK5P3muxcRGSLmNkg4CBgPIC7r3P3Wnd/wt1bg8NeASrDyrg54pHkCnyLGxaHnEREJHwqSm2i8mhy+F51rYbviYhIFzqKUprsXERkS20NLANuNrPXzexGM4usd8yFwKOdno8Kjn3OzA5MW9JN0FGU0hA+EREVpTZZ/4J8hg3sz6LatWFHERGRTDSoAjBNdi4isuUKgD2A69x9d6AB+FHHTjP7CdAKTAg21QAjgmO/B0wMelt9ipldbGbTzGzasmXLUv0zfEa8JFmUqq6vTvt7i4hkGhWlNkMiVqyeUiIi0rWC/lAyXEUpEZEttxBY6O5Tguf3kixSYWbnAV8EznZ3B3D3ZndfETyeDnwAbLf+i7r7De4+zt3HlZWVpeHH+LThA4ZjmIbviYigotRmqYgVU62JzkVEZEOilRq+JyKyhdx9MbDAzLYPNh0OvGNmRwM/BI5z94+HL5hZmZnlB4+3BkYDH6Y59kb1y+/H0OKhGr4nIkKyS6xsoorSYp6atQR3x8zCjiMiIpkmVgU1b4adQkSkL/gmMMHM+pEsMF0AvAr0B54M/hZ/JVhp7yDgSjNrBdqAS9x9ZTixuxcviVPdoOF7IiIqSm2GRLSI5tZ2VjSsY2hJ/7DjiIhIpolWwuz/gDvo4oWIyGZz9xnAuPU2b7uBY+8D7kt1pt4Qj8SZvXJ22DFEREKnotRmqCgdAMCiVY0qSomIyGdFR0BbMzQsg5JhYacREQmNmRWRnPvpQCABNAIzgUfc/e0ws4UpEUnw3/n/pd3byTPNqCIiuUu/ATdDIlYEoHmlRESka9HK5L0mOxeRHGZmvwBeAj4HTAH+AUwiuWLeb8zsSTPbNbyE4SmPlLOufR0rmzJydKGISNqop9RmqIgVA7BIRSkREenKx0WphVCxZ7hZRETC86q7/2ID+/5kZsOAEWnMkzHikTgAixsWM7R4aMhpRETCo55SmyFaXEikX76KUiIivcTMisxsqpm9YWZvm9kvuzjmeDN708xmmNk0MzsgjKw9EqtK3teqp5SI5C53f8TM8s3s9xvYv9Tdp6U7VyZIlCQAqK7XZOciktvUU2ozmBmJWLGG74mI9J5m4DB3rzezQmCymT3q7q90OuZp4CF392C4xyRgTBhhN6ooBv1Kkj2lRERymLu3mdmeZmbu7mHnyRTlkXIAahpqQk4iIhIuFaU2U0VpsXpKiYj0kuCLSn3wtDC4+XrH1Hd6Gll/f0Yxg2iV5pQSEUl6HXjQzO4BGjo2uvu/wosUrkH9BhEpjKgoJSI5T0WpzZSIFfPmwrqwY4iI9Blmlg9MJ7nU9zXuPqWLY04Efg0MA45Nb8JNFK1UUUpEJGkwsAI4rNM2B3K2KGVmxCNxaupVlBKR3Kai1GaqiBWzsmEdjevaKO6XH3YcEZGs5+5twFgziwH3m9nO7j5zvWPuD/YdBPwKOGL91zGzi4GLAUaMCHH+3GglVL8W3vuLiGQId78g7AyZqDxSrp5SIpLzUjbRuZndZGZLzWxmp21jzeyVTpPU7h1sH2lmjcH2GWZ2fapy9RatwCcikhruXgs8CxzdzTHPA9uY2WeWLHL3G9x9nLuPKysrS1nOjYpVwdoVsK5h48eKiPRhZradmT3d8b3AzHY1s5+GnStsiUhCRSkRyXmpXH3vFj77heJ3wC/dfSzw8+B5hw/cfWxwuySFuXpFIihKabJzEZEtZ2ZlQQ8pzKyYZA+o2esds62ZWfB4D6AfyeEgmSkarMBXtyjcHCIi4fsncDnQAuDubwJnhJooA8RL4tQ217K2ZW3YUUREQpOyolRwFXvl+puBQcHjKJC1a6BWlKooJSLSi+LAf83sTeBV4El3f9jMLjGzjgsVJwMzzWwGcA1wekav5PRxUUrzSolIzhvg7lPX29YaSpIMEo/EAVi8dnHISUREwpPuOaW+AzxuZn8gWRD7XKd9o8zsdWA18FN3fyHN2TbJ8IH9yTMN3xMR6Q3BVfPdu9h+fafHvwV+m85cWyRambxXUUpEZLmZbUOwaqqZnQLk/Li1jqJUTX0NW0e3DjmNiEg40l2U+jrwXXe/z8xOA8aTHKJRA4xw9xVmtifwgJnt5O6r13+BTJnAtiA/j/JBRSpKiYhI1wbGwfKhbmHYSUREwnYZcAMwxswWAXOBs8ONFL6Pi1KaV0pEclgq55Tqynl8svTrPcDeAO7e7O4rgsfTgQ+A7bp6gYyZwJbkEL5Fq1SUEhGRLuQXwKAE1KqnlIjkPHf3I4AyYIy7H0D6v4dknLIBZeRbPtX1WTujiYjIFkt3Y1ANHBw8Pgx4Hz6e4DY/eLw1MBr4MM3ZNlkiVkx1nYpSIiKyAdFK9ZQSEYH7ANy9wd3XBNvuDTFPRijIK2DYgGEsbtCcUiKSu1I2fM/M7gQOAYaa2ULgCuCrwNVmVgA0EQzDAw4CrjSzVqANuMTd158kPeMkYsX8560a2tqd/DwLO46IiGSaaCUsWH9uXxGR3GBmY4CdgKiZndRp1yCgKJxUmSUeiWv4nojktJQVpdz9zA3s2rOLY+8juIKSTSpixbS0OcvWNFMeVbsqIiLriVbB2/dDexvk5YedRkQk3bYHvgjEgC912r6G5MXqnBcviTNj6YywY4iIhCbdE533KRWxYiC5Ap+KUiIi8hnRSmhvhfolyfmlRERyiLs/CDxoZge5+/Od95nZ/iHFyijxSJzHGx6nrb2NfF28EJEclPMTDG6JitJPilIiIiKfEQtWidVk5yKS2/7Sxba/pTtEJopH4rR6K8sal4UdRUQkFOoptQXiQe+oahWlRESkK9HK5H3dAmCfUKOIiKSbme0HfA4oM7Pvddo1CFC3IJJFKYDFDYspj5SHnEZEJP3UU2oLDCwqZFBRgYpSIiLStY+LUlqBT0RyUj+ghOSF8IGdbquBU0LMlTE6ilKa7FxEcpV6Sm2hitIBLFqlopSIiHSh/0AoigU9pUREcou7Pwc8Z2a3uPtHZhZx94ZNeQ0ziwE3AjsDDlwIvAvcDYwE5gGnufuq4PjLgYtIruj9LXd/vHd+mtSIlySLUtX11SEnEREJh3pKbaGKWJHmlBIRkQ2LVqmnlIjkuoSZvQPMAjCz3czs2h6eezXwmLuPAXYLXuNHwNPuPhp4OniOme0InAHsBBwNXGtmGT1MMFIYYVC/QeopJSI5S0WpLVQRK1ZRSkRENixWpYnORSTX/QU4ClgB4O5vAAdt7CQzGxQcNz44b5271wLHA7cGh90KnBA8Ph64y92b3X0uMAfYu7d+iFRJlCRUlBKRnKWi1BZKxIpZ09TK6qaWsKOIiEgmilaqp5SI5Dx3X78639aD07YGlgE3m9nrZnajmUWA4e5eE7xuDTAsOL4C6Pw+C4NtGa08Uq6ilIjkLBWltlAiVgxATW1TyElERCQjRSuhuQ6a6sJOIiISlgVm9jnAzayfmf0PwVC+jSgA9gCuc/fdgQaCoXobYF1s888cZHaxmU0zs2nLli3rQYzUikfiLK5fHHYMEZFQqCi1hSpKk0WpRbVrQ04iIiIZKVqVvFdvKRHJXZcAl5HstbQIGBs835iFwEJ3nxI8v5dkkWqJmcUBgvulnY6v6nR+JfCZGcTd/QZ3H+fu48rKyjb9p+lliUiCNS1rWLNuTdhRRETSTkWpLVQR6yhKqaeUiIh0QUUpEclx7r7c3c929+HuXubu57j7ih6ct5hkL6vtg02HA+8ADwHnBdvOAx4MHj8EnGFm/c1sFDAamNqrP0wKlJeUA2gIn4jkpIKwA2S7spL+FOYbi1ZpsnMREelCLChK1c4PN4eISEjMbGuSq+jtS3I43cvAd939wx6c/k1ggpn1Az4ELiB5YX2SmV0EzAdOBXD3t81sEsnCVStwmbv3ZO6qUCUiCQBq6mvYrnS7kNOIiKSXilJbKC/PiEeLqdYKfCIi0pXIMMgrVE8pEcllE4FrgBOD52cAdwL7bOxEd58BjOti1+EbOP4q4KrNShmSeCQOqKeUiOQmDd/rBYlYkYpSIiLStbw8iFaoKCUiuczc/XZ3bw1ud9DFBOS5akjxEArzClWUEpGcpKJUL6iIDWCRilIiIrIh0SqoW381dBGRvs3MBpvZYOC/ZvYjMxtpZluZ2Q+AR8LOlynyLI/ySDk19SpKiUju0fC9XlARK2LJ6iZa2topzFedT0RE1hOtgrnPhZ1CRCTdppPsEWXB86912ufAr9KeKEPFI3H1lBKRnKSiVC+oKC2m3WHJ6iYqSweEHUdERDJNrArW1EBbC+QXhp1GRCQt3H1U2BmyRTwS55WaV8KOISKSdurW0wsSsWIArcAnIiJdi1aCt8Pq6rCTiIhIBoqXxFnWuIyW9pawo4iIpJWKUr2goyhVXaeilIiIdCFambzXZOciItKFeCROu7ezdO3SsKOIiKSVilK9oEI9pUREpDvREcl7TXYuIiJdiEfiAFTXq0etiOQWFaV6QVFhPkMi/VhU2xR2FBERyUTRiuS9ilIikoPMbH8ziwSPzzGzP5nZVmHnyiQdRanFDYtDTiIikl4qSvWSRKyY6lr1lBIRkS4UFsOAoRq+JyK56jpgrZntBvwA+Ai4LdxImaU8Ug6gFfhEJOeoKNVLKmLFLFJRSkRENiRWBbXqKSUiOanV3R04Hrja3a8GBoacKaMUFRQxuGiwhu+JSM5RUaqXdPSUSra3IiIi64lWqqeUiOSqNWZ2OXAO8IiZ5QOFIWfKOPFIXMP3RCTnFIQdoK+oKC1m7bo2ate2UBrpF3YcEZHQmNk44EAgATQCM4Gn3H1lqMHCFh0Bc54GdzALO42ISDqdDpwFXOTui81sBPD7kDNlnERJgjm1c8KOISKSVuop1UsqYkUAGsInIjnLzM43s9eAy4Fi4F1gKXAA8KSZ3Rp8EclN0UpoWQuNq8JOIiKSVu6+2N3/5O4vBM/nu7vmlFpPeaScxQ2LNfJCRHKKekr1kkSsGIDq2kZ2roiGnEZEJBQRYH9377I6b2ZjgdHA/HSGyhjRyuR93QIYMDjcLCIiaWBmk939ADNbA3SutBjg7j4opGgZKR6J09jaSF1zHbGiWNhxRETSQkWpXlIRFKXUU0pEcpW7X7OR/TPSFCUzxaqS97ULIL5buFlERNLA3Q8I7jWpeQ8kIgkAqhuqVZQSkZyRsqKUmd0EfBFY6u47B9vGAtcDRUArcKm7Tw32XQ5cBLQB33L3x1OVLRUGR/pRVJhHtYpSIpKjzOyv621yYDnwX3efvJFzi4Dngf4k26Z73f2K9Y45G/hh8LQe+Lq7v9Eb2dMiGhSlNNm5iIh0obykHICahhp2HLJjyGlERNIjlT2lbgH+DnQeL/474Jfu/qiZfSF4foiZ7QicAexEcmLcp8xsO3dvS2G+XmVmJGLF6iklIrlsehfbBgO/N7O73f0v3ZzbDBzm7vVmVghMNrNH3f2VTsfMBQ5291VmdgxwA7BPb4VPuQFDoKA4OXxPRERkPR09pWrqa0JOIiKSPikrSrn782Y2cv3NQMfY8ShQHTw+HrjL3ZuBuWY2B9gbeDlV+VKhIlbMotqmsGOIiITC3W/taruZXQ+8BPylm3OdZO8nSC4TXsin5x/B3V/q9PQVoHIL4qafWXJeKRWlRESkC7H+MYryi6hpUFFKRHLHRotSZlZJshfT+st7PwI86u7tm/B+3wEeN7M/kFz573PB9gqSXzA6LAy2ZZVEtJjZi5eGHUNEJKO4e6OZbfQ4M8sn2dtqW+Aad5/SzeEXAY/2TsI0ilZq+J6I5JTgd/vj7n5E2FkynZlRHilXUUpEckpedzvN7GbgJmAd8FvgTOBS4CngaJLDKw7ahPf7OvBdd68CvguM73irLo7tci1UM7vYzKaZ2bRly5ZtwlunXkVpMcvWNNPUkjWjDkVEUsrMCszsApIXG7rl7m3uPpZkD6i9zWznDbzmoSSLUj/cwP6MbSeIVSUnOhcRyRHBdBxrzUzLU/dAoiSh4XsiklM21lPqj+4+s4vtM4F/mVk/YMQmvN95wLeDx/cANwaPFwJVnY6r5JOhfZ/i7jeQnEeEcePGdVm4CksiWIFvcV0TI4dGQk4jIpJeG1jyey3wHPC1nr6Ou9ea2bMkL358qg0ys11Jth3HuPuKDZyfse0E0SpoWAotTVBYFHYaEZF0aQLeMrMngYaOje7+rfAiZaZ4JM67K98NO4aISNp0W5TqqiBlZqVAlbu/6e7rgDmb8H7VwMHAs8BhwPvB9oeAiWb2J5JDBEcDUzfhdTNCRVCUWlTbqKKUiOScLVny28zKgJagIFUMHEGyh27nY0YA/wLOdff3tihsWDpW4Fu9CIZsE24WEZH0eSS4bTIzmwesIblCd6u7jzOzu4Htg0NiQK27jw3ms50FdFR1XnH3S7Ygd9rFI3FWNK2gua2Z/vn9w44jIpJyPZroPLhifVxw/AxgmZk95+7f6+acO4FDgKFmthC4AvgqcLWZFZC8YnIxgLu/bWaTgHeAVuCybFp5r0PnopSISK4xs61IfjGoC54fCpwAfAT8PbiQsSFx4NZg7pE8YJK7P2xmlwC4+/XAz4EhwLXBHFWt7j4uVT9PSkSDudnrFqgoJSI5w91vDS44jHD3zekGdKi7L+/0eqd3PDazPwJ1nY79IBgKnpXiJXEAFjcsZqtBW4WcRkQk9Xq6+l7U3Veb2VeAm939CjN7s7sT3P3MDezacwPHXwVc1cM8Gak8WoQZVKsoJSK5aRJwIlBnZmNJDtP+NbAbcC3wlQ2d6O5vArt3sf36To+/0t1rZIWPi1Ka7FxEcoeZfQn4A9APGBW0EVe6+3Fb+LoGnEZyBEafEI8ki1I1DTUqSolITuh2ovNOCswsTvKX/sMpzJPV+hXkMWxgfxatUlFKRHJSsbt3zAd4DnCTu/8RuADYO7xYGWRQBWCa7FxEcs0vSLYDtQDuPgMY1cNzHXjCzKab2cXr7TsQWOLu73faNsrMXjez58zswC1KHYKPi1Ka7FxEckRPe0pdCTwOTHb3V81saz6ZD0o6ScSKqa5TUUpEclLnlVQPAy4HcPf2YLidFPSDgeXqKSUiuabV3evWawt6uhDF/u5ebWbDgCfNbLa7Px/sOxO4s9OxNSSHCK4wsz2BB8xsJ3df3fkFg+LWxQAjRmzKmk2pN3zAcAyjpkFFKRHJDT3qKeXu97j7ru5+afD8Q3c/ObXRslMiVkx1bVPYMUREwvCMmU0ys6uBUuAZgKCnbXfzSeWWaGVyTikRkdwx08zOAvLNbLSZ/Q14qScndvTAdfelwP0EPW+DOWpPAu7udGxzx8qs7j4d+ADYrovXvMHdx7n7uLKysi37yXpZYX4hZcVlKkqJSM7otihlZj81s8Hd7D/MzL7Y+7GyV2WsmEW1jbS3Z9Yq5CIiafAdkqvjzQMOcPeWYHs58JOQMmWeaJWKUiKSa74J7AQ0k+zZVEeyzeiWmUXMbGDHY+BIoGN18COA2e6+sNPxZcGCGQQjO0YDH/bej5Ee8ZK4hu+JSM7Y2PC9t4B/m1kT8BqwDCgi+Qt+LPAU8H+pDJhtErFi1rW2s6JhHWUDtYyriOQOd3fgri62vx5CnMwVrYTZj0B7O+T1dGpHEZGsVu7uP2HTL1AMB+4Phv0VABPd/bFg3xl8eugewEHAlWbWCrQBl7j7ys2PHY54JM47K94JO4aISFp0W5Ry9weBB81sNLA/ySW7VwN3ABe7uyZPWk9FrBiARbWNKkqJiMhnxUZAWzM0LIOBw8NOIyKSDreYWQXwKvA88IK7v7Wxk9z9Q5IruHa17/wutt0H3LdlUcMXL4nz9Pynafd28kwXL0Skb+vRROfBihaa2LwHEkFRqrq2kbFVsXDDiIhI5olWJu/rFqooJSI5wd0PMrN+wF7AIcAjZlbi7hucJiSXxSNxWtpbWNm0kqHFQ8OOIyKSUj1dfU96qKJTUUpEROQzPi5KLYDKPcPNIiKSBmZ2AHBgcIsBDwMvhJkpk8UjcQBq6mtUlBKRPk9FqV42qLiAkv4FLFylopSI5BYzm+Tup5nZW3x6qW8jOeXUriFFyyzRquS9JjsXkdzxHDAN+DXwH3fXiqzd6ChKVTdUs0vZLiGnERFJLRWlepmZkYgVqaeUiOSibwf3WpW1O0VR6DcwOXxPRCQ3DCE5P+1BwLfMrB142d1/Fm6szBQvSRalFjcsDjmJiEjq9agoZWbbAdcBw919ZzPbFTjO3f9fStNlqYpYMYtUlBKRHOPuNcH9R2FnyWhmEKuCWvWUEpHc4O61ZvYhUAVUAp8DCsNNlbkG9RtESWEJ1fXVYUcREUm5ni7n8E/gcqAFwN3fJLkMq3QhEStWTykRyTlmtsbMVm/oFna+jBKt1PA9EckZZvYB8EdgMHA9sL27HxxuqsxWHimnpqEm7BgiIinX0+F7A9x9qpl13taagjx9QiJWzKq1Laxd18qAfhohKSK5wd0HApjZlcBi4HaS80mdDQwMMVrmiVbCwmlhpxARSZfR7t4edohsEo/ENXxPRHJCT3tKLTezbQgmrjWzUwCV7jegslQr8IlITjvK3a919zXuvtrdrwNODjtURolWQeNKWNcQdhIRkXRImNn9ZrbUzJaY2X1mVhl2qEyWKElQ3aDheyLS9/W0KHUZ8A9gjJktAr4DfD1VobJdIpYsSi2qbQo5iYhIKNrM7GwzyzezPDM7G2gLO1RG+XgFPk12LiI54WbgISABVAD/DrbJBpRHyqlrrmNty9qwo4iIpFSPilLu/qG7HwGUAWPc/QB3n5fSZFmsoqMotUo9pUQkJ50FnAYsCW6nBtukQywoSmmycxHJDWXufrO7twa3W0h+r5ANSEQSAJpXSkT6vJ6uvhcDvgyMBAo65pZy92+lKlg2GzawP/l5puF7IpKTgosWx4edI6NFg1ErmuxcRHLDcjM7B7gzeH4msCLEPBkvXhIHkkWpbWLbhJxGRCR1ejoL93+AV4C3AE1SuBEF+XmUDypSUUpEcpKZFQEXATsBRR3b3f3C0EJlmpJysHwN3xORXHEh8HfgzyTnqH0p2CYbEI98UpQSEenLelqUKnL376U0SR9TEStmoYpSIpKbbgdmA0cBV5JcfW9WqIkyTX4BDKpQTykRyQnuPh84Luwc2aSsuIx8y6emXkUpEenbelqUut3Mvgo8DDR3bHT3lSlJ1QckYkVM+2hV2DFERMKwrbufambHu/utZjYReDzsUBknWqmeUiLSp5nZ3whW7+6KpgLZsPy8fIYPGK6eUiLS5/W0KLUO+D3wEz5pWBzYOhWh+oKK0mIefrOGtnYnP8/CjiMikk4twX2tme0MLCY5J6F0FquCj14OO4WISCpNCztANouXxKmurw47hohISvW0KPU9kle+l6cyTF+SiBXT2u4sXdNEPFocdhwRkXS6wcxKgZ+RXAK8JHgsnUUrYfUiaG+DvPyw04iI9Dp3vzXsDNksHonz2pLXwo4hIpJSeT087m1gbSqD9DWJWLIQpcnORSTXuPuN7r7K3Z9z963dfZi7/yPsXBknWgneBmsWh51ERCQlzOyGoMdsV/siZnahmZ2d7lzZIh6Js2TtEtra28KOIiKSMj3tKdUGzDCz//LpOaU0DnwDKoOi1MJVjey5VchhRETSwMwqgZHuPjl4/j2SvaQAJrr7nNDCZaLoiOR93QKIVoSbRUQkNa4Ffm5muwAzgWUkV2UdDQwCbgImhBcvs8VL4rR5G8sal1EeKQ87johISvS0KPVAcJMein/cU6op5CQiImnzez795eJrwA3AAOCXJFfhkw7RyuS9JjsXkT7K3WcAp5lZCTAOiAONwCx3fzfMbNkgHokDUNNQo6KUiPRZPSpKaTz4pivpX0C0uFDD90Qkl2zv7g93er7W3f8IYGYvhJQpc31clFoQbg4RkRRz93rg2bBzZJuPi1L1New+bPeQ04iIpEa3c0qZ2aTg/i0ze3P9W3oiZq+KWDGLVJQSkdxRtN7zwzs9HpLOIFmhfwkUl0KtilIiIhtiZvOC7yIzzGxasO0XZrYo2DbDzL7Q6fjLzWyOmb1rZkeFl3zLdRSlqhu0Ap+I9F0b6yn17eD+i6kO0hclYsUsXKX54UUkZ6wxs+3c/T0Ad18JYGZjgPpQk2WqaKWG74mIbNyhXawC/md3/0PnDWa2I3AGsBOQAJ4K2qWsnCl8QOEAov2jLG7Qghgi0nd121PK3WuCh5e6+0edb8Cl3Z1rZjeZ2VIzm9lp292drmjMM7MZwfaRZtbYad/1W/hzZYTK0mIWrVJPKckebe1Oe7uHHUOy1xXAw2Z2npntEtzOBx4K9sn6oiM0fE+yS1tL2AlEunM8cJe7N7v7XGAOsHfImbZIIpKgul49pUSk7+q2KNXJ57vYdsxGzrkFOLrzBnc/3d3HuvtY4D7gX512f9Cxz90v6WGujJaIFbGmuZXVTfoDTjJbfXMrN02ey6F/eJYn3lkSdhzJUu7+GHASyWF7twS3Q4GT3P3R8JJlMPWUkmzRsAKe+z38eSeofj3sNJJlzOxJM4t1el5qZo/38HQHnjCz6WZ2caft3wimFLnJzEqDbRVA50r/wmBb1iqPlFPTULPxA0VEslS3w/fM7Oske0Rtvd4cUgOBF7s7192fN7ORG3hdA04DDtuktFkm8fEKfI0MKi8MOY3IZy1YuZZbX5rH3a8uYE1zK+O2KiU2QP9WZfO5+0zgy2HnyBrRSmheDU11UBQNO43IZy2dDa9cC2/eDa1NsO0RYPlhp5LsM9TdazueuPsqMxvWw3P3d/fq4PgnzWw2cB3wK5IFq18BfwQuBKyL8z/TBTwobl0MMGLEiE35OdIuHonz6uJXw44hIpIyG5tTaiLwKPBr4Eedtq/pmCtkMx0ILHH39zttG2VmrwOrgZ+6e9av1FQRFKUWrWpkTPmgkNOIfGL6R6sYP/lDHpu5GDPj2F3iXHjAKMZWxcKOJlnMzG4A/ubub3WxLwKcDjS7+4S0h8tUsarkfe0CKFdRSjKEO3zwNLx8bfK+oAh2OwP2+ToMGxN2OslO7WY2wt3nA5jZVnRRLOqKu1cH90vN7H5gb3d/vmO/mf0T6Fj5dSFQ1en0SuAzY9/c/QbgBoBx48Zl9LwFiZIE9S31rF63mkH99H1CRPqejRWl8kkWiS5bf4eZDd6CwtSZwJ2dntcAI9x9hZntCTxgZju5++ou3jdrrmxUdOopJRK21rZ2Hp25mPGT5zJjQS2Digr46kFbc95+Iz/u1Seyha4FfmZmuwAzgWUkV+QbDQwCbgJUkOosGnx3qlsI5TuHm0WkpRHenJTsGbVsNpQMh8N+CnteCBEtoClb5CfAZDN7Lnh+EMHf890JLmjkufua4PGRwJVmFu809+2JJNscSM5hONHM/kRyovPRwNRe/DnSrjxSDkBNfQ2DBqsoJSJ9z8aKUtP55CrG+t1hHdh6U9/QzApIzjmy58cv5N4MNAePp5vZB8B2wLT1z8+mKxtDS/rTLz+PhSpKSYjqGlu4a+p8bn1pHtV1TYwcMoArj9+Jk/eoJNJ/Y78CRHrO3WcAp5lZCTAOiAONwCx3f7e7c82sCHge6E+ybbrX3a9Y75gxwM3AHsBP1l91KSt9XJTSZOcSojVL4NUbYdp4WLsCyneBE66HnU+Cgv5hp5M+wN0fM7M9gH1Jfqf4bher6XVlOHB/cuYPCoCJwWvdbmZjSX4fmQd8LXift81sEvAO0Apclq0r73VIRBIA1DTUsP3g7UNOI7Jx7696n9Glo8OOIVmk22+k7j4qBe95BDDb3T+e2dXMyoCV7t5mZluTvKrxYQreO63y8ox4rIjq2qawo0gOmre8gZtfnMs90xeydl0b+209hCuP35nDxgwjL6+rKRdEeoe71wPPbuJpzcBh7l5vZoUkr6g/6u6vdDpmJfAt4IReCZoJImWQ309FKQnH4reSQ/Rm3ptcVW/7Y2DfS2HkAWBqJ2TLmdkYd58dFKTgk6F0I4LhfK91d767fwjs1sX2c7s55yrgqs3NnGniJXEATXYuGa2lrYXHP3qcibMm8tbyt7jnS/cwZrCGe0vPbGyi8z26299dQ2JmdwKHAEPNbCFwhbuPB87g00P3INmF90ozawXagEu2cM6qjJGIFmv4nqSNuzNl7krGT57LU7OWUJBnHLdbBRceMJKdEpqvRjKXuztQHzwtDG6+3jFLgaVmdmya46VOXh4MqtAKfJI+7e3w/uPw8jUw7wUojMCe58M+l8CQbcJOJ33P90gO0/tjF/ucPr7oUW8YXDSYwrxCFaUkIy1vXM49793DpHcnsbxxOSMHjeTH+/yYEQMze5odySwbG7vTVQPSoduGxN3P3MD287vYdh9w30ayZKWK0mImv9+T3skim29dazsPv1nN+Mlzebt6NaUDCvnGodty7r5bMWxQUdjxRHrEzPJJDhvfFrjG3aeEHCk9YlXJic5FUmldA8yYCFOuhxVzksXQI34Je54HxaVhp5M+yt0vNrM8kosYdbtyt3Qtz/KIR+LU1KsoJZnj7RVvM3HWRB6d+ygt7S0cUHEA5+xwDvsl9iPP8sKOJ1lmY8P3Dk1XkL4qEStmyZomWtraKczX/6DSu1Y2rGPilI+47eWPWLqmmdHDSvj1Sbtw4u4VFBVqyW4Jh5md6u73bGzb+oJ5P8aaWYzkHCI7u/vM7s7ZwPtnzYIYQHJeqQ/+G3YK6avqFsHUG2D6LdBUCxV7wsnjYcfjIb8w7HSSA9y93cz+AOwXdpZsFY/E1VNKQtfS3sLT859mwjsTmLFsBgMKBnDqdqdy5pgzGRkdGXY8yWI9nuXYzHYGdiS5khIA7n5bKkL1JZWxYtxhcV0TVYMHhB1H+og5S9cwfvI8/vXaQppb2zlouzJ+f+ooDho9FNM8IBK+y4H1C1BdbeuSu9ea2bPA0XyyolKPZdOCGECyKLWmBlrXQUG/sNNIX7FoenK+qHceAG+HHb4E+14GVXtrvigJwxNmdjLwr2C4tmyCeEmclxa9FHYMyVGrmlZx73v3cte7d7F07VKqBlbxw71+yPHbHs/AfgPDjid9QI+KUmZ2Bcn5oXYE/gMcA0wGVJTaiESsGIBFtY0qSskWcXcmz1nO+MlzefbdZfQryOOk3Su48IBRbDdcDYKEz8yOAb4AVJjZXzvtGkRyFaTuzi0DWoKCVDHJRTF+m7KwmSRaCTisqYbSkWGnkWzW3gazH4FXroX5L0O/gcm5ova+GEq3Cjud5LbvARGg1cyaSK7A5+4+KNxY2SEeibOscRktbS0UqoejpMm7K99lwqwJPPLhI6xrX8d+8f34+b4/58DKAzVET3pVT3tKnUJy5YvX3f0CMxsO3Ji6WH1HIpbsWKbJzmVzNbW08eCMRdw0eR7vLlnD0JL+fO/z23H2PiMYUqKluiWjVAPTgONIzg3VYQ3w3Y2cGwduDeaVygMmufvDZnYJgLtfb2blwesPAtrN7DvAju6+und/jDSLVibv6xaqKCWbp2k1vH5Hcr6o2o8gthUc9WvY/Rwo0nd+CZ+76+rZFohH4jjOkrVLqBxYGXYc6cNa21t5dsGzTJg1gWlLplFcUMwJ257AWTucxTYxLYYhqdHTolRjMB681cwGAUuBrVOYq8/4uKfUKhWlZNMsW9PM7a98xIRXPmJFwzp2iA/iD6fuxpd2i9O/QPNFSeZx9zeAN8xsoru3AJhZKVDl7qs2cu6bwO5dbL++0+PFQN/7azwWzHulyc5lU636CKb8A167DdatgRH7wZH/D8YcC3lqJyRzmNnT7n74xrZJ1+IlcQBqGmpUlJKUqGuu41/v/4u7Zt9FdUM1iUiC7+/5fU4cfSLR/lrBW1Krp0WpacHEs/8kefW7HpiaqlB9SVFhPkNL+lFdp6KU9MzsxasZ/8JcHpxRzbq2dg4fM4yLDhzFflsP0XxRki2eNLPjSLYxM4BlZvacu38v3FgZalAieV+3MNwckh3cYcFUePnvMPthsDzY6UTY91Ko2CPsdCKfYmZFwABgaHCRouMPmUFAIrRgWSYe+aQoJdKb5qyaw8TZE/n3B/+mqa2Jvcr34gd7/4BDKg8hXxc3JE16VJRy90uDh9eb2WPAoOCqtvRAIlbMQvWUkm60tzvPvreU8ZPn8uKcFRQX5nP6XlVcsP9Iti4rCTueyKaKuvtqM/sKcLO7X2FmajM2pLAYImVQNz/sJJLJ2lrgnQeT80Utmg5FMfjct5LzRUUrwk4nsiFfA75DsgD1Wqftq4FrwgiUjcoj5QDU1KsoJVuurb2NFxa9wB2z7mBKzRT65/fni1t/kTPHnMn2g7cPO57koJ5OdH4b8ALwgrvPTm2kvqciVsx7S9aEHUMy0Np1rdz32iJufnEuHy5roHxQET88egxn7l1FbIBW4ZKsVWBmceA04Cdhh8kK0Sr1lJKuNa6C6bfC1Btg9SIYvA184Q8w9izoFwk7nUi33P1q4Goz+6a7/y3sPNmqf35/hhQNUU8p2SJr1q3h/vfv587Zd7KwfiHDBwzn23t8m5NHn0xpUWnY8SSH9XT43i3AAcDfzGxrksMxng8aGtmIRKyYZ99dhrtr+JUAsLiuidtenseEKfOpa2xh18ooV58xli/sEqcwX6tZSNa7EngceNHdXw3ajfdDzpTZopWwTNd8pJMVH8Ar18GMidDSAKMOgmP/BKOPhDy1E5J1bjKznwIj3P1iMxsNbO/uD4cdLFvEI3EVpWSzzK2by8RZE3nwgwdpbG1kj2F78J09v8PhIw6nIK+n5QCR1Onp8L1nzOw5YC/gUOASYCdARakeqIgV09jSxqq1LQyOqPdLLntrYR3jJ3/Iw2/W0O7OkTuWc9GBoxi3VakKltJnuPs9wD2dnn8InBxeoiwQGwHvP5mcL0i/C3KXO8x7AV6+Ft57DPILYedTYL9LoXyXsNOJbImbSM5L+7ng+UKS7YSKUj0UL4nz/ipd35Geafd2Xlz0IhNmT+DFRS9SmFfIMaOO4ewdzmbHITuGHU/kU3o6fO9pIAK8THIY317uvjSVwfqSjhX4qmsbVZTKQW3tzpPvLOGmyXOZOm8lJf0L+PJ+I7lg/5FUDR4QdjyRXmdmlcDfgP0BByYD33Z3jU/bkGgltDbC2pUQGRJ2Gkm31nUw8z545RpY/BYMGAIH/S/s9RUYODzsdCK9YRt3P93MzgRw90bT1bhNEo/EeWHhCxp5Id1qaGngwTkPcufsO5m3eh5lxWVcNvYyTt3uVIYU6+8LyUw97a/3JrAnsDNQB9Sa2cvurtm7e6AiKEotqm1k5wotqZkr6ptbmfTqAm55aR7zV66lsrSYnx67A6fvVcXAosKw44mk0s3ARODU4Pk5wbbPh5Yo00WDJb7rFqgolUsaVsC0m+DVf0L9EigbA1/6K+x6WnICfJG+Y52ZFZO8UIGZbQM0hxspu8QjcZramqhtrtX8P/IZC1YvYOLsiTww5wHqW+rZdeiu/PbA3/L5rT5PYb6+d0hm6+nwve8CmFkJcAHJLxflQP/URes7KkqDopRW4MsJC1et5daX5nHX1AWsaW5lz61KufyYMXx+x+EUaL4oyQ1l7n5zp+e3mNl3wgqTFaJVyfu6BZAYG2oUSYOls5Or6L15N7Q2wbZHwL7XwTaHafim9FVXAI8BVWY2gWRP2vNDTZRl4iVxAKobqlWUEgDcnVdqXmHCrAk8v/B58vPyOWrkUZw15ix2Lds17HgiPdbT4XvfAA4k2VvqI5Ljwl9IYa4+pXRAIUWFeVTXqijVl03/aBU3TZ7LozNrMDO+sEuciw4YxdiqWNjRRNJtuZmdA9wZPD8TWBFinsz3cVFKIxz7LHf44Bl4+Rr44GkoKIJdT4d9L4VhY8JOJ5JS7v6kmb0G7AsYySHdy0OOlVXikWRRanH9YnYaslPIaSRMa1vW8vCHDzNx1kQ+qPuAwUWD+dpuX+O07U6jbEBZ2PFENllPh+8VA38Cprt7awrz9ElmRkWsmEUqSvU5rW3tPDpzMeMnz2XGgloGFRXw1YO25rz9Rn48l5hIDroQ+DvwZ5JDNV4KtsmGDBgMhQOgdkHYSaS3tTTCm5OSK+ktmwUlw+HQn8K4CzVUU3JNBZBP8vvHQWaGu/8r5ExZIxFJAMmeUpKbFtUv4q7Zd3Hf+/exZt0adhi8A1cdcBVHjzyafvmat1iyV0+H7/0+1UH6ukSsWD2l+pC6xhbufnU+t770EYtqGxk5ZABXHr8TJ+9RSaS/llaV3Obu84Hjws6RVcyS80rVqSjVZ6xZAq/eCNPGw9oVydXzTrgedj4JCjT7geQWM7sJ2BV4G2gPNjugolQPRftHKS4opqahJuwokkbuzrQl05gwawL/XfBfDOOIrY7g7B3OZmzZWE16L32Cvj2nSUWsmFk1a8KOIVvooxUN3PziPCZNW8DadW3su/VgfnHcThw+Zhh5eWoURADM7FaSQzNqg+elwB/dXb2luhOt1PC9vmDxW8leUW/dA20tsP0xySF6Iw/QfFGSy/Z1d61DvwXMjPJIOYsbFocdRdKgqbWJ/8z9DxNmTeC9Ve8R6x/jwp0v5PTtT6c8Uh52PJFepaJUmlTEille30xTSxtFhflhx5FN4O5MmbuS8ZPn8tSsJRTkGV/aLcFFB4xip4RWUxTpwq4dBSkAd19lZruHmCc7RKuSBQ3JPu3t8P4T8Mo1MPf55FDMPc6Dfb8OQ7YJO51IJnjZzHZ093fCDpLNEpEE1fUavteXLW5YzN3v3s29791LbXMt25Vux5Wfu5JjRh1DUUFR2PFEUkJFqTTpmF+opq6JUUMjIaeRnljX2s4jb1Vz4wtzebt6NaUDCvnGodty7r5bMWyQGgWRbuSZWam7rwIws8Govdm4aBU0LEvOQVSoOemywroGmDERplwPK+bAoAo44pew53lQrNWxRDq5lWRhajHQTHKyc3d3LRG2Ccoj5cxaOSvsGNLL3J0Zy2Zwxzt38PT8p3Gcw6oO46wdzmLc8HEaoid9nr4kpElFafILxqJVjSpKZbhVDeuYOHU+t740j6Vrmtl2WAn/d+IunLRHhXq5ifTMH4GXzOxeknOGnAZcFW6kLBDrWIFvEQzdNtws0r26RTD1Bph+CzTVQmIPOHk87Hg85BeGnU4kE90EnAu8xSdzSvWImc0D1gBtQKu7jzOz3wNfAtYBHwAXuHutmY0EZgHvBqe/4u6X9MpPkAESJQlWNq2kqbVJvWb6gHVt63h07qNMmDWBWStnMbDfQL6845c5fczpVJRUhB1PJG1UlEqTiqCnlCY7z1xzltZz04tz+ddrC2lqaefA0UP53Sm7ctDoMs0XJbIJ3P02M5sGHEbyavhJGrLRA9HK5H3dAhWlMtWi1+CVa+Ht+8HbYcwXYb/LoGofzRcl0r357v7QFpx/qLsv7/T8SeByd281s98ClwM/DPZ94O5jt+C9MlY8EgeSQ7xGRkeGG0Y229K1S5n07iTuee8eVjatZJvoNvxs35/xxa2/yIDCAWHHE0k7FaXSZPigIsxgkYpSGcXdmTxnOeMnz+XZd5fRryCPk3av4MIDRrHd8IFhxxPJWkERSoWoTfFxUUqTnWeU9jaY/UiyGDX/Zeg3EPb+GuxzMZSODDudSLaYbWYTgX+THL4HgLtv1up77v5Ep6evAKdsWbzs0DHBdU1DjYpSWejNZW8yYdYEnpj3BG3exsGVB3PWDmexb3xfDdGTnKaiVJr0K8hj+MAiFaUyRFNLGw/OWMRNk+fx7pI1DC3pz/c+vx1n7zOCISVaqltEQjCoArBkTykJX9NqeP2O5HxRtR9BbAQc9WvY/RwoGhR2OpFsU0yyGHVkp20O9KQo5cATZubAP9z9hvX2Xwjc3en5KDN7HVgN/NTdX9j82JklUZIAkkUpyQ4tbS088dETTJw1kTeXv0lJYQlnjDmDs8acRdWgqrDjiWQEFaXSKBEr0vC9kC1b08wdr3zEHa98xIqGdYwpH8jvT9mV48Ym6F+g+aJEJET5hTAwrp5SYVv1EUz5B7x+OzSvhqp94chfJYfq5amdENkc7n7BFpy+v7tXm9kw4Ekzm+3uzwOY2U+AVmBCcGwNMMLdV5jZnsADZraTu6/u/IJmdjFwMcCIESO2IFp6DRswDMNUlMoCyxuXc+979zLp3Uksa1zGyEEj+fE+P+a4bY4jUqj5hUU6U1EqjRKxYt5aVBd2jJw0e/Fqxr8wlwdnVLOurZ3DxwzjogNGsd82Q9RdVkQyR7QSaueHnSL3uMOCqfDKNTDr32B5sOMJsN+lULFn2OlEcpq7Vwf3S83sfmBv4HkzOw/4InC4u3twTDPB8EB3n25mHwDbAdPWe80bgBsAxo0b5+n6WbZUYV4hZQPKqK6vDjuKbMA7K95hwqwJPDr3UVraWzig4gCu3OFKPpf4HHmWF3Y8kYykolQaVZQW88TbS2hvd02cnQbt7c5z7y1j/OS5TJ6znOLCfE7fq4oL9h/J1mUlYccTEfmsWFVyMm1Jj7YWeOfB5HxRi6ZDURQ+9y3Y+2KIauUjkbCZWQTIc/c1weMjgSvN7GiSE5sf7O5rOx1fBqx09zYz2xoYDXwYRvZUSUQSLG5YHHYM6aSlvYWn5z/NxFkTeX3p6xQXFHPKdqdw5pgzGRUdFXY8kYynolQaVcSKWdfWzvKGZoYN1DKuqdK4ro37XlvITS/O5cNlDZQPKuIHR2/PWXuPIDagX9jxREQ2LFqZ7KnT3g55uqKaMo2rYPqtMPWfsHohDN4GvvAHGHsW9NOwCpEMMhy4P+jVXgBMdPfHzGwO0J/kcD6AV9z9EuAgkkWrVqANuMTdV4YTPTXikTgzV8wMO4YAq5pWcd/793HX7LtYsnYJlSWV/GCvH3DCticwsJ8WTBLpKRWl0qgiVgzAolWNKkqlwOK6Jm57eR4Tp86ndm0Lu1ZGufqMsXxhlziF+fpyJyJZIFoFbeugYSkMLA87Td+z4oPkxOWvT4CWBhh5IBz7Rxh9pIqAIilkZt/rYnMdMN3dZ2zoPHf/ENiti+3bbuD4+4D7NjNmVoiXxHlq/lO0e7uGg4Xk3ZXvMnH2RB758BGa25rZN74vP933pxxYcSD5mntQZJOpKJVGiaAoVV3bxO7ZM6dixntrYR3jJ3/Iw2/W0O7OkTuWc9GBoxi3VanmixKR7BINVuKpW6iiVG9xh3mTk0P03n0U8gpgl1Nh369DfNew04nkinHB7d/B82OBV4FLzOwed/9daMmyTDwSp6W9hRWNKygbUBZ2nJzR1t7Gswue5Y5ZdzBtyTSK8os4bpvjOGvMWWxb2mWNVER6KGVFKTO7ieTkg0vdfedg293A9sEhMaDW3ccG+y4HLiLZ1fZb7v54qrKFpaMotah27UaOlI1pa3eemrWE8ZPnMnXuSkr6F/Dl/UZy/udGMmLIgLDjiYhsnmhl8r52PlSOCzdLtmtdBzPvSxajFr8JA4bAQf8Le30FBg4PO51IrhkC7OHu9QBmdgVwL8nhdtMBFaV6KB6JA1DTUKOiVBrUNddx//v3c+fsO6luqCYRSfD9Pb/PiaNPJNo/GnY8kT4hlT2lbgH+DtzWscHdT+94bGZ/JNltFzPbETgD2AlIAE+Z2Xbu3pbCfGkXLS5kYP8Cqmubwo6SteqbW7ln2gJufnEe81eupSJWzE+P3YHT9qpiUFFh2PFERLZMrFNPKdk8DStg+k3J+aLql0DZGPjSX2HX06CwOOx0IrlqBLCu0/MWYCt3bzSz5pAyZaV4SbIoVd1Qza5l6u2ZKh/UfsCEWRN4+MOHaWxtZNzwcfxgrx9wcNXBFORpsJFIb0rZ/1Hu/ryZjexqnyXHVJ0GHBZsOh64K1jGdW4weeHewMupyheWRKyYRbWNYcfIOgtXreXWl+Zx16sLWNPUyp5blfKjY8Zw5I7DKdB8USLSVxRFof8gFaU2x7J3k72i3rgLWptgm8PhhGuT9xrKLRK2icArZvZg8PxLwJ3BinrvhBcr+3T0lFpcrxX4elu7t/P8wueZMGsCr9S8Qr+8fhy79bGcvcPZbD94+42/gIhslrDKvAcCS9z9/eB5BfBKp/0Lg219TkVpMYtWqSjVU9M/WsVNk+fy2NvJhvcLu8S56IBRjK2KhRtMRCRVolVQtyDsFNnBHT54JlmMmvMUFBTBrqfDvpfCsDFhpxORgLv/ysweBfYHjOSqeNOC3WeHlyz7DOw3kIGFA6luqA47Sp+xZt0aHpjzAHfOvpMFaxYwbMAwvr3Htzl59MmUFpWGHU+kzwurKHUmcGen511dwvSuTjSzi4GLAUaMyL7ZwhOxIl6bvyrsGBmtta2dx95ezPjJc3l9fi0Diwr4ygGj+PLnRn68gqGISJ8VrVRRamNamuDNu+GV62DZLCgZDof+FMZdAJGhYacTka69DlQTfP8wsxHuPj/cSNmpvKScmoaasGNkvbl1c7lz9p08OOdB1rauZfdhu/OtPb7F4SMOpzBP04KIpEvai1JmVgCcBOzZafNCoKrT80qSjdZnuPsNwA0A48aN67JwlckSsWJq17bQ0NxKpL/GI3dW19jC3a/O59aXPmJRbSMjhwzgl8ftxCl7Vuq/lYjkjmglLJwadorMVL8UXr0RXh0Pa5fD8F3ghOtg55OhoH/Y6URkA8zsm8AVwBKSixoZyQvQmhRpM8QjcRY3aPje5mj3dl6qfok7Zt3Bi4tepDCvkGNGHcNZO5zFTkN2CjueSE4K45v+EcBsd+88YcZDwEQz+xPJic5HA33yL/KOnj7VtY2MHj4w5DSZ4aMVDdz84jzumbaAhnVt7Lv1YH5x3E4cNmYY+XmaB0REckysChpXQXM99C8JO01mWDwzOUTvrXugrQW2Oxr2uxRGHqj5okSyw7eB7d19RdhB+oJ4JM6MpTPCjpFVGloaeOiDh5g4ayLzVs9jaPFQLh17KadudypDi9XDViRMKStKmdmdwCHAUDNbCFzh7uNJrrLXeege7v62mU0iOdFhK3BZX1t5r0NHUWpRjhel3J2pc1dy4+S5PDVrCQV5xpd2TXDhAaPYuULLq4pIDot2WoEvl+dFam+H95+AV66Buc9D4QDY4zzY9+swZJuw04nIpllAsOq2bLl4JM7qdatpaGkgUhgJO05GW7B6AXe+eyf3v38/9S317DJ0F35z4G84cqsjKczXED2RTJDK1ffO3MD28zew/SrgqlTlyRQVpZ8UpXLRutZ2HnmrmvGT5zJz0WpKBxRy2SHb8uX9tmLYoKKw44mIhO/jotSC3CxKrWuAN+5Mzhe1Yg4MTMARv4Q9z4NiTTgrkqU+BJ41s0eA5o6N7v6n8CJlr0RJAoCa+hq2Ld025DSZx92ZsngKE96ZwHMLnyPf8vn8yM9zzg7nsGuZRoyKZBpN1JNmwwYWkZ9nVOdYUWpVwzomTp3PbS/PY8nqZrYdVsL/nbgLJ+5eQXG//LDjiUjIzKwIeB7oT7Jtutfdr1jvGAOuBr4ArAXOd/fX0p015aKVyftcm+x8dTVMvQGm3QxNtZDYA04eDzseD7qaLZLt5ge3fsFNtkA8EgegpkFFqc7Wtqzl4Q8fZuKsiXxQ9wGDiwZz8a4Xc9r2pzFswLCw44nIBqgolWb5eUb5oCKqa5vCjpIW7s5fn57Ddc/NoamlnQNHD+W3J+/KQaPLyNN8USLyiWbgMHevN7NCYLKZPerur3Q65hiScw6OBvYBrgvu+5aB5ZBXkBy+lwva2+DRH8D0W8DbYcwXYb/LoGofzRcl0ke4+y/DztCXlEfKAbQCX6C6vpq7Zt/Ffe/fx+p1q9lh8A78v/3/H0ePOpr++VoEQyTTqSgVgorSYhatyo2eUn956n2ufvp9jt0lzrcOH8325bk7j5aIbJi7O1AfPC0MbuuvsHo8cFtw7CtmFjOzuLv3rb/K8/JhUAJqc6CnVHs7PPQtmHEHjLsQ9v82lI4MO5WI9BIz+4u7f8fM/s1nf6fj7seFECvrlRWXUWAFOV2UcnemLZnGxFkTeWbBMxjG4SMO5+wdzmb3YbtjuqghkjVUlApBRayYqXNXhh0j5W584UOufvp9Tt2zkt+evKt6RolIt8wsH5gObAtc4+5T1jukguRkuR0WBtv63l/l0aq+31PKHR7/cbIgdfAP4dAfh51IRHrf7cH9H0JN0cfk5+UzPDI8J4tSTa1NPDr3USbMmsC7q94l2j/KBTtdwBljzvi4B5mIZBcVpUJQEStm8eomWtvaKcjPCztOStw1dT7/75FZfGGXcn6jgpSI9ECw6upYM4sB95vZzu4+s9MhXf0i+cyVdzO7GLgYYMSIEamImnrRKvjoxbBTpNazv4Yp18E+X4dDLg87jYikgLtPD+6fCztLXxOPxKmpz52i1JKGJdz97t3c89491DbXMrp0NL/Y7xccu/WxFBVosSSRbKaiVAgSsWLa2p2la5pJxIrDjtPr/v1GNZff/xYHb1fGX07fnXwVpERkE7h7rZk9CxwNdC5KLQSqOj2vBKq7OP8G4AaAcePGfaZolRWilcmJv9taIb8PNtUv/Q2e+y3sfg4c9X+aO0qkjzKzt+ji4kEHd9dSaJspHokzbcm0sGOkxfQl07n0qUtpamvikMpDOGfHcxg3fJyG6In0EX3wL93Ml4glq/nVtY19rij1zOwlfPfuGey11WCuP2dP+hX0zZ5gItK7zKwMaAkKUsXAEcBv1zvsIeAbZnYXyQnO6/rcfFIdopXgbVC/+JPV+PqK6bfAEz+FHU+AL/0V8tROiPRhXww7QF9VHiln6dqltLa3UpDXd7/Svbr4VS57+jLKI+Vcc9g1VA2q2vhJIpJV+u5vsAxWWZosRC2qbWRcyFl600sfLOeSO15jh/ggxp8/juJ++WFHEpHsEQduDeaVygMmufvDZnYJgLtfD/wH+AIwB1gLXBBW2JSLBX901y7oW0Wpt+6Ff38Htv08nPTP5KTuItJnuftHYWfoqxIlCdq8jWVrlxEviYcdJyU6ClLxSJzxR41naPHQsCOJSAqoKBWCePSTolRf8fr8VXz11mlsNXgAt164NwOLCsOOJCJZxN3fBHbvYvv1nR47cFk6c4UmGhSl+tJk5+8+Bvd/Dbb6HJx2GxT0CzuRiKSJme0L/A3YAegH5AMN7j4o1GBZLB5JFqJqGmr6ZFFqSs0UvvH0N6goqeDGo25UQUqkD1Of+RBE+hcQG1DIolV9oyg1e/Fqzr/5VYaU9OeOr+zD4Ii+aIiIbJGO3lF188PN0VvmPg+Tvgzlu8CZd0G/AWEnEpH0+jtwJvA+UAx8hWSRSjZTR1GquuEzUytmvVdqXuEbT3+DyoGV6iElkgPUUyokFbFiqvtAT6m5yxs458apFBXmMeEr+zB8kFa/EBHZYv0iUDy4b/SUWjgN7jwTBm8N5/wLitQxQiQXufscM8sPVlq92cxeCjtTNiuPlAOwuGFxyEl618vVL/PNZ75J1cAqbjzyRoYUDwk7koikmHpKhSQRK6a6tinsGFukuraRc26cQrs7E76yD1WDdeVbRKTXRCuzvyi1eCbccTJEhsKXH4ABg8NOJCLhWGtm/YAZZvY7M/suEOnJiWY2z8zeMrMZZjYt2DbYzJ40s/eD+9JOx19uZnPM7F0zOyo1P074BhQOINY/Rk1931nv46Xql/jmM99kxKARjD9qvApSIjlCRamQVMSKWVTbSHKKlOyzvL6Zc26cwurGFm67cG+2HTYw7EgiIn1LbERyovNsteIDuP1EKBwAX34QBpaHnUhEwnMuye8d3wAagCrg5E04/1B3H+vuHWsE/Qh42t1HA08HzzGzHYEzgJ2Ao4FrgwU0+qR4JN5nhu+9uOhFvvn0N9lq0FaMP3I8g4t0EUMkV6goFZKKWDH1za2sbmoNO8omq1vbwrnjp1Jd18hNF+zFzhXRsCOJiPQ90UqoWwDZePGidgHcdjx4W7IgVToy7EQiEq7lwDp3X+3uvwT+F9iSasrxwK3B41uBEzptv8vdm919LsnVWvfegvfJaPFIvE8M35u8aDLfeuZbbB3bmvFHjqe0qHTjJ4lIn6GiVEgSsWAFviyb7LyhuZULbpnKnKVr+Me549hrpK5iiIikRLQS1tVDU23YSTZN/VK4/QRoqkvOIVW2XdiJRCR8TwOd53koBp7q4bkOPGFm083s4mDbcHevAQjuhwXbK4DOXUwXBtv6pHhJnOr66qwdeQHw/MLn+dYz32Kb2Db88/P/JFYUCzuSiKSZilIhqShNFqWyabLzppY2Lr59GjMW1PK3M3fn4O3Kwo4kItJ3RauS99k0r1TjquSQvdXVcPY9kBgbdiIRyQxF7l7f8SR43NPJSPd39z2AY4DLzOygbo61LrZ9pmJjZheb2TQzm7Zs2bIexsg88Uicta1rWb1uddhRNsvzC5/nO//9DtvGtuWfR6ogJZKrVJQKSSKWXKWuui47ilItbe18887XeXHOCn53ym4cvXM87EgiIn1bthWlmuthwqmw/D04/Q4YsW/YiUQkczSY2R4dT8xsT6BHfwS7e3VwvxS4n+RwvCVmFg9eKw4sDQ5fSHK+qg6VdDFM0N1vcPdx7j6urCx7L7LGI8m/x7NxCN+zC57l2//9NqNLR/PPI/9JtL+mAxHJVSpKhWRopD/9CvKyYvhee7vzv/e8wZPvLOGXx+3EKXtWhh1JRKTviwXfq7JhsvOWJrjrLFj0GpxyE2x7eNiJRCSzfAe4x8xeMLMXgLtJTnreLTOLmNnAjsfAkcBM4CHgvOCw84AHg8cPAWeYWX8zGwWMBqb25g+SSRIlCQCq67NrsvP/zv8v3332u2xfuj03fP4GFaREclxB2AFyVV6ekYgWsSjDh++5Oz97cCYPzKjmf4/anvM+NzLsSCIiuWHAUMjvn5zsPJO1tcC9F8Dc5+CE62GHL4WdSEQyjLu/amZjgO1JDrGb7e4tPTh1OHC/mUHye8tEd3/MzF4FJpnZRcB84NTgfd42s0nAO0ArcJm7t/X+T5QZyiPJVU1rGmpCTtJzz8x/hu8/933GlI7hH0f+g0H9BoUdSURCpqJUiBKx4oyeU8rd+c1js5kwZT5fO3hrLj1km7AjiYjkjrw8iFZk9vC99nZ44Ovw7n/gC3+AsWeGnUhEMpCZnQo85u4zzeynwC/N7P+5+2vdnefuHwK7dbF9BdBll0x3vwq4qhdiZ7zBRYPpl9cva4bvPf3R0/zPc//DjkN25PrPX8/AfgPDjiQiGUDD90JUESvO6J5S1z77Af947kPO3mcEPzp6DMFVKhERSZdoVeb2lHKH/3wf3roHDv857P3VsBOJSOb6mbuvMbMDgKOAW4HrQs6U9fIsL7kCX0PmD9976qOnkgWpoSpIicinqSgVokSsmKVrmlnX2h52lM+49aV5/P7xdzlhbIJfHb+zClIiImGIVmVmTyl3eOoKmHYTHPBdOPD7YScSkczWMYTuWOA6d38Q6Bdinj6jPFKe8cP3npj3BP/z3P+w09Cd+McR/1BBSkQ+RUWpEFWUFuMOi+uawo7yKfdOX8gVD73N53cczu9P3Y28PBWkRERCEauCNYuhdV3YST7thT/Ci1fDXl+Bw68IO42IZL5FZvYP4DTgP2bWH30P6RWJSIKa+swtSj0+73F+8PwP2LVsV/7x+X9Q0q8k7EgikmHUGISoIlYMkFFD+B6bWcMP7n2D/bcdwt/O3J3CfP0TEREJTbQScFi9KOwkn5jyD3jmV7Dr6XDM70E9aUVk404DHgeOdvdaYDDwv6Em6iPikTjLGpexri3DLl4Aj819jB8+/0N2K9uN6464jkhhJOxIIpKBVHEIUSIoSmXKZOfPvbeMb975OmOrYtxw7jiKCvPDjiQiktuilcn7TBnCN2MiPPoDGPNFOP7a5GTsIiIb4e5r3f1f7v5+8LzG3Z8IO1df0LEC35K1S0JO8mmPzn2UH76QLEhde8S1KkiJyAbpr8kQxaNFQGb0lHp13kq+dvs0th02kJvP35tIfy3MKCISumhV8j4TJjt/50F48DLY+hA45SbIVzshIhK2REkCIKOG8D3y4SP86IUfsfuw3dVDSkQ2SkWpEBUV5jO0pH/oPaVmLqrjwptfJREt5vaL9iY6oDDUPCIiEhhUkbwPu6fUnKfg3ougci84YyIU9A83j4iIAMnhe0DGTHb+8IcP8+PJP2bP4Xty7eHXMqBwQNiRRCTDqSgVsopYUag9peYsXcOXb5rKoOJC7vjKPgwt0RcNEZGMUVgEkWFQOz+8DB+9DHedA8PGwFmToJ+ueIuIZIrhkeEAVDdUh5wE/v3Bv/nJ5J8wbvg4/n7Y31WQEpEeSVlRysxuMrOlZjZzve3fNLN3zextM/tdsG2kmTWa2Yzgdn2qcmWaitLi0IpSC1au5ewbp5Bnxh1f2efjOa5ERCSDxKrC6ylVPQMmnpac2+qc+6E4Fk4OERHpUv/8/gwtHsrihsWh5nhwzoP8ZPJP2Gv4Xvz9cBWkRKTnUjkhxC3A34HbOjaY2aHA8cCu7t5sZsM6Hf+Bu49NYZ6MlIgW88zspbg7lsYVjJasbuLsG6fQ1NLO3V/bl1FDdeVbRCQjRSthyTvpf9+ls+H2E6EoBl9+EErK0p9BREQ2Kh6Jhzqn1ANzHuDnL/6cfeL78NfD/kpxgS50i0jPpaynlLs/D6xcb/PXgd+4e3NwzNJUvX+2qCgtpqmlnZUN6VvGdWXDOs65cQor6pu59cK9GVM+KG3vLSIimyga9JRyT997rpoHt58A+YXw5QcgWpG+9xYRkU0Sj8RDm1Pq/vfv5+cv/px94/vyt8P+poKUiGyydM8ptR1woJlNMbPnzGyvTvtGmdnrwfYD05wrNB1D5qprm9LyfmuaWjjvpql8tHItN563F2OrYml5XxER2UzRKmhthLUr0vN+q6vh1uOgtQnOfQCGbJOe9xURkc3SUZTydF68AP71/r+44qUr2C+xH3897K8UFRSl9f1FpG9Id1GqACgF9gX+F5hkyTFrNcAId98d+B4w0cy67L5jZheb2TQzm7Zs2bJ05U6ZiqAotah2bcrfq3FdGxfdMo1ZNau57uw92G+bISl/TxER2ULRyuR9OiY7b1gBt52QLICdcx8M3zH17ykiIlskXhKnua2ZlU3rD1JJnXvfu5crXrqCz1V8TgUpEdki6S5KLQT+5UlTgXZgqLs3u/sKAHefDnxAslfVZ7j7De4+zt3HlZVl//wWnxSlUttTal1rO5fcMZ1XP1rJn08fy+E7DE/p+4mISC+JVSXvUz3ZeVMd3HES1H4EZ94FFXum9v1ERKRXxCNxgLRNdn7Pe/fwy5d/yQEVB3D1oVfTP1+rd4vI5kt3UeoB4DAAM9sO6AcsN7MyM8sPtm8NjAY+THO2UMQGFFJcmE91Clfga21r5zt3v85z7y3j1yfuwpd2S6TsvUREpJdF01CUWrcWJp4BS2bCabfDqJwZRS8ikvU6ilLpmFdq0ruTuPLlKzmo8iAVpESkV6Rs9T0zuxM4BBhqZguBK4CbgJvMbCawDjjP3d3MDgKuNLNWoA24xN3T1/80RGZGRWkxi1alpijV3u5c/q+3+M9bi/npsTtwxt4jUvI+IiKSIsWlUBiBugWpef3WdTDpXFjwCpw8HrY7MjXvIyIiKZEoSV5wrq6vTun73DX7Lq6achUHVx7Mnw75E/3y+6X0/UQkN6SsKOXuZ25g1zldHHsfcF+qsmS6RKyY6rreL0q5O1c+/A73TF/Itw4fzVcO3LrX30NERFLMLDmvVCqKUm2tcN9FMOcpOO5vsPNJvf8eIiKSUoP6DaK4oDilPaUmzprIr6f+mkOqDuGPB/9RBSkR6TXpHr4nXaiIFaWkp9Sfn3yPW16ax4X7j+K7R4zu9dcXEZE0iVZCbS8Xpdrb4d/fglkPwVG/hj2+3LuvLyIiaWFmxCPxlM0pNWHWBH499dccWnUofzpYPaREpHepKJUBKmLFrGhYR1NLW6+95j+f/5C/PjOH08ZV8rMv7kBykUMREclKsarenVPKHR6/HGZMgEMuh/0u7b3XFhGRtIuXxKlu6P3he3e8cwe/mfobDqs6jD8e/EcK8wt7/T1EJLepKJUBEsEKfL012fnEKfO56j+zOHaXOL8+aVcVpEREsl20EtYuh5Ze6lX73/+DKdfDvpfBwT/sndcUEZHQpKKn1G1v38ZvX/0tR4w4gj8c8gcVpEQkJVSUygAVQVFqUS8UpR6csYifPPAWh2xfxp9PH0t+ngpSIiJZLxosUtEbvaVe/Cs8/7vkcL2jrkrOWSUiIlktEUmwsmklja29c/Hi1rdv5ffTfs/nt/o8vzv4dxTmqSAlIqmholQG6K2eUk+9s4TvT3qDvUcO5vpz9qRfgT5eEZE+IVqZvN/Syc6n3QxP/gx2Ogm++BcVpEQk45lZvpm9bmYPB8/vNrMZwW2emc0Ito80s8ZO+64PNXialUfKAXqlt9QtM2/hD9P+wJFbHclvD/qtClIiklIpW31Peq48WkSewaLaps1+jZfmLOfSia+xU2IQN543jqLC/F5MKCKSWmZWBdwGlAPtwA3ufvV6x5QCNwHbAE3Ahe4+M91ZQ/FxUWoLekq9dS88/F0YfRSc+A/IUzshIlnh28AsYBCAu5/escPM/gjUdTr2A3cfm9Z0GSIeiQNQ01DDqOiozX6dm2bexJ+n/5mjRx7Nrw/8NQV5+rooIqmlrjQZoDA/j+GDNn8Fvtfnr+Irt01j5JAB3HLB3gws0tUMEck6rcD33X0HYF/gMjPbcb1jfgzMcPddgS8DV5MrBiXA8jZ/Bb53H4V/XQwjD4DTboUCrZwkIpnPzCqBY4Ebu9hnwGnAnenOlYkSJQkAauprNvs1bnzrRv48/c8cM/IYFaREJG1UlMoQiVjxZg3fm1WzmvNvfpWygf2546J9KI3oi4aIZB93r3H314LHa0heFa9Y77AdgaeDY2YDI81seFqDhiW/EAbGN6+n1IfPwaTzIDEWzrwTCot7PZ6ISIr8BfgByR606zsQWOLu73faNioY6vecmR2YjoCZomxAGXmWR03D5hWl/vnmP7n6tas5ZtQx/N+B/6eClIikjYpSGSIRK97kic7nLm/g3PFTKS7M546L9mHYoKIUpRMRSR8zGwnsDkxZb9cbwEnBMXsDWwGVaQ0Xpmjlps8pteBVuPNMGLINnH0v9B+YmmwiIr3MzL4ILHX36Rs45Ew+3UuqBhjh7rsD3wMmmtmgDbz2xWY2zcymLVu2rFdzh6Uwr5Cy4rLNKkrd8OYN/PX1v3Ls1sfyfweoICUi6aWiVIaoiBVTU9dIe7v36PhFtY2cc+MU2t254yv7UDV4QIoTioiknpmVAPcB33H31evt/g1QGkxq+03gdZLD/tZ/jT73ZQOAaNWmFaUWz4QJJ0PJMDj3fhgwOHXZRER63/7AcWY2D7gLOMzM7gAwswKSFynu7jjY3ZvdfUXweDrwAbBdVy/s7je4+zh3H1dWVpbanyKNEiWJTS5KXf/G9fzt9b/xpa2/xFX7X6WClIiknYpSGaIiVkRLm7O8vnmjxy5b08w5N05hdVMLt124N9sOK0lDQhGR1DKzQpIFqQnu/q/197v7ane/IJjE9stAGTC3i+P65JeNZE+pRdDe1SiW9SyfA7efAP1K4MsPwsDylMcTEelN7n65u1e6+0jgDOAZdz8n2H0EMNvdPx7TbGZlZpYfPN4aGA18mObYoSqPlG/SnFLXzbiOa2Zcw3HbHMev9v8V+VoAQ0RCoKJUhqgoTc7xsXAjQ/jq1rZw7vgpLK5r4ubz92Lnimg64omIpFQwYe14YJa7/2kDx8TMrGPivK8Az3fRm6rvilVBewvUL+n+uNoFcNvx4J4sSJVulZ58IiLpcwafneD8IOBNM3sDuBe4xN1Xpj1ZiBKRBIvXLqbdu7944e5cM+Marn3jWo7f5niu/NyVKkiJSGjUPzNDJGLJolR1bSN7jCjt8piG5lbOv2UqHy5rYPz54xg3UkMxRKTP2B84F3grGJ4HydX2RgC4+/XADsBtZtYGvANcFELO8ESrkvd1C2FQvOtj6pcmC1LNa+D8h2Ho6PTlExFJEXd/Fni20/PzuzjmPpK9bXNWPBKntb2V5Y3LGTZgWJfHdBSk/vHmPzhx2xP5xed+QZ6pn4KIhEdFqQzRUZRatKrrnlJNLW189bZpvLmwjmvO2oMDR/ehISkikvPcfTJgGznmZZLDMXJTNJjTvW4+VO312f2Nq+D2E2FNDZz7AMR3TWs8EREJV7wkecGiur66y6KUu/O31//GP9/6JyeNPokr9rtCBSkRCZ2KUhliUFEhA4sKqO5i+F5LWzvfmPg6L32wgj+dthtH76y5QUREck7nnlLra14Dd5wCy9+DsybBiH3Sm01EREIXjySLUosbFn9mX+eC1MmjT+bn+/1cBSkRyQgqSmWQilgxi2qbPrWtvd35n3ve4KlZS/jV8Ttx0h65s/q5iIh0UjQI+kc/W5RqaYK7zoLq1+H022GbQ8PJJyIioeooSq2/Ap+7c/VrVzN+5nhO2e4Ufrbvz1SQEpGMoaJUBkkWpT7pKeXu/PTBmTw4o5ofHL095+43MrxwIiISvlhVciLzDm0tcM/5MPcFOPEfMObY0KKJiEi4SvqVMLDfQKrrqz/e5u78+bU/c/PMmzltu9P4yb4/UUFKRDKKfiNlkESs+OPhe+7Obx6dzcQp8/n6Idtw6SHbhpxORERCF638pKdUexvcfwm89ygc+0fY7fRws4mISOjikfjHw/fcnT9N/xM3z7yZ07c/nZ/u+1MVpEQk4+i3UgZJxIqpa2yhvrmVa/47h388/yHn7rsVPzhq+7CjiYhIJohWJic6d4dHvgcz74UjfgF75dZChCIi0rV4JE51QzXuzh+m/YFb3r6FM8ecyU/2+Qlm3a4nIiISChWlMkhFaXIFvt88Oos/PPEeJ+1ewS+P20kNiIiIJEWroKkOHvk+TL8FDvw+HPDdsFOJiEiGiEfi1NTX8LtXf8dt79zG2TuczeV7X67vEyKSsTSnVAapiBUBcMcr8zlyx+H87pRdyctTAyIiIoFosNjFtPGw98Vw2M/CzSMiIhklXhJnTcsa7ph1B+fscA4/2OsHKkiJSEZTUSqDjBgcwQwO2HYofztrdwry1ZFNREQ6GbJN8n63M+Ho34K+aIiISCdbDdwKQAUpEckaKkplkLKB/Xnwsv3ZbvhA+hfkhx1HREQyTXwsXPQUJHaHPF24EBGRTzu46mDu+MId7Dp0VxWkRCQrqCiVYXatjIUdQUREMpUZVO0VdgoREclQBXkF7Fa2W9gxRER6TJdZRUREREREREQk7VSUEhERERERERGRtFNRSkRERERERERE0k5FKRERERERERERSbuUFaXM7CYzW2pmM9fb/k0ze9fM3jaz33XafrmZzQn2HZWqXCIiIiIiIiIiEr5Urr53C/B34LaODWZ2KHA8sKu7N5vZsGD7jsAZwE5AAnjKzLZz97YU5hMRERERERERkZCkrKeUuz8PrFxv89eB37h7c3DM0mD78cBd7t7s7nOBOcDeqcomIiIiIiIiIiLhSvecUtsBB5rZFDN7zsz2CrZXAAs6Hbcw2CYiIiIiIiIiIn1QKofvbej9SoF9gb2ASWa2NWBdHOtdvYCZXQxcDDBixIgUxRQRERERERERkVRKd1FqIfAvd3dgqpm1A0OD7VWdjqsEqrt6AXe/AbgBwMzWmNm7qY0sKTAUWB52CNkk+syy0/ZhBwjb9OnT69VOZCX9zsk++syyT863EaB2Iovpd0720WeWfdLSTqS7KPUAcBjwrJltB/Qj+Q/zIWCimf2J5ETno4GpPXi9d919XIqySoqY2TR9btlFn1l2MrNpYWfIAGonspB+52QffWbZR23Ex9ROZCH9zsk++syyT7raiZQVpczsTuAQYKiZLQSuAG4CbjKzmcA64Lyg19TbZjYJeAdoBS7TynsiIiIiIiIiIn1XyopS7n7mBnads4HjrwKuSlUeERERERERERHJHOlefa+33RB2ANks+tyyjz6z7KTPTf8NspU+t+yjzyz76DNL0n+H7KTPLfvoM8s+afnMLDl6TkREREREREREJH2yvaeUiIiIiIiIiIhkoYwrSpnZ0Wb2rpnNMbMfbeCYX5iZm9m2nbZ9N9g2Lng+z8zeMrMZwf3x6foZ+iozu8nMlgYT1XfePtjMnjSz94P70k77Lg8+y3fN7KgNvO6zZjbfzKzTtgfMrD54PNLMGoPP8g0ze8nMtIzxRphZlZn918xmmdnbZvbtTvv0mWUoMysys6nBf7e3zeyXnfbpc0PtRCZTO5Fd1E5kJ7UTG6d2InOpncguaieyTza2ERlVlDKzfOAa4BhgR+BMM9txA4e/BZzR6fkpJFfv6+xQdx8b7Ptr76bNSbcAR3ex/UfA0+4+Gng6eE7w2Z0B7BScd23wGXelFtg/OC8GxNfb/4G7j3X33YBbgR9vyQ+SI1qB77v7DsC+wGWd/n/SZ5a5moHDgv9uY4GjzWzfYF/Of25qJzLeLaidyCZqJ7KT2oluqJ3IeLegdiKbqJ3IPlnXRmRUUQrYG5jj7h+6+zrgLmBDVyQe6NhnZlsDdcCyDRw7CFjVu1Fzj7s/D6zsYtfxJP/BEdyf0Gn7Xe7e7O5zgTkkP+Ou3MUnfxScBPyrmyj6PHvA3Wvc/bXg8RpgFlAR7NZnlqE8qT54WhjcOib/0+emdiKjqZ3ILmonspPaiY1SO5HB1E5kF7UT2Scb24hMK0pVAAs6PV/IJ//o17caWGBmOwNnAnd3ccx/g66hzwE/7c2g8inD3b0Gkr+4gGHB9k35PJ8GDgoqsmfw2c9zm6Ab4AfA94A/9Vb4XGBmI4HdgSnBJn1mGczM8s1sBrAUeNLd9bl9Qu1EdtK/3QyndiK7qJ3oltqJ7KR/uxlO7UT2yLY2ItOKUtbFtu6WB+yo0p0A3N/F/kPdfWdgF+DvZlayxQllU2zK59kGTAZOB4rdfd56+zu6AW4DfActKdpjwb/7+4DvuPvqjR3exTZ9Zmnm7m3BUIFKYO/gj+Xu5NLnpnaib8mlf7sZS+1E9lE70S21E31LLv3bzVhqJ7JLtrURmVaUWghUdXpeCVR3c/y/gXOB+d39z+HuHwBLSI4rl963xMziAMH90mD7pn6edwF/AyZt5P0eAg7avKi5xcwKSTYgE9y9c9dKfWZZwN1rgWf5ZO4FfW5qJ7KV/u1mKLUT2U3tRJfUTmQn/dvNUGonsle2tBGZVpR6FRhtZqPMrB/JqxYPbehgd28Efghc1d2LmtkwYBTwUS9mlU88BJwXPD4PeLDT9jPMrL+ZjQJGA1O7eZ0XgF8Dd27k/Q4APtj8uLnBzAwYD8xy9/W7Teozy1BmVhZMGoiZFQNHALOD3frc1E5kK/3bzUBqJ7KT2omNUjuRnfRvNwOpncg+2dhGFGzsgHRy91Yz+wbwOJAP3OTub2/knLu62f1fM2sjObnXj9x9Se+lzT1mdidwCDDUzBYCV7j7eOA3wCQzuwiYD5wK4O5vm9kkkquYtAKXuXvbhl7f3R34wwZ2bxOMizVgHfCVXvmh+rb9SV75eyv4bwfwY3f/D/rMMlkcuDUYp50HTHL3h4N9Of+5qZ3IbGonso7aieykdqIbaicym9qJrKN2IvtkXRthydcTERERERERERFJn0wbviciIiIiIiIiIjlARSkREREREREREUk7FaVERERERERERCTtVJQSEREREREREZG0U1FKRERERERERETSTkUpyVlmdouZndJLr/ULM/ufzThvnJn9tTcyiIhI71I7ISIi3VE7IbLlCsIOIJLL3H0aMC3sHCIikpnUToiISHfUTki2U08pyQlm9mUze9PM3jCz2zvtOsjMXjKzDzuucpjZIWb2cKdz/25m5weP55nZL83sNTN7y8zGdPFeXzWzR82seL3tp5rZzCDD8+u/l5n9x8xmBLc6MzvPzPLN7Pdm9mqQ/2u9/19HRETUToiISHfUToikhnpKSZ9nZjsBPwH2d/flZja40+44cAAwBngIuLcHL7nc3fcws0uB/wG+0um9vgEcCZzg7s3rnfdz4Ch3X2RmsfVf1N2/ELzGnsDNwAPARUCdu+9lZv2BF83sCXef24OcIiLSA2onRESkO2onRFJHPaUkFxwG3OvuywHcfWWnfQ+4e7u7vwMM7+Hr/Su4nw6M7LT9XOAY4OQuGhCAF4FbzOyrQH5XL2xmQ4HbgbPcvY5kg/RlM5sBTAGGAKN7mFNERHpG7YSIiHRH7YRIiqinlOQCA3wD+5rXOw6glU8XbIs2cE4bn/5/aCYwFqgEPnPlwd0vMbN9gGOBGWY29lMhzfKBu4Ar3X1mp0zfdPfHN5BfRES2nNoJERHpjtoJkRRRTynJBU8Dp5nZEID1utt25SNgRzPrb2ZR4PAevs/rwNeAh8wssf5OM9vG3ae4+8+B5UDVeof8BnjT3e/qtO1x4OtmVhi8xnZmFulhHhER6Rm1EyIi0h21EyIpop5S0ue5+9tmdhXwnJm1kfxlf343xy8ws0nAm8D7wfE9fa/JllzK9REz+3xHF9/A781sNMmrFU8DbwAHd9r/P8DbQddaSI4Zv5Fkl97XzMyAZcAJPc0jIiIbp3ZCRES6o3ZCJHXMfUO9EEVERERERERERFJDw/dERERERERERCTtVJQSEREREREREZG0U1FKRERERERERETSTkUpERERERERERFJOxWlREREREREREQk7VSUEhERERERERGRtFNRSkRERERERERE0k5FKRERERERERERSbv/D5f4b7jIv8QSAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(20,10))\n", "plot_results('read_speed/era5_t2_climatology.csv', target_workers=32)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Optimal results:" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Workers: 32\n", "Threads: 1\n", "Walltime: 0 days 00:02:41\n", "Cost: 0.13 SU\n", "Chunks: {'latitude': 91.0, 'longitude': 180.0}\n" ] } ], "source": [ "optimal_size('read_speed/era5_t2_climatology.csv')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python [conda env:analysis3]", "language": "python", "name": "conda-env-analysis3-py" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.6" } }, "nbformat": 4, "nbformat_minor": 4 }