├── LICENSE ├── README.md └── notebooks ├── Programming Exercise 1 - Linear Regression.ipynb ├── Programming Exercise 2 - Logistic Regression.ipynb ├── Programming Exercise 3 - Multi-class Classification and Neural Networks.ipynb ├── Programming Exercise 4 - Neural Networks Learning.ipynb ├── Programming Exercise 5 - Regularized Linear Regression and Bias v.s. Variance.ipynb ├── Programming Exercise 6 - Support Vector Machines.ipynb ├── Programming Exercise 7 - K-means Clustering and Principal Component Analysis.ipynb ├── Programming Exercise 8 - Anomaly Detection and Recommender Systems.ipynb └── data ├── bird_small.png ├── ex1data1.txt ├── ex2data1.txt ├── ex2data2.txt ├── ex3data1.mat ├── ex3weights.mat ├── ex4data1.mat ├── ex4weights.mat ├── ex5data1.mat ├── ex6data1.mat ├── ex6data2.mat ├── ex6data3.mat ├── ex7data1.mat ├── ex7data2.mat ├── ex7faces.mat ├── ex8_movies.mat ├── ex8data1.mat ├── ex8data2.mat └── vocab.txt /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Jordi Warmenhoven 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Coursera Machine Learning 2 |

3 | This repository contains python implementations of certain exercises from the course by Andrew Ng.

4 | 5 | For a number of assignments in the course you are instructed to create complete, stand-alone Octave/MATLAB implementations of certain algorithms (Linear and Logistic Regression for example). The rest of the assignments depend on additional code provided by the course authors. For most of the code in this repository I have instead used existing Python implementations like Scikit-learn.

