├── Images ├── Grades.jpg ├── Grades.png ├── Grades_d3.png ├── Qwixx.png ├── Tekening1.jpg ├── appstore.png ├── auction_result.jpg ├── auction_result.png ├── emte.gif ├── face.gif ├── kaggle.png ├── location.gif ├── logo.PNG ├── neural_style_transfer.jpg ├── neural_style_transfer.png ├── simulation.png └── website_visits.png ├── Notebooks ├── AppStoreAnalysis.ipynb ├── AuctionAnalysis.ipynb ├── GoogleTakeout.ipynb ├── Grades.ipynb ├── HousingPrices.ipynb ├── RouteOptimization.ipynb ├── Scorecard.ipynb └── simulation.ipynb └── README.md /Images/Grades.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaartenGr/Projects/27e4ff804d7044c8520520e076895764f179d0e5/Images/Grades.jpg -------------------------------------------------------------------------------- /Images/Grades.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaartenGr/Projects/27e4ff804d7044c8520520e076895764f179d0e5/Images/Grades.png -------------------------------------------------------------------------------- /Images/Grades_d3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaartenGr/Projects/27e4ff804d7044c8520520e076895764f179d0e5/Images/Grades_d3.png -------------------------------------------------------------------------------- /Images/Qwixx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaartenGr/Projects/27e4ff804d7044c8520520e076895764f179d0e5/Images/Qwixx.png -------------------------------------------------------------------------------- /Images/Tekening1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaartenGr/Projects/27e4ff804d7044c8520520e076895764f179d0e5/Images/Tekening1.jpg -------------------------------------------------------------------------------- /Images/appstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaartenGr/Projects/27e4ff804d7044c8520520e076895764f179d0e5/Images/appstore.png -------------------------------------------------------------------------------- /Images/auction_result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaartenGr/Projects/27e4ff804d7044c8520520e076895764f179d0e5/Images/auction_result.jpg -------------------------------------------------------------------------------- /Images/auction_result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaartenGr/Projects/27e4ff804d7044c8520520e076895764f179d0e5/Images/auction_result.png -------------------------------------------------------------------------------- /Images/emte.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaartenGr/Projects/27e4ff804d7044c8520520e076895764f179d0e5/Images/emte.gif -------------------------------------------------------------------------------- /Images/face.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaartenGr/Projects/27e4ff804d7044c8520520e076895764f179d0e5/Images/face.gif -------------------------------------------------------------------------------- /Images/kaggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaartenGr/Projects/27e4ff804d7044c8520520e076895764f179d0e5/Images/kaggle.png -------------------------------------------------------------------------------- /Images/location.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaartenGr/Projects/27e4ff804d7044c8520520e076895764f179d0e5/Images/location.gif -------------------------------------------------------------------------------- /Images/logo.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaartenGr/Projects/27e4ff804d7044c8520520e076895764f179d0e5/Images/logo.PNG -------------------------------------------------------------------------------- /Images/neural_style_transfer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaartenGr/Projects/27e4ff804d7044c8520520e076895764f179d0e5/Images/neural_style_transfer.jpg -------------------------------------------------------------------------------- /Images/neural_style_transfer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaartenGr/Projects/27e4ff804d7044c8520520e076895764f179d0e5/Images/neural_style_transfer.png -------------------------------------------------------------------------------- /Images/simulation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaartenGr/Projects/27e4ff804d7044c8520520e076895764f179d0e5/Images/simulation.png -------------------------------------------------------------------------------- /Images/website_visits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaartenGr/Projects/27e4ff804d7044c8520520e076895764f179d0e5/Images/website_visits.png -------------------------------------------------------------------------------- /Notebooks/GoogleTakeout.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "### Browserhistory" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 1, 13 | "metadata": {}, 14 | "outputs": [], 15 | "source": [ 16 | "import json\n", 17 | "\n", 18 | "import pandas as pd\n", 19 | "import numpy as np\n", 20 | "\n", 21 | "from datetime import datetime\n", 22 | "from datetime import timedelta\n", 23 | "\n", 24 | "import matplotlib.pyplot as plt\n", 25 | "import matplotlib.dates as mdates\n", 26 | "\n", 27 | "from scipy.interpolate import make_interp_spline, BSpline\n", 28 | "\n", 29 | "%matplotlib inline\n", 30 | "\n", 31 | "def create_smooth_dates(x, y, points=300):\n", 32 | " \"\"\" points is the number of points between x and y\n", 33 | " Lists of datetimes are expected for x and y lists of floats/ints\n", 34 | " \"\"\"\n", 35 | " x_smooth = np.linspace(0,len(x),points) \n", 36 | " spl = make_interp_spline(np.arange(0, len(x), 1), y, k=3) #BSpline object\n", 37 | " y_smooth = spl(x_smooth)\n", 38 | " x_smooth = [min(x) + timedelta(days=i) for i in range(0, points)]\n", 39 | " y_smooth = [i if i>0 else 0 for i in y_smooth]\n", 40 | " return x_smooth, y_smooth\n", 41 | "\n", 42 | "def load_prepare_data(json_path):\n", 43 | " with open(json_path) as f:\n", 44 | " data = json.load(f)\n", 45 | " df = pd.DataFrame(data['Browser History'])\n", 46 | " df['date'] = df.apply(lambda row: datetime.utcfromtimestamp(row.time_usec/1000000).strftime('%Y-%m-%d %H:%M:%S'), 1)\n", 47 | " df.date = pd.to_datetime(df.date)\n", 48 | " df.set_index('date', inplace=True)\n", 49 | " return df" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 2, 55 | "metadata": {}, 56 | "outputs": [], 57 | "source": [ 58 | "df = load_prepare_data('test.json')" 59 | ] 60 | }, 61 | { 62 | "cell_type": "markdown", 63 | "metadata": {}, 64 | "source": [ 65 | "**Visualize Number of Sites visited by either clicking on link or typing in browser**" 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": 3, 71 | "metadata": {}, 72 | "outputs": [ 73 | { 74 | "data": { 75 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmAAAAFTCAYAAACebbBOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJzs3Xl8XFX5+PHPk31fmjRrl6TpXrrSFoosBQRaFhEEBEFFRAS/rj8QERVBVEARFRFlExCQfaes3SiFFrqm+5Y2TZuk2fc0+/n9ce+kk2Qmmckyk6TP+/WaV2fOPXPuuZlp8/Q5554jxhiUUkoppZTvBPi7A0oppZRSxxsNwJRSSimlfEwDMKWUUkopH9MATCmllFLKxzQAU0oppZTyMQ3AlFJKKaV8TAMwpYYIEXlKRN7xdz+cicjFIrJXRFpE5KlevP9aEakdgK71iYhkiIgRkbke1l8pIg8NUF/e6c3PdiD19F0crJ+rUoOJBmBKecD+hWNE5Dedyhfa5Yn+6pufPQG8CowFftKL978IjHO8EJE7RWRbP/WtLw4BqcBmD+tfCvzS8UJEckXkloHomFJqeNAATCnPNQA/F5GR/u5IfxKR4F6+Lw5IAD4wxuQbY6q8bcMYc9QYU9yb8w8kY0yrMeaIMabFw/rlxpiage6XUmr40ABMKc+tAHKB37ir4Coj1nk4y6nOYhHZICJHReQTERklImeISLaI1NpDTwkuzvFrESmy6zwpIuFOx0REbhWRHLvdrSJyjYu+XCUiy0XkKPB9N9cSLyJPi0iF3dZSEZnmuAagwq663G5zoZt2LhWRLXYb5SLysYgk28fah6pE5Frgt8A0uz1jlyEisSLyqIgUi0iN3cZcp3PEisgz9vEGEdkvIj9105+JdtvTO5XfICKlIhLs4jMLFpEHRaRARBpF5JCI3Ov03vYhSBFZiZUR/LPjOpzqnWL3vV5E8kXkXyIS43Q8ws621tqf8e2urqFTvwtF5Eqn16vtn1GQ/Xq83Y9R9usQEblPRA7b/VgnIud1anOqiCyx2ykWkedFJKWbPsy0+/EHF8cyRKRNOg3nisj37J93SE/XqNRwpAGYUp5rA24DbhSRrH5o7y7gp8BJQDzWcNwdwA3AQmAacGen95wBzATOBr4GnAvc53T898B3gf8DpgL3AI+IyAWd2rkHeNiu84ab/j1l9+1iYD5QD7xvB3yf2f3D7keqXdaB/Uv7BeBpYApwOvCMm/O9CPwF2G23lwq8KCICLAHSgQuB2cAqrMAv1em6p9vHJwHXAfmuTmKM2QOsA67udOhq4CVjTLOLt/0YuAS4EpgAfN3upyuXAoeB3zldB3bA9yHwFtZneCkwC/iP03vvB87B+pmebV/r6W7O4/Ax1vcFEYkA5gGNgCPgWQjkGGMO26+fxPoefQM4AeuzeVtEZtptpGL9fLdhfe5fBqKAN0Wky+8METkNWAn8yRjzq87HjTG5wEdYn4mz64BnjDFNPVyfUsOTMUYf+tBHDw+sYOQd+/kK4AX7+ULAAImuXttlGXbZ3E51znOq80O7bI5T2Z3Atk59qASinMquwfplG2k/jgKnder734B3O/Xl5h6ud4Jd73SnsligCrjefp1o11nYTTtz7Dpj3Ry/Fqh1d8122VlALRDeqXwzcKv9/C3gP158nj8GDgJivx6DFWCf4uYzexBY5qjvor2VwENOr3OBWzrV+S/wRKeyWfZ5krCCnEbgaqfjUfZn/lQ313IjsNt+/mVgp/1d+aVd9izwuP08y77OMZ3aeAN42H7+O2BZp+Pxdj/nO/99wAp4q4Fv9fC5XoaVMQ2zX0+x2zvB13+X9aGPwfLQDJhS3vsFcLmInNjHdrY4PS+y/9zaqSyp83uMMc53l60BQrB+sU4FwrCyVLWOB3CTfdzZ+h76NgXrF/UaR4Gx5nhttc/jqWxgKbBNRF4VkZvE+zl0JwIRQEmn6zqBY9f1L+DrYg3f3i8iZ/TQ5gtAGnCa/foq4IAxpksWz/YUVrC0R0T+KSIXuMoGeXAd13S6hk/tY1n2I4SOP/NaOn4nXFkJTLQzVwux/oOw0n4OVrZrpf18DiDAjk79uIBjP8sTgdM7HT/k1E/n63kd+K4x5r899PFNoAkr6wdW9usLY8xguOFCKb8I8ncHlBpqjDFfiMirwJ+AuzsdbrP/FKcyd5PcnYe6jN125zJvfsk76l4E5HVzLoA6L9rtzPRcxa5oTKuInAucjDVc+l3gHhE5wxiT7WEzAVjB6GkujlXb53lPRMYCi7GG7paIyMvGmO+46VexiHyENey4yv7zuW6uY6OIZADn2e0/DWSLyDnGmDZ373NxHY8Df3VxLB+Y6GE7nfu2S0SOAGdiBV1/xxpifUhEpgCjOBaABWB9fvPo+p046lRnCeDqLs4ip+cHgGLgOyLyljGmsZs+NovIf4HrROQl4JtYw+1KHbc0AFOqd24HdgCLOpWX2H+mOj2f1Y/nnS4ikcYYRwB1MlZmIQfrF2cj1nDf8j6eZ6fd3gKsAAV7svh0rDlEHjPGGKyszhoR+R2wHWsOlasArAkI7FS2EUgG2owx+7s5TynW/LJnROQ94HkRubGbwOBZrCDlUazruqyH66gBXgFeEWtdrrXAeGCPF9cxzRizz1X7IpKDFRSdDOy3yyKxMn053fUNax7YBVjzvlYaY0pEpBS4lY7zvzZh/ecgxRizwk1bG4ErgIPG9Xw4h3LgK1hDs6+LyCXdBWFYwecO4AdANFYWUqnjlg5BKtUL9i/RR+m69tU+rOGaO+277c4Fft2Ppw4C/iMi00TkHOBe4DFjTJ0dINwP3C8i19l3v80SkRtF5AZvTmKM2Ys1bPSIiJxmTyB/Fivj9D9P2xGRk8W6a3OeiIzB+oU9GusXsSu5wFgRmSMiiSISijWE+SnWJPDFIpIpIgtE5C57Ajgi8jsR+aqITLCzPpcC+3sICN7Ayk4+Aawz1uR8d9fx/8S6c3SKiIzHmsBejTXZ3t11nCYi6XLsjtj7gPki8m8RmW1/PheKyCPQPtz4BHCfiJwj1h2n/6FrIOfKSqygaZ8xpsSp7BqOZb+wr/E54CkRuUxExonIXBG5RUQcw4P/xJrv96KInGTX+bJYd6FGO5/UDnrPxsqyvWZ/Xi4ZY3YDq4E/A68YY6o9uC6lhi0NwJTqvd8BHdaJsjMGV2ItLpqNdadjj0sJeOFjrAzSCqz5N8uxshwOv8GayH6LXe8jrDvqDvTiXN8BvsCa4P4F1jysRcaYo92+q6Mq4EtYE7b3Yt3leLcx5lk39V8F3sXKqpQAV9kZtPOxrvUxrLsPX8K627HAfl8j8Aesn/mnWBmWi7rrmDGmHutnOBMruOxODfBzrJ/DRqys5mK7DVfuwAo0c+zrwBizBeuOxgyszzEb625U52G9Wzj22a7AuhNxVQ99AyvICsIp2HJTBtbn+iTWEPourM/mdKybEjDGFGB9Zm3A+1jfo39i/Yy7BLR2EHaWfb2vdheEYQWYIfafSh3XHHcAKaWUUgNKRH6BNWm/V/PdlBpOdA6YUkqpASUiURzbrqrLYq1KHY90CFIppdRAewhr6PZT4BE/90WpQUGHIJVSSimlfEwzYEoppZRSPqYBmFJKKaWUj2kAppRSSinlYxqAKaWUUkr5mAZgSimllFI+pgGYUkoppZSPaQCmlFJKKeVjGoAppZRSSvmYBmBK+ZmIZIhIhYistB/L7PJrReQc+/mPneovFJHH++m8X+lrO920v1REMjqVzRKRn3vRxr7+7tdgIiJPicip9vPnuql3rYj8uhftXyMid/ahi53bWykio0QkRUT+4knd/jq3UsON7gWp1OCwwRjzZecCY8xTTi9/DDzYlxOISIAxps2pKAP4CvBWX9r1hjFmM7C5v9oTkUBjTGt/tdef5/K2vjHm6t71zPeMMUeAm/3dD6WGMs2AKTVIiciddgbjG0C6nVH4lX04U0ReEpGtInK5XX+0iCwRkeX2nyPt8n0i8kdgmYhEOJ3i/wEX2O2eKCJrnc79GxH5pp1tWyEir4vIZg/O9RMRWS8iLwIjXFxTe/bOzv48Zr9/rYgkufgxhIjIkyKyRkT+5NTGByLyMvAHEZloX8PHIvKiiISLyLdF5Gd2/fUicpP9/AsRCRaR++02V4jI1+1jPxKRT+zy6+2ya0XkZRF5A2sjaedruUhEPrfr/8ZV3zrVn+mU5Xzexc9mn/1nvIi8al/PChFJcaoTbP/cvmO/vseut0ZELrTLptrXuQQrwO5CRL5n9/1zEbnO6VrfEJHXRGSbiJzm6r123QwRWWo/v1NEnhORt+zvyOROdaeIlQ0d5649pY5Lxhh96EMffnxgZaIqgJX24zm7/E7gGvv5Pqf6C4ENQCCQBqy3y18ATrafXwzcbz/PBRa4OO9C4HGn188AcwGx2w+362zDypbHAHuw/uPW5VxAErDJqW4pkOHunMBTwE/t57cDP3TRx2ZgjN2nD4FZdhtbgWC7zhvA6fbzO7CyhaOBt4F4rAzf80Ay8L5dbzsQZD8PAKYAS+zzBAKfAQnAtcB72PvmOvUrANgLxNnvWQrM7Ny3Tu9ZA0y1nwc6/QxOdf6MgT8B3+90rmuB++xrPd8uXwT8234eAWTbfXnT8XkDjwF3durHSLtuiP3ItsuuBd6w65wCvOLiGlYCo7C+s0udvqd/s59/g2Pfu5XAFcD7wEh//z3Thz4G20OHIJUaHLoMQfZgs7GGtwpEJM4umw7cKyJgBUGO+VOtwNquTXTxKHA9VvC0xhhz1G5rkzGmBagWkWKsX9auzpUJbHOqu8uDc26w/8wDslwcP2KMyQMrewVMAoqwgs5mu85ErIAJ+89LjTGHRCQVOBsrELvIfr7Crncb8B8RaQP+DEy1H47jMVhBHMBaY4zp1K+RQJExptLu21q7b8Wd+uYs0RizA8B0PzR5AlbghF23zf45fwNYYox51z40HThDRFbar0OxgsYJwBd22edYAZOzccBWY0yT3fetWJ8ddPw8ErrpY2fO7zvHqfx+4OvGmBIv2lLquKBDkEoNDS0i4vz3tXNAAFZW52fGmIXGmFOBGxx1XQQQAE04zQM1xnyClWH6EU4BADBLRIJEJBori1Ti5lwHgGlOdTsMRbnh3C9xcTxZjk3knouVdQIrqHTYg5Wxwf5zt/18PfBzYDmwBWsIcYVY0cxSY8y3gMeB3wE7sbJ3ZxpjFgKzjTVfrfO5HErsvsXZ7Z3sdF53wVWJY3iu02fZ2TasTBqd6j4C1DuGO7E+gw/tz2AhMMMYU4oVDM+168xz0f4BYIaIhIhICFYgd8A+1tPn4Y67910K3Ccis71oS6njggZgSg0OJzrND1opIlGdjr8CLBGnuyFduBm4y56XtRxr+Kc7W4EsEXlFRKbbZS8Co4wx2U71CoCXgU+AXxtrIn+XcxljioFnsbIuj3Lsl3pfFAJ3iMgaYLsxZqOLOrcBd4vIKmCGfW6AZUCKMSbHfj4ZK1MTBLxnZ47uB54wxmzDGkb8WERWAG+KiNsRAvtn8HOsYdE1wCedfmau3AQ8Yp/X7R2PwD3A+fbcruVYQ7uO8/4/IEJE7rYzYTX292UF8IRd7XbgHyLyHtbQZOe+FwMPA6vtx0MDmKE6AnwN+KuIuAoGlTpuiev/GCuljkci8lOgzhjzmP16IdY8tOv92jGllBpmdA6YUgoAEbkPa8jqAn/3RSmlhjvNgCmllFJK+ZjOAVNKKaWU8jENwJRSSimlfEwDMKWUUkopHxsKk/B1kppSSimlhgqP1tDTDJhSSimllI9pAKaUUkop5WMagCmllFJK+ZgGYEoppZRSPqYBmFJKKaWUj2kAppRSSinlYxqAKaWUUkr5mAZgSimllFI+pgGYUkoppZSPaQCmlFJKKeVjGoCpYauipo7Ptu3xdzeUUkqpLjQAU8PWLx99iYU//SONTc3+7opSSinVgQZgalhqaWnl1VXraG5p5VBxub+7o5RSSnWgAZgalj7O3kVpVQ0AB44U+7k3SimlVEcagKlh6ZWPvyAwwPp6Hygs8XNvlFJKqY40AFPDTmtrG699sp5LTjuRoMBAco+U+rtLSimlVAcagKlh52BRKcUV1SyaP4MxyQmaAVNKKTXoaACmhp3iimoA0hLjyUwZqQGYUkqpQafHAExEwkTkCxHJFpHtInKXXf6JiGy2HwUi8oZdvlBEqpyO3eHU1iIR2S0i+0TktoG7LHU8K6qoAiApLobM1JE6BKmUUmrQCfKgTiNwljGmVkSCgdUi8p4x5jRHBRF5FXjT6T2fGGMudG5ERAKBfwLnAIeBdSLyljFmR5+vQiknxZVWBiw5PpaMlESKKqqob2gkIizUzz1TSimlLD1mwIyl1n4ZbD+M47iIxABnAW/00NR8YJ8xZr8xpgl4Abi4V71WqhtF5VYGbGRcNJmpIwFrXphSSik1WHiSAXNkrzYA44F/GmM+dzr8VWCZMabaqWyBiGQDBcAtxpjtQDpwyKnOYeAkN+e7AbgB4NZbb2Xx4sUeXo5SsHHbTqLCQljz2adUFBYB8OYHyymaONrPPVNKKTXcLVy40KN6HgVgxphWYJaIxAGvi8gJxpht9uGrgMedqm8ExtpDludjZcYmeNpx+3yPAo86XnrzXqX+9fE20kaOYOHChUwqq+SHT7xD9MgUj/9SKKWUUgPNq7sgjTGVwApgEYCIJGINLS5xqlPtGLI0xrwLBNv18gHnFMQou0ypflVcUU1yfCwAKSNiCQsJ1on4SimlBhVP7oIcaWe+EJFwrEn0u+zDlwHvGGManOqniIjYz+fb5ygD1gETRCRTREKAK4G3+vNilAJrEn5SXAwAIkJSfAwlldU9vEsppZTyHU+GIFOBp+15YAHAS8aYd+xjVwL3dqp/GXCTiLQAR4ErjTEGaBGRHwIfAIHAf+y5YUr1q6LyKhbOmtz+Oi4qgsraej/2SCmllOqoxwDMGLMFmO3m2EIXZQ8BD7mp/y7wrnddVMpzLS2tlFXXtmfAAOKjIqmorfNjr5RSSqmOdCV8NayUVNUAtM8BA82AKaWUGnw0AFPDSrFjFfx4pwxYdCQVNRqAKaWUGjw0AFPDSlHFsVXwHawMmA5BKqWUGjw0AFPDimMjbucMWFxUBDX1DbS0tPqrW0oppVQHGoCpYcV5I26H+OhIAKrqdBhSKaXU4KABmBpWiiurCQ0OJiYyvL0sLsoKwHQivlJKqcFCAzA1rBRXVJMUH4O9FjBgDUECVNToPDCllFKDgwZgalgpqaxhZFx0hzLHEKRmwJRSSg0WGoCpYaWytp54e8jRwZEB0wBMKaXUYKEBmBpWKmrr2gMuB0dApqvhK6WUGiw0AFPDSmVtffuQo4NmwJRSSg02GoCpYaXSRQYsMjyUwIAAnYSvlFJq0NAATA0bTc0t1Dc0dQnARIT46EjNgCmllBo0NABTw4Zju6HOAZijTAMwpZRSg4UGYGrYcARYneeAgRWA6RCkUkqpwUIDMDVsOAIwVxkwHYJUSik1mGgApoYNR4bL3RCkZsCUUkoNFhqAqWGjpyFIzYAppZQaLDQAU8PGsSHIrgFYfHQkFbV1GGN83S2llFKqCw3A1LDR3RywuKgImppbaGhq9nW3lFJKqS40AFODyo7cfF5bta5X762oqSMkOIiwkOAuxxzbEekwpFJKqcFAAzA1aNQdbeCC2+7nst/+g017c71+v2MjbhHpcsyRFdOJ+EoppQYDDcDUoHHHk6+Re6SUqPBQbvnX817P13K1DZFDTGQ4ANV1R/vcT6WUUqqvNABTg8KBwmL+9sr73HDRmfzh+stZvnEHH3yx1as2Kmvr3QdgEVYAVnNUAzCllFL+pwGYGhQ+XLeNtjbDzVcs5vsXnUVMZDhvr9noVRsVHmXAGvrcV6WUUqqvNABTg8KKTTtIS4xnwqgUQoKDmJaRzo7cAq/aqKytd7kGGEB0RBgA1fWaAVNKKeV/GoApvzPGsHLzLs6cNaV9Av3UsensOJjvVTseDUFqAKaUUmoQ0ABM+d2uvAKKKqo4c/aU9rKpGekUV1RTWlnjURvGGCpq3A9BRkfoJHyllFKDhwZgyu9WbNoJwMJZTgHY2HQAj7NgRxubaG5pdbkKPkBIcBChwcE6BKmUUmpQ0ABM+d3KzTsZnZTAuLSk9rKpGWmAtTCrJ47tA+k6AwYQExlGTb1OwldKKeV/GoApv/ti535OmTa+wwKqo5MSiAoP8zgD1t0+kA4xEeGaAVNKKTUoaACm/Kqypo6DRaXMGj+2Q7mIMGVsmsd3QjpWuHc3BwyseWA6B0wppdRgoAGY8qst+w8BMHP8mC7HpmV4fidkdxtxO+gQpFJKqcFCAzDlV1tyrABsxrjRXY5NGZtGYVkllR7s31hZa9Vxtw4Y6BCkUkqpwUMDMOVX2Tl5JMREkZYY3+VYZupIAPKKy3psx5MMmA5BKqWUGiw0AFN+lZ2Tx8zxYzpMwHdIt4Oy/NKKHttxzAGLjexmCDIinJqjOgSplFLK/zQAU37T2trGtgOHmZnVdf4XQHriCADyS3oOwCpr64kICyEkOMhtnZjIMM2AKaWUGhQ0AFN+s/fwEY42NrkNwFIT4gA4XFLeY1uVtfXEd7MEBVhDkA1NzTS3tHjfWaWUUqof9RiAiUiYiHwhItkisl1E7rLLM0XkcxHZJyIvikiIXR5qv95nH89wauuXdvluETlvoC5KDQ3ZOXkAbgOwkOAgkuNjPRqC7G4fSIdj+0HqMKRSSin/8iQD1gicZYyZCcwCFonIycB9wF+NMeOBCuC7dv3vAhV2+V/teojIVOBKYBqwCHhYRAL782LU0JKdk0dQYCBTxqa5rZM+Mp780p4zYBW1dd0uwgoQE6n7QSqllBocegzAjKXWfhlsPwxwFvCKXf408FX7+cX2a+zjZ4s1w/pi4AVjTKMx5gCwD5jfL1ehhqTsnDymjE0jNCTYbZ30xPh+y4BFh4cB6FIUSiml/M6jOWAiEigim4Fi4CMgB6g0xjgm0xwG0u3n6cAhAPt4FZDgXO7iPeo4lL0vz+3wo0N6YrzHk/C7WwMMjmXAdAhSKaWUv7m/ZcyJMaYVmCUiccDrwOSB7JSI3ADcAHDrrbeyePHigTyd8oOq+gbySyuIopmVK1e6rddcW0VZdS0ffLSU0G7ucCwpr6SuqqLbtvYdKgZg9drPaS7zbIsjpZRSyhsLFy70qJ5HAZiDMaZSRFYAC4A4EQmys1yjAMeeMfnAaOCwiAQBsUCZU7mD83s6n+dR4FHHS2/6qIaG5Ru3A3DpeQtZOHe623q5RwN4YvkGxk+dTlZ6sss6bW1t1P3uP0ybNKHbL35Sbj488TYZWRNYuPDkPvVfKaWU6gtP7oIcaWe+EJFw4BxgJ7ACuMyu9m3gTfv5W/Zr7OPLjTHGLr/SvksyE5gAfNFfF6KGlp7ugHRIH9nzYqy1RxtpazM9zwGLsOaA6RCkUkopf/MkA5YKPG3fsRgAvGSMeUdEdgAviMjvgU3AE3b9J4BnRGQfUI515yPGmO0i8hKwA2gB/s8e2lTHoex9eSTHx5IUH9ttvfbFWLsJwDzZBxKOLUOhk/CVUkr5W48BmDFmCzDbRfl+XNzFaIxpAC5309YfgD9430013GTnHGLm+O6zXwCjRloBWHeLsTq2IeopAxbluAtSl6FQSinlZ7oSvvK55pYWdhzMZ2bW6B7rxkSGExUe1u2dkJ5sxA0QGBhAZFio7geplFLK7zQAUz63O6+QpuaWHud/OVhrgbnPgB0LwLofggQroNMMmFJKKX/TAEz5nKcT8B3SEuMoKKt0e9wRgMVHd58BA2semM4BU0op5W8agCmfy87JIyQ4iEljUj2qn5YQT2E3AdixOWA9Z8CiI8Ko6UUAVlvfwPYDh71+n1JKKeWKBmDK57JzDjEtI53gIM+WoUtNiKOwrBJrNZOuHBkwx12O3bGGIL2bA7Z0/TZO+M4vmfHd29l3uMir9yqllFKuaACmfM6TLYicpSbE0dDU3B5odVZZW09MZDiBgT1/nb0dgqypP8qFv3yAEHsV/qc/+MTj9yqllFLuaACmfKqovIqiiiqvArC0hDgAt8OQFbV1xHsw/AjeD0Fm78ujsbmZB37wDc6dO53/friatrY2j9+vlFJKuaIBmPKp9gn4HqwB5pBqB2AFbhZjrayt73EJCgcrA+b5EOTGvbkAzJmYwbWLTiOvqIyVm3d6/H6llFLKFQ3AlE95ewckQFqitR1RYbnrDFhlbZ3nAZi9DIW7+WSdbdp7kKT4GFIT4rj4S3OIjYzguaWfedZxpZRSyg0NwJRPbdyTy+ikBEbERHn8ntQRjgyYuwDM8wxYdEQYLa2tNDY1e1R/495c5kzIQEQICw3hjFmT+WzbPs86rpRSSrmhAZjyqXW79jNvcqZX74mKCCM6IsztHLDy6roe94F08GY/yIbGJnbkFjB7wtj2svmTx7Err4AqNzcEKKWUUp7QAEz5THl1LTkFxcybNM7r96YmxFFQ1nUOmDGG4spqkuJjPGonJtIOwDxYimLbgcO0tLYyZ0JGe9n8KVbf1+8+4NH5lFJKKVc0AFM+4wha5k32PgBztxhrTX0DTc0tJMV5FoBF2xty1xztOQO2ad9BgA4ZsLl28PjFrhyPzqeUUkq5ogGY8hlHAHbixAyv32tlwLoGYMUV1QCM9DAAO5YB6zkA27zvIDGR4YxLS2ovi4+OZOLoFD7foQGYcu/fby5j/o2/pbVVlyxRSrmmAZjymXW79jNhVApxHs7XcuZuNfziyioAjzNg3swByz1SSlZaEiLSoXz+5Cw+35nj8Z2U6vhijOFvr3zAul37+XTbHn93Ryk1SGkApnymNxPwHdIS4jja2NRl8ntJZQ2Ax3PAou0ArMaDtcAOl5QzauSILuXzp4zjSHkV+SWu1yVTx7eNe3LZfagQgFdXrfNzb5RSg5UGYMonCssqyS+t6NUEfDi2GGvntcCKKx1DkNEetePNEOThkgpGJ3UNwOZOsoLIDXt0Ir7q6rmlnxEcFMjpMyfx2qr1unOCUsolDcCUT3y61RqKWTBtfK/en5ZgLcbaOevUPgdC5FCoAAAgAElEQVQs1sMALMKahN/TEGR9QyPl1bUuM2DTM0cDsGX/IY/OqY4fra1tvLB8LeefNJPvnr+QwyXlrNu139/dUkoNQhqAKZ/4dNsewkNDmO20pIM3xiQnAJBXXNahvKSyhpjIcMJCQzxqJyIslIAA6XEI8nBJOYDLACwqIoystCS22Kv6K+Ww+1AhhWWVXHLaXC46ZTZBgYG89dkmf3dLKTUIaQCmfGL11j3MnzyOkOCgXr1/1MgRBAQIuUdKO5QXV1Z7PAEfQESIDg/vMQPmCMBGj0xweXzm+DGaARum6o429PoGiwOFJQBMHJ1CfHQkWWlJ7Mor6M/uKaWGCQ3A1ICrrW9g096DnDp9Yq/bCAkOIj1xBLlHSjqUF1dUezz/y8GxH2R3DhW7z4ABzBg3mr2Hi6hvaPTq3Gpwa2xqJuPK/8dZP7uHovIqr9/v+H5mpowEICs9iZz84n7to1JqeNAATA24L3bl0NrWxpf6EIABZKQkdsmAlVR5lwEDax6Yp0OQ6SPjXR6fkTUGYwzbc/O9Orca3PYXFlNaVcPKzTs56aY7Pd4z1OFAYQlhIcEkj4gFICstiZyCYl2yRCnVhQZgasCt3roHEWHB1N5NwHfISEnkYFGnIcgKz7chcoiO8GwIMiEminA3c8tmjLMn4us8sGFlX34RADddfDYHi0rZc/iIV+8/cKSEjJSR7WvHZaUlU3u0gRL7bl2llHLQAEwNuFXZuzkhc1SvFmB1lpEyksMl5TS3tADQ1tZGSWWNx6vgO3g6BDk6yfX8L4DM1JFEhoXqPLBhZu9hKwC79LS5AOw55F0AlnuklMzUxPbXWfYuCvsLSty9RSl1nNIATA2oo41NrN66hy+fOK3PbWWkJNLWZtqHBytr62lta+vdEOTRnocgR7kZfgQICAhg+rjRZO/TDNhwsi+/iPjoSE6amgXAXm8zYIUlZKaObH+dlW4FYDkFRf3XSaXUsKABmBpQn2zZTWNzM+fOnd7ntjJSrMyCYx6YYw2wXg1B9pABc7cKvrNZ48eweV+ezu8ZRvYePsKEUclER4STHB/L3nzPA7Cq2noqaurISDkWgDkm4+cU6ER8pVRHGoCpAfXhuq2EBAdx+sxJfW7L8YutPQCr9G4RVoeYHuaA1Tc0UlZd2+0QJMCciRlU1dW3Lz2ghr69h4sYn54MWEtJeDME2fkOSICw0BDSE+M1AFNKdaEBmBpQH23YxqnTJxIRFtrnto6tBWb9ovN2H0iHmMhwaurdr/WUX1rRfr7uzLEXld24J9er86vBqbGpmbziMiakpwAwYVRy+5wwTzgCcechSLCGIfdrAKaU6kQDMDVgCssq2ZJzqF+GH8F5LTBHBsxap8nbOWDREWEYY6g76noNL8d2R+mJ7ueAAZyQOYqgwEA27s316vxqcNpfaC0X0Z4BG5VKUUWVR/uGgnUHJBwbKnfISkvWDJhSqgsNwNSAee/zbADOnXdCv7VprQVm/aLbfiCfyLBQEnsxBAnu94N0bPidlhjXbTuhIcGckDlKM2DDhGMJigmjkjv86elE/NwjpURHhDEiJqpDeVZaEoVllbpor1KqAw3A1IB5acXnjEtLYtb4sf3W5vj0ZLYfyKe1tY1VW3ZzygkTCAoK9KqNmEgrAHO3GGuBPQSZOqL7AAxgzsSxbNybqxPxhwHHcKMjAzZhVIpd7nkA5rwGmMM4eymKzosIK6WObxqAqQFRVlXDso07uPyM+V1+IfXFOXNPoKy6lve/2MLW/Yc4fYb3k/ujw8OAbjJgZZWEhQQTGxXRY1tzJmRQUlnTPmyphq6cgiLioiJIsDOqjkBsb75n88DySyoYndR13mBaghXIF5ZV9lNPlVLDgQZgakC8sXoDLa2tXHHmSf3a7qL5MwgKDOS2R18E4IxZU7xuw5EBcze3p7C8krTEeI8CxzkTMwDYsOeA1/1Qg0tReTWpCceynuGhIYxOSvA4A1ZQVkFaQtd5g2n2XMKCMg3SlVLHaACmBsRLK78gKy2J2RP6b/gRID46ktNnTmLbgcOEBgczb1Km12045oDVuMmAFZRWejT8CDAzawzBQYGs2b7P636owaW8ppaETvO3xiQltG/M3p2WllaKKqpczht0fJcKSjUDppQ6RgMw1e/2FxTz0fptXHX2gn4dfnT4yilzADhp6jjC3OzV2J3YKCsAq6itd3m8sKyyxwn4DhFhocyfnMWKzTu87ocaXMqqa7tMoE8fGe9R5qq4spq2NuMyAxYVEUZMZLhmwJRSHWgApvrdQ69/RGBAADddfPaAtP+VL80GYGEvhh8BEmKsOT5lVTUujxeUVXQYiurJmbOnsGF3rsfLFajBqayqawYsLSGO/JKKHm+ycNy44S5wT0uI1zlgSqkONABT/aq67iiPL1nJ5Qvnt8996W+ZqUms/Nvt3HzF+b16f3REGMFBgZRV13Y5Vne0gZr6Bo+HIMEKwFrb2vhky+5e9UcNDmXVXQOw9MR46hoaewyuC+zgyt33JjUhVocglVIdaACm+tXjS1ZSU9/AT7527oCe54xZU9on03tLREiIiaK0qmsAVlhmLe7qTfC4YNoEQoKDWLFJhyGHqqONTTQ0NXcNwOzdEHoaPjyWAXP9vUlL8GwoUyl1/OgxABOR0SKyQkR2iMh2EfmJXf5nEdklIltE5HURibPLM0TkqIhsth//dmrrRBHZKiL7RORBGYgJQspvqmrr+eOzb3H2nGmcNHW8v7vTrYSYKJcZMMcvydSEWI/bCg8N4eSpWazYvLPf+qd8q8wOxkfERHYodywh0dMyIwVllQQEiNtdGdIS4ygordT14pRS7TzJgLUANxtjpgInA/8nIlOBj4ATjDEzgD3AL53ek2OMmWU/bnQq/xfwPWCC/VjUHxehBof7nn+Hsupa/nzTlf7uSo8SY6Mpq+46B8wxT8fVZOrunD1nGpv2HuSIzvMZkhzfBcf8QIf0RCsD5tgf1J2C0gqS42PdLgqclhBPY3MzFTV1/dBbpdRw0GMAZowpNMZstJ/XADuBdGPMh8aYFrvaWmBUd+2ISCoQY4xZa6z/Bv4X+Gqfeq8GjcPF5fz15fe55pwvMdvepHowS4h1PQR5LAPm+RwwgK+dPg9jDC9//EW/9E/5VrkdGHWZhG9Pqu9xCNLNGmDH2rGO6UR8pZSDV3PARCQDmA183unQdcB7Tq8zRWSTiHwsIqfZZenAYac6h+0yNQzc8eSrtBnD7797mb+74pGEmKj2YSdnhWWVhAYHEx8d6eJd7k3LHMX0caN5ftma/uqi8iF3Q5ARYaHERUX0PARZ2v3SJY6AXueBKaUcgjytKCJRwKvAT40x1U7lv8IapnzOLioExhhjykTkROANEZnmTadE5AbgBoBbb72VxYsXe/N25WP7i8p56r1VXHHKdA7s2saBXf7uUc/qKisorapmxYoVHdYq27xjN/GRoXz88cdet3lSZjKPL1vPC6+/TUq8dxuEK//6bL31pd29fSvlh/Z3OBYXHkL2rr2sXLnS7fsPFhYzJi7CbZ38cuufzGWr1xJcW9YvfVZKDU4LFy70qJ5HAZiIBGMFX88ZY15zKr8WuBA42x5WxBjTCDTazzeISA4wEcin4zDlKLusC2PMo8CjjpceXYnymwduf4DYqAgevu0HXRayHKw2FNXzv9XZzJl3Uoc9H+9+aw2Z6Ske/wVyNnbSVB5ftp4D9YYrL/H+/cp/PjtsBUgXnncO4Z0W953wzudU1dW7/U40NbdQWf8Ec2dMdVunvqERHnyZ2JHJvfpuKaWGH0/ughTgCWCnMeYBp/JFwK3AV4wx9U7lI0Uk0H4+Dmuy/X5jTCFQLSIn221+C3izX69G+dymvbm8/dkmbr5i8ZAJvuDYXJ/Od0IeLiknvZfrl2WmJrFw1hQeen0pDY1Nfe6j8p3y6lrCQ0O6BF9grQXW3RDkkfKeb9xwDGXqHDCllIMnc8C+BHwTOMtpaYnzgYeAaOCjTstNnA5sEZHNwCvAjcYYx2ZqPwAeB/YBOXScN6aGoN8/8yaxkRH86NKBXfervyXG2qvhOwVgbW1tHDxSRkbKyF63+5tvXUxBaQWPL/F+CFP5j6tFWB3SE+M5Ul5Fa2uby+OOBVZ72r4qNSFOF2NVSrXrcQjSGLMacLVe17tu6r+KNVzp6th64ARvOqgGr50H83lt1Xp+862vdhjGGwoSYq1ftqVO2xEVV1TT2NzM2OTEXrd75uypnDp9Ivf+722uv+CMXu1VqXyvuwAsLTGe1rY2iiurXd4dW+hBBsxxXCfhK6UcdCV81WuPL/mYoMBAfnTpOf7uitfahyCd7oQ8WFQKQEZK7wMwEeHu6y4jv7SCn//7hb51UvlMeXVde1DemWNIOr+k3OXxnvaBdHAsxqqUUqABmOql5pYWnv3oUy46ZTYj3az+PZg5hiCdM2C5R6wAbGwfAjCAhbOn8LPLF/HQ6x/xykpdF2woKKuuZYSbpUfaAzA3i7EWlFUSFBjY/p1yJy0hnsJyXQ1fKWXRAEz1ynufb6G4oprvLD6t58qDUFxUBAEB0mEOmCMD1pchSId7b/g686eM4xu/f5hnPlzd5/bUwCqrrumyCr6DYxFVd8OHBaUVpIyIJSCg+39O0xLjaGpuodzFFlhKqeOPBmCqV556/xOS42NZNH+Gv7vSKwEBAcRHRXYJwOKjI3u9ybezkOAg3v/TrZw2YxLf+uMjfPueR9qHqtTgYozpdggyOT6WwIAAt3dCFpR1vwirw7HFWHUYUik1TAOwqEXXdyn795vL+O8H3WcinnpvFT/829O9Pm/G139GaWXX/QWHm6ONTbz3eTZXnDmf4CCP1/IddBJjo7sMQfZH9sshPjqS9+77Ob+8+iJeWL6Widf8nHuee0uXqBhkquuO0trW5nYIMjAwgJQRse6HIEu734bIwVFHA3GlFAzTAMyVGy8+m2+dd6q/uzEsrMreRUNTM+efNMvfXemThNiojhmwI6V9moDvSkhwEH/83hXseOpezp03ndsfe5mp197G65+s79fzqN5zfAfc3QUJ1jCku8yVpxmwY/tKagZMKXUcBWB3Pvka97+wBICFP/kDv3jkBebf+FsmXvNzPtmyu0v9JWs2s+AHd1FaWUNJZTVfu+PvzPv+Hcz7/h18unUPAGVVNZx7y31Mu/Y2rv/T45jjZNH+97/YQlhIMGfMmuzvrvSJ836Qxph+z4A5y0pP5rW7f8LSv9xGZFgol/7m7/zlRZcruSgfaw/A3AxBgmMx1q53QTY0NlFeXetRBix1hB2AaQZMKcVxFIB11tLaxhf/vou//fBq7nrq9Q7HXv9kPff+723eve8WEuOi+ck/nuVnly1i3SO/49Xf/Zjr//wEAHc9/TqnTp/I9qfu5ZLT5pJXdHzs8fb+F1s5Y+Zkl6uGDyXOQ5Dl1bXUNTQyNiVhQM959onT2PTY77nizJO45V/P8/g7Kwf0fKpnjknxI6J7CMBcBE7ta4B5sHtCWGgII2KidDV81a2m5hYqaur83Q3lA0N3Ak8fXXraXABOnJhJ7pGS9vLlm3awfvcBPrz/F+2TsZdu2MaO3GPbVlbXH6W2voFV2bt57e6fAHDBglnEu5lDMpzkFpawK6+A7190pr+70mejk0ZQWF5J3dEGDtrBc19WwfdUUFAgz9x+IxU1dfzkoWc4d94JjBmgzJvqmadDkJW19dQ3NBIRFtpe3r4KvosFWl1JHRGrQ5DKpdbWNr52x9/5YN1WggIDyX3hARJ6WNpEDW3HbQYsNNiKPQMDAmhx2mIkKy2JmqMN7DlU2F7W1mZY+/Bv2fzEH9j8xB/If+VBoiLCfN7nweDD9VsBOG/+dD/3pO9OmpJFW5th3a4D7UH4QA1BdhYSHMRjt3wXY+CnDz3nk3Mq1zwdggS6LKTqWJrCkwyYo54OQSpXtuzP481PN3LGzMnUHm3gNZ0nOuwdtwGYO2OTE3n1rh/zrXseYfuBwwCcO286/3j9o/Y6m/ceBOD0mZP439LPAHjv8+zjIm28eusekuJjmDwmzd9d6bOTp44HYM2OvXy2bS/BQYFMHJXis/OPTUnkN9+6mNc/Wc+KTTt8dl7VkWMIMj7KfQb72GKsHeeBeZsBS0uI0wyYcmm1Pbf40VuuY+LoFJ5ftsbPPVIDbVgGYPWNTYy67Mftjwde8m7P78lj03ju1zdx+Z3/ICe/iAd/9E3W7z7AjOtuZ+q3f8G/31oOwG+/fQmrtuxm2rW38dqq9YxJHtj5Q4PBZ9v2csq0CYi42h50aBkRE8Wk0ams2b6Pt9ds4szZU32e2fzZZYtIjI3mH6991HNlNSDKqmuJjYwgKCjQbZ1ji7F2zYCFBAcxopvhy87tFJZV0tbmemNvdfxavXUPo5MSGJOcyFVnLWDl5l2aLR3mhuUcsLYV/+32+Mq//6r9eWJcNLkv/hWAaxefzrWLTwdg9oQMdjx9X3u9F3/7wy7tJMRG8+H9v+iPLg8JxRVV5BQUc+NXzvJ3V/rNyVOzeHHF5zQ0NfOjS871+fnDQkP47vln8OcXl3C4uJxRSSN83ofjXVl1bbfDj+B+P8iC0krSEuI8/g9JakIcLa2tlFXXDsktvNTAMMaweusezphp3Vl+1dkLuOvp13lpxef89PJFfu6dGijDMgPmL8YYKofxMOSa7fsAOOWECX7uSf9ZMG0CDU3NAFx0ymy/9OH7XzkTY+CxJSv8cv7jXXl1XbcT8AFiIsOJDAvtcidkQVmFx/O/QBdjVa7lHimhoLSCU6dPBGDSmFSmZqS3z7lVw5MGYP3oa3c8yJk/u8ff3Rgwn23fS0hwEHMmZPi7K/1mwTRrHtiMrNF93oS7tzJTk1h80gweX/Ixra06NOVr3W3E7SAiLhdjLSyrbF/fyxO6GKty5dOtewHaAzCwsvPrdh3QzduHMQ3A+lFWWhI7DxbQ0tLq764MiM+27eXEiRmEDfH1v5xNyxjF2ORErjnnS37tx7fPO42C0gpWbdnl134cjzwZggTHYqzHMldtbW3kHin1au6nZsCUK59t30tMZDjTMka1l82bNI7SqhoOHin1Y8/UQNIArB9NHzeaxuZm9uYf8XdX+l1Tcwvrdh1gwbThM/wI1j5/+5//C7d8/Xy/9uPCBbOIDAvlheVr/dqP41FZVW2PQ5AAY5ITOOC0ZmBeURlHG5uYMtbzO4JTRsQC6GKsqoPdhwqZlpFOYOCxX8nzJo8DYN3u/f7qlhpgGoD1o+njrP+9bN1/2M896X/bcw/T2NzMfPsfheEkICDA73d1RoSFcvGpc3jl43U0Nbf4tS/Hk5aWVqrq6rtdBd9h6th0Ckor2ud57sqz1gr0ZkmW0JBgEmKidAhSdZCTX8y41KQOZdPHjSYkOIh1uzQAG640AOtHU8akERgQwNb9h/zdlX63cU8uYO0coAbGlWedTHl1LUs3bPN3V44bFbVWMOXJEOTUDCvQ2plXAMAu+8/JY1K9OqcuxqqcNTW3cKikjKz0jgFYSHAQM7PGsG7XAT/1TA00DcD6UVhoCBNGpQyKAKyqtp6Syup+a2/DnlxiIsMZlzbwW/Ucr86bN4O4qAgdhvQhx2bsngxBOubnbD9gbUu2M6+AhJgor5eT0MVYlbO8ojLa2kyXDBjAvMmZbNhzQNeNG6Y0AOtn08eNYusB/w5Btra28eWb7+Wcm+/rubKHNuw5wJwJGQQE6FdmoIQEB/G10+fx+icbONrY5O/uHBfKa3reiNshIyWR8NAQtudaf7935RX0akcIzYApZ/sLiwEYl+YiAJs0jpr6BvYcGn7zipUGYP1u+rjR7C8opra+wW99eHzJStbvPkB2Th6Hi8t7fkMPmltayN53iBMnZvS9c6pbV551MrVHG3h3bba/u3Jc8GQfSIeAgACmjE1jx0HHEGSh18OPYC3GeqS8SrMaCoD9BXYAltp1dGGO/W/upn0Hfdkl5SMagPWz6Zn2MEWuf7Jg5dW13P74y0yw9zTsj/lEOw8W0NjczImTdP7XQDtz9lSS42N5YbnuA+cL3gxBAkzLSGf7gcOUV9dSXFHdqwAsLSGO1rY2SiprvH6vGn72FxYTGhxMqov9RCePSSM4KJDsfXl+6JkaaBqA9bPp40YDkJ3jn78wKzbtpLy6liduvZ7k+Fg+XN/3AGyDPQF/OC3AOlgFBgZw+cL5vLNmM1W19f7uzrDXngHzMACbOjad/NIKPt+ZA8CUselen/PYvpI6DKkgp6CYzNSRLqd3hAQHMXVsut9+n6iBpQFYPxuXlkRaYjwf9UPg0xsHi6xF+6ZlpHPO3BNYumFbn4c6Nu7JJSo8jAmjkvuji6oH3z7vVBqamvnvh6v93ZVhr7ymjsCAAGIiwz2qPy3TCrgefdvaNqq3GTCw9pFUan9BSbc3N80cP0YDsGFKA7B+JiKcf9JMPly/jeYW36/nlFdURlR4GPHRkZw77wRKKmvYktO3uzI37zvIzKwxOgHfR+ZOHsf8KeP45+tLXW5DUl13lOeXreHJ91bpKtl9VFZVy4iYSI/XgXPcCfnG6g3MyBpNRor3dwVrBkw5GGPYX9h1DTBnM7PGUFhW2a93tavBQX+jDoALTp5Jdd1RVm/d4/NzHyyytkYREc6aPRWAT7bu7nV7xhi27D/EzPGj+6uLygP/99Vz2H2okGUbtncor6k/ypdvvpdv3P0w1933GFf+7p+6V1wflFXXkBAT7XH9zNSRPHLzd3jnnpvZ8MjdHVYu91RyvK6Gryzl1bVU1x0ly8UdkA6zxo8B0Hlgw5AGYAPgyyeeQEhwEEvWbPb5ufOKyxhr702XlhhPdERYn25hzisqo7ruKDPGjemvLioPXLFwPomx0dz9zBvtQ8iNTc1c8uu/s3FPLs//5gfc9/2vs3bHPj7erPtH9lZ5TR0jYrrfiNuZiHDDRWdxwYJZBAUF9uqcIcFBjIyL1iFIxf5Ca2urTBd3QDrMzLL+7d2sd0IOOxqADYCoiDDOmDmZJWuzfZ6dOHiklDFJiYD1y2LCqBT2Hu59AOaYezAjSzNgvhQWGsK9N1zBquzd3P/iu7S2tnH17//Fso3befK273Hl2Qv40aXnkhQfw73/e9vf3R2yPN0Hsr+lJcTrEKTiUHEZAGOTE93WSYiNJj0xnuw+TiVRg48GYAPksjPmsSuvgHfWbPLZOeuONlBWXcvYlIT2sgnpyezNL+p1m1vsAGx6pgZgvnbd+WfwtdPn8cvHXiL5kv/j1VXr+NsPr+Gb554KQHhoCD+97Dw+WLeVnQfz/dzboams2k8BWGKcZsAUh+x1GkeNHNFtPZ2IPzxpADZAvrP4dKaMTeOnDz1Hg49WNc+z/zc1JskpABuVQu6Rkl5v8Jydk0dWWhJREWH90kflORHhsZ9/l59dtojLzpjPU7fdwE8uO69Dna+dPg+AtTty/NHFIa+8ppYRfsqA5Zf2fpHkgtIK9hwq7MceKX84XFJOWEhwjwsBz8waY63H2NTso54pX9AAbIAEBwXx9x9dw/6CYm584Ekqa+oG/Jx5RV3T2RNGpdDWZjhgzzXwljUBX+d/+Ut8dCT3/+Ab/Pvm7/DtRad1OZ6VlkxkWKjOD+mFhsYm6hua/JIBy0wdyZHyKuobGr1+b3FFFSf/4C5mXPcr/rf0swHonfKVQ8VljBo5ose7cGdmjaGltZWd9i4ManjQAGwAnTN3Or+46kL+++GnjL7ip2R942amXXsbJ930W558b1W/zw9zrAE2Jtk5A2at3dWbeWD1DY3sPVzEjHE6/DhYBQYGMCNrNJv2agDmLW8XYe1P49Otv5c59jY0nmpuaeHyO/9BaVUNs8aP4erf/4u3Pt04EF1UPnC4pILRSd0PP8Kxifg6DDm8aAA2wO79/tfZ+OjdfPPcL7Fg6nimjEmjsamF6+57jK/c/kC/7geXV1RGYEAAaQnx7WUT0q0tifbmex+AbTtwGGMMM7I0AzaYzZ4wls37Duregl7yZwDm2CrM2/8Y/W/pGlZl7+aRm7/Dqgd/zdjkRP715rKB6KLygUMlZT3O/wLr+xIeGqIB2DAT5O8OHA9mTRjLwz+7tv11W1sb9z3/Drc/9jLPLf2sfVJ1X+UVl5E+Mr7D7fEJsVHERUWw97D3E/EdC7jO1ABsUJs1fiwPv7GM3COljOtmPSHVUXm1NS3Am2Uo+otj3ad9Xt4g89T7nzA+PZlrzvkSIsLV55zCvf97myNllaS42EtQDV6trW0UlFYy2mnOrjuBgQGckDlKA7BhRjNgfhAQEMAvrrqQuZMyuf2xlznaT5P0DxaVdrmduS9LUWTn5BEVHkZGivtbpJX/zRo/FtB1grzlzwxYbFQEI+OivfqP0f6CYlZu3sm1i05rnzN0zTmn0NZmeP443rx9yZrN7BqCc6OKKqpoaW1l1Mj4nitj/Uc4e1+eLrw8jGgA5icBAQHcf9NVHC4p5+E3lvZLm4eKy13OJ5g4KqV3GbD9eczIGq1bEA1yJ2SOIjAgYEjNAyutrOHKux7ivc+z/daHsuoaAK9Wwu9PE0aleJUB++8HqxERvnnul9rLpoxN58SJmTzz4acD0cVBL6+olK/86gHOvvleiiuq/N0drxwuse6CHT2y5wwYWAFYWXUt+SW+Xz+uvqGRB1/9gEt+/TdWb+n9ziqqI/3N6kdnzJrC3EmZvPbJ+n5pr7SqhqS4mC7l49OTySsu82opCmMMW3IO6QT8ISA8NITJY1KHVAbsrqdf58UVn3P+L+7n14+/7Jc++HMIEqy/l54GYMYYnv3oU86aPZUxnbLcV551Epv2HiS/pPfLWgxVD7+xDEEor67l6t//a0jNg/R0DTAHx93ovh6GrKqtZ9b1v+Yn/3iWZRu3c8ZP/8BfX37Pp30YrjQA87PFJ81k7Y59VPRxmYrGpmZq6htIjO36v/nM1JEYY9qXqfDEocaFxooAACAASURBVOIyKmvrdQX8IWJa5ih25Q2NdaF25xXy77eWc935p3P1l0/hD8++xYFC7+4G7A9l1bWEhQQTERbq83ODtUjy4ZJyj5ai2JGbT05BMZcvnN/l2NknTgNgxaad/d7Hway+oZHHlqzkktNO5M83XsXSDdtZu2Ofv7vlsfYMmAd3QYKVAQsIEJ9eozGGGx94kv0Fxbxzz83kv/Ig5580k9sefYmCUt3Joa96DMBE5D8iUiwi25zK7hSRfBHZbD/Odzr2SxHZJyK7ReQ8p/JFdtk+Ebmt/y9laFo0fzptbYalG7b1XLkb3c1ncczhyj3i+VpgOgF/aBmTlMCh4vIhMT/kzqdeIywkmD9efwX33vB1AgKEx5d87PN++GsVfAfHUhT7PViK4u3PrB01Llwwq8uxmVljiI+OZMXmHf3bwUHuheVrKa+u5UeXnssVZ1qB6Wfb9vq5V547VFxGWEiwxwsBx0SGc+LETJ8G2i8sX8sLy9dy13cu5YIFs4iOCOfBH3+T1tY27n/xXZ/1Y7jyJAP2FLDIRflfjTGz7Me7ACIyFbgSmGa/52ERCRSRQOCfwGJgKnCVXfe4N39yFnFREbz/xZY+teMIwFxlwDJSrI1ec4+UetyeI809XYcgh4QxyQk0NjdTUlnt7650yxjDso3b+drpc0keEcuopBGcf9JMnnxvFc0tvdutobfKq/2zCr5D+1IUHgxDvr1mE3MmZpDuYrgqICCAM2ZOPu4yYMs2bictMZ7TZkwiKT6WcWlJrBliGbDRSQk9LsLq7MzZU/hiVw51RxsGsGeWlpZWfvPEK8yZmMFt37iovTwzNYmrzzmFf7+1fND/ezPY9RiAGWNWAZ5OLrgYeMEY02iMOQDsA+bbj33GmP3GmCbgBbvucS8oKJBz5p7A+19s7VP2orTKmlDsKgBLT4wnMCDAuwzY/kOMS0siOiK8131SvuPYfsqbYWZ/yC+poKSyhrmTxrWXfe/CMyksq2TJms19arutrc2rXwiDJQPW0x3KpZU1rNm+j4sWzHZb58zZUzhQWEJuL3e8GIrW7z7A/Mnj2gOYBVPH89m2vUMiCwxwqKTc4zsgHc6cNZXmllY+9UGm79mPPiWnoJg7r72EwMCOocJt37iQo41NPP3+JwPej+GsL3PAfigiW+whSse3KB1w3rL9sF3mrlwB586dTkFpBbv7MIfHEYC52lMsKCiQMckJXmXAdAL+0OJYS+jQIJ+IvWHPAQBOnJTRXnb+STNJjI3m1VV9uxnlxgeeJOPKn3m85Iq/A7DYqAjGJCewcU9ut/Xe/TwbY4zL4UeHM2dbAworNh8fWbDKmjr2HDrC3EmZ7WWnnDCBI+VVHPTi3zl/cmTAvHHq9IkEBQayYtPADje3tLTy+2feZM7EDC50EfhPGZvOzKwxvKm7MPRJbxdi/RdwN2DsP/8CXNdfnRKRG4AbAG699VYWL17cX00PSm3V1j8YL77zAWdMy+yhtmtr1ln/8O7ZvpWyvK4bM8eFBpG9O4eVK1f22FZjcwt7DhUyPzPZo/rK/6rqrCGJZZ+uJb611s+9ce/V5RsIEKEq/yArS/Lby2eMHsmSzzawfPkKAgI8H5Jx2H6oiMfeWQnAVXf8lT9/c1GPQztHSsvJSoz263c8MyGGjzdt77YP/3lzGQlREVQXHGTlEdd3wLW1GWIjwnjx/ZVkhg+dOwF7a+N+a92vkMaa9p9d8NFKAJ545S3Onp7lr655pLWtjcPF5bTW13j9/ZuUmsCbH3/OeROTB6ZzwCc7c8kpKOauK87m449dz8+cOSqBZ1dt5o0l7xEXqSMlzhYuXOhRvV4FYMaY9kkLIvIY8I79Mh9wTpuMssvoptxV+48Cjzpe9qaPQ8lJjU3c+NhbmIhYjz+4zlbnWf/4XLToXEKCu36ssz7fy4fr/j975x3fVLn/8ffJTrrTXbqgi10oeyNTRREHKu49rnvvn6Ci3uu4ThTX1eu44sABykam7FrKaEsZhbaU7p0maZLz+yOkUrqSzrSc9+vlS3rOc57nSZvkfM93fL77nJp/d/pRbKLIJVMnMHniiFbtR6JzEUURzdvfofHWt/o91Bm8tnI3/aLCOH/GtHrHT5gUrH9lMX4RvRkaF+3SnDabjUfuep5eAX7cd9kMnvxoCadsGuZNHdPkNaIoUvni5wxMiOvS39fsghoeWfQN/QYPJVjv0+C8udZC8r++5uopo5ky5bxm55q0LoWDWblu/fdvL3actN9ybpl7Cf6n0y7GW6w89MVKymxKt/8dnCwqxSb+h/HDh7q810uPFPHK18vonziUIL+G75n24KVfXyUiyJ+n77i+XmeVM/EOi+a/G/+iTObBnMkTO2QfPZ1WhSAFQQg948dLAUcJ36/A1YIgqAVB6A3EATuBXUCcIAi9BUFQYU/U/7X12+5ZaNUqYsKCOJCV0+o5iiuq8NJpGjW+wF4JebK4DJO5tsW5HAn4g/tIFZDdBUEQiAz250SB++aAiaLInowshiU09PLOGD4QgFU797k87+6MYyQfyuKFWy7n0asupHdoIEvWb2/2mkqDEYvV2qUhSIBR/eyemh1pDb3WABv3plFpMHLx2KbzvxyMGxjH4dx88ku6lyBpa9idcZQ+YUF1xhfYUy2GJ/RmV/rRLtyZc2Sf/pw6qwF2JldPGY3VZuObtR3T/SD9+EnWJR/grtlTmjS+wN6DNjxQL4Uh20CLHjBBEP4HTAYCBEHIAZ4HJguCMAS7dyoLuBNAFMUDgiB8BxwELMA9oihaT89zL7AKkAOfiaJ4oN1fTTdmYO9w9h9r0inYIkXlVY0m4DuIDjmtBVZQXFd91RSpR7Px0KjpExbY6v1IdD6RQf5unYSfV1xGfmk5w+KjG5wL8fclMSaSVbv28eS1Fze8uBnW7LY//108dihyuYxxA+NZu2c/oig2GYasU8Fv5jPTGSTFR6OQy9mRdoTZ45IanF/2519oVEqmJg1oca5xA+MB2HYgkzkThrf7Xt2JXenHGNW/YZhxQO9efLl6a7N/+5Yw11pYvGw9v2xJJq+kjOiQAHqHBBLo60WFwUhZVTXmWisTBsdz6YThBDYift0SOafV7J3VADuTAb3DGZ7Qm89XbubBuY0JFLSNRb+sRaVUcNusSc2OEwSB2eOG8vnKzZhrLU0+/Es0jTNVkPNEUQwVRVEpimK4KIqfiqJ4vSiKg0RRHCyK4mxRFPPOGL9QFMUYURQTRFFcccbx30VRjD99bmFHvaDuyoDoXmTmnHLKQ9UYReWVzT7Nu6IFlnokm0F9pBZE3Y2IIH+3TsJ3JJsnNRFinDlyEFv3H6LK4FqJ/Zrd+xkaF1V3IxzZrw+nSsqbbdlSp4Lv1TUq+A60ahWJMZGNimuKosjybSlMGzbAKbHYYfHRqJSKTqmQ60qKyys5nl9ULwHfQb/IXlQajK0WCbVYrFzz4iLuf+dLTpWUEdcrmNzCUr5cs5X5n//E4l/Xs2rnPtYlH+DON/7DoJufJu246w/ObfGAAdw4cwJ7j5xgbzt3v6gyGPli1RbmThrpVHhzytABGIzmuuIaCdeQ7rBuwsDe4VhtNjKyW1cJWVzRkgfMYYA1XyEkiiJ7j5yQFPC7IZFB/uQVl7nUcqozcbTd6RsZ1uj56cMGUmuxsmXfIafnrDIY+fNAJtNPhzABRva1S1zsTG88rAdd24j7bEb178Ou9KNYrfWT53ccPMKxvELmjB/m1DwatYrhCb3Zut/531935ECW3eAZ1Lvhd1S/KPt7q7VdIe5/90t+3LSLN++5hv2fv8rPCx8i5dOFlC1fTO3az6la+Qk5P7xD7g/vsPPDBQgCTH7wZY640NMT7BWQWrWq1Tp086aORqmQs3jZH626vim+WrOViuoa7rl0WsuDgQmD7V7XzVJ/yFYhGWBuwsDe4cDfXy6u0pIHrFeAHoVczrEWdIJyC0sprayWFPC7IRFBekRRdNsWIdmnbzqNSaWAXUZAqZCz/i/nsxM2paZTa7EyY/igumOJMZEoFXJ2pjWdC1RngDWxl85kUmI/Kg3GBtICHy3/Aw+NmivPG+X0XGMHxLHnUBZGk7m9t+k2pB23V0A6jK0zcRxzjHGFQ9n2Fln3XTadh+bWr7wXBKFePpQgCIzo24cNbz2DwWjm2U9/cGktuwaYvtVhUn8fL269cBIfL9/AoVY+tJ+NKIq8//NahsRGMbp/rFPXBPn5kBARyqa9kgHWGiQDzE2IjwhFIZez/1jrEvGLyiub9YDJ5TKigv050kLbk78T8CUPWHcjMvi0GKubJuJnFxQTEdT0TUenUTNmQCzrk53Xslqzez8alZJxA+PqjmlOh/Wa84AVlNoFWwN9XM/faW9mjx2Kv7cni5etrztWUV3Dkj+2M2/qGJfEkMcPisdca2FnN0hEby1px0+i06gazZ8K9ffF20NL2gnXH2Tf/G4lKoWCp6+d7fQ1CZGh3DNnGkv+2EG6C0af47PQFubfdBkalZLHP/y2TfM42Jyawf5jOdwzZ5pLhuHExAS27DvUwIMr0TKSAeYmqJQK4iNCONAKA8xcazndiLv5p/m48JAWRSr/yswCYLDkAet2RAbZw8zumoh/Ir+YiMDmhSenDO3PX4eznG5Ovyk1g7ED49CoVfWOj+jbh90Zx5q8KeQVl6FUyN3CA6ZRq7jp/An8vCWZU8V2OZmv1mzFYDRz+0WTXZprwuAEBEFg4970Dtipe5B24iR9I8MazVEVBIF+kWEue8DyS8r5fOVmbpg5jhB/X5euffjK8+29Tb92vrA/p7C01flfDoL1Pjx17cX8sjWZ7/7Y0aa5AN7/eS2+njqumda0fEtjTBzcl/JqA/uPZbc8WKIekgHmRsSEBXHMhXZBDpwNp8RHhJCZk99sq449h7KIjwjBWxLW63aEBdhvHHklZV28k8bJLiyp89I1xXlD+2OziWxywoCorjGy9/AJxg6Ia3BuZN8+VBqMHMppPDyTV1JGiN631SGg9uaOi8/DYrXyyjfL+Csziyc/WsLo/rGM6Nun5YvPQO/tyaA+4WxM6cEG2PGT9GsijxDsYUhXDbAvVm3GVFvLI1de6PJ+gvx8uP2iyfxv3XbKnHhwsFptnCwqJaKNBhjAo1ddyNiBcdz8z49IPdK4SK8z5BWXsXTTbm6+YKJTBR9nMmFwAkCPNvo7CskAcyMigvRkF7hexVbcTB/IM4nrFUJVjbFZnaDdGccYFt86NX6JrsVTq0GnUXHKDXWgai0W8orLWgy7jOoXg1atYr0TrVZ2pR/DarMxZkDDfJXEWLsHt6mQ/smiUsJc9HR0JPERocybOoZ3flzNsDv+Dx8PHd/Pv69VBuLkIf3480Cm2xZjtIUqg5HsgmL6Rzfdya5fVBinSsqdMoYcrNiRSmJMJAmRoS0PboQrJ4/CYrWyevf+FseeKinDarO12QMG9sjJDwvux9fTg4ueerPVbZg+WrYei9XK3ZdMdfnaqJAAwgP1bD/YdMhfonEkA8yNiAwKoLSy2uUy/KJyuwesRQMs/HTz3yYqdgpKy8kpLGm0vFvC/REEgRC9L6fc0AOWW1iKKIp1TcObQq1SMn5QPH/81XIe2LaDdrmFxhKG7SEqoUkDLK+4jFA3MsAAvn72br6ffx8XjkpkxT8fJbyVOUKTEvtSYzJ3C0FSV0k/0XQCvoO6RPwTznnBKg01bNl3iPNHDm71vkb3j8Xf25Pl2/5qcazjIdvVPpBNEervy++vPkKloYYpD79CXrFrn3+jycyHv65n5ohBLWpENsXIfn3Y2YSYsETTSAaYG+HwDmQXupbDU9eIu4WSZseHq6mqmT2ndZoaE8qU6B6E6H3IL6no6m00wKFP5sxN57yh/dh3NJuC0uY9eX/uz6RvZFijpfz27hLBHGhC3DivpNztDDBBELhi8kiWv/oIA9tQBDNxcF+gZ4aEDjoqIJsLQUbavWPOhiHXJx/EYrW2yQCTy2VcODqR37fvbTEZPef0ZyE80K/V651NYmwUK//1GPkl5VzyzL+pcaEK9vOVmzlVUs7j82a1ev0RCX04crKgLhoj4RySAeZGOLwDriZRO3LAWvKARQUHoFTIycxp3AO2O8MupudqLz4J9yFE7+OWHjCH8KQzlV9ThvYHYEMzeUyiKLL94JFGw48OBkT3atQDZjSZKamocqsQZHsS4OvFoD4RrEvuec1G0o7nopDLiekV1OSY3qGBqJVKpw2wlTtT8dRqGDuwYS6hK1w0ZijFFVWNiuqeyfF8e5gwMjigTeudzaj+sXzz3D/YnXGMm179CJut5apEi8XKP/+3nFH9Yjjv9OeuNYzsZ89VdNxDJJxDMsDcCId3wNU8MIcB1pKqt1wuIyYsmMzcxish92QcIyEiVErA78YE+/m4ZQ6Y46GipSpIgGHxvfHSaRroYp3J4dx8isormzXABvYOJzP3VANNLMfvx908YO3JRWOGsDElncIy9/OGtoW04yeJCw9GqWi67Y1cLiM+IsQpA0wURVbsSGXasAFtbqUzY/hAFHI5v21PaXbc4dx89N6e+HVAF4bZ45J49Y4r+e6PHSz44qcWx3+5ZitZp4p45vrZbSpIceQN92T5k45Aat7kRoQF2KuyXA1BllRUoVWrGpTiN0ZceHCTHrA9h7KYmJjg0toS7kWI3ofiiiq3682WXViMn5cHnjpNi2MVCjkTB/dtNhHfobzdWAWkg4G9w7HZRDKy80iMjao77qgS7ckG2FXnjeKVr5exdNNu7pw9xeXrTeZakjOz2Jl2lIzsPPKKy6g2mgjw8aJfVBhzJ42kbzN5WB1F2omTdaLVzdEvKow9TnhjjuUVcjy/iMeudr368Wx8vTwYntC7xdDv4dx8Ypvx4LWVx66eRfqJPF744mf6RoYxb2rjshLlVQae+ug7RvWLYdboIW1a08dTR9/IsB6Zd9iRSB4wN0KpUBDm7+tyCLK0qtrpnnYOLbCz3dNHTxaQU1jCmP5tc8NLdC0henv/NofQqLuQXVDikvDklKT+HMo+RW4TvS03pKQR6OvVbDXcgNPnzg5DOpKUe7IBNjgmkviIEL7b4Lw+1LG8Al75+lfG3fsC3rPuYOw9L/Dge1/xv3XbOHKygIrqGnakHWH+50vpd+MTzH76zU7tumCutXAkt6DZ/C8HfSNDOXaqsMWOAA5DfmJi33bZ46TEvuxKP4rBaGpyzJGTBcT2Cm6X9RpDEAQ+fPhmJgxO4OZXP2ZHEyHR+Z8vpaCsgvcfvLFd+v7aE/GPNitzJFEfyQBzMyKC/F0OQZZUVDvtzo7rFYzRXFuXCOrAkS8ybdgAl9aWcC9C9HajIr+FBPbO5kR+cYsVkGfieB/+vmNvg3OiKLIhJZ3JQ/o1GzZxdJc4u73XySK7ARbm335J0O6GIAhcdd5oNqSkNSs7A7D38HGu+L93iLnmUZ7++HssVisPXD6Dn158gLwf36Vk2YekfvYy2z+Yz5Fv3iD3+3dYeNtc1u45wMCbn2L7geZzntqLzJxTWG22ZisgHfSLDMNmEznUgvD05tQM/Lw86oz1tjIxMYFai7XJPDBzrYXj+UUdaoCBXZ5i6QsP0CvQj0ueeatB0+6lm3bxztLV3HHReQxrp6r3EQl9yC8tr8v3lGgZyQBzMyKD/V1uJVNa6bwBlnS6wnHbWV+aa/ccoFeAX6t1cCTcg2A/e2sdd8sDyy4scansflCfCPqEBfHjxl0Nzh09WUB2QTHnDe3X7ByO7hL7jtZX6M4rKUMukxHo23zRSnfn6imjsdlE/v39ykbPV9cYeeDdL0m64znWJR/gqWsvJuvbf7PjgwX86655zJkwnBD/hmK1If6+PH3dbFI+eQm9lwcXPPFaXQeNjuTvHpAtG0vO9oTcvC+D8YPi28UDBDBuYDwymdBkb8SsU4XYbGKHG2BgL8b47ZVHUMhljL/vJT5ZvoH8knL+s2IT815cxKh+Mbzxj3nttp5Dvij5dDW9RMtIBpibERGoJ7ug2CU3rishyKS4aLw9tPUqpGw2G+uTDzJ12AC3UQaXaB0OD5g7VULWWiyUVFTVhUedQRAErpg0gnXJBxu0JdqQYtcImzykeQMMYEhsJH9l1n/6zysuI1jv0243XXelf3Qvbr5gIm98t4L9Zxmh+45mM+Ku53l36RruvHgKR755g4W3zSUqxPnKvPiIUNa9+RTeHlpmPflGhyf8O3S9EiJa1qqKjwhFEIRmDbBTxWUcyj5Vp+TeHvh46hgSG8Wm1MbzwA6f1mCMCeu4HLAz6RsVxo4P5tM3MpTbX/+UkMvu5ZZ/fsyA6F4sf+URPLQt52Q6y+CYCGQygeSzPm8STdOzv4G6IRFB/hjNtRSfFld1BldCkAqFnMlD+rE++e8E59Qj2RSVV0rhxx6AO3rAHELBQb6uNb6+fOIILFYry/6sL265ISWdYD8f+jqRCzQioQ+5RaX1xCndTQW/I3ntrqvx9dRx3cIP2Xv4OLmFJcz/z1KG3fEcJRXVrHn9CRY9dFOjWmrOEBUSwC8vPURJRTU3vrLYKemD1pJ2/CRRwQFOGQ1atYreoYHNirFu2XcIgAmD2rfwaOLgBLYdONxoJwKHAdYZHjAHvQL17PhgPlvfe46Xbr2CDW89ze7FL7T6b94UOo2afpFhkgfMBSQDzM1w9MpzJQxZWlnt0odpytD+HDlZUNe2YvXufQBMTZIMsO6ORq3C11PnVjlgDkHVQBcNsBF9+xAR5M8PG3fWHTOazKzalcp5Q5vP/zpzDqBedVZeifup4HcU/j5efPbEbZwoKGbIbc8SPvcBFnzxE3Mnj2Tff15majs8dA2Ji+LNe65hxY5U3l26ph123Thpx086lf/loKWm3Jv3ZaBVq+rSMtqLSYl9MZprG80DO5ybj5dO4/Jnoa3IZDLGDoznmesvYdKQfh3m/U2Kjya5E8LRPQXJAHMzHA1anU1kNNdaqDaa8PPUOb3G1CS74N665AMYTWbeXbqGsQPjCAvouUnJ5xL2dkRuZICdDk0F+bl20xEEgWunjWH5tpS6PK5v1m2jsKyS22ZNdmqOoXFRyGWy+gaYG7Yh6kguHpvE0W/e4F93Xc1b915H8scv8vWz/2hXI+DuS6Yya/QQnvr4OzJbSHxvDTabjYzsPJcMsAG9e5GRnUetpfGemJtTMxjdP6bd5VomD+mHTCY0KoRrl6AI7rGpHklx0eQVl7ncDulcRTLA3AyHEeTsDdSRH+OKB2xA73CC/Lz5dv123vphFTmFJbx4y+Wub1bCLQn283YrA6ywzN6exNUQJNg1jXw8tDz+4beIosib360gMSaSKUnOqXbrNGoG9O5VZ4DlFZdRWFZJXCeGgNwBXy8PHrt6Fg9cMbNDOl0IgsBHj96CWqng5lc/brEdj6sczy+ixmSmvxMJ+A6GxkZhrrU02o6qorqGvUdOtGv+lwNfLw9GJPRh7Z6GBlhHS1B0NY6Kys4oyugJSAaYm+GozHI2idphgLmiqiwIAg9cPpM1u/fz1MffMTVpAFOk8GOPwd6OyH0MMIcmWWuqDvXenjx7/SWs3JnKpAcWciArl4evvMAlD8KIhD7syjiGKIqsO31TlN7v7U9YgB/v3H89W/cf4p2lq9p1bocR5YoHzBFabCwk9uf+TGw2sa5vZnszbdgAdhw8QnmVoe6Y0WTmWF5hjzbAhsRGAn/3FZZoHskAczOUCgUBPl5O30BLKu0Jzn6errW1ePq62az/91NcODqRN++5xuV9Srgv9hCk+4QACsoqUMjl+LoQJj+Tey+dzrXTxlJtNHHh6ESunjLapetH9O1DSUUVR08WsC75AHpvz7obhUT7ct30ccwel8TTH39Pxom8dpv3r8PHEQSBwTHONymP7RWMl07TaFL45n0ZKORyRvePabc9nsn04QOx2mz1VPG37s+k1mJl3MD4DlnTHfDSaYmPCJES8Z3EfXqVSNThigejtNL+hKX3dr2v2HlD+7epAauEexKs96bSYKTGZEbrRHuqjqawrJJAX69WJ/6qVUq+evbuVq8/qp/9Jrt8Wwpr9xxgytCOS0I+13GosA+46Ulu/udHbH7nOeTytv+ukw9lER8egpfO+T61MpmMoXFRjXrANqdmkBQf1a4yDGcyun8sOo2KNbv3M3tcEgBr9+xHIZf3+HZvSXHR/Hkgs6u30S2QvoXcEFcMsDoPWAc0dpXongT72fW2WlJA7ywKyiq6VPQ0MTaSqUkDeOrj78gpLGHasIFdtpdzgVB/X9574Aa2HTjMv79f0S5zJmdmtapaMSkumpTDJ7BYrHXHTOZadqYdbXf5iTNRq5RMGzaQHzburJOjWLvnAKP7x7hkRHZHkuKjOZFfTNHp3E+JppEMMDfElRBSXRK+ZIBJnMaR7F7QwcKYzlJQWtGqBPz2QhAEFj10IzabXdxYklvpeOZNHcOc8cN49tMf2d3GBs1FZZWcyC8mKS6q5cFnkRQfTY3JTEb23+HQzakZmGpr263/Y1P845KpnCop54eNOympqGLPoaxzQmsx6XSRx1+Hs7p0H90ByQBzQxweMGfU8B0GmK+LOWASPZfg04rz7qIFVlhW4bIERXsTHxHK63fP48LRicT06hwV8nMZQRBY/MjNhPr7cPHTb9ZpDrYGx428NR6wYfGn2+OcEYb8dv12vHQapg/vWE/o9OEDSYgI5Z0fV7Mu+QCiKJ4T3te64odDkiJ+S0gGmBsSovfBaK6lorqmxbElldV4e2jbJc9ComfgUMPPL3ETD1hZBYE+XWuAAdx72XR+e/XRHqvB5G4E+fnw26uPUmOqZerDr7RaH8xxI2+NfEZCRCjeHlpW7bSLTZvMtfy4aRdzxg/r8PxImUzGfZdNZ0faEa5a8D7eHlpG9uvToWu6A35eHvQODZQEWZ1Aumu7ISEueDBKK53vAylxbuAI97mDB8xoMlNpiDczjgAAIABJREFUMHa5B0yia+gf3YtVrz1GeXUNY/6xgFU7U12eIzkzi96hga3Kc5XLZdwwYzzfb9xJQWk5q3bto6zK4HIlbWu56fwJ3DNnGgtuvoy1bzyJUnFu1L0lxUWzJ+NYV2/D7ZEMMDfk74bKLd9AXekDKXFuoFGr8PbQukUOWGF560VYJXoGo/rHsu395wnW+3D+469x71tfYDCanLpWFEV2HDxSl1fUGu6ZMw1zrYX3f17Lop/X4u/t2eHhRwceWg3vPXgjz90wp64t1rlAUnw0R04WUHY6RUaicSQDzA1xpaFyaVU1eq/2baoq0f0J9vNxiyrItoiwSvQcYsOD2bP4BR6aez7v/7yWobc/y860Iy1et/fwCY7nFzFz5KBWr903Koxpwwbwwhc/s2rXPp645qJzxhPVVTgM5pTDJ7p2I26OZIC5IX97wFquhCytrMbPq3UClxI9l2A/b/JLu94D1to+kBI9D41axZv3XMv6fz9FjamWsfe8wILPl2KzNd226MdNu5DJBOaMH9amtZ+7YQ6JMZEse/lhHrt6VpvmkmiZpHh7xaqUB9Y8kgHmhui9PVDI5VIIUqLVBPv5uEUOWFv6QEr0TM4b2p/UTxcyb+oY5n/+E9e+9EGdVtbZ/LhpF5MS+7a5cfjExL6kfLqQi8YObdM8Es4R5OdDeKBeUsRvAckAc0NkMplTDZVFUZRCkBKNEuTnXRf+60oKThuBbb2BSvQsfL08+O/Td/LPO6/i2/XbufS5txoYYQezckk7fpLLJ47ool1KtIWk+OgO9YB5nn9bg2Mf/rKO/67a0ux1n6/YxL1vfdHqdaOveqjdRGYlA8xNcUaM1WA0Ya61SB4wiQYE+3lTXFFFraVxz0JnUVBWgVqpxEvXMS1fJLovgiDw+LyLWPzIzfy+fS/XvrSoTrFeFEVe+XoZMpnApROGd/FOJVpDUlwU6SfyqK4xdtqad10ylRtmju+09dqKlInopoTofThZXNrsmOIKexsif2/JAyZRH0c7osKySsIC/LpsH44+kJL2lkRT3HHxFKpqTDyy6BvyS19h0YM3si75IF+t2cqCmy/r0vevROtJio9GFEVSDp9g3KDOaUA+/z9L8dSqefTqWUx+YCGj+sfwx19plFUZ+PTx25gwuH77qd+2pfDSl7+w7OWHERG5683/cCK/GIC37r2OcYPiKS6vZN6Li8gtKmVM/1hEWhZIdxbJA+amhOh9WkyirjPAfCQDTKI+DjX8rg5DFriBCr6E+/PwlRfw9bN3s+fQMQbd8jQPvvcVM0cM4tnrL+nqrUm0EkclZFcm4lusNnZ+uIC37r2WBZ//VO/cT5t38+o3y/j9n48S4OvFA+9+xUNXnM+uxS/w4wv3c9trnwKw4IufGD8ongOfv8qlE4bXGWjtgeQBc1NC9HYZAZvNhkzWuJ1cXC55wCQax13EWLu6D6RE9+GaaWMZ2TeGTanp6NQqLh47tMnvPgn3JyzAjyA/7y5NxL/sdPh6WHxvsk4V1h1f/9dBdmccY/XrT+DtYW+OvnbPfg5m5daNqTDUUGUwsmlvBktffACAWWOGtGvKj2SAuSnBeh+sNhvFFVVNJjBLIUiJpnCEILtaiqKwrJJ+UWFdugeJ7kNseDCx4cFdvQ2JdkAQBIZ1cCJ+S6iVdhNHLpNhsf4tdxITFsTRvEIOZecx/LRArs0msn3R82g6uEXVmUiPF26Kox1Rc5WQDgMswEcSuZSoT7C+6z1goijaQ5CSB0xC4pwkKS6aA8dyMZrMXb2VekQFB/Djgvu54ZXFHDiWA8CMEYN496c1dWNSMu09SCcmJvDN2j8BWLFjL6XtqO7fagNMEIQEQRBSzvivQhCEBwVBmC8IQu4Zxy8845qnBEE4LAhChiAIM9vnJfRMnBFjdRhgeu+eUwVpM5VhOrUJU94GbLXtU+p7LuKp1aBRKbs0B6y6xkSNySzlgElInKMkxUdjtdnYd9rIaU8MJjPhV9xf99+b361w6fq+UWF8/ezdzJ3/Lkdy83nnvuvZnXGMwbc8Tf8bn+DDX9cD8PyNl7IpNYMBNz3J0k27iQz2b7fX0OoQpCiKGcAQAEEQ5EAu8BNwM/BvURRfP3O8IAj9gauBAUAYsFYQhHhRFK2t3UNPxhkPWFF5Jd4e2h7RVsNWW0nVX/+H4dDHiBb7E4ag1uM58Ak8BjyCIJN38Q67F4IgdLkYa2G5ow2RZIBJSJyL1CXiH8pq916Ytj/+2+z5DW8/U/fvAF8vspb8G4CbLpjITRdMBGBoXDQHv/hn3bglz9/bYB5/Hy9Wv/5Ee2y5Ae11554KHBFF8Xgz5eaXAN+KomgCjgmCcBgYCWxrpz30KJwKQZZX9Yj8L0tFJqXr52ApT0fb5zo0vecBNgzp71O55wlqS1LwnfAFgkzZ1VvtVgTru7YdkcP7JoUgJSTOTaJCAvDz8mDPoWNdvRW3pL0MsKuB/53x872CINwA7AYeEUWxFOgFbD9jTM7pYxKN4KnVoNOoWswB6+4GmKUik+LfJyCKFvQz1qAOnVJ3ThN+IVWpr1KZ/BRlNjO+k5ZInjAXCPbzadeSaVeR+kBKSJzbCIJAUlw0yYeOd/VW3JI2G2CCIKiA2cBTpw99ALwIiKf//wZwi4tz3gHcAfD4449zwQUXtHWb3RJfrZrUtENs2LCh0fNZOSfx0qqbPO/uKCyFRObdhyAayQ55B3OGDDI2nDVqNH5+dxN0/AMO/nwNhfq7u2Kr3RJrTTU5+UVd9v7YnHwIgCNpB6g+daJL9iAhIdG1BGplbNp7nDVr16FUnBsP0JMnT3ZqXHt4wC4AkkVRzAdw/B9AEISPgeWnf8wFIs64Lvz0sQaIovgR8JHjx3bYY7ck+odNiEpVk39M80fLiOsd6fQf250QrWaKV07GIlThf+EmIvyTmh4rTqJihxzS3yO6/2Q8+kpGmDOsOVzIqr2HmThxYpfoKW3PtRdRXHz+dDy0UisiCYlzkXybhm+37iMwKpYhcVFdvR23oj2+ledxRvhREITQM85dCuw//e9fgasFQVALgtAbiAN2tsP6PZZgP5/mqyC7cQ5Yxe7HqC3chs+4z1A2Y3yB3Y3tPfLfqMNnUbHjXow5rlW7nKsE+3ljtdkoqWi/smlXKCirwEOjlowvCYlzmKT4aKB9FfHX7N5HwvWP1UlIdFfaZIAJguABTAeWnnH4X4Ig7BMEIRU4D3gIQBTFA8B3wEFgJXCPVAHZPCF6nyZzwCwWK+XVhm6pAVZz9FsMae/g0f9BtL2vdOoaQabAd9K3KPwSKf3jcky5q5sdL4rnrOO0jr/FWLumEtLRB1JCQuLcJSYsCG8PLbvSj7bbnOkn8jiUfarbOiActCkEKYpiNeB/1rHrmxm/EFjYljUbw1RdzKaPpwJgrDyFIJOj9ggEYOq9O5Ep2lfZNj9zLUf+fI+xN/7crvOeTYjeh+KKKsy1FlTK+n+qksruqYJfW5ZG+Z+3oQwah9fwf7l0rUzpiX7GKkpWz6Bk3cV4Jb2ER997ERRabKZSzAVbMOdvxpy/mdriPSi8YlFHzMZryPMICm2r9mszV2AzlyLXhXe7AgBH8ntBWQUDumB9qQ+khISETCZjREIfdqQdabc5M3NO4anV1PW87a50fwEpQO3hz/QHUwA4sGY+CpUnCZMe7fR9iKKI6cQvVO17BWRKVAEj8RwyH5mqdTehkDMaKocH6eud645tiGy1lZT+cRmCwgO/SUtaJSsh1wTiP/MPyjZfR+Xux6n863lkSm9sxgJABJkSZcAIdAn/wFqRQfX+f2E6uQq/835C4RXt9DpWQx7lW27GdHIVAAq/QXiPfKtelaa7U+cBa6aStiMpKK2gV4Bfl6wtISHhPozqH8M/v1mOwWhCp1G3eb7DufnEhQfTjOxVt6BHGGBNsW/l02i9w4gdaxdXS/39CXS+kXgFJpC+fiEyhYbqkqMEx01jyCXvIQgCeekrSFv3AjaLCc+AOIbP/QyFyoO8tN/Yu/xhFCoP/KPHNbpe2ebrMB79Brl3AnJtENVp72DMWY7feT+h9HPdB3GmGv7ZBliRoxG3T/cwwERRpHzr7VgrDqGfsRa5R+sVSGRqX/TTlmM6tRHTiZ+xWaqRe0SiCp6AKmBkPW+XMed3yjZdS8mqKfjP2oZc23KfudqSVEpWT8NWW4Vn4nPI1P5UH3ybklVT8RmzGF3CHa3ee2cS7OdoR9Q1WmCFZRUMlZJuJSTOeUb1i8Fqs5F8KIvxgxPaPF9mTn6P+G7p0QZY7+G3sON/84gdey+izUruvu+Zet8eSnP3UJK9gxkPH0TnG8GmT6Zz8uAv+EeNJWPDq0y8fR0KlY609QvJ3PI2ceMfJHnpnUy6ayMe+j5s/+qKRtfTRMxGFTgWXcKdCDIFplObKNtwJaVrLyTg4j3INAEu7b85MdbicnuFmb935+bY1JYeoPrgW9QW7URQeqEOm4Eu4S7k2qBmr6tKWYAxawleSa+gDj2vXfaiDpmEOmRSs2M04Rein76S4pXnUbr2IvTnb0CmbLp1k6XyKCVrZoJMRcDFu1H69gdAF38HpRuuoHzbnSDI0MXf1qa9ixYDNceXYilOxmYqQuGXiCZ8Fgrfvm2a90z8vDxQyOVdkgMm9YGUkJBwMKpfDAA70o602QCrtVg4llfIleeNao+tdSk9uhm3Z0AsCrUX5Xn7yMtYgV/4SFQ6e0hEHzkaD300gkxOROLVFB3bQvHxP6koOMgfi8ay5q0hnPjrawylWVQUHMQzMB5P/xgEQSBy6LWNrqftfRUe/e5BkNntWnXIRPymLcNac4rSTdci2lyrOXAYYI3dQLsiBFmd/iFFy4ZhzFqCXBsKNjNVKfMpXBpL5d6FiBZD49elvU/V3gVoY2/GY1DHtHRoDlXgKPwmfUttSTJlG69CtFkaHWetyadk9QxEmxn9jNV1xheAoNDid95S1L3Op3zbnRhzfm/VXkSLkarUl8lfEkb55usxHPoIU956Knc/SuHP/SnddC3WqvbRzJLJZAT6enVJP8jyKgO1FquUhC8hIUGw3oeo4IB2yQM7fqoYq81GXK+WoxnuTo/2gAH0HnErWXs+x1CaRe9Rd55xpn7sWBAEEEVC4s9n5NVf1jtXkrO71eurAkbgPeodKrbdRc3hz9DF3+70tY4cnrzihlIUnW2AVWcspmL73ajDZuIz4Yu6UJ6lPIOKPU9S9dezGDIW4TX0RbQxNyLI5IgWA5XJz1B98C3U4RfhM3Zxl8XsNZGz8R71PhXb76b8z9vxGftJvaR6m7mckjUXYKvJQz9jXT3jy4EgV+M7+XuKV0ykbMOV+F+wGaX/UKf3YM7fStmWm7BWHkYdMRuP/g+hCpmEIAhYq3OpTn+P6oNvY8pehveIN9DG3dbm31dX9YMsPO2hlZLwJSQkwJ4Htu3A4TbPk5l7CoDYHmCA9WgPGECvgZeTl7aMspMpBMdOqztecmI7htITiDYrOanfERA9Hv+osRQe3UhVsb1c1mKuprIoE++g/lQVZVJdcgxRFDmR8r+mlmsUXfwdqIInUJn8DDZT07peZ6NWKQn09SKnsLTBueKKKtRKJR7atic0toQpdzUV2+9BHX4hftOW18ujUvgkoJ/yE/4XbEKui6B8660U/tiH4lXTyV8SSvXBt9D1ewC/KT91eS9Hj7534Zn4PDWHP6ds07XYau36WJbKLIp/H4eldB++k39EFTS6yTlkSk/005YjqPwoWXcR1ursFtcVLUYqdj9O8YoJIFrQz1iNfuovqEMn1xlYco9eeA97hcA5B1D6D6f8zzsoWTMTS2XbeqgF+3VNP8hzsQ+k6dRGyrbeRtHykVSlvopoMXb1liQk3IbR/WPILijmZFHD+5krHM61a73HhYe0x7a6lB7vAZMrNQT0nojGKwThDDVwfcRIkn+6i6riIwTHTSO0/2wEQWD4FZ+y45ursFnNAAyc+TJeAXEkXfohWz67ALnKg4CocRjKnA8T2YVE36Zo2TCq9r6A98g3nb42MiiAEwVFDY4Xl1fh7+PZ4R4lm6mEss03oPDtf7oXY+NvGVXwBPxnbcN4/AeMx77FWp2NJvISdPG3owqe0KF7dAWvofMRlB5U7n4c08nVKP2HYS7YiiBToZ++EnXY1BbnkOvC0E//neLfx1G8ajr66b+j8OrT6FjTqU1UbL8bS9lBdPF34DXidWTKpsNyCq/e6GeuxZCxmMrdj1H4UwK62FtQR16CwqcfglyDIFchKDwR5C3LqwT5eZN24mSL49obRx/IwHPAABNFG1V7X6QqZQGCyheFVx8qk5+i5uiX+F+4rdVV0BISPYlxA+MB2Lr/EHMntz5/KzPnFF46TY/wrvc4A2zA9Pn1fhZtNkqzdzLmhvqaXUqNT6M6XsHx0wmOn97geGi/WYT2m9XqfSn9h6KNvYnq9EV4DHwMuS605YuAyGB/MrLzGhzPKymryxHrSCp2PIDNVIx+xipkyubDnYIgoI2eizZ6bofvqy14DnwMVdB4qg+8gaU8A13crXj0uw+FT7zTcyj9BqGf9hsl6y6hePkovEa8jrb3PAS5CtFmwZy/heq0tzGd+Bm5RyR+035HE+5cT1NBkOHR9240ERdTlboQQ+anGA4trj9IpkIdOgWPAY+gDpvW+ETYQ5AFpRWIotip4d/CsnPDAyaKNsr/vIOazE/RxlyP9+gPkCk9MGYvp3T9HCp23IvvhP929TYlJLqcoXFRaNUqtu7LbKMBlk9sr+4vQQE90AA7k/K8fWz9Yjbhg+fi6d+4h6Iz8Rz8DDVHvqD6wBt4j3jdqWsig/xZs3t/gxtoTmEJ0SGBHbVVAEwn11Bz9Cs8E59HqU/s0LU6G1XQGFRBP7RtjuAJBMzaTumGuZRvuYmK7fcg0wZjNeSBtQZBrcdzyHw8Bz6GoNC5PL/cIxyfMR/gNfw1aot2Ya08imirBZsZa1UWxuM/UrJmJl7DX8Oj/0ONfiEF+3ljNNdSaTDi7dE6MdrW4AhB9uQkfFEUqdj2D2oyP8Vz8LN4Dn2h7m+gibgIz8TnqEqZjzr8Iqc7PkhI9FSUCgWj+8ewZd+hNs1zODe/rr1Rd6dHG2A+oYO48MmGOTTBcdMIjmvaa9BRKLxj0Pa+BkPGB3gOetIpWYrIYH+qaoyUVRnw8/pbPiGnsJTxg5z32LiKaLNSsesR5F598Bz8VIet091R+MQTMDsF88nVGHN+x2YsRK0JQhU0Bk3Exa0yvM5GpvS0S3ecJd/hOfRFyrfcSOWuR5BrgtHGNKzODT6jkrYzDbDC8kq8PbSoVV2b99dRiKJIxY77MBxajMegJ+sZXw48Bz+DMftXKnc/jibyEgR5x+drSki4M+MHJbDwq1+oNNTgpXP9+6jGZOZoXgHXTBvTAbvrfHp8Er674TH4KUSLgeqMD5waHxlk7/R0Iv/vPDCD0URJRRXhgfqmLmszNYf/g6V0H17D/indOFpAEATUvWbiM+pt/CZ9g8+ot9D2vqpdjK/mkCk98J20BGXgaCp2PojNWNxgTJi/XXalrYmvrlJQ2nM1wGzmcso2XYMh/X08BjyKV9LLjXofBZkC76RXsFYfx3Do4y7YqYSEezF+UDw2m8iOg62To9h/LAebTSQxJrKdd9Y1SAZYJ6P07Y8qbAaGjMVN6lGdSWTwaQOs4O+ba+7pm2lHGWCixUhlyvMog8aiibq8Q9aQaB8EmRyfsR9hM5dRsefxBucd75GcwpJO3VdP6gMpWoxYytIx5qygYvcTFP7cH2PW93gOfQmv4f9qNhdFFTYdVfAkqva+VFd1KyFxrjK6fywymdDqMOTew/biN8kAk2g1Hn3vwWbIxXjilxbH/u0B+9sAc9xMO8oAM2R+gs1wEq+hL/WIRMeejtJvELq+/6Dm8H+xGupXPIYH2j1g2QWda4AVllUS6NN987+s1blU7H6CgqV9OfWVlsKf+1G69kKqD7yJ0ncQ/hdswSvxmRY/H4Ig4JW0EJsxn5rMTzpp9xIS7om3h5YhsVFsSElr1fUph4/jqdXQO7Rj8587C8kA6wLU4bOQe0RhSH+/xbFBft6olIp6HrCONMBEi5Gqfa/a+yqGTG73+SU6Bo9+94FoxZDxUf3jWg1+Xh6d7wEr7b4esJqsHyj8ZRDVB95E7hmF59AX8JnwJf4XbCH46gL0M1Y2qxV3NqrgcXYv2P7XEK2mVu/LWlNAdcZiyrbcTGXKAsxFu1o9l4REVzE1qT/bDh6musZ1nby9R04wOCYCmaxnmC4941V0MwSZHF3CXZhP/UFt2cFmx8pkMiIC9Y16wHoF+LX73gyZn2Iz5OKZ+Lzk/epGKLxjUYdfgOHQYsTTGnYOwgP1nWqA2Ww2isoru2UOWM3xpZRtmIvCO47AOQfwn7EKr8Tn0MVchyp4HDJ16z5znoOfxmbIpeaI65IUomijOn0RhT/2oWLbXZiyl1OVsoDi30bbBV9FW6v2JCHRFUwbNhBzrcXlMKQoiqQeze4x4UeQDLAuQxt/K8hUGNIXtTg2KiSggQdM7+2JTtMwOV60Wag5+i1VqS9jzF7u0p5Eq4mqfa+iDBqPKnSKS9dKdD26vvdiqzmF8cRP9Y6HB/o12k2hoyitrMZqs3U7Edba4mTKNl2HMnAM/udvdEkXriVUYdNR+g+nKvXlBgZyc4hWM2Ubr6Fi+z0og8YSMHsvQVcXEHxNKZqouVQmP0Vl8jPttk8JiY5m/KB4VEoFa/cccOm6rFOFVFTXSAaYRNuRawLR9r6KmiP/xVZb2ezYyCD/szxgpXW5PWdT+ddzlG2aR2XyM5Suu5iq/a85vSdD5mfYDDl4DZG8X90Rda+ZyHRh1Bz7tt7x8EA92YUNKyQ7CocKfncKQYoWI6Ub5yHTBNjbZik07Tq/IAh4Dn0Ra1UWBidzwUSLgdL1czBmLcEr6RX001eh1A9GEARkKh98J/0PbfztVO97lZqsH9t1vxISHYVOo2bcwDiXDbCeloAPkgHWpej63oNYW0nNkS+bHRcZ7M/J4lJqLfaqyZzCkkbzv8z5W6ne/y+0sTcTfE05muirqNz9ONXpH7a4F9FipCr1ZZRBY1GFttyOR8L9EAQZmqgrMOWsqGfURwT5U1Bagclc2yn7qBNh7UZJ+JV7F2CtOITvuE/r9TptT9S9ZqIMGk/V3pcQLYZmx9pMZRSvnoEpdyU+Yz/Cc/CTDR6KBEHAZ9S7KANHU77lJiyVR1u9N9FWS23JXkynNmLO34K1OkcKbUp0GNOGDSTl8PG6jhnO8Nfh4wiCwMDe4R24s85FMsC6EGXASBT+SRgyPkQUxSbH9QkNwmYTOZRt7wLfmAFmb4lyO3KPSLxHvY1M5Y3vxK9Rhc2gcvcjWCqa112pTn/f7v0a+qLk/erGaKPngs2EKXtZ3THHe+VkceeEIQvL7MZfd/GA1RYnU73/NbRxt6AOa9iGrL0QBAHvYS9jq8mjMmV+k+OsNfkUrzqP2qKd+E5egi7+9qbnlKvxm7QEBBnlW25CtFld2lNt6X5KN11L/je+FP06hJKVkyleMYGC7yMoWBJC6YarMRz6xKmm8xISzjJ9+EAAVu5MdfqazakZDImNxFPXvt7prkQywLoQQRDwSLgLS+k+agu3Nzlu7MA4ALbsO4TJXEtBaUUDA8yc9weW8jQ8h75Q1+xZkMnxHfcpCErKt97c5BOtzVRKVepC1L3ORy3lfnVrlEFj7WHIrO/rjjnC1Z2VB1bQjfpAirZayrbeikwTiPdw59qDtQVV8AR08XdQvf91THl/NDhvKUuneMUErBWH0E9d5lRfVblnJN6j3sWcv5nqg/92ah+iKFK1/w2KfhmM6cSvaGNuwHfiN+hnrkM/fSXeoxehDpuJOX8T5X/eTsH3kRSvmITh0MfYTJ0r6tscttpKqg+8ReVf/4ch4yNstVVdvSUJJxgWH01YgB8/bd7j1Hijycy2A4eZPKRfB++sc5EMsC5G03segtILQ0bTYcLYXsEE+XmzZd+hOi/G2QaYIeNDBLUebVT9L2y5Rzjeo94+/eX8dqPzV6bMRzSX4TXs1Ta+GomuprEwpOO9kl3QOXlgjhCkv0/zzdvdger9r2EpScFn9AetrnB0Fa8RbyL3jqVsw5V1hTKixUB1+iKKlg9HNJWin7EGda+ZTs+pjbkedeSlVCY/Q23pvmbHilYz5X/eTuXuR9FEXU7QFVn4jPkAbZ95qEOnoO41E4++d+M78UuCrswlYM4Be/5aTT7lf95B/ndhlP15R4sV3B1NzdFvKfghmopdD1G19yXKt91J4U8J9R4+JNwTmUzGnPFJrNyZisHYsjTLzvSjGM21kgEm0b7IlJ5o+1xLTdZ32EyNSwUIgsCEQQlsTs1gV7q9t2XvMxpxWw15GE/8jC725kaTh7UxN6COuJjK5KexlKXXO2c6uRZD2jvo+v6jxzXcPlfRRl9ZLwzZ2Wr4heUV6L09USoabzVrOrWRypQXqNjzNKa89U7nGlmrczBk/ofK5GepTH6O6vQPqS072Gz4vjksZelUpixAEz0XTdScVs3RGmRKD/RTlyHThVG67mLyvw0hf0mIvdLRfzgBs1NQBY11aU5BEPAZuxiZypeyTdcjWhrXWLKZSihZM7Ougbjv5CXINP7Nzqv07Y9X4rMEXpqG/0W70MZcT82RLyn6eQAlay7AXNC0976jqD74NmWb5qHw6Yv/RTsJudGC/wVbkGvDKNtwJRW7n3A5HNvViKIN44lfqdj1GKUbr6Ei+RlMJ9f02Fy8S8cPp8ZkZvWu5h8YADakpNnvg4MTOmFnnUePbsbdXdAl3IUh40NqDv8XjwEPNjpmwuAEfty0i2c//YGYsKB6b8Saw1+AaEEXf0ej1wqCgM+Yjyj8ZSAl6y7C//yNyD16YanIpGzLTch9+uI9/F8d8tokOh9l0BhmffJjAAAbLklEQVRkul7UZH2Pts81eOm0+HjoOs0Aa6oPpGizUpUyn6rUl+wHBDnV+15B7h2PV9JCNFGXN8g/FC1GjNm/UpP5Gaa8NSDaQJADov3fgNwrFl3fu9HF3YZM5VzYU7RZKfvzVgSlJ96j3m3T620NCp8EAi7aSXX6+1jK0xEQ0PS5FlXwhFbnYMo1gfiM+5TSdRdTtvk6fCctQZDJ685byg9Rsu4irFXH8ZnwJbqY61yaXxAEVAHDUQUMxytpIYaMxRjS3qH49zGowy/CK+mlTnmIM2R8RMXOB9FEXYbvhK/rHjpVwePwn/UnFTvup3r/v7CU7cd34jfIVD7NzmczlyPWViGovOvSNzobS/khyv+8DXP+ZpCpketCMWZ9R3Xqy8g9ovAY9AS6uFsR5Kou2V9HMGlIX3w9dfy0ZQ9zJgxvduyGlDSGxEbi5+XRSbvrHCQDzA1Q6hNRBoyi+tBidP0faPQL2GFwZeac4t37b0Au/9t5WXPsG5SBY5rVLZLrQtBPXU7J6ukUr5iAOmy6Xa5ApkA/dVmHN46W6DwcYUhDxofYzBXIVN6dqgV2qqSc4EYS8Kv3v0ZV6kto427Fe+TbCIIM44mfqEp9xS5+6jsQXcKdKHwSsBmLMedvoubYt4jmUmQeEXgOehpN76tPv89lWKtPYD65BsOR/1K56xGqUhfiOeARdP3ua/FGWpW6kNqCP/GZ8N8Oq3psCUGuxnPAw+06pybiIrxGvEnlrocp2zQP7xFvICi9MWR+SlXKfAS5Bv+Z61EFj2vTOnJNIF6Jz+LR/0EMae9Qtf81in4dgib6KryGLkDh0zGeCmP2csq33406fNZpA7P+LUyQKfEZ8wEKv8FU7Lifot9Go5/yS4PvRtFqwpi9nJrDn2PKXQGiFQQFmqjL8Bz0JEr/oU7vqbYkFWP2MmyGHJT+Sagj5yDXON8qp7Y4meLVMwARn7GfoI29AUGmrHv4qE57m4rt/6B63z/xTHyu7nx7I1oMGHN+s+cTl+3HWnMKkCFTeSP3ikHpPwx16FQU+kQEoe3BM6VCwexxSfy8ZQ/VNUY8tI0n1zvyv+6+pOdV5wutdd93Im6/wfbAkPkfyrfegv78jahDJjY4b7Xa8Lv4ThRyOdnfvVX3Zq0tPUDRLwPxHvWOvR1NC5jzt1Kx80EsFZko9YPxmfAlCs+odn89El2LOX8rxSvG4zvxa7R9rmHWk6+TW1hKyqcLO3ztPvMeZsyAWL5+9h91x6xVJyj8uR+qsBnop9QXihVtVmqOfUP1/jewlO79+4RciyZyDrq4m1GFTKnnzTkbc9EuqlIWYMr5DUHtj+eAR9H1uxeZsmEeWs3R/1G26Rq0MdfjM/6LHln1W5X6MpUpC8BWi+MrVN3rArxHL0LhFd3u69lMpVQdeB3DwbcRrTVoY27EM/H/2nUtc9EuSlZORuHTD/35Gxr9256J6dRGSv+4HEQrnonPoQ45D5uxwG54HfsG0VSCTBeGts91yL36YC1Px3D4c8TaSjwGPoZX4vPN6sFZq3Oo2PUoxqwlAAhKb8TaCgSVH94jXkcbe3OL7y1z4Q5KVs9EpvJBP3M9Cu+YBmNEUcR8cjWVfz1HbdEu5F4xeA5+Fm3vK9vlwbm2dD+GjMXUHPkSsbYcQeGJ0n8oMm0oIGAzl2CtyMRalWV/nWo96l4XoO1zLeqw6Q2MYFfYnJrBxPtf4pPHbuXWWZMbHfPDhp3Mnf8uq157nBkjBjU4b6ouZtPHduPMWHkKQSZH7WE3gKfeuxOZon29hvmZazny53uMvfHn5oY59aUiGWBugmgxkL8kDHX4hfhN+qbRMW99v5IAHy+um/H302tl8nNU7XuZoLm5yHUhnbVdCTdHFG0UfB+J0n84+qk/88iib1j081qqVnxSz3va/uuKaGfcyn2XTee1u+fVHS/dcCXG7GUEzklr8qYsiiLWqmNYq3OQKb1R+A1w+UnfXLiTqr0LMOX8bjfEBj6GLv5OZGpfbKYyqva9QvWB11EFjUc/YzWCvGE3iZ6CteoEhszPEJQeKP2HowqZ3OHGprWmgOp9r1KdvgiwoYu7FY8BD6PwjmvTvJaKTIp/H4+g0OF/4Tanv+sslcco23QttYXb/j4oU6OJuhRd7E2oQqfVM+xtplIqdj9KTeZnyL0T8B3/WYN8PFEUqTnyJRU77kO0mfEc+AS6vncj0wRhKdlL+Y77qC3YgqbPNfiO/bhJI8mcv5mSNRci0wajn7muxQdhURQx5SynMvk5LKV7EZReaKLnou1zHaqgcS6FJ0WrGePxH6lOX0RtwRaQqdBEXY4u/nZ7GLwRo8panYvp1B+YT67FmLPMbsBqgtD2uRaPAQ8h94hwev0zX9Ogm59Cq1axa/ELjY656Mk3SDl8nONL3mrxu+vAmvkoVJ4kTHrU5b04i2SA9VDKd9yPIWMxQVfmOOXCFkWRwqVxyD2j8Z+5thN2KNGdKN/xIIaMDwm+uoDPVidz++ufcuSbN+gTFtRhaxaXVxJwyT/49z3X8uDc8wGwVByhcGksnoOfxSvpxQ5b+0zMhTuoSpmPKXclAILaH9FkrwLVxt+O94g3uizf51zAWp1LVepCu+q/zYI6/EI8+j+AKnSqy+ErS1k6xaumgGjB//xNKHz7urwfS8URaot3I9OGovQbjEzt2+x4U+5qyv+8HWt1Nrp+99sNDG0otUU7qPzr/zCf2oAyaDy+4z9v4LUSRRtVqa9Q9ddzKPSJ+J23FIVX73pjjMd/onTTNfbv7hlrkXv0cvq1iKINc/5mag5/gTHre0RLFci1qILGogqZhNJ3IHLvWBReMXXGnyiK2Ay5drHdk6swHluCzViA3CsGXcJd6GJvQqYJcH4PVjOm3BXUHPkK4wm7IaKNuR7PQU+4HH5+b+ka7nvnv+z6cAHD+/apdy6vuIyIuQ/w+LxZvHz7lS3OdaYBtm/l02i9w4gdey8Aqb8/gc43Eq/ABNLXL0Sm0FBdcpTguGkMueQ9BEEgL30FaetewGYx4RkQx/C5n6FQeZCX9ht7lz+MQuWBf/Q4asqy28UAk3LA3Ahd/J0Y0t6l5vDneA58rMXxtcW7sVYewXPQU52wO4nuhjZ6Loa0tzHlLKd/tD3JNe34yQ41wHKL7Hlmvc5olWXI/AQEGbqEuzps3bNRBY5CP30F5sKdmPPWYak8isKrN6rQqagCR3XaPs5V5B698BmzCM/E/8OQ8QGGjA8pWT0DmTYUTdTlaKLnogoa22z4ShRFao5+TcWO+xBkavQz/2iV8QWg8I5pNLzXFOpeMwiYs5/KPU9iSHsbQ9rbIChAtCBTB+A9+n108Xc2GhYXBBleic+g9B9K2aZrKVo+HK+hL6KLvQmbpZrq1FeoPvgWyoCR+E1b5lK+mGN+dcgk1CGTEEe/hzF3JeZTGzGf2kDVX/9Xf7BcezqfrKquaAW5FnXYDDz63o0qbHqr8rkEuQpN5CVoIi/BWnXCHn4+9Ak1R75Al3A3XkNfdFrW5foZ43jm0+95+pPvWfXa4/W8tF+t2YrVZuPGmRNc3mPv4bew43/ziB17L6LNSu6+75l63x5Kc/dQkr2DGQ8fROcbwaZPpnPy4C/4R40lY8OrTLx9HQqVjrT1C8nc8jZx4x8keemdTLprIx76Pmz/6gqX99IUkgHmRij9BqAMGo8h4yM8BjzS4gfDeOxbkCnRRF3WSTuU6E6cWQ3Zb8QlAKQdz2XWmCEdtubJojIAwvztX76irZaazP+gDr/Ipaf89kIVOBJV4MhOX1fCjlwXgtfQBXgOfhrj8aXUZH2PIfMTDOnvISh0KANGogwcg9JvMHLPKAT5/7d359FRVXkCx7+/VFUqlVTITgghEJAQNkX2oLgwoCwiNq22MLZDCza2y7TaKqPH8Rw9LtMuo63d2kgjtiujuMyg04L7CAo2YCOyNPtmiIGQfV/qzh/1oMOSQEJVvark9zmnTlW95b57f4R6991377sx+OpLaSj+GzU7X6WxeD2urueROPaVNlWgAiHKFU9C3nPE9r+V+oJPaKr6AVfqSNzdLznlyEqAmB5TSJ26htKV11O++hbKV9/iXyFRePrdQMKo351xHy5xxuLp9VM81jnAV19OU8UOGsu301i+A9NQhmmqJ8rlJSq2O87EQUSnjkKcnjM6bnMOb08SRj+L95x/p/K7h6je+jy1e98l8YKXT2tmiQRvLA/PuYpfP/sqS774Kz8b579AOlBUwm/f+ICLhvQnt2dGm/PlTe2L0x1PWcH3VJXuJanHKKJj/b9LyT3ziEvOBiBryAyKdq8EoPzgZj5/3n/L2ddUT2r2WMoPbsab1g9viv/vr+fQa9m77pU25+dktAIWZmJzb6RsxXXUH/gEd+alLW5njI+a3W/izpwUsgdIqsjiHw15JdVbXyB9bBPpSQls3nsgqMfML/I/6iIz1f83Wbv/fXy1ha1Op6M6PnG48fSZiafPTHwNldTlL6O+cAUNh1ZRtfEJMI0n7ONMPpeEMS/gyZnT6gCMYHMlDsCV2L4HgDq79CVl8pfU//gF9QdXIuLCnXUZrqQTO5MHQlR0F6JShuFKGRaU9Fvj8HQlIe/3xObMpvTLayn+6FLiBv2G+GGPnrKv5U3TxvPSh1/y62dfJbtbKkNzejH7sT9RU1fPC3fObneeeo+cw551f6a6ZA+9R9/YbM2J86piDN36TWLUjGPnZi7+YW27j38qWgELM57sq6lYO4/KjY+1WgGrL1yBrzofz4gnQpg7FWk8vWdQveVZave+zYBe3dkS9AqY/xZkRoq/j03Ntj8RFdsDd+akoB5XRY4olxdP9lV4sv23ckxjDY0VO2mq2gdN9YjLizNhgC0tpsEgIrgzxuHOGGd3VkLClTKU1MvXUr72bqo2PUVdwWckXbwEZ5e+Le7jdDp4+d4bmXrvf3L+rQ8RF+OmrKqa5++YddLWL2MMjaWbcCUNbjUvmYOvZPMnD2J8TaT3nXB0efG+1VSX7MOTkMkPG96i73n/SnLPPNYvvY3Kw7vwpvShsb6KmvIDdOk6kMqi7VQV7yY2KZt96xe3PzjHlztgKamAEIebuEF3UrH2LuoPfdNif5Wana8hzljcWdNCnEMVSVxpeTi65FK9fREDet3AG5+swhgTtNFwB4pKSU2Ixx3torFiD3X5y/EOuf+Mhqqrjk2cHlxJg095MlWRQ5yxJOQ9hztzEqUrZlH0/nASx77c6owTZ/fJYv3CR7j/xbepqa/npxeMZEreyR/sW7N9EWVf/5KUKStbnTXC4YohtfeFxMR3Q6L+0aUnOWsU3773KyoP7yQ9ZwIZA6chIoy46kW+eeMafE31AAye+CjxqTkMmz6flYsm44iOI7XX+VSX7mtnZI6lv4phKDb3Rio3PELlhkdIHr/0hPW+2iJqdr2Gp8+1RLk61pOBVWCJCLE5s6lY92+M7HE9f6yq5sfisqMtVIGWX1R89PZjzfYXAYjNmROUYymlwltM1uWkXv4tpV9cTcnn04kbdBfxwx9t8fEySfFx/OH2Wa2m6X/+2m/8Iz7T8o5ZN+iSB475bnw+Svb/lTH/cuyIRVdMwklHMab3u4T0fif2W8sYcBkZAy5rNV/toXNBhqEol5e4QXdSt/996vI/OmF91db50FRL3MA7bMidijSes64DcTDC8xUAm/fkB+1Y+UUlZKYlYXyNVO9YhDtzEg5vz6AdTykV3pzx2aRMWUls/5up2vQkxcvH01Tdvq4QxtdE2de/BNNIwnkLWx2oVlbwPR8+fhbpuZPwpvRpcTs7aQUsTHkH3YmjSw5lq2/GNNYcXW6a6qje8gfcmZNwJQ2yMYcqUjhiM3BnXU5q2Xt4XfV8s2Vn0I51oKiUzNQk6n74C77qAy3OT6qU6jzE4SYh7zkSL3ydhsPrKFo6lLqCz9ucTsXau6nLX0b8iCdPOSo2IeNsptyzm3OmHDvPcXrOhFM9wytktAIWpsQZQ0LeH2mq2EnZ13MxvgaMMZR9PRdfbSFxg+fZnUUVQbzn3AcNpdx3fiEfrfk+KMdoaGzkYGk53VOSqN62gChPN9xZgW+2V0pFJk+ffyZl6hrEnUzxRxMoX3MnvobKU+5njKFi/YNUbX7a/2Dc/jeFILfBpxWwMObuPh7v0Iep2fUah5eNo+TTadTsfAXvuQ92mhE1KjCiU0fg7jGVa3qtZcO2TVRW1wb8GAWHSzHGcFZyA3X5H+LJmR2USYOVUpHLlTiQ1KlriM25gapNT3Hovf5U/X0+pvHkv0lN1QWU/t81VK5/AM9Z19Fl5FMhznHw6FREEaB66wIqNjwMpglP75nEj3iiQ04grIKroWgdRR+M4KUt/Th3+ptMyQvsA1lXb9rBmFseZN1dXjKK5pN25U6c8eHZ90IpZb/6wpWUr51Hw6FVSHQiMb2uJDptNFHuVHz1ZdQXfknN7v8CXwPxwx4mbvC8SDn36VREHUVs7lxic7UvjTozrtThuHNv43qeYcnfXodTVMDa+riKddt2E+NoJL38HdzdJ2rlSynVquj0saRM+Yr6gs+o3rGI2j1Ljo6eBpDoJDzZP8M75P6Qz4QQCiFvARORScAzgANYaIz57Sl26fQtYEoFimmsZc3C3sRHldFn+grcacNP2Gbb/gKeXrKMxZ+uxuV0MCK3NwvvnkNmWnKraQ+fez+Tu67hlr7LSZ74md4mV0q1iTE+mir3YBoqEEcMjvi+ts6CcAZO68o1pH3ARMQBPAdMBgYCM0VkYCjzoFRnJs4Y9vV8msr6KAr/90Jq9/43Ry7CGhubeOyNDzhn9n38edkKpo45l+kXDOerjds4/9aH2LqvoMV0v922hw3bd/GLnPW40vKI7nZxiEqklOooRKJwxvfBlTwEZ0JupFa+TltIW8BEZAzwgDFmovX9XgBjzH+0spu2gCkVQMYYZt57LzdlLKBfQgkVMUM47BnL4lWF7DhwkHGDu/PziwYQ56jCV3eYwyWHeGvVXvaWebhw9EX06Jp+Qporv/uOIVF/YVjqIZLGLyUm63IbSqaUUmHhtFrAQl0BuwqYZIy5wfp+HTDaGHPrcdvNBeYCzJs3b/jkyZNDlkelOoOCkgpueuEdrui1hdkDttIvseyEbXy4aHIkYMSFs7GIKBpaTbOkIZ7abjdT7p0IkdFRVimlAu7iiy+O3E74xpgFwIIjX+3Mi1Id1YRxF7H/YDEAhQ2HyU7yEed2Ie4kotwpiDPuaCd8YwxNNQfZuXsDdXV1J02vb+5YYuOCM8WRUkp1NKGugOUDWc2+97CWKaVCLC2xC2mJXaxv2a1uKyI4Y9PJHXTiPGlKKaXaLtQPYl0D5IhIbxGJBmYAJ842rZRSSinVgYW0BcwY0ygitwLL8T+GYpExZlMo86CUUkopZTd9Er5SSimlVOCE33PAlFJKKaWUVsCUUkoppUJOK2BKKaWUUiGmFTCllFJKqRDTCphSSimlVIhpBUwppZRSKsS0AqaUUkopFWJh/xwwEVkGpLZhl1SgKEjZUa3T2NtL428fjb19NPb20vifqMgYM+lUG4V9BaytRGStMWaE3fnojDT29tL420djbx+Nvb00/u2ntyCVUkoppUJMK2BKKaWUUiHWEStgC+zOQCemsbeXxt8+Gnv7aOztpfFvpw7XB0wppZRSKtx1xBYwpZRSSqmwZnsFTESyRORzEdksIptE5DZrebKIfCwi2633JGt5fxFZJSJ1InJXs3RyRWR9s1e5iNzewjEXichBEdl43PKrrTz4RKTDj+oIVOytdXdYaWwUkcUiEtPCMWdZ6W4XkVnNlj8iIvtFpDKYZQ4nYRb/ZSLynZXGfBFxBLPsdguz2H8hIlub/XZ1DWbZ7RYusReR+OPOGUUi8rtgl99u4RJ/a/k1IrLBSuOxYJY7LBljbH0BGcAw63M8sA0YCDwO3GMtvwd4zPrcFRgJPALc1UKaDuBHoFcL6y8EhgEbj1s+AMgFvgBG2B2bSIk9kAnsBjzW97eAX5zkeMnALus9yfqcZK3Ls/JTaXdcOmn8u1jvArwDzLA7Pp0o9p3i9yYcY3/cduuAC+2OT2eJP5AC7APSrO1eBsbbHZ9QvmxvATPGFBhjvrU+VwBb8P/DXoH/HwTr/SfWNgeNMWuAhlaSHQ/sNMbsbeGYXwLFJ1m+xRiztb1liTQBjr0T8IiIE4gFDpxkm4nAx8aYYmNMCfAxMMlKe7UxpiBghYsAYRb/8mbpRAMdunNoOMW+swnH2ItIP/wVjRVnWLywF0bx7wNsN8Ycsrb7BLgyAEWMGLZXwJoTkWxgKPANkN7shPwjkN6GpGYAiwOauQ7uTGJvjMkHnsR/NVMAlBljPjrJppnA/mbff7CWdXrhEH8RWQ4cBCqAt9tTjkgUDrEHXrJug90vItKeckSiMIk9+M8ZbxqrKaazsDn+O4BcEcm2KnA/AbLaXZgIFDYVMBHx4r/1cXuzq3EArP8Up/UfQ0SigWnAkoBnsoM609hbfQWuAHoD3YE4Efl5kLLb4YRL/I0xE/HfnnAD/9TW/SNRmMT+WmPM2cAF1uu6Nu4fkcIk9kd0uot2u+NvtYbdBLyJv+VxD9DUhiJEvLCogImIC/8fwuvGmHetxYUikmGtz8B/ZX46JgPfGmMKrX2zmnWy/FWg8x7pAhT7CcBuY8whY0wD8C5wnoiMbhb7aUA+x17h9LCWdVrhFn9jTC3wP/h/WDu0cIm91ZJw5HbQG8CowJQwfIVL7K1jDQGcxph1ASlcBAiX+Btj3jfGjDbGjAG24u+P1mnYXgGzmttfBLYYY55qtmopcGS0xCz8J4XTMZNmVzLGmP3GmHOt1/xA5LmjCGDs9wF5IhJrpTneSvObZrFfCiwHLhWRJOvq6VJrWacULvEXEW+zH14ncBnw90CVMxyFUeydIpJq5ckFTAU2tnCsDiFcYt8snWPOGR1dOMVfrBG/1vKbgYWBKWWEMPaPyBiLv6lzA7Deek3BP0LiU2A7/s55ydb23fDfQy4HSq3PR0ZwxQGHgYRTHHMx/nvWDdb+c6zl063vdUAhsNzu+ERQ7B/Ef9LeCLwKuFs45mz89/53ANc3W/64lZ7Pen/A7vh0lvjj7+uxxsrHRuD3+FsEbI9RJ4h9HP7RdxuATcAzgMPu+HSG2Ddbtwvob3dcOmP88Z+LN1uvDj3y+mQvfRK+UkoppVSI2X4LUimllFKqs9EKmFJKKaVUiGkFTCmllFIqxLQCppRSSikVYloBU0oppZQKMa2AKaWUUkqFmFbAlFJKKaVCTCtgSimllFIh9v8GzthMIkTJRAAAAABJRU5ErkJggg==\n", 76 | "text/plain": [ 77 | "" 78 | ] 79 | }, 80 | "metadata": {}, 81 | "output_type": "display_data" 82 | } 83 | ], 84 | "source": [ 85 | "# prepare data\n", 86 | "linked = df.loc[df.page_transition.isin(['LINK'])].resample('7D').count()\n", 87 | "typed = df.loc[df.page_transition.isin(['TYPED'])].resample('7D').count()\n", 88 | "\n", 89 | "# create smooth lines\n", 90 | "x_link, y_link = create_smooth_dates(linked.index, linked.url)\n", 91 | "x_typed, y_typed = create_smooth_dates(typed.index, typed.url)\n", 92 | "\n", 93 | "# plot figure\n", 94 | "fig, ax = plt.subplots(figsize=(10,5))\n", 95 | "ax.plot(x_link, y_link, label='link', color='#003f5c')\n", 96 | "ax.plot(x_typed, y_typed, label='typed',color='#e69f00')\n", 97 | "\n", 98 | "# Set number of xticks\n", 99 | "ax.xaxis.set_major_locator(mdates.DayLocator(interval=60)) #to get a tick every 60 days\n", 100 | "ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))\n", 101 | "plt.xlim(xmin=min(x_typed) - timedelta(days=28), xmax=max(x_typed) + timedelta(days=24)) # xtick range\n", 102 | "ax.tick_params(labelright=True, right=True) # set right ticks and labels\n", 103 | "\n", 104 | "# Set number of yticks based on stepsize (=1000)\n", 105 | "start, end = ax.get_ylim()\n", 106 | "ax.yaxis.set_ticks(np.arange(0, end, 750))\n", 107 | "plt.yticks(fontsize=10)\n", 108 | "\n", 109 | "# Hide the right and top spines\n", 110 | "ax.spines['right'].set_visible(False)\n", 111 | "ax.spines['top'].set_visible(False)\n", 112 | "ax.spines['left'].set_visible(False)\n", 113 | "\n", 114 | "# Only show ticks on the left and bottom spines\n", 115 | "ax.yaxis.set_ticks_position('left')\n", 116 | "ax.xaxis.set_ticks_position('bottom')\n", 117 | "\n", 118 | "# Create labels\n", 119 | "plt.xlabel('', fontsize=14)\n", 120 | "plt.suptitle('Number of sites visited weekly', fontsize=14)\n", 121 | "plt.title('Either typed in browser or clicked on link', fontsize=9)\n", 122 | "\n", 123 | "# Create line labels\n", 124 | "plt.text(min(x_link) + timedelta(days=-20),y_link[0]+50,'Linked',rotation=0, color='#003f5c')\n", 125 | "plt.text(max(x_link) + timedelta(days=-1),y_link[-1]+100,'Linked',rotation=0, color='#003f5c')\n", 126 | "\n", 127 | "plt.text(min(x_typed) + timedelta(days=-22),y_typed[0]-80,'Typed',rotation=0, color='#ab7600')\n", 128 | "plt.text(max(x_typed) + timedelta(days=1),y_typed[-1],'Typed',rotation=0, color='#ab7600')\n", 129 | "\n", 130 | "# show plot and create grid\n", 131 | "plt.grid(axis='y')\n", 132 | "plt.show()" 133 | ] 134 | }, 135 | { 136 | "cell_type": "markdown", 137 | "metadata": {}, 138 | "source": [ 139 | "**Most frequently visited sites**" 140 | ] 141 | }, 142 | { 143 | "cell_type": "code", 144 | "execution_count": 90, 145 | "metadata": {}, 146 | "outputs": [ 147 | { 148 | "data": { 149 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAAEYCAYAAABBfQDEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJzt3XeUVdX5xvHvQ5HepCmgYENQFITBikrsLWrUiCUqmkjML5YYNTGJIqIpGpXELhpFjQ3ssSAWQFEERoqCiCiCNBEQEBCBmXl/f9wzeBhnYAYY7sA8n7Vmzbn77H3Oe85lLZ67Z997FRGYmZmZmVlGlWwXYGZmZmZWkTggm5mZmZmlOCCbmZmZmaU4IJuZmZmZpTggm5mZmZmlOCCbmZmZmaU4IJuZ2WYhqbukWeV07HslXVuKfpMkdd9E52wjKSRV24CxZ0sasinqMLNNzwHZzKwISdMlrZLUpEj7uCQQtdnI44ekXdexv6ekfEnLUj93bsw5s2F911mG4wyW1LeY9pMkfSWpWkRcFBE3rO9YEbFnRAxLxveR9N+Nra8kkrpJek/SEknfSHpXUtekjsci4qhU301yr8xs03BANjMr3hfAmYUPJO0F1N6M5x8ZEXVTPxcX10lS1c1YU7Y8DPxCkoq0nwM8FhF5WahpnSTVB14C7gC2BVoC1wMrs1mXmZWOA7KZWfEeBc5NPT4PeCTdQVIDSY9Imi9phqRrJFVJ9u0qaXgye7hA0lNJ+9vJ8AnJzHCPshQlaYCkeyS9Imk58BNJNSTdIulLSfOS5Qa1UmOukjRX0hxJF6RnKyUNk/SrVN+ekkakHreT9HoyAzpF0ulFarlL0suSlkoaJWmX0lxnUtMzRdpul/TvYi77eaAxcHCqbyPgBJLnJKnlxmS7iaSXJC1O6n4n9bxMl3SEpGOAPwM9kvomJPsbSPpPcr9mS7qx8EWIpKrJfV4gaRpw/DqeqrYAEfFERORHxIqIGBIRHxa9zyXdK0knSBqfXMd7kvZOXf8fk/qWJs/L4euoxczKyAHZzKx47wP1JbVPAtIZQNE/x98BNAB2Bg4lE6jPT/bdAAwBGgGtkr5ExCHJ/o7JzPBTG1DbWcBfgXrACOAfZAJZJ2BXMrOVvQGSIHglcCSwG3BEaU8iqQ7wOvA40IzMPbhb0h6pbmeQmRltBHyW1FWa6/wvcIykhsm5qiXHeqRIPyJiBTCQtV+wnA58EhETiin9CmAW0BRoTiYIR5FjDgb+BjyV1Ncx2TUAyCNzH/cBjgIKX0BcSCaU7wPkAKcVc+5CnwL5kh6WdGwS6ItV3L2StA/wIPBrMi8O7gNeTF4M7Q5cDHSNiHrA0cD0ddRiZmXkgGxmVrLCWeQjgcnA7MIdqdD8p4hYGhHTgVvJ/NkfYDXQGmgREd9HxAjKZv9k5rDwZ//Uvhci4t2IKCDzJ/tewOUR8U1ELCUT/M5I+p4OPBQREyNiOdCnDDWcAEyPiIciIi8ixgHPAD9P9XkuIkYnyxweIxPS1ysi5gJvp451DLAgIj4oYcjDwGmSaiaPz03airMa2B5oHRGrI+KdiIgS+q4hqTlwHPC7iFgeEV8D/Vj7Xv4rImZGxDfA39dxfd8C3cgE8/uB+ZJeTM5RGr2A+yJiVDID/TCZ53p/IB+oAewhqXpETI+Iz0t5XDMrBQdkM7OSPUpmtrYnP57ZbAJUB2ak2maQmb0F+AMgYLQyn5xwQRnP/X5ENEz9vJ/aNzO13ZTM2ugPCsM0MDhpB2hRpH+63vVpDeyXDurA2cB2qT5fpba/A+qW4fgPA79Itn9B5n4XK3mBsQA4OVnGsS+Zme3i/JPMbPYQSdMkXV3KelqTeU7npq73PjKz51DGexkRkyOiZ0S0Ajok4/9VhlquKHLvdyDzgusz4HdkXux8LelJSS1KeVwzKwUHZDOzEkTEDDJv1jsOeLbI7gX8MEtcaEeSWeaI+CoiLoyIFmT+TH63Nt2nFKRnQxcAK4A9U2G6QUQUBtW5ZIJVusa05az95sN0+J0JDC8S1OtGxG820XU8D+wtqQOZ2erH1tP/ETIzx78AXouIecV1Smb0r4iInYETgd+XsEa36KzyTDKztE1S11s/IvZM9q/vXpYoIj4hs3yjQymHzAT+WuTe146IJ5LjPR4R3cj8+wvgptLWYmbr54BsZrZuvwQOS5YnrBER+WTWxf5VUj1JrYHfk6xTlvRzSa2S7ovIhJiC5PE8MuuWN1qyzOJ+oJ+kZsm5W0o6OukyEOgpaQ9JtYHrihxiPHCKpNpJgP9lat9LQFtJ50iqnvx0ldS+lOWt8zoj4nvgaTIzwaMj4sv1HO8RMmuoL6Tk5RWFb27bVZKAJWSWJBQU03Ue0KbwDXzJso8hwK2S6kuqImkXSYcm/QcCl0pqlawpLnFmOnlz4xWF/wYk7UDmU1HeL2FI0Xt1P3CRpP2UUUfS8cm/td0lHSapBvA9mRdIxV2fmW0gB2Qzs3WIiM8jIreE3ZeQmYGdRubNco+TeWMVQFdglKRlwIvAZRExLdnXB3g4+dP56Wy8P5JZUvC+pG+BN4Ddk/pfJfNn/beSPm8VGdsPWEUmoD1MahY3Wc98FJk1uHPILKe4icz619Low/qv82FgL9axvCJVz3TgPaAOmXtakt3I3INlwEjg7ogYWky/QcnvhZLGJtvnAtsAH5N5YfM0mfXMkAmtrwETgLH8+K8KaUuB/cj8G1hOJhhPJPMGwuL0IXWvkn9zFwJ3JnV8RmapD2Tu/z/I/PXgKzJLQP60jlrMrIxUivctmJnZVkRSALsla1mzXcuOwCfAdskb28zMss4zyGZmlhXJ0obfA086HJtZRVLm7483MzPbWMlnLM8j80kQx2S5HDOztXiJhZmZmZlZipdYmJmZmZmleIlF5eI/F5iZmVllptJ08gyymZmZmVmKA7KZmZmZWYoDspmZmZlZigOymZmZmVmKA7KZmZmZWYoDspmZmZlZigOymZmZmVmKA7KZmZmZWYoDspmZmZlZigOymZmZmVmKA7KZmZmZWUq1bBdgm09Or97ZLsE2Um7/vtkuwczMbKvnGWQzMzMzsxQHZDMzMzOzFAdkMzMzM7MUB2QzMzMzsxQHZDMzMzOzFAdkMzMzM7MUB2QzMzMzsxQHZDMzMzOzFAdkMzMzM7MUf5OeWSnVrVWTq844jkM67k7VKlX45Mu59LrlQQC2qVaNJ3r/H623a8LAoaO4+YmXAeh5zMGc1r0r223bkM9nz6PH9Xdl8xLMzMysFDb5DLKkNpImlnHMiZKu3tS1lOH8Za65yPhRksZL+lLS/GR7fHLcVyQ1TPotS353l/TSpqrfNo/e553MMfvtzQsjxnLrwFeZNf+bNft+dUJ3mjWq/6Mx1apW5ZX3P9ycZZqZmdlGqhAzyBHxIvDipj6upKoRkV8Ox60WEXmFjyNiv6S9J5ATERenuh9X3ue38teySSMO67wHr7w/gTufe4OCggJeGDEWgF1bNuesIw7g3hfe4nc/P3qtcQ+8PAyAC447ZHOXbGZmZhuovNYgV5P0mKTJkp6WVBtA0nRJTZLtHEnDku2eku5MtptKekbSmOTnoKS9j6QHJQ2TNE3SpcWdWNIySbdKmgAcIKl3cpyJkvpLUtKvi6QJSb/fpsa3kfSOpLHJz4FJe/ek/UXg49LeiPQ1F1Ff0suSpki6V1KVwvpTY0+TNCDZHpD0GwXcnNyn1yVNkvSApBklnMc2gZ22bwrAnm1aMuLOa3jnzmu45JQjkcS1557EoGGjmTxjdparNDMzs02hvALy7sDdEdEe+Bb4vzKM/TfQLyK6AqcCD6T2tQOOBvYFrpNUvZjxdYBREdExIkYAd0ZE14joANQCTkj6PQRcEhEdi4z/GjgyIjoDPYDbU/s6A5dFRNsyXE9J9gUuAfYAdgFOKcWYVsCBEfF74DrgrYjYE3ga2LG4AZJ6ScqVlDt/8thNUHbltE31zB9bataozp/6D2TCZzM575iD+dnBXdi+cUNeHjmepg0zSyzq1qpBw7q1s1mumZmZbYTyWmIxMyLeTbb/C1wK3FLKsUcAeyQTvZCZaa2bbL8cESuBlZK+BpoDs4qMzweeST3+iaQ/ALWBbYFJkt4BGkbE20mfR4Fjk+3qwJ2SOiXHSofh0RHxRSmvY31GR8Q0AElPAN3IBN11GZRaMtIN+BlARAyWtKi4ARHRH+gPkNOrd2yKwiuj2Qsyt3f81BkMHTeZRvXqsG/7nen105+wbf26PHndmj9CcNz+nVi1Op8bH30hW+WamZnZRiivgFw0iBU+zuOHWeuaJYytAuwfEd+nG5PAvDLVlE/x9X9fGCIl1QTuJrMueKakPus4b6HLgXlAx6SWdB3L1zO2LEq6R+n2orVuyvNbGUz5ci5TZ31F13Y7c3K3Lvz0wH3Iy8/n4n89QuvmjQHYuUUzfn3iYbw7cSpPDx8NwD67tWbHZH+92rU4qVtnPvlyLlO+nJu1azEzM7N1K68lFjtKOiDZPgsYkWxPB7ok26eWMHYImaUHACQzuRuqMGAuSGahTwOIiMXAYkndkv1np8Y0AOZGRAFwDlB1I86/LvtK2ilZe9yDH+7RPEntk/afrWP8u8DpAJKOAhqVU52W+Mv9g5g1fxFXnXkc9evU4rqHnuWz2fN4c+zHvDn2Y8Z+Oh2A2fO/4ZMkAJ94UGeuPfdkAJo1qs+1557MoR3bZesSzMzMrBTKawZ5CvBbSQ+SeUPbPUn79cB/JN0ADCth7KXAXZI+TOp7G7hoQ4qIiMWS7gcmAl8BY1K7zwcelBRkQnmhu4FnJJ0LDKb8Zm3HAHcCuwJDgeeS9quBl4D5QC5Qt9jRmXv5hKRzgJFkrm9pOdVqwLS587ngpvtL3P/Bp9PJ6dV7rbbrBzzH9QOeK2GEmZmZVUSK8LLULZGkGkB+ROQls/X3RMQ6Z9u9BnnLl9u/b7ZLMDMz25Jp/V0qyOcg2wbZERiYLMVYBVyY5XrMzMzMtgoOyFuoiJgK7JPtOszMzMy2NuX1Jj0zMzMzsy2SA7KZmZmZWYoDspmZmZlZigOymZmZmVmKA7KZmZmZWYoDspmZmZlZigOymZmZmVmKv0mvcvGTbWZmZpVZqb5JzzPIZmZmZmYpDshmZmZmZin+qulKJKdX72yXYJtIbv++2S7BzMxsq+UZZDMzMzOzFAdkMzMzM7MUB2QzMzMzsxQHZDMzMzOzFAdkMzMzM7MUB2QzMzMzsxQHZDMzMzOzFAdkMzMzM7MUB2QzMzMzsxQHZDMzMzOzFH/VtFkZ1K1Vk6vOOI5DOu5O1SpV+OTLufS65UFe/NvltGjSaE2/KTPncvYN9wDQcZcdufrsE2jdvAnT5n7NDY+8wJQv52brEszMzGw9HJA3A0nNgX7A/sAiYBVwc0Q8t5HHvQj4LiIekTQAeCkint7Yeq1kvc87mUM7teOJN0byxVfz6bjLjmv2ffDpdJ4ZPhqAb5d/D8A21apx00U9WLk6j9sGvsoFxx3KTb/uwSnX/JuCiKxcg5mZma2bA3I5kyTgeeDhiDgraWsNnLixx46Iezf2GFZ6LZs04rDOe/DK+xO487k3KCgo4IURY9fsn7NgESM+/JTvVq5a03Zgh91o0qAe/376NZ4ePobGDepx4Qnd6bL7Toz5ZFo2LsPMzMzWwwG5/B0GrEqH2YiYAdwhqSdwMlAH2A24BdgGOAdYCRwXEd9IuhDolez7DDgnIr6T1AdYFhG3bMbrqbR22r4pAHu2acmIO68hv6CAJ998nzuefR2A4/fvyE8P3Idvvl3GXc+9wQvvjqVlsuzi68XfZn4vWgJkwvaYLFyDmZmZrZ/fpFf+9gTGrmN/B+AUoCvwVzJLJvYBRgLnJn2ejYiuEdERmAz8srQnl9RLUq6k3PmT11WGrc821TOvJ2vWqM6f+g9kwmczOe+Yg9m3/c48P+ID/tR/INf+52lW5+fzp1/8lBaNG/7oGJk/KJiZmVlF5oC8mUm6S9IESYUTiEMjYmlEzAeWAP9L2j8C2iTbHSS9I+kj4GwyobtUIqJ/RORERE7T9p030VVUTrMXLAJg/NQZDB03mTc+mAhAq6bb8uArb/Pm2I95ddSHvD5mItWqVmXH5k3WjGneqAEATRvWX+tYZmZmVvF4iUX5mwScWvggIn4rqQmQmzStTPUtSD0u4IfnZwBwckRMSJZldC/Heq0EU76cy9RZX9G13c6c3K0LPz1wH/Ly8/nw85nc9tuzGTlpKlWqiOMP6MT3q1bx2ex5fLt8BQu/Xcaph3Zl+fcrOemgzsxesIgPpnyR7csxMzOzEngGufy9BdSU9JtUW+0yHqMeMFdSdTIzyJYlf7l/ELPmL+KqM4+jfp1aXPfQsyxatpyqVcSvT/wJl5xyJHMXLubKu59kwZKlrMrL4+r7nmLFylVc2eNYFi1dztX3PeVPsDAzM6vAPINcziIiJJ0M9JP0B2A+sBz4I1CrlIe5FhiVjB1FJjBbFkybO58Lbrr/R+2X3fHfEseMmzqDM66/qzzLMjMzs01I4ZmsSiOnV28/2VuJ3P59s12CmZnZlqhU75b3EgszMzMzsxQHZDMzMzOzFAdkMzMzM7MUB2QzMzMzsxQHZDMzMzOzFAdkMzMzM7MUB2QzMzMzsxQHZDMzMzOzFH9RSOXiJ9vMzMwqM39RiJmZmZlZWTkgm5mZmZmlOCCbmZmZmaVUy3YBtvnk9Oqd7RJsM8vt3zfbJZiZmW1xPINsZmZmZpbigGxmZmZmluKAbGZmZmaW4oBsZmZmZpbigGxmZmZmluKAbGZmZmaW4oBsZmZmZpbigGxmZmZmluKAbGZmZmaW4m/SMysHJxzQiT7nn/Kj9p/+6Tba7rAdvzvtaJo1qs/EabO4fsBzzFm4mOrVqvLHM0/g0E7tqFVjG2Z8tYB+gwaTO+WLLFyBmZlZ5bXeGWRJ+ZLGS5ogaaykA8t6Ekl9JR2RbA+TlLOe/j+XNFnSUEmdJB1X1nMmx/mFpA8lTUrqf0BSww051jrO0VPSnWXo313SEknjJE2R9LakEzZlTZZ9Yz+dzp/vH8if7x/Itf95mlWr81iwZCkFBQX87cKfs/z7ldz+9BDatW6xJkgfv38nTj64C5/O/Ip7X3iL3Vo155pzT8rylZiZmVU+pZlBXhERnQAkHQ38HTg03UFStYjIK+kAEdG7jHX9ErgwIkZI6gnkAK+U5QCSjgEuB46NiNmSqgLnAc2BxWWsZ1N7JyJOAJDUCXhe0oqIeDPLddkmMmfhYuYszPwzO7zzHmxTvRovvjuOw7vsSY3q1Xno1Xd484NJ7NGmJccf0ImWTRtRpYoA+HzOPEZP/pxVeYex9Lvvs3kZZmZmlVJZ1yDXBxbBmpnQdyS9CHwsqY2kiYUdJV0pqU+yPUDSaUUPJulMSR9JmijppqStN9AN+I+kfkBfoEcyi92jDLX+BbgyImYDRER+RDwYEVOS8xyezOJ+JOlBSTXW036cpE8kfSDpdkkvFXM9TSU9I2lM8nPQ+oqMiPHJNV6cHKONpLeSme83Je2YtDeX9FwyEz5B0oGS6kh6OXk8sYz3xzaTUw7pSn5BAc+9k0uLxo0AmL/oWwDmJb9bNdmWl94bz1tjP+asIw7k8d7/x/erVtNnwLNZq9vMzKyyKk1ArpWE00+AB4AbUvs6A5dFRNuynlhSC+Am4DCgE9BV0skR0RfIBc6OiMuB3sBTEdEpIp4qwyn2BMaWcO6awACgR0TsRWYm/Tfrab+PzGx0F6BpCef8N9AvIroCp5K5X6UxFmiXbN8BPBwRewOPAbcn7bcDwyOiI5n7Pgk4BpgTER0jogMwuJhr7SUpV1Lu/MnF3g4rRy2bNqJru50YOekz5i788R8upB+299q5Fd32assr70/gT/0HUrWK6NPzx+uYzczMrHyVJiCvSMJpOzKB7BFpzX/royNiQ99B1BUYFhHzk+UZjwGHbOCx1knSXknI/zyZZd0d+CIiPk26PJycu6T2dsC01LU+UcKpjgDulDQeeBGoL6luaUpMbR8APJ5sP0pmNh0yLyTugTWz4UuAj4AjJd0k6eCkbS0R0T8iciIip2n7zqUoxTalUw/pSpUqVXh62GgA5ixcBECzRvUzvxtmfs9a8A2Hd9mTbapX45m3x/B67kQ+njGH9q1b0LBu7ewUb2ZmVkmVaYlFRIwEmvDDDOry1O68IseruXGlrZ+kh5LgW9z65ElkZlqJiI+SddSvArXKsaQqwP7JC4pOEdEyIpaVYtw+wOSyniwJ8p3JBOUbk+UpVkFUq1qVEw7oxNyFi3l34lQAXhvzEatW53HeMQfT4yf70X2f9oybOoPZ8xcxe0EmPJ93dDd+3n1f9t55BxYvW87iZd9l8zLMzMwqnTIFZEntgKrAwmJ2zwOaSWqcrNtd3yczjAYOldQkeQPdmcDwYvotBeoVd4CIOD8JosV9ysXfgVsktUq1FYbjKUAbSbsmj89Jzr2u9p0ltUnaS1rrOwS4pPBB8ga8dZK0N3AtcFfS9B5wRrJ9NvBOsv0m8JtkTFVJDZJlKt9FxH+Bf5K8ILCK4bDO7dm2fl2ef+cDIgKAhUuW8ZcHBlGvdk0uO+1opnw5d80640FDR/P8Ox+w506tuOy0o5j+1QL+eN/AbF6CmZlZpVSaT7GolSwZgMxSgPMiIl/pxZNARKyW1JdM8J0NfLKug0bEXElXA0OT474cES8U03UocHVSw99Luw45Il6R1BR4NQngi4GJwGsR8b2k84FBkqoBY4B7I2LlOtr/DxgsaXnSXpxLgbskfUjm3r4NXFRMv4MljQNqA18Dl6Y+weIS4CFJVwHzgfOT9suA/pJ+CeSTCcv1gX9KKgBWJ21WQQwZM5EhYyb+qH3ouMkMHffjPxisysvjxkdfyCysMTMzs6xR4cyWrZukuhGxLFl/fRcwNSL6Zbuussjp1dtPdiWT279vtkswMzOrSLT+Lv6q6bK4MJnFngQ0IPOpFmZmZma2lfFXTZdSMlu8Rc0Ym5mZmVnZeQbZzMzMzCzFAdnMzMzMLMUB2czMzMwsxQHZzMzMzCzFAdnMzMzMLMUB2czMzMwsxQHZzMzMzCzF36RXufjJNjMzs8rM36RnZmZmZlZWDshmZmZmZin+qulKJKdX72yXYFuh3P59s12CmZnZJuUZZDMzMzOzFAdkMzMzM7MUB2QzMzMzsxQHZDMzMzOzFAdkMzMzM7MUB2QzMzMzsxQHZDMzMzOzFAdkMzMzM7MUB2QzMzMzsxQHZDMzMzOzFH/VtNkW6szDD+DMw/enSYN6zF+ylMdff4+nho4CYJtq1Xii9//RersmDBw6ipufeJkubdtw35UX/Og4v77lQT74dPpmrt7MzKzi8gxyOZGUL2l86ufqcjjHiYXHldRH0pWb+hxWMe3QbFuu6HEsBRH0GzSYalWrcNWZx9O8UX0AfnVCd5ol24WmzZ3Pn+8fuOZn4bfLWLU6j8/nfJ2NSzAzM6uwHJDLz4qI6JT6+cemPkFEvFgex7WKr4oEwPzFSxk9+XMWLlnGytWrWbk6j11bNuesIw7gvheHrjVm0dLlDBkzkSFjJjLz629oXL8ub439mMXLvsvGJZiZmVVYDshZJKm7pOGSXpA0TdI/JJ0tabSkjyTtkvT7qaRRksZJekNS86S9p6Q7s3sVlg0z5i3kjmeG0HGXHXjmhsvYfcft+dujL7Jk+QquPfckBg0bzeQZs0scf8ohOQA8PXzM5irZzMxsi+GAXH5qFVli0aOEfh2Bi4D2wDlA24jYF3gAuCTpMwLYPyL2AZ4E/lDaIiT1kpQrKXf+5LEbfDFWsTSsW5vTD9uPT2d9xRV3Pc7UWV9x1ZnH86vjD2X7xg15eeR4mjbMLLGoW6sGDevWXjO2Ts0aHN11Lz6fPY/xn83I1iWYmZlVWH6TXvlZERGdStFvTETMBZD0OTAkaf8I+Emy3Qp4StL2wDbAF6UtIiL6A/0Bcnr1jtKOs4qty+470bxRA54dnsvwCZ+wa8vm/ObkwzkipwPb1q/Lk9f9dk3f4/bvxKrV+dz46AsAHLvf3tSuWYNn3vbssZmZWXEckDcjSfsB9yUPewPfAitTXQpSjwv44fm5A7gtIl6U1B3oU+7FWoU2Z8EiAI7df28WLFnKMfvtDcA1Dwxix2aNAdi5RTN+feJhvDtxKk8PH71m7CmHdOW771fy8vsTNn/hZmZmWwAH5M0oIkYBa2aVk7BbGg2AwgWl523ismwLNHnGHPoNHMzph+3HH846nvmLl3LT4y8xddY8ps6aB7DmzXez53/DJ1/OBaDDTq1ou8N2PP/OByxfsbLE45uZmVVmDsjlp5ak8anHgyNiQz/qrQ8wSNIi4C1gp40tzrZ8j73xHo+98V6J+z/4dDo5vXqv1Tbxi1k/ajMzM7O1KcLLUisLr0G28pDbv2+2SzAzMystlaaTP8XCzMzMzCzFAdnMzMzMLMUB2czMzMwsxQHZzMzMzCzFAdnMzMzMLMUB2czMzMwsxQHZzMzMzCzFAdnMzMzMLMVfFFK5+Mk2MzOzysxfFGJmZmZmVlYOyGZmZmZmKQ7IZmZmZmYp1bJdgG0+Ob16Z7sEs7Xk9u+b7RLMzMx+xDPIZmZmZmYpDshmZmZmZikOyGZmZmZmKQ7IZmZmZmYpDshmZmZmZikOyGZmZmZmKQ7IZmZmZmYpDshmZmZmZikOyGZmZmZmKf4mPbNK6MSD9uGC4w6lSYN6jJs6g74PP8fqvHzuuvw8dmzWmIIIPvlyLjc//hKfz/ma7Rs35H9///1ax3j8jZHcNvDVLF2BmZlZ+fEMMiBp2SY+Xk9JLTZgXB9JV5ah/yat2yqH9q1bcM05J/H1om+549khdGnbhj+dfSIA702cyj8ef4lnho+hS9s2XH76MWuNfXrYaP58/0D+fP9AXh45Lhvlm5mZlTvPIJePnsBEYE5pB0jyc2GbRefd2lClShWefTuXwaM/5Oiue9Ntr92ICO55/k3q16nFN98u49yju1FQEGuNnTxjDsMnTGHlqtVZqt7MzKz8eQY5Iam7pJdSj++U1DPZni7pZkkfSRotaVdJ9SR9Ial60qd+8vjnQA7/7qa7AAASbklEQVTwmKTxkmpJ6iJpuKQPJL0maftkzDBJ/5KUC1y2jtqeT8ZOktSryL5+Sfubkppu+jtjW5tFy5YD0GnXHWm9XRN2bL4tVapUYfvGDdm1ZXPeuO1q7rjsXOYtWsKtRZZQ/OWcE3n3zmt5qs/FdNipVTbKNzMzK3cOyKW3JCL2Au4E/hURS4FhwPHJ/jOAZyNiEJALnB0RnYA84A7gtIjoAjwI/DV13G0iIicibl3HuS9IxuYAl0pqnLTXAXIjYk9gOHBd0YGSeknKlZQ7f/LYDbty26q8njuR8Z/N4LTu+/JM30upVrUqAKtW5zFz/jf89l8Pc8/zb9K0QT3OO7obACtWruLeF97iynueoN+gwbRu3pgbf3VaNi/DzMys3PjP+qX3ROp3v2T7AeAPwPPA+cCFxYzbHegAvC4JoCowN7X/qVKc+1JJP0u2dwB2AxYCBanx/wWeLTowIvoD/QFyevWOovut8lmdl8+F/3yQXVs2Iz+/gCt6HEfHXXdk9oJFrFydx6iPP2fUx59z8sFdOKLLnvR9+HkWL/uOB14etuYYx+y7N+1bt2CbatVYlZeXvYsxMzMrBw7IP8hj7Rn1mkX2R9HtiHhXUhtJ3YGqETGxmOMKmBQRB5Rw3uXrKio59hHAARHxnaRhxdRWXI1mxaoicfnpxzDly7ns0aYl++2xC/8d8i5Hdd2Ltjtsx6czv2K3Vs3ZvnFDJn0xC4CTu3VhjzYtmfTFLFo2bUTbHbZjysy5DsdmZrZVckD+wQxgD0k1gFrA4cCI1P4ewD+S3yNT7Y8AjwM3pNqWAvWS7SlAU0kHRMTIZM1y24iYVMq6GgCLknDcDtg/ta8KcBrwJHBWkXrNihVA57ZtOOWQHFasXM1Tb73PXc+/wX7td+GgDm059ZCufLdyFW9PmEK/QZk1yF9+vZCTunXm6H33Ij+/gJGTPuPWp17J7oWYmZmVk0ofkJNPj1gZETMlDSTz6RNfAEU/w6qRpA+BlcCZqfbHgBv5YQkGwADgXkkrgAPIhNjbJTUgc8//BZQUkK+R9LvU412AiyRNJhO230/tWw7sK+ka4Gsy4d1snSKCs2+450ftIz76lBEffVrsmLGfTuf8f9xf3qWZmZlVCIqo3H+Vl9QRuD8i9l1Hn+lATkQsKGbfacBJEXFO+VW5aXgNslU0uf37ZrsEMzOrXFSaTpV6BlnSRcClwO/W17eE8XcAxwLHbcq6zMzMzCx7KnVAjoh7gXtL0a9NCe2XbOqazMzMzCy7/DnIZmZmZmYpDshmZmZmZikOyGZmZmZmKQ7IZmZmZmYpDshmZmZmZikOyGZmZmZmKQ7IZmZmZmYplf6b9CoZP9lmZmZWmZXqm/Q8g2xmZmZmluKAbGZmZmaWUqm/arqyyenVO9slmG01cvv3zXYJZmZWTjyDbGZmZmaW4oBsZmZmZpbigGxmZmZmluKAbGZmZmaW4oBsZmZmZpbigGxmZmZmluKAbGZmZmaW4oBsZmZmZpbigGxmZmZmluKAbGZmZmaW4q+aNrMK48oex3Fk1w40rl+Xdz6cwuV3Pkb92rW44Zen0q51C+rU3IZPZ87j5ide4pMv5wLQcZcdufrsE2jdvAnT5n7NDY+8wJRk36Gd2vG7046mWaP6TJw2i+sHPMechYuzeYlmZrYFqFAzyJLyJY2XNFHS/yQ1LMWY9zbwXAMknbYhYzc1Sd0lDShhX0i6NfX4Skl9ku3dJQ1L7tlkSf03T8Vm5WfImI/WelynVg2aNKzHw4Pf4eHBI+iwU0tuuugMALapVo2bLupB7Zo1uG3gq2xbry43/boHVSQa16/L3y78Ocu/X8ntTw+hXesW9Dn/lGxckpmZbWEq2gzyiojoBCDpYeC3wF/XNSAiDtwchW1KkqpGRH4pu68ETpH094hYUGTf7UC/iHghOe5em7JOs83tlqdeYfvGDTnz8APWtH296Ft+ceO9RAQAh3RsR/vWLaixTXUO2GNXmjSox7+ffo2nh4+hcYN6XHhCd7rsvhO7tWpOjerVeejVd3jzg0ns0aYlxx/QiZZNGzF7/qJsXaKZmW0BKtQMchEjgZaFDyRdJWmMpA8lXZ9qX5b83l7S26kZ6IML90vqJ2mSpDclNS16Ikm9k2NPlNRfkpL2YZJukjRa0qepY/aU9KykwZKmSro5dayjJI2UNFbSIEl1k/bpybHGAj8vw33IA/oDlxezb3tgVuGDiPiomD5mW7T8goI14Xi7bRvQZrsmfDx9NitXraZlk0YAfL3428zvRUsAaNmkES0aZ/bNX5TZNy/53arJtpu1fjMz2/JUyIAsqSpwOPBi8vgoYDdgX6AT0EXSIUWGnQW8lsxAdwTGJ+11gNyI2BMYDlxXzCnvjIiuEdEBqAWckNpXLSL2BX5XZGwnoAewF9BD0g6SmgDXAEdERGcgF/h9aszCiOgcEU+W4XYA3AWcLalBkfZ+wFuSXpV0eXFLUiT1kpQrKXf+5LFlPK1ZxdG4fl3+fek5rMrLo89DzxbbJ3ltW8K+8qrMzMy2NhUtINeSNB74CmgOvJ60H5X8jAPGAu3IBOa0McD5yfrcvSJiadJeADyVbP8X6FbMeX8iaZSkj4DDgD1T+wr/J/4AaJNqfzMilkTE98DHQGtgf2AP4N3kOs5L2gs9xQaIiG+BR4BLi7Q/BLQHBgHdgfcl1SjSp39E5ERETtP2nTfk9GZZ16RBPe678nyaNKjLxf96hGlz5wMwe0FmqUTzRpnXjk0b1l/TPmdhZl+zRpm2Zsm+WQu+2ay1m5nZlqdCrkGWVBt4jcwa5NsBAX+PiPtKGhgRbyezyscDAyTdFhGPFNc1/UBSTeBuICciZiYBu2aqy8rkdz5r36+Vqe3CfQJej4gzSyhzeUn1l8K/yLw4eCjdGBFzgAeBByVNBDqQCfNmW5yD9mrLri2aAZnQe1K3zkz8YhY3X3QGrZs34ZHXRrBDs23Zodm2vD1hCu9NnMrCb5dx6qFdWf79Sk46qDOzFyzigylfMG3u11z8syM575iDaVy/Lt33ac+4qTO8/tjMzNaros0gAxAR35GZLb1CUjUyYfmC1HrelpKapcdIag3Mi4j7gQeAwunSKkDhp1WcBYwocrrCMLwgOf7GfLLF+8BBknZNaqojqe1GHG+NiPgGGAj8srBN0jGSqifb2wGNgdmb4nxm2XDuUQdxyalHAdB2h+249tyTab9jC1o3b5LZf3Q3/nbh6fztwtNpVK8Oq/LyuPq+p1ixchVX9jiWRUuXc/V9T1EQwcIly/jLA4OoV7sml512NFO+nEufAcUvzTAzM0uraDPIa0TEOEkfAmdGxKOS2gMjkzWGy4BfAF+nhnQHrpK0Otl/btK+HNhX0jVJ/x5FzrNY0v3ARDJLO8ZsRM3zJfUEnkgtdbgG+HRDj1nErcDFqcdHAf+W9H3y+KqI+GoTnctss/v1rQ8V2/7SyPHFtgOMmzqDM66/q9h9Q8dNZui4yZukNjMzqzxU+O7wrZWkZRFRN9t1rIuk7kDPiOhZnufJ6dV7636yzTaj3P59s12CmZmVXanesl0hl1iYmZmZmWXLVh+QK/rscWI68Hy2izAzMzOzCrwGuTKJiOlkQrKZmZmZZdlWP4NsZmZmZlYWDshmZmZmZikOyGZmZmZmKQ7IZmZmZmYpDshmZmZmZikOyGZmZmZmKVv9N+nZWvxkm5mZWWXmb9IzMzMzMysrB2QzMzMzsxR/k14lktOrd7ZLMDMzM1tLbv++2S7hRzyDbGZmZmaW4oBsZmZmZpbigGxmZmZmluKAbGZmZmaW4oBsZmZmZpbigGxmZmZmluKAbGZmZmaW4oBsZmZmZpbigGxmZmZmluJv0jMzMzPbygz4Uy922r4pVauIaXPm02/QYMZNncFNv+5B13Y7U79OLQYOHcXNT7wMwA7NtuUv55zEri2bU71aVSZOm8XfHnuR2fMXAfDbnx3BCQd0on6dWsxduJj7XhzK67kTs3mJ5SprM8iS8iWNlzRB0lhJBybtbSRt0B2XNExSTjHtyza23lKef7qkJqVtNzMzMysPH37+Jbc8+QoPvDSctjtsxzXnngTAqrw8ho2f/KP+zRrWRxL9//cW/3t3HPvtsQvXnnsyAPu134Xzjz2EBUuWcfvTQ2jasD7X9fwZVatuvQsRsjmDvCIiOgFIOhr4O3BoFuspE0nVIiKvsp3bzMzMKr7bBg6mQd3atGrSiF8efygRAcC1/3mGLm3bcOJBndfqP+Hzmfz6lgfXPD5mv73ZefumAEgCYNb8b3h/8uece0w3qletShTEZrqaza+iLLGoDywq2iipDfAoUCdpujgi3kv2/RH4BVAAvBoRV6fGVQEeBGZFxDVJWz/gKOAr4IyImC+pE3AvUBv4HLggIhZJuhDoBWwDfAacExHfSRoAfA/sA7wr6a/AE0BLYCSg0l6wpDrAHUAHoDrQJyJeKOmaJXUHbkjuUztJRwGvAiOAA4HZwEkRsaK0NZiZmdnWqW6tmrx5WyYafbt8BTc88sI6++fl56/Zbt+6BQ3r1ubNDyYB8P7HnzFw6ChO/8l+HJnTge9Xreb3dz1GQWy9ATmbc+O1kiUWnwAPkAl/RX0NHBkRnYEewO0Ako4FTgL2i4iOwM2pMdWAx4CpheGYTNjMjYg9geHAdUn7I8AfI2Jv4KNU+7MR0TU59mTgl6njtwIOjIjfJ/1HJMd9DtixDNf/F+CtiNgX+AnwzyQ0F3vNic7AZRHRNnm8G3BXcv7FwKlFTyKpl6RcSbnzJ48tQ3lmZma2pVqxchW/7fcw/3ziZbapXo2LTjysVONab9eE2357FrMXLOLmJ19e03bsfnszctJnXHn3E3zz7TKu6/kzam5TvTwvIauyGZBXRESniGgHHAM8osI5/B9UB+6X9BEwCNgjaT8CeCgivgOIiG9SY+4DJkbEX1NtBcBTyfZ/gW6SGgANI2J40v4wcEiy3UHSO8l5zwb2TB1rUEQUvsw6JDkeEfEyxcyCr8NRwNWSxgPDgJpkAnZJ1wwwOiK+SD3+IiLGJ9sfAG2KniQi+kdETkTkNG3fuehuMzMz2wrlFxQwavLnPDV0FJOmz6Zru51pULf2OsfstH1T7rvifFbn5fObWx9i4ZLMW7gO2Xt36tWuxSvvj2fY+MmMnjyN5o0arFmCsTWqEEssImJk8ia2onf6cmAe0JFMmP++FId7D/iJpFsjoqT+6/ubwADg5IiYIKkn0D21b3kpaigNAadGxJS1GqU+lHzNRc+9MrWdD9TaRLWZmZnZFmr/PXblyJw9+fDzmTTftgEdd9mBBUuWsmTZdxyZ04H2rVsAmUB8UrfOjPjoU6pVqcK9V5xPgzq1uOeFt+iwcys67NyKIWMmMntBZv7vtEP3pUb16nTbuy2rVucxe+HibF5muaoQAVlSO6AqsJDMeuBCDcisIy6QdF7SB+B1oLekx5K1wdumZpH/Q2Zmd6CkU5I3s1UBTgOeBM4isyxiiaRFkg6OiHeAc8gsvwCoB8yVVJ3MDPLsEkp/Oznejcmyj0ZluOzXgEskXRIRIWmfiBi3jms2MzMzW69vl39Hh51acfS+e7M6L4/xn33J7U+/BsAlpxxJiyaZuNK13c50bbfzmjfnNa5fd02fQkPGTOStsR/z8OB3OHa/jlx15nHMnr+Ifz75CkuWfbeZr2zzyWZArpUsL4DMbOp5EZFfZJXF3cAzks4FBpPMoEbE4OQNdrmSVgGvAH8uHBQRtyVLKB6VdHYybl9J15BZ49sj6XoecK+k2sA04Pyk/VpgFDA/+V2vhGu4HnhC0iQyM9dfruN6P5RUkGwPJLMG+V9JexXgC+CEkq7ZzMzMrDQ+njGHHtffVey+E//cr8RxOb16l7jvjmdf545nX9/o2rYUiq34HYi2tpxevf1km5mZWYWS27/v5jxdqT5xbOv9hGczMzMzsw3ggGxmZmZmluKAbGZmZmaW4oBsZmZmZpbigGxmZmZmluKAbGZmZmaW4oBsZmZmZpbigGxmZmZmluKAbGZmZmaW4m/Sq1z8ZJuZmVll5m/SMzMzMzMrKwdkMzMzM7MUB2QzMzMzsxQHZDMzMzOzFAdkMzMzM7MUB2QzMzMzsxQHZDMzMzOzFAdkMzMzM7MUB2QzMzMzsxQHZDMzMzOzlGrZLsA2q1J9vaKZmZlZZeYZZDMzMzOzFAdkMzMzM7MUB2QzMzMzsxQHZDMzMzOzFAdkMzMzM7MUB2QzMzMzsxQHZDMzMzOzFAdkMzMzM7MUB2QzMzMzsxQHZDMzMzOzlP8HHEis8SRdbioAAAAASUVORK5CYII=\n", 150 | "text/plain": [ 151 | "" 152 | ] 153 | }, 154 | "metadata": {}, 155 | "output_type": "display_data" 156 | } 157 | ], 158 | "source": [ 159 | "# prepare data\n", 160 | "to_include = ['My Study – Blackboard Learn', 'Reisplanner | Reisinformatie | NS', \n", 161 | " 'JupyterLab', 'E-mail - Outlook', 'Bruiloft - Google Documenten', 'Gmail',\n", 162 | " 'Weer, buien radar Tilburg 14 daagse weersverwachting Tilburg']\n", 163 | "titles = ['Blackboard Learn', 'Reisplanner | NS', \n", 164 | " 'JupyterLab', 'E-mail', 'Bruiloft - Google Docs', 'Gmail',\n", 165 | " 'buien radar Tilburg']\n", 166 | "values = df.loc[df.title.isin(to_include), 'title'].value_counts().values[:len(to_include)]\n", 167 | "n_groups = len(titles)\n", 168 | "\n", 169 | "# prepare figure variables\n", 170 | "index = np.arange(n_groups)\n", 171 | "bar_width = 0.9\n", 172 | "opacity = .8\n", 173 | "\n", 174 | "# create figure\n", 175 | "fig, ax = plt.subplots(figsize=(10, 4))\n", 176 | "rects = ax.barh(index, values, bar_width,\n", 177 | " alpha=opacity, color='#003f5c',\n", 178 | " label='My Grade')\n", 179 | "\n", 180 | "# create labels and ticks\n", 181 | "ax.set_title('Most Frequently Visited Sites')\n", 182 | "ax.set_yticks(index)\n", 183 | "ax.set_yticklabels(titles)\n", 184 | "\n", 185 | "# create values in bars\n", 186 | "for i, v in enumerate(values):\n", 187 | " if v < 1000:\n", 188 | " ax.text(v-200, i, str(v), color='white', va='center', fontweight='bold')\n", 189 | " elif v <10000:\n", 190 | " ax.text(v-250, i, str(v), color='white', va='center',fontweight='bold')\n", 191 | "\n", 192 | "# remove spines\n", 193 | "ax.spines['top'].set_visible(False)\n", 194 | "ax.spines['right'].set_visible(False)\n", 195 | "ax.spines['left'].set_visible(False)\n", 196 | "ax.spines['bottom'].set_visible(False)\n", 197 | "ax.get_xaxis().set_ticks([])\n", 198 | "\n", 199 | "# plot and save fig\n", 200 | "fig.tight_layout()\n", 201 | "plt.show()\n", 202 | "# plt.savefig('scores.png', dpi=300)" 203 | ] 204 | } 205 | ], 206 | "metadata": { 207 | "kernelspec": { 208 | "display_name": "Python 3", 209 | "language": "python", 210 | "name": "python3" 211 | }, 212 | "language_info": { 213 | "codemirror_mode": { 214 | "name": "ipython", 215 | "version": 3 216 | }, 217 | "file_extension": ".py", 218 | "mimetype": "text/x-python", 219 | "name": "python", 220 | "nbconvert_exporter": "python", 221 | "pygments_lexer": "ipython3", 222 | "version": "3.4.6" 223 | } 224 | }, 225 | "nbformat": 4, 226 | "nbformat_minor": 2 227 | } 228 | -------------------------------------------------------------------------------- /Notebooks/Scorecard.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "### Scorecard" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 1, 13 | "metadata": {}, 14 | "outputs": [], 15 | "source": [ 16 | "import math\n", 17 | "import pandas as pd\n", 18 | "import numpy as np\n", 19 | "from PIL import Image\n", 20 | "\n", 21 | "import matplotlib\n", 22 | "import matplotlib.pyplot as plt\n", 23 | "import matplotlib.patches as patches\n", 24 | "from matplotlib.patches import FancyBboxPatch\n", 25 | "from matplotlib.offsetbox import OffsetImage, AnnotationBbox\n", 26 | "\n", 27 | "def get_colors_from_map(palette='Blues', value=1):\n", 28 | " \"\"\" Create colors from a heatmap\n", 29 | " \n", 30 | " Here, we would like to have 7 colors at most\n", 31 | " for easier visualization.\n", 32 | " \n", 33 | " However, the maximum number of crosses is 14. Therefore,\n", 34 | " I divide by 2 to get at most 7 colors.\n", 35 | " \n", 36 | " It should be based on the actual maximum value instead\n", 37 | " of manually setting the number of colors. However, these \n", 38 | " are the settings I want for my personal visualization. \n", 39 | " \n", 40 | " \"\"\"\n", 41 | " value = round(value/2)\n", 42 | " cmap = plt.cm.get_cmap(palette, 7)\n", 43 | " rgb = cmap(value)\n", 44 | " return matplotlib.colors.rgb2hex(rgb)\n", 45 | "\n", 46 | "def count_total_color(row, value):\n", 47 | " \"\"\"\n", 48 | " # Add number of times a person got a score in a row\n", 49 | " # Thus number of multipliers per game \n", 50 | " \"\"\"\n", 51 | " count = 0\n", 52 | " if sum([row.r_2, row.r_3,row.r_4,row.r_5,row.r_6,row.r_7,row.r_8,\n", 53 | " row.r_9,row.r_10,row.r_11,row.r_12,row.r_13]) == value:\n", 54 | " count += 1\n", 55 | " if sum([row.ge_2, row.ge_3,row.ge_4,row.ge_5,row.ge_6,row.ge_7,row.ge_8,\n", 56 | " row.ge_9,row.ge_10,row.ge_11,row.ge_12,row.ge_13]) == value:\n", 57 | " count += 1\n", 58 | " if sum([row.g_2, row.g_3,row.g_4,row.g_5,row.g_6,row.g_7,row.g_8,\n", 59 | " row.g_9,row.g_10,row.g_11,row.g_12,row.g_13]) == value:\n", 60 | " count += 1\n", 61 | " if sum([row.b_2, row.b_3,row.b_4,row.b_5,row.b_6,row.b_7,row.b_8,\n", 62 | " row.b_9,row.b_10,row.b_11,row.b_12,row.b_13]) == value:\n", 63 | " count += 1\n", 64 | " return count\n", 65 | "\n", 66 | "def get_crosses_color(row, color):\n", 67 | " \"\"\" Return number of crosses per color\n", 68 | " \"\"\"\n", 69 | " points = row[[color+'_{}'.format(i) for i in np.arange(2, 14, 1)]].sum()\n", 70 | " return int(points)\n", 71 | "\n", 72 | "def get_points_color(row, color):\n", 73 | " \"\"\" Get total points per color depending on the multiplier\n", 74 | " \"\"\"\n", 75 | " point_multiplier = {i:val for i,val in zip(np.arange(0, 13, 1), \n", 76 | " [0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78])}\n", 77 | " points = point_multiplier[row[color+'_cross']]\n", 78 | " return points\n", 79 | "\n", 80 | "def total_points(row):\n", 81 | " \"\"\" Return total number of points\n", 82 | " \"\"\"\n", 83 | " points = row['r_points']+row['ge_points']+row['g_points']+row['b_points']-row['mislukt']\n", 84 | " return points\n", 85 | "\n", 86 | "def get_win_lose(row, df):\n", 87 | " \"\"\" If you won or lost a match\n", 88 | " \"\"\"\n", 89 | " other = df.loc[df.ID == row.ID, :]\n", 90 | " other = other.loc[other.Person != row.Person, 'total_points'].values[0]\n", 91 | " if row.total_points > other:\n", 92 | " return \"Win\"\n", 93 | " else:\n", 94 | " return \"Lose\"\n", 95 | " \n", 96 | "df = pd.read_excel('Qwixx.xlsx').fillna(0)\n", 97 | "\n", 98 | "max_val = df.groupby('Person').sum().drop(['mislukt', 'ID'], 1).values.max()\n", 99 | "# min_val = df.groupby('Person').sum().drop(['mislukt', 'ID'], 1).values.min()\n", 100 | "\n", 101 | "# vals is a dict that is used to make lookups easier in the visualization generation\n", 102 | "cols = ['r', 'ge', 'g', 'b']\n", 103 | "cols_dict = {col: [col+'_'+str(i) for i in np.arange(2, 14, 1)] for col in cols}\n", 104 | "vals = {person:{col: list(pd.DataFrame(df.loc[df.Person==person, :].sum()).T[cols_dict[col]].values[0])\n", 105 | " for col in cols} \n", 106 | " for person in ['Ilse', 'Maarten']}\n", 107 | "\n", 108 | "# Add number of times a person got a score in a row\\\n", 109 | "# Thus number of multipliers per game\n", 110 | "for i in np.arange(1, 13, 1):\n", 111 | " df['mult_{}'.format(i)] = df.apply(lambda row: count_total_color(row, i), 1)\n", 112 | "\n", 113 | "# number of crosses and points per color per game\n", 114 | "for i in ['r', 'ge', 'g', 'b']: \n", 115 | " df['{}_cross'.format(i)] = df.apply(lambda row: get_crosses_color(row, i), 1)\n", 116 | "for i in ['r', 'ge', 'g', 'b']: \n", 117 | " df['{}_points'.format(i)] = df.apply(lambda row: get_points_color(row, i), 1)\n", 118 | " \n", 119 | "# Total points\n", 120 | "df['total_points'] = df.apply(lambda row: total_points(row), 1)\n", 121 | "\n", 122 | "# Won or lost match\n", 123 | "df['win_lose'] = df.apply(lambda row: get_win_lose(row, df), 1)" 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": 95, 129 | "metadata": {}, 130 | "outputs": [], 131 | "source": [ 132 | "# Variables\n", 133 | "palette = 'Blues' #PuBuGn or #YlGnBu or Blues or #RdYlBu\n", 134 | "person = '...'\n", 135 | "im = np.array(Image.open('qwixx_new_v2.png'), dtype=np.uint8)\n", 136 | "\n", 137 | "# Create plot and show image\n", 138 | "fig,ax = plt.subplots(1)\n", 139 | "ax.imshow(im)\n", 140 | "\n", 141 | "# Heatmap\n", 142 | "for i in range(11):\n", 143 | " color = get_colors_from_map(palette=palette, value=int(vals[person]['r'][i]))\n", 144 | " p_fancy = FancyBboxPatch((90+(i*130.8),62), 128, 128, \n", 145 | " boxstyle=\"round,pad=0.1, rounding_size=20\", \n", 146 | " ec='white',fc=color)\n", 147 | " plt.text(180+(i*130), 90, str(i+2), fontsize=14, color='white') \n", 148 | " ax.add_patch(p_fancy)\n", 149 | "\n", 150 | " color = get_colors_from_map(palette=palette, value=int(vals[person]['ge'][i]))\n", 151 | " p_fancy = FancyBboxPatch((90+(i*130.8),235), 128, 128, \n", 152 | " boxstyle=\"round,pad=0.1, rounding_size=20\", \n", 153 | " ec='white',fc=color)\n", 154 | " plt.text(180+(i*130), 260, str(i+2), fontsize=14, color='white')\n", 155 | " ax.add_patch(p_fancy)\n", 156 | " \n", 157 | " color = get_colors_from_map(palette=palette, value=int(vals[person]['g'][i]))\n", 158 | " p_fancy = FancyBboxPatch((90+(i*130.8),408.5), 128, 128, \n", 159 | " boxstyle=\"round,pad=0.1, rounding_size=20\", \n", 160 | " ec='white',fc=color)\n", 161 | " plt.text(210+(i*130), 435, str(np.arange(12, 1, -1)[i]), fontsize=14, color='white',\n", 162 | " horizontalalignment='right')\n", 163 | " ax.add_patch(p_fancy)\n", 164 | " \n", 165 | " color = get_colors_from_map(palette=palette, value=int(vals[person]['b'][i]))\n", 166 | " p_fancy = FancyBboxPatch((90+(i*130.8),581.5), 128, 128, \n", 167 | " boxstyle=\"round,pad=0.1, rounding_size=20\", \n", 168 | " ec='white',fc=color)\n", 169 | " plt.text(210+(i*130), 610, str(np.arange(12, 1, -1)[i]), fontsize=14, color='white', \n", 170 | " horizontalalignment='right')\n", 171 | " ax.add_patch(p_fancy)\n", 172 | "\n", 173 | "# Plot Circle\n", 174 | "for i,val in enumerate(['r', 'ge', 'g', 'b']):\n", 175 | " color = get_colors_from_map(palette=palette, value=int(vals[person][val][-1]))\n", 176 | " circle = plt.Circle((1596,125+(i*173.7)), 47, color=color)\n", 177 | " ax.add_artist(circle)\n", 178 | " \n", 179 | "# Set total number of crosses\n", 180 | "for i in np.arange(1, 13, 1):\n", 181 | " value = df.loc[df.Person==person, 'mult_{}'.format(i)].sum()\n", 182 | " plt.text(232+((i-1)*100), 860, str(value), fontsize=22, color='black', fontweight='bold',\n", 183 | " horizontalalignment='center')\n", 184 | "\n", 185 | "# Set average points for colors\n", 186 | "for i, color in enumerate(['r', 'ge', 'g', 'b']):\n", 187 | " val = round(df.loc[df.Person==person, '{}_points'.format(color)].mean(), 1)\n", 188 | " plt.text(258+(i*200), 995, str(val), fontsize=24, color='black', fontweight='bold',\n", 189 | " horizontalalignment='center')\n", 190 | "\n", 191 | "# Set average points for failed\n", 192 | "val = round(df.loc[df.Person==person, 'mislukt'.format(color)].mean(), 1)\n", 193 | "plt.text(1107, 995, str(val), fontsize=26, color='black', fontweight='bold',\n", 194 | " horizontalalignment='center')\n", 195 | "\n", 196 | "# Set average points total\n", 197 | "val = round(df.loc[df.Person==person, 'total_points'.format(color)].mean(), 1)\n", 198 | "plt.text(1470, 1015, str(val), fontsize=50, color='black', fontweight='bold',\n", 199 | " horizontalalignment='center')\n", 200 | "\n", 201 | "# Add keys\n", 202 | "for i, color in enumerate(['red', 'yellow', 'green', 'blue']):\n", 203 | " im = OffsetImage(plt.imread('{}_key.png'.format(color)), zoom=0.35)\n", 204 | " ab = AnnotationBbox(im, (1594, 123+(i*174)), frameon=False)\n", 205 | " ax.add_artist(ab)\n", 206 | "\n", 207 | "# remove axes for image\n", 208 | "plt.axis('off')\n", 209 | "\n", 210 | "# Add Colorbar\n", 211 | "cmap = matplotlib.colors.ListedColormap([get_colors_from_map(palette=palette, \n", 212 | " value=i) \n", 213 | " for i in [0,2,4,6,8,10,12]])\n", 214 | "bounds = np.arange(1, 9, 1)\n", 215 | "norm = matplotlib.colors.BoundaryNorm(bounds, cmap.N)\n", 216 | "# ax2 = fig.add_axes([0.17, .88, .684, .05])\n", 217 | "ax2 = fig.add_axes([0.308, .88, .532, .05])\n", 218 | "cb = matplotlib.colorbar.ColorbarBase(ax2, cmap, norm=norm, spacing='proportional',\n", 219 | " boundaries=bounds, orientation='horizontal', drawedges=True)\n", 220 | "cb.dividers.set_color('black')\n", 221 | "cb.dividers.set_linewidth(2)\n", 222 | "\n", 223 | "cb_tick_locs = np.arange(0.5, 8, 1)\n", 224 | "cb.set_ticks(cb_tick_locs)\n", 225 | "cb.set_ticklabels([\"{} - {}\".format(i, i+1) for i in np.arange(0, 16, 2)])\n", 226 | "# cb.outline.set_visible(False)\n", 227 | "cb.ax.tick_params(labelsize=12)\n", 228 | "rect1 = patches.Rectangle((-.258,0),1.283,1.3,linewidth=0,facecolor='#E3E3E3',\n", 229 | " zorder=0,clip_on=False)\n", 230 | "ax2.add_patch(rect1)\n", 231 | "plt.text(-.14, -.25, 'Number of \\nCrosses', fontsize=24, color='black', fontweight='bold',\n", 232 | " horizontalalignment='center')\n", 233 | "\n", 234 | "# Minus points\n", 235 | "val = df.loc[df.Person==person, 'mislukt'].mean()\n", 236 | "for i in range(math.floor(val)):\n", 237 | " p_fancy = FancyBboxPatch((1394+(i*71),815), 52, 64, \n", 238 | " boxstyle=\"round,pad=0.1, rounding_size=15\", \n", 239 | " ec='none',fc='#343434')\n", 240 | " ax.add_patch(p_fancy)\n", 241 | "val = val - math.floor(val)\n", 242 | "\n", 243 | "p_fancy = FancyBboxPatch((1394+((i+1)*71),815), 52*(val), 64, \n", 244 | " boxstyle=\"round,pad=0.1, rounding_size=15\", \n", 245 | " ec='none',fc='#343434')\n", 246 | "ax.add_patch(p_fancy)\n", 247 | "\n", 248 | "fig.set_size_inches(18.5, 10.5)\n", 249 | "plt.show()\n", 250 | "# plt.savefig('testing_maarten.png', dpi=600)" 251 | ] 252 | }, 253 | { 254 | "cell_type": "code", 255 | "execution_count": 252, 256 | "metadata": {}, 257 | "outputs": [ 258 | { 259 | "data": { 260 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh4AAABRCAYAAACdUq/aAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAACb1JREFUeJzt3XmMJGUZx/HvT1ZERIOEoMiSrAcB\njMeKRMEziuKKBvyDiEYNHonReKDxwpCY6B+K0Xjf8ViMRFFEJV5AEI8oGFZAFgERT1ZRdjQqKAvi\nPP7RtTr2TE9X7y5VNbPfTzLprqr3fevpZ6qrn6nqqUpVIUmS1IW79B2AJEnafVh4SJKkzlh4SJKk\nzlh4SJKkzlh4SJKkzlh4SJKkzlh4SJKkzlh4SJKkzlh4SJKkzqyZpfGxT9tQc3NzO7SiWvSkRds2\njYFZL766qHnL/oubTehYMw07fdQZBuo/xmo17sTlE+OqZaaWGX/5l7/sSJNe46Qe09tPeQ07OP7E\n5dvnT3iDTG7fcv1jC6rF1jT72C23p7bj1ozb0ZQGNe2XNr6eKUmsxbN23ZjTcrST4yzq1XbHvGg7\nnm0jWdS+1WdM2x1gLfWwRLOWe6S2O/eJ4017rZOWTxlvlg+d8X39rVvPq6oNkzssNlPh8ee5OX54\nyaZmlUv/Quq/0+2WL5XfSW3Gc7ijy2s8cTv5GoayvMsY5sc+EMbbz0/8HUxZ3jzOT+g3efn2/s34\nY9NTly+Rw8WvcbzvWLux6fkpr2l+Yv+x9Y3PH8/htPWOjz/++tqud0ru5hcksWr5NotyOqH9xOUT\nXsPE9U0ab9H2t3w809Y3eXq2fjvSZ0fXPT+/c+MycX2ztdvV4+yKsaa1+19S5ltOt2034/T8nbSe\nFm22XfHh/ZmRp1okSVJnLDwkSVJnLDwkSVJnLDwkSVJnLDwkSVJnLDwkSVJnLDwkSVJnLDwkSVJn\nLDwkSVJnLDwkSVJnLDwkSVJnLDwkSVJnLDwkSVJnLDwkSVJnLDwkSVJnLDwkSVJnLDwkSVJnLDwk\nSVJnLDwkSVJnLDwkSVJnLDwkSVJnLDwkSVJnLDwkSVJnLDwkSVJnLDwkSVJnLDwkSVJnLDwkSVJn\nLDwkSVJnLDwkSVJnLDwkSVJnLDwkSVJnUlXtGydXAdvuvHBWjf2Bub6DWAHMUzvmqR3z1I55asc8\n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\n", 261 | "text/plain": [ 262 | "
" 263 | ] 264 | }, 265 | "metadata": {}, 266 | "output_type": "display_data" 267 | } 268 | ], 269 | "source": [ 270 | "import matplotlib.pyplot as plt\n", 271 | "import matplotlib as mpl\n", 272 | "\n", 273 | "# Make a figure and axes with dimensions as desired.\n", 274 | "fig = plt.figure(figsize=(8, 3))\n", 275 | "ax1 = fig.add_axes([0.05, 0.80, 0.9, 0.15])\n", 276 | "\n", 277 | "# Set the colormap and norm to correspond to the data for which\n", 278 | "# the colorbar will be used.\n", 279 | "cmap = mpl.cm.cool\n", 280 | "norm = mpl.colors.Normalize(vmin=0, vmax=14)\n", 281 | "\n", 282 | "# ColorbarBase derives from ScalarMappable and puts a colorbar\n", 283 | "# in a specified axes, so it has everything needed for a\n", 284 | "# standalone colorbar. There are many more kwargs, but the\n", 285 | "# following gives a basic continuous colorbar with ticks\n", 286 | "# and labels.\n", 287 | "cb1 = mpl.colorbar.ColorbarBase(ax1, cmap='Blues',\n", 288 | " norm=norm,\n", 289 | " orientation='horizontal')\n", 290 | "cb1.set_label('Some Units')\n", 291 | "\n", 292 | "\n", 293 | "\n", 294 | "plt.show()" 295 | ] 296 | } 297 | ], 298 | "metadata": { 299 | "kernelspec": { 300 | "display_name": "Python [default]", 301 | "language": "python", 302 | "name": "python3" 303 | }, 304 | "language_info": { 305 | "codemirror_mode": { 306 | "name": "ipython", 307 | "version": 3 308 | }, 309 | "file_extension": ".py", 310 | "mimetype": "text/x-python", 311 | "name": "python", 312 | "nbconvert_exporter": "python", 313 | "pygments_lexer": "ipython3", 314 | "version": "3.5.4" 315 | } 316 | }, 317 | "nbformat": 4, 318 | "nbformat_minor": 2 319 | } 320 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Data Science Portfolio 2 | 3 | This portfolio consists of several projects illustrating the work I have done in order to further develop my data science skills. 4 | 5 | 6 | ## Table of Contents 7 | 8 | 9 | | Project | Tags | 10 | | --- | --- | 11 | | [**BERTopic**: Topic Modeling with BERT](#bertopic) | | 12 | | [**KeyBERT**: Keyword Extraction with BERT](#keybert) | | 13 | | [**PolyFuzz**: A framework for Fuzzy String Matching](#polyfuzz) | | 14 | | [**SoAn**: Analyzing WhatsApp Messages](#whatsapp) | | 15 | | [**ReinLife**: Artificial Life with Reinforcement Learning](#reinlife) | | 16 | | [**VLAC**: Vectors of Locally Aggregated Concepts](#vlac) | | 17 | | [**c-TF-IDF**: Class-based TF-IDF](#ctfidf) | | 18 | | [**Reviewer**: Character Popularity](#reviewer) | | 19 | | [Board Game Exploration](#boardgame) | | 20 | | [Statistically Generated Disney Tournament](#disney) | | 21 | | [Optimizing Emté Routes](#emte) | | 22 | | [Pothole Detection](#pothole) | | 23 | | [Exploring Explainable ML](#explainable) | | 24 | | [Deploying a Machine Learning Model](#deploy) | | 25 | | [Retro Games Reinforcement Learning](#reinforcementlearning) | | 26 | | [Statistical Cross-Validation Techniques](#crossvalidation) | | 27 | | [Cluster Analysis: Creating Customer Segments](#clustering) | | 28 | | [Exploring Advanced Feature Engineering Techniques](#featureengineering) | | 29 | | [Predicting and Optimizing Auction Prices](#auction) | | 30 | | [Statistical Analysis using the Hurdle Model](#hurdle) | | 31 | | [Predict and optimize demand](#demand) | | 32 | | [Analyzing Google Takeout Data](#takeout) | | 33 | | [Cars Dashboard](#cars) | | 34 | | [Qwixx Visualization](#qwixx) | | 35 | | [Academic Journey Visualization](#grades) | | 36 | | [Predicting Housing Prices](#housing) | | 37 | | [Analyzing FitBit Data](#fitbit) | | 38 | 39 | 40 | 41 | ## Projects 42 | 43 | 44 | ### [BERTopic: Topic Modeling with BERT](https://github.com/MaartenGr/BERTopic) 45 | [Repository](https://github.com/MaartenGr/BERTopic) | [PyPi](https://pypi.org/project/bertopic/) 46 | 47 | **`BERTopic`** is a novel topic modeling technique that leverages BERT embeddings and c-TF-IDF to create dense clusters allowing for easily interpretable topics whilst keeping important words in the topic descriptions. 48 | 49 | 50 | 51 | --- 52 | 53 | 54 | ### [KeyBERT: Keyword Extraction with BERT](https://github.com/MaartenGr/KeyBERT) 55 | [Repository](https://github.com/MaartenGr/KeyBERT) | [PyPi](https://pypi.org/project/keybert/) 56 | 57 | **`KeyBERT`** is a minimal and easy-to-use keyword extraction technique that leverages BERT embeddings to create keywords and keyphrases that are most similar to a document. 58 | 59 | 60 | 61 | --- 62 | 63 | 64 | ### [PolyFuzz: A framework for Fuzzy String Matching](https://github.com/MaartenGr/PolyFuzz) 65 | [Repository](https://github.com/MaartenGr/PolyFuzz) | [PyPi](https://pypi.org/project/polyfuzz/) 66 | 67 | **`PolyFuzz`** performs fuzzy string matching, string grouping, and contains extensive evaluation functions. PolyFuzz is meant to bring fuzzy string matching techniques together within a single framework. 68 | 69 | 70 | 71 | --- 72 | 73 | 74 | ### [SoAn: Analyzing WhatsApp Messages](https://github.com/MaartenGr/soan) 75 | [Repository](https://github.com/MaartenGr/soan) | [Notebook](https://github.com/MaartenGr/soan/blob/master/soan.ipynb) | [nbviewer](http://nbviewer.jupyter.org/github/MaartenGr/soan/blob/master/soan.ipynb) 76 | 77 | * Created a package that allows in-depth analyses on whatsapp conversations 78 | * Analyses were initially done on whatsapp messages between me and my fianciee to surprise her with on our wedding 79 | * Visualizations were done in such a way that it would make sense for someone not familiar with data science 80 | * Methods: Sentiment Analysis, TF-IDF, Topic Modeling, Wordclouds, etc. 81 | 82 | 83 | 84 | --- 85 | 86 | 87 | ### [ReinLife: Artificial Life with Reinforcement Learning](https://github.com/MaartenGr/ReinLife) 88 | [Repository](https://github.com/MaartenGr/ReinLife) 89 | 90 | * Using Reinforcement Learning, entities learn to survive, reproduce, and make sure to maximize the fitness of their kin. 91 | * Implemented algorithms: DQN, PER-DQN, D3QN, PER-D3QN, and PPO 92 | 93 |

94 | 95 | 96 |

97 | 98 | 99 | --- 100 | 101 | 102 | ### [VLAC: Vectors of Locally Aggregated Concepts](https://github.com/MaartenGr/VLAC) 103 | [Repository](https://github.com/MaartenGr/VLAC) | [Published Paper](https://www.ecmlpkdd2019.org/downloads/paper/489.pdf) 104 | 105 | * It leverages clusters of word embeddings (i.e., concepts) to create features from a collection of documents 106 | allowing for classification of documents 107 | * Inspiration was drawn from VLAD, which is a feature generation method for image classification 108 | * The article was published in ECML-PKDD 2019 109 | 110 | 111 | 112 | --- 113 | 114 | 115 | ### [c-TF-IDF: Class-based TF-IDF](https://github.com/MaartenGr/cTFIDF) 116 | [Repository](https://github.com/MaartenGr/cTFIDF) 117 | 118 | * Created an algorithm allowing for TF-IDF to work on a class-level 119 | * Thereby creating categorical vectors that can be used for: 120 | * *Informative Words per Class*: Which words make a class stand-out compared to all others? 121 | * *Class Reduction*: Using c-TF-IDF to reduce the number of classes 122 | * *Semi-supervised Modeling*: Predicting the class of unseen documents using only cosine similarity and c-TF-IDF 123 | 124 | 125 | 126 | --- 127 | 128 | ### [Reviewer: Character Popularity](https://github.com/MaartenGr/Reviewer) 129 | [Repository](https://github.com/MaartenGr/Reviewer) | [Notebook](https://github.com/MaartenGr/Reviewer/blob/master/notebooks/Overview.ipynb) | [nbviewer](http://nbviewer.jupyter.org/github/MaartenGr/Reviewer/blob/master/notebooks/Overview.ipynb) 130 | 131 | **Reviewer** can be used to scrape user reviews from IMDB, generate word clouds based on a custom class-based TF-IDF, and extract popular characters/actors from reviews. 132 | Methods: 133 | * Named Entity Recognition 134 | * Sentiment Analysis 135 | * Scraper 136 | * BERT 137 | 138 |

139 | 140 |

141 | 142 | --- 143 | 144 | 145 | 146 | 147 | ### [Board Game Exploration](https://bgexploration.herokuapp.com/) 148 | [Github](https://github.com/MaartenGr/boardgame) | [site](https://bgexploration.herokuapp.com/) 149 | 150 | * Created an application for exploring board game matches that I tracked over the last year 151 | * The application was created for two reasons: 152 | * First, I wanted to surprise my wife with this application as we played mostly together 153 | * Second, the data is relatively simple (5 columns) and small (~300 rows) and I wanted 154 | to demonstrate the possibilities of analyses with simple data 155 | * Dashboard was created with streamlit and the deployment of the application was through Heroku 156 | 157 | 158 | 159 | --- 160 | 161 | 162 | ### [Statistically Generated Disney Tournament](https://github.com/MaartenGr/DisneyTournament) 163 | [Github](https://github.com/MaartenGr/DisneyTournament) | [nbviewer](http://nbviewer.jupyter.org/github/MaartenGr/DisneyTournament/blob/master/src/Overview.ipynb) 164 | 165 | * Created a tournament game for a friend of mine 166 | * Tournament brackets are generated based on a seed score calculated through scraping data from IMDB and RottenTomatoes 167 | * Methods: BeautifulSoup 168 | 169 | 170 | 171 | --- 172 | 173 | ### [Optimizing Emté Routes](https://github.com/MaartenGr/Projects/blob/master/Notebooks/RouteOptimization.ipynb) 174 | [Github](https://github.com/MaartenGr/Projects/blob/master/Notebooks/RouteOptimization.ipynb) | [nbviewer](http://nbviewer.jupyter.org/github/MaartenGr/Projects/blob/master/Notebooks/RouteOptimization.ipynb) 175 | 176 | * Project for the course Business Analytics in the master 177 | * Optimization of managers visiting a set of cities 178 | * Total of 133 cities, max distance 400km with time and capacity constraints 179 | * Thus, a vehicle routing problem 180 | * Methods: Integer Linear Programming, Tabu Search, Simmulated Annealing, Ant Colony Optimization, Python 181 | 182 | 183 | 184 | --- 185 | 186 | ### [Pothole Detection](https://github.com/MaartenGr/PotholeDetection) 187 | [Repository](https://github.com/MaartenGr/PotholeDetection) | [Notebook](https://github.com/MaartenGr/PotholeDetection/blob/master/Pothole.ipynb)| [nbviewer](http://nbviewer.jupyter.org/github/MaartenGr/PotholeDetection/blob/master/Pothole.ipynb) 188 | 189 | * Image classification of potholes in roads 190 | * Explored different activation functions (Relu, Leaky Relu, Swish, Mish) 191 | * Used EfficientNetB0 and applied transfer learning to quickly get a high accuracy (> 95%) 192 | * Unfreezing certain layers helps with fine tuning the model 193 | * Methods: Deep Learning, TF/Keras, EfficientNetB0 194 | 195 | 196 | 197 | --- 198 | 199 | ### [Exploring Explainable ML](https://github.com/MaartenGr/InterpretableML/blob/master/InterpretableML.ipynb) 200 | [Repository](https://github.com/MaartenGr/InterpretableML) | [Notebook](https://github.com/MaartenGr/InterpretableML/blob/master/InterpretableML.ipynb) | [nbviewer](https://nbviewer.jupyter.org/github/MaartenGr/InterpretableML/blob/master/InterpretableML.ipynb) | 201 | [Medium](https://towardsdatascience.com/interpretable-machine-learning-1dec0f2f3e6b) 202 | 203 | * Explored several methods for opening the black boxes that are tree-based prediction models 204 | * Models included PDP, LIME, and SHAP 205 | 206 | 207 | 208 | --- 209 | 210 | ### [Deploying a Machine Learning Model](https://github.com/MaartenGr/ML-API) 211 | [Repository](https://github.com/MaartenGr/ML-API) | [Medium](https://towardsdatascience.com/how-to-deploy-a-machine-learning-model-dc51200fe8cf) 212 | 213 | * Developed a set of steps necessary to quickly develop your machine learning model 214 | * Used a combination of FastAPI, Uvicorn and Gunicorn to lay the foundation of the API 215 | * The repository contains all code necessary (including dockerfile) 216 | 217 | 218 | 219 | --- 220 | 221 | 222 | ### [Retro Games Reinforcement Learning](https://github.com/MaartenGr/ReinforcementLearning) 223 | [Github](https://github.com/MaartenGr/ReinforcementLearning) | [Notebook](https://github.com/MaartenGr/ReinforcementLearning/blob/master/Reinforcement%20Learning.ipynb) 224 | 225 | * An overview of methods for creating state-of-the-art RL-algorithms 226 | * Makes use of Gym, Retro-gym, Procgen, and Stable-baselines 227 | 228 | 229 | 230 | --- 231 | 232 | 233 | ### [Statistical Cross-Validation Techniques](https://github.com/MaartenGr/validation) 234 | [Repository](https://github.com/MaartenGr/validation) | [Notebook](https://github.com/MaartenGr/validation/blob/master/Validation.ipynb) | [nbviewer](https://nbviewer.jupyter.org/github/MaartenGr/validation/blob/master/Validation.ipynb) | [Medium](https://towardsdatascience.com/validating-your-machine-learning-model-25b4c8643fb7) 235 | 236 | * Dived into several more in-depth techniques for validating a model 237 | * Statistical methods were explored for comparing models including the Wilcoxon signed-rank test, McNemar's test, 5x2CV paired t-test and 5x2CV combined F test 238 | 239 | 240 | 241 | --- 242 | 243 | ### [Cluster Analysis: Create, Visualize and Interpret Customer Segments](https://github.com/MaartenGr/CustomerSegmentation/blob/master/Customer%20Segmentation.ipynb) 244 | [Repository](https://github.com/MaartenGr/CustomerSegmentation) | [Notebook](https://nbviewer.jupyter.org/github/MaartenGr/CustomerSegmentation/blob/master/Customer%20Segmentation.ipynb) | [nbviewer](https://nbviewer.jupyter.org/github/MaartenGr/InterpretableML/blob/master/Interpretable%20ML.ipynb) | [Medium](https://towardsdatascience.com/cluster-analysis-create-visualize-and-interpret-customer-segments-474e55d00ebb) 245 | 246 | * Explored several methods for creating customer segments; k-Means (Cosine & Euclidean) vs. DBSCAN 247 | * Applied PCA and t-SNE for the 3 dimensional exploration of clusters 248 | * Used variance between averages of clusters per variable to detect important differences between clusters 249 | 250 | 251 | 252 | 253 | --- 254 | 255 | ### [Exploring Advanced Feature Engineering Techniques](https://github.com/MaartenGr/feature-engineering) 256 | [Repository](https://github.com/MaartenGr/feature-engineering) | [Notebook](https://github.com/MaartenGr/feature-engineering/blob/master/Engineering%20Tips.ipynb) | [nbviewer](https://nbviewer.jupyter.org/github/MaartenGr/feature-engineering/blob/master/Engineering%20Tips.ipynb) | [Medium](https://towardsdatascience.com/4-tips-for-advanced-feature-engineering-and-preprocessing-ec11575c09ea) 257 | 258 | * Several methods are described for advanced feature engineering including: 259 | * Resampling Imbalanced Data using SMOTE 260 | * Creating New Features with Deep Feature Synthesis 261 | * Handling Missing Values with the Iterative Imputer and CatBoost 262 | * Outlier Detection with IsolationForest 263 | 264 | 265 | 266 | --- 267 | 268 | ### [Predicting and Optimizing Auction Prices](https://github.com/MaartenGr/Projects/blob/master/Notebooks/AuctionAnalysis.ipynb) 269 | [Github](https://github.com/MaartenGr/Projects/blob/master/Notebooks/AuctionAnalysis.ipynb) | [nbviewer](http://nbviewer.jupyter.org/github/MaartenGr/Projects/blob/master/Notebooks/AuctionAnalysis.ipynb) 270 | 271 | * Data received from an auction house and therefore not made public 272 | * Prediction of value at which an item will be sold to be used as an objective measure 273 | * Optimize starting price such that predicted value will be as high as possible 274 | * Methods: Classification (KNN, LightGBM, RF, XGBoost, etc.), LOO-CV, Genetic Algorithms, Python 275 | 276 | 277 | 278 | --- 279 | 280 | ### [Statistical Analysis using the Hurdle Model](https://github.com/MaartenGr/Projects/blob/master/Notebooks/AppStoreAnalysis.ipynb) 281 | [Github](https://github.com/MaartenGr/Projects/blob/master/Notebooks/AppStoreAnalysis.ipynb) | [nbviewer](http://nbviewer.jupyter.org/github/MaartenGr/Projects/blob/master/Notebooks/AppStoreAnalysis.ipynb) 282 | 283 | * Used Apple Store data to analyze which business model aspects influence performance of mobile games 284 | * Two groups were identified and compared, namley early and later entrants of the market 285 | * The impact of entry timing and the use of technological innovation was analyzed on performance 286 | * Methods: Zero-Inflated Negative Binomial Regression, Hurdle model, Python, R 287 | 288 | 289 | 290 | --- 291 | 292 | ### [Predict and optimize demand](https://github.com/MaartenGr/Projects/blob/master/Notebooks/simulation.ipynb) 293 | [Github](https://github.com/MaartenGr/Projects/blob/master/Notebooks/simulation.ipynb) | [nbviewer](http://nbviewer.jupyter.org/github/MaartenGr/Projects/blob/master/Notebooks/simulation.ipynb) 294 | 295 | * Part of the course Data-Driven SCM 296 | * Optimizing order quantity based on predicted demand using machine learning methods 297 | * Simulation model was created to check performance of method calculating expected demand 298 | * Additional weather features were included 299 | * Methods: Regression (XGBoost, LightGBM and CatBoost), Bayesian Optimization (Skopt) 300 | 301 | 302 | 303 | --- 304 | 305 | ### [Analyzing Google Takeout Data](https://github.com/MaartenGr/Projects/blob/master/Notebooks/GoogleTakeout.ipynb) 306 | [Github](https://github.com/MaartenGr/Projects/blob/master/Notebooks/GoogleTakeout.ipynb) | [nbviewer](http://nbviewer.jupyter.org/github/MaartenGr/Projects/blob/master/Notebooks/GoogleTakeout.ipynb) 307 | 308 | * Analyzing my own data provided by Google Takeout 309 | * Location data, browser search history, mail data, etc. 310 | * Code to analyze browser history is included 311 | * Code to create animation will follow 312 | 313 |

314 | 315 | 316 |

317 | 318 | 319 | --- 320 | 321 | ### [Cars Dashboard](https://github.com/MaartenGr/cars_dashboard) 322 | [Github](https://github.com/MaartenGr/cars_dashboard) 323 | 324 | * Created a dashboard for the cars dataset using Python, HTML and CSS 325 | * It allows for several crossfilters (see below) 326 | 327 | 328 | 329 | --- 330 | 331 | ### [Qwixx Visualization](https://github.com/MaartenGr/Projects/blob/master/Notebooks/Scorecard.ipynb) 332 | [Github](https://github.com/MaartenGr/Projects/blob/master/Notebooks/Scorecard.ipynb) | [nbviewer](http://nbviewer.jupyter.org/github/MaartenGr/Projects/blob/master/Notebooks/Scorecard.ipynb) 333 | 334 | * Visualized 16 games I played with my wife 335 | * The result is a heatmap in using the scorecard of Qwixx 336 | * All rights belong to Qwixx (Nuernberger-Spielkarten-Verlag GmbH) 337 | * The scorecard used for this visualization was retrieved from: 338 | * https://commons.wikimedia.org/wiki/File:Qwixx_scorecard_nofonts.svg 339 | 340 | 341 | 342 | --- 343 | 344 | ### [Academic Journey Visualization](https://github.com/MaartenGr/Projects/blob/master/Notebooks/Grades.ipynb) 345 | [Github](https://github.com/MaartenGr/Projects/blob/master/Notebooks/Grades.ipynb) | [nbviewer](http://nbviewer.jupyter.org/github/MaartenGr/Projects/blob/master/Notebooks/Grades.ipynb) 346 | 347 | * A visualization of my 9! year academic journey 348 | * My grades and average across six educational programs versus the average of all other students in the same classes. 349 | * Unfortunately, no data on the students’ average grade was available for classes in my bachelor. 350 | * Grades range from 0 to 10 with 6 being a passing grade. 351 | * Lastly, Cum Laude is the highest academic distinction for the master’s program I followed. 352 | 353 | 354 |

355 | 356 | 357 |

358 | 359 | --- 360 | 361 | 362 | ### [Neural Style Transfer]() 363 | * For the course deep learning I worked on a paper researching optimal selection of hidden layers to create the most appealing images in neural style transfer while speeding up the process of optimization 364 | * Code is not yet provided as I used most of the following code from [here](https://harishnarayanan.org/writing/artistic-style-transfer/) and I merely explored different layers 365 | 366 | 367 | 368 | --- 369 | 370 | ### [Predicting Housing Prices](https://github.com/MaartenGr/Projects/blob/master/Notebooks/HousingPrices.ipynb) 371 | [Github](https://github.com/MaartenGr/Projects/blob/master/Notebooks/HousingPrices.ipynb) | [nbviewer](http://nbviewer.jupyter.org/github/MaartenGr/Projects/blob/master/Notebooks/HousingPrices.ipynb) 372 | 373 | * Project for the course Machine Learning 374 | * Participation of the kaggle competition [House Prices: Advanced Regression Techniques](https://www.kaggle.com/c/house-prices-advanced-regression-techniques/) 375 | * We were graded on leaderboard scores and I scored 1st of the class with position 33th of the leaderboard 376 | * I used a weighted average of XGBoost, Lasso, ElasticNet, Ridge and Gradient Boosting Regressor 377 | * The focus of this project was mostly on feature engineering 378 | 379 | 380 | 381 | --- 382 | 383 | ### [Analyzing FitBit Data](https://github.com/MaartenGr/fitbit/) 384 | [Repository](https://github.com/MaartenGr/fitbit/) | [Github](https://github.com/MaartenGr/fitbit/blob/master/3.%20The%20Final%20Product.ipynb) | [nbviewer](http://nbviewer.jupyter.org/github/MaartenGr/fitbit/blob/master/3.%20The%20Final%20Product.ipynb) 385 | 386 | * My first data science project 387 | * I looked at improving the quality of FitBit's heartrate measurement as I realized it wasn't all that accurate 388 | * Used a simple 10-fold CV with regression techniques to fill missing heart rates 389 | * There are many things that I would do differently now like using other validation techniques that are not as sensitive to overfitting on timeseries 390 | 391 | 392 | 393 | --- 394 | 395 | ## Contact 396 | If you are looking to contact me personally, please do so via E-mail or Linkedin: 397 | - E-mail: maartengrootendorst@gmail.com 398 | - [LinkedIn](https://www.linkedin.com/in/mgrootendorst/) 399 | 400 | --------------------------------------------------------------------------------