{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Linear Regression: Ridge and Lasso\n", "====================================\n", "\n", "*Important:* Please read the [installation page](http://gpeyre.github.io/numerical-tours/installation_python/) for details about how to install the toolboxes.\n", "$\\newcommand{\\dotp}[2]{\\langle #1, #2 \\rangle}$\n", "$\\newcommand{\\enscond}[2]{\\lbrace #1, #2 \\rbrace}$\n", "$\\newcommand{\\pd}[2]{ \\frac{ \\partial #1}{\\partial #2} }$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\umax}[1]{\\underset{#1}{\\max}\\;}$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\uargmin}[1]{\\underset{#1}{argmin}\\;}$\n", "$\\newcommand{\\norm}[1]{\\|#1\\|}$\n", "$\\newcommand{\\abs}[1]{\\left|#1\\right|}$\n", "$\\newcommand{\\choice}[1]{ \\left\\{ \\begin{array}{l} #1 \\end{array} \\right. }$\n", "$\\newcommand{\\pa}[1]{\\left(#1\\right)}$\n", "$\\newcommand{\\diag}[1]{{diag}\\left( #1 \\right)}$\n", "$\\newcommand{\\qandq}{\\quad\\text{and}\\quad}$\n", "$\\newcommand{\\qwhereq}{\\quad\\text{where}\\quad}$\n", "$\\newcommand{\\qifq}{ \\quad \\text{if} \\quad }$\n", "$\\newcommand{\\qarrq}{ \\quad \\Longrightarrow \\quad }$\n", "$\\newcommand{\\ZZ}{\\mathbb{Z}}$\n", "$\\newcommand{\\CC}{\\mathbb{C}}$\n", "$\\newcommand{\\RR}{\\mathbb{R}}$\n", "$\\newcommand{\\EE}{\\mathbb{E}}$\n", "$\\newcommand{\\Zz}{\\mathcal{Z}}$\n", "$\\newcommand{\\Ww}{\\mathcal{W}}$\n", "$\\newcommand{\\Vv}{\\mathcal{V}}$\n", "$\\newcommand{\\Nn}{\\mathcal{N}}$\n", "$\\newcommand{\\NN}{\\mathcal{N}}$\n", "$\\newcommand{\\Hh}{\\mathcal{H}}$\n", "$\\newcommand{\\Bb}{\\mathcal{B}}$\n", "$\\newcommand{\\Ee}{\\mathcal{E}}$\n", "$\\newcommand{\\Cc}{\\mathcal{C}}$\n", "$\\newcommand{\\Gg}{\\mathcal{G}}$\n", "$\\newcommand{\\Ss}{\\mathcal{S}}$\n", "$\\newcommand{\\Pp}{\\mathcal{P}}$\n", "$\\newcommand{\\Ff}{\\mathcal{F}}$\n", "$\\newcommand{\\Xx}{\\mathcal{X}}$\n", "$\\newcommand{\\Mm}{\\mathcal{M}}$\n", "$\\newcommand{\\Ii}{\\mathcal{I}}$\n", "$\\newcommand{\\Dd}{\\mathcal{D}}$\n", "$\\newcommand{\\Ll}{\\mathcal{L}}$\n", "$\\newcommand{\\Tt}{\\mathcal{T}}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\al}{\\alpha}$\n", "$\\newcommand{\\la}{\\lambda}$\n", "$\\newcommand{\\ga}{\\gamma}$\n", "$\\newcommand{\\Ga}{\\Gamma}$\n", "$\\newcommand{\\La}{\\Lambda}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\Si}{\\Sigma}$\n", "$\\newcommand{\\be}{\\beta}$\n", "$\\newcommand{\\de}{\\delta}$\n", "$\\newcommand{\\De}{\\Delta}$\n", "$\\newcommand{\\phi}{\\varphi}$\n", "$\\newcommand{\\th}{\\theta}$\n", "$\\newcommand{\\om}{\\omega}$\n", "$\\newcommand{\\Om}{\\Omega}$\n", "$\\newcommand{\\eqdef}{\\equiv}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This tour studies linear regression method in conjunction with\n", "regularization.\n", "It contrasts ridge regression and the Lasso." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We recommend that after doing this Numerical Tours, you apply it to your\n", "own data, for instance using a dataset from [LibSVM](https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/) or [Kaggle](https://www.kaggle.com/).\n", "\n", "_Disclaimer:_ these machine learning tours are intended to be\n", "overly-simplistic implementations and applications of baseline machine learning methods.\n", "For more advanced uses and implementations, we recommend\n", "to use a state-of-the-art library, the most well known being\n", "[Scikit-Learn](http://scikit-learn.org/). " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [], "source": [ "# Use this code to read from a CSV file.\n", "#import pandas as pd\n", "#U = pd.read_csv('myfile.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Usefull functions to convert to a column/row vectors." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# convert to a column vector\n", "def MakeCol(y): return y.reshape(-1,1)\n", "# convert to a row vector\n", "def MakeRow(y): return y.reshape(1,-1)\n", "# find non zero/true elements\n", "def find(x): return np.nonzero(x)[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dataset Loading\n", "---------------\n", "We test the method on the prostate dataset in $n=97$ samples with\n", "features $x_i \\in \\RR^p$ in dimension $p=8$. The goal is to predict the price value\n", "$y_i \\in \\RR$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Load the dataset." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from scipy import io\n", "name = 'prostate';\n", "Data = io.loadmat('nt_toolbox/data/ml-' + name)\n", "Ay = Data['A']\n", "class_names = Data['class_names']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Randomly permute it." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "Ay = Ay[np.random.permutation(Ay.shape[0]),:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Separate the features $X$ from the data $y$ to predict information." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "A_full = Ay[:,0:-2];\n", "y_full = MakeCol( Ay[:,-2] )\n", "c = MakeCol( Ay[:,-1] )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Split into training and testing." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "I0 = find(c==1) # train\n", "I1 = find(c==0) # test\n", "n = I0.size\n", "n1 = n-n\n", "A = A_full[I0,:]\n", "y = y_full[I0]\n", "A1 = A_full[I1,:]\n", "y1 = y_full[I1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$n$ is the total number of samples, $p$ is the dimensionality of the features," ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "67 8\n" ] } ], "source": [ "[n,p] = A.shape\n", "print(n,p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Normalize the features by the mean and std of the *training* set.\n", "This is optional." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "mA = A.mean(axis=0)\n", "sA = A.std(axis=0)\n", "A = (A-mA)/sA\n", "A1 = (A1-mA)/sA" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Remove the mean (computed from the *test* set) to avoid introducing a bias term and a constant regressor.\n", "This is optional." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "m = y.mean()\n", "y = y-m\n", "y1 = y1-m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dimenionality Reduction and PCA\n", "-------------------------------\n", "In order to display in 2-D or 3-D the data, dimensionality reduction is needed.\n", "The simplest method is the principal components analysis (PCA), which performs an\n", "orthogonal linear projection on the principal axes (eigenvectors) of the\n", "covariance matrix.\n", "\n", "Display the covariance matrix of the training set." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "C = A.transpose().dot(A)\n", "plt.imshow(C);" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD8CAYAAABn919SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAADkRJREFUeJzt3X2IZfV9x/H3p64SNRFjHe3W1Y6BxUYKPjBYU0GoG1NTg+4fMSitLGXL/pOKtoV00/8CoRgoefijBBY12VDrQzcRRcVGNkoaSDWzPsSHNZjYjW7cuJNGq4ZSq/n2jzmTDJsZ7507cz13f75fMNx7zj2X80Vn33Pm3HvupKqQJB3+fqvvASRJa8OgS1IjDLokNcKgS1IjDLokNcKgS1IjDLokNcKgS1IjDLokNWLdO7mzE088saanp9/JXUrSYW/Pnj0/q6qpQdu9o0Gfnp5mdnb2ndylJB32kvx4mO085SJJjRgq6EmOT7IryTNJ9ib5UJITktyf5Nnu9v3jHlaStLxhj9C/BNxXVb8PnAXsBbYDu6tqI7C7W5Yk9WRg0JMcB1wI3AhQVW9U1SvA5cDObrOdwOZxDSlJGmyYI/QPAHPAV5I8muSGJMcCJ1fVAYDu9qQxzilJGmCYoK8DzgW+XFXnAL9gBadXkmxLMptkdm5ubsQxJUmDDBP0/cD+qnqoW97FfOBfSrIeoLs9uNSTq2pHVc1U1czU1MC3UUqSRjQw6FX1U+CFJGd0qzYBTwN3AVu6dVuAO8cyoSRpKMNeWHQNcHOSo4DngL9g/ofB7Um2As8DV4xnREnSMIYKelU9Bsws8dCmtR1nedPb73mndvUb9l1/aW/7lqRheaWoJDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSI9YNs1GSfcBrwFvAm1U1k+QE4DZgGtgHfKKqXh7PmJKkQVZyhP7HVXV2Vc10y9uB3VW1EdjdLUuSerKaUy6XAzu7+zuBzasfR5I0qmGDXsA3k+xJsq1bd3JVHQDobk8ax4CSpOEMdQ4duKCqXkxyEnB/kmeG3UH3A2AbwGmnnTbCiJKkYQx1hF5VL3a3B4E7gPOAl5KsB+huDy7z3B1VNVNVM1NTU2sztSTpNwwMepJjk7xv4T7wEeBJ4C5gS7fZFuDOcQ0pSRpsmFMuJwN3JFnY/l+q6r4k3wNuT7IVeB64YnxjSpIGGRj0qnoOOGuJ9f8FbBrHUJKklfNKUUlqhEGXpEYYdElqhEGXpEYYdElqhEGXpEYYdElqhEGXpEYYdElqhEGXpEYYdElqhEGXpEYYdElqhEGXpEYM+yfopHeV6e339Lbvfddf2tu+dXjzCF2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGjF00JMckeTRJHd3y6cneSjJs0luS3LU+MaUJA2ykiP0a4G9i5Y/B3yhqjYCLwNb13IwSdLKDBX0JBuAS4EbuuUAFwG7uk12ApvHMaAkaTjDHqF/EfgU8Mtu+beBV6rqzW55P3DKGs8mSVqBgUFP8jHgYFXtWbx6iU1rmedvSzKbZHZubm7EMSVJgwxzhH4BcFmSfcCtzJ9q+SJwfJKFP5CxAXhxqSdX1Y6qmqmqmampqTUYWZK0lIFBr6pPV9WGqpoGrgS+VVV/BjwAfLzbbAtw59imlCQNtJo/Qfd3wK1JPgs8Cty4NiNJejv+eTwtZ0VBr6oHgQe7+88B5639SIcf/4FJmgReKSpJjTDoktQIgy5JjTDoktQIgy5JjTDoktQIgy5JjTDoktQIgy5JjVjNpf+SdNh4N1zR7RG6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDViYNCTvCfJw0keT/JUks90609P8lCSZ5PcluSo8Y8rSVrOMEfo/wtcVFVnAWcDlyQ5H/gc8IWq2gi8DGwd35iSpEEGBr3mvd4tHtl9FXARsKtbvxPYPJYJJUlDGeocepIjkjwGHATuB34EvFJVb3ab7AdOWea525LMJpmdm5tbi5klSUsYKuhV9VZVnQ1sAM4DPrjUZss8d0dVzVTVzNTU1OiTSpLe1ore5VJVrwAPAucDxydZ1z20AXhxbUeTJK3EMO9ymUpyfHf/aODDwF7gAeDj3WZbgDvHNaQkabB1gzdhPbAzyRHM/wC4varuTvI0cGuSzwKPAjeOcU5J0gADg15V3wfOWWL9c8yfT5ckTQCvFJWkRhh0SWqEQZekRgzzoqgkDWV6+z297Xvf9Zf2tu9J4RG6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSI9YN2iDJqcDXgN8BfgnsqKovJTkBuA2YBvYBn6iql8c3qlozvf2e3va97/pLe9u3NC7DHKG/CfxtVX0QOB/4ZJIzge3A7qraCOzuliVJPRkY9Ko6UFWPdPdfA/YCpwCXAzu7zXYCm8c1pCRpsBWdQ08yDZwDPAScXFUHYD76wEnLPGdbktkks3Nzc6ubVpK0rKGDnuS9wNeB66rq1WGfV1U7qmqmqmampqZGmVGSNIShgp7kSOZjfnNVfaNb/VKS9d3j64GD4xlRkjSMgUFPEuBGYG9VfX7RQ3cBW7r7W4A71348SdKwBr5tEbgAuBp4Islj3bq/B64Hbk+yFXgeuGI8I0qShjEw6FX1HSDLPLxpbceRJI3KK0UlqRHDnHLRYcyrMaV3D4/QJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGjEw6EluSnIwyZOL1p2Q5P4kz3a37x/vmJKkQYY5Qv8qcMkh67YDu6tqI7C7W5Yk9Whg0Kvq28DPD1l9ObCzu78T2LzGc0mSVmjUc+gnV9UBgO72pLUbSZI0irG/KJpkW5LZJLNzc3Pj3p0kvWuNGvSXkqwH6G4PLrdhVe2oqpmqmpmamhpxd5KkQUYN+l3Alu7+FuDOtRlHkjSqYd62eAvwXeCMJPuTbAWuBy5O8ixwcbcsSerRukEbVNVVyzy0aY1nkSStgleKSlIjDLokNcKgS1IjDLokNcKgS1IjDLokNcKgS1IjDLokNcKgS1IjDLokNcKgS1IjDLokNcKgS1IjDLokNcKgS1IjDLokNcKgS1IjDLokNcKgS1IjDLokNcKgS1IjDLokNcKgS1IjDLokNcKgS1IjDLokNWJVQU9ySZIfJPlhku1rNZQkaeVGDnqSI4B/Aj4KnAlcleTMtRpMkrQyqzlCPw/4YVU9V1VvALcCl6/NWJKklVpN0E8BXli0vL9bJ0nqQapqtCcmVwB/UlV/2S1fDZxXVdccst02YFu3eAbwg9HHXZUTgZ/1tO9BnG00zjYaZxtNn7P9XlVNDdpo3Sp2sB84ddHyBuDFQzeqqh3AjlXsZ00kma2qmb7nWIqzjcbZRuNso5nk2Ras5pTL94CNSU5PchRwJXDX2owlSVqpkY/Qq+rNJH8F/BtwBHBTVT21ZpNJklZkNadcqKp7gXvXaJZx6/20z9twttE422icbTSTPBuwihdFJUmTxUv/JakRzQc9yU1JDiZ5su9ZFktyapIHkuxN8lSSa/ueaUGS9yR5OMnj3Wyf6XumQyU5IsmjSe7ue5bFkuxL8kSSx5LM9j3PYkmOT7IryTPd992H+p4JIMkZ3X+vha9Xk1zX91wLkvx19+/gySS3JHlP3zMtp/lTLkkuBF4HvlZVf9D3PAuSrAfWV9UjSd4H7AE2V9XTPY9GkgDHVtXrSY4EvgNcW1X/0fNov5Lkb4AZ4Liq+ljf8yxIsg+YqaqJey91kp3Av1fVDd07046pqlf6nmux7iNFfgL8YVX9eALmOYX57/8zq+p/ktwO3FtVX+13sqU1f4ReVd8Gft73HIeqqgNV9Uh3/zVgLxNypW3Ne71bPLL7mpif/Ek2AJcCN/Q9y+EiyXHAhcCNAFX1xqTFvLMJ+NEkxHyRdcDRSdYBx7DE9TaTovmgHw6STAPnAA/1O8mvdac0HgMOAvdX1cTMBnwR+BTwy74HWUIB30yyp7tKelJ8AJgDvtKdqrohybF9D7WEK4Fb+h5iQVX9BPhH4HngAPDfVfXNfqdankHvWZL3Al8HrquqV/ueZ0FVvVVVZzN/BfB5SSbidFWSjwEHq2pP37Ms44KqOpf5TyH9ZHfKbxKsA84FvlxV5wC/ACbqI6+700CXAf/a9ywLkryf+Q8dPB34XeDYJH/e71TLM+g96s5Pfx24uaq+0fc8S+l+LX8QuKTnURZcAFzWnau+FbgoyT/3O9KvVdWL3e1B4A7mP5V0EuwH9i/6TWsX84GfJB8FHqmql/oeZJEPA/9ZVXNV9X/AN4A/6nmmZRn0nnQvPN4I7K2qz/c9z2JJppIc390/mvlv6mf6nWpeVX26qjZU1TTzv55/q6om4ogpybHdC9x0pzM+AkzEu6uq6qfAC0nO6FZtAnp/Af4QVzFBp1s6zwPnJzmm+ze7ifnXuyZS80FPcgvwXeCMJPuTbO17ps4FwNXMH2EuvF3rT/seqrMeeCDJ95n/zJ77q2qi3h44oU4GvpPkceBh4J6quq/nmRa7Bri5+/96NvAPPc/zK0mOAS5m/gh4YnS/0ewCHgGeYL6ZE3vFaPNvW5Skd4vmj9Al6d3CoEtSIwy6JDXCoEtSIwy6JDXCoEtSIwy6JDXCoEtSI/4f3WSJYxNziwAAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "u = A.transpose().dot(y)\n", "plt.clf\n", "plt.bar(np.arange(1,p+1),u.flatten())\n", "plt.axis('tight');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute PCA ortho-basis and\n", "the feature in the PCA basis." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "U, s, V = np.linalg.svd(A)\n", "Ar = A.dot( V.transpose() )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot sqrt of the eigenvalues." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(s, '.-');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Display the features." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pmax = min(p,8)\n", "k = 0\n", "plt.clf\n", "for i in np.arange(0,pmax):\n", " for j in np.arange(0,pmax):\n", " k = k+1\n", " plt.subplot(pmax,pmax,k)\n", " if i==j:\n", " plt.hist(A[:,i],6)\n", " plt.axis('tight')\n", " else:\n", " plt.plot(A[:,j],A[:,i], '.')\n", " plt.axis('tight')\n", " if i==1:\n", " plt.title(class_names[0][j][0])\n", " plt.tick_params(axis='x', labelbottom=False)\n", " plt.tick_params(axis='y', labelleft=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Display the points cloud of feature vectors in 2-D PCA space." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(Ar[:,0], Ar[:,1], '.')\n", "plt.axis('equal');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1D plot of the function to regress along the main eigenvector axes." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAD8CAYAAAB+UHOxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3X+MHOWd5/H3d8Y2WhKLWLazBuyx4zNrBfvyw56zjdhTgjbLAudbtPwQDlEWXZLzJSJSoo10CeHkRF7lbiNuo0TBq8QHaJUIAgo2scXCxkSxFPYUs3jmSLAxJHMOAxP7AoaBsIKNPdPf+6O7SdPumq7q+l31eUmI6Zly1VPVVc/3+VXPY+6OiIjUz1DeCRARkXwoAIiI1JQCgIhITSkAiIjUlAKAiEhNKQCIiNSUAoCISE0pAIiI1JQCgIhITc3LOwFzWbJkia9atSrvZIiIlMbY2Ngpd18aZttCB4BVq1Zx+PDhvJMhIhGMTU5z6PhLbFm9mI0rF+WdnNoxs8mw2xY6AIhIuYxNTvOROw5xeqbBgnlD3P2JLQoCBaY+ABFJzKHjL3F6pkHD4cxMg0PHX8o7STIHBQARScyW1YtZMG+IYYP584bYsnpx3kmSOcRuAjKzFcB3gGVAA9jt7t/o2uaDwD7gV61f7XX3nXGPLSLFsnHlIu7+xBb1AZREEn0AM8Dn3H3czBYCY2b2iLs/1bXdo+6+NYHjiUiBbVy5SBl/ScRuAnL3k+4+3vr5NeAYcGHc/YqISLoS7QMws1XA+4HHevz5EjP7mZk9bGbr5tjHdjM7bGaHX3zxxSSTJyIiHRILAGb2dmAP8Fl3/23Xn8eBle7+XuCbwA+C9uPuu9191N1Hly4N9S6DiLSMTU6z6+AEY5PTeSdFSiCR9wDMbD7NzP9ud9/b/ffOgODuD5nZ35nZEnc/lcTxRURj8CW62DUAMzPgTuCYu38tYJtlre0ws02t42qAsEiCNAZfokqiBnAp8FHgSTN7ovW7LwIjAO7+LeA64FNmNgO8AWxzd0/g2CLS0h6Df2amEWsMvqZyqA8rcj48OjrqmgtIJLy4mbeakcrPzMbcfTTMtpoLSKRC4o7B79WMpABQXZoKQmpHI2WCaSqHelENQBJRlnZjNXH8Xq/vLK2pHMpyf9SNAoDEVqZMVU0cTXN9Z0lP5VCm+6Nu1AQksZVp+KGaOJqy/M7KdH/UjWoAFZJXNTup4YdZiNPEUaVmjLjfWZRrUab7o240DLQi8q5m55U5ZnXcONc3yzRGOc6g6RrkWlQpeBadhoHWUN5t21lMAdydiQRlRGlkNoNe36wC8yDHGfQ763ctgjqXlfEXjwJARVS9mt0rgwtqW04jwx30+nance/4VCol4TQLAN0Z+lzXIu+aqESjAFARVV+JqVcG1ysjSisjHPT6dqZxeHiI7x9+npmGJ545BmXKab0ZHHQt8q6JSjQKABVS5Wp2rwwuKCNKqyY0yPXtTOOvX3mDe//5uVQyx17XIonSeFCGHnQtql4TrRoFAMncIKXSoMy+OyMqYk2oncaxyWn2jk+lljl2X4skSuNRM/QiXn8JplFABVbFkRNhS6VRzr1M16kzrUCqo3ba17qdeQ/a5FSm6ysaBVQJaXWmZfkw9zpWmFJplHMvW6djZ20gSroHHeWTRGk87aZFBZj8KAAkLKmbOY3OtLQzy+7SbftYQ2bsvHo9N24eCdWkEOXcy9rpGDXdg55n0fuFyhbAqyapJSGvAL4BDAN3uPvfdP39HOA7wEaaK4Hd4O7PJnHsIknyZk6jM60zE/ndmQZ7xqcSHSrYee7XbFj+5rEa7uzYd4S1yxaGKpUuOncBQ2aA9z33snY6Rk13Wc+zn7IG8KqIHQDMbBjYBfwpMAU8bmb73f2pjs0+Dky7+xoz2wZ8Fbgh7rGLJsmbOY3OtC2rFzNvyDg96zhw/9gU125Ynkj7c/e5GzBkRqPVx9Ro+FtGkLT/TftcO4+z88GjzDac4SFjx9Z1c6avrJ2OUdNd1vPsp6qBLY4sm8SSqAFsAibc/TiAmd0LXA10BoCrgS+3fr4fuN3MrGrLQiZ9Myddfd+4chHXj67gnseew4HZ2XBBKkzNpvvcr9mwnHUXnMeOfUdoNJwF8986Nj1of+1A4oC7M/366VDnVcYMMWq6y3qec6lqYBtU1k1iSQSAC4HnOz5PAZuDtnH3GTN7FVgMnErg+IWR980cpuRwzYbl7Ik4FDFMzabXuW9cuYi1yxZG6ghWibB+qhjYBpV1k1gSAcB6/K67ZB9mm+aGZtuB7QAjIyPxUpaDvG7msCWHdka9d3yq9xfQQ9hMude59/rdXPvLO4hCfUal1OU8yyTrAlASAWAKWNHxeTlwImCbKTObB5wHvNxrZ+6+G9gNzfcAEkhfZXU+wFFLDnvGpzjdmpumXzUz6Uy53/7yLBEOWgUvW2aq0TfFlHUBKIkA8DhwkZm9C/g1sA24sWub/cBNwE+B64AfV639P4okMovOB3jIjE/88btClxwGqWam0R9RxAxnkGtTxsxUo2+KK8tnI3YAaLXpfxr4Ic1hoHe5+1Ez2wkcdvf9wJ3Ad81sgmbJf1vc45ZVUplF5wPccGf3o8fZ/u9Xs/AP5vcNLGpnDzbItSljZqp7QCCh9wDc/SHgoa7f7ej4+V+B65M4VtkllVlsWb34rcMsHe74p19x33+5pDRDCsPWhJJsXum3r0GuTRkz06LcA5IvvQkcUdzMKKnMYuPKRey8ej3/7QdP0mg1pjXcQweUvJtgoswJlFTzSpSO8vbvw3zfZc1M874HJH8KABEkkRnNlVn0y2y6/37j5uYoqR37jtDw5hzzZSh9QviaUJLNK1H3FeX7VmYqZVTJAJDWiIykMqNemUW/zCbo7zduHuk51j4PaSwUnmTzStR9lbFtXySKygWANEdkpNnW2y+zmWsenzxKn2HX5w0SttkkyeaVqPsqY9u+SBSVCwBpltrSbOvtl9nEmccnrCidsmHW501qaGmSAS7Kvsrati8SVuUCQJqltrSaltr73bF1HdOvnw58OWqQeXyipCFsCb5XZh903cv2glQ3te1LlVUuAKRVaktzgZaw+x1kHp+wopTge2X2va57GV+QEqmTygUASKfUllbTUpT95tkEFSYd3dddnagixVbJAJCGtJqWou43rSaJqMElTDrUiSpSbFoUPoKk27Pb+1t07oLAtv+yK3sfgEjZaFH4LkllQkmWvuvSPq5OVJHiqnwAKGpGq/ZxEcnbUN4JSFuvjLYI2u3jw4bax0UkF5WvARS1I1IvGYlI3mrRCVz0jsiip09EykOdwF2K3BFZ1D4KEam+WH0AZnabmT1tZj83swfM7B0B2z1rZk+a2RNmVpxxnQVQ1D4KEam+uJ3AjwDr3f09wC+AW+bY9jJ3f1/YqkldqDNYRPISqwnI3Q90fDxEc8F3iUCdwSKSlyT7AD4G3BfwNwcOmJkD33b33QkeN7bOTlgg88w4jT4KdSyLSD99A4CZ/QhY1uNPt7r7vtY2twIzwN0Bu7nU3U+Y2TuBR8zsaXf/ScDxtgPbAUZGRkKcQjydnbDzhofAnZmGl7pDVh3LIhJG3z4Ad/+Qu6/v8V87878J2Ap8xAPGlLr7idb/XwAeADbNcbzd7j7q7qNLly4d5JzOMjY5za6DE4xNTp/1t+5O2DOzXvoOWXUsi0gYsZqAzOwK4PPAB9z99YBt3gYMuftrrZ8vB3bGOW4U/UrDnS+KDbdqALMNL3WHbFFffhORYonbB3A7cA7NZh2AQ+7+STO7ALjD3a8C/hB4oPX3ecA97v6PMY8bWr85d7o7Ydv/psxt5+pYFpEw4o4CWhPw+xPAVa2fjwPvjXOcOMKUhrs7YauQYRb55TcRKYbKvwms0rCISG+FngvIzF4EJvNOR4KWAKfyTkQJ6DqFo+sUTt2u00p3DzWCptABoGrM7LDehO5P1ykcXadwdJ2CVX49ABER6U0BQESkphQAslWoKTAKTNcpHF2ncHSdAqgPQESkplQDEBGpKQUAEZGaUgDIWNhV1OrIzK4ws2fMbMLMvpB3eorKzFaY2UEzO2ZmR83sM3mnqajMbNjM/o+ZPZh3WopIASB7UVZRqw0zGwZ2AVcCFwMfNrOL801VYc0An3P3dwNbgJt1rQJ9BjiWdyKKSgEgY+5+wN1nWh8PAcvzTE+BbAIm3P24u58G7gWuzjlNheTuJ919vPXzazQzuAvzTVXxmNly4D8Ad+SdlqJSAMjXx4CH805EQVwIPN/xeQplan2Z2Srg/cBj+aakkL4O/FegkXdCiqryk8HlIaFV1OrGevxOY5TnYGZvB/YAn3X33+adniIxs63AC+4+ZmYfzDs9RVXo9wCWLFniq1atyjsZIiKlMTY2dirsZHCFrgGsWrWKw4cP550MkYGNTU5rKnLJlJmFnkG50AFApMz6LUcqkjd1AoukpNdypCJFogAgkpL2cqTDRuBypCJ5it0EZGYrgO/QHPXSAHa7+ze6tvkgsA/4VetXe919Z9xjixSZliOVokuiD6D9VuK4mS0ExszsEXd/qmu7R919awLHEymNjSsXKeOXwordBKS3EkVEyinRPoA+byVeYmY/M7OHzWzdHPvYbmaHzezwiy++mGTyRESkQ2IBoM9bieM0V6p/L/BN4AdB+3H33e4+6u6jS5eGepdBRKQyxian2XVwgrHJ6dSPlch7AGY2n2bmf7e77+3+e2dAcPeHzOzvzGyJu59K4vgiIlWQ9bsjsWsAZmbAncAxd/9awDbLWtthZptax9WgaBGRDlm/O5JEDeBS4KPAk2b2ROt3XwRGANz9W8B1wKfMbAZ4A9jmRZ6ESEQSoakwomm/O3JmppHJuyOFngxudHTUNReQSDlpKozBxA2aZjbm7qNhttVcQCIpUMm3d3NGXa9FFFm+O6IAINJDnAxcJd+mrJszJDoFAJEuYTPwoCCRVcm36LUMTYVRfAoAIl3CZOBzBYksSr5lqWVoKoxiUwAQ6RImA58rSGRR8lX7enKKXpNKkwKAVEZSD3KYDLxfkEi75Kv29WT0qkkBtQkICgBSCUk3iXRn4N3BZa4gkUWJMqlaRpppLUPJursmtXd8ij3jU4VvWktKbQJAGW5GGVyaTSJBwaVXKT/Ltvm4tYw005pnH0WUZ727JuVQq6a1WgSAsnSYzUUBbG5pNolECS5laptPM62D7jvufR71We+uSQHsHZ+qTdNaLQJAmR7KXqoQwNKWZsdrlOBSprb5uGmdK7MeZN9J3OeDPOvdNak6DV2tRQAo00PZS9kDWFbS6niNElzKNPY9Tlr7ZdaD7DuJ+zyJZ71OQ1drEQDK9FD2UvYABuVvwoqSKZQpAxk0rWEy66j7TirzTvJZL/t9208lA0CvL61MD2W39k29Z3wKyzsxA0irCav7e676w1okaRRKksq8k3rW69D0WrkAEPSlVSFz2NsanrZnfKo0N+PY5DRf/9EvEm/C6v6ed2xdx84Hj875sGZ9D1ThnguSRGZd9IJaHZpeKxcAghZUKHskD7oZi5zJtDPp351p4MCQkVhpsft6PHzk5JwPa9aluTqUHuNk1mW4PlVoeu0nkTWBzewKM3vGzCbM7As9/n6Omd3X+vtjrcXjU9H+0oY7MpusV9lJQ6/zaj9E//OHz3DDt3/KPY89l3cy36J93Z3mjXbpmiWJPejd1+PK9eefdX16pSWre2CQ42W5FmzeyvBMtms5f3X52kIGqCTErgGY2TCwC/hTYAp43Mz2u/tTHZt9HJh29zVmtg34KnBD3GP3ElQ1LXsk73Veuw5OvFm6nmk4O/YdYe2yhYW5UbtLUJ/90B8llrag7/nhIye5cv35fYclLjp3AbsOTqRWc4paeuwsEc8bMq4fXcE1G5YX5rtMWllK10VqkkpD7BXBzOwS4Mvu/metz7cAuPv/6Njmh61tfmpm84D/ByzttyxkkiuCFbmpZFBjk9Pc8O2fMtNoXsYhg89dvpabL1uTc8p+L6vrHqZJoZ2WRecu6NtfkFSawp77roMT/O2BZ2h9lRhwzvxiNo0kpYrPZBFkvSLYhcDzHZ+ngM1B27j7jJm9CiwGTiVw/FCqGMk3rlzEzqvXs2PfERruLChgSSrqdR80U4gyLHHXwYlMOveinHu7RNyu0TnV7XhsK+MzWbWglUQA6DUysbtkH2ab5oZm24HtACMjI/FSVgM3bh5h7bKFlbgp43QMRn1bd95wc9vh4WIEzc6hvvePTTE7W+ymkbaqZYhziXN/FvU6JREApoAVHZ+XAycCtplqNQGdB7zca2fuvhvYDc0moATSV3llLEn1EmfYXeRhie3Wx5hNoElqf4/rLzgvsC+jSMowkidJceY3Kup1SmIU0OPARWb2LjNbAGwD9ndtsx+4qfXzdcCP+7X/S/30GukUxcaVi7j5sjV9H65Dx19ipuE4MNvwt4xAyXskztjkNDsfPMr/njjFzgePFnpEUJyRPHlf50EMen8WecRT7BpAq03/08APgWHgLnc/amY7gcPuvh+4E/iumU3QLPlvi3tcSU5RqqdZTdkR1FxUhJJamV4+itLs1nmPQTnfyxn0/izyiKdEXgRz94eAh7p+t6Pj538Frk/iWJKsImR6nbJozgp6kIuQ+RY5s7jnsefebJq6cfNI6Ayx+x67dsPy3K/zoAa5P4s8F1nl3gSWaIqQ6eWh14NchMw3q8wiaq3vnsee44sPPAnAo788xcFnXuCTH/g3oTLE7nvMKf97OVEVtZ9OAaDm5sr0itI0lJWilNTSziwGqfU9fOTkWz4/8tRvePSXL875bzvfu+i8x67dsJxrNyzP/TqLAkDtBWV6RWsaSkKYgFbUkloS2ud/4pU3Itf6rlx/Po/+8q2v7cz1b3tN1jf9+umzJn6ru7wLWQoA0jPTq1rTUBUDWhTdU03MGx6K9K7BjZub7+Tc9/hzHD3xKu5zj4TpvH9+d6bBkROv8t//4t8mek5lV4R7UgFAeipCe3iSOjOk0xUIaGH1KvXPNpwbNq3gwnf8QaSS542bR7hx80ioUuuW1YuZN2Scnm0Ot71/bIpre8xtlGYJOO/SdT9FKGQpAEhPRWkPT8qicxe8Oc9Ow5ufq26uUn+vzDisMM1kG1cu4vrRFdzz2HPN9y1ms52iuwil636KUMhSAJBAVWoPn379NAZvTk09/frpnFOUvs4S5qCl/jiu2bCcPeNTgRlcmiXgIpSu+ylCIUsBQGphy+rFnDO/Ok1aYXSXMOOU+gfRL4NLswRchNJ1GHkXsmJPB52mJKeDFil6m3Aain7Ode4DSEuU6aAVAER6qGvmIU1l/v6zXg9ApFLK0IEo6anT95/ImsAiVVLk2RslfXX6/hUARLrEnZZayq1O37/6AER6KHMbcNrqcG3KfI7qAxCJKe/heUVVl/bxunz/agISkdDq1D5eB7FqAGZ2G/AfgdPA/wX+k7u/0mO7Z4HXgFlgJmz1RESKpSwvWEk4cZuAHgFuaS0L+VXgFuDzAdte5u6nAv4mIiVQhOkLJDmxAoC7H+j4eIjmgu8iUmF1aR+vgyQ7gT8G3BfwNwcOmJkD33b33UE7MbPtwHaAkZGRBJMnImXQufbw2mULVdtIUd8AYGY/Apb1+NOt7r6vtc2twAxwd8BuLnX3E2b2TuARM3va3X/Sa8NWcNgNzWGgIc5BRCqie+3hecNGo+GVHnGUp74BwN0/NNffzewmYCvwJx7wUoG7n2j9/wUzewDYBPQMACJSX91rD8/MNrOUok7pnIYs30GIOwroCpqdvh9w99cDtnkbMOTur7V+vhzYGee4IlJN3WsPzxs2vOG1GXGU9XsWcfsAbgfOodmsA3DI3T9pZhcAd7j7VcAfAg+0/j4PuMfd/zHmcUWkgtprD9e1DyDrhWzijgJaE/D7E8BVrZ+PA++NcxwRqY/22sNtdcj427J+z0JTQYiIFETW71kUejI4M3sRmIy5myVAXV5A07lWT13OE3SuSVnp7kvDbFjoAJAEMztcl6kndK7VU5fzBJ1rHjQZnIhITSkAiIjUVB0CQOC0ExWkc62eupwn6FwzV/k+ABER6a0ONQAREemhFgHAzP7azH5uZk+Y2YHWm8qVY2a3mdnTrXN9wMzekXea0mJm15vZUTNrmFnuoynSYGZXmNkzZjZhZl/IOz1pMbO7zOwFMzuSd1rSZmYrzOygmR1r3b+fyTM9tQgAwG3u/h53fx/wILAj7wSl5BFgvbu/B/gFzQV6quoIcA0VnVTQzIaBXcCVwMXAh83s4nxTlZq/B67IOxEZmQE+5+7vBrYAN+f5vdYiALj7bzs+vo3m+gSV4+4H3H2m9fEQsDzP9KTJ3Y+5+zN5pyNFm4AJdz/u7qeBe4Grc05TKlpTw7+cdzqy4O4n3X289fNrwDHgwrzSU5upIMzsK8BfAq8Cl+WcnCzMtUCPFN+FwPMdn6eAzTmlRVJgZquA9wOP5ZWGygSAfgvXuPutwK1mdgvwaeBLmSYwIQkt0FMKYc61wqzH7ypZc60jM3s7sAf4bFcLRaYqEwD6LVzT4R7gHyhpAEhigZ6yiPCdVtEUsKLj83LgRE5pkQSZ2Xyamf/d7r4317QUOY9YsmSJr1q1Ku9kiIiUxtjY2Kmwk8EVugawatUqDh8+nHcyRAovy2UEpdjMLPQMyoUOACLSX9bLCEp11GIYqEiV9VpGUCSM2AEgzJttZvZBM3u19SbuE2ZW1RexRDLXXkZw2KjN4umSjCSagNpvto2b2UJgzMwecfenurZ71N23JnA8EemQ9TKCUh2xA4C7nwROtn5+zczab7Z1BwARScnGlYuU8UtkifYB9Hmz7RIz+5mZPWxm65I8roiIRJfYKKA+b7aN01yo+F/M7CrgB8BFAfvZDmwHGBkZSSp5IiLSJZEaQL8329z9t+7+L62fHwLmm9mSXvty993uPuruo0uXhnqXQUSkMsYmp9l1cIKxyenUjxW7BmBmBtwJHHP3rwVsswz4jbu7mW2iGXg0Vk1EpEPW73Qk0QR0KfBR4Ekze6L1uy8CIwDu/i3gOuBTZjYDvAFsK/s8NSIiSev1TkehA4C7/xO9Zy7s3OZ24Pa4xxKR7Gh6iey13+k4M9PI5J0OTQUhImfR9BL5yPqdDgUAETlL0PQSqhGkL8t3OhQAROZQ12aQ7qaIRecuiFwjKOK1K2Ka8qQAIBKgzs0g3U0RUTsni3jtipimvCkAiATIekRG0XQ3RUTpnCzitStimvKmACASIOsRGVkYtAlk48pF7Ni6joePnOTK9ef3/bdFvHZFTFPeCr0k5OjoqGtFMMnTIBlmUduZ4zSB9Pq3MHencBGvQxHTlDQzG3P30TDbqgYguSr6Axl1REa/TDar8+11nDhNIN3/du/4FHvGp+YMJkWcobSIacqTAoDkpsidcmOT0+wdn8KBazcsHzij7Mxkszrf7uPs2LqO6ddPs+jcBQM3gXQ3nzioPb0CFAAkN0XtlBubnObD/6uZgQLcf/h5vrf9klBpm6udOavz7TzO6TMNduw7QsOdecNDfOCPlvLOhedwTYSgBmePCgLYOz6VSHt60WuBVaYAILkpaqfcoeMvcaaV+QOcmfXQmfVcb3Jmdb6dxzEzGu7NYDDT4EdP/YZz5g9xzYblkffb3XySxBurRa4F1oECgOSmqEsZblm9mPnzht6sAcwftkiZdVA7c1bn23mcRecuYOeDR/ndmQYOOMnVPpJoTy9qLbAuFADkLFlWyYvYKbdx5SK+95+3DNQHEGbf3ftK43p3HmftsoXsHZ/i+4efZ7bhgbWPPJpiiloLrAsNA5W3qGqVPMnMLel9JX29g9I3V7rz/N7VB5AsDQPNSBVv3CpWyccmp/nw7p9yZtYZHoIb/t1I5E7Qzn0lmVEmdb3b92K7yadX+uaqbcVNR5xnoYi1wLpQABhQVUvKVayS7xmf4vRss6Y704C7H3uOPeNTA31nSc+SmcT17rwXh8yYbXjktv6w6eiV0Vf1WaiDRAKAmV0BfAMYBu5w97/p+vs5wHeAjTSXgrzB3Z9N4th5qWJJGaK/8l8E/UqfvVYrGvQ7S2KWzE5JdAx33ovgDA8Z7sFt/YOmIyijr+qzUAdJrAk8DOwC/hSYAh43s/3u/lTHZh8Hpt19jZltA74K3BD32HmqYkkZmg95uwnh8WdfZu2yhYV+mDszpXlDxvWjK85q3rlmw3K+P9Ycs+40F6Ruf2dRmy7izpIZtM8417j7Xmy/+DXIfD9zbR90rlV9FuogiRrAJmDC3Y8DmNm9wNVAZwC4Gvhy6+f7gdvNzMq8LnBRhzDGVbbS3Fteepp17unRvNMe1dNuI29njsBApfc4s2SmIat7MSijr+qzUAdJBIALgec7Pk8Bm4O2cfcZM3sVWAycSuD4Z8mqc7aKnVdlK82109tvnHuv72rXwYnfB48YpfciZH5h78W4nbVB51rFZ6EOkggAvZpYu0v2YbZpbmi2HdgOMDIyEjkx6pCKrjtTSCNDSysot9O7Z3yK+8emmJ0NH7gWnbug1W4ODW9+HjQNZbjHkng2Bj3XKo6Yq4IkAsAUsKLj83LgRMA2U2Y2DzgPeLnXztx9N7Abmu8BRE1M2Zow8haUKSR5zdIOyu30XrtheaRMZvr10xi82S8w/frpxNJURHk9GyqUFddQAvt4HLjIzN5lZguAbcD+rm32Aze1fr4O+HFa7f/tJoFhoxRNGHkLGtZYtmNAMxDcfNma0JnLltWLOWd+816ZN2yceOUNxianU0nb2OQ0uw5OpLb/MPJ6NrL6/iW62DWAVpv+p4Ef0hwGepe7HzWzncBhd98P3Al818wmaJb8t8U9bpCitMmWRWeb//DQ7zPBJK9bUfsVupuPvvfPg78fMJe8SsDdzS5JPRtRm3OK+v2LpoIQmg90OxOcmU0nk+rONIrUJrzr4AR/e+AZGg7DBn91+VpuvmxNafbfS1pBZ9D9Fun7rjpNBSGRtF/mmZlNr324s18h6xJxv8wn7RJq0P7TzBTTau8fdL9l6SivGwUAAbKtpmfZGRkm2GTRbHjNhuVY6//tGlCaQXDL6sXMG2417Q0n8304BbvsAAAF/UlEQVSOTU7z61feYN7wUKTRVlJcCgACDJ4JDlKKLWKwSauE2s7of3em2cey7oLzsps+od28m0Azb/eEets2DT6hnhSHAoC8KWomOGgpNmywSaKJJO8OyEPHX3rzJbWZhrNj3xHWLluYeroOHX+JmdakcLON8CuaBemeUM9BmX8FKADIwOKUYvsFm6DgEnfunqQzrTD9C8NDxkzrjbOGNzPjmy9b0zNdSfULJB1gut/k7PVmp5SPAoAMLM1SbNDY8STm7klK2P6FnVevf3Nh9gVdc+h0bp9kv0DSga9zQr358wZbU1iKRwFABpZm6bpXcCnaW95h03Pj5hHWLlvY9zolfX5JBr7OCfU0lLM6FAAklrRK10HBpUgvFEWpAYW5Tnn3V/SjoZzVoxfBpFSK9kJR0umJs7+iXRvJR5QXwRQAREqiqIu6S7HoTWCRiumXwRetf0TKIYnZQEUkZf1m1NQsuDII1QBESqBfB7FmwZVBKACIlMDGlYvYsXUdDx85yZXrz890OgupLgUAkRIYm5xm54NHOT3T4PFnX2btsoXK7CW2WH0AZnabmT1tZj83swfM7B0B2z1rZk+a2RNmpmE9IhFpVS1JQ9xO4EeA9e7+HuAXwC1zbHuZu78v7PAkEfk9dfJKGmI1Abn7gY6Ph2iu9ysiCVMnr6QhyT6AjwH3BfzNgQNm5sC33X13gsetHL3RWQ1JL4OpTl5JWt8AYGY/Apb1+NOt7r6vtc2twAxwd8BuLnX3E2b2TuARM3va3X8ScLztwHaAkZGREKdQLXqjsxq6v8cdW9e92Ymr71WKom8fgLt/yN3X9/ivnfnfBGwFPuIB80q4+4nW/18AHgA2zXG83e4+6u6jS5cuHeScSk2dfdXQ/T0+fOSkvlcpnLijgK4APg/8ubu/HrDN28xsYftn4HLgSJzjVpk6+6qh+3u8cv35b34eHjJOvPIGY5PTeSdTai7WZHBmNgGcA7SLM4fc/ZNmdgFwh7tfZWaraZb6odnkdI+7fyXM/us6GZz6AKqhVx/AnvEp7h+bYmZWTUGSjswmg3P3NQG/PwFc1fr5OPDeOMepG3X2VUP399heDH5mVpO2STFoMjiRDKmJT4pEU0GIZEjj+aVICr0gjJm9CEzG3M0S4FQCySmSKp4TVPO8dE7lUZXzWunuoYZQFjoAJMHMDldt+okqnhNU87x0TuVR1fOai/oARERqSgFARKSm6hAAqjjvUBXPCap5Xjqn8qjqeQWqfB+AiIj0VocagIiI9FCLAGBmf91atewJMzvQmqqi1MKuxlYmZna9mR01s4aZlX40hpldYWbPmNmEmX0h7/TEZWZ3mdkLZlaZubzMbIWZHTSzY6177zN5pylLtQgAwG3u/h53fx/wILAj7wQlIMpqbGVxBLgG6DlVeJmY2TCwC7gSuBj4sJldnG+qYvt74Iq8E5GwGeBz7v5uYAtwcwW+p9BqEQDc/bcdH99Gc4GaUnP3A+4+0/p4CFieZ3qS4O7H3P2ZvNORkE3AhLsfd/fTwL3A1TmnKZbWGh4v552OJLn7SXcfb/38GnAMuDDfVGWnNlNBmNlXgL8EXgUuyzk5SZtrNTbJx4XA8x2fp4DNOaVFQjCzVcD7gcfyTUl2KhMA+q1c5u63Area2S3Ap4EvZZrAASS0GluhhDmnirAevyt9zbOqzOztwB7gs10tBpVWmQDg7h8Kuek9wD9QggDQ75w6VmP7k6DV2IomwvdUdlPAio7Py4ETOaVF5mBm82lm/ne7+96805OlWvQBmNlFHR//HHg6r7QkJcxqbJKrx4GLzOxdZrYA2AbszzlN0sXMDLgTOObuX8s7PVmrxYtgZrYHWAs0aM4u+kl3/3W+qYonaDW2HJMUm5n9BfBNYCnwCvCEu/9ZvqkanJldBXwdGAbuCrsSXlGZ2feAD9KcNfM3wJfc/c5cExWTmf0x8CjwJM38AeCL7v5QfqnKTi0CgIiInK0WTUAiInI2BQARkZpSABARqSkFABGRmlIAEBGpKQUAEZGaUgAQEakpBQARkZr6/8p8FmJJdAQsAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.clf\n", "for i in np.arange(0,3):\n", " plt.subplot(3,1,i+1)\n", " plt.plot(Ar[:,i], y, '.')\n", " plt.axis('tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Linear Regression\n", "-----------------\n", "We look for a linear relationship\n", " $ y_i \\approx \\dotp{x}{a_i} $\n", "written in matrix format\n", " $ y= A x $\n", "where the rows of $A \\in \\RR^{n \\times p}$ stores the features $a_i \\in \\RR^p$.\n", "\n", "\n", "Since here $n > p$, this is an over-determined system, which can\n", "solved in the least square sense\n", " $$ \\umin{ x } \\norm{Ax-y}^2 $$\n", "whose solution is given using the Moore-Penrose pseudo-inverse\n", " $$ x = (A^\\top A)^{-1} A^\\top y $$\n", "\n", "\n", "Compute the least square solution." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "x = np.linalg.solve( A.transpose().dot(A), A.transpose().dot(y) )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Prediction (along 1st eigenvector)." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAD8CAYAAABjAo9vAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzsnXd4XOWV/z93unqX1SVLtty7sU0x3fTQQgskgQ2QBJINm2SzySYkm4Sw2WUhCeGXRhoQTBJaEgwhQEwHF2xj3G3JstXrSBq1mdGU+/vjnZFG8nSNNNLo/TyPH43Gd+591c6c+33P+R5FVVUkEolEkjho4r0AiUQikcQWGdglEokkwZCBXSKRSBIMGdglEokkwZCBXSKRSBIMGdglEokkwZCBXSKRSBIMGdglEokkwZCBXSKRSBIMXTwumpubq1ZUVMTj0hKJRDJj2b17d5eqqnmhjotLYK+oqGDXrl3xuLREIpHMWBRFqQ/nOCnFSCQSSYIhA7tEIpEkGDKwSyQSSYIRF43dHw6Hg6amJmw2W7yXMmmYTCZKSkrQ6/XxXopEIklgpk1gb2pqIi0tjYqKChRFifdyYo6qqpjNZpqampg7d268lyORSBKYaSPF2Gw2cnJyEjKoAyiKQk5OTkLfkUgkkunBtAnsQMIGdS+J/vXNehp3wjsPiY8SSRyZNlKMRDKjadwJj18BTgfojHDrC1C6Lt6rksxSplXGLpHMWE6+A0474AbXsPhcIokTMrBLJLGgYiMonj8nrUF8LpHEiQkHdkVRTIqi7FQU5SNFUQ4qivK9WCwsHHbX9/CzN2rZXd8Tk/Pt37+fM888c+TzPXv2cP7558fk3JIEp3QdZFaAopUyjCTuxEJjtwPnq6o6oCiKHnhXUZSXVVXdHu0Jv7flIIda+oIe029zcKStH7cKGgUWFqSRZgpcH764KJ3/+tiSoOdcsmQJx48fx+VyodVq+epXv8pDDz0U1dcgmYW4HaC6oHBFvFcimeVMOGNXBQOeT/Wef+pEzxuKPpsTt+cqblV8PlE0Gg1Llizh4MGDPPfcc5SVlbF69Wrq6uq4/fbbue666yZ8DUkCY+0VH+398V2HZNYTk6oYRVG0wG5gHvAzVVV3TOR8oTJrEDLMLb/ZjsPpRq/T8PBNq1hTnjWRywKwYcMG3nvvPX7+85/zj3/8A4DKykp++9vfysAuCYzLCcOegG7vg5Tc+K5HMquJSWBXVdUFrFQUJRP4i6IoS1VVPeB7jKIonwU+C1BWVjbha64pz2LzHRvYXmdmQ2VOTII6iMB+22238YUvfIHi4uKYnFMyC7BZfB4HlxElkskmpnXsqqr2KoryJnAJcGDc/z0KPAqwdu3amEg1a8qzYhbQvSxcuBCj0cjXv/71mJ5XkuDYekcfSylGEmdiURWT58nUURQlCbgQODLR88aLhx9+mB/+8IekpKSMPGc2m/n85z/Phx9+yA9/+MM4rk4ybbH6BnaZsUviSywy9kLgcY/OrgGeVlX1xRicd0o5fvw4l19+OWeeeSa33nrrmP/Lycnhl7/8ZZxWJpkR2HxKbmXGLokzEw7sqqruA1bFYC1xpaqqiiNHZuyNhiTeWKUUI5k+yM5TiSQW+GrsvhupEkkckIFdIokF3oxd0cqMXRJ3pLujRBILbL2gM4EhVW6eSuKODOwSSSyw9oIpE/RJMmOXxB0Z2CWSWGDrhaRM4cUuG5QkcUYGdokkFngzdq1eZuyzjcadwn+/YuO0cfWUgV0iiQW2XkgvFpunvfXxXo1kqvBOznI5QDt9JmfJqphx/OIXv+Duu+8e+fzee+/lU5/6VBxXJJkRWC0iYzemyc3T2YR3cpY6vSZnycA+jltvvZUtW7bQ29vLiy++yEsvvcSjjz4a72VJpjtejd2ULqWY2UTFRsAzpH4aTc6SgX0cycnJfOITn+Bb3/oWX/rSl3j22WdJSkrye+yJEyc455xzADFtSVEUzGYzLpeLpUuXMjQ0NJVLl8QLt0tk6d6M3dYH6qSPJJBMB0rXQUqeeHz1z6eFDAMzXWOfpE2Lz3zmMyxatIi//e1vVFVVBTwuMzOT/n6RnT3yyCNs2LCBnp4e3nvvPTZt2kRycnLM1iSZxng7TZMyPbflLnBYwSB//rOC4UHxUT99ft7TM7C//A1o2x/8GHsftB8Q2paigTlLwZge+PiCZXDp/4R1+e9///vk5eXhdI5OZaqrq+P+++/HYrHw7LPPApCRkcHQ0BBms5nW1lbOPPNMenp6ePTRR/nRj34U1rUkCYDVYwBmygSH5y7N3icD+2zAaQeHJ7B3HYMFl8R3PR5mrhRjs4igDuJjjPw5HnroIWw2G08//TQPP/zwyPPeKUq+aDTi2/frX/+a22+/nbS0NPbt24fL5aK6ujom65HMALw+MUmZo8mF1NlnB0Pdo4+7jsZvHeOYnhl7OJl14054/EqxE601wMd/M2E55vXXX+f3v/8927ZtIy0tjb6+Pvbu3cvKlSsDvkaj0fDCCy/w9ttv09TUxIMPPsj//E94dwaSBMHrE2PKFHePIJuUZgtW38BeE791jGPmZuyl60TN6PnfikntaENDA3fccQfPPPMMaWlpANxzzz385Cc/Cfo6g8HApZdeik6nIz09ncHBQa644ooJrUUywxiTsYvfHVnyOEvwynDZVdB5dNpsms/cwA4imG/8akw2TsvKyqirq2PRokUjz91222089thjQOApSnv37uXb3/42ALfffjsNDQ1otdoJr0cyg/DN2KUUM7vwSjFlG8Qb/JA5vuvxMD2lmGmInKIkCYhvxu4aFo9lxj478Eoxpeth72axgZqSG981MdMzdolkOmDtFe3k+iTRoAQyY58t+GbsIOSYaYAM7BLJRPF2nQIYPBq73DydHVi7xZt6znzQJU2bDVQZ2CWSieJ1dgTQ6kSjipRiZgfWHkjOBo0GcucJKWYaIAO7RDJRfDN2EBuoMrDPDoZ6IClbPM6tloHdH+o0KRWaLBL965u1+Gbs4HF4lBr7rMDaLTJ2gNwF0Nsg7CTizLQJ7CaTCbPZnLDBT1VVzGYzJpMp3kuRxJrxGbspXWrss4WhbkjKEo9z5wMqmI/HdUkwjcodS0pKaGpqorOzM95LmTRMJhMlJSXxXoYk1ni92L3IjH32YO3xCeweG5Guo1CwNH5rYhoFdr1ez9y5c+O9DIkkMtwusFtO1dj72+O3JsnUoKpjpZicKkCZFpUx00aKkUhmJF7zOZPcPJ112PvB7RzdPNUnQWbZtNhAlYFdIpkIvl2nXuQUpdmBt+vUm7HDtKmMkYFdIpkIvj4xXrwau9sdnzVJpgZv12mST2DPWwBdtXH/2cvALpFMBH8ZuzENUGF4IC5LkkwRXmdH7+YpiMoYpxX6muKzJg8ysEskE8Fvxu71i5E6e0LjDezjpRiAzvjKMTKwSyQTIWDGjtTZEx1/UsxIyaMM7BLJzMVfxu51eJRNSomNd/PUV4pJzhGfz/TArihKqaIobyiKclhRlIOKotwTi4VJJDMCW68YzahPGn1ODtuYHQx1gzFDGL95URRPZUx8a9ljkbE7ga+qqroI2AB8QVGUxTE4r0Qy/fH6xCjK6HNSY58dWHvGSnBecufP/IxdVdVWVVX3eB73A4eB4omeVyKZEYz3iQE593S24Nt16kvuAhjsGN1cjQMx1dgVRakAVgE7YnleiWTaMt7ZEeTm6WxhqHvsxqmXkQ3U+MkxMQvsiqKkAs8B/6aq6impiqIon1UUZZeiKLsS2ehLMsvwl7EbUgFFbp4mOgEz9vniYxzlmJgEdkVR9IigvllV1ef9HaOq6qOqqq5VVXVtXl5eLC4rkcQffxm7RiMdHmcDvkM2fMksFxvqMzmwK4qiAL8FDquq+qOJL0kimUH4y9hBGoElOi6nx9Uz69T/0+ogu2rGSzFnAp8CzlcUZa/n32UxOK9EMr1xu4XcMj5jB0/GLgN7wuJtTPMnxUDcK2Mm7Meuquq7gBLyQIkk0bBbANV/xi6nKCU2/rpOfclbAEdeAucw6AxTty4PsvNUIokWf12nXqTGntiMWPb6kWJAVMaoLuium7o1+SADu0QSLf58YrwYpSd7QuPP2dGXOFfGyMAukURLyIxdSjEJSygpJkcGdolkZhI0Y5dSTELjb3qSL8ZUSC+OW2WMDOwSSbQEy9hNGeAYApdjatckmRqGukGjG/UF8kccK2NkYJdIoiVUxg4ya09UrN1CX1eCFATmLhAZu6pO3bo8yMAukUSLtRc0etAnn/p/0uExsbH2BN449ZI7H4b7ob91atbkgwzsEkm0eLtO/WVtMmNPbAIZgPkSx2lKMrBLJNHizyfGi0kO20horD2BN069xNHlUQZ2iSRaAvnEwGjGLrtPE5NwMva0AjCkyYxdIplRBMvY5Xi8xMbaHbjr1IuixK0yRgZ2iSRagmbs3sBumbr1SKYGhxWcttCbpyDkmE4Z2CWSmUPQjF1uniYsobpOfcmrhv6WKf89kIFdIokGtxtslsAZuz5JNLBIjT3xCNV16kucNlBlYJdIosHeB6iBM3ZFkbYCiUokGbsM7BLJDCJY16kXOUUpMfE6O4aTsWfNBUU75RuoMrBLJNEQzCfGi7TuTUy8Ukw4m6c6A2TPha6jk7umccjALpFEQzgZu0kG9oQkEikGhBwjpRiJZAYQVsaeJjZYJYmFtUf4A+lN4R2fWw3m42IA9hQhA7tEEg1haexy8zQhCafr1JfcanA7oLd+8tY0DhnYJZJoCFtjl5unCYe1J3TXqS9xMAOTgV0iiQZbr6hTN6SMPLW7voefvVHL7npP1YTM2BMTrxd7uOTOEx+nMLDrpuxKEkki4e069Vj27q7v4aZHt+F0qRj1GjbfsYE1pnRwDYPDFr4eK5n+DHXDnCXhH5+UBSn5U2otMKMy9lMyIokkXozzidleZ8bhUlEBh9PN9jqzNAJLVKzd4dWw+5JbLTN2f+yu7+ETj27D4ZsRlUdwOySRxJJxPjEbKnNGHut1GvF5r88UpdS8qV6hZDJwuz3TkyIM7HnVcOB5MSYv2Di9GDFjMnbfjGjYmxFJJPFiXMa+uHB0qPEjN60WSceIEZjcQE0Y7H2guqPL2G29MNg1Oesax4wJ7BsqczDoNGM+l0jixriMvaF7aOTxnAyjeCAdHhOPSLpOfcmdLz5OkRwzYwL7mvIsnrpzA2dU5eBWwaCdMUuXJCLjMvZ68+DI444+u3jgHY8nHR4ThyHP/l6kUswUlzzOqOi4pjyLX35qDZnJeh56bWq9FySSEbyWvSbfwD6asXf0ewK7zNgTj0gse31JLwFdkgzsgUg36fnc2VW8ebSTXSe7470cyWxkuF/orD4Z+0nzIGkmHYoC7X028aQxQ3yUGvvk07gT3nlIfJxMIvWJ8aLRiHp2GdgDc+sZ5eSmGnjo1akfOSWR+Os6rTcPUZmXSnaywU/GLgP7pHL4RfjtRfD6D+DxKyc3uHsteyPV2GFKSx5nZGBPNui4+9x5bKsz837t1OwySyQj+PGJqe8epCInmfx0E539noxdZwCdSWrsk82eJwBV3EW5huHkO5N3LWs3oAT3CApE7gLobYA3/2fS7yxiEtgVRfmdoigdiqIciMX5wuHm9WUUpJt48NWjqKo6VZeVSE7J2Iedbpp7rJRnJ5OfZhzN2EHaCkwFQ97kTgGtASo2TuK1usGUARpt5K/11q+/9b+TfmcRq4z9MeCSGJ0rLEx6Lf96wTz2NPTy5tHOqby0ZLYzLmNv6hnCrUJ5Tgr5acZRjR0mbAT2bm0XD75yVHZbB2J4ENr2i8e51XDrC1C6bvKuF03XqRdvDfsU3FnEJLCrqvo2MOU7mdevKaU0O0lm7ZKpZVzG7q2IqchNJj/dSNfAMC635/dxAhn77voebv3tTv7fG7Xc8pvtMrj748TbIkgm54iMeDKDOkTXdepl6cdFZYyinfQ7ixmpsXsx6DTcc0E1B1v6eOVgW7yXM+OQ3jtRMi5jP+mpYS/PSWFOugmXW6V7cFgcM4HAvr3OjMuTsDhkt7V/al4FQyosvQ66T4hS1MlkKEJnR1/K1os7ivO/Nel3FlMW2BVF+ayiKLsURdnV2Rk76eTqlUVU5qXwo9eOjWZJkpAI753tPPjKUZkNRoq1V2RdhlRAZOwpBi05KQby00TXaYd3A9WUEfXmqW93tU6rkd3W41FVqHkN5p4D+QvBZYf+lsm95kSkGBDBfONXJ/3OYsoCu6qqj6qqulZV1bV5ebEzRNJpNXz5wmqOtQ/w4r5J/qEmEFsPtzPsckvvnWjwdp16NsPqzYOU56SgKAp5acKed6T7dAIZ+4qSDLx2UT+4eqk0vRtP5xGwNML8TZBdJZ4zH5/caw5NQIqZQma0FOPl8mWFLCxI48evHcPpmuRbsQRAVdUxzV0aRZHZYCSM84mpNw9RkZsMcGrGbkwHe3RzTzv67XjvQdOT9FEvN2GpeU18nL8JsivF4+66ybuec1g0p00kY58iYlXu+EdgG7BAUZQmRVFuj8V5w0WjUfjKpmpOmod4fk/zVF56RvLygTZ2nuzhUxvKqcpLIcWoY1lxRryXNXPw8YlxuVUae4YozxGTlPLTPYF9fMYexeZ+q2W0uqal1zrBRScgNa9C/hLIKIH0YtAaJzewj+ytTP87p1hVxXxCVdVCVVX1qqqWqKr621icNxI2LZ7D8pIMHt5ag93pmurLzxh6h4b5zt8OsLQ4nf/62GLuvWIxFqtDbj5Hgk/G3tJrxeFSqcgRGbtRpyUzWT9ay25KF+Vtw4OBzhaQVstoMJeBfRy2PmjYJrJ1YHejhW5jMT1Nk+ghNRSls2McSAgpBkBRFL560QKae608/UFjvJczbbnvxcP0Djl44OMr0Gk1nDM/j9LsJJ7cPnUT1Gc8Phm7t9SxLHt09umYWvYJGIG1eTL23FQjzTKwj6XuTXA7Yf5F7Dxh5qZfbWN3fxad9YcmrxAgWgOwOJAwgR3g7Pm5nFaRxSOv12JzyKx9PG8d6+S5PU18/pwqFhcJS1mNRuHmdeXsONFNTbvskAwLn4zdW+ro1dgB8tNMPn4xPlOUIqTVYiPZoGVhQRrNvbbQL5hN1LwqTNZK1/HUjgYcbpWT6hxKaWf78UlqWIzWACwOJFRg92btHf12mYGOY8Du5JvP76cqL4V/vWDemP+7YW0JBq2GzTsa4rS6GYSqCsvekYx9EKNOw5y00WHV+WlGOk8J7JG/abZarBRmmCjOTJJSjC/eMseq80CrZ9Aukrh6dQ5JyjAbCyYpqZMZe/zYUJnDWfNyeXhrDT957Zisz/bwf/84QovFygPXLceoG+tzkZNq5NJlBTy3u4mhYWecVjhDsPeD6hrTdVqek4xGMzrHMj/dREe/TXRDT8DhsdViozAjieKsJDr77fIu1Evbfhhog/mbUFWVAy2i6qgvuQyA5UmTZAxojXLIRhxIuMAOcPnyQvptTh7eWiObb4APTnbzxPZ6bj29gjXl/n8pP7mhnH67kxf2yl6AoIzrOq03D43R10Fk7A6XSs+QY0JTlFp7bRRkmCjKTAJGNfdZT62nzHHehRxrH6DVYiM31cgBq6dkd7IqY4a6QaMHQ0roYwMwVd3eCRnYve3cKrIV2+Zw8fXn9lGUkcTXLl4Q8Li15VksLEjjD9vrpe9OMHx8YtxudcSu15eRksd+W9Sbp06Xm45+G0UZJooyhcwjN1A91LwGhSsgrYA3jnYA8Nmz53LSmY1bY5i8wO7tOlWU0Mf64Har1HYM8OPXjnLDr7bx0KuT3+2tm7Qzx5ENlTloFQWXqqLXze5W7Eder6Guc5AnPrOOFGPgH7eiKNyyoZxv//UAext7WVU2/Uu64oJPxt7Rb8fmcFOeOz5jH+0+XZgR3eZp54AdtwoFGUmUZIo3DhnYEXJI4w7Rlg+8ebSDhQVpXLykgP/++xH6k4rJ6J6k7tOhbr8yzO76HrbXmdlQmcPqskyaeqx81NTL/iYLHzX1cqC5jwH7WInTm3BOVjdxQgb2NeVZ3H1eFY+8Xsv9Vy+bta3YB1ss/PKtOq5bU8LZ1aFtHK5ZVcz//P0wT25vkIE9ED4Z+0hFzLiMfc5Ixm4HoycQRJixt3iqYAozTBRkmFAUWcsOwPHXRV/A/IvosznYdbKHOzZWUpadTLpJR4umkIzuE5NzbWvvKRunu+t7uPnX2xl2ulEUSDFo6fds5hq0GhYVpnH1qiKWl2Si12j4z7/sw+F0T3rCmZCBHeCmdWU88notvVZHvJcSF5wuN//x7D6yUwx8+/LFYb0m1ajj6lXFPLu7iW9fsYjMZMMkr3IG4pOxNzSJGvbyUzR2kbG399nEQAZDasQau1dPn2s7iGHbHs5PMdHcUzLBxScANa+JBqHiNbx3sAOnW+W8BXkoisLykkyOduWxqHuvqJyJUDIJibV71LrAw7bjXdidwsZEVaEiN5UbTytlRUkmCwrSMOjGqt1lOckj2f1kJpwJqbEDFGcmUZadzLbjs1Nf//U7JzjY0sd9Vy0hIzl8n5FPbijH7nTz7O6mSVxdhEzVoOJwGJex6zTKiAbuJcmgJc2o8yl5TItYimm1WFmtHKN8yw2w9Qf83Pldkjt2x+IrmLm43SKwz7sQNFrePNpJmlHHak+AXF6SwYcD2eAYgoH22F/fj2WvXitCqEYBk17Dd69cwic3lLOsJOOUoA5CTfjCefMmXUVI2MAOcHplDjtOmGedne8LHzXz4KtH2VCZzSVLCyN67aLCdNaUZ7F5RwPu6fB9a9wJv78Mtt43+YOKw8Hmsew1plFvHqI0Oxmd9tQ/o7x0o48RWOQOj60WG2fpj4ghErjR4aTEsicGX8AMpvVDMQZv/kWoqsqbxzrYWJ07ElyXl2RQ554jjo21y6Oq+rXsfeNoB7kpBr68qZrNd2yYNrJvYgf2qhz6bU4OtcyeYcK7TnZzz5/24nKrfNjQG9XO+yc3lHGia5D3p8Pdzsl3wO0A1MkfVBwO1l7hsa4onDQPUj5OX/cyJ83kYwQW+Xi8NouNutRVKB7jXlXR8drQ/OnxZhsvav4JKFB1AYdb+2nvs3Nudf7Ify8vyeSk6gnssa6MGR4Uv38+m6cHmi1sr+vms+dU8q/nz582QR1mQWAH2FY3SQ0L05Cfbq0ZMRJ0uqIr9bx0aSFZyfrp0b3rOz5Mq5/cQcXh4PGJUVWVBvMQ5dn+A3t+upH2CWXsVnqzloNGbIMdLbuBnc55mL2TmWYjNa9C8RpIyRkpczxnwWhRQGGGieHkIlxoYx/Yvc1JPhn77949QYpBy42nlcX2WjEgoQP7nHQTlbkps0Zn313fw7u1XWgU0CpEvfNu0mu5YW0prx1uj39TTP6i0cdX/XzyZ1qGwuMT0z04TL/dOWLXO578NCMdfXbRE2BKj3jztNViY16y1XO3ArkukZzM2sqYwS5o3g3zLwLgraOdLC5MZ0766P6GoigsLsmmRVMAsS55tI71iWmz2HjhoxauX1tKxjT0yk/owA6woSqHD072JPwADovVwZf++CHFWUk8/pl1fOWiBRPS/G5eX4bLrfLHnXH2j+mqGX08HTw6PBn7SZ8B1v7ITzNhd7rpszkjzthFc5KdapMnmKTkkWPeBagxqWWfkbNua7cCKszfhMXqYHdDD+ctPLWEd3lJJrWOPNzmGGfs4yx7n9h2Epeq8pkz58b2OjEi4QP76ZU5DNidHEhgnV1VVb7x3D7a+2w88onVbJyfN+Gd9/KcFM6pzuNPHzTgiOeborl29HHfNLA78GTs9T4DrP3h7T7t7LcJF8IINPaugWFcbpUyjUdCXHYDOmsXlUrrhDP23fU93PirbfzfTJt1W/MqpORB4UrerenC5VY5b0H+KYctL8ngpDoH1VwX1XCTgPgYgA0NO9m8o4GLFxdQFmCPJd7MrMAeRdmbV4qYtnJMDEr5ntrZwMsH2vjaxQtYWZoZ+gVh8skN5bT32dl6eBJKx8Kl6xgonl/TvmkwHcuTsdebh9AoUJKV5Pew0Vp2u8jYhwfAHZ6JV4tnwEah2/N9X3ETABv1xyacsW+vM+P0bMDaHWHswUyHUlO3C45vhXmbQKPhjaMdpJt0fn/Xl5VkcEItQOschMEY2vf6WPY+t7sJi9XBHRunZ7YOM6lBqXEnPHYZuBygM8GtW8LSW/PSjMzPT2VbnZm7zq2agoWGifk4vPUA7Puz+FxngltfiFhDPtrWz/e3HOLs6jzu3FgZ+gW+NO4UVSYVG/1e9/yF+RRlmHhye0PEZZMxo6sGsuaKjDfegV1VRzP2rkEKM5JOccr0MsYvxuRj3ZsU+o3Xu6+R7WgXWWrBMkjJZ+PwMZ7umVhgXz93VM5SgbkB7jgAqHsbnrxGdHpqjVH9fsaE5t1i83L+JtxulbeOdXJ2dZ7fMtP8NBP9yaXgQPyNpZ6a1UeFp3/Bbcrkt+8eYkVp5rSqghnPzMnYT74DLo/fgtMGezeH/dLTq3LYdbI7vpICgMMK+56Gx66AR1Z7groq/rnsEZfyWYddfPGpPaSZ9Dx0/Yox1rEhadwJj10OW38QsD5cq1H4xLoy3q3t4kRX5KPdYkJXDeTOh/QisMQ5sA8PCMtej8YeSF8Hn6HW3owdwtbZvbNOU20tkFkmOijLz2CV+yAtvUMT+hK8m42nV2aTpNfy1M6GwKZvu34nphSp7viWmta8KnoHqs7jUGsfnf12zvUjw3hJLqgWD2JZGWPtBkMqW2t6OWke4o6z5qLEurM1hsycwF6xUWS1igZQYPdj8Np3wGkP+dLTK3MYGnaxr6l30pfpl9aP4KV/h4cWwPN3gqURzv823LRZfE0g/niyIru1+/6LB6ntHOAnN64kzxNIwmKoG/7+7yPNLzgDv6ncuK4UnUZhczxKH90uUd2QOx/SS+Kfsft0ndabBwPq6yDsGZINWo9fTISBvdeKSa9B19cAmeXiyfIzyXF14u6Z2Gb28c4BAL68aQHfvHwR79Z28UygLuPBjtHHqhuK107o2lFT8yqUroekLN70ljkG8T4qqajGqWqwddQGPCZiPAZgv3mnjuLMJC5dWhC7c08CM0eKKV0nbgW8IMpoAAAgAElEQVRPvgNFa+DQX+C9h8Vu+TW/goKlAV+63kdnD+RHHlMad4rWZ6cVTrwtArvWCIuvhNWfhvKzQON5T711Cxz6G+x5Al6/D+aeAymhSxS3fNTCH3c2cve5VZw1Pze8dakq7H8W/vENcWur0YmMDDdo/PvC5KeZuHhJAX/c2UCaScdZ8/Om7hbU0ijuznLmizef+nen5rqB8PjEDGrT6BlynGL+5YuiKKOzTyMcj9faZ6M43YjS2wiLrhRPlp8BwEL7foaGnSQbovvTre0Qgb0qL4W15Vls2dvC/S8d5twFeSP7AoBoyGneA4uuAr1J3Glu/zmUnwnaKQwb/W3i7+eC7wDwxtFOlhVnBE1klpTm0qjmkdZyBFPAoyLE2o1Vl86OE91867JFfmWg6cT0Xt14StcJu86qc+FjD8Mn/gwDHfDr80SQD7A5lZ1iYGFBGtumwpfdK3G8/QC8/wjY+uHS/4OvHoGP/wbmnj0a1L1f08X3wyefE1LDn24GR/Da8cbuIb75/H5WlWXy5U3V4a2rpx42XwfP3wFZ5fC5t+FfXoZzviEC55v/DU27/L70tLlZDA67+Mk/p3hwSZcn48qtFlKMzQL2gam5tj88GXv7sAgX4wdsjGdk9mmE4/HaLDYWpg2JGvZMT/NL/mKG9ems0xwZcX6MhuOdg2Ql68lJNaLRKPzw48uwOlx874VDYw+s/adITNbdAdc+Cpc/CMf+AS9/LbbVJqGo/af4OP8ieoeG+bChh/MWBHcqXVacQb1aICpjYsVQN/VWk2hIWlcau/NOEjMrsI9nwSVw9zbRtPDad+Dxj4kA5gehs/dgd07yeLGT73gkDoRstOqTsP6zAWuwR2qK3fPh2l9B43b4613C8MgPDpebL/7xQ1DgpzetGvHJCIjLKd5gfr4BGrbDpQ/A7a+JO5zSdXDef8K//B1S58Dm60eDqQ8DNrG3MeWDS7qOiY9eKQbiW/LoydgbreLuJpjGDsIvprPf7jNFyRLWZVp7rSz01rB7pRiNhsGCdazTHJlQZczxjgGq8lJHPq/KS+WeC+bz0v5WXj3YNnrg4S2QnANl4k6B0+6AM/9N6O7v/jjq60dMzauQVghzlvJ2TRduFc4Joq8DZKUYMBuLSR1qjNmbkHOwm5p+PTeeVka6afo1JI1nZgd2gJRcuPFJuPoX0LoPfnEmfLgZGnaMKdM6vTIHu9PN3oZJ1tkrNoLH3wOtEeYGboHfXd/DTY96Jqr8eju7U8+FC78HB58XsowfHnz1KB819vK/H19OaYB29hFa9sJvzodX7xV3Cl/YAes/J6xkfUnNh089L96InrxG3P76cHpVLt592SkdXGKuEQ0hyTkiYwfoi6PrpCdjPzko/rDLQnz/hV9MZFOUXG6V9n47lTpPYM8qH/k/TcWZVGra6G6LXmc/3jnAvPzUMc999uxKFhWm8+2/HaDP5hCy17FXYMFlY2WXC/4Lll4HW78npJnJxuWA42/A/E2gKLx5pIPMZH1YJb3urEqS3IMwFJskxDHQRS+p/MuZFTE532Qz8wM7iKqBlTfDXe9B4XL4293w+0vg9dGKj/Vzc1AUJl+OKVotAmT5mSHLw17e34rDpeJWweZ0c+cTu/j3lnOpKbkO3v0Rrl2PjTn+rWOd/OqtOm5eX8Zly4KUH9a9Bb+7BB49D/pa4frH4BN/gowgft7ZlXDLMzBohievG5NdrinP4rOeUsoHPr586jT2rhohEykKZBSL5+JZGePJ2Gv6dMxJN4bUufPTjQwOuxhQPG8AYWjsXQN2XG6VYsVTg+3zM0upPhsAXdO2KBYPPYPDmAeHx2TsIKxn//fjy+jst/PDvx8R+0L2vlF934tGA1f/XCQvf71b/J5NJrsfF+vImjtS5nhOdR7aMKq/UguFRNnXfGTCyxi02jE6+8nJKwidTE0TEiOwe8kqh1tfFI0MqntMmVZGsp4lRemT36hkaRAlcSs+EbLmN9UkAoMC6DQKlbkpvHG0k0tqr+It13LULV/mvof/H/e/dIgfv3aMu57cTVlWMt+5IsDgjP42ePHL8MRV0LBNBMRrfgFLrglv6EDxarjxCeg8DH/+5JiKo5vXi8yxZ2gKB5d01Qh9HcTtOMRXirH2gqKhpufU4Rr+GCl5tGoBJayM3dtZmudsE/KYfrQBSle0kiFMZHV+ENXyaz0VMeMzdhCt+LefNZc/7mygfcczYEiDynNOPYnOKO6Qc+aJ35H2g1GtJSSNO+EfXxeP3/pfju95HfPgMOeG0Ne9FMwVfyPNdRNf35Ydh9Ggsmze9G1IGk9iBXYQWcU5/zHiiodGO+IIeHplDh829GJzTKLO7vWBzpkX8lDrsAudRuHLm6r58+dO59m7zmDXvRfyxtcuZODK39CVXMlXeu/nvfff5uGtNQwNu2jvt3HQ1x7B5YSjL8Mfb4YfLRYaKD66YutHka1/3oVw1c9E1vaXz49o/WU5yZRmJ/Fu7RQ5Zdr6YKANcueJfYh3GnEk5cZXirEJy94T3daAdr2+jMw+HRgWG6hhGIF5m5My7a2j+roXrY5jhsWU9e+NfO0IfR04JWP38pVNC5ibZcRY+zKu+ReJIO6PpExxd2dIEfsyk3EXdeJtT8UW4HLQsX8rigJnzw8vsM+rXoxLVehvPjahZbjcKi/sEG8OpcUzZ4JV4gV2EJnyp1+AlHzxB5W3EBAbqMMuN3sms6rD620SRmA/1NrHgoI0vnTBqJezoiiU5SRz+WkLKPj8C6SkZvDn1B9RoIg1j1jxdtfB1u/Dj5fAH2+Cpg/gjC/Cx38PuiTR0KE1RGdzu+Im2PR9ofW/8s2RDaiz5uWy/bh5agzVzML8q9ZdxE2PbuPBV45yZCgdS3scrYStvbhNYoh1RW7ojH3M7FNTelgZu7c5yTTYPFoR40NT+mrKnCdHW9wjoLZjAKNOQ3EAG4Qkg5afnmkjkz5eGA5Rs55ZKoK7rU8E9zA3hsPGW0mEBrQGXrBUsrwkk5zU8Po10lJSaNfMQZ2gy+M/D7dj7fXIYtPBhC5MEjOwA1ScKXRlazf887sAnFaRjVajTK7Obj4ufilTgteWq6rKwZY+lhSlBz4ooxhu/jPJrn6eMvyAf9c9zT365/nUsX+Fn64S1QmFK+DGzfCVQyIYL7tWaPvnf2tiLeBnfAk23A07fgHv/xSAM+fl0m93sq85xn/E/vC4Ou7oz8bhUlGBFnc2zp74Zux2ndgIjShj926ghqGxt1qsJOlA09/kN7Bb8k8DwFX/fiQrB8TGaWVealCNelnf2zgUA98+WMCBUD/ngmVCuus6Kvay3nogdp4yLXtAnwznfp2+G57j6fbCkGWO4+lLLiVtaGINXb995wRVqZ4qt6TpayEwnsQN7AAla2D9XbDrt1D/PmkmPUuLMyZXZzfXQk5VSE27rc9G9+AwS4oygp+vcAXa877JXKWVL+j+ypc0z5LeXwfn3Qv/dgBueRoWXSGGUHjx1vtPxNdDUeCi+2HJtaKU9PX7Ob/zSVYrx3h/KuSYrhpQtBjzRv192sgh09ER5EWTjLWXQcUT2MPQ2NOTdBh0mtFa9rACu43l6UMobqffwK6UrMGu6rHVRN7eX9s5QFVekHW73aLMcd6FJKWk843n94W+O6s6H876MrTuhTf+OzbjC+39omlv+Q1w7jd4fbACVSWojYA/1Ky5lLhbabdEVx76UWMvO092c8V8z12CDOzTiPO/JbTKF/4VHDZOr8zho6Zehoadk3O97uPhyTAenXxxsIzdi3sYxTskTdHAujvhnK+NVopMFhoNXPNLKFwJbz9A8rs/5Cnjf9N+6O3JvS6IGvbsudSY7WgVKEg3YtHnoXX0Rzy0ImbYerEgMvVw7Fq93aejGXtoKabNYmNxkqckN6v8lP8vzM7gQ3UeNESWsdscLpp6rH43Tkdo2QP9LeiXXsX3r1zCgeY+vrflUGjvdn0SogQgRuMLD/5FDKRe+UkA3jzaQU6KgeXFIZKgcaQWLSBdGeJw3cmolvF/rxzFoNVQavI0hEkpZhphSBFdquZaePsBTq/KweFS2XVyEnR2hw16GyE7tIvkwZY+FEUMjw7JiE+O1lMbf3YMFhsmOiNUi6k1qG70uMhs3zl5b4xezLWoOfN4aV8rG6vz+M/LFlFr89Qvx6syxtpLlzOZ7BRD2FNz5qSbRjX2MN6QWi025hs9d5TjN0+B4qwkdrgXktx1IKI3uLrOQVQ18MYpAIdfEEUH1Rdz6bJC1s/N4g/b60WfRbCO44qNoxutijLx8YUfbhbVUCVrcfm4OUZkcgfkl4vKmNYoKmNeOdjGu7VdOFxuXtl1GFXRCF/9GUJMAruiKJcoinJUUZRaRVG+EYtzxpSq82DlLfDew6wzNaPTKJPTPdlzAlDDytgPtlioyEkh1RiG74bXJ2eiunm0zNsk3lQAtHrecy7kg8l4Y/TidoH5OB3Gcpp6rFyxvIiLlxTQa/DcisfDDExVwdZL27ApLH3dy6hfTOiM3eVWae+zeQZsKH77Dooyk9jpXoiCOyLJ43iQUkdAfH2HtwivIo/ksNrjq+RWQ3Qcl64Tnkf5S0TikR+gHDcczMdF9/XKm0FR2NfUS8+QI+wyR1+M+eLvsK8l8sqYn70hiiBUIF3tx6ZLH2sFMs2Z8EoVRdECPwMuBRYDn1AUZQI/2Unioh9AUhZJL9/DyuLUydlAHSl1DO2Lfqi1j8XhZOteYqGbR0vpOtERC7jO+SYHNAt5bzJ19t4GcNn5oD8bg1bDpsVzMOm1LFsk5p9azXEY1zc8CG4nTTZjwAHW/shPM4atsZsH7DjdKgVqh6jb91NumGrUcdywWAxsrn8v7HXUdgygKDA3UDVPxyFRabXoYyNPXbhoDnqtyJIVRQnecVy6Dq78KTgGYe9TYa/rFPZuFnLjcjFc5I2jnWgiKHMcQ1Y5bjTQXRfYmtgPjd1DHGy2oNUoaBXIVgZQkmaODAOxydjXAbWqqtapqjoM/Am4KgbnjS3J2cInpXUvX0x+lX1NFgbsMZYTvKWOIaQYi9VBY7c1PH19urD+c2DKxNB1iDXlWbxbM4mB3VMRs6U5lbOrc0dkj4vWr8StKtTUTKw2OSo8XadNVkNQu97x5Keb6Lc5cehThVOlczjgsS2eUsccR5vfjVMvWVlZnDRWQwSVMcc7ByjNSsak9z8YhMNbAAUWXj7y1JryLP702dNZWpSOy63icocIjiVroeQ0UUkVwOsoKG4X7P2j6KVIFw1pbx7tYGVpJlkp/t1Hg6IzMpRUwBxnc0T+Oj/dWoNWq+GXt6zhKxct4KxiLab0MB1UpwmxCOzFQKPP502e56YfS66BBZexsenXFKttfHAy8lrgoJhrxcSbEFNyvBunQUsdpxs6g6i+OfIS51Slcai1D/NAaC/8qPDUsO/sz+Hy5aPWCcvL8+jRZNLeFEOf7XDx+MT0qikhzb988Xaf9que2vEgckybp3ojxdoSNLAXZ5rYzWIxWcgRXsCq7QhREXPoBSg7/ZSJQ2vKs/jT506nLCeZL/95r/CSCcaGu0TmX/NqWOsaQ90b0N8iZFOgs9/OviaL39mm4aJmVVKhtLOvKbwS3RNdgzz/YTO3rC9j05I5fOG8eaSrfTNq4xRiE9j97Wic8tauKMpnFUXZpSjKrs7OGM4ijARFgcsfQqPT8z/637A91nJCd11YG6eHWiOoiJlOLLkWhvu5SL8PgPcnq2y06xhD2gwGdZlcuGjOyNOKouBKLcI42EptR3gWuDHDk7FbSIk4YwfodXsDe2A5ptViQ4sL/UCowJ7Em/b5wtY3gNWyLy63yomuwcD6uvk4dBwU8wL8kGrU8ZMbV9LWZ+M7fz0Q/GKLroT0YuHdHikfbhb6/oJLAXhi20kACtKjd1VPLphPeQSB/adba9BrlbFjNK29MAulmCbA16C4BDilbEFV1UdVVV2rquravLwo9LJYkV6Esun7nKE5SMrhP8X23ObasDdO89KMYwcbzATmngPJOVS0vUKaSTdpOrvaVUONu4Bzq/NIG2eRmlFQQaHSzTO7JtioFOmQZk/GblFTqIgksHsy9m6HRy8PkrG3WmyU63pQVJffUkcvRZlJvGurQkUJS45p7rFid7oDV8Qc3iI+Lrwi4DlWlWVxzwXz+eveFv62N8jmtVYP6z4LJ96CthBvAr5Ye+DIS7DsetAZR+ysAb79woGoZwBoc+eRpQxwvCH0vkxtRz9/29vMp0+vGPu3OdQ9KzP2D4D5iqLMVRTFANwEvBCD804eq2+jKX0Vt/b/mv6uxtDHh4O9HwbaRXNSCA6F6jidrmh1sOhKNDWvcE5FMu/UdEW0KRUujvajHHEUcsWKolP+z5hdSom2h+f2NEc/w7ZxJ/z+Mth6X/gNNZ6M3WXIICs5fD9ub2DvcnoDe/CMfXmqJ7MMkrEXZSbRRwr2nMVhTZUKWRFzeAsUrRI2AUG4+9wq1pRnce9fDtDYHWT26upPi67RHb8IubYR9j8r5v56ZJindtTjlfQnNAMgWxQyDLTW4A6xR/Dw1lpMei2fO9un+MFpFxvCYQwhn05MOLCrquoEvgi8AhwGnlZVdZIs32KERkPnef+HCQdDf/1qbM45UhETPLDbHC5qOwYiq4iZTiy9FhxDXJ9xiOZeKw3B/sCjwdqLwdZFg6aICxb60VbTi0lSh7AN9PDW0SglvZPvCBkjkoYaT8aekZ0b0RDjrGQDeq1Cu92z+RdCY19g8mSmwaQYj9dLZ85aaPwg6IYs+I7D8xPYLc3QvGtMNUwgdFoNP7lxJSrw1ac/CryZmpwt3E33PQMDYf6M9j4Fc5ZC4QqGhp28dawTBdAqE5wB4AnsecPN1Af5XT3a1s+L+1q47YyKsX40Xk+eWSjFoKrq31VVrVZVtUpV1ftjcc7JZtHS1Tzivo45Ta/Ac3dOvA06TPOvmvYBnG41tJXAdKX8TEidw5r+NwFi7vbo6hQbp6nFi0jxV+PvGbixOKWfp3dFebfl20ATbkONrRc3Cnm5kcmIGo1CXqqRZqsnyw/SVNTSa6NSZxblfumBnQSLM0VgP568Qoyvaw3u9ljbMUBOisF/ZcmRF8XH8d7rASjNTua+q5ew82Q3v3wriMHWhrtEBr7rd6FP2nFYdL2uvAUUhYe31tA1MMx9Vy3lKxctYPMdG6KfAZBVgYri2UANPGTnJ/88RopBx50bx5UqWz1vtLNQipmRmPRaBvLX4EaB/U9P3OOi2zNfMSu4Z/PBFnGrPSOlGBA2yIuvIqXhdarS1Zjr7HVHPgRg0dI1/g/wNO1cWwWvH+mgK5rKHO8Gt6IRTpgFy0O+xD3UQ5+aTHlukM7NAOSlm2i2et6kAkgxbk9zUjGdkFYkqpACnS/ViF6r8JHG0y4Sop79eOcAVcFkmLxFYvxgmFy9spiPrSjix68d46PGAMEyd74YWfnBb8b4+vvlwydFx+vyGzjc2sdv3jnBjWtL+eTp5XzhvHkTG+yiN0FGMVXatoAbqAdbLLx8oI3PnDX31Dc/6yzO2GcqF6WdGJ2JOFGPC3OtyLIMwUvhDrX2kWrUhRyrNq1Zci2K08Zn8g7z/nFz6PrmCGiu3YdD1bJ+dYDA7snYzyt04HSr/PXDKLpQvbNUN9wNw/2jWWsQrH1mLGpKWOZf48lPM9Iw4KkfDxDYuwZFc1Keqz2oDAPiLqAwI4njgybIXRB0A1VVVY/5l5/APtgl3hTCkGF8URSFH1y9lDnpJv7tz3sZDNQPsuEuGOyAA88HPpnLAfv+DNWX4E7K4Zt/2U9Gkp5vXLowojUFXW92JQsNXewPENh//FoN6SYdt5/lJykbkWJmjgEYzPLAnrn4fBycOpAjKszHw9o4PdjSx6LCtIh9L6YVpeshrYjzXe/RO+QYqcufKE6XG1fHMcyGIpKSAlQMpRUCCnMws7I0k6d3NUa+gdt1VHw87Q7IqoDdj4V8ib2/21PqGPkb8px0I039btDoA2rsrb2iOSnD3hK0IsZLUaZJTFsqP0MMKXf7Hx7TPThM75DD/8bpkZfElLEIAztARpKeh25YwUnzIPe9eMj/QZXnibuB7T8PPFS65jUY7ISVt/DUzgY+bOjl3ssXRdeQFIjsSkpo40CL5ZQkZF9TL/883M6dGyv9+/94M3Ypxcwc5q0+nztc38CNQmflVdG366uqaKoJEdhdbpXDrX0zV1/3otHAkmso6HiXdAZjprNvr+um1N2Eklcd+CCtHtIKoK+Z69eWcKx9IOwa5RG6aoQEk1kuKjhOvgNdwZueXEM9otQxjAEb48lPM9FjdaIG8YtptdjQ48RoDZ2xg6iMae61ij0Pex+07fd73OjGqZ91H94ivgcFy8L/YnzYUJnDXedU8acPGvnHgbZTD1AUkbW37QssF+3dDCl5dBRs5H//cYQzqnK4ZlWM+xuzq0hx9qIb7hupEPLyo9eOkZms57ZAQ6pn8+bpTGV/s4X3XIs55i7h4LEQ1qTBGOoWE2RCbJzWmwcZGnbN3IoYX5Zei+J28OmsAzHT2f/+UQMVSjs55UuCH5heBJZmPraiCKNOE/kmaudRhtLn8rO36vgo9wqh7+55LOhLFHsvA0rqSPliJHhf4zKkBdw8bbNYKVDMKKo7rMBekplEe58NR+kG8UQAOeZ45yDgp9TRZoG6N0W2HkGVz3j+7cJqlhVn8O/P7OV//3Hk1L+h5TeIoLjdT+njYBcc+wcsv5EfvFyL3eHmvquXRlR1FBaeyphypX3MnsDu+h7ePNrJ586uOqVfYgRrj3BWDSGxTjdmdWDfXmdGVWG/ey5LOc7241EGqO7w5pwejMSDfbpTvAYyy7hav4MPTnZPeI6sw+Vm/8H9GBQnuvwFwQ9OL4a+ZtJNei5bVsgLH7VEdH1722G2dmXy0KtHufGpOnpKLxTldkE2+QzDfbhNGVEFnXzPiLxhbUrQjH2uzmvXG17G7lahnRwhJwXIiGs7BkjSaynKGDcO79irouRz8cRsnQw6DXeePZcBu4tfvHmcm389zt5XnwRrPyNkn+4TY1+872lwO9mVdRkvfNTC3edVBbcVjhZPYF+g72C/z1SoH792jJwUA58+PYj0Ze2ecdk6zPLAvqEyB71Owz61klylj41zgtcDByRM86+DLX3otQrVc9Kiu850QlFgyTVU9u8iyWmZ8BzZ92q7yLV7Mu+cEBUa6cWi/lpVuX5NCf02J68c9CMF+GN4CP1AMzWuItwqDDvdvJN+OQyZRfDxh6qS5B5AE+UGmreL0aZJDbh52mqxsSTJW8MeWmP31rI393jkmPr3/erYYhxeyql7OodfgNQCKA4x2zQMGrutI74idqebp3aOm0t72h3irmjno6PPqSrs3Yy7cDVfeXOYytyUsW38sSSrQiwjvXdEtttRZ+bd2i7uOrfKf1mtl6GeGbdxCrM8sK8pz+KpO9ZzTCMy7eWauuhOZD4u/MpDbHodau1jfn4aBl2CfNuXXItGdXK57oMJ6+wv7mtlsd4TnEOV3mUUi25Am4UNlTmUZCWFZTHgcqv84aWtaFA5rorqGrcKh0xrIKMs4Caq2z4o9O+06DI3b8Y+qCQFDOxtFhvzDN3i9yg9tMZc5Kllb7F4NlCt3dB59JTjhPnXuCx4eAhq/ylM3WLgMb6hMgejXoNGEcZRz+1u5od/PzzaGZxeKBrb9vxhVIpq/QjaD/C66UIauof4wTVLMeoCOE9OFEMypBezyNjFodY+hp1ufvzPY+SlGbllfYg3UevMsxOAWR7YAdZWZFO88DScaFGbP4zuJOZaEdS1gVvNVVXlUIslMWQYL4UrILuSG5N3TUhnH3a6eeVgG2dl9UByTug/JG/g62tBo1G4bk0J7x3voqkncGehecDObb/fyQcfbAfgzmsv4csXzmd1WSa/fOck2zMvE/4m5lObbjo62wFIyYjOujUnxYhGgT41OaDG3mKxUq7pEl+bNvTwFa+00tJrE4EdTpFjrMMumnv9jMPb8Usxei6C2vVgrCnPYvMdG/jqRQt46s713LK+jF+9XccNv9o2aj2w4S5RWvrhk+LzvZtxa418/dh8rl1dzBlVk2yLm11JidrKsNPN4++fZHtdN184t4okQ4g3k6FumbHPVDYsKOaou4TBkx9EdwJz6DmnHf12ugaGZ25jkj8UBZZcy9LhfbQ0N2AZCmHpGoB3ajrptzlZpG8TI9FCMRLYRQ37dWtE09Jzu/3XtO9p6OGKR95lx4luPrfYAYqGlSvXcs+F1fz5c6dzzapi7jm6FDda1N1PnPL6tnZxJ5GeFZ15nVajkJtqxOI2+tXYvc1JBWp7WKWOAEkGLTkpBpp6rKIpLq3wlA3UEY+YvBTRQLfnCfjDtbBVDE3hte9OvOPaw5ryLL5w3jxOr8rl/muW8bObV1PbPsDlP32HfxxoFV40ZaeLN5XhIdT9z7BNvwGXMZNvXbYoJmsISvZcMqxC6nvglSMUpJu4aV3ovQysPTJjn6lsnJ/LPncluvZ9gettA6GqYQ2wHvVgn+GljuNZei0a3Fys2cm2uuiy9pf2tZKRpCdjqD4sd8yRId4WIb+UZCVzRlUOz+xuHGP0pKoqj713ght/tQ2dVuH5u85giaFdaK6e6UR6rYaHrl/BFWet4Z+ulfTveJxhu23M5cxdImPPyY3eF3xOuolup0lIMeN+x8yDwzhcKlnDwQdsjKcoM0nUsiuK0Nnr3oC3H4KGHdB9Aseux3lI/3M2vXoB/HSVGOjesH30BLEYPB2Ay5cX8tKXNjI3N4XPP7mH7/ztAMOnfR5662HLl1CsPfyqbwP/eenCsd4sk0V2FVprF/kGOw6XysdWFgUeOuJFVeXm6UymMCOJttRFmBy9YixbJPS3itva7ODj8LxWAosKE2Dj1Jf8xai5C7hKtz0qnd3mcPHqoXauXpiMMtgZXsaeWi6Cuv8AABjjSURBVCDsAHyGWt+wtpSmHivbT4jKkkG7ky/9aS/f3XKIc6rzePGLG1lanCG6TnPHVt1oNAr3Xr4Ix8pbSXf18ItH/9+YbspeszCyysmdQ7TkpxnpdBjB7RSTlHxotVgx4CDZ3hlhYPc0KYEoAR0yw+vfh99dDD9dyaoPv805mn1oSk+Dyx6Eu3fAp/4iavgVLWgNEx88HYSynGSe+fwZ3HHWXJ7YVs+1WzNxpJXC/mfoJ5myOXlcvya4o2TM8Px9znGK35k/bDsZurzZ3i9+XlKKmbkkV4jqgOHG3ZG9MEzzr4MtfZTnJAeul52pKArK0mtZoxzhyLHIR9a9fayTAbuTq0o9Wmw4uq9WJ4K7z1Dri5cUkGbS8cyuJmo7+rnqZ+/x0r4WvnbxAh791FoykvXgcoqfl58GKEVRuPyaTzJoKmBV51+5+Tc76B4UVVIDFvGGpU2O3ro1P91Iu93zsx8nx7RabBQqZhTUiAJ7cWYyzb1W0Xmr+loYq1B9KfeV/Z7rUh5He+MTsO5OyF8IZeundDC6Qafh3isW89tb19LUN8yfLaJHIUUd4ruWe9E0Ryl/RopPLTuEaQU8Q7tOQQb2EaqXrcOu6ug4uj30wb6Yw6thP9Q6Qz3Yw2HJtWhQWWZ5I+gGpj9e3NdKVrKe5aYO8UQ4GTsIOcYnsJv0Wq5cUcSL+1q49OF36Oiz8eTt6/nCefNGS/1664X8EOgaGi0pGz7D2Zr99LfWcv0v36e514qt39t9GH1gz0sz0ea17h23gdpmsVGqeOxtwyh19FKUaWJo2IXF6qlH15lEJq5Lgo1f4V1LLvP8ldbGYTD6BYvm8PI9G1GTsnCroFEA1zDNe6MYoRcN2cIHpkrbHr4V8AztOgUZ2EdYN6+Qo2oZjmgydp0paIlan81BvXkoMTpO/ZFXjS1nEVdot/N+bfgDEWwOF/883M4lSwvQddcKL5VwA5un+9SXFSUZOFwqDpeK3enGOF5D9Zp/5QZpgFr1SVA0/GHVETr67Fz3i/dxDHTjRmF3e5SDPRB+MaNzT8cG9haLlQqNR8aKKGMX52vqsYogfeuWkUzcWbSWE12Dk9PwEyWFGUmYFm3CjgGnqsGBjm2uxVNzcUMKpBXyqWpX+FbAM9SyF2RgHyHFqKMtdRF5/Ycj20DtrhO3eUHqgQ8n6sapD8YV17FGU8PBw+HPWHnjSAdDwy6uWF4k/FuyK8Mq9QOEk2Zf85ifVefAMN7k3Onyc6vtrfMOJvdkFMP8iyg+8Rx/vnMtQ8MuUtUB+tUkbvntzqhtJ/LTTPSrnrZ0+6kZe7WpRzTxpJ86NSoQ3ialEZ3dJxNv6rEy7HIHtuuNE5Wrzudf3PfyY9f1/Iv7XuauOm/qLp5dSe5wc/hWwN7ALjP2mY2ueBWp6iDdTUfCf5G5NuTGqXd4dcJKMYCy9FoAsk68GHIEmZc/bK8nWa9Fr1VEYI+krjq9SGxa20a9PzZU5mDQaQLfanfVQOqc0JLKmttgoJ3F/du4cW0pGcogFjVlQiPa8tOMDODN2E/V2Ct1XcJrXhN+k85Ik5I3sPsQdGpSHFlTnsXX7vg0yRf8B1+749MT81qPlOy5o3MTwmGGWvYChJkezQ6Kl5wBNVD30btkl4ZRW+tyCv+LBZcFPexgSx+5qQbyojCQmjFkV9KdsZjzet7jaHs/iwLITh39NvY1WnjlYCvvHxdB8l9+t439+jo0C4N/H8cwUvLYPPKH522U2V5nZkNlzqlBo+toeBr+vE1i2MXux7h446/p3zlEn5oyoRFt+elG+r2BfZzG3mqxUqxEVhEDkJNiwKjTCJfHcYzWsE+vwA7i5zSlAd1LdhUMPCneWI1hVKdZZWBPCOYtOQ37X/UMnPgAuDP0CyyNwkgpjIqYxUXRGUjNJLTLPs6Kd+/jP7a8zo0Xn8O8vFT2NQt/jo8axce2PlHq5/udKHC1odE6QnvE+OLTfUrB0pGnAwYNVYXOY7D8+jC+EB2s/hS89QBrruhnIF+hx5HP5muiH9GWm2pkAK8UM5qxu90q7RY7ucntkLkqonMqikJxZpLoPh1HbccAualGUQ0kEXjvrLtPQGHoqVlYe8CYEb48OI2YeSueRLR6Aw2meaR3H0BV1dCBOIwB1sNON7Ud/Zy7ILquxZlEQ+HFLOM+Lm98kPt/eYI96mh2XJGTzLq52SwvyWBFaSYOp5vPPP4BDqebaq3XIybMihjwCeyhPWIAGOgAuyX8a6wSgZ09fyBVHSC1aBGlE8gy9VoNhuQMcDFGYzcPDqO4bKQ5uiKqiPEy4ss+juOdA8zLj9w7PqEZCex14QX2oW5InnnZOsjAfgqOOSuoPvlXatv7mF8QYrMzDLveY+39OFxq4lbE+HC0poYlqsLZmv2sMxzlgTkPcMGmj7GsOMNv5uiVTa4aPAC7gNwwuk69pBWI0j6fJqWgeKcmhRvYM0th3oXC28RlB1P0pY5estNTsfcaMfoE9jaLjWLFWxETeWAvzkzi9aMdY55TVZXajgGuXBn+RuyswFPyOPJ3G4oZ2nUKcvP0FHKrN5Cq2Nj3URhlj+ZaMKZDSuBsfNRKIPED++naQ6iIDncDDu4obeas+bkB5QCvv0iJq1F8DyPRMjVaEdwt/v1hTsFbEZMXwut9zAJvg/4W0dE5gRp2L/lpRoZIGiPFtFqslIzUsEemsYPI2Dv77dido370XQPD9Nmc027jNO4Y08Tv2KEXwvPImaEGYCAD+ylkz1sPgPlYGI1K3oqYIJLNodY+kg1aKnIS/7a4eOVFKDojKqBRVIrnrw7vhebayPR1L+nF4UsxXTVgSPPMTA2T6otFhyuI0XMTNMyak248xeGx1WKjRIm8ht1LUabwem+zjOrs3ooYv3NOZzONO8XkqNa98NhlcPLd4MfPUMtekIH9VHKrGdaYMHXuG5MF+SUMV8eDLRYWFabP7OHV4VK6Ds1tW1BO/yKKRg/7nwnvdV3HorOQTS+KTIrJnR/ZGDitHqrOF4+PvwGPXzmh4J6fZsLiNqGOydhtVGg6UTX6yN50PIwZuOHBWxEjM/ZxnHwHvJW4LgdsvgFe/0Hg3yFrj5RiEgatjsHsxSziOHvqewMf57QLw7AgG6dut8qhlgS2EvBH6Tq4+H44+2tw8Hk4/nrw44e6hdQRTWDPKBmZpBSSzmORyTBeRmQ2dcJuiPnpRvrUJBxDo79XbRYrVYZulMzSqIZeeLtPfTdQazsGSDZoKcwwRb3WhKRio3D19BqgFSyDtx+EHy+Fp2+Fk++N/i65nCK7lxl74pBScRpLlHreq2kNfFD3CUANmrE3dA8xOOyaXYHdy1n/JuqGX/r/7Z17jFx3dcc/Z2bfa+96117bO7sbO3YSESDgrU2UkJSHlYYQQClRUwVRKWmbUlTapkrVF6oUitqKIqARSE0ENGqQ0gZUEgKhMg1taBzyAMc2jmPH3l17/VrbO/t+eN9z+sfvzu54M6+dmfXMvXM+0mpm77x+R7+Z7/3d8zuPP4e5t4fjLTLQ5W5XEhETp6EN5qeWMgRTMT3mfOW5nDyu/3jBqiG6JKU6YlNLrpi+0Wk6QgM5uWEANnvinSjsPVHXNSno4bUrpuPGpQJo9/8Yfv8n8KcH4OY/co29/+1OeOxW10lr3FvF9x0sWM36K4kJexKqOnZSJzP0vnUw9ZOGMoc6Ljavbg1uKYGUVFTDx77iQst+/kjq58Xrt2RTh3058fT7sQwbqIPxk0cOK/ZEMcizGuLGhhqXfbosKqY1djGniBiA6oowG9dWX5Z92tM/Yf71VCwvgNZ8Ndz+9/DQUfjE1wGBHz0I39jpHj++J28XXDEwYU9GxCWK1EQPMTyZosF1Fg2s3+wbpSIkXLe5TH9k23fDu+6GvV9L2nIOcKIbrspN2Bpd56SMkTFR7+SRiysGClYNceNaVwgsNOt84KrKyOgoaxeGc16xQ7zhhrsqmpyZp290mu0twd+sLyhVdbDzPvjsXvjdPQmb+fm74IqBCXsy1l/DQkU9N8gJft6TonnEYA/UbUgbBnfk/BjXbFyzek16/cBH/tEJ93/9RXJf+EqLfyWS7Yp94JgrsOV1qy8WLWtdWYHK+QmIxRicnKUl5sWg57hiB+dnj7tiTkQnAYuIyRkR2HIzfOKRK9aQZDUwYU9GKESobQc7Knp5qSuNsKdxw0C8lEAZ+tcTaWiF3X8LPf8DR37w9sdXWvwrkTWbnGBnFPYud2WVptn4laC6Isx85VrXUGNuclkd9txX7G1NtYsNN7qjLuLGImLypIAuuGJgwp4CiXTyTunl5eMXXIea5Qx2p/UL949PEx2fCXSp3qx53wOw+T2w528uL4C1MAfDJ3OLYQcvSak1c8hj9FjSrknFIFTjnehnxr0Ydk/Ys2xinYxIYw2z8+4KoKd/knBI2FIGeROrThEakhQKE/ZURDqp1Dnqx7o5OTB5+WMzEzBxIe2KvZwyTjMSroCP/zOMX4CffWnp+HCv6ymZS0RMnIbIYlPrpMzPug3cXDZOV4GKOu9EPz22mHWq4Wqoz71RdluTKy52bniK7v4Jtqyvo6rCftrlTF6zLyL3iMibIhITkV2FGlRJ4G2g3hA6wd7l7ph4REzajVMn7KnK15Yd7btciv5rj7ksTkjoaJTjih287NM0rpjhk6AL+Z08CkhVXNi9FftVoairS5NDDHucePZp38jUYqijUd7ke1o/DNwNvFiAsZQWzdugupH3155hb1f08sey6HN65PwYHc21NNZa2dRFbnvY1d547iGIxZZi2HMJdYwTzz5NlaS0WCOmNIS9dq2rPaLTo1wYnebq8CCSx8YpLCUpnR66RO/gpG2cGvkJu6oeVdVjhRpMSSECkfeyq7KXV3oGmVtI6HcZF/Y0nZOO9I3xrnKMX09HbZOLGT77CzjwHSfs9RvzK7DV2A7z00vdbpYTr+qYqx+/wKxpdJmME+PD9I1M0cbKG2wsp7G2kvqqMK+cGGRuQW3FbpiPPS2RTiLTPczNTnPgdEJ5gcFu5wKoqkv6somZeU4OTFpETDLeey9suQWefxjO7cvfRZIp5HGgy/VHrS4NsWuIC/voEKOjwzToaN7CLiJE1tUutu2zFbuRUdhF5KcicjjJ310r+SAR+YyI7BORfdFoNPMLSoFIJyGd4x2hM7yU6I4ZSh/q+FYZ9DjNGRH42FdhdgKib7m+pflk9TV4SUqphL2EImIAmppda73JsWFC8cqUeQo7uCSl6Tl3VbnNkpPKnozCrqq3qeq7k/w9u5IPUtVvquouVd3V0uKTbkLeBupH11/gxcQN1MHutBunew67jkCxWMqnlDcbr3cZqQB9B/JL2V7sfZokMibuxy+RiBiA9U1uxT46PMjm2EV3sACJU/Eqj5saqmmosX2dcsdcMelYtwVqm7i17gyHzo4wemnO+XKnhpNu+A1OzPDQdw/y7ZdOAvAnT+3n9VMZClSVK+u34zqf5pmyXd/iJSkliWUf74O5yfyibgrMxsZ6xrWW0ZGhvBpsLCe+gWr+dQPyD3f8pIicBW4GfiwiPynMsEoEEYh0sm2ui5jCyz0DSSNiLoxO88UfHeGWf/pfnj6w5BKYm48t+j2NZWzfDRU1+adsh8KwNpLcFZNL16RVprYqzCWp5dL4MO0yQCxck7YDV7bEQx6n5hZsMWHkHRXzjKq2q2q1qm5S1Y8UamAlQ6STupHjrK+Osbd7YKn41/rtnBm6xOefeYMPfPkFnnillztvaOXr9+6gpjJEWKCyIsRN29YXdfglSyFTtlM13FiMky8dYQeYCtUTmh2nQ/qJNV61suYfKZicdk1hDp4e4dPfftXEvcyxZtaZiHQisXnujoywpysKjT2ohPnLn47w9KEuwiLcs6udz35wOx3NLkqmramOV08MctO29ezMo7N94Om4sTDp2o1tcG7/249Hj7km1PUb8v+MAjIbXsOauSmaZYJwcx4x/AkMTs4ArkFQ/ErRvnvliwl7JrwN1NvWneNbJ5t54eWX2bqwgefeHOT+92/lD35922Kzgzg7tzTZj+pK0tAGR59zSUqJq9+BLueGKbGGE7GqNTTMDNERiiLrdhfkPW+9toVH/6+HufmYXSkaJuwZaWiD+hYik28BN7Bx9iynaOVfPt3Jh9+xqdijM8DN0cKMa7GXuDofOAbX3VG8caVAqxvYPNFNIxMF2TgFt5h48oGb7ErRACwqJjPeBmrd4CFComyVC5yMbebI+fHMrzWuDMlCHi8NwWS0ZGrEJBKqWctm8XzgeVR1XM7OLU187sPXmKgbJuxZEemk+dJJrq3op15mOBNqtUvdUmIx+zRhAzVeh6aEImLihGuXSk0cnTIRNgqPCXs2RDoRjfH4+5xw3HvHblsVlRLJsk/jNWJKcMU+wVIpit979qJFsBgFx4Q9G1p3ANB25jkArnvnjmKOxlhOfQuEKi8X9ugxCFcXzIddSAbnqwGY1Gr65+st18EoOCbs2dDQ6jr1RI86sYivEI3SIBRyc5TY1Dreci9Uev1mt7c719E5baGyImxuPaPgmLBnixf2SPO2vJoiGKtEQ/vbXTEl6IYB2Bpx0VRVG7by5AM3mVvPKDimUNkSF3Y0v2qExurQkFBWYG4Khk+V5MYpAF7f0611M+wMdRV5MEYQMWHPlkpvwyt6LL9qhMbq0NjmomJiMa+ej5ZU8a/LGDnjbs/us++SsSqYsGfLdLzRRp7VCI3VoaHNzculwYSImBJdsY+c8u7Yd8lYHUzYs+Xa26GiNv9qhMbq0OAlKY2dhehxQPLrpbqaXHeHfZeMVcVKCmRLvBph7173QyxE8SqjcCxmn55zVR2btkBlTfrXFAv7LhmrjAn7SihUNUKj8Cyu2PucsJeqGyaOfZeMVcRcMUYwqNvg3Bqjp72qjqUZ6mgYVwITdiMYhEIuiez0q67SY4nGsBvGlcCE3QgOje1w7nV3v9RdMYaxipiwG8GhoQ005u6Xagy7YVwBTNiN4BAv31vfAnXNxR2LYRQRE3YjODR6xdnMDWOUOSbsRnCIr9jnpyxN3yhrTNiN4DDlNaw4t99qsBhljQm7ERzGzgOC1WAxyh0TdiM4bPsgVNRYDRaj7LGSAkZwsBoshgGYsBtBw2qwGIa5YgzDMIKGCbthGEbAMGE3DMMIGCbshmEYAcOE3TAMI2CYsBuGYQQMUdUr/6EiUeBUxicmZwMwUMDhlAJBsylo9kDwbAqaPRA8m5LZs0VVWzK9sCjCng8isk9VdxV7HIUkaDYFzR4Ink1BsweCZ1M+9pgrxjAMI2CYsBuGYQQMPwr7N4s9gFUgaDYFzR4Ink1BsweCZ1PO9vjOx24YhmGkx48rdsMwDCMNvhJ2EblDRI6JSLeI/HWxx5MvItIrIm+IyEER2Vfs8eSCiDwuIv0icjjhWLOIPC8iXd5tUzHHuBJS2PMFETnnzdNBEbmzmGNcKSLSISIviMhREXlTRB70jvtyntLY49t5EpEaEfmFiPzKs+nvvONXi8hr3hx9V0Sqsno/v7hiRCQMHAd+AzgL/BL4lKoeKerA8kBEeoFdqurb2FsR+QAwAXxHVd/tHfsyMKSqX/JOwE2q+lfFHGe2pLDnC8CEqn6lmGPLFRFpBVpVdb+IrAVeB34TuB8fzlMae34bn86TiAhQr6oTIlIJvAQ8CDwEPK2qT4nIY8CvVPXRTO/npxX7jUC3qp5Q1VngKeCuIo+p7FHVF4GhZYfvAp7w7j+B+9H5ghT2+BpVPa+q+73748BRoA2fzlMae3yLOia8fyu9PwV2A//pHc96jvwk7G3AmYT/z+LzycRN3H+LyOsi8pliD6aAbFLV8+B+hMDGIo+nEPyxiBzyXDW+cFkkQ0S2Ap3AawRgnpbZAz6eJxEJi8hBoB94HugBRlR13ntK1prnJ2GXJMf84UdKzS2q+mvAR4HPeW4Ao/R4FNgO7ADOA18t7nByQ0TWAN8H/kxVx4o9nnxJYo+v50lVF1R1B9CO81Bcn+xp2byXn4T9LNCR8H870FeksRQEVe3zbvuBZ3CTGQQuen7QuD+0v8jjyQtVvej96GLAt/DhPHl+2+8DT6rq095h385TMnuCME8AqjoC/Ay4CVgnIvEWpllrnp+E/ZfAtd4ucRVwL/DDIo8pZ0Sk3tv4QUTqgduBw+lf5Rt+CNzn3b8PeLaIY8mbuPh5fBKfzZO3MfevwFFV/VrCQ76cp1T2+HmeRKRFRNZ592uB23B7By8Av+U9Les58k1UDIAXvvQIEAYeV9V/KPKQckZEtuFW6eCaiv+7H+0Rkf8APoSrRHcReBj4AfA94CrgNHCPqvpiQzKFPR/CXd4r0Av8Ydw37QdE5FZgL/AGEPMOfx7nl/bdPKWx51P4dJ5E5D24zdEwbsH9PVX9oqcTTwHNwAHgd1R1JuP7+UnYDcMwjMz4yRVjGIZhZIEJu2EYRsAwYTcMwwgYJuyGYRgBw4TdMAwjYJiwG4ZhBAwTdsMwjIBhwm4YhhEw/h+c1QjDQhXq3gAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.clf\n", "plt.plot( A1.dot(x), '.-' )\n", "plt.plot( y1, '.-' )\n", "plt.axis('tight')\n", "plt.legend(('$y_1$', '$X_1 w$'));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Mean-square error on testing set." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Relative prediction error: 0.7023447693100113\n" ] } ], "source": [ "E = np.linalg.norm(A1.dot(x)-y1) / np.linalg.norm(y1)\n", "print(( 'Relative prediction error: ' + str(E) ) );" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Although this is not an effective method to solve this problem (a more efficient approach is to use for instance conjugate gradient), one can do a gradient descent to minimize the function\n", "$$ \n", " \\min_x f(x) = \\frac{1}{2}\\norm{A x-y}^2.\n", "$$" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "def f(x): return 1/2*np.linalg.norm(A.dot(x)-y)**2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The gradient of $f$ is\n", "$$\n", " \\nabla f(x) = A^\\top (Ax - y).\n", "$$" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "def Gradf(x): return A.transpose().dot(A.dot(x)-y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The maxium step size allowable by the gradient descent is \n", "$$\n", " \\tau \\leq \\tau_\\max \\eqdef \\frac{2}{\\norm{AA^\\top}_{op}}\n", "$$\n", "where $\\norm{\\cdot}_{op}$ is the maximum singular eigenvalue." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "tau = 1/np.linalg.norm(A,2)**2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Initialize the algorithm to $x=0$." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "x = np.zeros((p,1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One step of gradient descent reads:\n", "$$ x \\leftarrow x - \\tau \\nabla f(x). $$" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "x = x - tau*Gradf(x)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "tau_mult = [.1, .5, 1, 1.8]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Exercise 0:__ Display the evolution of the training error $f(x)$ as a function of the number of iterations. Test for diffetent values of $\\tau$." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "run -i nt_solutions/ml_2_regression/exo0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The optimal step size to minimize a quadratic function $\\dotp{C w}{w}$ is\n", "$$\n", "\\tau_{\\text{opt}} = \\frac{2}{\\sigma_\\min(C) + \\sigma_\\max(C)}\n", "$$" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Optimal tau = 1.903263042543753 / |AA^T|\n" ] } ], "source": [ "C = A.transpose().dot(A)\n", "tau_opt = 2 / ( np.linalg.norm(C,2) + np.linalg.norm(C,-2) )\n", "print(( 'Optimal tau = ' + str( tau_opt * np.linalg.norm(A,2)**2 ) ) + ' / |AA^T|' );" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Stochastic Gradient Method\n", "=======\n", "\n", "We use SGD (which is *not* actually a descent algorithm) to minimize the quadratic risk\n", "$$ \\umin{x} f(x) \\eqdef \\frac{1}{n} \\sum_{i=1}^n f_i(x) = \\frac{1}{n} \\sum_{i=1}^n \\frac{1}{2} ( \\dotp{x}{a_i}-y_i )^2 $$\n", "where we used\n", "$$ f_i(x) \\eqdef \\frac{1}{2} ( \\dotp{x}{a_i}-y_i )^2$$\n", "The algorithm reads\n", "$$ x_{k+1} = x_k - \\tau_k \\nabla f_{i_k}(x_k)$$\n", "where at each iteration $i_k$ is drawn in $\\{1,\\ldots,n\\}$ uniformly at random.\n" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "x = np.zeros((p,1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Draw $i_k$ are random. " ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "ik = int( np.floor(np.random.rand()*n) )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute $\\nabla f_{i_k}(x)$." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "gk = (A[ik,:].dot(x)-y[ik]) * A[ik,:].transpose()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Set the step size $\\tau_k$ (for convergence is should converge to 0) and perform the update." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "tauk = 1/np.linalg.norm(A,2)**2\n", "x = x - tauk * gk" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Exercise SGD1:__ Test different *fixed* step size $\\tau_k=\\tau$. " ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "run -i nt_solutions/ml_2_regression/exo_sgd1.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Exercise SGD2:__ Average on different runs to see the impact of the step size." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "run -i nt_solutions/ml_2_regression/exo_sgd2.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Exercise SGD3:__ Use a decaying step size $\\tau_k=\\frac{\\tau_0}{1+k/k_0}$." ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[14.52984146]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "run -i nt_solutions/ml_2_regression/exo_sgd3.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Exercise SGD4:__ Use a decaying step size $\\tau_k=\\frac{\\tau_0}{1+\\sqrt{k/k_0}}$ and average the iteration $\\frac{1}{K}\\sum_{k" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "run -i nt_solutions/ml_2_regression/exo_sgd4.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Ridge Regularization\n", "=======\n", "\n", "Regularization is obtained by introducing a penalty. It is often called\n", "ridge regression, and is defined as\n", " $$ \\umin{ x } \\norm{Ax-y}^2 + \\lambda \\norm{x}^2 $$\n", "where $\\lambda>0$ is the regularization parameter.\n", "\n", "\n", "The solution is given using the following equivalent formula\n", " $$ x = (A^\\top A + \\lambda \\text{Id}_p )^{-1} A^\\top y, $$\n", " $$ x = A^\\top ( AA^\\top + \\lambda \\text{Id}_n)^{-1} y, $$\n", "When $p" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "run -i nt_solutions/ml_2_regression/exo1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Exercise 2:__ Display the regularization path, i.e. the evolution of $w$ as a function\n", "of $\\lambda$." ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "run -i nt_solutions/ml_2_regression/exo2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sparse Regularization\n", "---------------------\n", "In order to perform feature selection (i.e. select a subsect of the\n", "features which are the most predictive), one needs to replace the\n", "$\\ell^2$ regularization penalty by a sparsity inducing regularizer. The\n", "most well known is the $\\ell^1$ norm\n", "$$ \\norm{x}_1 \\eqdef \\sum_i \\abs{x_i} . $$\n", "\n", "\n", "The energy to minimize is\n", "$$ \\umin{x} f(x) \\eqdef \\frac{1}{2}\\norm{Ax-y}^2 + \\lambda \\norm{x}_1. $$" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "def f(x,Lambda): return 1/2*np.linalg.norm(A.dot(x)-y)**2 + Lambda*np.linalg.norm(x,1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The simplest iterative algorithm to perform the minimization is the\n", "so-called iterative soft thresholding (ISTA), aka proximal gradient aka\n", "forward-backward.\n", "\n", "\n", "It performs first a gradient step (forward) of the smooth part $\\frac{1}{2}\\norm{X w-y}^2$ of the\n", "functional and then a proximal step (backward) step which account for the\n", "$\\ell^1$ penalty and induce sparsity. This proximal step is the soft-thresholding operator\n", "$$ \\Ss_s(x) \\eqdef \\max( \\abs{x}-\\lambda,0 ) \\text{sign}(x). $$" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "def Soft(x,s): return np.maximum( abs(x)-s, np.zeros(x.shape) ) * np.sign(x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The ISTA algorithm reads\n", "$$ x_{k+1} \\eqdef \\Ss_{\\la\\tau}( x_k - \\tau A^\\top ( A x_k - y ) ), $$\n", "where, to ensure convergence, the step size should verify $ 0 < \\tau <\n", "2/\\norm{A}^2 $ where $\\norm{A}$ is the operator norm.\n", "\n", "\n", "Display the soft thresholding operator." ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "t = np.linspace(-5,5,201)\n", "plt.clf\n", "plt.plot(t,Soft(t,2)) \n", "plt.axis('tight');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Descent step size." ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "tau = 1.5/np.linalg.norm(A,2)**2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Choose a regularization parameter $\\la$." ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "lmax = abs( A.transpose().dot(y) ).max()\n", "Lambda = lmax /10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Initialization $w_0$." ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "x = np.zeros((p,1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A single ISTA step." ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "C = A.transpose().dot(A)\n", "u = A.transpose().dot(y)\n", "def ISTA(x,Lambda,tau): return Soft( x-tau*( C.dot(x)-u ), Lambda*tau )\n", "x = ISTA(x,Lambda,tau)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Exercise 3:__ Implement the ISTA algorithm, display the convergence of the energy." ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "run -i nt_solutions/ml_2_regression/exo3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Exercise 4:__ Compute the test error along the full regularization path. You can start by large $\\lambda$ and use a warm restart procedure to reduce the computation time. Compute the classification error.\n", "ind optimal lambda isplay error evolution." ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Lasso: 65.42184378732034%\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAEQCAYAAABMXyhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xd4VGX6//H3TQq9JyAQSqjSW6Sqa0Oxsq6KYKWJDdt3y093bavrurrrWlEBpYgiIDZcUdYCFookoXdCEBJqCJ2Qfv/+OMNmjAlMyMycZOZ+Xde5Zs6Z58y5zxXIJ6c9j6gqxhhjjC+quF2AMcaYysNCwxhjjM8sNIwxxvjMQsMYY4zPLDSMMcb4zELDGGOMz4ISGiIyWEQ2iUiKiDxcwuctRGSBiKwQkdUicoVn+SARSRaRNZ7Xi4JRrzHGmJJJoJ/TEJEIYDMwCEgHEoHhqrreq81EYIWqviEinYB5qtpKRHoCe1V1l4h0AeararOAFmyMMaZUwTjS6AOkqGqqquYCM4EhxdooUMfzvi6wC0BVV6jqLs/ydUA1EakahJqNMcaUIDII22gGpHnNpwN9i7V5EviviNwH1AQuKeF7rsM5GskJRJHGGGNOLxihISUsK35ObDgwVVVfEJH+wHQR6aKqhQAi0hl4Dri0xA2IjAXGAtSsWbP32Wef7bfijTEmHCQnJ+9X1djTtQtGaKQDzb3m4/CcfvIyGhgMoKpLRKQaEAPsE5E44GPgNlXdWtIGVHUiMBEgISFBk5KS/LsHxhgT4kRkuy/tgnFNIxFoJyLxIhINDAPmFmuzA7gYQEQ6AtWADBGpB3wOPKKqi4JQqzHGmFMIeGioaj4wDpgPbABmq+o6EXlKRK7xNPs9cIeIrALeB0aoc1vXOKAt8JiIrPRMjQJdszHGmJIF/JbbYLPTU8YYU3YikqyqCadrZ0+EG2OM8ZmFhjHGGJ9ZaBhjjPGZhYYxxoSATXuOsmLHwYBvx0LDGGMqubU7DzNs4hL+NGc1BYWBvbnJQsMU+fprZzLGVBordhzkpklLqREdyaTbEoioUlInHP4TjCfCTWXxt785r5eU1PWXMaaiSfz5ACOnJNKgZjQz7uhLXP0aAd+mhYYxxlRCi1L2M2ZaEk3qVWPGmH6cVbdaULZrp6eMMaaSWbBpHyOnJtKiQQ1mje0ftMAAO9IwxphKZf66PYybsZz2jWszfXRfGtSMDur2LTSMMaaS+GzVLh6ctZKuzeoybVQf6laPCnoNFhqmyIQJbldgjCnFnOR0/jRnFQktGzB55DnUqurOr28LDVOkQwe3KzDGlGDGTzv488drOLdtDBNv602NaPd+dVtomCKffea8Xn21u3UYY/5nyqJt/PWz9VzYIZY3bulNtagIV+ux0DBFXnjBebXQMKZCeGPhVp77ciOXdW7Mq8N7ER3p/g2vFhrGGFPBqCovf7OFl77ewtXdm/Lvod2JinA/MCBIz2mIyGAR2SQiKSLycAmftxCRBSKyQkRWi8gVXp894llvk4hcFox6jTHGLarKM59v4KWvt3B97zheurFHhQkMCMKRhohEAOOBQUA6kCgic1V1vVezR3GGgX1DRDoB84BWnvfDgM5AU+BrEWmvqgWBrtsYY4KtoFD580drmJWUxogBrXj8qk5UCXBfUmUVjPjqA6Soaqqq5gIzgSHF2ihQx/O+LrDL834IMFNVc1R1G5Di+T5jjAkpufmF3D9zBbOS0rj/orY8cXXFCwwIzjWNZkCa13w60LdYmyeB/4rIfUBN4GSPec2ApcXWbRaYMg3Tp7tdgTFh6URuAXe/l8zCTRn85YqO3HF+a7dLKlUwjjRKisriHb4PB6aqahxwBTBdRKr4uC4iMlZEkkQkKSMjo9wFh63mzZ3JGBM0R7PzuH3KMr7bnMGzv+taoQMDghMa6YD3b6I4ik4/nTQamA2gqkuAakCMj+uiqhNVNUFVE2JjY/1YepiZNcuZjDFBceB4LjdN+onl2w/yyrCeDO/Twu2STisYoZEItBOReBGJxrmwPbdYmx3AxQAi0hEnNDI87YaJSFURiQfaAcuCUHN4euMNZzLGBNyew9kMnbCEzXuPMvG23lzdvanbJfkk4Nc0VDVfRMYB84EIYLKqrhORp4AkVZ0L/B6YJCIP4Zx+GqGqCqwTkdnAeiAfuNfunDLGVHY7MrO4+e2lHDyex7RRfejXuqHbJfksKA/3qeo8nNtovZc97vV+PTCwlHWfAZ4JaIHGGBMkm/ce5Za3fiK3oJAZd/SlW1w9t0sqE3si3BhjgmRV2iFun7KM6IgqzL6zP+0b13a7pDKz0DDGmCBYsjWTMdMSaVArmvdG96NFw8CP5x0IFhqmyJw5bldgTEj6av1exs1YTosGNZg+um9Qh2f1NwsNUyQmxu0KjAk5s5PSeOSjNXRpWocpI/sEfXhWf7PQMEWmTnVeR4xwswpjQoKqMuH7VP7xxUbOaxfDm7f0pqZLo+35U+XfA+M/FhrG+EVhofLsFxuY9MM2ru7elBdu6F4hxsLwBwsNY4zxo7yCQv7fnNV8tGJnhe2ptjwsNIwxxk9O5BZwz3vJLNiUwR8ubc+9F7ZFJHQCAyw0jDHGLw5l5TJ6WhIrdhzk79d25aa+Fb8fqTNhoWGMMeW0+/AJbp+8jJ/3Z/H6zb0Y3KWJ2yUFjIWGKTJv3unbGGN+YWvGMW57exmHT+QxddQ5DGgT2reuW2iYIjUq5xOqxrhlVdohRk5NpIrAzLH96NKsrtslBZyFhiny+uvO6z33uFuHMZXAD1syuHN6Mg1rRTN9VF9axdR0u6SgCI0bh41/zJ7tTMaYU/p05U5GTU2kZcOafHjXgLAJDLAjDWOM8ZmqMvH7VJ79YiN94hsw6bYE6laPcrusoLLQMMYYHxQUKk//Zz1TF//Mld2a8O+h3akaGeF2WUEXlNNTIjJYRDaJSIqIPFzC5y+KyErPtFlEDnl99ryIrBORDSLyioTakzLGmAovO6+AcTOWM3Xxz4w5N55Xh/UMy8CAIBxpiEgEMB4YBKQDiSIy1zNaHwCq+pBX+/uAnp73A3BG9Ovm+fhH4DfAwkDXbYwx4Dy0N2ZaEsk7DvLYVZ0YfW682yW5Khinp/oAKaqaCiAiM4EhOON+l2Q48ITnvQLVgGhAgChgb0CrDWcLF7pdgTEVSvrBLG6fvIy0Ayd4bXgvruwWug/t+SoYodEMSPOaTwf6ltRQRFoC8cC3AKq6REQWALtxQuM1Vd0Q2HKNMQbW7TrMiCmJ5OQVMH10H/q2buh2SRVCMK5plHQNQktpOwyYo6oFACLSFugIxOGEz0Uicv6vNiAyVkSSRCQpIyPDT2WHoX/9y5mMCXM/bMlg6JtLiKoizLl7gAWGl2CERjrQ3Gs+DthVStthwPte89cCS1X1mKoeA74A+hVfSVUnqmqCqibExsb6qeww9J//OJMxYezD5HRGTkmkeYMafHTPQNo3ru12SRVKMEIjEWgnIvEiEo0TDHOLNxKRDkB9YInX4h3Ab0QkUkSicC6C2+kpY4zfqSrjF6Tw+w9W0bd1A2bf1b9Sj+UdKAG/pqGq+SIyDpgPRACTVXWdiDwFJKnqyQAZDsxUVe9TV3OAi4A1OKe0vlTVzwJdszEmvBQUKk/MXcu7S3fw2x5Nef760Blpz9+C8nCfqs4D5hVb9nix+SdLWK8AuDOgxRljwtqJ3ALue38FX2/Yy90XtOGPl3YIqZH2/M2eCDdFqld3uwJjgirzWA5j3kliZdohnhrSmdv6t3K7pArPQsMU+eILtyswJmhS9h1j1NRE9h7J5o2bezO4y1lul1QpWGgYY8LO4q37uWt6MtGRVZg5th89W9R3u6RKw0LDFHn6aef1scfcrcOYAPogKY1HPlpDfExNJo84h+YNbPCxsrDbA0yRb75xJmNCUGGh8q/5m/jjnNX0a92QOXcPsMA4A3akYYwJedl5Bfxxzmo+W7WLYec05+nfdiEqwv5mPhMWGsaYkJZ5LIex05NJ3n6Qhy8/mzvPb42NsHDmLDSMMSFra8YxRk5x7pB6/eZeXNHVeqktLwsNU6ShdcpmQseSrZnc9W4yURFid0j5kYWGKfLhh25XYIxfzElO55GPVtOqod0h5W8WGsaYkFFQqDw/fyMTvkvl3LYxjL+5F3WrR7ldVkix0DBFHnnEeX32WXfrMOYMHM3O44GZK/l24z5u69+Sx67qZHdIBYCFhimyZMnp2xhTAe3IzGL0tERS9x/n6d924dZ+Ld0uKWRZaBhjKrUlWzO5571kChWmj+rDgLYxbpcU0iw0jDGV1oyfdvD4p2tpFVOTt25LoFVMTbdLCnkWGsaYSie/oJC/fb6BqYt/5oIOsbwyvCd1qtkF72AISmiIyGDgZZyR+95S1X8U+/xF4ELPbA2gkarW83zWAngLZ5xxBa5Q1Z+DUXfYiYtzuwJjTutwVh73zljOjyn7ueO8eB6+vCMRNmhS0AQ8NEQkAhgPDALSgUQRmauq60+2UdWHvNrfB/T0+op3gGdU9SsRqQUUBrrmsPXuu25XYMwpbc04xphpSaQfzOL567sxNKG52yWFnWAcafQBUlQ1FUBEZgJDgPWltB8OPOFp2wmIVNWvAFT1WODLNcZURN9tzmDcjOVER1Th/Tv6kdCqgdslhaVg3MTcDEjzmk/3LPsVEWkJxAPfeha1Bw6JyEciskJE/uk5cjGB8OCDzmRMBaKqvL4whRFTltGsXnU+HTfQAsNFwTjSKOlko5bSdhgwR1ULPPORwHk4p6t2ALOAEcDbv9iAyFhgLECLFi3KX3G4WrnS7QqM+YVjOfn8ac4q5q3Zw9Xdm/LcdV2pEW3377gpGEca6TgXsU+KA3aV0nYY8H6xdVeoaqqq5gOfAL2Kr6SqE1U1QVUTYmNj/VS2McZN2/Yf59rxi/hy7R7+ckVHXhnWwwKjAgjGTyARaCci8cBOnGC4qXgjEekA1AeWFFu3vojEqmoGcBGQFPiSjTFu+nbjXh6YuZLIKsL00X0ZaA/sVRgBDw1VzReRccB8nFtuJ6vqOhF5CkhS1bmepsOBmaqqXusWiMgfgG/EGTUlGZgU6JqNMe4oLFReW5DCi19vpuNZdZhwa2/robaCCcqxnqrOA+YVW/Z4sfknS1n3K6BbwIozRdq3d7sCE8aOZufxf7NX8dX6vVzbsxl/v7Yr1aPtvpeKxk4QmiITJ7pdgQlTKfuOcef0JH7OzOKJqzsxYkArG5K1grLQMMa46r/r9vB/s1dRNbIK747uS/82NoJkRWahYYqMHeu82hGHCYKCQuXFrzbz2oIUusXV5c1betO0XnW3yzKnYaFhimze7HYFJkxkHM3hgZkrWLw1kxsTmvPXIZ2pFmXXLyoDCw1jTFAl/nyAe99bzuETefzz+m7cYP1HVSoWGsaYoFBV3vphG//4ciPN61dn2qg+dGxSx+2yTBlZaBhjAu5Idh5//GAV89ftZXDns3j+hm42/kUlZaFhivTo4XYFJgSt33WEe95LJv3gCR69siOjz42322krMQsNU+Sll9yuwISY2UlpPPbJWurViGLmWOvOPBRYaBhj/C4rN58nPl3HB8npDGzbkJeH9SSmVlW3yzJ+YKFhitxyi/NqI/iZcti89yj3vreclIxj3H9RWx64pL0NxxpCLDRMkfR0tyswldwHSWk89ulaalWNZPqovpzbznqnDTUWGsaYcsvJL+DPH63lw+Xp9G/dkJeH9aBRnWpul2UCwELDGFMuWbn53Dk9mR+27Of+i9vxwMXt7HRUCLPQMMacsbyCQu6cnsyilP08f303htrT3SHPQsMU6d/f7QpMJaKqPPbJWn7YYoERToISGiIyGHgZZ+S+t1T1H8U+fxG40DNbA2ikqvW8Pq8DbAA+VtVxwag5LD37rNsVmEpkwvepzExMY9yFbS0wwkjAQ0NEIoDxwCAgHUgUkbmquv5kG1V9yKv9fUDPYl/zNPBdoGs1xvhm3prd/OOLjVzVrQn/N8hGfAwnVYKwjT5AiqqmqmouMBMYcor2w4H3T86ISG+gMfDfgFZp4LrrnMmYU1ix4yAPzVpJ75b1+dcN3aliF73DSjBCoxmQ5jWf7ln2KyLSEogHvvXMVwFeAP4Y4BoNQGamMxlTirQDWdzxThKN61Rj4q29bQyMMBSM0CjpzxAtpe0wYI6qFnjm7wHmqWpaKe2dDYiMFZEkEUnKyMgoR6nGmNIcPpHHqKmJ5OYXMnnEOTS0bkHCUjAuhKcD3lfJ4oBdpbQdBtzrNd8fOE9E7gFqAdEickxVH/ZeSVUnAhMBEhISSgskY8wZyiso5J73kvk58zjvjOpL20a13C7JuCQYoZEItBOReGAnTjDcVLyRiHQA6gNLTi5T1Zu9Ph8BJBQPDGNMYKkqj368lkUpmfzrhu70b9PQ7ZKMiwIeGqqaLyLjgPk4t9xOVtV1IvIUkKSqcz1NhwMzVdWOFNxy8cVuV2AqoDe/S2VWUhr3XdSW63vHuV2OcZmE2u/ohIQETUpKcrsMY0LC56t3c++M5VzTvSkvD+thgyeFMBFJVtWE07ULxoVwY0wltHzHQR6avZKElvV5/vpuFhgG8CE0RKRzMAoxFcDllzuTCXs7MrO4Y1oSTepWY4LdWmu8+HKkMf3kGxEZ4/2BiNTwe0XGPSdOOJMJaweO53L7lGXkF6rdWmt+xZfQ8D4mvafYZz/4sRZjjMuy8woYMy2RnYdO8PbtCbSJtVtrzS/5EhreV8qLn9S0ayLGhIiCQuWBmStYkXaIl2/sQUKrBm6XZCogX265PcvzjMQqfh0aoXXrlTFhSlV56rN1zF+3lyeu7sTlXZu4XZKpoHwJjSeBBGAkECci64CNnskGAA4lV13ldgXGJRO/T2Xaku3ccV48IwfGu12OqcBOGxqeLjr+R0TigG5AV+D7ANVl3PCHP7hdgXHBpyt38qynm/NHLu/odjmmgivzE+Gqmo7Tn9Q8/5djjAmmxVv384cPVtE3vgEvDLVuzs3p2YVsU+SCC5zJhIWNe45w5/RkWjWsycRbE6gaac9imNOz0DAmDO0+fIKRUxKpER3B1FF9qFsjyu2STCURlDHCjTEVx5HsPEZOSeRodj6z7+xPs3rV3S7JVCJ2pGFMGMnNL+Su6cmk7DvGm7f0plPTOm6XZCoZO9IwJkwUFip/mrOKxVsz+ffQ7pzbzu6YN2VnoWGKDB3qdgUmQFSVZ+Zt4JOVu/jjZR34XS8bF8OcGQsNU+Se4l2LmVDx5nepvP3jNkYMaMU9F7RxuxxTiQXlmoaIDBaRTSKSIiK/Gq5VRF4UkZWeabOIHPIs7yEiS0RknYisFpEbg1Fv2MrKciYTUmYnpvHclxu5pntTHr+qk42LYcol4EcaIhIBjAcG4TwUmCgic1V1/ck2qvqQV/v7gJ6e2SzgNlXdIiJNgWQRma+qhwJdd1i64grndeFCV8sw/vPV+r08/NFqzmsXw79usIf3TPkF40ijD5CiqqmqmgvMBIacov1w4H0AVd2sqls873cB+4DYANdrTEhYtu0A42Ysp2tcPd68pTfRkXazpCm/YPwragakec2ne5b9ioi0BOKBb0v4rA8QDWwNQI3GhJQNu48weloizepXZ8qIc6hZ1S5fGv8IRmiUdDxcWpfqw4A5qlrwiy8QaYIzguBIVS381QZExopIkogkZWRklLtgYyqztANZ3DZ5GTWjI5k+ui8Naka7XZIJIcEIjXSgudd8HLCrlLbD8JyaOklE6gCfA4+q6tKSVlLViaqaoKoJsbF29sqEr/3Hcrj17Z/IzS9k+ug+9rS38btgHLMmAu1EJB7YiRMMNxVvJCIdgPrAEq9l0cDHwDuq+kEQag1vI0a4XYEph6PZeYyYsow9R7J5b0w/2jWu7XZJJgQFPDRUNV9ExgHzgQhgsqquE5GngCRVnetpOhyYqarep66GAucDDT2jBwKMUNWVga47LFloVFo5+QXcOT2ZDbuP8tZtCfRuWd/tkkyIkl/+jq78EhISNCkpye0yKqf9+53XGOteojIpKFTue38589bs4d9Du9vT3uaMiEiyqiacrp3dUmGKXH+982rPaVQaqspjn65l3po9PHplRwsME3B247YxlZSq8o8vNzLjpx3cfUEbxpzX2u2STBiw0DCmknp94VYmfJfKLf1a8KfLOrhdjgkTFhrGVELTFv/MP+dv4tqezXjqmi7Wn5QJGgsNYyqZOcnpPDF3HYM6Neaf13ez/qRMUNmFcFPk7rvdrsCcxpdrd/OnOasY2LYhrw7vSWSE/d1ngstCwxS50Xqer8i+35zBfe+voEfzeky8NYFqURFul2TCkP2ZYoqkpTmTqXCSfj7A2OlJtG1Umykj+1gHhMY19i/PFLn1VufVntOoUNbuPMzIKYk0rVud6aP7ULd6lNslmTBmRxrGVGAp+45y2+Rl1Kkexbtj+hJTq6rbJZkwZ6FhTAW1PfM4t7y1jCoivDumL02tx1pTAVhoGFMBpR/M4qZJP5GTX8C7Y/oQH1PT7ZKMASw0jKlwdh8+wU2TfuJodh7TR/fl7LPquF2SMf9jF8JNkd//3u0Kwt6+I9ncPOknDhzP5d0xfenSrK7bJRnzCxYapsjVV7tdQVjLPJbDzW/9xJ4j2Uwf3Ycezeu5XZIxv2Knp0yRTZucyQTdweO53PzWT6QdzGLyiHPo3bKB2yUZU6KghIaIDBaRTSKSIiIPl/D5iyKy0jNtFpFDXp/dLiJbPNPtwag3bN15pzOZoDp8Io9bJ/9E6v7jTLotgX6tG7pdkjGlCvjpKRGJAMYDg4B0IFFE5qrq+pNtVPUhr/b3AT097xsATwAJgALJnnUPBrpuY4LhaHYet09exqY9R5l4awLntYt1uyRjTikYRxp9gBRVTVXVXGAmMOQU7YcD73veXwZ8paoHPEHxFTA4EEVmHsvhybnrSN5+IBBfb8yvHM/JZ9TURNbuPMxrN/XiwrMbuV2SMacVjNBoBnh3aJTuWfYrItISiAe+Leu65VUtKoLpS7fz7cZ9gfh6Y37hRG4BY6Ylkbz9IC8P68llnc9yuyRjfBKM0Cips38tpe0wYI6qFpRlXREZKyJJIpKUkZFxRkXWrBpJl2Z1WbbNjjRMYJ3ILWD0tESWbsvkhaHdubJbE7dLMsZnwQiNdKC513wcsKuUtsMoOjXl87qqOlFVE1Q1ITb2zM8J941vwKq0w2TnFZy+cSh69FFnMgGTleucklqamsm/h3bn2p5xbpdkTJkEIzQSgXYiEi8i0TjBMLd4IxHpANQHlngtng9cKiL1RaQ+cKlnWUD0adWA3IJCVqYdOn3jUHTJJc5kAuJkYPy0LZN/D+1hgWEqpYCHhqrmA+NwftlvAGar6joReUpErvFqOhyYqarqte4B4Gmc4EkEnvIsC4hzWjVAhPA9RbVypTMZv8vKzWfklESWbTvAizf24Lc9A3JpzpiAC8oT4ao6D5hXbNnjxeafLGXdycDkgBXnpW6NKDo0rh2+ofHgg86rjafhV8dz8hk5NZGkn53AGNLDAsNUXvZEeDH9WjckefvB8L2uYfzqeI5zhHHyLikLDFPZWWgU85sOsZzIK2BpaqbbpZhK7lhOPiOmLCN5x0FeHtaDq7s3dbskY8rNQqOY/q0bUj0qwp7XMOVyLCefEZOXsXzHIV4Z1pOrullgmNBgoVFMtagIBraN4ZsN+/C6Jm+Mz052DbIizQkMew7DhBLrGr0El3RsxNcb9rJp79HwGgDn7393u4JK71BWLrdPXsa6XUd4dXhPruhqgWFCi4VGCS7y9AH05do94RUaAwa4XUGltv9YDre+vYyt+47xxi29GdSpsdslGeN3dnqqBI3qVOPctjF8kJROQWEYnaJavNiZTJntPZLNjROWsG3/Md66PcECw4QsC41S3NS3BTsPneD7zWfWl1Wl9Oc/O5Mpk/SDWQydsIQ9h7OZNrIP57e37s1N6LLQKMUlHRsTUyuaGct2uF2KqcC27T/O0DeXcNAzpndfG0DJhDgLjVJER1bh+t7N+XbjPvYczna7HFMBbdl7lKETlpCdX8iMO/rRs0V9t0syJuAsNE5heJ/mFBQqs5PSTt/YhJW1Ow9z48SlAMwa248uzeq6XJExwWGhcQotG9bk3LYxzEpMC68L4uaUVuw4yE2TllItsgqz7+xPu8a13S7JmKCx0DiN4X3C6IL4Sy85kynVkq2Z3PLWT9SrEc3su/oTH1PT7ZKMCSoLjdMY1KkxMbWqMn3pdrdLCbwePZzJlOi/6/Zw+5RlNKlXndl39ieufg23SzIm6Cw0TiM6sgo3923Btxv3sW3/cbfLCayvv3Ym8ytzktO5+73ldDyrNrPv7M9Zdau5XZIxrrDQ8MHNfVsQFSFMW/yz26UE1t/+5kzmF976IZU/fLCKfq0b8N4d/WhQM9rtkoxxTVBCQ0QGi8gmEUkRkYdLaTNURNaLyDoRmeG1/HnPsg0i8oqISDBq9taoTjWu7NqEOcnpHM3OC/bmjUtUlX/O38jfPt/A5V3OYvKIc6hV1XreMeEt4KEhIhHAeOByoBMwXEQ6FWvTDngEGKiqnYEHPcsHAAOBbkAX4BzgN4GuuSQjBsZzLCefD5PT3di8CbKCQuUvn6xl/IKtDDunOa/d1IuqkRFul2WM64JxpNEHSFHVVFXNBWYCQ4q1uQMYr6oHAVT15GAWClQDooGqQBSwNwg1/0qP5vXo2aIe05Zsp9Buvw1pufmF3D9zBTN+2sFdv2nDs7/rSkSVoB/gGlMhBSM0mgHeT8ele5Z5aw+0F5FFIrJURAYDqOoSYAGw2zPNV9UNQai5RCMGtGLb/uN8Fw6334ap4zn5jJ6WyOerd/PI5Wfz8OVn48IZUWMqrGCcoC3pf1zxP9UjgXbABUAc8IOIdAFigI6eZQBficj5qvr9LzYgMhYYC9CiRQv/VV7M5V2a8Pc6G5j0QyoXerpPDykTJrhdgasOZeUycmoiq9IO8fx13Rh6TnO3SzKmwgnGkUY64P2/Lw7YVUKbT1U1T1W3AZtwQuRaYKmqHlPVY8AXQL/iG1DViaqaoKoJsbGB62E0OrIKowbGs3hrJqsHmv7FAAAQk0lEQVTTDwVsO67p0MGZwlD6wSyuf3MJ63Ye4fWbe1tgGFOKYIRGItBOROJFJBoYBswt1uYT4EIAEYnBOV2VCuwAfiMikSIShXMR3LXTU+B0mV67WiRvfrfVzTIC47PPnCnMrN91hN+9vpi9R7KZNqoPg7uc5XZJxlRYAQ8NVc0HxgHzcX7hz1bVdSLylIhc42k2H8gUkfU41zD+qKqZwBxgK7AGWAWsUlVXf6vVrhbFrf1a8sXaPaRmHHOzFP974QVnCiOLUvYzdMISIqoIc+4aQP821rW5MaciqqF1J1BCQoImJSUFdBsZR3MY+Ny3XNerGc/+rltAtxVUF1zgvC5c6GYVQfPJip38cc4qWsfUYuqoc2hSt7rbJRnjGhFJVtWE07WzJ8LPQGztqtzQO44Pk3ey74iNtVHZqCpvLNzKg7NW0rtlfWbf1d8CwxgfWWicobHntya/sJC3f9zmdimmDAoKlSfnruO5LzdydfemTBvVh7rVo9wuy5hKw0LjDLVsWJNrujflnSXbyTia43Y5xgcncgu4973lTFuynbHnt+blG3vYU97GlJGFRjncf3E7cvILQudOqunTnSkE7Tx0ghsmLGb++j08flUn/nxFR6rYU97GlJmFRjm0jq3F73rF8e7S7aExjnjz5s4UYhJ/PsCQ135k+/4s3r49gVHnxrtdkjGVloVGOd1/UTsKCpXxC1LcLqX8Zs1yphChqkxZtI2bJi2ldrUoPr53ABed3djtsoyp1Cw0yqlFwxrckBDHzMQdpB/Mcruc8nnjDWcKAYez8rjr3WT++tl6zm8Xyyf3DqRtIxvL25jystDwg3EXtUMQXvlmi9ulGGBl2iGufPUHvtmwj0ev7MhbtyfYHVLG+ImFhh80q1edm/u1YE5yOht2H3G7nLBVWKhM+j6V699YjCp8cFd/xpzX2nqpNcaPLDT85IGL21G7WhR/+3w9ofaUfWWQdiCL4ZOW8sy8DVx0diPm3X8ePVvUd7ssY0KOhYaf1KsRzYOXtGNRSibfbNh3+hWMX6gqsxJ3MPil71m36wjPX9eNCbf2pm4NOx1lTCDYgMd+dEu/lkxfup2/z9vA+e1jiY6sZJk8Z47bFZTJ3iPZPPLRGr7duI/+rRvyzxu6EVe/httlGRPSKtlvtYotKqIKj17ZkdT9x3l36Xa3yym7mBhnquAKCpWpi7Zx8QvfsShlP09c3Yn3xvS1wDAmCOxIw88u7NCI89rF8OJXm7miaxPOqlvN7ZJ8N3Wq8zpihJtVnNKa9MP8+eM1rNl5mPPaxfD0kC60iqnpdlnGhA070vAzEeHpIV3ILSjkiblr3S6nbKZOLQqOCuZQVi5Pzl3HkPE/sudINq8O78k7o/pYYBgTZHakEQCtYmry4CXtee7LjXy5do+NBFcOOfkFvLN4O69+u4VjOfnc0q8lf7isA3Wq2YVuY9wQlCMNERksIptEJEVEHi6lzVARWS8i60RkhtfyFiLyXxHZ4Pm8VTBqLq8x58XTsUkdHv90LUey89wup9JRVT5btYtL/v0dz8zbQK+W9fnigfN5akgXCwxjXBTwIw0RiQDGA4OAdCBRROaq6nqvNu2AR4CBqnpQRBp5fcU7wDOq+pWI1AIKA12zP0RFVOG567ry2/GLeHbeRp79XVe3S6oUCguVrzbs5dVvt7B25xE6NqnD9NFdOa9drNulGWMIzumpPkCKqqYCiMhMYAiw3qvNHcB4VT0IoKr7PG07AZGq+pVneaUalLtbXD3GnNeaid+ncmGHWC7tbKepSlNQqMxbs5vxC1LYuOcorRrW4F83dOfans2IsC7MjakwghEazYA0r/l0oG+xNu0BRGQREAE8qapfepYfEpGPgHjga+BhVS0IeNV+8vtL27N4637+9OFqusbVrdjDis6bF/RNHs/J5+MVO5myaBtbM47TtlEtXrqxB1d1a0JkhN2nYUxFE4zQKOnPxOL9bEQC7YALgDjgBxHp4ll+HtAT2AHMAkYAb/9iAyJjgbEALVq08F/lflA1MoJXh/fiyld+4MGZK5lxR79S/3LOzivg89W7Wbw1k8gqQrfmdbm6e9PgncOvEbznHFIzjjF96XbmJKVzNCefzk3r8NpNPbm8SxM7sjCmAgtGaKQD3iP7xAG7SmizVFXzgG0isgknRNKBFV6ntj4B+lEsNFR1IjARICEhocJ1/BQfU5Onh3Th9x+s4pVvtvDQoPb/+0xV2bjnKB8tT+eD5HQOZeURUysagFlJaTz9n/Vc3qUJQxOa0ze+QWBHm3v9def1nnsC8vXHcvL5cu0ePlmxkx9T9hNZRbiiaxNuH9CKXi3qWceCxlQCwQiNRKCdiMQDO4FhwE3F2nwCDAemikgMzmmpVOAQUF9EYlU1A7gISApCzX53Xe84Fm3dz8vfbKFaVAQ9W9RjwaZ9fLl2D9szs4isIlzauTG39G1J/zYNAVidfpjZSWnMXbmLj1fspEWDGlze9Swu63wWPeLq+T9AZs92Xv0YGjn5Bfy4ZT8fr9jJ1xv2kp1XSPMG1XnokvYM79OcRnUq0cOPxhgkGD2yisgVwEs41ysmq+ozIvIUkKSqc8X5E/MFYDBQgHO31EzPuoM8nwmQDIxV1dzStpWQkKBJSRUzV/IKCnlw1ko+X70bgMgqwoC2MQzufBaXdm5MTK2qJa53IreA+ev28OHydJZszSS/UGlcpyqDOjXm4rMbc058A2pV9UP+X3CB87pwYbm+ZuehEyzctI8FGzNYvHU/WbkF1K8RxVXdmvLbnk3p1aK+HVUYU8GISLKqJpy2Xah1412RQwOcu4Q+WbGTOtWj6BPfoMyDAx0+kceCjc4RynebMziRV0BEFaFLs7r0a92AfvEN6RpXt9QAOqUzCI3CQmVrxjGW7zjI8u2HSN5xkJR9zk1ucfWrc9HZjbjw7Eac2zaGKLuwbUyFZaERBrLzCkjefpClqZksTc1kZdoh8gqcn2ds7ap0bFKHjk1q075RbZrVr06zetVpXKda6b3vniI0snLz2Xckh237j7M14xhbM5zXjbuPcCQ7H4C61aPo2aIe57aN4YIOjWgTW9OOKIypJHwNDetGpBKrFhXBwLYxDGzr9EyblZvPyh2HWL/7COt3H2HD7qMs2br/f0ECIAKxtapSr0YUNatGUjM6khrREVSLimDc3mMoynNTE8krKORodj6Zx3PYfzSXE3m/vMu5Xo0o2sTW4spuTenVoh69WtandYyFhDGhzo40QlxeQSE7DmSx+1A2uw6fYNchZzpyIp/jufkcz8knK7eAbM9prqiIKkRGCJFVqlC7WiQxtarSsGY0DWtVJaZWNK1iatImthYNaka7vWvGGD+yIw0DON2ZtImtRZvYWm6XYowJAXZl0hhjjM8sNIwxxvjMQsMYY4zPLDSMMcb4zELDGGOMzyw0jDHG+MxCwxhjjM8sNIwxxvgs5J4IF5EMYPsZrh4D7PdjOW6yfamYQmVfQmU/wPblpJaqGnu6RiEXGuUhIkm+PEZfGdi+VEyhsi+hsh9g+1JWdnrKGGOMzyw0jDHG+MxC45cmul2AH9m+VEyhsi+hsh9g+1Imdk3DGGOMz+xIwxhjjM/CMjREZLCIbBKRFBF5uITPq4rILM/nP4lIq+BX6Rsf9uV8EVkuIvkicr0bNfrCh/34PxFZLyKrReQbEWnpRp2+8GFf7hKRNSKyUkR+FJFObtTpi9Pti1e760VERaTC3oXkw89lhIhkeH4uK0VkjBt1+sKXn4uIDPX8n1knIjP8tnFVDasJiAC2Aq2BaGAV0KlYm3uANz3vhwGz3K67HPvSCugGvANc73bN5diPC4Eanvd3V/KfSR2v99cAX7pd95nui6ddbeB7YCmQ4Hbd5fi5jABec7tWP+1LO2AFUN8z38hf2w/HI40+QIqqpqpqLjATGFKszRBgmuf9HOBiqZiDX592X1T1Z1VdDRS6UaCPfNmPBaqa5ZldCsQFuUZf+bIvR7xmawIV9cKiL/9XAJ4Gngeyg1lcGfm6L5WBL/tyBzBeVQ8CqOo+f208HEOjGZDmNZ/uWVZiG1XNBw4DDYNSXdn4si+VQVn3YzTwRUArOnM+7YuI3CsiW3F+2d4fpNrK6rT7IiI9geaq+p9gFnYGfP03dp3nFOgcEWkenNLKzJd9aQ+0F5FFIrJURAb7a+PhGBolHTEU/0vPlzYVQWWp83R83g8RuQVIAP4Z0IrOnE/7oqrjVbUN8P+ARwNe1Zk55b6ISBXgReD3QavozPnyc/kMaKWq3YCvKTrbUNH4si+ROKeoLgCGA2+JSD1/bDwcQyMd8P4LIg7YVVobEYkE6gIHglJd2fiyL5WBT/shIpcAfwGuUdWcINVWVmX9mcwEfhvQis7c6falNtAFWCgiPwP9gLkV9GL4aX8uqprp9e9qEtA7SLWVla+/wz5V1TxV3QZswgmRcgvH0EgE2olIvIhE41zonluszVzgds/764Fv1XM1qYLxZV8qg9Puh+c0yAScwPDb+dkA8GVfvP/zXglsCWJ9ZXHKfVHVw6oao6qtVLUVzrWma1Q1yZ1yT8mXn0sTr9lrgA1BrK8sfPl//wnOzSOISAzO6apUv2zd7TsBXLr74ApgM84dCH/xLHsK5x88QDXgAyAFWAa0drvmcuzLOTh/dRwHMoF1btd8hvvxNbAXWOmZ5rpdczn25WVgnWc/FgCd3a75TPelWNuFVNC7p3z8uTzr+bms8vxczna75nLsiwD/BtYDa4Bh/tq2PRFujDHGZ+F4esoYY8wZstAwxhjjMwsNY4wxPrPQMMYY4zMLDWOMMT6z0DDGGOMzCw1jjDE+s9AwJshEpJNn7IbmIlLb7XqMKQsLDWNOQUS6ish2Ebm7hM8miMhAEVlY0kBdIvKaiGwv4WujgPuAa4FjPtRQ4vcb4wYLDWNOQVXX4PTtc1sJH/fF6W/pV0QkHqeH0egSjiaaA1NwuqmxIw1TqVhoGHN6+4DO3gtEpCOwWVULSlnnr8DfcPr++cW66ow9MUdV56lnQCbPEc0ir+/vJSLf+nEfjPELCw1jTu8fQNVi45JfDnxZUmMR6YzTZfgsnJ5SOxdvo6p7ii1aB7QRkQjP/AvAH8pZtzF+Z6FhzCl4RjyrCXzOL3/5X0YpoQE8AzymTm+gG3AC5JRUtRAnODqLyHXADlVdXp7ajQmESLcLMKaiEpFqOMOxXgOMxPnlP09EagD1VLWkgaL64gRKDxEZj9PN/mofN7kUGAjcA/hteE5j/MlCw5jSPQq8o6o/i8ganPAAZ3CbBaWs83fgKlX9BkBEGgMrfNzeUmAqMF5Vdxb/UEQEZ8yEn3DGrK+lquN9/G5j/MJOTxlTAhHpAAwCXvIsWkPRaaYSr2eIyCCg6snAAFDVvUBNEWngw2Y3AjnAc6V83gv4HmeM9Ggg31/jPhvjKwsNY0qgqptUta+q5nvN9/J8PABYVMI6X6nquSUsr6uqvowx/wDwiKoeL+XzVOBOoCpwHvAb4IgP32uM39jpKWPKyCs8/EJE2uBcaF+kqtNOsd2DOGPWG+MaCw1jym8qcOhMV1bVrcDZgfp+Y/zJxgg3xhjjM7umYYwxxmcWGsYYY3xmoWGMMcZnFhrGGGN8ZqFhjDHGZxYaxhhjfGahYYwxxmcWGsYYY3z2/wFfHdZmKoDI0AAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "run -i nt_solutions/ml_2_regression/exo4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Exercise 5:__ Display the regularization path, i.e. the evolution of $w$ as a function\n", "of $\\lambda$." ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "run -i nt_solutions/ml_2_regression/exo5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Exercise 6:__ Compare the optimal weights for ridge and lasso." ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAD8CAYAAACfF6SlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAFD5JREFUeJzt3X+QldWd5/H3N4gLBuJPksFuWZgaTYUCbEyDuhpCovgjmRKSjCPRyTqJkapMUCdOzcIkWyk2Vm1cw84kVqgkFM4GjYEkOpPBCbMm/hhxUhpBbBHFib9QGxhFxqBEXCB+94++MG17Ee37yNNw3q+qrn5+nPucb9P0p0+fe+5zIzORJJXlXXUXIEna/wx/SSqQ4S9JBTL8JalAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoEOqbuAvTnmmGNy9OjRdZchSQeU+++//4XMHLGvdpWEf0ScA3wLGAQsysyrm7T5Y2AekMCDmXnhm11z9OjRrFq1qoryJKkYEfH0W2nXcvhHxCBgATAN6AZWRsSyzHykV5vjgb8CTsvMFyPiva32K0nqvyrm/CcDj2fmk5m5A1gKTO/T5lJgQWa+CJCZz1fQrySpn6oI/zbg2V773Y1jvZ0AnBARv4yIexvTRJKkmlQx5x9NjvW9T/QhwPHAVKAduDsixmXmb153oYhZwCyAUaNGVVCapIPZzp076e7u5tVXX627lP1uyJAhtLe3M3jw4H49vorw7waO67XfDmxs0ubezNwJPBUR/0rPL4OVvRtl5kJgIUBnZ6dvNCDpTXV3dzN8+HBGjx5NRLNx6MEpM9myZQvd3d2MGTOmX9eoYtpnJXB8RIyJiEOBmcCyPm1+CnwEICKOoWca6MkK+pZUsFdffZWjjz66qOAHiAiOPvrolv7iaTn8M3MXMBu4FVgH/DgzH46Ir0XEeY1mtwJbIuIR4E7gLzNzS6t9S1Jpwb9bq193Jev8M3M5sLzPsa/22k7gysaHJKlmA/YVvq0aPfdntfW9/uqP19a3VLKqf+7fys/ysGHD2LZtW6X97g/e20eSCmT4S1LFbrnlFk4++WQmTpzImWeeyXPPPQfAXXfdRUdHBx0dHUycOJGXX36ZTZs2MWXKFDo6Ohg3bhx33303AEuWLGH8+PGMGzeOOXPmVF6j4S9JFTv99NO59957eeCBB5g5cybXXHMNAPPnz2fBggV0dXVx9913M3ToUH74wx9y9tln09XVxYMPPkhHRwcbN25kzpw53HHHHXR1dbFy5Up++tOfVlrjQTvnL0l16e7u5oILLmDTpk3s2LFjz1r80047jSuvvJKLLrqIT37yk7S3tzNp0iQ+97nPsXPnTmbMmEFHRwd33HEHU6dOZcSInptzXnTRRaxYsYIZM2ZUVqMjf0mq2GWXXcbs2bN56KGH+N73vrdnPf7cuXNZtGgR27dv55RTTuHRRx9lypQprFixgra2Nj7zmc9w/fXX07NA8p3lyF+SKrZ161ba2npucbZ48eI9x5944gnGjx/P+PHjueeee3j00UcZOnQobW1tXHrppfz2t79l9erVzJkzhyuuuIIXXniBI488kiVLlnDZZZdVWqPhL+mgUccy61deeYX29vY9+1deeSXz5s3j/PPPp62tjVNOOYWnnnoKgG9+85vceeedDBo0iLFjx3LuueeydOlSvvGNbzB48GCGDRvG9ddfz8iRI/n617/ORz7yETKTj33sY0yf3vdmya2J/fHnRX90dnZmK2/m4jp/6eC3bt06PvCBD9RdRm2aff0RcX9mdu7rsc75S1KBDH9JKpDhL0kFMvwlqUCGvyQVyPCXpAK5zl/SwWPe4RVfb+s+mwwaNIjx48eza9cuxowZww033MARRxzBxo0bufzyy7npppve8JipU6cyf/58Ojv3uSLzHePIX5JaMHToULq6uli7di1HHXUUCxYsAODYY49tGvwDheEvSRU59dRT2bBhAwDr169n3LhxAGzfvp2ZM2cyYcIELrjgArZv377nMddddx0nnHACU6dO5dJLL2X27NkAbN68mU996lNMmjSJSZMm8ctf/rLSWp32kaQK/O53v+P222/nkksuecO573znOxx22GGsWbOGNWvWcNJJJwGwceNGrrrqKlavXs3w4cP56Ec/yoknngjAFVdcwZe+9CVOP/10nnnmGc4++2zWrVtXWb2GvyS1YPv27XR0dLB+/Xo++MEPMm3atDe0WbFiBZdffjkAEyZMYMKECQDcd999fPjDH+aoo44C4Pzzz+fXv/41ALfddhuPPPLInmu89NJLvPzyywwfPrySup32kaQW7J7zf/rpp9mxY8eeOf++IuINx97s3mqvvfYa99xzD11dXXR1dbFhw4bKgh8M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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "run -i nt_solutions/ml_2_regression/exo8" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.1" } }, "nbformat": 4, "nbformat_minor": 1 }