6 | 7 | Exercise 1 - Linear Regression
8 | Exercise 2 - Logistic Regression
9 | Exercise 3 - Multi-class Classification and Neural Networks
10 | Exercise 4 - Neural Networks Learning
11 | Exercise 5 - Regularized Linear Regression and Bias v.s. Variance
12 | Exercise 6 - Support Vector Machines
13 | Exercise 7 - K-means Clustering and Principal Component Analysis
14 | Exercise 8 - Anomaly Detection and Recommender Systems
15 | 16 | ##### References: 17 | https://www.coursera.org/learn/machine-learning/home/welcome 18 | -------------------------------------------------------------------------------- /notebooks/Programming Exercise 3 - Multi-class Classification and Neural Networks.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Programming Exercise 3 - Multi-class Classification and Neural Networks" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 36, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "# %load ../../standard_import.txt\n", 19 | "import pandas as pd\n", 20 | "import numpy as np\n", 21 | "import matplotlib as mpl\n", 22 | "import matplotlib.pyplot as plt\n", 23 | "\n", 24 | "# load MATLAB files\n", 25 | "from scipy.io import loadmat\n", 26 | "from scipy.optimize import minimize\n", 27 | "\n", 28 | "from sklearn.linear_model import LogisticRegression\n", 29 | "\n", 30 | "pd.set_option('display.notebook_repr_html', False)\n", 31 | "pd.set_option('display.max_columns', None)\n", 32 | "pd.set_option('display.max_rows', 150)\n", 33 | "pd.set_option('display.max_seq_items', None)\n", 34 | " \n", 35 | "#%config InlineBackend.figure_formats = {'pdf',}\n", 36 | "%matplotlib inline\n", 37 | "\n", 38 | "import seaborn as sns\n", 39 | "sns.set_context('notebook')\n", 40 | "sns.set_style('white')" 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": {}, 46 | "source": [ 47 | "#### Load MATLAB datafiles" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": 3, 53 | "metadata": { 54 | "collapsed": false 55 | }, 56 | "outputs": [ 57 | { 58 | "data": { 59 | "text/plain": [ 60 | "dict_keys(['__version__', '__globals__', '__header__', 'y', 'X'])" 61 | ] 62 | }, 63 | "execution_count": 3, 64 | "metadata": {}, 65 | "output_type": "execute_result" 66 | } 67 | ], 68 | "source": [ 69 | "data = loadmat('data/ex3data1.mat')\n", 70 | "data.keys()" 71 | ] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": 4, 76 | "metadata": { 77 | "collapsed": false 78 | }, 79 | "outputs": [ 80 | { 81 | "data": { 82 | "text/plain": [ 83 | "dict_keys(['__version__', '__globals__', '__header__', 'Theta1', 'Theta2'])" 84 | ] 85 | }, 86 | "execution_count": 4, 87 | "metadata": {}, 88 | "output_type": "execute_result" 89 | } 90 | ], 91 | "source": [ 92 | "weights = loadmat('data/ex3weights.mat')\n", 93 | "weights.keys()" 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": 5, 99 | "metadata": { 100 | "collapsed": false 101 | }, 102 | "outputs": [ 103 | { 104 | "name": "stdout", 105 | "output_type": "stream", 106 | "text": [ 107 | "X: (5000, 401) (with intercept)\n", 108 | "y: (5000, 1)\n" 109 | ] 110 | } 111 | ], 112 | "source": [ 113 | "y = data['y']\n", 114 | "# Add constant for intercept\n", 115 | "X = np.c_[np.ones((data['X'].shape[0],1)), data['X']]\n", 116 | "\n", 117 | "print('X: {} (with intercept)'.format(X.shape))\n", 118 | "print('y: {}'.format(y.shape))" 119 | ] 120 | }, 121 | { 122 | "cell_type": "code", 123 | "execution_count": 6, 124 | "metadata": { 125 | "collapsed": false 126 | }, 127 | "outputs": [ 128 | { 129 | "name": "stdout", 130 | "output_type": "stream", 131 | "text": [ 132 | "theta1: (25, 401)\n", 133 | "theta2: (10, 26)\n" 134 | ] 135 | } 136 | ], 137 | "source": [ 138 | "theta1, theta2 = weights['Theta1'], weights['Theta2']\n", 139 | "\n", 140 | "print('theta1: {}'.format(theta1.shape))\n", 141 | "print('theta2: {}'.format(theta2.shape))" 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": 7, 147 | "metadata": { 148 | "collapsed": false 149 | }, 150 | "outputs": [ 151 | { 152 | "data": { 153 | "image/png": "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\n6dNcuHCBrKwsCgsLiY+P5/Lly1gsFiIjI5+49hQKBUNDQzQ3N6PVatm9ezc7d+7EZrNJ0b579uwh\nJiaG3t5ezp07F/IpShAEybpVU1NDSkoK5eXlJCQkoFAo8Pl89Pb2cvjwYVQqFS+++OIPCmCDwUBl\nZeUjT7aCIDA1NUVnZyetra3U1tZy5coVRkZGGBwcZOvWrU/0VyoUCiYmJuju7qarqwuTySS97/j4\nOB6PR/I/h4rf76e/v599+/ahVquluSHuRaEwPj7O0aNH6evrQ6VSoVAoUKvVksJrNBqlbz8xMUFX\nVxd6vZ5du3aRnZ0dtAVR9H03NTUxNDTEL37xC2w2G1NTU9TU1NDY2IjdbsdgMLB27VpiYmJC3kf8\nfj+9vb2o1Wp0Oh0Oh4Px8XGMRiNRUVEhtfVd1Go1ZrOZmJgYOjs7/2/5gBUKBRaLhYmJCY4fP45G\no2FqaorDhw/T0tLCmjVrKCsrC2pzV6vV5OXlkZeXR0NDA3q9XtLmExISUKlUs0qH6OnpYWZmhoKC\nAhITEyWBUVdXh8PhIBAIhLQIBgcHuXbtGnfu3JF+z2QyoVKp6Ojo4NatW5IPLSoqioKCAnJzc4Oe\n+GLEZWxsLIsWLcJisTz07j6fj+npaZRKZchKiWjebm9vR6vVfs/05fP5JIUomDERo737+/ul0+N3\nTw8iBoOBRYsWsXPnTn7961/T2tpKamrqYxfa6OgoIyMjbNy4kaysrFkFZzyIKMTOnj3LkSNHMBgM\n7N69G61WS3R0NCaTiZSUFJKSkh4KunnSmHi9XiYmJlAoFBQUFLBkyRIp6CwuLo6Ojg4iIyNJT09n\n/fr1LFu2LOi4ABGPx8P169e5efMmsbGxVFdXk5iYSFNTE5cvX6a4uJjExMSgzM9utxun00lMTAyF\nhYWkpqZKCgGAXq9Hr9cjCAKRkZEhn9ZmZmb49ttv+fLLL+nr62Pbtm3k5uZiNBoJBAIMDg5y8uRJ\nampqWLdu3WNNj1qtltzcXLKzsx8ZOBkIBCgtLWVoaIjc3Fz27dtHY2MjWq2WwsJCMjIyHtt3lUqF\nx+OhpaWFuro6srKypG9nMBjQaDRh70Mej4fW1lZOnz7NO++8w/r168MSvuJ7Tk5O4nK5pAwRjUYj\nxR643W60Wq3Ud7vdjk6nY3p6OqxnTU9PS20qFAru3LnDuXPncDgc0vPDsc4pFAqmpqbo6+tjYGCA\n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\n", 154 | "text/plain": [ 155 | "" 156 | ] 157 | }, 158 | "metadata": {}, 159 | "output_type": "display_data" 160 | } 161 | ], 162 | "source": [ 163 | "sample = np.random.choice(X.shape[0], 20)\n", 164 | "plt.imshow(X[sample,1:].reshape(-1,20).T)\n", 165 | "plt.axis('off');" 166 | ] 167 | }, 168 | { 169 | "cell_type": "markdown", 170 | "metadata": {}, 171 | "source": [ 172 | "### Multiclass Classification" 173 | ] 174 | }, 175 | { 176 | "cell_type": "markdown", 177 | "metadata": {}, 178 | "source": [ 179 | "#### Logistic regression hypothesis\n", 180 | "#### $$ h_{\\theta}(x) = g(\\theta^{T}x)$$\n", 181 | "#### $$ g(z)=\\frac{1}{1+e^{−z}} $$" 182 | ] 183 | }, 184 | { 185 | "cell_type": "code", 186 | "execution_count": 8, 187 | "metadata": { 188 | "collapsed": true 189 | }, 190 | "outputs": [], 191 | "source": [ 192 | "def sigmoid(z):\n", 193 | " return(1 / (1 + np.exp(-z)))" 194 | ] 195 | }, 196 | { 197 | "cell_type": "markdown", 198 | "metadata": {}, 199 | "source": [ 200 | "#### Regularized Cost Function \n", 201 | "#### $$ J(\\theta) = \\frac{1}{m}\\sum_{i=1}^{m}\\big[-y^{(i)}\\, log\\,( h_\\theta\\,(x^{(i)}))-(1-y^{(i)})\\,log\\,(1-h_\\theta(x^{(i)}))\\big] + \\frac{\\lambda}{2m}\\sum_{j=1}^{n}\\theta_{j}^{2}$$\n", 202 | "#### Vectorized Cost Function\n", 203 | "#### $$ J(\\theta) = \\frac{1}{m}\\big((\\,log\\,(g(X\\theta))^Ty+(\\,log\\,(1-g(X\\theta))^T(1-y)\\big) + \\frac{\\lambda}{2m}\\sum_{j=1}^{n}\\theta_{j}^{2}$$" 204 | ] 205 | }, 206 | { 207 | "cell_type": "code", 208 | "execution_count": 9, 209 | "metadata": { 210 | "collapsed": true 211 | }, 212 | "outputs": [], 213 | "source": [ 214 | "def lrcostFunctionReg(theta, reg, X, y):\n", 215 | " m = y.size\n", 216 | " h = sigmoid(X.dot(theta))\n", 217 | " \n", 218 | " J = -1*(1/m)*(np.log(h).T.dot(y)+np.log(1-h).T.dot(1-y)) + (reg/(2*m))*np.sum(np.square(theta[1:]))\n", 219 | " \n", 220 | " if np.isnan(J[0]):\n", 221 | " return(np.inf)\n", 222 | " return(J[0]) " 223 | ] 224 | }, 225 | { 226 | "cell_type": "code", 227 | "execution_count": 10, 228 | "metadata": { 229 | "collapsed": true 230 | }, 231 | "outputs": [], 232 | "source": [ 233 | "def lrgradientReg(theta, reg, X,y):\n", 234 | " m = y.size\n", 235 | " h = sigmoid(X.dot(theta.reshape(-1,1)))\n", 236 | " \n", 237 | " grad = (1/m)*X.T.dot(h-y) + (reg/m)*np.r_[[[0]],theta[1:].reshape(-1,1)]\n", 238 | " \n", 239 | " return(grad.flatten())" 240 | ] 241 | }, 242 | { 243 | "cell_type": "markdown", 244 | "metadata": {}, 245 | "source": [ 246 | "#### One-vs-all Classification" 247 | ] 248 | }, 249 | { 250 | "cell_type": "code", 251 | "execution_count": 27, 252 | "metadata": { 253 | "collapsed": false 254 | }, 255 | "outputs": [], 256 | "source": [ 257 | "def oneVsAll(features, classes, n_labels, reg):\n", 258 | " initial_theta = np.zeros((X.shape[1],1)) # 401x1\n", 259 | " all_theta = np.zeros((n_labels, X.shape[1])) #10x401\n", 260 | "\n", 261 | " for c in np.arange(1, n_labels+1):\n", 262 | " res = minimize(lrcostFunctionReg, initial_theta, args=(reg, features, (classes == c)*1), method=None,\n", 263 | " jac=lrgradientReg, options={'maxiter':50})\n", 264 | " all_theta[c-1] = res.x\n", 265 | " return(all_theta)" 266 | ] 267 | }, 268 | { 269 | "cell_type": "code", 270 | "execution_count": 12, 271 | "metadata": { 272 | "collapsed": false 273 | }, 274 | "outputs": [], 275 | "source": [ 276 | "theta = oneVsAll(X, y, 10, 0.1)" 277 | ] 278 | }, 279 | { 280 | "cell_type": "markdown", 281 | "metadata": {}, 282 | "source": [ 283 | "#### One-vs-all Prediction" 284 | ] 285 | }, 286 | { 287 | "cell_type": "code", 288 | "execution_count": 25, 289 | "metadata": { 290 | "collapsed": true 291 | }, 292 | "outputs": [], 293 | "source": [ 294 | "def predictOneVsAll(all_theta, features):\n", 295 | " probs = sigmoid(X.dot(all_theta.T))\n", 296 | " \n", 297 | " # Adding one because Python uses zero based indexing for the 10 columns (0-9),\n", 298 | " # while the 10 classes are numbered from 1 to 10.\n", 299 | " return(np.argmax(probs, axis=1)+1)" 300 | ] 301 | }, 302 | { 303 | "cell_type": "code", 304 | "execution_count": 26, 305 | "metadata": { 306 | "collapsed": false 307 | }, 308 | "outputs": [ 309 | { 310 | "name": "stdout", 311 | "output_type": "stream", 312 | "text": [ 313 | "Training set accuracy: 93.17999999999999 %\n" 314 | ] 315 | } 316 | ], 317 | "source": [ 318 | "pred = predictOneVsAll(theta, X)\n", 319 | "print('Training set accuracy: {} %'.format(np.mean(pred == y.ravel())*100))" 320 | ] 321 | }, 322 | { 323 | "cell_type": "markdown", 324 | "metadata": {}, 325 | "source": [ 326 | "#### Multiclass Logistic Regression with scikit-learn" 327 | ] 328 | }, 329 | { 330 | "cell_type": "code", 331 | "execution_count": 43, 332 | "metadata": { 333 | "collapsed": false 334 | }, 335 | "outputs": [ 336 | { 337 | "data": { 338 | "text/plain": [ 339 | "LogisticRegression(C=10, class_weight=None, dual=False, fit_intercept=True,\n", 340 | " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", 341 | " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", 342 | " verbose=0, warm_start=False)" 343 | ] 344 | }, 345 | "execution_count": 43, 346 | "metadata": {}, 347 | "output_type": "execute_result" 348 | } 349 | ], 350 | "source": [ 351 | "clf = LogisticRegression(C=10, penalty='l2', solver='liblinear')\n", 352 | "# Scikit-learn fits intercept automatically, so we exclude first column with 'ones' from X when fitting.\n", 353 | "clf.fit(X[:,1:],y.ravel())" 354 | ] 355 | }, 356 | { 357 | "cell_type": "code", 358 | "execution_count": 44, 359 | "metadata": { 360 | "collapsed": false 361 | }, 362 | "outputs": [ 363 | { 364 | "name": "stdout", 365 | "output_type": "stream", 366 | "text": [ 367 | "Training set accuracy: 96.5 %\n" 368 | ] 369 | } 370 | ], 371 | "source": [ 372 | "pred2 = clf.predict(X[:,1:])\n", 373 | "print('Training set accuracy: {} %'.format(np.mean(pred2 == y.ravel())*100))" 374 | ] 375 | }, 376 | { 377 | "cell_type": "markdown", 378 | "metadata": {}, 379 | "source": [ 380 | "### Neural Networks" 381 | ] 382 | }, 383 | { 384 | "cell_type": "code", 385 | "execution_count": 45, 386 | "metadata": { 387 | "collapsed": true 388 | }, 389 | "outputs": [], 390 | "source": [ 391 | "def predict(theta_1, theta_2, features):\n", 392 | " z2 = theta_1.dot(features.T)\n", 393 | " a2 = np.c_[np.ones((data['X'].shape[0],1)), sigmoid(z2).T]\n", 394 | " \n", 395 | " z3 = a2.dot(theta_2.T)\n", 396 | " a3 = sigmoid(z3)\n", 397 | " \n", 398 | " return(np.argmax(a3, axis=1)+1) " 399 | ] 400 | }, 401 | { 402 | "cell_type": "code", 403 | "execution_count": 46, 404 | "metadata": { 405 | "collapsed": false 406 | }, 407 | "outputs": [ 408 | { 409 | "name": "stdout", 410 | "output_type": "stream", 411 | "text": [ 412 | "Training set accuracy: 97.52 %\n" 413 | ] 414 | } 415 | ], 416 | "source": [ 417 | "pred = predict(theta1, theta2, X)\n", 418 | "print('Training set accuracy: {} %'.format(np.mean(pred == y.ravel())*100))" 419 | ] 420 | } 421 | ], 422 | "metadata": { 423 | "kernelspec": { 424 | "display_name": "Python 3", 425 | "language": "python", 426 | "name": "python3" 427 | }, 428 | "language_info": { 429 | "codemirror_mode": { 430 | "name": "ipython", 431 | "version": 3 432 | }, 433 | "file_extension": ".py", 434 | "mimetype": "text/x-python", 435 | "name": "python", 436 | "nbconvert_exporter": "python", 437 | "pygments_lexer": "ipython3", 438 | "version": "3.4.3" 439 | } 440 | }, 441 | "nbformat": 4, 442 | "nbformat_minor": 0 443 | } 444 | -------------------------------------------------------------------------------- /notebooks/Programming Exercise 4 - Neural Networks Learning.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Programming Exercise 4 - Neural Networks Learning" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 2, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "# %load ../../../standard_import.txt\n", 19 | "import pandas as pd\n", 20 | "import numpy as np\n", 21 | "import matplotlib as mpl\n", 22 | "import matplotlib.pyplot as plt\n", 23 | "\n", 24 | "# load MATLAB files\n", 25 | "from scipy.io import loadmat\n", 26 | "\n", 27 | "pd.set_option('display.notebook_repr_html', False)\n", 28 | "pd.set_option('display.max_columns', None)\n", 29 | "pd.set_option('display.max_rows', 150)\n", 30 | "pd.set_option('display.max_seq_items', None)\n", 31 | " \n", 32 | "#%config InlineBackend.figure_formats = {'pdf',}\n", 33 | "%matplotlib inline\n", 34 | "\n", 35 | "import seaborn as sns\n", 36 | "sns.set_context('notebook')\n", 37 | "sns.set_style('darkgrid')" 38 | ] 39 | }, 40 | { 41 | "cell_type": "markdown", 42 | "metadata": {}, 43 | "source": [ 44 | "#### Load MATLAB datafiles" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 3, 50 | "metadata": { 51 | "collapsed": false 52 | }, 53 | "outputs": [ 54 | { 55 | "data": { 56 | "text/plain": [ 57 | "dict_keys(['X', '__header__', 'y', '__globals__', '__version__'])" 58 | ] 59 | }, 60 | "execution_count": 3, 61 | "metadata": {}, 62 | "output_type": "execute_result" 63 | } 64 | ], 65 | "source": [ 66 | "data = loadmat('data/ex4data1.mat')\n", 67 | "data.keys()" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 4, 73 | "metadata": { 74 | "collapsed": false 75 | }, 76 | "outputs": [ 77 | { 78 | "name": "stdout", 79 | "output_type": "stream", 80 | "text": [ 81 | "X: (5000, 401) (with intercept)\n", 82 | "y: (5000, 1)\n" 83 | ] 84 | } 85 | ], 86 | "source": [ 87 | "y = data['y']\n", 88 | "# Add intercept\n", 89 | "X = np.c_[np.ones((data['X'].shape[0],1)), data['X']]\n", 90 | "\n", 91 | "print('X:',X.shape, '(with intercept)')\n", 92 | "print('y:',y.shape)" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": 5, 98 | "metadata": { 99 | "collapsed": false 100 | }, 101 | "outputs": [ 102 | { 103 | "data": { 104 | "text/plain": [ 105 | "dict_keys(['Theta2', '__header__', 'Theta1', '__globals__', '__version__'])" 106 | ] 107 | }, 108 | "execution_count": 5, 109 | "metadata": {}, 110 | "output_type": "execute_result" 111 | } 112 | ], 113 | "source": [ 114 | "weights = loadmat('data/ex3weights.mat')\n", 115 | "weights.keys()" 116 | ] 117 | }, 118 | { 119 | "cell_type": "code", 120 | "execution_count": 6, 121 | "metadata": { 122 | "collapsed": false 123 | }, 124 | "outputs": [ 125 | { 126 | "name": "stdout", 127 | "output_type": "stream", 128 | "text": [ 129 | "theta1 : (25, 401)\n", 130 | "theta2 : (10, 26)\n", 131 | "params : (10285,)\n" 132 | ] 133 | } 134 | ], 135 | "source": [ 136 | "theta1, theta2 = weights['Theta1'], weights['Theta2']\n", 137 | "print('theta1 :', theta1.shape)\n", 138 | "print('theta2 :', theta2.shape)\n", 139 | "params = np.r_[theta1.ravel(), theta2.ravel()]\n", 140 | "print('params :', params.shape)" 141 | ] 142 | }, 143 | { 144 | "cell_type": "markdown", 145 | "metadata": {}, 146 | "source": [ 147 | "#### Neural Network\n", 148 | "Input layer size = 400 (20x20 pixels)
\n", 149 | "Hidden layer size = 25
\n", 150 | "Number of labels = 10" 151 | ] 152 | }, 153 | { 154 | "cell_type": "markdown", 155 | "metadata": {}, 156 | "source": [ 157 | "### Neural Networks - Feed Forward and Cost Function" 158 | ] 159 | }, 160 | { 161 | "cell_type": "code", 162 | "execution_count": 7, 163 | "metadata": { 164 | "collapsed": true 165 | }, 166 | "outputs": [], 167 | "source": [ 168 | "def sigmoid(z):\n", 169 | " return(1 / (1 + np.exp(-z)))" 170 | ] 171 | }, 172 | { 173 | "cell_type": "markdown", 174 | "metadata": {}, 175 | "source": [ 176 | "#### Sigmoid gradient\n", 177 | "#### $$ g'(z) = g(z)(1 - g(z))$$\n", 178 | "where $$ g(z) = \\frac{1}{1+e^{-z}}$$" 179 | ] 180 | }, 181 | { 182 | "cell_type": "code", 183 | "execution_count": 8, 184 | "metadata": { 185 | "collapsed": true 186 | }, 187 | "outputs": [], 188 | "source": [ 189 | "def sigmoidGradient(z):\n", 190 | " return(sigmoid(z)*(1-sigmoid(z)))" 191 | ] 192 | }, 193 | { 194 | "cell_type": "markdown", 195 | "metadata": {}, 196 | "source": [ 197 | "#### Cost Function \n", 198 | "#### $$ J(\\theta) = \\frac{1}{m}\\sum_{i=1}^{m}\\sum_{k=1}^{K}\\big[-y^{(i)}_{k}\\, log\\,(( h_\\theta\\,(x^{(i)}))_k)-(1-y^{(i)}_k)\\,log\\,(1-h_\\theta(x^{(i)}))_k)\\big]$$\n", 199 | "\n", 200 | "#### Regularized Cost Function\n", 201 | "#### $$ J(\\theta) = \\frac{1}{m}\\sum_{i=1}^{m}\\sum_{k=1}^{K}\\bigg[-y^{(i)}_{k}\\, log\\,(( h_\\theta\\,(x^{(i)}))_k)-(1-y^{(i)}_k)\\,log\\,(1-h_\\theta(x^{(i)}))_k)\\bigg] + \\frac{\\lambda}{2m}\\bigg[\\sum_{j=1}^{25}\\sum_{k=1}^{400}(\\Theta_{j,k}^{(1)})^2+\\sum_{j=1}^{10}\\sum_{k=1}^{25}(\\Theta_{j,k}^{(2)})^2\\bigg]$$" 202 | ] 203 | }, 204 | { 205 | "cell_type": "code", 206 | "execution_count": 9, 207 | "metadata": { 208 | "collapsed": false 209 | }, 210 | "outputs": [], 211 | "source": [ 212 | "def nnCostFunction(nn_params, input_layer_size, hidden_layer_size, num_labels, features, classes, reg):\n", 213 | " \n", 214 | " # When comparing to Octave code note that Python uses zero-indexed arrays.\n", 215 | " # But because Numpy indexing does not include the right side, the code is the same anyway.\n", 216 | " theta1 = nn_params[0:(hidden_layer_size*(input_layer_size+1))].reshape(hidden_layer_size,(input_layer_size+1))\n", 217 | " theta2 = nn_params[(hidden_layer_size*(input_layer_size+1)):].reshape(num_labels,(hidden_layer_size+1))\n", 218 | "\n", 219 | " m = features.shape[0]\n", 220 | " y_matrix = pd.get_dummies(classes.ravel()).as_matrix() \n", 221 | " \n", 222 | " # Cost\n", 223 | " a1 = features # 5000x401\n", 224 | " \n", 225 | " z2 = theta1.dot(a1.T) # 25x401 * 401x5000 = 25x5000 \n", 226 | " a2 = np.c_[np.ones((features.shape[0],1)),sigmoid(z2.T)] # 5000x26 \n", 227 | " \n", 228 | " z3 = theta2.dot(a2.T) # 10x26 * 26x5000 = 10x5000 \n", 229 | " a3 = sigmoid(z3) # 10x5000\n", 230 | " \n", 231 | " J = -1*(1/m)*np.sum((np.log(a3.T)*(y_matrix)+np.log(1-a3).T*(1-y_matrix))) + \\\n", 232 | " (reg/(2*m))*(np.sum(np.square(theta1[:,1:])) + np.sum(np.square(theta2[:,1:])))\n", 233 | "\n", 234 | " # Gradients\n", 235 | " d3 = a3.T - y_matrix # 5000x10\n", 236 | " d2 = theta2[:,1:].T.dot(d3.T)*sigmoidGradient(z2) # 25x10 *10x5000 * 25x5000 = 25x5000\n", 237 | " \n", 238 | " delta1 = d2.dot(a1) # 25x5000 * 5000x401 = 25x401\n", 239 | " delta2 = d3.T.dot(a2) # 10x5000 *5000x26 = 10x26\n", 240 | " \n", 241 | " theta1_ = np.c_[np.ones((theta1.shape[0],1)),theta1[:,1:]]\n", 242 | " theta2_ = np.c_[np.ones((theta2.shape[0],1)),theta2[:,1:]]\n", 243 | " \n", 244 | " theta1_grad = delta1/m + (theta1_*reg)/m\n", 245 | " theta2_grad = delta2/m + (theta2_*reg)/m\n", 246 | " \n", 247 | " return(J, theta1_grad, theta2_grad)" 248 | ] 249 | }, 250 | { 251 | "cell_type": "code", 252 | "execution_count": 10, 253 | "metadata": { 254 | "collapsed": false 255 | }, 256 | "outputs": [ 257 | { 258 | "data": { 259 | "text/plain": [ 260 | "0.28762916516131892" 261 | ] 262 | }, 263 | "execution_count": 10, 264 | "metadata": {}, 265 | "output_type": "execute_result" 266 | } 267 | ], 268 | "source": [ 269 | "# Regularization parameter = 0\n", 270 | "nnCostFunction(params, 400, 25, 10, X, y, 0)[0]" 271 | ] 272 | }, 273 | { 274 | "cell_type": "code", 275 | "execution_count": 11, 276 | "metadata": { 277 | "collapsed": false 278 | }, 279 | "outputs": [ 280 | { 281 | "data": { 282 | "text/plain": [ 283 | "0.38376985909092365" 284 | ] 285 | }, 286 | "execution_count": 11, 287 | "metadata": {}, 288 | "output_type": "execute_result" 289 | } 290 | ], 291 | "source": [ 292 | "# Regularization parameter = 1\n", 293 | "nnCostFunction(params, 400, 25, 10, X, y, 1)[0]" 294 | ] 295 | }, 296 | { 297 | "cell_type": "code", 298 | "execution_count": 12, 299 | "metadata": { 300 | "collapsed": false 301 | }, 302 | "outputs": [ 303 | { 304 | "data": { 305 | "text/plain": [ 306 | "[0.19661193324148185,\n", 307 | " 0.23500371220159449,\n", 308 | " 0.25,\n", 309 | " 0.23500371220159449,\n", 310 | " 0.19661193324148185]" 311 | ] 312 | }, 313 | "execution_count": 12, 314 | "metadata": {}, 315 | "output_type": "execute_result" 316 | } 317 | ], 318 | "source": [ 319 | "[sigmoidGradient(z) for z in [-1, -0.5, 0, 0.5, 1]]" 320 | ] 321 | } 322 | ], 323 | "metadata": { 324 | "kernelspec": { 325 | "display_name": "Python 3", 326 | "language": "python", 327 | "name": "python3" 328 | }, 329 | "language_info": { 330 | "codemirror_mode": { 331 | "name": "ipython", 332 | "version": 3 333 | }, 334 | "file_extension": ".py", 335 | "mimetype": "text/x-python", 336 | "name": "python", 337 | "nbconvert_exporter": "python", 338 | "pygments_lexer": "ipython3", 339 | "version": "3.4.3" 340 | } 341 | }, 342 | "nbformat": 4, 343 | "nbformat_minor": 0 344 | } 345 | -------------------------------------------------------------------------------- /notebooks/Programming Exercise 8 - Anomaly Detection and Recommender Systems.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Programming Exercise 8 - Anomaly Detection and Recommender Systems" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "- [Anomaly Detection](#Anomaly-Detection)\n", 15 | "- [Recommender Systems](#Recommender-Systems)" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 1, 21 | "metadata": { 22 | "collapsed": false 23 | }, 24 | "outputs": [], 25 | "source": [ 26 | "# %load ../../../standard_import.txt\n", 27 | "import pandas as pd\n", 28 | "import numpy as np\n", 29 | "import matplotlib.pyplot as plt\n", 30 | "\n", 31 | "from scipy.io import loadmat\n", 32 | "from sklearn.svm import OneClassSVM\n", 33 | "from sklearn.covariance import EllipticEnvelope\n", 34 | "\n", 35 | "pd.set_option('display.notebook_repr_html', False)\n", 36 | "pd.set_option('display.max_columns', None)\n", 37 | "pd.set_option('display.max_rows', 150)\n", 38 | "pd.set_option('display.max_seq_items', None)\n", 39 | " \n", 40 | "#%config InlineBackend.figure_formats = {'pdf',}\n", 41 | "%matplotlib inline\n", 42 | "\n", 43 | "import seaborn as sns\n", 44 | "sns.set_context('notebook')\n", 45 | "sns.set_style('white')" 46 | ] 47 | }, 48 | { 49 | "cell_type": "markdown", 50 | "metadata": {}, 51 | "source": [ 52 | "### Anomaly Detection" 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 2, 58 | "metadata": { 59 | "collapsed": false 60 | }, 61 | "outputs": [ 62 | { 63 | "data": { 64 | "text/plain": [ 65 | "dict_keys(['__header__', 'yval', '__version__', 'Xval', 'X', '__globals__'])" 66 | ] 67 | }, 68 | "execution_count": 2, 69 | "metadata": {}, 70 | "output_type": "execute_result" 71 | } 72 | ], 73 | "source": [ 74 | "data1 = loadmat('data/ex8data1.mat')\n", 75 | "data1.keys()" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": 3, 81 | "metadata": { 82 | "collapsed": false 83 | }, 84 | "outputs": [ 85 | { 86 | "name": "stdout", 87 | "output_type": "stream", 88 | "text": [ 89 | "X1: (307, 2)\n" 90 | ] 91 | } 92 | ], 93 | "source": [ 94 | "X1 = data1['X']\n", 95 | "print('X1:', X1.shape)" 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": 4, 101 | "metadata": { 102 | "collapsed": false 103 | }, 104 | "outputs": [ 105 | { 106 | "data": { 107 | "image/png": "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\nixZ67bXX1KVLF7Vv314HDx6UJH311Vd67LHH1L59e8XGxurUqVMaNmyYPvjgg4xr9+zZU19++WWW\n8qxdu1ZhYWEqVaqUjh8/ro4dO+q5555TmzZt9Pzzz2vp0qV6/PHH9fDDD+s///mPJGnq1Knq2LGj\nHn30Uc2aNSvjXBEREdTOgatEmAMOtHv3bgUHB2vJkiVKTEzUf//7X23dulWjRo2SJC1dulRJSUl6\n5ZVXNG/ePK1YsUL333+/XnrppYxzVK5cWcuWLVNMTIzefPNNSdLQoUPVr18/rV27VpGRkZo/f746\nd+6sNWvWSJKOHz+un3/+WY0aNcpSnk2bNmVsiylJhw8fVr9+/ZSQkKB9+/bpxIkTWrJkiR5++GF9\n8MEHOnHihLZt26ZVq1ZpyZIlOnr0qFwulySpadOm2rRpk0+/P6C4KbJrswPIWdOmTVWxYkUtWrRI\n33zzjY4ePZqxy6CnWf7LL7/UyZMn1bNnT7ndbqWnp6tixYoZ53jggQckSXXq1NH69ev1888/68yZ\nM3rwwQclKWNfBEk6c+aMTpw4odWrV6tDhw5XlOe7775T9erVM55XrVpV9erVkyRdf/31uueeeyRJ\nNWrU0M6dO1W9enVdc8016tq1qx566CENHDhQwcHBGZ/57rvvCuy7AkoCwhxwoI0bN2rmzJnq3bu3\nOnXqpJ9//vmKz6SlpalJkyZ64403JFm/duZthcuUKSPJwt/tdqt06dJZjne5XDp16pRq1aqljh07\nKj4+Xv/4xz/09ttvX3GtgICALPuKX36uoKCs/6kJDAzUBx98oF27dmnLli167LHHtGjRIoWGhioo\nKIgNf4CrxP9jgCIuu72Qtm/frocfflgdO3ZU5cqVtWvXLqWlpUmSSpUqpfT0dN1xxx3as2ePvv32\nW0nS7NmzNW3atByvExISohtuuEHbt2+XJK1atUozZ86UJEVHR2vJkiW64YYbst0mNzQ0VCdOnPjV\nMmf21VdfqUePHrr77rs1bNgw3Xrrrfrmm28kSceOHdNNN930q8cDyIqaOVDEffHFF2rcuLHcbrcC\nAgL0yCOPqHv37ho8eLD+8Y9/KDg4WHfeeaeOHTsmyQa3dejQQcuXL9ekSZM0cOBApaenq3r16po+\nfbqknEfIT5s2TePGjdO0adNUqVKljPCvXr26qlevnrHX8uWaN2+uTz/9VM2aNbvi/Nld6/bbb9ed\nd96pyMhIlS1bVvXr11d4eLgkaceOHWrZsmU+vy2gZGILVAC5OnXqlHr27Kn4+PgrmtAla5Lv1q2b\nli5dmqW5PT+6deumWbNmqXLlyr/pPEBJQjM7gF+VkJCg6OhoDRkyJNsgl6Tg4GD17dtX77///m++\nVtu2bQly4CpRMwcAwOGomQMA4HCEOQAADkeYAwDgcIQ5AAAOR5gDAOBwhDkAAA73/wGAt2CUVd7j\ncgAAAABJRU5ErkJggg==\n", 108 | "text/plain": [ 109 | "" 110 | ] 111 | }, 112 | "metadata": {}, 113 | "output_type": "display_data" 114 | } 115 | ], 116 | "source": [ 117 | "plt.scatter(X1[:,0], X1[:,1], c='b', marker='x')\n", 118 | "plt.title(\"Outlier detection\")\n", 119 | "plt.xlabel('Latency (ms)')\n", 120 | "plt.ylabel('Throughput (mb/s)');" 121 | ] 122 | }, 123 | { 124 | "cell_type": "code", 125 | "execution_count": 5, 126 | "metadata": { 127 | "collapsed": false 128 | }, 129 | "outputs": [ 130 | { 131 | "data": { 132 | "text/plain": [ 133 | "EllipticEnvelope(assume_centered=False, contamination=0.1, random_state=None,\n", 134 | " store_precision=True, support_fraction=None)" 135 | ] 136 | }, 137 | "execution_count": 5, 138 | "metadata": {}, 139 | "output_type": "execute_result" 140 | } 141 | ], 142 | "source": [ 143 | "clf = EllipticEnvelope()\n", 144 | "clf.fit(X1)" 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": 6, 150 | "metadata": { 151 | "collapsed": false 152 | }, 153 | "outputs": [ 154 | { 155 | "data": { 156 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzAAAAFRCAYAAACrP0jNAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4U2X7wPFv0jSle0Gh7FVkiCgiiNIyi2ypMsoooLz6\n+r6CLJUpQ4QyZMlQ0J+ogOxdeQULgsiUKkhBhgwZBUrpHjRtk98fh6QNbWmBtknK/bmuXvTkjNwn\nKTnnzvPcz6MyGAwGhBBCCCGEEMIGqC0dgBBCCCGEEEIUliQwQgghhBBCCJshCYwQQgghhBDCZkgC\nI4QQQgghhLAZksAIIYQQQgghbIYkMEIIIYQQQgib8cQkMNevX6d+/foEBQURFBREt27deP3119my\nZYtpm88++4ytW7c+8DiLFy9mz549ea7LuX/dunWJj49/qBhPnjzJpEmTAIiMjGTYsGEPtf+j0Ov1\n/Oc//6FDhw6sWrXKbN3mzZtp0qQJQUFBdO/e3fQzZswYAMaOHcvy5cuB7PPds2cP06ZNK/B5P/ro\nI06fPg3AhAkTOHToUKFjXrRoEc2bNzeLKygoiLlz5xb6GIW1efNm3nnnnSI/bkG+/vprxo4d+8j7\nBwUFkZycnO/6wr5PhfX555/TunVrxo0bV2THBEhOTmbgwIGm5YLOqzhdv36d5557ziLPLYSwHqtX\nr+bVV1+lS5cudO3aldGjR3Pjxo1C7Zvz2hcSEsKuXbuIjo6mT58+RRpjYa8hD7qnKYz169ezevVq\nANasWcOXX375yMcS4mFoLB1ASSpTpgybN282LUdFRTFo0CCcnZ0JDAzkvffeK/AYhw8fxs/PL891\nOfdXqVQPHd/58+e5desWAE8//TQLFix46GM8rJs3b3Lw4EGOHz+eZ8xNmjThiy++KPA4xn3btGlD\nmzZtCtz+wIEDBAcHA/DJJ588ZNTQuXNnJkyY8ND7PSly/p3npbDvU2Ft3LiROXPm0Lhx4yI7JkB8\nfDwnT540LRd0XsXtUf5fCyFKj5kzZ3Lu3DmWLVtG+fLlAdiyZQu9e/dm/fr1psfyk/PaZ+Tj42NK\nAkrag+5pCuP333+nTp06ALnOS4ji9EQlMPerWLEi7733Hv/3f/9HYGAgY8eOpU6dOrzxxht89tln\n7N69G3t7ezw8PAgNDWXXrl1ERkYya9Ys1Go1u3fvJj4+nmvXrtGqVStiYmJM+xsMBubOnUtkZCQG\ng4Fhw4bRqlUrNm/ezM6dO01JgXF58uTJLFy4kOTkZMaNG0f37t2ZOnUq27dvJzk5mSlTpnDmzBlU\nKhX+/v6MGjUKtVrNM888w9tvv82BAwe4ffs2ISEhZt9YGx07dozZs2dz9+5d7O3tGTZsGI0bN+at\nt94iMzOT1157jc8++4wqVao80mtpnA815/mFhIRQu3ZtIiMjiY+P59VXX2XIkCHMmzeP6Oho3n//\nfWbOnMns2bMJCQmhffv2/PzzzyxYsACDwYCjoyOTJ0+mbt26DxVLSEgIzz33HL///jtRUVG88MIL\nzJgxg/nz55OcnMxHH30EwP79+1m4cCHr1q3j999/Z86cOaSlpaFWqxk6dCgtW7Y0O+6tW7eYNGkS\n169fB6B79+4MHjyY69evExISQtOmTTlz5gygtCo1adIEgC+++IJdu3ZhMBioVKkSkyZNoly5cmbH\nzszMZOrUqRw6dAhvb2+8vb1xdXUFlFaIadOmce7cOTIzM2nevDkffvgharWaEydOMG3aNNLS0rC3\nt2f06NE0a9aMunXrcvjwYTIzMxk9ejRxcXEAtGrVivfee8/sfXrQeQ0aNIiWLVty4sQJEhMTGT58\nOB07djSLfcSIEdy8eZPx48czdOhQVq9ebXo/je+HcflBf69Lly5ly5YtaDQaqlevTmhoKOPGjePu\n3bsEBQWxceNG6tevz+HDh/Hw8GDx4sXs2LHDtP3EiRPx9vbO9f43adKEWbNmmcV8+fJlgoOD+fXX\nX9FoNOj1elq3bs3XX39NUlISn376KRkZGdy+fZuXXnopV5K9aNEi4uPjTUl0zuUHvV/3f67MmDGD\nsmXLPtTftxDCMm7dusWaNWvYv38/Li4upse7d+/OqVOnWLZsGR999BFt2rRh4cKFNGjQAMC0bGxt\nMV77jK5fv06XLl34448/gPyvGSEhIXh4eHDp0iX69OlDv379TMd42GvIBx98wJo1a8zuaVq2bMmn\nn37Kb7/9hl6vp169ekyYMAFnZ2cuX77MxIkTiY2NRa1W884776DVatmzZw8HDx7EwcGB2NhY4uLi\n+Oijjzh//jxTp04lPj4etVrNoEGD6N69O0ePHmXevHlUqVKF8+fPk5GRwcSJE2natGlJvIWiFHli\nupDlp27dupw9e9bssZs3b/Ldd9+xYcMGNmzYQIsWLfjzzz/p168fTz/9NKNHj6Zdu3YApKens337\ndkaNGpXr2NWqVWPTpk3MmjXL7CYyLxUqVOC9997j+eefZ/r06Wbrpk6diqenJ9u3b2fjxo2cOXOG\n//u//wNAp9Ph5eXF6tWrWbBgAXPmzEGn05ntHx8fz7Bhw5gwYQJbt25lxowZfPDBB8THx7Ns2TIc\nHBzYvHlznsnLsWPHTN3ujF21HuZb8Bs3brB27Vo2bdrEDz/8wL59+xgxYgQ+Pj7MmTOHZ555xrTt\nnTt3+PDDD5k5cyZbt25l8ODB+XYL++GHH3LFdeDAAdP6q1evsnLlSrZv386hQ4f47bff6NGjBzt2\n7CAzMxOATZs20bt3bxITExk3bhyzZ89m06ZNLFmyhEmTJnHz5k2z53z//fdp3rw527dvZ/Xq1Wzb\nto0dO3YASmteQEAAW7ZsYeTIkYwYMYKsrCy2bNnCuXPn2LBhA5s3byYgIIDx48fnOp/vv/+eK1eu\n8L///Y+vv/6aqKgo07rp06fz9NNPs3HjRjZv3kxsbCzLly8nMzOTd999lyFDhrB9+3amTp3KtGnT\nMBgMppaCdevWUaVKFTZt2sSqVav4559/cnXBetB5Xb16FX9/f9avX8+oUaOYPXt2rtjnzZtnej87\ndeqU/x8D+f+97t69my1btrB+/Xq2b99O5cqVWbVqFaGhoaaWU7VabTqvjRs38uuvv7Jp0ya2bt2K\nn58fo0ePzvP9P3z4MEePHjWLo3r16vj5+Zm6Tuzfv5/KlStTq1YtVqxYwbBhw1i7di1hYWHs3r3b\n1OWjMPJ7v/L6XDlx4kShjyuEsKwTJ05Qu3Zts+TF6KWXXiIiIuKB++d37YPs1t2Crhnu7u6EhYWZ\nJS/w8NeQb775Jtc9zbJly9BoNGzatIktW7bg4+PDp59+CsDIkSPp1KkTYWFhLFu2jPnz59O8eXPa\ntGnDoEGD6Nu3r+k8srKy+O9//8uAAQPYtm0by5YtY968eabPu5MnTzJ48GA2b97M66+/zsKFCwv7\nFghh8kS3wIDyn83R0dHssfLly1OvXj2CgoLw9/cnICCA5s2bm9YbWxuAB3aZMTan+vn54efnx/Hj\nxx8pxv3797NmzRoA7O3t6dOnD99++y1vvfUWAG3btgWgQYMGZGRkkJaWhlarNe1/4sQJqlWrRsOG\nDQGoXbs2jRs35ujRowV+61HYLmT56d27N2q1GldXVzp06MD+/ftNLRs5X0fIbop+6qmnAAgMDCQw\nMDDP4xbUhax169YAODs7U61aNRISEmjatCn16tVjz549vPjiixw+fJjp06dz9OhRbt++zbvvvmuK\nSa1WmyW2aWlp/P7773z99dcAuLi4EBQUxP79+2nUqBHu7u6mm/eAgAA0Gg1nz55l7969nDx5ktde\new1Qao7S09NzxXvw4EG6dOmCnZ0djo6OdOvWzfT8xmOsX78eUJJmlUrFuXPn0Gg0BAQEAMr7v23b\nNrPX1t/fn3//+99ERUXx0ksvMWrUKLOLb0HnZW9vb3q/6tevT0JCQr6v+f3vZ37y+ns9dOgQHTp0\nMMVmTEaMrUL3279/P6+99hoODg4ADBgwgC+++MKUnOb1/t+vZ8+ebNq0ifbt27N582Z69uwJwIwZ\nM9i3bx9Lly7l4sWL3L17l9TUVNzd3Qt1fnm9X2q1mgoVKjzwc0UIYf2MnzH30+l0he5i+qDPyoKu\nGcaW/fs97DVErc7+/toYz969e0lKSjJ9GZiZmYm3tzcJCQmcOXOGHj16AMoXrrt27cr3HC5fvoxO\npzN90evj40P79u3Zv38/TZs2pWLFiqbrfP369S3eNVjYpic+gfnzzz9N/TeNVCoVK1asIDIykoMH\nDxIaGsqLL76YZ4Gys7NzvsfO+QGh1+vRaDS5PuAyMjIKjFGv1+dazvkharyJM7r/wzGvD8v7j1Fc\n7OzszJ4z5/KDtjU6e/as6YPuYZQpU8Zs2fga9OjRg82bN3P79m0CAwNxdHREr9dTu3Zt1q5da9o+\nOjoab29vU0Jw/3tgPKbx/bs/9qysLNRqNXq9nrfeesuUzGZkZOR5M61Sqczep5zHy8rKYsGCBdSs\nWRPA1IJy/fr1XH9P58+fN20H0LBhQ3bv3s3Bgwc5fPgwPXr0YMmSJab1BZ2Xvb19vjHm5/7t7v8b\nz+vv9f7/G0lJSSQmJub7HPfHnZWVRVZWlul583v/c+rQoQMzZszgwoULHDt2zNSlo2/fvtSrV4+A\ngAA6duzIiRMn8tw/v3PM7/0Ccn2uNGvWLM8WOSGE9WnUqBGXL1/mzp07eHt7m607cuSI6QvNgj4D\nHySva0bOz0InJ6c893uYa0hSUlKeyVZWVhbjx4/H398fUL7gSk9Px87ODpVKZbbPpUuXqFixYr7n\nkNd9iPF1yHkNKOx1RYj7PVFdyO7/T3Lp0iU+//xz3nzzTbPHz5w5Q5cuXahVqxZvv/02gwYNMtU2\naDSaQt/4b9q0CYBTp05x5coVGjVqhKenJ+fOnUOn05GZmWk2+oednV2ex27RooVphDCdTsfatWt5\n+eWXC3WOoHzoXrp0yVQMff78eSIiImjWrFm++xSVbdu2YTAYSEhI4McffzQVjuf1OjZq1IiLFy9y\n4cIFAMLDw/nwww+LNJ527dpx6tQpNmzYYPrG3XhROnbsGAB//fUXr7zyCtHR0ab9nJ2dadSokel9\nSEpKYsuWLbRo0QKA2NhYfv31V0AZ4cve3p6nnnqKFi1asH79etNN7Pz58826Ohn5+/uzdetWdDod\n6enppi5coLz/33zzDaC8/++88w6rVq2iRo0aqFQq0whup06dYtCgQWY393PmzGHx4sW0bduW8ePH\nU7t2bS5fvlzo8ypMMnw/Ly8vIiMjAbhy5UquLpp5Ha958+b89NNPpKSkALBw4UK++eYbNBoNWVlZ\nubb39/dn06ZNpKWlAUpi8MILL5glXAXRarV06tSJsWPH0r59exwcHEhMTOT06dN88MEHtGvXjps3\nb3LlyhVTDMbn9/Ly4tSpUwCkpqaa3nvI//3K63PlQa+NEMK6lC9fngEDBjBy5EjTgDugdGndtWuX\nqVeEt7e36TPw+PHj3L5927RtfvcQxs+WvK4ZhbkOPsw15D//+Y/pMz9nPP7+/qxatYqMjAz0ej3j\nx49n7ty5uLi40KBBA1NLyY0bN+jbty/JycnY2dnlStBq1KiBVqslPDwcUGqHdu7cme99ixCP4olq\ngdHpdAQFBQFK1u/g4MD7779v6oJjVLduXTp27Mhrr72Gk5MTjo6Opu5KrVu3ZubMmbnqTO6nUqm4\ndu0aQUFBqFQq5s2bh5ubGy1atKBp06Z06NABHx8fmjVrZrqJee6555g/fz5Dhw4lJCTEdKwJEyYw\ndepUunbtSkZGBv7+/qahfe//FiWvb1U8PT1ZsGABU6dOJS0tDTs7O0JDQ6latWqe3+LnFBERYXrN\nIPvb8g0bNhT4vKA0Vffo0YPU1FT69etnSpratm3LiBEj+OSTT0z7ent78+mnn/Lhhx+i1+txcXFh\n3rx5eR53x44dZv2NDQYDFStWZMmSJQ98TYw3rYcPHzZ1qfPy8mLhwoXMmjWL9PR0DAYDs2fPxtfX\n1+w4s2fP5uOPP2bjxo1kZmbSrVs3unfvzvXr13FwcGDr1q3Mnj0bR0dHFi9ejEqlomfPnkRHR5u6\n0vn6+hIaGprrfIKDg7ly5QpdunTB09OTatWqmdZNmDCB6dOn07VrVzIzM3n55Zf517/+hZ2dHQsX\nLmTatGnMnDkTrVbLokWLsLe3N53zwIEDGT16NF27dsXe3p569erRuXNnwsLCCnVehfn7uv/x//zn\nP4wZM4a9e/dSs2ZNs26K+R2vZcuWXLx4keDgYFQqFX5+fkydOpUyZcpQv359OnXqxPfff2/avkeP\nHty8eZOePXtiMBioWrWqqT6nsDGD0o1s1apVfPzxxwC4ubnx9ttv0717dzw9PfH09OT555/nypUr\nVKlSxXSsbt26sX//fl555RV8fHzMhld+0PuV3+eKEMI2jBgxgo0bN/Lf//4XnU6HTqfjmWeeYe3a\ntVSoUAGAUaNGMXnyZNauXUuDBg14+umnTfvnde2D7M+pvK4ZM2bMMNsmL49yDQHze5p3332XGTNm\nEBQUZCriN37hNmfOHCZPnsyKFStQq9VMmzYNb29vAgICmDp1qlksGo2GRYsWMW3aND777DP0ej1D\nhw6ladOmueoRhXhUKoO03YliknP0qdLs/hFkhBBCCCFE8SmwC5nBYGDSpEkEBwczYMAArl69arZ+\ny5YtdOvWjf79++f6Vl482Z6kOTOepHMVQgghhLCkAltgfvrpJ/bs2UNoaCgnTpxg6dKlpiLguLg4\nXn/9dbZu3YqLiwuDBg0iNDQ038IuIYQQQgghhHgcBbbAREREmEakaNSokakwDZS5FurVq4erqysq\nlYqGDRs+8lDBQgghhBBCCFGQAov4k5OTTbO5AqZZq9VqNdWrV+fvv/8mNjYWR0dHDh06RI0aNfI9\n1t27d4mMjKRcuXIPHE5XCCFE8cnKyuL27ds8/fTTuYacftLJdUoIISyvoOtUgQmMi4uLaWhTwJS8\ngDJiz5gxYxg6dCgeHh40aNAAT0/PfI8VGRmZa/ZYIYQQlrFq1ap8J8Z7Usl1SgghrEd+16kCE5jG\njRvz888/06FDB44fP2426WNWVhanTp1i1apV6HQ6Bg8ezMiRI/M9Vrly5UzBGIcbFEIIUbJu3rxJ\nv379TJ/JIptcp4QQwvIKuk4VmMAEBgZy4MAB06ywoaGhhIWFkZaWZpoIMCgoCAcHB9588008PDzy\nPZaxOb5ChQpUrlz5oU9GCFECqldX/s0x4aUonaSLVG5ynRJCCOuR33WqwARGpVIxZcoUs8dy1rkM\nGTKEIUOGPGZ4QgirIYmLEEIIIaxYgQmMEEKUBgaDgcTExAK3c3Nzk3l9hBBCCCsmCYwQ4omQmJjI\ntr2ncXJyzneb1NQUurWqj7u7ewlGJoQQQoiHIQmMEMJcKa6BcXJyxtnFzdJhCCGEEOIxSAIjhDBX\nChMXIYQQQpQeksAIIYQoFfR6PRMmTODSpUuo1WqmTJmCVqtlzJgxqNVq/Pz8mDRpkqXDFEII8ZjU\nlg7AGsycOZOQkBA6duxI69atGTBgAMOHD+fo0aMPnNfmYYWEhHDp0qVCbTt27Fh+/fVXs8d0Oh1t\n2rTJte3KlSvp3Lkz//vf/x4prhMnThASEpLnui1bttCtWzf69+/Phg0bHun4xWXdunVkZWVx5swZ\nlixZAkCLFi2K5bnS09N577336NevH//+97+Ji4szW3/mzBlCQkIYMGAAISEhPPPMM2bv34ULF2jS\npAk6na5Y4hNCwJ49e1CpVKxevZphw4Yxd+5cQkNDGTlyJCtXrkSv1xMeHm7pMIUQQjwmaYEBRo8e\nDcDmzZu5dOmSKWk5evSoVY1GZDAY8oznp59+Yv78+fj5+T30Mb/66iu2bt2Ks3Puwua4uDg+++wz\ntm7diouLC4MGDeKll16iYsWKjxR/Ufviiy/o3r07devWpW7dusX6XKtXr6ZOnToMGTKEHTt2sGTJ\nEsaPH29aX7duXVasWAHAjz/+SIUKFUzJVHJyMrNmzcLBwaFYYywypbgGRpRu7dq1M33JExUVhbu7\nOwcPHjTN4hwQEMDBgwdp166dJcMUQgjxmKwzgale3fzm6XGXH8OlS5d4++23uXPnDq1bt2bIkCGE\nhITg7e1NYmIiX3zxBVOmTOHKlSvo9XqGDx/OCy+8wLx58zhy5Ah6vZ727dvzr3/9C4BFixYRExPD\n3bt3mTNnDpUrV2bmzJlERESgUqno0qWLWWtIamoq77//PklJSVSpUiVXfOvWreP06dOMHz+eefPm\nsXPnTnbs2IFGo+GFF15g1KhRLFq0iD/++IPU1FSmTZtGzZo1TftXq1aNxYsX8+GHH+Y69tWrV6lX\nrx6urq4ANGzYkOPHj5slMGPHjsVgMHDjxg3S0tKYOXMmNWrUYOXKlYSFhaFSqejcuTP9+/dn7Nix\nxMXFkZCQwNKlS1mwYAF//vknmZmZDB06lDZt2jB37lwiIiLIysrijTfe4JVXXiEkJIR69epx/vx5\nUlJSWLBgAQcOHCAmJoaRI0cyYMAA1qxZw9y5c01xnT17lmnTpgHg4eHB9OnTcXFxMa1ftWoVO3fu\nNDvfWbNm5TvzdkREBG+99Rag3AQZW3zul5aWxsKFC1m1apXpsYkTJzJy5Ej++9//5rmP1ZHERdgw\ntVrNmDFjCA8PN31WGDk7O5OUlGTB6IQQQhQF60xgrEhGRgZLliwhMzPTlMAAdO3albZt27J69Wq8\nvLyYNm0a8fHx9O/fn7CwMMLCwlixYgVly5Zly5YtpuO1bt2aLl26sGjRInbu3EmtWrW4fv0669at\nIzMzk379+tGsWTPT9mvWrKFOnToMHz6cP//8kyNHjpjF16tXL8LCwvj4449JSUlh586drFu3DrVa\nzXvvvcfevXsBqFWrFuPGjct1foGBgVy/fj3Pc69evTp///03sbGxODo6cujQIbNJTI2qVq3KjBkz\n2LdvH7NmzeL9999nx44drF69GoPBwBtvvMHLL78MQPPmzRk4cCDh4eHEx8ezfv16kpKSWL58ORqN\nhmvXrrFq1Sp0Oh29evXipZdeAqBRo0aMGzeOefPmERYWxltvvcXnn3/OvHnz+OOPP3K1TE2cOJHp\n06dTq1YtNmzYwJdffsmIESNM6/v160e/fv3yfd/vl5ycbEqAnJ2dSU5OznO7DRs20LFjRzw8PAAl\nYW3VqhVPPfUUBoOh0M8nhHh0M2bM4M6dO/To0YP09HTT4ykpKbi5ySh0Qghh66wzgbn/G+DHXX4M\nfn5+aDQaNBoNdnZ2pser3+tmc+7cOSIiIjhx4gQGg4GsrCzi4+OZPXs2n376KTExMQQEBJj2q1+/\nPgBly5YlJiaGCxcu8PzzzwOg0Wh45pln+Pvvv3OcymVatWoFwDPPPINGk/stMxgMGAwGLl68SKNG\njVCrldKmxo0bc/78eYA8E4+CuLm5MWbMGIYOHYqHhwcNGjTA09Mz13Yvvvii6flCQ0M5f/48UVFR\nDBw4EIPBQFJSEleuXDGL4+LFizz77LMAuLq68t577/HVV19x6tQpBgwYYHotjclVvXr1APD19SUm\nJsbsvPNy4cIFpkyZAkBmZibVqlUzW79q1Sp+/PFH07JKpTJrgbly5Qrjx49HpVLRrVs3XF1dSUlJ\nAZSbIGOr1P22b9/OwoULTcvbtm2jQoUKrF+/npiYGAYPHmzqaiaEKFpbt27l1q1bvP322zg4OKBW\nq3n66ac5evQoTZs25ZdffjF9XgkhhLBd1pnAWJH8amCMSULNmjXx9fXl7bffJj09nS+++AInJyd+\n/PFHU5emTp060blz5zyPV7t2bTZu3MjAgQPJyMjgjz/+4LXXXmP//v2m9X/88Qdt2rTh9OnTZGZm\n5htrzZo1+eabb9Dr9ahUKo4dO0b37t05c+aMKd785JUIZGVlcerUKVOLyODBg/Mc1ODUqVM0btyY\niIgI6tSpQ40aNfDz8+PLL78E4Ntvv+Wpp57ixx9/NMVRq1YtUxeupKQkhg8fTv/+/WnWrBkff/wx\nBoOBJUuWmLrN5fU+2NnZodfr830tjAnJ77//bkp6jApqgalatapZopGUlMS+ffto2LAh+/btM/Wp\nzyk5OZmMjAzKly9vemzXrl2m39u0acPXX3+d73NaDamBETaqffv2jB07lv79+5OZmcmECROoWbMm\nEyZMICMjg1q1atGhQwdLhymEEOIxSQLzCHLeTPfu3ZuPPvqIkJAQUlJS6NOnD1qtFnd3d3r16oWD\ngwP+/v74+vrmeRPesmVLDh8+THBwMBkZGXTq1MnU2gAQHBzMhx9+SL9+/ahRowZarTbfeOrUqUOH\nDh0IDg7GYDDQpEkT2rVrx5kzZx7qnMLCwkhLS6Nnz54ABAUF4eDgwJtvvmnqGpXTL7/8Qnh4OHq9\nnhkzZlCpUiVefPFF+vTpg06no1GjRvj4+Jjt07ZtWw4dOkTfvn3R6/UMGTKEFi1acOTIEfr160da\nWhrt2rXD2dk53yTy+eef5+233zZ168tp0qRJfPDBB2RlZaFWq031MI+qT58+jB49mr59+6LVapkz\nZw4A33zzDdWqVaN169ZcunSJSpUq5XsMlUplG93IJHERNsrR0ZH58+fnelxaPYUQonRRGUrwjura\ntWu0bduW3bt3U7ly5ZJ6WlGMxo4dS+fOnYtt+GIhikpCQgLhR//B2SX/GoiU5ETaNa2Gu7t7CUZW\n8uSzOH/y2gghhOUV9Fks88AIIYQQQgghbIZ0IROPJTQ01NIhiKImNTBCCCGEsGKSwAghzEniIoQQ\nQggrJl3IhBBPDL3ewM07KehtYTAFIYQQQuRJWmCEEE+EmPi7/Hj0BtHx6TTyK0eLRhUtHZIQQggh\nHoG0wAghzFWvnl0HU0oc/DOKcUt/Izo+HY2dij/P3+bmnRRLhyWEEEKIRyAJjBDC3OXLpaoOJj4p\nndkrj5GlN/Dy02Xp0qImBuDniGtkZeU9EaoQQgghrJckMEKIUu3AietkZhl4vVUN/Cq7UqmcCw1q\nehObeJc+aepHAAAgAElEQVSIM9GWDk8IIYQQD0kSGCFEqWAwGEhISMj1s+fYP6iABlUdMaAU77/U\n0BcXR3sizkSTejfDsoELIYQQ4qFIEb8QwpyNzgOTmJjItr2ncXJyNj2WnJbBuauJVPAqw6HjF3F2\nccfFBbT2djxTuywHT97gn5tJ1KvuZcHIhRBCCPEwCmyBMRgMTJo0ieDgYAYMGMDVq1fN1m/bto3X\nXnuNnj17snr16mILVAhRQmy4BsbJyRlnFzfTz/U7WQDUq1EWRycns22rV3QD4PKNxBKPUwghhBCP\nrsAEJjw8HJ1Ox5o1axg1alSumddnzZrFt99+y/fff8/y5ctJSkoqtmCFEOJhnLsah1qlomYl91zr\nPF3L4O6i5eqtJCnmF0IIIWxIgQlMREQE/v7+ADRq1IjIyEiz9XXr1iUhIYH09HQAVCpVMYQphBAP\n507CXe4k3KVqBVfKaPPuLVvd152MTD3XbyeXcHRCCCGEeFQF1sAkJyfj6uqavYNGg16vR61Wch8/\nPz9ef/11nJycCAwMxMXFpfiiFUIUPxutgbnf+atxANSp6pHvNtV93Thx/jaXbyRStYJbSYUmhBBC\niMdQYAuMi4sLKSnZE77lTF7Onj3L3r172bNnD3v27OHOnTvs3Lmz+KIVQhQ/G66ByenqrSTUKhXV\nffNPTHzLOqO1V3P5RiIGg6EEoxNCCCHEoyowgWncuDH79u0D4Pjx49SpU8e0ztXVFUdHR7RaLSqV\nCi8vLxITpSBWCGFZGZlZ3I5Po5ynI/Yau3y3s1OrqFbBjaTUDGIT75ZghEIIIYR4VAV2IQsMDOTA\ngQMEBwcDEBoaSlhYGGlpafTs2ZNevXrRt29ftFotVatWJSgoqNiDFkKIB7kVm4rBoLSwFKS6rxvn\nr8ZzKSqRelUcSyA6IYQQQjyOAhMYlUrFlClTzB6rUaOG6ffg4GBTciOEKAVKQQ3MjRil22thEpiq\nFVxRAVduJkkCI4QQQtgAmchSCGHOhhMXoxt37iUw3gUnMGW0Grw9HImOSyVLL3UwQgghhLUrsAZG\nCCFsid5g4OadVDxdHXB0KNx3NBW8ncjSG4hNTC/m6IQQQgjxuCSBEUKUKncS7pKRqadCIVpfjIzb\nRsdLAiOEEEJYO0lghBDmqlfProOxQQ9T/2Lk6+0EwG1JYIQQQgirJzUwQghzNl4D8ygJjKuTFkcH\nDdFxMpSyEEIIYe0kgRFClBoGg4Ebd1JwdNDg7qwt9H4qlQpfb2cuRiVw+dptqhewvZubGyqV6rFi\nFUIIIcSjkQRGCFFqpNzNJCUtg5qV3B86wajg7cTFqAQ277tIQ7/UfLdLTU2hW6v6uLu7P264Qggh\nhHgEksAIIczZ8Dww0XFKDUthhk++n7GQP/GuCmcXtyKNSwghhBBFRxIYIYQ5G0xcjGISlASmvJfT\nQ+9bztMRlQruJGYUdVhCCCGEKEIyCpkQotS4k5iOCijrUeah99XYqfF00RCXnEFGpr7ogxNCCCFE\nkZAERghRKuj1Bu4k6vByL4O9xu6RjuHtpsFggNtx+dfACCGEEMKyJIERQpiz0XlgomJSycwyUM7T\n8ZGP4e1qD8DNWElghBBCCGslNTBCCHM2WgNzMSoRAB/Ph69/MfJyVT4SpQVGCCGEsF7SAiOEKBUu\n3UgCHi+BcXJQo9WoiI5LK6qwhBBCCFHEJIERQpQKF6OSUKugrPvDF/AbqVQqPF3tSUzRcVeXWYTR\nCSGEEKKoSAIjhDBngzUwGZl6rtxMxtNVi53d432sebkodTC3pRVGCCGEsEpSAyOEMGeDNTBXbiaS\nkWXA293hsY/lea+Q/3Z8GlXKuz728UTJyczMZNy4cVy/fp2MjAzeeecdfH19+fe//031e0l5nz59\n6Nixo2UDFUII8VgkgRFC2LzzV+MBKOv2+AmMlzGBkUJ+m7Nt2zY8PT2ZNWsWCQkJdO/enXfffZc3\n33yTQYMGWTo8IYQQRUQSGCGEzfv72r0Exl372MdycrDDQWsnhfw2qGPHjnTo0AEAvV6PRqPh1KlT\nXLx4kfDwcKpVq8b48eNxcnr0gR6EEEJYntTACCHM2WANzPmr8dhr1Hi4PH4Co1Kp8PFwlEJ+G+To\n6IiTkxPJyckMGzaM4cOH88wzzzB69GhWrlxJlSpVWLhwoaXDFEII8ZgkgRFCmLt82abqYHQZWfxz\nI5Fq5V1Qq1VFcsxy94ZilkJ+23Pjxg0GDhxIUFAQnTt3pl27dtSvXx+AwMBAzpw5Y+EIhRBCPC5J\nYIQQNu1SVAJZegM1KxVdwX05T0dAKeQXtiMmJobBgwfzwQcfEBQUBMDgwYM5efIkAIcOHaJBgwaW\nDFEIIUQRkBoYIYRNMxbw1/B1JT09vUiO6WNqgZFCfluydOlSEhMTWbJkCYsXL0alUjF27FimT5+O\nvb095cqV4+OPP7Z0mKXPtWug1YKPD0RHg04HlStbOiohRClWYAJjMBiYPHkyZ8+eRavVMm3aNKpU\nqQIo33aNGDEClUqFwWDgzJkzvP/++/Tu3bvYAxdCFBNj/YuNdCMzJjA1K7ry16WiSWBcneylkN8G\njR8/nvHjx+d6fPXq1RaI5glx7RopTVvh6OGAet1a9L16kxafjvPRvZLECCGKTYEJTHh4ODqdjjVr\n1nDixAlCQ0NZsmQJAGXLlmXFihUAHD9+nPnz59OrV6/ijVgIUbxsJHEx+vtaPI4Odvh6O/HXpaI5\nprGQ/2p0Mnd1mZTRSmO1EHnSapXk5a/T0LAhasCxXn2lRUYIIYpJgTUwERER+Pv7A9CoUSMiIyPz\n3G7q1KlMmTIFlapoimiFEKIgaemZXLuVRM1KHkVWwG9U1kOpg7kTf7dIjytEqeLjg3rdWrOH1OvW\nKt3JhBCimBSYwCQnJ+Pqml0cq9Fo0Ov1Ztvs2bOHOnXqUK1ataKPUAgh8nHxegJ6A/hV8SjyYxsT\nmJgE6UYmRL6io9H3Mu82ru/VW6mFEUKIYlJgAuPi4kJKSoppWa/Xo1ab77Zt2zbpOiZEaWFD88Cc\nvxoHFHMCIyORCZE/nY60+HT09erDyZPo69UnLT5dKeQXQohiUmDH7saNG/Pzzz/ToUMHjh8/Tp06\ndXJtExkZyXPPPVcsAQohSpgN1cAYC/hrV/EAsor02B6uDmjsVNICI8SDVK6sFOzfG4VMvfdnnGUU\nMiFEMSswgQkMDOTAgQMEBwcDEBoaSlhYGGlpafTs2ZPY2FizLmZCCFFS/r4aj7OjPb7eziQmJhbp\nsdUqFV5ujsTEp5Gl12OnlmmzhMhTzmRFal+EECWgwARGpVIxZcoUs8dq1Khh+t3Ly4vNmzcXfWRC\nCPEAyWkZRMWk8KxfuWIbPKSsRxmi41KJS0w3dSkTQgghhGXJV4pCCHM2UgNzwaz7WPGQOhghhBDC\n+sjkBkIIczZSA3PuXgF/sSYw7pLACCGEENZGWmCEEDbp72tKC4xf5eJLYLzdywAQkyBzwQghhBDW\nQhIYIYRNunQ9EVcne8p5Fl9titbeDncXLTHxaRgMhmJ7HiGEEEIUniQwQghzNlADk5KWwY07KdSs\n5F5sBfxGZT0cSc/IIjkto1ifRwghhBCFIwmMEMLc5ctWXwdz+YYyZHKNiu7F/lxSByOEEEJYF0lg\nhBA258J1pf6lVqUSSGBkJDIhhBDCqkgCI4SwOZeu32uBKdEERgr5hRBCCGsgCYwQwpwN1MBcjEpA\nq1FTuZxLsT+XcxkNZbR2xCRIC4wQQghhDWQeGCGEOSuvf8nI1HPlZiI1KrpjZ1f838GoVCrKejhy\nLTqZ9IysYn8+IYQQQjyYtMAIIWzKtegkMrMM1CyB7mNGxm5kd6QORgghhLA4SWCEEDblwrUEAIsk\nMNKNTAghhLA8SWCEEOasvAbmUpQFEhh3KeQXQgghrIXUwAghzFl5DcyF6wmoVVDd163EntPT1QE7\ntereUMollzgJIYQQIjdpgRFC2AyDwcClqAQqlnOhjLbkvn9Rq1V4uZchNvEuer2hxJ5XCCGEELlJ\nAiOEsBm3YlNJvZtZot3HjMq6O5KlN5CQklHizy2EEEKIbJLACCHMWXENjKn+paIFEph7hfyxSboS\nf24hhBBCZJMaGCGEOSuugblyKwmAaiVY/2JU1qMMALGJ6SX+3EIIIYTIJi0wQgibce1WMgCVfVxK\n/LmNI5FJC4wQQghhWZLACCFsxtXoJLQaNeU8nUr8ubX2drg5a4lN1GEwSCG/EEIIYSmSwAghzFlp\nDYxeb+BadDKVfFywU6ssEkNZD0fSM/TESSuMEEIIYTFSAyOEMGeFNTAGg4FL16JJ12VR3tOBhISE\nXNskJCRgoHhbRsq6O3LxegL/3EymRhWfYn0uIYQQQuRNEhghhNVLTExk0+6/ALibnkH40X9ybRNz\n+xbOLu64FGN5jLGQ/8q9WhwhhBBClLwCExiDwcDkyZM5e/YsWq2WadOmUaVKFdP6P//8k5kzZwJQ\ntmxZZs+ejVarLb6IhRBPpLuZdgD4eLvj7JJ7FLKUlKRij8H7XiH/1WhJYIQQQghLKbAGJjw8HJ1O\nx5o1axg1ahShoaFm6ydOnMiMGTNYtWoV/v7+REVFFVuwQogSYKU1MPH3JpD0dHWwWAyuTvbYa1Rc\nuZVisRiEEEKIJ12BLTARERH4+/sD0KhRIyIjI03rLl26hIeHB8uXL+f8+fO0atWK6lZ44yOEeAhW\nWAMDkJCcgQrwsGACo1Kp8HTVcuNOKrqMLLT2dhaLRQghhHhSFdgCk5ycjKurq2lZo9Gg1+sBiIuL\n4/jx44SEhLB8+XIOHjzIkSNHii9aIcQTKyFFh6uzFo2dZQdP9HLVYjBkT6ophBBCiJJVYAuMi4sL\nKSnZ3SX0ej1qtXID4eHhQdWqValRowYA/v7+REZG0qxZs2IKVwjxJEpKzeCuTk95L8u1vhh5uig1\nfpejEqld2cPC0YicMjMzGTduHNevXycjI4N33nmH2rVrM2bMGNRqNX5+fkyaNMnSYQohhHhMBX6V\n2bhxY/bt2wfA8ePHqVOnjmldlSpVSE1N5erVq4DS3ax27drFFKoQokRYYQ3MjZhUADzdylg4EvB0\nvZfA3Ei0cCTiftu2bcPT05NVq1bx1VdfMXXqVEJDQxk5ciQrV65Er9cTHh5u6TCFEEI8pgJbYAID\nAzlw4ADBwcEAhIaGEhYWRlpaGj179mTatGmMHDkSgOeee46WLVsWb8RCiOJlhTUw12OUVmBLFvAb\nZScwueeiEUUnKSmJK1euoFarqVy5sllX5vx07NiRDh06AJCVlYWdnR2nT5+mSZMmAAQEBHDw4EHa\ntWtXrLELIYQoXgUmMCqViilTppg9ZuwyBtCsWTPWr19f9JEJIcQ9phYYV8u3wNhr1JTzKMOlqEQM\nBgMqlcrSIZUq+/bt46uvvuLvv/+mQoUKaDQabty4Qa1atXjzzTcf+CWZo6MyzHVycjLDhg1jxIgR\npmH+AZydnUlKktolIYSwdTKRpRDC6l03dSGzfAsMQNXyzkScvUN8UrpVdGsrLcaMGUPZsmWZOHEi\nfn5+ZuvOnz/Phg0b2L59O59++mm+x7hx4wZDhgyhf//+dO7cmdmzZ5vWpaSk4OaWew4hIYQQtkUS\nGCGEOWP9ixV1JYuKSaWM1o4yWuv4yKri40LE2TtcupEoCUwRGjFiBOXLl89znZ+fH2PHjuXmzZv5\n7h8TE8PgwYOZOHEiL774IgD16tXjt99+44UXXuCXX34xPS6EEMJ2WcfdgBDCelhR4gKgy8giJv4u\nPp7WkyhULe8MKCORNX7Kx8LRlB7G5EWn03Hx4kXq1q3L9u3bOX36NG+88QY+Pj5UqFAh3/2XLl1K\nYmIiS5YsYfHixahUKsaPH88nn3xCRkYGtWrVMtXICCGEsF2SwAghrFp0XCoGwNXJej6uqpR3AeCf\nmzISWXH44IMPqFmzJunp6SxcuJBXX32VMWPG8PXXXz9wv/HjxzN+/Phcj69YsaK4QhVCCGEBlp0R\nTgghCnArVql/cXW0ngSmvKcjWns7LkdJAlMcrl27xrBhw9i5cyc9evTg3XffJSFBRn0TQgihkARG\nCGHOyuaBMSYwLk72Fo4km1qtoloFV67cSiIzS2/pcEqdrKwsYmNj2b17N61ateL27dvcvXvX0mEJ\nIYSwEpLACCHMXb5sVXUwt+7cS2CsqAUGoLqvG5lZeq7fTrZ0KKXO4MGD6dWrFy1btqROnTr079+f\nd99919JhCSGEsBLWdUcghBD3scYuZADVKyrD8V6OSqRaBRmatyjMnj2bgIAAOnbsSNeuXU2P79ix\nAzs7OwtGJoQQwppY1x2BEELc51ZsCvZ2KhwdrOsGtoavOwCXbySS/9SK4mG0adOGX375hUWLFuHh\n4YG/vz8BAQEPHHlMCCHEk0cSGCGEOSubB+ZWbCplPcpY3Yz31XzvtcDckEL+ovL888/z/PPPA8qc\nLvv372fmzJncunWLZ599lg8//NDCEQohhLAGksAIIcxZSeICkHo3g6TUDGr4ulo6lFzcnLV4u5fh\ncpSMjlUcypYtS2BgIJ06dcLe3p7jx49bOiQhhBBWQor4hRBWy1j/Us6KJrHMqbqvGzEJd0lK1Vk6\nlFLl7NmzBAUF0bZtWwICAujXrx9ly5a1dFhCCCGshCQwQgirdfPeCGTlPKw3gQHpRlbUJk2axPDh\nwzly5AhHjhzhzTffZNy4cZYOSwjxILt2gS7HlzkDB0J0dPZyQIB5C3/fvnDxYvbyxo1w+3axhylK\nB0lghBDmrGgeGGMLjI+1JzAyoWWRSk9Pp2XL7KERAgMDSU6W4aqFsCr/+pd5wvHOO+YJytGjcOdO\n9vKtW5CRkb188CDkrG18/33IOWHtyJHwzz9FHrYoHSSBEUKYs6J5YG7FpgBQzsPRwpHkrXrF7JHI\nxOOLiooiKiqKunXrsmzZMmJjY0lISGDlypU0adLE0uEJ8WTr0gVOncpePncOIiOzl3v1gszM7OUv\nvoBKlbKXw8PNvxzbuBEqVsxe7to1e/3du7B0KXh7Z6+fPBni4orgRO65di27hSg6WlkWNkOK+IUQ\nVitnDcwFK7y2VCrngsZOxeUbUshfFPr3749KpcJgMHDkyBHWrFljWqdSqZgwYYIFoxPiCfPWW9C7\nN7Rrpyx7e8Ovv0KDBsry7NnmCcmMGeb7t7xvgPkqVcyX7404aPLZZ+bLmzaBi4vy+5kz8OWXYPwM\nMBiU1hyt9qFOyeTaNVKatsLRwwH1urXoe/UmLT4d56N7oXLlRzumKFGSwAghrNat2FScymhwLmOd\nH1X2GjWVfVz552YSer0Btdq6hnq2NXv27LF0CEI8ub77Djw8oFs3ZblqVfjxR1MCsytwNq26uaFF\nKXXZdbsZXZoVUyxlysArr2Qvu7rC11+D5t614JdfYNIk2Lv30Y6v1SrJy1+noWFD1IBjvfqPnhCJ\nEmeddwVCCMuxknlgDAYDt2JTqVjW2ermgMmpekU3Lt9I5GZsChXLulg6nFLh4sWLrFu3joQE85at\n0NBQC0UkRCl0+zZcuZLdEqJWK60cxgRm6FCwtzdt3qqXDytWKI0ya9dCSEgJxlqpknl3tO+/hzfe\nePTj+figXrcWGjY0PaRetxZ8fB4jSFGSJIERQpizkvqXhGQd6bosyns5WTqUB6rh68ZelEJ+SWCK\nxpAhQ+jUqRNPPfWUpUMRovQ6eRJGjIDjx5Vi+ldfhRo1std7eJhtrtUqycsrr8DOnRZurFiyJPt3\ngwH691cGAXjuucLtHx2Nvldvs0Jwfa/eqPf+LEmMjZAERghhlYwF/OW9nC0cyYNV980u5H/pmYoF\nbC0Kw83NjSFDhlg6DCFKl7g46NcPtm1TumK1agVNm0JKilJr4uoKL7+c7+46ndLysnNndguMxZIY\nO7vs37duhUuXoH79wu+v05EWn45jvfrmNTA6mdPLVkgCI4SwSsYCfmtvgaleUeaCKWpBQUHMmzeP\nF198EY0m+zL1wgsvWDAqIWxQaqqSrGi14OkJiYmwfTsEBWV3GSukXbuyk5aQEGW5S5dijL2wXn0V\n2rQBBwdlOSPDrOtbnipXVgr2tVqlO9nen5XkRQr4bYYkMEIIcyVcA2MwGEhMzH3z/09ULACuZQwk\nJCRgwFAi8TwsT1cH3Jy1MhdMETp69CgnT57k999/Nz2mUqn47rvvLBiVEDZo0CBo316ZswVg9Woo\nX/6hDhEWphyiSxelFSYsTPndKpIXULq/uSlfJHHhgjIc8+rV0KjRg/fLmaxItzGbIwmMEMJcCdfA\nJCYmsm3vaZyczLuKHT8XA8DfV+M4ez4OZxd304ia1kSlUlHd140//44hLT0TRwf5WH1ckZGR7Nq1\ny9JhCGF79HqlMN/4RdSwYbBgQXYCc/9QxoXQvj2PVLxvTHy02nujlpVEi8327co5F5S8CJtX4ESW\nBoOBSZMmERwczIABA7h69arZ+m+++YYuXbowYMAABgwYwGUrKQAWQtgOJydnnF3czH7u3puw2aec\nJ45OttGN7J+b0gpTFOrUqcOZM2csHYYQtufYMWX+lbQ0Zfnll5Ws4zHkLN7v3bvwdS/GxCc5Wfm3\nffvHCqNwhg+Hf/+7BJ5IWFqBXxWGh4ej0+lYs2YNJ06cIDQ0lCU5Rn84deoUs2bNov7DFE8JIUQB\nktJ0ONjbodXYFbyxhdXwvVcHE5VI3WpeFo7G9l29epWgoCDKlSuHvb09BoMBlUrF7t27LR2aENYn\nLk4pwNdolKL8bt3g3LnsVoj7hqF/2JaRRy3et+ioZQYDbNkCdepkT7wpSpUCW2AiIiLw9/cHoFGj\nRkRGRpqtP3XqFEuXLqVv374sW7aseKIUQpSc6tXNZ1e2kJTUDFycCijEtBI5RyITj2/x4sWEh4ez\nevVqvvvuO1asWCH1L0Lk5513lG5iRgsXEna1EcYBtYx1K0YP0zISFgY//JCdtHh5wSefkO+xc7o/\n8TFuW5h9H9usWTBtGsTGFtMTCEsrMIFJTk7G1dXVtKzRaNDr9ablzp07M2XKFL777jsiIiLYt29f\n8UQqhCgZly9bfC4YXUYWukw9zo62kcBUqeCKWiUJzONauXIlWVlZVKpUKc+frKwsVqxYYekwhbA8\nQ45BTaZNgwMHzB57UJLyMF3CMjIgOlpJNpYvVx6bMKFwCdAnnyjHd3FR/v3kkxLsVjZihNKd7t4X\n8KL0KTCBcXFxISUlxbSs1+tRq7N3GzhwIB4eHmg0Glq2bMnp06eLJ1IhxBMjOU0pgHGxkQTGwd6O\niuVcuByVgMFgnaOl2YKKFSvSr18/5s6dyy+//MK5c+e4cOEC+/fvZ/bs2fTu3RtfX19LhymEZSUk\nKDfmxtaF2rVh0yazrmIPSlLyahnJKWcrSWCgMs/l889Dejp07qw87uaWfwJk3H/CBFi1CsaMUf6d\nMKHgfYuMRWfZFCWhwASmcePGplaV48ePU6dOHdO65ORkunTpQlpaGgaDgcOHD9NA+hoKIR5Tcqox\ngbGdi1B1XzdS7mZyOz7N0qHYrDZt2vDdd99RrVo11q5dy8iRIxk+fDhr166lRo0afP/997Rr187S\nYQphWe7u0KQJzJ2b7yYPSlKM87m4uGTP5wJK4rF5szK/5fLlykjEo0dD3brg4QFHjigtJ8uXK7mT\n8dibN5t3C8vIUFpXdDrIzIS9e5V/dTqlYWT3bnj3Xfj2W1i/Xtm/WLqS/fMPfPUVhIcXw8FLkWvX\nlGY2UP69ds2y8RRSgUX8gYGBHDhwgODgYABCQ0MJCwsjLS2Nnj17MnLkSEJCQnBwcKB58+YEBAQU\ne9BCiGJUwvPA5CU5Tbka2koNDCgJzK8norh8IxEfT+seNc2aabVaXn/9dV5//XVLhyKE9UhKgoMH\nlaYLgJkzlYko8/GgSSeN/94/v4uxu9i33yqtLbNmwaRJyoBmu3fD118rg5p9/LEyd+SuXXD+vDJW\nwPLl4OQEU6fC4cPK87ZuDeXKKfnDt98qzzV0qJL83L6tbOfiomw7c6YS0+bNyr9BQUUw9PIffyhd\n6x5y3psnyrVrpDRthaOHA+p1a9H36k1afLoyyaeVT+pZYAKjUqmYMmWK2WM1atQw/d6tWze6detW\n9JEJISzDCoZCt7UuZKAkMAD/3Eikaf0KFo5GCFGq3LypZCLr1yvDJBtnnc9Hzpt+rdZ82Zi4tG+v\nJB5eXpCYqBxep4O2bZXGi6NHlZaSL7+En34COztlQC9jz7VWrZRjhYXB008rXcSmTVOSlOefB0dH\nqFRJ2fb0aRgyBFJT4fXXlQak8uXB3l4ZLKxPHyXJCQ9XBg5bv155nseaX7J7d+VH5E+rVZKXv05D\nw4aoAcd69W2iC16BXciEEKKkpVhxAmMwGEhISMj14+2q9D8/988dqYMRQhQtPz/lrr5ixcc+lLGQ\nXqdTGinmzFHqUXQ6pcvYc8/Bhx/C+PGweDH066e0wpw+DcbBZjdsgHHjYPp0OHsWpkxRWlQMBiUp\nmTRJyR3mzYNOneCjj5RjtGwJL74I7dopCdFrr8GoUcq/TZsqz3/0KHz6qdLtzFhzI4qJjw/qdebz\nBKnXrX3MzLFkyJTRQgirY6yBcbbCLmSpqcnsPBSLl5e32eMGgwF7OxWnL90hMTERd3d3C0Vo+86f\nP4+fn5/ZY8ePH+fZZ5+1UERCWMCff8LSpbBwodJdrGXLIjmsscA/MFBp+WjYUGn9OH1amU5mwgRl\nm7VrlS5jv/2mdAf7+Weli5dWCyNHKsX9K1Yo3c0+/hj+9S+ltWb1aqUVZds2ePtt2LFDaX356CNo\n3FhJas6eVWL56it46SVYt05Jelq3VuahvHChCE705Eml212jRkrWJHKLjkbfq7dZa4a+V2/Ue3+2\n+iRGWmCEEOasYB6Y5LQMq57E0tHRGWcXN7MfF1d3yno4kpSWhS4zy9Ih2qSIiAh+++03hgwZwrFj\nx8hX49EAACAASURBVPjtt9/47bffOHToEKNHj7Z0eEKUrNq1ITIS/u//Hmn3/OZc2bxZGRVs5Eil\nFcTLC1auVLqEffyxkrhs3KjUn/TsqUxu36GD0rXsyBGldaZtW6V15LvvlO5lw4fDm28qg6N17ar8\n7uen1MS4uCiJUL168PvvSq1NVpbSIqPTKXU0vr5K97LJk+F//1OSHo1GmYPmkSUmKk1Mf/31GAcp\n5XQ60uLT0derDydPoq9Xn7T49NxD01khaYERQpizihoYnU2NQGbk7e7IjTupRN1OpZy3l6XDsTkH\nDx7k6NGjREdHsyDHxHwajYbevXtbMDIhSpDBoAyJ7OSk3MGXKfNIhzF2FevdW0lKQkLM13fsqLS8\n/Pqr0rhjHIiqc2el1mXSJGX0sYMHoU0bZTSxb75REphdu5RxBbp0UZKUjz5SupD16aO0whw7BgMH\nKt3MVqxQuoaNHau07jg4KC0w1aopScqZM0qxf8+eMH++kjzNn69saxwh7ZG8/LLyI/JXubJSsK/V\nKt3J9v6Ms05n9QX8IAmMEMLK6DKy0GXocfGyvu5jBfF2V240rkSn0KiuhYOxQUOHDgVgy5YtdJfi\nW/Ekun1bKQhZuVK5w3dxKdRuxsJ8rTZ79C5QRvNq2hT27FEea99eqVHp1w9eeEFJQFq2hIAACA5W\nGit274YWLZQWkjVroFcv+M9/oH9/iI9XRicz1rwcO6YkQg0aKAX7DRsqic+33yrlOpMnK93JOneG\nU6eU7mguLkpdjK+v0qLTurXSWDJ0qNJbbv16pQ7n/sEHRDHJmaxYebexnCSBEUJYFdMIZFZY/1IQ\nb3dHAK7eSrZwJLbtyJEjHDlyJNfjoaGhFohGiBJUrpySwHzyidKUUUjG1hY3N2X0rjfeUOZs6dkT\nfvxRGflr48bsbVatgokT4fPPISYGFi1Scqdff1VKR/bvV1pNxo9XEpIePZTHvbyUBGnbNiXB8fVV\nWmBUKqUlZdAgpfh+/Xql9WbtWiUpuXRJOSWDQUmcGjeGffuUQQCio5WEqHNnJbHp2ROuXFGSr0d2\n8qRyUiEhSjYmSh2pgRFCmLNwDYw1j0BWEGMLzNVbKRaOxLY1bdrU9NO4cWPi4uLw9PS0dFhClIwR\nI5Ti/YdgLMyfOzd70sjJk5VEpU8fpbC+dWtlG41GGR8gI0P5wv2HH5RSm/PnlcSif3+lAWjHDvjg\nA6V4PytLKfJv2lRJPP74A+LilHXp6Uq3sOeeUwr7J01Spqs5ehQuXlT2WbRI+aK/XDklmVm9Wqm/\n6dpV6SE3Z44yZcvdu0ryM2rUY76G5csrNUSHDz/mgYS1kgRGCGHu8mWL1sEkpSrFg842mMBo7e1w\ncdRwJVpaYB5HUFCQ6adnz558/vnn/P7774Xe/8SJE4Tc6/D/119/ERAQwIABAxgwYAD/+9//iits\nIR7djBnKnbvRAyapzItOp7R2/PSTsty+vZLA/PADbN+utLYcOKBs07mz0moyebKSmGRmKvUsH3wA\nt27BiROQkKB0MztxAvr2hb//Vo6xerWSBFWoAFevKqOWGQxQqxY8+yxs3arkX8uXK13FunZV5ojp\n0kXZZ8gQJdnav1+JYe9epbXIwwPeekupjXntNSVJMspvMIIH8vFRTuj99x/qdRS2QxIYIYRVMbbA\nuDrZXhE/gKerlv9v787Dmyyzv4F/n2zd0p0uUKAsyq6s7hYBKSAIglAoCKjDODqjjv5AwJVFhSo6\n6igw6jjjDIhTEEEUXlkqi4ooiFApqwKldC9taZo0bdIk7x93kzal0DV5mub7ua5ebdLkyUkIaU7O\nfc6tM5hRXFoudyhtxtmzZ5Fv7zCux0cffYQXX3wRZrN4HqWlpeEPf/gD1qxZgzVr1uCee+5xZahE\nTTN8uOiEP3u2SW/Yd+4Uy7sAUWG54w5RBZk0SSQDo0YBf/mLSD62bRO50vjxwI4dIldatEhsKGm1\niuVix4+LpOLdd0Uu4OsrEhKVSkwSs9lEi05RkUhCCgpExebHH0Xz/a23Vm+U+frr4jZnzRLL2HJz\nxXE3bxaX2blTLEc7eVIkMF9/LapDdvblcXq9+D5qVD0Php4fIHkD9sAQUati74HxxAoMAIQFanAx\nvwzp2TqE9mza9CBv16tXL0iS5NgQNCwsDHPnzm3QdWNjY7Fq1SosWLAAAHD8+HGkp6cjJSUFsbGx\neOGFF+Dv7++y2Ima5JZbxDoulQqjOl17elhd7r1XJDvPPCMqK599JpZsPf+8aKw/cQJYvVocz99f\nLAG7cEH0xhw5Apw5I5aC3XUX8O23IpyffhJ9LY88AgwZAjz+uEg0tFrRo6JQiCrNmDGi9yU7W1R3\n7rpL3MbZs6K6snw58Ne/Aps2iWVmffqIkckPPFA9WGDyZNHys21b9RSyqVPFfbMvjxs9WiRc9W4S\nP2GCyLg+/lgsJaM2iQkMETmz97/ItIzMvomlJ/bAAKICAwDpOToM7Ok5E11ak1OnTjX5uvHx8cjK\nynKc7t+/P6ZOnYo+ffrg/fffx3vvvcc9Zaj1+PFHYPBgMRpMJd6SNfoNexWNRiQL9ut9/TXw6aei\nL+WLL0Ric9NNokJib6jfv18s+xo0COjZU1RHQkJEUuPvL3pS9u4VyUdMjEhKLFXbXNls4tgTJwIp\nKUDnziLxCQ4WcWzfLvaaCQwUCc+sWYCfn0hytm0Tx7VPGfvf/6rj1mrFfjR29uVxO3ZUJ3TXfEy+\n/lo0/7Rr18h/DPIkXEJGRM5k7oHRG83QqBXQqFvnJpb1qZnAUNPodDosW7YM48ePx6RJk/D222+j\nvLxpS/JGjhyJPn36ABDJTXOSI6IWZbOJd/o33iiaUKrUfsPekD0Ft24VK6fWrxc9LwsXiorIddeJ\nSsaCBWJS2BNPAH/8I5CTI0Yd+/iIxOGXX0RF5swZkbQoleJ4Go0oDPXsCRQWioKG0Shu09dXXN7H\nRywZ+/574O23gTffFKvh/vtfMQBsyBCga1eRU4wbJ46pVlcvBdPrRaXoavd3506RtGi14nu9e8P4\n+IidNJWe+TeEGoYJDBG1Kp66iaVdoL8KGpUC6dlMYJpq/vz5UKlUePPNN5GUlISysjK88MILTTrW\nnDlzcOzYMQDAgQMH0Ldv35YMlajpJEnMI96wQZQpqjT2DfvWrcCwYWLaWHy8qLTceaeortj3VYmP\nF8lGv35iqdayZWLvlS1bRLJjb+ovLhbTyIxGsTSsokIkKvv2AaGhQGamOEa7dqL5X60Wk8jKy0WP\nzfz5ohfm1ltF4nP77SJReecdMd1s506RoNj7Yz77TCQvd94pEptZs0R1pmbfz733Vldcrro3jM0m\nAti/v5n/KOQpuISMiFoNT97E0k4hSegYGYCMvFJYLFYolfycqLGysrLwQY0xsi+88ALubeKOdkuW\nLMErr7wCtVqNiIgIvFxzbQpRa3DDDU4naz7Va79h37pVNLiPGydOb9smvq9fD6xaJaodP/8sppH9\n+9/Vk8lGjBC5kl4P9OolloHZbMCf/iQa6v/8Z7GMq1s3kXgEBYlkY+xYsSKrslIU5sPDRcN+z55i\nOdnlyyLRsjfmP/ywyCF+/lkkPQ8/LBKigwdFHKNHiz6d5cvFMd9+W9yORlPd91NU1LC+HyeSJDKu\nRx4Ru2UGBDT6n4E8C/+yEpEzGfeBMXjwJpY1dYoMQKXFiqwCTsNpitjYWPz888+O06dOnUJsbGyD\nrx8TE4Pk5GQAQJ8+ffC///0Pa9aswd/+9jcE8I0NtQaffgp88AG2ry9p1MSxUaPExo///Kf4ys8X\nycykSSJJOXBA9KGMGyd6TKZNE9+3bwcSE0Vi0L69qKb88oso/MyaJXpVzpwR7/vT0sRtKRQi6VCp\nxP4tJhNw221itdvRo8D11wOHD4ulZQ8/LHKHDz4QVZV//AOIixOJzooVYsrZuHGiyrNkiagIASJ5\nWb9e/Gzv+5k2reF9P04mTBAbWPL/uFdgBYaInMnc/wJ47gQyu05RWgCiD6ZzdJDM0XiejIwMzJw5\nE127doVSqcT58+cRHByMESNGQJIkfPPNN3KHSNQ8nToBf/877p7dGWvW3tPgiWMajZjeNXKkOJ2S\nIqowKSmiB2X+fFHdeOCB6uVZy5eLKkn//qJKk5gokpJz58RksUGDRNKwcaPY4DIpSYxkjogQfTQ9\ne4pExc9PJFgDBoh9YWJjxe399JNInsaMEUnK11+LMc5xcaIdJTFRVJHuuENUZzZvFglTUZHzsrGi\nokY06ttduCBKRwsXiioM+168BhMYImo17AmMp04gs+scKT4BTM/RYehAmYPxQO+//77cIRC5Vlwc\nEBcHNYBp+oZPHDOZRDO8PdFZt05UU268UWwOGRAgvj77TPSfLFokkphnnhHLugYOFMnIQw+JHhit\nVlRihg0TCYu/vzjmww+LSsujj4okpXNnMUkMEH0wCxaIvpabbgKee04MDhg6VMQSFye2tTl/Xixj\nW7oU6NBBTBZ76SVxWwkJ4r7s3CmSG7W6Ommx9/00aNWon59o5FEoRFDkNZjAEFGrYWgzFRiRwJxn\nI3+TREZG4ocffkBxcbHT+RMnTpQpIiLXaOyI4J07xcaSNXtg1GrRqzJ6tEgkPvtMFCWefFIkIc8/\nL/ZeOXhQbCp55IhovN+7VywhmzdPJBmzZ4u+lCefBP7v/0Q/zeLFYsPLL78UVRmrVXytXQu89ppI\nSmJiRBN+jx6i4pKRIVZy7dsnqj+33iqWsL3zjqiyVE2LdurvuVbfzzVFRgK7dzdsVBu1KUxgiMiZ\njPvAtJUKTKC/BmFBvhyl3ERPPfUUCgoK0L17d0iS5DifCQy1CW+8ITrhH3kEO09f36jKQ+3fTZok\n3ruvXVudBAUFiYb6uXOBu+8WPSdHj4remCNHRO/MokVi6ViHDmJS2ZQpYgnZggUiQVmwQCQf0dFi\neVr37qKic+qUaNjv3l0kRHfdJRImiwUoKREFkZdfFn30kyaJBGvyZJFQ3XGHOF+rbebjZzYDjz0m\nRqlFR4sb9fNr5kHJ0zCBISJnMvbAtJUKDAB06RCEX07lQ19mgtbfc8dCy+HcuXPYvn273GEQucYt\nt4iGFZut6ZWHGuxjl+0bYD7/vGi+X7hQFCcWLxYJyYoVYgnXvn3ic6qiIjGJTKkUycZ774mlX0FB\nol/mlVdExcbPT1RY1GpRsTEYRLP+0qUiuVGrgd69gePHRZLyxz+KSozZLHpx/vc/MeJ5z55G9rdc\njVot7sCDD4qsjbwSp5ARUathMJqhVEjw8dBNLGvqUtW8fyG3tJ5LUm2dO3dGdna23GEQucbQoSLL\n6NGjRQ5Xc5+UvXvFRpJarUg+bDbRczJ4sEhuiotF1WTFCtHncuaMuNy6deIYTz8twrt4UfTDLF0q\nKjWZmaJ6o9MBTz0lcjCtViwru+46cVcee0xMJLvnHrFM7MEHRXVmzBjg889FD06DNqK8mrKy6p9f\nfFFMciOvxQoMEbUaeqMZAX5qp2VDnqpztNiYLiNXh77dwmWOxjPMmjULkiShqKgI48ePR69evaCs\nMVVozZo1MkZH1PrVrujccINYPmbvO3noITGK2WQSo47few9Ys0YkGfHxIsk5cQKYMUP0vXz8sWgz\n+cc/xIaWUVHAv/4lBgbceWd1g39+vrjcddeJywLieOvXi6VmNSsvTdrSyWYTmdWSJeIAkiQ2pSGv\nxQSGiJzJ1ANjsdpgrKhEaGDbmOEfW1WByWAFpsGefPJJuUMgcr3nnhM9MO++i627/TFqlHhjX3Mq\nV0vYtk0kLikposKybZtYKgaI29m4UTTof/65yAsA0Z6zfLlYgvbBB+J6GRlio8t33hHN+c8+K3ps\n3n5brISz/7ddulQkMz//LK6XlCSWrzV6slhdJEnMgH777ZZ7gMij1buEzGazYfHixUhMTMTs2bNx\n8eLFOi+3aNEivPXWWy0eIBG5WXq6LH0wZeVtp/8FADpGaSFJXELWGDfffDNuvvlmSJLk9KVQKODn\n5wedjkMRqA0IDxfrulQqjBolGvD1evF91KiGH2brVlxzE0y1WiwT02rFd3WNl9ZRo8R+LE8/LRKY\n668XPTFjx4rEQ6kU08PKy8WUsn37xFKyv/5VJCh33ikqMq+/LhKjbdvEdWre3m23VS9ta1LlxWQS\n2ZRZ/G3ALbcAVRvUEtVbgUlJSYHJZEJycjJSU1ORlJSE1atXO10mOTkZZ86cwc033+yyQImobTO0\nkQlkdr4aFaLDAnAhl2+6G2vVqlVIS0vDbbfdBpvNhoMHDyImJgZ6vR5PPfUU7uUnsOTJnnnG8aMG\n1TvQN2QfmJrsyc/VNsGs+d9k587q5MhkAl59VbSRACIpOX9eVFK2bBEVlk8+EZd7802xBM3HR1RT\n3nuvehPN/Hzgv/8VP6tU4njNSlhqU6uBAwfEgV9/vZkHo7am3gTm8OHDiIuLAwD0798faWlpTr8/\ncuQIjh07hsTERJw7d841URJRm6dvQxPI7DpHB+Kn47m4XFqBkEAfucPxGDabDV9++SU6dOgAAMjL\ny8Pzzz+PtWvXYtasWUxgqM1o7D4wNdmnjjUk+TGbRT/LAw+I5V0DB1Zf/u67xcqsTp1EVWbWLGDi\nRDFVbNcuUaE5ckQkNitXVo9B1uurk5mUlGZOFqsZ6PHjwIABYtnYxx8DOTktcGBqa+pdQqbX6xEY\nGOg4rVKpYLVaAQAFBQVYuXIlFi1aBJvN5rooich9unSp7oNxo7YyQtlms6GkpAQlJSWIChV/0U+c\nzXGcZ//ia+bV5efnO5IXAIiKikJ+fj60Wi0fN/J8hYXAX/4C3HOPYwSyVtv4CV2bN4tkZMcO8X3z\n5qtfdtw4sUnlyJHiu30jTJNJTBbbuVN812pFo/+GDcCNN4rlY5MmAX37iv1d7MmLySRuc9Ys8bVu\nXQvtJXn6tCgVZWWJ0+3aiUkERLXUW4HRarUwGAyO01arFQqFyHu2b9+Oy5cv45FHHkFBQQEqKirQ\nrVs3bjZG5Mlk2gemrWxiWVamx44DRQgLC8dlnREA8M2hi8gp0NW4jAEThvVBcHCwXGG2agMHDsS8\nefMwfvx4WK1WbNu2DQMHDsTevXvh7+8vd3hEzaPVAhERwAsv4N6Y6rNbZNlVI9XcQ2bWLNHLotOJ\nxGXvXtF2UlkpJos9+KBo5p86VVwvMrI6Edq2rRlN+kVFooEmOBjo10+sVcvNBWJi6r8uea16E5hB\ngwZhz549GDNmDI4ePYoeNeaWz5o1C7OqFl1u3rwZ58+fZ/JCRE3SViowAODnF4AAbRA6RKkBFEBf\nAQRog+QOy2O8/PLLSE5Oxvr166FUKnH77bdj6tSp2L9/P1asWCF3eETN4+MjRnY106RJYhmXfQnZ\ntXa4v9pEstpjl9Xq6oTmvvuAmTPFvjEJCWIbltRUkcDUTlTs082aZPlyUb55911x+vHHm3Ew8hb1\nJjDx8fHYv38/EhMTAQBJSUnYunUrjEYjEhISXB4gEXkHewLj7+v5CYxdiNYHkgQU6crlDsWj5Ofn\nY8SIERgxYoTTeXfddZeMURG5wOnTooN+zJhGX9VkEvthfvWV6J+ZNk1UTeqqghw5AixYIJKcBx4Q\nG1nWlXTUTmg2bGh4ktRgVqvIhAYOFKeffRZ49FHAYhGVGKIGqDeBkSQJS2t9UtC1a9crLjepWek3\nEbUaMu0Dozea4eejglLh+ZtY2imVCoRofVBUUg6bzdYmNuh0h5kzZzoeK7PZjEuXLqF37974/PPP\nZY6MqAWdOiXmETdxC4qdO0XxYv16kYw8/7yYGlaXF190nlhmn0BWn+YMGbiqy5fFLpcHDwLduok+\nF/7fpkbiRpZE5EyGHhibzQaD0YywIF+337arhQX7ori0AgajGVr/lhjT0/bt3r3b6fSvv/6KdevW\nyRQNkYv07AkcOgTU8aFwQ9irJQ2ZRKbRAEFBoj/ePihg69b6e1Zq98g0uc9l40bRjN+zJxAWBrz0\nkvhb061bEw5G1IApZERErmYyW2Gx2tpE/0tt9qSskMvImuzGG2/E8ePH5Q6DqGVJknPykpQEnD3b\nqEPUrpBcbRKYySR65R94QOzd8vHHDds08957m7G3S9XEWgDAmTOiXGT31FNAjSWiRI3FCgwRya6s\nwgKgbTTw1xZelcAUlZQjNpqN/A2xcuVKp9O///47wsPDZYqGyA3WrRNrvJ54olFXa2iFZOdO4OGH\nRSITHw/MnXtltWbrVpHUaDTick2utgDAN9+IpvwtW8Tpxx4Dtm9v4sGIrsQKDBE5k2EfGEN5JQDP\nH6Fcl7DgqgSGFZgmu+mmm/D3v/9d7jCIXOf++4Gvvwbs++4dPtygakxDKyT289evF5tT6nRXVmtG\njRI5lF4vvjekQuNgNALLlgH2fZpuuw346Sex5w0glo3NmNGIAxJdGxMYInKWnu72Ppi2XIEJDvCB\nQiExgWmEJ554AjNmzEDfvn3Rq1cvjB49GiEhIXKHReQ6fn5AbKz42WwGZs8G0tJa9Cbq2zRTo6nu\np5k2rQHN+nv3isQFAHx9gY8+EtPFAMDfHzh3DmDllFyECQwRya6sDVdgFAoJoYE+KNJVcBf5Bvru\nu+9w3333YdOmTdi8eTMmTJiAPXv2yB0WkXsYjcBDDwETJojTZjPwhz+IMcPNUF+1pt5+mpMngby8\n6tMvvyw2lgFEP8+774rNKO246Sy5EHtgiEh2ZeVttwIDiEb+wpJy6AwmBGt95A6n1Xv77bfx6aef\nolOnTgCAixcv4oknnsDw4cNljozIDYKCgPnzq09v3iyqGfY9UrKyxPKs++9v0Zut3U/z06qfETdC\nDfTvLy7w9ttA376iAR8QSVXNLGf8+BaNh+haWIEhImcy9MCUVYgKTFtNYMLZB9MolZWVjuQFADp1\n6gRrzYlGRN7krruAd96pPr15M7BtW/XpXbuA//yn+nR+vvgym6uXeAGiglNRUX06JweoMd3vXtMm\naD5aDUAkMXGVe8S4Mrvx40WlxW7mTGDy5GbeOaKmYQJDRM7k6IEpt0ClVECjapsvSY5RyiVMYBqi\nQ4cO+M9//gO9Xg+9Xo///Oc/iImJkTssInlERQEDBlSf7tpVJA92u3cDFy9Wn/7HP8TXl186X27D\nBmDOnOrT33wDvPZa9WmTSfS12I0YAfTuXX16/Hjgr39t9t0haglcQkZEsiurqITWT91md6q3JzCs\nwDTMsmXL8Morr+D999+HzWbDrbfeipdfflnusIhah3HjnE9PmVI9vQwAfHyA6GixD0vNnhRfX+cl\nX127Vg8OAICRI50TlsGDxRdRK8QEhohkZa60otxkRXhw21w+BgBBARqolAomMA20Zs0avFNzyQwR\nXV3tJOPZZ6t/Tkio/nnSJPFld8cd4suuXTvxReQB2uZ6DSJqOjf3wBSXijXZWv+2m8BIkoSwIB8U\nl1bAauUksvrs2bOHE9uIiOiqWIEhImdu7n8pLKlKYNpoA79dWJAv8ouNKNFXQMOPjq4pJCQEY8aM\nQd++feHjUz21LSkpScaoiIiotWACQ0SyKqxaVtXmE5iqSWSFunK0D2EGcy2Tai5zISIiqoUJDBHJ\nqkhnX0JW37bPni28RiN/+xBu8HYtkyZNQllZGUpKSriUjIiIrsAEhoic2ftf3LSUrFDnPUvIAKCo\npBwAE5hrWblyJf71r38hNDQUkiTBZrNBkiR88803codGREStABMYInLm5h6YopK238QPiE06NWpO\nImuITZs2Yffu3QgNDZU7FCKiq8vMFLt+RkaKzUNNJqBjR7mj8gpciE1EsirUlUOllOCjVsodikuJ\nSWS+uKyvgIWTyK4pMjISgTX3tSAiam0yM2G4eRisw4YDaWmwDhsOw83DRFJDLscKDBHJqkhXgQBf\nVZvdxLKmsCBf5BaWocRgljuUVmnlypUAgKCgIEybNg1Dhw6FUlmd2D7xxBNyhUZE5EyjgV+IDxQn\nTwA33AAFAL/efURFhlyOFRgicubGfWDKTZXQGysR4Nu2qy924VWTyC6Xmuq5pHe78cYbMXz4cKfk\npTFSU1Mxa9YsAEBGRgZmzJiBmTNnYunSpS0ZJhF5s8hIKDasdzpLsWG9WE5GLscKDBE5c2MPTGGJ\n6AcJ8PWOlyJ7I/9lPROYusTExDR7hPJHH32ELVu2ICAgAIDYO2bu3LkYMmQIFi9ejJSUFIwcObIl\nwiUib5afD+vUaU6VAOvUaVDs3cMkxg1YgSEi2VwqNgIA/L0kgQl1JDBcQlaXNWvWNPsYsbGxWLVq\nleP08ePHMWTIEADA0KFDceDAgWbfBhERTCYYL1fA2rsPcOwYrL37wHi5QjTyk8t5x7sGImqVCi6L\nBMZbKjD+Pir4qJVMYFwoPj4eWVlZjtM195EJCAhAaWmpHGERUVvTsSMCDu51TCFT7N2DAE4hc5t6\n3zXYbDYsWbIEp0+fhkajwbJly9CpUyfH73fs2IF//vOfUCgUuPfeezF79myXBkxELubGfWAuldgT\nGO/ogbFPIsstNMBcaZU7nFbnt99+w913333F+c3ZB0ahqF5oYDAYEBQU1KwYiYgcaiYrXDbmVvUm\nMCkpKTCZTEhOTkZqaiqSkpKwevVqAIDVasVbb72FTZs2wc/PD2PHjsWECRMQEhLi8sCJyEXc2ANz\nyV6B8fOOCgwAhAb5IKfQgNzCMrQL5z4nNcXGxuLDDz9s0WP26dMHhw4dwk033YRvv/0Wt956a4se\nn4iI3K/edw2HDx9GXFwcAKB///5IS0tz/E6hUODrr7+GQqFAYWEhbDYb1Oq2vRkdEbUcb1tCBlQ3\n8mddKkO/HjIH08qo1WrExMS06DEXLlyIl156CWazGd27d8eYMWNa9PhEHoUbL1IbUe+7Br1e77Sh\nmEqlgtVqdZTlFQoFdu3ahaVLl2L48OHw9/d3XbRE1KZcumyEv48SapX3zBNxJDAFBpkjaX0GwatF\nnwAAIABJREFUDRrUIseJiYlBcnIyAKBLly5Yu3ZtixyXyKNVbbzoF+IDxYb1sE6dBuPlCtHHwSSG\nPEy97xq0Wi0Mhuo/tDWTF7v4+Hh8//33MJlM+OKLL1o+SiJyHzfuA3PpshFhVXujeItQRwJTJnMk\nrc+iRYvkDoGo7aq98eLJE/AL8eHGi+SR6k1gBg0ahH379gEAjh49ih49qtc86PV6zJo1C6aqkXF+\nfn5esZs2UZuWnu6WPpiycjPKyisRHuTj8ttqTQJ8VVCrJGRdYgWGiNyIGy9SG1LvErL4+Hjs378f\niYmJAMSmYFu3boXRaERCQgImTJiAmTNnQq1Wo2fPnrjvvvtcHjQReT57/0uYlyUwkiQhJECD3EIj\nKi1WqJTes3yOiGTEjRepDak3gZEkCUuXLnU6r2vXro6fExISkJCQ0PKREVGbVni5HID3JTAAEKJV\no6CkAtkFenSO5lhfInKDqo0X/Xr3ce6B4caL5IG8Z/QPETWMm/aBsVdgwoN8HMtQvUWIVqw5v5jH\nBIaI3IQbL1IbwgSGiJy5aR+YS44lZL7IveRdCUywVoybz8grxR0yx0JEXoQbL1IbwcXXRCQLewIT\nHuyNS8jsFZhSmSMhIiLyPExgiEgW+cVijLC3TSEDgABfJXw1SiYwRERETcAEhoicuWkfmNyiMoQF\n+UKjVrr8tlobSZLQoZ0/MvP1sFiscodDRETkUZjAEJEzN+wDU2mx4lJxGaLD/V16O61ZTIQ/Ki1W\n5BZxQ0siIqLGYAJDRG6XX1wGqw2IDg+QOxTZxLQT9z0jl8vIiIiIGoMJDBG5XW6hqDpEh3l3BQYA\nMvJ0MkdCRETkWZjAEJEzN/TA5BUaAADR7by4AhMh7vvFXL3MkRAREXkW7gNDRM7csA9MjqMC470J\nTLsQMcCAk8iIiIgahxUYInK7XHsFxoub+BWShE5RWmTml8JitckdDhERkcdgAkNEbpdXWAYfjRIh\ngd63B0xNnaICYaq0Ip+TyIiIiBqMCQwROXNxD4zNZkNOoQHRYf6QJMllt+MJOkcFAgCXkRERETUC\nExgicubifWB0BhOMFZVePULZrlNVApPBBIaIiKjBmMAQkVvlVS2XYgLDCgwREVFTMIEhIrdiA3+1\nqPAAqFUKVmCIiIgagQkMETlzcQ9MjiOBYQVGqZDQMVKLi3mlsHISGRERUYMwgSEiZy7ugcmz7wHD\nCgwA0QdTYbKg4LJR7lCIiIg8AhMYInKr3MIySBIQGcoEBmAfDBERUWMxgSEit8opNCA8SOxCTzUm\nkeUygSEiImoIJjBE5MyFPTDmSgsKS4yIYv+LQydWYIiIiBpFJXcARNTKuLD/Jb/YCJsNaO/lCYzN\nZkNJSQkAwF9thVIh4Xx2seM8u6CgIK/f7JOIiKg2JjBE5DYcoSyUlemx40ARwsLCAQCB/ipk5Oqx\n66d0R8JSVmbAhGF9EBwcLGeoRERErU69CYzNZsOSJUtw+vRpaDQaLFu2DJ06dXL8fuvWrVizZg1U\nKhV69OiBJUuWuDJeIvJgmfl6AED7dt5dgQEAP78ABGiDAADhIf64rC8BlH4I8NfIHBkREVHrVm8P\nTEpKCkwmE5KTkzFv3jwkJSU5fldRUYF3330Xn3zyCT799FOUlpZiz549Lg2YiFzMhT0wF3J0AIDY\n9kEuOb6nCgvyBQAU6SpkjoSIiKj1qzeBOXz4MOLi4gAA/fv3R1pamuN3Go0GycnJ0GjEJ4aVlZXw\n8fFxUahE5BYu3AfmQq4OKqWEmAitS47vqaoTmHKZIyEiImr96k1g9Ho9AgMDHadVKhWsVisAQJIk\nhIWFAQDWrl0Lo9GI22+/3UWhEpEns1ptyMgtRcfIQKiUHIBYU2igSGCKS5nAEBER1afeHhitVguD\nweA4bbVaoVBUv/mw2WxYsWIFLly4gJUrV7omSiLyePnFZSg3WRAbzeVjtYUEaiBJrMAQERE1RL0f\ngw4aNAj79u0DABw9ehQ9evRw+v1LL70Es9mM1atXO5aSEZEHc1EPTHX/S2A9l/Q+SoUCIVofFOsq\nYLPZ5A6HiIioVau3AhMfH4/9+/cjMTERAJCUlIStW7fCaDSib9++2LRpEwYPHoxZs2ZBkiTMnj0b\nI0eOdHngROQiLup/Sc9lA/+1hAb5ori0BGXllQjwU8sdDhERUatVbwIjSRKWLl3qdF7Xrl0dP584\ncaLloyKiNicjR+w0zyVkdQsL9ME5iGVkTGBa3v333w+tVgyP6NixI5YvXy5zRERE1FTcyJKI3CI9\nVwc/HyUiQvzkDqVVCg2qbuTvFMVldi3JZDIBANasWSNzJERE1BI4CoiInLmgB8ZcaUVWvh6do4Og\nUEgteuy2gnvBuM6pU6dQVlaGOXPm4KGHHkJqaqrcIRERUTOwAkNEzlzQA5NVoIfFauPysWsICfSB\nBE4icwVfX1/MmTMHCQkJSE9PxyOPPIIdO3Y4TdQkIiLPwQSGiFyOE8jqp1IqEKTVoEhXzklkLaxL\nly6IjY11/BwSEoKCggJERUXJHBkRETUFP34iIpe7YJ9AxgrMNYUF+aLCZIGxolLuUNqUzz//HK+9\n9hoAIC8vDwaDARERETJHRURETcUKDBE5s/e/tNBSMpvNht8vFgEAwgKAkpISp9+XlJTABlYcACA0\n0BfnoUOxrgIh/nJH03ZMmTIFzz33HGbMmAGFQoHly5dz+RgRkQdjAkNEzlq4B0an0+FMRjF8NQoc\nPJ5zxe8vFeQhQBuMqgm3Xq26kb8cIf7cGLilqNVqvPnmm3KHQURELYQJDBG5lKHcDEO5FR0jtQjQ\nXrmEzGAolSGq1ik8WCQwl0qM6BbNBIaIiGrIzAQ0GiAyEsjPB0wmoGNHuaOSBWvoRORSZzJE/0t0\neIDMkbR+oUE+UEgSCks4iYyIiGrIzITh5mGwDhsOpKXBOmw4DDcPE0mNF2IFhoictXAPzOmMywCA\nDu2YwNRHqVAgNMgHhSVGWDmJjIiI7DQa+IX4QHHyBHDDDVAA8OvdR1RkvBArMETkLD29RftgTmeU\nQJKAqHB2pTdEuxA/VFpsKDWY5Q6FiIhai8hIKDasdzpLsWG9WE7mhZjAEJHLlJsqcS67FOFBGmhU\nSrnD8Qjtgv0AAEWlJpkjISKiViM/H9ap05zOsk6dJnphvBATGCJymTMZxbBYbYgK9ZU7FI/RLqRq\nEhkTGCIisjOZYLxcAWvvPsCxY7D27gPj5QrRyO+F2ANDRM5asAfm+Dmx/0skE5gGc1RgdN75R4mI\niOrQsSMCDu51TCFT7N2DAC+eQsYEhoictWD/y4lzhQDACkwj+PqooPVTo5gVGCIiqqlmsuKlvS92\nXEJGRC5RabHi5IUixET4w1fD/pfGaBfih7IKC3QGJjFERES1MYEhIpc4l1WCCpMFPTsHyx2Kx7Fv\naJmRp5c5EiIiotaHCQwROevSpboPphmOVy0f69k5pNnH8jbtQkQfzIVcJjBERES1MYEhImcttA9M\n6m8FAMAKTBPYG/kz8gwyR0JERNT6MIEhohZXWmZC6m8F6NohCO2C2cDfWMFaDVRKCRe4hIyIiOgK\nTGCIqMUdOJaDSosNQwd653jH5pIkCaGBGuRcKoPJbJE7HCIiolaFCQwROWuBHpjvjmQBAOIGxDQ/\nHi8VHqSBxWpDeo5O7lCIiIhaFSYwROSsmT0wxaXl+PX3AvSMDUVUmH+LheVtIoJ9AACnLhTJHAkR\nEVHrUm8CY7PZsHjxYiQmJmL27Nm4ePHiFZcxGo2YPn06zp8/75Igichz/JCaDasNGMrqS7NEhIje\nodMXimWOhIiIqHWpN4FJSUmByWRCcnIy5s2bh6SkJKffp6WlYebMmXUmNkTkfb49mgVJAu7o30Hu\nUDxaoL8KWj8VTjGBISIiclJvAnP48GHExcUBAPr374+0tDSn35vNZqxevRrdunVzTYRE5F7N6IEp\nKDbixPki9OvWDuFVo4CpaSRJwnUdg5BfVIZiXbnc4RAREbUa9SYwer0egYGBjtMqlQpWq9VxeuDA\ngYiKioLNZnNNhETkXs3ogdn+o7je0IFcPtYSru8o9tA5ncEqDBERkV29CYxWq4XBUL2ZmtVqhULB\n3n8icqYvM2Hr9+cQovXBsMEcn9wSuscEAQBOpbORn4iIyK7eTGTQoEHYt28fAODo0aPo0aOHy4Mi\nIs/z1XfnUFZeiUnDusNXo5I7nDahe0wgJIkVGCIioprqfZcRHx+P/fv3IzExEQCQlJSErVu3wmg0\nIiEhwXE5SZJcFyURuY+9/6URy8jKys3Y8t05BPprcM/tXV0Sljfy81EhNjoIv128DIvFCqWS1W8i\nIqJ6ExhJkrB06VKn87p2vfINypo1a1ouKiKSTxP6X7Z+fx4Goxmzx/aGnw+rLy2pZ2wo0nN0SM/R\noXvHELnDISIikh0/ziOiJrPZbMjMuYTNe39DgK8Kd94QjpKSkiu+bOCQj6bqFRsKgMvIiIiI7PhR\nKRE1mU6nw2trDkNvrMSQnmH4ITXristcKshDgDYYWq0MAbYBPWPDAIgNLcdyeR4RERETGCKqpRE9\nMKm/F+JCfjkiQv1wU9+OUCiu7IUzGEpbNj4vExOhRaC/GsfOXoLNZmO/IREReT0uISMiZw3cB6as\n3Ix/bzsDSQJGDO5UZ/JCzadQSBjQIxIFxUZczGMySERExASGiJrkP1tPoLCkAjd0DUa7ED+5w2nT\nBveKBAAcPpUvcyRERETy4xIyIqqTzWaDTqer83c/Hs/H1wfS0SHcFzd2D3ZvYF5oUE97ApOHScOu\nkzkaIiIieTGBISJnVT0wutRUfLn3BPz9A5x+rTOY8dUPWVApJfSIBswmswxBepfQIF90iwnG8XNF\nMFZUclQ1ERF5NS4hIyJnNXpg/P0DEKANcnz5+Gnx7bFLMFtsGDa4EyLCOFrMXQb3ikSlxYpffyuQ\nOxQiIiJZMYEhogb7PjUbly6Xo0/XMPTsHCp3OF5lcK8oAOyDISIiYgJDRA1yJqMYx88VIjzYF3ED\nYuQOx+v0ig1FgJ8ah0/lwWbjxqBEROS9mMAQkbMuXar3gqlSXFqOvb9kQq1SYMytXaBS8qXD3ZRK\nBQb0iEB+sRGZ+Xq5w/EoNpsNixcvRmJiImbPno2LFy/KHRIRETUD34UQkbNa+8CYK63Y8eMFmCut\nGD64I0ICfWQLzdsNqRqn/GNajsyReJaUlBSYTCYkJydj3rx5SEpKkjskIiJqBiYwRHRN3x3NQmFJ\nOfp1D8f1ndj3Iqdb+7WHRqXArp8yYLVyGVlDHT58GHFxcQCA/v37Iy0tTeaIiIioOTiLE4BJpYGm\n0iR3GF4rO7orOuSeb/D5nsZd98MVt3M2qxQn04ugVEjIqrFs6X87TwMA7u6vxdeHCqBSFWP6qJ5X\nXH/VxlQkxLVzuk6JvgKP3X8j/rfzNEr0FQjwVUBvtECSchGs9XFcxlLnG/TqyoNSITldRiGJ75KU\ne5XrXnmMmsKCfFGkK7/mZWpSKnIBABarrdZ1q2+nZoxKhYTH7r8RqzamOuKteZ+LdOUIC/LF9FE9\n8f6mXxHor0LK4Tz849l4xxG1/hrEDYzBN4cuIvW3Agys2h+Grk2v1yMwMNBxWqVSwWq1QqHgZ3hE\nRJ6Ir94ANBbuYyGnDnnpjTrf07jrfrTY7VT1wGQVGHDgRCE0KgUsVhuKSyscFynSlTvesOvKKut4\n834l+3Xsb+jtP+vKLLDaRCJQ+zLXUvsyVhscx2mKhtyH2rdf877UF2Nd8da8zzWPY7HacFlvRmZB\n2RXHvOe2LgCA7T+mNypeb6bVamEwGBynmbwQEXk2voKTbGw2G0pKSgAAJSUlV3zZz+fEJTdLT4fh\n5G94Z0MaKi02jBjSSe6IqIYenUPRrUMwfkzLRWGJUe5wPMKgQYOwb98+AMDRo0fRo0cPmSMiIqLm\n8PolZCfPnENvALu+O3rVy8REBqJPz+7uC8pL6HQ6fLn3BGYBSDl44YrfTwbw5d4TmDCsD4KDg90e\nn7eyWG1445OfkVNoRN8uwejeMQTAlf8+JA9JkjDm9i5YvTEVKQczMC3+yqV75Cw+Ph779+9HYmIi\nALCJn4jIw3l9AmMwit4Xiyrk6pcp46ecruLvHwAACNAGXfP35D5r/98JHD6Vjxu7h2HAdXX/u5C8\n7hoYg4+/SsP2Hy9gyojroeRY62uSJAlLly6VOwwiImoh/KtHRA5f/3Aen+/5HTGleXh8cm8oJEnu\nkKgO/r5qjBjSGZcuG7Hl23Nyh0NERORWTGCICACw/UA6Vn/+K4K1Grz46nQE+KrlDomuYcboXgjW\narBuxynkXDLUfwUiIqI2ggkMEeHrA+lYtTEVwVoNlj12BzpGBtZ7HZJXUIAGf5p4A0xmC1Z+dpTD\nLoiIyGt4XQ9MZn4pfjmVj7NZJTifXYKikjJ8AiB512mEB/uifXgAYiK0CA3ylTvUNq/cZEF+sRgb\ne+BYNixWsTeGSqVAWNXj70lvymw2G3Q63RXnBwOOqWoAEBQUBKkZS7Na8nYMRjM+/OIYdv980ZG8\nxLZn34uniBsQg72/ZOLQiTzs/OkCRt/aRe6QiIiIXM4rEpjCEiP2Hs7Et0eycC67+g2eRq2En0a8\nwSvRm1BYUo4zGZcBAOHBvri+Uwh6dA5FOHOZFlOir8DB47n4MS0XR87kw1xpxZ8B/HK64IrLPgEg\neXcG0vPKMXRQLAb0iIBGrXR7zA1ln6pWe/DAZFRPWSsrMzR7qlpL3I7JbMFPabn4eNtxFBQbcV3H\nYDwzcwhiIrRiHxgASE1tcozkHpIk4S+T++Pxc7ux+vNfIUkSRt0SK3dYRERELlVvAmOz2bBkyRKc\nPn0aGo0Gy5YtQ6dO1ftC7N69G6tXr4ZKpcLkyZORkJDg0oAbymS24PCpPHxz6CIOncyD1WqDSinh\npj5RuP2GDugZG4oOEVocOXYaeAX408R+KC6tQM4lAy7k6nAhtxQ/pok32p0j/XCp3A939u+AQH+N\n3HfN4+QWGvBjWg5+TMvFyfOFsO/n1zHCH0H+4ik46a7uUKkUsFptMJktKCwRlRlJkrDvaC72Hc2F\nr0aJQb0icVu/9hjSJxpav9bVo2GxWmGyqlFaYkNZRSXKKyphrrRiMoDTmeXw81VBLSlQcNmIwMAg\nKBRNq8LYbDbYJB8U6oHSMjOMFZUoN1ViMoAjZ0tF473NjB0/ZSI8tAT+vir4+6hRVmHGpcvlSM/R\nYf+v2TAYzVAoJEwf1RNTR/aAyj7JKj1dfK9RzaHWq12IH5b88Ta88u8f8d6Go8gvLsMDo3s1q8pH\nRETUmtWbwKSkpMBkMiE5ORmpqalISkrC6tWrAQCVlZV47bXXsGnTJvj4+GD69Om4++67ERYW5vLA\n61JYYkTa2UIcPpWHH9NyYayoBABc1zEY8bfEIm5AzFUTEEmSEBbki7AgX/TtFo5yUyXOZpbgTEYx\nMvINWL0xFR9u/hWDe0UhbkAM+nUPR3iwnzvvnscwGM04mV6EtLOXcPhUPtJzxHInSQJ6dwnDrf3a\n45Z+0QhQWxwVgw4RWqdjdI4Wy5imDe+ELh1CkZZeigPHcvDDr+JLqZBww3XtcFPvKPTqEoZuMcHV\nb8DdoERfgfRsHc7n6HAhR4f0nBJcyC2FudJa5+UPpOU4ft5xKBcalQIxkVp0jAxEx0gtOkZqER7s\nB62/Gv4+apEMmS0oLTOjoLgMecVlyMrX42K+Hpl5pSg3Weq8ndTfLjl+PvLb5avGHxbkg9G3XIeR\nN3dGpyj2u3i63l3D8MZfh2LJPw9g/a4z+CktF/cN7YahAzu26qolERFRU9SbwBw+fBhxcXEAgP79\n+yMtLc3xu7NnzyI2NhZarXjzOXjwYBw6dAijR49u8UDzispQWGKEudL+xs4EncGEgmIjsi8ZkJFX\nivyiMsflI0P9cM9tXXDXoI7oFtP45Tq+GhX6dgtH327hUFl00Jn9sPeXTPx0PBc/Hc8FALQL9kXX\nmGBEhfkjKswfWj8N/HxU8PVRwlejgp+PCiql5Pgk1P6BqCRJkADAfhoSan5Yar987f4Pmw2woeo8\n52+Oy9ZuGXGc7zij7uvVvO7VryN+sFptKDdZUGGyQG80oVhXgeLSCmQV6JGZX4q8ojLHsdQqBYb0\njsKt/drj5r5RCA2sXo9X0oBP+CVJwvWdgjGkX2c8OK4PLubZK2M5OHqmAEfPiKVnGrUSnaK06NBO\ni+hwf4QE+iA4wAcBfmqolQqoVAqoq77siY7NZoPNBlirvttPW6xWGMorUVZuhsFohsFYCb3RhEuX\njcgrKkP2JQMul1Y4xalWKRAT4Q+VAogMC4S/nxp+GhXUKgXwFjDujq4oKzejsLgUAf4+yL9cgcx8\nPc5nX9nLci0qpQLtw/2gVAARoVoEa6uecxoV8BYw9e7rYbHaUFqqR6+u4YCkRllFJcqMZvj5qhEe\n7IvIUD9c1ykUyiZWgKh1ionQ4o0nh+KfXxzD979m4+/rj+KjLWno3jEE3TuGoH27AAT5axAW5Aut\nynN6y4iIiGqrN4HR6/UIDKz+hFalUsFqtUKhUFzxu4CAAJSWll71WBaL+NQ4Nze3UUEWlpRj4crv\nrnmZQH81enUIRq/OoejZJRSx0VUNzLZSZGZePabCgjxkqlTIuXDiqpcJ8rWhT89u6D02GrmFwUg7\nX4QLuXqk5xbgh5zsRt2Xtk7rr0bnMD90bR+I7jGB6NI+ED5qJYAy5GaeR81/+dLSUmRn5iJTpULm\nhd+vOFamSoXszHScDi53ep7dEAPcEBOJy/pg/J6pw/kcPdJzSvH72UKcOlN3BaSlSBIQGuiDHlH+\n6BDuh/YRAejQzh8RwT4wGAz46Xgu/HxtIumrACwV4n6oTPkIUgBq/zLc0jcagYFRsNoiodObkFds\nRH5xOUoNJhgqLCivqIRSKZItX40SYUE+CA30QUSID8KDatyOvQBYAZiqbqdCV/V8LC9DsEJyetwA\nEwATrGU6nDmdd9X7qB0zBgCQ89lnyM7MhZ+fP8xlRQDg+Heyn87NNsJctdFrXf+G5rIi5GYboVAo\nYS7TO87PvPC74xjepCH3u/ZlMjMzG3Ub04dHY/SgEOw+fBG/nMrH4V/zcfhX58vcf0cUgOrXZKrW\n1L9TRETUcuyvwVf7OyXZ6hnz9Nprr2HAgAEYU/WmZtiwYdi7dy8A4PTp0/jb3/6GDz/8EACQlJSE\nwYMHY9SoUXUe6+eff8YDDzzQpDtCREQta926dRgyZIjcYbQq/DtFRNR6XO3vVL0VmEGDBmHPnj0Y\nM2YMjh49ih49ejh+1717d1y4cAE6nQ6+vr44dOgQ5syZc9Vj9evXD+vWrUNERASUSq7LJiKSg8Vi\nQUFBAfr16yd3KK0O/04REcmvvr9T9VZgak4hA0SV5fjx4zAajUhISMDevXuxcuVK2Gw2TJkyBdOn\nT2/5e0FERERERIQGJDBERERERESthfvmzhIRERERETUTExgiIiIiIvIYTGCIiIiIiMhj1DuFrKVZ\nrVbHIACTyYQnn3wSd911l7vDaJShQ4eiS5cuAICBAwfi//7v/+QNqIHOnj2LadOm4YcffoBGo5E7\nnKsyGo2YN28edDodNBoNXnvtNURGRsod1jXp9Xo888wzMBgMMJvNePbZZzFgwAC5w6rXrl27sH37\ndvztb3+TO5Q61RwaotFosGzZMnTq1EnusOqVmpqKN998E2vXrpU7lHpVVlbi+eefR1ZWFsxmMx57\n7DGMGDFC7rDaBE99/ra0+++/37HBdceOHbF8+XKZI3KPmq8DGRkZePbZZ6FQKHD99ddj8eLFcofn\nFjUfg5MnT+LRRx91vH+aPn067rnnHnkDdJG6Xlevu+46r3oO1PUYtG/f3mXPAbcnMFu2bIHFYsGn\nn36KvLw87Nixw90hNEpGRgb69u2Lf/zjH3KH0ih6vR4rVqyAj4+P3KHUa8OGDejXrx/+8pe/YPPm\nzfjnP/+JF154Qe6wrunjjz/G7bffjtmzZ+P8+fOYN28eNm3aJHdY17Rs2TLs378fvXv3ljuUq0pJ\nSYHJZEJycjJSU1ORlJSE1atXyx3WNX300UfYsmULAgIC5A6lQb788kuEhoZixYoVKCkpwcSJE5nA\ntBBPfP62NJPJBABYs2aNzJG4V+3XgaSkJMydOxdDhgzB4sWLkZKSgpEjR8ocpWvVfgzS0tLwhz/8\nAQ899JC8gblBzddVnU6H++67D7169fKq50Bdf1sef/xxlz0H3L6E7Pvvv0dkZCQeffRRLFq0CMOH\nD3d3CI2SlpaGvLw8zJ49G48++ijOnz8vd0gNsmjRIsydOxe+vr5yh1KvBx98EH/+858BANnZ2QgO\nDpY5ovo9/PDDSExMBCA+dfCERHHQoEFYsmSJ3GFc0+HDhxEXFwcA6N+/P9LS0mSOqH6xsbFYtWqV\n3GE02D333IOnnnoKgKiIq1Ru/xyrzfLE529LO3XqFMrKyjBnzhw89NBDSE1NlTskt6j9OnD8+HHH\n5ntDhw7FgQMH5ArNbep6DPbu3YuZM2fihRdeQFlZmYzRuVbN11WLxQKlUokTJ0541XOgrr8tx48f\nx549e1zyHHDpX66NGzfiv//9r9N5YWFh8PHxwQcffIBDhw7hueeewyeffOLKMBqsrngXL16MRx99\nFKNHj8bhw4cxf/58bNy4UaYIr1RXzB06dMC4cePQs2dPtLYp2XXFm5SUhH79+uHBBx/Eb7/9hn//\n+98yRVe3a8VcUFCABQsWtKqK0dXiveeee3Dw4EGZomoYvV6PwMBAx2mVSgWr1QqFovW268XHxyMr\nK0vuMBrMz88PgHisn3rqKY9ZEusJPPH529J8fX0xZ84cJCQkID09HY888gh27NjR5h+D2q8DNf/2\nBgQEoLS0VI6w3Kr2Y9C/f39MnToVffr0wfvvv4/33nsPCxculDFC16nrdfX11193/N4mdJSUAAAI\nB0lEQVQbngO1H4Onn34aJpMJCQkJLnkOuDSBmTJlCqZMmeJ03ty5cx1Vl5tuugnp6emuDKFR6oq3\nvLzcsRvz4MGDUVBQIEdoV1VXzKNHj8bGjRvx2Wef4dKlS5gzZ06rWZtfV7x2//3vf3Hu3Dk8+uij\n2LVrl5sju7qrxXz69Gk888wzWLhwoeNTltbgWo9xa6fVamEwGBynve3Nn7vk5OTgiSeewMyZMzF2\n7Fi5w2kz+PwFunTpgtjYWMfPISEhKCgoQFRUlMyRuVfNf3eDwYCgoCAZo5HHyJEjHQl9fHw8Xn31\nVZkjcq2ar6vjxo3DG2+84fidtzwHaj8GpaWlLnsOuP2VdfDgwdi3bx8AUWru0KGDu0NolJUrVzo+\nzT516hTat28vc0T127FjB9asWYO1a9eiXbt2ra6iUduHH36ILVu2AAD8/f0dCWNr9vvvv+Ppp5/G\nm2++iTvvvFPucNqMQYMGOV4fjh49ih49esgcUcO1tmrn1dg/1Jg/fz4mTZokdzhtiic/f1vK559/\njtdeew0AkJeXB4PBgIiICJmjcr8+ffrg0KFDAIBvv/0WgwcPljki95szZw6OHTsGADhw4AD69u0r\nc0SuU9frau/evb3qOVDXY+DK54DbFz8nJCRgyZIlmDZtGgBg6dKl7g6hUf70pz9h/vz52LdvH1Qq\nFZKSkuQOqVEkSWr1b6wmT56MhQsXYuPGjbDZbB7xGL/11lswmUxYtmwZbDYbgoKCPKoPorWKj4/H\n/v37Hf1FnvBcsJMkSe4QGuSDDz6ATqfD6tWrsWrVKkiShI8++qhVTyr0FJ78/G0pU6ZMwXPPPYcZ\nM2ZAoVBg+fLlXleFAoCFCxfipZdegtlsRvfu3TFmzBi5Q3K7JUuW4JVXXoFarUZERARefvlluUNy\nmbpeV1944QW8+uqrXvMcqOsxeO6557B8+XKXPAckW2t/d0tERERERFTF+z4WISIiIiIij8UEhoiI\niIiIPAYTGCIiIiIi8hhMYIiIiIiIyGMwgSEiIiIiIo/BBIaIiIiIiDwGExgiIiKiFnbw4EHMmjWr\nUdeZPXu2i6K5tt27d+OTTz5p1jFSUlKwbt26FoqI6NqYwBARERG5QGM3uD148KCLIrk6k8mEDz/8\nENOnT2/WcUaOHImdO3eiqKiohSIjujomMERERERuYrFY8NJLLyExMRHx8fH405/+hIqKCrz66qsA\ngGnTpgEAvv32WyQkJOD+++/HX//6V5SUlAAARowYgb///e9ISEjA+PHjceLECQDAyZMnMXXqVIwf\nPx6zZs1CXl4eFixYgA0bNjhue/bs2fj111+d4vnqq69w8803Q6lUIisrCxMnTsSTTz6J0aNHY968\neVi/fj0SExMxduxYnDt3DgDw+uuvY+LEibj//vuxcuVKx7FGjRrFKgy5BRMYIiIiIjc5cuQINBoN\nkpOTsXPnThiNRnz77bd48cUXAQDr169HUVER3nrrLfz73//Gpk2bcMcdd+CNN95wHCMsLAyfffYZ\npk2bhvfffx8AMH/+fDz++OP46quvMG7cOKxZswZTpkzBl19+CQDIyspCcXExbrzxRqd4du/ejSFD\nhjhOnz59Go8//jh27NiBY8eOITs7G8nJyRg7diw2bNiA7OxsfPfdd/jiiy+QnJyMjIwMmEwmAMCQ\nIUOwe/dulz5+RACgkjsAIiIiIm8xZMgQhISEYN26dTh//jwyMjJgMBgAVC85+/XXX5GTk4PZs2fD\nZrPBarUiJCTEcYw777wTAHD99ddj165dKC4uRkFBAe666y4AQGJiouOyBQUFyM7OxpYtW3Dfffdd\nEc+FCxcQHR3tOB0REYFevXoBAKKionDrrbcCAGJiYnDw4EFER0fD19cX06dPx/Dhw/H0009Do9E4\nLnPhwoUWe6yIroYJDBEREZGbfPPNN3jvvffw0EMPYfLkySguLr7iMhaLBYMHD8bq1asBiD4Ve5ID\nAD4+PgBEwmOz2aBWq52ubzKZkJeXh06dOmHixInYunUrtm/fjn/9619X3JYkSVAqlY7TtY+lUjm/\nVVQoFNiwYQMOHTqEffv2YerUqVi3bh1iY2OhUqmgUHBxD7ken2VERERELmCz2a4478CBAxg7diwm\nTpyIsLAwHDp0CBaLBQCgVCphtVrRv39/HD16FOnp6QCAVatWYcWKFVe9Ha1Wi/bt2+PAgQMAgC++\n+ALvvfceAGDSpElITk5G+/btERERccV1Y2NjkZ2dfc2Yazp58iRmzpyJm266CQsWLMB1112H8+fP\nAwAyMzPRuXPna16fqCWwAkNERETkAr/88gsGDRoEm80GSZIwYcIEPPDAA5g7dy62b98OjUaDAQMG\nIDMzE4Bo0L/vvvvw+eefY/ny5Xj66adhtVoRHR2NN998E8DVJ5utWLECS5YswYoVKxAaGupIeKKj\noxEdHY1JkybVeb1hw4bhxx9/RFxc3BXHr+u2evfujQEDBmDcuHHw8/NDnz59MHToUADATz/9hLvv\nvruJjxZRw0m2+lJtIiIiIvJIeXl5mD17NrZu3XrF8jBALDebMWMG1q9f77SUrClmzJiBlStXIiws\nrFnHIaoPl5ARERERtUE7duzApEmT8Mwzz9SZvACARqPBY489hk8//bTZtzVmzBgmL+QWrMAQERER\nEZHHYAWGiIiIiIg8BhMYIiIiIiLyGExgiIiIiIjIYzCBISIiIiIij8EEhoiIiIiIPAYTGCIiIiIi\n8hj/H9YuPZWjlvWJAAAAAElFTkSuQmCC\n", 157 | "text/plain": [ 158 | "" 159 | ] 160 | }, 161 | "metadata": {}, 162 | "output_type": "display_data" 163 | } 164 | ], 165 | "source": [ 166 | "# Create the grid for plotting\n", 167 | "xx, yy = np.meshgrid(np.linspace(0, 25, 200), np.linspace(0, 30, 200))\n", 168 | "Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])\n", 169 | "Z = Z.reshape(xx.shape)\n", 170 | "\n", 171 | "# Calculate the decision function and use threshold to determine outliers\n", 172 | "y_pred = clf.decision_function(X1).ravel()\n", 173 | "percentile = 1.9\n", 174 | "threshold = np.percentile(y_pred, percentile)\n", 175 | "outliers = y_pred < threshold\n", 176 | "\n", 177 | "fig, (ax1, ax2) = plt.subplots(1,2, figsize=(14,5))\n", 178 | "\n", 179 | "# Left plot\n", 180 | "# Plot the decision function values\n", 181 | "sns.distplot(y_pred, rug=True, ax=ax1)\n", 182 | "# Plot the decision function values for the outliers in red\n", 183 | "sns.distplot(y_pred[outliers], rug=True, hist=False, kde=False, norm_hist=True, color='r', ax=ax1)\n", 184 | "ax1.vlines(threshold, 0, 0.9, colors='r', linestyles='dotted',\n", 185 | " label='Threshold for {} percentile = {}'.format(percentile, np.round(threshold, 2)))\n", 186 | "ax1.set_title('Distribution of Elliptic Envelope decision function values');\n", 187 | "ax1.legend(loc='best')\n", 188 | "\n", 189 | "# Right plot\n", 190 | "# Plot the observations\n", 191 | "ax2.scatter(X1[:,0], X1[:,1], c='b', marker='x')\n", 192 | "# Plot outliers\n", 193 | "ax2.scatter(X1[outliers][:,0], X1[outliers][:,1], c='r', marker='x', linewidths=2)\n", 194 | "# Plot decision boundary based on threshold\n", 195 | "ax2.contour(xx, yy, Z, levels=[threshold], linewidths=2, colors='red', linestyles='dotted')\n", 196 | "ax2.set_title(\"Outlier detection\")\n", 197 | "ax2.set_xlabel('Latency (ms)')\n", 198 | "ax2.set_ylabel('Throughput (mb/s)');" 199 | ] 200 | }, 201 | { 202 | "cell_type": "markdown", 203 | "metadata": { 204 | "collapsed": true 205 | }, 206 | "source": [ 207 | "### Recommender Systems" 208 | ] 209 | }, 210 | { 211 | "cell_type": "code", 212 | "execution_count": 7, 213 | "metadata": { 214 | "collapsed": false 215 | }, 216 | "outputs": [ 217 | { 218 | "data": { 219 | "text/plain": [ 220 | "dict_keys(['__header__', '__globals__', 'R', 'Y', '__version__'])" 221 | ] 222 | }, 223 | "execution_count": 7, 224 | "metadata": {}, 225 | "output_type": "execute_result" 226 | } 227 | ], 228 | "source": [ 229 | "data2 = loadmat('data/ex8_movies.mat')\n", 230 | "data2.keys()" 231 | ] 232 | }, 233 | { 234 | "cell_type": "code", 235 | "execution_count": 8, 236 | "metadata": { 237 | "collapsed": false 238 | }, 239 | "outputs": [ 240 | { 241 | "name": "stdout", 242 | "output_type": "stream", 243 | "text": [ 244 | "Y: (1682, 943)\n", 245 | "R: (1682, 943)\n" 246 | ] 247 | } 248 | ], 249 | "source": [ 250 | "Y = data2['Y']\n", 251 | "R = data2['R']\n", 252 | "print('Y:', Y.shape)\n", 253 | "print('R:', R.shape)" 254 | ] 255 | }, 256 | { 257 | "cell_type": "code", 258 | "execution_count": 9, 259 | "metadata": { 260 | "collapsed": false 261 | }, 262 | "outputs": [ 263 | { 264 | "data": { 265 | "text/plain": [ 266 | "array([[5, 4, 0, ..., 5, 0, 0],\n", 267 | " [3, 0, 0, ..., 0, 0, 5],\n", 268 | " [4, 0, 0, ..., 0, 0, 0],\n", 269 | " ..., \n", 270 | " [0, 0, 0, ..., 0, 0, 0],\n", 271 | " [0, 0, 0, ..., 0, 0, 0],\n", 272 | " [0, 0, 0, ..., 0, 0, 0]], dtype=uint8)" 273 | ] 274 | }, 275 | "execution_count": 9, 276 | "metadata": {}, 277 | "output_type": "execute_result" 278 | } 279 | ], 280 | "source": [ 281 | "Y" 282 | ] 283 | }, 284 | { 285 | "cell_type": "code", 286 | "execution_count": 10, 287 | "metadata": { 288 | "collapsed": false 289 | }, 290 | "outputs": [ 291 | { 292 | "data": { 293 | "text/plain": [ 294 | "array([[1, 1, 0, ..., 1, 0, 0],\n", 295 | " [1, 0, 0, ..., 0, 0, 1],\n", 296 | " [1, 0, 0, ..., 0, 0, 0],\n", 297 | " ..., \n", 298 | " [0, 0, 0, ..., 0, 0, 0],\n", 299 | " [0, 0, 0, ..., 0, 0, 0],\n", 300 | " [0, 0, 0, ..., 0, 0, 0]], dtype=uint8)" 301 | ] 302 | }, 303 | "execution_count": 10, 304 | "metadata": {}, 305 | "output_type": "execute_result" 306 | } 307 | ], 308 | "source": [ 309 | "R" 310 | ] 311 | }, 312 | { 313 | "cell_type": "code", 314 | "execution_count": 11, 315 | "metadata": { 316 | "collapsed": false 317 | }, 318 | "outputs": [ 319 | { 320 | "data": { 321 | "image/png": "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\n", 322 | "text/plain": [ 323 | "" 324 | ] 325 | }, 326 | "metadata": {}, 327 | "output_type": "display_data" 328 | } 329 | ], 330 | "source": [ 331 | "sns.heatmap(Y, yticklabels=False, xticklabels=False);" 332 | ] 333 | } 334 | ], 335 | "metadata": { 336 | "kernelspec": { 337 | "display_name": "Python 3", 338 | "language": "python", 339 | "name": "python3" 340 | }, 341 | "language_info": { 342 | "codemirror_mode": { 343 | "name": "ipython", 344 | "version": 3 345 | }, 346 | "file_extension": ".py", 347 | "mimetype": "text/x-python", 348 | "name": "python", 349 | "nbconvert_exporter": "python", 350 | "pygments_lexer": "ipython3", 351 | "version": "3.5.1" 352 | } 353 | }, 354 | "nbformat": 4, 355 | "nbformat_minor": 0 356 | } 357 | -------------------------------------------------------------------------------- /notebooks/data/bird_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/bird_small.png -------------------------------------------------------------------------------- /notebooks/data/ex1data1.txt: -------------------------------------------------------------------------------- 1 | 6.1101,17.592 2 | 5.5277,9.1302 3 | 8.5186,13.662 4 | 7.0032,11.854 5 | 5.8598,6.8233 6 | 8.3829,11.886 7 | 7.4764,4.3483 8 | 8.5781,12 9 | 6.4862,6.5987 10 | 5.0546,3.8166 11 | 5.7107,3.2522 12 | 14.164,15.505 13 | 5.734,3.1551 14 | 8.4084,7.2258 15 | 5.6407,0.71618 16 | 5.3794,3.5129 17 | 6.3654,5.3048 18 | 5.1301,0.56077 19 | 6.4296,3.6518 20 | 7.0708,5.3893 21 | 6.1891,3.1386 22 | 20.27,21.767 23 | 5.4901,4.263 24 | 6.3261,5.1875 25 | 5.5649,3.0825 26 | 18.945,22.638 27 | 12.828,13.501 28 | 10.957,7.0467 29 | 13.176,14.692 30 | 22.203,24.147 31 | 5.2524,-1.22 32 | 6.5894,5.9966 33 | 9.2482,12.134 34 | 5.8918,1.8495 35 | 8.2111,6.5426 36 | 7.9334,4.5623 37 | 8.0959,4.1164 38 | 5.6063,3.3928 39 | 12.836,10.117 40 | 6.3534,5.4974 41 | 5.4069,0.55657 42 | 6.8825,3.9115 43 | 11.708,5.3854 44 | 5.7737,2.4406 45 | 7.8247,6.7318 46 | 7.0931,1.0463 47 | 5.0702,5.1337 48 | 5.8014,1.844 49 | 11.7,8.0043 50 | 5.5416,1.0179 51 | 7.5402,6.7504 52 | 5.3077,1.8396 53 | 7.4239,4.2885 54 | 7.6031,4.9981 55 | 6.3328,1.4233 56 | 6.3589,-1.4211 57 | 6.2742,2.4756 58 | 5.6397,4.6042 59 | 9.3102,3.9624 60 | 9.4536,5.4141 61 | 8.8254,5.1694 62 | 5.1793,-0.74279 63 | 21.279,17.929 64 | 14.908,12.054 65 | 18.959,17.054 66 | 7.2182,4.8852 67 | 8.2951,5.7442 68 | 10.236,7.7754 69 | 5.4994,1.0173 70 | 20.341,20.992 71 | 10.136,6.6799 72 | 7.3345,4.0259 73 | 6.0062,1.2784 74 | 7.2259,3.3411 75 | 5.0269,-2.6807 76 | 6.5479,0.29678 77 | 7.5386,3.8845 78 | 5.0365,5.7014 79 | 10.274,6.7526 80 | 5.1077,2.0576 81 | 5.7292,0.47953 82 | 5.1884,0.20421 83 | 6.3557,0.67861 84 | 9.7687,7.5435 85 | 6.5159,5.3436 86 | 8.5172,4.2415 87 | 9.1802,6.7981 88 | 6.002,0.92695 89 | 5.5204,0.152 90 | 5.0594,2.8214 91 | 5.7077,1.8451 92 | 7.6366,4.2959 93 | 5.8707,7.2029 94 | 5.3054,1.9869 95 | 8.2934,0.14454 96 | 13.394,9.0551 97 | 5.4369,0.61705 98 | -------------------------------------------------------------------------------- /notebooks/data/ex2data1.txt: -------------------------------------------------------------------------------- 1 | 34.62365962451697,78.0246928153624,0 2 | 30.28671076822607,43.89499752400101,0 3 | 35.84740876993872,72.90219802708364,0 4 | 60.18259938620976,86.30855209546826,1 5 | 79.0327360507101,75.3443764369103,1 6 | 45.08327747668339,56.3163717815305,0 7 | 61.10666453684766,96.51142588489624,1 8 | 75.02474556738889,46.55401354116538,1 9 | 76.09878670226257,87.42056971926803,1 10 | 84.43281996120035,43.53339331072109,1 11 | 95.86155507093572,38.22527805795094,0 12 | 75.01365838958247,30.60326323428011,0 13 | 82.30705337399482,76.48196330235604,1 14 | 69.36458875970939,97.71869196188608,1 15 | 39.53833914367223,76.03681085115882,0 16 | 53.9710521485623,89.20735013750205,1 17 | 69.07014406283025,52.74046973016765,1 18 | 67.94685547711617,46.67857410673128,0 19 | 70.66150955499435,92.92713789364831,1 20 | 76.97878372747498,47.57596364975532,1 21 | 67.37202754570876,42.83843832029179,0 22 | 89.67677575072079,65.79936592745237,1 23 | 50.534788289883,48.85581152764205,0 24 | 34.21206097786789,44.20952859866288,0 25 | 77.9240914545704,68.9723599933059,1 26 | 62.27101367004632,69.95445795447587,1 27 | 80.1901807509566,44.82162893218353,1 28 | 93.114388797442,38.80067033713209,0 29 | 61.83020602312595,50.25610789244621,0 30 | 38.78580379679423,64.99568095539578,0 31 | 61.379289447425,72.80788731317097,1 32 | 85.40451939411645,57.05198397627122,1 33 | 52.10797973193984,63.12762376881715,0 34 | 52.04540476831827,69.43286012045222,1 35 | 40.23689373545111,71.16774802184875,0 36 | 54.63510555424817,52.21388588061123,0 37 | 33.91550010906887,98.86943574220611,0 38 | 64.17698887494485,80.90806058670817,1 39 | 74.78925295941542,41.57341522824434,0 40 | 34.1836400264419,75.2377203360134,0 41 | 83.90239366249155,56.30804621605327,1 42 | 51.54772026906181,46.85629026349976,0 43 | 94.44336776917852,65.56892160559052,1 44 | 82.36875375713919,40.61825515970618,0 45 | 51.04775177128865,45.82270145776001,0 46 | 62.22267576120188,52.06099194836679,0 47 | 77.19303492601364,70.45820000180959,1 48 | 97.77159928000232,86.7278223300282,1 49 | 62.07306379667647,96.76882412413983,1 50 | 91.56497449807442,88.69629254546599,1 51 | 79.94481794066932,74.16311935043758,1 52 | 99.2725269292572,60.99903099844988,1 53 | 90.54671411399852,43.39060180650027,1 54 | 34.52451385320009,60.39634245837173,0 55 | 50.2864961189907,49.80453881323059,0 56 | 49.58667721632031,59.80895099453265,0 57 | 97.64563396007767,68.86157272420604,1 58 | 32.57720016809309,95.59854761387875,0 59 | 74.24869136721598,69.82457122657193,1 60 | 71.79646205863379,78.45356224515052,1 61 | 75.3956114656803,85.75993667331619,1 62 | 35.28611281526193,47.02051394723416,0 63 | 56.25381749711624,39.26147251058019,0 64 | 30.05882244669796,49.59297386723685,0 65 | 44.66826172480893,66.45008614558913,0 66 | 66.56089447242954,41.09209807936973,0 67 | 40.45755098375164,97.53518548909936,1 68 | 49.07256321908844,51.88321182073966,0 69 | 80.27957401466998,92.11606081344084,1 70 | 66.74671856944039,60.99139402740988,1 71 | 32.72283304060323,43.30717306430063,0 72 | 64.0393204150601,78.03168802018232,1 73 | 72.34649422579923,96.22759296761404,1 74 | 60.45788573918959,73.09499809758037,1 75 | 58.84095621726802,75.85844831279042,1 76 | 99.82785779692128,72.36925193383885,1 77 | 47.26426910848174,88.47586499559782,1 78 | 50.45815980285988,75.80985952982456,1 79 | 60.45555629271532,42.50840943572217,0 80 | 82.22666157785568,42.71987853716458,0 81 | 88.9138964166533,69.80378889835472,1 82 | 94.83450672430196,45.69430680250754,1 83 | 67.31925746917527,66.58935317747915,1 84 | 57.23870631569862,59.51428198012956,1 85 | 80.36675600171273,90.96014789746954,1 86 | 68.46852178591112,85.59430710452014,1 87 | 42.0754545384731,78.84478600148043,0 88 | 75.47770200533905,90.42453899753964,1 89 | 78.63542434898018,96.64742716885644,1 90 | 52.34800398794107,60.76950525602592,0 91 | 94.09433112516793,77.15910509073893,1 92 | 90.44855097096364,87.50879176484702,1 93 | 55.48216114069585,35.57070347228866,0 94 | 74.49269241843041,84.84513684930135,1 95 | 89.84580670720979,45.35828361091658,1 96 | 83.48916274498238,48.38028579728175,1 97 | 42.2617008099817,87.10385094025457,1 98 | 99.31500880510394,68.77540947206617,1 99 | 55.34001756003703,64.9319380069486,1 100 | 74.77589300092767,89.52981289513276,1 101 | -------------------------------------------------------------------------------- /notebooks/data/ex2data2.txt: -------------------------------------------------------------------------------- 1 | 0.051267,0.69956,1 2 | -0.092742,0.68494,1 3 | -0.21371,0.69225,1 4 | -0.375,0.50219,1 5 | -0.51325,0.46564,1 6 | -0.52477,0.2098,1 7 | -0.39804,0.034357,1 8 | -0.30588,-0.19225,1 9 | 0.016705,-0.40424,1 10 | 0.13191,-0.51389,1 11 | 0.38537,-0.56506,1 12 | 0.52938,-0.5212,1 13 | 0.63882,-0.24342,1 14 | 0.73675,-0.18494,1 15 | 0.54666,0.48757,1 16 | 0.322,0.5826,1 17 | 0.16647,0.53874,1 18 | -0.046659,0.81652,1 19 | -0.17339,0.69956,1 20 | -0.47869,0.63377,1 21 | -0.60541,0.59722,1 22 | -0.62846,0.33406,1 23 | -0.59389,0.005117,1 24 | -0.42108,-0.27266,1 25 | -0.11578,-0.39693,1 26 | 0.20104,-0.60161,1 27 | 0.46601,-0.53582,1 28 | 0.67339,-0.53582,1 29 | -0.13882,0.54605,1 30 | -0.29435,0.77997,1 31 | -0.26555,0.96272,1 32 | -0.16187,0.8019,1 33 | -0.17339,0.64839,1 34 | -0.28283,0.47295,1 35 | -0.36348,0.31213,1 36 | -0.30012,0.027047,1 37 | -0.23675,-0.21418,1 38 | -0.06394,-0.18494,1 39 | 0.062788,-0.16301,1 40 | 0.22984,-0.41155,1 41 | 0.2932,-0.2288,1 42 | 0.48329,-0.18494,1 43 | 0.64459,-0.14108,1 44 | 0.46025,0.012427,1 45 | 0.6273,0.15863,1 46 | 0.57546,0.26827,1 47 | 0.72523,0.44371,1 48 | 0.22408,0.52412,1 49 | 0.44297,0.67032,1 50 | 0.322,0.69225,1 51 | 0.13767,0.57529,1 52 | -0.0063364,0.39985,1 53 | -0.092742,0.55336,1 54 | -0.20795,0.35599,1 55 | -0.20795,0.17325,1 56 | -0.43836,0.21711,1 57 | -0.21947,-0.016813,1 58 | -0.13882,-0.27266,1 59 | 0.18376,0.93348,0 60 | 0.22408,0.77997,0 61 | 0.29896,0.61915,0 62 | 0.50634,0.75804,0 63 | 0.61578,0.7288,0 64 | 0.60426,0.59722,0 65 | 0.76555,0.50219,0 66 | 0.92684,0.3633,0 67 | 0.82316,0.27558,0 68 | 0.96141,0.085526,0 69 | 0.93836,0.012427,0 70 | 0.86348,-0.082602,0 71 | 0.89804,-0.20687,0 72 | 0.85196,-0.36769,0 73 | 0.82892,-0.5212,0 74 | 0.79435,-0.55775,0 75 | 0.59274,-0.7405,0 76 | 0.51786,-0.5943,0 77 | 0.46601,-0.41886,0 78 | 0.35081,-0.57968,0 79 | 0.28744,-0.76974,0 80 | 0.085829,-0.75512,0 81 | 0.14919,-0.57968,0 82 | -0.13306,-0.4481,0 83 | -0.40956,-0.41155,0 84 | -0.39228,-0.25804,0 85 | -0.74366,-0.25804,0 86 | -0.69758,0.041667,0 87 | -0.75518,0.2902,0 88 | -0.69758,0.68494,0 89 | -0.4038,0.70687,0 90 | -0.38076,0.91886,0 91 | -0.50749,0.90424,0 92 | -0.54781,0.70687,0 93 | 0.10311,0.77997,0 94 | 0.057028,0.91886,0 95 | -0.10426,0.99196,0 96 | -0.081221,1.1089,0 97 | 0.28744,1.087,0 98 | 0.39689,0.82383,0 99 | 0.63882,0.88962,0 100 | 0.82316,0.66301,0 101 | 0.67339,0.64108,0 102 | 1.0709,0.10015,0 103 | -0.046659,-0.57968,0 104 | -0.23675,-0.63816,0 105 | -0.15035,-0.36769,0 106 | -0.49021,-0.3019,0 107 | -0.46717,-0.13377,0 108 | -0.28859,-0.060673,0 109 | -0.61118,-0.067982,0 110 | -0.66302,-0.21418,0 111 | -0.59965,-0.41886,0 112 | -0.72638,-0.082602,0 113 | -0.83007,0.31213,0 114 | -0.72062,0.53874,0 115 | -0.59389,0.49488,0 116 | -0.48445,0.99927,0 117 | -0.0063364,0.99927,0 118 | 0.63265,-0.030612,0 119 | -------------------------------------------------------------------------------- /notebooks/data/ex3data1.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex3data1.mat -------------------------------------------------------------------------------- /notebooks/data/ex3weights.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex3weights.mat -------------------------------------------------------------------------------- /notebooks/data/ex4data1.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex4data1.mat -------------------------------------------------------------------------------- /notebooks/data/ex4weights.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex4weights.mat -------------------------------------------------------------------------------- /notebooks/data/ex5data1.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex5data1.mat -------------------------------------------------------------------------------- /notebooks/data/ex6data1.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex6data1.mat -------------------------------------------------------------------------------- /notebooks/data/ex6data2.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex6data2.mat -------------------------------------------------------------------------------- /notebooks/data/ex6data3.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex6data3.mat -------------------------------------------------------------------------------- /notebooks/data/ex7data1.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex7data1.mat -------------------------------------------------------------------------------- /notebooks/data/ex7data2.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex7data2.mat -------------------------------------------------------------------------------- /notebooks/data/ex7faces.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex7faces.mat -------------------------------------------------------------------------------- /notebooks/data/ex8_movies.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex8_movies.mat -------------------------------------------------------------------------------- /notebooks/data/ex8data1.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex8data1.mat -------------------------------------------------------------------------------- /notebooks/data/ex8data2.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JWarmenhoven/Coursera-Machine-Learning/beadaa9497ec6f7bd10b968ee7ab08fd56e2d1e5/notebooks/data/ex8data2.mat -------------------------------------------------------------------------------- /notebooks/data/vocab.txt: -------------------------------------------------------------------------------- 1 | 1 aa 2 | 2 ab 3 | 3 abil 4 | 4 abl 5 | 5 about 6 | 6 abov 7 | 7 absolut 8 | 8 abus 9 | 9 ac 10 | 10 accept 11 | 11 access 12 | 12 accord 13 | 13 account 14 | 14 achiev 15 | 15 acquir 16 | 16 across 17 | 17 act 18 | 18 action 19 | 19 activ 20 | 20 actual 21 | 21 ad 22 | 22 adam 23 | 23 add 24 | 24 addit 25 | 25 address 26 | 26 administr 27 | 27 adult 28 | 28 advanc 29 | 29 advantag 30 | 30 advertis 31 | 31 advic 32 | 32 advis 33 | 33 ae 34 | 34 af 35 | 35 affect 36 | 36 affili 37 | 37 afford 38 | 38 africa 39 | 39 after 40 | 40 ag 41 | 41 again 42 | 42 against 43 | 43 agenc 44 | 44 agent 45 | 45 ago 46 | 46 agre 47 | 47 agreement 48 | 48 aid 49 | 49 air 50 | 50 al 51 | 51 alb 52 | 52 align 53 | 53 all 54 | 54 allow 55 | 55 almost 56 | 56 alon 57 | 57 along 58 | 58 alreadi 59 | 59 alsa 60 | 60 also 61 | 61 altern 62 | 62 although 63 | 63 alwai 64 | 64 am 65 | 65 amaz 66 | 66 america 67 | 67 american 68 | 68 among 69 | 69 amount 70 | 70 amp 71 | 71 an 72 | 72 analysi 73 | 73 analyst 74 | 74 and 75 | 75 ani 76 | 76 anim 77 | 77 announc 78 | 78 annual 79 | 79 annuiti 80 | 80 anoth 81 | 81 answer 82 | 82 anti 83 | 83 anumb 84 | 84 anybodi 85 | 85 anymor 86 | 86 anyon 87 | 87 anyth 88 | 88 anywai 89 | 89 anywher 90 | 90 aol 91 | 91 ap 92 | 92 apolog 93 | 93 app 94 | 94 appar 95 | 95 appear 96 | 96 appl 97 | 97 appli 98 | 98 applic 99 | 99 appreci 100 | 100 approach 101 | 101 approv 102 | 102 apt 103 | 103 ar 104 | 104 archiv 105 | 105 area 106 | 106 aren 107 | 107 argument 108 | 108 arial 109 | 109 arm 110 | 110 around 111 | 111 arrai 112 | 112 arriv 113 | 113 art 114 | 114 articl 115 | 115 artist 116 | 116 as 117 | 117 ascii 118 | 118 ask 119 | 119 asset 120 | 120 assist 121 | 121 associ 122 | 122 assum 123 | 123 assur 124 | 124 at 125 | 125 atol 126 | 126 attach 127 | 127 attack 128 | 128 attempt 129 | 129 attent 130 | 130 attornei 131 | 131 attract 132 | 132 audio 133 | 133 aug 134 | 134 august 135 | 135 author 136 | 136 auto 137 | 137 autom 138 | 138 automat 139 | 139 avail 140 | 140 averag 141 | 141 avoid 142 | 142 awai 143 | 143 awar 144 | 144 award 145 | 145 ba 146 | 146 babi 147 | 147 back 148 | 148 background 149 | 149 backup 150 | 150 bad 151 | 151 balanc 152 | 152 ban 153 | 153 bank 154 | 154 bar 155 | 155 base 156 | 156 basenumb 157 | 157 basi 158 | 158 basic 159 | 159 bb 160 | 160 bc 161 | 161 bd 162 | 162 be 163 | 163 beat 164 | 164 beberg 165 | 165 becaus 166 | 166 becom 167 | 167 been 168 | 168 befor 169 | 169 begin 170 | 170 behalf 171 | 171 behavior 172 | 172 behind 173 | 173 believ 174 | 174 below 175 | 175 benefit 176 | 176 best 177 | 177 beta 178 | 178 better 179 | 179 between 180 | 180 bf 181 | 181 big 182 | 182 bill 183 | 183 billion 184 | 184 bin 185 | 185 binari 186 | 186 bit 187 | 187 black 188 | 188 blank 189 | 189 block 190 | 190 blog 191 | 191 blood 192 | 192 blue 193 | 193 bnumber 194 | 194 board 195 | 195 bodi 196 | 196 boi 197 | 197 bonu 198 | 198 book 199 | 199 boot 200 | 200 border 201 | 201 boss 202 | 202 boston 203 | 203 botan 204 | 204 both 205 | 205 bottl 206 | 206 bottom 207 | 207 boundari 208 | 208 box 209 | 209 brain 210 | 210 brand 211 | 211 break 212 | 212 brian 213 | 213 bring 214 | 214 broadcast 215 | 215 broker 216 | 216 browser 217 | 217 bug 218 | 218 bui 219 | 219 build 220 | 220 built 221 | 221 bulk 222 | 222 burn 223 | 223 bush 224 | 224 busi 225 | 225 but 226 | 226 button 227 | 227 by 228 | 228 byte 229 | 229 ca 230 | 230 cabl 231 | 231 cach 232 | 232 calcul 233 | 233 california 234 | 234 call 235 | 235 came 236 | 236 camera 237 | 237 campaign 238 | 238 can 239 | 239 canada 240 | 240 cannot 241 | 241 canon 242 | 242 capabl 243 | 243 capillari 244 | 244 capit 245 | 245 car 246 | 246 card 247 | 247 care 248 | 248 career 249 | 249 carri 250 | 250 cartridg 251 | 251 case 252 | 252 cash 253 | 253 cat 254 | 254 catch 255 | 255 categori 256 | 256 caus 257 | 257 cb 258 | 258 cc 259 | 259 cd 260 | 260 ce 261 | 261 cell 262 | 262 cent 263 | 263 center 264 | 264 central 265 | 265 centuri 266 | 266 ceo 267 | 267 certain 268 | 268 certainli 269 | 269 cf 270 | 270 challeng 271 | 271 chanc 272 | 272 chang 273 | 273 channel 274 | 274 char 275 | 275 charact 276 | 276 charg 277 | 277 charset 278 | 278 chat 279 | 279 cheap 280 | 280 check 281 | 281 cheer 282 | 282 chief 283 | 283 children 284 | 284 china 285 | 285 chip 286 | 286 choic 287 | 287 choos 288 | 288 chri 289 | 289 citi 290 | 290 citizen 291 | 291 civil 292 | 292 claim 293 | 293 class 294 | 294 classifi 295 | 295 clean 296 | 296 clear 297 | 297 clearli 298 | 298 click 299 | 299 client 300 | 300 close 301 | 301 clue 302 | 302 cnet 303 | 303 cnumber 304 | 304 co 305 | 305 code 306 | 306 collect 307 | 307 colleg 308 | 308 color 309 | 309 com 310 | 310 combin 311 | 311 come 312 | 312 comfort 313 | 313 command 314 | 314 comment 315 | 315 commentari 316 | 316 commerci 317 | 317 commiss 318 | 318 commit 319 | 319 common 320 | 320 commun 321 | 321 compani 322 | 322 compar 323 | 323 comparison 324 | 324 compat 325 | 325 compet 326 | 326 competit 327 | 327 compil 328 | 328 complet 329 | 329 comprehens 330 | 330 comput 331 | 331 concentr 332 | 332 concept 333 | 333 concern 334 | 334 condit 335 | 335 conf 336 | 336 confer 337 | 337 confid 338 | 338 confidenti 339 | 339 config 340 | 340 configur 341 | 341 confirm 342 | 342 conflict 343 | 343 confus 344 | 344 congress 345 | 345 connect 346 | 346 consid 347 | 347 consolid 348 | 348 constitut 349 | 349 construct 350 | 350 consult 351 | 351 consum 352 | 352 contact 353 | 353 contain 354 | 354 content 355 | 355 continu 356 | 356 contract 357 | 357 contribut 358 | 358 control 359 | 359 conveni 360 | 360 convers 361 | 361 convert 362 | 362 cool 363 | 363 cooper 364 | 364 copi 365 | 365 copyright 366 | 366 core 367 | 367 corpor 368 | 368 correct 369 | 369 correspond 370 | 370 cost 371 | 371 could 372 | 372 couldn 373 | 373 count 374 | 374 countri 375 | 375 coupl 376 | 376 cours 377 | 377 court 378 | 378 cover 379 | 379 coverag 380 | 380 crash 381 | 381 creat 382 | 382 creativ 383 | 383 credit 384 | 384 critic 385 | 385 cross 386 | 386 cultur 387 | 387 current 388 | 388 custom 389 | 389 cut 390 | 390 cv 391 | 391 da 392 | 392 dagga 393 | 393 dai 394 | 394 daili 395 | 395 dan 396 | 396 danger 397 | 397 dark 398 | 398 data 399 | 399 databas 400 | 400 datapow 401 | 401 date 402 | 402 dave 403 | 403 david 404 | 404 dc 405 | 405 de 406 | 406 dead 407 | 407 deal 408 | 408 dear 409 | 409 death 410 | 410 debt 411 | 411 decad 412 | 412 decid 413 | 413 decis 414 | 414 declar 415 | 415 declin 416 | 416 decor 417 | 417 default 418 | 418 defend 419 | 419 defens 420 | 420 defin 421 | 421 definit 422 | 422 degre 423 | 423 delai 424 | 424 delet 425 | 425 deliv 426 | 426 deliveri 427 | 427 dell 428 | 428 demand 429 | 429 democrat 430 | 430 depart 431 | 431 depend 432 | 432 deposit 433 | 433 describ 434 | 434 descript 435 | 435 deserv 436 | 436 design 437 | 437 desir 438 | 438 desktop 439 | 439 despit 440 | 440 detail 441 | 441 detect 442 | 442 determin 443 | 443 dev 444 | 444 devel 445 | 445 develop 446 | 446 devic 447 | 447 di 448 | 448 dial 449 | 449 did 450 | 450 didn 451 | 451 diet 452 | 452 differ 453 | 453 difficult 454 | 454 digit 455 | 455 direct 456 | 456 directli 457 | 457 director 458 | 458 directori 459 | 459 disabl 460 | 460 discount 461 | 461 discov 462 | 462 discoveri 463 | 463 discuss 464 | 464 disk 465 | 465 displai 466 | 466 disposit 467 | 467 distanc 468 | 468 distribut 469 | 469 dn 470 | 470 dnumber 471 | 471 do 472 | 472 doc 473 | 473 document 474 | 474 doe 475 | 475 doer 476 | 476 doesn 477 | 477 dollar 478 | 478 dollarac 479 | 479 dollarnumb 480 | 480 domain 481 | 481 don 482 | 482 done 483 | 483 dont 484 | 484 doubl 485 | 485 doubt 486 | 486 down 487 | 487 download 488 | 488 dr 489 | 489 draw 490 | 490 dream 491 | 491 drive 492 | 492 driver 493 | 493 drop 494 | 494 drug 495 | 495 due 496 | 496 dure 497 | 497 dvd 498 | 498 dw 499 | 499 dynam 500 | 500 ea 501 | 501 each 502 | 502 earli 503 | 503 earlier 504 | 504 earn 505 | 505 earth 506 | 506 easi 507 | 507 easier 508 | 508 easili 509 | 509 eat 510 | 510 eb 511 | 511 ebai 512 | 512 ec 513 | 513 echo 514 | 514 econom 515 | 515 economi 516 | 516 ed 517 | 517 edg 518 | 518 edit 519 | 519 editor 520 | 520 educ 521 | 521 eff 522 | 522 effect 523 | 523 effici 524 | 524 effort 525 | 525 either 526 | 526 el 527 | 527 electron 528 | 528 elimin 529 | 529 els 530 | 530 email 531 | 531 emailaddr 532 | 532 emerg 533 | 533 empir 534 | 534 employ 535 | 535 employe 536 | 536 en 537 | 537 enabl 538 | 538 encod 539 | 539 encourag 540 | 540 end 541 | 541 enemi 542 | 542 enenkio 543 | 543 energi 544 | 544 engin 545 | 545 english 546 | 546 enhanc 547 | 547 enjoi 548 | 548 enough 549 | 549 ensur 550 | 550 enter 551 | 551 enterpris 552 | 552 entertain 553 | 553 entir 554 | 554 entri 555 | 555 enumb 556 | 556 environ 557 | 557 equal 558 | 558 equip 559 | 559 equival 560 | 560 error 561 | 561 especi 562 | 562 essenti 563 | 563 establish 564 | 564 estat 565 | 565 estim 566 | 566 et 567 | 567 etc 568 | 568 euro 569 | 569 europ 570 | 570 european 571 | 571 even 572 | 572 event 573 | 573 eventu 574 | 574 ever 575 | 575 everi 576 | 576 everyon 577 | 577 everyth 578 | 578 evid 579 | 579 evil 580 | 580 exactli 581 | 581 exampl 582 | 582 excel 583 | 583 except 584 | 584 exchang 585 | 585 excit 586 | 586 exclus 587 | 587 execut 588 | 588 exercis 589 | 589 exist 590 | 590 exmh 591 | 591 expand 592 | 592 expect 593 | 593 expens 594 | 594 experi 595 | 595 expert 596 | 596 expir 597 | 597 explain 598 | 598 explor 599 | 599 express 600 | 600 extend 601 | 601 extens 602 | 602 extra 603 | 603 extract 604 | 604 extrem 605 | 605 ey 606 | 606 fa 607 | 607 face 608 | 608 fact 609 | 609 factor 610 | 610 fail 611 | 611 fair 612 | 612 fall 613 | 613 fals 614 | 614 famili 615 | 615 faq 616 | 616 far 617 | 617 fast 618 | 618 faster 619 | 619 fastest 620 | 620 fat 621 | 621 father 622 | 622 favorit 623 | 623 fax 624 | 624 fb 625 | 625 fd 626 | 626 featur 627 | 627 feder 628 | 628 fee 629 | 629 feed 630 | 630 feedback 631 | 631 feel 632 | 632 femal 633 | 633 few 634 | 634 ffffff 635 | 635 ffnumber 636 | 636 field 637 | 637 fight 638 | 638 figur 639 | 639 file 640 | 640 fill 641 | 641 film 642 | 642 filter 643 | 643 final 644 | 644 financ 645 | 645 financi 646 | 646 find 647 | 647 fine 648 | 648 finish 649 | 649 fire 650 | 650 firewal 651 | 651 firm 652 | 652 first 653 | 653 fit 654 | 654 five 655 | 655 fix 656 | 656 flag 657 | 657 flash 658 | 658 flow 659 | 659 fnumber 660 | 660 focu 661 | 661 folder 662 | 662 folk 663 | 663 follow 664 | 664 font 665 | 665 food 666 | 666 for 667 | 667 forc 668 | 668 foreign 669 | 669 forev 670 | 670 forget 671 | 671 fork 672 | 672 form 673 | 673 format 674 | 674 former 675 | 675 fortun 676 | 676 forward 677 | 677 found 678 | 678 foundat 679 | 679 four 680 | 680 franc 681 | 681 free 682 | 682 freedom 683 | 683 french 684 | 684 freshrpm 685 | 685 fri 686 | 686 fridai 687 | 687 friend 688 | 688 from 689 | 689 front 690 | 690 ftoc 691 | 691 ftp 692 | 692 full 693 | 693 fulli 694 | 694 fun 695 | 695 function 696 | 696 fund 697 | 697 further 698 | 698 futur 699 | 699 ga 700 | 700 gain 701 | 701 game 702 | 702 gari 703 | 703 garrigu 704 | 704 gave 705 | 705 gcc 706 | 706 geek 707 | 707 gener 708 | 708 get 709 | 709 gif 710 | 710 gift 711 | 711 girl 712 | 712 give 713 | 713 given 714 | 714 global 715 | 715 gnome 716 | 716 gnu 717 | 717 gnupg 718 | 718 go 719 | 719 goal 720 | 720 god 721 | 721 goe 722 | 722 gold 723 | 723 gone 724 | 724 good 725 | 725 googl 726 | 726 got 727 | 727 govern 728 | 728 gpl 729 | 729 grand 730 | 730 grant 731 | 731 graphic 732 | 732 great 733 | 733 greater 734 | 734 ground 735 | 735 group 736 | 736 grow 737 | 737 growth 738 | 738 gt 739 | 739 guarante 740 | 740 guess 741 | 741 gui 742 | 742 guid 743 | 743 ha 744 | 744 hack 745 | 745 had 746 | 746 half 747 | 747 ham 748 | 748 hand 749 | 749 handl 750 | 750 happen 751 | 751 happi 752 | 752 hard 753 | 753 hardwar 754 | 754 hat 755 | 755 hate 756 | 756 have 757 | 757 haven 758 | 758 he 759 | 759 head 760 | 760 header 761 | 761 headlin 762 | 762 health 763 | 763 hear 764 | 764 heard 765 | 765 heart 766 | 766 heaven 767 | 767 hei 768 | 768 height 769 | 769 held 770 | 770 hello 771 | 771 help 772 | 772 helvetica 773 | 773 her 774 | 774 herba 775 | 775 here 776 | 776 hermio 777 | 777 hettinga 778 | 778 hi 779 | 779 high 780 | 780 higher 781 | 781 highli 782 | 782 highlight 783 | 783 him 784 | 784 histori 785 | 785 hit 786 | 786 hold 787 | 787 home 788 | 788 honor 789 | 789 hope 790 | 790 host 791 | 791 hot 792 | 792 hour 793 | 793 hous 794 | 794 how 795 | 795 howev 796 | 796 hp 797 | 797 html 798 | 798 http 799 | 799 httpaddr 800 | 800 huge 801 | 801 human 802 | 802 hundr 803 | 803 ibm 804 | 804 id 805 | 805 idea 806 | 806 ident 807 | 807 identifi 808 | 808 idnumb 809 | 809 ie 810 | 810 if 811 | 811 ignor 812 | 812 ii 813 | 813 iii 814 | 814 iiiiiiihnumberjnumberhnumberjnumberhnumb 815 | 815 illeg 816 | 816 im 817 | 817 imag 818 | 818 imagin 819 | 819 immedi 820 | 820 impact 821 | 821 implement 822 | 822 import 823 | 823 impress 824 | 824 improv 825 | 825 in 826 | 826 inc 827 | 827 includ 828 | 828 incom 829 | 829 increas 830 | 830 incred 831 | 831 inde 832 | 832 independ 833 | 833 index 834 | 834 india 835 | 835 indian 836 | 836 indic 837 | 837 individu 838 | 838 industri 839 | 839 info 840 | 840 inform 841 | 841 initi 842 | 842 inlin 843 | 843 innov 844 | 844 input 845 | 845 insert 846 | 846 insid 847 | 847 instal 848 | 848 instanc 849 | 849 instant 850 | 850 instead 851 | 851 institut 852 | 852 instruct 853 | 853 insur 854 | 854 int 855 | 855 integr 856 | 856 intel 857 | 857 intellig 858 | 858 intend 859 | 859 interact 860 | 860 interest 861 | 861 interfac 862 | 862 intern 863 | 863 internet 864 | 864 interview 865 | 865 into 866 | 866 intro 867 | 867 introduc 868 | 868 inumb 869 | 869 invest 870 | 870 investig 871 | 871 investor 872 | 872 invok 873 | 873 involv 874 | 874 ip 875 | 875 ireland 876 | 876 irish 877 | 877 is 878 | 878 island 879 | 879 isn 880 | 880 iso 881 | 881 isp 882 | 882 issu 883 | 883 it 884 | 884 item 885 | 885 itself 886 | 886 jabber 887 | 887 jame 888 | 888 java 889 | 889 jim 890 | 890 jnumberiiiiiiihepihepihf 891 | 891 job 892 | 892 joe 893 | 893 john 894 | 894 join 895 | 895 journal 896 | 896 judg 897 | 897 judgment 898 | 898 jul 899 | 899 juli 900 | 900 jump 901 | 901 june 902 | 902 just 903 | 903 justin 904 | 904 keep 905 | 905 kei 906 | 906 kept 907 | 907 kernel 908 | 908 kevin 909 | 909 keyboard 910 | 910 kid 911 | 911 kill 912 | 912 kind 913 | 913 king 914 | 914 kingdom 915 | 915 knew 916 | 916 know 917 | 917 knowledg 918 | 918 known 919 | 919 la 920 | 920 lack 921 | 921 land 922 | 922 languag 923 | 923 laptop 924 | 924 larg 925 | 925 larger 926 | 926 largest 927 | 927 laser 928 | 928 last 929 | 929 late 930 | 930 later 931 | 931 latest 932 | 932 launch 933 | 933 law 934 | 934 lawrenc 935 | 935 le 936 | 936 lead 937 | 937 leader 938 | 938 learn 939 | 939 least 940 | 940 leav 941 | 941 left 942 | 942 legal 943 | 943 lender 944 | 944 length 945 | 945 less 946 | 946 lesson 947 | 947 let 948 | 948 letter 949 | 949 level 950 | 950 lib 951 | 951 librari 952 | 952 licens 953 | 953 life 954 | 954 lifetim 955 | 955 light 956 | 956 like 957 | 957 limit 958 | 958 line 959 | 959 link 960 | 960 linux 961 | 961 list 962 | 962 listen 963 | 963 littl 964 | 964 live 965 | 965 ll 966 | 966 lo 967 | 967 load 968 | 968 loan 969 | 969 local 970 | 970 locat 971 | 971 lock 972 | 972 lockergnom 973 | 973 log 974 | 974 long 975 | 975 longer 976 | 976 look 977 | 977 lose 978 | 978 loss 979 | 979 lost 980 | 980 lot 981 | 981 love 982 | 982 low 983 | 983 lower 984 | 984 lowest 985 | 985 lt 986 | 986 ma 987 | 987 mac 988 | 988 machin 989 | 989 made 990 | 990 magazin 991 | 991 mai 992 | 992 mail 993 | 993 mailer 994 | 994 main 995 | 995 maintain 996 | 996 major 997 | 997 make 998 | 998 maker 999 | 999 male 1000 | 1000 man 1001 | 1001 manag 1002 | 1002 mani 1003 | 1003 manual 1004 | 1004 manufactur 1005 | 1005 map 1006 | 1006 march 1007 | 1007 margin 1008 | 1008 mark 1009 | 1009 market 1010 | 1010 marshal 1011 | 1011 mass 1012 | 1012 master 1013 | 1013 match 1014 | 1014 materi 1015 | 1015 matter 1016 | 1016 matthia 1017 | 1017 mayb 1018 | 1018 me 1019 | 1019 mean 1020 | 1020 measur 1021 | 1021 mechan 1022 | 1022 media 1023 | 1023 medic 1024 | 1024 meet 1025 | 1025 member 1026 | 1026 membership 1027 | 1027 memori 1028 | 1028 men 1029 | 1029 mention 1030 | 1030 menu 1031 | 1031 merchant 1032 | 1032 messag 1033 | 1033 method 1034 | 1034 mh 1035 | 1035 michael 1036 | 1036 microsoft 1037 | 1037 middl 1038 | 1038 might 1039 | 1039 mike 1040 | 1040 mile 1041 | 1041 militari 1042 | 1042 million 1043 | 1043 mime 1044 | 1044 mind 1045 | 1045 mine 1046 | 1046 mini 1047 | 1047 minimum 1048 | 1048 minut 1049 | 1049 miss 1050 | 1050 mistak 1051 | 1051 mobil 1052 | 1052 mode 1053 | 1053 model 1054 | 1054 modem 1055 | 1055 modifi 1056 | 1056 modul 1057 | 1057 moment 1058 | 1058 mon 1059 | 1059 mondai 1060 | 1060 monei 1061 | 1061 monitor 1062 | 1062 month 1063 | 1063 monthli 1064 | 1064 more 1065 | 1065 morn 1066 | 1066 mortgag 1067 | 1067 most 1068 | 1068 mostli 1069 | 1069 mother 1070 | 1070 motiv 1071 | 1071 move 1072 | 1072 movi 1073 | 1073 mpnumber 1074 | 1074 mr 1075 | 1075 ms 1076 | 1076 msg 1077 | 1077 much 1078 | 1078 multi 1079 | 1079 multipart 1080 | 1080 multipl 1081 | 1081 murphi 1082 | 1082 music 1083 | 1083 must 1084 | 1084 my 1085 | 1085 myself 1086 | 1086 name 1087 | 1087 nation 1088 | 1088 natur 1089 | 1089 nbsp 1090 | 1090 near 1091 | 1091 nearli 1092 | 1092 necessari 1093 | 1093 need 1094 | 1094 neg 1095 | 1095 net 1096 | 1096 netscap 1097 | 1097 network 1098 | 1098 never 1099 | 1099 new 1100 | 1100 newslett 1101 | 1101 next 1102 | 1102 nextpart 1103 | 1103 nice 1104 | 1104 nigeria 1105 | 1105 night 1106 | 1106 no 1107 | 1107 nobodi 1108 | 1108 non 1109 | 1109 none 1110 | 1110 nor 1111 | 1111 normal 1112 | 1112 north 1113 | 1113 not 1114 | 1114 note 1115 | 1115 noth 1116 | 1116 notic 1117 | 1117 now 1118 | 1118 nt 1119 | 1119 null 1120 | 1120 number 1121 | 1121 numbera 1122 | 1122 numberam 1123 | 1123 numberanumb 1124 | 1124 numberb 1125 | 1125 numberbit 1126 | 1126 numberc 1127 | 1127 numbercb 1128 | 1128 numbercbr 1129 | 1129 numbercfont 1130 | 1130 numbercli 1131 | 1131 numbercnumb 1132 | 1132 numbercp 1133 | 1133 numberctd 1134 | 1134 numberd 1135 | 1135 numberdari 1136 | 1136 numberdnumb 1137 | 1137 numberenumb 1138 | 1138 numberf 1139 | 1139 numberfb 1140 | 1140 numberff 1141 | 1141 numberffont 1142 | 1142 numberfp 1143 | 1143 numberftd 1144 | 1144 numberk 1145 | 1145 numberm 1146 | 1146 numbermb 1147 | 1147 numberp 1148 | 1148 numberpd 1149 | 1149 numberpm 1150 | 1150 numberpx 1151 | 1151 numberst 1152 | 1152 numberth 1153 | 1153 numbertnumb 1154 | 1154 numberx 1155 | 1155 object 1156 | 1156 oblig 1157 | 1157 obtain 1158 | 1158 obvious 1159 | 1159 occur 1160 | 1160 oct 1161 | 1161 octob 1162 | 1162 of 1163 | 1163 off 1164 | 1164 offer 1165 | 1165 offic 1166 | 1166 offici 1167 | 1167 often 1168 | 1168 oh 1169 | 1169 ok 1170 | 1170 old 1171 | 1171 on 1172 | 1172 onc 1173 | 1173 onli 1174 | 1174 onlin 1175 | 1175 open 1176 | 1176 oper 1177 | 1177 opinion 1178 | 1178 opportun 1179 | 1179 opt 1180 | 1180 optim 1181 | 1181 option 1182 | 1182 or 1183 | 1183 order 1184 | 1184 org 1185 | 1185 organ 1186 | 1186 origin 1187 | 1187 os 1188 | 1188 osdn 1189 | 1189 other 1190 | 1190 otherwis 1191 | 1191 our 1192 | 1192 out 1193 | 1193 outlook 1194 | 1194 output 1195 | 1195 outsid 1196 | 1196 over 1197 | 1197 own 1198 | 1198 owner 1199 | 1199 oz 1200 | 1200 pacif 1201 | 1201 pack 1202 | 1202 packag 1203 | 1203 page 1204 | 1204 pai 1205 | 1205 paid 1206 | 1206 pain 1207 | 1207 palm 1208 | 1208 panel 1209 | 1209 paper 1210 | 1210 paragraph 1211 | 1211 parent 1212 | 1212 part 1213 | 1213 parti 1214 | 1214 particip 1215 | 1215 particular 1216 | 1216 particularli 1217 | 1217 partit 1218 | 1218 partner 1219 | 1219 pass 1220 | 1220 password 1221 | 1221 past 1222 | 1222 patch 1223 | 1223 patent 1224 | 1224 path 1225 | 1225 pattern 1226 | 1226 paul 1227 | 1227 payment 1228 | 1228 pc 1229 | 1229 peac 1230 | 1230 peopl 1231 | 1231 per 1232 | 1232 percent 1233 | 1233 percentag 1234 | 1234 perfect 1235 | 1235 perfectli 1236 | 1236 perform 1237 | 1237 perhap 1238 | 1238 period 1239 | 1239 perl 1240 | 1240 perman 1241 | 1241 permiss 1242 | 1242 person 1243 | 1243 pgp 1244 | 1244 phone 1245 | 1245 photo 1246 | 1246 php 1247 | 1247 phrase 1248 | 1248 physic 1249 | 1249 pick 1250 | 1250 pictur 1251 | 1251 piec 1252 | 1252 piiiiiiii 1253 | 1253 pipe 1254 | 1254 pjnumber 1255 | 1255 place 1256 | 1256 plai 1257 | 1257 plain 1258 | 1258 plan 1259 | 1259 planet 1260 | 1260 plant 1261 | 1261 planta 1262 | 1262 platform 1263 | 1263 player 1264 | 1264 pleas 1265 | 1265 plu 1266 | 1266 plug 1267 | 1267 pm 1268 | 1268 pocket 1269 | 1269 point 1270 | 1270 polic 1271 | 1271 polici 1272 | 1272 polit 1273 | 1273 poor 1274 | 1274 pop 1275 | 1275 popul 1276 | 1276 popular 1277 | 1277 port 1278 | 1278 posit 1279 | 1279 possibl 1280 | 1280 post 1281 | 1281 potenti 1282 | 1282 pound 1283 | 1283 powel 1284 | 1284 power 1285 | 1285 powershot 1286 | 1286 practic 1287 | 1287 pre 1288 | 1288 predict 1289 | 1289 prefer 1290 | 1290 premium 1291 | 1291 prepar 1292 | 1292 present 1293 | 1293 presid 1294 | 1294 press 1295 | 1295 pretti 1296 | 1296 prevent 1297 | 1297 previou 1298 | 1298 previous 1299 | 1299 price 1300 | 1300 principl 1301 | 1301 print 1302 | 1302 printabl 1303 | 1303 printer 1304 | 1304 privaci 1305 | 1305 privat 1306 | 1306 prize 1307 | 1307 pro 1308 | 1308 probabl 1309 | 1309 problem 1310 | 1310 procedur 1311 | 1311 process 1312 | 1312 processor 1313 | 1313 procmail 1314 | 1314 produc 1315 | 1315 product 1316 | 1316 profession 1317 | 1317 profil 1318 | 1318 profit 1319 | 1319 program 1320 | 1320 programm 1321 | 1321 progress 1322 | 1322 project 1323 | 1323 promis 1324 | 1324 promot 1325 | 1325 prompt 1326 | 1326 properti 1327 | 1327 propos 1328 | 1328 proprietari 1329 | 1329 prospect 1330 | 1330 protect 1331 | 1331 protocol 1332 | 1332 prove 1333 | 1333 proven 1334 | 1334 provid 1335 | 1335 proxi 1336 | 1336 pub 1337 | 1337 public 1338 | 1338 publish 1339 | 1339 pudg 1340 | 1340 pull 1341 | 1341 purchas 1342 | 1342 purpos 1343 | 1343 put 1344 | 1344 python 1345 | 1345 qnumber 1346 | 1346 qualifi 1347 | 1347 qualiti 1348 | 1348 quarter 1349 | 1349 question 1350 | 1350 quick 1351 | 1351 quickli 1352 | 1352 quit 1353 | 1353 quot 1354 | 1354 radio 1355 | 1355 ragga 1356 | 1356 rais 1357 | 1357 random 1358 | 1358 rang 1359 | 1359 rate 1360 | 1360 rather 1361 | 1361 ratio 1362 | 1362 razor 1363 | 1363 razornumb 1364 | 1364 re 1365 | 1365 reach 1366 | 1366 read 1367 | 1367 reader 1368 | 1368 readi 1369 | 1369 real 1370 | 1370 realiz 1371 | 1371 realli 1372 | 1372 reason 1373 | 1373 receiv 1374 | 1374 recent 1375 | 1375 recipi 1376 | 1376 recommend 1377 | 1377 record 1378 | 1378 red 1379 | 1379 redhat 1380 | 1380 reduc 1381 | 1381 refer 1382 | 1382 refin 1383 | 1383 reg 1384 | 1384 regard 1385 | 1385 region 1386 | 1386 regist 1387 | 1387 regul 1388 | 1388 regular 1389 | 1389 rel 1390 | 1390 relat 1391 | 1391 relationship 1392 | 1392 releas 1393 | 1393 relev 1394 | 1394 reliabl 1395 | 1395 remain 1396 | 1396 rememb 1397 | 1397 remot 1398 | 1398 remov 1399 | 1399 replac 1400 | 1400 repli 1401 | 1401 report 1402 | 1402 repositori 1403 | 1403 repres 1404 | 1404 republ 1405 | 1405 request 1406 | 1406 requir 1407 | 1407 research 1408 | 1408 reserv 1409 | 1409 resid 1410 | 1410 resourc 1411 | 1411 respect 1412 | 1412 respond 1413 | 1413 respons 1414 | 1414 rest 1415 | 1415 result 1416 | 1416 retail 1417 | 1417 return 1418 | 1418 reveal 1419 | 1419 revenu 1420 | 1420 revers 1421 | 1421 review 1422 | 1422 revok 1423 | 1423 rh 1424 | 1424 rich 1425 | 1425 right 1426 | 1426 risk 1427 | 1427 road 1428 | 1428 robert 1429 | 1429 rock 1430 | 1430 role 1431 | 1431 roll 1432 | 1432 rom 1433 | 1433 roman 1434 | 1434 room 1435 | 1435 root 1436 | 1436 round 1437 | 1437 rpm 1438 | 1438 rss 1439 | 1439 rule 1440 | 1440 run 1441 | 1441 sa 1442 | 1442 safe 1443 | 1443 sai 1444 | 1444 said 1445 | 1445 sale 1446 | 1446 same 1447 | 1447 sampl 1448 | 1448 san 1449 | 1449 saou 1450 | 1450 sat 1451 | 1451 satellit 1452 | 1452 save 1453 | 1453 saw 1454 | 1454 scan 1455 | 1455 schedul 1456 | 1456 school 1457 | 1457 scienc 1458 | 1458 score 1459 | 1459 screen 1460 | 1460 script 1461 | 1461 se 1462 | 1462 search 1463 | 1463 season 1464 | 1464 second 1465 | 1465 secret 1466 | 1466 section 1467 | 1467 secur 1468 | 1468 see 1469 | 1469 seed 1470 | 1470 seek 1471 | 1471 seem 1472 | 1472 seen 1473 | 1473 select 1474 | 1474 self 1475 | 1475 sell 1476 | 1476 seminar 1477 | 1477 send 1478 | 1478 sender 1479 | 1479 sendmail 1480 | 1480 senior 1481 | 1481 sens 1482 | 1482 sensit 1483 | 1483 sent 1484 | 1484 sep 1485 | 1485 separ 1486 | 1486 septemb 1487 | 1487 sequenc 1488 | 1488 seri 1489 | 1489 serif 1490 | 1490 seriou 1491 | 1491 serv 1492 | 1492 server 1493 | 1493 servic 1494 | 1494 set 1495 | 1495 setup 1496 | 1496 seven 1497 | 1497 seventh 1498 | 1498 sever 1499 | 1499 sex 1500 | 1500 sexual 1501 | 1501 sf 1502 | 1502 shape 1503 | 1503 share 1504 | 1504 she 1505 | 1505 shell 1506 | 1506 ship 1507 | 1507 shop 1508 | 1508 short 1509 | 1509 shot 1510 | 1510 should 1511 | 1511 show 1512 | 1512 side 1513 | 1513 sign 1514 | 1514 signatur 1515 | 1515 signific 1516 | 1516 similar 1517 | 1517 simpl 1518 | 1518 simpli 1519 | 1519 sinc 1520 | 1520 sincer 1521 | 1521 singl 1522 | 1522 sit 1523 | 1523 site 1524 | 1524 situat 1525 | 1525 six 1526 | 1526 size 1527 | 1527 skeptic 1528 | 1528 skill 1529 | 1529 skin 1530 | 1530 skip 1531 | 1531 sleep 1532 | 1532 slow 1533 | 1533 small 1534 | 1534 smart 1535 | 1535 smoke 1536 | 1536 smtp 1537 | 1537 snumber 1538 | 1538 so 1539 | 1539 social 1540 | 1540 societi 1541 | 1541 softwar 1542 | 1542 sold 1543 | 1543 solut 1544 | 1544 solv 1545 | 1545 some 1546 | 1546 someon 1547 | 1547 someth 1548 | 1548 sometim 1549 | 1549 son 1550 | 1550 song 1551 | 1551 soni 1552 | 1552 soon 1553 | 1553 sorri 1554 | 1554 sort 1555 | 1555 sound 1556 | 1556 sourc 1557 | 1557 south 1558 | 1558 space 1559 | 1559 spain 1560 | 1560 spam 1561 | 1561 spamassassin 1562 | 1562 spamd 1563 | 1563 spammer 1564 | 1564 speak 1565 | 1565 spec 1566 | 1566 special 1567 | 1567 specif 1568 | 1568 specifi 1569 | 1569 speech 1570 | 1570 speed 1571 | 1571 spend 1572 | 1572 sponsor 1573 | 1573 sport 1574 | 1574 spot 1575 | 1575 src 1576 | 1576 ssh 1577 | 1577 st 1578 | 1578 stabl 1579 | 1579 staff 1580 | 1580 stai 1581 | 1581 stand 1582 | 1582 standard 1583 | 1583 star 1584 | 1584 start 1585 | 1585 state 1586 | 1586 statement 1587 | 1587 statu 1588 | 1588 step 1589 | 1589 steve 1590 | 1590 still 1591 | 1591 stock 1592 | 1592 stop 1593 | 1593 storag 1594 | 1594 store 1595 | 1595 stori 1596 | 1596 strategi 1597 | 1597 stream 1598 | 1598 street 1599 | 1599 string 1600 | 1600 strip 1601 | 1601 strong 1602 | 1602 structur 1603 | 1603 studi 1604 | 1604 stuff 1605 | 1605 stupid 1606 | 1606 style 1607 | 1607 subject 1608 | 1608 submit 1609 | 1609 subscrib 1610 | 1610 subscript 1611 | 1611 substanti 1612 | 1612 success 1613 | 1613 such 1614 | 1614 suffer 1615 | 1615 suggest 1616 | 1616 suit 1617 | 1617 sum 1618 | 1618 summari 1619 | 1619 summer 1620 | 1620 sun 1621 | 1621 super 1622 | 1622 suppli 1623 | 1623 support 1624 | 1624 suppos 1625 | 1625 sure 1626 | 1626 surpris 1627 | 1627 suse 1628 | 1628 suspect 1629 | 1629 sweet 1630 | 1630 switch 1631 | 1631 system 1632 | 1632 tab 1633 | 1633 tabl 1634 | 1634 tablet 1635 | 1635 tag 1636 | 1636 take 1637 | 1637 taken 1638 | 1638 talk 1639 | 1639 tape 1640 | 1640 target 1641 | 1641 task 1642 | 1642 tax 1643 | 1643 teach 1644 | 1644 team 1645 | 1645 tech 1646 | 1646 technic 1647 | 1647 techniqu 1648 | 1648 technolog 1649 | 1649 tel 1650 | 1650 telecom 1651 | 1651 telephon 1652 | 1652 tell 1653 | 1653 temperatur 1654 | 1654 templ 1655 | 1655 ten 1656 | 1656 term 1657 | 1657 termin 1658 | 1658 terror 1659 | 1659 terrorist 1660 | 1660 test 1661 | 1661 texa 1662 | 1662 text 1663 | 1663 than 1664 | 1664 thank 1665 | 1665 that 1666 | 1666 the 1667 | 1667 thei 1668 | 1668 their 1669 | 1669 them 1670 | 1670 themselv 1671 | 1671 then 1672 | 1672 theori 1673 | 1673 there 1674 | 1674 therefor 1675 | 1675 these 1676 | 1676 thi 1677 | 1677 thing 1678 | 1678 think 1679 | 1679 thinkgeek 1680 | 1680 third 1681 | 1681 those 1682 | 1682 though 1683 | 1683 thought 1684 | 1684 thousand 1685 | 1685 thread 1686 | 1686 threat 1687 | 1687 three 1688 | 1688 through 1689 | 1689 thu 1690 | 1690 thursdai 1691 | 1691 ti 1692 | 1692 ticket 1693 | 1693 tim 1694 | 1694 time 1695 | 1695 tip 1696 | 1696 tire 1697 | 1697 titl 1698 | 1698 tm 1699 | 1699 to 1700 | 1700 todai 1701 | 1701 togeth 1702 | 1702 token 1703 | 1703 told 1704 | 1704 toll 1705 | 1705 tom 1706 | 1706 toner 1707 | 1707 toni 1708 | 1708 too 1709 | 1709 took 1710 | 1710 tool 1711 | 1711 top 1712 | 1712 topic 1713 | 1713 total 1714 | 1714 touch 1715 | 1715 toward 1716 | 1716 track 1717 | 1717 trade 1718 | 1718 tradit 1719 | 1719 traffic 1720 | 1720 train 1721 | 1721 transact 1722 | 1722 transfer 1723 | 1723 travel 1724 | 1724 treat 1725 | 1725 tree 1726 | 1726 tri 1727 | 1727 trial 1728 | 1728 trick 1729 | 1729 trip 1730 | 1730 troubl 1731 | 1731 true 1732 | 1732 truli 1733 | 1733 trust 1734 | 1734 truth 1735 | 1735 try 1736 | 1736 tue 1737 | 1737 tuesdai 1738 | 1738 turn 1739 | 1739 tv 1740 | 1740 two 1741 | 1741 type 1742 | 1742 uk 1743 | 1743 ultim 1744 | 1744 un 1745 | 1745 under 1746 | 1746 understand 1747 | 1747 unfortun 1748 | 1748 uniqu 1749 | 1749 unison 1750 | 1750 unit 1751 | 1751 univers 1752 | 1752 unix 1753 | 1753 unless 1754 | 1754 unlik 1755 | 1755 unlimit 1756 | 1756 unseen 1757 | 1757 unsolicit 1758 | 1758 unsubscrib 1759 | 1759 until 1760 | 1760 up 1761 | 1761 updat 1762 | 1762 upgrad 1763 | 1763 upon 1764 | 1764 urgent 1765 | 1765 url 1766 | 1766 us 1767 | 1767 usa 1768 | 1768 usag 1769 | 1769 usb 1770 | 1770 usd 1771 | 1771 usdollarnumb 1772 | 1772 useless 1773 | 1773 user 1774 | 1774 usr 1775 | 1775 usual 1776 | 1776 util 1777 | 1777 vacat 1778 | 1778 valid 1779 | 1779 valu 1780 | 1780 valuabl 1781 | 1781 var 1782 | 1782 variabl 1783 | 1783 varieti 1784 | 1784 variou 1785 | 1785 ve 1786 | 1786 vendor 1787 | 1787 ventur 1788 | 1788 veri 1789 | 1789 verifi 1790 | 1790 version 1791 | 1791 via 1792 | 1792 video 1793 | 1793 view 1794 | 1794 virtual 1795 | 1795 visa 1796 | 1796 visit 1797 | 1797 visual 1798 | 1798 vnumber 1799 | 1799 voic 1800 | 1800 vote 1801 | 1801 vs 1802 | 1802 vulner 1803 | 1803 wa 1804 | 1804 wai 1805 | 1805 wait 1806 | 1806 wake 1807 | 1807 walk 1808 | 1808 wall 1809 | 1809 want 1810 | 1810 war 1811 | 1811 warm 1812 | 1812 warn 1813 | 1813 warranti 1814 | 1814 washington 1815 | 1815 wasn 1816 | 1816 wast 1817 | 1817 watch 1818 | 1818 water 1819 | 1819 we 1820 | 1820 wealth 1821 | 1821 weapon 1822 | 1822 web 1823 | 1823 weblog 1824 | 1824 websit 1825 | 1825 wed 1826 | 1826 wednesdai 1827 | 1827 week 1828 | 1828 weekli 1829 | 1829 weight 1830 | 1830 welcom 1831 | 1831 well 1832 | 1832 went 1833 | 1833 were 1834 | 1834 west 1835 | 1835 what 1836 | 1836 whatev 1837 | 1837 when 1838 | 1838 where 1839 | 1839 whether 1840 | 1840 which 1841 | 1841 while 1842 | 1842 white 1843 | 1843 whitelist 1844 | 1844 who 1845 | 1845 whole 1846 | 1846 whose 1847 | 1847 why 1848 | 1848 wi 1849 | 1849 wide 1850 | 1850 width 1851 | 1851 wife 1852 | 1852 will 1853 | 1853 william 1854 | 1854 win 1855 | 1855 window 1856 | 1856 wing 1857 | 1857 winner 1858 | 1858 wireless 1859 | 1859 wish 1860 | 1860 with 1861 | 1861 within 1862 | 1862 without 1863 | 1863 wnumberp 1864 | 1864 woman 1865 | 1865 women 1866 | 1866 won 1867 | 1867 wonder 1868 | 1868 word 1869 | 1869 work 1870 | 1870 worker 1871 | 1871 world 1872 | 1872 worldwid 1873 | 1873 worri 1874 | 1874 worst 1875 | 1875 worth 1876 | 1876 would 1877 | 1877 wouldn 1878 | 1878 write 1879 | 1879 written 1880 | 1880 wrong 1881 | 1881 wrote 1882 | 1882 www 1883 | 1883 ximian 1884 | 1884 xml 1885 | 1885 xp 1886 | 1886 yahoo 1887 | 1887 ye 1888 | 1888 yeah 1889 | 1889 year 1890 | 1890 yesterdai 1891 | 1891 yet 1892 | 1892 york 1893 | 1893 you 1894 | 1894 young 1895 | 1895 your 1896 | 1896 yourself 1897 | 1897 zdnet 1898 | 1898 zero 1899 | 1899 zip 1900 | --------------------------------------------------------------------------------