-
-
Save jtokoph/40b726c20ed84047660454707a80aa4b to your computer and use it in GitHub Desktop.
TensorFlow 101
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np\n", | |
| "import matplotlib.cm as cm\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "import seaborn as sns\n", | |
| "import tensorflow as tf\n", | |
| "%matplotlib inline" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "TensorFlow 101\n", | |
| "==============\n", | |
| "\n", | |
| "Some of the main objects in TensorFlow are \"placeholders\", which are things that you can feed things into, \"Variables\", which contain intermediate results of calculations, and \"sessions\" in which one carries out predefined calculations." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "4\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "a = tf.placeholder('int64') # a will be an integer\n", | |
| "b = tf.placeholder('int64') # b will also be an integer\n", | |
| "c = tf.add(a, b) # c = a + b\n", | |
| "\n", | |
| "with tf.Session() as sess: # Start a TensorFlow \"session\"\n", | |
| " # Feed in the values of a and b and evaluate c\n", | |
| " result = sess.run(c, feed_dict={a: 2, b: 2})\n", | |
| " print(result)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Linear regression in TensorFlow\n", | |
| "===============================\n", | |
| "\n", | |
| "Let's do a slightly more interesting example: OLS linear regression. Let's first set up some data outside of TensorFlow" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Number of samples: 15\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[<matplotlib.lines.Line2D at 0x63e2ded7b8>]" | |
| ] | |
| }, | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x63e0ab8470>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "train_X = np.array([7.33892413, 6.09065249, 3.6782235 , 1.5484478 , 5.2024495 ,\n", | |
| " 1.55973193, 1.90577005, 3.52333413, 1.89705273, 7.16303144,\n", | |
| " 6.69186969, 6.35116542, 8.40910037, 6.81104552, 9.0276311])\n", | |
| "train_Y = np.array([6.01218497, 7.15272823, 4.39711002, 0.78859037, 4.66163788,\n", | |
| " 2.1366047 , 0.75108498, 2.4262601 , 2.01357347, 5.1216737 ,\n", | |
| " 8.01817765, 7.07644285, 9.11215858, 8.64146407, 8.13432732])\n", | |
| "\n", | |
| "n_samples = train_X.shape[0]\n", | |
| "\n", | |
| "print(\"Number of samples: \", n_samples)\n", | |
| "plt.plot(train_X, train_Y, 'o')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "At the end of the day, our model will be $y = Wx + b$, where we feed in the training values for $x$ and $y$, and the model will have to determine $W$ and $b$." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "X = tf.placeholder(\"float\")\n", | |
| "Y = tf.placeholder(\"float\")\n", | |
| "\n", | |
| "# Set model weights; initialize all weights as random numbers\n", | |
| "W = tf.Variable(np.random.randn(), name=\"weight\")\n", | |
| "b = tf.Variable(np.random.randn(), name=\"bias\")\n", | |
| "\n", | |
| "# Construct a linear model\n", | |
| "pred = tf.add(tf.mul(X, W), b)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Recall that OLS works by minimizing the mean squared error, $\\frac{1}{2n} \\sum_{i=1}^n (W x_i + b - y_i)^2$; in TensorFlow, we explicitly specify this \"cost\" and how to go about minimizing it." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# Mean squared error\n", | |
| "cost = tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples)\n", | |
| "\n", | |
| "# Gradient descent\n", | |
| "learning_rate = 0.001\n", | |
| "optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)\n", | |
| "\n", | |
| "# Initializing the variables\n", | |
| "init = tf.global_variables_initializer()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "With the variables in place, we can run the TensorFlow session and examine what it learns." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "W = 0.760127\n", | |
| "b = 1.5108\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXUAAAECCAYAAAAB2kexAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlsnHdi3vHvDDm8D1G8RIrHDGX7teVTtmyZknXyMMWR\njy12WyAb5AAaBE3QIkGTIps0+0+bIECDNCiCbBaLbrKLokDiRRNsTEriJYo6aMmyLMuy7NfyanhT\nvERSvDnH2z8kWfJatMThkO8cz+evmRdzPPyR88zL9/o5LMtCRETig9PuACIiEjkqdRGROKJSFxGJ\nIyp1EZE4olIXEYkjKnURkTiS/CgPMgxjF/AXpmkeNAxjG/APQAi4Yprm765jPhERWYWHrqkbhvGH\nwI+A1DuL/gr4Y9M09wNOwzDeWsd8IiKyCo+y+eUL4Fv33X/JNM1Td24fBWojnkpERMLy0FI3TfOf\ngcB9ixz33Z4BciMdSkREwhPOjtLQfbezgakIZRERkTV6pB2lv+SiYRj7TNPsAg4DHQ97gmVZlsPh\neNjDRETkq1ZdnOGU+h8APzIMwwV8CvzsoakcDsbGZsJ4q/hTWJitsbhDY3GPxuIejcU9hYXZq37O\nI5W6aZq9wO47t68BB1b9TiIisu508pGISBxRqYuIxBGVuohIHFGpi4jEEZW6iEgcUamLiMQRlbqI\nSBxRqYuIxBGVuohIHFGpi4jEEZW6iEgcUamLiMQRlbqISBwJ59K7IiJR49zVEZq6exgan6e0IANv\ntZtd24vtjmUblbqIxKxzV0f44c8/+fL+wNjcl/cTtdi1+UVEYlZTd88Ky3s3NMd66J8ZCut5WlMX\nkZg1ND7/wOXDE3MbnCRyBmeHafK18tHYFf6p6gerfr5KXURiVmlBBgNjXy/wkvxMG9KszdDsDZp7\n2vhw9DIA7pyKsF5HpS4iMctb7f7KNvV7yyttSBOeG3OjNPtauTh6GQuLiuwyjlTVs32zEdbrqdRF\nJGbd3Rna1N3L8MQcJfmZeKsrY2In6ej8GM2+di6MfIiFRXlWKd6qep7JfwqHwxH266rURSSm7dpe\nHBMlftfY/ARHe9o4f+MiFhZbs0rweup4ruDpNZX5XSp1EZENML5wk2M97Zy78QEhK0RJZjFeTz3P\nFz6N0xG5AxFV6iIi6+jm4iTHejroHn6fkBViS0YRjZ5adhQ9F9Eyv0ulLiKyDiYXpzjee4KzQ+cJ\nWkGKMgpodNfxUvHz61Lmd6nURRKETqffGFNL07T0dnJm8D0CVpCC9Hwa3bXsLH6BJGfSur+/Sl0k\nAeh0+vU3vTRDa98JTg++hz8UID8tj8PuWl7Z8uKGlPldKnWRBPBNp9Or1NdmZnmW1r5Ouga68Yf8\n5KVu4rCnhle37NzQMr9LpS6SAOLxdHq7zfrnaO/ronPgDMvBZTal5tLgPkR1ycskO+2rVpW6SAKI\np9Pp7Tbnn6ejr4sTA6dZCi6Tm5LD29sa2V36Ci4by/wu+xOIyLqLh9Pp7TbvX+BE/yk6+k+zGFwk\nJyWbN6oa2FO6i5Qkl93xvqRSF0kAsXw6vd0WAot09p+mvf8UC4EFsl1ZNHqOsHfrq6Qkpdgd72tU\n6iIJItZOp7fbYmCRzoGztPedZD6wQKYrg7e3NbKvbDepUVjmd6nURUTusxRcpmvgLK19ncz558lI\nTufNqgb2l+0mLTnN7ngPpVIXEQGWg8t0DXbT2tvJrH+O9OR0jnhe50D5HtJjoMzvUqmLSEJbDvo5\nM3SO470dzCzPkpaURqO7loPle8lwpdsdb9VU6iKSkPyhAGeGztHSc4Lp5VukJqXQ4K6hpnwvH1+b\n4S9+ejkmL6mgUheRhBIIBegefp9jPR1MLU2TkpRCfeVBair2keXKjPlLKoRV6oZhJAM/AdxAAPgt\n0zQ/j2AuEZGICoaCvDd8gaM97UwuTeFyuqit2E9txX6yU7K+fFysX1Ih3DX1RiDJNM09hmHUAn8O\nfDtysURkrXRVxtuCoSDnb1zkaE87E4s3cTmTOVS+l7rKA+SkZH/t8bF+SYVwS/1zINkwDAeQCyxH\nLpKIrFWsb0KIhGAoyIWRSzT3tDG+MEGyM5kDZXuorzxIbmrOis+L9UsqhFvqs4AH+AzIB45ELJGI\nrFmsb0JYi5AV4sLIJY72tDE6P06SI4l9W6uprzxIXtqmhz4/1i+pEG6p/z5wzDTNPzEMYytwwjCM\nZ0zTXHGNvbDw6//mJCqNxT0ai3siORZDEytvQoiFMQ8nY8gK8V7/Rd650sTgzA2SHE5qt+3l3zzV\nQEHm5kd+nSP7s8nJSeOd9mv0j8xQXpzNd2oeZ9+OslVnskO4pX4T8N+5PXXndb7xwsFjYzNhvlV8\nKSzM1ljcobG4J9JjUZq/8iaEaB/z1Y5FyApxaewKzb5WhudGcDqc7C55mQZ3Dfnpm7HmYWx+dT/z\nU2W5fP/Xd35lmR3jFs6XW7il/tfAjw3D6AJcwPdM01wI87VEJMJifRPCo7Asi8vjn9Dka2VwdhgH\nDl7dspMGdw2FGfl2x7NNWKVumuYc8O8inEVEIiSer8poWRZXJj6l6XoL/bNDOHDwypYXOeyuoSij\n0O54ttPJRyJxKt6uymhZFp9MfEaTr5W+mQEcONhZ/AKH3bVsySyyO17UUKmLSFSzLIvPbl7jXV8L\nPbf6AHix6DkOu2spzdpic7roo1IXkahkWRbm5Bc0+Vq5Pt0DwAuFz9DoqWNrVom94aKYSl1Eos61\nyV/wrq+FL6Z8ADxbsB2vp47y7K02J4t+KnURiRpfTPn4wZUOroyaADyT/ySNnjoqc8ptThY7VOoi\nYrvr0700XW/hs8lrADy1+Qm8nno8uRU2J4s9KnURsU3PrT6arrdy9ebtNfMn8x7nuy++xWZLR7OE\nS6UuIhuub2aApuutXJn4FIAnNm3DW1XPY5s8FBboTOO1UKmLyIbpnxmi2dfK5fHbZ7tuy/VwpKqO\nJ/IeszlZ/FCpi8i6G5wdptnXxqWxjwHw5FRypKoeI+8xHA6Hzenii0pdRNbN8NwIzb5WLo5eBqAy\np5wjnnqe2vyEynydqNRFJOJG5kZp7mnjg5GPsLCoyN6K11PP0/lPqszXmUpdJErEw/Rzo/PjHO1p\n4/0bH2JhUZZVitdTx7MF21XmG0SlLhIFuj4ciOnp58YXJjjqa+f8yEVCVojSzC14q+p5rmA7TofT\n7ngJRaUuEgXeab/2wOW/PP1ctK3NTyzc5FhPB+/duEDICrElsxivp44XCp9RmdtEpS4SBfpGHnxc\n9v0z2EfTZNKTi1Mc62mne/gCQStIcUYhjZ46Xix6TmVuM5W6SBSoKM6mZ/jW15bfP4N9NEwmPbU0\nzfGeE5wdOkfAClKYnk+jp46dxS+ozKOESl0kCnyn5nH+x//54GvL759+bmh85cmk19v00i1aek9w\neugcgVCAgrTNHPbU8nLxDpKc3zg9sWwwlbpIFNi3o4xbtxa/cfq50oKVJ5NeL7eWZ2jt7eTUYDf+\nUID8tDwa3DXs2vKSyjxKqdRFosTDpp/byMmkZ5Znaes7ycmBs/hDfvJSN9HgPsSrJTtJdqo2opl+\nOyIxYiMmk571z9He10XnwBmWg8tsSs3l9cqDVJe+gktlHhP0WxKJIes1mfS8f572/lN09p9mMbhE\nTko2b1UdZk/pK7iSXBF/P1k/KnWRBLYQWKCj/zQdfadYDC6S7crC66njta3VpKjMY5JKXSQBLQQW\n6ew/Q3t/FwuBBbJcmXzL42Xv1mpSk1LsjidroFIXSSCLgSVODpyhva+LucA8mckZvFV1mH1lu0lL\nTrU7nkSASl0kASwFl+kaOEtb30lm/XOkJ6fzRtXr7C/bQ3pymt3xJIJU6iJxbDm4zKnB92jt7WTG\nP0t6chpeTx0Hy18jPTnd7niyDlTqInHIH/RzeugcLb0nuLU8Q1pSKofdNRwq30uGK8PueLKOVOoi\nccQfCnB26DzHezqYXr5FSlIKr1ce4lDFXrJc63fmqUQPlbpIHAiEAnQPX+B4TweTS1OkOF3UVRyg\npmIf2SlZdseTDaRSF4lhwVCQczc+4GhPOzcXJ3E5k6kp30dd5QGVeYJSqYvEoGAoyPmRDznma2N8\n8SbJzmQOlr1GXeUBclNz7I4nNlKpi8SQkBXiwsglmn2tjC1MkOxIYn/ZbuorD7IpNdfueBIFVOoi\nMSBkhbg48hHNPW2MzI+R5Ejita2v0lB5iLy0TXbHkyiiUheJYiErxIejH9Psa+XG/ChOh5M9pa/w\nemUN+el5dseTKKRSF4lCISvE5bFPaPK1MjR3A6fDSXXJyzS4ayhI32x3PIliYZe6YRh/BLwJuIC/\nNU3z7yOWSiRBWZbF5fGrNPtaGZgdwoGDXVteosFdQ1FGgd3xJAaEVeqGYewHqk3T3G0YRibwnyMb\nSySxWJbFlfFPafK10DcziAMHLxfv4LC7huLMIrvjSQwJd039deCKYRj/AmQDfxi5SCKJw7Isrt78\nnJZL7XxxswcHDl4qep7DnlpKMiM/GUYknLs6QlN3D0Pj85QWZOCtdq/LxB0SnnBLvQCoAI4AVcDP\ngScjFUok3lmWhTn5Be9eb8F3qxeAHYXP0uipozRri83pVnbu6shX5kkdGJv78r6KPTqEW+oTwKem\naQaAzw3DWDQMo8A0zfEIZhOJS5/fKfNfTPcA8HzB03z3xbfJDET/ceZN3T0rLO9VqUeJcEv9NPCf\ngP9pGEYpkMHtol9RYWF2mG8VfzQW9yTSWFwdvcY7n7zLJ6OfA/BS6bN85+kjVG2usDnZoxuamH/g\n8uGJuYj+LhPp7yLSwip10zSbDMPYaxjGecAB/I5pmtY3PWdsbCact4o7hYXZGos7EmUsrk/38O71\nFszJLwB4Ov9JvJ46KnPKIXj7sxErY1Gan8HA2NzXlpfkZ0Ysf6yMxUYI58st7EMaTdP8o3CfK5II\nfNN9NPla+PTm7TXzpzY/gddThye30uZk4fNWu7+yTf3e8tj9meKNTj4SibDeW/00+Vr5ZOIzAIy8\nx/B66tm2yW1vsAi4u928qbuX4Yk5SvIz8VZXant6FFGpi0RI/8wgTb5WPh6/CsBjmzwc8dTzeN42\nm5NF1q7txSrxKKZSF1mjwdlhmnytfDR2BYCqXDdHPPU8kbcNh8NhczpJNCp1kTANzd6guaeND0cv\nA+DJqcBbVc+TeY+rzMU2KnWRVboxN0qzr5WLo5exsKjMLsdbVc/2zU+ozMV2KnWRRzQyP8ZRXxsX\nRi5hYVGevRWvp45n8p9SmUvUUKmLPMTY/ARHe9o4f+MiFhZbs0rweup5rmC7ylyijkpdZAXjCzc5\n1tPOuRsfELJClGZuodFTx/OFT+N0OO2OJ/JAKnWRX3JzcZJjPR10D79PyAqxJaOIRk8dO4qeVZlL\n1FOpi9wxuTjF8d4TnB06T9AKUpRRgNddx4vFz6vMJWao1CXhTS1N09LbyZnB9whYQQrS82l017Kz\n+AWSnEl2xxNZFZW6JKzppRla+05wevA9/KEA+WmbOeyp5ZXiHSpziVkqdUk4M8uztPZ20jXYjT/k\nZ3NaHg3uQ7y6ZafKXGKeSl0SxuzyHG19Jzk5cIblkJ9Nqbk0uGuoLtlJslMfhV+maetik/6SJe7N\n+edp7+uic+A0S8FlclNyeNvtZXfpK7hU5g+kaetil/6iJW7N+xfo6D/Fif5TLAaXyEnJ5o2qBl4r\n3YUryWV3vKimaetil0pd4s5CYIET/afp6D/FQmCRbFcWjZ469m59lZSkFLvjxYSh8ZWnrZPoplKX\nuLEYWKRz4CztfSeZDyyQ6crg7W2N7CvbTarKfFVKC1aetk6im0pdYt5iYImuwbO09Z1kzj9PRnI6\nb1Y1sL9sN2nJaXbHi0mati52qdQlZi0Hl+ka7Ka1t5NZ/xzpyekc8bzOgfI9pKvM10TT1sUulbrE\nnOWgn9ND79HSe4KZ5VnSktJodNdysHwvGa50u+PFDU1bF5tU6hIz/EE/Z4bO09LbwfTyDKlJKTS4\na6gp30uGK8PueCJRQaUuUc8fCtA99D7HezuYWpomJSmF+sqD1FTsI8ulHXci91OpS9QKhAK8N3yB\nYz0dTC5N4XK6qK3YT23FfrJTsuyOJxKVVOoSdYKhIOduXORYTxsTi5O4nMkcKt9LXeUBclKyNySD\nTpGXWKVSl6gRDAV5f+RDjvraGF+8SbIzmQNle6ivPEhuas6G5dAp8hLLVOpiu5AV4sLIJY762hhd\nGCfJkcS+rdXUVx4kL23ThufRKfISy1TqYpu7Zd7sa2NkfhSnw8lrpbt43X2IzWl5tuXSKfISy1Tq\nsuFCVohLY1doudBO/61hnA4nu0tepsFdQ376Zrvj6RR5iWkqddkwlmXx0fgnNF1vYWjuBg6Hg1e3\n7KTBXUNhRr7d8b6kU+QllqnUJWJWOmLEsiw+Hr9Ks6+V/tkhHDh4ufhFvvvSm7gWo++kIZ0iL7FM\npS4R8eAjRq4wsHSdLwLv0zczgAMHO4tf4LC7li2ZRRRmZzO2OGNj6pXpFHmJVSp1iYivHjFi4cwd\nx7X1CzompwF4seg5DrtrKc3aYkc8kYShUpeIuH3EiIUz5ybJW6+RlD0FQGiymP/6+q+wNavE3oAi\nCUKlLhFRWDbHZObHJOVMAhCcLMI/+BhbM0tV6CIbSKUua/LFlI+m6y3cKvkFSUBwqhD/wGNY87kA\neGt1xIjIRlKpS1iuT/fSdL2FzyavAbB9s4GblzjnW2Z4cY6SQh0xImKHNZW6YRhFwAWg1jTNzyMT\nSaJZz60+mq63cvWmCcCTeY/jraqjKtcNgPcFG8OJSPilbhhGMvB3wIPPqZa40ndrgCZfC1cmPgPg\niU3b8FbV89gmj83JROR+a1lT/0vgB8D3IpRFolD/zBDNvlYuj98+Bn1brocjVXU8kfeYzclE5EHC\nKnXDMH4DGDVNs9UwjD+ObCSJBoOzwzT7Wrk0dgWAqtxKvJ56jLzHcDgcNqcTkZWEu6b+m0DIMIw6\n4AXgp4ZhvGma5mjkookdhudGaPa1cnH0MgDunAq8njqe2vyEylwkBjgsy1rTCxiGcQL47YfsKF3b\nm8i6G7x1g5990sTZvg+wsKjKq+DfPvMGO0qeVpmL2GfVH75IHNL4SIU9Nhad1/jYaIWF2VE1FqPz\nYxztaef9Gx9iYVGWVYrXU8ezBdtxOByMj8+u23tH21jYSWNxj8binsLC1U/fuOZSN03z0FpfQzbe\n+MIER33tnB+5SMgKsTWrhEZPHc8XaM1cJJbp5KMEM7Fwk2M9Hbx34wIhK8SWzGK8njpeKHwGp8Np\ndzwRWSOVeoKYXJziWE873cMXCFpBijMKafTU8WLRcypzkTiiUo9zU0vTHO85wdmhcwSsIEXpBRz2\n1LKz+AWVuUgcUqnHqemlW7T0nuD00DkCoQAFaZs57Knl5eIdJDmT7I4nIutEpR5nbi3P0NrbyanB\nbvyhAPlpeTS4a9m15UWVuUgCUKnHiZnlWdr6TnJy4Cz+kJ+81E00uA/xaslOkp36NYskCn3aY9ys\nf472vi46B86wHFxmU2our1ceorr0ZVwqc5GEo099jJr3z9Pef4rO/tMsBpfITcnmrarD7Cl9BVeS\ny+54ImITlXqMWQgs0NF/mo6+UywGF8lOycJbVc9rpa+SojIXSXgq9RixEFiks/8M7f1dLAQWyHJl\n8i2Pl31bq0lJSrE7nohECZV6lFsMLNE1cJa2vpPMBebJTM7grW2H2bd1N2nJqXbHE5Eoo1KPUkvB\n5S/LfNY/R0ZyOm9UNXCgbDdpyWl2xxORKKVSjzLLwWVODb5Ha28nM/5Z0pPT8HrqOFj+GunJ6XbH\nE5Eop1KPEv6gn9ND52jpPcGt5RnSklI57K7lUPleMlwqcxF5NCp1m/lDAc4Oned4TwfTy7dITUqh\nofIQhyr2kenKsDueiMQYlbpNAqEA3cMXON7TweTSFClOF3UVB6it2E9WSqbd8UQkRqnUN1ggFOTs\n0HmO9rRzc3ESl9NFTcU+6ioOkJ2SZXc8EYlxKvUNEgwFOT/yIa3nOhiZG8flTOZg+WvUVRwkN3X1\nU1aJiDyISn2dhawQF0Yu0exrZWxhgmRnMvvL9lBfeYBNqbl2xxOROKNSXychK8TFkY9o7mljZH6M\nJEcSe7dW8ysvvkFoTsMuIutD7RJhISvEh6Mf0+xr5cb8KE6Hkz2lu3i98hD56XnkZ2QzNqeZ0kVk\nfajUIyRkhbg89glNvlaG5m7gdDipLnmZBncNBemb7Y4nIglCpb5GlmVxefwqzb5WBmaHcOBg15aX\naHDXUJRRYHc8EUkwKvUwWZbFlYlPafa10jcziAMHLxfv4LCnluKMQrvjiUiCUqmvkmVZXL35OU3X\nW+id6ceBg5eKnqfRU8uWzGK744lIglOpPyLLsvhs8hpN11vx3eoFYEfRczS6aynN2mJzOhGR21Tq\nj+DzyS9493oLv5juAeD5wmfweurYmlVibzARkV+iUv8G1yav0+Rr4drUdQCeLXiKRk8dFdllNicT\nEXkwlfoD/GKqhyZfC+bkFwA8nf8kXk8dlTnlNicTEflmKvX7+KZ7afK18unNzwF4avMTeD11eHIr\nbU4WXc5dHaGpu4eh8XlKCzLwVrvZtV07iUWigUod6L3VT5OvlU8mPgPAyHsMr6eebZvc9gaLQueu\njvDDn3/y5f2Bsbkv76vYReyX0KXePzNIk6+Fj8c/BeCxTR6OeOp5PG+bzcmiV1N3zwrLe1XqIlEg\nIUt9cHaYJl8rH41dAaAq180RTz1P5G3D4XDYnC66DY3PP3D58MTcBicRkQdJqFIfmr1Bs6+VD8c+\nBsCTU4G3qp4n8x5XmT+i0oIMBsa+XuAl+ZqtSSQaJESp35gbodnXxsXRy1hYVGaX462qZ/vmJ1Tm\nq+Stdn9lm/q95dqZLBIN4rrUR+bHOOpr48LIJSwsyrNK8VbV80z+U2GXeaIf+XH3Z23q7mV4Yo6S\n/Ey81ZUJNQYi0SwuS31sfoKjPW2cv3ERC4utWSV4PfU8V7B9TWvmOvLjtl3bixPq5xWJJWGVumEY\nycCPATeQAvyZaZr/GsFcYRlfuMmxnnbO3fiAkBWiJLMYr6ee5wufxulwrvn1deSHiES7cNfUfxUY\nN03z1wzDyAMuAbaV+sTCJMd72+kevkDICrElo4hGTx07ip6NSJnftdojPx60qebIfk0yLSLrJ9xS\n/yfgnTu3nYA/MnFWZ3JxiuO9Jzg7dJ6gFaQoo4BGdx0vFT8f0TK/azVHfqy0qSYnJ42nyjThtIis\nj7BK3TTNeQDDMLK5Xe5/EslQDzO1NE1L7wnODJ4jYAUpSM+n0V3LzuIXSHImrdv7rubIj5U21bzT\nfo3v//rOCCcTEbkt7B2lhmGUA/8P+BvTNP/xYY8vLFz7ZoephWn+5bMWWn9xCn/QT1FmPt9+2sve\nylfWtczvOrI/m5ycNN5pv0b/yAzlxdl8p+Zx9u34+lUbhyYevKmmf2QmImMRLzQW92gs7tFYhM9h\nWdaqn2QYRjFwAvhd0zRPPMJTrLGxmVW/z10zy7O09nbSNdiNP+QnL3UThz01vLpl54aUeTi+/7/P\nPXBTjbskR2vqdxQWZrOWv4t4orG4R2NxT2Fh9qoP1wt3Tf17wCbgTw3D+D5gAYdN01wK8/UeaHZ5\njra+k5wcOMNyyM+m1Fwa3DVUl+wk2RndR2OutKnmOzWP25BGRBJFuNvUfw/4vQhn+dKcf572vi46\nB06zFFwmNyWHt91edpe+givKy/yulU7S2bejTGshIrJuoqoh5/0LdPSf4kT/KRaDS+SkZPNGVQOv\nle7CleSyO96q6SQdEdloUVHqC4EFTvSfpqP/FAuBRbJdWTR66ti79VVSklLsjiciEjNsLfXFwCKd\nA2do7+tiPrBApiuDt7c1sq9sN6kqcxGRVbOl1BcDS3QNnqWt7yRz/nkykzN4s6qB/WW7SUtOsyOS\niEhc2NBSXw4u0zXYTWtvJ7P+OdKT0znieZ0D5XtIV5mLiKzZhpT6cmCZjr4uWvo6mVmeJS0pjUZP\nHQfLXiPDlb4REUREEsKGlPp/bPo+k4vTpCal0OCuoaZ8LxmujI14axGRhLIhpe5KSqa+8iA1FfvI\ncmnaMxGR9bIhpf43R/67TrgREdkAkb8+rYiI2EalLiISR1TqIiJxRKUuIhJHVOoiInFEpS4iEkdU\n6iIicUSlLiISR1TqIiJxRKUuIhJHVOoiInEkKqazixXnro7Q1N3D0Pg8pQUZeKvdmoNURKKKSv0R\nnbs6wg9//smX9wfG5r68v1KxP+hL4Mj+7I2IKyIJSptfHlFTd88Ky3sfuPzul8DA2Bwhy/ryS6Dr\nw4H1CykiCU+l/oiGxucfuHx4Yu6By1f6Enin/VqEEomIfJ1K/RGVFjx4pqaS/AdP+rHSl0D/iK4r\nLyLrR6X+iLzV7hWWVz5w+UpfAuXF2qYuIutHpf6Idm0v5rfffJqywiySnA7KCrP47TefXnEn6Upf\nAt+peXwdU4pIotPRL6uwa3vxIx/CePdxTd29DE/MUZKfibe6kn07yjS1n4isG5X6OlrNl4CISCRo\n84uISBxRqYuIxBGVuohIHFGpi4jEEZW6iEgcUamLiMQRlbqISBwJ6zh1wzAcwN8CzwOLwL83TfN6\nJIOJiMjqhbum/jaQaprmbuB7wF9FLpKIiIQr3FJ/DTgGYJrmOWBnxBKJiEjYwi31HGD6vvsBwzC0\nfV5ExGbhFvEt4P5ryDpN0wxFII+IiKxBuBf0OgMcAX5mGMarwMcPebyjsFDXEb9LY3GPxuIejcU9\nGovwhVvq/wzUGYZx5s7934xQHhERWQOHZVl2ZxARkQjRzk0RkTiiUhcRiSMqdRGROKJSFxGJI+s6\nR6muEXOPYRjJwI8BN5AC/Jlpmv9qayibGYZRBFwAak3T/NzuPHYxDOOPgDcBF/C3pmn+vc2RbHHn\nM/ITbn9GAsBvJeLfhWEYu4C/ME3zoGEY24B/AELAFdM0f/dhz1/vNXVdI+aeXwXGTdPcBxwG/sbm\nPLa68wH288d3AAACFUlEQVT+O2De7ix2MgxjP1B95zNyACi3N5GtGoEk0zT3AP8N+HOb82w4wzD+\nEPgRkHpn0V8Bf2ya5n7AaRjGWw97jfUudV0j5p5/Av70zm0n4LcxSzT4S+AHwJDdQWz2OnDFMIx/\nAX4OvGtzHjt9DiTf+Q8/F1i2OY8dvgC+dd/9l0zTPHXn9lGg9mEvsN6lrmvE3GGa5rxpmnOGYWQD\n7wB/YncmuxiG8RvAqGmarYDD5jh2KwBeAr4N/Afg/9obx1azgAf4DPgh8L/sjbPxTNP8Z25verrr\n/s/HDLe/7L7RehesrhFzH8MwyoEO4Cemaf6j3Xls9JvcPiP5BPAC8NM729cT0QRw3DTNwJ3tx4uG\nYRTYHcomvw8cM03T4PZ+uJ8ahpFicya73d+X2cDUw56w3qV+htvbyXjEa8TELcMwioHjwH8xTfMn\nduexk2ma+03TPGia5kHgEvBrpmmO2p3LJqeBBgDDMEqBDG4XfSK6yb3/7Ke4fSBHkn1xosJFwzD2\n3bl9GDj1TQ+GdT76BV0j5n7fAzYBf2oYxvcBCzhsmuaSvbFsl9DXqTBNs8kwjL2GYZzn9r/av2Oa\nZqKOyV8DPzYMo4vbRwJ9zzTNBZsz2e0PgB8ZhuECPgV+9rAn6NovIiJxJCF3WoqIxCuVuohIHFGp\ni4jEEZW6iEgcUamLiMQRlbqISBxRqYuIxBGVuohIHPn/IrI4i8GeXrUAAAAASUVORK5CYII=\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x63da7f73c8>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "with tf.Session() as sess:\n", | |
| " sess.run(init)\n", | |
| "\n", | |
| " # Run the optimization algorithm 1000 times\n", | |
| " for i in range(1000):\n", | |
| " sess.run(optimizer, feed_dict={X: train_X, Y: train_Y})\n", | |
| " \n", | |
| " # Visualize the results\n", | |
| " print('W = ', sess.run(W))\n", | |
| " print('b = ', sess.run(b))\n", | |
| " plt.plot(train_X, train_Y, 'o')\n", | |
| "\n", | |
| " # Make predictions for new values of x\n", | |
| " x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])\n", | |
| " predictions = sess.run(pred, feed_dict={X: x})\n", | |
| " plt.plot(x, predictions)\n", | |
| " plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Logistic regression in TensorFlow\n", | |
| "=================================" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Next up, let us take a look at a classification problem instead." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\njkAPAIH7f3OVkJ3MfizKAAAAAElFTkSuQmCC\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x63e33a7da0>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "group1 = np.random.multivariate_normal([-4, -4], 20*np.identity(2), size=40)\n", | |
| "group2 = np.random.multivariate_normal([4, 4], 20*np.identity(2), size=40)\n", | |
| "plt.plot(*group1.T, 'o')\n", | |
| "plt.plot(*group2.T, 'o')\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "The plan will be to find a line separating the two groups, so that if one day, someone comes with a new point in the plane, we will be able to say if that point should be green or blue.\n", | |
| "\n", | |
| "We proceed as with linear regression with a few notable differences: Inputs $X$ are now 2-dimensional, which will be reflected in our placeholders and variables, we now have two weights, $w_1$ and $w_2$, and our prediction function will be the *logistic function* $q(X) = 1/(1 + \\exp(w^tX + b))$, taking values between $0$ and $1$. At the end of the day, $q(X)$ represents the probability that the point $X$ should be labelled \"green\"." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# Inputs are now two-dimensional and come with labels \"blue\" or \"green\" (represented by 0 or 1)\n", | |
| "X = tf.placeholder(\"float\", shape=[None, 2])\n", | |
| "labels = tf.placeholder(\"float\", shape=[None])\n", | |
| "\n", | |
| "# Set model weights and bias as before\n", | |
| "W = tf.Variable(tf.zeros([2, 1], \"float\"), name=\"weight\")\n", | |
| "b = tf.Variable(tf.zeros([1], \"float\"), name=\"bias\")\n", | |
| "\n", | |
| "# Predictor is now the logistic function\n", | |
| "pred = tf.sigmoid(tf.to_double(tf.reduce_sum(tf.matmul(X, W), axis=[1]) + b))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Just as we replaced our prediction method, we replace our cost function with $$-\\sum_{i=1}^n p(X_i) \\log(q(X_i)) + (1-p(X_i))\\log(1-q(X_i)),$$ where $p(X_i)$ is the label of $X_i$ (which is $0$ or $1$)." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# Similarly, the OLS cost function from before is now replaced by cross-entropy\n", | |
| "cost = -tf.reduce_sum(tf.to_double(labels) * tf.log(pred) + (1-tf.to_double(labels)) * tf.log(1-pred))\n", | |
| "\n", | |
| "# Gradient descent\n", | |
| "learning_rate = 0.001\n", | |
| "optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)\n", | |
| "\n", | |
| "# Initializing the variables\n", | |
| "init = tf.global_variables_initializer()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "We are now in a position to run our optimization and plot the resulting values of $q$." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "W = [[ 0.48370111]\n", | |
| " [ 0.3921538 ]]\n", | |
| "b = [ 0.35555899]\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWMAAAEKCAYAAADHOTRzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd4HMX5xz+71+90upNkyWq2ZEvy2nLvHWxjm94CpBAI\nPY0SEgIBEhIgEEgI/JJAQhKCIZAQEkLvxb1iy72OLVu21SXb6idd3d8ft5LvpJN8si1Lcu7zPH58\nupnZfW9u93vvvjPzjqSqKjFixIgRo3eRe9uAGDFixIgRE+MYMWLE6BPExDhGjBgx+gAxMY4RI0aM\nPkBMjGPEiBGjDxAT4xgxYsToA5xRMVYUJUtRFJ+iKJu0f5u1fzedxLGWKorylW62+YWiKH/opOwD\nRVGGK4pyrqIo27X3HlEU5Trt9UOKolzazfN9qihKova6SFGUCd1sP0lRlOe70+ZkURTlKkVRlkZR\nr9ufQ2s3UVGU/2ivX1IU5Ufa60BrH7WrH/H9dnVO5hq4QVGU97vTphvHfkFRlHk9cexTQVGUNEVR\nVkVR7xZFUb4b4f0btO/9F9FcIz1JX7LldKPvhXO6hBBtN7OiKOnADkVRNgghdvSCPQAIIS7R7BkI\nqNp7vwipMg/Y2c3DLjhFs0YBGad4jO7QY5POhRAbga9245w9OQG+R44thLitJ457qgghyoFZUVSd\nBWyP8H6j9q9B+9eb9CVbTiu9IcZhCCHKFEXZBwxTFGUicAtgA2qFEOcpivIQ8HXAC+wF7hBCVGnN\nv6IoygOABXhNCPErAEVRHgQuB0zasX4shHhXa5OvKMpyIAHYDHxfCNGkKEoRcFWobYqivATsAJqB\nScBTiqKYgeeAKUKIQq3eZ8CzQoj3Q9ou0l4uVRTlYu31dxVFGQ8kA/8QQvxMURQJ+D9gKmAHJOBW\noBh4BIhXFOVFIcQt7WwrAl4DLgYSgYeBmcBEwANcJoSoUBRlJPAskAQEgGeEEK9qx3gUuBY4AhSG\nHNsA/Bo4B9Bp/XSXEKKx/fen1b8LmCyEuF5RFD1wFPiBEOJlRVFmaJ/vPuA5IcTods2lSMdsfV9R\nFCvwPJCnfc4G4FohxD6tXmfXwHTtM1i1z/2wEOKjTs4VzXla68nAb4FLgVpgPTBCCDFP89SeJfgd\nxAsh7tTanA88IoSYpvXHk+3tUhTlBuBK7b08wA18Swixq935bwC+QfCpNgMoAW7QvusM7TNka9Vf\nEUL8VlGULGCHEMKuKMovtPI0IAuoAr4GTAMuA+YritIshAh9ItsErAIKCF4PKIoyBfgjYAAOaMf6\nIcHv7fdAk/YZpwAXAD/V6rqAe4UQ67TjPAh8Rfs8BwnejxVaX64leE0PBlYKIb4VyZazhV6PGWs3\nTQ7wpfZWPnCOJsQ3AecDE4UQ4wh6pn8PaW4n+GVPB65TFOV8RVEGE/Riz9Ha/Ax4NKRNDnClEGIM\nwc//sxOYqAoh/kTwy/+xEOI14GXgNs3+HGAY8EFoIyHEzdrLOUKIEu11sxBiMkHhvUe7eaYCaUKI\n6UKIUcArwP1am58TvAjDhDgEk/YZfwz8Ffg/7e8S4EZFUXTAu8DvhRBjgYuAXymKMlVRlMsI3vxj\ngBmAI+S49wNeIcQkIcR4oJyggHTGO8B87fVMgp5L69+XA2+09mUXx2hPa90LgRohxAwhxHCC38Md\nIfUiXQNO4CXgOiHEJM2GPyuKktnF+U50nlZuA8YTvE5br932/A34mvbDBHAT8BfNrkVd2HUOcLv2\ng7UGuLcTW2cA3xNCjCQoTq2ht38Ci7Vre5bWH61PI6F9Pwu4SggxguAPyneEEO8A7xG8hsJCY0KI\nIiHE94QQK4QQT2nX1X+Bn2rX2x+AsSFNRgJf066dLOBx4EIhxETgO8BbiqJYFEX5FjCaoGMzAfgY\neDHkOEOFEOdqdeYpinJue1s66Z9+SW+IsTUkXryd4Bd1rRCiVCvfJoRo0l5fALwkhGjR/v49wS+l\n9SL/mxBCFUI0ELw4FgghDgM3ErwQnwC+C8SFnP8tIcQx7fVLdC+U0OrFPQ9cr12Ut7XacYI2EPRk\nEUJUApVAiuYhPKQoyncVRXkKuLqdvV3xpvb/fqA8JMyzn6B3N4ygYL+rnbecYD9dSFAs3xJCuIQQ\nAYIi0colwOWtMX2CojGiMyO0Pi9RFGUSwe/sCWCOVnx5iJ3dQdKO/Sbwd0VR7lAU5XfacUP7p8M1\nQFAk04B3NPs/AvwEf3g6+wwnOk8rFxL0OL1CCB/wlwjHKgK2AJdpAjwP+HcUdm3UviMIimxnMfPP\nhBD7tdcvAOdrnv1M4E+aDfUEnYYLI7RfFnKPbe7iPJ0xmqCT8pl2rmUEnyBbKQ5xQBYAqcBi7TP/\nE/ABuQSf6qYCG7WyOwg+FbTyvnb8RoJPbt21s1/R6zHjCIQ+Crf/sdARtLlV4PwhZRLg1cIA7wLP\nAJ8Cy9Eu0M7aRG96ECHEPkVRtgFXEHzMn9JF9VCR9rZ7X9JCGL8j+Oj7DrAH+GaUprg7OXYrMh3D\nAK19GGhX5mtX5wdCiE+h7RHefAJb3iLoeS8geJNdqyjK1wh+30XaE0t3ULVzf4/gD96zBG/kYxx/\nDIfI36cO2CWEmN5aoChKGsFH8usinSyK87TiI7zf/BHqQNDDu4GgEL0thHBpP95d2dUc0l6l8xBO\n++/KT+TvWiYYGmhPtOfpjPZ9AMHrqZXQe1hH0Fv/Rusb2pNAmVb2ayHEX7T3DQTDh6fLzn5Fb3jG\n3enQT4GbNDEAuAtYLoRoFZ5vASiKkkAw7vUxwUe9DUKI3wErCD6Kh8aWLlMUxaHdGN8m6J1Eg4/w\nC/tPwFPAOiFERRdtjCc47nzgPe2C3EhQ4FvtbX/O7iIAt6IoV0DbYOlVwOcE+/YarS9k4PqQdp8C\ndyiKYtDKXiTo7XbFOwR/mHSa5/858BuOhyi6S+t1spDg09FLwD6CsdrQ77P9NfARsA7IUxRltlY2\nTmub3sX5TnSeVj4k+NRl1J7QbiRy+OVtgrHjWwl6r5ykXZE4TxNxCD72v6d5j2uB27VjOwj2zWda\nvWjuu2ivt90Er6uF2rmmoHnLEeouARYqiqJodS8CthIcz/kUuFVRFLtW9zHg1SjOf1bSG2Lcnbjh\ni8AXwHpFUXYC4zju2ahAnaIoGwkG9H8vhFgB/AtI1uoXAPVAoqIoNq3dLoI31FaghuAgTzR2vQ/8\nVlGUVtH6gOBj7J+7aPM2sEobRGt//Na//wzMURRlC7Ca4OPYEK1sLTBcUZRIj/kn7EftMfpK4G5F\nUbYSvDEfFkIsF0J8TDA0UaCdpzak6S8JDqZsJvj4qQL3dHVeIcRurewL7a1PgUyCHnNXnGg2xW8J\nDnxuIijwGwk+4rbWaX8NrBRCHCH4o/OU1q9/B74phCjuwo6uzhPKywQH7VoHktwEB6XCPosQwkMw\nNCEJIQq0907GrkiUAK8qirKL4wNnEHyimq89ta0D3hBCvNLeti74GLhLUZSfdFVJCOEnGE57ROv7\nHxIcV3BFqLuLoNPzuhaKeAS4VAjRTDC2/gGwTgtZjiL4NBHJ3rM+vaQUS6F5cmij4n+JMDsgxlmM\noigLCMb6/6n9/TuCA7MPnKHz30Bw8O2yM3G+Luz4DfCUEKJaCztsITjgVt+bdvVnen1qW39EUZSX\ngXMJf7SP8b/BTuBeRVHuJXj/bAG+17sm9QqHgCWKorSGDG/5XxRiRVGmAk8KIea2e/9S4CGCYxgv\nCSH+dqJjxTzjGDFixDgJtB/k64FGIcSMkPf1BOPqEwkOQq4GLhZCVHd1vF6fZxwjRowY/ZRCgmMy\n7RkB7BNC1GuTDVYRnFjQJTExjhEjRoyTQAjxNuHTDFuJB+pC/m4gfFFVRHo1Zlxd3dAWI6nwNLC8\nroip9kFkmxM61N1RX8abFZv4ZsYUcm0pHcqXVG7lP4dXct+Iqxkal9qhvNnn5udr/4gsSTw6/XZM\nuo4zzhISrNTUuFhatI77Pv8NTy38CXOyp3b7c/1x5T94bvkrvHXr84xIjbRA6/TTant/pLu237n0\nfgJqoMP7siTz7NyuFgqefv6X+r23SU62n/I84+xvTlOjnVx78B/rTvZ89QQFuRU74bOVItJnBvAM\nkg4JWFN/CBmJwWZnWLlZpyegqvyjZD03DJrGEOuAsHKrzkSz38NTu9/k/vxryGon2HpZh0VvYm35\nVh5Z92cenvY9jLrwKZV6fXBaqd1kQ1UD3P3xYzx38cPMGjyxW5/FabFz1FXL1Ytu551b/0xeSna3\n2p8Mrbb3R7pre6o1hbKmjlO702wDT5dJUfO/1O9nAxt+93lPHLa9aO8GcrXVly6CIYoTLt3uM2GK\nJIOVuc4cdJLM6vpDlLjrwspzbSlcmzGFgBrgleJ1HHIdDSufNmA43865AJe/hV/vfoMS15GwcoOs\n52dTvs3kgaPYULmDx9f/FV8g0hMGTEofzXMX/QJZkrnro0dZV7KlW5/lm5Mu58nL7qO68RhXLbqd\nA0e7O400Rlecnx05S+XCrLkR348Ro4dpXS36DUVRbtXm9/+I4Lz+1QSX7Jd3dQDo5dkUoWGKVio9\njSytPYCKyrmOIaSb4sPKdzWU86/SDRhkHTcNmsEgS3hIY1nVNhYd+Jx4g5UH879KuiUprNzt9/DQ\nmufYXL2H2RkT+Onk29DJQQ8hOdlOdfXxrHwrDxVw50ePoJd1/OXSx5iYPqpbn+/Pq17j5x/9jgzH\nQN657c9kJfZcNsz2tvcnTsb2gsotfHZoKeVNlaTZBrIway6TBo7rIQs753+t33uT0xGmiKQ5PXm+\n7qB7+OGHz+T5wmhqcj8MIEnHP3OczsgAg5VDLTUcctcywGAjTmdqK0822Uk2xrGtvoQdDWXk2ZKx\n64+nTci2DcSut7L+2F42HitkQmIOcXpLW7le1jErYwI7jhayoXInZU3VzEgfhyxJ2GwmXC5PW90s\nZzrDBgzlo33L+LhwBVMzxpAalxz155s0eDQmvZEPdy7l090ruHjkPOLN0eYA6h7tbe9PnIzt6XGp\nzM6YzkVD5jM7YzrpEcYJzgT/a/3em9hspkdO9Rgul+fhM3m+7tCrYYoDvjpK/A20985TjXbOcQxB\nBZbVFlHlCU+jOzo+g6vTJuAOeFl0eA0VLeEhjfmp47g2aw413kae2PUG1e3KLXoTj02/k/zEoSwp\nXs8zG1+JOCAEMG/INJ5aeD9un5vvvP8QO6v2RazXGXedewP3nfdtDteU85UXv09FfZdTDWPEiPE/\nSq+KsRs/1YFmSv2NHQQ53RTPbEc2AQIsrTvAEW9TWPk4xyCuTB1Hc8DLouI1VLnDF/9ckDaRrw6a\nzTFPA0/s/g9H25VbDWZ+NfMulIRsPju8hj9sea2DDa0szJnFkwvupcnbzK3vPcieIwe69TnvmXcL\nd8+5kaKjxVz14u1UNx47caMYMWL8T9GrYQpjMw/XB9zUqR5UwC4ZwkIW8XozDp2ZQ+5gyCLVaMca\nMgMi3ewkTmdiR0MZOxvKGWFPxRoyZW1YfAYSEhtrCtlSe4DJicOwhJQbdQZmZ0ygoHIXX1Zsp97d\nyLjEEWE2tJKXlE26PYVP9q3gs/0rOSd7CokWZ4d6kZAkiVlDJ9HocfHZnpUs3beOy0adh9V4oqyU\n0dPfHjlDidneO/Q328/2MEWvinGLy/uwUzZRF3BTp7qRJLDL4fN/HXozdp2JQ+5aDrtrSTfGYwkR\n5ExLAhbZwM7GcnY3lDMiLi1McBV7Jn41wKaa/WytKWJK4jDMIeUmnZHZGRNYX7mDVcVbaPa7mZiS\nH1GQhw/IIdmWyCeFK/h8/2rmZE8lwRLfoV4kJEliTu5Ualx1fLZnFcsLv+TyMfMxG0wnbhwF/e3G\nCiVme+/Q32yPiXEP4nJ5HtZJMk7ZRG2rICMR106QnXoLNtl4XJBN8Zjl44I8yJKIUdK3CXK+Pa1N\nsCVJIj9+EO6Al821+9lee5ApScMwhQi6WW9idvoECqp3sKZsKz7Vz/iUyBtbjEzJw2mO57P9K/ni\nwBrmDZmGw2yPWLc9kiQxL286lQ1H+UKsZtWBAi4fPR+T/kQpj09Mf7uxQonZ3jv0N9tjYtyDtHaM\nTpJxyCZqAy3UqW7kCIKcYLBglQ0cctdS7K4j0xiPST6+ZiXLmoiMxK7GCvY0VjLSnoY5RJBHObJo\n8rewpfYAO+oOMTVJwRjS3qI3ccnImSzeX8Da8q3ISIxJHhbR7jEDFeKMNj7bv4olB9Yxf+gM7Kbo\nZklIksQCZSYltRV8IVaztmgzl4+ej1F/Kjnk+9+NFUrM9t6hv9keE+MeJLRj9G2C7KZWdaNHxiaH\nC1SiwYpJ0nHYXacJsiNMkIdYB6CqKrsbKxBNlYyyp7eVS5LEGEc2dd4mttYWsbuumClJCoaQ9ilO\nJ+Mc+awp28zq8i2YdAZGJUXKLw7jUkdg1Bn54sBqlh5cx4KcmcQZbRHrtkeSJBYOn0XR0RIW713D\nhsPbuGz0fAy6k18Q2d9urFBitvcO/c32mBj3IO07plWQazRBNiBjbSfIAww2DJJMsSbIg0xOjPLx\nZZ1DrAPwqn72NFawt7GK0fb0Ng9YkiTGOody1FPP1toi9tQXMzVJQa+1t9lMSF4d09PGsapsE6vK\nNhNnsDAicWhE+yemjwRgcdFalh9cz8KcWdiMloh12yNLMheMOIe91UUs3ruGTSU7uXTUvJMW5P52\nY4USs7136G+2n+1i3GeWQ7dilvTk6RPQIXHY38BRf3OHOiOsKYyzpeEKeFlcU4jLf/yCkiSJ85Pz\nmZEwlCpPA4uK14SVy5LELUMXMj1pOIWN5Ty9523c/vC9PNNsA3hq9j0kmh08v+0/vLd/Waf2fn/y\nN7l1wlc5VFfKze/ez1HXCfOBtKHX6Xn+q7/kghHnsKJwPTf/837cvv5zc8SIEeP00ac841YMkky8\nZKQm0EKN6saEHosc7jGmGONAVSnx1FPqqWewyYlB83AlSSLPlkKj341oqmS/q5rR9oyw8gmJuZQ1\nH2NbXRH7G8uZkjSM+DhLm6cQb7QxNXU0K0o3sqJ0I8mWBPKcHTc4liSJaZnjaPS4WHbwS1YXb+SC\n3HMw66ObJaGTdVw0cg7bSveweO8adlcUcsmoeejk7v1O9jcvJ5TTaXtB5RZe2vkab+x7l81V27Aa\nLD26Oi/W72eOs90z7lUxbnRpy6Ej5LQzSDrsbYLcglnSY5HaCbIhjgDHBTnL7EQvHRfcYbaB1Pua\n2dtURZHrCKPs6W0hCVmSmJiQS7Grmm11BznYVMW5maNwNx9PHuQw2Zk8cBTLSwtYXrKRVNsAchyD\nOtgqSRIzB02gtqWeZQfXs65kCxfknhP1LAm9rOPikXPYWLyDJXvXUlh9kIvy5yB3Q5D7240Vyumy\nvVWIG7yNqKg0eBvZUr2dgdbkHhPkWL+fOc52Me7VMEWd3k+9PoDaycavNtlAnt6JjESRr47agDus\nXJIkxtrSGG5Jpt7vZnHNflpCMrHJksQVqeMYF59JcUsNr5SswxNSrpd13J53CWOcQ9hWW8QTG9/A\nF/CHnWOII4Nfz/oRNoOF3xa8zLKSDRFtlSSJB2Z/l6vzL2BXdSHffu9nNHqaItaNhMVg5tXrn2Z6\n9nje27GYO/77CP52tsTomk8PLon4/meHlp5hS2LE6D69KsY6JLyyegJBNpKjdyIDRb5a6iMI8oS4\ndIZZBlDrb2FJ7X7c7QT5K2njGW1P51DzMV4t+RJviMgZZD13DbuU/PjBrKsUPF/4Ef52eSpynYN4\ncubdmPUmntjwIqtKN0e0VZZkfjHnTi4fPp/tVYLvfvBzmjwdY96dYTWa+ecNzzBp8Gje2vopP3zr\ncQKByDkzYnSkwlUV8f3ypsozbEmMGN2nV8XY7pMxBIKC3NCFINtlI0P1waXH+321NATCH60kSWJS\nXAa55iRqfM0srT0QJrg6Seaa9Inkx6VxwHWEf5auDys3ygZ+qFzB6KQsNhzby18LP+6QOEhJzOaJ\nmT/ApDPw+Pq/sq58W0RbZUnml3Pv5qK8OWwu38XtH/6CZm9L1H0SZ7Lx+o2/Z3xmPq9v+oD73vt1\npzkzYoSTau24Awz0TtL5GDG6S6+KsYREvCbInhMIcrxsChHkmoiCPMWeyVBzAkd9LpbUdRTkr2VM\nQrENZF9TFf8q3YAvRHBNOgOPTLmWvLh01h7dw4sHPiPQTgTzk3J4bMad6GUdj375ZzZU7oxoq07W\n8cT8H7MgZyYbyrZz18ePdmuWRLw5jn/f9AdGpyu8sv5tfvrB0zFBjoJY0vkY/Zlen00hIWEKSHgl\nFa8MAcCoShEH9YKDeAaOBVqoDbixSwaM0vE5xpIkkWF00OB3U+5poNrbRJY5AVnLMyFLEvn2NEpa\natjXVEWVu4GR9rS2cofdSr45i111h9laW0Sdt4lxzqFheSoGWpMYnjiEJcXrWV5SwMikHFJt4VtA\nBc8lM2/IdMSRA6w8XMDuI/tZmDOzLZH9iTAbTFwych5L9q7hsz2raPI0Myd3asScGdD/BmNCOV22\np8elMtCaTHXzEZq8LtLjUrk677IeTTof6/czx9k+gNdndvpQUanT+/HJYPJLxPnliIIMUBNoochX\nhw6JXH1Ch5V6AVVlVf1Bit11pBrszHEOQScdfwjwBHy8WvIlB1xHGGPP4Jr0iciS1LbzQZOvhSd3\nvcEhVxULUsdzXdbcDiK4oWIHv1j3J3SSzK9m/oDRA/Ii2urxe7jjo0dZfXgj5w2ZztPnP9ithR1V\nDUe58m/fY1/1Qe6ecyMPLvx+xHr9bdeGUGK29w79zfbTsfPG4HvnRS14h59ackZ3+ugziz6CIQsd\n+gC4dSpNus5DFgmymWydAz8qhb4aXIHwRRuyJDEzPosMYzwV3gZW1B0MG5Qzynquy5xKliWRbQ2l\nvFW+OSwkYdObuW/EVWRaBvB5xWZeP7y8Q5hgcuooHpr6HbwBHz9d8wd2HYuc49ioM/KHCx9iWuY4\nFhet5Sef/6bDjI2uSLEn8eYtf2RI0iB+t+xlnl7yYtRtY8SI0X/oM55xKwHNQ/bLYPZL2LrwkI/6\nmznkr0eHxDB9YoeFIX41wPK6Iso9DWQa45ntGNIWkgBo8Xt5uXgtxS01THQM5rbRszl65PiuIvVe\nF4/v/DflLce4LGMqVw+a1cGGlaUbeWz9C1j0Jn4z60cMS8iKaKvL28L3PniIgrIdXDJsLr86756o\nQxYApbWVXP5CcMeQhy64gzvP+VZYeX/zckKJ2d479DfbY3vg9SCR4jetMWSPpOLVtMrQSQzZKhsw\nIFOruqkNuHHIJvQh4QhZkhhkcnLU20SZt4F6v5tBJkdbyEEv6xhpT6ewqYq9TVU0et0MNQ1oKzfp\nDExKzGNzzX421exHQmJ4fPiij6z4dDLiUlhWvIEVZRuZlDKSRLOjg60GnZ6FObNYX7qNlYcLqGis\nZs6QzmPA7Yk3x3FB/rl8sHMJH+5cSrw5jkmDR7eV97f4Xygx23uH/mb72R4z7nNiDCGCLKt4NG3t\nSpD1JxDkwWYH1d4myjwNNPo9ZIYIskHWMSo+nX1NVeyoLaMl4CXPltJWbtEZmZiQy6aa/WysKcQg\n6RkWH77L8xBHBgOtSSwrKWBl6UampI7GaeqY49ioM7AgZxbrSraw4tAGjrpqOTdrStSC7LDYWThi\nNh/sXMr7OxaTZEtgfGY+0P9urFDOJtvP9HLsU6G/9XtMjHuQrjqmVZDdcnCWhaRKGNROZhLIBnRI\nbYLslM3tBFlmsMlJpaeRMm8DroCXTGN8uCDb0ylsqWZ3QwU+1U+ONbmt3Ko3MSEhh4Jj+yio2YdF\nZyLXnh5mQ45zEElmJ8tKC1hVuolpaWNwRMhxbNIbWZAzizXFG1l+aD11LQ3MGjwpakFOsDqYP2wm\n7+9YzHvbvyDdkcKY9OH97sYK5WyxvTeWY58K/a3fz3Yx7jMDeJGQkXB4dcgquPQBXHLnq9FSdDbS\ndXF4CbDPW4NHDR8kM8g65jpzSNRbONByjPUNJWGDcja9iR+OPo8BRhsrjhWy+IgIa59sdvBA/jU4\nDTZeO7SMLyq2dLDhoiGzuWPsN6hx13Pvymcoa4y8IsxptvPCZY+Tm5jFP7e/x9NrF3VrHnFeSjb/\nvfmPJFod/OjtX/GfzR9F3TZGzxFbjh3jVOjTYgzBJdOhgtzchSCn6myk6Wx48EcUZKOsY54zhwS9\nhcKWo2xsLA0TQafRys2DZpJosLL0qGDZkb1h7QeaE7g//xocBiuvHFzMsqqOq/Auz5nLd0Zfw9GW\nWu5d+QwVTUci2ppocfLi5U8wxJnJS5v/y7PrX+1OtzAiNYc3bn6OeFMcd/33UV5f/2G32sc4/cSW\nY8c4Ffq8GEO4IDedSJBlGwNlG25NkL3tljWbZD3znDk4dGZE8xE2N5WFCbLDYOHmwTNx6i18fmQ3\nq44WhrVPtyTxkxHXYNdbeOnA56yq7rgK7+q8Bdwy8kqqmo9x78pnqHbVRLR1gDWBRVc8yaD4NP5S\n8C+e3/Bad7qF0ekKb9z8LDajhete/Akf7Ih5YL1JbDl2jFOhX4gxBAU53qtD0gS5pRNBliSJdJ2N\nFNkaFGRfTdiyZwCzrOe8hBzidSZ2u6rZ2lQRVp5gsHLL4JnE6818XL2Tte3mEGdaB3DfiKux6sy8\nsP9T1h3Z08GOrysX8q0Rl1LhOsK9q57maHPkpPMptiQWXfEkGfaBPLf+VV7c9EZ3uoVxmfn8+6Y/\nYDGY+PbrD/LZnpXdah/j9BFbjh3jVOjVAbwmLZge7WQ+GQmjGhzU88gqMqCPMKgnSRJ2yYifAPWq\nh3rVQ4JsDptjbJB0DDI5KfHUUeqpRwKGOJPaBjQsOiPD41LZUV/GjsYy7HozGWZnW3un0Ua+YzBf\nHt3Dl0cFGdYBZFiSwuwYM2AY3oCPteVbWV+5g3MyJmKJkHTebrIxd8g0vjiwms8PrCbeFMfY1OFR\n9gqkOwaycOw0Xl//EW9v+5xxmfkMSeqYd7mv0t8GkkIJtb03lmOfCv2t38/2AbxTWvShKMpU4Ekh\nxFxFUXI9jLPNAAAgAElEQVSAlwmml9ghhLj9RO2rGlpUAiqSx3eiqmH4pODCEBWw+2VMgcgOvqqq\nFPsbOBJoxtq6nZMUXrfJ7+HzmkKaAh5mDcwmS3WGlVe56/nb4dW4/B6+kjqeCe12+9jXUMZTu/+L\nV/Vz17DLGJ+Q08GGv2x/gzcLv2BIfAZPzf4RjgjT3gAO1ZZyw9v3Ue06xs/PvYOvjbo46j5JTrbz\n5trFXPfKPQD884ZnmJ0zOer2vUl/W3wQSsz2M8fZvujjpMMUiqLcC7wAtLp6zwAPCiHOBWRFUS4/\n4UF0Epj0qMboV6JB0BuO9+mQgAZdALfUechikM5OomzGpfoo9NV2yFVs0xmZn5CDVTawqvIge9oN\nwqSY4rl50AzMsoG3Kjazta4krDzPns49w7+CTpJ5du/7bKst6mDDd0Zfw2VD51BUX8r9q35HQydJ\n57OcGSy64kmSLE4eXf4cb+76tFv9ck7uFF6+7jcE1ADXv3IPa4s2dat9jBgxeo9TiRkXAleG/D1R\nCNEasPwYmH/CI7g8EAiAydBtQTaECrK+a0HO0sWTIJtpUr3s99V2SI0ZpzMx35mLTW9kY2MZe13h\nMyBSzQ5uGjwDk6znv+Wb2FFfFlauxGfyI+VKJCR+L95jV93hDjbcPvbrXJg9i8K6Yh5c/XuavJGT\nzg9NGMSLlz+B0xzPL5b+nvdF5OlSnTFv2HRevPZJPH4v1/79RxQc3t6t9jFixOgdTlqMhRBvA6Hx\nhVCXvgHouCa4HZIKuLwQUIOCbDg5QYagIHu6EORsXTxOyURjJ4Js15u4Kns0ZknPhsYS9jcfDSvP\nMDu5cdB0DLKOf5cVsLuhPKw83zGYHyiXoaLyjHgbUR/uQcuSzN3jr2PB4OnsqTnIg6v/QLMvctL5\nvKRs/nbZ49hNNh5c/DQf71verX45f8Rs/vL1x2nxufn6yz9ga+nubrWPESPGmedUY8ZZwL+EEDMU\nRSkWQgzS3r8MmC+EuKur9j6fX9XrdfgCKrUeHwEgTi9j1XdPlJt8Xoqbggl+BtnisOkNEesFVJUt\nxyqobmligMnK+KS0sEE9gCMtTfz34DZa/D7OzxjGCGf4tKR9dVX8YccSfGqA7+efy+jE8KXR6yoE\njxX8G6Os5/Fp1zMiMXwgzR8I8NOlf+STwjVMSs/n2Qvuw2KIvJP05tLdXP3K3bg8Lbz41V9y0Yhz\nutUv//ryQ6578T4cFjtLf/wyYwdFPygYI0Yf5KyOGZ9OMX4XeFoIsUJRlOeBJUKILudpheUzliWw\nGEGWoMWL5O3eZpweKUC9PugZO3y6TpdOB1SVA75a6lUPDsnEUP3xPBWtAxrHvC4W1+7Hq/qZGZ9F\nljkh7BgHmo7w95K1AFyfOZVcW/j80g3H9vHHve9j1hm5b8TVDG23FNYX8PH4+hdYVbaZCSkj+OX0\nOzDqIv+AbKnYza3vPog34OMPFz7EudlTItbrbDDm9U0f8IM3f0mixcHbtz3P8IE5EVr3Lv1tICmU\nmO1njtgAXvT8GHhUUZTVgAH4b3caSwEVmj1ayEKPqu+eaUZVxu4LtqnX+/FKkftcliSG6p3YJSN1\nqpsif12HpciJBivznDnoJZnV9YcodofPER5qG8B1mVMB+EfJeoraxZgnJ+bx3dyLaPZ7eGr3mxxq\nCh8U1Mt6HpxyG9NSx7CpajePrHsejz88J3Mr41JH8Pwlj6CXddz9yWOsPrwx+k4Bvj7hEn57xQMc\nddVy1Yu3U1h9qFvtY8SIcWboc/mMVVkCqzH4R4sXyde93ZHdUoAGfQAJiD+Bh1zoq6FR9WrJ6uNJ\nSYkP8xSqvU0sqd1PQFWZ7cgm0xQeBt/TWMFrJevRSTI3DppBljUxrHxV9U5e2P8JcXoLD+R/lUxr\n+PZMHr+Xh9f9iQ2VO5mRNpaHpn4HvRx5F5B1xZv53oe/QELi+UseZWrm2LDyrrycgsot/GvX27j8\nLppb3Hxt+BVcmBt5gUJv0N88tFBitp85znbPuM+JMZwGQZYDNOiCguzw6SIuDIFg8vlCXy1NqpdE\n2cyk1AyOhCSXB6j0NLK0dj8qMMcxhDRTfFj5roZy/lW6AYOs46ZBMxhkCQ9pLKvaxqIDn+MwWHkw\n/2ukWcIF2+338NCa59hcvYdzMybxwORbOk06v/LQBu746FEMso6/XPoYE9NHtZV1dmO1ZhJrz6XZ\nF3LB0L6xMqy7olBQuYVPDy6hwlVFqjWF87Pn9drCiv4maKH0N9v7khgriiIBfwLGAi3ArUKIAyHl\n3wR+RHCSw0tCiD+f6Hx9cjm0FFCD094AzAZUXffMNAVk4vwyKgT31eskZKGTZHL1TqySnmOBFnbV\nVncIWQw0xjHHORSA5XVFVHjCL958expfTZ+IJ+Dj5eK1lLWEhzTmpIzhW9nzqPO6eHLXG1S2hOep\nMOmMPDL9dkYn5bG8tICnNr7cYS50K7OzJvN/F/wUb8DH9z74OdsqOi7Dbk9nmcRe3/UOZXX9L4FN\n649LWVMFATVAWVMFL+18jYLKjln0YsToQa4ATEKIGcADBNdZhPIUMA+YBdyjKMoJZ5f1STGGkBgy\ngKX7gmxuFWRJE+RO9tMLCnICFklPiaueEn9DB0FONdo5xzEEFVhWW0SVJ9x7Hh2fwdVpE3AHvCw6\nvIaKlvqw8vmp47k2aw413kae2PUG1S11YeUWvYnHZtxJfuJQFhd/yf9teoVAJ4I8b8g0frPgJ7T4\n3Hz7/Z+xs2pfl/3QWSYxi9nAV/72fSrrI2eV66vE0lTG6CPMAj4BEEJ8CUxqV74VSAAs2t8n9Mij\n36a4F5D8KmqzFyyGoCA3e5H80YcszAEZ1RdMLFRv8OPw6tBFmB2jl2Ty9AkcUOuo9jUjIZGhiwtL\n+J5hime2I5sVdUUsrTvAec4cBhhsbeXjHIPwqQHertjCouLV3Dp4Fikhy54vSJuIL+DnP8UreXL3\nGzyY/1WSQkIeVoOZX828i/tW/h+fHlqDQTZw17hrIyadPz93Nr6An598/htue++nLLriSZKTx3ao\nB8FMYmXtEiEBGCUTB44Wc9WLt/P2bc+THJcYoXXfI5amMsapsOCVG6Kuu+Wet7oqjgdCvSqfoiiy\nEKJVoHYCG4FG4C0hRH37A7Snz3rGrUj+ADRrMw0sBlRd98JGloCMzScTkKDO4MffyQ+UXpKZNCAd\nEzqqAi7K/B2XLGeaHMyKz8avBlhSu5+jXldY+SRnFpcNHEOT38OLh1dzpJ0HfUnGFK7MnE61u44n\nd/+X2nblNoOVJ2bdTY5jEB8ULedP2/7dadL5i4fN4bHzfki9u5Fb330AUVUUsV5nmcSuG3k13511\nLXuri7h60R0cc0XOKtfX6AtpKgsqt/D4l89w59L7+fEnj8VCJP0IWZbRRfnvBNQDoUlm2oRYUZTR\nwMVAFpANDFQU5aoTHbBPe8atSP5AiIdsRHV5gmGMKLFoHrJLH6CuCw/ZpNOTZ0hgn7eGykATsh/S\ndOFbJw02O5lBFqvrD7Gkdj/zE3JJ0FvayqcmDMGvBviwageLDgc95ETjcQ/6iozp+AJ+3i9br3nI\nXyPeYG0rjzfaeHLW3dy78mne2b8Eo6zn1lFXRfSQrxi+AI/fyyPLnuWqV+7mpcufJNuZGVandWDr\ns0NLKW+qJM02kIVZc5k0cByTLhyHx+dl0bo3uGbRnbx5yx9xWuI7nKcvcX72vIgDkmcqTWX7AdHD\ndaW8VBf8u69mZ4txnE+ve+l0HWo1cAnwX0VRpgGheQfqABfgFkKoiqJUEQxZdEmfnE3RGapeBrO2\nOKKbggzgkgO49AFklYiC3Dq67FH97PUew0OAdF0cqTpbh2MdaD7G2obDmCQd8xNycYYIMsDKo/v4\npHoXTr2F27Jm4QwRXFVVef3wcj4u30imZQAP5F+DPaQcoKalnntWPEVxYyXXKhdx08grOv1c/9z2\nHr9a+TwDbUm8fOVvGOxI77RuewKBAPe++2te3fA2EzJH8p+bnyXe3HHvvp7kZGZTRPpxORM8/uUz\nEcM+GXFpPDjlh2fEhtNFbDbFyZ8vZDbFGO2tm4CJgE0I8TdFUb4D3Ay4gf3AbUKILtNT9isxhlMT\nZBUVly5As05FpwmyHCLIoRenWxNkLwEydXGkRBDkwuajfNlQjFnWs8CZS7zeHFa+9IjgiyN7SDTY\nuHXwTByG44KtqiqvHlzCF5VbyLKmcH/+NdjatT/SXMs9K56irKmaG/Mv55vDO0+p+ca+D3j4sz+S\nFpfCK1f+hvT46B/bA4EAP3jrl/x704dMHjyGf9/0B+JM1hM3PE30J1G4c+n9EQdXZUnm2blP9oJF\nJ09/6nfoW2LcE/T5mHF7JF8AWlpjyMbgnORo2yJh9ctY/BJ+bZZFoJMYsknSkWdIwIBMib+Rar+r\nQ51cSxKT4jJoCfj4onY/DT53WPncAQpzkoZxzNvEouI1NIQkBpIkieuy5zEnZTSHXFU8tftNXO3a\nD7A4eWr2PaRak3h517v8Z2/nKTW/P+Mb3D3tRsobq7j53fupaKyOul9kWeZ3X/kZXxmzkA2Ht3H9\nK/fg8kROYvS/Tl+IWcc4O+nVnT66k3U/FCmgBieKGHSg14EvEHUGEQkJgyqhAl4deCQVU0BCQuqw\n84FeknHIJmoCbmpVNwZ0WOXwHBIDDDYMkkyxu45idx2DTE6MIYs2hloH4FX97GmsYG9jFaPt6Ri1\nVXaSJDHWOZQj7nq21hUh6kuYmqSgD2lvM1iYnjaOVWWbWFm2iTiDlRGJQzt8LpvNxHBHHqqqsrho\nLSsOrWdhzixsRkuHupGQJZkLRpyDqCpi8d41bCrZyWWjzkOv6/lhhdO140RrPPeNfe+yuWobVoOF\n9HZ5QU4Vq8HCluqOaUmvzrvstJ+rp4nt9NHz5+sO/VKMoVWQ1dMiyF5JxRiQiItwceolmXjJRE2g\nhVrVjTGCICcbbMhIwS2c3HUMNjkwaIIqSRI51mRaAl72NFWyr6mK0fEZYeXjE4ZS0VLLtroi9jWU\nMaWdINuNVqaljWVF6UZWlm4kwWRHScgOs6H1xpqcMQa338PSonWsOLSB83NmYzWEhz86Q5ZlLsw/\nl10VhSzeu4ZtZYJLR80Ls6UnOB2i0CrEDd5GVFQavI1sqd7OQGvyaRXJ9lsrDXak85XcS/vl4F1M\njHv+fN2h34oxRBJkf7cFOcBxQXaazTRHuDgNkky8ZKQm0EKN6saEHku7HBIpxjhQVUo89ZR66hls\ncoYJbp4thUa/G9FUyQHXEUbZwwV5QmIuZc3H2FZXRFFTBZOThoVtERVvtDFl4GhWlG5keelGUiwJ\n5IZsAdV6Y0mSxLTMcTR6XCw7+CWrizdxQe5szBH23ouETtZx0cg5bC3dzZK9a9ldUcglo+ZFM9Xn\npDkdotAqxO2pbj7C7Izpp3Ts9qTHpTI7YzoXDZnPFWMX4JT6xxzt9sTEuOfP1x36tRiDJsi0CrLc\nbUE2hghys8+H3qciRTiCQdJhbxPkFsySHovUTpANcfhRKdUEOcvsRC8dF9xhtoHU+5oRTZUUuY4w\n2p7e5nXKksTEhFwOu6rZVlvEwaYqJifmhQmy02Rn8sBRLC8tYHnJRtJsyQx1BKeyhd5YkiQxc9AE\nalrqWX7wS9aVbOGC3HMw6Y1R9Yte1nHxyLlsLN7Bkr1rKaw+yEX5c5B7SJBPhyi8se9d1Ajx/yav\ni4uGnHjTmZOlP4VY2hMT454/X3fo92IMwZV6QUHWn7Qg+yVoIYBPoi2G3B6jpCNOMgRjyIEWLJIB\nc4ggS5JEqiEOrxqg1FNPubtBE2S5rVyJS6XG28TepioONR9jdHx6m+DKksykxFwONlayre4gJa4j\nTErMQw4R5ARzPBNT8llWUsDykg0MsqeSHZ/R4caSJIlZgydS1XSMFYfWs6F0Gxfkzsaoi06QDTo9\nl4yax/qDW1m8dw1Fx0q4MP/cMFtOF6dDFDZXbYvoGbd6sT1FXw6xnEjgY2Lc8+frDmeFGAPg17wi\ngw50JyHIAQmdSU+L6j+hINskQ9BDDrRgkwyY2glymtGOW/VT6qmnwtNAlsnZJriSJDE8LpVqTyN7\nm6oobq5htD2jrVwnyUxKyqOwoZxtdQcpbz7GxMS8sB1JEs0OxicPZ2nJBpaVFDAkPoMRqVkdbixJ\nkjg3ewql9ZWsOLSBjeU7OD/nnE4T2Xf4rDoDl46ax+qiTSzeu4ayuirOHz474gKUU+F0iEJvDaz1\n1RBLNAIfE+OeP1936HdT2zpDAvD4gv90cnDaW7faS2RYbRgCEl5ZpUEfiPjYC2CXjQzVOwHY76ul\nIdBRBCfFZZBjTuSYr5kltQfwBo7vXKKTZL6aPpERcakccB3hn6Xr8YWUG2UDP1SuQLFnsv7YXl7Y\n/0mHua1KYja/mvkDjLKBx9f/lRWHIu8ELUsyj837IRfmncvm8l3c/tHDNHujn7YWZ7Lx+o2/Z3xm\nPv/a+D73vffrTpdo9yaTBo7jppHXkhGXhizJZMSlcdPIa/vFwFpP5NuIJVTqf5w9njGaIPsDwRet\nMWRv9B5ynM2Er9GDTwKvrOKXwNiJh2yS9FhDPOQ4yYhROj7rQJIkMozxNAY8lHkaqPI2MTjEQ5Yl\nify4NMpb6tjbVEV5Sx0j49PbPGC9rGNy0jD21BeztbaIo54GxifkhHmlKdZERiblsLRkPZ8dWIeS\nkE16XMd5sLIkMzd7GoXHDrPqcAE7qvZyfs7sqGdJmPRGLhk5l2X7vuRzsZq65gbmDZt+2jzk0+Wh\nhQ6szc6Yfkammp2K7a3ea70n8sKLUwmxRBNDj3nGPX++7nDWeMatSADuEA/Z2n0POd4now+AR1Zp\n1HXuITtkE0P0TgIQTFIfwUOeZh9MlslJtbeJ5XVF+EI8XL2s4xsZk8m1JiOaKvlPaUFYLmOLzsiP\nh1/FUFsqK6t38veiLzp4pWOTFR6dfjsAv1j7J7ZUR85xbNDpeWrhTzg3ewprijfzw08e73Srp0gk\nWB3856ZnGZ4ylBfW/ptHPnm2T3rI/YXQvMydcSr5NmKLU/ofZ5Vn3EqbhyxLwSlvUcaQ26aHaTFk\nr6Ti1UEAMKqRPWSzpMcs6YPzkANu4iUjhnYecqbJQZ2/hTJPA0e9LrLMzjYPWCfJjLSncbi5hr1N\nVRz1NJFvT2vzOg2ynslJw9hee5CttUU0+VsY48gO80rTbMlMyhrOx4WrWV5SwJgBeaRYkzrYqpN1\nzB86k+1Ve1l1uIDCoweZP3Rm1NPWrEYLF4+cy2d7VvHpnpX4A35m50yOqm1X9DcPDY6L6ctb3jip\n2Q+dxYkhmOfi6rzLTinEEk0Mvb/1+9nuGZ+VYgyaIPs0QTboQCedcGFI2PSwdoKsAoZOBNki6TGh\no0Z1UxNo6VSQa3zNlHsbOOZrZrDJ0U6Q0znoOsrepipqvS6Gx6W2Ca5R1jM5MY9ttQfZUnsAd8DL\nKEdWmCCPSM9ioD6ZpSXrWVZawLjk4SRbOiaK0ss6FubMYmvFblYeLuBgbSnnDZ0R9SwJm8nKxSPn\n8snulXy8ezmyJDNjyISo2nZ6zH4mCqdj9kNnYQRZknli1kOnHGJpvzglPS61g8D3t36PiXEP0pNi\nDN0X5A7TwzRB9kQjyLIBoybItYEW4iUThhCBkyWJQSYHR30uyj0N1PpaGGxytgmqXhPkItcRRFMl\nDb4WlLiBbeUmnYFJiXlsqTnA5tr9BAiQ7whf9JGkS2RwfBpLSzawvLSACSn5JFmcHWzVy3oW5Mxi\nU9lOVh7eQGl9BXOHTItakONMNi7Kn8PHu5bx0a5lmA0mpmZFTm4fDf1NFDrzancc3c1HRZ9H5Smf\nial4J4qh97d+j4lxD9LTYgwhgqxrDVl0LsiRLk4JCVOIIEPngmyVDRiQNUF245BNbXOMoVWQnRzx\nNlHubaDe72aQyXFckGUdI+1pFDZVI5oqcfk9DLOltJWbdUYmJeaxuWY/m2r2IyExPH5QmO1Z8elk\nxCWztHgDK8o2MnngKBLMHXMUG3R6FubMYn3pNlYc3kBl0xHmZE+NelAu3hzH+SPO4cOdS/lw51Ic\nZjsTB486ccMI9DdR6MyrDaiBqD3lvpDjor/1e0yMe5AzIcYQQZDlyILc2cXZJsiyikfTVqMa2Yu0\nygb0yNRqguyMIMiDzQ6qvE2Uexpo9HvIDBFkg6xjVHw6e5uqEE2VuAM+cm3JbeUWnZGJCblsrClk\nY00hBknPsHaLPoY4MkmxJrGsZAMrSzcyNXU0TpO9g61GnYEFObNYV7yFFYc2cMxVyzlZU6IWZKcl\nnoXDZ/H+jiW8v2MxA2wJjM/Mj6ptKP1NFDrzatvT1TzhaMIIPU1/6/eYGPcgZ0qMoZ0gGyILclcX\nZ1vIQlbxygQX/KmRRcsmG5CRQgTZ3E6QZQabnFR6GinzNtAc8JJhjA8T5JH2dPY2VrKnqQKfGiDH\nOqCt3Ko3MSEhl4Jj+yio2YdFZ2LswOww23OdgxhgdrKstICVpZuYljYGh6lj0niT3siCnFmsPryR\n5YfWU+9uZNbgiVELcoLVwQJlJu9tX8x7O74g3ZHCmPThUbVt669+JgqdebXtafA0sqVqe6chi96Y\nihdKf+v3mBj3IGdSjCFUkOWIgnyii1MOEWSPTu1SkONkIxISdaqbOs1DDs0zodMEucLTQJmngRbV\nR3qIIBtlPfn2NPY0VLBHm/401Dagrb1Nb2Z8wlA2HN3LhmP7cJpsZBoHhNmQl5BFvNHGitKNrCrb\nzIy0sdiNHZPkm/UmFuTMZOWhApYd/JJmn5vpmeOjFuQkm5N5w6bz3vYveHf7F2QlZjAyLS+qttD/\nRCHUq3V5XehkXae7efdU9rjTQX/r95gY9yBnWoyhVZD9wQUhel1wprUmyNFcnO0FWTqBIKsqbYKc\n0Ikgl3vqKfUEt3tKM9qPD9ppgry7sZxdjRXoJZnskClrcXoLYxOGsP7YXlaV7yLRaKfyEPz1vZ38\n8/N9FIgqJqQNIzctiVVlm1hTtoVZGeOJM3TcxcNiMDN/6AyWH1zP0oPrCKgBpmZGPyiXHJfIublT\neWfb57y7/Qtyk7MYPjAnqrb9TRTguFf7rSlXYlXtJ/SUW0MWvZEQqDP6W7+f7WLc77ZdOl2oAFZj\n0Ev2+MDtI6Ub29D4Uakz+AlIYPPJWAKRY8iqqlLmb6Qy4MKMjjxDYtgsCyC4U0hNIXX+FkZYUxhv\nSwvzSmu8Lv52aBW1vmYuTB7JrKTcsPYlriM8ufs/NJaYkHcP6WDDdy4byX55Iy/teoc02wCenn0v\nydbI+yNWNh7hhrfvo7i+nDunfovvTvpGVP3RyuaSXVz94u24vC387Ru/4uKRJ1640N+2/wml1fbW\nfflKG8sj1pMlmRvyvx5xM9XeWrbd3/r9dGyDdP6rd0StOZ9e/9wZ3Xbpf84zbkUC8GoeskEHEliN\n+qg9BRkJQ0DCrXnIsgr6CB6yJEnYJSMBVOpUD/WqhwTZHJb4Ry/JDDI52lJvqkCq8fiAm0VnYHhc\nKjsbytjZWI5NZyQzZA5xvMHKzOwRfP7pMfB03Jmj8lgzdy2cA6rK6vItrKvYxuz0CRGTzscZrcwb\nMo3FRWtYfGANFr2Z8WnRD8qlxSczfcgE3t72Ge9u/5zR6cPIGZDVZZu+6qFF48W22t7qKW+p2t7p\nlLXC2qIzlnM5Gvpqv3fG6fBU/7Hto4ejrXv92ItinvGZRJUAS9BDtupkXLWuqHNZAPgklTq9HxWI\n88uYu/CQS/wNVAeasUh68vQJYYN6AC6/h89rC2n0exhjS2W0LfzGr3Y38LfDq2n0u7k8dSxTnNlt\nZcnJdi778btE+jp1ssQL981FVVUW7Xyb1/d+wmB7Gr+dfU/EaW8AxXXl3PjOfVQ0HuGBWd/lurGX\nd6NXYG3RJr7+8g8IqCqvXP9b5uZN67RuX/TQWoW4Pe292Pa2d9Xu77te71ObmfZWvxdUbuHTg0uo\ncFWRak3h/Ox5UT0ZxDYkPcuRVKDZA/4ALn8AjN3b802vSjh8OiSgURfALUceyJEkiUydnSTZQrPq\no9BXE5aHAsCqMzLfmYtNNrKtqYJdTeHZvJJNdm4ZPAOrzsh7FVvZVHc4rDxjQMfBOYC0JFubDTeP\nvJKrcudzuKGc+1f/jnp35ClagxxpLLr8SZKtiTyx6s/8e8eH0XRHG9OHTOCV658G4IZX72XV/oJu\nte9tTjbrWVfZ42L5IsJzcgTUAGVNFby08zUKKrf0tmm9zv9smCKU1kE9nUmPqgvOW5P80TvtsraF\nk0dWccsqOhX0EfxrSZJwSEY8+KlXPTSqXhJkU1jIwijryDTFBzc49dRhlHQMMBwXWZvexDBbCtvq\nS9neUEqSIY5Uczw2mwn8ATaKjrtCf2N+HpnJcW02TEzJp87TyLqKbWyu3s25GZMi5jh2muOZnTWZ\nT/ev5JPClaTFJTMiOTxe3dWjfHZiBmPTh/P2ts94Z9vnTMseR2ZCWofz9MXH5Wh3Dolke2dT1vrC\nQo9QeqPfT5S7uavr6WwfwIuJsYYEJNjNNHv9wRiyqmpbOkWHrp0g69Xgex3OI0k4JBNuTZCbVC8J\nsjlswM4o68kwOih213LYXYdZ1pMUMgMiTm8mx5bM9vpStjeUkWK0MyRxAAk2A6mJViqPNdPY4kG1\nNkNeOXNHDybZ7AizYfLAkRxtqeXLiu1srRacmxlZkBMtDmYNnsinhSv5pHAFgxxpKAOCg4TR5GgY\nOmAQ+Wl5vLX1U97Z/gWzhk4k3RHuCfZFMY52uXJ3bO8LCz1C6Y1+7+pHLsU6oMvr6WwX49MeM1YU\nZSNQp/1ZJIS4pbO6fSFmHEpysp2qI43BWRayBC1eJK//xA1D8GoxZIB4n9zpSj1VVSny1VGrurFL\nRnL0zjAPGaDO18IXNYW0qD6m2QeRYwnPxHa4+RgvFa/BFwjw3fxzyAiE56HYVlvE78S7yJLEvcOv\nQsX09H4AACAASURBVInPDCsPqAF+u/HvfH54LSOTcnhi5g+w6CPvJL27upCb332ARo+Lpxb8hAvy\nzuHxL5+JmAIyIy6NB6f8MOy993cs4duv/xSb0cKbt/yRsRkj2srOpphxf6I3bO/qmlFVtcvrKRYz\n7gaKopgAhBDztH+dCnFfRVJVcHkgoILZgGro3jb1BjWYDxmgXh/AI3UeQ87WO3BIRhpUDwd8tQTa\n/TA69GbmJeRgknSsayimqOVYWPlgSyI3ZE5HL8n8dfdKRGP4zhBjnEO4I+8S/GqAp/e8RWFDWVi5\nLMncM/EG5mROZufR/Ty05jlafO6I9o5IzuWvlz6GRW/iJ1/8hsUH1nRrh4pLR83jj9c8TKPbxTWL\n7mRH+d6IbfsK/XnnkL7M+dnzIr6/MGtuj+x40p843QN4YwGboiifKoryhaIoU0/z8c8IkqoGB/Va\nBVnfPUE2qnKYIHulyD/GsiQxRO8kXjJSr3oo8tV1SNieoLcwz5mDUdKxtv4wh1pqwsqzrUlcnxlM\n8PNa6Xr2N4XHjCck5vL93IvxBHz8ds9bFLUTbJ0k85NJNzErfTxbj+zl4XXPd5p0fvRAhb9c+hgG\n+f/ZO+/wtsqz/3/O0J7e247tJMoiJCFkDwKhUEZoKdDS9i0bfqWUMsosL7S0lA2l0LJHoUBfCoSE\nTRKyh7N3ogxnecZxLFteWuf8/pDtSJYUy44dkqDPdeUC65znnMePjr+6dT/30HDH149i0UTWu4DY\nG1KXnn4ef7v0AVwtDVz++i1sr94d9bwThdEZI7h/zO08P+0x7h9ze0KIe4HEBmdsetVN4XA4hgFj\nnU7n6w6HYwDwJTDQ6XRGNQ/9/oAqd1Pojid+RaXO60cFrBoJvdS9zy63z0tZcxMikG+yYJCjR2oE\nVIW1tZUc9rSQYTAzPCkjwmVR1ezm432b8CkBLswbTH9reOrzlroK/rFlAYIgcOvQs3HYwx/gBeWb\neHLtxxg1Oh4ffzVFtvANI1/Az+/nPMvCfWuZnD+Sp39we8zGpUv3rOXn795FktnMwKzsiOO/G38t\nE/NjF51/ddEH3PjOQ2RYU1l419s4MiMTVRJ8/1i6fxXPLX8j4vWQ5+mUdlP0thhrAdHpdLa2/VwC\nXOp0OsujnX8i+ow7+9BUUQj6kCHoQ/ZHdzvEwiMouOVgurXVL8VMnQ6oKrv9dW0RFnr6SdaI2hA1\nvia+de1GUVWm2PqRozuyKZeWZmHxnp28V7YSSRC5Om8CBcbksPGLa7bw2u6vMMsG7htyBbnGcEH3\nBnz8ccU/WVW9hYlZI3hg7I3IYvQPkOUH1nHz5w+RarEytmAI9b4GskwZ/KBgWlwW5OvL/8t9nz5J\nljWdxfe8g1WInhF4opOWZuHLzYt7FDf7XXMi+rvbMxkrm6ojnqdT3Wfc22L8/4DTnE7nbxwORzYw\nFxgWyzI+GcQYekGQRQW3FBRkm1+KmqkHQQt5l99Fk+ojRdSTH0WQq72NzHftRgXOsheR1Zap1z73\nLe4K/lO+Go0ocU3eBPI6dfuYX72RN/fMwaYxcv+Qn5JlCBdsT8DLA8teYH3NdqbmjOa+M69DitG4\ndPG+VdzyxcNoRJlXZvyFUVlDu7UuLy55l4e+eI785CxmXvcSeVHC3k50drRsj2rN9bZ/uaeJEkfj\nRBTjo5EQ427gcDg0wJtAAcHWcfc4nc4Vsc4/WcQYOglyiw8h0D1BbhUVGuMU5J3+OppVP6migTzJ\nEiHIlV43C1ylCMA0exEZWkvY3Dc2lPNBxWp0oobr8ieQrQ+PsphTtY539n5LksbM/UN/Skan4y1+\nD39Y+nc21e7knLyx3DX6mrACR6F8W7qc279+BJ2k5bVLHmV4hqNb6/K3BW/y129eJD8pm9k3vhwR\n9nai8/ia59hfH/nFL1pESU+JFdmRpLNR73X3WJwTYtz39+sOvbqB53Q6fU6n85dOp3Oy0+mcejQh\nPtkQlLZNPQCDpi05JH70iog5IKIKUC8H8MfoOC0JIv3lJAyCzCGlhbKAO2JTL0trYYqtEBWY79rD\nQW94POxwaw4/yRqFR/Hx5oHlVLU2hB0/N3MkVxZMpc7XyGNbP6CmtT7suEHW8ZcJv2VwchHzDpTw\nt7XvxCwReXbReJ449x5a/B5unP0Hthzc2a11ue2sa3jo4t+wv66CS1+7meqGQ90a/11T1hC9MFBv\nRgDEygas89QnsthOIRJJHyF0FQQvqEBADSaFaCQIqMHIiziRVQFBBa+k4hVVtIqAGGVPQhQEkkR9\nR2EhBRWLoA2zkK2yDrtsYJ+njn0eFzWuvby14f2OzKUicyaD7IVscpezxV2Jw5yBSdZ1jB9gyUYW\nJFbX7WJd3W7OTB6AIeS4RpKZkjOKtQe3UVK9CZfHzdjM06LWOO6fXEC+LZsvdi7km91LmJQ/mtQY\nVeGiccHISdQ1NPLVtkXMcy7j4tPOwaQ1xD2+rzlaVtimw1uo90Ral73Zyy5WokRnultw6ERMtjka\np3rSR0KMQ4jn4RRUtZMgK8SIXIuKphuCbBd11CseGtTgnCyiNuwcm6zHJulZXb2Ob51fRmQujUwe\nwEBbAZvdFWxtrGCwOROjdOQaDmsuqgpr63axzlXKmOQB6EOOayUNk3POYHX1FkqqNtHoa2F0xtCo\ngjwwpZAsSzpf7lrInNIlTC0YQ7LBFnFeNEwmHWdkDsftaeKb7YtZsHMFM047B0OUqnLHm66yDNOT\n7JSUrYsY15spzvG2eeqcqt0VCTHu+/t1h+99oaCeIAQUaG2LxTVog/7kbmBQRIx+EUWAek2AQAyr\nRyNIDNAkoUOiSmmiMhD5B5mvt3P4cHTXwDf75jM2qZAL04fh9nt4ff8yDnubws75ce54LsoeQ3Vr\nHY9t+y8Nvuaw41aticcn3U4/azYzd8/jtc0fRbhNOq41+FwemvpbDrfUc+2se9nrKotnOYBgEszD\nF9zGteMuZ2vVLq5441bqW757f2ZXBYMm5p/Z58khsRIlOvN9icc9VUlYxiF0x1IQFDWYFCK3Wcj+\n7lvIKsF+el5RRadE7zgtCSJ2UYdLaaVe9SIgYO5kIX+889OjFrXJMySjESS2NFayzV3JUEsW+rYY\nYkEQGGLNp1Xxsq6ulE31exmT7EAXEmOsl3VMyh5JSeVGlldtRFFVRqRH73M3NH0Adr2Fr3cvYV7p\nMs4uHI9NHz05pJ32dRcEgbMHjKeqoYY5zqUsLV3DJadNRydrjzq+L+mqYJDJpMMuJPdpL7vONS3s\nOhutgdaI87prjScs476/X3dIiHEI3X04e0OQgbgE2Sbq2wTZg4SISTwilvEUtSkwpiAgsK2xiu2N\n1QyzZHUIriAIDLMV0OhvYb2rlC31+xib4kAbEmNskPVMzB7J8soNLKtcjySIDE8dGPX3Gp4xCKNG\nz5zSpXy7ZznTCydgidIMtZ3QdRcEgXMdk9hfV8HcHctYsXc9M06bjlaOnoDS13S1tsdL0EIrwZ2d\nP7lXCg4lxLjv79cdvvfF5UPpaaiPKktg0ASFucXbrWpvKipNkkKrpCIpwbC3aD5kgFbVz05fHT4U\n8iQLaVKwklus0KcrB13OpOzwTLg5NdtYULuDNK2Z6/MnYg4pDKSoKm/tmcOCg5soMmVyz+DLwjb1\nAA4213LHoqeobq7lhmE/4YqB58X83V5Z/R+eK/kXedZM/vXjJ8kwp0Y9L9q6B5QAN3/wEDM3fsPE\nwjN496pnMWqPvw+5q4JBJ1t4WCgn29xPpNA2h8MhAP8kWAKiFbje6XSWhhw/E3i67ccq4JdOp/Oo\nn3wJn3EvIPgDQR+yKAR9yHF2VQYQEDAFRPQBgYAYDHtTYviQ9YLMAE0SMiIHAm4OBVqAYL7/78Zf\n2+G3TDGmMTB3AjVaI42B8Pd/euogJiX3p8bbyOv7l9EUUhhIFASuLjyXialDKG2q4innx7R2Gp9u\nTOHJyXeQZkji1c0fMXPXvJi/242jf8avR/+cAw1VXDvrXmqaDsc8tzOSKPHC5X/kwqHTWLpnDVf9\n+y5afdGLGMXD6ur1PFLyDL+dfy+PlDwTdxhYomBQghj8CNA5nc4JwH3AM52OvwJc7XQ6pwBfEcy9\nOCoJyziEY7UUVI0E+jYLudnbrbA3FTXYKURSkZVg6nQsC7lF8bPDf5gAKgWSlRTJEDH3zU3VbGiq\nxCxqOTepf1gUhaqqfH5wM8vrSsnS2bi2rXtIO4qq8NKuL1lRu53B1jzucPw4zIcMUNZYzZ0Ln+Sw\np4FbR/yCi4umRv+9VJVnlr/BG+s+pDgpn7d+/DjJhvAkk6Otu9fv47r37uXr7Ys51zGRN3/xRLdd\nFvGWw+wJJ5t1GcrJNvcTzDJ+GihxOp0ftP1c5nQ6c9v+fyBBq3k7MAz4zOl0PtXV/brXYyjBURF8\nbXEReg0YtajNnrh9yAIC5oAIBAW5QQ60tXOKfB4MYrCH3k5/HfsCDYgIpBG+STbMlIGiKmxqrmau\nazfn2vtjCPERX5g+DL+qsMq1l7cOLOfavAkdm3qiIHJT/x8SUAOsOryT53bM4jbHj8J8yLnmDJ6Y\nfCe/X/wUf1//LhpR4vx+kyJ/L0HgjvHX4lP8vLPhE66bdT9v/ugx7DF673VGK2t47eePctW/72KO\ncyk3/Od+XrvyUTRS/I/u0SIiEhbu94s71r4a97nvnHfH0Q5bOVK3HcDvcDjEttIPqcB44GagFPjM\n4XCsdjqdC452wYSbopcRfAHwtLksjFpiZD1HH9smyLqAgL/NZREr2N8oaugvJyEisCdQT3VL5CbT\naaZMhhjTcQc8zHPtplU5UhpTEARmZAxnlC2f8lYX/ypbjiekdKYkiPy6/4WMTCpmc/0+nt8xG78S\nXmi/wJrFE5Nux6o18czad5i3vyT67yUI3DPxRn427CJ21O7hhtl/iNl7Lxo6Wcubv3icyUWj+XLr\nQm7+4EH8AX/c47/vdXITHEGUhLj/dUEDhFlAYkgNnlpgl9Pp3OF0Ov0E3RSju7pgwjLuAwRvABUB\ndHKbhezttoWsCgpeUaVBVrD6xagWsknU0F+2s8vvYsPhKopkOzbxyIabIAiMMGWhqCrbW2qY59rN\ndHt/dG0WrigI/DhzBAFVYUNDGW+XlXBV3rgOC1gWJW4ZcBHPOWexwbWHf+z8jN8MuAg5pHBQoS2X\nxyfdzl2Ln+GJ1W8gixJTcyOfO0EQ+MOUX+NT/Hy09Stu+vQBXp3xCGZt9CaqnTFo9Lz9q6e58q3f\nMWvTXDSShucvezBmEaNQMo3pUTtIJOJyv388dfr1vXWppcBFwIcOh2McENrcsBQwOxyOorZNvcnA\na11dMGEZ9xVeP3j8IIptm3rxDxUQsPhFtIqAr02QY1nIZjHYskkQBEr9LhqU8E0uQRAYZc5mgCEV\nl7+Vb1278SpHrEpREPhJ1kiGWbLZ21LLv8tK8IVYwBpR5lbHDIZY81lTt4uXdn0R0dW6vz2fRyf+\nDr2s49FVr7G0IjIjLXgvkYem3sLFA89mY7WTX3/2EM2+yHjZWJi0Bt676lnOyBvGh+u/5M6Zf0VR\nui7YdLTuEgkS9JCZgMfhcCwlGDVxu8PhuNLhcFzvdDp9wHXA+21lhPc7nc4vu7pgYgMvhN7e0FAh\naB1rZQgowU29bo0PCrGvLW3aEsNCBhAtEmtqg22V+stJEanTqqpS4j7A7tbDpMhGzrEXowmxKgOq\nwvvlq9jWWMUAUzq/zBkTZgF7Aj6e2v4xTncZE1IHc2Px+YidKrltrt3FfUuew6/4+eO4XzM2a3jU\nufqVAPfOeYIvdy1iTM7pfHDV0zTVR+8uEo2G1kYue/03rC/fxlVjLuWJS+6JmqIdytHq5B4LJ9sm\nWCgn29xPpA28viCR9BFCbwfBC0DJpkpe/Wgj732xjTU7ajDoZHLTYidAhI8X0CkCfgF8okoA0KrR\nE0NSbWbUFoU6pZU6pRWzoEUrHBFTQRDI0VppVLxUeN0c9DWRr7N3lMYUBYEh5iwqWuvZ2XSQKk8D\nQy3ZHR1HZFHizJSBbG84wAbXHmq9bkYmFYeJYLoxmaEpxcwvW8mCstU4kvqRbY5spSMKItMKx7Pr\n8H4W71/F+ortTO83MUz8j4ZO1nLRsLNZsLOEOc4l1Le4OXvg+KMKcmjSRG9myZ1siROhnGxzP9WT\nPhJiHEJvP5wlW6t5ZfYWGpq8qCo0NHlZ46whI9nYbUH2CSo+KVgkOpogm0w6Ai0BDILMYcVDnRLs\nOh0pyDbcAQ8VXjeHfM3k6490pRYFkaGWLA601LGz6SA1HjdDLFkdxzWixJnJA9lcv4+Nrj3U+5oY\nYS8KE8FMUyqOpMIOQR6W0p9MU2SyhySKnFM0nu2HdrNwz0q2Hyrl3OJJcfmAIehDvnDoNOY5l/GN\ncwmtfg9Tisd0aSH3Nr39zBytQlxvkxDjvr9fd0iIcQi9/XC+MnsLDc2RX7+rXa2cNTInbpeFgBD0\nHx9FkNvnrhdk9IJMndKKS2nFKmjRdBLkXJ2N+kArFV43h/3N5OuOCLLUJsj7W+rY0XSQWl8TQ8xZ\nHSKnEWXOTBnAJtdeNrj20Bxo5TRbvzARzDan0d+ez/wDQUEenjqAdGNKxO8liRLTiybidJWycM9K\ndh/ex/SiiUhifFsZRq2BC4aexZztS/hq2yIUVWFScZeb1r1Kbz4zXVWI620SYtz39+sOCTEOobcf\nznfn7Iy67dbU4uPi6QODtSzivFZnQVZpK8fZdoXQuRsEGR0SdaqHuqMIcp2/hQqvmzXba/j4y728\nN2cnq50HsRh0nFc0gL3NtexoOojL18wgc2aH4GpFDWcmD2Cjay/rXKV4FR9DbQVhgpxrzqDIlsv8\nspUsLF/DiDQHaYbIGseyKPHT0eexvHQDi/evZp+rnLOLJkT4o2Nh1hm5cOg0vtq2mC+3LkQSRMYX\njopzVY+d3nxm2oW4M92tUxwvCTHu+/t1h0Q0RR+SnWqM+npWmilYXMigiaNk+BFEBKx+CUmBVilY\n0yJWlEWyZKBAshJAZZe/jhYlPC5XEkQm2/rh2S+yZO4hymuaUFSVspomXp69hfXba/lV7jhy9XbW\nNRxgVtUGlJDNXovGyD2DLyNLn8QXlav5qGxZxBwmZI/gvjOvp9Xv4b6lz7Gzbl/UuRo0Ol648I+M\nyhrKl7sW8cC8Zwh0imk+GpnWND667h/kJ2Xx2NyXeWHRO3GPPZFIxEN/v0mIcR9y4fh+UV+/YGwB\n+AM9FmRbiCA3H0WQUyQD+ZIFPyo7/XW0qpGCvGdDS9Sxny/fh17ScHXeeLJ0NlbX7+Oz6k1htYxt\nWhP3DrmCdJ2d2eUrmFUW2WVrau5o7h59Lc2+Vu5Z+jdK66PXODZq9Lx00cOcnjGIT3d8y58WvhCz\n1VM0cu2ZfHTdP8m2pfPwV8/z6rL/i3vsiUKmMXKzE76beOie1vJI0HMSbooQevtrW26amcxkI9WH\nW2hq9ZGTaubK6QMYNyQD/ApIQlCQRaHbLgudIuAVVbxtH6d2gz7q3I2iBgkRl+rBpXiwizrkEBfA\ne7FcKa0+ZkwsRCNKDLNms6PpIM6majyKn/6mtA6XhEHSMiq5P2vqdrGmbhdaUWagJSfsWkW2XNKN\nKSwoW8WSirWMzTwNu+5I8lL7umslDecWT2LFgfUs3LeSupYGphScGfemnN1g5QeDJvHp5m+ZvXke\nqaYkRuYOiWtsT+nNZ8aoMbC+ZlPE673ZNSSUWHM/3r7reDnV3RQJMeZI1MOrszazevtBjHpN3NEO\nXZGbZmbaqBxmTCxk2qicjusKcESQNT0TZG2bIPvatdUb3ZI0iRpEBFyqh3rFg03UdwjyaufBqJuM\nOakmpo3KBYJRFEMt2Tgbq9jeVI1fVSg2pnaIpFHWMSqpP6sP72D14V0YJT39LVlh1+tvzyNFb2NB\n2WqWlK9lfNbpWNtqHIeKgk7Wcm7xJJbsX83CfStp8DQyKf+MuAU5yWhjumMCszd9y+zNc8mxZXBa\ndvc6VneH3hTjzkXke1qnOF5izf14+67jJSHGfciJIMYlW6t5uS3qQVWhodnHGmcNmd0IP+spRwRZ\n7JEgiyGC3BTwg3qkYH1nzKIWIUSQ7aIOSRAx6jWscdZEnD9mUgrDMlNDNu1khliy2e6uYntTFQhQ\nZDwSsmaS9YywF7Pq8A5WHd6BTWOisJMVNTCpAKvWxKLyNSytWMfE7BFYtKYIUdDLOn5QPJFFe1ex\ncN9KWv0exueOjFuQU0xJTBs4jtmb5vLJprn0S85laNaAuMZ2l97+NtVX8dDRiDX3rrqbfFckxLgP\nORHEOGb42eEWpo3KiTLiiCX9blv0wbFY0kFBDoAsBl0WAsEmp3GObxdkvwweUUXoQpBVFerbBDlJ\n1JGfbglzpWSnmhgyzow2X8GrBsjSWjpEUCfKDLFksbWxkm2NVciCSL+QkDWzxsDwpEJWHd5BSa2T\nZK2Ffp38nYOSCzHIOhZXrGVpxXom5Ywk3W6PEAWDRs/0ooks3LuS+XtXoKoqY3JPj3NVIM2czNT+\nY/lk4xw+2TSHAWkFDMoojnt8vJxsEQmhxJp7PJ1jvgsSYtyHnAhiHDP8rM1n2pkwS5resaQFAF+b\nIGt6JsgZNjP1Hg9eqQtBFjSoqNSrXhoUD3ZRT366pcOVcvaoXIZlpVHhaaDc20AAlUyNuUOQ9ZKG\nweYstrgr2dpYiU6UyTckd1zfqjEy3F5ISa2TlbVO0nV28k1pYXMYmlKMLEgsrVzH8soNnFs0FsEf\nnuyxuno9H+yYiaxTyLIns3T/Wjw+H6OzT4tzVSDDksqkotF8snEOMzfNYXBGMQPTI9/TY6E7Ynw8\nEzriIdbcj7fvOl4SYtyHnAhiHNtnao5qGffEko6HYxVkq1mPz+3DI6p4JRVRBTmKIAuCgEXQorQL\nsuolSdR3JH0AyIJIns5GmTcoyCqQqT2y4WaQNAwyZ7LZXcEWdyUmSUtuSAyxVWNkqK2AklonJbVO\nsg3J5BrDs/BOSx2Aqqosq1zPov1rmZw9CkNbC6jQDSQAWRJJs9qYX7oSVYGRWfFvymXZ0hlfOIqZ\nG79h1qY5DM92UJyaH/f4rohXjE/ETbFYcz/evut4OdXF+Hsf2hYr/OzC8dG7pFQcao76emVt0zHP\nRQBo8QaLCmmDBYa6E/Ymt4W9CSo0SgqtYvQNPUEQyJHMpIqGYF89fx3+TmFkBknDdHsxZknL5uZq\nNncqQblrVyMNC6xUzjLzxvu7eW/15rDj/UwZ3D34MvSShhd3fs7qwzsj5vGrwRfz04Hns7++irsX\nP4PLEyxaE6sYfFFaFk8te513N86Ke00AxhQM571fPYssSlz73r0s2Bm97nJfcrQC9yciozNGcP+Y\n23l+2mPcP+b271yIvw987y3jWOFnY4dEj+3sriXdXTp8yO2beoAQ6Drett3KERHQqkLQQhZVJGJb\nyFZBiw+FBtWLO4qFrBEl8nQ2DnhcHPA2ICOSpjV1uGoam/2AgOIRKS1tolXfzLDsI7GySVozg6y5\nrGizkAtM6WSFuDQEQWBk2iAUTYDFB9ax5uBWpuaOZnbpl1E3kLSSBnezl693LyHNmMzQ9Pg35fKS\nskhNthEwtbCzZSfLyldh01uP2SqN1zI+ETfFTjZ/d8Iy/h4wdkgGD183hk+enMHD142JKcTQfUu6\nJwgqQQtZUUAno2rjK57TjqwGM/UEwC0peITYFnK+ZCFZ1NOs+tnld0XUKjZJWqYn9ccoaljXVMH2\n5ho+X7436vXmraxgQ0N4UscASw53DroUSRB5fsenbHKFjxUEgd+P/x8uLjqL0voy7l3yN9IN0btI\nZ5kzeOOSx0g22PjTwueZuW1OHKsRZHX1elbUlmA1mxAFgXpfPW9uee+4JTOcSAkdJxvtCShX/N+v\n42/vchKSEONuMnZIBjfNGEpumhlJFMhNM3PTjKFHFfCeIKhAszfY3FSnCTY77QaaNkEGcMsK3qMI\ncoFkJUnU06T62O13haU9A5glHefY+6MXZdY0llN+KLpLxu8W+bBiLZsbKsJeH2TN5TbHjxCA53bM\nYmv9/og53HL6zzi/YBI7Xfuobo5+/R8UTKM4OZ/XZjyKTWfhf799ls+c0b/+dyaWm+CTnV3W/O4V\nEgXue0a7r72tU0v3/ghOMhJi3APaLelX757WpSV9LIQJsr5ngmxrE+SGLgS5n2TFLuhojCHIVlkX\nbNkkyJjs0eeRkWJAFkX+r2I129zhPuZhtgJuHXgJiqryrPMTnJ0saFEQuX3UL5mePw6nqxxJsJBl\nykAURHLMWWGdnB2phbx2yV8xa43cN+9pvt61uMu1iFX3oba1lo3l27scf6yMzhjBNUN/To45K+rv\nlCA6sT5ET0USPfBOcARVRW32glEbFGTamp7GSdBCFmmQlbZ+eqBVIz+DBUGgn2xjj99Fveql1O+i\nSLaH+ZBtsp5zkoqpOL2F9QsiO0T8aEIxGbkO3jqwnPcrVjGqycHadXVUHGomO9XIheP7ccuAi3h+\n56c8vf1j7hl8OcUhmXqiIPL7M67Gr/hZULYanezgqSkPo5O0EfcaktafV2Y8wvWz7uPuOY+jEWXO\nLoodAxurD15DUzOXv3ELH1//Yp8lhrQzOmNEQny7SawP0Z7y5K5v4j73ibSf9Oq9u6JXLWOHwyE4\nHI4XHQ7HMofD8a3D4Sjqzet/XxFUtc2H3GYhy92zkLWqiNUffKsbZAVfjO6ooiBQKNuxCloaVC97\n/PV0bsuVJBv45RlDOf0sC+YkCVEkzFXTz5jC/+SOpaVMYvY3ZZR1qgbnq7Lw6/4X4lX8PLn9I/Y0\nhlckkwSRe0Zfy8TskayvcfLQ8n/iDURvyTQ8w8FLF/8Zjajh9q//yqK9K2OuQSw3wdj0M6hraeDy\nN27BWV0ac3yC74ZYvvZTkV7tgedwOH4MXOx0Oq91OBxjgfucTuePYp1/qvfA621UUQCDNhhyVVUS\n+QAAIABJREFU0epD8B9xO8Qzd4+g4JaDsctWvxQzMURRVXb7XbhVL3ZRR6Fki0hFPuRrYp5rNwFV\nYbKtH3k6e9jxe15dSk1teHNUCAr3w9eNYdmhbby86wuMsp4nJlyNxRveJdqn+Hl4xUusqNrIuMzh\nPDju/6ERo3+RW1m+kV9/9iCKqvCPC//IhLzo9Yxj9cH7V8nH3DXrMdItKcy64SWKU+PfjD3Rn5mj\ncTLMvd1n3M4HP33xmFq5nMg98HrbZzwJ+ArA6XSWAMe37cIpjqC0WcjQZiF37+3TqSIWvxjMHJQD\n+I9iIRfJdsyCBpfiYW+gIcJCTtWYmGYrQhJEltTvo9zTEHa89nD0kKn2eOwJqYO5vug8mvyt3L/i\nbcqba8PO04gy/zv2JkanD2VF1UYeWfkqfiX6ZvqYnOE8f8GDAPz2i4dZWb4x6nmxYmevGnspf73o\nTg66a7n0td+w93B51PHxkCg92buE+tqBUzqaorct41eBD51O59dtP+8FipxOZ9Sdo+NpGZdsrebz\n5XvD/JedN97aLYV4zv0uUUUh6EOGDgu5O1aOR1RwS0EL2eaXosYhQ7Bj9C6/iybVR4qoJ1+yRljI\n1V43812lqMBZ9iKy2jL1Hny9hLKayKiIdsu4nfnVG3lzzxxsGhP3D7kiLA4ZwBPw8sCyF1hfs52z\nckdz7+jrYvbJW7R3Jb/98s9oRJnfn/YAW7f5u/Ue/nPxu/zxy+fIs2fxyQ0vkZeUddTzIdy67GzF\ntXOibtSdDJZxKKd6d+jeFuOngeVOp/PDtp/3O53OmLmnfn9Albvp/+wJi9aV8eS/10S8ftcvz2DK\nyNwen/td4lMUXN4AKmDTSOik7lnJLq+HypZmJEGgwGRBJ0V/H3xKgNWHKmjwecgzWRlsS4sQ5H2N\ndczevwUBgUsKhpJnssdcx2svc/Dj8YPCXpu9p4QXN39Jit7CExOuIdsULsjzS5fx0ur3URQfOtnA\nTaOvZHK/MUTji22LuOvdf1PUcmHEsXjew0c+f4kHPnmOorQ8Fv7+bXKT408K+f1Xf2F/faRVXWDL\n4cnzH4j7OglickqLcW9HUywFLgI+dDgc44DIaiMh1NVFTy3ubd7/Onro0vtfOxmca+v4OS3NEve5\nJwKqFPQh13v92LUy9Ye7l5JtFkUaZYU97gZsPgk5xrPeDys7hToONDXQ2uInVzKHCbIRmcnWQhbV\n72HWvi1MsxUxONfGTTOG8vnyfVTWNmFP0qAU1rNQ3ciAMgsZOmvH+BmFY3E1NPP+/oXcveRN/jD0\nZ6S2HQ+1NgVBwBto5fmSN3G7Wzkzc2TEXM9MHclIbR31URqYxPMe3jjmF9Q1NPH0t69x1pNX8cn1\nL5FhjZ6EAuHWZVlDZdRzDjRUnpAW6EloGX/XU+hTettnPBPwOByOpcDTwO29fP0e0Z16En1Ze6K3\nEQIqtAQjDVy+AGo3rWO9ImLyi6gCNGgCBGJUwpAFkf5yEnpBokZppjzQGOFDztFZmWQrIKAqzK8v\n5ZCvKSwe+8kbJnHl6GE0B7y8vn8ZNZ5wEfhh9mguz5tErdfNY1s/4HAXdSred86MmEM77oboHyrx\nvod3n3MDt069it2H9nPZG7/hUGNdXOMSWXYJjoVeFWOn06k6nc5fO53OiW3/dvTm9XtKzMagKaaI\n17pz7omAEFA6BBmDJmgtdwNDmyArAtQfRZA1gsgAOQkdEgeVZioDkcKWp7Mz0dovKMiuUg77wj/Y\nRtsLuDhjOE0BD68fWEatN7xm7sU5Y/lRzngOeup5dNt/cXkbY8aZtvpbeGnTB1EF+VjfQ0EQ+MMP\nbuamiVfiPLiHy974DYebXV2OS2TZJTgWvhcZeN2pJ3E8ak/0NkJAwdaenWfQBjf4uoFBETHGJcgS\nAzRBQa5SmqgMRBYgL9DbGW/Nx6sGmOfaTZ0/3F8wLqmQC9KH4fa38vr+ZRz2hov6j3PHc2H2mVS3\n1vH4tg9j1qlQEfl41zxe2/JxhCDHeg/HnB5/vWlBEHj4gtu4ZuxlbK3axRVv3Ep9y9G/0iey7BIc\nC9+Lqm3xVmYzmXQkmTTdquJ2omA162lqbA12C9FIwfZN3dib1agCKsF+el5RRacICFF8yJIgYhd1\nuJRW6tVglTizGJ4hlyQbMIka9nlc7G+tJ0dnRR8SI5xvSEYjSGxprGR7YxVnpOWjeoKTFQSBodZ8\nWgJe1rl2o5G0+LzhYXMAVzh+xJ76SpZXbkBBZUTakU3Bzu+3yRxgi/g5Kxu+5uzC8dj08fkeBUHg\nnIHjqWqoYY5zKcv2rOWS085BJx/5fTtXPjuebZOOlUTVtr6/X3fo1WiK7pJI+ug92ueuyiLoNcEX\nm73B2OQ4UVFplhRaJBVJBZtPQoyxqedR/ezw1eFDIVeykC5FugZ2thxipbsMvShzrn0AVlkXdvzb\nQ07mHdpOut7CNTnjsWoMR+aiqry9dx7zqjeQJWmxKF6qm2vCkjUOtdRx56KnqGiq4eohl/CLQZER\nFO28ue5Dnlr2OtmWdP714yfJtsSf2aUoCrd+9DAfrPuCsQWn859r/o5JG5zrqfDMnCyc6qFt3wvL\nOF5MJh3zVx/otf52x5N2K0dQVFAIWseyFOwWEufjJyC0WcgELWQhtoUsCyI2UUed4sGlepARMYma\nsHNSNEa0gsQBTz1lnnpydTZ0IRZyP0MKARS2uivZ0VTNMEs22rbjgiAw3F5Ina+RzY2V2M1Z/PGM\nmzk7b1KHtWnUGJiYPYKlFetZWrEOg6RjaEr0Pncjs4agEWXmli5jwZ4VnFs8CbM2um85Yl0EgfMG\nT2Z3zX7m7VjGmv2buHjYdDSSfNJZl6GcbHM/1S3jhBiHsGZHDX//74Ze7W93vAj9wxIUFVT1iCB3\no+N0mCBLXQuyVdThahNkDRLGToKcqjEhC2KIINvRtiVtCIJAkTEVWS+yyVXBzqaDEYI8wl5Ejaee\nDa49ON1ljE1xIIckfZg0RsZnnc7i8rUsrliLRWNkcHL0kihnZA9DURW+3bOChftW8oPiSR0WbleI\ngsj5Q6biPFjKvB3LWF++lYuHnYPNYjypBC2UhBj3/f26Q0KMQ3hx5mZcjZH1FI61v93xoPMfVm8I\nskJQkH2CijaGIGsEEaugpU5pxaV60EYR5DSNCRGBA956yr315OtsaEIEeXROAbXuJrY3VrOrqYbT\nrNlhx0clFVPVWsdG1152NVYyJnlgmCBbtCbGZQ5ncfkaFlWsJVlnZWBSv6i/25ic4bT6PczfW8KS\n/Ws4r/8kDBp9XOsiiSIXDDmLzZU7mLdjOZsrd/DTMefjaY2/it6JREKM+/5+3SEhxiG8842TaC70\nWJ2iTySi/WFFCnKgW4Ks7STIsSxkjSB1CHKd6kGPjKFTUZ90rRlVVSnzNlDhbSBfZ+8QXJNJRw42\n3AEPmw5tZm7pV3y268uODso55ixGJhVT3lLLRtce9jRVcWbKQCThSDCQVWdmTOZpLCpfw8Ly1aQb\nkulvj0z+FASB8bkjafA0smBvCcv2r+O8/lPQd/Jnx0ISJS4cOo31ZVuZt2M5Wyp2cf6gqUjiyReY\nlBDjvr9fdzj5nqA+JD8j+i77iRpjHA+CLwAeH7TVs4hRhiL6WATMARFtQMAvBstvRuvjBmAUNfSX\nkxAR2BOox6W0Rpwz3JTJEGM6DQEP81y7aQ0p/CMIAjkoNNftwON1o6BQ0VTV0RpJFiVu7n8hI+xF\nbK7fx/M7PsWvhFukBdYsHp90OxatiWfWvs28/dEbjwqCwL2TbuKnwy7EWVvKjbP/QIMnMkwvFjpZ\ny1u/fILJRaOZuW4uv/ngIQLKyWkdJzhxSFjGIaSnmli2MTKl9crpA04qn3FnhECbgGokkMUeWcgB\nAXyiil8gpoWsFSTMgoY6xUOd0opR0KAXjljIgiCQqTHjUxXKvQ1Uehso0Nmxmg00N3t5a8v7uH2R\noljTcojJOeMRBZEzkgewp7GajfV7KGs+xOjkAYghFnKS3sqotMEsKF/FwrJV5Fuy6GfNjvy9BIHJ\nBaM52FjLwn0rWVW+kR/2n4JW0kScGw2NJHPRsLNZW76Jb7YtYd/hCs4fPCVsLr1Je1r4f3fO6vjG\ncLyaqZ4onOqWcUKMQxhSnIZVL590McYQxx9We4dpjRTsPN1dQVbiF2SToOGw0kqd0opJ0KDrJMhZ\nWgutqp8Kr5sqrxtHUjreFn9cHZQlQeTMlAHscleysX4PlS2HOSN5QFhHkhSDndPTHCwoW82CslUU\n2nLIt0RWYBMEgSkFZ1LWUMXi/atZW7mV8/pPQSPFV7JFK2m4asoMvtm8jHk7llFZf5AfDJocUUjp\nWGkXYrevERUVt6+R9TWbyDCmHZMgJ8S47+/XHRJiHEJ70se0UTnMmFjItFE53baIS7ZWfyehcV39\nYQkQFGSBI4Ls674g+9sEOSAQc1NP1ybIdW2CbBa06IQjG26CIJCttdKs+KjwuilrqidPY2NDzeao\nlrFea+Hs3IkdVqckSJyZPJAd7jI21u+lxlOPv9LMK59u7Vj3gqR0zh88kvkHVrGgbBUDkgrINUd+\nqIqCyFmF49jrKmPx/lVsqNrO+f0nI8coZN+ZJJuZswsnsWj3SuY6l3GoqY7pjom9KsjtQtyZ9m8M\nPSX0mekLy7u3OdXFOOEz7kVKtlbz8uwtEa2GSrZWdz34OCAAePzg9QfF2KiN4QGONT7YT0+jCHhF\nFbcU24dsFXUUycHuH7v9LhqVTpuLgsBYSx6F+iSqWtzMry9lev5Z0e9ryuT9itX41SNlsXWShjsG\nXUqxOYvlWyp55dNtEeveVG3hLxNuQRJF/rTiRdZUb416fVmUeGz6XUwvmsDK8g3c+uWf8fjjtxht\nBgsfXPM8Q7MG8FbJR/zv58/GLGLUE2LV56hs6p3nKrQDs6KG++oTRCfeFnMOh+Nlh8Px13iumRDj\nXuTz5XtjvL7vuM7jaPSWIMsKeCWVxqMIsk3UUSjbUFCDReqV8F52giAwzpLPQGsqNb4m3HorVw25\nMqy2w68G/4zBKUPY3ljFfyvWEAgRZIOk5feDLkVfFr1G8efL93F6moM/jfsNAA+t+AcbapxRz9VI\nMk/+4F6mFoxh6f413P71IzF770UjyWjjv9e8wKD0Il5Z9h/+/PULqKraK50/+roaXKzKeN/sm98r\n1z9F+RGgczqdE4D7gGc6n+BwOG4ChsV7wYQY9yInS/nNDkH2BYKCbOiJIEvICni6EGS7qA8R5Dqa\nOwmyKAicl+sgT2ej2tdIo97KPWf+rqM10tisUfwydwyFhhQ2uyv4qHIdSojVaZL1BBqjb7pVKzt5\npOQZ3tr6NiPTctFLIg8se4HNtbuinq+VNDx7/h+YkDeKhXtXctc3j+MLxN/pJ9WcxH+ve4Hi1Hxe\nWPQOD817ulcszr6uBtfXlvcpylFbzDkcjvHAmcDL8V6wt4vLf2+I1popO9UYtdXQdxUat7p6PV/v\n/Zaq5oNkGtM5r9/ZHRXEBEBtbRNGjRQsv9nii9uHLLYJcoMcwCOpCCiYAmJUH3KSqEeVVPYGGtjp\nr2OAnBSWGCIJIhOtBSyu30u5t4HF9XuZbOvXEUesFWX+J28cbx1YzoaGMkQELs0a2bFpl51qilh3\nKbkSuXgDFW0vuzwuMowGqpub+cPSv/PYpNuiZurpZC1//+H/cvPnf2Ru6VLum/cUj0+/K2arp85k\nWFL5+Lp/csmr/4/dTaXYLZH7Bd/sm9+tSm7t50ZrptobZBrTqWiqinj9VKzD/MmhLXGfe0PauKMd\ntgL1IT/7HQ6H6HQ6FYfDkQk8RNB6/mm890tYxj0glm/YkZ8U9fzvovxmPH5AAaDVF7SQ5TZB7sY9\n2gVZUqBVUmk6ioWcLBkokKwE2izkFjXc4pQEkcm2fmRpLZR7G1jasC/MAtaJMlfljiNHb2ddwwFm\nV2/o8MtGK5kpZ++OOo+B9ixa/R7uW/ocO+uiu48MGj0vXPAQo7KG8uXOhTzw7bMoatQ2jlHJsqXz\n8fX/xGaO/iHcE4szVjPV3uD7VIdZFEVEKb5/XdAAhCYmiCG9Pi8HUoAvgHuBnzscjl91dcGEZdwD\nYvmGnftdYa2GslJMXDi+4DsJjTuaHzD0D7nDQhZoE2S6bSHb/BL1coDWNgvZGMNCTpEMqKjsD7jZ\n6atjoCYpLA5ZEkSm2ApZ4CrlgKeeZQ37mGAt6LCA9ZKGa/LG8/r+Zaxy7UNC5KKM0zrW9/Pl+6io\nbUIwtiIYoidxuH1u7h59LY+vfoN7lv6NpyffSaEt0uds0hp48aI/ccPsPzDbOQ+NpOGPZ/027jji\nXHsmaYZUDrXWRhw70SzOvra8TyRmJA/urUvFbDHndDqfB54HcDgcVwEOp9P5dlcXTIhxDziab3js\nkIwTIi65O35AgaAAYyAoyPqgQMcjyKGukDRTOpOLpzImfQSmQPSv9amSEQUoCxHkUGRBZKqtkPn1\npezzuBDdwU2+dkE2SNqgIB9YxgrXHmRR5Py0oWHrfsjTwB+XL0VVIiMiskwZnJM/Fp/i5+m1/+Lu\nJc/y1OTfU2CNjEM2a028fPFfuG7WfXy09Ss0oswDU26OO2zt4uLzonaLPhEtztEZI05J8e1DZgLn\ntrWYA7jG4XBcCZicTudrPblgQox7wInmG45Gd/2AYYLc1jWkK0Hu3Jq+urGKDzf8H5wOY9NGYlSi\nW5HpkhEVlfJAIzt9daT4w/2qGlFimq2Iea7d7GmtQyQYBtcugiZZx7V5E3ht/xKWHN6NJIj8IG1I\nx/hUnZVL+1/ARzs+ibh3uxCe328ifsXPc+vf5e7FT/P0lLvItUSujVVn5tUZj3DNJ/fyn82foZU0\n3D3xhrgEuV3cPt39NQebD9HQ1MTY9DMSoncK4HQ6VeDXnV6OaDPndDr/Fe81E0kfIcSbkWTUa1jj\nrIl4/btMm+48d6PGwPqayObclw2YETOYXwDwK8EIC40UrGdxlGpvsZIRaptqGdFvDKjBDiLRMIta\nBARcqoeDrU3YBF1Y4R9JEMnX2ajyuqnwumlVA2RrLR0iqBVlhliy2e6uYltjFQIChcYjLZoKrXno\nZCPbXXtQ1QB2nZ2fD7o0TAgHJvXDojGyqGItSyvWMTF7BBZt5AeqXtZxbtFEFu1bxYK9JXgCXsbl\njkAQhC6fmWxzJtPyJlFoKORvX73DN1uXUZiSx5DM/jHHHC8SGXh9f7/ukBDjEOJ9OONt43Q8idb+\nJ8OYRk3LIZp8zWSbM7lswIwurbKgIAeCNSxkKfhCILogx0pfbvE1c3bx2XglFaELQVZVcCke6hUP\nSWI0QbZT0VbpzacqZIUIsk6UGWzJYltjJVsbK5EFkX7GlI7xRbZ8RmSczlJ3BTWqyrDkAfTr9M1g\ncHIRBknH4oq1LKvcwKTskZg0kUXnjRo904smsmBvCfP3rEBVVcbknh73M5NuSWFK8Rg+2TiHTzbO\nYWB6PxwZ0esuHy8SYtz39+sOibZLIZxsbWhC6e25qwBGbdBK9vrB448Q5EdKnonqCskxZ3HPmNuo\n1wRQBDD5RQwxXBaqquLSednT6EIvSAyQk9F02iRrVfzMrdtFfaCVIcZ0RpiywtwEdd5mXt2/hHp/\nCxekD2Nicni3jwPNNTy69QOa/K3cWPxDJoa4NNp5d/vnvLV1FtmmNJ6e8ntSDdEjY6obD3HVzLs4\n0FDFbeOu5v7zr+/Wuq89sIXL3riFVl8rr/38US4YclbcY3ubk+15T7Rd6kNOdMs43joT31U9ilB6\n28oRoC3krc1lEcVCPporJNechUYR8IgqXklFVEGOYiELgkBekh13k4d61Ytb9ZIk6sMK/8iCSJ7O\nRpm3gfK25qQZ2iNRRQZJwyBzBpvdlWxxV2CStOSGiKlNY2KorYCSWicltU6yDcnkGsO7Tg9PHYii\nKiyrXE9J1Sam5JyBQY4sOm/WGjm7cDxzS5cxt3QpJq2BoSkD41tUgmFv4wpHMnPjN3yycQ6n5wyi\nKDWy7vLxIGEZ9/39ukNCjEMIfTjbY4m7asEU73nHc+69RYfLot2HDGGC3JUrRGwrv+kRVbyiikh0\nQTaZdEgtKn4UGtoE2d5JkDWiFBRkTz1l3gZEBNK1R9bXKGlxmDLY7K5gs7sCq2wgR2/vOG7Xmhls\ny2NFrZOSQ9vJM6aSbUgJm8fpqQ48io/llRtYVbWZKbmjoxadt+jMnFU4lrm7l/L59oXY9RaGZwyK\nOC8WufZMzswf3iHIo3KH0i8lekp3X5IQ476/X3dIiHEIoQ/nK20C25nOLZjiPa+v6as/rDAfcpsg\nC4EjCRBdtabvLMgSkYLcPneroMXXIcg+kkRdhCDn6myUeVwc8NajEUTSNEc23EyyjoHmdDa5K9js\nLidJYyRLb+s4nqy1MMiay4paJytqnfQzZZAZYkELgsCotME0+lpYUbWRNQe3MjV3NDpJG7EuNr2F\nqf3GMHfPMr7atZg0UzJD0wfEva75SdmMyhvGxxu+ZtamOYwtGEFeUmR4XV+SEOO+v193SGTgxSDe\nOhMnSz2KY0FQgWYvKAroZFRt16nBJVurefD1Eq5/fD4Pv7YS58ZDCIBbUvAI0bPZBEEgX7KQLOpp\nVn3s8rvCCgMBmCUt5yT1xyBqWNtYgbM5PKolQ2fl2rwJ6EUNH1WuY0NDWdjxAZYc7hz0YyRB5Pkd\ns9nk2hsxh18Pv4KLC6dSWl/GvUv+RqM3+nvcz57LR7/6G8kGG39a8Dwzt83pcl1Cmdp/DG/+4nH8\nSoCfv307Jfs2dGt8glOLhBjHIDs1ehv3zrHE8Z53snNEkFXQaVA1sQU5Wrr4a7O24tx4CAC3rOA9\niiAXSFaSRB1Nqo/dfldYWjSARdIx3V6MXpRZ3VjOzpZDYcez9DauzhuPVpT5sGItW9wVYccHWfO4\nbeAlADy3Yxbb6g9EzOGWEVdyfsFEdrr2cf+yv9Pka4k6X0d6Ia/O+Cs2nYX//fZZPtvRvUpn0x0T\nefXKv+L1e7nyrdtYc2Bzt8YnOHVIiHEMotU7CL5e0KPzTgXCBFkfW5BjpYt/tWw/Nn9wTEMXgtxP\nsmETdDTGEGSrrGe6vT86QWalu4zdLeFpx7mGJK7OG48sivxf+Wq2ucOjPobZ+3HrwBkEVIVnnDPZ\n4S4POy4KIreN+h+m549j2+FSHlj2PC3+yM7hAINSi3h1xiOYtUbun/sUX+9aHPW8WFww5Cxe+umf\nafa28LM3f8fG8u3dGp/g1CDhMw4h1IcWbyxxb8Qc90Y0xvHy/3UkhshS0IesqsEu1CG8O2dn1HJB\nTa0+fjSxEFkFj6jiEVVkFaxGfWRna0HALupoVn24VS/Nqg+7qA8LadOLMlk6C/taXezzuLBIOpJk\nQ8dxm8ZAP0MKGxrK2eQuJ0dvJyVk0y/TkESeMY0VtdspqXUyxJpPsu5IlIYoCIzPHM4BdzWrqjez\n7fAepuaegRxSwa193dNNKYzJGc4XOxfy1a5FOFIKKUzKi3tdHRlFFKbk8vHGb/h00zzOcUwgzZwc\n9/iekPAZ9/39ukMizjiE7yLusv0rfWdumjG0W4Iez9yjlf3saaKKKgpg0Aaz9Fp8CP4j3ZEffL0k\narp4bpqZh68bA4BXUGiQg5ZxgdlCU110N4Ciquz2u3CrXmyCjiLZFpGKfNjXzFzXLvyqwiRrP/JD\noigAdjfV8HbZCgB+lTuOYlNa2PGVtU7+sfNzDJKWe4dcHpEY4lf8/KXkFZZWrmd0+lD+NP7mjsal\nndd9beUWbpz9B3xKgBcueJDJBWfGXsQovL/mU3730Z9JNSUx8/oX+zQxJBFn3Pf36w4JN8V3zPHq\nDtLbLaEERYUWL6gq6GVU+cijFI/rRquKWPzBMQea3PiE6H8joiBQLNuxCFrqVQ97A/URLY2SNUbO\nthcjCSJLGvZywFMfdrzYlMYvcsagAu+UlbC3OdylMSbFwU39f0hLwMPj2z5kf1P4pqAsytw/5gbG\nZp7G6oNb+HPJy/iU6EXnR2UN5R8X/glJELn1yz+z/MC6qOfF4sozLubJS+7lUFMdP3njN+w+dOJ0\niUnQt/SqGDscjrK2flDfOhyOR3rz2qcqxysaoy9EX1DUoA8Zgj7kNkEeOySDm2YMJTfNjCQK5KaZ\no1r6ujZBVoAGOYD/KIJcJNvbmpx62BdoiBDkVI2JabaioCDX76Xc0xB2fKA5gyuzzySgKvyrbDn7\nWw6HHZ+QOpjri86jyd/K49v+S3knwdZKGh4c+/84I30IK6o28sjKV/HHEOSxuafz/AUPAnDLF39i\nZfnG2IsYhavGXspfL7qTg+5aLn3tN+w9XN71oAQnPb3mpnA4HMXAM06n85J4xyTcFPF9pYeuXQzR\n5h46pvMGWDuSKPDq3cdW0lEVhWDqNECrD8EffyF2AK1NR0VzEwJg80tRE0MAAqoS7KWn+kgR9eRL\n1giXRbXXzXxXKSpwlr2ILK0l7PgWdwX/KV+NRpS4Nm9CWKYewLfVG3hrz1xsGhP3D7mCLEO439YT\n8PLAsudZX+PkrNwzefqHt3E4xgfnwr0rufXLP6MRZV6d8QgjsyLTsI/GPxb/mz99+Xfy7FnMuvFl\ncu2926054abo+/t1h94U4yuAewi2ImkG7nA6nREl5ULpKzHuqW/0RPUZx3NO57nHGtOZzqLfXcLW\nOt3MBVOLGDsgLSwxJOK8Tu9JWpqFA7X1NMoKggo2n4Qco1acX1WCvfRUP6migTzJEiHIlV43C1yl\nCMA0ezEZ2vDN0I0NZXxQsQa9qOHa/IlkhySGAHxTtZZ/751PktbM/UN+SkYnH3SLv5X7l/6dzbW7\nuGjgZG4Z+ouwAkehzC1dyh1f/RW9rOO1Sx5leIajixUN59n5b/DonJfol5zLrBteIssWvTlpT0iI\ncd/frzv0yE3hcDiudTgcmxwOx8b2/wKVwF+dTufZwKPAv3tzovHS277Rviaer/Q9cTFKieQuAAAg\nAElEQVTEGtOZYwnBi1jrajevfLCBkp01qCFta+J5T/SKiMkvogpQrwkQiNG+SRZE+stJGASZQ0oL\n5YHGCJdFltbCFFs/VGBBfSkHveFlPodbc/lJ1khaFR9vHlhGdSeXxg8yR/Gz/CnUeRt5bOsHHOp0\n3CDr+cuE3zIoqZDPdizmb2v/HbMt0/SiiTxx7j20+D3c9OkDbKuJ3gw1FrdPu5Y7pl3H3sNlXPr6\nzVS7D3U9KMFJSW9axgbA73Q6fW0/H3A6nUeN7fH7A6osx9foMV5++9R89lY2RLzeL8vK878/8Tos\nxMMld81GUSLfJ0kU+OTJGd0a0z4uL8PC5ecMYMrIntdEiLXWuZkW/vTbydi1ElpR7NZ7ctjTSnVr\nC7IgUGC2oI3RCNQbCLDyUDlNfi/9zHYGWlMiLORdDYf4/MA2NKLEpQWnkWkMd1ksrtrJOztLsGr0\n3Dn8XLKM4Rbyf3Yu4l/bvyXTmMSTE64h1WANO97gaeKmzx5h26E9XDHkXO6bdE3MovP/3fA1t8z8\nC3aDhZlXP8+QjOKo50VDVVXu/ehpnvj6dYZkFbPgrrdJs/Rt2NsJyiltGfdmp4+HgFrgSYfDcTpw\noIvzqauLvnl1LOyviv6160C1u8uvZCfq17bslNidRdrn23nuscZ0dkscy+8ba60rDzaCquLy+KHZ\n2+V70nnuRlGkWVbY09CAzSchxfgbLBKs7KCOvY0uWpt9ZMvh7ggbOiZaC1jasI+P927iHHsxySG1\nigdJmVycMZxPqzfy1IY53JA/MSwO+Rz7SFw5zcwqX8FdS97k/iE/xd6p+PyLF97HtZ88zAdb5xDw\nqtx02uVRBfms7Ak8PO13/O/8v/GTt37Hmz96nOLk+Ku13TnlRuobm3h56X8464mrmHn9iyR1+vDo\nLifq8x6LtDRL1yd1wWZvZFOIWEzj2O/XHXozmuIxYKrD4VgAPAVc3YvXjptTMT25J1l+xyMz8Khr\n3dpWPMmoJTs1+trHek+MiojRL6J04bLQCBIDNEnokKhSmqgMRHYdKdAnMd6aj1cN8K1rN3X+8Hjm\ncUmFXJA+DLe/ldf3L6OuUx2KS3MncGH2mVS11vH4tv/S4As/btdbeGzibRRYsvho11ze2DIzwm3S\nca0h5/Hg1FuobXFx3az72OeKP0pCEAQevuB2rh77E7ZW7eKKN39LfUvfCunq6vU8UvIMv51/L4+U\nPBPWWTxB73PKJX0cSxLFiWwpBDfAYnedjh1N0Xedqrtaa1UWQa+hZGMFr3wQWQSn/bxY694kBWiR\nVKS2TT0xhoXsVQPs8B3Gi0KOZCZDihT53S21rHAfQCfInJvUH1unWsULa3fwTc02kjRGrs+fhF1z\nJJNPVVXe27eAr6vWkmdM497Bl2NpO94+98Ot9dy56CnKGqv55aCLuGpIdPcRwL83zOLRJS+RaU7l\nXz9+klxr/FESiqJwx8xHeG/Np5yRN4wPrvk7Fn3PSrUe7Xnv3N+wnWuG/vw76+F3qm/gnXLp0MeS\nnnwipoe2p0ovXF+BxajhZ+cM4H/Oc0SkS0ebe26amWmjcpgxsZBpo3J6vb5yV2stKCooKrk5djJT\nTFQfaqKpJfK8WOve3q7JK4JXUNEpAkIUQZYEEZuow6V4cKkeJERMoibsnGSNEYMos9/j4oDHRY7W\nhk484qVrb9e0rbEKZ2MVQ63ZHccFQeA0Wz8a/M1scJWytWE/Y1IGohXljrkbZD2TskeyrHI9yyrX\nIwsSp6VGL6k5PHMQelnHnNKlfLtnOdOLJmL5/+2dd3gc9Zn4PzOzvapaXbZVPC6yjSvggnGDhOZA\nIJdfKu2SXMrl4EJJciHtkpDQckcKITGEELgEQiAQ4tDce+/2SLZlq9mSLGlVVto+vz9Wkne1u9LK\nlmzJzOd59MDud2b33dHos19/y/sak/uXmyAILJ+4gKqWOt5XNrPt5F5WTFveuyNwMPR3vyeqb9jY\ndZaFeVcP+r2GAm079DCirTPun8H08ntiH8otz0OFqpPArA8nGOryxeSy6O+6q6i4pRAeSUUKhdch\nJ+ohe9QA5f4WAoQokOxkSrHDKEc7G9nVUYtF1LM8tQSbdC55vKqqvHf2COuaKsg02Li3cAG2iOTy\nIVXl+RPvsq7xIMW2HB6cdDuF2elRsdd3NnH/usdo6GrmC1Nv547S6xJel2d2/h9Pb/sDBY4cXrj1\nZ2TZMhIe25dAMMCXX/kubxx4jwVFs3jp809h1sdWJumP/q7719Y8HHeFiCiIPL340UG9z1Ch9YyH\nkZGcKGgkMJjE9VarkTU7q0dE1ZG+CCE1vG1aL4UTDEVUnN52uJ6n/7KPF99R4iZJEhDQqwIq4Jf6\n7yHrBBGHaMQV8uBSveiRsPTpIWforegQqfa1UuNtpcCY0rtiQxAEiiwZ+NQARzvqqXA3UGbPxRDR\nQ74itZhGbyv7XJWUt9dybX4ZPs+5vBw2vYV5udPZULubDXW7cRisTEwbH/e6zM6dSlANsbpyC+tP\n7eC6koVYIoZH+kMURT4yeRFH64/zQfkW9tYe5uaypeik5Ofk+7vf9zTsj9sz7ikmcCm43HvGmowj\nGEjGF7vWXX/Zz26ZH/0HbrUaeepPu0dE1ZF4xBPy9u6ev6vD2++XR4+QQ4SF7BdUDAmErBdEHIKB\nlm4hG5Ew9xFypsGKCFT72qjxtVJodKKPEHKJJZPOoA/FXc8xdyNTHblR7TNSiznd1cz+1pMcbalh\nVkppVCY3u8HKldlTWV+7i/W1u0g3OZmQGn/idG7eNDwBL2tObmVj1U6uL1mQdA9XEkVumHwtB+oU\nVpdv4dCZCm6asgQpwXLAvvR3v/dX37BvNZeLhSbjYWQ0yfhi1rrrkX6rO34seRm2uD3j375xMGl5\nXwr6CvnZ1/Yl/eUhdJdvihRyoh6yXpB6hdyiejEJOsxCdI9xjMGGqqrU+Nqo87VRaEyJEm6pdQwd\nQQ+Ku57jnWeZas/rFa4oCMxMLaG2q4k9zSeodJ9hTvqEqF14TqONudllrK/dxdqanWRZ0ilJiV12\nLwgCV+fPoM3bwdqT29hctYfrS66JW3svHpIoceOUxeypPcwH5Vs4Wn+CG6csRhIHXijV3/0+UH3D\nS8HlLmMta1uSXIrsaolItDxtNCzrE/xB8PpBFKhrGlySJAEBW1DEEBQIiOEE9WqCZW8WUU+JLhUR\ngcpAK66QJ+aYadZsJlnG0Bb08oHrOJ6IxD+iIHBL1nRmOAqo9bh4oWYr3oh2nSjx5ZIbmZs1gYOt\np3i6/C0CoWDU64915PLTBfdhN1h5YtcLrK7eFv9zCQIPL/gi/zLlBpSmE3zhzW/T5o0dIkiESW/k\nhc88xoKiWfzj8Fq+8sp3CQTjJzEaDLOzruBbc+/j6cWP8q25911SEX8YGPU946EcOuivp9DfkEFW\nqmXIYkg0Tgzh1QuJVoZYrUYIhtilxC5q/3/LSi/pmHFfhGD4Su460kBbnN5/vJ5/77ndPeSgAH5R\nJSCQsIdsECRs3ZneWkIeLIIeU0QPWRAEsvU2fGqQWl8bZ7p7yLruHq4gCEy0ZdPk76Dc3UBVZzNl\njtzeHrAoiCwvns6hhmr2t1ZS03mW2WmliBE95FSTg5mZk1hbu4O1NTsZ68hhrCM39nMJAgvHzqG+\n4yzrT+1gZ+0BPlJyTdKrJPSSjhunLGHryT18UL6ZKlcdH520KOGOQBh5cyQDcbn3jEe1jId66KC/\nm3On0hBXkqk2IxsPnB6yGBJJXxIFnvragoSvabUaSbXqL7jqyEUjGMJiNbDrSENM00BfHgIChpBA\nIEkhWwU9zSEPLSEPVkGPsY+Qcwx2PGqAWl87Z3ztjDWm9gpXEAQm2bJp9IWFXNPlosx+TsgOm5nJ\npkIq2uvY33qSM54WZqWVRFW1TjenMD1TZm3NDtbW7KDImU+BPXbcVRAEFo2dS03bGdZX7WD36cNc\nX3IN+iQn5Qw6PTeXLWHTiV28r2zmdFsD18kLEgpZk/Hwv99gGNUyHsxqg2Tod0LDpI/b6zQbdXT5\ngjHPn28MiaTfX28RzsU+3GuLhwoByEu3kp1lo76lC3fn4L48BASMEUIOCiSc1DN2C7mlW8g2wYBR\nODfJJQgCuQYHnSE/db52GnwdjDWmRPSABSbbczjtbaPC3UCdJyxkURCxWo14uwLMTZtAeXsN+1yV\nNHpbmZlaHCXBTHMqU9NLWFOzk3W1OylNKSTPFvs5RUHk2vFXUdlSzYaqnew/c5TrSxaiE5MTslFn\n4OayJaw/vp33lE2cdbewTJ4fV8iajIf//QbDqJbxYFYbJEN/N2eiDQ6bD54Z0hgSSX+g3uJo+8OC\nc0K+4dpSPnptCYvnFJCXYk46G0yMkAGDmkjIOiy9QvZiE/QY4gi5I+ijzt9Og9/NWFNK75CDKAhM\nseVQ63FR4W7gjLeNKfZc7NZw/T6dKDEnfQJH2qrZ76qkxdfBFX2EPMaSzuT0ItbUbGdNzQ4mpY0n\np08JqPB7iSwZfzUVTSfZULWTQ40VXFe8IGrFRn+Y9EZuLlvCmoqtvHd0I+3eDhaXXhUj5NF2z2gy\nHkYuVMbn24tMxEA3Z7xe51DHcL47CEfbH1YPApBiM9LZ5eteZSGCPzhoIfsFFb8EIRILuWdVRXO3\nkO2CIUbI+UYnbUEvp33tnPV3UmhK6R1yEAWRKfZcqruaqXA3cNbXweyssXR1//71osSctFIOtVax\nz1VJW6CT6SnjoySYbc1ATh3PmprtrK3ZwZT0ErKtsZs9JFFkadHVHG08wYaqnShNlSwvnp/0sjWz\n3sRNU5bwvrKJd45uxBvwcU3xnKhYRts9o8l4GLlQGZ9vLzIR53NzJoqhvdPHrvOczDufoYaR+oeV\nzASr1WrE3eYJFzfVSSCJEBickA2DELJJ0IXXIYc8OAQD+j5CLjA6cQU8nPa30xzopNB4TshSt5BP\ndTZT7m6gsaudCeasXskZRB1z0ks54DrJXtcJuoJepjrHRUkw15ZJibOANdXhSb3pmTJjLLEpMSVR\nYlnRfA40KGyo2smJliqWFc2PmiDsD4vBzI1TFvPu0Q3888h6VGBB0aze9pF6zyRCk/EwcqEyvpA8\nFPE4n5szMoaOLl/UkMXF3AE3Ev+wkp1g7Y09EAoLWS+BJETt1BuIvkJWCee2iCdks6DDiESLGl5l\n4Uwg5OZAF6d97bQEuigwOqOEXGbPobKricOtp2kNdDLRlh0hZD2z00rZ56pkj+sE/lCAKc7CKCHn\n27MY78xjdc121tXsZEbmRDL6lICC8BK65UXz2XPmCBtO7eRUay1Lx1+dtJBtRgs3TF7EqiPrWXV4\nHTpR4urxM6Kv+yhBk/EwMhRL24Zywup8b86eGBINWVyMHXAj8Q8r2QnWntgFGBIh+5IRsqjH0C1k\nV8iDQzSijxCcKAgUGp2c9Xdy2t9Oa9BDgTGlV6g6UaLMnkuVr5kj7WfoCHqQred6yEYpLOQ9LcfZ\n4zqOispkZ3T+4kJ7DoX2bNZUb2d97S5mZ00mzRSbo1gv6VhetICdpw+w4dROatvrWTI+dgw4EXaT\njY9OWsSqw+t4+/BaLAYzc8dOG5H3TH9c7jLWNn0MIRer0vNo4XyuhwDhXMiBYHjIwqxPsK0jPiIC\nzoCEFAKPpNIpJd4Yki6Fa+gFUKnwt+BRozdKSILIopTxZOltVHtb2dx2Kqqwq0nS8/WyJeQYnexw\nneLthgNRuYxTDFYennwHY4xO/la7lTdrYzd9LMqfzQOz78Lt7+KhjU9R2VoTN1arwcwzN/2AaVky\nbyof8L21Tycs9RSPgtQcXrv3V+Q4xvD9Vf/Lyi2vJH2uxsVBk/EQMhp2wF1Mzvd6CABdEUI2naeQ\nVejqFnIiMiUL+ZKdACEq/C14+whZJ4gsco4nU2/llNfF1vaqKOFa9UbuKriaLKOdLS2V/LPxcFR7\nmsHOw5M/QYbBwV+qN/KPuh0xMSwrvIr7Z36WNp+bBzc+xam203FjtRms/Obm/2ZyZgmvHf4nP97w\nTMJE9vEYl5bHX+/9JWPs6Xzzrcd5dr0m5JGEJuMh5GJU1xhNXMj16BHytj01fPfXm/nXn67hkZXb\nki4sKyLg8EuIPUIWEwt5jGQhT7Lh7xayT41eN64XJRY7i0jXWaj0tLCtvTpayDojdxfMI9NgY2Pz\nMd47eySqPcPo4OHJd5BmsPGnqvW8e2Z3TAwfGbeAf7/i07i87Ty44QlqOuJ/TofRxm9v+RET0sfx\nfwfe4mebfjsoIRdnjOW1u39JhjWVL774Xf606+9Jn6txDlmWBVmWfy3L8mZZllfLslzUp/3/ybK8\nVZblDbIs/yqZ19RkPIQkU+n5w8SFXo/th+t59i/7qalvP69K3xJCuEKICp26UL9CzpKs5EhWfP0I\neUlKEWk6M8c9zezsqI2SoE1n4u6CeaTrraxrqmBNU3nU+WNMKTw06Q6ceit/PLmG1fWxlU9uLlrE\nv037F5q9bTy44UlOu+NXgk4xOfjdLT+hKLWAP+x7nZ9v/f2ghCxnFfHq3b8gzerk63/9IX/Z+8+k\nz9Xo5WOAUVGUecA3gSd7GmRZNgE/ABYpirIQSJFl+aaBXlBLLh/BSEsuPxgux9gfWbktqaKqPSRK\nrB9EpVUfJCSANSBiDiXug9QFOjgTcmNEYoI+NWqVBYA3FOB91zFcAQ8TzZlcP17m7NlzSX1c/i5+\nV7WRFn8n12dO5pr06GoftZ1N/Pjwn2kPdHFv0fVcM6YsJoZXyt/htwdfI9uSzhPXfIMx3VVI+tLo\nbubzrz/IqdZavjzn03xl7mcSfq54VHdWseTxu+jwdfLsv/w3N09dOqjzLzYjKbm8LMtPANsURXml\n+3GNoij53f8vABmKEl7zKsvyK8CziqK839/7aT1jjRFLfxOAff+iIrPd9e1F9/SQBRXcuhBd/fSQ\ncyQrWaIFL0EqAi34+0ySGUUdS1OKcUomjnY1sqnhZPSknd7M3QXzcOrMvNN4mE3Nx6POz7Ok89Ck\nO7DqTKw88Q6bzx6JieETE67nzskrONPZxAMbnuRsV0vcWDOtaTz3sZ9Q4MjmVzte4re7/pzwc8Vj\n5tgp/Omu/8GsN/HFP/8Xqw6vG9T5o5FmfSDpnwFwAK0RjwOyLIsAiqKoESL+GmAdSMSgyVhjBJNw\nAnCMDYy6KCEPlOK0r5A9CYQsCAK5ko0xogWPGuRYoIVAHyGbRD1LU4qxS0Z2nq3hgPtMVHuawco9\nhfOw64z8o+EgW1sqo9oLrZk8NOl2zJKR3xxbxfYmJSaOT0+8kU/JN1DnbuTBDU/S7GmNOQYg25bJ\nyhWPkmMbw8+3/p7f7/1r3OMSMaugjJc//xQGnYF7/++bfKBsHtT5ow1RFJBEMamfAWgD7JEvrShK\n743SPab8GLAUuC2p2Ab7YTQ0LhaJJgBvWFgEBh0Yzgk5mWV0uu5VFoIKHVL/Qs6TbGSIZrrUQFwh\nmyU9y1KKcepNHOis56A7ehw73WDjnoL5WCUjb9XvZ6crOu/1OGsWD0z8OEZJz6+P/YNdzcdi4rhz\n8go+UXod1R31PLTxKVze+MNQeY4snvvYT8iypvPYpt/y0v434x6XiKvGXcFLn3sSnShx50sPsrYi\nft7ly4EUr4TTKyb1MwCbgBsAZFm+CuhbFuVZwmPKH1MUxZtMbJqMNUYsCScAS9IhFAJjWMiQ/DI6\nndotZMJC9vYj5ALJTrpoolMNcDzgIthHyBbJwMfHTcUi6tnnPs2Rzuh0oJlGO/cUzsMiGXjjzF72\ntFZHtRfbc/jGxNvQCRK/qHiLfS0nYmK4t+zj3Fq8lJNtdTy08SnafPHXaBc6c1m54lEyLKn8eMOv\neeXQP+Iel4j5RbN44TOPA/D5P36DzSdiV3xoRPE64JVleRPwBHBf9wqKe2VZngHcBUyVZXlN92qL\nFQO9oDaBF8HlOAk2Gjif2FUBsBhAFMHrZ/veuqQraUO4bFObLogK2AMiRjV+v0RVVU4F22juzoVc\noktFikyNmWnnxOmzvOc6RlfIz2xbHrIlOhNbnaeVlVWb8Ib8fCJ3NtMc0bsxj7RW84TyV1RV5b6J\nt1LmjF76p6oq/7v3Zf5euY4JKWP52cL7sOrjf/kcaz7Fna8/iMvTzn8vvY+PTVwe97ie2Pte9/eO\nbuTOlx5EL+l55a6nmTt2WsLzLzYjaQJvOBj126GHktG2PTSSD1vs4a3T3ZtC9BJ5GVZyUsxJ5ymR\nuoucekUVn6iiU8PPxbyPIOAUjHgJ0Kb6cKs+UkVT71Zkq9VIwBMkz+CgyuuiytuKRdSTFiFLu85E\nsSWD/e21HGirJctoZ4zx3HBjpslJkTWbrU1H2dakMMGeR4bRGRXD3OwyGrua2V5/kH1ny1mUNztu\n0vk0cwrzCmex6tg63jm2gbHOPCakj4t7DeJd9+KMQiZlF/P6vnf524H3WVg8hxznmES/hovK5b4d\nWpNxBB82oY0Uzjf23lwWEUJeMj036TwlEgI6FbyiincAIacIRrrUAO2qD7fq7xVyT+xGUUeewcEp\nTwunvC6sfYTs0JsZb8lgf3sNB9pqyTE5yTCci2+MKYVx1jFs6RbyREc+6UZHVAxX5kzjtLuR7fUH\nOdR0jGvyZ6OPk3Q+w5LK1fkzWFWxjn8eW0dRaiElabEbbRJd99LMcZRkjOWv+9/lzQMfcG3JlWQ5\nYtN8XmwudxlrY8YaoxpBVaHTByE1vG1an1y+3x4MqogjEP4zaNOF8AmJx5DH65w4BAPtqo8TAVdU\nngoAp87E0tQSDILE1vZqKj3RS9IKzWl8Lv8qREHk5dodVHREjzFPTy3iq6U3E1CDPH70rxzviN4W\nLQkiD8y6k0V5sznQVMEjW36JNxj/S2zKmFJ+c/MPMeqMPPjeT1lduXVQ12XFtOX84o7v0ebt4BPP\nf43DZ2InGDWGFk3GGqMeQVWhK0LIugsTsl+IP6woCgJFuhTsgoE21cfJQGuMkFN1ZpakFKMXRLa0\nnaLK44pqH2/J4LP5VyIAf6zdxnF3dC7sWWklfKnkBrxBP48deY2TfVZpSKLEw3PuZn7OFextPMr3\ntvwaXzB+Advp2ZN45qYfoBd13P/PH7HhVGxejP64/YqP8NSt36a5s5XbV36V8obKgU/SOG80GWtc\nFgihbiGrKph0qLrB3doGVcTeK+Rgv0Iu1qVgE/S4VC8HWupjtiKn6y0sSSlGEkQ2tp2kxhu9RrjY\nmsmn8+aiAi/WbONkZ1NU+5XpMl8s+ShdQS8/PfIXqvoIWyfq+Nbcf2VuVhk7Gw7xw22/wR+Kv0lh\nVm4Zv7zx+4iCyL+v+iFbq/cM5rLwqdm38LMVD3HW3cxtK7/M8bOnBj5J47zQxowj+DCOuw5EMpU6\nLpShil1QCY8h66XwOHJIDUs6SXQISN1jyD5RxaAKiInGkEUjHaqfFr8HH0GcgjEqv7BFMjCmO9Pb\nKY+LNJ0Fh87Y255usJFtdLK/rYYD7bUUWTJw6s297QWWTNINDrY1KexoLueK1CIcEWPQkiixMG8m\nR1sq2VF/iFNtdSzInRE36Xy+I5uyMRN4u3wtq46tZ2bOZPIcWUlf9yvyJ5NidvDWwQ/4x6F1fHTy\nIlLMjgHPG2ou9zFjTcYRaDKOJtlKHRfKUMY+FEIWAV/3pF4iIYuCQKpoxCMFcQW9+OMI2SoZyNBb\neif1MvRW7NI5IWcabWQZ7exvq+Vgey0l1jE4dKbe9rHWMTj1VrY3l7OzuYKZqcXYIoQtiRILc2dy\nuOk4O+oPUdvRwPzcGb0VSSIpdOYyKbOEtyvWsqpiPXPyplGclZ/0dZ9VUIZZb+LtQ2v45+H13Dhl\nMQ7Txa08frnL+IKGKWRZvlWW5ZciHl8ZkTbukfN5zW2H63lk5TbuHWTKRI2hZ6AtxiOV3iELCI8h\nS4O7zU0hEVtQRBWgVRckkCCbsiSIzMrIxSLoaAp5qA62xwxZZBvsLHKGq4Svc52g3tcR1T7Fnsvt\nuTPxhgI8X7WZ0322PS/Jms5nxi6m1e/mJ0deoaHPGLRJZ+SH877KlPRi1tbs4IldLyRMOr9o3Fye\nuP5hfEEfX/r7d9hTG5sXoz++es1neXjZF6l2nea2332Z060NA5+kkTTnLWNZln8O/Aiiug3PAJ/s\nTht3pSzL0wfzmv0le9G4+IzmyiVCUA0nqIdwtZDzELI10C1kfZBgAiHrRYkSXSpmQcfZUBe1wY4Y\nIecYHSx0jkMF1raeoNEfff2mO/K5LWcGnpCf56o3U+9ti2q/Lmcmnyy8hhZfB48efpWzfdrNOhM/\nmvfvTEwdx3tVW/j5nj8mFPKyovn8dPmDdPo9fOLF+zjSOLhVEvcvuYf7F9/NyeYablv5Zerb46f5\n1Bg8F9Iz3gT8W88DWZbtgEFRlJPdT70DLBvMC47WntjlymivXCIEQ32EPLgNVeYkhawTREp0qZgE\niYZQJ3VxhJxvdLLAOZagGmKN6zhN/ugvupnOQlZkT6cz6OO5qs009slDcUPuHG4vmM9ZXxuPHn6V\nZl90u1Vv5ifz/4PSlEJWndzIL/b9KWGO44+WLuJHS++nzePm3je/TXnT4FZJPLTsi3xl4Wc4fraK\n21d+hbMd8bPKaQyOAWUsy/LdsiwfkGV5f8R/ZymK8mqfQx2EMxn10A7EVlfsh9HcE7scuRwql0QL\n2YAqDl7IloBIaKAesiBSqkvFiER9qJPTwdh7tsCYwjzHWAJqiNWu4zT3EfKclHHclDWVjqCXldWb\naeqTh+KWvKtYkXcVDV4Xjx5+FVefdpvBwqPz/4MiZz5vnVjLbw68mlDIt8hLefKWh3B52rj3b9/i\nREt13OPiIQgCj3zka3xh3idRGiq54/mv0tIZP6ucRvLEbt/pg6IozwHPJfFabYSF3IMdcCU4FoDU\nVAu6iDWhhdl2Tp5uizmuIMtOZqY95vnh4GK9z3Aw1LHftMiOw2Hi1Q8qqK5vp61iabEAABjDSURB\nVCDLzh1LS7lmRv6Qvg8M/3X3BkO0+oMIViMpBgn9wCkSozjr6aLR66HDpDLWaos6PzL2tKCN7Y01\nnAm6sZmMFNvTol4nEzs2l4l3ahXWtJ3g9nHTyDCd+5fGLZnTMVv0vFq5m+drN/PAtOvIiJgo+2LG\n9ehNEn85vonHy1/jp/PuJMVojXr93634L+5964e8dux9nDYLX5v7ybiVpD+deRP+YIAH336ce9/8\nJn+76xcUpRckfU2eufMRRL3KM+v+zKdfvI/37l9JiuXir7K4XLigREGyLC8Cvqgoyqe6H+8GPg6c\nBP4OfE9RlIQrzfsm7egZM+7LxSpd9GFLtjNSuFixqzoRTPrwg07foFZZALilIF2SiqQSLueEEDd2\nrxqkwt+MjxB5ko0sKXZY53hXE1vbqzEJOpalluCMWEUBsK6pnHcbj5Cqt/CvhQuilr2pqspLp9by\n7pndFFgyeXjSHdgj2gGaulz854bHqe1o4LMTb+Jzk2+JiaEn9hf3vcGjG39Dti2DF259jHxHdtLX\nJBQKcf/rP+LlXW8xq6CMV+9+GptxeIaxLvdEQUO96eNLwMvAVmB3fyKOh1ZDTmM4EQIh8Jz/kIUl\nKGIOCgS7V1mEEgxZGAWJUn0qekRqgx00BGOH34rN6cyx5eNRA3zgOkZbIDrl7aL0CSxJl2nxd7Ky\nahNtAc+5zyEIfHrstSzJmk51ZyOPHX0Nd0Q7QLo5hccW/Cc51gxePPp3/k9ZlfBzfXb6x7jv6rs4\n03GWu994mLr25FdJiKLIE7d+i9uv+Ci7qg/yqRfuw+3rSvp8jXNoKTQj0HqXl4aLHbuqk8CsD2+f\n7hpcD1lFxS2F8EgqUgiKnU6aE8xpeNQA5f4WAoQolOxkSLETokc7G9nVUYtF1LM8tQRbxDpkVVV5\n7+wR1jVVkGmwcW/hAmwRG0dCqsrzJ95lXeNBim05PDjx45gj2gHqO5u4f91jNHQ184Wpt3NH6XW9\nbX2v+693vMwvtr9IgSOHP9z2GGOs8WvvxSMQDPBvrzwSzvRWNJs/fv5JzHrTwCcOgsu9Z6xt+ohA\n2/RxaUgU+3Dt/hNCanjbdM/GkEAozraOBOd2p95UAb8E7kAAXSD8fF90gohDNOIKeWhRvRiQsIj6\nqGMy9FYkBKp9rdR42ygwOjGI4XkUQRAosmTgDQU46q6nwt3AVEce+oj2K1KLaPC2st9VSXl7LVem\ny+jEc/MwNr2Fq3OmsbF2NxvqduMwWJmYFl733Pe6z8mbSlANsbpyC+tPbue6koVY+gx/JEIURT46\neRFH6o/xQfkW9tUe4ZapS6NiuVAu900fmowjuByFNhqIF/tw7/4bCiGHAK8QTixkCAlxhawXROyC\ngZZuIRuRMPcR8hiDDQGo8bVS42ul0JgSJdwSaybuoA/FXc9xdyNTHblR7TNSiznd1cz+1pMc7zjN\nnLQJURK0G6xcmT2V9bW7WF+7i3STkwmpY+Ne97l50+jye1hzchubqnZxfcnCpHu4kihy4+TF7K9T\nWF2+hcOnK7hpyhKkIRKyJuNhRJPx0HG5xf5st4j7Ut/cxeKZeTHPnw+xQg4OSsgGVcBg0tOlhhML\nGRMKWcIRIWSToMMsRC9kyjLYCKkqtb426nxtFJpS0AvnhFtqHUN7wIPirudE51mm2vN6hSsKAjNT\nS6jpPMv+1koq3WeYkz4BKSJPhdNoY052GetrdrK+dhdZlnSm5ZbEXHdBELi6YAatnnbWntrG5urd\nXF9yDaY+wx+JkESJG6csZnfNYT4o34zSUMmNUxYnU+BzQIZCjm5B+F5P/cSBfqx6afRsh9bQGC4u\n1ppzwR8Erx9EASyGcDmnZM9FIMdswRAUCIjh9Jtqgkk9ixgu2SQiUBloxRXyxBwz3ZrNJMsY2oJe\nPmg5jiciE5soCKzIns4MRwE1Hhcv1GzFG9GuEyW+UnoT01OKONh6il+Uv0UgFIx6/XGOXH664D5s\nBguP73qBf1Rsiv+5BIFvLvwSn5hyA0fPnuALb32bdm/y192kN/LCZx5j/vhZvH1oDV999XsE+8Si\nEYsmY40RycXc/Sf4guANhOvpmQcpZEHAHhQxhAT8otqvkK2inhJdSq+QW0PemNeaYc1BNmfQGvSw\n2nU8SriiIHBbzgymOfKo6mrmxeqt+PoI+WsTbqbMOZa9rhP86tjbMUIuTing0fn/gUVv4jtrfsWG\n2l0JP9d3Fn2FWycu51BDBV/6+3dw++J/QcbDYjDx4uee4Mqx03l9/7t8/bUfEgrF36J9MRHc3qR/\nLjaajDVGJBd9958vEP6RzkPICNgDIvokhGwTDRTrUgA4EXDRFkfIs2x5lJrTaQl0sdp1HF+EUEVB\n4PacmUyx51DZ1cRLNdvxR7QbRB1fn7CCSY4CdjZX8OzxVTF5KiakjuXH87+OUWfgR9t/y+a6vXFj\nFQWR7y/+OjdNWMzeM0f48tvfpdMf26NPhM1o4eXPP8XM/Cm8sucffOONn4wIIY9UtDHjCC63cdfR\nQrzY8zNtZKdZki4weqEIAMFQ+H/0UljK/oHHkHtiFxAwhgQCAvhFlaBAwkk9oyBhFfThMeSQB5tg\nwCicm+QSBIFcgwN3yE+dr50GXwdjjSm9Y8CiIDDJnsMZbxvl7gbqPK2U2XN6cxnrRIm5aRNQ2mvY\n56qk0dvGzNSSqF14meZUFhZPY9Wxzayr3cmElLHk2WILj4qCyOLxV1HZUs2Gqp0cqFe4vmQhuji1\n9+Jh1Bm4uWwp645t5z1lE01uF8vkeXF3BA6ENoE3jGgyHjoux9jzM20snpmXdIHRCyVGyLqBhRwZ\ne4yQAYOaSMg6LL1C9mIT9Bj6CDnP4KAj6KPO306j381YU0qvcEVBYIoth1qPiwp3A/XeNqbYc3tz\nGetEiTlppRxpq2afq5IWfwdXpBRFSbA4K4+xpnxWV29nTc0OJqWNJ8eaGROrKIgsGX815U0n2VC1\nk8ONx7i+ZEHSqyRMeiM3lS1mdfkW3lM20u51s7j0qkELWZPxMKLJeOjQYh8aeoUsEl5hMYCQ+8be\nI2S/oOKXIERiIfesqmjuFrJdMMQIOd/opC3opc7XTpO/k0JTSq9wRUFkij2Xqq5mKtwNNPo6mGzP\n6W3XizrmpJVyqPUU+1yVtAc6mZ4yvleCVqsRBw7k1HGsqdnB2podlGWUkmWJ3ewhiSLLiq7mSONx\nNlTtRDlbyfLi+UkL2aw3ceOUxXygbOKdoxvwBnxcUzxnUELWZDyMaDIeOrTYhw4BwtVCRCEsZElM\nuOwtXuwCQnhCL0khm9DRonpwhTw4BEPvkjYIC7nA6MQV8FDnb6c50Emh8ZyQJUGkzJ7Lqc5myt0N\nNPs7mWTL6ZWcQdQxO20CB1pPstd1gq6gj6nOsQiC0Bt7rm0Mxc4C1lTvYF3tTqZnyGRa0mJilUSJ\n5UXz2V+vsLFqJydaqlhWND9uqad4WA1mbpyymHePbuCfR9YDML9oVlLngibjYUWT8dChxT60RAlZ\nL4EkxN0Ykij2HiH7uoWsAvoEQjaLOoxItKheWkIenAmE3Bzo4rSvnZZAFwVGZx8h51DZdZZydwOt\ngS4m2rJ7hWyU9MxJK2Wfq5I9ruP41QBTHIVRsefbsxjnyGN1zXbW1exkZuYkMswpMbHqRInlxfPZ\nc+YIG07tpKq1jqXjr05ayDajhRsmL2LVkfWsOrwOvaTjqnEzkjpXk/Ewosl46NBiH3qSEXJ/sfcM\nWSQnZD16JFyqN9xDFo3oIwQnCgKFRidn/W5O+9tpDXooMKb0ClcnSpTZczne2Ui5u56OoBfZmhUl\n5NlpJexpOcGeluOAyuyc6E0fhY4cCuxZrK3ewbraXczOmkyaKTYluV7SsbxoATvqDrChagd1HQ0s\nHp/8GLDdZOMjk67hH4fX8vahtVgNFuaMnTbgeZqMhxFNxkOHFvvw0CtkqWfIIlrIA8XeV8iQWMgW\nUY8OEZfqpTXkxSka0fUVsimFs343db522oNe8o3OKCFPsedyzN2I4q6nK+Sn1Dqmt90kGZiVWsLu\nlmPsajmOXpQYb4pOlznOkUeONZO1NTtYX7uLuVlTSTXF5ig2SHquL1nAtpp9rD+1g0Z3M9eOuzJp\nITvNdq6buJC3D63h74dWk2ZxMrNgSr/naDIeRjQZDx1a7MNHjJDFc0JOJvZeIYsqvm63GtT4/6y3\ninqkbiG7Ql5S4gi5wOikoVvI7pCPfMM5IetFiSn2HJSOehR3PX41SLEls7fdrDMyM62Enc0VbKk/\nikk0UGrPjYqhyJlPpjmVtTU72VC3m6typuE0xib/N0gGlhfPZ3P1btaf2oHL08bCwtlJCznV4uC6\nifN56+Bq3jzwAVn2DKbnTUp4vCbjYUST8dChxT68RAlZf07IycbeO4YsqvhFQA33kONhFfWICL09\n5BTRFJVnQhJECo0pnPF1UOdrpysUIM/giJq0K+sW8pGOM4RQKY5YsmbRGZmRWsxu1zG2N5Vj1Zko\ntuVExVCSUkiq0c662l1srNvD1TnTcRhilxaadEauK1nAxqqdrD25Hbevi3kFM5MWcpolhaUT5vHm\ngff524H3KUjJoSx3Qvzrosl4+NBkPHRosQ8/54Qs9grZYpCSjl2MELJPUvsVsk00ANCq+rqFbIwR\ncoHRyWlfO3W+NrxqkFyDPUrIk205HOk4w5GOM4gIjLdknHt9nYnF48tYX3uIHc3lpOhtjLdFb6iR\nU8dh05vZULubzXV7mZc7A7shdpu6SWdkWdF81p/aztqT2/AHA1yZPz1pIWfYUrm29ErePPA+bxx4\nj6L0AiZnl8Qcp8l4GNFkPHRosV8cwkIOhtcf6yRCqAQ8gaSzvfUVstCPkO2iAVWF1u4ecmofIeu6\ne8h13jZqfW341RA5EUI2Snom27M50nGGwx2n0QsSYyPWEOekplKiz2N7k8K2ZoUMg4Ox1uhdeJPS\nijBKejbW7WHL6b0syJ2BVR8rZIvezPKi+ayp3Mbqk1sQEJiTN/CkXA9j7OksKpnLG/vf44397yGP\nGY+cVRR1jCbjYUST8dChxX7xEAD8YSEHEMJPBJPPh9wjZG8SQrYJelRUWlUfbWrPkMW5Y3WCSKHJ\nSW23kEOoZOltEZN2eibasjncfppDHacxi3oKzOE1xFarEckvMdU5jm3NCtuaFLJMqRRYonfhlaWX\nICKw6fRetp7ez8K8WVji5Di2GswsGX81qyu38EHlZgySgVm5/U/KRZLlyGB+0axuIb/LlJwJlGSe\ny0VyuctYSxSkoXEeCACdPiSBcP5boy5BaqD4SAg4/RKCCm5dCI8YP4GOIAjkSjYyRQseNcixQAuB\nPol/TKKeZSkl2CUjhzobOOA+E9WeZrByT+E87DojbzccZFtLZVR7oTWTByfejlky8ptjq9jeVB4T\nx2cm3cSn5Buoczfy4IYnaPHEVnEHyLFn8tyKR8m2ZfLzrc/zwt7XB3FVYFZBGS9//ikMkp57Xn6Y\nD5TNgzp/NKPJWEPjPBGAVIMuvH26OyH5YISsQ8AZCAu5Q+pfyPmSjQzRTJcaiCtks6RnWUoxNtHA\ngc56Drrro9rTDTbuKZiPVTLyZv1+drpORbWPt2XxwMSPY5T0/PrY2+xqPhYTx52TV3BH6XVUd9Tz\n4MYnafXGr1uY58ji+Y89yhhrOj/b9CwvH3hrEFcFrhp3BX/83JNIgsSdLz3IumPbB3X+aEWTsYbG\nBSAKAnT5IBQCow4MgysxpFO7hUxYyF4hsZALJDvpoolONcDxgItgHyFbJANLU0uwiHr2uU9zpDO6\nynOm0c49hfOwSAbeOLOXLfUnotqL7Tl8Y+Jt6ASJX1S8xb4+PWhBEPjXso/zseIlnGyr46GNP6fN\nFz/pfKEzl+dWPEq6OZUfrf8Vrx5KXJ06HguKZ/OHzz4OwOde/E82n9g9qPNHI5qMNTQuEEEFOnuE\nrEc9DyE7uoXcrutfyIWSgzTRhFv1dws5ui9ukwwsSynBLOrZ3VGH0tkY1Z5ldHBXwdUYRT2/L9/C\ngbbaqPYJ9jzul29FROR/y//GwdboHrQgCHx52r9w4/hrON5azTc3/hy3P37S+fGp+Ty34iekmhx8\nf+3T/O3o+4O6LteWXslzn3qUQCjI3w+tHtS5oxFBVQfzD6uhZTBlsy8GWrn7i8e2w/W8veUkdWc7\nKcy2c/2cgmHLVTycRF53VQAsxvAaZI8/XNJpEPgFlVZd+BxHQEy4MURVVSqDrbi6M70V684lDuqh\nLeDhPdcxPKEAV9oLKDFHZ2Kr6Wrh+Zot+IIBPpk3myl9Nn4ccJ3kKeUNREHgGxNvY6KjIKo9pIZ4\ncvcfeOfUZialFfVWD4nH0bMnuOuNh+jwdfLosge4ccK1g7ksHKhTmJJdSlaWc/BJkPswGOdkZtoT\nvp8sywLwK2A64AHuVRTlRET7zcB3AD/wvKIovxvo/bSe8Shl2+F6Hlm5jXt/uoZHVm5j/Z6aSx1S\n0vRUfq5pdBNSVU6ebuM3bx5i2+H6gU8ewZzrIatg0qPqB9dD1qsCjkD4T7JNF8LXTw95vOTEKRhp\nV32cCLgI9elUOXQmlqYUYxQktrVXc6KrOao935zK18uWoBNF/ly7k6Md0ZN+U1PG8e8TbiGohnji\n6OuUt0f3oEVB5L6Zn2NpwZUcaT7Bf21+mq5A/FJFEzOK+O0tP8KiN/HN9x/j3eMbB3VdpubKiENQ\n0HSI+RhgVBRlHvBN4MmeBlmWdd2PlwHXAl+QZTk2UXQfRtwn1BiYvjKraXTz2B93jRqZvb3lZILn\nT8V9fjQhqOoFCdmgilFC9gvxO3KCIDBe58QhGGhTfVTGEXKKzszSlBIMgsTW9ipOelqi2osdmXwu\n/ypEQeTl2h1UuKPHmK9ILeKrpTfhDwV4/OhfOd5xOqpdEkQemHUn1+TN4kBTBd/d8ku8wfhLFMvG\nTODZm/8bo87IA+8+yurKrYO6LiOQBcA/ARRF2QbMjmibBFQoitKmKIof2AhcM9ALajIehYx2mV2s\nys+XCkFVuyf1VNCJg1phAdFC9iVYYQHhycMiXQp2wYBbDeAndlgkVW9mSUoxOkGkxttK32HJ8ZYM\nPpM/FwEo74j9Mp+VVsqXSm7AG/RzuLUqpl0SJb455x7m5UznWGs1Z9xNCeOdnj2JZ276AXpRx/qT\nl2aFhNVpTvpnABxAa8TjgCzLYoK2diA2/V0fkitkNUz0NyZzqcjMjE2IMtKoaXQHgJguV01jRyAz\n066/BCENipCq7gem9n0+GFL3Z2bap1+CkC6IAe8ZW/yx1IHIS/K4LGKzqkWSiZ2JufHH4zMz7WRm\n2rl6XHHC82/OnMPNk+b0+x6/uuXhgQMFPpJ5Naemf5DUscOBxaAbKue0AZG/eFFRlFBEW+QvxQ64\nBnrBSypjjfPjrSdWjOrf21tPrEh+n6yGxshkE3AT8BdZlq8CDkS0HQFKZFlOAToJD1E8NtALXtLV\nFBoaGhqjkYjVFD0di7uAWYBVUZTfybJ8I/BdwnuDViqK8sxAr6nJWENDQ2MEoE3gaWhoaIwANBlr\naGhojAA0GWtoaGiMAEb1rPxQIsvyrcDtiqJ8uvvxlcD/EN7O+J6iKD+4lPElgyzLNUBP/sMtiqJ8\n+1LGMxADbSkd6ciyvItz60krFUW551LGkwzd9/WjiqIslmW5GPg9EAIOKorylUsa3IccTcaALMs/\nB64D9kY8/Qxwq6IoJ2VZfluW5emKouy7NBEOTPcf1i5FUVZc6lgGQe+W0m5JPNn93IhHlmUjgKIo\nSy51LMkiy/IDwGeBju6nngS+pSjKBlmWfy3L8gpFUf526SL8cKMNU4TZBPxbzwNZlu2AQVGUk91P\nvUN4n/lIZhaQL8vyalmW/y7LcvyqjiOL/raUjnSmA1ZZlt+RZfn97i+Tkc4x4NaIx7MURdnQ/f+r\nGPn3+GXNh6pnLMvy3cB9gEp4/Z8K3KUoyquyLC+KONRBeBdND+3A+IsW6AAk+BxfAX6sKMprsizP\nB/4IzL10USZF3C2lETuZRjKdwGOKoqyUZbkUWCXL8oSRHLuiKK/Lsjw24qnI3WhJbdnVGD4+VDJW\nFOU54LkkDj2v7YwXi3ifQ5ZlMxDobt8ky3JOvHNHGP1tKR3plBPuaaIoSoUsy01ADlDb71kji8hr\nPaLu8Q8j2jBFHBRFaQe8siyP755kuh7YMMBpl5rvAv8BIMvydKD60oaTFJuAGwDibCkd6dwNPAEg\ny3IuYZmd7veMkcduWZZ7sol9lJF/j1/WfKh6xoPkS8DLhL+w3lUUZccljmcgHgX+2L0N0w/ceWnD\nSYrXgeWyLG/qfnzXpQxmkKwEnpdleQPhHubdo6hX38M3gN/KsqwnnE/hL5c4ng812nZoDQ0NjRGA\nNkyhoaGhMQLQZKyhoaExAtBkrKGhoTEC0GSsoaGhMQLQZKyhoaExAtBkrKGhoTEC0GSsoaGhMQLQ\nZKyhoaExAvj/GIr+tGRs8xsAAAAASUVORK5CYII=\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x63e33b9048>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "with tf.Session() as sess:\n", | |
| " train_X = np.vstack((group1, group2))\n", | |
| " train_labels = np.array([0.0] * 40 + [1.0] * 40)\n", | |
| "\n", | |
| " sess.run(init)\n", | |
| "\n", | |
| " # Run the optimization algorithm 1000 times\n", | |
| " for i in range(1000):\n", | |
| " # We stack our two groups of 2-dimensional points and label them 0 and 1 respectively\n", | |
| " sess.run(optimizer, feed_dict={X: train_X, labels: train_labels})\n", | |
| " \n", | |
| " # Plot the predictions: the values of q\n", | |
| " Xmin = np.min(train_X)\n", | |
| " Xmax = np.max(train_X)\n", | |
| " x = np.arange(Xmin, Xmax, 0.1)\n", | |
| " y = np.arange(Xmin, Xmax, 0.1)\n", | |
| " \n", | |
| " plt.plot(*group1.T, 'o')\n", | |
| " plt.plot(*group2.T, 'o')\n", | |
| " plt.xlim(Xmin, Xmax)\n", | |
| " plt.ylim(Xmin, Xmax)\n", | |
| " print('W = ', sess.run(W))\n", | |
| " print('b = ', sess.run(b))\n", | |
| " \n", | |
| " xx, yy = np.meshgrid(x, y)\n", | |
| " predictions = sess.run(pred, feed_dict={X: np.array((xx.ravel(), yy.ravel())).T})\n", | |
| " \n", | |
| " plt.title('Probability that model will label a given point \"green\"')\n", | |
| " plt.contour(x, y, predictions.reshape(len(x), len(y)), cmap=cm.BuGn, levels=np.arange(0.0, 1.1, 0.1))\n", | |
| " plt.colorbar()" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "anaconda-cloud": {}, | |
| "kernelspec": { | |
| "display_name": "Python [Root]", | |
| "language": "python", | |
| "name": "Python [Root]" | |
| }, | |
| "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.5.2" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 0 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment