diff --git a/.gitignore b/.gitignore
index 736006e..65fa99a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
.vscode
**/*mt.ipynb
**/*mt
+.env
diff --git a/03.I - Geo-folium-markers-layers.ipynb b/03.I - Geo-folium-markers-layers.ipynb
new file mode 100644
index 0000000..eff0f8b
--- /dev/null
+++ b/03.I - Geo-folium-markers-layers.ipynb
@@ -0,0 +1,4911 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "toc": true
+ },
+ "source": [
+ "
Table of Contents
\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Intro to Folium "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "![mapa](../images/geo_portada.jpg)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "First things first: \n",
+ "- https://python-visualization.github.io/folium/"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#!pip install folium"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import folium\n",
+ "from folium import Choropleth, Circle, Marker, Icon, Map\n",
+ "from folium.plugins import HeatMap, MarkerCluster\n",
+ "import pandas as pd"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "## 1st map: Landmarks - Sonora 🌯"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "We create a basic map as a result of some coordinates with an initial zoom"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "lat = 41.3978801 \n",
+ "lon = 2.1899704 \n",
+ "\n",
+ "# /'grenitS/"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# EACH TOOL THAT USES MAPS: lat, lon -> lon, lar"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "map_1 = Map(location = [lat, lon], zoom_start=15)\n",
+ "map_1"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 1st Marker: Landmarks: Razzmatazz 🕺"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "razz_lat = 41.3977323\n",
+ "razz_long = 2.191110815"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "club = Marker(location = [razz_lat, razz_long], tooltip=\"Razzmatazz\")\n",
+ "club"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "club.add_to(map_1) # Invoice class -> send invoice "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "I leave you here the specific doc of the markers\n",
+ "- https://python-visualization.github.io/folium/modules.html?highlight=marker"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "To add markers to a map, we'll have to \"add\" elements to that map, so we're going to add them to the previous map called map_1."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# How to get location:\n",
+ "\n",
+ "1. Go to google maps\n",
+ "2. Look for something in particular\n",
+ "3. Look at the URL\n",
+ "\n",
+ "Example (after the @):\n",
+ "\n",
+ "https://www.google.com/maps/place/Sonora+Sport+Tavern/@41.3978841,2.1877817,17z/data=!3m2!4b1!5s0x12a4a31ef25e7f6f:0x8534d14247dd8c4d!4m5!3m4!1s0x12a4a3192255e3c3:0x66d21ce6efad4cfb!8m2!3d41.3978801!4d2.1899704\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "We add another Marker and we see that we can change the icon and the color of the background and the icon."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "To modify the icons, where do we get them?\n",
+ "- https://fontawesome.com/v4.7.0/icons/ --> If I want to use these I put prefix=\"fa\" (Font Awesome)\n",
+ "- https://getbootstrap.com/docs/3.3/components/ --> Built in no need to put prefix"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "```python\n",
+ "['red', 'blue', 'green', 'purple', 'orange', 'darkred',\n",
+ "'lightred', 'beige', 'darkblue', 'darkgreen', 'cadetblue', 'darkpurple', 'white', 'pink', 'lightblue', 'lightgreen', 'gray', 'black', 'lightgray ']\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "#### Now different icons"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "First way to add a tuned marker to the map"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "lat_ih = 41.3977461\n",
+ "lon_ih = 2.187674417"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "icon = Icon(\n",
+ " color = \"green\",\n",
+ " icon_color = \"black\",\n",
+ " icon = \"database\",\n",
+ " prefix = \"fa\" #font-awesome: fa\n",
+ " \n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "marker_ih = Marker(location = [lat_ih, lon_ih], tooltip=\"Ironhack\", icon=icon)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "marker_ih.add_to(map_1);"
+ ]
+ },
+ {
+ "attachments": {
+ "Screenshot%202022-10-27%20at%2009.17.50.png": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAANcAAABWCAYAAABckQPIAAABP2lDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSCwoyGFhYGDIzSspCnJ3UoiIjFJgf8bAxSDNwMFgyWCRmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsisP4oFyYtYL3rYCK7eNpN/LwemehTAlZJanAyk/wBxUnJBUQkDA2MCkK1cXlIAYrcA2SJFQEcB2TNA7HQIew2InQRhHwCrCQlyBrKvANkCyRmJKUD2EyBbJwlJPB2JDbUXBDicUvMCFQK8CDiVdFCSWlECop3zCyqLMtMzShQcgSGUquCZl6yno2BkYGTEwAAKb4jqJ8sg4fiyDyEW9IiBQVsJ6GYehFiTPwPD0RcMDHJIYopLGRj4vjMwbBEtSCxKhDuA8RtLcZqxEYQtWM/AwBn5//+PCQwMvH3AeFv6//+fP////w8Ayq5iYHieBQCCRV4gtWljDQAAAFZlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA5KGAAcAAAASAAAARKACAAQAAAABAAAA16ADAAQAAAABAAAAVgAAAABBU0NJSQAAAFNjcmVlbnNob3QqmWnmAAAB1WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj44NjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4yMTU8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5TY3JlZW5zaG90PC9leGlmOlVzZXJDb21tZW50PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KE82juQAAQABJREFUeAGsvXecZFl153nCe5eR3tuqyvKmDe1oK0zTAiSBkEEws6sVg9BKK2nEfmY/w0z/sR+Z1eyMDNLKg0YCAVoQTkDTTTftqk11eV+Zld5nZEaG9xH7PTcyqrKqsqrRjm53VmRGvHjvvnuP/R3zLBvxeO3cmbMyuzAvT77vSdmorMlE8bzkJCWNYduoiHtGJGBrEo8/0Hj7X/5qtYtY+FqlLKViXpLZVck1F6UUcYhrLSj7eu6VltZWWR9bkKnzU9L/wE759H/436Wrs0N+/md/RnaM7rn1mjWRUqEgifi6PP/Ky5LLpiUUCEmlUpUH9t4l/mb3rd/5V36nVC3LhctXpbu3X7p7esRms932CtVqSZLJjJTLZalWq2Lh1R5fk2S5KFVrTbLplKQ31qRzaKc0cW+eSxelNLRDFvhsvrYkC4M+qdit185vYUEDNbeMltslnHVIfHHWnLvG+XTUajXJ5/OSyZelq1SSSFu75NoGZGkjKTOnfyg7d+68dq5atSbeUJO0cT/u/mHJWWzidrvlrWPH5Bvf/Ib82I89Lj5PQAKRoHR2dIp9OSbltUXZaApKJh6/dp7tfsmkNiSbyUjH4LCEgk2yNDMpVejA7nBIMV9g35JSKlXE5/dKV9+wlJl3bHleuG1xeXzbndK8l8isyqX570vvUFT2sd8u15322yZe+11iszSZ7+r6x2IxuXT+vLgsZfGzrstLc9Lc1iFO5rWyPCfVgEvEdn29GxOxWaxSZY76X2NYrTZpcQekPWcR/4G7xV7MF+WLX/4SmyCcbFne+9D9MtgxLOO2S8Itm+9VQjbJ91ZEZtZFMmy473+AwTZnYrc7YbCKlFzbTJxJ6rBYlRPfZnCIw+UUbyEvQxz/zatTsra2Jo88/DBM/CN8/21O/3YfNxirb3BIOju7xGq99X4a56iWqzI9OydODnFDwOILSc1ul1K0hbnCAMmEVIoF6d61R0LesHjPn5EKgmKpXJC11QUOSUvAUpSNkWjjlGZzU5acTNpjMurpkM5TJ6UYaZLl7m6plgpisVgMg0gtJ0sWSMEfhcBcMPCyDPb2XjuPhTW3+/ziiXSIPehngk7x8N1KpSLx9XX5yIc/LK3NUfn+D16QE1zDxn3+6i//qnRBN+t2j1jsGWkw9LWTbv6SScUlsRGXcKRFNpYWJT4/yzpB6NybhfN4/A5xwsQVhGQmm5K1lSUJNLWKrlelXBKni/Nvs67JbEzOz35P+oeVsY7ckbFslrA4bSMwVuTa9HSvmpubZcfOHXLh3AUR1j4UboKe3LK+uig2h1Oq2zCWlXWp1qpb2Ep1hkW8bq+0rq5LaGBUCrCLLba+9vRT7/uAfOITvyjDQ0NSgJubQ2yARGW9tswJqkbb1GCCqrsmlbWs2GsOJI7z2iR/5F/gduaAtC7ByLOSGaqJLeKUWqUmrpJf2sLd4vV6xep2SLSXxeXE33/2+xIMBGT/vr0SbWm94VI1JLEFLaGyw+pySXtrVPp7uuWNk2dkdLhfBnf03ZHYbzjZ/48/ytWK0Vg/KmM9y720trVKhI3xvPqCFNhYYUPgALHbHBIolVn3srT2jEjJ7pASEnQF0b28MCMur1+C/rCUZlbEYalKLsr3toyspSRZW0kC3lZpcngkBvNaHS6pMUdlMAdMDElIIp0Tm8srxdSqeD1IZYaVa0VsLmmBkDztreLweMyczIe5rHR29UpHS1SOwVRf//o/yY7hndLe0i7pTEpGHnqn2NGS5eUlqfiYE8y4dShjpdbXpL2j1zCQzWaXHBosk06i4e1id7rM/JTQbU6nuNwehC6WSGxRfNyz7m8ivsr6OMXGPTRGKrciFxefkeHRTjm4/15xcK+3GzZLSFy2UbEbjXWjwNW18WGNuTxumZxfZo29YimodRETS9inW3MDEylj6X83shYCHn7we8KsvU/sXf1y9fS02P7sz/+fp+99xz1y6eJF+e3f+R157fU3ZGx8Qvbs2CMtzl5Zk3lODvnqRdwwmLOKKZAVZI1R6be7oW3fV+Zi8WdnxyU3ahV7Ewyq5y3XxFnwSluwSzwwVy6ZFXcAAigW78hc8vorUm5HW0AUujFWJGET5sqe0VH51je/JSO7hsTvvb1Jse0cf8Q3S5g0VyampbOnV7q7e+7IxKViSV568Yeya6Rbwh6vrK6tSDIYQjlASGyKmpFmyyGsaCwn1hVMu3BINpJxWbh6kTXxQ5h16e2DwYqTK2LB4ii0cm+6+5sjg62RjXgglG5pCUWkMjMtFe5fGUyPUxPMA0P1vva89CQ2pNDXL2VMdSfCrls/515sgXD9bJgypRSC9OXnxYopWwj4ZWZ+HrO9RXp6++XL//gVed9T75PxsUnpHxiU0PKi5DBxKxBpg8HUFIyvxqSju08sXFvnYOVePWhIJ8IwgTlchMncasrpGvC5aig7e6naKpNJSj6bwXyscA+Yqh40KrebzMXkzNx3pG8wKkcOPnCHtYdukzmZvbiKoOkQr2/z3hoLtvmq1w0Gg3zuZU9nJL+xIPYoWou1sUKzfHyNwfRYNQe3DhUMPk8IwdYkgcGdWAABBERJbP/bn37m6bXEurzx3KuSTKXlYcyppaUlNMU+iTiCErS1yYaswqmYMYyaBwZz8Nd6BgnqEjtS70caTKjK4scSi5IdrtUZa/OLhrmKqNQQzAXxxacXZey1S9LU33pH5lpGAl6ampI4/lY4HGYudckWSiWwuELY7RWJYiL9a49CqSgzC0vS1Nwqvb19d/SxsumsHHvzDenrbpEwhBuLLcnq7JQ4kZZFNkUloY21sSDFdRdz+DNFGK5Ytcrq9GVME/zRrT4Hx/jUp1zGx4HBSk1uqW0xXTJSlLy7Iq5EUbqee95I9AxrA0WYZbBALIXuXvHOz4g/nZZyz4B4WiE8GMbiD9aXin3Kz06K/RtfkdTDj0ocik5urJv7vILgHd01Kh/6qZ+Uc2fOyP/9X/+L5IplGXn0EbHp92EGNYzV9y3mc2aNUskNrJO6Bi1DdDqUgQIIgBr3E19dNT64ugrqCugclclcaHWn3S0lzqPnsuID5ioJubj6AxkYapK7Dz1szrXdP2q2raHxzk1MQrn4mUkVLi4jvJVBtht1BvPJpZkpLAUP96vH1a4xmH7vJr4yp/E43RL2RbmfVs7vMwIk3N4ktnd/5uee9hTtUlzKyK6duySFQ23jBm01m1wYuyj9Hd0ScbZJqrbBJOsLU/PCYPbKJoOhwd6OwZhRARNiPb8uxX4WMMScttyfpWwVfzWItO3EP/BIFee7yCb4W0N15kLK79+3X6JqRm0ZJ85fkMsXLsrR731bhpvCEunpMwRa9QZkeuqqWJ1eaeH9f82Rh7EWV2IQeFj6+vuvMfQt1+CeE4mknD5+TFqiAcPka6sw1vQkBNeGLYZfyTHuxJoEV1cEUS1VleBsYAXCK+Wz4kfYqbl7i93PMR63X2rrgE65otScmMY44zVDDOoWF6Tot3NMs3gWlyTX3rEpeWEwtFiF72fRUm6EQxRGdrPHVq6powoQlF+cEesPn5UEAFKigrmZTkgZ/03N86HhYYjeJW8eOy4XAMJ+7/d/X1ox18uAEV2YvG58KisaKWe3SdvAsLR29kiAz1cmxySFtlQgS/0ovU91LZzcc4D9LeAzZxL4nHymzKXWiHnlPB6YVjXZwuq4jC+8IP27onL3wTswFq7NEmDEyZMnJbfhF7ejWQqpdZmZRKAEwxIIbAqRWzZN6hoMLTZzdVEsrqrYYXIdKgTrRMsabhl2hGKzzSfdmar4wy2yPLcupVwef7Ustg985mNPW1x2abWFJDa/JPfffx/q14Pj+iwOootJxuXe/QelnLNLwZqVcgEJwolqARvEoBoME/FOPhgElE8lZbW6ItUBpIHXIRVrnUl1jiqNfBYYCx8v6m8RO9esOS0S7WkFPSptMlfQaNKbmev0qVMyMTEhh/s65B4WBOcA8wPzkI1pxjwM8J4Ff+BOIMOWdXrbX1VjKWN5ASL6BwbuyFgbGwkY/7yUEvg2+JDqP85fuSgRfBX1I1Qi6n4VEUyW2Kq4s0jncARggL/5wMEx/gLWAsRWUMJHEm8dKtnVrHRu5MWNKSn4CdZSFb/YbphMNVgO4eTowjR2gjBiYtfNGYhDtQhE2w6DW1rbxNpAgPF10oAXq/GYpCMhyTKXEvfcGOoL6cw93qDMzs3LB598l7Sh0VqxcqKAHSoEatCiL5uVMH6au6kF+VGVVZg1D8E50QYGnIB5ivhyqknM3ui9IPG9Ph/H5aTAZ1XDZJiROkfWI1Nck+nkUenZEZV7Dz/amNK2r7PzE3LixCmxlrsAYUbrxyB8oDyZm5oVly8oISyb240IGtWNBbUQW2H+Jfy9OoPpnt3IWgg5lw/lg4Xnx/xu7pBcIgNCHZQq5rxdD96wZMW1IyiHu++XlSuLcvHsGfmZn/5p2X/goFy4cAkH2CPNzmaxAYGsxjA7ljak0mqTcgcMZ6nIxuyqhFQKq39jOHxz2ryXxSRYs8HNAzirLrZmC42oPRuw42yCNlVqSGzQLB1OiEltc0UmtxvKdGNXrsjk5JTMI5kzaZ/sOHyv7FDTR/0LNsth/AsP10+IfXpCSh0d253qR35PfazZxWXMz2bpRWMpA287uOeN+IZcPHcWYs9Jc7RJshsbxon3IjXzuYxByfS7NSSsMkmiq1vKwNEVTB+VhDr3KiZutqNdqmh8m0p7aLyGFtlql1g5xh+Oipv1cC9npLSSlXV+8v34ZSGHxKwgeNBQT94v4Rifr6clh4logchDEAIiXYTvmwFBy/QkhE2YABLKwCAqq50Q2dZRNMI1IQ/fd48Uk2sSH78s7u4hWc8k5LnnnxMHe3fXyE4pLK5Kk9UpQYRpfGFBgjCaMpIyazoRZz3ShCJq+F+YfvhSClaoaRwGOS0hCPLct9KO3mPJlpXx2EvSO9widx18cOt0bvl9dn5Kzpw+ByLQKy3Nu274vIbgccMsF4+/bsIVA4ODN3y+9Y9+9liZ6czlkyx5UbzOW90f3SufOyg2NFa1rQvB4ZS2nd2sXUZWIQ/bT33mf3pa+TFtKQBWIHVqTjnQ0ikDmICOlg5p0w2GCJKobHfVLk2eVri0VazZan0jWu1Iy7oPVs1h62PWGQaDzlP4QnFXXEr9LJzXhqnJK6JNNZciLlFMwc45FtKBmSkeCXqaxKXoEZugQ6XY95991qhq9QEbmktNly9+8QsyDoNV8A+S+A6xRApzq0WaiY0U5+eQ9myaSkq0sBXzyoKpUkEz3KwBzIXe5h9FBa9MTElra5f09IFA3o6xOE8qmZIzJ4+LHWg96OfaEIcCCeo3KDMpESmBOrHTDfXCjLoWZdZNY1LRMyekFo2ivUG/dB14VU/Svx5j3Vi7rcJL583fKogU8HDigBfnY5LrCQIs1FHUAuZJERM+HM9ISwrmZE/97G8wgrBEU+jQeFNpaV7yQOApBF5sbdkwgkLSjb0wB27+oyZiHrChDHPkmqLiQ2j81d/8NVB7mLiURd44/paM4Qt3IjSa2ZMCJn5bNyY061ZWDQoqqlrUjvY0zFzgPdbYidWh96xrpOaioonxzLxcXn5edu7pl8P779s6jVt+zyea5MrJCdYDxDR8G8ZxQIcohPjSMprWKU1N2/vkqi0DmMFOq0uWQTsr1aKxJrZeNAK41L2ygXXQA93XfS0r/v4aSHgOjV2nYr6hDBYjcLzWVZH1ETTJlbNSeONVw1h/8qd/Kn/4R38sX/vGP8vF8Rl57eRZKVVBpRKqiYDnI8CrgxbZ8CSwm3G0IaIsF0kDhZS764y1dVL6e9gRlRaczMj4ErZRBe2TgVHqMG4ZB1mHEtt2w+5AmsFUShS4mKBNLpkDyfrSl74kJy9fkdiZ02jZjDEn9PuWfhYaMzHLDdeUqNXf+RGHxrHOXx6X3p5BGAtU8A6Mlc/k5ejLL0oluVKHdDeFhBUi8fpDxjGuqmkFEyiSxtTNUNOpqkFkTKENL/Nbw8HfNMdU2jsANHzukLSub4iNe77dKOCnVVs9UvZfv78KYituyct8X5OUB3qBim0E2UHrNNjGUIZPr6/KwlpMZplbipiaC22lGstYD7e7mPku/huxKRs+mJrnH/7Qh6W7q4vg76rcfeRueeWHL8rk1AwCuktOEkdKFzFbUIfFUh7fB3QNBg8R+yoWshLHNF5ZWSDWB83AgMrUZQT+XOq4jO4fBgE+fIeZ4HrCWKmNNta1XXYMvAOaAF3Vi2030GAWZ1mmL52SmanJ7Y4w7ylA1t8/ILuH9kmp4pQcQqExvDBTW9EqIWjJz31U8DnV+pArF6SCb63hpjq8tvkNyFXWamnJuoiaP7FfBtJhOffC87IKmvOpX/kV1O1p+Yu/+isg2CeJovfKWAVGQmXrqAXsUum1yPoMJtBiSsqeKhqLTd6y0ZuXwUZtEZ/NTXZGVabu65GV6oa48orENJip8dr4xo2vKlWikYhM86rfqSFtVeKVYM7jq3EZagnKIMzdg29hzA0kpAMQwZ3DLMLc8BBENcuuJuQdRonFPD82LjtGdksL8Z87BbVL+ZI888x3cOpBLQtWQyR+sh0a+6uEqkHTHNBzBc1lRzJnAAoU+TPDMBhh+7ZOKXFfNjSdDo2f1PhutpOMCEIhVjatgua4eShcnceUS+4IY1JeZy5zDjwl9WstTSGxwzQWhJEZut5oyurKomTwGXLMK7e+bExNR+OYmy+05W+1GlbmYZ6RvciuLvnd/+t3JbORlh//wAfJViFmiWbsG+hHqIjMTc/JwECfZPEPuVXjQigDKWNpZkikvUcquZTE0KCqsYQpzmXeIvOiWXbvPGjM5S2XvuHXy1fPyMQM8aU014QhC+sJ6WwfkPXkqiQz60Yr3vAF/lCcgWCDTJw/AelYTHbNzcfo3w0GUxP23NhpBHZFvAj3AOhg2QJcD9OrD+3ywTMAU+usSQwBoZky1zRX48SqwbI4w4shYOHuJjkOjPwgIIeP+NO5C2fl4N0H5Sc++BMSxr/qde1DxW7yp1Irpl+pzybJobLkdmLChPnsJuERwXdrySA5+C9vq8q8E/OC/7AXG1O4Zoroot9utBNgvTaQ5nrzPYP90qTIFXEGX6BZliauXDvEqHlQxJZ4Qvzchw3TUhnydkMZ68KVqzDWKJbUnRkri439T1//KgHsFqQYGj2qDIMTTpyqoZ30OkpMHpAqBS3K+FEOmEhR1GsDYq+iOcqsWRkiV7jcgc+oQxmmiDnniGCSA2TcPNRSSHb7SCVTs/z6p2C5Mpz0SveaDeCCjAj1obiuGRfPSf7yeRmvlWVpfkoK+Yy4iUFtYIKuw3CqUW83GowVItSxQcrQb/z6r8uhvQflPe96D6DYAzI4OCSD/b3yWSyeRx59TFpZw3ZS20rFHEKGNWAtdM4prtWMQNGAtj8SRWiPiCvklZnUMWnv88oBAsRONZFvM8Ymz8nY5Vnpd3XKzq4I/vCg0abzl86JDw7t6x4WPwCUIo83DJZAkxWqtoJcQcAs4hfebiiDjQyPyM6+UbElSZNyAHg4SANr7ZdMoSpX37wkOVyYBBp3xesSd0ubXN547lbmalwgB1dPVpfkf/7Up+RrX/+G/Ppv/CYLU2YB98pv/dZvyGf/8r8DFVdlV/UIcvG6ArRg61vaWAwYbesmKxN2OLtk+NVZ6X3+PDEoNrTABm6lvs2Lb5AqU8jeKp0bc9PXDkyNOpGgvVDNZSS6EwK0IFVsZDvY8OvcpPHU/uHzUGpdnStJ1YZHJTO4A/HBldFg1whNT7o5NAwwhjkzwIK2dLRxyBZqbRy0+ZoCCX32mWdkz17sbuBvvWcL0LivJWJMatVUUOm1b+kmu0HnVNtmMeOyOPbmmC3roKZjhZiPZjd4L54RB+ERM5iHolgtgAYDE5MEd+vEXwTGzkMkuTbwsE1zT493g4/tWnfIvktr0sRaeDadctX2qdUNuYIGnNmxiwA8fh3EnkPzbYCQKVqcR3MmlrcnuDIASmxxXoL4sKqNS9kkFstVeeydj8p9D94H0DQmnyEn9JOf+hV54KEHZbC7W9796OPifOkH0kpal4cwhloQGgvzBSMIizrz6Drjgctk/HVp7rbJvUceuS1jKeNPTF+Sy2empM/3AMBJC3uOZudHgaMgvt76yrysjk9IexDsINopLtDJm/fS6lE/LycXT70pqyuKDl7fq/qi1/9Vq2UPtN87esT4yzbWyE9OZSGWQtMHYOg88bpFScYW5OTVf5JdB4fqgMbWk2z9XUGOMiDJhx55CkTPLnt275W//pvPy4MPPUSuGDlUSKJRiMnvHJSkLQ7BIGH57+bhsDik09ktFgKjSZhv5lCLrBTxtTaHBpFdJYLImqGBY56aXkEaXJFQT1Se+8FztwAa+rUSPsrRl182ixUMhUGii9Lb149jSU4cPkAnCapO5pwGgLBdOS8EXMzCK584kM4ZnGjf3LTUyH6AGzmjcgXnRWPN4zM0t7ZLF0RxO1NQN4GkZ3nzzdekDejV5bkRTbIo9Eu+XAGwxQAZgBpmY/leiY0o81Mh7UuFgqKAmqVhQ6NxkFmVGtq4zPdtwMKaN1lW85Bz6KgyZw2ShvBT0oQb8jBprJtgaydmnxF1NgmATj2aH5CuLPGizm5BpZvvIiElvRInUWCyHm/i2g6I2ws8rddWX1bNSzUzoyBgalZvHRrDScRi4if25MVvaqxPhfMkN1Y577KcOXde9u0/QIy7KJcuXZJ77n6HDO/eJdX2TvFxLwnMcSvr4Na1h5Y1UK5rUyhlZSr2urjCG/LO+99rTOKt1278ruDHDHD72TNkr5T7iCmFjAWlprdqRB3KZCqI0gTxL1ye4m838bh2E14qq3+7RSt7WcMoqOnK8roJAntgnJuZsHFtzUVsxf0Ikkxehm797REJOiqSJSa8kFyUywvPSsdQQA4euAefNQuCdIcxTXbGmDcmD/zk48bJPnL4ECaiT+ZB5Gxq24/sYeIe2Ws7Ik2VTpIjb0w3cnFTA2k2nYnoKERdsl5aveWK6uTbiHnp8HGzgWYkYvX2c2sjYKmL2UUWujKWD2RQpa8xZci9a1gBLrRYoXeQzIhVk06l51eCaMKcsRIb8k5OkJFP9gEEUyPjIUm8qRWt2INP2SAc/c7NI5VMEks5DpGhpUJIv22GDd812tVphI7GblSD6WsWqV0hqVi1eTMEbCQ5Gk5RRB3KaBq0DAO+BDBx7Zho7tkpsaPl9Bw6SgMjkt99AKYISDOpUiMVj4yu2mR3sU12E9/ZN5URX5zjQTgbjKUAUHX8iqQniL8xhw1QLRPQ5XyKaoaAwdVE82G2aXpSGQ1aVmDFXBKhwN/J5DqCxCOeYOD6+jCnPFoozvn8IJPvefRB2T86LB/76M/LufPn5UM/+2H5m7/+nJwdHxf76D4Jt/eS9b9bglzPqtYGlkeFPZuOv4nFsyAPP/C+OzBWVeYWpuT82Qvis+/AVxsG5bbKWmLFQPwaP6upyc8ooGEThZp0Du6VjXQZTTctQVKgmgBRQoEofpxaONy3rwlLqBua88uZ8dOyDjp4x9Hbj0lbkulTV1kfXCCE0VpsRmaYf+dIhJgs2k1jeN4zi2JPXQ8UbnfSWXDEC9V5CbSHCb4FZOfICAv3Udm1a5eREJo28uz3X5ILL1yVUIl0fRhKhwem6yoEpefoVcAEuLuakXgJDbfFBNruetawS/rvGtnuo2vvaSaHgzy2J596SiIQV9gfwflEAqIdDeS/xSZVKWTnJ7VKIrL6QQxlnMr+u6WK+VC7dFZc509LjrIbF35Za9udTcEiTBnDrLJjVhaxuePxLCBDneivTZBf7FYH5RUt0kkJhab5pDF3VctAyjjBQL3AwEpcGh90oQm03ARb0txHEHMrynFWfLN1MmeyJPDaMNPUZDSD89UwL30wQWu6ICOXl2XXZFZ6cz5pL/ikcwnBBELaAC8UicyQIZEkJJHnO1a0BbPgb8pGlIE2hyKFUTRMhOyNHISa4vMMvlFFiQjmVj/YA9rY0BC6lVlM4zROvAftp+ZujHnm8N9mZmZIk/opE544zxqPju6WK1eugBaWZR3go0KycDNmYjBXkJXcmHijSRjrqdsylk5xbkEDxMfFWumScLDPzFrjV7awV7KVnMRTzNe4FTA74SMb+6kZJbViGmVQkKmFMeZGkBt6aQq0SVtTJyZzCzA7JnWnXVbbC/LmlbdMZcXmkmz7kt1IiYWgvaZ1LeUTMulal/aBMNn5h7Gc6grG9gtPPPG0HcKoULdSBUG53SDvWXzYlq2eiIQhqJHudvFgcytC9zef+xvqYJZw0B2SWUvL8AjSBLUbcXeJG8lRqRRkobkmySqByc0419brqFnoLvulNaDpT25ZWyQoQKDa6rXL88+/YKLp+zEzosR/to4Xgb0H+gaQHAW0KmYJ6FsCAKADc7VD0T0IUIf+Cy0j7osgUkD0QNtq7mjuWA2TstTVLUtVYkWYgc3t7UZg6Pe2G8pY6wRjC8Ua2dRE4on95fOAQBmSjvDVvN66FoMtCDx6uR+vKYVQE6jI9fOYiTqvULT5BqhbU4EcaCofmxaAmL0jO6iXWiZQmyR5uiopTCGtoKkgEWvsU13Lk0TK9/JcI4uAqyEUMtV63Mu9Y9QwkLkH6rmq05PGt0vAPBoQ12ReNZvUPM2xJnp9g9Jt3rT+rQm2WnKi9XJFCFLX2A2wZcw5PQ6Npe5BjphXAGTUy3roUJPSaBAY7Z5775O/+/u/I0mA7H6C8DEEnPpsCQhfz4/hKyFik/G2JdkH8qbo6O2GBoiPYYZ7bTulNbrr1sPwdfEFjAWQS2VIJHayn/1ccw4NlSLuCULIPDTVKg1y7IMOutp6uaZD8qRTjLsJJQHkZa2YrnOrmHsILxDP7Yab7Hlf0Mee4Scmp8XiW5P+AfI00eqNYW2OtotjAXj6UkzsyduDCOQ7y6ItIcVRv1h3NUmCwHEOKfpHf/xH8s1vflMef/xxuHafXD47Jp22PtlR7JPeCzjHtaDMj/ZIzLYFFWtc/Tav5TSoy/jCtU8VWdQ0qZtHBMd4Bf8oShaE+mCTmHhXMXvKpDPcrB0NgyHBKmi8qmoPiEuHmpYuTCtvLzEg/Cy11W83EmRanDx5miyVOEylwV9MilALmeJAwH4NtvtlaTEB85G8iqnjAtWz8apDN6lnECSMa6lf2mD8xrWcSM4AkrD14nnxoTksMFX1/FlJwZCqE3WeebRtkUwIK8Rp4X0zIOAaTJKGwVbwhzYS5BR62COONwPGqoEIFmanJQuTaM6iajEzuFfN8NBMgyTJ22r23TAQAn58vmBT1PiPKquUaQqgo0qkGqtLrMX4nBxGGKUxFKzYINYT8VFnh7meIoh/YPdukm3JnidD5NLly5ifrXL0tddkjMLQ4rCHMhaEyaZP2TjP1lc1BY+++qIE3fvI1dy59aNbfq+AAsYLmNydIyCggD0FrAyfgk1KBfVRQcBUtrgdWpTZk/WLD1/V2h6UWGdFTs2cNjWOje/oq8az9N5txAvdUTS4g4x6Eil6+toRpDcKBruf4jA1kdYXYuYcudFmKaPFthtEWCRZy8oqznuPr0W++oWvShTT5unPPC3f+e73TEbFo488IgH2yBInp289J/lIQhxebup6/G27U9/wnucO0OvWAwOYIaugW5pwfPb0GfgFosWsqpINrwtw81AmVee5DEFWMWVcmFUa4FVCbG65MSn45u9qteyraMoaxXwWfzN+SYSMEUATmEJt91CI94C687kQTnRc5mZjYutxGbRL07x0aPVq79CIzF69JAkg6BBEqRuukl7D4S2avf7Io1Id6pLk4pqUBgcIZzTx+fXF0xhXFfMsiAmb2HOofl7m70UzWkk38lL64MZM0qGZNRtaWoLgyQF1l1TocK1NJ8ocozEa1UQZ/LpUbd1kbtxM5KrlFRVUk1F9Rs1yt6KtNOtEoXg3GqAxFKApQtCaya/7ESPe8zM//RMSII4WTxXkqy+9ZATxG4R4dH6DA+2Ud8yCMl0n/Ma5Gq+zC5Py+qsvUzVxH8nD+JB3Gmz76lJRRnYcYV8tWEFXsCAqxoTf+jU3NW3tUYAeRgUrKzapAE9Z9vcTBPdlZKrZLjFLUs4snpfD0Ewjk6OEX6735Q1xz/iJRZmWqieJmL0R0NLzsu/UogCHRoJIp9kk0C8aLHPdBteDGgMvR3rjVtn5rVdFiCG968n3ykcO7ZW7UY3/7hOfkF/7tV8zCNszr7yCKUMca89+SeMkalZDu7OzcZq3fQ0Qr9jx4J63Pc7jc8si8GcUAtzIAXlvDqOUFLrcbvChA9PE9coLEkNLqNnzdkMDxMffPIqJuyEh5E6gmoDJVlmCM9jmS4ZI9BzKZH5SYlpaenDW+2Vifl3OkJs5V1qRM7VTsuhcMyU1PQM7DNOl8X9qbGgaDaAlMr6lBcrNCRhTLpLF/KxyX0VQuJvjTVm0jGN+ViwQeJFcOR2aqtPSQj1RkBji5q1rBbFmUJRgHmL0MJYy6Y1CR30pBVjUpMukUsYnUyK7eaimVVNRmSxCQF79Ww3NbNVY+h1FQksAMwrOVNCwBUxcFxrCj2a9zFq8F5oZn6SeDyb9wPvfLwsLgEmiQuJW4tTzzcFYLx/9DoLnHW/PWBw/ObaBhtzHOiAwMiuSrybFiQbdOlTIaXKuCzNcRwIBnUYI5fB5l06ckaY5WkSkO2XERU1cLSMrcxPUhZFRw3D5XGhx1YKkvpZfA3QDcSZstd2w6gIogwXYyAgVyPbpDcrLV8kQuHGB1fkNVsikPksiL+UoqxQ6ngwtyOQQjvHRHxqn8f/9ztfIJF5kw2vy8qUxyeCottSAc61e6ZxJyWCpbbs53PJeGtPFjT0r+Gt3Gk6kT5osZLePokMYoDHKEJTCtdsO5qapKdiRpvSjYbZteyxvaoD49Kk3JELxpvoeIBDSBMrlruakr0nL5RfkyuXjlOrUgRI9j/oufjLHuzuHiWl1ypVjs1K6jNe6Cf8qQXYN1EGOlflpY47q+oNyiCWAhFemgOnzaJztNHCRPcs89VOU44elDJhhA0AyFdxYII0xM4MZCEE4AR9M/KfBcY0DeFVULRFfIUrRK8N7D0kzyKsCE5rCpuGD7YYymWqyIOZkC+br8hyFncynMdQcdmB6azwvBXikWleZdYM803c99pBJap6fnZfH3/UEzGrH98rI7/z+H7CedzVOce01A9O/dfJF4lSPgpq+vXCeuByXfYfukwjpSIrmLi/PkAiMuXrTvfuxMDqaesx1cmjfDUAbRZo1WyZEIPvq6VMyjcmaPp2SSKGTzPeoSX1aHpsHFCMRnDhjuvQiFlISxroNnXF2++rqPMmV9E3AFAviZCsQkZxeJ11GJH2oQ4L2ui1tA4gIWP2yeP9+VCGxILuG+0qSx0S0f+Ln5OoPjsrs5WnxW9zywgsvyLvf/W6xEqkuFLPS726T4vq8hJEK+aeOSLpCLlmjhcC1pbz+S24xKSursxLur8dmdG02XZfrB23+pj7S0sqyqQmKk5Ono4jvoCbHdqNA7GUZYmh58BEDBasE0qE+Wo65lpGyFRhTibqAD5NBu7VQ+mEhBtc9SNMWULC2wUGpTZHBgqTvJmRQBdQZm7xoQhOdPTsJC2BuMi8lREX9grsOS3xtQS49d1VyQ8SVeshSIAuhl+wPlfR6jGZdZO59QOJzk5JZx1fd4sPUZ3j9X4XI9dz640AjKBp2s6+on2lMKnjuh2SEgFQCBt0sqtTvUEGUVzOTvQ/iq5VIK8sAq6vA9WsJzKZJe/3qm79xfhdz1LDF0uyUtFFioilT6mJo8rYWN3KIkfD6jRIAwsZiQd714P34yGH5+8/9LQIpI4899hhVGBfZX4TptQlSoLiRlZWpJWmPvAeddueeLer/Li9syL6D97KWERM7XFqbwxfVsp7NDd6ctvrBI71YReyv7vMaQd/Ywqwx9Tx+v/H7XDCPkz1cSWapMh8lWEy5P/+lAO08IQCT6iWlls0zbv+i/T/sG0c6xHIuhvMZNbGNMBCsElZmjhy4/pq8t+OQQZQmp8/JUjAhpbBb4hBYAUADdjcMtmTZkL7hQXG8elQWmcDg0JC0tTfLt773LQN5PnzPvbLUOijtwJQOK/l0DrRioZVgIpneMGoNE64GytUYQaRtcrmuhhvvbfdaLhNcxSz64he+YBZU/S0deVC7yk3MpcyTJUVlbglJTWwpgPbR3VeGimWWZTk5Lydn35C5xKRsZMlHU7+tZJXuAhkO7h7MvSNiSVMzhcWcBfHTKtoSWi2LhNTM++HOiCzMTMnizCWTUxclvuR0BtBidXMnQoaA/iyRKpR6MyFNfWXiK35pmgXJyo9L/vDdskzpTzJPBvYWH2u7+3Y6vOJJ0OMBQglQj2VDA5ihxLm5jD0UQ66TcaANX2oaP0PbIHFuOJ1KYM2OjwM+JAAWlBC18tdPdo0yRzHnJjQB0d80FI6vM44ymA9wooOmMosSJlBd4FopzqWxsBBNZlST6SiUc+Qjn5Xu2CVxMuddo7tlaGBQ/vpzn8M8fAokdZo51i+Ux+KpHZuSnnK/FNpDWED1FLD6pzf+W0awbaznpX/wCMkGdTQ5nabTVGIGzRq54WAFbrqjfaCtpICR05hNr6GJJs0aFKANDUlkAV/aaEug2jfKfFwuhAxmpZrBXXdRGmS9iGWm87kmCW64hm4AteISm1oWe77FJfFRTBJs1QjFP9qFpwmNs4FNXHplkfQMkJHzZ6SF/Ku54W4pdnhos0bhY4dPMv2UacNgizh+wf52+el/+7Ny5rUTBOlC8vqbx6R/YEjOE61fWliUc+fOyq9+8hNiw9xzEyvzL+PwRyMSt2LrYv4UIOTG8LQRFOUnRk3QnYYdQogASsyRqGkklEpZNG8Bk2+r5jLCgsWbX16RSFMbSZo9aKiyzG1MyZtTL8kLV/9Zzq0cI2GWbGylhS3S7hiE9DXAxebkt2WndUTuCh9CawkxvrtBvg6aLkFJiCmOH6fFmWEi+FmawKwsTGFm0IrOF8HPohwBc1JHeztwP23QktRCbdDRyZEBvQOQsQIhP7Pyioy4yVkDQlY/azutoRqlGTSsSHsyDxoP7jXnLWLq5jiX0+EGYNA0H40dk8vHnHJkTnjWV+uZFwjOrUO1j1orG/h/ds7lIAE1ipmY5e882esuCGXrUDeiyFqqpaNdt/RCGqfTer54jDii+rTMQflYa+mqXkxGbn0i9hqCANh//6Oy09VGXKlZvvD3X5UnHn9EfvyDD0jZPm4uA7siBEgg8BYwx5rxizjPDUnd12ej2TQpcv1aOnZRZ1cPvSjMPjFxjlAMqW/XD2WaAEbRDmlCI6mIUQApRn+PbJowkIckBEzsehAfjY+AUECmm45ZPjKKigkQR2K9jsgC93snxsLCQsu6LLtkcOc7KJZEjefbPJhpTGUSG5OYTa5ildl4im5Q3SJTE2I5fZyGMvtkEZOli8TSgJX8sDlMB3tc0r1Npvp0zLJM0mSz/PjgT8p3vkxzGPruaQOTf/zKV+Tll1+RT33ql0mU9Mri1BwlBPuIbSCpiNdUMEMI/W1ZBugFSazmhcL/bzd6kU5zM3NGkPjxVyJqyqAtKjBFY2Qwj+Zg1KZoqwyAwOUpYjw2/bJ8/dwX5OTKq/TnI5PBA9zPNaHJG4YC7rpL8cqyvFYmLWt9XI4U7gHa9cmuvn2YRd0m4TRNKpSmESma5sUHdFE6ksRn0MxsuzvM5rUgWWEGzqeJoE0weakSkVlCIWXiTNa5ebkrOiittYiseSjNx7nWFnbKTDrMK7+HqFuLkCNo1XSlTcZS/zINcJCkrYCL2FqzHXBK8wiZuhYv1jD3XPaUFOkOVQUgUZOoMZTo9Dr6lhYxat6jxq1K7PO1jP3Ng9UPU/BDA+BVNL4mW2vNl2EwmDTMSdKgsBoLUybT0pHVtVlZpQ+mv7VEM5n3GOi6IisyNNouv/6bHyfdiDV3TrHEutK0PbJROR1Cu9y9nz4hCxLJ4QM6NK6Yb0zZvCpjZchtjUQGpYV2cOpX6pgEaNNQkwXktD70zIRC8IFb8mS0z52T9DseovsVScOxGMKQ2CB+puYF6v2qP52HQW2Yyl1YJmVAj5XxCan6FqUpBD1y77cblhqlOtYhhBQaE0FviiW1JqCCxOKs4tooyPJGDpi5Ve47eECcx45CeG4pdmLSMBk3TWmUgBF2UiVtKNsdoiRCb0wxE9AjmNK/lhNtHvMqZuICdVYf//jH5PU33gCO9ZvzfuOr35DBRx8js5jcO5qp1Ahi20sOaQtprIACPTZcxzqR9peAbrUk+8CBAyzkjWr+DGX+QdJtxqfRsCqZiFPt3bffoJNdBFQ9zFsZa3puUdo7u+gW1A9IkJNnLvyT/N2pP5Yz628gMQkZ4JOo0jPuhV56y49OxfwQCFGtlqEkZy4/K2rThyj2bAq0GrhZNYYGhjUhucDGQH5IXieMo80uKV1HOycJbOrJG40r1WSykaVQoMI7ixlWIxRoraI5MJu0YlljSsqwWqGr7QvcIIJtCJ4aaU+at6hDm/7o9WzzsxKavCqumTGyTjDtIXxNyNXJW3jVDJEyPqJq9JuBVF1vDd7qfWqMqoZJ7IZ5r8XKzJX4B+ZR4RHgPn0E31NoNw0zKMCh51AIX1/1HNo6TfuszKTelJZepzxw77tuCBBXQeFcbgAiqtTJsDRMm12lvi9yj1l/7RZlweQrkX9ZYl5FmL0BUpXxZ5SxQqFuaWvrMSabTjGG/5RauSrhNpibv7lz868Dk66jvV/CJCtU0bIVBIgCLWUEjfqbahIa6cLc1WIIRKEdyvf9mK21ABVx7llxhouUCen5thuAPNoX0TIMYzWzBnVros7uHG9P0YshUTB1RsMjQ/KO+x5A2iJpD98jtc4e/AOXHDp0L61PHPSRoFNuISWpPpjMMBb8R2E18hl4Ni09Q62ya/8ebq0m7wdu/c53v2s2oQUz5dvf/jabixnCRp+8OEGKT0RCIH0RFrPhlDeKJre7ja3vqW+yRA8Jk/DKxquk1Jw87YOoRJRggy+PT5paHc0VVBn24tgz8vmTfyDjmfNE8zG91FrTVWgw1+bvjfeuv7/JgCqDnFk5XTopX5ugOPPcK8Zn0QLA1o4eWq0NShQnX7VvElNM0ci25iZpIojpsWRAdBdIC7qK/4fk3xx+guHNzV0wUlQSVHhPzS5i29ft/DzH2fCt7NoTr7lTLpCm8dk/+wuC5RNwArULU+Ock469gBxJGCqH1i5DiFYaxdQU3WTouio40QJD+CHYRg7n5uXNi66XKdBE0LoVkNnUiluPUe2pYEVONRzaqYWGQFqTpqCMDv1ckVDVACVLSsZiz8vwng65965HDeNtPZcKY9IQ+FcLZZMyd45GoM9dNK0G6ieDkKEXP2Z0N0kFEbSv+q8KXiQ3qlgBMFZr7zXGKqLZZmYuSBOM1RhGG3I/YWKQAXIJy+SYFqmIsMBUKsQ7egdAagnYw3xa+RwEKXRRnhKhTYOFLlym8NSGwIpgHmusdtuhCQ7EAK276A2paXN1818PNcxlB86NXGCDZpKAFRSOsUBBJK0Fk+K5K9NSJjnXRpFR18RlEhzbTdAt0+aTq+dBWr57WQpH6ZGwoIX6LsnSbelSj13KO33yoY/9DBrrTapTu+Wxxx+XP//cX5r2yU/82BPy3/7bH1AWDohiRRovlqQTtEfNJR2Kvv2oIwWSZ9NeEAztXWCB2QsQmjZZuXJ1Wvbs3y+d3SwgTHdl8Zz85Ru/J0vFmU1txYLp//xU5knwfckvhX/GR/kKJRH/EJH8N+hK9FxAyleQ/BA1gGmdCRFMZWdRzhVPy4vrLyCh1T+qL77GTpoILoeRfqp11B9R5nfDbJEATjJM5rdRGTw3JjOzV40JYiaPYxIA6QqF2ky2R6HmkXV4wxlpkyDZ3BHAgnV8mO8985zsv/uAfPrTvyWXL+Fc4x9oNkQc4oqFgrLSHDV9EReRyCvA3ymCnjo0WO5GSGrjHtVS2jC0MTSIrRC8SntNY1JN1BgWPqtsnkPfM20TyJlcnZ40fom23U5pdgeBYx3KYEUqn1dKl2TvoRHZt/vIDRrLHLTlnzSMNTMdk87ed4nzvncLpg6dfGbNEbqmbszvINdorbrIAaSLFIHoEC342tthLO6jMa5SARwEydNOWFuHm+Y8rS6qFtQsQdBZtpiXmlzbgiAcpg5Na8k0pNCG9RZlDuEoVlWWquJCcuvpbvhdffkVWiNcGZtjjTTtqU4DjYNsH/70x56OvrUg+VXMFvytA6QBtZ54U6yYYKuUAKxDAJfo0bdjzz7g0Q1pYiG7d+6mvGOv9NEhdyjSLgfo2tT7ylEp4H+tcI0VWw4piqrlRu/bcdjk//3m//Fb8gsf+XkZGhqS//yf/5P80i/9kuyH8CspYlpIjTz+kBuJpwymzKUZ9xtc705moXZ/ymnXJMpHVLUrQrh7dI/JSlAT7KF3PowNHTWEr7Drf/z2J2U8ew7wgEXQfBdlCFDK3BcJ1r6OuQCDVVfZINoX1JJ0t1pjLktogstuKZ/win0IzehXd3iTIa0VWcguyEhor/hK6m/RzZb5K1MlyazWsnvjN20ynn5P+0i4WJcA/qYWRi7iVxQxwwzoAQGoltHvawpTM6ati0D5l/BbqwgRLaEf3T0qX/7Sl+Wp9z0lf/gnn5VD9z+Amcm5IAzD4FzL5AMC2JQxz4KY5w40mkVRP7SRjTW28XsWolY7WNsLpNBEipQpA2v33cZQ9HV+fgr/L4NnQNm/ZrBzfhUWenwitmo0tYfMktX5ae7NQSk/Qm3pWYolemTPLiqIt5yvcd7GqwaIX3yR/hi9T0k02EkiMqEAfB5u1bTidqAddY8sCHsHTJ8gucFLp6VmMisagljPFY8vSik5S2xUTdvrBG4QPjRW+4XLxiyukSVi/JnNCWjD0UUwBc3aaYbJXHze9NpRqb3/iFSD1HZZkW64LJYtNXKNuevrzDy8cXpBPPk+rKSiqbTQtKjGsLa+NCUOugMt4msdPnK3DLAR1r375RQPC5i/etVkiGuT0C9jzuW7eji2KJ6LF8VLsmxfd68MAWlG/+FvcUJbgV5HZBVwAKseZV+VSRzXySC96lDD//Hf/wfp6+uTp59+mmLLT8vhQ4dAi/7OQLg+AInQ2hp7X59YkXOXYJgfZehiOuiXoAV3FghbGW1hfoYUpBQo0PUkyucufMv4WBalHdbfbALCrLoMqLJ0XVLf7pq1Ij7LBRpw6ne3aLCCIytfm/5H4jg5hNG6jC9elrGJswZF1HQhleQ3DzNnNiEa9MhQB1kAlKJfOPuGxEH1GsMJephOr5u+jE+990n5Nr0Zp6anlNYoyFuTffv2mQrfdnxhoE+9oes/ehI1k0EQ11bmxPI6fjPtps1gjQOYh+39wxBwHgFAihoMGNWWb6xfY+gpZ2cn0AZNdIpqllWSa6+Zf1xLewmqz3jx5OuUb4Sld9deWVgek9Nz3zVdmvaOHmY/r5+vcd7G6/TsFXn5peclWqE/RY59Z75K+DV8VgvrYXv5efpRYCbq4HpOGG8Q9Dnix/fctFTqHwr5nKwLbSa2rjWrIQH6jgSauqRCplAN4IkTNb5i3IZ4ah0BTv+QySumZfjc+glZeKpbCqTsrS8jSNQX911nlmtf5pfT59+QZ771PfGmSDZHYG6szMjxU8dJ4r4OvNh+9Rc/+XQEU+IgxD4wyILDwVfA+p//4QvSht3ppCapNRyUqfklOXb+gtQGh8S5ew+SBFROA4Un35LaALVFIzsl1uSQhdqNyF+CpgE2chV3g4T9yR9/Vj75yU/K2VNnTD3YntG98uWvf1MOHT6E+0MBHTa2Ss6ViUVZvjwndmJqRnMhGQ+g5W4GNFRzaZGeEuLQEE1M9uyRH7z4nAxxH+9/6gPElIi9GBCkJp/5ziclAZxqfE0bG4ktrkxiCyIIltFY69svYmNBLUHM3ncBVBDfUzpoDM4i6/TU6wzQANPXxmc1EyMqZ9DcjLqTXw8oN76z9ZVpUEXrlGgAVApNEIvNGy3mw+TRkEYOfyZLvdDhQ0fk83/7edlNAuyx4ydMF9//5Rd/UVJrqxD9df9t67n19xJSOccegrdLhTQ3h2of3tfS+SgaKc26e2E2w5ybX9aUrPjSrCnHVzOxBjKXNNqtjNZ1Gw2mh2rQWE1K7aPhQWtcXPguEHSrHDnwIKe7TsibpzUv6tvNzI+bJ6e02g9LB0m4GbR8a1fdJ16LI5DxI/VhEmnCFzaYSlvt6TqrNRPhPdeF4zAA7RwQAFNTF2ECkFWSGbYOnWcbpqOXxOqyVgyo0Qvz6tA5aBnN/NglY767SS5e2eB3EM227qgsjZNIcYXq7aHrwrlxbvVLj59+WU4dOyeH93xMLDRl1YyZFkAofUJKLoNZifZVn9v24KOPPT2MRunQRSf4Oo+d/tILz5M/hnkUohy8mgLNyks7WQBhAA51xLPZehDVSzBVi+0mu/rkFOjZbAd1TXoTNw1lsCIm1I8/+G5ZnJ6TL37piwSah+UrX/syATqfHHj0UfHgXCpjqVmUSaQlnwQpi9SZqwkGOXT4sEENt55amWtkF7EQGrcsLZOWgiR1wzEfescRaW1vo5Cu03SFGt+4IN+8/AUIjcwGGEthfqN92P9qikUAYnU/lBVrkzI4DzCIYJZGSfbsp4PPSNF85txP2UYasypc36D6PPRedds1NlKWIy2AP8p5CvIwJ+2TUYTJFMJWVM0ANtsQnYIH6ptpilXE7xEvwc1uwJYNCGRi/KqcoHOsauJHWafPf/5z8ru/97vy6L13S4xuSRUY63aE3FirEuuSQ4uUkSwurqUtzZSZLNSyOfFH8iQFqHmoQ/dzfW3FtGoLkOJUBSTSrkzNtLxWuFv3XuH9BuChUPxGZlFOj39dunn6yl0H3tm47C2vCkBNz47JibeOS4f7LglSnV4iEXnkwF3MyUk1wYosjF02oJTG7WwQfa5KGQ/z1oY+Zs5YIzaKOUXLVDCn19LUI1IJfL1xpx5mBUAKSyflUXwoJrkAM7kx5mHe8XMnjPldo4/LSpbW6Sg27e5VN2MJgPdWER43al7NXDl2/BUyUnKyc+ApIhHQEh2tNAFbQw9FCkmXAfuAdom70b4gTIJjG5svb70uBWpz5uam6HzL548MSfx+Oui8o1/W7mmDOcgGBgmJEmA+RK1RFPu0yoKfIa7yre9+U5ZcxFHuEJeaRmucrkwCy7bJjh07gJqJB/HdJ9/zpHQQ4XeB3jTs6CBFmUP3jgJr3xnY0OxkeNYQ9MzMFMRrkY+QXtOq/geLaifW09/fL6fm3mRumjJUX1417YwI0DcK1O/8I5nsXwzjc7GYyhutgCTdnMMJohWn1OM5v6T/mp4YCwgcPcfmeZSpzO987VLqPM8voxdFwxSCIGrEumpI1AxwvJbA5/FzthYmNjbbh5Qu4lyH27rxO3lSC75LqXvAXGh+cZH2CrSVpv5pEdPulz/x76SMr3D18hlZwR/WeNh2ibaNczdeK5pVg1aojl0gxhHTRTMf+ekI1dpC3R0EqedJQwPaO1JLTZRpizCd3pO2OFf0WGFt46PBdDo2UgsylX5dena2vG2L6SnCBKdPnCYetlNCjm6T2xiGnhRRXSPOpIylroGasw5MalSMlEHuqsffxEadNtfTTVQLx7FjF/h0UdrxSf2bYYn6AerXUuUAuOY5d1rsCTJ9NjWWfp4hDjdJ4aYmHxcrGcz4H0iku4jVNsB8XGRs0ICmqUALg+uAj34vAeMcO/GWJFfc0t16P9NAQGG5qR+r2SyaqaOZRj1tzTI7RRZk0gUAAEAASURBVG8PrDzbX/75XzztxuxYB+4dIybkxdHXpompLq9pjawnriGVk8dnyalyyi5MxOg8uVjY3BuACcde/SEPVCOzYy/4PpKthp16u1HGhLDizL/j0N00Frkgj8IId2lc6qbFSa8kaIGdxYzLyOsvv0ZcDbPw4MFbNNex14/h6BdkcnZeejr7TNC6DYlB7T+2lgZsRS5fviLPz3xLppFOBsRQF0iZSv+HYKwBGNSnpiG+14zTgBrlSeJTE/w+i7nI+yozVHO535kl9KBf3XKPhkjxxzCd3mejhD3cRTQfjxPCUAmqmRcaLFdC0YY02lZaE2a1tL0h/aPUgz3z3POk8AwTP2pGY/ab3iFrBKa1+ldRrMcfeZisjgTNXjolAzqom6rZ3eqUKwxthIJaH7y33dBjnTCGny5HNvzqMj6yjewaZSAXc3QzJy2aVPmuJSgNf8loKdZJARDVeJrzqB1xNd4Vz81S2v6aeVTTYbo03WmM01rg1IlT0hO4T9pDIIygk5rhoZoxi/bdoCJA56LAk9aYaSywiEAoQ7gOmN5NInJBfX7NX+Q4NRX9CF8X965ttOvVA3WBofujDVIrmMRpzqP3okyrD0QcO3vcpJfZaES7VrsAOBeR0Z2HjFURmyVWNg4wQXMcpY3GWN+IyYnTb5FS5Zbmpt2sQz3GaKOte5CEa831VPBKW3V7iaFZKQ5ewwK0+0ioTHfyTKuJSZ4EsSY7+7pRo2yQEdH105ve8M4wgcB7pDu+iplol8lFpCDpQqPD/Sa+tHJmmVQbpxR4+kT5Jq5vTFJfl0mVygRL8tjH3yd+iCdLRN0GwucDjWqMVIxsg+W4WHfWk4Yb72/3minbeHZUl/zYrp08Xwoibt1Sl0X856/+7M8keRfdVYmtKU9odr9ugfKXjgraqILz6nl/kgplasFACWsZPgR6t/hgAv3huWSls2z2SbTr3XVfSr9rtpJDG69r+E69ZGNUqQJIUEZSIe9ReU/Ti2raypufIoKqmCeTAlNbY0ZusiM0H+8e4ol/+7efF80JvPfuIyZWNDc7K1fZFzWn9o3ukMMghWke3KDaRAlMn/KpvS60g5QGQ4swh6KT2n332g3qRBF6NrUMSIvKd3YRuAfCRlOElPGxGjiJuCHcNkx0K+UXBTI0GppNF03PqTeZhrm5pAFEJuYoha9eIFl2t4zQo+JO48TZV2VubFUillFMQbowqQkMs2e5jhUtXcT30+CtCiRtFKoxJ60V0wdAKKNvNOH3uUjHw6dprtKGDR9Rid9DMFtHgVzCCmBMCoBCEWNl0CUyO+JEn2tTtJjgvkJNEWrooDcQVM2fPTf9Xenc5eGxTgevTd1LwNg1DPNuMpaa+LG1JczyN4Haozy3jlgW/TYVyKkBumlfSl0bl5s2DTCXCjpto6BFp51gF3bNE3vr4hWSPJexI3kD6ab+gZ/F0MYfNdDI1kC7dD/6hCmfL+Bgnjh7RpbHzslADwuF+lYiad4oy9rEClWySED8oDsx2AoBxgz9DFCCwkNXQCDXpQPa17IJHXpzWkJyo2K+tgbXfunt7+FRrjvl2NFXcEg3pI1NuTaIc8nZk/TP65VXc6evva2/bPKVec8CtF4CBSyepEzCgQ3N3+YH36ya4f7T/OTq2sD7gdvHPMzJurrE1zUgZZqlOMu0TC6R2Iv0NX6YOQAaVS2GuVmgorVCtoi9AsQ/M4n03COfpedEB08k+fq3v0GydFUeuv8hoPfdJsvfi6+RxCdRk2nr0KcfqgmnAXRFLDWFyQJjB0maNfEqmFD9FTvZKioz0xBakWReG1ZKaAZRfYSMCHxTHBB6WNSfeqJZ4npMg8FUG6oQ0PswaVY4/2nXpBwcpXFs346t07nl92OnXgL0uyrDwcepu+sxPTn0PPqoHRtCukz2irYAUL9UE31VM5XQigo4ODnGFF1yz3OkWwXLzGmM4D/9G+k2irAisZj1Cid9UqY5j/LEBsJHmbSapgIbDaPWlJb1aHqTeR9g59LicxLuscj+PfcajdaYdKD5Rq0fR5G8+tqLVNMPSHNkmGPrjBXk6ZzZxLy4eTieDrVAjFBDc6lGTxOu0uRl6/kocQ5rTLpA5gIq8Rg+NquzyqM/LxJYnsjKnmYAD7IK1F84z2NYLk7NgmSR7oHaNYMN9INEhUFmHGTTe7VlQKpuk9cPuPVffQrHsounTiB8LKStOKYnjOmkRzb3tcngPTtv/dJN79z/0IPmwXO79x+UXso1SF2/dkQNIbESaZHT5y6QiY9dRzyrMYym2fzD4qUXxsfi4nwHwADARg2GUnOwPIXJAoKo0L1jL+byRwhyA27cdnDSFlKh3JilUZ4u2L6WIKsazQQocf3KjYvyDgieF6AmQtaFvWsnGjIk/+bf/Fs01QTB4THMIg+PRz0BSpeQnTTXrNKe+3bZ8qrFlCg9mMIBnGvtQ6/PHFYfSqWsP52lbfhVsvopL8FHUx9BUchZrl9mX2/I5CCBtYt7cEKUDebSWSsYowWV8dKsrFXOEQrYLX29IyjIGwly6/q8SS3WwsS69DruFZ9TK6ox+aCTHIyTptYrihZVX1uvozl+eg/a/099OmUsfeifMmISgCXLc7k0VBEjpSqxtkohpKaS6bxsJmezG+EzNIN2DNObBKvLRpaOPi5I+5xoHxOdZxPhhsXCWan5VrEOHjb5hnqOGv1QqmlohO80hga3v//8N8VbHiJResgwlvmM+eRi9UdIbYX+9TMVZmpNNIFF6LPF7GNuHL6DSIwJtEksbhhL7dNTU9M8lK9E/++fFO9XvyyCP5DC9syvz8ku4MowmRi6qY2h5eJBHHOmKomZNR4/ivO4t5UnG24yYOPALa+amBsnLjYHvB0k3eeaQcc9esMwClnsZqhIwqq6eWj1rY5RHP5rMTJUsi64PlD7P/7Bf5Uf//ePyIWLaRkn50zLuQ0kq6Yh18D1MCBF7htBcRzIifs9PA/Lz+N10Cw6TFYGmquywtNcXiHI3F0W52N0QNIvM/Tu1YlVk8lDrdtw205DhDZSaioUMHoKcWkq0mBmfZkymOvxD103n5taKNAsLar04NRbsRLuuusu+f3f/m15/wc/IB948knavGHqwRjz45cMOKNB3DsN1fgmF5GZFdA+NZxu8x7xLBuOfbmV7BpMTHPzOun2FtBgmG96Ugp9g+LHB1ImclGS04KmWkLgKRqpML6O1eQkqV9zctf+e6Qd8MWgn7eZ0GvHnqfVQUr2dbyH1uUBE3vUOrs20plUg+g+KASvCdbKWBqYriK8V/En1Y9RTaDaTBmrQNPOGoJf13Ce43Ok4vlj9Zig9ibRebg7emiNl5UhQIxJnmhTpaxJ28VpZyrN08QwkrWlNyRtuyofeuLjhuEaU9c+GOpsGprYfPNLX/tzOdjy84R/ugxoVCOZvYQ1U6PMqUYRr3OzvKVxjsar7q1WDKhFYTeP7fGSBzcCAEDvdyvPlcqqH4Zt+vGf+gX6YpOpsGuPrI3s4gFmV+D+lsZ5bnlV9ViHJVmUKQouOSJ9oO2OXaWUwdYsACZMqsFc63xXM5V9ffVuQrdc6KY3GoylgVLnxJhMIQE//Xv/hXqeZtJavLKreUieX3oV9LHOUEpXKheUOawdBC3xq5R55JWbTrzlT2U4B8ynDKmkZvjL/MIfWGoHnTtArerzteHLBCFca5qcwBwPUaCvRTpLVS7MDSRgwg8Rwg1ufE7ZfYCJ1KW/oqX/66/+srz25gnSluIyMQuyx7DkmCNmd5BKcYXszeTNJ9v/oybVeaoWou0xJCipX8RcrAR69XsKGetwQRzKeGW7i8dl8Df+DCpAUKUGLNF6Ne/oQcypWbFOTkm8yoMLw/Nyz+DdmPP1uilzom3+OXbyZUIuCTnQ/T6ESBNIaQw/jXxDTNcUc9MVVAbTNDXVZMpYmma1sjBD0aamf2lirdZpgbCiqaz4NI1RIKtlNa0+NHmMMI0PwUQ2uJmzZXi3VHiAomMVK4i9KaKlczT0Ue01v3aRB028Jh/92U+YhzQ0zmdelRa0Q7QZPFllaUiefOC/y/TUeZleStIlmJORHWJj7TSQ7kP4NLSWClqd69aUMT2NMlk9K54/FOUrYxqWqUXqCHXIYw8+jlON9ACVmcC8+N63vsYT5jE9dHPvMPSk6oOp1KmA+jnos1BsQwuxkXa4X5GcErl4W0cRtNJb4gF85I4po2h7NpWw1oDDBJE1eHyADP0QqTu3G9X5Gcm+8kMeDlGTP/ryV5GGJBVD9EP38xA2TNhL46dorqNp5yCESsvKWTpYU9ehvNgHgN5hMiumoVVBDHwvW2dZ7H0EqTEZPU+mIT7ebzCUfpeF1SLPSr4qvxT+sPRjUtJEhEtsonAwuRcGCp45I9GJSYkO7hJXS7dE0chWbPMzJOP+4R/+kbxB/qU+7D1ZTPHQgb1y7uxZuWvPXno3TNNll3Mi4LQ3X4FkZ21xpppZ13k7zaEEfGF6TR5/9wflyuQE5hgoIb5gjiwLfWKLAlV+QgRefNIy+6vdZxUMqYDWucmTs2B9WDZ9V+194uZ419EXKPyjJONwF60gGiJQF+DGoXt27uIJuXxySoaaHpIQj5rSfvDaMm4njTKrNguPrJ0GneRxUZhv6mZorEi3o85Yrcb01PPoY2LzVSwJbTe9KXwaV9PsePUJrVme4AgEbsNXt2AW6qZqupinRs4gWt/C+9ghxDeL1A2el3e/CxBNS3U2RylvleULMHkCsz+KK8DyJFb7ASb0QeMk/OJWeIk7Lm3wbDM+dOJe6PtlftfgvWYG6fotQ3s5NKTuh2osPUbHNebSP7TwUX2GITuNGi8BXcNI02tx+e4/f1MG+/UJ7neWWHoOHcrVCnToIllAgnK9YUMkt2OuWrYoUR443k7JiUbhvWibYBuPhEHyaIZGBHToAH7VnZ4GWCDI/YPFBfnTv/8iqFlePvpzHwWFo+c6vk2IgLgLaP8ctVhWNQGUQ1gAXQNldk3ItYUoyx4simMXef/A7s6DPChhN1UCw8R5eBoLFpbRWGoiQQ/1PyA87bnYUumUX7j712UVAaXPZfIhaRvatITWqkKwBfIENatgdjEuyyBk0tnPo0+P0rMhbDIw9NnNEXyEOER+6DBFmARJCwgdzRk0lQc6WcCQKjVZK3OY51TrajKu0l3jWhoAvgRIMUxbARfVtlHaN6yuxaQdreVVoApm97GmTRdoAz0+LgkYWvv7abC7hEmY4jgb8TYFkjROaBYIE2e9yy2pAb4XbtXt3XaUuPZFYm+Tl1dlZ+cTBFcRkhCcxsaGdu0zXWkXQIZV8+awjCqYqnp+PUYLNTXepT6d+okK0+cqMBbCHNvuxuvp2gN2VegmrKUoVQPUkI+Jf6YaUIcD4aH7aoktS9xLMJ746oEDo6YpjTmg8Q9ToIJInG2guDSsHbs0izCIsp4EqhHySh1OEn+VySrEYDIkTWjQXLsLK+Ko7egUIfRzbe2+pfPWUhZlMhWAto9+5hNPU7drJkOpl7SRpd7x5hlMCSLvFB+ePnnOpOH08QDlf8lQBtOmk4TMWDDUKTC9ljroTd+suQxzVQEBwtje3JTSkZqYGjg1zHWbONcN82HR56fJEsFX1Gg9uJ/09Q+SuUHgejAkw5TcH50+IwUb0hKCNNJFmUsvxtAXnZv+v3VY1KdiqK5VNN+MBnPp3zwu6Cc6PiL9/n4wCuJjCBM7RYse5l9CYq+Ri3k+WZXXljLyxnJavnNuUr787Es8agapiUR89bVX5b577jFPFmmNIrwo2UlhDqnZZJ4wiSYy7dCQ+jpJ5AaZFjBixyAu6TqMoX3dEQxoZI2L+RBQrTS6VBNTY0HdtIyL0BLAjTlT1DQoTDGdV2onaUfkYdaQvPV7Ui+Iqlx+PPNzUoLQFb6HNGFKtJq7YTbVD9/6r2qSc+ffkomLJHh3PE4vjiiZF0T7iP2F6dmvJSgz4xdNZbIygIYKFBlUGlH0U4WC24N1wy0qGpmhc64NjWE2auuF+N1CKMNG0aOaY8qIBX5yrJGVe/IpvSlT6GZ6eAQsWmwjO0bbPB4qiBBr7LWesorfVAY+9XexmbYKFfOXsJjw0TbqldZqdprqgU1G0aY2bgpek+ynhg2saK0QisjNniv8b0e4myaxzEfhftVudp4TSRs0nHQuqPVY2iB/bSfPUWqJyPLkpLT5LUSrb28K6ERvN5RBAqTyW5fX4TAc6n7SaW4qCdjuu0osZqU3P9SnEKpde7uhN6Jl9rYa9jD95DZWCzKNBH/sscfl6Jdekj1P9EL4Xnl33wPytdnvw7k41MZ5YhM4tzKVgolqnigzmc+2uZhuKOu6qbXYIEzQdnuv7A3sMefRp41YIF6eRyNxrv9S8w757kJGXpwlu4KGqw7dKAsoZNMhef0yqVWWiPQMPCr/PJmU/cRYHsT8yyThns2hJoZ5CgjIVR4tnIYYvKBu99JjRONVLaBSK2i6FMxTwNGuIkB2RJsgXpioSoK1mmDYxjb6uq+wwesUt5qgMMJKA5/KTDcMmCRFCpyWx2gzTTshE4d3BqmtftL2o0b6z6WJCzJD+dFQyyMIFVqagQTq8uojWBOYmioc1A9UxtJE4Sj96JWRlMki3OMCGlozdrQCOssjhhzR27geAGw2mEKLQEP4htqKW1FHBXoSmqLFvCtYOfqwQBWgdlcJQYMrQ3+YrSY02yjxKXoOkpzYtZME6SXWPEm9mxfkFt8rRpX8qrbFjmrvlKBpl6eBaH1ISF8fAXDuJYHWygES2fABLVSPaOGlWhKK8vphcmUwewC42UYKjG81LuFZmrNQ2j/dHYDhKEPoRwVys01AjxowU2b5Fw+kiA/0p400lkQJdc/zelGQW3mHxYc28Y8a4+brqP+mkny7odJreuyKBNaWedgdzyBuDsNc6yYXT59R66y6SelBcrGZD1KWf2zltEyXF1hsZSTOyI8hMsNUN0zLMJpe07A6/+jhhif1O/ztoObqnaNPSZO7FYVAsxzMK23KP8dTM3+4WJGvX5qWJX1MDGlY+swphYN1Y7Wgk/wXNoTnLBf9EqMblnaJ7b26KKMBnviiXL45tGZJixfjCAx9jvEo6GvkwjlZGdglAZ6O6O1shdG6ud+EBBxVaT79huQO06Kbe/eur4Ba0taskwcMUhIxOTVm6smagOu3ElvjWrrORfY7j8OuqWNnLn9RDh7c1fj4lldNYp2cnCf5wC8P7P85yodK1NEhSCFybTarc9cmOPFletyzT7q6+pCHrU1HNfND90kZUR+lpD3sTT6myc/EJFR7fHNU6AilmlCLKzXHUekkCPCikLtq4Bg9SfSxShGIXPMNxbHAwxrY+O2gZl1j7rFawmRPU05DPZ32PikT0I8wF04u8fQSjwPmwYDU2GlbBrenjk4H0MT6s7bGI4OIqwHHkBfqMzm4ajLqHitN2X73M//n0378kU6y0LHJZKHTj+9Ay2IgsCoT0xyq8oUZ8wUFKhooSeOGf6RXiMmBLe/GSK7SZ73s4ZzX0BmIlyaYLSWej0w/Cd107S6kzvTb1XPptd98/XWJzc3LLrBUezUrMxBsuUTfd/wLhaWDQLUJJGKwh4Aj/osHiPzCGhAz2quuquoMpSaDMo9KVNVk+p+Oa4zV0Fr6ph7IvQw0H5Gfbn+X7EyTC4jZsTI/K5crYfmTyap8L41gsuN3EsgEguBxqJg8SMqM/qCZM+w9EApYBU/aALGb4ikcpzEb0WvSzdq41AzUS0Esa5T/ePDXevpHiO+kaDLKN/HR/PElCb11lCdlgpwB/2smuAXtkwF0yNWYEwIxDVEQjpV5Sk8KADJ2EmFtBLANZM893zw0LSuMWWgH7Dg1/YwMDw7ffIj5WxnrysQ0OYnD0tN6EASOlmxokRJSR7Vto5BRfQ+9Vr1tQc7A7g3hqc9GTuBvaa9APUY1maY9OWxIX1yJCn6lSkHDRPiDYe4li7ZQICEPoOHClNQKa+N7ci85tK1WE1+afxZm4Pu1GHM1u3rDPehteyhR8dBTslamDbk+9B6gA+zNXC+MZte5eDCjFU8qZOJoKh6iwbrpA0AaPq4XoafmrD4nwFrE94LhTKyO/dFsFlt/f//TD+09iPMXkxWCt7Nh+jnAWo0paZaGHcChvESjSN78H2Ew85A11HpxepH+fWiwzVEl4NxSDcBclEnjOyihq2moD1W4U7HkW28cNTb2MJkamuKSBwKfwAeJ0BmpjWrgiYkJefihB+TkiTekY18LcSeexYujv0iazHKe8hOVXg364lUZatPFMm8rY5mF0BvXoW/wo20E/NaIvHfo3fLwkk8CCyviOvKAzGVL8p9OpWWyhiQljrWBE5wG8IBOzNpdW1Q9HT9q/eYRJHmYz6YPu0N6nl3NygBWUQ91RIqkrVMdYOdc/bT7ymA6acaHBQTt4vgEnZp4pjCB82yWB9kBDMR4iEOFNJ8yT5fRZ38VqRjOce6Z5SlJ2jekc/+IuAlPZOYI2nOjqlVuHv9fZ+8BJ3d93vk/U3Z2Z7b3XiWtKupCIIoENhhiHIxbjJPYiUvuXJJLuUt8/7vkRe5er+Tuktxhx0nOvsSXYMfGEGyDbUwXCIQKIAlJaCXtrrb3XmZndnZ25//+fGdnNVokmdwXtmhn5le+v6c/n+d5HHMxY2sB86q++RbzZcokdDuR9lbmrMU5zyh+R1aDq0oeIGmtQROCL60OSy9BtSpZKQEJot4fKd9HzBgDFa+dDyIYxEgS3mJMBQ4keFS642VmdiUNVktJAqsxq6aohGC2HK5RjJVaqoauA+QbbgZ8C/MkH17q1eTPBFJNwwkDfrSz1WJuo1MwK8U00oAaa6sKBD97r/2RkA7xRXgSDY0mw69NgCwIyb+DTvXfVITe+Gg5L+eXdaLuUTJtvIO9PfZfv/43FqeYLH86YgxUwWRRvCi5lmDd8DYGfdXnY+OOuB7nkqb/b4tLQSJnAu1ZvVI0rr/PkQPS1y9aTaDzZablkJ+Zx/SJ1jZSEp9nM5Ep14xmjCTlFPc0OoiDOZ20O3MIA99SudVK6GDlQPcQtwhd/CNVnjIV3RXyN72mxV653/U+X9xvOwu32PtsveXiS03t3mMxAgjf6vQwjZPJFzDDGHGCGFAwxCe0mfalG03/N6/Hed+EUAKg6ie92fZIG/0gMLEmZ9Rjwm9bmJCYcfQVW6SxKOTmarLquM9zHeftHIGnC+A+R6jqzYgMA0t7244cep5OXclW3f3DgAEyhq0W8y4Dp9uXDRHt22YDcwBhl1EOur/UCoA79FKAmcd+Fhc1AU7byUuXCVjqPtO7zqpDu20zk0YCEJQiZgnC/HlE0FJaKXU8tWIb7O92jWclAFOMJTM6DBFr3E4eFssIeTb5T0kpJCMKMDEROPW4yGHcTw9I9vZzJ22MKKpyqbnSWGjF1BKMr232ZYvfRNQZSNTKg0u9YfmnBOPUMGbgEkJhYpqmzsmAjq5L5mkRObOaNRtIyRC8oFZrSUIIZqdm23IJ7dfiD/Z0vMV8sGM2SnXBCBHJMAPmcwvpHwNDz9JbRua+EfH2HXz5lYcOHDiA00u7NBDTftR0AptTUyVVTayVwNGOFwHnwKGcH1TzSMwWOD21UcvX/Yt/cANzM6hYMFzRqqT9qg9Jc5XRq65Smov39J7G9+unjx5zuq6nuYJIjxClL320ISBNAZqASFtwDvhZq9247SZrOXfODh99PWmHl9HDvRBQJvckBosgATtnaOJCPY98IP5P8RFXJHnEgieWuW7l9wS9RKqQeves+QSmxxb6v2fbAD0YnyRS9q2z45g9VTag5yWm0ue1EChFhNFLyVUVYGrnA+ANIi1ntb1iNC1+RPh3NubRMGa6h3xWFYywGynrg/B6QR0kIHyffBFWFLBqOT0g28HaqRyinArdEKZcATVa1YrsRmkFfZpe5uDxau+gjwVaILUUUfPRg3LyBBXlQLWU9F5iAxJozxAlL7nNIL9dPlPCMIhzv2SvHP4WqQEvpUa3EpVrZM/A8mF2Zivhi+mraOVqjeUYq7ebMiW1cNDzXhahSKhpNIBoSF8TCI+SChDvnF/MIwZ1ZqV7LmgyNIgqn9VGQZ/jVA5zmPIb1SXr5Qt/bXtvBPDcAPBcD/MaS52wCkL7yG1pNPAsTVx7CYioQQ204c6XzB9qWLriDJOzYQJGdDnj/aFseqzg7xXw/CrLmETZfoLopdBIGskEHSmQxPNSmZEu0vcnf/zHD+mgqqacwmELekjwsZkFgUJMCeYy8UEtMdgiA8Z8hELnCQFrc90Focbfy1LgYQqne7oUB/cGHn7aBiSZK4/+3YRn+bv6cTuIETOGX331VZffulprNZ1X/TcKIYSMrnbzDRM9YlLCANE6UqdE1nIIzXe4YAiKwcpv4CFjhmSQO8kB99c3M8KUS9DwlNnoevRIROru0egXLX4mtRa/gJQPLmTZHf6bbVe02SaoOp0mtzGD7/BvjsxaiDZfI/g6ZGuTn9V3/KFScmt+EBqu9RdBhhkETCbXUYhwECHNCzqixY8I15EFAZwYmLJP71xLDqbYeiminMemnyJoo14butLB3i43SE+FpAk0tQCuamyZ0hzyGWpx/vOowZvvArlCI1bhGVP77k+QI1tfYTNnQY2zh5loihD4xiIsmJUZUzDBIlXp4e4hayjcQyHnZrR9shzFD0NqqYmRoEpj07RkI6CjmjrtoJDhY0QKNQVF41213DPlmAK3LmDehjBphZDXdJgwwkKonMKKOqZekhvFp5KJmEqY6/O6pxz8IeXGNDxhkcjmApG6UwOP27bd26yxAY3jbH29m8U94l05mkKKgRslEtiCbUbNVeaFd8wHPc5D10pgT+HLqjpbGjPFtNpLhdtDuBlxBMg8iBDhIvNRAroH+V7qWykzUHjGBB3UXKSZ6xZ5+778pS89pIYmzz73rD315FOgBHAKSeiNdAzZtor11uedWNFgS3Bsgr4PPtTlAl1u/RCpygOuJyl0j6pHGgP5PlOLX0RCeQH0+RULk60SP6UCVLZWFuH0IP25x3Ekj7x2hBopksjbti2X7F/xSUcsXqJTZJzNN0CjEsoTKEm0jpYeu+WWWwC/nkomYrn54nLAxUHlSDTHOYRAiVs3c2xjwK88sgfTGExnEZmkGEtIjARBjPpYg32gt5EmoYS2hW7ALDo7HrfXwoR8iyrxi5LCyF0lGiuHY/tmh+2e2hz7xv277OGP7LHf3NVgAUK3xzp6LY5GmZcDL02nxc8QBCstvGuW3iIACkIkCzPQWM7Zl4Tl4eUTjYMKXCMcEa0bpYoZlWIudyzux6/383wjlFv4qeyFc9196nViaq77cXR4jEr0gFXBnAEYUkvHjENAnjMnLUgvi5yBIdpQC5BK5BP3wIkinr32zPks0sRK7sJU6j+vdm/SaiGig6IPNR1SNFCzvVx5DGZhMgkOA2FSC+iqJjgyDVU3JuCuIm/KkboqbqexaWDLMSZgLNWCzc2PW/vkQWve2mQbKR1Rg5zLiyLXsBrnAK+SiYmv5/XQvAi8YyaaKrN5Lb4pPfSxHLwEgRaI+s0QOFrgvt0IYV5LBe+Ub1Q3ZS+9DPW72qeNwJDCQEo7K5CS7NcCxeBfLsjygAZ9X/k3n3/oHN1xjh07ar/yiQeBr5yzZ5991knwpkZsbpiNwBdvTUrjJUybRD4MRVJREwoDdIxSJNBR4uU7W/lNEmycEPz4GsoCKKrUQ0lPIuvfeZEMq/fgnMNEWlOE0uOE1+ZwIo8cOUIS++pl/pp06CI3YgqYal7VpRBiZr7PWs+1u66/E5gRYyMkZYkeBAjOVNZSzIazpQdeRgPHnvERG4ljCiv3qLvm7+7mRevuC09MjAUzZc6F7H2Ru9m/gI1CWEKAaJrksWm/tXiKbZY8k2vsoJvgMEF4PpORng8y8+xPf2m7baokBwORFII8uHVNuZWxl8+2dEHwTHDU9orrWVHdD3mqfO+C7SZPk4PfKwK5IsIHYwn97mqfYHKZOJySf18Z0dV9ysTSvOd5uvX6QS+kM5gGZQS9eUxdWW9+QvpucR2qSh+fAI3OeSch/jD7O8fPBEGLTIIXyl0tItVTw8LF3BloswgCK8yeykRU8liaR4w1w+QWFWM6dAYSS2UyMqVUZKgktLZdeT1pJzG2NIPQ7Lov/VsBDt3LDJpf3Xb9dEge95yz+g0VMBY9WESDaQuWxwWhNeBzb1B4HbU1DXtBUTB2mMEZwRJMTHxxCTU/bkEmpp+aoGpYvbTQKL1XUK2E8nkdRleQQtpMJVEhrnsejYhOd/0kXadehIgqwjWnTO3gVXWgRre+3/7i5x9q6+zFf8in9mmNHXvzOPC4Wvvw/R+GOECqnzpLpp4wMmMqkUvu8sVgsRIcuGKsTeAzgWlgQ06Kpd0dv2qDJsCXjDchhSoZnL0KWyhigDys0ldkVaESZ57oCL2nQGmjYpeA1jvm4sHu3LnTzaDS66k1Q8Aii4FuiG2IGVXMBvv4XF53N9X7S3aujYppHuAIzOWqf8lrlNYyhZ58kNb8UBZRyiZrnWXckZconKQV26bvujYRu1Dvit94KaDcFj5goRjJS3ggBmNpZG2C8OzBiUzrz6nGJFAImRfFIxxrEWe5jvYIv7OvybbXUqmtYy4vmU/luVn2+sVBaw+j7QhmrPhpEJGCK9G5abu3BolLzVMyPXHZgRehOcZBy6n0XsP51OlWn5QWSEldnU7vc22tec881QJJDUZ4HLR+yYU+yybZXULPEb1PhGztF22S1uXT3FsUJgeABRwJfxvCm5ezTuAionxVWyudmhVhk78Cs8MYMq10DLUFkBbV/k8RiRZouZAmLhIGMgd0GuFURTfypWRyqVJdfpd8LAls4STFgBqqLu2mpSc3vTBmw9ETVr++3DY2b3dYRffi8jdCZpj+TPsM5uEfFtIM55Q7VznBCt+lC8QUymysd5jRrPiqpUDD0KbzaLAFLKAlzNVZJv94uMZZKhIiaCLdh/xSKMwJi2z8/BAgal4BOqenCvPRtUrQLmll3WOG/OPf/q3PPlSMKdBGOfyh1w9bHZWwGdzI+fMtQFrO2c71VI9S8hChiU0CM1AMpgevpUiipp7EAVBmTILHc0TuXnIAUzrJ2wRx5Wg5sWUe3GrmYgusigRvffesZZLDSLV5Hu8Z5jZ4MKCRU8y1a9cuokZAZNJWR3sbIVO6Msmk48EqNyaJGaCFdiHRqxfPnac9WJ8jTH1MjnxxcRBNqBA0U08m6Yab14QZY9Yxd5FoHRLUkafjK76xcRzaM+exurYyq4huIKmuBy5Jy4Yi1fNpdfBsnIEHgJ0XKN9YVvDufrFHbSNm3QObqqyaaNLqJYTAyd4xOzlK6JbAwYppyBsDBD4iaI+P1rO/M6puRWNwj2IawaNkysvcVvcrRdVkrqikI0oSW9JgNXo+yWAQPrmjBfyjqG/e6t7pQho3MQ9bTX5UJAvhAoSdItkc4b7jnCsBNEmf1b2mwt4xGEyoGG9vNzkzuh9hMQSchFfEjXwmx4lDpM6PJ6Kmx5NPkEwdkaR9HaPz3JzvxecFk1OZhkLpLvLIa+59EKkY1pm6XINWmP/6Zl+35k31DL7f7pjZvbDyjffFGu3QC2126JXj0DJYSYTN8TfesLVYYn4CPTOYdZkEg0QvITqf+WC6eXxjNcWZIzjkl5CGjlThDNGwzwgY9loWQCrHpf2W2Rsg0OJFIAh+LBiXLlMBMueTfflzn3lIHZiqquuA04Bi5uG8+tphZ0crbxHDGa0mNDkFI2nYnG5RQY4UgwlNv0AQYRGcmn882UdA2CtVxI41kOxTVNBxNzZ+muYSY9Witje+2cGYIerJqmucVNAeiesDmJ5hCgRTzLVjx453MdcxemgEGIKOXKETbHKzvEg9Dw8yxgaO4ht2d3VBuDAdm5GJhK2kt31RoaQgqHekVXSGqZfBeusa6abn4pBLFUALSabSu4iEFPTmWu3QeiiegA73ItyeCEID68qqq+0N/K0+TzbCJ01zaaMwUQvIYr2f9t4NJYqWXbnUDfexEx12YYYzirlgNjGz9mtpad4qY5P2QDONUjFR1EtDppceurrjCg62RFBERO5B6Km9tJhPAk4jYSUArsVguIE8fFqrBasx96h9Yh/m8ZeiQKmmSTbPsf+LXEOqPOXKq+YSpdFh4BhmfIzzwAEQHh4c1yZGdAwGDWiUUwxmVhDCS+AgtcSk0ljOpwIRIlQLNwRinfehIQSFmsPM0r3qPJNjGk6HYOd+T/U+yuzt9Zj8W5xASR0z9RPxaS2npglqDWGB1dP9a8Ba29rsyOuvOOHQsO0G00TPYhgnu64GqFRyIotfTMxBvArMIChm8MGEGsnmdflksTBNhkhgx7gv5cRWKh8QCiFpYAT/EvflI3qczb+F6vd9+Qu/8dAiflWAm29oaKARx2nbhQmmDXzxpZfsIx9+wCpoJxyIEEamO04uNmIYX0AIDkeEXJBjsDwmi8zzN5LNDnSKxEhQIhEpxYZe3tgUc3m4+OqlQiuiVKPIS3Z+wyY2VdokubDmuVGPc4qPUI6hebRXY65sHMwEaA81DBFDO2cTaauSCS8oAbgV022B/EQe09tBOWCGldDjI5QNKJNzeDAPZwfZLJkP0QKmKNEvjz7wTtTq5iDCzKk8a56hHDyOPU2YNQdplQ8hl4HIqMKMLq9tsCEs0xPDfC6LqFgq8sf1q7W2TLX6XJ9traYWK43ARNDHaIvw8OFWi2YVQ0RwY9JaRQqhtwHw7i/3237GNOlzCqU7n4tjykQUQmItM5HFQCor56Id8wkhIISDcHoq/V89RE95G/X7z2e28BLRwdTK6gdt0fGORRFWQBjRokkXIPX66p+iD13uIlJ+Eb8piwhfgiCDNBDiHdOTQXJ8ydRTo8/VS8GNOIWYSjrPAJmSxopxvRJegjTJglBFsjoXaw8nwl12ou9Ru/WW22gOuoFnnh68uHz0LO8ee/ivvmbv0LhWAa19fG1ct9buev/dtmXLVosQjFGB5jwCqmBg0BboIeKAtzCvopf5l1qhbDQ19WfOEtM9YhFMw+CzBGkWwpNuoIaqBxQk0ZI1IW2syukAWnIOUzKBZeP7yhd+8yFt1CIPSwTKVVvL+fN2z133cCO3cEFbnESSz3L08FGbvdRn9dVVNk6YPhXk0AlUrrIAgy0AjItFwIuRD8oBYe/tGbQw2kLSWMwFyMXyCYOXdM1aSXad5dTWQ+RXblTf2S5KqSmD8EcpHHyDuUpFtnvnDpdn0LlS60dP/NC66QevMH85iUVJezn50s2SpCrj2NJ3ySapSo0SIg9j8mTl+CiipNkpWkUh+KUwXwgNbwJnlsDEUFwRPLgF5vJT7NgY2WFNBTfQQwE8Hj5UNSiDGvZrbVW1vTM44hp1TobnrAcQbjwXTBpoArd4j5h7nms5290Pc8ZsQyWMjWTWfv/07Q777afetN4EAkLTOxW+T0krIQjCI/ZJKrlvqBJuDu3Ei2JWMZYISwWtWUW5VMoyioiHr9ZkuneZLQGSxSrfUMROqHNpWTGfyiFyRsYsUFR3RQGiF4SBd5gGReDjYmgtNjK1xdf/yX0osKG23D5M8byzp8xDPk6IdNQExEmIH0E6ixmrKSupJedfUcFs8khifo1WmkTbCvyqe9SoXBGqAiJLmPfT80zlnHja7rv3Y1ZXt2bFwkkdL/2nhPKtt32Yduv19k+PPAKEbsK2yeqB8dvBXU6QM3Q9DunLP4kgUi/HbISlIp6SFv56gAjtbTZdJIEn83eBfQTES/hfUVAPe5hAKCxwP0KdZMFkEigSBgp6ZEB3MhfVcsExV+riVGXZWN9kldW1ls1IoXp65ynkqXDzkz99yo6+eczuvfdeixJKl5aYo/uTPLDUEoPFSPxGYKY4Dz8I4SbCmglFwWQpqpOZyqUMB9v13GmCGNTArNvguD71+dTPyb4x7pJmKBigb2ArFyugwQYpiZe+Dh16GfgKN0rQJEAEqMj1aQA/xzVricFiTLZY19VpS/XrCLXSro3IUKAITBr0lkHQIxOmnxgEcwgx5oCOmCVKObo0CNLZa3WRTdbs3wBkCIFA2+kSmKAaqbqmosLGgFf19fbaF77wBWzzWXuuD81VWCXAYFIDaVtEo9jjYYIVr7d12/99+aQ9drzV/svTb9rjZ7qt3w8zZqFhhVjRe/UZESGaywCMfnFPnTWhIfNPk06AGGMQgdttrjmLRPg4Ua0wJpUiVqr9UuRN/pd8FH2JQNWHUN2Q/Jj0SzDwUtkaYvs4gstrEaafYbKml7YKEwQswrzf+TkQyntZIjhNpiwHpeIhlJ8gmBRHG6yYiFxDEc9/EpM3AfPoGsX0ihZKAIjp5QtL8i9wLaqLUoROWkv1gCQkrWX0Z3bP+++nM1aTMzuvdV0TTNLsPzvAOFy6lNXU2N69e+3wq4ftke98x9at3+DAtdL4I/09+GJoV84rwaycbSZaqPMtmGoEIMCt+2yOiGScQEt4ggF5MLuYVkJR91WKCxWEtib7OlzDnSi+tgv1czyZxc6/lX8mzZV+sTInQkQDlzBTBHdS/7efPf8sLXxP2J/80X90oEzZyJng82KE4yMq30g/wPLvsVL626H6l7JITm+p5Dgw6yKm0SKczZSK4JZtK59SpEvjN3XhWjnFeRRLAoQdGXbMVYAGctJnVUDjGKBdUWSwkJuqg4ljqHYSx/IHUw83E+m0QO+ImlOvU41bZD2Dk9Zxrg/9CWqiBImDqxMdg1gxDeXIhjylmFwcE6zjTSUfZNAfDU7qCdujGdfSSKaMUvJMbPkuiOjNt96yteua7aP33WvffeUUWEKYGpt7xTTUxjgzkTovkA+zlLz3E8afCYFkZ/AANSJkjdF06RuIgPJQkdxEd+Bf31FjBYwMXUIbeCE6LstFKZ0OQMK7wQc44ApZqzg1RnBFCA75M5KiYjBpjyU0m4c+FsY8qwzgRqmVgd+xMN4BkSd7++kzitzF8QUlVNMjjqnPrPyE0ARhkgZq3LaTfcf8h1nmYaw4wkbYPGfqi9jwTZW3mpObQGcqzTKTVuIROGtJVbxhyvGFuFEyXJ1+FSGcmhywC0M/pSf+HVZbc23GkhsSHY5a+XHabe/4AABbOoch/EXwJSBWbrppL88TtD/0KNmlCZxRmFxxAeSUZZOQD5Eczl7TwOOixqsojwHnXAe98r2Y2FnQn7Mc+HBxRTUWjNlQTwfCK+Sa0XjwicfII2qghqoJ1ORUDPYu5tLmyVZfRIoVUj17+Phb9viPn7C//LO/AAyZ56JW8WnmxrZ0gvTAts/DxvSk1Yus7D6EUJZjEWYFZ8JY68YIO5BMKo7n0hmrzp1cVLVETmCgt5PpGLT6QvJpuWkaPGgNgJDmupbP9eYbxwjxUuBXBMM20DMxTkAljtNPcjQDE1dBDO2m5tsmqGlaANg6hwqfnZwF7UC31ipGnIYo2Muk2C5CDoNch+qtqnLW28ayXVZXQjsttEhdQzXErnbT1Yx+HbHnn3mGpGKuNTQ0uOurxUze0lhrPz3ZSku5MrQXu5/SRGIcJYilnUB4AGlgY9AKUaSy3qfXU1+6eQJHGTN99unmkN1YA7ocZnEDEmS68FzoYU2jFEwY7ktD8STxwxAsRokLsAi/t4JqYG907iLOm0d/jyXGyKaWihnrjj9DOgXtSXJZpqUIQkER9UGME6ASFvFqDCYJ7mYmQyN1G7c4n1bHVfAhHiXf1nreMlRmIlMa5uauXVRP/qAH5hUiBA/BvV8NZDSNMoCkl5DN1TVye+PhXuuLHrUdu7cRwV7rhEXq2tN/StuNj47T3SrDBpmL/MOfPGWHX6dRaUM99Ja8nkwsFEUBZ2i/JzyjSvOLCN5lIrDCBCnCmOoBCnMzAS8UNOGmsA99nX2WU9PgUj0T3JfaKwjYq3sZGyeajbZTekB+mdp8B3hOTtNhGTmUCMe4KnOlLl6VrMNAkRa46TVNjajtuEswnz1/zsKgOJp4aP4CcIjUzqRgUqnPpn6SWrT1vTFbd2bYckoanVSSSakVJ5o0OdJr3ePtBCHoe1BQ7v4uv0KZ+ZTmuhZznWl9w4IV9EyoRrrkE+FiSqS62gYTmJwEV6BMl5jkydD/gqQlPkWBuvdwP/1UCytAUVyagcSkzJu6tlyQ1gq/a1B4TfkaJmESJaytJOgxabUhUPXk/44dPYKkzyai+hpTDcutCpBrJhqvLs9jPzrLMHEPphtlLdhi7l6u+MZ9OUbTTzHU6iWtRdlM2dKkfQbXpTIOkcMsqSSmylFyOi85zRAT8oHPC8WunJD8LEUTHZiVB6tw8CLWxxKTKgOM3YkUVy+fDTMIjRWJEFEkt7VAO3MxVmqJmZQSCSsgIg2A9BexrSwxFgwSo+dibmOlG1QvYhLDzc5N2xBaYIr3g7SzebSZ4E3yAx3j4ivmYfUsoUEi/E2MFUHLFYI91KTKHPwUPkb/d0xmJlKu39joghfunlYu4PIvCoD09/UT/QtYaf0e+9t//Ge7Yes2O3PmbWtsbHQms4/ut4MdF9hvkC88TxdxZc+kspLTNJO+aAKAcIQIc4DcnrTVSOsg9ANMbk2DQl/sM3uASSk/SzVpqueamKRRDnSqimuF4TPRWhm8T31DIuzpdZlLdrxQGiEqXweIrHR2dtpPkAx5hFbfPvW23XDbAQY04HTC+aQBYbArI0xqG1DEnNgbTg1aZmMzaOsaR1My2XRB4yQx+xa6rS82DPgRbCHTFbVePdxmLSRXL3WM2gBROF9GEUP3aqy66rLk1ftOtJPwvglTE8ZKLcAnZNlx4hlWrRtP5YZk8gRh6qKhAcsByTyFpOwbBRxLkjZI/ZR8LM8imkx+HZFOTfcoLy0mT9Zhp86esS037XPwKx1nUiYEDDbJ2KO77rzTqsnRdXRfomzCb8f6pyl8xI9SgCxde4mZrvcl+sUq9kdH7N6yRds/etECw8C52DOedlJyQ/TUXVgmPRHnaTijPRRsS8WHSTOYe+A4jhm4zriHKCpCwQs2TgtAk+X2t5mPPpFLFF2qqYt8kNVLQQUxmMLhqkh2DMbxRKDqhLtAYnmpMmDTuSRfSTUQP3XIi6GeLvy6ZDI1zrHjvF/A5BCJfg+mq6KIHkxH9ZQMQ8RCbCiMLcGgC5c5L43VO32EARv15KWIIktLX2Upod1Jz8WZgSVrrLrduofDdMcdtZaWc64XiQTgpfZLpnKkWbTWAoJcGkuXlI17oQCL3BtpJJXnJzU2boyiiEQvs4FHBdFkujaZ1gHKn2L4imp6I79WFdURBuN5EGCLpAi0T4sEQOSG6FmsRAuvcu0rf1JRWnVNDRIoyKjQNquvrXW28QQl41t37GQI4KA14eBlgvKYLQiuaDDiJVYTxXcKB+gwTXSKKIwSn6IvHz9HMG/643RCDRCJIYxb4C11zCXC+M6jx5l/1Adj4UPAWDFMvXxudPMGxHnaOnqCBi8VSGtMqZVFb7l5Bu/NY9YUBEuRvuR7pCkhDiX75Lt42FS8AhKHIKQpqlNo3ovvGJsKOImkjiJeIpqV1D79/be/6cYR5Rfk22vk/2aBELW1tYL6GLV9N99sGzCLveMzNsbxC23GjlPWP4kvpW6vK77XysVd5xcf0jExZyUImgNMWSliOuM0/tEsuTMfUlFJWmxUl1MiWYeAh5Fk33OtmomscPUCprWkfJD8XhGm0CKjO7IwW0RQWoGJQSsY7KLCodBG8XGUx1R4/2pLRC2mUjJUfpjql1RLFYNR4hUEHPIJnXvxuUByzi/xs33EMZKEkxhcJ5U2m4d+ClvOkHukP4iiiBCeH2KWSZWPlM+E0CWH9HwiNIkZi56BsWoIrNED8hqMpRqwdpAWU91hW5+9hXZ/a+0p4gK/9EsfdKOpBHXLwmfcsX0rSB/a9JGqkOJJSjcscoGC+U//lrAU+l3ICuXdlGBaQqPSH8Dl50SwSoJnsq/Z0I3wiDGOr7bVPuq65He5lghYeTKVhUQJEoksoZXBdTWXLkfL9SBHEnnItXT19djmG25gBtNW+/6jj9p5JEUESM3O5o3Y0DADAQXiQLYmjEk1EmXAW4UFZNezxFwanEA3fGsPTth4xhAbS6Ia+E+BtwTmqnFS9xCaK0yBZvqqry16F3O9+vxrwHlQy4TVg5STrCwYLOqhdH4sSplJDYli7GnMK7efbEaCMOsc5l8WKPESSlE8PgoC2WuNCMrCJAxCxGoBXUhzlxEiUC+8+IK9ffpt90AuXmx1s8J2Ex3T2JslfKiMghILFZViDoB251qO9s/QqxETB6kmye0kigj8Wl+iRvjfh6m2L3PUdtJL3wcGEAOWz4Bhg8j8EJRfJhq/O6QDEtKL9s2GmNVjUNW/eexzkGBAFqHxzMo6mryQYMdnVJ53HsTEwjz3WcjIII4tpaqGmzIDFQC52hKjKiGsHJR6YCiKuVTJcAMYa1FdjFkq7U9cIjKMOZxkLBGtlpiLs3BvUZg4r4cW2RU0zkEgyMTKRCMEkfTBN45b9oXzlgdhXsjutY1NVciOWj6WJjCTB3TfVSt14eJp67o4ahuKb2ey5UZ7+dRJ+9FPfmL3feA+20vwIg/sZn1tFc8RXY22UopC96IAjK5L/RJLqmvdZBKn8fmrksYKjMhEThCA0T2L3jXxRQMc/AB3A+xzFNqIIMT83JfQ/qqK1v6FMBNzCkutpKqemi5SQwR23hNz6a4UTi+jCG39phtoGVxo3//BD2zt2nX2sY9/3H705FO2btNWapFIxvaPWDM5nGI2PauqAcLDRHKiDIlBtn4OidNXFqG92BBGJH4RK8lcaC56+klzvVfmev2Vw6hkzKI8nPlywn7pi5BOXk6JzQ5EQJ5UuByK8kM6fgaCIocS7XmiUYVEGLMrtWHoMqKkAX8V+bdcEPpFlon5u3YtQ/W2bDbBr5rwO9tb27Dn662CiNJkbzvmyKiFSiutYqid2c59dMwKWcc490drsQRl/s7HElNda4kWFbQA1lOz0G/7Cwg0cCvasgR7ngUR5pDQjOLvLkEg0iaSthmy79HI4l8JAvksmUT54jCzH0bHMZAycPer5pgLM4MEMhlWxx9FoMkuTKH3xGBy2NWQxYspGS+VL3XZR2tI0PuiY9aF1t+taSQcIFik+qxcAayGIMQo2JGY2oMm8wI9GiLc/vbSGZLi9HQswYRdpperbdnpc8fp1PSO7aj/BEn8rcxLY5g7EcFiLIu/++Y3LQ9/aMf2HYCHSRDDBHreuldFPwWDEsMrp1sIwr+C4loN6FCSOJRTgPZnxC17Ka2kyOUiYXjNR/Ziuamyew6IXzZavwgrJ4dUjMxYJJ1lIWRV2uPH/H7iZz+3o8ePwxNPYlu8xyXmUu4qgPny6KPft66ubjtw4IBL1p0+c8bloKqKqq3Sg/1K3N9Xu8bQ12xU8hSSCupUNFBJU30ftThJY+A9nv1f/7bN3q3W4OFhURE6i7oPIBkTozipLG14fnG+NTRvtjoQILZEA5LcLYRtNzKAus5ym9Yi+asgTg9mYg7M1AgGMdf+7z/+I1oyYZs2NNsYYdpCCub27N1mHW3vEOBpsFw08x5C9fvLMdcioCbUdcdxCScVg13tSyqTh+XFfm/OAM2RhXYXAeAvyqyStucXGAnYE85/hLJ3/V1fYi5BcZZkNpK7ycXUVvhZBYGplTk2ZBVvHHQmmI/PpA9yUPSuEPNFCA+ZSldbAg9M4KO6/hDkKXPCwHvoa6lVnlkBon6NnVxfh/+JsEQAvGtxTq0FGCtCtbTv4llCgZiQWjCch2kg8zTl2bC72VU/LNtvyddXfX/7neN27Pgh21XycasMEw5vOW9/9t/+B7nG38J1WLQ//7M/txOnT6PRYWRdeTnqAAApw0lEQVToNX1JEwoQrMY5ilaPkUzuvnAWxA2z4DbtsIb1m2DubZh2AL95zzjdpIbpqtUPBM/75hFM6KgN9AzQYmDUMlAa+UcOW+2lS2jORmuEWSuIOj75zHPOn/ujr37VzeJ+z5pLFxokVH3oCBE6pEAZEZ7XiJj9z//5V/bBj95nO7bssKeeehofwWcNd9xNQlF5DIllaHeO4kcaRvaXM3EenyJO8jl9rdZcR9/oQHUruSf0BE47/NnYUMIkkMs+l4jvKOUo8reySv0rmku2dFmglmR1GV6VYENIFNAZGRGZNRAd5pFzrrk21RrNVNXY+fZRKy1aYzUgNTC27KU3Tth/fegha8UE3Lh5kwWf/rEtNq1zFbUfuOt99FBv5yFgGuEkF8kUwLQ8+PphKzrwIRAgJKPxT9uQeP1YIQkf5mgc80hEtvpLm4Cw8tILvWbuku32j1E+n8TnSSqKWKchREXgROARmEBmoWbwKukt5pIDHYBIfQM0tCRUHOdLmk1br4DOlJx2oqQLYOTSB++JObGDELzSgAxIlw/BcVwF8PLDEfpiCCESwuR0wFtej+FfZmPyFlEGX7NYi9/ls4ug9mt85O4YcHWtBLRDO0DcGQQQMlsvWqKu0aUYFul8lVU0glbRNSfpJZ029LsEsxjrlVd/ag/s+e+Wj0lfhXtxjKR4eTmzuLEwbr9tv7315pv2uc/8GoPnTiCvAAY7c5YBGrJY3J5AHZzDRUSlxdDyvZcuJs1FGLK7jeF7QM3kf8X5fCn98OexcqYw+WRaFteVU+mt/cX/xYIbp2hS5Usz0MAcQqqmptqe+fnPXdL+zImT790s1E1KnW9lNvHGdWswkxijiv/y0Y9+xM6fuwghXmBWQ6MbyVmE6lTyTitGeHbx4LM2tqnZOmJtOIegh8Empq/VzLVnW43duW8dbcvn7PhrP7S6Ko/df9/tVwB3tTEnLr2BT4D0JpyeXZL0G0JoztpELV7fZTMxAVI1ijZQ0aBcIJ8YVn4GG60EYWlBGWH/QVvCdxpBcr399knbcsMWm0AaVVfTwrmpgXlkzCrmXBP93c6MUJStEHPQB1yol9REIcneltZLMFql1fM+z9iovUDvjkVBmxxaPinB0+/bcQBoFy8Rws02aNtpIhOEMbVE/ALnyozR5Az1jRCsZoEQuZ+KcYV8hXAQbEcEneC8izwPMZbMOJ+QFmiTAObSKIyTrhF0XCE3BOlRVNAP4ajiIYzP6AoFIUa1QlPJfRDCUkclLZl9Is555qcV+2j1nEUxJIS2keR4DqU1KocXjaQzqPtg6hvnBY9kOZQpjcGoiwzgWMpoQYxcXWvqY9JAZ1veIjr9pu0s+Sx1Z80EZCpsFN9yfHzcnnzqKfJgtS6qd4ao7g3rmqyr5W0XDmcXAQcgWDAPhT4SUynBq30Xw8qPFDZTQOJhIp3C2EZJxAcQROXV9WgvEDDkEEMcQ+DpHD4vvORwa4+NdtAnsaGKKDFwOSBvYiwB33Utf/s3f2sf+8gD790s1I3KyRugHKGfsHNXy2nbSm1BCdNOXnzhRVtD0u6Rf3rEATUjXODoaLIsYgYJfum2ZmtduKBDvKcVJkk9Mzp5/fdCq8H8DGu8t9RK16Mll1cIqJGS1ulLGxklejgJZ+lhuRbRaSZMqDDHLrS129e+/jUmww/iX0zbC9zT7p277JWXX6b9AeFjogIxysKVYI9imxcgtbKIdPW306KZqF4eD7uMKudWNHR4fMjeT1uv+4ooU1gi8kQggCfKs171xcPC3cfXIkjkF3qA6+Nadb36UjMVJclFJK7PBwzlsIIwr9oWqAGpjG4RvHKSsyQwOzBVhkCEF46NWA4+8gLRvQiJ3dTS/YtgCshPVmPCqlWbGoSqnMeV20Nw6iU4iQmtcv8UY6U+r6RpJverNgMOfc/1xTCf+jqTraqFsLjm4r1xSquH1pcyxfRl8lnPcX/szzWWEsTdvT3W2zZut6/7sq3Zusc6B8ftaw8/bF//67+Gxkbt4x//GBHCPnvppRfswQc/aZMM4yiFMdSLXlaPNqi8Ya1lIyCmJsA4isFZClxEcRXEXPoqxi+XEAtmJ0PtYkZBpAL4UxANv2PqvwVogftWnmseZE2EKOrGjRtRJIUkloGZ8b51zevsP/+n/2QvvfqqMiv/b0sDyxYglmygLHfffbedu9AO91bZhg0bXFMZmRi333qbbUBLLcx4bCCIKXilNXjNE092jbpSBdTPNZckenxe0UeSfrQf0PJ7GPScIBBhl6NfGhs0NNANZo6BcCS+PfT0S8gJxazzASxW7kUrj4CAtOHzRAY1FEHmZXt7mwOVLmKCqOmkzqlwrR5CFr7YSF8XeWqQ4AQdlBBVU5NQJlg4tFvzho12V9akHXpnjmnQyqvA8DDMyoIh4DwLzI1YDSDo+mwCLZiQ0liKTkn78A/HVNJG0giSusJL+kh+FwEmXcQkicvUwjQ8e/asvXLo5WSOD7+rh+dw1/ZSW+q7zFg6t0L2Sr4W46QLFTEHo02j4QoCDEEgCCII1SS+m/YjG4TF1ZY0pdYAJqPCzxp8rjzRdRmL98epbxtcGGCcaYyBlpiWWDjXWjKJY21ojt5521h1L8fPs7Kaenvoz/+H/eqDv0pAx89oqHN2YOddduvObS6EPjEyYtMkyKWNFeJXdFX3N8rz8JHQdiFSyTeesxRFXlGR014ZMJp6k+RTRCmfSw1W9ZwlSNRlV30xptkzBTv8WCz+Mjrv7lzHObJseGjInn/2GYYZMnB+125nptbX19nnP/u5f53mSt8ISdI5/C7VFn3pS18iQnOD3QRQsuNSJ6ZKwOXGnn7m5zYOIVeMLVpToInWytfhlvSDp35Hcl9riQgjwws2egaE9RDFhqw8T77le5LOtv6tgeX9JBolzSTdp1HzksgREpALbK5qdJz5BdE/9tgP7IEPf5h2xXV2CRTErt27bD/T3e+5aQ9tB/p0OLcEzVKDy9G+bhKIRNAhbEl6Nf8XfCoK0Yf8cWvHxGpc12D7gVj5FzF7xMOYxMnwPE8YZvEkaGUX6bUdGUlAsWBAyVbeznJJmni8T9JW3XwFfM3GLMmE8LyAdqP4SjGuva+3z2na6ooa+9K//ZLdd999LienCGMQQpKgSy21C1DiVIWMqjmKQIwynaRZJc0JpTikhBDr2jMtmZEozyuWGEzE19Peojf8QsZSKX//2Bm6il0EEIDZRZrD+S5XHDX1DyVmiej2ZFoD/2UxzIKLsayuDrvt1lvtrbfetIMvHYQ5i20Rn3KEtgODXZcoJxmzcWBXKmfR0n2rv6EYJqwEMMeYooRFo29Vji+zWoJLWko+p5vIgg9aRPFnNp/TfetvwiBGCeZF1jUz06yKVMB5TNWzTlOdIZh37vx5QBYD1gPeNIF/rbnXG9hHWRX/6iVHWTjDHIC7AXwWXeA+tFTT2nVWW1drn/rUg1YFtCaK2uykWceLFy4RqaMNc7DuPZ0rt5pGMvVIzTRB/64P8prKRcbb52wG5iJ0YXk0uclKJLWWGKuvs41yBxql4JArq66Q7AKbpBKOGBoXZwOSSi7RjiS58leqxM4j/L0BxP3iYB9mZFLlymaXCSGtpp7y8i1EoJKShUS9hE4XoRaDnsiib3186KLdSLFoFb3WPcJf6mQQu1t0hMqaG7TNKM+1pUhx5jrPoIXlyylKKSdc0lmVAGVoGQUuFMBQtCvBtc9v3GoenoGEnAIvMuv237EfeFkeYOJ19lkkpw8GCmI6ZRMRE+5PS9cXRAKPD/RafxeV3NLi7I0KEWcA4SqiJuBsKqwuEO8U+bA5hKg0afoSWFidkES8Kua83rrY/wp1gPQ1Wb+GcPm1NZY2yYeAzA1ut4xNt1ICssY9vxBm3jzC6dc//Wnbf2A/zIGP29JibQxsdOODdG08H2lQMWJqicFU1FqAz5qHJpa5rT7ueoazlKOoY5ZMer1vBh97TIEjhG6QfZefq9ydtKgYNgOhGyPvmcPfHnvscXvj+DGek9/6+weIIG/iGD7rxQ1ShzHfiWP/eubSQxJgNI9ND+UkJwDqRnQ/VeWlFKjts3PvvGMvHTxo99xzjx0Fuf71f/6+5fjyrKaTUZ2BSm7r+jwdzGYqOhGu660FTIz0lePJsVJQHlqOsTooVad+S4yVktw+ERIRw1B/r2Ujpc9DlJLgEg6/8ZnfsO89+j377j9/x9ZjUkk4TNbUuRlWXPDKkvOrKKPCvZMQXZAQfT4afOhSGw9CNjsPg2NmY7sX5KC1l0ZsewWQmJT20pGEIWRETvHSmO0lGJOLT1SOX1bX0ER0D3Q/+6P8Vi7+SQjnOh8J27Ruk63h3IJlZUJoPvKHruQcmsqDsYRtE9IlpW1qCcR89/HHLULESzkZaSz37LjXXD4/J/NJaHqEhRKtGmqg9+RA+CnG0qXGIRQdO4D/dTUGE/FpVKwKCWVyrl4e6OXoue/RvnzAdu258bpjiPRZrweT27cFQVdiGYS582sJexN51j1mILwlYG7EQvr8579gt99+G5YDQRyeq/ssxK0plXoO6cvtCQQq7SlakDCJYQnoWUlASqCpMU0Wx5I5LjCvmpQquqpjiTnVr9+PtRBEsYhBJxE2mq2m7ryaCPoyJvkl/N0i2gbMYb5P4a9fthfSr+Yavzvp5/GSSONkPDAPkaSUlIirnACsnQ9ijuMzvO+Ou+ytk28xyzZq/x8OXg8XuwWV2njkqHn3lVtffOiKsyj0rP8kUcY6QX7DvNdbeq8fx172ilDweeBCaA6wwlhRrkdAzXRCyUDSFlC9HIIwW4FvnThxwkl5+TJyRH/v93/fbZygTmq/NcNXIky+CqQHp7m8eFDSLPpTnKnuA60XIFSGYxOtUx8I5URyi5noMjZqVSRcm+lUdCpjgT72DBPkc9TfgFXrtD15FC+SDI5l5gKtCVvVQL+Vr9lkvWjMELmqbEC1EkPi7QJJRDRQJoSsOVsSCPIF5hg+sXb9OrrHjtmPf/Qj++QnPmlHaIS6efMW27Jtu/39Ez+03//YAxbBbBnBjGLGN71wODbCQWaZixyO061JjAsRpZtqEhLqJ9i0mcF1BEZ6AQBkwmjq0pS+5Gvx2B2D6mpVR6bjykc9fvEHVlwbZAbxLQiKK+vx0o+h33t7JqyyYAtYUQQrZrQEWYBn6MP8jLAn3/3ed0Fe1Nvt+9FoAHLX1lQ5sz6Cf5Ra6c879Tf9dNAmGEqvK6gjIaU9VAJZrkE2XX1l4icLUoHC8fcJfEmZvjn00wzRWzFj3wHLBBb1D//5j+2rf/hHFKxG7G//7m+cO3E/LoWC4EXgUTNoN67W6u+ZuVK+SSkfKmUnPUBBUkuvTdP4Q5D9GNCbrVu32AkiK1EQ3p/99d/Evi53Gx3H6ctoYggZgwsSBajT6GVfxlHqMgEvkuOKC9WeFEhKBSUDbqkTLv/MzUOVU4zpJzoYCuSjMcjLEMmMorEUQk7faB1aPddzqAuKwRz/5y8fBj6miBLl9keO05DnrH3w3nsc9CZ1mgKkJTYPLaZJigPVSV8yEYsRFmpkKUkoc0RNZESMJUjbCTEDWqGqpsgOJLrtMIDePgb8xbMIqjAeN48oYhHo76npCjiHB4fWLwa2U3z+pJX/yudJcnYS6mbEK8QlBMYivlccE8wvACxL0lhFrAs84BhTH2/cRCn7HXfYo5gr04BMVa4zwNcUe+FvBOGPBF7A3xxGu+h5OSbi59T4sI5G9DPZkNUdnG9iLCVS12/fx30w54ph3/Ay94d5ROhe1c3ag9SSBkR00DyH4kL2ZJ59e2fsSduwda3t3n67E0ap917tZwe9RLwMsaCLoyVeftRiH/ggiBKKKblPHwLoT776pwTIbrVvQMzbdjD4gRYFs2iYCMEHbsgdUte8RFg8I/tyQEsviLFiaCbds5D+Clxo/+R3j5Bu0ECHQmh0hV5gQIG8hYaZYy8F0q1et5npk7gqfG4GP0+t0mubN9j7DtxhR149bAduv9PlyBR4ikxRSY22fW9JZC5emfoipG4FvoGnqia5P/x9HsmtntkZ9H9zF499uohTJ44f6GUYGuXWuZhRSn4qzCxcn1qQJehc62EETmRRgYWFJLZQ8Cf8DRVLFlQVQxwDdvLkyatWIkuVn+tvJRRfBHgX1Y2dHu4dYpwm7dZgrJQpmLxQMRZt1PCLhpmUeZ5uVjfferM9/fQz+EfFVltfY2dOEkLH0S+hR6L602kTPWywQL8BIkKzoqxVSw9Ijr1Q6UryCiBaRXX1WE+PYyz5JMoX+ZD6FVQUH+3so/cfEnOmzW5OdNkG+itO4TAHebhF9EvPbVhnoVve5yZpVhGtiycYbIBp6C9Ek8JYPnwtSVudN9TTaSUHn7HF2iryhurVwVBttIomQp4EpbBn11772TM/s9/9g9+ld9/zdrLlgq3fdSOMAfliyojBdM2oaiuiAFDH1BKBihiF2qjfst3BifSahIcwjTEFgggAqAeINFNP+wVaDZAH4xpkYun5hWMTtIs7aJu2r7MdN9xyXcbSc3z9jRcwwxi2UH6T01b0LCB40WXzVbUumSvz94c//KFt3bKNQefl0FOu/ZwI3Yb1zYCWl01Rrmd0AGGFH+Uaprr7gT4BHouxVH8l80OpBaE1xGSjWFPSuoVoJtdY1u1A2jfe58f1UQ8Z9yzZK5mlO2HuP/yjryJAB6yFVMzv/OHvub6QCwS6EsjgrpNtNjdBg53Vlchph07+ykNQvU4QZ7CgrpGOrMsoCdT+IgPnhFbo675g00OXKCAsRsoSweLC5Yjv2rvTJjzUTVEi4Vf0RczFUfMAQSYAN2aNUdtDUGSah51PoxqHLeTh6GFKivT19SaZi4T0Luxa4b1Sa4G81ZnW05ZbI/Dsok0jlRd7MadwUNPnP+l82QQf6iCOtqk5e4KHdOzwYST2hP3qr/+affvb37YD99zhJqOUYLNX9RO2ZQPd8G3uWwyWyQOh+t8SEJ2wfEkyTF0J/+a+xkhC52FqzNKEVBpLD0M5MfkhZXUNtmvjWjt0vpsuU+Sg8L8+VRmHCAA3065aPfKUO9GY1TxMQQ1PqxrptAqIPwDj+ek/L5Cw9kU0o/xK8cGnbW7XHptBq4lAdVEqoa+srkGy77T//c2/s9/7d78LsPoC0bUTjqkmSEc0rG2mujrhhnkrCFFSdTnI5K53Dmef66lau4HB4pcjhjq3oqHJxHnQwYemyGVmg46QlaAlZgsvzViXSkaaa+yGjQI3L5sfl7dr+b1oObT8Cwd/arFRggfxRvYr4v42T6s/b0MTuaLXHGhawRqlPP7Xw39p77vzThctvP0WGJHSFwkDt7g+IfwVaPMRlNESWl1tsSX0IWPM7GSTUr0mIaBBdUo/SDOuXnq/KhuKEchqmvMvmNfKY5Xjw2ZGZux+ksQqkrnvgfuYk0bNWvt5yz76KoP78FnJ/QZKuY7rMhcn8CARcnCACykr0YVrKU8QIzw5TkJ5DLUsMwFfESkyjEMJVoy8kBLJ/Ys9tBy7yMQPgI5LOKTaaDZBEZYgGxBqbUOLAS/hYYcoQ68sZvK8mGv5qxcN4DQX/ouagl7BXPRpP/bW62hMckBAVviBRkBjetRzLgnQ1bX62LwalddDsEqwdhPxaVqzxnbjXEcxXR740IesDOLILwYASu7KT45nPoIZAdH6+IzTFDCYCicTmANq+p9sBKmjLy/uSWXrCtsKlpQyERXiLaqqgmkAecKAuQsz9mL7kH2mLmFNtForIbJXgkZrxHeYhxEX2FehAdQa2UPOTKboPNEyoUlE3ArJC3alit2lWqKLEJN8Ay0dX1NLBvva6aiUYw985GOYzBHnV/77P/gD28P9nj512iVc8zCLKoWMp4KBD7Lf+I5AucSchQjPmqb1zj/SOdOXMI+ap9WPtlLHpiKEgdqP6ZmKsSbD/dY1/hqBGVUwMPxhlW+WOpa05jDpjSNHDlkgVs1ESDQD9MAh0JjsIZ+rxPytraywt8AP/vyZZ2z75q10ctqHlTRmH7gTTCvR3DCCTC3gUktC0QlG/qBzJKulqSbgeOpnn87ouje9d8UUTB3EfRaFLsZCc5aVleLinIIOT9juXfI9MeH7iRrSbrw4mxIr2qhPjA/btNwGkvZiOD/WUB40e13mcrOaUPeldU2YWknGkhkRmQ3bECDcCXI5KkFXcCFO9KuEPEsAx3COeiKvwsX8F6bXfDSTambKSoKLFJ/xfpWmy4xAzDqfJwpn5mTlUp5S6hgrdZ/XZS7OcfLNU4ThIS7C2tl1+CWZ5Bgm2cwlEq0wWAHEWrx2s13CbP0JJQlNTU1MV8TcQKJJCkljVhfSq4EkqtAWUIPNA2HpBiDbzcytbAkBiFy+hR6CQLI+PhtlI/Xw0peYUMllmTCqrlXtU2klY3iYKSXTUBPfg7Epq6D+60BjIUMNsl0SVXVHapRSgc8VQSLGl+ZhVNqbcU98mMkmMJqIHCbyt7YgrTG7ISj1NFdeSkvXIhzdDBjOpWy/TfNzjq9MWhPs2L7NSX0NtLjY2upC2FHMxxr8xSCoBEVUFWpWx9sA5rBgP34CCauXGGuaUP0oAGF1GxbWLo7mkPmv/RmZ6rKeidetfk2pbdmExmIvr7YU6BgY7LbTp9+2Ah/+tw/NiTmgiJ92VCUu1eAWixBMb7VfsjE0094b9wJSaLHOzk6XYqiuoo8FgkzNcebZO8eVq07mmEe0Bh2kTPdVb7nqPyGZFY2lHp5Hjx1jL1UfSEUzbsqaNZWUncADWAthfLEwzyzCvihUv0SEN8KXora5IDbevYvLp3SNJguKrRziwn5J/pWHwmxM/JoRHHkYC3Wr+hwlVQXj9yF1taRFZNsHpjh8LoTBv0dC2LdzZLvjdHdVpApprNEteWirRvygDIIRqwRl8py/8DsQoeXSlaUCErwk7zImKZQEfVEG3u6tsy02GZkk8XfRfoXymE99/BN2+p2zRIYyMFs2sjGjDtGtcHQeGqb9UievQ8Rg7SpxzIuQ1IbUhGvQgoSdG9Yw5WWICfQjEvfvMhFFIOpPoXZbuURVZdsP93U5raagwUdKCERgjgnDF0DyCdkhiarGMnVVFZY1NExZCPmpbNoScCzJZZk+mS20Fe/utLn163Eg6dPPfqeWCFYRs0XRszafNQ0yYQGf1uMFhYC2HSFt8OCnfsXly55+/ln7yegoAZ0yu2nbNmeBLHA9caaZC2+oySTYD+44+ibmneF4I309PCOKQuX887A04WUSWpgLTNrQzCnbQBfcdWtucAJm5cNpv8gt6B/ostNnz1pBxmYry27CnB9ze6Wck05ZBVRJ/k8CmovOIsiovti4aZPtuHGX/c5XvuKEIpxLGUg95miezQEMiM0h3qU5Vgs8nlkA6+O9LjEWoT6HBJF5/sgj33FVBppw+su/fL+dOnXKxrDYAgTvNMFTml577/ogwnzTMFQu2lfBngWEePJJrD47F1mAGi3D0TXQvlramAgbOcMspYnxIbh5GuZIflzdh3yYdxND3e69ajAq9ehFg+C1uL+JBcYDg0TeZuFPeg8QINGShNPYGuVerrk4TUIhw7S1gOcojaknQmB75ZWsYnr5UWxXUr8WNHMePtYTOKC76AB0kz3+L4+Ry/DZ/n032g6AxPE5OtcikZWNn+Saei61IiHbyLhftA4c6jODJE8vtfOAO5LHh6Ay8KcUAMgBPLqEH6QrSF/SYDqe1shALxi8Tud3yVyUthaaw7XyIo8XJhIlxlIZuQIRRTycfLRJdmjZSuAYys3E6fsRDQVsaG299YcnHUO6Eyx/0zklnb2Y3zzplZdUozaF8FAD1Fv27rLyshJ7At/hhWeecxChxx5/zM3zysfHyeR5s8sQaRJ7t3IQfpnG9B8CBaFnKV/SmVKcMxf/dmjqgvVMv0Yjmc22gb7tLveW/uHl37XP3X1tBFtOMUN6BxbDZgIrycpdmcFi2CKA0PKDPEWYmtDELhL6jQBhH//e9+wf/s/f2+e++AWGFiZ3XGH6HIR/GVHrEsxkTcq81pLJLO28mvnS3y/G8pHnqqhtoE/GFKbgSTv19tvOWrl9/360VNg2bFxP7pISf/y4cXxsBVNkcuYUkeJAi+lZSRCpld0U7sAVzCVNJMlUysaVYHun5jQlJdeUDZMoHGGTlmQ+ofpUXq4LFpzG618AEd7orlcMI5NlAa5W5iq1FhioN8eE+DjnEbDXdWKFYD1FDCngAads/CiojrlJfAv8EC0FVDRTK32RyiOqpwgQr2tECSuTltBlnmoeXAM9wMvsiSd/CJC2xUrwhz6yb6/D+7V39zlbXHAYaVst5XiEJllC4xQw5I/TEXIO21E0RVs+vf8g/GG0VWqpiracXhblEIJaz61WuYpUyj8a7ulES80Q4KD0HSkqGI2fojoV3KmDq2sss8xYULd5MKtjCjDI1GEl2MNFTNpFtNIEA8vHMsHEAa0ShGsxLQ8os0zMK6b0zGIqOhGcvNp5ggQTM/Q1XJjCHOuzWZ7bb33ut+gvAXoFgPQcx2kbGLHKpmarpG15HoSdrrVmEKLysZSAlxZIPSMd/UL/IZvP6bQDt91Bj8u1yRNe43tbx1k7fpwaqOCtVpW/nvQJ+0CAQaiYafw3+dlKABeR5F/A32mlDbVGR73/7nvsl+9/wO67+4O2i76FU2iyQYa5azlBxmdC9fRnwarwEhF+14JplBoYAxYlK+JqyzEW2MNytKFmAfzgscesvq7ePvSh++yZ556xQ68dZJLkaboUgxGFsaRMROOiEbWWU/qhFGGgvZMfJ5djBgtixedyjAURKZJXiI/l58YdlXE1CZDAYYIX6tgjc0QPU5GZCRhEKO3F+Lg1bdyLmaPPJG96BqkkO3omCBEL+sPyMXplgX4LAfIQIdqLeUfHLQMTxBGnbEJ9sfoZcD7FBMvJ2LSdwYQohZB379rtTBr3Br4pYnZpqc+qdlG8V073J3yAuplsq0tUMM500A6/8prdeeedlOeftvaeDooa91Eiw9QWEBWSOJIubrGzCsnGcymzwM/RfUWYmzs5SY8JIpL947TeIrJZRvDBhw2eiSOt5TL9CmKQJ5NUFO5PS4JIoFCVdMhfkxZLMZb8lPxKZp+hBXL4u6BG0lhiLCFJvOw9m+aOg3SyzPOnLHSJRpUMHZxAy6o8XUm/BMDd2AQ+Fb3rhXXUEtHLl3VSepagi6YcLi9VHs8jOErpcNTTM4APuAjh/LLdftNt9hd/9d/tML1BuEjbVNfgzD1FSCU0Z/AnOs5yDTxX16Rm+fnotfN9r9h8Zg+5p/e7mrbUua72s+XiKXvjMCUjdQ9aAe3pJCy1JNRkQkl7q7V1MfOy80jwnyWZHsZvrW9oMB8QrQX8x2ECNUo1xPELg4CcfaRGVlpnK5roclJgCrGaBG9bWSIprlf747Q7tJu+VhiL5PTwyIQD4v7lX/2FffLBBwn1b6AyYg+NkWpt57at9DIBIIAGWzkWx5zFZxVg241LWhaKOr5SV8kzcbMeTByBNYupIM6QWbO8AYm+FouePkYjS+piUH26UC0hhEswj5RULKvDaUZypCkpGRjugYQmSZqCCUst9J5NUr+UhcSaw0SbwY5fvdTVKE4i+RctD58PUCKeRwP/3UXvt8aG2+wUUxCPvv465sdJ+9OH/sQe/trXrLer1146dMglQWemxyC0ZCBAEn5sBImm7lEQrVDmQYiyogJCV5kItzpEn8LDr79mZ8+1WNaFt2lN9WLysthYL+ZMFQ8ln71wqGteUTRxihC6UArC6KUzVmFNtfXgO+UXgrKAgNWjIR9GKGGv5civ7DnWQRyIVqinl2EWddSY0QSGyKa7IJ0dqahrnhhDg6URkqwOIQ+CQHU8Y2G9c2WJ6Qfo/PTJT37EShBWQqT//Xe+TSV5gz38jW/YTUTiMhk3Guhsd4MEZ6jAbaeGSqUbArmmBJ/C9Kfbf0Yt1qDtv+Uu8mDL/vjKma785cTp1+zQwZftjs1fJJGNVkwx6PLbHJwMQV6E5qvuuGjDXPs/fOtbdvEiU2eI3A7jz/cM9LA/dLjiOtRRKsL7Ml9+bqWiWVpPJmpFRZPVX7jgnkv6VUjj5hYm8YPpfxcpK/AmtL3whT9+8sf46WX2zf/9LQevUslLQQ4NbABDtBx5kRZtrS44pWNIawrnqcmTU1ghwiumllIzA32dGiH0uYcUWctGqpZVkcdSr3BW0hScpn1Vl82QwIyLsVYt2d7Z2OpCRWRj+yoEnVoR+mXkIdmnItNMzZCzCkwJzSVGC3spQvTWOmTFPHynvg+a65Ta+Gx6oBdU0tast8dprgrs8b27b0RSXZbG0lzvvHKMDk31Vrmw1r7zD48QKAlSPUpn3IYmu9TVSdTH7LHvP2pf//o3rIKQ6vgoM5CXNZbMNv1bWngxIPGWXPINpRFCGTnWvG4dqQI6S1Pf1dPba8133M3ghxDdLqglg7F0vc40QbDkdbfZFGbiOIQgcKxC1K59F8JH5l8u5+85dzbpx7JvshRyECCaY7wIpCbFWHCLRUEexJHGQ7ToHmWsbJKxUle4/BOCWkQARKcxUzjv5ZCyfFAvyelJAjAwbNqSlTHW3el6MfZhCnb2d9kf/sF/AMirLlgktxGgcQgmgvk0jRnsclocW1pZ96pxRe/0PUPr8Cm7ee8BzNArMXxpp3IWztE3X7R3Tp63u3b8PuaS6OryPl9+L9cLgQuv6t21x1Vyr6fk/vkXXrDz+L2bt2MRoY2UR/QhPDSTeCJM9BltMjufS7MINBmNXcWzAdILPjCdwdYLdCID4JyyTi6fbOU3qQgP5y3lOPnFJa51xalTJ+22229HWNPheetme+JfHrfb996MAqGokuc+h3muglL5hfIttSfShoLPCS2S6m8iE1R+pO8/fOXLD2VxQdUV2ItyurWwOxUJGunt5goAPDqpmXxp9XcRp3JhyvEUEedPLYE9hRKOq7ttzjiEdpm5VIms0a3F1F7JP52B69XSKrQM7ZkdhaDCURsiRC6zUNJE4MjVzNVCBfS+zbfZt//pn+zOA3fY3n03kW0vtiNv0IoAwGtuMM/WNzc7p7j/0jlFB9zlSTNOYyfHwPwtUl6eviRUcsCG7dq6lVzNBqR50C62AfAlD6TcXTWo7iVAriF8FR/mgPwjmVFeIo0ekqKLMKZC8s48ROrK4RWzjfV1u1IG9378DQ9QLC9Cy4sWSzGWih8zz5yANdDuCVDqc+NXZ6zlC3Y4OPZ1kesSA+tZKLczMT7I9WBJpC+JaZmwpDBi+Ao11U34Svtt/OI7losvGENAtKAtfv7881QuT1kzEdLzlzpty9YdDKggQsa1jc6TQ6tMgLqgPTT3dK01x30fffMV7jlqzQV3Es0D08c9CxokYZS+vFx3BmZqIfm8p3/+rH3zW990Y5+++KUvOjhZkGeRhbkuU3IIK0cCQgl31/w1jzwfkUJsAPzBpO+r1tnz5JjUcUqWBxwmTZF+SqwS1cSFEB6kIqCFM6QFGhoabAx0T39Pl20jPVNQU263UukxhgBWtFZugMxrQdxcrIGGuEKsSKhp71XYqhSMQvJKSsvM9weQnIVwL3rXXUCCAy12tNu4+r1xIDfUbNWGpK5U9r3CyjJTatZvTP3Z/VT+RshjRdSuJrGijAs13AVtdnhqhnDxAh18gNGwxntGksWS7l980/PAbEtf+txNu/dSdk1zT4TAjt073ctKcDfRnUlRMVXnPvjxL1hv54WVj2qjFFiIU4wl7XHltiffNo+Eno5QFEmAYOO6Jsy4PBseGLVWsvDeg0t2c/MGqxkkwIEko8keIU+YBclWsHarhSGAeZmeYUro5fgWMNu5t4cyBYINMKES6JkenF6AoKmAkc6qXFjo4jnLam+18Zt3O8aKAtv5hQus5zz5JiIk3G+Qz+F35F+2INzn2ROoiGiiSoWYSc1z7Wg5jpZgeBv7WjixZB1o5x8//6KtW9cMquO8dXV0Wld/t928ZxcTV8Dv0Q6vpoFOxmu34BIs+4VXubgZpPzJt4/TdctsY/ndYCMpFcFUVtLZH8X1QIDLr5UgkFDxct9lCIcQwYsXDx60T//ap131sdDmTRB8NlbFDMlitRBQpbYbDEJQIbeQ6ZYI5aw4QSLqBd1zINIqZSCgrYfASITIdowpfmGeuULmokP1OFHLhyCwJvm7rzz3AlHBky4IdP8DH7ZjCOYLCM4C4TJHTjpGdn44frRyl/nQqHrdTyBgFyZUyUzLNczVIHnL2BhxBhhOaHsFsv5/3cvHzbhT8yMAAAAASUVORK5CYII="
+ }
+ },
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "![Screenshot%202022-10-27%20at%2009.17.50.png](attachment:Screenshot%202022-10-27%20at%2009.17.50.png)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "map_1"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "Second way to add a tuned marker to the map"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 2nd Marker: beach"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Kwargs --> https://book.pythontips.com/en/latest/args_and_kwargs.html \n",
+ "https://j2logo.com/args-y-kwargs-en-python/"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "## Don't bike during work-days 🤕"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "To teach this example, we use a dataset where we already have some latitude and longitude columns "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " fecha | \n",
+ " dia | \n",
+ " year | \n",
+ " horario | \n",
+ " festividad | \n",
+ " tipo_accidente | \n",
+ " lesividad | \n",
+ " meteo | \n",
+ " distrito | \n",
+ " direccion | \n",
+ " lon | \n",
+ " lat | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 2019-01-01 14:00:00 | \n",
+ " 2019-01-01 00:00:00 | \n",
+ " 2019 | \n",
+ " Tarde | \n",
+ " Festivo | \n",
+ " Colision | \n",
+ " Moderada | \n",
+ " Despejado | \n",
+ " SALAMANCA | \n",
+ " CALLE CASTELLO / CALLE DON RAMON DE LA CRUZ Ma... | \n",
+ " -3.681209 | \n",
+ " 40.428990 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2019-01-02 21:00:00 | \n",
+ " 2019-01-02 00:00:00 | \n",
+ " 2019 | \n",
+ " Noche | \n",
+ " Laborable | \n",
+ " Colision | \n",
+ " Grave | \n",
+ " Despejado | \n",
+ " HORTALEZA | \n",
+ " AVDA. GRAN VIA DE HORTALEZA / GTA. LUIS ROSALE... | \n",
+ " -3.654527 | \n",
+ " 40.466921 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 2019-01-03 14:00:00 | \n",
+ " 2019-01-03 00:00:00 | \n",
+ " 2019 | \n",
+ " Tarde | \n",
+ " Laborable | \n",
+ " Colision | \n",
+ " Leve | \n",
+ " Despejado | \n",
+ " VILLA DE VALLECAS | \n",
+ " CALLE FELIPE ALVAREZ 10 Madrid | \n",
+ " -3.623423 | \n",
+ " 40.381971 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 2019-01-03 13:00:00 | \n",
+ " 2019-01-03 00:00:00 | \n",
+ " 2019 | \n",
+ " Tarde | \n",
+ " Laborable | \n",
+ " Colision | \n",
+ " Leve | \n",
+ " Despejado | \n",
+ " VILLA DE VALLECAS | \n",
+ " AVDA. SANTA EUGENIA / CALLE REAL DE ARGANDA Ma... | \n",
+ " -3.608276 | \n",
+ " 40.377939 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 2019-01-03 13:00:00 | \n",
+ " 2019-01-03 00:00:00 | \n",
+ " 2019 | \n",
+ " Tarde | \n",
+ " Laborable | \n",
+ " Colision | \n",
+ " Leve | \n",
+ " Despejado | \n",
+ " VILLA DE VALLECAS | \n",
+ " AVDA. SANTA EUGENIA / CALLE REAL DE ARGANDA Ma... | \n",
+ " -3.608276 | \n",
+ " 40.377939 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 2192 | \n",
+ " 2017-12-26 18:00:00 | \n",
+ " 2017-12-26 00:00:00 | \n",
+ " 2017 | \n",
+ " Tarde | \n",
+ " Laborable | \n",
+ " Colision | \n",
+ " Leve | \n",
+ " Lluvia | \n",
+ " RETIRO | \n",
+ " AVENIDA DE MENENDEZ PELAYO - CALLE DEL DOCE DE... | \n",
+ " -3.677848 | \n",
+ " 40.415537 | \n",
+ "
\n",
+ " \n",
+ " 2193 | \n",
+ " 2017-12-27 00:00:00 | \n",
+ " 2017-12-27 00:00:00 | \n",
+ " 2017 | \n",
+ " Noche | \n",
+ " Laborable | \n",
+ " Caida | \n",
+ " Leve | \n",
+ " Lluvia | \n",
+ " CHAMBERI | \n",
+ " CALLE DE FUENCARRAL NUM ... | \n",
+ " -3.702841 | \n",
+ " 40.429487 | \n",
+ "
\n",
+ " \n",
+ " 2194 | \n",
+ " 2017-12-29 07:00:00 | \n",
+ " 2017-12-29 00:00:00 | \n",
+ " 2017 | \n",
+ " Mañana | \n",
+ " Laborable | \n",
+ " Colision | \n",
+ " Leve | \n",
+ " Despejado | \n",
+ " BARAJAS | \n",
+ " AVENIDA SUR DEL AEROPUERTO DE BARAJAS - AVENI... | \n",
+ " -3.580041 | \n",
+ " 40.456254 | \n",
+ "
\n",
+ " \n",
+ " 2195 | \n",
+ " 2017-12-30 11:00:00 | \n",
+ " 2017-12-30 00:00:00 | \n",
+ " 2017 | \n",
+ " Mañana | \n",
+ " Vispera | \n",
+ " Caida | \n",
+ " Leve | \n",
+ " Despejado | \n",
+ " CENTRO | \n",
+ " CALLE DE LA MADERA NUM ... | \n",
+ " -3.703295 | \n",
+ " 40.424769 | \n",
+ "
\n",
+ " \n",
+ " 2196 | \n",
+ " 2017-12-31 21:00:00 | \n",
+ " 2017-12-31 00:00:00 | \n",
+ " 2017 | \n",
+ " Noche | \n",
+ " Festivo | \n",
+ " Colision | \n",
+ " Leve | \n",
+ " Lluvia | \n",
+ " CHAMBERI | \n",
+ " PASEO DE EDUARDO DATO NUM ... | \n",
+ " -3.696201 | \n",
+ " 40.432461 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
2197 rows × 12 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fecha dia year horario festividad \n",
+ "0 2019-01-01 14:00:00 2019-01-01 00:00:00 2019 Tarde Festivo \\\n",
+ "1 2019-01-02 21:00:00 2019-01-02 00:00:00 2019 Noche Laborable \n",
+ "2 2019-01-03 14:00:00 2019-01-03 00:00:00 2019 Tarde Laborable \n",
+ "3 2019-01-03 13:00:00 2019-01-03 00:00:00 2019 Tarde Laborable \n",
+ "4 2019-01-03 13:00:00 2019-01-03 00:00:00 2019 Tarde Laborable \n",
+ "... ... ... ... ... ... \n",
+ "2192 2017-12-26 18:00:00 2017-12-26 00:00:00 2017 Tarde Laborable \n",
+ "2193 2017-12-27 00:00:00 2017-12-27 00:00:00 2017 Noche Laborable \n",
+ "2194 2017-12-29 07:00:00 2017-12-29 00:00:00 2017 Mañana Laborable \n",
+ "2195 2017-12-30 11:00:00 2017-12-30 00:00:00 2017 Mañana Vispera \n",
+ "2196 2017-12-31 21:00:00 2017-12-31 00:00:00 2017 Noche Festivo \n",
+ "\n",
+ " tipo_accidente lesividad meteo distrito \n",
+ "0 Colision Moderada Despejado SALAMANCA \\\n",
+ "1 Colision Grave Despejado HORTALEZA \n",
+ "2 Colision Leve Despejado VILLA DE VALLECAS \n",
+ "3 Colision Leve Despejado VILLA DE VALLECAS \n",
+ "4 Colision Leve Despejado VILLA DE VALLECAS \n",
+ "... ... ... ... ... \n",
+ "2192 Colision Leve Lluvia RETIRO \n",
+ "2193 Caida Leve Lluvia CHAMBERI \n",
+ "2194 Colision Leve Despejado BARAJAS \n",
+ "2195 Caida Leve Despejado CENTRO \n",
+ "2196 Colision Leve Lluvia CHAMBERI \n",
+ "\n",
+ " direccion lon lat \n",
+ "0 CALLE CASTELLO / CALLE DON RAMON DE LA CRUZ Ma... -3.681209 40.428990 \n",
+ "1 AVDA. GRAN VIA DE HORTALEZA / GTA. LUIS ROSALE... -3.654527 40.466921 \n",
+ "2 CALLE FELIPE ALVAREZ 10 Madrid -3.623423 40.381971 \n",
+ "3 AVDA. SANTA EUGENIA / CALLE REAL DE ARGANDA Ma... -3.608276 40.377939 \n",
+ "4 AVDA. SANTA EUGENIA / CALLE REAL DE ARGANDA Ma... -3.608276 40.377939 \n",
+ "... ... ... ... \n",
+ "2192 AVENIDA DE MENENDEZ PELAYO - CALLE DEL DOCE DE... -3.677848 40.415537 \n",
+ "2193 CALLE DE FUENCARRAL NUM ... -3.702841 40.429487 \n",
+ "2194 AVENIDA SUR DEL AEROPUERTO DE BARAJAS - AVENI... -3.580041 40.456254 \n",
+ "2195 CALLE DE LA MADERA NUM ... -3.703295 40.424769 \n",
+ "2196 PASEO DE EDUARDO DATO NUM ... -3.696201 40.432461 \n",
+ "\n",
+ "[2197 rows x 12 columns]"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df = pd.read_csv(\"../datasets/bici_clean.csv\")\n",
+ "df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "We are going to iterate over all the rows of the dataframe looking for what is inside each row in the column.\n",
+ "We will put an icon to the accidents based on the \"holiday\" column\n",
+ "But we will have to save the settings and add the Marker at the end and all this inside a loop 🤭🤯\n",
+ "- First the tooltip config\n",
+ "- Then the little icon depending on the holiday\n",
+ "- Finally add each marker"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# https://datos.madrid.es/portal/site/egob/menuitem.9e1e2f6404558187cf35cf3584f1a5a0/?vgnextoid=374512b9ace9f310VgnVCM100000171f5a0aRCRD&vgnextchannel=374512b9ace9f310VgnVCM100000171f5a0aRCRD&vgnextfmt=default"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "Is that the best way to visualize this? We have created a map with infinite markers...but is there another way to visualize this information a little better?\n",
+ "When we have a lot of grouped data 🗺"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " fecha | \n",
+ " dia | \n",
+ " year | \n",
+ " horario | \n",
+ " festividad | \n",
+ " tipo_accidente | \n",
+ " lesividad | \n",
+ " meteo | \n",
+ " distrito | \n",
+ " direccion | \n",
+ " lon | \n",
+ " lat | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 1421 | \n",
+ " 2018-12-03 13:00:00 | \n",
+ " 2018-12-03 00:00:00 | \n",
+ " 2018 | \n",
+ " Tarde | \n",
+ " Laborable | \n",
+ " Caida | \n",
+ " Leve | \n",
+ " Despejado | \n",
+ " MONCLOA-ARAVACA | \n",
+ " LUGAR DE LA CASA DE CAMPO Madrid | \n",
+ " -3.748837 | \n",
+ " 40.419742 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fecha dia year horario festividad \n",
+ "1421 2018-12-03 13:00:00 2018-12-03 00:00:00 2018 Tarde Laborable \\\n",
+ "\n",
+ " tipo_accidente lesividad meteo distrito \n",
+ "1421 Caida Leve Despejado MONCLOA-ARAVACA \\\n",
+ "\n",
+ " direccion lon lat \n",
+ "1421 LUGAR DE LA CASA DE CAMPO Madrid -3.748837 40.419742 "
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.sample()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df[\"distrito\"] = df[\"distrito\"].apply(lambda x: x.strip())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array(['SALAMANCA', 'HORTALEZA', 'VILLA DE VALLECAS', 'MONCLOA-ARAVACA',\n",
+ " 'CHAMARTÍN', 'MORATALAZ', 'FUENCARRAL-EL PARDO', 'ARGANZUELA',\n",
+ " 'CARABANCHEL', 'CENTRO', 'LATINA', 'CHAMBERÍ', 'CIUDAD LINEAL',\n",
+ " 'RETIRO', 'SAN BLAS-CANILLEJAS', 'VICÁLVARO', 'PUENTE DE VALLECAS',\n",
+ " 'TETUÁN', 'USERA', 'BARAJAS', 'VILLAVERDE', 'SAN BLAS', 'TETUAN',\n",
+ " 'CHAMBERI', 'CHAMARTIN', 'VICALVARO'], dtype=object)"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df[\"distrito\"].unique()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "distrito\n",
+ "CENTRO 388\n",
+ "RETIRO 169\n",
+ "SALAMANCA 148\n",
+ "ARGANZUELA 146\n",
+ "MONCLOA-ARAVACA 136\n",
+ "CARABANCHEL 118\n",
+ "CHAMBERI 102\n",
+ "FUENCARRAL-EL PARDO 99\n",
+ "PUENTE DE VALLECAS 86\n",
+ "HORTALEZA 78\n",
+ "LATINA 75\n",
+ "CIUDAD LINEAL 75\n",
+ "TETUAN 72\n",
+ "USERA 63\n",
+ "CHAMBERÍ 60\n",
+ "SAN BLAS 60\n",
+ "CHAMARTIN 50\n",
+ "VILLA DE VALLECAS 44\n",
+ "MORATALAZ 43\n",
+ "TETUÁN 41\n",
+ "VILLAVERDE 41\n",
+ "BARAJAS 34\n",
+ "CHAMARTÍN 28\n",
+ "VICALVARO 17\n",
+ "SAN BLAS-CANILLEJAS 16\n",
+ "VICÁLVARO 8\n",
+ "Name: count, dtype: int64"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df[\"distrito\"].value_counts()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "mad_lat = 40.4166852\n",
+ "mad_lon = -3.705739617\n",
+ "\n",
+ "# 1. Map\n",
+ "mad_map = Map(location = [mad_lat, mad_lon], zoom_start = 15)\n",
+ "#mad_map"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mad_map"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Festivos vs Holiday vs vispera"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "ValueError",
+ "evalue": "Marker location must be assigned when added directly to map.",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
+ "File \u001b[0;32m~/anaconda3/envs/ironhack/lib/python3.9/site-packages/IPython/core/formatters.py:343\u001b[0m, in \u001b[0;36mBaseFormatter.__call__\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 341\u001b[0m method \u001b[38;5;241m=\u001b[39m get_real_method(obj, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprint_method)\n\u001b[1;32m 342\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m method \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 343\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mmethod\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 344\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 345\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n",
+ "File \u001b[0;32m~/anaconda3/envs/ironhack/lib/python3.9/site-packages/folium/folium.py:319\u001b[0m, in \u001b[0;36mMap._repr_html_\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 317\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_parent \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 318\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 319\u001b[0m out \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_parent\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_repr_html_\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 320\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m out\n",
+ "File \u001b[0;32m~/anaconda3/envs/ironhack/lib/python3.9/site-packages/branca/element.py:343\u001b[0m, in \u001b[0;36mFigure._repr_html_\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 341\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_repr_html_\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 342\u001b[0m \u001b[38;5;124;03m\"\"\"Displays the Figure in a Jupyter notebook.\"\"\"\u001b[39;00m\n\u001b[0;32m--> 343\u001b[0m html \u001b[38;5;241m=\u001b[39m escape(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrender\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 344\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mheight \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 345\u001b[0m iframe \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 346\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 347\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m
\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;66;03m# noqa\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 353\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m
\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 354\u001b[0m )\u001b[38;5;241m.\u001b[39mformat(html\u001b[38;5;241m=\u001b[39mhtml, width\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mwidth, ratio\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mratio)\n",
+ "File \u001b[0;32m~/anaconda3/envs/ironhack/lib/python3.9/site-packages/branca/element.py:338\u001b[0m, in \u001b[0;36mFigure.render\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 336\u001b[0m \u001b[38;5;124;03m\"\"\"Renders the HTML representation of the element.\"\"\"\u001b[39;00m\n\u001b[1;32m 337\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m name, child \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_children\u001b[38;5;241m.\u001b[39mitems():\n\u001b[0;32m--> 338\u001b[0m \u001b[43mchild\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrender\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 339\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_template\u001b[38;5;241m.\u001b[39mrender(this\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m, kwargs\u001b[38;5;241m=\u001b[39mkwargs)\n",
+ "File \u001b[0;32m~/anaconda3/envs/ironhack/lib/python3.9/site-packages/folium/folium.py:401\u001b[0m, in \u001b[0;36mMap.render\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 374\u001b[0m figure\u001b[38;5;241m.\u001b[39mheader\u001b[38;5;241m.\u001b[39madd_child(\n\u001b[1;32m 375\u001b[0m Element(\n\u001b[1;32m 376\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\n",
+ "\n",
+ " \n",
+ " \n",
+ " | \n",
+ " fecha | \n",
+ " dia | \n",
+ " year | \n",
+ " horario | \n",
+ " festividad | \n",
+ " tipo_accidente | \n",
+ " lesividad | \n",
+ " meteo | \n",
+ " distrito | \n",
+ " direccion | \n",
+ " lon | \n",
+ " lat | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 1716 | \n",
+ " 2017-05-25 23:00:00 | \n",
+ " 2017-05-25 00:00:00 | \n",
+ " 2017 | \n",
+ " Noche | \n",
+ " Laborable | \n",
+ " Caida | \n",
+ " Leve | \n",
+ " Despejado | \n",
+ " CENTRO | \n",
+ " CALLE GRAN VIA NUM ... | \n",
+ " -3.700988 | \n",
+ " 40.419598 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ ""
+ ],
+ "text/plain": [
+ " fecha dia year horario festividad \n",
+ "1716 2017-05-25 23:00:00 2017-05-25 00:00:00 2017 Noche Laborable \\\n",
+ "\n",
+ " tipo_accidente lesividad meteo distrito \n",
+ "1716 Caida Leve Despejado CENTRO \\\n",
+ "\n",
+ " direccion lon lat \n",
+ "1716 CALLE GRAN VIA NUM ... -3.700988 40.419598 "
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.sample()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "## Morning bikers will be safer 🚴"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "Let's check how many categories there are in the time column, to make a heat map. First we make a map with the morning schedule, and then we add the afternoon schedule with the Layer Control.\n",
+ "Here we go 🔥"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "### We create the basic map to which we then add the layers"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 48,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 Tarde\n",
+ "1 Noche\n",
+ "2 Tarde\n",
+ "3 Tarde\n",
+ "4 Tarde\n",
+ " ... \n",
+ "2192 Tarde\n",
+ "2193 Noche\n",
+ "2194 Mañana\n",
+ "2195 Mañana\n",
+ "2196 Noche\n",
+ "Name: horario, Length: 2197, dtype: object"
+ ]
+ },
+ "execution_count": 48,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df[\"horario\"]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 60,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "mad_map = Map(location=[mad_lat, mad_lon], zoom_start=15)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 61,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 61,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mad_map"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 62,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "morning = df[df[\"horario\"] == \"Mañana\"]\n",
+ "evening = df[df[\"horario\"] == \"Tarde\"]\n",
+ "night = df[df[\"horario\"] == \"Noche\"]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "### Subset the dataframe per layer"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "### We create the FeatureGroup"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 63,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 63,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "morning = df[df[\"horario\"] == \"Mañana\"]\n",
+ "morning_group = folium.FeatureGroup(name=f\"Morning: {morning.shape[0]}\")\n",
+ "HeatMap(data = morning[[\"lat\", \"lon\"]]).add_to(morning_group) #only the lat,lon from the mornings\n",
+ "morning_group.add_to(mad_map)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 64,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 64,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mad_map"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "### Create the HeatMap layer and add it to the FeatureGroup"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 65,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 65,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#morning = df[df[\"horario\"] == \"Mañana\"]\n",
+ "evening_group = folium.FeatureGroup(name=f\"Evening: {evening.shape[0]}\")\n",
+ "HeatMap(data = evening[[\"lat\", \"lon\"]]).add_to(evening_group) #only the lat,lon from the mornings\n",
+ "evening_group.add_to(mad_map)\n",
+ "\n",
+ "#morning = df[df[\"horario\"] == \"Mañana\"]\n",
+ "night_group = folium.FeatureGroup(name=f\"Night: {night.shape[0]}\")\n",
+ "HeatMap(data = night[[\"lat\", \"lon\"]]).add_to(night_group) #only the lat,lon from the mornings\n",
+ "night_group.add_to(mad_map)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 66,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 66,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mad_map"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "### Add the FeatureGroup with heatmap and name to the map"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Adding the evenings"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "### Night layer"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 67,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "folium.LayerControl(collapsed=False, position=\"topleft\").add_to(mad_map);"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 68,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 68,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mad_map"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "lang": "en"
+ },
+ "source": [
+ "### We can save our maps"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 71,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "mad_map.save(\"mad_map_accidents_layers.html\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 73,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#!open mad_map_accidents_layers.html"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 70,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['choropleth',\n",
+ " 'crs',\n",
+ " 'height',\n",
+ " 'left',\n",
+ " 'location',\n",
+ " 'options',\n",
+ " 'position',\n",
+ " 'render',\n",
+ " 'save',\n",
+ " 'top',\n",
+ " 'width']"
+ ]
+ },
+ "execution_count": 70,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "[i for i in dir(mad_map) if \"_\" not in i]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Your turn"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Extra\n",
+ "\n",
+ "[Can I draw lines in folium?](https://stackoverflow.com/questions/60578408/is-it-possible-to-draw-paths-in-folium)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "- Lat, lon: different tools: different conventions: watch out not to be in Kenya\n",
+ "- Maps ()\n",
+ " Marker()\n",
+ " Icon()\n",
+ " \n",
+ " FeatureGroups, HeatMaps...\n",
+ " LayerControl -> menu on the map itself"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "ironhack",
+ "language": "python",
+ "name": "ironhack"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.12"
+ },
+ "nbTranslate": {
+ "displayLangs": [
+ "en",
+ "es"
+ ],
+ "hotkey": "alt-a",
+ "langInMainMenu": true,
+ "sourceLang": "es",
+ "targetLang": "en",
+ "useGoogleTranslate": true
+ },
+ "toc": {
+ "base_numbering": 1,
+ "nav_menu": {},
+ "number_sections": true,
+ "sideBar": true,
+ "skip_h1_title": true,
+ "title_cell": "Table of Contents",
+ "title_sidebar": "Contents",
+ "toc_cell": true,
+ "toc_position": {
+ "height": "calc(100% - 180px)",
+ "left": "10px",
+ "top": "150px",
+ "width": "260px"
+ },
+ "toc_section_display": true,
+ "toc_window_display": false
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/challenge-2.ipynb b/challenge-2.ipynb
index df5e7f0..9600711 100644
--- a/challenge-2.ipynb
+++ b/challenge-2.ipynb
@@ -10,7 +10,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": 82,
"id": "9b373771",
"metadata": {},
"outputs": [],
@@ -21,22 +21,187 @@
"from getpass import getpass"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 83,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "True"
+ ]
+ },
+ "execution_count": 83,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import os\n",
+ "from dotenv import load_dotenv\n",
+ "load_dotenv()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 84,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "token = os.getenv(\"token\")"
+ ]
+ },
{
"cell_type": "markdown",
"id": "e94dce92",
"metadata": {},
"source": [
- "# 2. Get names and location of the 10 coffee places by passing Ironhack as your location"
+ "# 2. Get names and location of the 10 coffee places by passing Ironhack as your location"
]
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 97,
"id": "1d72f571",
"metadata": {},
"outputs": [],
"source": [
- "# your code here"
+ "lat = 41.3977461\n",
+ "lon = 2.187674417\n",
+ "\n",
+ "def requests_for_foursquare (query, lat, lon, radius=500, limit=1):\n",
+ "\n",
+ " url = f\"https://api.foursquare.com/v3/places/search?query={query}&ll={lat}%2C{lon}&radius={radius}&limit={limit}&sort=DISTANCE\"\n",
+ "\n",
+ " headers = {\n",
+ " \"accept\": \"application/json\",\n",
+ " \"Authorization\": token\n",
+ " }\n",
+ " \n",
+ " try:\n",
+ " return requests.get(url, headers=headers).json()\n",
+ " except:\n",
+ " print(\"no :(\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 111,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " name | \n",
+ " address | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " Espacio 88 | \n",
+ " Carrer Pamplona, 88 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " SKYE Coffee Co | \n",
+ " Calle Pamplona, 88 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " Granja Mabel | \n",
+ " Marina, 114-116 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " Three Marks Coffee | \n",
+ " Ausiàs Marc, 151 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " El Bar | \n",
+ " Ribes, 46 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " El Cafè Blau | \n",
+ " Casp, 192 | \n",
+ "
\n",
+ " \n",
+ " 6 | \n",
+ " Cantina Restobar | \n",
+ " Marina, 164 | \n",
+ "
\n",
+ " \n",
+ " 7 | \n",
+ " Eva-2 | \n",
+ " Bolivia, 21 | \n",
+ "
\n",
+ " \n",
+ " 8 | \n",
+ " De Pa i Xocolata | \n",
+ " Carrer de la Marina, 92 | \n",
+ "
\n",
+ " \n",
+ " 9 | \n",
+ " La Rourera | \n",
+ " Gran Vía de Les Corts Catalanes, 792 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " name address\n",
+ "0 Espacio 88 Carrer Pamplona, 88\n",
+ "1 SKYE Coffee Co Calle Pamplona, 88\n",
+ "2 Granja Mabel Marina, 114-116\n",
+ "3 Three Marks Coffee Ausiàs Marc, 151\n",
+ "4 El Bar Ribes, 46\n",
+ "5 El Cafè Blau Casp, 192\n",
+ "6 Cantina Restobar Marina, 164\n",
+ "7 Eva-2 Bolivia, 21\n",
+ "8 De Pa i Xocolata Carrer de la Marina, 92\n",
+ "9 La Rourera Gran Vía de Les Corts Catalanes, 792"
+ ]
+ },
+ "execution_count": 111,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "res = requests_for_foursquare (\"coffee\", lat, lon, radius=500, limit=10)\n",
+ "\n",
+ "name = [(res[\"results\"][i][\"name\"]) for i in range(10)]\n",
+ "address = [(res[\"results\"][i][\"location\"][\"address\"]) for i in range(10)]\n",
+ "\n",
+ "new = {}\n",
+ "\n",
+ "new[\"name\"] = name\n",
+ "new[\"address\"] = address\n",
+ "\n",
+ "df = pd.DataFrame(new)\n",
+ "df"
]
},
{
@@ -44,17 +209,98 @@
"id": "941b5dbf",
"metadata": {},
"source": [
- "# 3. Now get the 5 CLOSEST coffe places. Make use of params: limit, near?"
+ "# 3. Now get the 5 CLOSEST coffe places. Make use of params: limit, near?"
]
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 112,
"id": "fda8ddff",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " name | \n",
+ " distance | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " Espacio 88 | \n",
+ " 311 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " SKYE Coffee Co | \n",
+ " 320 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " Granja Mabel | \n",
+ " 327 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " Three Marks Coffee | \n",
+ " 354 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " El Bar | \n",
+ " 364 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " name distance\n",
+ "0 Espacio 88 311\n",
+ "1 SKYE Coffee Co 320\n",
+ "2 Granja Mabel 327\n",
+ "3 Three Marks Coffee 354\n",
+ "4 El Bar 364"
+ ]
+ },
+ "execution_count": 112,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- "# your code here"
+ "res = requests_for_foursquare (\"coffee\", lat, lon, radius=500, limit=10)\n",
+ "res[\"results\"][0][\"distance\"]\n",
+ "\n",
+ "name = [res[\"results\"][i][\"name\"] for i in range(5)]\n",
+ "distance = [res[\"results\"][i][\"distance\"] for i in range(5)]\n",
+ "\n",
+ "new = {}\n",
+ "\n",
+ "new[\"name\"] = name\n",
+ "new[\"distance\"] = distance\n",
+ "\n",
+ "df = pd.DataFrame(new)\n",
+ "df"
]
},
{
@@ -62,18 +308,104 @@
"id": "d19904e8",
"metadata": {},
"source": [
- "# 4. Define a function that returns name, lat, long for starbucks OR restaurants AND for any given location"
+ "# 4. Define a function that returns name, lat, long for starbucks OR restaurants AND for any given location"
]
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 146,
"id": "1fad5153",
"metadata": {},
"outputs": [],
"source": [
+ "limit = 1\n",
+ "\n",
"def foursquare_places (venue, coordinates):\n",
- " pass"
+ " \n",
+ " url = f\"https://api.foursquare.com/v3/places/search?query={venue}&ll={coordinates[0]}%2C{coordinates[1]}&radius=1000&limit={limit}&sort=DISTANCE\"\n",
+ "\n",
+ " headers = {\n",
+ " \"accept\": \"application/json\",\n",
+ " \"Authorization\": token\n",
+ " }\n",
+ " \n",
+ " try:\n",
+ " res = requests.get(url, headers=headers).json()\n",
+ " names = [res[\"results\"][i][\"name\"] for i in range(limit)]\n",
+ " lat = [res[\"results\"][i][\"geocodes\"][\"main\"][\"latitude\"] for i in range(limit)]\n",
+ " lon = [res[\"results\"][i][\"geocodes\"][\"main\"][\"longitude\"] for i in range(limit)]\n",
+ "\n",
+ " db = {}\n",
+ "\n",
+ " db[\"name\"] = names\n",
+ " db[\"latitude\"] = lat\n",
+ " db[\"longitud\"] = lon\n",
+ "\n",
+ " df = pd.DataFrame(db)\n",
+ " return df\n",
+ " \n",
+ " except:\n",
+ " print(\"no :(\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 147,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " name | \n",
+ " latitude | \n",
+ " longitud | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " Starbucks | \n",
+ " 41.392007 | \n",
+ " 2.180638 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " name latitude longitud\n",
+ "0 Starbucks 41.392007 2.180638"
+ ]
+ },
+ "execution_count": 147,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "venue = \"starbucks\"\n",
+ "coordinates = [41.3977461, 2.187674417]\n",
+ "\n",
+ "res = foursquare_places(venue, coordinates)\n",
+ "res"
]
},
{
@@ -86,7 +418,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 89,
"id": "7ac5f2a8",
"metadata": {},
"outputs": [],
@@ -104,7 +436,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 90,
"id": "85b94955",
"metadata": {},
"outputs": [],
@@ -117,7 +449,7 @@
"kernelspec": {
"display_name": "ironhack",
"language": "python",
- "name": "ironhack"
+ "name": "python3"
},
"language_info": {
"codemirror_mode": {
@@ -129,7 +461,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.8.13"
+ "version": "3.11.5"
},
"toc": {
"base_numbering": 1,
diff --git a/data/coffe_shops.json b/data/coffe_shops.json
new file mode 100644
index 0000000..3620cb4
--- /dev/null
+++ b/data/coffe_shops.json
@@ -0,0 +1 @@
+{"name":{"0":"Can Dend\u00ea","1":"La Tavern\u00edcola","2":"Little Fern","3":"Parking Pizza","4":"Funky Bakers"},"latitude":{"0":41.39836,"1":41.400358,"2":41.402328,"3":41.396301,"4":41.394916},"longitud":{"0":2.198345,"1":2.197944,"2":2.197571,"3":2.174171,"4":2.172866}}
\ No newline at end of file
diff --git a/foursquaredata.txt b/foursquaredata.txt
new file mode 100644
index 0000000..fb77f10
--- /dev/null
+++ b/foursquaredata.txt
@@ -0,0 +1,3 @@
+newprojectkey = "fsq3fQnHboOxddC78bl5nAO+qufPkDwwBgQD/jDqx+sRkok="
+clientid = "PEHVZRPXTB4QW2YB523S3LBBW14QEL4BWZXGRKJ35ORBJA4Q"
+clientsecret = "5IZTH4JRSQZBPP3BNGRT23G3DDP1QAFJHHRCILPQXHLQQ51V"
\ No newline at end of file