Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
2
2024-files
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
MUDE
2024-files
Commits
aa2cb37f
Commit
aa2cb37f
authored
3 months ago
by
Robert Lanzafame
Browse files
Options
Downloads
Patches
Plain Diff
wip
parent
5c8a4d5d
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
content/GA_2_8/dev/list_of_radial_object_creator.ipynb
+247
-0
247 additions, 0 deletions
content/GA_2_8/dev/list_of_radial_object_creator.ipynb
content/GA_2_8/dev/mcs.ipynb
+1
-1
1 addition, 1 deletion
content/GA_2_8/dev/mcs.ipynb
with
248 additions
and
1 deletion
content/GA_2_8/dev/list_of_radial_object_creator.ipynb
0 → 100644
+
247
−
0
View file @
aa2cb37f
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"somehhow this was used to create the pkl file `List_of_radial_object_all_minutes.pkl` or `List_of_radial_object.pkl`"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%load_ext autoreload\n",
"%autoreload 2\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import scipy.stats as stats\n",
"from tickets import *\n",
"from minutes import *\n",
"from models import *"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loaded 31856 rows of data\n",
"The shape is (31856, 2)\n",
"Loaded 160813 rows of data\n",
"The shape is (160813,)\n",
"\n",
"The mean day is 29.77885494331926\n",
"The std day is 8.978221476042602\n",
"The mean min is 863.0213913054292\n",
"The std min is 255.18749935067723\n"
]
}
],
"source": [
"counts_2018 = np.genfromtxt('2018_count_250108_0209.csv', delimiter=',', skip_header=1)\n",
"day_min_counts = Minutes.day_min(counts_2018[:, 0])\n",
"print(f\"Loaded {len(counts_2018)} rows of data\")\n",
"print(f\"The shape is {day_min_counts.shape}\")\n",
"\n",
"tickets_2018 = np.genfromtxt('2018_tickets_250108_0209.csv', delimiter=',', skip_header=1)\n",
"day_min_tickets = Minutes.day_min(tickets_2018)\n",
"print(f\"Loaded {len(day_min_tickets)} rows of data\")\n",
"print(f\"The shape is {tickets_2018.shape}\")\n",
"print()\n",
"print(f\"The mean day is {np.mean(day_min_tickets[:, 0])}\")\n",
"print(f\"The std day is {np.std(day_min_tickets[:, 0])}\")\n",
"print(f\"The mean min is {np.mean(day_min_tickets[:, 1])}\")\n",
"print(f\"The std min is {np.std(day_min_tickets[:, 1])}\")"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Maximum radius is: 4.772\n"
]
}
],
"source": [
"all = Tickets()\n",
"all.add([[1, 60]])\n",
"day_min_all = Minutes.day_min(all.tickets)\n",
"\n",
"parameters = [np.mean(day_min_tickets[:, 0]),\n",
" np.std(day_min_tickets[:, 0]),\n",
" np.mean(day_min_tickets[:, 1]),\n",
" np.std(day_min_tickets[:, 1])]\n",
"\n",
"transform = Minutes.get_transform(parameters)\n",
"\n",
"day_c, min_c = transform(day_min_counts[:,0], day_min_counts[:,1])\n",
"radius_c = Minutes.radius(day_c, min_c)\n",
"\n",
"day_a, min_a = transform(day_min_all[:,0], day_min_all[:,1])\n",
"radius_a = Minutes.radius(day_a, min_a)\n",
"\n",
"radius_max = np.max(radius_a)\n",
"\n",
"print(f\"Maximum radius is: {radius_max:.3f}\")"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [],
"source": [
"def get_band_distribution(minute,\n",
" radius_c, counts_2018, radius_a, transform,\n",
" std_increment=0.125):\n",
"\n",
" day_c, min_c = Minutes.get_day_min(minute[0])\n",
" day_t, min_t = transform(day_c, min_c)\n",
" radius = Minutes.radius(day_t, min_t)\n",
" \n",
" if isinstance(std_increment, list):\n",
" assert len(std_increment) == 2, \"std_increment list must have two values\"\n",
" radius_min = radius - std_increment[0]\n",
" radius_max = radius + std_increment[1]\n",
" elif isinstance(std_increment, float):\n",
" radius_min = radius - std_increment\n",
" radius_max = radius + std_increment\n",
" else:\n",
" raise ValueError(\"std_increment must be a list of length 2 or a float\")\n",
" \n",
" if radius_min < 0:\n",
" d_radius = radius_max - radius_min\n",
" radius_min = 0\n",
" radius_max = d_radius\n",
"\n",
" if radius_max > max(radius_a):\n",
" d_radius = radius_max - radius_min\n",
" radius_min = radius_min - d_radius\n",
" radius_max = max(radius_a)\n",
" \n",
" d = evaluate_ticket_dist_i(radius_min, radius_max,\n",
" radius_c, counts_2018[:, 1],\n",
" radius_a)\n",
" return d"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Minute: 41130\n"
]
},
{
"data": {
"image/png": "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0yiI2b1PZDeK8OnTp4W6desK2traAoAsr8+f+nQUxNzkNBqsIq+hL168ELp37y6YmpoKhoaGQps2bYQ7d+5kee/40vdiyptEEBQYso2IiIiIqJhZtmwZJkyYgLt378qdCSUSEwswIiIiIipR7t69i5CQEHz//fewsrJCSEiI2JGIZFiAEREREVGJ0rx5c1y7dg1NmzbFypUrlbr2iqigsQAjIiIiIiIqJIrNcElERERERERfjAUYERERERFRIWEBRkREREREVEg4EXM+ZWRk4NWrVzA0NCzQSWSJiIiIiKhoEwQBCQkJsLGxgZpa7ue4WIDl06tXr2Brayt2DCIiIiIiKiKeP3+O8uXL59qGBVg+GRoaApD+kI2MjEROQ0REREREYomPj4etra2sRsgNC7B8yux2aGRkxAKMiIiIiIgUujSJg3AQEREREREVEhZgREREREREhYQFGBERERERUSFhAUZERERERFRIWIAREREREREVEhZgREREREREhYQFGBERERERUSFhAUZERERERFRIWIAREREREREVEhZgREREREREhYQFGBERERERUSFhAUZERERERFRIWIAREREREREVEhZgREREREREhYQFGBERERERUSFhAUZERERERFRIWIAREREREREVEhZgREREREREhYQFGBERERERUSHREDsAUXHQsWPujx89Wjg5iIiIiKh44xkwIiIiIiKiQsICjIiIiIiIqJCwACMiIiIiIiokLMCIiIiIiIgKCQswIiIiIiKiQiJ6Aebn5wcHBwfo6OjAxcUF58+fz7V9YGAgXFxcoKOjA0dHR6xduzbHtrt374ZEIkGXLl2+eL9ERERERERfStQCbM+ePfDx8cGMGTMQEhICT09PtG3bFuHh4dm2DwsLQ7t27eDp6YmQkBBMnz4dY8eOxYEDB7K0ffbsGSZNmgRPT88v3i8REREREZEqSARBEMTauZubG+rVq4c1a9bIllWrVg1dunSBr69vlvZTpkzBkSNHEBoaKls2evRo3Lx5E8HBwbJl6enpaNq0KYYMGYLz58/j3bt3OHz4cL73CwDJyclITk6W3Y+Pj4etrS3i4uJgZGSUr+On4oPzgBERERFRTuLj42FsbKxQbSDaRMwpKSm4du0apk6dKrfcy8sLFy5cyHad4OBgeHl5yS3z9vbGxo0bkZqaCk1NTQDA/PnzUbZsWQwbNixL18L87BcAfH19MW/ePIWPj+hTBV3AsUAkIiIiKh5E64IYHR2N9PR0WFpayi23tLREZGRktutERkZm2z4tLQ3R0dEAgH/++QcbN27E+vXrVbZfAJg2bRri4uJkt+fPn+d5jERERERERJ8S7QxYJolEIndfEIQsy/Jqn7k8ISEB/fv3x/r161GmTBmV7ldbWxva2tq5bpOIiIiIiCg3ohVgZcqUgbq6epazTm/evMlydiqTlZVVtu01NDRgbm6Ou3fv4unTp+j4SX+sjIwMAICGhgbu378PW1tbpfdLRERERESkCqJ1QdTS0oKLiwsCAgLklgcEBMDDwyPbddzd3bO0P3XqFFxdXaGpqYmqVavi9u3buHHjhuzWqVMnNG/eHDdu3ICtrW2+9ktERERERKQKonZBnDBhAgYMGABXV1e4u7tj3bp1CA8Px+jRowFIr7t6+fIltm3bBkA64uGqVaswYcIEjBgxAsHBwdi4cSN27doFANDR0UHNmjXl9mFiYgIAcsvz2i8REREREVFBELUA6927N2JiYjB//nxERESgZs2a8Pf3h52dHQAgIiJCbm4uBwcH+Pv7Y/z48Vi9ejVsbGywYsUKdO/eXaX7JSIiIiIiKgiizgNWnCkz1j8Vf186zDuHoSciIiIquZSpDUS7BoyIiIiIiKi0EX0YeiIqeDxDRkRERFQ08AwYERERERFRIWEBRkREREREVEhYgBERERERERUSFmBERERERESFhAUYERERERFRIWEBRkREREREVEhYgBERERERERUSFmBERERERESFhBMxU6mQ10TERERERESFgWfAiIiIiIiICgkLMCIiIiIiokLCAoyIiIiIiKiQsAAjIiIiIiIqJCzAiIiIiIiICgkLMCIiIiIiokLCAoyIiIiIiKiQsAAjIiIiIiIqJJyImYqEvCZKPnr0y9YnIiIiIioKeAaMiIiIiIiokLAAIyIiIiIiKiQswIiIiIiIiAoJCzAiIiIiIqJCwgKMiIiIiIiokLAAIyIiIiIiKiQswIiIiIiIiAoJCzAiIiIiIqJCwgKMiIiIiIiokLAAIyIiIiIiKiQswIiIiIiIiAoJCzAiIiIiIqJCwgKMiIiIiIiokLAAIyIiIiIiKiQswIiIiIiIiAoJCzAiIiIiIqJCwgKMiIiIiIiokLAAIyIiIiIiKiQswIiIiIiIiAoJCzAiIiIiIqJCwgKMiIiIiIiokLAAIyIiIiIiKiSiF2B+fn5wcHCAjo4OXFxccP78+VzbBwYGwsXFBTo6OnB0dMTatWvlHj948CBcXV1hYmICfX191KlTB7///rtcm7lz50IikcjdrKysVH5sREREREREnxK1ANuzZw98fHwwY8YMhISEwNPTE23btkV4eHi27cPCwtCuXTt4enoiJCQE06dPx9ixY3HgwAFZGzMzM8yYMQPBwcG4desWhgwZgiFDhuDkyZNy26pRowYiIiJkt9u3bxfosRIREREREWmIufOlS5di2LBhGD58OABg+fLlOHnyJNasWQNfX98s7deuXYsKFSpg+fLlAIBq1arh6tWrWLJkCbp37w4AaNasmdw648aNw9atWxEUFARvb2/Zcg0NDZ71IiIiIiKiQiXaGbCUlBRcu3YNXl5ecsu9vLxw4cKFbNcJDg7O0t7b2xtXr15FampqlvaCIODMmTO4f/8+mjRpIvfYw4cPYWNjAwcHB/Tp0wdPnjzJNW9ycjLi4+PlbkRERERERMoQ7QxYdHQ00tPTYWlpKbfc0tISkZGR2a4TGRmZbfu0tDRER0fD2toaABAXF4dy5cohOTkZ6urq8PPzQ+vWrWXruLm5Ydu2bahcuTJev36NBQsWwMPDA3fv3oW5uXm2+/b19cW8efO+5JBLtY4dxU5QvPHnR0RERFQyKH0G7O+//0ZaWlqW5Wlpafj777+VDiCRSOTuC4KQZVle7T9fbmhoiBs3buDKlStYuHAhJkyYgHPnzskeb9u2Lbp37w5nZ2e0atUKx48fBwBs3bo1x/1OmzYNcXFxstvz588VPkYiIiIiIiIgH2fAmjdvjoiICFhYWMgtj4uLQ/PmzZGenq7QdsqUKQN1dfUsZ7vevHmT5SxXJisrq2zba2hoyJ25UlNTg5OTEwCgTp06CA0Nha+vb5brwzLp6+vD2dkZDx8+zDGvtrY2tLW1FTk0IiIiIiKibCl9BiynM1QxMTHQ19dXeDtaWlpwcXFBQECA3PKAgAB4eHhku467u3uW9qdOnYKrqys0NTVzzZycnJzj48nJyQgNDZV1YSQiIiIiIioICp8B69atGwBpV7/BgwfLnQ1KT0/HrVu3ciyccjJhwgQMGDAArq6ucHd3x7p16xAeHo7Ro0cDkHb7e/nyJbZt2wYAGD16NFatWoUJEyZgxIgRCA4OxsaNG7Fr1y7ZNn19feHq6oqKFSsiJSUF/v7+2LZtG9asWSNrM2nSJHTs2BEVKlTAmzdvsGDBAsTHx2PQoEFK5SciIiIiIlKGwgWYsbExAOnZJENDQ+jq6soe09LSQsOGDTFixAildt67d2/ExMRg/vz5iIiIQM2aNeHv7w87OzsAQEREhNycYA4ODvD398f48eOxevVq2NjYYMWKFbIh6AHgw4cP+Oabb/DixQvo6uqiatWq2L59O3r37i1r8+LFC/Tt2xfR0dEoW7YsGjZsiIsXL8r2S0REREREVBAkQuYoFgqaN28eJk2apFR3w5IoPj4exsbGiIuLg5GRkdhxirwvHcXv6NGC3f6X+tJ8Yh9fXvsnIiIiopwpUxsoPQjHnDlz8h2MiIiIiIioNFN6EI7Xr19jwIABsLGxgYaGBtTV1eVuRERERERElD2lz4ANHjwY4eHhmDVrFqytrXOds4uIiocv7SJJRERERIpRugALCgrC+fPnUadOnQKIQ0REREREVHIp3QXR1tYWSo7bQURERERERMhHAbZ8+XJMnToVT58+LYA4REREREREJZfSXRB79+6NxMREVKxYEXp6etDU1JR7PDY2VmXhiIiIiIiIShKlC7Dly5cXQAyiQiQIMPv4ChXjr6Ni3HVUjAuBzYeHSNIwQIKmORK0zOS+vtcyw1ttS9w3dUeyup7Y6YmIiIioGFO6ABs0aFBB5CAqMNppH1Av6iSc4q6hYtx1OMZdh2nKG6W3k6ymg5CyXrhk2RmXLTsiXrtsAaQlIiIiopJM6QIsPDw818crVKiQ7zBEqmSQEosOT1ehY9gKGKXGyD2WDjU8N6yOx8b18NioHl4YVoNWehIMU2JgmBoLg9RYGKXEwCA1FoYpMbD58AhlPz5Hw9dH0PD1EaRDDf+aeeCiZRdcsuoMwEmcgyQiIiKiYkXpAsze3j7Xub/S09O/KBDRlzJLeokuYUvR5tlv0E3/AAB4rWuPG2VaSQsu43p4ZuSsXHdCQYB9wi00jPwDbq//gFPcddSIDUKN2CAMC50E1KwBjB8PDBoEaCj9Z0VEREREpYTSnxRDQkLk7qempiIkJARLly7FwoULVRaMSFk27x+g++PFaP5iGzSFVADAE6Pa2Oc0DResuiND7QsKI4kET41q46lRbeyuPBtlk8LRIPII3F7/AeeYc9C4excYPhwvx/2EnZXn4bxNbwgSpQcZJSIiIqISTiKoaFKv48eP4+eff8a5c+dUsbkiLz4+HsbGxoiLi4ORkZHYcYq8jh2/bP2jR3N58NEjBDWZBo+IA1CD9Ol8x6wJ9jlNw/Wy3kAuZ2xVQT/1HVo934Sej3xhnBINAAgzdMaOKj/gkmUnhfaf6/Hhy39+XyqvfERERESlmTK1gcr+RV+5cmVcuXJFVZsjUszvvwN166JxxH6oQcAly4743uMfTPMIxHWLNgVefAHAB00T/OE4ASNaPMHvVX7Aew1jOCTcxsyrXbDkn4aoExUAcPJyIiIiIkI+uiDGx8fL3RcEAREREZg7dy4qVaqksmBEuUpIAMaMkRZgAG6bNcXamqsQblRTtEhJGobYW2km/O2+QdcnS9Ap7FdUeXcZP1zykuZzXo1wwxqi5SMiIiIi8SldgJmYmGQZhEMQBNja2mL37t0qC0aUo+vXgT59gIcPATU1YO5czLw0HRkSdbGTAQDea5nh96qLcNRhHHo+XIS24WvhHBuIpeddsaHGcpyoMLJQzswRERERUdGjdAF29uxZuftqamooW7YsnJycoMHR36ggCQLw66/A5MlAaipgawvs3Ak0bowMka+Rys47bUusr/krDleciDG3RsIl6iTG3B6NulGnsLLWerzXMhM7IhEREREVMqUrpqZNmxZEDqLcRUUBQ4YAx49L73fpAmzcCJgV/SImSrcC5jXwR+cnyzDw32nwiDyISu+uYEndHbhn7il2PCIiIiIqRPkahOPx48f47rvv0KpVK7Ru3Rpjx47F48ePVZ2NCABQ5W0wUKeOtPjS1gZWrQIOHiwWxVcmQaKGwxUn4vtGwXil54SyH59jUXAz9L0/F2oZaWLHIyIiIqJConQBdvLkSVSvXh2XL19GrVq1ULNmTVy6dAk1atRAQEBAQWSkUqxm9Dn8cLE18OoVULUqcOmSdPCNYnoN1WMTF/g0uY4z5QdBHRno93AeFl5sAYSHix2NiIiIiAqB0vOA1a1bF97e3vjxxx/llk+dOhWnTp3C9evXVRqwqOI8YPIKYp6q2lGnMetKJ2hnJCGkTGssdD2EZA191e9IJE1f7sQ3t0dDLy0BMDEB9u0DWrXKtm1xmAcsr4ycS4yIiIhKqgKdByw0NBTDhg3Lsnzo0KG4d++espsjypbLa3/MvtIB2hlJuGLRDj/UP1Kiii8ACCzXD2M9b+C+SQPg3TugQwfA31/sWERERERUgJQuwMqWLYsbN25kWX7jxg1YWFioIhOVcm6Rf2DG1S7QykjGRcvOWORyEKnqOmLHKhCv9R0x1eO8dFCR5GTp18OHRU5FRERERAVF6VEQR4wYgZEjR+LJkyfw8PCARCJBUFAQfvrpJ0ycOLEgMlIp4vFqP74P6QsNIQ1B1j2xpO4OpKtpih2rQKWpaQF79wL9+0u/9ugB7NgB9O4tdjQiIiIiUjGlC7BZs2bB0NAQv/zyC6ZNmwYAsLGxwdy5czF27FiVB6TSo8nLXZhwYwDUhXScs+mHZXW2IkOtlMwtp6kpLbq0tYHffwf69QNSUoABA8RORkREREQqpPSnW4lEgvHjx2P8+PFISEgAABgaGqo8GJUuLZ5vxdibQ6GODJwuPxgra29AhkRd7FiFS0MD2LxZWoRt2AAMGiTtljh8uNjJiIiIiEhFFL4GLCkpCUeOHJEVXYC08DI0NER8fDyOHDmC5OTkAglJJVuzF9sx7uYQqCMDJyqMxIraG0tf8ZVJXR347TfpUPuCAIwYAaxeLXYqIiIiIlIRhQuwdevW4ddff832bJeRkRFWrFiBDRs2qDQclXxV3l7E2FvDoAYBx+zGYLXzWgiSfM0PXnKoqQErVwITJkjvf/stujz+RdxMRERERKQSCn/S3bFjB3x8fHJ83MfHB1u3blVFJiolzD6+wrSr3aCZkYILVl2xruaKYjvBsspJJMCSJcD06QCAYaGT0O6pn8ihiIiIiOhLKVyAPXz4ELVr187x8Vq1auHhw4cqCUUln2b6R0y/2hXmyRF4algTy+ts5Zmvz0kkwMKFwJw5AIARd8ehauwFkUMRERER0ZdQ+BNvWloaoqKicnw8KioKaWlpKglFJZwgYMzt0ajy7jLiNc2wwPUPJGlwIJcczZmD89a9oCGkYeq1njD5GCl2IiIiIiLKJ4ULsBo1auD06dM5Ph4QEIAaNWqoJBSVbJ3DlqPli61Il6jjJ5e9eK3vKHakok0iwYraGxFuUA3mya8w5XpvqGekip2KiIiIiPJB4QJs6NCh+OGHH3Ds2LEsjx09ehQLFizA0KFDVRqOSp46UQEYcm8SAGBjtV9wq0xLkRMVDx81DODrehCJGoaoGfs3Bv07VexIRERERJQPCs8DNnLkSPz999/o1KkTqlatiipVqkAikSA0NBQPHjxAr169MHLkyILMSsWc9YdHmHy9t2yur6MOnLhbGS8MqmJ57S2Yfq07uj5Zigcmbgiy6SV2LCIiIiJSglKjHmzfvh27d+9G5cqV8eDBA/z777+oUqUKdu3ahV27dhVURioBdNMSMPNKZximvsW/Jm7wc17DEQ/zIdi6G/ZXnAIAGHtzKCok3BU5EREREREpQ+EzYJl69eqFXr34X3dSnETIwISQAajw/h5itK3h63oQqeo6Yscqtn6vsgCV3l1B7Zi/MO1qN0xofAVJmkZixyIiIiIiBXDcbypw3R//hIav/0CqmhYWuR5CrI6N2JGKtQw1DfxcbxeidMqj/IcH8Lk5GBAEsWMRERERkQJYgFGBKp8Qin4P5gIA/GquwQNTN3EDlRBx2hbwdTmAVDUteEQeQvfHi8WOREREREQKYAFGBUYiZOC7WyOgmZGCKxbtcNp2iNiRSpSHpg2wrsYKAMCAf6ejZvQ5cQMRERERUZ5YgFGBafPsN1R/+w+S1PWxhoNuFIgTFUbidPnBUEcGvr09EhrpyWJHIiIiIqJcKF2ADR06FAkJCVmWf/jwgfOAkYx50gsM/lc6Wt+2qr6I0q0gcqISSiLB+hrLEatthXIfHqLbk5/FTkREREREuVC6ANu6dSuSkpKyLE9KSsK2bdtUEoqKOUHA13e+gV5aAv41aQh/+2/ETlSiJWoaY1P1XwAAvR4uhGVimMiJiIiIiCgnChdg8fHxiIuLgyAISEhIQHx8vOz29u1b+Pv7w8LCoiCzUjHRKGI/3F4fRapEEytrb0CGRF3sSCVeoE1f3DRvDu2Mjxh5hxNcExERERVVChdgJiYmMDMzg0QiQeXKlWFqaiq7lSlTBkOHDsWYMWOUDuDn5wcHBwfo6OjAxcUF58+fz7V9YGAgXFxcoKOjA0dHR6xdu1bu8YMHD8LV1RUmJibQ19dHnTp18Pvvv3/xfkkxBimxGHXnWwDAfqdpCDesIXKiUkIiwdqaq5Eq0USDN8fQIPKI2ImIiIiIKBsKT8R89uxZCIKAFi1a4MCBAzAzM5M9pqWlBTs7O9jYKDe/0549e+Dj4wM/Pz80atQIv/32G9q2bYt79+6hQoWs1wyFhYWhXbt2GDFiBLZv345//vkH33zzDcqWLYvu3bsDAMzMzDBjxgxUrVoVWlpaOHbsGIYMGQILCwt4e3vna7+kuCGh38M05Q2eG1TFXqfpYscpVV4YVsNhx4no+fhHjLw7FjfLtkKyup7YsYiIiIjoExJBUG4G12fPnqFChQqQqGBEOzc3N9SrVw9r1qyRLatWrRq6dOkCX1/fLO2nTJmCI0eOIDQ0VLZs9OjRuHnzJoKDg3PcT7169dC+fXv88MMP+dpvduLj42FsbIy4uDgYGRkptE5J1rEjUCv6DBZebAUAmOwRhFCzRiKnKj6OHs398Y4dFduOdtoH+AVWh0VSOPY6TcfvVRd+eTjknQ/IO6Mi2yAiIiIqjpSpDZQehMPOzg5BQUHo378/PDw88PLlSwDA77//jqCgIIW3k5KSgmvXrsHLy0tuuZeXFy5cuJDtOsHBwVnae3t74+rVq0hNTc3SXhAEnDlzBvfv30eTJk3yvV8ASE5OlrvuLT4+XqHjLCk6dsz9pp2eiDG3RgEAjtt9w+JLJMka+lhf41cAQNfHP6P8+39FTkREREREn1K6ADtw4AC8vb2hq6uL69evIzlZOu9QQkICFi1apPB2oqOjkZ6eDktLS7nllpaWiIyMzHadyMjIbNunpaUhOjpatiwuLg4GBgbQ0tJC+/btsXLlSrRu3Trf+wUAX19fGBsby262trYKH2tp0OfBPNgkPka0TjlsrarYWUQqGBctO+OKRTtoCqnS6/GUO8lNRERERAVI6QJswYIFWLt2LdavXw9NTU3Zcg8PD1y/fl3pAJ93ZRQEIdfujdm1/3y5oaEhbty4gStXrmDhwoWYMGECzp0790X7nTZtGuLi4mS358+f53pcpYljXAi6PpEOg76mph+SNNklU1QSCX6rsRLJajqoE30Gnq/2iJ2IiIiIiP5P4UE4Mn3ane9TRkZGePfuncLbKVOmDNTV1bOcdXrz5k2Ws1OZrKyssm2voaEBc3Nz2TI1NTU4OTkBAOrUqYPQ0FD4+vqiWbNm+dovAGhra0NbW1vh4ytNht2bAHUhHeete+GyVSex4xCA1/qO2O80DV89mINh9ybgqkU7FsZERERERYDSZ8Csra3x6NGjLMuDgoLg6Oio8Ha0tLTg4uKCgIAAueUBAQHw8PDIdh13d/cs7U+dOgVXV1e5s3GfEwRB1lUyP/ulnFWPDUKtmHNIlWhic/WfxY5DnzhQcTJe6TnBPDkCXz2YI3YcIiIiIkI+CrBRo0Zh3LhxuHTpEiQSCV69eoUdO3Zg0qRJ+Oabb5Ta1oQJE7BhwwZs2rQJoaGhGD9+PMLDwzF69GgA0m5/AwcOlLUfPXo0nj17hgkTJiA0NBSbNm3Cxo0bMWnSJFkbX19fBAQE4MmTJ/j333+xdOlSbNu2Df3791d4v6S43g+lI0uesR2CKF0O4V+UpKrrYK3zagBAh6crYR9/U+RERERERKR0F8TJkycjLi4OzZs3x8ePH9GkSRNoa2tj0qRJ+Pbbb5XaVu/evRETE4P58+cjIiICNWvWhL+/P+zs7AAAERERCA8Pl7V3cHCAv78/xo8fj9WrV8PGxgYrVqyQzQEGAB8+fMA333yDFy9eQFdXF1WrVsX27dvRu3dvhfdLiqn89hLqRZ1CukQd+52mih2HshFS1gtB1j3QOGI/Bv47A/MbHBM7EhEREVGppvQ8YCkpKdDS0kJiYiLu3buHjIwMVK9eHQYGBoiOjkaZMmUKKmuRUtrmActujqfZlzug/pvjOF1+MH6ts7nwQ5UgqpoHLDvW7x9izbmqUEcGfBpfxWMTF6W3wXnAiIiIiHJWoPOA9erVCxkZGdDT04OrqysaNGgAAwMDvH79Gs2aNctvZipmKsZdR/03x5EONex1mi52HMpFhEEl/F2uHwCgz8P5IqchIiIiKt2U7oIYERGBYcOGYfPmzXLLWrRogRo1aqg0HBUeZc+w9H4gvfbr73J9EWFQqQASkSrtqTQTTV/uQMPXR+AYF4InxnXFjkRERERUKil9Bszf3x+XL1/G+PHjAQAvX75Es2bN4OzsjL1796o8IBU99vG34P76MDIgwV6nGWLHIQW8NKiC8zZ9AAC9Hy4QOQ0RERFR6aX0GTBzc3OcPHkSjRs3BgAcP34c9erVw44dO6CmpnQ9R8VQr4cLAQD/WPfEC8NqIqchRe2pNBOer3bDI/Ig7ONv4alRLbEjEREREZU6+aqYypcvj4CAAOzcuRMNGjTArl27oK6urupsVASVTwhFo4h9AKQf6Kn4eG5YHf9Y9wTAs2BEREREYlHoDJipqSkkEkmW5YmJiTh69CjMzc1ly2JjY1WXjoqcXo8WQg0Cgi274JmRs9hxSEl7Ks2EZ8ReeETsR4WEuwg35HWbRERERIVJoQJs+fLlBRyDigPr9w/R5OUuAMCeyrNETkP58czIGf9YdUejyAPo9XABltTbJXYkIiIiolJFoQJs0KBBBZ2DioGej32hjgxcsWiPx8b1xI5D+bSn0kw0ijwAz1d7sLvyHLwwqCp2JCIiIqJSI1+jIJ48eTLL8lOnTuHPP/9USSgqeiwTw9DixTYAwO5KPPtVnIUZ18FFy85Qg4BevBaMiIiIqFApXYBNnToV6enpWZZnZGRg6tSpKglFRU+PRz9CXUjH9bJeeGDqJnYc+kK7K88GADR5uQs27x+InIaIiIio9FC6AHv48CGqV6+eZXnVqlXx6NEjlYSioqVM0nO0fC6deHsPz36VCI+N6+GyRQeoIwO9Hi0UOw4RERFRqaF0AWZsbIwnT55kWf7o0SPo6+urJBQVLV2eLIWmkIpb5s1wz6yx2HFIRTLPgjV7uQPWH/jPEyIiIqLCoHQB1qlTJ/j4+ODx48eyZY8ePcLEiRPRqVMnlYYj8WlkpKD5i98BAAcdvxc5DanSQ5P6uFq2LdSFdPR45Ct2HCIiIqJSQekC7Oeff4a+vj6qVq0KBwcHODg4oFq1ajA3N8eSJUsKIiOJyPWNP4xSYxCjbY2Qsl5ixyEVyzwL1uLFNlgmhomchoiIiKjkU2gY+k8ZGxvjwoULCAgIwM2bN6Grq4tatWqhSZMmBZGPRNb8/yMfBpb7ChlqSj9dqIi7b9oQ18t6oV7UKXR9vARrnVeLHYmIiIioRMvXJ2qJRAIvLy94efGMSElmmBKD+q+PAQDOlOdccCXVgYqTUS/qFFq82IptVRchUdNY7EhEREREJZZCBdiKFSswcuRI6OjoYMWKFbm2HTt2rEqCkfg8X+2GppCKx0Z1EW5UU+w4VEBumbdAuEF1VHh/Dy2fb8FRx3FiRyIiIiIqsRQqwJYtW4avvvoKOjo6WLZsWY7tJBIJC7ASJHPiZZ79KuEkEhx1+A5jbn+NDk9X4ZjDdxAkSl8eSkREREQKUKgACwsLw99//w0PDw+EhfFC/dKg/Pt/UeXdZaRL1PF3ub5ix6ECdq5cfwwKnQqbxEeo9+YErlm2EzsSERERUYmk8DVgzZs3R0REBCwsLAoyDxURmYNvXCvbFnHa/J2XdB81DHDadii6hC1Dx6crC6QA69gx98ePHlX5LomIiIiKHIX7GQmCUJA5qAhRE9Jlc3+x+2Hpcdx+DDIggUvUCdi8fyB2HCIiIqISSakLPSQSSUHloCKkZsw5lP34Au81TXDFsoPYcaiQROpXxFWL9gCA9k85HD0RERFRQVBqGPpZs2ZBT08v1zZLly79okAkvpbPtwIA/rbpg1R1HZHTUGE65vAdGrw5hlYvNmN71QVI0jAUOxIRERFRiaJUAXb79m1oaWnl+DjPkBV/Omnv4RF5AADwV/mBIqehwnajTCu80K+C8h/uo8XzrTju8K3YkYiIiIhKFKUKsEOHDnEQjhLOPfIgdNIT8VK/Eu6bNBQ7DhUyQaKGow7f4es736LD01Xwt/+GQ9ITERERqZDCn6x4dqt0yOx++Ff5gQB/56XS2fIDkahhiPIf7qNOVIDYcYiIiIhKFI6CSDJlk8LhHHMWAHC23ACR05BYkjQMcbr8EABAx6crRU5DREREVLIoXIBt3rwZxsbGBZmFRNbsxXaoQcAt82aI0rMTOw6J6Ji99Novlzf+sPrwWOQ0RERERCWHwteADRrE+aBKNEFAi/9PvvwX5/4qdHlNUlzYIgwq4WrZtnCN+vP/Q9JzdFMiIiIiVeDV9QQAqPzuMsp/uI+P6nq4YN1d7DhUBBxz+A4A0Pr5RuD9e5HTEBEREZUMLMAIAGRnv4KtunHuJwIAXC/rjZf6laCfFg/8/rvYcYiIiIhKBKUKsPT0dAQGBuLt27cFlYfEkJwMz1e7AXDuL/qPIFHD8f9fC4ZVqwAOxENERET0xZQqwNTV1eHt7Y13794VUBwSxfHjMEqNRbROOdwq00LsNFSEnC4/GInqBsC9e8CZM2LHISIiIir2lO6C6OzsjCdPnhREFhLLbunZr3PlvkKGRF3kMFSUJGka/Tcoy9q14oYhIiIiKgGULsAWLlyISZMm4dixY4iIiEB8fLzcjYqZtDTg1CkA0uu/iD53wm6U9Js//gBevxY3DBEREVExp/Aw9JnatGkDAOjUqRMkEolsuSAIkEgkSE9PV106KngXLwJxcYjXNMcjE1ex01AR9MzIGWjYUPpc2bIFmDJF7EhERERExZbSBdjZs2cLIgeJ5c8/AUhHvGP3Q8rRyJHSAmz9euD77wE1DqBKRERElB9KF2BNmzYtiBwklswCzKKNyEGoSOvVC/DxAR4/Bs6dA1pwsBYiIiKi/FC6AAOAd+/eYePGjQgNDYVEIkH16tUxdOhQGBsbqzofFaTISCAkBID0DBhRjvT1gX79pANxrF/PAoyIiIgon5TuR3T16lVUrFgRy5YtQ2xsLKKjo7F06VJUrFgR169fL4iMVFBOnpR+dXFBnLaFuFmo6Bs5Uvr14EEgOlrcLERERETFlNIF2Pjx49GpUyc8ffoUBw8exKFDhxAWFoYOHTrAx8enACJSgTlxQvq1bVtxc1DxULcu4OICpKQA27aJnYaIiIioWMrXGbApU6ZAQ+O/3osaGhqYPHkyrl69qtJwVIDS02XDz7MAI4WNGCH9um4dIAjiZiEiIiIqhpQuwIyMjBAeHp5l+fPnz2FoaKiSUFQILl8GYmMBExOgQQOx01Bx0bev9Hqw+/eBoCCx0xAREREVO0oXYL1798awYcOwZ88ePH/+HC9evMDu3bsxfPhw9O3bV+kAfn5+cHBwgI6ODlxcXHD+/Plc2wcGBsLFxQU6OjpwdHTE2rVr5R5fv349PD09YWpqClNTU7Rq1QqXL1+WazN37lxIJBK5m5WVldLZi7XM7odeXoBGvsZiodLIyAjo00f6/fr14mYhIiIiKoaULsCWLFmCbt26YeDAgbC3t4ednR0GDx6MHj164KefflJqW3v27IGPjw9mzJiBkJAQeHp6om3bttmeYQOAsLAwtGvXDp6enggJCcH06dMxduxYHDhwQNbm3Llz6Nu3L86ePYvg4GBUqFABXl5eePnypdy2atSogYiICNnt9u3byv4oirf/Dz/P7oektMzBOPbtA96+FTcLERERUTEjEYS8L+S4desWatasCbVPJl9NTEzE48ePIQgCnJycoKenp/TO3dzcUK9ePaxZs0a2rFq1aujSpQt8fX2ztJ8yZQqOHDmC0NBQ2bLRo0fj5s2bCA4OznYf6enpMDU1xapVqzBw4EAA0jNghw8fxo0bN5TOnCk+Ph7GxsaIi4uDkZFRvrcjiqgowNJSeg3Pq1eAtTU6dhQ7FBVlR49+ckcQgDp1gFu3gBUrgO++A4Avfg7J7YOIiIioGFGmNlDoDFjdunUR/f9hpx0dHRETEwM9PT04OzujVq1a+Sq+UlJScO3aNXh5eckt9/LywoULF7JdJzg4OEt7b29vXL16Fampqdmuk5iYiNTUVJiZmcktf/jwIWxsbODg4IA+ffrgyZMnueZNTk5GfHy83K3YOnXqvw/R1tZip6HiRiLhYBxERERE+aRQAWZiYoKwsDAAwNOnT5GRkfHFO46OjkZ6ejosLS3llltaWiIyMjLbdSIjI7Ntn5aWJisQPzd16lSUK1cOrVq1ki1zc3PDtm3bcPLkSaxfvx6RkZHw8PBATExMjnl9fX1hbGwsu9na2ip6qEVPZvfDNm3EzUHFV//+gI4OcOcOcOmS2GmIiIiIig2FRl/o3r07mjZtCmtra0gkEri6ukJdXT3btnmdSfqcRCKRuy8IQpZlebXPbjkALF68GLt27cK5c+ego6MjW972k+uenJ2d4e7ujooVK2Lr1q2YMGFCtvudNm2a3GPx8fHFswjLyPhvAmZe/0X5ZWIC9OolnQ9s/XqgYUOxExEREREVCwoVYOvWrUO3bt3w6NEjjB07FiNGjPjiIefLlCkDdXX1LGe73rx5k+UsVyYrK6ts22toaMDc3Fxu+ZIlS7Bo0SKcPn0atWrVyjWLvr4+nJ2d8fDhwxzbaGtrQ1tbO9ftFAvXrgHR0dLR7NzdxU5DxdmIEdICbPduYNkyAMXsWkgiIiIiESg8/nib/3dXu3btGsaNG/fFBZiWlhZcXFwQEBCArl27ypYHBASgc+fO2a7j7u6Oo59dqX/q1Cm4urpCU1NTtuznn3/GggULcPLkSbi6uuaZJTk5GaGhofD09Mzn0RQjmd0PW7UCPvmZESmtUSOgWjUgNBTYuRPAaLETERERERV5Sg9Dv3nzZpVNuDxhwgRs2LABmzZtQmhoKMaPH4/w8HCMHi39IDdt2jTZyIWAdMTDZ8+eYcKECQgNDcWmTZuwceNGTJo0SdZm8eLFmDlzJjZt2gR7e3tERkYiMjIS79+/l7WZNGkSAgMDERYWhkuXLqFHjx6Ij4/HoEGDVHJcRVrm/F/sfkhf6vPBOIiIiIgoT0oXYKrUu3dvLF++HPPnz0edOnXw999/w9/fH3Z2dgCAiIgIuTnBHBwc4O/vj3PnzqFOnTr44YcfsGLFCnTv3l3Wxs/PDykpKejRowesra1ltyVLlsjavHjxAn379kWVKlXQrVs3aGlp4eLFi7L9llixsf8NmMABOEgVBgwAtLSAkBBUfHdN7DRERERERZ5C84BRVsVyHrA9e4A+fYCaNYHPJp7mPGCUm1zn6OrXD9i1CycqjMTqWr8VzD6IiIiIijCVzwNGJUTm9V/sfkiq9P9uiE1e7oRO2vs8GhMRERGVbgoPwkHFXEbGf9d/sfshqVKzZoCTE/QePYLnqz0IqDBM7ET5ktdZYJ6hIyIiIlXIVwH24MEDnDt3Dm/evMkyKfPs2bNVEoxU7OZN4PVrwMAAaNxY7DRUkmQOxjFlCrzD1xXbAoyIiIioMChdgK1fvx5ff/01ypQpAysrK7kJkCUSCQuwoiqz+2HLltJBE4hUafBgpE6diSrvLsM+/iaeGtUWOxERERFRkaR0AbZgwQIsXLgQU6ZMKYg8VFAyCzB2P6SCYGGBS1ad0ThiP7yfrcdvzqvETkRERERUJCk9CMfbt2/Rs2fPgshCBeXdOyA4WPo9CzAqICcrjAQANHu5HdrpiSKnISIiIiqalC7AevbsiVOnThVEFioop08D6elA1aqAvb3YaaiEulmmJSL1HGCQFodGr/aJHYeIiIioSFK6C6KTkxNmzZqFixcvwtnZGZqamnKPjx07VmXhSEVOnpR+5fDzVIAEiRpO2Q7HwPsz4B2+Hn/ZDhI7EhEREVGRo3QBtm7dOhgYGCAwMBCBgYFyj0kkEhZgRdH589KvLVuKm4NKvNO2Q/DVg9mo/vYfVEi4i3DDGmJHIiIiIipSlC7AwsLCCiIHFZToaOD+fen37u7iZqES762ONS5bdIT768PwCt+ADTWWiR2JiIiIqEhR+hqwTwmCAEEQVJWFCsKFC9Kv1asDZmbiZqFS4WSFEQCA5i+2QTP9o8hpiIiIiIqWfBVg27Ztg7OzM3R1daGrq4tatWrh999/V3U2UoV//pF+bdRI3BxUaoRYeCNKxxZGqbHwiDwodhwiIiKiIkXpAmzp0qX4+uuv0a5dO+zduxd79uxBmzZtMHr0aCxbxu5GRQ4LMCpkGRJ1nKowDADg/WydyGmIiIiIihalrwFbuXIl1qxZg4EDB8qWde7cGTVq1MDcuXMxfvx4lQakL5CcDFy9Kv2eBRgVotO2Q9HnwXw4xwbC5v0DvDKoLHYkIiIioiJB6TNgERER8PDwyLLcw8MDERERKglFKnLtmrQIs7AAKlYUOw2VItG6trhuIZ32wDt8vchpiIiIiIoOpQswJycn7N27N8vyPXv2oFKlSioJRSryafdDiUTcLFTqnKgwEgDQ4sVWaGSkiJyGiIiIqGhQugvivHnz0Lt3b/z9999o1KgRJBIJgoKCcObMmWwLMxIRr/8iEV21aIcYbRuYJ7+CW+Qf+Memp9iRiIiIiESn9Bmw7t2749KlSyhTpgwOHz6MgwcPokyZMrh8+TK6du1aEBkpPwThvyHoWYCRCDLUNHDadggAwDucg3EQERERAfk4AwYALi4u2L59u6qzkCo9fAhERQE6OkC9emKnoVIqoMIw9Hy0CHWjT8PywxO81ncUOxIRERGRqBQ6AxYfHy/3fW43KiIyux/Wrw9oaYmbhUqt13oOuFG2NQCgDc+CERERESlWgJmamuLNmzcAABMTE5iamma5ZS6nIiIoSPqV3Q9JZH/afQ0A8ApfD630JJHTEBEREYlLoS6If/31F8zMzAAAZ8+eLdBApCIcgIOKiMuWHfFa1w6WSc/Q5OUunK4wVOxIRERERKJRqABr2rSp7HsHBwfY2tpC8tmw5oIg4Pnz56pNR/kTHQ3cvy/9Pps524gKU4ZEHcftx2Bo6GR0fLpCOjAHp0UgIiKiUkrpURAdHBwQFRWVZXlsbCwcHBxUEoq+UOboh9WqAf8/c0kkpgDbYUhW04Vj/E3UiD0vdhwiIiIi0ShdgAmCkOXsFwC8f/8eOjo6KglFX4jdD6mIea9lhrPlBwAAOoatEDkNERERkXgUHoZ+woQJAACJRIJZs2ZBT09P9lh6ejouXbqEOnXqqDwg5QMLMCqCjtp/hzbh69Aw8hDKJoUjSreC2JGIiIiICp3CBVhISAgA6Rmw27dvQ+uToc21tLRQu3ZtTJo0SfUJSTnJycDVq9LvWYBRERJuVBM3zVugdsxfaPt0DbZV8xU7EhEREVGhU7gAyxz9cMiQIfj1119hZGRUYKHoC1y7Ji3CypYFnJzETkMk55jDd6gd8xe8w9dhd+XZSFHXFTsSERERUaFS+hqw5cuXIy0tLcvy2NhYTsRcFHza/ZAjzVERkzkkvVFqLJq+3Cl2HCIiIqJCp3QB1qdPH+zevTvL8r1796JPnz4qCUVfgNd/UREmHZL+WwD/H4xDEERORERERFS4lC7ALl26hObNm2dZ3qxZM1y6dEkloSifBOG/IehZgFERdcp2GD6q68Eh4RZqxv4tdhwiIiKiQqV0AZacnJxtF8TU1FQkJSWpJBTl08OHQFQUoK0N1KsndhqibH3QMsXZctIh6TuErRQ5DREREVHhUroAq1+/PtatW5dl+dq1a+Hi4qKSUJRPmd0P69eXFmFERdSx/3dDzBySnoiIiKi0UHgUxEwLFy5Eq1atcPPmTbRs2RIAcObMGVy5cgWnTp1SeUBSAq//omLi0yHp2z31w9ZqP4odiYiIiKhQKH0GrFGjRggODoatrS327t2Lo0ePwsnJCbdu3YKnp2dBZCRFsQCjYuSow1gAgFf4eminJ4qchoiIiKhwKH0GDADq1KmDHTt2qDoLfYmYGODff6Xfe3iIm4VIAVcsO+C1rj0sk57+f0j64WJHIiIiIipw+SrAMjIy8OjRI7x58wYZGRlyjzVp0kQlwUhJmaMfVq0KmJuLm4VIARkSdRyz/xbDQidJB+MQhnHuOiIiIirxlC7ALl68iH79+uHZs2cQPpvDRyKRID09XWXhSAnsfkjFUIDtUHz1YDYcEm4BgYFAs2ZiRyIiIiIqUEpfAzZ69Gi4urrizp07iI2Nxdu3b2W32NjYgshIimABRsXQp0PSY/FiccMQERERFQKlz4A9fPgQ+/fvh5OTU0HkofxITgauXJF+zwKMipmDFb+H1/MNUP/zT+DiRaBhQ7EjERERERUYpc+Aubm54dGjRwWRhfLr+nVpEVa2LFCpkthpiJQSqV8Rf5UfKL0zb564YYiIiIgKmNJnwL777jtMnDgRkZGRcHZ2hqamptzjtWrVUlk4UlBm90MPDw5iQMXSXqcZaP1qG3DiBM+CERERUYmmdAHWvXt3AMDQoUNlyyQSCQRB4CAcYuH1X1TMRepXBAYOBDZvBubOlRZiRERERCWQ0l0Qw8LCstyePHki+6osPz8/ODg4QEdHBy4uLjh//nyu7QMDA+Hi4gIdHR04Ojpi7dq1co+vX78enp6eMDU1hampKVq1aoXLly9/8X6LtF69pB9eW7YUOwlR/s2cCairAydPAsHBYqchIiIiKhBKF2B2dna53pSxZ88e+Pj4YMaMGQgJCYGnpyfatm2L8PDwbNuHhYWhXbt28PT0REhICKZPn46xY8fiwIEDsjbnzp1D3759cfbsWQQHB6NChQrw8vLCy5cv873fIq9vX2DrVqBePbGTEOWfoyMwaJD0e14LRkRERCWURPh8Mq88bNu2LdfHBw4cqPC23NzcUK9ePaxZs0a2rFq1aujSpQt8fX2ztJ8yZQqOHDmC0NBQ2bLRo0fj5s2bCM7hP+bp6ekwNTXFqlWrZNmU3W924uPjYWxsjLi4OBgZGSm0TlHWsaPYCagoO3o07zZf+hw6ehTAkydAlSpAWpp0cnF39y/bqBLyyq/Iz4CIiIhKJ2VqA6WvARs3bpzc/dTUVCQmJkJLSwt6enoKF2ApKSm4du0apk6dKrfcy8sLFy5cyHad4OBgeHl5yS3z9vbGxo0bkZqammVAEABITExEamoqzMzM8r1fAEhOTkZycrLsfnx8fO4HSERKkRZAjvjOehC8nm/E9c5zMcftpOxxFkBERERUEijdBfHTiZffvn2L9+/f4/79+2jcuDF27dql8Haio6ORnp4OS0tLueWWlpaIjIzMdp3IyMhs26elpSE6OjrbdaZOnYpy5cqhVatW+d4vAPj6+sLY2Fh2s7W1zfMYiUh5e52mI02igXpRp1A1Nud/ihAREREVR0oXYNmpVKkSfvzxxyxnxxQh+WzY9MzRFJVpn91yAFi8eDF27dqFgwcPQkdH54v2O23aNMTFxcluz58/z7EtEeXfa31H/FVeei1Y34e8FoyIiIhKFpUUYACgrq6OV69eKdy+TJkyUFdXz3LW6c2bN1nOTmWysrLKtr2GhgbMzc3lli9ZsgSLFi3CqVOn5OYmy89+AUBbWxtGRkZyNyIqGHsrzeBZMCIiIiqRlL4G7MiRI3L3BUFAREQEVq1ahUZKzEOlpaUFFxcXBAQEoGvXrrLlAQEB6Ny5c7bruLu74+hnF4KcOnUKrq6uctd//fzzz1iwYAFOnjwJV1fXL94vERWu13oOOFN+MLyfb0C/B3Mxu+EpsSMRERERqYTSBViXLl3k7kskEpQtWxYtWrTAL7/8otS2JkyYgAEDBsDV1RXu7u5Yt24dwsPDMXr0aADSbn8vX76Ujbw4evRorFq1ChMmTMCIESMQHByMjRs3yl17tnjxYsyaNQs7d+6Evb297EyXgYEBDAwMFNovEYlvX6XpaPliC+pGB6Ba7D8AONE4ERERFX9KF2AZGRkq23nv3r0RExOD+fPnIyIiAjVr1oS/v79sPrGIiAi5ubkcHBzg7++P8ePHY/Xq1bCxscGKFSvQvXt3WRs/Pz+kpKSgR48ecvuaM2cO5s6dq9B+iUh8n54F6/tgLoAAsSMRERERfTGF5wFr0qQJjhw5AhMTEwDSroitW7eGrq5uQeYrsjgPGJUmhTEPWHYsEp/it7OVoCGkAefPA40bq34n/8d5wIiIiCi/lKkNFB6EIygoCCkpKbL7/fv3R0RERP5TEhHl4Y2ePU7bDpHe8fEB0tNFzUNERET0pZTugphJwRNnRERfZEfl+Wj8ai8Mrl0DVq8Gxo4VJQfPkBEREZEqqGwYeiKigvBOxwpbq/0kvTNjBvDihbiBiIiIiL6AUmfATp48CWNjYwDSwTjOnDmDO3fuyLXp1KmT6tIREQE4WWEExhhsBYKDpWfADh4UOxIRERFRvihVgA0aNEju/qhRo+TuSyQSpPMaDSJSMUGiBvz2G1CvHnDoEHDkCMB/9hAREVExpHAXxIyMjDxvLL6IqMA4OwMTJ0q///Zb4P17cfMQERER5QOvASOi4mP2bMDeHnj+HJgzR+w0REREREpjAUZExYeeHuDnJ/1++XIgJETUOERERETKYgFGRMVL27ZA795ARgYwciTnBiMiIqJihQUYERU/y5YBxsbA1av/nREjIiIiKgbyPREzEZUeeU1CXOisrQFfX+Cbb6Rzg3XrBpQrJ3YqIiIiojwpfQbs+fPnePHJRKiXL1+Gj48P1q1bp9JgRES5GjUKcHMDEhKAcePETkNERESkEKULsH79+uHs2bMAgMjISLRu3RqXL1/G9OnTMX/+fJUHJCLKlpoasG4doK4OHDgAHD4sdiIiIiKiPCldgN25cwcNGjQAAOzduxc1a9bEhQsXsHPnTmzZskXV+YiIclar1n9zgw0eDDx6JGocIiIiorwoXYClpqZCW1sbAHD69Gl06tQJAFC1alVERESoNh0RUV7mzwfc3YG4OKBLF2mXRCIiIqIiSukCrEaNGli7di3Onz+PgIAAtGnTBgDw6tUrmJubqzwgEVGutLWlXRCtrYG7d4EhQwBBEDsVERERUbaULsB++ukn/Pbbb2jWrBn69u2L2rVrAwCOHDki65pIRFSorK2lRZimpvSrr6/YiYiIiIiypfQw9M2aNUN0dDTi4+NhamoqWz5y5Ejo6empNBwRkcLc3YFVq6SjI86cCdSpA7RrJ3YqIiIiIjlKnwFLSkpCcnKyrPh69uwZli9fjvv378PCwkLlAYmIFDZypPQmCEC/fsDDh2InIiIiIpKj9Bmwzp07o1u3bhg9ejTevXsHNzc3aGpqIjo6GkuXLsXXX39dEDmJiBSzYgVw+zYQHCwdlOPiRcDQUOxUeU5mffRo4eQgIiIicSl9Buz69evw9PQEAOzfvx+WlpZ49uwZtm3bhhUrVqg8IBGRUj4dlOPePenw9ByUg4iIiIoIpQuwxMREGP7/v8mnTp1Ct27doKamhoYNG+LZs2cqD0hEpLRPB+U4eJCDchAREVGRoXQB5uTkhMOHD+P58+c4efIkvLy8AABv3ryBkZGRygMSEeWLuzuwerX0+5kzgT/+EDcPEREREfJRgM2ePRuTJk2Cvb093Nzc4O7uDkB6Nqxu3boqD0hElG8jRkhHRRQEoFcv4ORJsRMRERFRKad0AdajRw+Eh4fj6tWrOHHihGx5y5YtsWzZMpWGIyL6YitXAt26ASkp0kE5zpwROxERERGVYkoXYABgZWWFunXrQk3tv9UbNGiAqlWrqiwYEZFKaGoCu3ZJhyH8+FH6NTBQ7FRERERUSik9DD0AXLlyBfv27UN4eDhSUlLkHjt48KBKghERqYyWFrBvn/QM2IkTQPv20u6IjRqJnYyIiIhKGaXPgO3evRuNGjXCvXv3cOjQIaSmpuLevXv466+/YGxsXBAZiYi+nLa2dETEVq2ADx+Atm2BS5fETkVERESljNJnwBYtWoRly5ZhzJgxMDQ0xK+//goHBweMGjUK1tbWBZGRiChPCk10rKsrHQ2xfXvg3DnA21t6TZiLS2FEzBUnaiYiIiodlD4D9vjxY7Rv3x4AoK2tjQ8fPkAikWD8+PFYt26dygMSEamUnp60mmncGIiLA1q3Bm7eFDsVERERlRJKF2BmZmZISEgAAJQrVw537twBALx79w6JiYmqTUdEVBAMDAB/f+lcYW/fAi1bwi7+ttipiIiIqBRQugDz9PREQEAAAKBXr14YN24cRowYgb59+6Jly5YqD0hEVCAMDYE//wRcXYGYGCwKboaK766JnYqIiIhKOKWvAVu1ahU+fvwIAJg2bRo0NTURFBSEbt26YdasWSoPSERUYIyNgVOngLZtYXTpEhZebIH5DY7jnlljsZMRERFRCZWvLog2NjbSldXUMHnyZBw5cgRLly6FqampygMSERUoU1MgIAC3zZpCPy0e8y55o3bUabFTERERUQmVr4mYiYhKFENDzHPzx7WybaCTnojZVzqg/msOO0hERESqp3ABpq6urtCNiKg4SlbXwwLXw7hg1RVaGcmYfrUbGr/aK3YsIiIiKmEUvgZMEATY2dlh0KBBqFu3bkFmIiISRZq6Nn6qtxc+Nwej+csdmHS9L7TTE3HGdrDY0YiIiKiEULgAu3TpEjZt2iSbeHno0KH46quveN0XEZUoGWoaWF5nK5LV9dAmfD18bg6Bdnoi/O2/yXW9vCZSJiIiIgKU6IJYv359rFmzBhEREZgwYQIOHTqE8uXLo0+fPrJh6YmISoIMiTpWO/+GPxx8AABf3xmDzk+WihuKiIiISgSlB+HQ0dFB//79cebMGdy5cwdv3rxBmzZtEBsbWxD5iIjEIZFgQ/Wl2F1pJgBg+L2J6Bi2QuRQREREVNwpPQ8YALx48QJbtmzBli1bkJSUhO+//x5GRkaqzkZEJC6JBDsqz4dEEND70UKMvDsOaRJN/Gn/tdjJiIiIqJhSuABLSUnBoUOHsHHjRpw/fx5t27bF8uXL0a5dO6ipcTR7IiqhJBJsr/ID1IVU9Hi8GN/c+Qbpapo4VWG42MmIiIioGFK4crK2tsaUKVPg7u6O27dvY8uWLWjSpAnev3+P+Ph42U1Zfn5+cHBwgI6ODlxcXHD+/Plc2wcGBsLFxQU6OjpwdHTE2rVr5R6/e/cuunfvDnt7e0gkEixfvjzLNubOnQuJRCJ3s7KyUjo7EZUSEgm2Vv0Rhx3GAwDG3BqJFs+3ihyKiIiIiiOFC7C3b98iPDwcP/zwA6pUqQJTU1O5m4mJidIjIu7Zswc+Pj6YMWMGQkJC4OnpibZt2yI8PDzb9mFhYWjXrh08PT0REhKC6dOnY+zYsThw4ICsTWJiIhwdHfHjjz/mWlTVqFEDERERstvt27eVyk5EpYxEgo3Vf8FR+2+hBgHjbg5B05c7xU5FRERExYzCXRDPnj2r8p0vXboUw4YNw/Dh0q48y5cvx8mTJ7FmzRr4+vpmab927VpUqFBBdlarWrVquHr1KpYsWYLu3bsDkI7WWL9+fQDA1KlTc9y3hoYGz3oRkXIkEqyrsQIaGaloG/4bxocMQLpEA0E2vcRORkRERMWEwgVY06ZNVbrjlJQUXLt2LUuR5OXlhQsXLmS7TnBwMLy8vOSWeXt7Y+PGjUhNTYWmpqbC+3/48CFsbGygra0NNzc3LFq0CI6Ojjm2T05ORnJysux+frpbElEJIJFgjbMf1IVUeD3fhEkh/ZAm0cRF665iJyMiIqJiQLTRM6Kjo5Geng5LS0u55ZaWloiMjMx2ncjIyGzbp6WlITo6WuF9u7m5Ydu2bTh58iTWr1+PyMhIeHh4ICYmJsd1fH19YWxsLLvZ2toqvD8iKlkEiRpW11qHv8oNgLqQjinXe8H19XGxYxEREVExIPrwhRKJRO6+IAhZluXVPrvluWnbti26d+8OZ2dntGrVCsePSz84bd2a80X106ZNQ1xcnOz2/PlzhfdHRCVPhkQdv9bZjECbvtAQ0jDlei9UjLsudiwiIiIq4kQrwMqUKQN1dfUsZ7vevHmT5SxXJisrq2zba2howNzcPN9Z9PX14ezsjIcPH+bYRltbG0ZGRnI3IirdMiTqWFZnK0LKtIZOeiJmXe6AsknZDyJEREREBIhYgGlpacHFxQUBAQFyywMCAuDh4ZHtOu7u7lnanzp1Cq6urkpd//W55ORkhIaGwtraOt/bIKLSKV1NEz+67MNTw5owT47A7MvtoZcaJ3YsIiIiKqKULsC2bNmCxMRElex8woQJ2LBhAzZt2oTQ0FCMHz8e4eHhGD16NABpt7+BAwfK2o8ePRrPnj3DhAkTEBoaik2bNmHjxo2YNGmSrE1KSgpu3LiBGzduICUlBS9fvsSNGzfw6NEjWZtJkyYhMDAQYWFhuHTpEnr06IH4+HgMGjRIJcdFRKVLoqYx5jc4jhhta9gn3MHUaz2hnpEqdiwiIiIqgpQuwKZNmwYrKysMGzYsx9EKFdW7d28sX74c8+fPR506dfD333/D398fdnZ2AICIiAi5OcEcHBzg7++Pc+fOoU6dOvjhhx+wYsUK2RD0APDq1SvUrVsXdevWRUREBJYsWYK6devKhroHgBcvXqBv376oUqUKunXrBi0tLVy8eFG2XyIiZUXpVsAPDY4hSV0fdaMD8M3tr4H/X6NKRERElEkiCMp9QkhPT8fx48exZcsWHD9+HA4ODhgyZAgGDRpUqubVio+Ph7GxMeLi4krE9WAdO4qdgCh3R4/m/nhez+EvXV9R9V8fw4wrnaGODGyrshD7Kk1XyXbzyk9ERETiUaY2UPoMmLq6Ojp16oSDBw/i+fPnGDlyJHbs2IEKFSqgU6dO+OOPP5CRkZHv8ERExdkVyw5YV3MFAGDg/Rlo8nKXyImIiIioKPmiQTgsLCzQqFEjuLu7Q01NDbdv38bgwYNRsWJFnDt3TkURiYiKF3/7MTjkOAEA4HNzMKrHnBc5ERERERUVGvlZ6fXr1/j999+xefNmPHnyBF26dMGxY8fQqlUrJCUlYebMmRg0aBCePXum6ryUT+xiSKVdYf8NbK72MywTw+AReQgzrnbB942C8cqgcuGGICIioiJH6TNgHTt2hK2tLbZs2YIRI0bg5cuX2LVrF1q1agUA0NXVxcSJEzlRMRGVaoJEDUvrbsd9kwYwSo3FjKtdoJuWIHYsIiIiEpnSBZiFhQUCAwNx584d+Pj4wMzMLEsba2trhIWFqSQgEVFxlayuhwX1jyBG2wYV3odi7M1hHBmRiIiolFO6AGvatCnq1auXZXlKSgq2bdsGAJBIJBzSnYgIwDttS/i67keqRBONI/ahc9gysSMRERGRiJQuwIYMGYK4uLgsyxMSEjBkyBCVhCIiKknum7pjQw1p4TUkdDJqxgSKnIiIiIjEonQBJggCJBJJluUvXryAsbGxSkIREZU0/nbf4Gy5/lAX0jH5Wi+YJb0UOxIRERGJQOFREOvWrQuJRAKJRIKWLVtCQ+O/VdPT0xEWFoY2bdoUSEgiomJPIsHqWr/BPv4WHBJuYer1npjufg5palpiJyMiIqJCpHAB1qVLFwDAjRs34O3tDQMDA9ljWlpasLe3R/fu3VUekIiopEhW14Ov6wEsPe+Kam+DMfTeRKyruVLsWERERFSIFC7A5syZAwCwt7dH7969oaOjU2ChiIhKqgh9Jyyt+ztmX+mEjk9X4YGJG86V7y92LCIiIiokSl8DNmjQIBZfRERf4IplR+yuNBMA8O2tkbCPvyVyIiIiIiosChVgZmZmiI6OBgCYmprCzMwsxxsREeVtV+W5uF7WC9oZSZh2tRv0U9+JHYmIiIgKgUJdEJctWwZDQ0PZ99mNgkhERIrLkKhjSd2dWHbeBTaJj+FzYzAWuh4C+PpKRERUoilUgA0aNEj2/eDBgwsqCxFRqZKgZY4fXfZj8YVGaPj6D3QK+xVHHH3EjkVEREQFSKECLD4+XuENGhkZ5TsMEVFp88jEFRur/YLRd7/D4NDJCDX1wEPTBmLHIiIiogKiUAFmYmKSZ7fDzAma09PTVRKMiKi0OG4/Bs4x59Ao8gCmXO+NcZ7X8UHLVOxYREREVAAUKsDOnj1b0DmIiEoviQQram+EY3wIrBOfYNzNoVjkepDXgxEREZVAChVgTZs2LegcRESlWqKmMX6qtxc/X/CA++vD6Bi2Akcdx4kdi4iIiFRMoQLs1q1bqFmzJtTU1HDrVu7z1dSqVUslwYiISpvHJi7YVG0JRt0diyGh3+NfMw88NKkvdiwiIiJSIYUKsDp16iAyMhIWFhaoU6cOJBIJBEHI0o7XgBERfZlj9t/COeYcPCIPYsq1XhjXJAQfNE3EjkVEREQqolABFhYWhrJly8q+JyKiAvLJ9WBWiWEYe3MofF0OAOD1YERERCWBQgWYnZ1dtt8TEZHqfdA0wU/19mLxPx7wiDyEDk9XAfhO7FhERESkAmr5Wen+/fv49ttv0bJlS7Rq1Qrffvst7t+/r+psRESl1iMTV2yuvgQAMPTeRODKFZETERERkSooXYDt378fNWvWxLVr11C7dm3UqlUL169fR82aNbFv376CyEhEVCodtf8OF6y6QlNIBXr2BGJjxY5EREREX0ihLoifmjx5MqZNm4b58+fLLZ8zZw6mTJmCnj17qiwcEVGpJpFgRe1NsI+/BZtnj4GBA4EjRwC1fHVeICIioiJA6XfxyMhIDBw4MMvy/v37IzIyUiWhiIhI6oOmCX502Q9oawPHjwM//SR2JCIiIvoCShdgzZo1w/nz57MsDwoKgqenp0pCERHRf8KM6wCrV0vvzJwJnD0rah4iIiLKP4W6IB45ckT2fadOnTBlyhRcu3YNDRs2BABcvHgR+/btw7x58womJRFRaTdsGPDPP8DmzUCfPkBICGBjI3YqIiIiUpJEyG5G5c+oKXi9QWmaiDk+Ph7GxsaIi4uDkZGR2HHy1LGj2AmIvszRo7k/XtKf40ePAkhMBNzdgVu3gMaNgb/+AjQ1xY5GRERU6ilTGyhUWWVkZCh0Ky3FFxGRKPT0gP37ASMjICgImD5d7ERERESkJA6lRURUnFSqJO2GCABLlgCHDombh4iIiJSi9DD0APDhwwcEBgYiPDwcKSkpco+NHTtWJcGIiCgH3boBEycCv/wCDB4MODsDTk5ipyIiIiIFKF2AhYSEoF27dkhMTMSHDx9gZmaG6Oho6OnpwcLCggUYEVFh8PUFLl2SdkXs0QMIDgZ0dcVORURERHlQugvi+PHj0bFjR8TGxkJXVxcXL17Es2fP4OLigiVLlhRERiIi+pymJrBnD2BhAdy8CYwcCeQ9phIRERGJTOkC7MaNG5g4cSLU1dWhrq6O5ORk2NraYvHixZjOC8KJiAqPjQ2wezegrg5s385JmomIiIoBpQswTU1NSCQSAIClpSXCw8MBAMbGxrLviYiokDRvDqxcKf1+2jQOykFERFTEKV2A1a1bF1evXgUANG/eHLNnz8aOHTvg4+MDZ2dnlQckIqI8fP018O230u/79wdu3BA1DhEREeVMoYmYP3X16lUkJCSgefPmiIqKwqBBgxAUFAQnJyds3rwZtWvXLqisRQonYiaiouTooTSgfXvg1CnA1ha4fBmwspI9ntdrQF4TXRMREVHOlKkNlB4F0dXVVfZ92bJl4e/vr3xCIiJSLQ0N6aAcDRsC9+8DXboA584BOjpiJyMiIqJP5Hsi5jdv3uD8+fMICgpCVFSUKjMREVF+mJhIT2WZmkqHqB82jCMjEhERFTFKF2Dx8fEYMGAAypUrh6ZNm6JJkyawsbFB//79ERcXVxAZiYhIUZUqAQcOSM+I7dwJLFokdiIiIiL6hNIF2PDhw3Hp0iUcO3YM7969Q1xcHI4dO4arV69ixIgRBZGRiIiU0bw5sGqV9PuZM6UFGRERERUJShdgx48fx6ZNm+Dt7Q0jIyMYGhrC29sb69evx/Hjx5UO4OfnBwcHB+jo6MDFxQXnz5/PtX1gYCBcXFygo6MDR0dHrF27Vu7xu3fvonv37rC3t4dEIsHy5ctVsl8iomJl1Chg3Djp9wMHouK7a+LmISIiIgD5KMDMzc1hbGycZbmxsTFMTU2V2taePXvg4+ODGTNmICQkBJ6enmjbtm2O84mFhYWhXbt28PT0REhICKZPn46xY8fiwCf/3U1MTISjoyN+/PFHWH0yAtiX7JeIqFhasgTw9gYSEzH3cluUf/+v2ImIiIhKPaWHoV+3bh327duHbdu2wdraGgAQGRmJQYMGoVu3bhg1apTC23Jzc0O9evWwZs0a2bJq1aqhS5cu8PX1zdJ+ypQpOHLkCEJDQ2XLRo8ejZs3byI4ODhLe3t7e/j4+MDHx+eL9psdDkNPREVJjsPIx8UBLVoA168jWqccpngE4Y2eveLrExERUZ5UPgx93bp1IZFIZPcfPnwIOzs7VKhQAQAQHh4ObW1tREVFKVyApaSk4Nq1a5g6darcci8vL1y4cCHbdYKDg+Hl5SW3zNvbGxs3bkRqaio0NTULZL8AkJycjOTkZNn9+Pj4PPdFRCQ6Y2Pg5EmEOzRFhff38MPFVpjqcR5vdazFTkZERFQqKVSAdenSReU7jo6ORnp6OiwtLeWWW1paIjIyMtt1IiMjs22flpaG6Oho2Rk5Ve8XAHx9fTFv3rw8t09EVOSUKYNZDQPw04XGsEl8jB8utcY090AkaJnLmnCiZiIiosKhUAE2Z86cAgvw6Zk1ABAEIcuyvNpnt1zV+502bRomTJggux8fHw9bW1ul9klEJJZYHRvMdDuNny54wi7hLuZdaoMZDc8gSbPod6EmIiIqSfI9EfO1a9ewfft27NixAyEhIUqvX6ZMGairq2c56/TmzZssZ6cyWVlZZdteQ0MD5ubm2a6jiv0CgLa2NoyMjORuRETFyWt9R8xqGIB4TXNUiruK2Vc6Qjs9UexYREREpYrSBdibN2/QokUL1K9fH2PHjsW3334LFxcXtGzZElFRUQpvR0tLCy4uLggICJBbHhAQAA8Pj2zXcXd3z9L+1KlTcHV1Vej6r/zul4iopHhuWB2z3U7ig4YRasb+jalXe0AjI0XsWERERKWG0gXYd999h/j4eNy9exexsbF4+/Yt7ty5g/j4eIwdO1apbU2YMAEbNmzApk2bEBoaivHjxyM8PByjR48GIO32N3DgQFn70aNH49mzZ5gwYQJCQ0OxadMmbNy4EZMmTZK1SUlJwY0bN3Djxg2kpKTg5cuXuHHjBh49eqTwfomISrLHJi6Y3+A4ktV04Rr1JyaG9IeakC52LCIiolJBoWvAPnXixAmcPn0a1apVky2rXr06Vq9enWWEwrz07t0bMTExmD9/PiIiIlCzZk34+/vDzs4OABARESE3N5eDgwP8/f0xfvx4rF69GjY2NlixYgW6d+8ua/Pq1SvUrVtXdn/JkiVYsmQJmjZtinPnzim0XyKiku6eWWMsdD2EWVc6onHEPqSFaGJ5nS1IV1OsNwERERHlj9LzgBkaGuL8+fOoU6eO3PKQkBA0bdq01AzPznnAiKgoyWuUwpxeA9wjDmLy9d7QENJwxaI9fnTZhxR1XaW3T0REVJopUxso3QWxRYsWGDduHF69eiVb9vLlS4wfPx4tW7ZUPi0REYkm2LobFroeRrKaDuq/OY55l9pALzVO7FhEREQlltIF2KpVq5CQkAB7e3tUrFgRTk5OcHBwQEJCAlauXFkQGYmIqABdtWyP2W6nZANzLApuDuPkN2LHIiIiKpGU7oKYKSAgAP/++y8EQUD16tXRqlUrVWcr0tgFkYiKkvx2QfyUY1wI5l3yhklKFF7oV8bshgGI0q2gkv0TERGVZMrUBkoNwpGWlgYdHR3cuHEDrVu3RuvWrb8oKBERFR1PjOtiikcQFlxshfIfHuCnfxpjVsMAvDSoInY0IiKiEkOpLogaGhqws7NDejqHKyYiKoleGVTG5Eb/4IV+FZT9+Bw/XWiMinHXxY5FRERUYih9DdjMmTMxbdo0xMbGFkQeIiISWbSuLaZ4nMcj43owTonGouBmcI4+K3YsIiKiEkHpecBWrFiBR48ewcbGBnZ2dtDX15d7/Pp1/qeUiKi4i9cui+kNz2L2lY6oGfs35l/ygp/zWgRUGCZ2NCIiomJN6QKsc+fOkEgkBZGFiIiKkCRNI8xxOwGfG4PhGbEXY28NR/n3/2JrtR+RIVEXOx4REVGxpHQBNnfu3AKIQURERVGKui4W19uN5w+qod/Deej2ZAlsPjzAL3V34KOGgdjxiIiIih2FrwFLTEzEmDFjUK5cOVhYWKBfv36Ijo4uyGxERFQUSCTYVWUufq67Eylq2mj4+gh+utAYZZPCxU5GRERU7ChcgM2ZMwdbtmxB+/bt0adPHwQEBODrr78uyGxERFSE/F2uL6a7n8NbLQs4xt/EL0ENUPntJbFjERERFSsKT8RcsWJFLFy4EH369AEAXL58GY0aNcLHjx+hrl76rgXgRMxEVFqVTXyGWVc6wiHhNpLVdPBr7c04X66PqJk4ETQREYlJmdpA4TNgz58/h6enp+x+gwYNoKGhgVevXuU/KRERFTtRenaY0ugfXLboAO2Mj5gc0hdf3Z8NiZAhdjQiIqIiT+ECLD09HVpaWnLLNDQ0kJaWpvJQRERUtCVpGGJh/cM45DgRANDn4Q+YcbUL9FLjRE5GRERUtCk8CqIgCBg8eDC0tbVlyz5+/IjRo0fLzQV28OBB1SYkIqIiKUOijk3VlyDMqBa+vTUSbq+P4pcgNyysfxgvDKqKHY+IiKhIUrgAGzRoUJZl/fv3V2kYIiIqfs6WH4jnBtUx/WpXlP9wH78ENcAvdbbjslUnsaMREREVOQoPwkHyOAgHEZE84+Q3mHqtJ2rG/g0A2FlpDnZXng1BonBv93zjIBxERCSmAhmEg4iIKDdx2haY2fA0jtp/BwDo93Aepl/tCt3UeJGTERERFR0swIiISGXS1TSxruYKLK+9WTZp89KgBij//l+xoxERERUJLMCIiEjlztgOxlSP84jWKSe7Lqz+a/YTJCIiYgFGREQF4qFJfYz3vIY7Zp7QS0vA7Cud0OfBfM4XRkREpRoLMCIiKjDvtC0xq+FpHLMbAwD46sEcTLvandeFERFRqcUCjIiIClSamhZ+c16F5bU3IVVNC+6vD+OXf9xg8/6B2NGIiIgKHQswIiIqFGdsh2CKu/S6MNv3/2JpUH3Uf31M7FhERESFigUYEREVmoemDTC+8VXcNWsM/bR4zLzSCb0eLuB1YUREVGqwACMiokL1TscKMxuegb/d11CDgAH3Z2HqtZ7QSXsvdjQiIqICxwKMiIgKXZqaFtY4+2FFrQ1IVdOCR+RBLP6nESwSn4odjYiIqECxACMiItEEVBiG6Q3P4q22JRwSbmFpUH3UjAkUOxYREVGBYQFGRESi+tfMAxMaX8FDYxcYp0Tjh4ut0ObZWrFjERERFQgWYEREJLpoXVtM8/gbgTZ9oCGkYcztr/H17W+gnpEqdjQiIiKVYgFGRERFQrK6HpbU3YmtVX2RAQnaPVuDHy62hlFylNjRiIiIVIYFGBERFR0SCfY7TcWC+keQqGEI59hALA2qD/v4W2InIyIiUgkWYEREVORcseyASY0u4pVeRVgmPcPifzzQMPKw2LGIiIi+GAswIiIqkp4bVsfExpdxo0xL6KZ/wIyrXdHr4UJAEMSORkRElG8swIiIqMh6r2WGuQ3+xFH7bwEAA+7PxKSQftBKTxI5GRERUf6wACMioiItXU0T62quxGrntUiTaKDpq9348UITmCW9FDsaERGR0liAERFRsXDCbhRmuQUgXtMcleKuYmlQfVR6e1nsWEREREphAUZERMXGnTLNMKHxZTwzrAHz5Aj8GNwETV/uFDsWERGRwjTEDkBERKSM1/qO+N7jAiaFfIUGb45hUshX2O90C79XXYgMiXq+tnn06Jdl6tixeG+fiIgKD8+AERFRsZOkaYSF9Q9jf8UpAIAej3/C7MsdoJ/yVuRkREREuWMBRkRExVKGRB1bq/2In+vuRLKaLlyiTmBpUANUSLgrdjQiIqIcsQAjIqJi7e9yfTG50T94o1sBNomP8HNQQ07aTERERRYLMCIiKvaeGNfF+MZXccu8GfTS32PG1a7od38OJEKG2NGIiIjkiF6A+fn5wcHBATo6OnBxccH58+dzbR8YGAgXFxfo6OjA0dERa9euzdLmwIEDqF69OrS1tVG9enUcOnRI7vG5c+dCIpHI3aysrFR6XEREVLjitctittsp/OEwDgDQ9+F8TL/aFbqp8SInIyIi+o+oBdiePXvg4+ODGTNmICQkBJ6enmjbti3Cw8OzbR8WFoZ27drB09MTISEhmD59OsaOHYsDBw7I2gQHB6N3794YMGAAbt68iQEDBqBXr164dOmS3LZq1KiBiIgI2e327dsFeqxERFTw0tU0saHGciyrvQUpatpo+PoIfvnHDeXf/yt2NCIiIgCARBAEQaydu7m5oV69elizZo1sWbVq1dClSxf4+vpmaT9lyhQcOXIEoaGhsmWjR4/GzZs3ERwcDADo3bs34uPj8eeff8ratGnTBqampti1axcA6Rmww4cP48aNG/nOHh8fD2NjY8TFxcHIyCjf2ykseQ1hTERU0lR6dwXTr3ZFmY8vkaSuj9W11iGwXL9s2xb1YeI5DD0RUdGmTG0g2hmwlJQUXLt2DV5eXnLLvby8cOHChWzXCQ4OztLe29sbV69eRWpqaq5tPt/mw4cPYWNjAwcHB/Tp0wdPnjzJNW9ycjLi4+PlbkREVHQ9NKmP8Z7XcNO8OXTTP2BSyFcYc2sktNKTxI5GRESlmGgFWHR0NNLT02FpaSm33NLSEv9r787jqqr2Po5/DvMoKihDIs5DTqg44XxLLRu0uuWtNMubxZPmgJqpdTVLTXs0rdTSa2p2S5/bzfFaSoM44ZCKkiPOSuCUAYoynf38ceLIERBU4Ih+36/Xeu191l577bX3WcD5sfZZOykpKd99kpKS8i2flZXF+fPnb1gmd52tWrXiiy++YM2aNcydO5ekpCTCw8O5cOFCge2dNGkSPj4+1hQcHHxT5ysiIqXvD1d//tE6iq9qj8WMiYdOzuV/N7bivksH7d00ERG5R9l9Eg6TyWTz2jCMPHmFlb8+v7A6H374YZ566ikaNWrEgw8+yH//+18AFi5cWOBxR40aRXJysjWdOnWqkDMTEZE7gdnkyNd1x/F26yguulSmemocH25oTsfT/7J300RE5B5ktwDMz88PR0fHPKNdZ8+ezTOClSMgICDf8k5OTvj6+t6wTEF1Anh6etKoUSPi4+MLLOPq6kq5cuVskoiIlB17/B5gcIfYa7ckxvbWLYkiIlLq7BaAubi40Lx5c6Kiomzyo6KiCA8Pz3efNm3a5Cm/du1awsLCcHZ2vmGZguoEy/e79u/fT2Bg4K2cioiIlBEX3QLzvSWRXJM7iYiIlCS73oIYGRnJP//5Tz7//HP279/P0KFDOXnyJBEREYDltr8XXnjBWj4iIoITJ04QGRnJ/v37+fzzz5k3bx7Dhw+3lhk8eDBr165l8uTJHDhwgMmTJ/PDDz8wZMgQa5nhw4cTHR3NsWPH2Lp1K3/9619JSUmhb9++pXbuIiJiHza3JLr6Uz01Dpo2hQ8+gOxsezdPRETucnYNwHr16sX06dMZP348oaGhrF+/ntWrVxMSEgJAYmKizTPBqlevzurVq1m3bh2hoaG8++67fPTRRzz11FPWMuHh4SxevJj58+fTuHFjFixYwJIlS2jVqpW1zOnTp3n22WepW7cuTz75JC4uLmzZssV6XBERufvt8XuAQe1j+aXSw5CeDm+8Ae3awUFN0CEiIiXHrs8BK8v0HDARkbuEYbDyyfkwdCikpICbG7z3HgwZAo6ORapCzwETEbm3lYnngImIiNwRTCbo1w9+/RW6dYOrV2H4cOjQAQ4dsnfrRETkLqMATEREBCA4GL77DubOBW9v2LwZmjSBDz/Ud8NERKTYKAATERHJYTLByy9bRsO6dLGMhkVGQuvWEBNj79aJiMhdQAGYiIjI9apWhTVrYM4cKFcOfvkFwsPhhRfgt9/s3ToRESnDFICJiIjkx2SC/v0t3wPr18/yetEiqFMH3n/fMnOiiIjITVIAJiIiciP+/jBvHmzbBm3awOXLMGoUNGgAK1aAJhMWEZGboABMRESkKMLCYNMmyyhYYCAcOQI9esBDDxGSEmfv1omISBmhAExERKSoTCbo3dtyW+KoUeDiAmvX8tH6JryxoxfBqfvs3UIREbnDKQATERG5WV5eMHEi7NsHTz+NAwbtE/+PT6IbMnznc1S5dMDeLRQRkTuUAjAREZFbVbMm/N//8XqH3WwOeBIHDDr+9jWfrGtA5K4+BF6Kt3cLRUTkDqMATERE5DYdL9eYSWH/YVD7XWzx74EjZjonfMnsdfUYEvui5ZZFERERFICJiIgUm2M+oUxosYwh7X5hW+VHccTMA6cXQt268PjjsG6dZk0UEbnHKQATEREpZkfKN+fdliuJbLuVrf6PWTJXroTOnS2zKf7rX5CZad9GioiIXSgAExERKSHxFVryXosVcOAARESAuzvs3GmZSbF6dZgyBS5etHczRUSkFCkAExERKWl168Ls2XDyJLz3nuXhzgkJMHIkBAfD//wPxMbau5UiIlIKFICJiIiUFj8/GDMGTpyA+fOhUSO4fBk+/RSaNoWWLeGf/4RLl+zdUhERKSEKwEREREqbqyu8+CLs3g0//QS9eoGzM2zfDv37Q1CQZVRs1y57t1RERIqZAjARERF7MZksE3MsXmy5JXHKFKhVC1JTLaNizZpBixZ0Pz6Lchnn7d1aEREpBgrARERE7gSVKsGIEZZnhv30E/ztb5ZRsV9+4X9+HcDCqED+se1ROiZ8hWvWZXu3VkREbpGTvRsgIiIiueSMinXuDOfOwaJFHB7/L2ol76TF2f/S4ux/ueLoyZaAnkTf9zyxfg8CzvZutYiIFJHJMPREyFuRkpKCj48PycnJlCtXzt7NKdRjj9m7BSIicjuqXDpAx4Sv6JjwLwLTjlrz/3CpRPm+PS0Pen7gActU98WssL8hK1eWbP2Fud3j29vtXt+Sfn9EpHA3ExvoFkQREZEy4LRXPf5VdzyvdD7M8LYxrKw20BJ8ZZyDuXMtn8J9faFnT5g3D86csXeTRUQkH7oFUUREpCwxmThYoTUHK7Rm3v3TaHzhZ8aHrYAVK+DUKVi+3JJMJmjVyjIy1qULhIaCk/7si4jYm0bAREREyqhsB2d2VeoKn3xiebbYrl3wzjvQvDkYBmzZAqNHQ4sWULEidO8Okydb8jMz7d18EZF7kv4VJiIicjcwmSyjXKGh8I9/WKa1X7XKktavh5QU+O47SwLw9ITwcOjQwTJS1qQJVK5szzMQEbknKAATERG5G913H7z6qiVlZ8OePRAdbUnr18Pvv0NUlCXlCAy8FsSFhlqCslq1AEf7nIOIyF1IAZiIiMjdztERmja1pCFDwGyGffsswdiGDZZbF+PjITHRknJGyQA8PJjhVJtEj1oketYkyaOmdXnePRizScGZiMjNUAAmIiJyr3FwgIYNLWnAAEvepUsQFwe7d0NsrCXFxUFaGjXYTY2U3XmqyTQ5c9ajGjxYFapUsYy63Xef7XrlypbjiYgIoABMREREALy8oE0bS8qRnQ1HjvBO73gC044QePkwAWlHCLx8BP+0ozgbmdx3OR5+jC+4XicnCAiwTf7+Nq8DL/nzh1sAVxy9LN9lExG5iykAExERuccV/CBfR6AO+NfJs8XByMb3ymkC047ge/U0vlcT8LtiWVrSacqnn8EhKwtOn7akAsz5c5nu4M4frv5cdA2wWf7h6s8fLpWt68mulbns5GMN1uz9IOI7/UHV9r4+Irfjbuy/CsBERETkpplNjpzzCOGcR0iBZRzNmVRIT2L+pCRI+jOdOXNt/c+UdvwMHtmXcDVfwf/KcfyvHC/0+JkOLtagLMXFjxQXP1KdfUl18f3zta/1NUd9LCN83t7g5lZqo2wO5ixczFfh9wzLtP/5pawsaiY7kG1yIsvkTLbJCbPDtfVsB2euOHmT5eBSKm0WkZKnAExERERKRLaDM+fdg6FF8A3L9XoMXLMuUz79DBXSkyiffobyGWeocDWJ8hlnKJ9+1pKXfgafjLN4ZqXgbM6g0tXTVLpa8MiaVc1c646OlmAsJ3l7g4uLJd/JKf+l2QxZWdaAybr8c31mfDrO5qs4m9Nxyb6Ks/kqLuarOBrZlmP63rh50ws/A9IcvUh18eWSc0VS/lymuviS6lyR8+5VOONenSSPGpzzCFGwJnKHUwAmIiIidpfu5MkZpxqc8axRaFmX7Cv4ZJyzBmXeGRcol3Ee78wLlMtZz7jw5+vzVHRKhcuXLTtnZ0NysiUVk6pFLejsnDc5OXHunIGTkYmjOQtHIxNHIwtHcybOxrWHZXtkX8LjyiX8r5y44SHMmLjgdh9nPGpwxqM6SR7VOe1Vn+PlGvObRy3MDvroJ2Jv+ikUERGRMiXD0Z1z7lU551600GflSiyjWJcvW2Z7TE21XWZkWAKzrKxry9zrOaNhfwZM1y9Hv+NKhqMbmQ5uZDi4kenoRqaDq2XdwZVvVrpa6ijg1sd+N/iOi4M5C4+slD8Dyt/zLMtlnMfv6ikC0o7in3YMt+w068hgw9/X2143B1dOejfguHdjjpdrzHHvRhwv1xjQA7hFSpMCMBEREbn7OThYbjf09rY8cLoYxc0spMBtfNoyOzhxyaUil1wqklhYYcPAJ+OcNRjzTztGQNoRqqbupVpqHG7ZadRK3kmt5J22+1W5D1q0gJYtLcuwMChf/tYbLSI3pABMRERE5G5gMpHsWplk18ocrNDadpNhxj/tGNVS9lAtdQ/VU/ZQLWUPAWlHcEhIgIQEWLbs2g516lwLylq2tDzE29W1dM9H5C6lAExERETkLmeYHEjyrEmSZ022BD5hzXfLusS/R++Cbdtg+3ZLOnoUDh2ypH/9y1LQxQVCQ6F1a2jVyrKsXl3PbRO5BQrARERERO5RV528oH17S8px/jz88oslGNu2DbZuhXPnLOvbtl0rV6mSJRhr2dJy22JYmCVPRG7IZBiGYe9GlEUpKSn4+PiQnJxMuXLl7N2cQt3uQxxFRETkHmUY+Kcdo+4fW6l7cQt1/thKzeSdNrM05jjjHkJ8+RYc9gkjvnwYR3yac9m5/A2rL+sPyr7TlfXzLyvtv5nYQCNgIiIiIlIwk4kznpZHBKy/71kAnLLTqZESS92LW6idvJ3af/xClcsH8b9yAv8rJ2iX+I1190SPGhwr1+Ta7IvlGpPkUQPD5GCvMxKxKwVgIiIiInJTshxdOVShFYcqtLLmeWQmUzN5J7X/2E7t5F+o/cd2/K8cJzDtKIFpRwlPWmote8XRkxM50+DPuN8y6UfduhASYpmyX+QupgBMRERERG5bmrMPcX6difPrbM0rl3HeMvPin7MvVkvZQ0jqr7hnX6beH1uo98cWGJKrEhcXqFnzWkBWpw7UqAFVq0KVKpqJUe4KCsBEREREpESkuPixx+8v7PH7izXPwZxF0OV463T4zzQ5CAcPQnw8pKfD/v2WlJ+AAEswljsFBYG//7Xk46PZGeWOZvcAbNasWXzwwQckJibSoEEDpk+fTvvcM/FcJzo6msjISPbu3UtQUBBvvPEGERERNmX+85//8Pbbb3PkyBFq1qzJhAkTeOKJJ2zK3OxxRUREROT2mR2cOO1dn9Pe9dkY1Itncr4uZjbDqVPXpsA/dMgSmJ04YUlXrkBSkiXlno3xeq6uULmyNSAbstuPVOeKXHKucC25XHtNkg94eYGHh+WB3ZKXYUBWFmRmQkaGZZl7/UbLnP0KWmZnW+o3my3L3OtmM3897Mw3td609xUoVnYNwJYsWcKQIUOYNWsWbdu25bPPPuPhhx9m3759VK1aNU/5Y8eO0b17d/r378+XX37Jpk2beO2116hUqRJPPfUUADExMfTq1Yt3332XJ554gqVLl/LMM8+wceNGWrVqdUvHFREREZES5uBg+Q5YSAh06WK7zTDgwgU4edKSTpy4tp6YCGfOWFJqqmUU7dQpSwIeKOy4gbnWPT0twZiXF3h7W5bu7uDmln9ydbXcNunoCE5O11Lu17mDutwjcznrOQFH7pSdbbuenW0JWApa5qScwCZXGr09CycjEwcjCydzJo5Gls06jTKvBVS5A6Prk530cvS46wIwu05D36pVK5o1a8bs2bOtefXr16dnz55MmjQpT/mRI0eyYsUK9ucalo6IiGD37t3ExMQA0KtXL1JSUvjuu++sZR566CEqVKjA119/fUvHzY+moRcRERG5fcU6jfiVK9eCsT/TwmkX8My8iNefyTvjd+u6Z+ZFvMyplkBHbo6jIzg7WwJQF5dr67mXOetOTpb1nKA097qjoyVINZnyXa5c68Kchh8X2AxNQ38TMjIy2LFjB2++aRvRdu3alc2bN+e7T0xMDF27drXJ69atG/PmzSMzMxNnZ2diYmIYOnRonjLTp0+/5eMCpKenk56ebn2dnJwMWC52WWDHf1yIiIiIFKjYP0pVrGhJ9esD8PV/blz8/5YYlsDt8mW4dMmyvHzZMpp26ZJlRO3qVUtKT7+WcvJyjzhdPzKVmWkZ4YJry9wM41rA4eBwLRjJnRwdr6Xco2s523KCmdyjbjl5Dg58Nt8Zs8mJbAdnsk2OZFvXnTCbHBn9D+e8wdH1r3OCqNyBVSndrjnzBJBZcCe5Uz6K58QERRnbslsAdv78ebKzs/H397fJ9/f3JykpKd99kpKS8i2flZXF+fPnCQwMLLBMTp23clyASZMm8c477+TJDw4OLvgkRUREROSGfHzsfPzy9j2+vU3uYe8W3B5795/rpaam4lNIo+w+CYfpullqDMPIk1dY+evzi1LnzR531KhRREZGWl+bzWZ+//13fH19b7hfaUhJSSE4OJhTp06Vidsh5e6jPij2pP4n9qT+J/ak/nfnMAyD1NRUgoKCCi1rtwDMz88PR0fHPKNOZ8+ezTM6lSMgICDf8k5OTvj6+t6wTE6dt3JcAFdXV1yve/ZE+fLlCz5BOyhXrpx++MSu1AfFntT/xJ7U/8Se1P/uDIWNfOWw21ybLi4uNG/enKioKJv8qKgowsPD892nTZs2ecqvXbuWsLAwnJ2db1gmp85bOa6IiIiIiEhxsOstiJGRkfTp04ewsDDatGnDnDlzOHnypPW5XqNGjSIhIYEvvvgCsMx4+MknnxAZGUn//v2JiYlh3rx51tkNAQYPHkyHDh2YPHkyPXr0YPny5fzwww9s3LixyMcVEREREREpCXYNwHr16sWFCxcYP348iYmJNGzYkNWrVxMSEgJAYmIiJ0+etJavXr06q1evZujQocycOZOgoCA++ugj6zPAAMLDw1m8eDFvvfUWb7/9NjVr1mTJkiXWZ4AV5bhljaurK2PHjs1zi6RIaVEfFHtS/xN7Uv8Te1L/K5vs+hwwERERERGRe4ndvgMmIiIiIiJyr1EAJiIiIiIiUkoUgImIiIiIiJQSBWAiIiIiIiKlRAHYXWDWrFlUr14dNzc3mjdvzoYNG+zdJLkLTZo0iRYtWuDt7U3lypXp2bMnBw8etCljGAbjxo0jKCgId3d3OnXqxN69e+3UYrlbTZo0CZPJxJAhQ6x56ntS0hISEujduze+vr54eHgQGhrKjh07rNvVB6WkZGVl8dZbb1G9enXc3d2pUaMG48ePx2w2W8uo/5UtCsDKuCVLljBkyBDGjBnDrl27aN++PQ8//LDN9P0ixSE6OpoBAwawZcsWoqKiyMrKomvXrly+fNlaZsqUKUybNo1PPvmE7du3ExAQQJcuXUhNTbVjy+Vusn37dubMmUPjxo1t8tX3pCRdvHiRtm3b4uzszHfffce+ffuYOnUq5cuXt5ZRH5SSMnnyZD799FM++eQT9u/fz5QpU/jggw/4+OOPrWXU/8oYQ8q0li1bGhERETZ59erVM9588007tUjuFWfPnjUAIzo62jAMwzCbzUZAQIDx/vvvW8tcvXrV8PHxMT799FN7NVPuIqmpqUbt2rWNqKgoo2PHjsbgwYMNw1Dfk5I3cuRIo127dgVuVx+UkvTII48Y/fr1s8l78sknjd69exuGof5XFmkErAzLyMhgx44ddO3a1Sa/a9eubN682U6tkntFcnIyABUrVgTg2LFjJCUl2fRHV1dXOnbsqP4oxWLAgAE88sgjPPjggzb56ntS0lasWEFYWBhPP/00lStXpmnTpsydO9e6XX1QSlK7du348ccfOXToEAC7d+9m48aNdO/eHVD/K4uc7N0AuXXnz58nOzsbf39/m3x/f3+SkpLs1Cq5FxiGQWRkJO3ataNhw4YA1j6XX388ceJEqbdR7i6LFy9m586dbN++Pc829T0paUePHmX27NlERkYyevRotm3bxqBBg3B1deWFF15QH5QSNXLkSJKTk6lXrx6Ojo5kZ2czYcIEnn32WUC/A8siBWB3AZPJZPPaMIw8eSLFaeDAgezZs4eNGzfm2ab+KMXt1KlTDB48mLVr1+Lm5lZgOfU9KSlms5mwsDAmTpwIQNOmTdm7dy+zZ8/mhRdesJZTH5SSsGTJEr788ku++uorGjRoQGxsLEOGDCEoKIi+fftay6n/lR26BbEM8/Pzw9HRMc9o19mzZ/P8F0SkuLz++uusWLGCn3/+mSpVqljzAwICANQfpdjt2LGDs2fP0rx5c5ycnHByciI6OpqPPvoIJycna/9S35OSEhgYyP3332+TV79+feuEV/r9JyVpxIgRvPnmm/ztb3+jUaNG9OnTh6FDhzJp0iRA/a8sUgBWhrm4uNC8eXOioqJs8qOioggPD7dTq+RuZRgGAwcO5Ntvv+Wnn36ievXqNturV69OQECATX/MyMggOjpa/VFuywMPPEBcXByxsbHWFBYWxvPPP09sbCw1atRQ35MS1bZt2zyP3Th06BAhISGAfv9JyUpLS8PBwfYju6Ojo3UaevW/ske3IJZxkZGR9OnTh7CwMNq0acOcOXM4efIkERER9m6a3GUGDBjAV199xfLly/H29rb+p83Hxwd3d3frc5kmTpxI7dq1qV27NhMnTsTDw4PnnnvOzq2Xsszb29v6XcMcnp6e+Pr6WvPV96QkDR06lPDwcCZOnMgzzzzDtm3bmDNnDnPmzAHQ7z8pUY899hgTJkygatWqNGjQgF27djFt2jT69esHqP+VSXacgVGKycyZM42QkBDDxcXFaNasmXVacJHiBOSb5s+fby1jNpuNsWPHGgEBAYarq6vRoUMHIy4uzn6NlrtW7mnoDUN9T0reypUrjYYNGxqurq5GvXr1jDlz5thsVx+UkpKSkmIMHjzYqFq1quHm5mbUqFHDGDNmjJGenm4to/5XtpgMwzDsGQCKiIiIiIjcK/QdMBERERERkVKiAExERERERKSUKAATEREREREpJQrARERERERESokCMBERERERkVKiAExERERERKSUKAATEREREREpJQrARERERERESokCMBGRW3D8+HFMJhOxsbH2borVgQMHaN26NW5uboSGht5SHePGjbupfU0mE8uWLbulY92NirtfzJkzh+DgYBwcHJg+fXqx1HkvMQyDV155hYoVKxbb+7JgwQLKly9/2/WIyL1LAZiIlEkvvvgiJpOJ999/3yZ/2bJlmEwmO7XKvsaOHYunpycHDx7kxx9/zLPdZDLdML344osMHz48331LSrVq1W47sOjUqZP1HBwcHPD39+fpp5/mxIkTxdPIYlbUD/ApKSkMHDiQkSNHkpCQwCuvvFKs7ch93VxcXKhZsyajRo0iPT29WI9jT99//z0LFixg1apVJCYm0rBhwzxl1q1bh8lkokKFCly9etVm27Zt26zXKEevXr04dOhQsbdV/8wQuXcoABORMsvNzY3Jkydz8eJFezel2GRkZNzyvkeOHKFdu3aEhITg6+ubZ3tiYqI1TZ8+nXLlytnkzZgxAy8vr3z3vdP179+fxMREEhISWL58OadOnaJ37972btZtOXnyJJmZmTzyyCMEBgbi4eFxS/VkZmYWuC3nuh0+fJgpU6Ywc+ZMxo0bd4stvvMcOXKEwMBAwsPDCQgIwMnJqcCy3t7eLF261Cbv888/p2rVqjZ57u7uVK5cuUTaKyL3BgVgIlJmPfjggwQEBDBp0qQCy+R3S9306dOpVq2a9fWLL75Iz549mThxIv7+/pQvX5533nmHrKwsRowYQcWKFalSpQqff/55nvoPHDhAeHg4bm5uNGjQgHXr1tls37dvH927d8fLywt/f3/69OnD+fPnrds7derEwIEDiYyMxM/Pjy5duuR7HmazmfHjx1OlShVcXV0JDQ3l+++/t243mUzs2LGD8ePHYzKZ8v0QHRAQYE0+Pj6YTKY8efldr88//5wGDRrg6upKYGAgAwcOzP9iA+PHj8ff3996q9fmzZvp0KED7u7uBAcHM2jQIC5fvmw99xMnTjB06FCbUYYTJ07w2GOPUaFCBTw9PWnQoAGrV68u8JgAHh4eBAQEEBgYSOvWrRkwYAA7d+60KRMdHU3Lli2t5/Hmm2+SlZVl3Z7faFxoaKjNtTxw4ADt2rXDzc2N+++/nx9++CHfkYujR4/SuXNnPDw8aNKkCTExMYBltOWll14iOTnZes75vVcLFiygUaNGANSoUQOTycTx48cBmD17NjVr1sTFxYW6deuyaNEim31NJhOffvopPXr0wNPTk/fee6/Q61a1alWeeuopunTpwtq1a63bL1y4wLPPPkuVKlXw8PCgUaNGfP311zZ1dOrUiUGDBvHGG29QsWJFAgIC8pxTUa5bQkICvXr1okKFCvj6+tKjRw/rORfkRu/piy++yOuvv87JkycxmUw2P/P56du3r83P+JUrV1i8eDF9+/a1KXf9CGbOz8yiRYuoVq0aPj4+/O1vfyM1NdVaprC+ldO2J554Ik9bV65cSfPmzXFzc6NGjRrW3025j1+1alVcXV0JCgpi0KBBNzxPEbE/BWAiUmY5OjoyceJEPv74Y06fPn1bdf3000/89ttvrF+/nmnTpjFu3DgeffRRKlSowNatW4mIiCAiIoJTp07Z7DdixAiGDRvGrl27CA8P5/HHH+fChQuAZcSpY8eOhIaG8ssvv/D9999z5swZnnnmGZs6Fi5ciJOTE5s2beKzzz7Lt30zZsxg6tSp/O///i979uyhW7duPP7448THx1uP1aBBA4YNG0ZiYiLDhw+/reuRY/bs2QwYMIBXXnmFuLg4VqxYQa1atfKUMwyDwYMHM2/ePDZu3EhoaChxcXF069aNJ598kj179rBkyRI2btxoDeC+/fZbqlSpwvjx462jcAADBgwgPT2d9evXExcXx+TJk/Hy8ipym3///Xf+/e9/06pVK2teQkIC3bt3p0WLFuzevZvZs2czb968GwYn1zObzfTs2RMPDw+2bt3KnDlzGDNmTL5lx4wZw/Dhw4mNjaVOnTo8++yzZGVlER4enmf0Mb/3qlevXvzwww+A5Ta4xMREgoODWbp0KYMHD2bYsGH8+uuvvPrqq7z00kv8/PPPNvuPHTuWHj16EBcXR79+/Yp0frt372bTpk04Oztb865evUrz5s1ZtWoVv/76K6+88gp9+vRh69atNvsuXLgQT09Ptm7dypQpUxg/fjxRUVFFvm5paWl07twZLy8v1q9fz8aNG/Hy8uKhhx4qcFS4sPd0xowZ1n9aJCYmsn379huef58+fdiwYQMnT54E4D//+Q/VqlWjWbNmhV67I0eOsGzZMlatWsWqVauIjo7Oc3v0jeS0bf78+TZtXbNmDb1792bQoEHs27ePzz77jAULFjBhwgQAvvnmGz788EM+++wz4uPjWbZsmTVwF5E7mCEiUgb17dvX6NGjh2EYhtG6dWujX79+hmEYxtKlS43cv9rGjh1rNGnSxGbfDz/80AgJCbGpKyQkxMjOzrbm1a1b12jfvr31dVZWluHp6Wl8/fXXhmEYxrFjxwzAeP/9961lMjMzjSpVqhiTJ082DMMw3n77baNr1642xz516pQBGAcPHjQMwzA6duxohIaGFnq+QUFBxoQJE2zyWrRoYbz22mvW102aNDHGjh1baF2GYRjz5883fHx88uRff72CgoKMMWPGFFgPYPz73/82evfubdSrV884deqUdVufPn2MV155xab8hg0bDAcHB+PKlSuGYRhGSEiI8eGHH9qUadSokTFu3LginYdhWK6hs7Oz4enpaXh4eBiAUadOHePYsWPWMqNHjzbq1q1rmM1ma97MmTMNLy8v6/ueX1tyX9PvvvvOcHJyMhITE63bo6KiDMBYunSpYRjX+sU///lPa5m9e/cagLF//37DMAq+9tfbtWuXAdicR3h4uNG/f3+bck8//bTRvXt362vAGDJkSKH1575uLi4uBmA4ODgY33zzzQ336969uzFs2DCbetq1a2dTpkWLFsbIkSMNwyjadZs3b16e9yc9Pd1wd3c31qxZk287ivKeXv+znp+ff/7ZAIyLFy8aPXv2NN555x3DMAyjc+fOxowZM/L8Trn+/Rs7dqzh4eFhpKSkWPNGjBhhtGrVyvq6sL5lGIbN9cjRvn17Y+LEiTZ5ixYtMgIDAw3DMIypU6caderUMTIyMm54jiJyZ9EImIiUeZMnT2bhwoXs27fvluto0KABDg7XfiX6+/vb/CfZ0dERX19fzp49a7NfmzZtrOtOTk6EhYWxf/9+AHbs2MHPP/+Ml5eXNdWrVw+w/Mc8R1hY2A3blpKSwm+//Ubbtm1t8tu2bWs9Vkk4e/Ysv/32Gw888MANyw0dOpSYmBg2bNhAlSpVrPk7duxgwYIFNuffrVs3zGYzx44dK7C+QYMG8d5779G2bVvGjh3Lnj17Cm3r888/T2xsLLt372bjxo3UqlWLrl27Wm8D279/P23atLGZTKFt27ZcunSpyKOnBw8eJDg4mICAAGtey5Yt8y3buHFj63pgYCBAnr5zK/bv31+kflBYn8qRc91iYmJ45pln6NevH0899ZR1e3Z2NhMmTKBx48b4+vri5eXF2rVrraNEOXKfL1jOOed8i3LdduzYweHDh/H29rb2lYoVK3L16lWbn5Xrr8XtvqfX69evHwsWLODo0aPExMTw/PPPF2m/atWq4e3tbX2d+/xvR85txbl/hnK+t5eWlsbTTz/NlStXqFGjBv3792fp0qU2tyeKyJ1JAZiIlHkdOnSgW7dujB49Os82BwcHDMOwyctvUoLct12B5Xs0+eWZzeZC25PzgdBsNvPYY48RGxtrk+Lj4+nQoYO1vKenZ6F15q43h2EYJTrjo7u7e5HKdenShYSEBNasWWOTbzabefXVV23Offfu3cTHx1OzZs0C63v55Zc5evQoffr0IS4ujrCwMD7++OMbtsHHx4datWpRq1Yt2rZty7x584iPj2fJkiVA/tcqp1/k5BfWV27meufuO7n7Q3EoSj8oap/KuW7NmjXjyy+/JDo6mnnz5lm3T506lQ8//JA33niDn376idjYWLp165bntsAb/awU5bqZzWaaN2+e52fl0KFDPPfcc/nuU5T39GZ1796dq1ev8ve//53HHnusyBPSFPa7oqi/h65nNpt55513bK5JXFwc8fHxuLm5ERwczMGDB5k5cybu7u689tprdOjQoUh1i4j9KAATkbvC+++/z8qVK9m8ebNNfqVKlUhKSrL58FOcz+7asmWLdT0rK4sdO3ZYR7maNWvG3r17qVatmjU4yElF/YAMUK5cOYKCgti4caNN/ubNm6lfv37xnEg+vL29qVatWqHT0j/++ON89dVXvPzyyyxevNian3P+1597rVq1cHFxAcDFxYXs7Ow8dQYHBxMREcG3337LsGHDmDt37k213dHREbBMpABw//33s3nzZpt+sHnzZry9vbnvvvsAS1/J+R4aWEYec4/U1atXj5MnT3LmzBlrXmHfK8pPQedcFPXr1y+xfuDs7Mzo0aN56623SEtLA2DDhg306NGD3r1706RJE2rUqGH93mFRFeW6NWvWjPj4eCpXrpynr/j4+ORbb1He05vl6OhInz59WLduXZG/O1cUhfUtsFz/6/tFs2bNOHjwYL4/Qzkj9u7u7jz++ON89NFHrFu3jpiYGOLi4oqt7SJS/BSAichdoVGjRjz//PN5Rko6derEuXPnmDJlCkeOHGHmzJl89913xXbcmTNnsnTpUg4cOMCAAQO4ePGi9YPbgAED+P3333n22WfZtm0bR48eZe3atfTr1++mP4CPGDGCyZMns2TJEg4ePMibb75JbGwsgwcPLrZzyc+4ceOYOnUqH330EfHx8ezcuTPf0agnnniCRYsW8dJLL/HNN98AMHLkSGJiYhgwYIB15G/FihW8/vrr1v2qVavG+vXrSUhIsM4OOWTIENasWcOxY8fYuXMnP/30U6EBRlpaGklJSSQlJbF7925ee+013Nzc6Nq1KwCvvfYap06d4vXXX+fAgQMsX76csWPHEhkZaf0g+5e//IVFixaxYcMGfv31V/r27WsN5MAy0lezZk369u3Lnj172LRpk3UyiZsZcalWrRqXLl3ixx9/5Pz589ZgpyhGjBjBggUL+PTTT4mPj2fatGl8++23xTbpynPPPYfJZGLWrFkA1KpVi6ioKDZv3sz+/ft59dVXSUpKuqk6i3Ldnn/+efz8/OjRowcbNmzg2LFjREdHM3jw4AJvJyzKe3or3n33Xc6dO0e3bt1uuY7rFda3AOs/O5KSkqyP1vjHP/7BF198wbhx49i7dy/79+9nyZIlvPXWW4BlRsZ58+bx66+/cvToURYtWoS7uzshISHF1nYRKX4KwETkrvHuu+/muc2nfv36zJo1i5kzZ9KkSRO2bdtWbB9WwTLyNnnyZJo0acKGDRtYvnw5fn5+AAQFBbFp0yays7Pp1q0bDRs2ZPDgwfj4+Nz0B8RBgwYxbNgwhg0bRqNGjfj+++9ZsWIFtWvXLrZzyU/fvn2ZPn06s2bNokGDBjz66KMFjoD89a9/ZeHChfTp04dvv/2Wxo0bEx0dTXx8PO3bt6dp06a8/fbb1u9EgWXa+uPHj1OzZk0qVaoEWL53NGDAAOrXr89DDz1E3bp1rQFBQebOnUtgYCCBgYF07tyZc+fOsXr1aurWrQvAfffdx+rVq9m2bRtNmjQhIiKCv//979YPsgCjRo2iQ4cOPProo3Tv3p2ePXva3Crp6OjIsmXLuHTpEi1atODll1+27u/m5lbkaxoeHk5ERAS9evWiUqVKTJkypcj79uzZkxkzZvDBBx/QoEEDPvvsM+bPn0+nTp2KXMeNuLi4MHDgQKZMmcKlS5d4++23adasGd26daNTp04EBATQs2fPm6qzKNfNw8OD9evXU7VqVZ588knq169Pv379uHLlCuXKlcu33qK8p7d6Dfz8/Ir19t7C+hZYbveMiooiODiYpk2bAtCtWzdWrVpFVFQULVq0oHXr1kybNs0aYJUvX565c+fStm1bGjduzI8//sjKlSvL5LP8RO4lJuP6TysiIiJSJJs2baJdu3YcPnz4ht9rE1u6biJyL1MAJiIiUkRLly7Fy8uL2rVrc/jwYQYPHkyFChXyfC9LbOm6iYhc42TvBoiIiJQVqampvPHGG5w6dQo/Pz8efPBBpk6dau9m3fF03URErtEImIiIiIiISCnRJBwiIiIiIiKlRAGYiIiIiIhIKVEAJiIiIiIiUkoUgImIiIiIiJQSBWAiIiIiIiKlRAGYiIiIiIhIKVEAJiIiIiIiUkoUgImIiIiIiJSS/wd2YvH+VvjqVwAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# minute = Minutes.get_minutes([['April'], 25, 13, 10])\n",
"minute = Minutes.get_minutes([['April'], 29, 13, 30])\n",
"print(f\"Minute: {minute[0]}\")\n",
"\n",
"d = get_band_distribution(minute,\n",
" radius_c, counts_2018, radius_a, transform,\n",
" std_increment=[.2, .2])\n",
"d.hist();"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [],
"source": [
"minutes = np.arange(0,60*1440).tolist()\n",
"\n",
"dist_all_minutes = []\n",
"\n",
"for minute in minutes:\n",
"\n",
" dist_all_minutes.append(\n",
" get_band_distribution(\n",
" [minute], radius_c, counts_2018,\n",
" radius_a, transform, std_increment=0.125\n",
" )\n",
" )\n"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [
{
"ename": "MemoryError",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mMemoryError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[1;32mIn[94], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpickles/List_of_radial_object_all_minutes.pkl\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mwb\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[1;32m----> 2\u001b[0m pickle\u001b[38;5;241m.\u001b[39mdump(dist_all_minutes, f)\n\u001b[0;32m 4\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mRadialDist list saved to \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mList_of_radial_object_all_minutes.pkl\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
"\u001b[1;31mMemoryError\u001b[0m: "
]
}
],
"source": [
"with open('pickles/List_of_radial_object_all_minutes.pkl', 'wb') as f:\n",
" pickle.dump(dist_all_minutes, f)\n",
"\n",
"print(\"RadialDist list saved to 'List_of_radial_object_all_minutes.pkl'\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "mude-base",
"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.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
%% Cell type:markdown id: tags:
somehhow this was used to create the pkl file
`List_of_radial_object_all_minutes.pkl`
or
`List_of_radial_object.pkl`
%% Cell type:code id: tags:
```
python
%
load_ext
autoreload
%
autoreload
2
import
numpy
as
np
import
matplotlib.pyplot
as
plt
import
scipy.stats
as
stats
from
tickets
import
*
from
minutes
import
*
from
models
import
*
```
%% Cell type:code id: tags:
```
python
``
`
%%
Cell
type
:
code
id
:
tags
:
```
python
counts_2018 = np.genfromtxt('2018_count_250108_0209.csv', delimiter=',', skip_header=1)
day_min_counts = Minutes.day_min(counts_2018[:, 0])
print(f"Loaded {len(counts_2018)} rows of data")
print(f"The shape is {day_min_counts.shape}")
tickets_2018 = np.genfromtxt('2018_tickets_250108_0209.csv', delimiter=',', skip_header=1)
day_min_tickets = Minutes.day_min(tickets_2018)
print(f"Loaded {len(day_min_tickets)} rows of data")
print(f"The shape is {tickets_2018.shape}")
print()
print(f"The mean day is {np.mean(day_min_tickets[:, 0])}")
print(f"The std day is {np.std(day_min_tickets[:, 0])}")
print(f"The mean min is {np.mean(day_min_tickets[:, 1])}")
print(f"The std min is {np.std(day_min_tickets[:, 1])}")
```
%% Output
Loaded 31856 rows of data
The shape is (31856, 2)
Loaded 160813 rows of data
The shape is (160813,)
The mean day is 29.77885494331926
The std day is 8.978221476042602
The mean min is 863.0213913054292
The std min is 255.18749935067723
%% Cell type:code id: tags:
```
python
all = Tickets()
all.add([[1, 60]])
day_min_all = Minutes.day_min(all.tickets)
parameters = [np.mean(day_min_tickets[:, 0]),
np.std(day_min_tickets[:, 0]),
np.mean(day_min_tickets[:, 1]),
np.std(day_min_tickets[:, 1])]
transform = Minutes.get_transform(parameters)
day_c, min_c = transform(day_min_counts[:,0], day_min_counts[:,1])
radius_c = Minutes.radius(day_c, min_c)
day_a, min_a = transform(day_min_all[:,0], day_min_all[:,1])
radius_a = Minutes.radius(day_a, min_a)
radius_max = np.max(radius_a)
print(f"Maximum radius is: {radius_max:.3f}")
```
%% Output
Maximum radius is: 4.772
%% Cell type:code id: tags:
```
python
def get_band_distribution(minute,
radius_c, counts_2018, radius_a, transform,
std_increment=0.125):
day_c, min_c = Minutes.get_day_min(minute[0])
day_t, min_t = transform(day_c, min_c)
radius = Minutes.radius(day_t, min_t)
if isinstance(std_increment, list):
assert len(std_increment) == 2, "std_increment list must have two values"
radius_min = radius - std_increment[0]
radius_max = radius + std_increment[1]
elif isinstance(std_increment, float):
radius_min = radius - std_increment
radius_max = radius + std_increment
else:
raise ValueError("std_increment must be a list of length 2 or a float")
if radius_min < 0:
d_radius = radius_max - radius_min
radius_min = 0
radius_max = d_radius
if radius_max > max(radius_a):
d_radius = radius_max - radius_min
radius_min = radius_min - d_radius
radius_max = max(radius_a)
d = evaluate_ticket_dist_i(radius_min, radius_max,
radius_c, counts_2018[:, 1],
radius_a)
return d
```
%% Cell type:code id: tags:
```
python
# minute = Minutes.get_minutes([['April'], 25, 13, 10])
minute = Minutes.get_minutes([['April'], 29, 13, 30])
print(f"Minute: {minute[0]}")
d = get_band_distribution(minute,
radius_c, counts_2018, radius_a, transform,
std_increment=[.2, .2])
d.hist();
```
%% Output
Minute: 41130
%% Cell type:code id: tags:
```
python
minutes = np.arange(0,60
*
1440).tolist()
dist_all_minutes = []
for minute in minutes:
dist_all_minutes.append(
get_band_distribution(
[minute], radius_c, counts_2018,
radius_a, transform, std_increment=0.125
)
)
```
%% Cell type:code id: tags:
```
python
with open('pickles/List_of_radial_object_all_minutes.pkl', 'wb') as f:
pickle.dump(dist_all_minutes, f)
print("RadialDist list saved to 'List_of_radial_object_all_minutes.pkl'")
```
%% Output
---------------------------------------------------------------------------
MemoryError Traceback (most recent call last)
Cell In[94], line 2
1 with open('pickles/List_of_radial_object_all_minutes.pkl', 'wb') as f:
----> 2 pickle.dump(dist_all_minutes, f)
4 print("RadialDist list saved to 'List_of_radial_object_all_minutes.pkl'")
MemoryError:
This diff is collapsed.
Click to expand it.
content/GA_2_8/dev/mcs.ipynb
+
1
−
1
View file @
aa2cb37f
...
...
@@ -25,7 +25,7 @@
"For each ticket $i$ in $T$ associated with minute $m_i$:\n",
"1. Compute probability of being the winning ticket, $p_i=P[M=m_i=m_w]$\n",
"2. Sample $N_w(m_i)$; stop when expected value of samples satisfies the criteria defined above (sample index $j=1,\\ldots,N_{s,i}$)\n",
"3. Compute the profit from each realization $j$ for minute $i$ as $W\\cdot N_{w, j}
\\cdot p_i
$\n",
"3. Compute the profit from each realization $j$ for minute $i$ as $W
\\cdot
p_i /
N_{w, j}$\n",
"\n",
"The samples of $B$ are the collection of all profits computed for the samples of $i$"
]
...
...
%% Cell type:markdown id: tags:
# MCS
_see markdown file for half-baked theory_
%% Cell type:markdown id: tags:
Constants:
-
$V_n$: coefficient of variation of the expected value of the winning ticket
-
$N_{s,min}$: minimum number of samples to estimate the expected value of the number of winning tickets
Procedure is:
1.
Determine the set of tickets (size $N_t$) to purchase, $T$, defined by minutes $m$
2.
Compute total cost $3
\c
dot N_t$
For each ticket $i$ in $T$ associated with minute $m_i$:
1.
Compute probability of being the winning ticket, $p_i=P[M=m_i=m_w]$
2.
Sample $N_w(m_i)$; stop when expected value of samples satisfies the criteria defined above (sample index $j=1,
\l
dots,N_{s,i}$)
3.
Compute the profit from each realization $j$ for minute $i$ as $W
\c
dot N_{w, j}
\c
dot p_i
$
3.
Compute the profit from each realization $j$ for minute $i$ as $W
\c
dot
p_i /
N_{w, j}$
The samples of $B$ are the collection of all profits computed for the samples of $i$
%% Cell type:code id: tags:
```
python
%
load_ext
autoreload
%
autoreload
2
import
numpy
as
np
import
matplotlib.pyplot
as
plt
import
scipy.stats
as
stats
from
tickets
import
*
from
minutes
import
*
from
models
import
*
```
%% Cell type:code id: tags:
```
python
``
`
%%
Cell
type
:
code
id
:
tags
:
```
python
counts_2018 = np.genfromtxt('2018_count_250108_0209.csv', delimiter=',', skip_header=1)
day_min_counts = Minutes.day_min(counts_2018[:, 0])
print(f"Loaded {len(counts_2018)} rows of data")
print(f"The shape is {day_min_counts.shape}")
tickets_2018 = np.genfromtxt('2018_tickets_250108_0209.csv', delimiter=',', skip_header=1)
day_min_tickets = Minutes.day_min(tickets_2018)
print(f"Loaded {len(day_min_tickets)} rows of data")
print(f"The shape is {tickets_2018.shape}")
print()
print(f"The mean day is {np.mean(day_min_tickets[:, 0])}")
print(f"The std day is {np.std(day_min_tickets[:, 0])}")
print(f"The mean min is {np.mean(day_min_tickets[:, 1])}")
print(f"The std min is {np.std(day_min_tickets[:, 1])}")
```
%% Output
Loaded 31856 rows of data
The shape is (31856, 2)
Loaded 160813 rows of data
The shape is (160813,)
The mean day is 29.77885494331926
The std day is 8.978221476042602
The mean min is 863.0213913054292
The std min is 255.18749935067723
%% Cell type:code id: tags:
```
python
all = Tickets()
all.add([[1, 60]])
day_min_all = Minutes.day_min(all.tickets)
parameters = [np.mean(day_min_tickets[:, 0]),
np.std(day_min_tickets[:, 0]),
np.mean(day_min_tickets[:, 1]),
np.std(day_min_tickets[:, 1])]
transform = Minutes.get_transform(parameters)
day_c, min_c = transform(day_min_counts[:,0], day_min_counts[:,1])
radius_c = Minutes.radius(day_c, min_c)
day_a, min_a = transform(day_min_all[:,0], day_min_all[:,1])
radius_a = Minutes.radius(day_a, min_a)
radius_max = np.max(radius_a)
print(f"Maximum radius is: {radius_max:.3f}")
```
%% Output
Maximum radius is: 4.772
%% Cell type:code id: tags:
```
python
def get_band_distribution(minute,
radius_c, counts_2018, radius_a, transform,
std_increment=0.125):
day_c, min_c = Minutes.get_day_min(minute[0])
day_t, min_t = transform(day_c, min_c)
radius = Minutes.radius(day_t, min_t)
if isinstance(std_increment, list):
assert len(std_increment) == 2, "std_increment list must have two values"
radius_min = radius - std_increment[0]
radius_max = radius + std_increment[1]
elif isinstance(std_increment, float):
radius_min = radius - std_increment
radius_max = radius + std_increment
else:
raise ValueError("std_increment must be a list of length 2 or a float")
if radius_min < 0:
d_radius = radius_max - radius_min
radius_min = 0
radius_max = d_radius
if radius_max > max(radius_a):
d_radius = radius_max - radius_min
radius_min = radius_min - d_radius
radius_max = max(radius_a)
d = evaluate_ticket_dist_i(radius_min, radius_max,
radius_c, counts_2018[:, 1],
radius_a)
return d
```
%% Cell type:code id: tags:
```
python
# minute = Minutes.get_minutes([['April'], 25, 13, 10])
minute = Minutes.get_minutes([['April'], 29, 13, 30])
print(f"Minute: {minute[0]}")
d = get_band_distribution(minute,
radius_c, counts_2018, radius_a, transform,
std_increment=[.2, .2])
d.hist();
```
%% Output
Minute: 41130
%% Cell type:code id: tags:
```
python
minutes = np.arange(0,60
*
1440).tolist()
dist_all_minutes = []
for minute in minutes:
dist_all_minutes.append(
get_band_distribution(
[minute], radius_c, counts_2018,
radius_a, transform, std_increment=0.125
)
)
```
%% Cell type:code id: tags:
```
python
with open('pickles/List_of_radial_object_all_minutes.pkl', 'wb') as f:
pickle.dump(dist_all_minutes, f)
print("RadialDist list saved to 'List_of_radial_object_all_minutes.pkl'")
```
%% Output
---------------------------------------------------------------------------
MemoryError Traceback (most recent call last)
Cell In[94], line 2
1 with open('pickles/List_of_radial_object_all_minutes.pkl', 'wb') as f:
----> 2 pickle.dump(dist_all_minutes, f)
4 print("RadialDist list saved to 'List_of_radial_object_all_minutes.pkl'")
MemoryError:
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment