{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 机器学习100天——第6天:逻辑回归(Linear Regression)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 第1步:数据预处理\n",
"### 导入库"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 导入数据集\n",
"这里获取数据集"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"dataset = pd.read_csv('../datasets/Social_Network_Ads.csv')\n",
"X = dataset.iloc[:, [2, 3]].values\n",
"Y = dataset.iloc[:,4].values"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 将数据集分成训练集和测试集"
]
},
{
"cell_type": "code",
"execution_count":2,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.25, random_state = 0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 特征缩放"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"d:\\python\\python36\\lib\\site-packages\\sklearn\\utils\\validation.py:475: DataConversionWarning: Data with input dtype int64 was converted to float64 by StandardScaler.\n",
" warnings.warn(msg, DataConversionWarning)\n"
]
}
],
"source": [
"from sklearn.preprocessing import StandardScaler\n",
"sc = StandardScaler()\n",
"X_train = sc.fit_transform(X_train)\n",
"X_test = sc.transform(X_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 第二步:逻辑回归模型\n",
"该项工作的库将会是一个线性模型库,之所以被称为线性是因为逻辑回归是一个线性分类器,这意味着我们在二维空间中,我们两类用户(购买和不购买)将被一条直线分割。然后导入逻辑回归类。下一步我们将创建该类的对象,它将作为我们训练集的分类器。\n",
"### 将逻辑回归应用于训练集"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
" intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
" penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
" verbose=0, warm_start=False)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"classifier = LogisticRegression()\n",
"classifier.fit(X_train, y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 第3步:预测\n",
"### 预测测试集结果"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"y_pred = classifier.predict(X_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 第4步:评估预测\n",
"我们预测了测试集。 现在我们将评估逻辑回归模型是否正确的学习和理解。因此这个混淆矩阵将包含我们模型的正确和错误的预测。\n",
"### 生成混淆矩阵"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.metrics import confusion_matrix\n",
"cm = confusion_matrix(y_test, y_pred)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 可视化"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAEWCAYAAABmE+CbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJztvX18HGd16P89K9myEzt2kGPZTiwblVgxEKrQkFpBrUQS2pASCA1tEwQlvFyX3gIhFC4vbi5c+KlcLq8ht73gJoW0GNJ7CRQMpCW4loipEnDAJKGynVSxnGBLjkXs2LEtW9rz+2N27X2ZWc1oZnZmV+f7+egj7bOzz5yR7Oc8z3kVVcUwDMMwMkkLYBiGYaQDUwiGYRgGYArBMAzDyGEKwTAMwwBMIRiGYRg5TCEYhmEYgCkEw5gWEXmhiGyPae4GETkqIq1RXpsUIjJfRHaJSHPSshjBMYVghEZEVERe4PHeBSKySUTGReQ5EfmJiLy65BoRkXeKyMMickxERkWkX0RuKLimX0TeXvD6wyLyRG6BfEpE/ik3/svc2FERmRKREwWvPywiN4nItpL7v0FEtueu2S8i94pIV8ElHwc+nbv2aMFXVkSOF7zuDfq7U9UpVV2gqnujvLZaiMg2Ebkp/1pVjwN3Af8tMaGMGWMKwYgNEXkesA04CbwIWAJ8DviaiLy+4NIvAO8B/hJoBs4H/gq42mPeNwNvAq5S1QXApcAWAFV9UW7RXADcD7wz/1pV/9plrvcCnwf+GmgBWoG/BV6be3858Argn3PzLyiYfy9wbcHYJpf5G33/wuqHTcBbRGRO0oIYwTCFYMTJLcBR4G2qOqqqx1X160Af8JncyWAN8F+BG1T1vtw1U6q6TVVv8pj3ZcC/qup/AuTm3hhUOBFZBHwM+AtV/aaqPqeqp1R1s6q+P3fZK4GfqeoJn3P+fyLyTyLydRE5ArxRRDpF5AEROZQ7gXwhv1iKSGPuhLU69/qruffvFZEjIjIoIs8Pem3u/VeJyG4ROSwit4vIjwt38yVyrxORn4nIsyIyJiKfKnjv5QXy7xCR382NfxLoBL6YOyF9HkBVR4DngMv8/M6M9GAKwYiTVwL3qGq2ZPz/4uzE1wBXAE+qahAb/QPAn4rI+0XkUhFpmKF8ncA84FsVrrkY2BVw3tcBXwMWAf8ETAI345yQXo5z8vmzCp9/A3Ar8DycU8jHg14rIktxfs/vz933CSov0LcDn1LVc4AXAN/IzbMS+A7wkdw9Pgh8U0SaVfUDwCDwjtwJ6T0F8w0Bv1nhfkYKMYVgxMkSYL/L+P6C95cAo4Vv5nwCh3L2/1WlH1bVrwLvAn4fGAAOiMgHZyBfM3BQVScrXLMYOBJw3m25U0Y2d+L5qao+qKqTqjoMbAS6K3z+G6q6XVVP4ZhfOmZw7auBHar67dx7nwMOVpjnFHBhbqE/oqoP5sb/FPiOqv5r7nn+BfgFHua8Ao7g/O6MGsIUghEnB4HlLuPLC94fL71GVS/AURRNgLhNrKqbVPUqnEXnHcDHROT3A8o3DiyZxs7/DLAw4LxPFr4QkYtE5Hs5Z/mzOGaqJRU+X6ggjwELZnDtikI51Kli+VSFed4CvBDYlXP8X5MbXwXcmFPQh0TkELAuN38lFgKHprnGSBmmEIw4+SFwvYiU/jv7Y5zFajfwb8AFInLpTG6Qs/n/P+Bh4MUBPz4InACuq3DNwzimrUBilbz+EvAo8IKcSea/46HoImQ/cEH+hYgIjrPeFVXdpao3AEuBzwD3iMg8nL/Tl1V1ccHX2aqa9zF4lUtei3OSMGoIUwhGVMwVkXkFXw04ZopzgDtFZFlu/EZgA/B+ddiFs2DeLSKvFCeOvQG43OtGudDRPxCRhSKSEZFX4UQxPej1GTdU9TDO4vw3InKdiJwlInNyztj/lbvsPuClucVxpiwEDgPPichaKvsPouK7OHJfmzsB3Qyc53WxiLxJRJbk/D2HcRb6LPCPwOtyf5uG3N/wFSKSPyGMAW0lc7XinFR+Gv1jGXFiCsGIil8Cxwu+3qKq40AXjuP2P3BMNO8F3qSq/1Tw2b/ACT39LPBrHNPGx4E/wXGUlvIs8OHce4eA/wX8uapuc7m2Iqr62ZxMfwU8jbMjfidnwkzHcE4xrw06dwF/CbwZx67+JRxHc6zk5P4TnN/pOPAbwM+BCY+PXAMM5SKjPg38iaqeVNU9OE7yW3F+P3txnie/dnyeMyalz+bGenFOFScjfzAjVsQa5BhGZUTkhTjJVpdpjf6HyZ269gGvV9X7Y7zPfGAH8HJVreTENlKIKQTDqFNE5GrO+Ek+BPwXoE1VvU4JxizHTEaGUb90AcM40VxXA9eZMjAqYScEwzAMA7ATgmEYhpGjpgpvLZkzR1fPCxP9Z/jhoYVHQWDB3Er5UIZh1ApH9xw9qKqeYcd5akohrJ43j+2Xzih/yQjCtm1kNkxy6fPtd20Y9UD/Tf0jfq4zk5FRTpfTCmDgif5k5TAMo6qYQjBcyQ70AKYUDGM2YQrB8MSUgmHMLmrKh2BUn+xAD5nufrbt3UZXa9f0HzCMOmRBwwJuaL2B5fOXk0npPjpLlv3H93P33rs5OnV0RnOYQjCmpXtEGFhVqWWAYdQ3N7TewIsveDFNC5twCsemD1Wl+UgzN3ADdzxxx4zmSKeqM1LF1j1OLxczHRmzleXzl6daGQCICE0Lm1g+360FiT9MIRi+MH+CMZvJkEm1MsgjIqFMWokphFxd9Z+IyC9E5Jci8j+SksXwR/Y264hoGPVMkieECeAKVf1NnD6wV4vIugTlMaajo4NFJ+yUYBhJcf+W+7l63dX83st+j423bYx8/sQUQq5bVt4VPif3ZZX2Us4zD/bQkDWlYBjVZmpqio998GP83d1/x3d//F2+963v8fiuxyO9R6I+hFxLvh3AAeA+VS1rgSgi60Vku4hsf/rUqeoLaZRx6v4ewJSCYXix8BubabvkCtYsXUvbJVew8BubQ8/58M8epnV1KytXr2Tu3Llcc901bLl3SwTSniFRhaCqU6ragdMM/DIRKWuSrqobVfVSVb30vDlzqi+k4Ureybxtb+CulYZR1yz8xmaWvfdW5jy1D1FlzlP7WPbeW0MrhbH9Yyw//0wE0bIVyxjbPxZW3CJSEWWkqoeAfpwmHkaNkO1rZGpqkh2jO5IWxTBSw3l9nyNz/ETRWOb4Cc7r+1y4iV0M6lFHPiUZZXSeiCzO/TwfuArYmZQ8xgzo6qJ7RDh8/FDSkhhGamj81f5A435pWdHC/oI5RveNsnTZ0lBzlpLkCWE5sFVEHgZ+iuND+G6C8hgzYOuebieT2fwJhgHA5PnuiWFe4365+JKLGXlihKdGnuLkyZN8/5+/zxVXXxFqzlKSjDJ6WFUvUdWXqOqLVfVjSclihMMymQ3jDE9vuIXs/OJGXtn583h6wy2h5m1sbOTWT9zK2/74bfzBy/+AV73mVVx40YWh5iy7R6SzGbOWfBG8gT0DdK/uTlocw0iMI6+/FnB8CY2/2s/k+ct5esMtp8fD0P3KbrpfGd//L1MIRmTklcKO0R10LOtIWhzDSIwjr782EgVQbVIRZWTUDw1ZOHz8kEUeGUYNYgrBiJRT9/ew6AQWeWQYNYgpBCNynnmwBzAns2HUGqYQjFiwctmGUXuYQjBiw8plG0ZtYQrBiI8OJ9LITgmGEQ0ffveHuXzt5Vz7O/FEMJlCMGLFTEeGER2vu+F1/N3dfxfb/KYQjNgxpWDMNjbv3swVd13B2r9ZyxV3XcHm3eHLXwO87PKXsejcRZHM5YYpBKMqWLlsY7awefdmbt16K/uO7kNR9h3dx61bb41MKcSJKQSjanSPCFNTk0mLYRix8rnBz3Fisrj89YnJE3xuMGT56ypgCsGoGlv3dFtPZqPu2X/Uvcy113iaMIVgVBXryWzUO8sXuJe59hpPE6YQjKpjPZmNeuaWzluY11hc/npe4zxu6QxX/hrgvevfy42vupEnHn+C7pd0842vfiP0nIVYtVMjEawyqlGvXLvGyRH43ODn2H90P8sXLOeWzltOj4fhsxs/G3qOSphCMBIj29dIZoMVwatXxo6OMfzMMBNTEzQ1NNF2bhstC1qSFqsqXLvm2kgUQLUxhWAkR1cXDdl+Bp7op/v5PTOaoh4WnXp4hlLGjo6xa3wXWc0CMDE1wa7xXQA1/2z1jPkQjKqxaekYq9cNkunuZ/W6QTYtHQvlT8gvOhNTE8CZRWfs6FiEUsdLPTyDG8PPDJ9WBnmymmX4meGEJApHliyqmrQY06KqZMlOf6EHphCMqrBp6Rjr23cxMm8CFRiZN8H69l1sWjo240zmoIvO2NExBp8cpH9PP4NPDqZi0a23hTNPXsH5HU87+4/vZ+LIRKqVgqoycWSC/cdnHt5qJiOjKmxoG+ZYQ/HCd6why4a2YXoPtMyoJ3OQRSetJox6WDjdTF5NDU2uz9DU0JSAhOG5e+/d3MANLJ+/nExK99FZsuw/vp+799494zlMIRhVYW+T+wJXOO44mf1nMgdZdCrtxJNUCLW+cHop2mVnL2P0udGi33lGMrSd25aUqKE4OnWUO564I2kxYiedqs6oO1on3Be4ovGuLsC/6ajt3DYyUvxP2GvRCboTr5Z5KcgzpBEvRTt+fJz25vbTiq2poYn25nZzKKccOyEYVaFvuI317buKzEZnTWXoGy5e+E6bjnxEHuUXFz8ROkF24tU0LwV5hjRSSdG2LGgpe46kI6qSvn/aMYVgVIXeA85/ug1tw+xtmqB1oom+4bbT44UEVQp+/kO3ndtWtMiD90682uYlv8+QRtKqaN1I+v61gCkEo2r0HmhxVQBu5JXCtr3b6GrtCn3vIDvxKBy9s2UnmmZFm7b71wKmEIzUsugEHJ4XXblsvzvxsI7eWtuJXvnvY7z9nmGWjk9woLmJO65vY8vl/uSstqINQ9L3rwVMIRip5ZkH/ZuOoiTIrteNWtqJXvnvY7zvK7uYd9KRd9n4BO/7iqO8giiFaijasCR9/1ogsSgjEVkpIltFZEhEfikiNycli5Fekmi/2bKgJVSETJw70aijn95+z/BpZZBn3sksb78n+sS4pCOqkr5/LZDkCWES+EtV/ZmILAQeEpH7VPU/EpTJSCFBnMxREcbRG9dONA5T1NLxCTZdDBuuhL2LoPUw9G2BGx+JRnmVmpLam9sT863UekRXNUhMIajqfmB/7ucjIjIEnA+YQqghNi0d8xU5FJbsbYvJ3Fy9yqhhnMJhTU5exGGK+uK6Bt5/xRTH5jqvRxbD+mvh8NkNoWT1Ul7tze10ruwMNXcYajmiqxqkIjFNRFYDlwAPury3XkS2i8j2p0+dqrZoRgUq1SeKnI6OqrXfDFtwLqzJyYs4TFEfvkpOK4M8x+Y642Go1xpN9U7iTmURWQDcA7xHVZ8tfV9VNwIbAS5duDC9laVmIdPVJ/JDkBPG/35iLW9cO0T/E/00NcZ33I9iJx7HTjQOU9ThRvcoLq9xv1hET22SqEIQkTk4ymCTqn4zSVmM4PipT1SJ/Akjr1TyJwygTCnkryW3cY0zlDPoYrb74G72Hd13+vWKBStYs2RNpDJBPKaoKJSMW9jq4EqL6KlFElMIIiLAncCQqsbbF86IhdaJJkbmlf+n96pbVEqQE4bbtXGFcgZZJEuVAXD6dRilUCk3IEqnaPP85jL58+N+5XQLW/3Fny/jm8+LvrjdbEn4S4okfQgvB94EXCEiO3Jf1yQojxGQvuE2zpoq/ifkVp/IiyAnDK9r4zBBBAlPdFtMK437Ib/ILhufIMOZRfbKfx+jZUELnSs76VndQ+fKztCL4fjx8UDjpXiFrd7+1eiL29VrM6E0kWSU0TZOGwCMWiRIfSI3gpwwvK4lBq9S0uGJlXID3JLFwuyaw9r6l467X7d03L24XRhqKeGvVkncqWzUNkHqE5XitwJqpWuPZbKx5CckGZ5YaZEtJWxuQoM0MKVTruN+ONDcxDIXuQ40R+8rMEd1/KQi7NSYnfQeaGHjrnZWnWhCFFadaGLjrnZXBeN1rSaQyVzIigUrAo374UBzE5suhtXvgcxHnO+bLnZfZMOGdzquPP/jpdxxfRsn5hYvIyfmZrjj+uizf70c0uaojg47IRiJEuSE4XVtEpnMefKO4yijjN71xma+f/a+smSxa54rd/SG3TVPZt3DS73GS8mbsGZaHC8IcSX8GWcwhWDUBXmlsGN0Bx3LOqp67zVL1kQaZrp5yTgTJVacY3Nh8/xxSnN8w4aNRhF2uuXyllgUQClJ+3ZmA6YQjLph0Qk4TPXKW8RFkF1/2F1zre26rfREvJgPwagbnnmwBwjmT6hW7+QgBLGVhy2TEVeZDaM2sROCUVec9ifsGaB7dXfFa8eOjrHz4E40F7s6MTXBzoM7gWQb2QTdtYfdNad1121JaNXHTghG3ZHtawTVaU8Kj/36sdPKII+iPPbrx2KUbnps125JaElhJwQjcqpVEtuTri6yt+2Ytlx22AibOEnrrr1aWBJaMphCMCIlSMG6WOnoAKoTimqmjeixJLRkMJORESmVCtZVm+nab3pl4/rN0gUzbcSFJaElgykEI1LClsSuxKalY6xeN0imu5/V6wZ9NeLJK4UdozvK3lvT7J474DXuhjWCiQfrf5wM0yoEEfm0iLyoGsIYtY9X6Wu/JbG9CNOdLdvXyOHjh9i2d1vReMuCFtYuWVvkvF27ZG0gc089mDbSGHprjvVk8OND2AlsFJFG4MvA11X1cLxiGalkbAyGh2FiApqaoK0NWor/gwYpWOeFm1M6VHe2ri66RwYYWBW9sziOLmbVJGxxvDiZ7Y71JJj2hKCqd6jqy4E/BVYDD4vI10TkFXELZ6SIsTHYtctRBuB837XLGS8gSME6N7xOAiMhTVFb93SX9WSOwv6fVtOG312/mbyMQnxFGYlIA3BR7usg8AvgvSLyZ6p6Q4zyGWlheBiyxQsH2awzXnJKCFQSu+TUseHdU64nAcmCuhTgfN4p/w7gZx4sLoIXVe9kSFd9nSC7/noweRnRMa1CEJHPAtcC/wb8tar+JPfWJ0VkV5zCGSliwmOB8Br3Q/7UkVc0ExPsPcv9Ujdl4BCsx1I+k3nb3m2e+QZBF8O0mTaCKLpaN3kZ0VJRIeT6Hj8D/KaqHnO55LJYpDLSR1OT++LfFGLhcDl1tB52yj375ddzgvsFsrctdpLWPHRJrS+G1SyOV4lKfaGNdFJRIaiqish1qvpxj/fNuTxbaGsr3s0DZDLO+ExxUTB9W5za//leAOA4pedPZRifW774tx5rhMHBio7uMjo6yPZtQzZMlimFSothrSSgVdr1uz1De3N75M+V7wudbwWa7wsNmFJIMX7yEB4QkZfFLomRblpaoL39zImgqcl5Pd3iWwmX00XvI7Dx3oYyp/Rtj1/IWVPF/1zPmhT6/mVyWke3K11dNGYBxVdoYy0loHk5upvnN7s+A0Dnyk56VvfQubIzEiVXqS+0kV78OJVfAfyZiIwAz+HsqVRVXxKrZEb6aGkJpwBK8Th19J5YQ+8D7vcpCkf910l6HynpJJNzdG+6mGnrKZ263/EnnJycoGea8ha1VFvHy9FdzWcI0hfaSA9+FMKrYpfCmJ3klcs0uQ15yqKXft7vet2mNRO+6yn5LZc9MTnh6nOYmEznAufm6B46OOR6bRwRRQeam1jmsvi79YU20oOfPIQRVR0BjgNa8GUY4Wlpgc5O6Olxvgc5gXg4tDdcRaB6Svly2ZW44Eiw8TRSzfpAd1zfxom5xcvLibkZ7rjeSk+kGT+lK14jIo8BTwADwB7g3pjlMozpaWtzHNuFZDLsPcf9cs8ktq4uoHKntU/cB2edLB4766QzXitUM4luy+UtfPqmdkabm8gCo81NfPqmdnMopxw/JqOPA+uAH6rqJbkM5RvjFcswfOBhcmqdGGZkXvniXyki6bTpyKNc9lX7mti4eYINV8LeRU54bN8WuHJfE3eGfIxqRS9VO4luy+UtvhRAGqK30iBDGvCjEE6p6riIZEQko6pbReSTsUtmzApCN9NxcXT3DVNeT+l0RFIudDUfkZSfg8pK4Y7r23jfV3bR+8iZOU/MzfDpm8KFqFa7llDakujSUEspDTKkBT8K4ZCILAB+BGwSkQNA8i2ljJonrmY6+c/6jUgqVCh5pbBjdAcdyzpOj+d3um6JVqWLf/P8ZkafG/W1wNRS9FIcpOH50yBDWvCjEF4LnABuAXqBRcDH4hTKmB2EqmA6DX4jktyS4xadgMOUt990M4G47S73Hd1X9lmvBWa21xJKw/OnQYa0MK1CUNXnCl7eFeXNReTvgVcDB1T1xVHObaSfOJvplBGg9MYzD/Yw53f8td9021164ZU9PJtqCZWephozja41pbyePw5b/2z7G1TCM8pIRI6IyLMuX0dE5NmI7v8V4OqI5jJqjLia6bjiEZHkVXrj1P09QOXIIwi2i3RbYNJaPjsO3LK9vQoMNs9v9vX5KLLFZ9PfYDo8FYKqLlTVc1y+FqqqR2BfMFT1R8Cvo5jLqD36htvKy1EEbKbjmxmU3piuJzP430V6LTCzqTNYkNPU+PFxX5+PondDy4IWlp29rGhs2dnL6vJvMB2++iEAiMhSYF7+tarujUWi8vuuB9YDtIaprGmkDlfnb9AooyDMoPRGvjJqqZM5j1e10GVnL2P8+Lgv00baIn/iIshpyu3aoLb+IJFeo8+NFo2NPjfKonmLZsXfpRA//RBeA3wGWAEcAFYBQ0BV+iyr6kZgI8ClCxdahnSdEaSZTugQ1ZnQ0ZFrv1nuZIZ0NshJK162eq9r/X7e7dogoaQWZXQGP9VO84lpu1X1+cCVwI9jlcowSvBqrblpafzVRrfucWoceZmOWha0RF4ttB5xs9UDSEmRKC/zWhBbfxDzkkUZncGPQjilquPA6cQ0oPzsbBgxUilEtRpkB3poyE7vZDa8cfOXrF2ylouWXOTLhxLE3xJkka9mjae0k2himoh8HegBlojIU8BHVDVsJQCjDqlqiKoH+XLZ01VGNbzx8pcE6WHt59og5qU4u8bVGn5OCK8FjuEkpv0L8J84PZZDo6o3qupyVZ2jqheYMjC8iCJEddPSMVavGyTT3c/qdYMzMjdlB3pAlW17twX+rFE9gpiXZlOk13T4TkwTkXOBZ4FHcyYkw6gafcNt5fWJAoSoRlkmo3tEGFh15pCcxsJoQfoZp1H+sAR19s+WSK/pqJSY9l0ReXHu5+XAo8BbgX8QkfdUST7DAJxFe+Ou9rLWmn4X8yh9EIVO5jS21sz3M142PkGGM/2Mr/z3cpnSKL+RHJVMRs9X1UdzP78FuE9Vr8WJOHpr7JIZRgm9B1rY80An2YEe9jzQGWhnH7UPIp+0NvT0UCzJUmEI0s84rmSvpDFFNzMqKYRTBT9fCXwfQFWPAP7SDQ0jJQT1QfjxN+SVghtJhiwG6WdcryGX9aro4qaSQnhSRN4lIq8DXorjUEZE5gNzqiGcYURFkDIZQXIeVnkolCRDFr36FruN12vIZb0qurippBDehpONfBPwJ6qaT9VcB3w5ZrkMI1J6D7Tw5v3LaMgCCg1ZePP+Za5mpyD+hr7htrIO40mHLAbpZ1yvhd3qVdHFjWeUkaoeAN7hMr4V2BqnUEbCjI2VtaX0rAEU5NoE2bR0jLuWj5I/JEwJ3LV8lJc/u6hMKQTxN+Q/+8a1QwA0NQaP0ok6yqdSM59S6rX0huUWzAxRrZ3yQJcuXKjbL700aTHqm7Exp7VktmCHnMm4Vwb1unbZMhgfn7lCgciVzOp1g659lledaGLPA50zvraQTHc/wLQ9FAoprbkDzsKVhjj4Wg9HrXX5o6T/pv6HVHXaxdN3tVNjljA8XLzAg2uryYrX7ivoGObSu/g0pQplYgJ27oTCTUqlzwcgyK5/pjkPlXoyexFXYbWwi+HY0TGGDg6dfj0xNcHQwSEOnzjsu4pr0lhuQXBMIRjFuHUV8xr3uraUIArF7cTq9fkAtB5rZOTs8oorrcfK/wuEKcud7Wsks8G9sovbIh2H8zOKpvG7x3e7jhe2B53NzejrFU+FICK3U+YuO4OqvjsWiWYTabS/NzbCpMuC1thYLm9DA0xNlV/rRhiFEvRaF/p+qKx/FRybe2bsrJPOOIvKrw9SlruIri4WnSg/JXgt0kFbSPohilPHlPr7u87WMtH1SqUoo+3AQzhNcV4KPJb76gB8rgKGJ3lzSX6hy5tGxhJOnPHyKU1NlctburuvhFtzoyANj0I2R+r9+RQbN8OqQziZzodg42ZnPGqeebAHKK6M6rVIq2rkUT7VDrm0UM76oVKU0V0AInIT8ApVPZV7/UXgB1WRrp4JYquvJl47ftVyZaHqnBwaGs6cGubPh0MuzWSay3vk0tZW7pQWKb9Phd7HvmlqoveRCXofKR+Pg1J/gteiOaVTrF2yNlLnZxRN471OLl73M+oDPz6EFcBCzvQ+XpAbM8IQxFZfTZqagskwOQldXWdeb/OoAnrgACxaVG4ia2+vSpSRq/KJQtFUIK8Utu3dVnGRjtr5GUXI5YXPu5CdB3eiBVZjQYpez2ReI934UQj/E/i5iORzD7qBj8Ym0WzBa+FNum+018Lp1zzk5n/Ij5dGFO3a5SiETpdQzqhPSfn5quyzyTuZLzzvwqrFxUeRW+A1R9h5jXTjp/z1l0XkXuC3c0MfVNXRSp8xfBB0x7p7d3E454oVsGaN//v5dWB7LZxDQ+XXBiVpE1lLS/XNcV1dTk9mhrjovGhNQ5V4w8Pw9ntg6TgcaIY7roctlwebI2wzGzcsNyDdTKsQRESAq4A2Vf2YiLSKyGWq+pP4xatjguxYS5UBnHntRym4xftXiu13WzjzcpZSeqIJEnmUl6XO2bqnm8yqfnY+PRQoaW2m5Mtf5yue5stfA549EapBFOGwRrz4MRn9LU510yuAjwFHgHuAl8Uo1+zA7461VBkUjvtRCEEd2G6nieZmdzlKncVr1rifJiqFsw4Opiv0FiLPoM4O9ND7vH76Pt9P62GKykkEaWbjh0rlr5NUCHEl4RnR4Ueu9TyVAAAgAElEQVQh/LaqvlREfg6gqs+IyNzpPmSkiCAO7LGx4mzhfPawFwcOFCullhY4fLjcvLVokXtE0eTkGUURUVayJ37NZkEzqGH6ecfG2NR/5uWy8Qn+251DvOixw7zqx6OhdvOlCmXp+ASbLoYNV8LeRdB6GPq2wI2PJHsaswqk6cePQjglIg3kktRE5DysH0JtEcSB/dhj7uGlXpTu+sfGYLTExTQ66iiE0oiiycly81JcfoUgZrPhYTa9KFuyoGp5yGo265jzVMvnPXy4uJ7TyZNlIs2dgtds3UdDyXiQ3bybeeirF8OfXXsmCW9kMay/Fg6fXXqn6hJFOKwRL5US0/J8AfgWsFRE+oBtwCdilcooZoVHlK/XeCltbY7DuhAvB7ZXlJBfpjNPdXZCT4/z3cvXEIdfoZJcJWxaM8H6a52FVOXMgrrpYpd5p6a86zkVJvF5KFWv/4BeTW5KcTMP/dWVxRnZ4Lz+8FXia864qNdS2/WEnyijTSLyEE7XNAGuU9UIQk4M3+RNMjONMooz5LKhZNcZxDzldXKJw68QQK4NV7kvqBuupPyUEBNeTW5KcVMce11KcQAcbgyp7EOShlLbFuVUGT9RRv+oqm8CdrqMGdVizZpgYaal+HVge0UJuWUQ5+UqpJJ5qtSG39zsmJOq4VcIoHz2nuM+RdlCm8lAJsOmtZNl9nq/iuPIXJg35ZiP8pxswLWZjRsHmptYVqIUWg87p5pS0mCaSbICqUU5TY8fH8KLCl/k/Am/FY84hifVKoTnFSV00UXO9+lk8MqvaG4ut+GPjpb3TojLr+AVJeWifFqPNjCysFwpth5tgKbGouff1HqY9b+1r8xeDz6Uggj/+BLl7T8vH/fLHde3FfkQAD7aD++4VphoOKPA52SFtiXuSsZr1xx19FOc+Nn5W5TT9FSqdvoh4MPAfBF5FsdcBHAS2FgF2Yw8QfMIwjCdeWm6+3l93suGPz5enKnc3+8+b1i/wvi4v+uyWfp+4CzqZZVR78uWZVVvuGTYv3lJBObOLfq9/MX2IZeIIPXtVHbrjrbo3Ga+uHkfH+05M+dH+5WnLitPTvPaNb/oscO87yvhop+qhd+dv0U5TU+l4nafAD4hIp9Q1Q9VUSajlOkcolGfHLzMS0GynUvHvTKd40pMK5U1wH3yC3m5GUihp/haz8Y7bnZ81WJH8549bLq4WPnkTxhf2uxf3i2XtxQt0l//y0GWjcNNO4qvG32yXMl47ZofaNjHvJLAqChyGeKw4fvd+VuU0/T4cSp/SETOBS7EKYWdH/9RnIIZBVRyiFbr5BD2lFLN2k1usgak9xEPk0/hCWbFClovgRGXxf95x2D1e6bxKxw/zgaPiKAPvRJeEFhqB68IJbdxr93xrxYGm9sPcdnw/e78rc/y9PhxKr8duBm4ANgBrAMGcTKXjTgI0oimWvWBwpbr9lu7yetZS6OZgsrql1whP7fErrIFfd8++n5Ybl6aOwnPNsH42c7rSn4Fr4igpxbOXCG4OZrz46V47ZrPP+I990zx2snvHt8d6tTgd+efhiintOMnD+FmnDIVI6r6CuAS4Okobi4iV4vILhF5XEQ+GMWcNY9b4xy3xa00r6CQOMwwYct1t7Q4iWn5E0FTk/O6VJl4OVS9xsfGnCih/n7n+9hY8OcvkSlvxvGTh9D7CGWNdxZOwKmSrVber1BK62EPkRpnvvDecX0bJ+YW//s4MTfjGrnklRuwbmqF7zn8UqknRP69/Klh7Kj/RlFB8htaFrTQubKTntU9dK7sNGVQgp8ooxOqekJEEJEmVd0pIu1hb5yLVvob4JXAU8BPReQ7qvofYeeuabz6DJc2osk7aqtlhonC5OMn9LVS+exSvMxYXnWTvCh1FHcMBcpDKDUvZT7ifhu300DfFlh/XYZjDQV/cyWUGcPN0ewVIeS1az64qoVP37Qo0igjr518KUEjf2znHx1+FMJTIrIY+GfgPhF5BvCothaIy4DHVXUYQETuBl4LzG6F4LW7LW1EA+U1g/K4dScLS7UazAQxGXmZsUT893BwOXl4mXG8xkvxygNwOw30PgKsbWdD2zB7myZonWhi79wJdj49FGpBK3U0V8IrNyDIHH5ws+F7ETTyJ8n8hnpiWpORqr5OVQ+p6keBW4E7gesiuPf5wJMFr5/KjRUhIutFZLuIbH/61KkIbptyvHbcbuNeoZR+QyyD4NfkE5YgJiMv5Tk1VS6rV5mPfH5FAa3H3PdJruad+fPLhvq2wFkl/1TPOiX0bXH5/Nq19B5oYc8DnWQHepzvP+oBYGDPgLvMNUrLghbam9tP2/abGppozLj/ri3yJxn8nBDIRRmtxCl9fQR4MfCzkPd2+59flgqrqhvJ5T1cunBhhSprdUKQnXjQKqZhw1Or0WAmiMmokhnLTVa3Fp4uz9M3ciHr1+zkWOOZf25nTQp9Dy0CCvpF58uHlPSr6B1fAY8tKtr19w230TsJNPn7G2RvW0zm5kNs27uNrtYu12tqkdKdfGnkEVjkT5L4iTL6OHATMMyZKqdK+Cijp3CUTJ4LiMYUVdsEqTvk165fzcS2sAQxGcVkxuo94PxOyhb0g0DT8TN/l0U5G5JLWZHeR8bo/TYwATQBbXgrVLdueB0dZG/bQebmQ+wY3UHHso5QzzQTqpGpbPb/dOHnhPDHwG+oann93nD8FLhQRJ4P/Aq4AXhDxPeoTfzuxP0uiGFDRqtJEJNREOUZUCn2Hmg5rRgCfz7ItZW64XV0kO3bRmbDIapNNbuumf0/PfhRCI8Ci4EDUd5YVSdF5J3AvwINwN+r6i+jvEfd43dBDBsyWk2CmIzAv/L0UoqPPeZPoQRRqkHuNV03vK4uoJ+BJ/qr0n4zT1q7rhnx4kchfAL4uYg8inMABkBVXxP25qr6feD7YeeZ1fhZEKuZJRyUUt+GV8hoWFkrRW/5qawaRKkGvdc0ZAd6yHRXVykEyXY26gc/CuEu4JPAI1intNqkWiGj0zFd+ev8QlpaajsKWf3WM/La9Qcp6+03DyJANnVeKVTLyRwk29moH/wohIOq+oXYJTHiI84GOX5xs6t7mUsyGWdR9SOr3+gpr/LXbrgt/PPnu49nMqHrJrniEibbPSIMrJpkYM8A3au7o7mPB25ltcNmKkeBNbiJFz8K4SER+QTwHYpNRmHDTo1qUo2Q0TxuUTPj4/53xFNT8Du/M/11QR29fnGLaDrk4dg9ftz/vG7kT0o+uuFt3dMNX91GZsP0p4+wEUJBsp2rhTW4iR8/CuGS3Pd1BWNRhJ0a9UilqBm/+G2hGcTR61Uc0I0ADWpC09wcrBueDydzVBFCUWcqh8Ua3MSPn/LXr6iGIEaNEqLvgCtBWmjGFT01OVn+XHExg6zy6ZzM9RohZA1u4qdSx7Q3qupXReS9bu+r6mfjE8uoCYL2HSitL5TJhGuhGVf0VENDPH4BN2Y4d14puFGvEULW4CZ+Kp0QctXccWuVUf8lJGqZIGUqwpS0CNp3oL19+nsFaaEZR/RUJuOcUoKYmMIQQnk1ZGHgiX4WzV9clMlcrxFC1uAmfiq10PxS7scfquqPC98TkZfHKpUxc+LKqHUjyO52xYrocyaCRE+VhrJ6sWxZMJ/H4sXw7LMza8iTV15uTngfPoVT9/dw7m/3c5hih3daI4TCYmUu4sePU/l24KU+xow0EEVGrd+SFl51h0oXX58LHBB81+83eqqhwV9uwOho5Q51pRw/Xn7yqaQo8+/nlZdbCfP8ax+/s2ceLPcnpDFCKCqszEW8VPIhdAKXA+eV+BHOwSk1YaSRKDJq/e78vaJxGhrKezf4Ja6cCb8Nc7JZJ8rJbz+FiYlypbRjh3uY6uLF0FFSpG5oyH3efOkKPyLnncwF+QlpixAyaoNKJ4S5wILcNYV+hGeB18cplBGCICaXoE7ZUn9D0LpDfqlmzoQbk5POqaZw5+5lcnL7XXV0lCuFxYth+fLycNqIyPY1+spPMIxKVPIhDAADIvIVVR0BEJEMsEBVn62WgEZAgphcglwbJKKomjWSoujzUIqIYzryc53Xol56Eqjkr4mCri66RwYYoHK9I8v0NSoxbcc04BMico6InI3T3nKXiLw/ZrmMmRKks1mQa/1GFFWzRlJ+kc0rp/wi65aVHERJqbr3tXa7zi9e/hovZpAct3VPN4tOOJFHbowdHWPo4FBRQ/uhg0OBGtob9Y0fp/ILVfVZEenFqUz6AeAh4FOxSmYUE2QnHMTk4vfaII7Sapl7gjjFg9QyCsJjj0UfkQWurT394OZkzrN7fLfrZ3aP77ZTggH4OyHMEZE5OH2Uv62qp7A8hOoSZCccF5V6PXd2Qk+P872atv8gTvE4+kyDf39Jpd/f2rXFp7S1a0P9HrMDPQBs27utaHxK3SOnvMaN2YefE8KXgD3AL4AficgqHMeyUS3S0PEsiiSwqO39QZziQXfofqOM/FLp9xeDEz3fkzmp9ptpwPwlwfFTy+gLwOny1yKyF7D6RtUkDR3PwoaDxtHXOYiSClJnKf9shc968qS7z8CtMqob1S5B3tHBohMlSWsKuLkm6vC8H7QyqikPB0+TkYh8vuDnm/M/q6oCd8Qsl1FIJXNDNWlpmbl5qNIpJ4w8fp3ibW2OsijEzXFbuGsvfFYvm77fhLsY2bR0jNXrBsl097N63SCbljqmxGce7AHOOJnP9ajU7TVey1SqjFpKXnkUOtt3je+alc72SieE3y34+c3AbQWvXxKPOLMMvyaUtHQ884vbc8V1yvFrbmlpKc8KXr4cFi3y9zdI4wkJRxmsb9/FsQZn3pF5E6xvd+btPdBSVBn1H+6Ft74WThX8r58zCV+4F+58ob/7he2zUC2CVEa1stpnqKQQxONnIwqCLBBp6HgG/hSY13PF1SvZSyavdp2FjI46CqGz09+9wtj6Y/IDbWgbPq0M8hxryLKhbZjeA868eaXQtRe+/G3YcCXsXQSth6FvC1y5r4k7fdwrqj4L1SBIZVQrq32GSgohIyLn4piV8j/nFYOVrghL0AUi6exdvwrM67m8HLTz50cv0+HD5b2a3UJOo3LM+ylOF9MJaW+T++dLx7O3Lab3ykPc+d0MvY8UF7379E3+Tpq11GfBqzLqtQebuf3zg0UnnMGVVlY7TyWFsAgn3yCvBApbZtahG6rKpMFRHAS/Ciyo/F6tKcPIFCTfIOzvu1KHuEKlEFPvhtaJJkbmlc/bOlEyb0cHX7+4H8jymYGmogXxay+B4ScHp3Wo1lKfBbfKqNcebOYf/89o2Qln87vP4ScLyp+heX5zVWVOA5VKV6yuohyzj7iau8SFXwUWRdc0v0Rxn7C/by/lU1qcLiY/UN9wW5EPAeCsqQx9w+Xz5k1HX7944nTSWpBonFrrs1BaGfX2zw+6nnD2Zd03JePHY8pdSTF+8hCMOKg1R7FfBeb1XFHG9EdFpVpEUROVH6jEN9Lb1ga0s6FtmL1NE7RONNE33Hbaf1BKafvN6aJxCnfY73pj8Q4b4u2zEHUoqNdJ5lduLcAwH4JRTdLiKPaLXwXm9Vxudf/BsbfHQakScqtWGqQWURSE9QN5+Ex6aaf3gE/HOMXlstXD+ps/KRSeHL75vFH482Xc/tVxX1FGYRb0oHkEfvA64Zx/BJ46p/x68yEY1SVpR3EQgigwt+fKv55BZzBPKp1a3BLL3Ni9O9zfoLRMduF41EQYqdQ9IgysUpoa3R2qgOvJYfOScQ5+ZnrlE3ZBjyMU1KuT3LqpZXxTRq01J6YQjCD4VWBeoaBr1kSbyBWkHIRXr+awvZPzzxOlovMiwkCErXu6mbOyn4nJCTKZTNliWLoYn76VTzNK2AU9jlBQr05yBy9pof3oIstUJiGFICJ/BHwUWAtcpqrbk5Cjpoij7n8cxJSA5UpazG5RKzovIg5EOHW/YzrKZrOnTwr5xTC/OJbSmGlk0EdEUtgFPUgeQRC8OslZa04HP9VO4+BR4A+BHyV0/9oiDdVO/RJHiYpK+C2n0eix9/EaTyNu5TdCBiLkK6NOTBYvvm3ntpGR4nsJwmR20leJB6+F2++C7nb/2WrGqSaJ/G9Q1SEAmUETkFlJGqqd+iWt+RUXXgg7dxY7kkWc8VohghPRpqVjRRFJ1xxs5qxs5nTYan6Rb29up725vciMMpmdLCuV7WUG8koM87ugu+URxGnGseJ2DjW0PZrFpHWRdSOt+RVeiymU9zl2K32RFhNdiEAEt7pHXzx/H1qyL8sv8p0rO4sWxf49/a7zupl2oljQg5hx0hbRVKvEphBE5IfAMpe3NqjqtwPMsx5YD9Ca9KKSFHEuskEWPj/XtrW578TTkF9RupgGKX0Rlx8kJkpPAn3Dba51j0qVQR4v+30Qu3617PJpjGiqVWJTCKp6VUTzbAQ2Aly6cOHsLJkRVxJbEAdwpcVzfLy4iFw14/3D7OSDlL5Iq4nOBa8KqMcy4ZIDw5qB4iKNEU21ipmMaoG4ommC+Cb8LJ5eReTyn496MQ0b0RTU5BbWRFclM5RXBdSGLEz5ddu56PBq2/X9ktaIplokqbDT1wG3A+cB3xORHar6+0nIUjPEkcQWxDcRdjGMw98R1tketO5SGBNdFcNxvSqgTgnlXdO8uqjh9GTuau0qGktjeGaQBd3N15DWk08SJBJ2qqrfUtULVLVJVVtMGSREkE5sYf0VTU3Oojg46CSJDQ6GD5sN62z3CuNcsSLy8M5qhuOWVTrN0eC2+HsogwWnYHJqksEnB+nf08/gk4Op7SDmN0TVqzMaQHtz+2kF0tTQRHtze+oUXzUwk1E9EqQTm18HsJsfwy+ZjONbiHqH7NV0xyu3wO330t7u/rvy20nNL1WMFLvmYDP/5/x9ZScB3+Yi4Ogc57vb4pm2hdKvKauSr6E0omq2Ygqh3ghqmvDrAHbzY+S7kJU6u5ctK3Y05+sKRZ1L4SWr27jX76W93b1jWtQmuhgjxUojio5mplxPAoF8CLnPFBJX5E21cgDMeTw9phDSSByRM16OYq85/Bat87uTHhpyv1eYHbJXHSK38aST+2KKFHOLKPJqXzUlMCcLpwqtKxV8CG5EvXhGkQPgdw5zHk+PKYS0EVfkTBBHcZBF2u9OOo4dcpA5k07uiylSzC2iyGuBbz7VwJHGLIUao0Gdl1MFSmJOFs6ZbGB8brlijXrxjCIHwO8c5jyeHlMIacNrJ7t7t7/FJMgiWc2s4jh2yLXWZCiGSDGviKLSnf/crADCyUzx8WEqA80nG1iQbSxKYgPKOrGhuC6eYUw+UZhxKs1RWoivtBxHGsJm04QphLThtWOdmjpjCql0agiySDY3u+cNNMfQSzaOHXJaqp0miFdP5VIUZXyOiwMeGJ8zxcGB33F9r9A3MdI0wc6nh4oW0LAmnyjMOF5z5OUplKu9uZ3OlS4+IwMwhZA+/MbGe9m/gyyS4x49Y8fGyp3CUSyyceRS1FKToRjoG27jLRcNTesXOJXB07fQ4DHee6ClrBVnYftNCG/yicKM4zaHG7O1HEUQTCGkDbdQUC+8FIffRTLsacRIBUI+42xmBIk8yt62mMzNh04rhUo7cz+mpKiK4JXOYRFFM8MUQhrxW/snimSxMKeRWiKtVVhDsqFtuMwv4OVUbvDIRVjlkcjmxqbfW07rxHFGmhz7fIM0lJXEBqeRjl9TUhTZz6Vz5H0HpVhEUWWSapBjeOE3czUK52lbm5OI5oc0ltoOQgzNZdJARadyAWedhJ7h8nHUSWTzQz7EdWTeBIizyLuZaTKSQVU9TUnVwBrszAw7IaSNSgtvfpcbRZnqPNU6jQTBS/4w+Rl16oD2cio3H3PKT+xdBK2HoW8LbLgK14S17y8Zh8env5dr+WyUxkwjDdJQZPIZOuied1Itk01aC/GlHVMItYRbRm0pQfIYgp5G3Bbk/DwzXWRL5yzNfo6yR0EdOqD7htvKwkPPmhRu+xel95GCCzMZ3vSH7k5Xz1OGz+sms5N0rS4ugufVk7maJps0FuJLO2YyqnVKC8bt3u2/iNp0p5H89/Z25+ehoeK+zkND5WNBej279Yret8+7zHY1ezXXCL0HWti4q51VJ5oQhVUnmti4+yJ6J9eW/Q29it55jfu+TmHgif6iITPZ1CZ2QkgbQZyfbqcBL7zm9BovPY3cf7/33IUEcUC7JeEFpdZ9GxHgFh5KC2V/g77h8mSzs6YypxPRpsP1NDKVYeN3lDddV2x6NJNNbWIKIW0ESSwLsqC6KZQg9/KqG+SG30U6isW8xqOEqkleaZS21ixTJkE/f24Ld4wMMMCZ/AQwk00tYgohbQRxfvpdUL0W+bgcrVEv0vkKqm6VVWs8SqjauJ4mIvj81j3dZFYVJ60ZtYcphDQStmBcYyM0NPhb5KN2tEa1SLtFVEXdo8CIlOxAT1kms1FbmEKoZbxMPhdeWN2F0m84rNfn3Mar0aPAiJzTSmHPAN2ru5MWxwiIRRnVMi0tTgRQaURQHIvmihXe452d0NPjfA9y7zpNFpvtZAd6QJVte7clLYoREDsh1DrV2jWvWeN8L6yOumLFmfGZUKfJYgZ0jwgDq9yrqxrpxRSC4Z81a8IpADfMDFSXmJO5NjGTkWEYsZAd6AHKk9aM9GIKwTCM2MjethgwpVArmEIwDCM+OjpOnxSM9GMKwTCM2GnI2imhFjCFYBhG7Jy6vwcwpZB2TCEYhlEV8qYjy09IL6YQDMOoGt0jwtSU5SeklUQUgoh8SkR2isjDIvItEVmchByGYVSXrXu6WXTCTEdpJakTwn3Ai1X1JcBu4EMJyWEYRpV55sEeczKnlEQUgqr+QFXz58YHgAuSkMMwjGQwJ3M6SYMP4a3AvV5vish6EdkuItufPnWqimIZhhEn5mROH7EpBBH5oYg86vL12oJrNgCTwCaveVR1o6peqqqXnjdnTlziGoaRANnbFjM1NcmO0R1Ji2IQY3E7Vb2q0vsi8mbg1cCVqqqVrjUMo07p6KAh28/h44eSlsQguSijq4EPAK9R1WNJyGAYRjo4dX+PRR6lhKR8CP8bWAjcJyI7ROSLCclhGEYKeObBHsCUQtIkFWX0AlVdqaodua93JCGHYRjp4XS57D0DyQoyi0lDlJFhGAYA2b5GMJdiYphCMAwjPXR1AWY6SgpTCIZhpArrtJYcphAMw0gdphSSwRSCYRipxDKZq48pBMMwUsuiE1i57CpiCsEwjNRi+QnVxRSCYRipxvwJ1cMUgmEYqceUQnUwhWAYRk2QVwpGfJhCMAyjZugeETslxIgpBMMwaoate7qt/WaMmEIwDKOmOHW/9WSOC1MIhmHUHKd7Mltl1EgxhWAYRk2SvW0xqFomc4SYQjAMozbp6CDb12iZzBEitdTOWESOALuSliMGlgAHkxYiBur1uaB+n61enwvq99n8PNcqVT1vuokao5GnauxS1UuTFiJqRGS7PVdtUa/PVq/PBfX7bFE+l5mMDMMwDMAUgmEYhpGj1hTCxqQFiAl7rtqjXp+tXp8L6vfZInuumnIqG4ZhGPFRaycEwzAMIyZMIRiGYRhAjSkEEfm4iDwsIjtE5AcisiJpmaJCRD4lIjtzz/ctEVmctExRICJ/JCK/FJGsiNR8yJ+IXC0iu0TkcRH5YNLyRIWI/L2IHBCRR5OWJUpEZKWIbBWRody/w5uTlikqRGSeiPxERH6Re7b/EXrOWvIhiMg5qvps7ud3Ay9U1XckLFYkiMjvAf+mqpMi8kkAVf1AwmKFRkTWAlngS8D7VHV7wiLNGBFpAHYDrwSeAn4K3Kiq/5GoYBEgIr8LHAX+QVVfnLQ8USEiy4HlqvozEVkIPARcVyd/MwHOVtWjIjIH2AbcrKoPzHTOmjoh5JVBjrOB2tFm06CqP1DVfA7+A8AFScoTFao6pKr1kl1+GfC4qg6r6kngbuC1CcsUCar6I+DXScsRNaq6X1V/lvv5CDAEnJ+sVNGgDkdzL+fkvkKtiTWlEABEpE9EngR6gf+etDwx8Vbg3qSFMMo4H3iy4PVT1MniMhsQkdXAJcCDyUoSHSLSICI7gAPAfaoa6tlSpxBE5Ici8qjL12sBVHWDqq4ENgHvTFbaYEz3bLlrNgCTOM9XE/h5rjpBXMbq5pRaz4jIAuAe4D0lloaaRlWnVLUDx6JwmYiEMvelrpaRql7l89KvAd8DPhKjOJEy3bOJyJuBVwNXag05dwL8zWqdp4CVBa8vAPYlJIvhk5x9/R5gk6p+M2l54kBVD4lIP3A1MOPAgNSdECohIhcWvHwNsDMpWaJGRK4GPgC8RlWPJS2P4cpPgQtF5PkiMhe4AfhOwjIZFcg5Xu8EhlT1s0nLEyUicl4+GlFE5gNXEXJNrLUoo3uAdpyolRHgHar6q2SligYReRxoAsZzQw/UQwSViLwOuB04DzgE7FDV309WqpkjItcAnwcagL9X1b6ERYoEEfk60INTSnkM+Iiq3pmoUBEgIl3A/cAjOOsGwIdV9fvJSRUNIvIS4C6cf4sZ4P+q6sdCzVlLCsEwDMOIj5oyGRmGYRjxYQrBMAzDAEwhGIZhGDlMIRiGYRiAKQTDMAwjhykEwwiAiFwiIioiNRs6axhemEIwjGDciFNV8sakBTGMqLE8BMPwSS7r9T9xyl/fD7Sp6once7fiFFx8EjgIPKSqnxaR3wD+Bicx7xjwX1S1bjLsjfrCTgiG4Z+XA0+o6n8C/cA1ALnGP9fjVNL8Q6CwEdBG4F2q+lvA+4C/rabAhhGE1BW3M4wUcyNODwRy398EfBPoAr6tqscBRGRz7vsC4HLg/zmHC8ApT2IYqcQUgmH4INct7XrgNbkS5QI057pwuZXFBucEfihXntgwUo+ZjAzDH1cBv1DVlaq6WlVX4ZRUvg7HyXxtrsftAuAP4HSHvydE5I/A8UGIyG8mJL9hTIspBMPwx43At6J/nyoAAAB7SURBVErG7gHeoKo/xSmD/QscE9J24HDuml7gbSLyC+CX1EnLTaM+sSgjw4gAEVmQa3Z+FvAjYH2+l69h1ArmQzCMaNgoIi8E5gF3mTIwahE7IRiGYRiA+RAMwzCMHKYQDMMwDMAUgmEYhpHDFIJhGIYBmEIwDMMwcvz/NQ3mFxWBRBQAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAEWCAYAAABmE+CbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3X+YXGV5//H3vbthE0xI0pBsAuSH20JEERcbKeC2GxEtqPywaoWmVqp8U/utrYJ6+SNfasUr/qpK0epVI1qxptJWtIpKLWJ2TeyCBBoQTTbgkoRIsoGYBCLJkt25v3+cmWR2c2b2zM45c87MfF7XtVd2z8yceWaTnPs8z/0892PujoiISEvaDRARkWxQQBAREUABQURE8hQQREQEUEAQEZE8BQQREQEUEERiZ2bPN7ONabcjLmb2eTO7Ou12SPIUEKTmzMzN7HdKPHaama01s71m9hsz+6mZvWbcc8zM3m5mD5rZM2a228x6zezKouf0mtk1RT9/wMweNbODZrbTzP4tf/zn+WMHzWzUzA4X/fwBM7vazDaMe/8/MbON+efsMrM7zKy76CkfBj6Zf+7Boq+cmR0q+nlFFb/Du83sTyf7+jLnfZuZ/XDc4U8Af2dmrXG/n2SLAoJkhpn9FrABeBZ4AXAycCPwr2b2+qKnfgZ4J/AuYA5wKvD/gItLnPfNwJuAi9x9OrAMuAvA3V/g7tPzx9cDby/87O4fCTnXdcA/AB8BOoBFwOeBy/OPLwBeBvxn/vzTi86/A7i06NjaSf6qasrdtwGPAZek3BRJmAKCZMm1wEHgre6+290PufvXgdXAp/I9gzOA/wtc6e535p8z6u4b3P3qEud9CfADd/8lQP7cayptnJnNBG4A/srdv+nuv3H3I+5+u7u/J/+0VwD3u/vhiOdsNbPrzWzQzJ7M945m5R97jpndama/NrP9ZnaPmc02s0/lP9PN+Z7Gp0LOG/ra/GO/ZWZfzfesHjOzD5pZi5mdQxDslufPu7volL3Aqyv9nUl9UUCQLHkFcJu758Yd/3eCO/EzgAuBx9y9kjH6u4E/M7P3mNmyKoY+zgemAt8q85wXAgMVnPM9wCuBbuA04AhBrwjgGqCNoAd0MvB24Fl3fxdwL3BNvqfxrpDzhr42/9ha4ADQCZwLXAG8yd3/l6Dn1Zs/7/yi820GXlTB55I6pIAgWXIysCvk+K6ix08Giu9cyecE9ufH/xePf7G7fw34a+APgT5gj5m9bxLtmwM86e4jZZ4zC3i6gnP+BfA+d38836v4EPBGMzOC4DAX+G13H3H3e939NxHPG/ra/O/nD4Dr3P0Zd99FMAR3ZbmT5T/TrAo+l9ShtrQbIFLkSWBByPEFRY/vHf8cdz/NzNoILoIWduL8eP1aM5tCcEe81sz+191/UEH79gInm1lbmaCwD5gR5WT5i/5C4PtmVlxlsoUg+HwJmA98w8ymA18Frnf30QinD30tsJigl/NE8PZH3++RCc43A9gf5XNJ/VIPQbLkh8DrzGz8v8s/JkhqbgV+BJxmZssm8wb5Mf//AB4Ezqrw5f3AYYKAUsqDBENbUdriwK+AC919VtHXVHd/0t2H3f1v3f15BHf1b+DYnXzZMsVlXvsYQZ5mdtH7neTuL57gvGcCD0T5XFK/FBAkLSeY2dSir1aCsfOTgC+Z2fz88auAVcB7PDAAfAG41cxeYWbT8q+9oNQb5aeOvtrMZuSTp5cQzGK6p5IGu/sB4G+Bz5nZFWZ2oplNMbNLzOwT+afdCbzYzKZGPO0/AR8zs4X5ts4zs0vz319kwZqGFuApYAQo9A6GCHIApT5z6Gvd/VGCnMonin4fpxdNmx0CFuZ7UsV6gDsifiapUwoIkpafA4eKvv7c3fcSJFenAr8gGKK5jiDh+W9Fr/0rgnHvTwO/BnYSzP1/I8HUzvGeAj6Qf2w/wbz6v3T3DSHPLcvdP51v0/8DniC44347x6aZDhH0Yi6PeMpPEPSMfmRmTwP/AxTu1k8Fvk0wfv8Q8H2CBDsEwfPPzGxfUTAqVu61VxHkA7YQ/P7+jWAKLcB/AdsI8iw7AfJ5h8X5c0gDM22QIxIvM3s+cAtwrjfAfzAz+xxwn7t/Oe22SLIUEEREBNCQkYiI5CkgiIgIoIAgIiJ5dbUw7eQpU3zJ1Kiz+WSy7ptxEAymnzA97aaISAwObjv4pLvPneh5dRUQlkydysZlk1qPJJXYsIGWVSMse65+1yKNoPfq3u1RnqchIzled7BGqe/R3nTbISI1pYAgoXJ9ywEFBZFmooAgJSkoiDSXusohSO3l+pbT0tPLhh0b6F7UPfELRBrQ9NbpXLnoShZMW0BLRu+jc+TYdWgXt+64lYOjByd1DgUEmVDPdqNvcbktAEQa25WLruSs086ifUY7RWXDM8XdmfP0HK7kSm5+9OZJnSOboU4yZd22HkBDR9K8FkxbkOlgAGBmtM9oZ8G0sC1FolFAkEiUT5Bm1kJLpoNBgZlVNaSVWkDI17r/qZk9YGY/N7MPpdUWiSZ3k3ZQFGlkafYQhgl2inoR0AVcbGbnpdgemUhXFzMPq5cgkpb1d63n4vMu5pUveSVrbloT+/lTCwj53a8KqfAp+S/V4s64ffcspzWnoCBSa6Ojo9zwvhv44q1f5Ls/+S7f+9b3eGRgoq2wK5NqDsHMWs1sE7AHuNPdj9vS0MxWmtlGM9v4xJEjtW+kHOfI+uWAgoJIKTO+cTud51zIGfPOpPOcC5nxjdurPueD9z/IoiWLWLhkISeccAKvuuJV3HXHXTG09phUA4K7j7p7F3AacK6ZHbfpubuvcfdl7r5s7pTx27xKWgpJ5g07Kt6FUqShzfjG7cy/7nqm7Hwcc2fKzseZf931VQeFoV1DLDj12Ayi+afMZ2jXULXNHSMTs4zcfT/QC1ycclOkArnVbYyOjrBp96a0myKSGXNX30jLocNjjrUcOszc1TdWd+KQAfW4Zz6lOctorpnNyn8/DbiIYNNvqRfd3fRsNw4c2p92S0Qyo+1Xuyo6HlXHKR3sKjrH7sd3M2/+vKrOOV6aPYQFwDozexC4lyCH8N0U2yOTsG5bT7CSWfkEEQBGTg1fGFbqeFQvPOeFbH90Ozu37+TZZ5/l+//5fS68+MKqzjlemrOMHnT3c9z9bHc/y91vSKstUh2tZBY55olV15KbNnYjr9y0qTyx6tqqztvW1sb1H72et/7xW3n1S1/NJZddwunPO72qcx73HrGeTZpWoQhe37Y+epb0pN0ckdQ8/fpLgSCX0ParXYycuoAnVl179Hg1el7RQ88rkvv/pYAgsSkEhU27N9E1vyvt5oik5unXXxpLAKi1TMwyksbRmoMDh/Zr5pFIHVJAkFgdWb+cmYfRzCOROqSAILHbd89yQElmkXqjgCCJULlskfqjgCCJUblskfqigCDJ6QpmGqmXIBKPD/zNB7jgzAu49PeTmcGkgCCJ0tCRSHxee+Vr+eKtX0zs/AoIkjgFBWk2t2+9nQtvuZAzP3cmF95yIbdvrb78NcBLLngJM2fPjOVcYRQQpCZULluaxe1bb+f6ddfz+MHHcZzHDz7O9euujy0oJEkBQWqmZ7sxOjqSdjNEEnVj/40cHhlb/vrwyGFu7K+y/HUNKCBIzazb1qM9maXh7ToYXua61PEsUUCQmtKezNLoFkwPL3Nd6niWKCBIzWlPZmlk155/LVPbxpa/nto2lWvPr678NcB1K6/jqkuu4tFHHqXn7B6+8bVvVH3OYqp2KqlQZVRpVJeeEawRuLH/RnYd3MWC6Qu49vxrjx6vxqfXfLrqc5SjgCCpya1uo2VV9CJ4QweHGNw3yPDoMO2t7XTO7qRjekeCLRSZnEvPuDSWAFBrGjKS9HR3R84nDB0cYmDvAMOjwwAMjw4zsHeAoYNDCTdSpHkoIEiqouYTBvcNkvPcmGM5zzG4bzChlokckyOHu6fdjAm5OzlyEz+xBAUESV2UlcyFnkHU4yJx2nVoF8NPD2c6KLg7w08Ps+vQ5Ke3KocgmTDRnsztre2hF//21vZE2qN8hRS7dcetXMmVLJi2gJaM3kfnyLHr0C5u3XHrpM+hgCCZESSZw1cyd87uZGDvwJhhoxZroXN2Z+ztKOQrCu9VyFcACgpN6uDoQW5+9Oa0m5E4BQTJju5uoJe+R3vpee7yMQ8VLsRx37WH9QTK5SvqPSA0U8+nmT5rXBQQJFOODh2VCApx/ocu1RMYHwwK6j1f0Uw9n2b6rHHK5mCYNLValcsu1RMoJal8Ra0000ytZvqscVJAkEyqRbnscnf8LdZy3M9J5CtqqZlmajXTZ42Thowks2YehgNTkyuXXW7mUiGX0Ejjz5XO1KrnMfhaz0prFOohSGbtu2c5kNzQUefszpI9gY7pHZy/8HyWL1nO+QvPr5sLYTnlPu949b4yvJLPKsekFhDMbKGZrTOzzWb2czN7R1ptkexKMp/QMb2DpXOWHr1rbG9tZ+mcpQ1x8Q9Tyeet9zH4Zvu7jUuaQ0YjwLvc/X4zmwHcZ2Z3uvsvUmyTZFC5mUfVinvmUtZF/byNMAbfbH+3cUith+Duu9z9/vz3TwObgVPTao9kW+6mWWk3oamUGmvXGHxjy0QOwcyWAOcA94Q8ttLMNprZxieOHKl10yQrurq0/WYNaQy+OaUeEMxsOnAb8E53f2r84+6+xt2XufuyuVOm1L6BkhnafrN2NAbfnFKddmpmUwiCwVp3/2aabZH6cGR9+SJ4Eh+NwTefNGcZGfAlYLO7J7svnDSU3E2zwJ2+bX1pN0WkoaQ5ZPRS4E3AhWa2Kf/1qhTbI/Wiq+toUNi0e1ParRFpGKkNGbn7BsDSen+pc11d5FZvqGhPZhEpT6UrpH6VKZct9S+J0hn1XI6jFlKfZSRSjVpVRpXaSqJ0Rr2X46gFBQSpewoKjSeJ0hn1Xo6jFhQQpCEUgoKSzI0hidIZjVCOI2kKCNIwZh6GA4eUZG4ESZTOUDmOiSkgSMNIuly21E4SpTNUjmNiCgjSUI7mE7Rora4lUTpD5Tgmpmmn0nByq9toWTWi6ah1LonSGSrHUZ56CNJ4urtVLltkEtRDkMbU1YUWrTUPLTiLh3oI0rC0PqE5aMFZfBQQpKFpfULj04Kz+EwYEMzsk2b2glo0RiQJudVtHDi0nw07NqTdFEmAFpzFJ0oPYQuwxszuMbO3mdnMpBslEqvubnq2G6OjI2m3RBKgBWfxmTAguPvN7v5S4M+AJcCDZvavZvaypBsnMsbQEPT3Q29v8OdQ9DHiddt6tCdzg9KCs/hEyiGYWSvwvPzXk8ADwHVmdmuCbRM5ZmgIBgZgOD8MMDwc/FxBUNBK5sakBWfxmXDaqZl9GrgU+BHwEXf/af6hj5vZQJKNEzlqcBByYxOH5HLB8Y6Q//hDQ8Fjw8PQ3g6dndDRQa4v2JN5w44NdC/qrk3bJXFacBaPsj2E/L7H+4AXuftfFAWDgnMTa5lIseESCcKw4xP0JnI3zWJ0dERJZpFxygYEd3fgCnd/psTjBxJplch47SUShGHHy/UmIL/9ZhujoyOajipSJEoO4W4ze0niLREpp7MTWsb9c21pCY6PF6U30d1Na07lskWKRSld8TLgL8xsO/AbwAg6D2cn2jKRYoU8QUhe4Djt7eFBYVxv4sj6IJ+QxfIWKsUgaYgSEC5JvBUiUXR0hAeA8To7g5xB8bBRid5EIcnct62PniU9MTZ28gqlGAqrbwulGAAFBUlUlHUI2919O3AI8KIvkWzq6IClS4/1CNrbg59LBJPc6jbw7PyTVikGSUuUaaeXAZ8CTgH2AIuBzYDKWUh2Re1NAHR3k6XKqCrFIGmJklT+MHAesNXdnwu8HPhJoq0SqbEsVUZVKQZJS5SAcMTd9wItZtbi7uuAroTbJVJzWQkKSZZiGDo4RP9j/fRu66X/sX6ViJYxogSE/WY2HfgxsNbMbgJUJUwaUhbKZSdVikH7BshEoswyuhw4DFwLrABmAjck2SiRNM08DAdId31CEqUYyiWrNXtJIEJAcPffFP14S5xvbmZfBl4D7HH3s+I8t8hk7btnOVN+v3ZJ5lqtOVCyWiZScsjIzJ42s6dCvp42s6diev+vABfHdC6R2BxZvxxIPp+gYRzJkpIBwd1nuPtJIV8z3P2kON7c3X8M/DqOc4nErRZJZq05kCyJvKeymc0zs0WFryQbNe59V5rZRjPb+MSRI7V6WxEgqIwKySWZazmMo+msMpEoeypfZmYPA48CfcA24I6E23WUu69x92XuvmzulCm1eluRQFcXPdstsSJ4tbxIa2cxmYgWpklTWztviCXn9dPS08uS8/pZO+/4sft124IaR0kMHdXyIq2dxWQiUaadHnH3vWZ2dGGamX088ZaJJGztvCFWLh3gmdZgDH/71GFWLg2KyK3YM/YimetLZuZR4WJcq8qm2llMykl1YZqZfR3oB5aa2U4ze2sc5xWJYlXn4NFgUPBMa45VneEJ3aMzj7b1xdqOjukdnL/wfJYvWc75C8/XBVtSEyUgXA48Q7Aw7b+AXxLssVw1d7/K3Re4+xR3P83dvxTHeUWi2NEenrgtdRzyM4/ctf2mNKQo5a9/4+45ghXKTwE/ydc2Eok0Bp9Vi4bDE7eljhf0bDdGR1W9RRpPuYVp3zWzs/LfLwAeAt4CfNXM3lmj9kmGFcbgt08dxu3YGHy9BIXVg52cODr2v8CJoy2sHiyf0E0yySySpnI9hOe6+0P57/8cuNPdLyWYcfSWxFsmmVfpGHzWrNjTwZqBpSw+3I45LD7czpqBpccllMNkpTKqSJzKzTIqXgX2cuCLAO7+tJnlwl8izWQyY/BZs2JPR6QAEObo9psZ2VhHpFrlegiPmdlfm9lrgRcTJJQxs2mAVojJpMfgG0kWymWLxKVcQHgrwTaZVwNvdPfCUs3zgH9OuF1SByY7Bt9oWnMktpJZpJZKDhm5+x7gbSHH1wHrkmyU1IfCUMuqzkF2tA+zaLid1YOdkx6CqVdH1tf30FFS5bdrVdZb4hNlpbI0sqEhGByE4WFob4fOzuib0wMrfgYrvg0MA+1AJ9CE/+frNZ9QKL9dqLhaKL8NVHXxTuq8kiwFhHpXzQV9aAgGBiCXnyMwPBz8DNHOMTQEW7aA+7HXb9kS/fUNph6DQlK7qGV1dzb1WspTQKhn1V7QBwePvbYglwuOR3n9ww8fCwYF7rB1a/QgVWUPJWtyq9toWVU/i9aSKr+dxd3Z1GuZWMmAYGafBbzU4+7+N4m0SMKFXTirvaAPl/jPWer4eCMlLnyjo8FX4VylglSlAa0egkd3NzMP108vob21PfQi3d7aXtXddLnzpiWrvZYsKTfLaCNwHzCVYNrpw/mvLmA0+aY1saEh6O+H3t7gz61bgwtl4UJduHBWe0FvL/Gfs9TxySoEqfHKBbTxCsFj/O9gKHurovfdsxyoj0Vrpcpvz5k2p6qtPbO490IWey1ZU24LzVvc/RbgdOBl7v5Zd/8swSK1rlo1sOmEXfgefzz8wllK1At6Z4n/nKWOj9faGu15EB6kKglolQSPDKiXlcyl9kjYe2hvVVt7ZnHvBe0YN7EoOYRTgBkc2/t4ev6YJCHswldOS8vY57e0RL+gA5iNzQOYRX9tR0cQrKJobz9+yKe19djQ0vjnjldtbygFhSTzhh0b6F7UnXZzSgrbI2Hzk5tDn1vJ3XTW9l7onN3JI3u2cKTl2L/3KTmj8+ROJZvzopS//hjwv2b2FTP7CnA/8JFEW9XMKrnAtbfD0qXHLqCFn6OOqw8OhieFo951741Y9LalBebMOb7nExb4SgW0Wg1vxSy3uq0uK6M24t30nzwIa77jLN5PULtqf/DzCx4+UNXwWCOZsIfg7v9sZncAv5c/9D53351ss5pEWJK0vT1aUChcODs6Jp9Yrfauu9zzCp+jXALcHdragp7CRInizs6xCWiovDeUhu5uerb30Ud9JJkLOmd3jpmRA+nnAKp1zW2DzN8LV4+rMnL9hY+TG3df1KzJ5gkDgpkZcBHQ6e43mNkiMzvX3X+afPMaWKkZNvPnw+7dx1/45s8P7sjjnMpZKvhEvesu9/rzzx97bHP4EAQjI9AdYTil0P6szzIKsW5bDy2L62fmEdR+a89amLc3/AbmVzPCn9+MyeYoOYTPAzngQuAG4GngNuAlCbar8ZVKku7dGwz71GKxWaV33eMDzZw54cGr1JBPNcGn0P5aBYCYp7iWW7SW1fHrrOUAqrVnTjvzQ4LCqU/DzpOOf349D49NVpQcwu+5+18BhwHcfR9wQqKtagblhms6OoI77OXLgz8ruRBVMhunoyN6DiJs9tPu3UHPJcrr58wJb++0aWOn2GZhGunQEGvbNrPkL4dp+SAs+cth1rZtrrptR2ceFe3JPHRwiEf2bBkzfv3Ini1NOX6dtJtf18nhE8Ze8g6f0MJ5o6dkbopsWqL0EI6YWSv5RWpmNpegxyDViOOOOUyleYGod93lejTjh4fClEpA7y+qElrpSuuErJ26lZWXwDP5257ts2DlpcAdW1lRZaGmQk+h4PHdD3OkbewA9pEW5/HdD9PxO41zd54Fd10Q/D6vuW2QeXuH2TOnnZtf18mT53Sw9ODMTPbSai1KQPgM8C1gnpmtBl4PXJ9oq5pBUknSrASayT6vkpXWlYo4DLSqZ/RoMCh45oTg+IqwbQ8qHF5qzXF06Oip1vAZSKWOS3XuuqDjaGAo1mjDY5MVZZbRWjO7j2BBmgFXuHuJDKFEVi5JWs34dVYDTdTZU5DM2oIKcis7ZoafIvT4JOpJFZfLXngAdsw6/jkLD0zweUQSMGEOwcz+xd23uPvn3P0f3X2zmf1LLRrX8MJyBdWWaKgkL1CJzs4gsBSrJNCEvb6UJNYWVJBbWVTiYhx6vNR5t24tmxsp5BOu/R848dmxLz/xWXjv3RWsAheJSZT/oS8o/iGfT/jdZJojsZRoqCYpXe6c1QSasNefckp1QaYSFQx5rb4r/CK9+q4Kzjs6OmFQz/Ut597T4LPfY8xiqc99H3599hkTfCCR+JWrdvp+4APANDN7imC4COBZYE0N2tacslyiodppn2Gvnzkzc2sLVmxth9uHWfXyYJho0YEgGKzY2g7j8+dRh8JK5EbWfqeNFZeNcPe/tI9JdIaNc4skrdwWmh8FPmpmH3X399ewTc0tqaRwVtVybUFUnZ2s+PkAK342Lg+zNKTnEpazKSXs77W7m6+/sJevv3C4bhatSeOacMjI3d9vZrPN7Fwz+4PCVy0a15SqHauXcJXUQqpkeCzsuW0l7rNKtKFeKqNK44tSuuIa4B3AacAm4Dygn2DlssStjks0ZFqls68q6bmMf+74mUcTvdfQELmPtZMbHmbHzF6+9sYzNWQkqYiyDuEdBGUq7nb3l5nZ84APxfHmZnYxcBPQCtzs7h+L47x1L4vDKPWuloG2kvcqCh4twJIDcN0/B7O6FRSk1qIEhMPuftjMMLN2d99iZkurfeP8bKXPAa8AdgL3mtl33P0X1Z67btTDlpCNpJaBtooV4CceCVbTKiBIrUUJCDvNbBbwn8CdZrYPiLgrSlnnAo+4+yCAmd0KXA40R0CYxIImaUAlZiiVqswpkqQoSeXXuvt+d/87gpIVXwKuiOG9TwUeK/p5Z/7YGGa20sw2mtnGJ44cieFtM6LOtoSUhJRINO+YObYInkgtRFo6mp9ldDZB6eudwFkxvHfYXo1+3AH3Ne6+zN2XzZ0yJYa3zYgsrzeQ2ikxq2zJs9PAnQ07NqTTLmlKUWYZfRi4GhjkWJVTp/pZRjuBhUU/n0Y8Q1H1odnWG0i4Mgno3E2baHnHfjbt3kTX/K502ylNIUoP4Y+B33b3Hnd/Wf4rjimn9wKnm9lzzewE4ErgOzGctz5ovYFMpKuL3Oo2DhzaP/FzRWIQJan8EDAL2BPnG7v7iJm9HfgBwbTTL7v7z+N8j0xLchpk2OylpN5LqjPR5ILubqC+tt+U+mXuxw3bj32C2TLg2wSB4egYh7tflmzTjrdsxgzfuGxZrd+2voQtigIwCza1L2hpiacKaqOq1ZTg/v5I+1IXNtVRUJDJ6L269z53n/DiGaWHcAvwceBnaKe07AubvQRjgwEkuxFNvavllOCIkwsKO61t2LGB7kXd8bZBJC9KQHjS3T+TeEskHpXMUtKMpnDlpgRHDQhRh+0qmFzQs93oWzxC37Y+epb0VPihGtvQwSFtgRmDKEnl+8zso2Z2vpm9uPCVeMtkciqZpaQZTeGqnRIctsnR5s2wZcvxeyTMmRN5csG6bT3kVrcd39trckMHhxjYO8DwaPC7HR4dZmDvAEMHI24qJUdF6SGck//zvKJjcUw7lSSUKscclkPo7Kx+rHzrVni8aLbwKafAGXW+uUu1U4IrGbbbuzfI5UT9O1CS+TiD+wbJ+djfd85zDO4bVC+hQlH2VH5ZLRoiMSk1e6nUsWrGyscHAzj2cxaDQtTgV+2+1JUO21VYY6mQT1BQCBR6BlGPS2nldkz7U3f/mpldF/a4u386uWZJVUpdYMYf6++vbqx8fDAoPp61gFBJorjaKcFRd1ErPHcSCkFBoL21PfTi396qIdFKlcshPCf/54yQr+kJt0tqIcnyGWU2mE9FLWtHhS06hGDYrliVCxFbc8GmOpt2b5r0ORpB5+xOWmzs77vFWuicrUWelSq3heYX8t/+0N1/UvyYmb000VZJbbS2BpvBhx2v1vjkKaQ7xbWS4FfttNNKhu2q+J0cWb+c2b/XywGaeyVzIU+gWUbVi5JU/iwwflZR2DGpN+PvWCc6Pt4pp5QeNiqWhTUPlSSK45h2GnXYrkr77lE+AYKgoABQvXI5hPOBC4C54/IIJxGUmpB6NzJS2fHxCnmCKEEh7TUPlSSK66wS7dEks9YnSJXK9RBOIMgVtBHkDQqeAl6fZKOaRto7psVRcfWMM8YmkMuVYkhTFvaqTvDvO7e6jZZVEQO5SAnlcgh9QJ+ZfcXdtwOYWQsw3d2fqlUDG1YWdkyrdnplrc4ZlzT3qh4aChamFdYiDA8HPxfaVa3ubnq299FHcw8dSXWirFSaYgWTAAAPHklEQVT+qJmdZGbPIdjecsDM3pNwuxpfFnZM6+gIFkUV7t7b26sveJfEOeMyNBRt9lOp3kxb2+RnTz388PEL09yD4zFZt62HmYeDmUcikxElqfx8d3/KzFYA3wfeC9wH/H2iLWt0WRmnTuKuuZJz1mrYrJIeWVgvxyzIrRTyK5X26KrN10SkJLNUI0oPYYqZTSHYR/nb7n6EkK0upUKl7kKTGmuPendcS2E1fwYGkmlbJT2ysF5O2LqCjO6BnetbDqDtN6ViUXoIXwC2AQ8APzazxQSJZalGLcfas5CvCBPH9M6oKu2Rje/l9PZW9vrxPZ/xtaQK4ljzESJ30yxtvykVm7CH4O6fcfdT3f1VHuymswNQfaNq1XKsPQv5ijC1HDYrdeGNekGupEcX1vMpJakSH11dzDyMtt+UipQMCGb2D0Xfv6PwfT4o3Jxwu5pDR0ewK9by5cGfSd2tZyVfMV4th82qXYRXyR7YYQHYPUhKF98AnHlmoj20ffcsB5RklujK9RD+oOj7N4977OwE2iJJqXW+IqpKLrLVqjapW0mPrlSgHRmpzQ1AkUI+QUFBoiiXQ7AS30u9yeragCQXi40fwy9Vt6mSoBh19lQcC/5iVFwu+4ZdZ3LNbYPM2zvMnjnt3Py6Tu66IANTgiUTygWEFjObTdCLKHxfCAwqXVFPsrBKt5Qkpr2GJdHDhoaSCooZDMC5m2ax4sL9vPu7A0x9NmjX/L3DvPsrweSCZg8K2oIzUC4gzCRYb1D4n3R/0WOadlpv0lylW2vlxvBbW5MPihkIwGvnDbGqc5Ad7cMsGm5n9bxOVv9g/9FgUDD12RzX3DbY1AGhsAVnYde1whacQNMFhXKlK5bUsB0i8Sk3ht/dXZs2pBiA184bYuXSAZ5pDS5w26cOs3LpAGs2w5KfHf/8eXuzWbSvVrQF5zFRFqaJ1JesJtFrZFXn4NFgUPBMa45VF4U/f8+c5vi9lKItOI+JsjBNpL5kcAy/lna0h1/IdpxE8Hso+r0cPqGFm1/XmL+XqHkBbcF5jHoI0niyXGCvBhYNh1/IFg23H/295IBtM+GTVy9tyPxBIS9QuNAX8gJDB48vi6ItOI9RD0EaUzMl0cdZPdg5JocAcOJoC6sHO4/+XlqA03+/l9GWzfTQeL+nSvIC2oLzmFQCgpm9Afg74EzgXHffmEY7RBrRij3BhWzMLKPBzqPHC46sL18ZtZ6nYlaaF9AWnIG0eggPAX9EUDhP6kXaO7xJZCv2dBwXAMIUL1orDgr1PhVTeYHJSSUguPtmAItaR0bSV8uKqQo8NVUICsWVUZOailmrXkfn7M4xAQ2aNy9QCeUQ5HhhF+RalarOaqnuBrZ23hAnjML+Q/vpf6yfztmdiUzFrGWvQ3mByUksIJjZD4H5IQ+tcvdvV3CelcBKgEVNMo88VaUuyOODQUHcFVNruUdCgzhuVXJIvqDca1cuHWA4X4ymcJFutVZG/fjaT9UMudR6AZjyApVLLCC4e4llMBWfZw2wBmDZjBkqmZG0UhfkUuIO0lkt1Z1RpVYlA5GCQtgitpznaGtpo4WWWIdctAAs+7QOQcYqd+Edn/Mxi3+xV5OvMq5UyVXJndE2Pyq1iG1kdISlc5Ye7RG0t7azdM7Squ64S/UulOjNjrSmnb4W+CwwF/iemW1y9z9Moy0yTqnSzW1tx+8dELYlZLWafJVxpUquSi5xfLxFw+1snxr+3Id//TDdi+Kr/aREb/al0kNw92+5+2nu3u7uHQoGNTA0BP39wd7A/f2lN7IvtWlNqYt/3NtwNvkq40qVXZUcwerBTk4cHfv3feJoC1/7r2mMjI7Q/1g/vdt66X+sP3SVbyU6pnfE3uuQeGmWUTOoZOZOqdLNmzeHnzuJsf0mXmVcqbKrkiMotYiNxQCbjyv9ANXNCFKiN9sUELIo7nn4lc7cCbsgF9oznsb2UxV1VfJE5xj//CXn9R+3T2KzloRuJgoIWZPEPPw4Zu7U29h+Ey1ui7oquRKlchCaEdTYNMsoa8rdzU9WHDN36mlsvxBUCwGvEFRL5U3kOKVyEJoR1NjUQ8iaJObhx3V3Xy9j+1rcVrWw3ASOZgQ1OPUQsiaJefj1dHcfBy1uq9qKPR2sGVjK4sPtmMPiw8G/nS1PlJhcIA1BPYSsSWqsvl7u7uNQbi1Ff3/D5RWqKV1RTlhuoly5bKl/6iFkTbPdzSchbC2FWbCwrsHyCoXSFdunDuN2rHTF2nnJfK7cTbMA6Hu0N5HzS7rUQ8iiJO7mk5p1k8XZPGFrKUZGYHRcsbYGyCuUK10R98wjALq6yPUFPQVpPAoIzSCpktJZLlU9Pqj29oY/r87zCtWWrpis1hwaOmpAGjJqBklMZU3yvKVELb/RRKotXTFZR9YvPxoUpHEoIDSDpGbd1HI2j9YWhCpViyhq6YpqHFm/HIC+bX2Jv5fUhgJCM0iqpHQtS1VX2xtp0LLaYdND1wwsTSZ/ECJ30yxwV0+hQSiH0AySmsqa1HnDEtXV9kbqrfRGBZIoXRFZVxe51RtoWTUy8XMl89RDaAZJTWVN4rylhobaSty7RL3D13Te5HR307Pd1EtoAOohNIukFqbFfd5SQ0NmwR19NXf4zbQ4r8bWbeuhZbEWrdU79RAkW0oNAY2O6g4/43J9ywHNPKpn6iFItpQqO9Herjv8OpDrWx6Ut9jWR8+SnrSbIxVSD0GypdQWng2Q/G0Wub7l4M6GHRvSbopUSAFBskXJ34bQs90YHdXMo3qjISPJHg0N1T0lmeuTeggikgglmeuPAoKIJEblsuuLAoKIJKer62hPQbJPAUFEEqfKqPVBAUFEEne0MqqCQqYpIIhITRSGjrQ+IbsUEESkZrQ+IdtSCQhm9vdmtsXMHjSzb5nZrDTaISK1tW5bDzMPa+goq9LqIdwJnOXuZwNbgfen1A4RqbF992j7zaxKJSC4+3+7e6HfeDdwWhrtEJF0KMmcTVnIIbwFuKPUg2a20sw2mtnGJ44cqWGzRCRJSjJnT2IBwcx+aGYPhXxdXvScVcAIsLbUedx9jbsvc/dlc6dMSaq5IpKC3E2zGB0dYdPuTWk3RUiwuJ27X1TucTN7M/Aa4OXu7km1Q0QyrKuL1lwvBw7tT7slQnqzjC4G3gtc5u7PpNEGEcmGI+uXa+ZRRqSVQ/hHYAZwp5ltMrN/SqkdIpIB++5ZDigopC2tWUa/4+4L3b0r//W2NNohItlxtFz2tr50G9LEsjDLSEQEgNzqNlBKMTUKCCKSHd3dgIaO0qKAICKZop3W0qOAICKZo6CQDgUEEckkrWSuPQUEEcmsmYdRuewaUkAQkczS+oTaUkAQkUxTPqF2FBBEJPMUFGpDAUFE6kIhKEhyFBBEpG70bDf1EhKkgCAidWPdth5tv5kgBQQRqStH1mtP5qQoIIhI3Tm6J7Mqo8ZKAUFE6lLuplngrpXMMVJAEJH61NVFbnWbVjLHyOppO2MzexoYSLsdCTgZeDLtRiSgUT8XNO5na9TPBY372aJ8rsXuPneiE7XF056aGXD3ZWk3Im5mtlGfq7406mdr1M8FjfvZ4vxcGjISERFAAUFERPLqLSCsSbsBCdHnqj+N+tka9XNB43622D5XXSWVRUQkOfXWQxARkYQoIIiICFBnAcHMPmxmD5rZJjP7bzM7Je02xcXM/t7MtuQ/37fMbFbabYqDmb3BzH5uZjkzq/spf2Z2sZkNmNkjZva+tNsTFzP7spntMbOH0m5LnMxsoZmtM7PN+X+H70i7TXExs6lm9lMzeyD/2T5U9TnrKYdgZie5+1P57/8GeL67vy3lZsXCzF4J/MjdR8zs4wDu/t6Um1U1MzsTyAFfAN7t7htTbtKkmVkrsBV4BbATuBe4yt1/kWrDYmBmfwAcBL7q7mel3Z64mNkCYIG7329mM4D7gCsa5O/MgOe4+0EzmwJsAN7h7ndP9px11UMoBIO85wD1E80m4O7/7e6FNfh3A6el2Z64uPtmd2+U1eXnAo+4+6C7PwvcClyecpti4e4/Bn6ddjvi5u673P3+/PdPA5uBU9NtVTw8cDD/45T8V1XXxLoKCABmttrMHgNWAH+bdnsS8hbgjrQbIcc5FXis6OedNMjFpRmY2RLgHOCedFsSHzNrNbNNwB7gTnev6rNlLiCY2Q/N7KGQr8sB3H2Vuy8E1gJvT7e1lZnos+WfswoYIfh8dSHK52oQFnKsYXqpjczMpgO3Ae8cN9JQ19x91N27CEYUzjWzqob7MlfLyN0vivjUfwW+B3wwwebEaqLPZmZvBl4DvNzrKLlTwd9ZvdsJLCz6+TTg8ZTaIhHlx9dvA9a6+zfTbk8S3H2/mfUCFwOTnhiQuR5COWZ2etGPlwFb0mpL3MzsYuC9wGXu/kza7ZFQ9wKnm9lzzewE4ErgOym3ScrIJ16/BGx290+n3Z44mdncwmxEM5sGXESV18R6m2V0G7CUYNbKduBt7v6rdFsVDzN7BGgH9uYP3d0IM6jM7LXAZ4G5wH5gk7v/YbqtmjwzexXwD0Ar8GV3X51yk2JhZl8HlhOUUh4CPujuX0q1UTEws25gPfAzgusGwAfc/fvptSoeZnY2cAvBv8UW4N/d/YaqzllPAUFERJJTV0NGIiKSHAUEEREBFBBERCRPAUFERAAFBBERyVNAEKmAmZ1jZm5mdTt1VqQUBQSRylxFUFXyqrQbIhI3rUMQiSi/6vWXBOWv1wOd7n44/9j1BAUXHwOeBO5z90+a2W8DnyNYmPcM8H/cvWFW2EtjUQ9BJLqXAo+6+y+BXuBVAPmNf15HUEnzj4DijYDWAH/t7r8LvBv4fC0bLFKJzBW3E8mwqwj2QCD/55uAbwLdwLfd/RCAmd2e/3M6cAHwH0HnAgjKk4hkkgKCSAT53dJeB1yWL1FuwJz8LlxhZbEh6IHvz5cnFsk8DRmJRHMR8IC7L3T3Je6+mKCk8hUESeZL83vcTgdeDUd3+HvUzN4AQQ7CzF6UUvtFJqSAIBLNVcC3xh27DfgTd7+XoAz2AwRDSBuBA/nnrADeamYPAD+nQbbclMakWUYiMTCz6fnNzk8EfgysLOzlK1IvlEMQiccaM3s+MBW4RcFA6pF6CCIiAiiHICIieQoIIiICKCCIiEieAoKIiAAKCCIikvf/AXRbJnn45fYTAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from matplotlib.colors import ListedColormap\n",
"X_set,y_set=X_train,y_train\n",
"X1,X2=np. meshgrid(np. arange(start=X_set[:,0].min()-1, stop=X_set[:, 0].max()+1, step=0.01),\n",
" np. arange(start=X_set[:,1].min()-1, stop=X_set[:,1].max()+1, step=0.01))\n",
"plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),\n",
" alpha = 0.75, cmap = ListedColormap(('red', 'green')))\n",
"plt.xlim(X1.min(),X1.max())\n",
"plt.ylim(X2.min(),X2.max())\n",
"for i,j in enumerate(np. unique(y_set)):\n",
" plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1],\n",
" c = ListedColormap(('red', 'green'))(i), label=j)\n",
"\n",
"plt. title(' LOGISTIC(Training set)')\n",
"plt. xlabel(' Age')\n",
"plt. ylabel(' Estimated Salary')\n",
"plt. legend()\n",
"plt. show()\n",
"\n",
"X_set,y_set=X_test,y_test\n",
"X1,X2=np. meshgrid(np. arange(start=X_set[:,0].min()-1, stop=X_set[:, 0].max()+1, step=0.01),\n",
" np. arange(start=X_set[:,1].min()-1, stop=X_set[:,1].max()+1, step=0.01))\n",
"\n",
"plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),\n",
" alpha = 0.75, cmap = ListedColormap(('red', 'green')))\n",
"plt.xlim(X1.min(),X1.max())\n",
"plt.ylim(X2.min(),X2.max())\n",
"for i,j in enumerate(np. unique(y_set)):\n",
" plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1],\n",
" c = ListedColormap(('red', 'green'))(i), label=j)\n",
"\n",
"plt. title(' LOGISTIC(Test set)')\n",
"plt. xlabel(' Age')\n",
"plt. ylabel(' Estimated Salary')\n",
"plt. legend()\n",
"plt. show()"
]
}
],
"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.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}