{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Logistic Regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Загрузка данных" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "current directory is : /home/tim/02_ML\n", "Directory name is : 02_ML\n" ] } ], "source": [ "# Проверим нашу рабочую директорию\n", "import os\n", "\n", "dirpath = os.getcwd()\n", "print(\"current directory is : \" + dirpath)\n", "foldername = os.path.basename(dirpath)\n", "print(\"Directory name is : \" + foldername)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# При необходимости, поменяем на новую рабочую директорию.\n", "os.chdir('/home/tim/02_ML')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Exam 1</th>\n", " <th>Exam 2</th>\n", " <th>Admitted</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>34.623660</td>\n", " <td>78.024693</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>30.286711</td>\n", " <td>43.894998</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>35.847409</td>\n", " <td>72.902198</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>60.182599</td>\n", " <td>86.308552</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>79.032736</td>\n", " <td>75.344376</td>\n", " <td>1</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Exam 1 Exam 2 Admitted\n", "0 34.623660 78.024693 0\n", "1 30.286711 43.894998 0\n", "2 35.847409 72.902198 0\n", "3 60.182599 86.308552 1\n", "4 79.032736 75.344376 1" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = pd.read_csv(\"ex2data1.txt\", header=None, names=['Exam 1', 'Exam 2', 'Admitted'])\n", "data.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting of Data" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'Exam 2 Score')" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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zWytpAckvaV09x0KZfF2K5TGe0+j+tUyhoelNWuk9eulrVslsxBAb9wY/sMGB6UZl24AAEB2dXTEr9qBxmlkNY+3Vdm1ssJ9XdKljepLS+rtDYF0f3+4vXXrVCC9fn3YDwAAgIZqZJ1pNJJZCKClEEBHQXX5SDUAAAAaKi3VPBBHeUAdIZAGAABoGoLpLItypMtt3MjkQwAAgCYhmM6q8smG69eHWjlRDjUBNQAAqIGZ6UMf+tCB25/73Of08Y9/fNbHDA8PT1sCvJLTTjtNb3tbtelz0p49e3TyySfPq68f/ehH9e1vf1uS9PnPf16PPfbYgX2f+tSn5vWzJOmaa67RBz7wgXk/biaC6awaHp4KpKPUjq1bpwLq4eGkewgA81IsStu2SZs3h23ZImlAvjWwHO7hhx+uwcFB/eY3v6n5MXMF0/fee68mJyd16623aqLaOugxfOITn9BrX/taSfUJpuuFYDqrentD+bvyHOkooB4cbKlqHnzAAq1v505p6VJpwwbp8svDdunS0A7kXlQOt/zKc3SFes2aBQ2gLVq0SOvWrdPWmXOwJN1///1auXKlTj31VK1cuVIPPPCAvv/97+umm27SX/zFX2jFihX62c9+dtDj/vmf/1nvfOc7de655+qmm2460L5r1y6ddtppOvPMM/W3f/u3B9qvueYa9fb26oILLtAJJ5ygL3zhC/qbv/kbnX766XrlK1+p3/72t5Kkd7/73brhhht0xRVXaGxsTGeffbbOPvtsbdmyRb///e+1YsUKveMd75Ak/dM//ZNe/vKXa8WKFXrf+96np556SpJ09dVX6wUveIF6enp02223xT5u07h7Zr9e+tKXOlrb977nXii4t7e7S2FbKIR2AK3h0UfD/3WIDqZ/FQruxWLSPQQa45577qntjpOT7uvXh3+K9esr346pvb3df/e73/nxxx/vjzzyiH/2s5/1j33sY+7ufv755/s111zj7u5XXXWVX3jhhe7ufskll/j1119f9Wd2dnb6nj17/Bvf+IZfcMEFB9pPOeUUv+WWW9zd/cMf/rC/5CUvcXf3q6++2k888UR/9NFHfd++ff70pz/dv/jFL7q7+4YNG3zr1q0HPe/xxx/vDz300LTfI3LPPff4+eef73/84x/d3f3973+/X3vttT42NubPe97zfN++ff6HP/zBX/WqV/mll15a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\n", "text/plain": [ "<Figure size 864x576 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "positive = data[data['Admitted'].isin([1])]\n", "negative = data[data['Admitted'].isin([0])]\n", "\n", "fig, ax = plt.subplots(figsize=(12,8))\n", "ax.scatter(positive['Exam 1'], positive['Exam 2'], s=50, c='b', marker='o', label='Admitted')\n", "ax.scatter(negative['Exam 1'], negative['Exam 2'], s=50, c='r', marker='x', label='Not Admitted')\n", "ax.legend()\n", "ax.set_xlabel('Exam 1 Score')\n", "ax.set_ylabel('Exam 2 Score')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sigmoid function Сигмоид-функция.\n", "\n", "$ g(z) = \\frac{1}{(1+e^{-z})}$" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def sigmoid(z):\n", " return 1/ (1 + np.exp(-z))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[<matplotlib.lines.Line2D at 0x7f68e67874e0>]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 864x576 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# проверим, что функция работает\n", "nums = np.arange(-10, 10, step=1)\n", "\n", "fig, ax = plt.subplots(figsize=(12,8))\n", "ax.plot(nums, sigmoid(nums), 'r')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Compute the Cost Function and Gradient\n", "\n", "$J(\\Theta) = \\frac{1}{m} \\sum_{i=1}^{m} [ -y^{(i)}log(h_{\\Theta}(x^{(i)})) - (1 - y^{(i)})log(1 - (h_{\\Theta}(x^{(i)}))]$\n", "\n", "$ \\frac{\\partial J(\\Theta)}{\\partial \\Theta_j} = \\frac{1}{m} \\sum_{i=1}^{m} (h_{\\Theta}(x^{(i)}) - y^{(i)})x_j^{(i)}$" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def costFunction(theta, X, y):\n", " \"\"\"\n", " Функция потерь логистической регрессии\n", " \"\"\"\n", " m=len(y)\n", " \n", " predictions = sigmoid(np.dot(X,theta))\n", " error = (-y * np.log(predictions)) - ((1-y)*np.log(1-predictions))\n", "\n", " cost = 1/m * sum(error)\n", " \n", " grad = 1/m * np.dot(X.transpose(),(predictions - y))\n", " \n", " return cost[0] , grad" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Feature scaling" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def featureNormalization(X):\n", " \"\"\"\n", " Нормализация данных. Если features (признаки) отличаются на порядки,\n", " то их масштабирование существенно ускоряет работу метода градиентного спуска. \n", " \"\"\"\n", " # среднее и стандартное отклонение:\n", " mean=np.mean(X,axis=0)\n", " std=np.std(X,axis=0)\n", " \n", " X_norm = (X - mean)/std\n", " \n", " return X_norm , mean , std" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(100, 2) (100,)\n", "m = 100 ; n = 2\n" ] } ], "source": [ "X=data.iloc[:,:-1].values\n", "y=data.iloc[:,-1].values\n", "m , n = X.shape[0], X.shape[1]\n", "print(X.shape, y.shape)\n", "print('m =',m,'; n =', n)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Функция потерь для первоначальной theta: 0.693147180559946\n", "Градиент для первоначальной theta (с нулевыми значениями): [[-0.1 ]\n", " [-0.28122914]\n", " [-0.25098615]]\n" ] } ], "source": [ "X, X_mean, X_std = featureNormalization(X)\n", "# для простоты записи вводится фиктивный признак X_{0}= 1 \n", "X= np.append(np.ones((m,1)),X,axis=1)\n", "y=y.reshape(m,1)\n", "# Начальная theta = нули\n", "initial_theta = np.zeros((n+1,1))\n", "# Рсчет функции потерь и градиента для первоначальной theta \n", "cost, grad= costFunction(initial_theta,X,y)\n", "print(\"Функция потерь для первоначальной theta:\",cost)\n", "print(\"Градиент для первоначальной theta (с нулевыми значениями):\",grad)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Gradient Descent" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "def gradientDescent(X,y,theta,alpha,num_iters):\n", " \"\"\"\n", " Take in numpy array X, y and theta and update theta by taking num_iters gradient steps\n", " with learning rate of alpha\n", " \n", " return theta and the list of the cost of theta during each iteration\n", " \"\"\"\n", " \n", " m=len(y)\n", " J_history =[]\n", " \n", " for i in range(num_iters):\n", " cost, grad = costFunction(theta,X,y)\n", " theta = theta - (alpha * grad)\n", " J_history.append(cost)\n", " \n", " return theta , J_history" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "theta , J_history = gradientDescent(X,y,initial_theta,1,400)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Theta optimized by gradient descent: [[1.65947664]\n", " [3.8670477 ]\n", " [3.60347302]]\n", "The cost of the optimized theta: 0.20360044248226664\n" ] } ], "source": [ "print(\"Theta optimized by gradient descent:\",theta)\n", "print(\"The cost of the optimized theta:\",J_history[-1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting of Cost Function" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Cost function using Gradient Descent')" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "theta , J_history = gradientDescent(X,y,initial_theta,0.01,400)\n", "plt.plot(J_history)\n", "plt.xlabel(\"Iteration\")\n", "plt.ylabel(\"$J(\\Theta)$\")\n", "plt.title(\"Cost function using Gradient Descent\")" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Cost function using Gradient Descent')" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "theta , J_history = gradientDescent(X,y,initial_theta,0.1,400)\n", "plt.plot(J_history)\n", "plt.xlabel(\"Iteration\")\n", "plt.ylabel(\"$J(\\Theta)$\")\n", "plt.title(\"Cost function using Gradient Descent\")" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Cost function using Gradient Descent')" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "theta , J_history = gradientDescent(X,y,initial_theta,1,400)\n", "plt.plot(J_history)\n", "plt.xlabel(\"Iteration\")\n", "plt.ylabel(\"$J(\\Theta)$\")\n", "plt.title(\"Cost function using Gradient Descent\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting the decision boundary\n", "\n", "From Machine Learning Resources:\n", " \n", "$h_\\Theta(x) = g(z)$, where g is the sigmoid function and $z = \\Theta^Tx$\n", "\n", "Since $h_\\Theta(x) \\geq 0.5$ is interpreted as predicting class \"1\", $g(\\Theta^Tx) \\geq 0.5$ or $\\Theta^Tx \\geq 0$ predict class \"1\" \n", "\n", "$\\Theta_1 + \\Theta_2x_2 + \\Theta_3x_3 = 0$ is the decision boundary \n", "\n", "Since, we plot $x_2$ against $x_3$, the boundary line will be the equation $ x_3 = \\frac{-(\\Theta_1+\\Theta_2x_2)}{\\Theta_3}$" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<matplotlib.legend.Legend at 0x7f68e629a2e8>" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAs8AAAHgCAYAAABaYIDJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdeVxUVR8G8OcMuIQbuVSWAVbGrqBYbkmmuZZmZWqUa6IIhqQtRilWVLZI+oILZlo2LunrkppLampuKbihCL0tQOSaiRsuCOf94zoKCDLAzNy5c5/v58MH7xVmfiAOzz33d84RUkoQEREREVHZDGoXQERERESkFQzPRERERERmYngmIiIiIjITwzMRERERkZkYnomIiIiIzMTwTERERERkJme1CyiP+vXrSw8PD7XLICIiIiIHl5yc/I+UskHx85oKzx4eHkhKSlK7DCIiIiJycEKIzJLOs22DiIiIiMhMDM9ERERERGZieCYiIiIiMpOmep6JiIiItCwvLw/Z2dm4fPmy2qXQddWrV0ejRo1QpUoVsz6e4ZmIiIjIRrKzs1GrVi14eHhACKF2ObonpcTp06eRnZ2Nxo0bm/U5bNsgIiIispHLly+jXr16DM52QgiBevXqletOAMMzERERkQ0xONuX8v57MDwTERER6cyyZcsghEBaWlqJfz9o0CAsWbLE7Mc7evQonn/+eQDA/v378cMPP9z4u82bN2PHjh3lrtHDwwP//PNPuT/P2hieiYiIiHRmwYIFaNeuHRYuXGiRx7v33ntvhG1LhWd7xfBMREREZKeMRsDDAzAYlPdGY+Uf88KFC9i+fTtmz559IzxLKREREQEfHx/06NEDJ0+evPHxHh4eePvtt9G6dWsEBQVh79696NKlCx588EHMmDEDAJCRkQE/Pz9cvXoV48ePx6JFixAQEIBJkyZhxowZiIuLQ0BAAH7++WecOnUKzz33HFq2bImWLVti+/btAIDTp0+jc+fOCAwMxPDhwyGlrPwXawVcbYOIiIjIDhmNQGgokJurHGdmKscAEBJS8cddvnw5unbtiocffhh169bF3r17kZGRgfT0dKSkpODEiRPw8fHBkCFDbnzO/fffj507dyIqKgqDBg3C9u3bcfnyZfj6+mLEiBE3Pq5q1ap47733kJSUhPj4eADApUuXULNmTYwdOxYA8OKLLyIqKgrt2rVDVlYWunTpgiNHjmDixIlo164dxo8fj9WrVyMxMbHiX6QVMTwTERER2aHo6JvB2SQ3VzlfmfC8YMECjB49GgDQr18/LFiwAHl5eejfvz+cnJxw77334oknnijyOT179gQA+Pv748KFC6hVqxZq1aqF6tWrIycnp1zPv2HDBqSmpt44PnfuHM6fP4+tW7di6dKlAIAePXrgzjvvrPgXaUUMz0RERER2KCurfOfNcfr0aWzatAmHDh2CEAL5+fkQQqB37963XXWiWrVqAACDwXDjz6bja9eulauGgoIC7Ny5E3fcccctf6eFlUjY80xERERkh9zcynfeHEuWLMGAAQOQmZmJjIwM/PXXX2jcuDHq1q2LhQsXIj8/H8eOHcNPP/1U4eeoVasWzp8/X+px586db7R0AMoEQwBo3749jNebutesWYMzZ85UuAZrYngmIiIiskOxsYCLS9FzLi7K+YpasGABevfuXeTcc889h+PHj6NJkybw9/dHWFgYgoODK/wcHTp0QGpqKgICArBo0SI8/fTTWLZs2Y0Jg1OnTkVSUhKaNm0KHx+fG5MOJ0yYgK1bt6J58+ZYv3493CpzlWBFwl5nMpYkKChIJiUlqV0GERERUYUcOXIE3t7eZn+80aj0OGdlKSPOsbGV63emkpX07yKESJZSBhX/WPY8a4mUQOFeoOLHRERE5FBCQhiW7Q3bNrQiJgaIilICM6C8j4pSzhMRERGRTTA8a4GUQE4OMGXKzQAdFaUc5+TcDNREREREZFVs29ACIYC4OOXPU6YobwAQGamcZ+sGERERkU1w5FkrCgdoEwZnIiIiIptieNYKU6tGYYV7oImIiIjI6hietaBwj3NkJFBQoLwv3ANNREREZAYhBMaMGXPj+LPPPkNMGQsQLF++vMiW2hXh4eGBf/75x+yP//777/Hxxx+X+Pxz587F0aNHy/X8GRkZ8PPzK9fnlIThWQuEAFxdi/Y4x8Upx66ubN0gIs0xGgEPD8BgUN5f31SMiIorPkBmgQGzatWqYenSpeUKspYIz+XVs2dPvPXWWyU+f0XCs6UwPGtFTEzRHmdTgHawper4C5XI8RmNQGgokJmp5IDMTOWY/9+JirHSMrXOzs4IDQ1FXPG5VAAyMzPRsWNHNG3aFB07dkRWVhZ27NiB77//Hq+//joCAgLw+++/F/mclStX4tFHH0VgYCA6deqEEydOAABOnz6Nzp07IzAwEMOHD4dpY76MjAx4eXnhlVdegZ+fH0JCQrBhwwa0bdsWTZo0we7duwEoATkiIuKW5580aRKSkpIQEhKCgIAAXLp0CcnJyQgODkaLFi3QpUsXHDt2DACQnJyMZs2aoXXr1khISKjU9+0GKaVm3lq0aCHJcX37rZQuLlIqrw7Km4uLcp6IHIe7e9H/56Y3d3e1KyOyvtTUVPM+sKBAyshI5T9HZGTJxxVUo0YNefbsWenu7i5zcnLkp59+KidMmCCllPKpp56Sc+fOlVJKOXv2bNmrVy8ppZQDBw6UixcvLvHx/v33X1lwvZ5Zs2bJ1157TUop5ahRo+TEiROllFKuWrVKApCnTp2Sf/75p3RycpIHDx6U+fn5snnz5nLw4MGyoKBALl++/MZzzpkzR4aHh5f4/MHBwXLPnj1SSimvXr0qW7duLU+ePCmllHLhwoVy8ODBUkop/f395ebNm6WUUo4dO1b6+vqW+DWU9O8CIEmWkEe5VB3ZjehoIDe36LncXOU8d1cichxZWeU7T6RLVl6mtnbt2hgwYACmTp2KO+6448b5nTt3YunSpQCAl19+GW+88UaZj5WdnY2+ffvi2LFjuHr1Kho3bgwA2Lp1643H6tGjB+68884bn9O4cWP4+/sDAHx9fdGxY0cIIeDv74+MjIxyfS3p6ek4dOgQnnzySQBAfn4+GjZsiLNnzyInJwfBwcE3vp41a9aU67FLwrYNshv8hUqkD25u5TtPpFtWXqZ29OjRmD17Ni5evHibEsp+rlGjRiEiIgIpKSmYOXMmLl++XObnV6tW7cafDQbDjWODwYBr166Z+yUAULoofH19sX//fuzfvx8pKSlYv349pJRm1V9eDM9kN/gLlfRGrz3+sbGAi0vRcy4uynkyj15/dnTHysvU1q1bFy+88AJmz55941ybNm2wcOFCAIDRaES7du0AALVq1cL58+dLfJyzZ8/ivvvuAwB8/fXXN863b98exus/nGvWrMGZM2cqXGvx5y987OnpiVOnTmHnzp0AgLy8PBw+fBiurq6oU6cOtm3bduPrsQSGZ7Ib/IVKjqSscKPnSXMhIUBiIuDurgygubsrx2zPMo+ef3Z0xUbL1I4ZM6bIqhtTp07FnDlz0LRpU8ybNw9TrreL9OvXD59++ikCAwNvmTAYExODPn364LHHHkP9+vVvnJ8wYQK2bt2K5s2bY/369XCrxGhY8ecfNGgQRowYgYCAAOTn52PJkiV488030axZMwQEBGDHjh0AgDlz5iA8PBytW7cu0p5SGUJqaI3goKAgmZSUpHYZZEVGo9LjnJWljDjHxvIXKmmPKdwU7uF3cSkaED08lNBTnLs7UM52P7oNR3xN4c+Oth05cgTe3t7mfXBMDJCTc7NVwxSoXV0dbrUttZX07yKESJZSBhX/WIZnIiILMyfcGAwlDxwJoQwwUeWZcxGjRfzZ0bZyhWdA+ccu3Ldb/JgsojzhmW0bREQWZs7kV/b4W9/tVvDRMv7s6EzxoMzgrDqGZ7VZYecgIlKXOeGGPf7W56gr+PBnh0hdDM9qstLOQUSkLnPCDSfNWZ+jjtDyZ0f7tNQyqwfl/fdgeFaLlMokgMKzZk2zanNyOAJNpGHmhpuQEKUHuqBAec/wY1mOPELLnx3tql69Ok6fPs0AbSeklDh9+jSqV69u9udwwqCaCgdmEwvtHERERI652gZpW15eHrKzs4tsJELqql69Oho1aoQqVaoUOc/VNuyVlMrUaZOCAgZnIiIiIpVxtQ17ZOWdg4iIiIjIshie1WKjnYOIiIiIyHKc1S5At4RQdggq3OMcF6f8nasrWzeIiIiI7BB7ntXGnYOIiIiI7A57nu0Vdw4iIiIi0gyG53IYuXokJm6eiMvXuLwMERERkR4xPJspvyAfOZdzELMlBn7T/LDut3Vql0RERERENsbwbCYngxPmPzcfP778I5wMTuhq7Io+i/sg+1y22qURERERkY0wPJdTpwc64eCIg/igwwdY9esqeCd4Y/LOycjLz1O7NCIiIiKyMobnCqjmXA3R7aOROjIVwe7BGLN+DFoktsC2rG1ql0ZE5HCMRsDDQ9mM1cNDOSYiUgvDcyU0vrMxVvZfieV9l+PslbN4bM5jGLJiCE5dPKV2aUREDsFoBEJDgcxMZSXPzEzlmAGaiNTCdZ4t5OLVi/hg6wf4bOdnqFW1Fj7u9DFeaf4KDILXJ0REFeXhoQTm4tzdgYwMW1dDRHrCdZ6trEbVGvio00c4MOIAmt3TDMNXDUfr2a2x99hetUsjItKsrKzynScisjaGZwvzaeCDTQM2YV7vecjIyUDLWS0x6odRyLmco3ZpRESa4+ZWvvNERNbG8GwFQgi81PQlpEekIywoDAl7EuAV7wXjQSO01CZDRKS22FjAxaXoORcX5TxVDCdgElUOw7MVuVZ3RXz3eOwZtgduddzw0rKX8MQ3T+DIqSNql0ZEpAkhIUBiotLjLITyPjFROU/lxwmYRJXHCYM2kl+Qj1l7Z2HcxnG4ePUixrQeg3fav4MaVWuoXRoREekEJ2ASmY8TBlXmZHDCiKARSI9Ix4v+L+Lj7R/DZ5oPVqStULs0IiLSCU7AJKo8hmcbu6vGXZj7zFxsGbQFtarWwjOLnkHPBT3x55k/1S6NiIgcHCdgElUew7NK2ru3x77h+/DZk59h05+b4DvNFx/+/CGuXLuidmlEROSgOAGTqPIYnlVUxakKxrQZg7SINPR4uAeiN0Wj2Yxm2PjHRrVLIyIiBxQSAgwcCDg5KcdOTsoxJ2ASmY/h2Q40qt0Ii/ssxpqQNbhWcA2d5nXCi/99EcfOH1O7NCIiciBGI/D110B+vnKcn68cc7UNIvMxPNuRrg91xaGRhzAheAKWHlkKz3hPTP1lKq4VXFO7NCIiKoMW1k+OjgZyc4uey81VzhOReRie7Ux15+qIeTwGKWEpaHN/G0SujUTLWS2xK3uX2qUREVEptLJ+MlfbIKo8hmc71aReE6wJWYPFfRbj1MVTaD27NUJXhuJ07mm1SyMiomK0MqLL1TaIKo/h2Y4JIfC8z/M4En4EY1qPwVf7voJnvCe+2vcVCmSB2uUREdF1WhnR5WobRJXH8KwBtarVwmedP8O+4fvgVd8LQ78fisfmPIaDJw6qXRoREUE7I7rc7pyo8hieNcT/bn9sHbwVc3rNwa+nf0Xzmc3x2rrXcP7KebVLIyLSjZImBmppRDckRNmKu6BAec/gTFQ+DM8aYxAGDAoYhPSIdLzS/BV8sesLeCV44bvD30FKqXZ5REQOrbSJgQBHdIn0guFZo+reURcznpqBnUN34u4ad6Pvkr7o8m0X/Hr6V7VLIypCC8t3EZnrdhMDOaJLpA8Mzxr3aKNHsWfYHvyn23/wy9+/wH+6P8b/NB6X8i6pXRqRZpbvIjKXViYGEpH1MDw7ACeDEyIeiUB6RDr6+PTB+1vfh+80X/zwvx/ULo10TivLdxGZSysTA8n+8a6cdjE8O5B7at6Db5/9FpsGbEI152roMb8Hnl30LLLOckjEHunhhZOjdORotDQxkOwX78ppG8OzA+rQuAMOjDiAjzp+hLW/rYV3gjc+2f4J8vLz1C6NrtPLCydH6cjRcKk3sgTeldM2oaUVGoKCgmRSUpLaZWhKRk4GRq8djRXpK+DTwAfTe0xHe/f2apelex4eSmAuzt1dmWjkKEwXCYV/Sbi4MGwQkb4ZDMrASXFCKBNOyT4IIZKllEHFz3Pk2cF5uHpgeb/l+L7f98jNy0Xw3GAMXD4QJy6cULs0XdNLOwNH6YiIbsW7ctrG8KwTT3s+jcMjDyP6sWgsSFkArwQvTN8zHfkF+WqXpkt6euHk8l1EREWxd17bGJ51xKWKCz544gMcDDuI5g2bY+QPI9FqdiskHWUrjK3xhZOIyDGZMxmcd+W0jeFZh7zqe2HDyxsw/9n5yD6XjUdmPYLw1eE4c+mM2qXpBl84ifRBD6vq0E3lmQzOu3LaxQmDOnf28lmM/2k84vfEo75LfXz25Gd4qelLEEKoXRoRkaZxwqz+6GUyuF5wwiCVqE71OpjSbQqShiWhsWtjDFg+AI9//TgOnzysdmkVwlEeIrIXXI5Mf/QyGVzvGJ4JABDYMBA7hu5A4lOJSDmRgoCZAXjzxzdx4eoFtUszm17WTiYibWCQ0h89TQYvjR4GsRie6QaDMGBYi2FIj0jHgKYD8MmOT+CT4INlR5ZBC+09HOUhInvCIKU/ep8MrpdBLIZnukWDGg0wu9dsbBu8Da7VXfHsd8/iqQVP4Y8zf6hd2m1xlIeI7Ineg5Qe6X0yuF4GsRieqVRt3dpi7/C9mNx5MrZmboXvNF+8v+V9XL52We3SSsRRHrIlPdyapMrRe5DSKz2voqGXQSyGZ7otZ4MzolpHIS08DT09e2L85vFoOr0p1v++Xu3SbsFRHrIVvdyapMrTc5Ai/dHLIBbDM5nlvtr3YdHzi7DupXWQkOjybRf0XdIXf5/7W+3SbuAoD9mKXm5Nkvl4J4JIP4NYDM9ULp0f7IyUsBS89/h7WJG2Al4JXojbGYdrBdfULg0AR3nINvRya7Iy9BQmeSeCSKGXQSxukkIV9vu/v2PUmlFY89saNL27KaZ1n4a2bm3VLovI6rgRwu3pbXMQ/jwQOSZukkIW92DdB7H6xdVY+sJSnLl0Bu3mtMPQFUPxT+4/apdGZFV6uTVZUXpra+GdCCJ9YXimShFCoLd3b6SGp+KNNm/gm4PfwDPeE7OSZ6FAFqhdHpFV6OXWZEXpLUzqZZIUESlUDc9CiK+EECeFEIfUrIMqr2bVmpj05CTsH74ffnf5IXRVKNrMboN9x/apXRqRVbC/vnSOGiZL6+PmnQgifVF75HkugK4q10AW5HuXLzYP3IxvnvkGf+b8iaBZQYhcE4mzl8+qXRoR2YgjhsnbTQrknQgifVF9wqAQwgPAKimlX1kfywmD2nLm0hm8s+kdTE+ajrtr3o3JnSejn18/CCHULo2IrMxoVHqcs7KUEefYWG2HSU4KJNKf0iYMMjyT1SUdTULY6jAkHU3CE42fQEL3BHjV91K7LCIisxkMyohzcUIorTtE5Hg0u9qGECJUCJEkhEg6deqU2uVQBQTdG4RdQ3dhWvdpSD6ajKbTmyJ6YzRy83LL/mQiIjvgqH3cRFR+dh+epZSJUsogKWVQgwYN1C6HKsjJ4ISwlmFIj0hHf//++HDbh/BJ8MHK9JVql0ZEVCZH7OMmooqx+/BMjuXumnfj62e+xuaBm1Gjag30XNgTvRb2QkZOhtqlERGVipMCichE1Z5nIcQCAI8DqA/gBIAJUsrZpX08e54dS15+Hr7Y9QVitsRASol327+LMW3GoKpTVbVLIyIiIp2z2wmD5cHw7JiyzmYhal0Ulh5ZCq/6XkjonoAnGj+hdllERESkY5qdMEiOz62OG/77wn+x+sXVuJp/FR2/6YiXlr6E4xeOq10aERERUREMz2Q3ujfpjkNhhzC+/XgsTl0Mz3hPxO+OR35BvtqlEREREQFgeCY7c0eVOzCxw0QcCjuER+97FKPWjELLWS3xS/YvapdGRERExPBM9qlJvSZY99I6fPf8dzhx8QRaz26NEatG4N9L/6pdGhEREekYwzPZLSEE+vj2wZHwIxjdajS+3PslPOM9MXf/XBRIbulFREREtsfwTHavdrXamNxlMpJDk/FwvYcxeMVgBM8NRsqJFLVLIyIiIp1heCbNaHZPM/w8+GfM7jkbR04dQeDMQIxdPxbnr5xXuzQiIiLSCYZn0hSDMGBI4BCkR6RjSOAQfL7zc3gneGNJ6hJoac1yIiIi0iaGZ9Kkei71kPh0InYO3YkGNRqgz+I+6Gbsht/+/U3t0oiIiMiBMTyTprVq1Ap7hu3BlK5TsOOvHfCb5oeYzTG4fO2y2qURERGRA2J4Js1zNjjj1UdfRXpEOp71fhYTt0yE3zQ/rP1trdqlERERkYNheCaH0bBWQ8x/bj42vLwBzgZndDN2w/PfPY+/zv6ldmlERETkIBieyeF0fKAjDow4gNgnYrH6f6vhneCNz3Z8hrz8PLVLI7IKoxHw8AAMBuW90ah2RUREjovhmRxSNedqePuxt5E6MhUdGnfA6z++jsCZgfg582e1SyOyKKMRCA0FMjMBKZX3oaEM0ERE1sLwTA6t8Z2NsbL/SqzotwLnr55H+7ntMWj5IJy8eFLt0ogsIjoayM0tei43VzlPRESWx/BMutDTsydSR6ZiXLtxmJ8yH57xnpiRNAP5Bflql0ZUKVlZ5TtPRESVw/BMulGjag182PFDHBhxAIH3BCJsdRhaz26N5KPJapdGVGFubuU7T0RElcPwTLrj3cAbGwdshPFZI7LOZqHlrJaI+CECOZdz1C6NqNxiYwEXl6LnXFyU80REZHkMz6RLQgi86P8i0iLSEPFIBKYnTYdnvCe+Pfgtt/kmTQkJARITAXd3QAjlfWKicp6IiCxPaCkoBAUFyaSkJLXLIAe099hehK0Ow+6/dyPYPRjTekyDTwMftcsiIiIilQghkqWUQcXPc+SZCEDzhs2xc+hOzHxqJg6eOIhmM5rhrQ1v4eLVi2qXRkRERHaE4ZkcQ/E7KBW4o2IQBoS2CEV6RDpebvoyJm2fBJ9pPlietpytHERERASA4ZkcQUwMEBV1MzBLqRzHxFTo4RrUaICven2Fnwf/jNrVaqP3ot54esHT+OPMHxYrmYiIiLSJ4Zm0TUogJweYMuVmgI6KUo5zcio0Am3Szq0d9obuxeedP8eWzC3wneaLD7Z+gCvXrljwCyAiIiItYXgmbRMCiIsDIiOVwGwwKO8jI5XzQlTq4as4VcFrrV/DkfAjePrhp/HuT++i6Yym2PDHBgt9AURkKUYj4OGhvAx4eHCLciKyDq624SikLBoUix87OimV35gmBQVW+frX/bYOEWsi8Nu/v6Gvb19M7jIZ99a61+LPQ0TlYzQCoaFFtyp3ceGyfURUcVxtw5FZuOdXc0xfb2GFvx8W1OWhLkgJS8HExydiedpyeMV7YcquKbhWcM3iz0VkDo62KqKjiwZnQDmOjlanHiJyXAzPWmfFnl9NKPz1RkYqI86mFg4rBejqztUxPng8Do88jLZubTF63WgEJQZh5187Lf5cRLdjGm3NzFR+1DMzlWM9BuisrPKdJyKqKLZtOILCAdLEQj2/mhATo1womL5e0/fD1dXqo+9SSixLW4bItZHIPpeNVwJfwcedPkY9l3pWfV4iQBlpzsy89by7O5CRYetq1MXvBRFZWmltGwzPjsJGPb92S+We7wtXL+C9Le8hblcc6lSrg0mdJmFw4GAYBG/ukPUYDCXfXBFCeQnQE/Y8E5GlsefZkdmw59duFQ/KNr5wqFm1Jj558hPsG74P3g288crKV9Duq3Y4cPyATesgfXFzK995RxYSogRld3flv7+7O4MzEVkHw7PWqdDzS6Xzu8sPWwdtxdxec/Hbv7+heWJzRK2Nwrkr59QujRxQbKwyulqYi4tyXo9CQpQWjYIC5T2DM+kRJxFbH8Oz1gmh9PYW7nE2rXvs6qqv1g07IYTAwICBSItIQ2jzUEz5ZQq84r2w6NAibvNNFsXRViIqjJOIbYM9z45C7+s827Hdf+9G2Oow7D22F50e6ISE7gl4uN7DapdFREQOhhNnLYs9z45O5Z5fKt0j9z2C3a/sRny3eOz5ew/8p/vj3U3v4lLeJbVLIyKqELYG2Ccu2WgbDM9ENuBkcEL4I+FIi0jDC74v4IOfP4DvNF+s/nW12qUREZULWwPsFycR2wbDM9lW8TYhDbUNWcI9Ne/BvN7z8NPAn1DduTqeWvAUei/qjayzHBYgIm3gbo72i5OIbYPhmWxH79uIF/K4x+PYP2I/Pu74Mdb/vh7eCd6YtG0SruZfVbs0IqLbYmuA/eIkYttgeCbb0Ps24iWo6lQVb7Z7E6kjU9H5wc54a+NbCJgRgM0Zm63yfOxRLBu/R0RlY2uAfeOSjdbH8Ey2UXgJvSlTlHRiWptaL9uIl8Ld1R3L+i7Dyv4rcenaJXT4ugNeXvYyTlw4YbHnYI9i2fg9IjIPWwNI77hUnVZpdWk6vW8jXobcvFx89PNHmLR9ElyquCD2iViMCBoBJ4NTpR6XyxeVjd8j0jKjUek5zspSRoBjY6074mjr5yNSQ2lL1TE8a1FMjNLqYBqxNbVAuLrad/9w4VYNE448lyj9n3SE/xCOjX9uRIuGLTC9x3S0vK9lhR/PYCi5M0YI5fqF+D0i7TLdNSk8ic/Fhb2uRJXFdZ4dhVZ7h7mNeLl41vfEjy//iIXPLcTR80fx6JePYuTqkThz6UyFHo89imXj94i0iqtfENkWw7PWaLV3mNuIl5sQAn39+iItIg2Rj0ZiZvJMeMZ74psD35R7m2/2KJaN3yPSKq5+QWRbbNvQKq32Dmu1V9sO7D++HyNXj8TO7J14zO0xTOsxDX53+Zn9+exRLBu/R6RF7Ncnsg62bTgSUwtEYVppfeA24hUWcE8Atg3Zhi+f/hKHTx1GwIwAvL7+dVy4esGsz+fyRWXj94i0iHdNiGyL4Vlr2DusawZhwNDmQ5EekY5BAYPw2c7P4J3gjf+m/rfcrRxE5BjM2RiDa5gTWQ7bNrRIq6ttkMXt+GsHwh8fVAcAACAASURBVFaH4eCJg+j6UFf8p9t/8FDdh9Qui4jsCFfjIKoYLlXnaNg7TNddK7iG+N3xePend5GXn4dx7cbhzXZvorpzdbVLIyI7wJ5ooophz7OjYe8wXedscMboVqORHpGO3t69EbMlBn7T/LDut3Vql0ZEdoCrcRBZFsMzkYO4t9a9WPDcAvz48o9wMjihq7Er+izug+xz2WqXRkQq4hrmRJbF8EzkYDo90AkHRxzEBx0+wKpfV8E7wRuTd05GXn6e2qURkQq4GgeRZTE8603xHncN9byT+ao5V0N0+2ikjkxFsHswxqwfgxaJLbAta5vapTkkrmRA9syc1TiIyHwMz3oSE1N0OTvTKh1cocNhNb6zMVb2X4nlfZfj7JWzeGzOYxiyYghOXTyldmkOw7SSQWam8l8qM1M5LhygGa5JbVzDnMhyGJ71QkplebvC60Gb1ovOyeEItAMTQqCXVy+kjkzFW23fwryD8+AZ74nE5EQUyAK1y9O86OiiS4ABynF0tPJnc8I1ERFpB5eq05PCgdkkMvLmetGkC6mnUhH+Qzg2Z2zGI/c9guk9pqN5w+Zql6VZBkPJ155CKKN8XCaMiEibuFQdKb/N4+KKnmNw1h2fBj7YNGAT5vWeh4ycDLSc1RKvrnkVZy+fVbs0TSprJQMuE0ZEVD723urG8KwnppHnwrilty4JIfBS05eQHpGOsKAwxO+Oh2e8J+anzOc23+VU1koGXCaMiMh8Wmh1Y3jWi8ItG5GRyv3kyMiiPdCkO67VXRHfPR57hu2BWx03hCwNQcdvOuLIqSNql6YZZa1kwGXCiIjMV9Y8EnvAnmc9iYlRJgeaWjVMgdrVlStuEPIL8jFr7yyM2zgOF69exNg2Y/FO+3fgUsWl7E+m2zIalRf+rCxlxDk2lqsdEBGVpKx5JLZUWs8zw7PeSFm0x7n4MeneyYsn8caPb+DrA1/DvY47pnabip6ePdUui4iIdMCeJllzwiApigdlewnO3LzFbtxV4y7MfWYutgzagppVa6LXwl7ouaAnMnIy1C6NiIgcnBZa3RieSX3cvMUutXdvj33D9+HTJz/Fpj83wSfBBx/+/CGuXLuidmlEROSgtLAjJsMzqYubt9i1Kk5VMLbNWBwJP4LuTbojelM0ms1oho1/bFS7NCIiclD2viMme55Jfdy8RTPW/G8NItZE4I8zf6C/X3983vlzNKzVUO2yiIiILI49z2S/uHmLZnRr0g2Hwg5hQvAE/PfIf+GV4IWpv0zFtYJrapdGpGn2vikEEd3E8Ezq4+YtmnJHlTsQ83gMDoUdQqtGrRC5NhItZ7XEruxdapdGpEla2BSCiG5ieCZ1cfMWzWpSrwnWhqzF4j6LceriKbSe3RqhK0NxOve02qURaYoWNoUgopsYnkldQiibtBTucY6LU45dXdm6YeeEEHje53kcCT+CMa3H4Kt9X8ErwQtz9s1BgbTxavYaxdv1lJVVvvNEpC6GZ1JfTEzRHmdTgOZSdZpRq1otfNb5M+wbvg+e9Twx5PshaD+nPQ6eOKh2aXaNt+vtny0ubtzcyneebIcXt1QShmeyD/a6eQuVi//d/tg6eCvm9JqD9NPpaD6zOcasG4PzV86rXZpd4u16+2arixstbAqhR7y4pdIwPBPRbZV35MUgDBgUMAjpEekYGjgUcbvi4JXghcWHF0NLS2PaAm/X2zdbXdxoYVMIPeLFLZWG6zwTUalMIy+Ff4G4uJTvF/uu7F0YuXok9h3fh84PdkZ8t3g0qdfEOgVrjIeHMppVnLu7sjEAqctgKHnOshDK3GZybPz3J67zTETlZomRl1aNWmH3sN2Y2nUqdmXvgt90P0z4aQIu5V2ybLEaxNv19s0eepHZc6see/j3J/vE8ExEpbJUW4GzwRmjHh2FtPA0PO/zPN7b+h78pvthzf/WVL5IDePtevum9sUNe27Vpfa/v9ZU5kJPaxeJbNsgolJZq61g05+bMHL1SKSfTsez3s/iiy5f4P4691f8AYmsxGhU7rRkZSkjjrGxtru4YVuP+tT899eSyrT4WaI90FpKa9tgeCaiUlnzRe1q/lV8vuNzvL/1fQghMCF4AqJaRaGKU5XKPTCRg2DPLWlFZS707PkikT3PRFRu1mwrqOpUFeMeG4fU8FR0eqAT3tzwJgJmBmBr5tbKPziRA2DPLWlFZVr8tLjqEMMzEd1WSIhy9V9QoLy39G00D1cPrOi3Aiv6rcDFqxcRPDcYA5cPxIkLJyz7REQaw55b0orKXOhp8SKR4ZmI7EJPz55IDU/F2+3exoKUBfBK8ML0PdORX5CvdmlEquCEUtKKylzoafEikT3PRGR30v5JQ/gP4dj05yYE3RuE6T2mI+jeW9rOiIjITlRmcqW9TszkhEEi0hQpJRYeWojX1r+GExdOICwoDB888QHuvONOtUsjIiId4IRBItIUIQT6+/dHWngaRj0yCjOSZ8ArwQvzDszjNt9ERKQahmcismt1qtfBlG5TkDQsCY1dG2PA8gF4/OvHcfjkYbVLIyIiHWJ4JiJNCGwYiB1DdyDxqUSknEhBwMwAvPnjm7hw9YLapRERkY6UGZ6FEA8LITYKIQ5dP24qhHjH+qUR2YniLQJsGVCNQRgwrMUwpEekY0DTAfhkxyfwSfDBsiPL2MphI1rbRpeIyNLMGXmeBWAcgDwAkFIeBNDPmkUR2Y2YGCAq6mZgllI5jolRsyrda1CjAWb3mo1tg7fBtbornv3uWTy14Cn8ceYPtUtzaKYdJzMzlf8KmZnKMQM0EemJOeHZRUq5u9i5a5Z4ciFEVyFEuhDiNyHEW5Z4TCKLkRLIyQGmTLkZoKOilOOcHI5A24G2bm2xd/heTO48GVszt8J3mi/e3/I+rly7onZpDik6uuhW7YByHB2tTj1ERGowJzz/I4R4EIAEACHE8wCOVfaJhRBOABIAdAPgA6C/EMKnso9LZDFCAHFxQGSkEpgNBuV9ZKRyXgi1KyQAzgZnRLWOQlp4Gnp69sT4zePhP90fP/7+o9qlORwtbqNLRGRp5oTncAAzAXgJIf4GMBrACAs89yMAfpNS/iGlvApgIYBeFnhcIssxBejCGJzt0n2178Oi5xdh3UvrICHR+dvO6LukL/4+97fapTkMLW6jS2QN7P3Xt9uGZyGEAUCQlLITgAYAvKSU7aSUmRZ47vsA/FXoOPv6ueI1hAohkoQQSadOnbLA0xKVg6lVo7DCPdBkdzo/2BkpYSl47/H3sCJtBbwSvBC3Mw7XCizSbaZrWtxGl8jS2PtPtw3PUsoCABHX/3xRSnnegs9d0tDdLYlESpkopQySUgY1aNDAgk9PVIbCPc6RkUBBwc0WDgZou1bduTreDX4Xh0cexmNuj+G19a+hRWILbM/arnZpmhYSAiQmAu7uys0Xd3fl2B620SWyFS31/nOE3DrMadv4UQgxVghxvxCirunNAs+dDeD+QseNABy1wOMSWYYQgKtr0R5nUw+0qytbNzTgwboPYvWLq7H0haX499K/aDenHYauGIp/cv9RuzTNCgkBMjKUa8mMDAZn0h+t9P5zhNx6RFlrowoh/izhtJRSPlCpJxbCGcCvADoC+BvAHgAvSilL3TYsKChIJiUlVeZpyVakLBouix9riSN9LTp24eoFvL/lfUzeNRm1q9XGpE6TMCRwCAyCe0URkfk8PJQgWpy7u3JBaS+0Uqc9E0IkSymDip8v87eGlLJxCW+VCs7XH/calJaQdQCOAPjudsGZNMTR1kYuHpQZnK3KWrcZa1atiUlPTsL+4fvhd5cfhq0chrZftcX+4/st8wREpAta6f3Xygi5Fpmzw2AVIcSrQogl198ihBBVLPHkUsofpJQPSykflFLa2Y8dVQjXRqZKsMVtRt+7fLF54GZ888w3+P3f39EisQVGrx2Nc1fOWe5JiMhhaaX3n6vjWI85bRtfAqgC4Ovrp14GkC+lfMXKtd2CbRsaUTgwm3BtZDKDrW8znrl0Bu9segfTk6bjnpr3YHKXyejr2xeCP6dEpHGmwYjCkxtdXOwz6Nur0to2zAnPB6SUzco6ZwsMzxoipXLf3aSggMGZymQwlHxzQgjlR8ha9vy9B2Grw5B8LBkdG3dEQvcEeNb3tN4TEhHZgNGorAKSlaWMOMfGMjiXR4V7ngHkX99h0PRADwDIt2Rx5GC4NjJVkFq3GVve1xK/vPILEronIOloEvyn++OdTe8gNy+37E8mIrJTXB3HOswJz68D+EkIsVkIsQXAJgBjrFsWaRbXRqZKUHMijpPBCSNbjkR6RDr6+fVD7M+x8J3mi1W/rrL+kxMRkWaYs9rGRgBNALx6/c1TSvmTtQsjjeLayFQJ9jAR5+6ad+Ob3t9g88DNcKnigqcXPI1nFj6DzBxLbKxKRERaZ07PczgAo5Qy5/rxnQD6Symn2aC+ItjzrCFcG5kcwNX8q/hi1xeYuGUipJQYHzwer7V+DVWdqqpdGhERWVllep6HmYIzAEgpzwAYZsniyAFxbWTHUfwCW0etN1WdquKNtm/gSPgRdH2oK8ZtHIdmM5rhpz95842ISK/MCc8GUWjdJiGEEwAOuxDpgaNteFNBbnXcsLTvUqzqvwpXrl3BE988gZeWvoTjF46rXRoREdmYOeF5HYDvhBAdhRBPAFgAYK11yyIi1XHDm1v0eLgHDo88jHfbv4vFqYvhGe+J+N3xyC/gAkRERHphTs+zAUAogE4ABID1AL6UUtr8twV7nolsjBvelOrX078i/IdwbPhjA5o3bI5p3afh0UaPql0WERFZSIU3SSn2IHUBNJJSHrRkceZieCZSATe8KZWUEotTF2P02tE4fuE4QluE4sOOH6LuHXXVLo2IiCqpwhMGr6/vXPt6cN4PYI4QYrI1iiQiO8MNb25LCIEXfF9AWkQaRrcajS/3fgnPeE/M3T8XBdKKWyISEZFqzOl5riOlPAfgWQBzpJQtoLRwEJEj44Y3ZqtdrTYmd5mM5NBkNKnbBINXDEbw3GCknEhRuzQiIrIwc8KzsxCiIYAXAHCrLSK94IY35dbsnmbYNmQbZvecjSOnjiBwZiDGrh+L81fOq10aERFZiDkTBvsAeBfANinlSCHEAwA+lVI+Z4sCC2PPM5EKuOFNhZzOPY1xG8dh1t5ZuK/Wffii6xd4zvs5CH7viIg0wSITBtXG8ExEWrMrexfCVodh//H96PJgF8R3j8dDdR9SuywiIipDZXYYJCKiCmrVqBX2DNuDKV2nYMdfO+A3zQ8xm2Nw+dpltUsjIqIKYHgmIrIyZ4MzXn30VaRHpONZ72cxcctE+E3zw9rfuN8UEZHWMDwTkXmKt3hpqOXLXjSs1RDzn5uPDS9vgLPBGd2M3fD8d8/jr7N/qV1aiYxGwMNDWebbw0M5JiKyNK291tw2PAshvK5vy12z2Pmu1i2LiOxKTEzR5elMy9jFxKhZlWZ1fKAjDow4gNgnYrH6f6vhneCNz3Z8hrz8PLVLu8FoBEJDgcxM5Z87M1M5tvdfakSkLVp8rSk1PAshXgWwAsAoAIeEEL0K/fWH1i6MyoEjgmRNUgI5OUXXdzat/5yTw5+3CqrmXA1vP/Y2UkemokPjDnj9x9cRODMQP2f+rHZpAIDoaCA3t+i53FzlPBGRpWjxtabU1TaEECkAWkspLwghPAAsATBPSjlFCLFPShlouzIVXG2jBDExSoAxrcNrCjaurhwVJMspHJhNCq//TJX2ffr3GLVmFLLOZmFgs4H45MlPcFeNu1Srx2Ao+bpICGW/HCIiS7Dn15qKrLbhJKW8AABSygwAjwPodn1rbv62tAccESRbMW2QUhiDs0X19OyJ1JGpGNduHOanzIdnvCdmJM1AfkG+KvW4uZXvPBFRRWjxteZ24fm4ECLAdHA9SD8FoD4Af2sXRmYovOPblCnK5ZtpK2UGG/2xZvuO6cKsMG7RbXE1qtbAhx0/xIERBxB4TyDCVoehzVdtkHw02ea1xMYCLi5Fz7m4KOeJiCxFi681twvPAwAcL3xCSnlNSjkAQHurVkXm44ggAdad0Ff4jkZkpHIfzXTBxgBtFd4NvLFxwEYYnzUiMycTj3z5CEb9MAo5l3NsVkNICJCYCLi7Ky8n7u7KcUiIzUogIh3Q4mtNqeFZSpktpTxeyt9tt15JVC4cESRrt+8IofTQF76jYbrj4erKCzUrEULgRf8XkRaRhvCW4ZiWNA1e8V4wHjTCVjvDhoQAGRnK9VJGhn3/MiMi7dLaaw2359ay4iOCcXG3HjPY6IMtJvRJWfSxih/bEaNRmamdlaX0zcXG2v+LcVn2HtuLsNVh2P33bjzu8TimdZ8G7wbeapdFROSwSpswyPCsdVxtg0ykVPreTQoK7DbcWpNpzdDCSx+5uNj/bUBzFMgCzEqehXEbx+H81fMY23os3mn/DmpUraF2aUREDqfS4VkIURuAs+lYSvmv5cozD8NzKTQ0IkhWwqXkbvDwUBbZL87dXbkd6AhOXjyJNze8ibn758Ktjhumdp2Knp49IXT2b01EZE0VWarO9InDhRAnABwEkHz9jQnWnhT/hclfoPrCCX1FZGWV77wW3VXjLszpNQdbB21F7Wq18cyiZ9BzYU/8eeZPtUsjInJ4ZYZnAGMB+EopPaSUja+/PWDtwojITJzQV4QW1wytqMfcH8Pe0L347MnP8NOfP8Fnmg9it8biyrUrapdGROSwymzbEEKsBfCslDL3th9oA2zbILoNtu8AcOye59vJPpeNqHVRWJK6BA/XexgJ3RPQ6YFOapdFRKRZFW7bADAOwA4hxEwhxFTTm+VLJKJKYfsOAG2uGWoJjWo3wuI+i7EmZA3yC/Lx5Lwn0f+//XH0/FG1SyMicijmjDzvBrANQAqAG7uMSym/tm5pt+LIMxFR2S5fu4xJ2ybho20foapTVbzf4X2EPxIOZ4Nz2Z9MREQAKrHahhBih5SyjdUqKweGZyIi8/3272+I+CEC635fh2Z3N8P0HtPR+v7WapdFRKQJlWnb+EkIESqEaCiEqGt6s0KNRERkQQ/VfQhrQtZgSZ8l+Cf3H7T5qg2GfT8Mp3NPq10aEZFmmTPyXNLaR1KNFTc48kxEVDHnr5zHe1veQ9yuOLhWd8WkTpMwOHAwDMKcMRQiIv2p8MhzoeXpGnOpOiIibapVrRY+7fwp9g3fB+8G3nhl5Sto91U7HDh+QO3SiIg0xawhByGEnxDiBSHEANObtQsjIiLL87/bH1sHbcXcXnPxv3//hxaJLRC1NgrnrpxTuzQiIk0wZ4fBCQD+c/2tA4BPAPS0cl1ERGQlQggMDBiI9Ih0DGs+DFN+mQLvBG98d/g7lNXKR2RrRiPg4QEYDMp7o1HtikjvzBl5fh5ARwDHpZSDATQDUM2qVRERkdXVvaMupj81Hbte2YV7at6Dvkv6ovO3nfHr6V/VLo0IwM1NjzIzlX2fMjOVYwZoUpM54fmSlLIAwDUhRG0AJwGw55n0qfioHEfpyAE8ct8j2P3KbsR3i8fuv3fDf7o/3t30Li7lXVK7NNK56Oiiu4UCynF0tDr1EAHmheckIYQrgFkAkgHsBbDbqlUR2aOYGCAq6mZgllI5jolRsyoii3AyOCH8kXCkR6TjBd8X8MHPH8B3mi9W/7pa7dLIgZS3BSMrq3zniWzBnNU2Rkopc6SUMwA8CWDg9fYNIv2QEsjJAaZMuRmgo6KU45wcjkCTw7in5j2Y13seNg3YhGrO1fDUgqfQe1FvZJ1lWqHKqUgLhptb+c4T2YI5EwaHmv4spcwAcPj6JEIi/RACiIsDIiOVwGwwKO8jI5XzQqhdIZFFdWjcAQdGHMBHHT/Cut/WwTvBG5O2TcLV/Ktql0YaVZEWjNhYwMWl6DkXF+U8kVrM2SRlPgBXAEMB1AMwB8AWKeVY65dXFDdJIdVJqQRnk4ICBmdyeJk5mRi9bjSWpy2Hd31vTOsxDY97PK52WaQxBkPJN+mEUF5KS2M0KgE7K0sZcY6NBUJCrFcnkUllNkl5EcDXAFIA/ABgtBrBmUh1plaNwgr3QBM5KHdXdyzruwwr+6/EpWuX0OHrDnh52cs4ceGE2qWRhlS0BSMkBMjIUAJ2RgaDM6nPnLaNJgAiAfwXQAaAl4UQLrf9JCJHU7jHOTJSeRU3tXAwQJNOPPXwUzg88jDeeewdLDq0CJ7xnkjYnYD8gny1SyMNYAsGOQpzVttYCeBdKeVwAMEA/gdgj1WrIrI3QgCurkV7nE090K6ubN0g3XCp4oL3n3gfKWEpCLo3CBFrIvDol49iz9/8tUC3FxICJCYC7u7KS6a7u3LMkWTSGnN6nmtLKc8VO9dESvk/q1ZWAvY8k+qkLBqUix8T6YiUEt8d/g5R66Jw/MJxjAgagdgnYnHnHXeqXRoRUaWVu+dZCPEGAEgpzwkh+hT7ay5VR/pUPCgzOJOOCSHQ168v0iLSEPloJGYmz4RnvCe+OfANt/kmIod1u7aNfoX+PK7Y33W1Qi1ERKRBtavVRlzXOCSHJuOhug9h4PKBCJ4bjEMnD6ldGhGRxd0uPItS/lzSMRER6VzAPQHYNmQbvnz6Sxw+dRiBMwPxxo9v4MLVC2qXRkRkMbcLz7KUP5d0TEREBIMwYGjzoUiPSMfAZgPx6Y5P4Z3gjaVHlrKVg4gcwu3CczMhxDkhxHkATa//2XTsb6P6iIhIg+q71MeXPb/E9iHbUfeOunjuu+fQY34P/P7v72qXRkRUKaWGZymlk5SytpSylpTS+fqfTcdVbFkkERFpU5v72yA5NBlxXeLwc9bP8J3mi/e2vIfL1y6rXRoRUYWYs84zERFRhTkbnDG61WikhafhGa9nMGHzBPhP98f639erXRoRUbkxPBMRkU3cV/s+LHx+Ida/tB4CAl2+7YIXFr+Av8/9rXZpRERmY3gmIiKbevLBJ5ESloL3O7yPlb+uhFeCFybvnIy8/Dy1SyMiKhPDMxER2Vw152p4p/07ODzyMNq7t8eY9WPQIrEFtmdtV7s0IqLbYngmIiLVPHDnA1jVfxWW9V2GnMs5aDenHYasGIJTF0+pXRoRUYkYnomIyCaMRsDDAzAYlPdGo3JeCIFnvJ7BkfAjeLPtm5h3cB484z2RmJyIAlmgZslERLdgeCYiIqszGoHQUCAzE5BSeR8aejNAA0CNqjXwcaePcWDEATS9uymGrxqONrPbYN+xfeoVTkRUDMMzEamj+G5zet19Tiffh+hoIDe36LncXOV8cT4NfPDTwJ8wr/c8/JnzJ4JmBeHVNa/i7OWztimWiOg2GJ6JtErLoSsmBoiKulmzlMpxTIyaVdmejr4PWVnlOy+EwEtNX0J6RDrCgsIQvzseXglemJ8yn9t8E5GqGJ6JtEjLoUtKICcHmDLl5tcQFaUc5+Ro6yKgMnT2fXBzK995E9fqrojvHo/dw3ajUe1GCFkagk7zOiHtnzTLF0lEZAaGZyKt0XroEgKIiwMiI5WaDQblfWSkcl4ItSu0DZ19H2JjAReXoudcXJTz5gi6Nwi7hu7C9B7TsffYXjSd3hTRG6ORm5db9icTEVmQ0NLtr6CgIJmUlKR2GUTqKxyYTbQWuqRUAqNJQYF2arckHX0fjEalxzkrSxlxjo0FQkLK/zgnL57EGz++ga8PfA33Ou74T7f/4GnPpy1fMBHpmhAiWUoZVPw8R56JtMg0almY1oJzVFTRc4XbUPRCZ9+HkBAgI0O5PsjIqFhwBoC7atyFuc/MxZZBW1Czak30XNgTvRb2QkZOhgWrJSIqGcMzkRZpOXQVHjWPjFSSlKl1QStfgyXw+1Bp7d3bY9/wffik0yfY8McG+CT44KOfP8LV/Ktql0ZEDozhmUhrtB66hABcXYu2mZh6f11dtTN6Xln8PlhEFacqeL3t60gLT0O3Jt3w9qa30WxGM2z6c5PapRGRg2LPM5EWxcQokwNNocsUqF1dtbHiBqDUXDggFj/WC34fLOqH//2AUWtG4Y8zf6C/X3983vlzNKzVUO2yiEiDSut5Zngm0iqGLqISXcq7hI+3fYyPt3+M6s7V8X6H9zGy5Ug4G5zVLo2INIQTBokcTfGgzOCsHVre4EYD7qhyByZ2mIhDYYfQqlErRK6NRMtZLbEre5fapRGRA2B4JiKyJS1vcKMxTeo1wdqQtfju+e9w8uJJtJ7dGqErQ3E697TapRGRhjE8Ezk6jnLaD61vcKNBQgj08e2DtPA0vNbqNXy17yt4JXhhzr45KJAFapdHRBrEnmdzsb+UtMgRJhY6GkfY4EbDUk6kIGx1GLb/tR1t72+LaT2moendTdUui4jsEHueK4O3WUmLOMppn7S+wY3G+d/tj62Dt2JOrzlIP52O5jObY8y6MTh/5bzapRGRRjA8l4UBhLSq8LrBU6YoW0Cb1oZmWFOPlje4cRAGYcCggEFIj0jH0MChiNsVB68ELyw+vBhauhtLROpg24Y5eJuVtExKJTibFBTw51YtxTe4iYu79Zj/Nja3K3sXRq4eiX3H96Hzg50R3y0eTeo1UbssIlIZ2zYqg7dZSavKGuXU0MWzQ+CugnapVaNW2D1sN6Z2nYpd2bvgN90PE36agEt5l9QujYjsEEeezcGRZ9Ki4qOcdeoA338P7N+vHE+eDLz2GicPqoETkO3WsfPHMPbHsZifMh8P3PkA4rvFo1uTbmqXRUQq4MhzRRUPIAUFN3tI2adI9qzwKOfkycDZs0pwDghQgvRrr7F3Xy3c4MZuNazVEMZnjdg4YCOqGKqg+/zueO675/DX2b/ULo2I7ARHns3B5b5Iy0yjmryDQlQuV/Ov4vMdn+P9re/DIAyYEDwBo1uNRhWnKmqXpilGIxAdDWRlAW5uQGwsEBKidlVEZStt5Jnh2Vy8zUqOgJMHicotIycDkWsj8X369/Bt4ItpPaahvXt7tcvS9yvZVwAAIABJREFUBKMRCA0FcnNvnnNxARITGaDJ/rFto7J4m5W0jkukEVWIh6sHVvRbgRX9VuDC1QsInhuMgcsH4uTFk2qXZveio4sGZ0A5jo5Wpx4iS1AlPAsh+gghDgshCoQQtyR6IrIw9u4TVVpPz55IDU/F2+3exoKUBfCM98T0PdORX5Cvdml2KyurfOeJtECtkedDAJ4FsFWl5yfSFy6RRmQRLlVcENsxFgfDDqJ5w+YY+cNItJrdCklHVWoptHNubuU7T6QFqoRnKeURKWW6Gs9NpFsxMUUnB5oCNCe9EpWbV30vbHh5A+Y/Ox/Z57LxyKxHEL46HDmXc8r1OEYj4OGhTEXw8FCOHUlsrNLjXJiLi3KeSKvY8+zIit+K5615Yu8+kcUIIdDfvz/SwtMw6pFRmJE8A57xnph3YJ5Z23ybJtNlZiovz5mZyrEjBeiQEGVyoLu78nLj7s7JgqR9VlttQwixAcA9JfxVtJRyxfWP2QxgrJSy1PtdQohQAKEA4Obm1iIzM9MK1TogLq9HFcFVZYgqbN+xfQhbHYZf/v4Fwe7BmNZjGnwa+JT68R4eSmAuzt0dyMiwWplEZCabr7YhpewkpfQr4W1FOR8nUUoZJKUMatCggbXKdSxSKsG58GQw02QxbohBpYmJuXXr7qgoXmyReXinC4ENA7Fj6A4kPpWIgycOotmMZnhrw1u4ePViiR/PyXRE2sS2DUdUeDLYlClKM51plQVuiEEl4QUXVQYvvG4wCAOGtRiG9Ih0DGg6AJO2T4J3gjeWpy2/pZWDk+mItEmtpep6CyGyAbQGsFoIsU6NOhyaKUAXxuBMpeEFF1WUji+8bjfZr0GNBpjdaza2Dd4G1+qu6L2oN55e8DT+OPPHjY/hZDoibeIOg46KWzFTRXAHQqoIHb7elGfnvLz8PPxn938wYfMEXCu4hujHovF6m9dRzbkat64msmPcnltPim+IERd367GD/kKjStBhACIL0tmFV0Um+2Wfy8Zr617D4tTFaFK3CRK6J+DJB5+0ZplEVAncnltPuCEGmat4jyp3IKSK0OHW7xWZ7NeodiN81+c7rA1ZCwmJzt92Rr8l/XD0/FHrFElEVsHw7Ki4IQaVpfAkLyGAOnWAgADlPS+4yFw6vfCqzGS/Lg91QUpYCiY+PhHL05bDK94LX+z6AtcKrlm2SKJCHH1DHltieHZk3BCDSlPSJK+zZ4H9+5X3pkDNCy4qi07vdFV2sl915+oYHzweh0ceRlu3tohaF4UWiS2w468dli+WdE8PG/LYEnueifSKPc5kSTrcYMdSk/2klFiWtgyRayORfS4bQwOH4uNOH6O+S33LF00WpZUJn9yQp2I4YZCIbqWzSV5E9uzC1Qt4b8t7iNsVh9rVamNSp0kYEjgEBsGbxPaoPCuuqM1gKLmDSgjlZZ9KxgmDRFSUDid5EdmzmlVr4pMnP8G+4fvg28AXw1YOQ9uv2mL/8f1ql0YliI4uGpwB5Tg6Wp16bocb8lgWwzORHul0kheRFvjd5Yctg7bg62e+xu///o4WiS0weu1onLtyrtKPzUljlqOl7dW5IY9lMTwT6ZFOJ3kRaYUQAgOaDUB6RDqGtxiOqb9MhVe8FxYeWnjLNt/m4qQxy9LSaG5IiNJO4u6uvLy7u9tne4lWsOdZq3Q4OYesgD9HRJqw5+89CFsdhuRjyejYuCMSuifAs75nuR6Dk8YsS0s9z1Qx7Hl2JIXX5wVu3oLnkmJUXlzOkEgTWt7XEr+88gsSuicg6WgS/Kf7451N7yA3L7fsT75OS20GWsDRXP1ieC6v4iP1th65L2l9XlPvak4Oe1WJiByUk8EJI1uORHpEOvr59UPsz7HwneaLVb+uMuvztdRmoBUhIcqofUGB8p7BWR8YnsvDHkZ8C/emTpmizPowTfri+rxERA7v7pp345ve32DzwM1wqeKCpxc8jWcWPoPMnBJ6MgrhpDEiy2B4Npc9jfiaAnRhDM5ERLoS7BGMfcP3YVKnSfjxjx/hneCNj7d9jKv5V0v8eHttM+AKIKQ1DM/msuaIb3lbQbg+LxERAajqVBVvtH0DR8KPoOtDXTFu4zg0m9EMP/35U4kfb29tBo66AggvCBwbw3N5WGPEt7ytIFyfl4iIinGr44alfZdiVf9VuHLtCp745gm8tPQlHL9wXO3SbktLG42Yy1EvCOgmhufysPSIb0VaQbg+LxGpTe2J01SqHg/3wOGRh/Fu+3exOHUxPOM9Eb87HvkF+WqXViJHXAHEES8IqCiu82yu4iO+cXG3HlckuBZ+XBNzHo/r8xKRGmJilIt702uU6TXs/+3de5yMdf/H8fdndx1TLel0p3NZ5zM55aYokdxKpdxSirB7J7cOuvmh3CXdd4l72ZKEVOgkSXLKsZDzcbdzUiqqFTnb7++Pna2xLLNrdq45vJ6Pxz52Z+aa2Y/vXDve853P9b0SE1kuM8x8+vOnSp6RrDlfzlGtc2sprXWa6p1XLzgPHqT/g6Jx7em4uLznvrKyQl8PCo51nk9WYc34FrQVhPV5gfARKzOx4XTgNE6o/BnlNevvszS5/WRt27VN9cfUV/fp3fXL3l9O7oGDuPJUNK4AwpKAMcA5FzFftWvXdp7Lyjr+5YI8Xq9ezmW//GR/9ep18o8LIDQGDjzybzbnb3rgQC+rKjy8ZkWknft2ut4ze7v4R+Nd2afKupdWv+SyCvKc+T//Oc977sv5NHGicxde6JxZ9veJE/NfVjiZONG5kiWP/BMpWTLy/12xSNIKd4w86nkgzs9XWITnYCqEFyEAIRSrf8NZWUcmg2j9d0ahNdvWuAZjGjgNkms8trFb98O6/D8Ib6BOKNreEMSqvMIzPc9eo38QiGz+rQs5ovmkRbH2741CWS5L49aM00OzH1Lmvkz1rt9bA5sOVKmipQJ/EOeym3v/eNAsnn9Enbx6ngnP4cBx8B8Q0WIlSPgH52AeOA1P/LznZz0y9xG9sOoFnXfqeRrecrhurHij7ETPIW+gECM4YDCccfAfELlygoS/aF1znaUys+V+biP0uT6j5Bka3Wa0PurykcqWLKv2r7dXq1db6fNfPs/7TrnfQHGuAcQgZp4BoKBidSY2lj8ti9JWu0NZhzTqk1HqP6+/Dhw+oEcaP6KHGz+s4gnFj944SscAyC2vmecEL4oBgKiQ10ysFPkzsccLyLH6aZnzW6pPOvrNUgS/iUiIS9B9V9yn9pXaq8+sPhq0YJBeXveyUlulquVlLY/ceNCgo/eHaH2jCBwDM88AcLKibSaWmcW8xUi/75wv5yh5RrI+/flTta/UXsOuHaZyp5XzuiwgpOh5BoDCEk0zsf6zq5wI5WgFPbFVhGl+SXOt675O/272b03/dLoqpFbQ0x89rYOHD/65UZT0fgP5RXgGAPzJ/yDA4cOzVxGJ9h7u/IihA0SLJRRTvyb9tKnnJjW9qKkemP2Aao2upcVbFgf1LINApCE8AwCOFCOzq/kWoytNXFz6Yr1727uaeutU/bb/N1350pW668AUbX+BTycQmwjPAIAjxdDsar7E8FJ9Zqa2FdpqU89N6tuoryaW+ExJDxTT84uHKyueTycQWzhgEADwp1hdfi8/ou0A0QLYtH2Tkt9L1vxv5qveVintPanWd1F6ciDELA4YBACcWAzPrgYsmg4QLaBKZStq3ppqmvim9E2iVLer9I9/1VTm3l+9Lg0odMw8AwCOxuwq8pLr04nMIQP1f48106iia3WmSurpm57X7VU7nvg030CYY+YZQHRgeazQYHYVecn16URiidL63xOrtXx3B11gifr725101YSrtHn7Zq8rBQoFM88AIgcn7wDCxzE+nTjssjRm1Rj1ndtXvx/4XX0a9FH/Jv11StFTvKsTKCBmngFENk7eAYSXY3w6ER8Xr3vr3KuMlAx1rNZRTy55UpVGVdI76e8okibrgONh5hlA5IiRUyMD0WLRN4vUc0ZPbfhpg64vf71GtByhi0tf7HVZkYtjEUIqr5lnwjOAyOJc9lnvcmSxPBYQzg4ePqgRy0Zo4PyBOuwOq/+V/fVAwwdULKGY16VFFtrWQo62DQCRj5N3ABGnSHwR9WnYR+kp6bq+/PXq/2F/VXuumuZ8Ocfr0iIHbWthhfAMIDLE6KmRgWhR7rRyev3m1/V+x/d1OOuwWrzcQre9eZu+3/W916WFP//11ocPz/70rTBOXMRqRgGhbQNA5OBjSyAq7Du0T0MXD9WQxUNUNL6oBjcbrOR6yUqIS/C6tPBWmG1rvL4ehbYNAJFv0KAjZ1lyZmNi9IUdiFTFE4prYNOB2tBzgxqe31D3f3C/6oyuo4+//djr0sJXYbat0RaSL4RnAJGFk3cAUeOyMpfp/Y7v642b39COPTvUcGxDdZ3WVT/v+dnr0sJLYbethaotJErQtgEAADy3a/8uPbbgMQ1bOkyJxRM1tPlQ3VXzLsUZ83ySQtNWwWpGR2CpOgAAEPbW/7hePWf01OIti9WgXAOltU5T9XOqe11WeCjMdZ5ZR/8o9DwDAICwV/Xsqlp450KNaztOn/3ymWqPrq3eM3vrt/2/eV2a9wqrbY3VjPKF8AwAAMKKmalzjc7KSMlQ11pdNXzZcFUcWVFTNk7hNN+FwSy7/cN/pjmnBzoxMWZnnvNC2wYAAAhry79brh7v9dCqbavU4pIWSm2VqvJnlPe6rOjD6b+PQNsGAACISPXOq6fl9yxX6nWpWvbdMlVNq6oBHw7Q3oN7vS4turCaUUAIzwAAIOzFx8UruV6yMlIydEvlWzR44WBVHlVZMz6b4XVpiDGEZwAAEDHOKXWOXm73subdMU/FEoqp9autdePkG7Vl5xavS0OMIDwDAICI0+ziZlrbfa2GXD1EMz+fqYojK+qpJU/pwOEDXpeGKEd4BhCech/MHEEHNwMIjaLxRdW3cV9tTt6sFpe00MNzHlbN52tqwdcLvC4NUYzwDCD8DBp05NqiOWuQBussWgCiyoWJF2pqh6ma1mGa9hzco6bjm+qOt+/Qj7t/9Lo0RCHCM4Dw4lz2KWj9F+fPWbw/M5MZaAB5apPURht7blS/K/tp0oZJSkpN0qhPRulw1mGvS0MUYZ1nAOGH08QCOEkZOzKUPCNZc7+aq9rn1lZa6zTVPa+u12UhguS1zjPhGUB4ck6K8/twLCuL4AwgX5xzmrxxsnp/0Fs/7v5R3et01+NXPa7SJUp7XRoiACdJARA5cmae/fn3QANAAMxMHap0UHpyuu674j49v/J5JaUmacLaCZzmGwVGeAYQXvxbNnr1yp5x7tXryB5oAMiH04ufrmdbPquV3Vbq0jKXqvPUzmo6vqk2/rTR69IQgQjPAMKLmZSYeGSP87Bh2ZcTE2ndAFBgNc6poSVdluiFNi9ow08bVOP5Gnpo9kPafWC316UhgtDzDCA8OXdkUM59GQBOwo49O9R3Tl+9uPpFlTutnIa3HK52FdrJeJ2BDz3PACJL7v/A+A8NQBCVLVlWY24YoyVdlqhMiTK6acpNav1qa33xyxdel4YwR3gGAAAxq+H5DbWy20oNu3aYFm1ZpCppVTR4wWDtO7TP69IQpgjPAAAgpiXEJej++vcrPTldbZPaasD8AaqWVk2zvpjldWkIQ4RnAAAASeeddp4mtZ+kWX/PDs3XTrxWt75xq7777TuPK0M4ITwDAAD4aXFpC63vsV6Dmw3WtIxpqjCygp75+BkdPHzQ69IQBgjPAAAAuRRLKKb+TfprY8+NanJhE/WZ1Ue1R9fWki1LvC4NHiM8AwAA5OGS0pdo+m3T9dYtbylzX6Yav9RYXd7pou2/b/e6NHiE8AwAAHAcZqZ2FdtpU/ImPdTwIb287mUlpSZp9MrRynJZXpeHECM8AwAABKBU0VIa2mKo1ty7RlXPrqp7p9+rhi821Optq70uDSFEeAYAAMiHymdV1vzO8zXhbxP0VeZXqvNCHd33/n3auW+n16UhBAjPAAAA+WRm6lS9kzJSMtSjTg+lLk9VhZEV9Or6V+Wc87o8FCLCMwAAQAElFk9UaqtULe+6XOVOK6eOb3VU85ebK31HuteloZAQngEAAE5Snb/U0dK7lyqtdZpWbVulamnV1G9uP+05uMfr0hBkhGcAAIAgiI+LV/c63ZWRkqHbq96uJxY/oUojK+ndjHe9Lg1BRHgGAAAIorNOOUvj/jZOC+5coFJFS+mGSTeo7aS2+jrza69LQxAQngEAAApBkwubaPW9q/VU86c058s5qjSykoYsGqIDhw94XRpOAuEZAACgkBSJL6IHGz2o9OR0XXf5dfrXvH+p+nPVNe+reV6XhgIiPAMAUBC5lyNjeTIcx/mnn683b3lT793+ng4cPqCrJ1ytjm911LZd27wuDflEeAYAIL8GDZJ69/4zMDuXfXnQIC+rQgRodXkrbeixQQOaDNAbm95QhZEV9L9l/9OhrENel4YAEZ4BAMgP56TMTGn48D8DdO/e2ZczM5mBxgmVKFJCjzZ7VBt6bFD9cvV138z7VO+Felq2dZnXpSEAFklnwalTp45bsWKF12UAAGKdf2DO0auXNGyYZOZdXYg4zjm9sekN3f/B/dq2a5u61uqqIc2HqEyJMl6XFvPMbKVzrs5R1xOeAQAoAOekOL8PcLOyCM4osF37d2nQ/EEavmy4SpcoraeaP6XONTorzmgS8Epe4ZlnBACA/MqZefbn3wMN5NOpxU7V09c+rVX3rlL5M8qry7QuavJSE637cZ3XpSEXwjMAAPnh37LRq1f2jHOvXkf2QAMFVO3salp01yKNvWGs0nekq9bztdTngz7atX+X16XBx5PwbGb/MbN0M1tnZm+bWaIXdQAAkG9mUmLikT3Ow4ZlX05MpHUDJy3O4nRXzbuUkZKhu2verWeWPqMKIyvo9Y2vK5LabaOVJz3PZnaNpHnOuUNmNlSSnHMPn+h+9DwDAMKGc0cG5dyXgSBZunWperzXQ2t+WKNrLr1Gqdel6vIzLve6rKgXVj3PzrlZzrmcBQ2XSirnRR0AABRY7qBMcEYhqV+uvj7p+olGtByhpVuXqkpaFQ38cKD2HtzrdWkxKRx6nrtIet/rIgAAAMJVQlyC/nHFP5SenK72ldrrsYWPqWpaVb3/GREq1AotPJvZHDPbcIyvtn7b9JN0SNIrx3mcbma2wsxWbN++vbDKBQAACHvnnnquXrnxFc29Y64S4hLU6tVWaj+lvb7d+a3XpcUMz9Z5NrPOkrpLuto5tyeQ+9DzDAAAkG3/of165uNnNHjhYMVZnAY1HaReV/RSkfgiXpcWFcKq59nMWkp6WNINgQZnAAAA/KlYQjE9cuUj2pS8SVddfJUenP2gaj5fU4u+WeR1aVHNq57nVEmnSpptZmvM7DmP6gAAAIhoFyVepGm3TdM7Hd7R7gO71WRcE9059U799PtPXpcWlTg9NwAAQJT4/cDvenzR4/rvR//VKUVP0ZCrh6hrra6Kj4v3urSIE1ZtGwAAAAi+U4qeoieufkJru69VzXNqqsd7PdTgxQZa+f1Kr0uLGoRnAACAKFPxzIqae8dcvXLjK9qyc4vqvlBXKTNSlLkv0+vSIh7hGQAAIAqZmW6versyUjKUUi9FaSvSlJSapInrJnKa75NAeAYAAIhipxc/XSOuG6FPun6iixIvUqe3O6nZ+GbatH2T16VFJMIzAABADKh1bi19fPfHev7657Xux3Wq/lx19Z3TV78f+N3r0iIK4RkAACBGxFmcutXupoyUDHWq1klDlwxVxZEVNTV9Kq0cASI8AwAAxJgzTzlTY9uO1aK7Fun04qer3eR2avNaG33565delxb2CM8AAAAxqvEFjbWq2yo9fc3TWvDNAlUeVVn/Xvhv7T+03+vSwhbhGQAAIIYViS+ifzb4pzYnb1ab8m30fx/+n6qmVdXsL2Z7XVpYIjwDAABA5U4rpyk3T9HMjjPl5HTNxGvU4Y0O+n7X916XFlYIzwAAAPjDtZddq/U91uvRpo9qavpUVUitoGeXPqtDWYe8Li0sEJ4BAABwhOIJxTXgrwO0sedGNbqgkXp/0Fu1R9fWR99+5HVpniM8AwAA4JguLXOpZtw+Q2/e8qZ+2fuLGo1tpHum3aMde3Z4XZpnCM8AAADIk5npxoo3anPyZj3Y8EGNXzteSalJGrNqjLJcltflhRzhGQAAACdUqmgpPdXiKa2+d7Uqn1lZXd/tqkZjG2nND2u8Li2kCM8AAAAIWJWzqmjBnQs0/m/j9cUvX6j26Nq6f+b9+m3/b16XFhKEZwAAAOSLmemO6ncoIyVD99a+VyOWjVCF1AqatGFS1J/mm/AMAACAAildorRGtR6lZfcs019O/Ytue/M2tXi5hTJ2ZHhdWqEhPAMAAOCk1D2vrpbds0wjW43Uiu9XqGpaVfWf1197Du7xurSgIzwDAADgpMXHxatn3Z7KSMlQhyod9Piix1V5VGVN/3S616UFFeEZAAAAQXN2qbM1od0Efdj5Q5VIKKE2r7VRu8nt9E3mN16XFhSEZwAAAARd04uaak33NRrafKhmfTFLlUZV0tDFQ3Xg8AGvSzsphGcAAAAUiqLxRfVQo4e0OXmzrr30WvWd21c1nquh+V/P97q0AiM8AwAAoFBdcPoFeuvWtzT9tunad2ifmo1vpk5vd9IPu3/wurR8IzwDAAAgJFqXb60NPTeo/5X9NWXjFFVIraCRy0fqcNZhr0sLGOEZAAAAIVOySEkNvmqw1nVfp7rn1VXK+ymqN6aeln+33OvSAkJ4BgAAQMgllU3SrL/P0qSbJmnbrm2qP6a+ekzvoV/3/up1acdFeAYAAIAnzEy3VrlV6Snp6nVFL41eNVpJqUkav2Z82J7mm/AMAAAAT51W7DQNazlMK7ut1GVlLtOd79ypv477q7bs3OJ1aUchPAMAACAs1DinhhZ3WawxbcYoc1+mEosnel3SUSxcp8SPpU6dOm7FihVelwEAAIBCluWyFGfezfOa2UrnXJ3c1zPzDAAAgLDjZXA+nvCsCgAAAAhDhGcAAAAgQIRnAAAAIECEZwAAACBAhGcAAAAgQIRnAAAAIECEZwAAACBAhGcAAAAgQIRnAAAAIECEZwAAACBAhGcAAAAgQIRnAAAAIECEZwAAACBAhGcAAAAgQIRnAAAAIECEZwAAACBAhGcAAAAgQOac87qGgJnZdknfHOOmspJ2hLicaMZ4BhfjGVyMZ3AxnsHFeAYX4xlcjGf+XOicOzP3lREVnvNiZiucc3W8riNaMJ7BxXgGF+MZXIxncDGewcV4BhfjGRy0bQAAAAABIjwDAAAAAYqW8Dza6wKiDOMZXIxncDGewcV4BhfjGVyMZ3AxnkEQFT3PAAAAQChEy8wzAAAAUOgiMjyb2X/MLN3M1pnZ22aWmMd2Lc0sw8w+N7O+oa4zUpjZzWa20cyyzCzPo3DN7GszW29ma8xsRShrjCT5GE/2zwCYWRkzm21mn/m+l85ju8O+fXONmU0LdZ3h7ET7mpkVM7PJvtuXmdlFoa8ycgQwnnea2Xa//fEeL+qMFGY21sx+MrMNedxuZjbCN97rzKxWqGuMJAGMZ1Mz2+m3fw4IdY2RLiLDs6TZkqo456pJ+lTSI7k3MLN4SSMlXSepkqTbzKxSSKuMHBsk3ShpYQDbNnPO1WCpm+M64Xiyf+ZLX0lznXOXS5rru3wse337Zg3n3A2hKy+8Bbiv3S3pV+fcZZKGSRoa2iojRz7+dif77Y9jQlpk5BknqeVxbr9O0uW+r26S0kJQUyQbp+OPpyQt8ts/HwtBTVElIsOzc26Wc+6Q7+JSSeWOsVk9SZ875750zh2QNElS21DVGEmcc5udcxle1xEtAhxP9s/AtZU03vfzeEl/87CWSBTIvuY/xm9IutrMLIQ1RhL+doPMObdQ0i/H2aStpAku21JJiWZ2bmiqizwBjCdOUkSG51y6SHr/GNefJ+lbv8tbfdeh4JykWWa20sy6eV1MhGP/DNzZzrltkuT7flYe2xU3sxVmttTMCNh/CmRf+2Mb38TETklnhKS6yBPo3+5NvhaDN8zs/NCUFrV4vQy+Bma21szeN7PKXhcTaRK8LiAvZjZH0jnHuKmfc+4d3zb9JB2S9MqxHuIY18Xs0iKBjGcAGjnnvjezsyTNNrN03zvcmBOE8WT/9HO88czHw1zg2z8vkTTPzNY7574IToURLZB9jf0xcIGM1buSXnPO7Tez7sqe1b+q0CuLXuyfwbVK2aed3m1mrSRNVXZLDAIUtuHZOdf8eLebWWdJ10u62h17vb2tkvzf7ZeT9H3wKowsJxrPAB/je9/3n8zsbWV/fBmT4TkI48n+6ed442lmP5rZuc65bb6Pan/K4zFy9s8vzWy+pJqSCM+B7Ws522w1swRJp4uPffNywvF0zv3sd/EF0UN+sni9DCLn3G9+P88ws1FmVtY5t8PLuiJJRLZtmFlLSQ9LusE5tyePzT6RdLmZXWxmRSV1kMQR+AVkZqeY2ak5P0u6RtkHxqFg2D8DN01SZ9/PnSUdNbNvZqXNrJjv57KSGknaFLIKw1sg+5r/GLeXNC+PSQkEMJ65+nFvkLQ5hPVFo2mS7vCtulFf0s6cVi7kn5mdk3NMg5nVU3YW/Pn494K/iAzPklIlnars1oE1ZvacJJnZX8xshvRH316KpA+U/cI1xTm30auCw5mZtTOzrZIaSHrPzD7wXf/HeEo6W9JiM1srabmk95xzM72pOLwFMp7sn/nypKQWZvaZpBa+yzKzOmaWs4pBRUkrfPvnh5KedM4RnpX3vmZmj5lZzqokL0o6w8w+l/RP5b2iScwLcDzvs+zlKtdKuk/Snd5UGxnM7DVJH0tKMrOtZna3mXX3tbxI0gxJX0r6XNkz+T09KjUiBDCe7SVt8O2fIyR14M1y/nCGQQAAACBAkTqSpWUaAAADN0lEQVTzDAAAAIQc4RkAAAAIEOEZAAAACBDhGQAAAAgQ4RkAAAAIEOEZAAqRmR32LamZ8xWyZeDMbKyZ/WRmrMkOAEHCUnUAUIjMbLdzrpRHv7uJpN2SJjjnqoTod8Y75w6H4ncBgBeYeQaAEDOz080sw8ySfJdfM7Ouvp/TzGyF7yQbj/rd52sze8LMPvbdXsvMPjCzL/xOfnAE59xCneA022Z2s5ltMLO1ZrbQd128mf3XzNab2Toz+4fv+qvNbLXv+rF+Z3X82swGmNliSTeb2aVmNtPMVprZIjOrEIxxA4BwkOB1AQAQ5UqY2Rq/y0Occ5PNLEXSODMbLqm0c+4F3+39nHO/mFm8pLlmVs05t85327fOuQZmNkzSOGWfhry4pI2SnitgfQMkXeuc+87MEn3XdZN0saSazrlDZlbGzIr7fufVzrlPzWyCpB6SnvXdZ59zrrEkmdlcSd2dc5+Z2RWSRkm6qoD1AUBYITwDQOHa65yrkftK59xsM7tZ0khJ1f1uusXMuin79flcSZUk5YTnab7v6yWVcs7tkrTLzPaZWaJzLrMA9S1RdoifIukt33XNJT3nOxW1fGG+uqSvnHOf+rYZLylZf4bnyZJkZqUkNZT0upnl/I5iBagLAMIS4RkAPGBmcZIqStorqYykrWZ2saQHJNV1zv1qZuOUPbOcY7/ve5bfzzmXC/R67pzr7psdbi1pjZnVkGSSch8QY0fd+Ui/+77HSco81hsGAIgG9DwDgDd6S9os6TZJY82siKTTlB1Cd5rZ2ZKuK+wizOxS59wy59wASTsknS9plqTuZpbg26aMpHRJF5nZZb67dpK0IPfjOed+k/SVb1Zdlq167u0AIFIRngGgcJXItVTdk2ZWXtI9kvo45xZJWiipv3NuraTVyu5hHqvslooCM7PXJH0sKcnMtprZ3cfY7D++AwA3+OpYK2mMpC2S1pnZWkm3O+f2SbpL2e0Y65U9251Xn3VHSXf77rtRUtuT+XcAQDhhqToAAAAgQMw8AwAAAAEiPAMAAAABIjwDAAAAASI8AwAAAAEiPAMAAAABIjwDAAAAASI8AwAAAAEiPAMAAAAB+n+2UetihKfh1AAAAABJRU5ErkJggg==\n", "text/plain": [ "<Figure size 864x576 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(12,8))\n", "pos , neg = (y==1).reshape(100,1) , (y==0).reshape(100,1)\n", "plt.scatter(X[pos[:,0],1],X[pos[:,0],2],c=\"b\",marker=\"o\",label=\"Admitted\")\n", "plt.scatter(X[neg[:,0],1],X[neg[:,0],2],c=\"r\",marker=\"x\",label=\"Not admitted\")\n", "x_value= np.array([np.min(X[:,1]),np.max(X[:,1])])\n", "y_value=-(theta[0] +theta[1]*x_value)/theta[2]\n", "plt.plot(x_value,y_value, \"g\")\n", "plt.xlabel(\"Exam 1 score\")\n", "plt.ylabel(\"Exam 2 score\")\n", "plt.legend(loc=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Prediction" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "def classifierPredict(theta,X):\n", " \"\"\"\n", " take in numpy array of theta and X and predict the class \n", " \"\"\"\n", " predictions = X.dot(theta)\n", " \n", " return predictions>0" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "For a student with scores 45 and 85, we predict an admission probability of 0.7677628875792492\n" ] } ], "source": [ "x_test = np.array([45,85])\n", "x_test = (x_test - X_mean)/X_std\n", "x_test = np.append(np.ones(1),x_test)\n", "prob = sigmoid(x_test.dot(theta))\n", "print(\"For a student with scores 45 and 85, we predict an admission probability of\",prob[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Accuracy on training set " ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train Accuracy: 89 %\n" ] } ], "source": [ "p=classifierPredict(theta,X)\n", "print(\"Train Accuracy:\", sum(p==y)[0],\"%\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }