Repository: deep-learning-indaba/indaba-2018 Branch: master Commit: f9bb125948ac Files: 8 Total size: 1.3 MB Directory structure: gitextract_p7frg7eu/ ├── Mathematics_for_Machine_Learning_Examples.ipynb ├── Practical_0_5_Machine_Learning_Basics.ipynb ├── Practical_1_Deep_Feedforward_Networks.ipynb ├── Practical_2_Convolutional_Neural_Networks.ipynb ├── Practical_3_Recurrent_Neural_Networks.ipynb ├── Practical_4_Reinforcement_Learning.ipynb ├── README.md └── practical0.ipynb ================================================ FILE CONTENTS ================================================ ================================================ FILE: Mathematics_for_Machine_Learning_Examples.ipynb ================================================ { "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Mathematics for Machine Learning Examples", "version": "0.3.2", "provenance": [], "collapsed_sections": [] }, "kernelspec": { "name": "python2", "display_name": "Python 2" } }, "cells": [ { "metadata": { "id": "ST8QJlxSdvMU", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "7eae7c44-6007-47b5-bd59-cb4ca1df832c" }, "cell_type": "code", "source": [ "#@title Imports { display-mode: \"form\" }\n", "from __future__ import print_function\n", "from __future__ import division\n", "from __future__ import absolute_import\n", "\n", "import numpy as np\n", "import tensorflow as tf\n", "import matplotlib.pyplot as plt\n", "\n", "try:\n", " tf.enable_eager_execution()\n", " print('Eager execution enabled')\n", "except ValueError:\n", " print('Already running in Eager mode')\n", "\n", "tfe = tf.contrib.eager\n", " " ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Already running in Eager mode\n" ], "name": "stdout" } ] }, { "metadata": { "id": "RgFS1eZOdws_", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Matrix Multiplication" ] }, { "metadata": { "id": "E0TdsagndySr", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "535c541c-da43-4154-dae9-7198ba1e9ed0" }, "cell_type": "code", "source": [ "# Define matrix A\n", "A = np.array(\n", " [[1.0, 3.0],\n", " [2.0, 1.0],\n", " [4.0, 2.0]]\n", ")\n", "\n", "# Define matrix B\n", "B = np.array(\n", " [[6.0, 2.0, 1.0],\n", " [3.0, 4.0, 5.0]]\n", ")\n", "\n", "# Define vector x\n", "x = np.array([3.0, 2.0])\n", "\n", "print('A.shape is:', A.shape, 'B.shape is:', B.shape, 'x.shape is:', x.shape)\n", "A" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "A.shape is: (3, 2) B.shape is: (2, 3) x.shape is: (2,)\n" ], "name": "stdout" }, { "output_type": "execute_result", "data": { "text/plain": [ "array([[1., 3.],\n", " [2., 1.],\n", " [4., 2.]])" ] }, "metadata": { "tags": [] }, "execution_count": 56 } ] }, { "metadata": { "id": "4xVzrzTskHqK", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Matrix-vector multiplication" ] }, { "metadata": { "id": "ySFMEkRrkJ51", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "f52ddad3-c34a-4a07-8ec4-8682e1abcc4e" }, "cell_type": "code", "source": [ "# Using numpy dot\n", "y = A.dot(x)\n", "\n", "print('Using dot:\\t y =', y, '\\t y.shape =', y.shape)\n", "\n", "# Using einsum\n", "y = np.einsum('ij, j', A, x)\n", "\n", "print('Using einsum:\\t y =', y, '\\t y.shape =', y.shape)\n", "\n", "# Manual version 1\n", "y = np.array([\n", " A[0,0] * x[0] + A[0,1] * x[1],\n", " A[1,0] * x[0] + A[1,1] * x[1],\n", " A[2,0] * x[0] + A[2,1] * x[1],\n", " ])\n", "print('Manual 1:\\t y =', y, '\\t y.shape =', y.shape)\n", "\n", "# Manual version 2: \n", "# Matrix-vector multiplication can be thought of as a linear combination of the columns of of the matrix\n", "y = x[0] * A[:,0] + x[1] * A[:, 1]\n", "\n", "print('Manual 2:\\t y =', y, '\\t y.shape =', y.shape)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Using dot:\t y = [ 9. 8. 16.] \t y.shape = (3,)\n", "Using einsum:\t y = [ 9. 8. 16.] \t y.shape = (3,)\n", "Manual 1:\t y = [ 9. 8. 16.] \t y.shape = (3,)\n", "Manual 2:\t y = [ 9. 8. 16.] \t y.shape = (3,)\n" ], "name": "stdout" } ] }, { "metadata": { "id": "IXfRCQfglg7Y", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Matrix-matrix multiplication" ] }, { "metadata": { "id": "CCw3o6GMeD1o", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 459 }, "outputId": "8f963951-8502-4b13-b858-fce70e4c6538" }, "cell_type": "code", "source": [ "# Using numpy dot\n", "C = A.dot(B)\n", "\n", "print('Using DOT: C= \\n\\n', C, '\\n\\nC.shape =', C.shape)\n", "\n", "# Using einsum\n", "C = np.einsum('ik, kj', A, B)\n", "print('\\n\\nUsing einsum: C= \\n\\n', C, '\\n\\nC.shape =', C.shape)\n", "\n", "# Note, the above einsum notation is equivalent to the following\n", "C = np.einsum('ik, kj -> ij', A, B)\n", "\n", "# And in Tensorflow\n", "C = tf.matmul(A, B)\n", "print('\\n\\nUsing Tensorflow: C= \\n\\n', C, '\\n\\nC.shape =', C.shape)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Using DOT: C= \n", "\n", " [[15. 14. 16.]\n", " [15. 8. 7.]\n", " [30. 16. 14.]] \n", "\n", "C.shape = (3, 3)\n", "\n", "\n", "Using einsum: C= \n", "\n", " [[15. 14. 16.]\n", " [15. 8. 7.]\n", " [30. 16. 14.]] \n", "\n", "C.shape = (3, 3)\n", "\n", "\n", "Using Tensorflow: C= \n", "\n", " tf.Tensor(\n", "[[15. 14. 16.]\n", " [15. 8. 7.]\n", " [30. 16. 14.]], shape=(3, 3), dtype=float64) \n", "\n", "C.shape = (3, 3)\n" ], "name": "stdout" } ] }, { "metadata": { "id": "o3U0Fc7mlxSd", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Matrix multiplication is not commutative" ] }, { "metadata": { "id": "iiI6J7ZDj9Fl", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 102 }, "outputId": "1c0e575f-1b2c-4da6-aab1-7f1e5ed60f19" }, "cell_type": "code", "source": [ "# Matrix multiplication is not commutative:\n", "C = B.dot(A)\n", "print('C: \\n', C)\n", "print()\n", "print('C.shape:', C.shape)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "C: \n", " [[14. 22.]\n", " [31. 23.]]\n", "\n", "C.shape: (2, 2)\n" ], "name": "stdout" } ] }, { "metadata": { "id": "WxJ0muOj34SB", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Computing gradients with TensorFlow\n", "$y = Ax$\n", "\n", "In the code below, we use Tensorflow to calculate the following derivatives:\n", "\n", "$\\frac{dy}{dx}$ \n", "\n", "and \n", "\n", "$\\frac{\\partial y}{\\partial A}$ " ] }, { "metadata": { "id": "5wCGTn1s3zlV", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 119 }, "outputId": "2b250cbe-4c07-481d-ecf9-ed8d449cf921" }, "cell_type": "code", "source": [ "A_tensor = tfe.Variable(A)\n", "x_tensor = tfe.Variable(x)\n", "\n", "with tf.GradientTape() as tape:\n", " y = tf.einsum('ij,j', A_tensor, x_tensor)\n", "\n", "dydx, dydA = tape.gradient(y, [x_tensor, A_tensor])\n", "\n", "print('dy/dx =', dydx)\n", "print()\n", "print('dy/dA =', dydA)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "dy/dx = tf.Tensor([7. 6.], shape=(2,), dtype=float64)\n", "\n", "dy/dA = tf.Tensor(\n", "[[3. 2.]\n", " [3. 2.]\n", " [3. 2.]], shape=(3, 2), dtype=float64)\n" ], "name": "stdout" } ] }, { "metadata": { "id": "btAykJ_oEZ-i", "colab_type": "text" }, "cell_type": "markdown", "source": [ "# Neural Network Gradient Example\n", "In the following example, we compute the output of a 1 layer neural network and the gradients with respect to its parameters. We define an example input vector and parameters, but keep the computation generic. You can change the values and shapes of x, A and b below and run the rest of the code to compute the output and gradients for your own example." ] }, { "metadata": { "id": "WRnif1ZP4kYQ", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "x = np.array([[-1.], [0.1], [2.1]]) # X has shape (3, 1)\n", "A = np.array([ # A has shape (2, 3)\n", " [ 1.1, -2.5, 0.3],\n", " [-2.1, 0.2, -1.1]\n", "]) \n", "b = np.array([[-1.0], [2.0]]) # b has shape (2)" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "XaTm7-r9FBxl", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Compute the neural network output\n", "$\\mathbf{f} = \\operatorname{tanh}(A\\mathbf{x} + \\mathbf{b})$" ] }, { "metadata": { "id": "1HR6uCTjFAvV", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "ff5beb67-d370-4a70-a8ee-b6c4b64a585e" }, "cell_type": "code", "source": [ "M, N = A.shape\n", "z = A.dot(x) + b\n", "f = np.tanh(z)\n", "\n", "print('f =', f)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "f = [[-0.93786303]\n", " [ 0.94783185]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "wQKVQ13jGkIH", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Compute the partial derivatives:\n", "\n", "\\begin{align}\n", "\\frac{d\\mathbf{f}}{d\\mathbf{z}} ; \\frac{\\partial\\mathbf{z}}{\\partial\\mathbf{x}} ; \\frac{\\partial\\mathbf{z}}{\\partial\\mathbf{b}} ; \\frac{\\partial\\mathbf{z}}{\\partial\\mathbf{A}}\n", "\\end{align}" ] }, { "metadata": { "id": "sJF9p5lHE4Z_", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 425 }, "outputId": "3900b59e-ab3d-4f9d-caa4-dd79c7fd49c6" }, "cell_type": "code", "source": [ "# partial derivatives\n", "dfdz = 1-f**2 # (derivative of tanh is 1-tanh^2)\n", "print('df/dz =', dfdz, '\\nshape:', dfdz.shape)\n", "print()\n", "\n", "dzdx = A\n", "print('dz/dx =\\n', dzdx, '\\n\\nshape:', dzdx.shape)\n", "print()\n", "\n", "dzdb = np.eye(M)\n", "print('dz/db =\\n', dzdb, '\\n\\nshape:', dzdb.shape)\n", "print()\n", "\n", "dzdA = np.zeros((M, M, N)) # Start with a tensor of zeros of the correct shape\n", "for i in range(M): # Then set the diagonal elements of dzdA\n", " dzdA[i,i,:] = x.T \n", "\n", "print('dz/dA =\\n', dzdA, '\\n\\nshape:', dzdA.shape)\n", "\n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "df/dz = [[0.12041293]\n", " [0.10161478]] \n", "shape: (2, 1)\n", "\n", "dz/dx =\n", " [[ 1.1 -2.5 0.3]\n", " [-2.1 0.2 -1.1]] \n", "\n", "shape: (2, 3)\n", "\n", "dz/db =\n", " [[1. 0.]\n", " [0. 1.]] \n", "\n", "shape: (2, 2)\n", "\n", "dz/dA =\n", " [[[-1. 0.1 2.1]\n", " [ 0. 0. 0. ]]\n", "\n", " [[ 0. 0. 0. ]\n", " [-1. 0.1 2.1]]] \n", "\n", "shape: (2, 2, 3)\n" ], "name": "stdout" } ] }, { "metadata": { "id": "Gcw6bNirweZl", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Finally, we compute the gradients of the neural network output $f$ with respect to the parameters $A$ and $\\mathbf{b}$ and the input $\\mathbf{x}$ using the chain rule:\n", "\n", "\\begin{align}\n", "\\frac{\\partial \\mathbf{f}}{\\partial \\mathbf{x}} &= \\frac{d \\mathbf{f}}{d \\mathbf{z}} \\frac{\\partial \\mathbf{z}}{\\partial \\mathbf{x}} \\ ; \\ \n", "\\frac{\\partial \\mathbf{f}}{\\partial \\mathbf{b}} = \\frac{d \\mathbf{f}}{d \\mathbf{z}} \\frac{\\partial \\mathbf{z}}{\\partial \\mathbf{b}} \\ ; \\ \n", "\\frac{\\partial \\mathbf{f}}{\\partial A} = \\frac{d \\mathbf{f}}{d \\mathbf{z}} \\frac{\\partial \\mathbf{z}}{\\partial A} \n", "\\end{align}" ] }, { "metadata": { "id": "o22q4uljzbpR", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 357 }, "outputId": "c07b47af-c680-4e0a-ef47-f9bf921a8346" }, "cell_type": "code", "source": [ "dfdx = np.einsum('il, lj', dfdz, dzdx)\n", "print('df/dx =\\n', dfdx, '\\n\\nshape:', dfdx.shape)\n", "print()\n", "\n", "dfdb = np.einsum('il, lj', dfdz, dzdb)\n", "print('df/db =\\n', dfdb, '\\n\\nshape:', dfdb.shape)\n", "print()\n", "\n", "dfdA = np.einsum('il, ljk', dfdz, dzdA)\n", "print('df/dA =\\n', dfdA, '\\n\\nshape:', dfdA.shape)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "df/dx =\n", " [[-0.12041293 -0.27694975 -0.09633035]\n", " [-0.10161478 -0.233714 -0.08129183]] \n", "\n", "shape: (2, 3)\n", "\n", "df/db =\n", " [[0.12041293 0.12041293]\n", " [0.10161478 0.10161478]] \n", "\n", "shape: (2, 2)\n", "\n", "df/dA =\n", " [[[-0.12041293 0.01204129 0.25286716]\n", " [-0.12041293 0.01204129 0.25286716]]\n", "\n", " [[-0.10161478 0.01016148 0.21339105]\n", " [-0.10161478 0.01016148 0.21339105]]] \n", "\n", "shape: (2, 2, 3)\n" ], "name": "stdout" } ] } ] } ================================================ FILE: Practical_0_5_Machine_Learning_Basics.ipynb ================================================ { "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Practical 0.5: Machine Learning Basics", "version": "0.3.2", "provenance": [], "collapsed_sections": [ "RyJ1PgtEFpa7", "sFJBmN5Hivhv", "EgLuuVNRQHqy" ] }, "kernelspec": { "name": "python2", "display_name": "Python 2" } }, "cells": [ { "metadata": { "id": "SB0EeXzyu_sz", "colab_type": "text" }, "cell_type": "markdown", "source": [ "# Practical 0.5: Machine Learning Basics" ] }, { "metadata": { "id": "c9tLLZUyVwcV", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Introduction\n", "In this practical, we introduce the idea of classification (sorting things into categories) using a machine-learning model. We explore the relationship between a classifier's parameters and the decision boundary (a line that separates categories) and also introduce the idea of a loss function. Finally, we briefly introduce Tensorflow.\n", "\n", "## Learning Objectives \n", "* Understand the idea of **classification**\n", "* Understand the concept of (linear) **separability** of a dataset.\n", "* Understand what the **parameters** of a classifier are and how they relate to the **decision boundary**\n", "* Be able to briefly explain what **Tensorflow** is." ] }, { "metadata": { "id": "mHlHxAdBu7Dy", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 119 }, "outputId": "9b77f6e9-46c7-4004-f0bb-9d108bbffa95" }, "cell_type": "code", "source": [ "#@title [RUN ME!] Imports { display-mode: \"form\" }\n", "!pip install -q moviepy\n", "!pip install -q imageio\n", "from __future__ import absolute_import, division, print_function\n", "\n", "import tensorflow as tf\n", "import numpy as np # Numpy is an efficient linear algebra library.\n", "import matplotlib.pyplot as plt # Matplotlib is used to generate plots of data.\n", "from matplotlib import animation, rc\n", "\n", "from IPython import display\n", "\n", "try:\n", " tf.enable_eager_execution()\n", " print('Running eagerly')\n", "except ValueError:\n", " print('Already running eagerly')\n", " \n", "tfe = tf.contrib.eager" ], "execution_count": 1, "outputs": [ { "output_type": "stream", "text": [ "Imageio: 'ffmpeg-linux64-v3.3.1' was not found on your computer; downloading it now.\n", "Try 1. Download from https://github.com/imageio/imageio-binaries/raw/master/ffmpeg/ffmpeg-linux64-v3.3.1 (43.8 MB)\n", "Downloading: 8192/45929032 bytes (0.0%)\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b630784/45929032 bytes (1.4%)\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b1761280/45929032 bytes (3.8%)\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b3309568/45929032 bytes (7.2%)\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b5693440/45929032 bytes (12.4%)\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b9068544/45929032 bytes (19.7%)\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b13049856/45929032 bytes (28.4%)\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b17113088/45929032 bytes (37.3%)\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b21045248/45929032 bytes (45.8%)\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b24961024/45929032 bytes (54.3%)\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b28975104/45929032 bytes (63.1%)\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b33030144/45929032 bytes (71.9%)\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b37052416/45929032 bytes (80.7%)\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b41066496/45929032 bytes (89.4%)\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b45080576/45929032 bytes (98.2%)\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b45929032/45929032 bytes (100.0%)\n", " Done\n", "File saved as /root/.imageio/ffmpeg/ffmpeg-linux64-v3.3.1.\n", "Running eagerly\n" ], "name": "stdout" } ] }, { "metadata": { "id": "1xhQkS8A_KrJ", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Outline\n", "In this practical, we tackle the task of **classification** of a simple, synthetic dataset. Classification in machine learning involves learning a labelling of examples into one (or more) discrete categories. This differs from another common task in machine learning called **regression**, which involves learning a mapping from inputs to a continuous-valued output. \n", "\n", "1. We begin by introducing a synthetic dataset of red and blue points which we want to separate\n", "2. We introduce and explore the idea of **linear seperability**\n", "3. We define a **loss** as a measure of how good of a seperator a particular line is\n", "4. We briefly introduce TensorFlow and show how it can be used to automatically find the minimum of a loss function." ] }, { "metadata": { "id": "H020s1EsB_9p", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "#@title [RUN ME!] Helper functions { display-mode: \"form\" }\n", "def plot_dataset(inputs, labels):\n", " # Plot the given 2D inputs and labels using Matplotlib. \n", " plt.scatter(\n", " inputs[:, 0], inputs[:, 1], \n", " c=['red' if label > 0 else 'blue' for label in labels])\n", "\n", " plt.axis('equal')\n", "\n", " plt.xlabel('x1')\n", " plt.ylabel('x2')" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "3l1rLP3HufZv", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## The Data" ] }, { "metadata": { "id": "FCu4YZy-uj0v", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Run the code in the cell below, and look at the resulting plot. It should produce a simple 2-D data set consisting of 2 classes of points, the classes are represented by colours blue and red. Our task is to build a **binary classifier** that can distinguish between red and blue points (red and blue are referred to as the **classes** of the points), using only the 2-D coordinates of a point. In other words, we want a function that takes as input a 2-D vector representing the coordinates of a point and returns a value of 1 or 0 indicating whether the point is red or blue. Here we have **encoded** the colours red and blue into the numbers 1 and 0 (which make it easier to work with in maths and code!)\n", "\n", "Note: we have arbitrarily encoded red as 1 and blue as 0, you could do it the other way around too as long as you're consistent!" ] }, { "metadata": { "id": "2SrsrFSTtrl6", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 361 }, "outputId": "73c152d0-097e-444b-ce34-dd483940c083" }, "cell_type": "code", "source": [ "#@title Generate the Dataset {run: \"auto\"}\n", "# Define the centre(s) of the points\n", "centre = 1 #@param {type:\"slider\", min:0, max:2, step:0.1}\n", "\n", "points_in_class = 20 # How many points we want per class\n", "\n", "# A fixed random seed is a common \"trick\" used in ML that allows us to recreate\n", "# the same data when there is a random element involved. \n", "np.random.seed(0) \n", "\n", "# Generate random points in the \"red\" class\n", "red_inputs = np.random.normal(loc=centre, scale=1.0, size=[points_in_class, 2]) \n", "# Generate random points in the \"blue\" class\n", "blue_inputs = np.random.normal(loc=-centre, scale=1.0, size=[points_in_class, 2]) \n", "# Put these together\n", "inputs = np.concatenate((red_inputs, blue_inputs), axis=0) \n", " \n", "# The class (label) is 1 for red or 0 for blue\n", "red_labels = np.ones(points_in_class) \n", "blue_labels = np.zeros(points_in_class)\n", "labels = np.concatenate((red_labels, blue_labels), axis=0)\n", "\n", "# num_data_points is the total data set size\n", "num_data_points = 2 * points_in_class\n", "\n", "plot_dataset(inputs, labels)" ], "execution_count": 3, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\nB/OXgJIZT2EKAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "metadata": { "id": "an9GF8nZWS4K", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###What does the data look like? \n", "The inputs are 2-dimensional vectors (points in a 2-D space). Here are the coordinates of 4 points, which we've deliberately chosen so that points 1 and 2 are \"red\" and points 3 and 4 are \"blue\". " ] }, { "metadata": { "id": "5f8M-vQYWUuI", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "print('Input 1:\\t', inputs[0])\n", "print('Input 2:\\t', inputs[1])\n", "\n", "print('Input 3:\\t', inputs[-1])\n", "print('Input 4:\\t', inputs[-2])" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "E14elwRYWoxB", "colab_type": "text" }, "cell_type": "markdown", "source": [ "The labels are either 0 or 1. Here are the labels corresponding to the points above:" ] }, { "metadata": { "id": "q4EJG8g4Wtih", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "print('Label 1:\\t', labels[0])\n", "print('Label 2:\\t', labels[1])\n", "\n", "print('Label 3:\\t', labels[-1])\n", "print('Label 4:\\t', labels[-2])" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "RyJ1PgtEFpa7", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Aside: Other Examples of Binary Classification Problems" ] }, { "metadata": { "id": "7LAhNs_GFwOZ", "colab_type": "text" }, "cell_type": "markdown", "source": [ "In this practical, we are using a synthetic dataset where we have 2 classes of 2-D points that come from different distributions, distinguised by the colours, red and blue. To make this more concrete, here are some examples of more real-world binary classification problems.\n", "\n", "* Determine whether an email message (input) is SPAM or NOT SPAM (label)\n", "* Determine whether an image, represented by its encoded pixel values (input) is a picture of a DOG or a CAT (label)\n", "* Determine whether energy usage of a building will go UP or DOWN (label) next month, using a time series of past energy usage values (input)\n" ] }, { "metadata": { "id": "qNuMy1XwIJ-z", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Linear separability\n", "\n", "Linear separability of a D-dimensional dataset with 2 classes means that there exists a single (D-1)-dimensional (hyper-)plane that separates the classes (a hyperplane is a generalisation of a straight line to many dimensions). In this case, the dataset is 2-dimensional and is **linearly separable** if it is possible to draw a (1-D) line between the red and blue points such that all of the red points lie on one side of the line and all of the blue points on the other. \n", "\n", "### Exploratory Task\n", "In the code cell under the heading \"The Data\", change the slider for the ```centre``` value. This will automatically update the value in the code and will redraw the plot.\n", "\n", "* At what value of centre does the dataset become linearly separable?\n", "\n", "\n", "### Question for discussion\n", "Can you think of some 2-D, 2-class datasets, similar to the one above, that are separable (the points from the 2 classes don't overlap each other), but are not **linearly** separable? Draw some examples on paper or plot them using Matplotlib and discuss this with your neighbour and tutors. \n", "\n" ] }, { "metadata": { "id": "GV5plkAowLy8", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Drawing the line\n", "\n", "As you may recall from school, a line in 2 dimensions, with coordinate axes $x_1$ and $x_2$, which passes through the origin (0, 0) can be represented by the equation $w_1x_1 + w_2x_2 = 0$\n", "\n", "We can also write this in vector form as: $\\mathbf{w}^T\\mathbf{x} = 0$, where $\\mathbf{w}^T = [w_1, w_2]$ and $\\mathbf{x}^T = [x_1, x_2]$.\n", "\n", "When a line (or hyperplane) is defined this way, we call the **parameters**, $\\mathbf{w} = (w_1, w_2)$ a **normal vector** for the line. The normal vector is orthogonal (perpendicular) to the line. We want to construct such a line that separates red and blue points, which we will call a **decision boundary**. \n", "\n", "In the following cell, we plot our dataset along with a normal vector $\\mathbf{w}$ and decision boundary. You can adjust the values of $w_1$ and $w_2$ by using the sliders on the right. Observe the effect that the values have on the normal vector drawn in *red* and decision boundary in *black*. Adjust the values so that the black line separates the blue and red points (i.e. red points on one side and blue on the other). Your line should also have the normal vector pointing in the direction of the red points. The reason that direction is significant is that we want to eventually **classify** points on one side of the line as being red and the other as being blue. \n", "\n", "Is it possible to find a line through the origin that perfectly separates the points?\n", "\n", "**Note**: Each of our inputs is a 2-D vector, made up of two coordinate values. We refer to these 2 coordinate axes as $x_1$ and $x_2$. For example, if we have an input $(1, 2)$, then we would say $x_1 = 1$ and $x_2 = 2$ for that point." ] }, { "metadata": { "id": "TAXUNshcvPsg", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 365 }, "outputId": "e8a20f5e-039b-4932-83f2-033d9513899b" }, "cell_type": "code", "source": [ "#@title Effect of parameters {run: \"auto\"}\n", "\n", "# Define the parameters\n", "w1 = -1 #@param { type: \"slider\", min: -5, max: 5, step: 0.1 }\n", "w2 = 1 #@param { type: \"slider\", min: -5, max: 5, step: 0.1 }\n", "\n", "plot_dataset(inputs, labels)\n", "\n", "# Add the weight vector to the plot. We plot it in red, as it has to \"point\"\n", "# in the direction of the red points.\n", "ax = plt.axes()\n", "ax.arrow(0, 0, w1, w2, head_width=0.3, head_length=0.3, fc='r', ec='r')\n", "\n", "# Plot part of the decision boundary in black. It is orthogonal to the weight\n", "# vector.\n", "t = 2\n", "plt.plot([-t * w2, t * w2], [t * w1, -t * w1], 'k-')\n", "\n", "plt.xlim([-4, 4])\n", "plt.ylim([-4, 4])\n", "\n", "plt.show()" ], "execution_count": 6, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\nx8PzCIMAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "metadata": { "id": "igAjsyMldbMr", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Classification\n", "Given a normal vector $\\mathbf{w}$, we can evaluate which side of the decision boundary a particular point $\\mathbf{x_i} = (x_{i,1}, x_{i, 2})$ lies by evaluating $\\mathbf{w^Tx_i}$. If $\\mathbf{w^Tx_i} > 0$, the point $\\mathbf{x_i}$ lies to one side of the boundary (in the direction of the normal vector), and we can classify that point as belonging to class 1 (in our case, \"red\"). If $\\mathbf{w^Tx_i} < 0$ the point lies on the other side and can be classified as class 0 (in our case, \"blue\"). Finally if $\\mathbf{w^Tx_i} = 0$ the point lies on the decision boundary and we can decide whether to classify it as either 0 or 1, or ignore it. " ] }, { "metadata": { "id": "jqW7RpSTaRZH", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## How \"good\" is the line?\n", "\n", "If you've played around with the above code, you may have developed some intuition around how different settings of the parameters influence the final placement of the decision boundary. The purpose of machine learning is to *automatically* adjust the values of $w_1$ and $w_2$ to find a suitable decision boundary! But to do this, we need to mathematically specify some **loss** or **objective** function. The loss is a function of the parameters $w_1$ and $w_2$ and tells us how good a certain configuration of the parameter values are at classifying the data. This function is defined such that it reaches its optimum setting when it is minimised, i.e. the *smaller* its value, the *better* the separation between the classes. An additional property a loss function can have that is often crucial for machine learning is being *differentiable*. A differentiable loss function allows us to use *gradient-based optimisation* to find its minimum and the corresponding optimal values of $w_1$ and $w_2$. \n", "\n", "For this classification problem, we consider the **binary cross-entropy** loss function to measure how good the model's predictions are. This loss function compares the model's prediction for each example, $\\mathbf{x_i}$ to the true **target** $y_i$ (we often refer to the true label associated with an input as the \"target\"). It then applies the non-linear log function to penalise the model for being further from the true class. The equation for the binary cross entropy loss, on a dataset with $N$ points is:\n", "\n", "\\begin{align}\n", "l(\\mathbf{w}) = -\\frac{1}{N}\\sum_{i=1}^N y_i log(\\hat{y}_i) + (1-y_i)log(1-\\hat{y}_i)\n", "\\end{align}\n", "\n", "where $\\hat{y}_i = \\operatorname{sigmoid}(\\mathbf{w}^T\\mathbf{x_i})$ and the $\\operatorname{sigmoid}$ function is defined as:\n", "\n", "$$\n", "\\mathrm{sigmoid}(a) = \\frac{1}{1 + e^{-a}} .\n", "$$\n", "\n", "The reason we use the $\\operatorname{sigmoid}$ function is because our classifier can output any real value. The binary cross entropy loss function, however, expects the predictions made by a classifier to be between $0$ and $1$. The sigmoid function \"squashes\" any real number inputs to lie in the interval $(0, 1)$.\n", "\n", "Let's now wrap this in a Python function so that we can compute the loss for any values of $w_1$ and $w_2$:\n", "\n" ] }, { "metadata": { "id": "wKkpBZ6ZWLoF", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "def compute_loss(w1, w2):\n", " \n", " total_log_likelihood = 0 \n", " \n", " # Add the contribution of each datapoint to the loss\n", " for (x1, x2), target in zip(inputs, labels):\n", " # As our targets are 0 or 1, our prediction function must output a value between 0 and 1.\n", " # The sigmoid function 'squashes' any value to lie between 0 and 1:\n", " prediction = tf.sigmoid(w1*x1 + w2*x2) \n", " \n", " # Compute the local loss term\n", " # We add 1e-10 to make the log operations numerically stable (i.e. avoid taking the log of 0.)\n", " log_likelihood = target * tf.log(prediction + 1e-10) + (1.-target)*tf.log(1.-prediction + 1e-10)\n", " total_log_likelihood += log_likelihood\n", " \n", " loss = -total_log_likelihood\n", " average_loss = loss / len(inputs)\n", " return average_loss" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "x2P-s50pgj-N", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### More on the sigmoid function" ] }, { "metadata": { "id": "AQqQ_quqwCFF", "colab_type": "text" }, "cell_type": "markdown", "source": [ "\n", "\n", "The sigmoid function is defined as\n", "$$\n", "\\mathrm{sigmoid}(a) = \\frac{1}{1 + e^{-a}} .\n", "$$\n", "Can you show that\n", "$$\n", "1 - \\mathrm{sigmoid}(a) = \\frac{1}{1 + e^{a}} ,\n", "$$\n", "and draw both of these on a sheet of paper?\n", "\n", "* What is its value when $a = \\mathbf{w}^{T}\\mathbf{x}$ is positive? negative? and zero?\n", "* What happends to its value when $a = \\mathbf{w}^{T}\\mathbf{x}$ becomes larger?\n", "* What is the value of $\\mathrm{sigmoid}(\\mathbf{w^Tx})$ when $\\mathbf{w}^T\\mathbf{x} = 0$? How does this change how we classify points on either side of the decision boundary?\n", "\n", "After working through the above questions, explain to your neighbour why the binary cross-entropy loss function makes sense. \n", "\n", "**HINT**: Remember the idea of the loss function is to return small values when the classifier makes good predictions and large values when the classifier makes bad predictions. " ] }, { "metadata": { "id": "x46fjqTUf4Dj", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Bonus Question\n", "We derived the `compute_loss()` function above based on minimising the log-loss of the prediction error. This is related to a concept called 'cross-entropy'. But another way of deriving exactly the same loss function is by maximising the likelihood of the data under the model $P(y | x, w_1, w_2)$. If you are familiar with this concept (eg. from statistics), see if you can derive it this way as well.\n", "\n", "### Optional Further Reading\n", "More information on the [cross-entropy loss](http://ml-cheatsheet.readthedocs.io/en/latest/loss_functions.html) and another interesting connection to [information theory](https://rdipietro.github.io/friendly-intro-to-cross-entropy-loss/)." ] }, { "metadata": { "id": "0tJJrBynf6ms", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Loss value for your chosen $w_1$ and $w_2$\n" ] }, { "metadata": { "id": "edKlqlACgFsE", "colab_type": "text" }, "cell_type": "markdown", "source": [ "The following line of code computes the loss value for your chosen values of $w_1$ and $w_2$. Try changing the values of $w_1$ and $w_2$ using the sliders above and rerun the line below. Can you see how a better separation results in a lower loss? \n", "\n", "Note: If you've used TensorFlow before, it might be confusing how this code cell works! We explain more about this later... " ] }, { "metadata": { "id": "QyzwKx6ef_Vm", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "4f013900-35c4-4d70-9a61-4e1677767c07" }, "cell_type": "code", "source": [ "compute_loss(w1, w2).numpy()" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0.09962160420831814" ] }, "metadata": { "tags": [] }, "execution_count": 9 } ] }, { "metadata": { "id": "Z9KAMYSUgmkM", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Visualising the loss function" ] }, { "metadata": { "id": "ukphZS4_hMgN", "colab_type": "text" }, "cell_type": "markdown", "source": [ "We can visualise the loss function for our dataset by plotting its value at every point in a whole grid of $w_1$ and $w_2$ parameter values. We do this using a **contour plot**, which is a technique for visualising a 3-D function on a 2-D plot by letting colour represent the third dimension. All of the points with the same colour have the same loss value. " ] }, { "metadata": { "id": "y4HZS5zZt3Pu", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 376 }, "outputId": "0befe58e-fc5e-42aa-aae9-49f9fe5cab8c" }, "cell_type": "code", "source": [ "# We define a function so we can re-use this code later\n", "def plot_contours(): \n", " # Generate a whole bunch of (w1, w2) points in a grid\n", " ind = np.linspace(-5, 5, 50)\n", " w1grid, w2grid = np.meshgrid(ind, ind)\n", "\n", " # Compute the loss for each point in the grid\n", " losses = []\n", " for w1s, w2s in zip(w1grid, w2grid):\n", " loss = compute_loss(w1s, w2s)\n", " losses.append(loss)\n", "\n", " # Pack the loss values for every value of w1 & w2 into one (50,50) array\n", " losses_array = np.concatenate(losses).reshape(50,50)\n", "\n", " # Now plot the resulting loss function as a contour plot over the whole grid of (w1, w2) values.\n", " fig = plt.figure()\n", " plt.contourf(w1grid, w2grid, losses_array, 20, cmap=plt.cm.jet)\n", " cbar = plt.colorbar()\n", " cbar.ax.set_ylabel('Binary cross-entropy loss value')\n", " plt.xlabel('w1 value')\n", " plt.ylabel('w2 value')\n", " plt.title('Total loss for different values of w1 and w2')\n", "\n", "plot_contours()" ], "execution_count": 8, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\nCxfGy8uL0NBQtm/fDoC/vz/ffvstsbGxNGzYkFGjRuX5+qMcPHiQypUrU7t2bQA6dOjA9evXuXLl\nCgBPPPEEVatWzTHu3LlzZGZm0rhxYwBCQ0NV/UxZTp8+za1bt6zj6tevT9GiRTl8+DAARYoUoX79\n+gBs27aNJk2a8MQTTwD3K89Nmzah/O/k1wYNGlChQgUsFgvPPPOMde6P0rp1a44cOWKtKDdu3EiH\nDh3w8fFh9+7d1nvy9erVs1ayauzZs4fKlSvTqFEjALp27crp06e5du0apUqVYtu2bezfv5+CBQsy\na9YsSpcunW28rT+L3AQEBJCamkpCQgL79u2jefPmxMfHk5GRwf79+61/Pmr9+OOPtG/fPtefPz09\nnRdffBEg2+/zvn37aN++PV5eXvj7+9OyZctcr92wYUMOHTpEfHw8jz32GNWrV+fEiROcOnWKatWq\nUbRoUev3JiUlMXjwYN58803KlStn188ghBpyT9jAEhIS8Pb2pkiRItbXihUrRnx8fI7v3bp1K/Pn\nzychIQGLxQJgDQ9bbt68SbFixbJ9xs2bN4H74T5v3jxCQ0OpWLEi48aNo169eo98Pa/PKF68uPVr\ni8VC0aJFrT/Lg+89KCkpCT8/v2xzs8etW7e4c+eO9d4xwO3bt0lMTKRQoULZPjc5OZldu3Zl+94i\nRYqQlJQEkG0eBQoUICMjI8/P9vPzo2HDhmzbto2aNWty9+5dAgMDAVi4cCGrV68mLS2NP//8Ex8f\nH7t+pnPnzmWbZ+HChUlISKB///7A/Ya/uLg4Xn75Zd56661s4239WTxKgwYNOHz4MPv27aNt27ac\nO3eOkydPsn//fnr16qV6/gCrV69m6dKl3Llzh4yMDDIzM63v+fj4ULBgQQC8vLysv8+JiYnZ/gyK\nFy+e65wbNWrEwYMHyczMpG7dulSsWJEDBw7g4+OT7R8L165dY+DAgbRv356BAwfaNX8h1JIQNjB/\nf3/S09O5ffu29S+fxMRESpUqle370tLSGDp0KJ9++inNmzfn7t271ipHjVKlSlnvfT78GdWqVWP6\n9OlkZGQQHR3NiBEj+OWXXx75+qOULl0622dkZmaSlJSUo0p7WLFixbJ1iSckJKj+uQDKli1L8eLF\nWb9+fY73duzYke3rcuXK0bx5c2bOnGnXZ+QlJCSEn3/+mStXrlgrv71797Jw4UIiIyOpWLEiW7du\n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\n", "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "metadata": { "id": "676bWBwTiXXD", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Optimising the loss using TensorFlow" ] }, { "metadata": { "id": "MMLA-wk5xB7p", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Now that we have a function that gives us the loss for different values of $w_1$ and $w_2$, we want an automated method to find the values that minimise the loss function. This is where optimisation by **gradient descent** comes in. The idea is that for each (batch of) data points, we compute the loss using the current values of $w_1$ and $w_2$ on the data. We then compute the **gradient** (or derivative) of the loss function at the current values of $w_1$ and $w_2$. The negative of the gradient points in the direction of *steepest descent* along the loss function. By adjusting the values of $w_1$ and $w_2$ in the direction of the negative gradient, we move closer towards the minimum of the loss function (provided the loss function is \"well behaved\"). How big of a step we take is mediated by the **learning rate**. To do this more easily, we will use TensorFlow.\n", "\n", "Don't worry if you don't understand what's going on here, you will see this in a lot more detail during the **Mathematics for Machine Learning** lectures!\n", "\n" ] }, { "metadata": { "id": "sFJBmN5Hivhv", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Aside: TensorFlow" ] }, { "metadata": { "id": "DRtDggkBi0X3", "colab_type": "text" }, "cell_type": "markdown", "source": [ "TensorFlow (TF) is an open source software library for numerical computation using the concept of Tensors. You can think of Tensors as being a generalisation of matrices to higher dimensions, or roughly equivalent to multi-dimensional arrays. Scalars are 0-dimensional tensors, vectors are 1-dimensional, standard matrices are 2-dimensional, and higher-dimensional tensors have 3 or more dimensions. You can think of dimensions as representing groups of numbers that mean the same thing. For example, for images, we often use 3-dimensional tensors where the first dimension represents the red, green, and blue color channels of the image, and the next two are the columns and rows of pixels of the image. \n", "\n", "**Note**: Don't be confused when people say \"2-D vector\" or \"3-D vector\", which refers to a 1-dimensional tensor that has size 2 or 3.\n", "\n", "The major advantage of using TensorFlow is that it can automatically derive the gradients of many mathematical expressions involving tensors. It achieves this through a process called \"automatic differentiation\". Tensorflow also supports multiple \"kernels\", allowing you to easily run your code on normal processors (CPUs), graphics cards (GPUs) and other more exotic hardware accelerators like Google's Tensor Processing Units (TPUs)\n", "\n", "Tensorflow actually provides **two modes of operation**, the first, called \"graph mode\", builds a computation graph upfront and then feeds data into the graph. By building the graph upfront, Tensorflow can apply optimisations to the graph that allow it to extract peak performance from the hardware you're running on. You will have encountered this mode if you used Tensorflow before or attended the Indaba last year! The second mode, called [\"Eager-mode\"](https://www.tensorflow.org/guide/eager), is a lot newer and evaluates Tensor operations imperatively (in the order you write them), similar to NumPy and PyTorch. Eager-mode is slightly less performant but a lot more intuitive, especially if you've never used a \"define-and-run\" programming style (like graph mode) before, and is therefore the mode we will use in these practicals. " ] }, { "metadata": { "id": "eLVl2PhK2VpP", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Using Tensorflow to optimise the loss\n", "We use TensorFlow to optimise the parameters of the model with gradient descent. We loop over the dataset multiple times (called \"epochs\") and plot the final decision boundary along with a plot showing how the parameters and loss changed over the epochs.\n", "\n", "**Note**: TensorFlow is probably overkill for this example, becaue the gradient is very easy to calculate, but we introduce it here because it will become essential to calculate the gradients of more complex models in later practicals! " ] }, { "metadata": { "id": "cKre-CI8IG9z", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "lr = 0.25 # The learning rate\n", "\n", "# Initialise Tensorflow variables representing our parameters.\n", "# We need to use TensorFlow variables here rather than Numpy or Python ones so \n", "# that TensorFlow is able to compute gradients.\n", "w1 = tfe.Variable(-2.0) \n", "w2 = tfe.Variable(-4.0) \n", "\n", "plot_contours()\n", "\n", "# Loop over the dataset multiple times\n", "parameter_values = []\n", "for epoch in range(20):\n", " plt.scatter(w1.numpy(), w2.numpy(), marker='o', color='black')\n", " \n", " with tf.GradientTape() as tape:\n", " loss = compute_loss(w1, w2)\n", " \n", " # Now we take a step in parameter space in the direction of the gradient to move the parameters closer (hopefully!) to their optimum\n", " dw1, dw2 = tape.gradient(loss, [w1, w2])\n", " \n", " # Step 'lr units' in the direction of the negative gradient\n", " # We achieve this by subtracting lr * dw1 and lr * dw2 from the w1 and w2 variables\n", " w1.assign_sub(lr*dw1)\n", " w2.assign_sub(lr*dw2)\n", " \n", "print('Finished optimisation, the final values of w1 and w2 are:')\n", "print(w1.numpy(), w2.numpy())\n", "\n", "# Plot the final point on the loss surface.\n", "plt.scatter(w1.numpy(), w2.numpy(), marker='x', color='red')\n", "plt.show()\n", "\n", "# Plot the final decision boundary\n", "plot_dataset(inputs, labels)\n", "ax = plt.axes()\n", "ax.arrow(0, 0, w1.numpy(), w2.numpy(), head_width=0.3, head_length=0.3, fc='r', ec='r')\n", "plt.plot([-2 * w2.numpy(), 2 * w2.numpy()], [2 * w1.numpy(), -2 * w1.numpy()], 'k-')\n", "\n", "plt.xlim([-4, 4])\n", "plt.ylim([-4, 4])\n", "\n", "plt.show()" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "meoIDXSQjKeE", "colab_type": "text" }, "cell_type": "markdown", "source": [ "How did the final values of $w_1$ and $w_2$ found by Tensorflow correspond to the ones you found manually? \n", "\n", "## Optional Tasks\n", "If you've worked through this practical, answered all the questions and feel you have a good understanding of what's going on, try the following tasks:\n", "\n", "1. Add a **bias** parameter to the equation for the decision boundary and visualise how that changes the decision boundary, the loss and the ultimate solution found by Tensorflow.\n", "2. Add a **regulariser**, for example, the L2 regulariser (see the appendix below for more information) - how does it affect the contour plot of the parameters vs the loss? How does changing the strength of regularisation affect the loss? \n", "\n", "Note: The benefit of using regularisation will be discussed in the next practical! " ] }, { "metadata": { "id": "SVFq4xvBmGQq", "colab_type": "text" }, "cell_type": "markdown", "source": [ "# Next Steps\n", "Have a look at [last year's practical](https://github.com/deep-learning-indaba/practicals2017/blob/master/practical1.ipynb) which takes a more \"bottom-up\" approach, covers more detail on how gradients are computed and also looks at a multi-class classification problem with a non-linear decision boundary. \n", "\n", "Note: last year's practicals use Tensorflow's \"graph mode\" as opposed to \"Eager mode\" that we use here." ] }, { "metadata": { "id": "4jpKVuEkQF46", "colab_type": "text" }, "cell_type": "markdown", "source": [ "# Appendix" ] }, { "metadata": { "id": "EgLuuVNRQHqy", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### L1 and L2 Regularisation" ] }, { "metadata": { "id": "SlO75RlmQKQF", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Two of the most simple regularization methods are L1 and L2 regularization (you may have heard of them as _Lasso_ and _Ridge_ regression if you've used linear regression before). Both of these methods regularize the model by adding a term to the loss that penalizes the model if it becomes too complex.\n", "L1 regularization adds a term based on the L1 norm:\n", "\n", "$loss_{L1} = loss + \\lambda \\sum_i |w_i|$\n", "\n", "where $\\lambda$ is a parameter that controls the amount of regularization, and $w_i$ are the parameters of the model. L1 regularization has the effect of forcing some parameters to shrink to 0, effectively removing them from the model.\n", "\n", "L2 regularization similarly adds a term based on the L2 norm:\n", "\n", "$loss_{L2} = loss + \\lambda \\sum_i w_i^2$.\n", "\n", "L2 regularization has the effect of preventing any of the parameters from becoming too large and _overpowering_ the others. \n", "\n", "In some cases it can work well to use both L1 and L2 regularization. \n", "\n", "For more information see the articles [here](http://enhancedatascience.com/2017/07/04/machine-learning-explained-regularization/) and [here](https://towardsdatascience.com/l1-and-l2-regularization-methods-ce25e7fc831c)." ] } ] } ================================================ FILE: Practical_1_Deep_Feedforward_Networks.ipynb ================================================ { "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Practical 1: Deep Feedforward Networks", "version": "0.3.2", "provenance": [], "collapsed_sections": [ "tHy4bjbTVCzV", "SIUsSjNwVk_n", "ot-FjimzV6op" ] }, "kernelspec": { "name": "python2", "display_name": "Python 2" } }, "cells": [ { "metadata": { "id": "dYUH0qf8Dqkm", "colab_type": "text" }, "cell_type": "markdown", "source": [ "# Practical 1: Deep Feed-forward Networks" ] }, { "metadata": { "id": "6hH4wd81A_P8", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Introduction\n", "In this practical, we implement and train a feed-forward neural network (also known as an \"MLP\" for \"multi-layer perceptron\") on a dataset called \"Fashion MNIST\", consisting of small greyscale images of items of fashion. We consider the practical issues around generalisation to out-of-sample data and introduce some important techniques for addressing this. \n", "\n", "## Learning Objectives \n", "* Understand how to use **Tensorflow Eager** and **Keras Layers** to build a neural network architecture\n", "* Understand how a model is trained and evaluated\n", "* Be able to explain why there is a difference between **in-sample** and **out-of-sample** model performance\n", "* Understand the concept of **train/validation/test split** and why it's useful\n", "* Research at least 1 technique that can be used to improve model **generalisation**" ] }, { "metadata": { "id": "NxSD3yPDfEIj", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "6c6beb36-83c9-4658-c4d0-08dbdbbc6a0f" }, "cell_type": "code", "source": [ "#@title Imports (RUN ME!) { display-mode: \"form\" }\n", "from __future__ import absolute_import, division, print_function\n", "\n", "import tensorflow as tf\n", "import tensorflow.contrib.eager as tfe\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "try:\n", " tf.enable_eager_execution()\n", " print('Running in Eager mode.')\n", "except ValueError:\n", " print('Already running Eagerly')" ], "execution_count": 1, "outputs": [ { "output_type": "stream", "text": [ "Running in Eager mode.\n" ], "name": "stdout" } ] }, { "metadata": { "id": "sU33KeDUDomX", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## The Data" ] }, { "metadata": { "id": "nL0dFs-DD6sM", "colab_type": "text" }, "cell_type": "markdown", "source": [ "In this practical, we use the Fashion MNIST dataset consisting of 70,000 greyscale images and their labels. The dataset is divided\n", " into 60,000 training images and 10,000 test images. The idea is to train a **classifier** to identify the class value (what type of fashion item it is) given the image. We train and *tune* a model on the 60,000 training images and then evaluate how well it classifies the 10,000 test images that the model did not see during training. This task is an example of a **supervised learning** problem, where we are given both input and labels (targets) to learn from. This is in contrast to **unsupervised learning** where we only have inputs from which to learn patterns or **reinforcement learning** where an agent learns how to maximise a reward signal through interaction with its environment. " ] }, { "metadata": { "id": "3lEM3aBa2N63", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Aside: Train/Validation/Test Split\n", "\n", "When we build machine learning models, the goal is to build a model that will perform well on *future* data that we have not seen yet. We say that we want our models to be able to **generalise** well from whatever training data we can collect and do have available, to whatever data we will be applying them to in future. To do this, we split whatever data we have available into a **training set, a validation set and a test set**. The idea is that we train our model and use the performance on the validation set to make any adjustments to the model and its hyperparameters, but then we report the final accuracy on the test set. The test set (which we never train on), therefore acts as a proxy for our future data." ] }, { "metadata": { "id": "9VRxcYWHfZJ5", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "# Tensorflow has convenient modules for loading a number of standard datasets\n", "fashion_mnist = tf.keras.datasets.fashion_mnist\n", "(train_and_validation_images, train_and_validation_labels), (test_images, test_labels) = fashion_mnist.load_data()\n", "\n", "text_labels = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "1Z_Ks31qEfUM", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Construct a validation set\n", "Next, we remove 10,000 images and labels from the training set to use as a validation set. We will come back to the validation set later! " ] }, { "metadata": { "id": "dZKEjjGM8I4t", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "# Construct a validation set from the last 10000 images and labels from \n", "# train_and_validation_images and train_and_validation_labels\n", "validation_images = train_and_validation_images[-10000:, :, :]\n", "validation_labels = train_and_validation_labels[-10000:]\n", "\n", "# Construct a training set from the first 50000 images and labels.\n", "train_images = train_and_validation_images[:50000, :, :]\n", "train_labels = train_and_validation_labels[:50000]" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "fbWk7qJOEkl6", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### What does the data look like?\n", "Each image in the dataset consists of a 28 x 28 matrix of greyscale pixels. The values are between 0 and 255 where 0 represents black, 255 represents white and there are many shades of grey in-between. Each image is assigned a corresponding numerical label, so the image in ```train_images[i]``` has its corresponding label stored in ```train_labels[i]```. We also have a lookup array called ```text_labels``` to associate a text description with each of the numerical labels. For example, the label 1 is associated with the text description \"Trouser\".\n", "\n", "The 2 cells below demonstrate how to visualise the input data. Make sure you understand what's happening, particularly how the indices correspond to individual items in the dataset. " ] }, { "metadata": { "id": "PgfvNeX2gcAL", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 280 }, "outputId": "4b853a99-0389-4dc8-d163-0714ad00507b" }, "cell_type": "code", "source": [ "# We use the Matplotlib plotting library to visualise an image selected at random from the training set \n", "plt.figure()\n", "random_index = np.random.randint(0, len(train_images))\n", "plt.imshow(train_images[random_index], cmap='gray')\n", "plt.colorbar()\n", "numerical_label = train_labels[random_index]\n", "text_description = text_labels[numerical_label]\n", "plt.title('True Class: {} (\"{}\")'.format(numerical_label, text_description))\n", "\n", "plt.gca().grid(False)" ], "execution_count": 4, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\nAYPHSa3T0HhhAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "metadata": { "id": "-utfMlxhhL3b", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 589 }, "outputId": "18781e96-bf98-4a18-8e3e-3149fac0df80" }, "cell_type": "code", "source": [ "# Another view, showing 25 randomly selected images at a time\n", "plt.figure(figsize=(10,10))\n", "for i in range(25):\n", " plt.subplot(5,5,i+1)\n", " plt.xticks([])\n", " plt.yticks([])\n", " plt.grid('off')\n", " \n", " img_index = np.random.randint(0, 50000)\n", " plt.imshow(train_images[img_index], cmap=plt.cm.gray)\n", " plt.xlabel(text_labels[train_labels[img_index]])" ], "execution_count": 5, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n/N1sTp4c5mQAlzvnjkdp8Xy9/O9/AXCzc24EgH8DqHFxzwLwgHNuBUrutXHe+w+cc/8D4GrnXE07\n7SY9WQXkAAAXOedeALAMwIcouVOfBrAtSj+M6wG4w3v/uHPuVQD/dM49AuBxlLTg/3PO7Q7gPgBP\nO+cOWtPsD7FWtHXOTWMKIDIAACAASURBVEBpnlqjtO5OQukve+YsAFc55yai9ON3RfkHcbW1CWAO\ngHHOueNQuibmoDTfYt2htVk8qvJ3s0mmkAshhBBCrC3NVa4SQgghhMiihxwhhBBCFBI95AghhBCi\nkOghRwghhBCFRA85QgghhCgkesgRQgghRCHJ1slp0aJFk84vb9GiRfQ6lQ5/9NFHR6+/+MUvBvu5\n554L9osvvhiN69y5c7AHDRoU7NatW0fjttlmm2Cfcsop0baJEyfWekw5PvvssxafP2rNWZfzOXTo\n0GDfd9990bYHH3ww2Outt6p6/PLlcWubDz/8MNj/+c+qQpqffBI3M15//VWXMe/v/fffj8aVy5AD\nAO66665gX3nllYlvUT80xHw21trs2rVr9LpXr17BXrJkSbA//fTTaByv1U6dOgV70003jcZtuGEo\nuIotttgi2K1axa2rzjnnnGD/97+27mDDUYS1yfDaAeK1NWDAgGD/5S9/icadddZZwb799tuT++fr\n449//GOwTzrppGjcjBkzKjvgeqZIa7NHj7he5tlnnx3sbbfdNthPPBF3XliwYEGwP/7442B/4Qux\nD6R3797B3mOPPYJ92223ReP++te/BnvhwoUVHXulv+U5UnMpT44QQgghCokecoQQQghRSJprWwcA\nlbu4dt111+g1u+fYxbfPPvtE45599tlgL1q0qjdghw4donHnnntusPv06RNte+mll4K9bNmyYFtX\n4Lp0ua8LunfvHuyPPvoo2savN9988+Q+WHrabLPNgm1lLT6X9rMYfl+3bt2S46oRPoe5a5ElByCW\nkT744INgd+zYMRrHa5Wlx7Zt20bjVqxYEWxec6NGjYrG8XXz4x//OHm8Ik9OFnjvvfeCbSV6lqt+\n97vfBXvp0qXRuJdffjnY06dPD7a9/1U7lf6WsQQFAGeccUaw33777WgbS8abbLJJsIcPH17n46xh\n5cqVwT7ttNOibT/60Y+CzSEHhx9+eDTu8cdXdWppyM4LutKEEEIIUUj0kCOEEEKIQqKHHCGEEEIU\nkmYdk1MpG2ywQfR64403DjZrzXfccUc0juMNOFagf//+yf3tvPPO0TbWpCdMmLAGR9282WGHHYL9\n2muvRdtY63/rrbeCzbEaQByTk4PTHlmHtrElb775ZrA5jVnkGTZsWLBtKve8efOCzengHIsGxHPB\naco2FoFjB3iO7r333micjX1LUWmsUbVizz/D88Sp/UAc+8ZxF7Z0AMdm8X1AMTkxuZiUa6+9Nti2\nHArf02w8Ip9jLqdhyzbw6/nz5wfbxmFxuQFbniNFy5Ytg/3www9H2ziW5/e//320ja/LtY3X0ZUm\nhBBCiEKihxwhhBBCFJJmLVdV6n6++OKLo9ecQvelL30p2FylFwB23HHHYE+ePDnYnB4NxHLVpEmT\nom3WbV9D0V3nfO5s1Ut2b/O5438H4nPEkqN1iTPssrWueHbfNlaF1aZK7nrk0gpW+mV5ieeFJS4g\nTm/lcgA2hZy59dZbg81yMRBXr2a393nnnReNK/o6a0h4bVpYrmBZy8pQfE1svfXWwbbXkUiz7777\nBpvLKljsOWWZh++FVmriMAEur2LnMlXuw1bNZvizOKwAAL7//e8H28pV9ZlSLk+OEEIIIQqJHnKE\nEEIIUUiatVxVKbNnz06+5uyQ7bbbLhrHrkG2f/3rX0fjuGoyV/8EYqmGGxhWE++88070mt2enLVh\npQXOwuJMK5tFsNFGG9VqW3c7V+lUdlUaW5mUK4YvXrw42rblllsGmytK//vf/47GcUYiz+WUKVOi\ncY888kiwOTPDrk2urLvnnnsG28pfqoacJycLsKRrq4zzHPL65vVn989rbubMmWt+sFUEZw9yRmNu\nHix87lk2zMlLnB1s5Sq+7/Ln2muIpTGW0KxcxY2tbVYyN85eW+TJEUIIIUQh0UOOEEIIIQqJHnKE\nEEIIUUiqIiYn1+HVVmGsC/fdd1+wx48fH23jVFe7rchwFU2rI6fSR+2/p1IWbcVOfh/btkorx+TY\ndPVq55JLLgl27969o21cqdbq7/369Qt2mzZtkuOmTZsWbJ4/G4c1ZsyYYLdv3z7Yc+fOjca9+uqr\nweaYkN122y0ax+UjfvCDH0DE5FLseZtdixyTkUont6+XLVsWbBunJ2L69u0b7Fx1aJ6jXPXqSmNo\nOEaVq9bbz6q0Gn3qc4A4Nmjw4MHRNsXkCCGEEEJ8DnrIEUIIIUQhqQq5KpcmyS6z3DhOwTvllFOi\nbZyqzO4+ABg4cGClh1ko2L3NTd+AWFLKVVVllyiff+sqZemJJSmbKsmu80obzBUZTunt1q1bsG2p\nA54jrnAMxHPLMhQ3XgXilNiUhGE/i0sIWPgaYne+rYzcoUOHYOeuh2ql0sqyb7zxRvQ6JSXbauR8\njm0KsUgzaNCgisaxBJQ7v3ztW4mS97HFFlvU+u92HzyvdZGu7PtYnqtv5MkRQgghRCHRQ44QQggh\nCklVyFU56uKyPuyww6LXLJFMnTo12sbZIuw6t43WcpHxzZ0PPvgges1SUapZp32da+jHWVRcldO6\nb/lzc1U/q4URI0YEe6uttgr266+/Ho3jyqTcZBGIZQyWl7jpH5CWsmzl6VdeeaXWY+XKynZ/LJHY\natgsr9kGvFxduVrJZZ5yk9UuXbpE47iRY+vWrYNtsxa5MStLIaNGjYrG1UeWa5HgzCaeEysNVRqK\nweQaF/M918padcmuSjUJtfuzmVz1iTw5QgghhCgkesgRQgghRCHRQ44QQgghCokCEwirM7LWz5WL\nbUXYSZMmBdumxHLXZu6WfNNNN63VsTZ1clVQWbfPxdrkttXlPaw9V5o6W2R69OgRbI6nsZ28OV3Y\ndiHn2JjOnTsH+6mnnorGcXzAm2++GWyOZwNWT1Gv7fiAeG1yHMG7774bjeM1zd3UAcXkAPl1cMIJ\nJwTbxmdwnF0qxs6+ZvuQQw6JxikmJ4Yrd3N8Wy6exsbBpeJmbJp/CvtZ/Jo/114bHCPJx2CvDY6f\nGzBgQEXHVBfkyRFCCCFEIdFDjhBCCCEKieSqCjnmmGOCbdNo58yZE2wrZXFqrq0Cy1STfMLu7VRz\nTSCWSVgufOGFF6Jx3OyPXaJW4mC3aqUu2yLTq1evYLOEZNM5OU2c04WB+Jxy9WNbETfV7JHLKgCx\n3MtzxCnLQLyucqmtvI8dd9wRonI4zdtWCGe5gtP7ly5dGo1LyRVdu3att+MsIlxagdPw7fXNcrEN\nC0iVJcmVDeCyG7YRMr+P32MbiLI0zdKVLenB63bbbbet9VjrA3lyhBBCCFFI9JAjhBBCiEKihxwh\nhBBCFBLF5BC5OA1uz2DbFEyZMiXYNiYn1Um7mjsic8ovnxPbToA1XI7J4Y7ZAPD4448Hm89jbj6X\nL1++BkdcTDiuZdasWcHm1HIgjpWyKd+pbsT2euaYH04Tnz17djSO57xly5bBbtWqVTQuNbe2rQOv\ns4YsHV9EOD7KxstxPEWlpRn4PbZMgUjDqeEc4wLE5z6XXl7p70uurUMqbdzG5HDsVa59zrr6zZMn\nRwghhBCFRA85QgghhCgkVS9XpdLiLLvsskuwX3755Wgbp1dalyG73FkGsF2VOQ29CHBat01FZFmD\nz5dNj1y4cGGwv//97wf7oYceisZxxelUxVyLTXWtBmy69mabbRZslols1eCOHTsG20qKqWrD3HHa\nbuPPtWuOXd/s9uZO6EA8f+zOt9caS8s2rV2sTv/+/YPN85Qrx1DpPZTliVy5CL53VAt1lVJzvz38\n2kpPqXE8L1aGSu3DzjnvL3dt5K6VYcOGBXvixInJcZUgT44QQgghCokecoQQQghRSAolV6Wi/HNu\nMY7+thUZOYuHs0rGjx8fjVu0aFGwrZTF+586dWqwR48eHY175plnksfYHMllL3HWBs8Zu8eBWOqz\nFW9TcNaNzbThStW2kWo1YKuK8vXOEoGVdfjcz5s3L9rWs2fPYHPmRy7Lic+9zb5o06ZNrcdnK+7y\nOJZBclKHzUzhDB/O/qpmeD432mijYNvminxPzclQ/JqvCStNsxxZjXIVh0MAsczK59CeG54XK3lx\nhf1cNlSlc8nYfaRINesE8tmv3ExXcpUQQgghRC3oIUcIIYQQhUQPOUIIIYQoJE0mJqdSja/Sipq8\nP7tv1gJtHA7D+vSll14a7MmTJ0fjuFrs0UcfHW1bvHhxsPfdd99g21gEToMtAty5unPnztE2Piec\ngmxjcl599dVgc2Vcq+VyOj7HRNmKmnzOed/Vgi1bwORSPbnzuI2N4bgpjlvj+CcgXpvbbbddsF96\n6aXkMXFMgI2hSsX/2DRXvgbsGuNOz4rJKcGd6Xm92PsVXy88FzbuKVWB3KY7V3t6v71HcikM/o3i\n+E8gXqu2Ejy/rz4qI6dS0m2sDR8Tv8f+Dud+e3faaafktjVFnhwhhBBCFBI95AghhBCikDQZuSpX\nkbEh98du9Z/+9KfRtqeffjrYXJHYpvFdfPHFwebUViCWstgVaN2/nK5ZBF588cVgDx8+PNrGacjs\n3rbuTNsItYZcOjnPe871ysdXLdiU0JS72Lqz+dq3pQG4kjFvs2tkxYoVweZr3R4Dy40skw0YMCAa\nx3PLqbI21Znd/lbmtE0/BdCvX79g51J8eZuVK1LkQhJYtq5GbHkHhquHL1myJNpmZWGG54jXvv1t\nTFU8zs1rSpIC4rnke4eVMrlBsKVdu3bJbWuKPDlCCCGEKCR6yBFCCCFEIWkychXLN9atWd+ZRxyF\nzo0fn3/++Wgcuwm/+c1vBpsrpQLAE088Eeybb7452sZZA+yaz0WkF4Hnnnsu2FYmYbclZ+tY9yXL\nEIyVTFKVOW22Frtpc5H9RYXlHyBeV1Y+ZVgCsueNM6rYTZ2bI86GsjJtqtKrvSfwMbG73DaSzDUD\nzbn6qxXO8slJUvw6J0NV2qzRXpvVRu/evaPXqdAGW3Gcf1+sDMXnmOfIypCpZqsW3h/Pv90fr2mW\nrW3zZG78a0MLbEPetUGeHCGEEEIUEj3kCCGEEKKQ6CFHCCGEEIWk0WJyjj/++Og1p2936NAh2pbq\nMmz1d47vYNvG9Dz88MPBnjBhQrBHjBgRjdtjjz2CfdVVVwX7sMMOi8Zx2qutKsvaJWuV9tiLpknP\nnz8/2Pa7so7Mc2O1/bfffrvWfdtYHT7HXIGXbUBVbe21mYp1s/EXfN3aNFC+bjlOZtNNN43GsW6f\nq77KcVmcnv6Pf/wjGte+fftg8/ewc87xDLZas1LIV6fSc5KK16lr/KS9XqqN7bffPnrNsWl8v7Sd\nxrlqt73P8jnNlVThWJtU2rkdx9j7Nq9pjr+z9w4eZ2P9bNzr2iBPjhBCCCEKiR5yhBBCCFFIGlyu\n4rSxU089NdjccBGIU7kHDRoUbePqh+wety4tdpuym4ylEwCYMWNGsL/3ve8F28oZAwcODDa77Pk9\nQOxW588FYpcfy27WxVdp1dDmiHVTprbZFENbNbeGhQsXRq9TacK2+m01po0zVhJgFza7qe04Po92\nLnkb29bVzdc3u6lt6mhqjbA8BcTlHVgiscfHr62UkrsuqxWW+1jesyUG+Hrhe6NNJ+Z552siN64a\nsQ1KU/cq29CWm92ydAXE8hWvJXuuUw2r7RrmffB91kph/JqvJ/ubx/uw94H6lC/lyRFCCCFEIdFD\njhBCCCEKSZ3lKnY95SomnnPOOcFeunRpsLlhHxBXP7RVHVnaYhearZaaco1aGYpdaNOnTw82y2kW\nzryy2T0sUdkqu+zm5WwhG6luI+OLRE6aY7eknU++XhgrdQ4bNizY7PbNVfGtRqxLPJUhw1IQEM+L\ndU1zFgiPy1XBZez9IvU+O46Pg9efnfNc5k+1N4WsDZ57vl9ZiYPPP8vM9vpINUi14+x9s9rInV/G\nNvLk8A0rcaWqF9vfHl5zvIbt+/l9bFtZi3/LuIK2heXthpQr5ckRQgghRCHRQ44QQgghCokecoQQ\nQghRSLJBC7musawZtmnTJtgHH3xwNI5jb1iT5TgKIE4btynfrOvycdjYAU555OOzHZEHDBgQbFvl\nOAVXYrXxM7luyanO41bHtCl0RcJ+Vz6XHN9kdWhOzWeefPLJ6PXgwYODnYsFqTROpKjYtEy+5jgm\nwqap8nmzc8nXN98v7FxWen3z+ub92bnj+Bq+r9g4glxVVcXkrE6qW3Uu1omxqeG8v9z6q/a5yFUX\n5mv9oIMOisbx+V65cmW0jecoVa0YiNdILjYm1Xnc7jsVB2evDY6Ntdvs+VgbqvuuL4QQQojCoocc\nIYQQQhSSrFyVc3ExXJHYpmvPmjUr2NyEjCUuAHj++eeT+2fJi6vg2oaDLCM99dRTwT700EOjcaec\nckrys1JwZUmbQs7feZtttom2sRuOU+ZsOm81VV+ttEouXyOcTm7TTflc5hrR5bZVA7mqtVtvvXWw\nJ0+eHI3jNFArO7FrOpeyX6mrOyVrWRkq1QyUvweQltOA+nWJN1esTJSSK6zUlJK17DlOVbq246q9\nQWfuWuQSCTZUItfsNlXmxcLbUuEV9hhT6em5z8qlrtv31GdogTw5QgghhCgkesgRQgghRCGpuCQs\nS1JALBH0798/2Jw5AwC77757sNmtmctCsllTPJYlqrlz50bjFi9eHOxRo0YlP2vatGlYUzp06BBs\n61LPSU3souPvb5tRFrnisSWVBWcbatrroIYdd9wxes3nlaP5rSu+2rOrcnISX492XbHMnMue4Ws9\nV+U6JXUAaTd4bn+cVWL317Vr12Dbhq/V3rAVAHr06FGn91UqhaTkKitdWPm+2sjdm1IV4oHVq3gz\nuey41P75tyxX8ZjnPBfWwmvM/k6y/MWV0+0xrS3VfdcXQgghRGHRQ44QQgghCokecoQQQghRSLIx\nOazX2kqLzzzzTLDbtm0bbNtJesGCBcHmeBqr4/JrW7mR9UrWIK3Gx/FAfEy33HILUqRSWy2ctmxT\nyPk753R+jhGxXdgXLlyYfF9zx54TPl8ch2NTw994441a92djdyqNybExGdVGrhow6+O2DETu2q9L\ntdRKS1Ok4niA+Bri68Rq+3369Enuv9pjtACge/fu0Wu+D+cqWDO5eeLrisfZe0K1dyG355fPFdtT\np06NxnE8rD2nfF/MlW1Ircdcl4Pcuk9ts50Mdtlll1rfAyiFXAghhBDic9FDjhBCCCEKSVauYtf/\ntttuG21LNZu0FUf5fezusm5lfm3dXyxPcFMvmxbHjQVHjx4dbOviYyqtgstS28svv5w8Pq6MbLex\nS85KY/Z8FIklS5ZEr1lGYgnJnpOUXDVp0qTo9Ze+9KVg8zVh5Sp7HNWGLX2QSv+2KeR8TnNu9Uor\nCPNnWRd7ynVu3dd8rbB0xeUJgDjlttolkdqwFdr5/PE5r7Rshp2nVNq4nedqb9CZg6/vmTNnRtu4\n0bWVmfmc8nzZ39dUOnhuLnMp5Lym+ff6hhtuiMaxXNWQ0rE8OUIIIYQoJHrIEUIIIUQh0UOOEEII\nIQpJNiZn3rx5wZ4xY0a07bXXXgs2x6HkdDxOm7Zp4qwZ2hRhfs37t60ReBvHBuViMXIl5hn+jtzh\nHIi7ZdtjZy2b9287qBcZmzrYrVu3YLNubNPobXxFDd776DXH9bAGbGNEipymXwlz5syJXnfp0iXY\nfK5sixE+pzYNn/X9VAdxIB3/Y2M7UjE5tjQFryWO+5syZUo0ju859np49dVXk8dbLXTq1Cl6zbEW\nfL5s/CPf13lu7f2f38fxUXaec61xqoFcuxReVyeddFI07tvf/naw7Tnk9jf8+2XjZiuNg+Nxy5Yt\nC/by5cujcXy8PM6Wnzj11FNr/Vy7j7VFnhwhhBBCFBI95AghhBCikFTchdxW6P3a174W7MmTJwfb\nprix65urj9qusyzz2M64qYqrnDIOAEOHDg02V2TOkau+ysfILjkro3D3c+sS5/1zFeZK022LgO2c\ny3C6YaWdiK2cwtcHyyc23Tklf1ULdm2OHTs22Ly+2cUM5KuC8/X97rvvJj+bXek8L9YtnarSal3x\nvI1la+sS5/uKTZ195ZVXksdbLYwZMyZ6zfclvufZ8ILWrVsHO1UmA4jnetGiRcG2JUm4cm81YmVg\n/q3gazpXasR2JOdSJ7bsSVOA1x+HfACrS2Brgzw5QgghhCgkesgRQgghRCGpWK6aMGFC9JozM1gu\nsBlP7EJjdzk30wRit7WtUMxu5pEjRwbbNg1lV+tXv/rV1b9EmUobz7ELkatJjho1KhrXqlWrYFu3\nOr/m71xNrnKbGdOuXbtgsyu2UrnKzlmqsqeVBHPZc9WArW7LkgNjzy+vdetW5wyMrl27Jj87Jc9a\nFztLH3wcNruH55ylFM76BOJ7k5VS+Hs9/vjjyWMvMt/4xjei12eeeWawO3bsGGwbrsChASwDs8wC\nxNlbF154Ya3/DgAPP/zwGhx18bBrLhUqkcPKsbxm+NrPNeplbChH6nfTVi3ncbksKd7/FltsEW2r\nz8xHeXKEEEIIUUj0kCOEEEKIQqKHHCGEEEIUkopjcmxa6QUXXBBsrmBrO/0654LNlRbtOI5r2Xnn\nnaNtHAcwe/bsYNvYndtvvz39BdaS448/PtjHHXdctI27ZdtUS47l4RRKez6LzD333JPcxnp+XXX5\nBQsWBJtTEa2WbdOLq42HHnooet27d+9gc/q3vTa50zGvdSAuD8DxOTY+IFXxOFchl7X9jz76KBrH\n64y/lx339NNPB9um3z722GOodmwl+6OOOirY7du3D/bee+8djePzOmLEiGDbqtpcnZzvA7ZjdrVz\nxhlnRK+HDx8e7LfffruifdiYw6Yeg3j11VcH25aNuf/+++vtc+TJEUIIIUQh0UOOEEIIIQpJi1zF\nXyGEEEKI5oo8OUIIIYQoJHrIEUIIIUQh0UOOEEIIIQpJxSnk6xrn3H4AfgbgUwCbAZgL4DjvfZ3z\ngJ1z6wP42Htfex3r0phvABjjvf+fun6OKOGcOw/AIAAbA9gFwKTypqu999c32oGJNcY51xmAx6o5\n3ADAfADfS61J59wEAOcA+ATAOd77YbWNE02DxBw/BuBs7/37qfeJpo9zrgOA8wH0BVBTk+Us7/34\nOuzrqwD+5r1P90RqQjTJhxzn3IYA/h+APt77ReV/+x2AbwO4MPde0XTw3p8GhJvnRO/9no16QGJt\neZPn0Dl3PoBfAPhRox2RqG/CHDvnNkbpfnsjgC815kGJuuOcawHgDgDX1fzx7pzrC+AB59xQ7/2c\n7A5W55cAbgagh5y1YBOUvDehYqD3/icA4Jw7BMBpAD5E6fi/7r2fV/6rcTyAPQD0ADDOe3+DK1Uj\n/H8A3gcQqs0559oBuL68j1YA/uC9v67hv5pwzp0FoAuAHQD8L0p/WVyOkny6PoCfeu8nOueuQenh\n6Kry+z5D6a/L4QB+i9KcbgzgFO/9FOfcKADjALQA8DGAY733c51z8wD8HcCO3vsvr6OvWQ08CuC4\n8vkd472f7ZzbExmvjXOuB8xcA1gB4DbvvSuP6QRgMoDtARwG4GSU5vRNAN/x3i9zzq0EcDWA9bz3\npzTYN6xivPcfOudOBTDLOfc9AHsBaA3gIgBPoDSPbVG6f17ovb+xvAajtQngWQBXAXAAPgPwrPf+\nxHX9faqY0QA+897/qeYfvPfTnXM9Aax0zl0CYABKc/OQ9/4M59wXUJrfnQBsBOBJ7/0pzrlfAugG\n4EHn3CHe+8q6hzYiTTImx3v/Nko/VtOcc+Odc6e7VaWTtwRwpPd+FIB/ATiJ3trSe78/Sh6f08r/\nNg7AX7z3IwE8T2O3BfBH7/1eAA5EaeGKdUcXAKO8988AuATAZeW/IE8A8HkPm6cCuKh8DXwDQAfn\n3KYoLcpDy3N9CYAL6D2z9IBTfzjn1gNwKEpyxpqw2lx7718E8IFzrl95zBEAbkJpjZ6O0gPUMAAT\nAPy8PKYlgH/pAadh8d5/DOBpAJsD6A9gf+/9PSjJkPeV758jAJztnGuLWtYmShLJYO/9EO/9Hijd\n11ut/mmigegNYIr9R+/9CpTWWhcAQ1Gax7HOuZEoPcw+770f4b0fXP73Pt77ceW3j24ODzhA0/Xk\nwHv/O+fcVQDGAhgF4Enn3M9QigO4tvyk2R6r9GOgdBNEecxWZbsvgHPLNte1XwjgNOfcaSjF/WwN\nsS6Z7L2vKdI0GMCRQPgLYwvnXJv0W3EjgN845wYBuNN7f1fZ7gDgtvLz8Hoo/WVSwxP1/g2qj7Zl\njylQ+gPpMQAXo/SwUimpub4BwOEo/SFyJID/396ZxktVXGv/Ic7zhBERUJBQqEQRFTVBVFSc8rsa\no3G4GnMTx7waNSYxMXE2E7kOcUg0icZocrmaOFw1KlFQIypBURJFKQVEQBARcJ6H98PuUzy16Cr6\nNN1n2Of5fzmre1fvrt61a+991rPWquMA7IxiTMdUxnQVFLF5QOHZeXh5foyomXVQXCOf8N63rJux\nO4AdnHNHV15/iOJmWW1urgrgVefcXQDuAHBT5R9Z0TZ8jOJ6WI0dAdxXuRZ/7Jx7CMAOAMYD6O2c\nexTA+yjmYe6a3GHpsA85zrnVvfcLUfxHN9o59xcAlwHoBWCI9/5559xJALanj31Edjf626Id8kBf\niOK/+8Odc2tiSTCWaBs+INtWpOxWeS+8X4nTAgB47290zo1B8QB8tnNuIgo5alYm7ueDxPuidhZU\nO74VGbGFle12Q2qsRwO4xzn3BwCreu8nO+c2BTDRe/+lxL40pk2m4iEdjGJ8+Hi/jyLo/HHzkYl2\nbnrvzwSwi3NuCAqv+WOVWJB5EG3BUwCOsW9W4nJS8/EwFA87u3jvP3LO2XHuNHRIuco5tzeAR51z\na9Hb/QDMQ/HAMrPy38EBKP67y/EMiv8IAWBPen8jAFMq9hEAPnHOLWtfojlMALA3ADjntgWwsPKA\n+waA3pU2e6AyhFMrUwAAIABJREFUISu68Are+5sAnIJifJ8D0N05N6jSZrhz7rg2/RVdFx6nEcto\nW3WsvfdzALwK4HsoYuiAwsU+1DnXo9L+EOfcAY3uvKiOc24lFP9Y3oulg0zHo5A64JxbzTn3a+fc\nitXmpnNue+fc0d77J7z35wOYhCJuUrQB3vsHAbzpnPtBy3vOua0A3A7gZQB7Oee6VbKPd0UxRzcq\nPuo/cs5thyIOp+X+2BIb2SnokJ4c7/2YSoDiWOfcOyieLucD+E8AZ6O4+L2IIiXuBudcLtbifADX\nV9o8jCXenisAXO6cOwbAtQDGonC13tGEnyTynAzgKufcCSgmz1GV968FcJNzbjiAvwNocXE/jyIz\nYDEK79w53vt3nXNHArjGOfdepZ0ectqGi1Ac9+ewbAkpNdZAIVldieIfGnjv5zrnTgFwZ+U68A6A\noyGaSYskuQKKuIy/o4h7PMy0OxfA751z41Hc/H5buSEuNTcBTAdwjnPueBQJI9MhqbGt2R/Axc65\npwEsRDEOh6KIt+qJ4qF1BQC3ee8fds7NAnCHc+5BFGP13wAuc87tBOAeAI875/6jjsysNkdrVwkh\nhBCilHRIuUoIIYQQYnnRQ44QQgghSokecoQQQghRSvSQI4QQQohSooccIYQQQpQSPeQIIYQQopRk\n6+R069atXfLLBw4cGL0+88wzgz1lypRgjx07Nmr34YcfBnuNNcLanujfv3/U7thjjw32LbfcEuzL\nLrssavfxxx+3ptsN49NPP+227Fatp73Gs14233zzYG+88cbB/uijj6J2EyZMCHa3bulDx9s++aTt\nFtBtxnjmxpJ/Z65ExAorLCkA3l7nekeh1mOmuVku2nputhcrr7ykEPkHHzS2UPgqq8Q1dN9///1E\ny+aSGkt5coQQQghRSrLFABv9RLrOOksWnj3rrLOibXvvvXewe/ToEW177733gt2rV69gz5sXL33y\nwgsvBHvIkCHBXnXVVaN2c+bMCfa7774b7LXXXjtq98orrwT7Zz/7WbBHjx6NZlK2/xatdyV1zllP\n2oorLnE0nnHGGcG+/PLLo3bz58+v2i7HZz6z5Pne9qfRBTI7w3+LPDf/8Ic/RNv222+/YLO3FAAW\nLlwYbJ5Lb731VtTu7bffDjb/p8djDAC9e/cOdt++fYNtzyH2Qt1zzz3B/slPfhK1Gz9+PFLU48kq\n29zs6nSGudmK741e8/ltvd/M4YcfHuxtt9022NZD88wzzwT76quvbnWfml14WJ4cIYQQQnQp9JAj\nhBBCiFKihxwhhBBClJKmx+Swxn7rrbcG2+p9rNnb6G/W+lnP32CDDaJ2rO9zHM9rr70WteMYnZVW\nWrJivNU0V1tttWB379492LfffnvU7jvf+Q4aSdl0fz7GQBzXcfTRSxaVtllwNm4rxfe///1gz5w5\nM9g33XRT1I41aj7vu2pMzrBhw4LNcWYcnwPE84fnFRAfU87gsBkWnO3I82z11VeP2nEsz9y5c4O9\n5pprRu34nOJYOhvjwxmYBx98MFIou6pr0lHnZj3Yc5/jcPbYY49gX3DBBVE7jrW57bbbkvs76KCD\ngr3LLrsE+9JLL43a/epXv6rav1zmayOuuYrJEUIIIUSXQg85QgghhCglTZerrr322mDvtNNOwbbp\n3ywNsQvcwlKWTWdNpQXb/bGr2+4jhZVcmJ133rmmfdRKGVziPBa5wnucNn7++edH21599dVg59J9\nWUr87ne/G+wf/OAHye9lV2wuvbIRdNRigLyNU8HZBmJ595133om2vfzyy1X3/cYbb0Sve/bsGWyW\nvOx3sVTGv6Nfv35RO/4cXzssXETysMMOi7bdfffdwebfaCU5pgxzUyyhs8tVuevYbrvtFuwbb7wx\n2N/+9rejdrytVo466qhgX3/99dE2vo6fc845Vftarb/Li+QqIYQQQnQp9JAjhBBCiFKSXbuqEXAU\nNmdJ2SrE7Jq2cgS/Zhe7lZBSEol12bObjL+XP2+38T422mijqN0222wT7H/9618Q+Uj6TTbZJNiL\nFi0K9uuvv578TK4iLcta66+/frAPOOCAqN3//d//1dS/zg6fx3zc9t1336gdV/5meYnlPyCet5wl\nBQCf/exng80ZUPb4sjzNWZHrrrtu1I6rnbNsZGVllqH4HLJznbO8Ro0aFW1juSonUQnRUbD3qJzk\nc+WVVwabM01z8pTdP8P31BtuuCHY9nrxy1/+MtiPPPJIsMeMGRO1a6uQAXlyhBBCCFFK9JAjhBBC\niFKihxwhhBBClJKmx+RwNVLWvW3FY9bcbcXjVEq51d9TcRu5FGbet23HcUO8zabCfe5znwu2YnIK\ncqnLG264YbD5nFhrrbWidhxrUWtaNFfnHTBgQLJdmWNyUseHU0qBOB6G5589v1mnt8eNqxzzvLUx\nLnwd4P3Z2DyueDx79uxg9+nTJ2rHqewcM2SroHNMzmabbYZasL+x2asnC1ErNg6Vz29O6wbi2Mfz\nzjuvpn2m4lWBdBmPSy65JGr3jW98o6ptY3KaXbqjBXlyhBBCCFFK9JAjhBBCiFLSdLmKF+BjycdK\nUOz+smlsKRnK7iOVQl5rO+sKZHcdu/Bt/wYOHFi1f12ZXMXjrbbaKtgsV3D6NxDLVam0aAvLGFb+\nYlhaKZs8kZJnt9566+h1ahFbXix3Wftm6ZFT+S08f1gas8eexzlVagCIzxXet53r/F120VCet1On\nTk32qbOfD10Rlibt9YJl0PYkdX8B0pX47TnMHHHEEdHrZ599Nti5uZn6rnrP+1tuuSXYxx57bF37\n4GPD9+VceZkU8uQIIYQQopToIUcIIYQQpaTpclWtEhK766xLnF1X7Fqz+0i513JyFWeH2Ha8WCBH\nglv33uabb171e7syucqZnNXDFXNzMgmPrd03ny8sV2255ZZ19bUWF2hnxMqqfNy4aqmVazh7yR4b\nzobizCabXcUVlVmizFVw5WsCz0UgPldYurJzmH+jzejkBYNZrsqdX2JpcpmPI0eODDZXqZ4+fXrU\njuVSHiceIyCWa/r37x9tY+mUpVkeW2DpLKS2JHU/rHWhaAsfK5Z3gdplOe4T78+e9yzx56SsW2+9\nNdi8SLIdywkTJiT3wfu32datRZ4cIYQQQpQSPeQIIYQQopToIUcIIYQQpaThMTk2FY5TyFn7s9VH\nFyxYEGy7GjVrvjn9l+MFWJu3feKUNN7G8QVAnILMMQA2LsGuSi7yGjNv22GHHYLN50COXNzF/Pnz\ng33wwQfXtL+uEnNhVwvm+Aaec6uttlrULlcNmY/dwoULg73eeusl98Hz6s0334zacWVknmccawXE\ncV2s2dux5BgDG/M1dOjQYF933XXBbqtKrGUhd00ePHhwsHmu2znMY8hjNmjQoKjd3Llzg22rYP/z\nn/8M9iuvvBJsjvdpa2x8W+pac/rpp0ev+dzkivp2/nGsGsfOAXGMEsfn2PtXrqRDqu+5Kugvv/xy\nsGfMmBHs3/3ud1E7TnG39945c+YEe9y4ccF+4IEHkv1LIU+OEEIIIUqJHnKEEEIIUUoaLlfZNM1U\nSqhNMWX3lHV1s1udXWbWNcouNN5mXYT8OpdiyottcpVe6zrPVdYtG+xmzrmpeSysdMVp4yxP5GQC\n3l+uOijLo7aCdYqc/GV/V2eufrvmmmtGrxcvXhxsHhN2cwPArFmzgm1d3SwxcoqwhecWS012bq6x\nxhrB5nG1ad2cNs4Shu0Dp67b82bEiBHJ/oraycm9o0aNasOeLGGfffYJ9hVXXNEufQCWvqfwfW/Y\nsGHB/slPfhK1S0n3LAkD8fnN11IgHheWjew8SF13rQyVqkJsF9lNLahtF8/lEgD22sS/5Ywzzgj2\nPffcE7U74IADqn4XI0+OEEIIIUqJHnKEEEIIUUr0kCOEEEKIUtL0FHLW+3gJBQtrkDYmp9YU31Ss\njYXjKnL9e/7554PN+qmNyeE4grJT65IHuXbbbrttsDmNMAePUy52h+OjOM6r1n2XjU033TTYVufn\necCpqP/4xz+idpzey2MHxLEyfOztuHLJCI4rmDdvXtSOdX/W+nNxcCeeeGKwb7755qgdz02bYmtT\n6kV95NKOOT6j0fMst1r8fvvtF+z2XHYnt2o4l7iw5Q0WLVoUbL6W2iUOuHyJjUFMlV6xcUKp8csd\nX96WisGx32Xvr/ybbVwrl7Tg38xlCGpFnhwhhBBClBI95AghhBCilDRcrrJuJ3ZxsZRl091SrjAg\ndofl2qVSTnOrCvM2607lFHJ2nds0YiuvdRVY4rBjwa5TK5NwuiAfV+tu5dd8jK0kylJGjx49gm3P\nxT322CPY7ALmzwDx6uX3339/tM2+7uj07ds32Pa4pVzY5513XtTuy1/+crD32muvaBunsHJKuk1D\nT825nj17Ru34fOD5mCsH8OSTTwb70UcfjbbtvffeweZKrPa7+BpT1lXom0WurMLySlQ5ySQHn/d8\nHW9r7L2Hzy0u22DhdrnK33wNtqU6WKrla7DtE18XctITz2FulysDwd9lpTue+7ZP3JZ/s63GbtPX\nqyFPjhBCCCFKiR5yhBBCCFFKGi5X2UXToi8jt5h1Q3KktY3+ZtdVTq5ilxe706wrLOWmZ9c7EFeJ\nZKw727rmy8wPf/jDYPOici+99FLUjrNprEzALmzOeBk7dmzUjrNfWOKyC7jy+ZGrxHnuuecGmxe9\ns+POmQ02A6ezyVVbbLFFsO08SGF/42GHHRZse+zZfczjbOXoVDXy3GKgvGgfV0m28AKM9957b7SN\ns2zs72dXP58PU6dOTX6XaFtyldRzGbR2AWim1krojSDXR55LViZKLSJtr0e8wC3LxUB8fnO1YXvf\n5Otx7v6aysKyx5Ovu3x9t9dZlrXsOPM++X7bq1evqJ3NNquGPDlCCCGEKCV6yBFCCCFEKdFDjhBC\nCCFKScNjcjh1D0indb/66qtRu+nTpwd71113jbaxrsdaXU7vzMUfpNLkbEVGu+JrC1abZO3TroJs\nK7p2djjm4dRTTw22TW3kqrlWbx04cGCwOSbK7oOPP+u5tnIta9Y2nouZOXNmsDmGyMZ7sLZ9/fXX\nJ/fXGXDOBdummNqU8hQco8TnOgC88MILweYV4NkG4vgDnmd2DvP85liBV155JWrXu3fvqn0dPXp0\n9PqSSy6p2s72g6vidtaYnFTMRK1p150Bnt/2OnDooYcGm9OT58+fH7XLxXc1mtyx52tQrmwKzyUb\n68ap4blYI55ndt7zPEhVSQbie2quyjXH0PDvqPV6A8THLVV+AqgtvkqeHCGEEEKUEj3kCCGEEKKU\nNFyushVM2eXMacC8+CUAPP3008G2qb/srsq5yVLuNOsSTy3kaaUO7lMOTmHmVFSgfHIVu345Zdim\nbG6yySbBHjNmTLSNKxFvs802wbbVUfm7WCaxlYz5fPnzn/8cbK5wDMSVjTk9+cUXX4zaDRgwINjv\nvfceOjNbbbVVsO3csZJSitxCliyBcTsr9bJEwGmvtk+cEtq/f/9gP/fcc8k+8CKFVppgbLo6z/1+\n/folP9dRyV0LyyRRMVaiYk455ZRg5xbGzJU5aUu4vANfj4C4pApft2yaOGMr7/NcqrV8RO68yclG\nDMtVLIVZuYrH0oaQpPpRz3ktT44QQgghSokecoQQQghRShouV7EkBcQSBLuLrTubsyesbJSSnqzL\nLJU1Zd26KfnLymSpaoo2opvb2eyTssEZAfy77bHncbduSnar8ljYStK8j4kTJwbbuqw5c+fZZ58N\n9k477RS1Y8mE5Q+7qCPLJLNmzUJnZtNNNw22lW05U2P8+PHJfbC7nDOt7DZ2Jdsq4DxmPEdsn/hc\n4YzL3GKGvKBqa+Qqvn5st912yc+1BXwdqtUl39kkqVTVa0uuIjafR/a6whl3LKPa67XNgG0vjjji\niGDPmTMn2sbziq+zLGMBcdVge/3MhWIwKdkzt1JAbiz5u3IV6HlbTl7M9TUnpYe+1rRnIYQQQohO\nhh5yhBBCCFFK9JAjhBBCiFLS8Jgcq5OyTsj66rRp06J2nBpnU1t5H6zjWS2QYzhYM8zF7qRS3C2s\n9VuNl3XC1lR17Iywzstaca5y7Y477pjcH8d4zJ49O9rGeivH8djKvc8880yw99lnn2DbFbO5JAD3\nb/jw4VG7ESNGVO1fZ4TjD2zVYI6bueuuu5L74JgXWy2WK65yuqgdIz6OnMJrU2K5PABr+LlU8733\n3jvYdgX1f//731V/BxCvXp6rnt4W8DUqF/PH/bRxSldddVWwOT7Fnt8c12KPa61xPtxfvp7mrsn1\nHONcyrgdaz43OcaFq1kD7VvR+uCDDw52LsWb5xLHr9oYJT7eubgWvi/l0r9zZQmYWleD599oy3Hw\neWNjhvj6kVtp/Bvf+May+7rMFkIIIYQQnRA95AghhBCilDRcW7GLLKbcn3Pnzo1es1vdpsLVSmpx\nMdsHfs2usFya6rhx44LN7nEgdtfZRT7LBh9XrtLJC2gC8bG0afUsI7Ebdf3114/acbokb7PlB3bZ\nZZdgs3xiv5dlEk41t1WqUwuzdkZYgrVzjqWAyZMnJ/fB1YDtsWH3Ocs/VtbilFhenNfOF55LLHXY\nawLP4S9+8YvJvnPJAzvO7D63kk5bw7+v1uuflR95XrEkYxd1zElAtaayp6rG10uvXr2q2haew/Z6\nzb+Z+87nALB0qERb8tOf/jTYuRIcPJdS5ReAvLyUW2yz1n2kqHXMed+pEi/V9sfHhq85tjL5E088\nscw+yJMjhBBCiFKihxwhhBBClJKmy1UpF5WNjN95552Dbas6ptxp1p2aWqDTtmN3cCojC4gltDvu\nuCPYhx9+eNTuhRdeSO6jbPCxZPc4HwMgXqAzV9XWZpIw7GafOXNmsK0UwplvvECsXfCT98eLiw4Z\nMiRq19kzqlLVTW1mBr+2i6imsPOb5xK70u2xZzhrzmaEsATK42UzM9idn8veY1lyr732irZxH3MV\nYduC008/PdhcxRYAHnnkkWBzJqGVH7mKN1e6Pumkk6J2Z511VrDrrZrMx4ulvn333TdqxwvE8rjb\nOczZNJxda6vk8vnCC70C8fnC/bNZm20JLx4LxJIpS+v2d7IUyWNkr6X8O63Mmbr32ntUrdLT8t7b\ncveBXFZybm7WEh5S7juyEEIIIbosesgRQgghRCnRQ44QQgghSknDY3Ksdp6Kp+FVpQHga1/7WrCt\n7p9a/dTCmh/rmLYPqT7ZWKCRI0cG+957701+L3+X1VbLDMfT2DgWjq2wcRepqtX2+HOl0hkzZgSb\n43OAeLXqwYMHB3vQoEFRO47B4FRUG6ti0+E7G6lzMFc5lOcOH5tcO6D2eLkUVovnvvM+bDVy7kcu\nrourXNvvYq2/vVemnjBhQrC/9a1vRds4BpBjbe65556o3TbbbBPsXNo/H0tO5wfieCAu29C/f/+o\nHZ8jfFw5LggAnnzyyWDzHLapv48//niwjz/++GBfcMEFUTtOp7aV8Rm+T3AV7bbmmGOOiV6n5qCN\nL0rFydhzPXc/TFWitnM2Vb241srI9VTJtt9lnxtyFcCZXLmBsK+aeieEEEII0cnQQ44QQgghSknD\n5Srrukqlf9kUU3avWpdePalrOYkrtXindZnttNNOwf7jH/9Y0/eWfYFOhlMW7bjnqnmylJWT97jd\ngAEDgs3pwwCwwQYbBJvH3Z5j7B7lCrx2zJ5//vlknzoDBx54YLD5GNZa2fSwww5LbrPyBss8LEva\ndFY+9lxuwFat5XNl3rx5weYFJ4Gl52oL9npjz5XUNv4dNtU8J1U3iocffriqbeHj07dv32gby0vb\nbbddsG2VWE755nkAAJMmTQo2l2bgVHwAOPfcc4M9fvz4ZH/rgVPNeRFZID7HclIFj229afKNYOjQ\nodFr7gvbVq5KLXabk3zsdZbnIH+uESsK1PJ+vfsDapfNahlbeXKEEEIIUUr0kCOEEEKIUtJwbcW6\nwthtaCt5MuxqtZk6qQU1LamIdOvu4v2xVGHdxLaKbwqO/s4tQlY2eOE7W9mTpQaufmzh8bQLCfI2\ntnOVe1988cVgz5o1K2rHGSJjx45N9u9f//pXsr+dAXbj87lf6+Kx22+/fXKbzZTj8z2V3QjEc5/P\nlcWLF0fteCx5XHILgzK77bZb9NpW1mU464ZluNw1pi2wbnw+lnx9zS00abNXOwKpivRA/Lsuuuii\nYD/22GNRO65UbuF9cvXt9qxgbiW1VLV3ezxS10V7L8uFZaQyoOw9KldROdWuXomK4e+yIQO8/5Q0\nDdRWqVyeHCGEEEKUEj3kCCGEEKKU6CFHCCGEEKWk6fnOrBPm0jl5Jeinnnoq2sZ6XU7XZXib1SBT\nFR45FRkA9tlnn2CPGjUq2JyWa7+rPatrtjUcs8Qp3kCc9mjTxFlHzY0Tx5CwHmzjODjeg1OBbUwV\njw2vBmyx519ngyvB8jHMpetzfICt/ssVoG1KL8cO8D5s/A+347gp51zUjqtZc5xeLk6FGTZsWPS6\n1nRZrgI8cODAaNuDDz5Y0z4aRXumPDeTWle75hiMv//9783qTpvw0EMPRa/5PsfxbbbcBc9Vvv/l\n4mlyqdY8D+x31UOjz9HcPM3FudZSqVyeHCGEEEKUEj3kCCGEEKKUNFyuyi2GaWUe5ne/+12wbSrx\neuutF2x2yeXkDZZLbAoav2bpwy4M6r2v2le7kCT3oyst0Dl16tRgH3HEEdG2119/Pdg8fkBc3ZPH\nyaYJs7zEKaE2fZgX7eP0ZCsdcgVXlrjs/mxV384Gn998rubc2Xze2irEuc+xy53HyF4HeO7z/J49\ne3ayH+zCtmNpK8S2YCsj8zlqYVmP+2srBAtRLxdffHH0mhdf5XPdLkDLcy4l7wP5iseplO9cSZVa\nJcVGy1U5OTp3/cktJhw+X3+3hBBCCCE6LnrIEUIIIUQp0UOOEEIIIUpJw2NyrKbH2tqMGTOSnzv+\n+OMb3ZWmYWN1eLmARqTndRa4JIAty80xGLYUO58TrEvb5RVSWrEt5c0xKPwZG8fBsTvcdxvfUety\nHh2VCy64oKrNMSjA0jFoLXDqNhAfKxvfxssmcMyTjavj+BqO47Fjyfo7t7PxfPxbOJZr8803j9p9\n/etfD/Y111wTbeNYMV4CJFdGXojWYJeWSS3lwPFsQPp6Z2Nh+H5j7728f459tMuW8LU7tzQLU+sS\nD7n91bPkDC8XBMTHM4U8OUIIIYQoJXrIEUIIIUQpabhcZVPh2NWWSwXrCNRaVdW+z7LIZptt1vB+\ndVQmTJgQbHaHArEL1FYoTrli7QrXVgJLteP98XfZ8eQ+8jjlpLYykZKnLN27d49esxxk5zC7vlm6\nsu7nlGvaus45DZY/Y9P8eWz5HLKVt5kFCxZkXwvRaOx84YreOZmHpXWWZnNylb2O8dziav48T+0+\n+FqaSyfnvueqFdebks6v+XphZT37W6rRsZ86hBBCCCHqRA85QgghhCglDZerrMuMK5ra7I6ORq1V\nHG3F48mTJwebM0y6Ek8++WT0eujQocG2GTQsPfTs2bOh/WD3qJVCFi1aFGweM5sRZ8e3s5Grbsqk\n3Mx33XVX9JpdwrbCKEtbXEXaHns+Bzhby14TWO5OVW4GYlmSF/xsjdSYkkPtcSnrgpmi+djzm2Vy\nlt15EVwgrtxeaxV9e96y9Dt9+vRgjxs3LmrXq1evYPO12UrE/Jr3bWW3lORsM6H42NhtLOvx77IL\ncnJWdmqFAnlyhBBCCFFK9JAjhBBCiFKihxwhhBBClJJuOb25W7duEqPbgU8//TSdW7gctOV4Dhw4\nMNgjR46MtnG8BsfD2FXIOYaGVzW3cRecGs2xG/yZ9qQZ46m52T6UYW6KJbT13Bw0aFBVe+utt47a\ncRV9jnmx8S+5VO4ePXoE+6ijjgo2x7CVidRYypMjhBBCiFKihxwhhBBClJKsXCWEEEII0VmRJ0cI\nIYQQpUQPOUIIIYQoJXrIEUIIIUQpafiyDsuDc24zAB7Ao5W3VgLwIoBvee9fS3zmAQAXAvgIwIXe\n+2HN76loJGbcPwWwJoCxAH7ovVfQWBvinBsFYCiAVQFsiyVz8Rrv/Q3L+OzXAezpvT/SvD8YwDe9\n9ydX+cx+ACZ47xdVXl8CYByAhQBe9t7PWL5fJJaFc25fAD8E8DGANQC8AOD41DW3xn2uCOBD730y\nRTt1vojm0FWvsx3qIafCAu/9bi0vnHO/BPBjAN9ttx6JtiCMe+UC+SyA/wUwOfch0Vi8998HwgVx\nPM/F5djnZABLPeBUOA3AiQBaiiLtDuAsAJcAuBGAHnKaiHNuZQB/AjDIez+v8t4vAHwTwEXt2TfR\nFLrcdbYjPuRY/gHgeOfcTBRP/dOcc7sh47Vxzg0AcBUKOW5FAD8AsBjALd57V2nTG8AEAH0AfAXF\nRbgbgAUAjvHeL3TOvQHgGgAreO+/3bRfKCzro/DizXfOfRnA9wG8h2Isj/Lez3TObQfgtwDeAnAX\ngPMArOm9/yixT9FAnHM/BzACwPsAXgJwdGXT2s65PwHYEoUX9iAAu6IyXyue18kovEQ3AdgFwJ+d\nc/8F4A0ArwHYC8AhAIY6504DMAdmPnvvxzvnrgPwLoB+ADYGcJ33/uIm//SysRoK701YXdV7fwYA\nZObeAwDuA/AFAAMAnOO9/7NzzqF4YHoHwP0t+3PObQTghso+1gHwK+/99c3/aWIZdInrbIeOyXHO\nrYDiIvlQKz96OYDfVJ5YTwRwvfd+CoB3nXMtpSW/CmA0gJ4AfoTiAWoYgAcAnFlpsyaAu/SA0yZs\n6Jx7wDn3DxT/Xfyu8p/lugAO9d7vjmKSnVRp/ysA53nvd0VxY1yl2k5F43HOrQfg/wHY2Xu/C4Bb\nALQsm7wVgOMAbAdgEIAhVXbxlvd+V+/9lQBeBvCf3vtnAOwN4F7v/a0oHoRO996PQ5X5TPvaxHu/\nN4DhAH6IdYVhAAAgAElEQVTsnNugsb+23HjvXwdwDoDJzrn7nHM/qjysAOm5BxQ3uv1QeHy+X3nv\nHADXVubkv6ltTwBXeO9HAPgSAD2Ith9d7jrbER9yWgbhART/DcxF4bpuDTsCuBcAvPdPofjvsjuA\nPwM4uNLmUBT/deyM4r/AMZXvPKzyGig8Ow/X/UtEa1jgvd/Nez8cxfHfwjl3EoD5AP7onHsQwNcB\ndK+0H4zigRQA/trGfe3SeO8XAxgD4EHn3OkAHvHez6psfsx7/05F438JxcXT8khi1yMB/L3K+6n5\njJb2lfiR5wB8ro6f1KXx3v8CwKYovNabAvinc+5EpOcesGTuvYjCIwAAnwcwvmKPo7ZzARzunBuP\nQhrRg2j70eWusx1RropiclpwznFg1MrL2IcNoupWeW80gHucc38AsKr3frJzblMAE733X0rs64PE\n+6JJeO8/cM79BcAJAIYBGOK9f74yGbevNPsMgE8q9sdVdiMaiHPuchQ3sde99wd47w92zg0EsD+K\nh52vVJpaN3a1wNOl5pRz7jMoJKxJVdqn5jMQ/6PWrUpbsQycc6t77xeiuD6Orsy9ywD0QvW5B8Tj\n3I3+tszJFWj7hQCe994f7pxbE8CbzfgdonV0letsR/TkpHgDQO+KPWIZbSegcH3DObctgIXe+4Xe\n+zkAXgXwPRReHAB4DIX236PS/hDn3AGN7rxoNcMBzEQxwWY651YFcACWuEunoogJAApJUzQR7/3J\nlf8AD3DO9XPOnea9n+q9vwiFXLVNnbv+BEVcwPYAnvTef2LeBxLzubJt98r76wHojyJ7RNSIc25v\nAI8659ait/sBmIf03EvxDArPOADsSe9vBGBKxT4CwCfOuU4ne5SU0l9nO6InJ8VFAK5xzj2HZUtI\nJwO4yjl3AooL5VG07c8ArkQxkeG9n+ucOwXAnc65d1AEzR0N0dZsWJELgcJTNwPA8ZXXj6Fwi/8S\nwA3OuUNQZNtd4ZybC+BvKP6D/wSiLZgDYFvn3EQU/5UvRhGQeHD2U9UZA+AOFIGpLFXdC+Bq59yp\nyM/nxc6521DM53OWJ+25K+K9H1NJ1Bhbuf51QyFd/CeAs1F97qU4H8D1lTYPY4m35woAlzvnjgFw\nLYq05f9BMe6ibely11mtXSU6Jc653QEs8t7/yzk3BMDolsw50TWoZFeN997/vr37IkQZKcN1tjN5\ncoRgPgTwe+fceyj+Izl+Ge2FEEK0jk5/nZUnRwghhBClpDMFHgshhBBC1IwecoQQQghRSvSQI4QQ\nQohSooccIYQQQpSSbHZVt27dljsquVu3JQVPP/OZJc9Un3wSp9p3pgDolVZaKXr94YcfJtvy72dy\nv/fTTz+t/qHlpBHjKVpPM8ZTY9k+aG6WizLPzRNPPDHY7777brDnzZsXteN78aJFi4Ldt2/fqN17\n770X7JkzZwb7o4/iIudTp06tr8PLSWos5ckRQgghRCnRQ44QQgghSknTiwGyXPPxx7Wt79WnT5/o\n9VNPPRXsm2++OdgXXnhh1G6LLbYI9uqrrx7s7t27R+023HDDYJ9yyinBPu6446J2/F1MTp6ydCYZ\nTgghROfEhlEce+yxwX7ttSWrnWy99dZRu7XXXjvYr7/+erBXWSVeXuztt98O9mWXXRbsl19+OWo3\nbdq0YFspqz2QJ0cIIYQQpUQPOUIIIYQoJXrIEUIIIUQpya5dVU8qHKeJA0unirdwzDHHRK8POOCA\nYK+zzjrRtoEDBwZ7tdVWC7bt+/vvv1/1e2279ddfP9j3339/sK0GybE7t912W7AvueSSqN2rr76K\nWuD4JKWQdx3KnKba1dDcLBdlmptDhgyJXv/1r38N9p133hnsHj16RO3WWGONYHO8KcfxAMDnPve5\nYD/99NPB/stf/hK1u++++1rT7YahFHIhhBBCdCn0kCOEEEKIUtKQFPJcJWPm3nvvDbZN6+Y0NJt2\n9uabbwZ7/vz5yX0wLA0tWLAg2jZ58uSq++vXr1/Ujn/Xl7/85WAfeOCBUbuvfe1rwZ40aVK0beWV\nVw72Bx98kOyvEEIIUS+777579Hr27NnBXmuttYJtU75ZhuI0dA7rAOL74c477xzsnj17Ru1eeOGF\nYE+fPr2mvjcTeXKEEEIIUUr0kCOEEEKIUtL0isdHH310sPfcc89ge++jdiwV2Synz372s8F+7rnn\ngs3uOCB2r22++ebBfuedd6J2b731VrBXXXXVYK+77rpRO64EyZHmdtHNK6+8Mtg77bRTtI0lqlpl\nPSGEEKI1WNmIF9R85ZVXatoH3zf580B8D+TsKr6fAsBGG20UbMlVQgghhBBNQg85QgghhCglesgR\nQgghRClpSExOLr7kW9/6VrAXL14cbF4lHIirLvKq40Ac1zJx4sRg77rrrlG7W2+9Ndhc1ZHTxAFg\nxx13rNpXTi0HgM022yzYvXv3Tu5vk002CfYee+wRbRs7dmywbSxPe3LaaadFr1lvXWGFFYJtV1yv\n5zesuGJ8mqWqPdt9cykBXsHetktVkuYVdS18ztrzt9Z4Ke4Tx40BcRqlECIPxyvmrjG5uZm6rvC1\nG1g6lrMs2NIrHFPDVfntKuQbbLBBsBctWhRsG6P67rvvBvuNN96oum9g6Zja9kaeHCGEEEKUEj3k\nCCGEEKKUND2FfM011ww2V1rkNDMgdkNylWAgXnhzwIABweb0bwDYbbfdgp2Tq9idxt/Fi38Ccdod\nu+4WLlwYteMU9ZNPPjnaxnIVyxvtAS84euqpp0bb2F3MchVXygRil3Ct0lVuMdJaabTUZxeSZXIu\ncf4cjyef5wDw4IMPLkfvmoOtiMrjMm3atGDbY/P2228Hmyui2n0wdrz4WPH5xbZtl5IrgVjCtpIq\nw/vIjSvPb+v2tymyXZHcODETJkyIXrNse/311wf77rvvjto1s6QGL/4MxCU/yoS9Bs2ZMyfYPB9Z\ndgLi0iss7dnznj/3+OOPB9vKVc65YPMC2O2FPDlCCCGEKCV6yBFCCCFEKalbrkpV7x05cmTUrk+f\nPsFm95mtQszu4sGDB0fbuC1nPFmXKUtgvCgnu8+A2MXObm9bMXLQoEHB5t+bc1/vv//+yW3tDffb\nHn8+DixJWGmuEaQyKXKyVq3t6umDdcXzNivd8HezrGGzBWutMFovtR4PdivbPqXOfc50BGqX73IZ\naywL8/llMzF4LNg9bhe35Yw9/v32msAZJnYb75+38eKDwNLXj85OTvpNnUu5c4wzC22owT777BPs\nbbfdNtgvvfRS1I7nEl+bZs6cGbVjOeWWW26JtnHWFEswd9xxR9SuEdePjog99jw3ee7bsIy//e1v\nwT7ssMOS++ewj1QlfyC/cHZ7IE+OEEIIIUqJHnKEEEIIUUr0kCOEEEKIUlJ3TE5K1zz00EOj16yp\ncprql770pagda+dTpkyJtnGlZE4b50rDQJzuzBqkrWTMui7HHzzzzDNRu6FDhwabdechQ4ZE7ThN\njlPcgTiGiI+F1cXbQifm77RxKBwbwRqrrVZcTyq3/W2p9G0bM5GKjan1WNnfWE/6u90Hx5pwf3nF\nemDpVOtGU+sx4HHlGDMgjtHi35KrAG3Tq2vtB8d28XfZmByOk+FjyFVZgbisRO7c4PPXnsscR8V9\nsvE/p5xyCspEPbFvubisww8/PNj2vOeq4xwLMn78+KidjRNJ9ZWv0RtvvHG0jeNwOD7FXv/Lio1z\n4pIhPG/t+c3z4MUXXwz2DjvsELXj+cP36169ekXtcuU52oOO1RshhBBCiAahhxwhhBBClJKGy1XD\nhw+PXnOV41zaWSqFGYhTw/l7rZts7ty5wWb3nJW12PXNcgS794ClK0hW6wMQu1p5oUsAOPDAA4N9\n6aWXBru95arconV8TGy/6ulnrSmrdt/NrILK5MYi9/tz8lezx5PHyMp8vHAtb7PnJveZZSMr6+Qq\nD1v5qgVbjZyrovJct59nuYqlZFt5m6U2PtatcZXz7+TjafvELvyykTtvc+cYc+SRR1b9jH3NlbNt\nlVyuWs2fsTIwSyu2DAa/ZjnFyjhlxS4KzCEWPH72uHGIxQknnBBsm6LP+2MZ0pbPsPtvb+TJEUII\nIUQp0UOOEEIIIUqJHnKEEEIIUUoavgq5TQllOCXbauesv1tdl2NqnnzyyWC/8cYbUTsuO82lpVlL\nBOLYHY77sLo/xzCwnmxXUOcYH7vCK8cocUxOW8WbLC+5eJp6lmQA4liI3PlST1wLf4Z1eduPWlPI\na/39llSsSqPIxUjwyvdctoHTroF02q7te+5ctXO1Bbsy+FZbbVV1f3aMOfWX98ExALl92P3xGNlY\nI/u62meA9G8sO7lx/+pXvxpsXhJk0aJFUbtUfJ+Nu+TrP8d02KUK+Ly32/i7uE82Zbqs8LJJALDn\nnnsGm891G0PDY/HEE08E28bwrbfeesHma4mdc7NmzWpNt5uOPDlCCCGEKCV6yBFCCCFEKWmIXMVu\nMeuG5DRs615k2DVt3YssFbH0ZN3qXF2Y3XPWTZ9KUZw+fXrUjtNgbSojwzKXdQX269cv+bm2JicT\n8Gsei2bIVSyTsKRkjx33N9cPPl/YnW3TmFlK5HMnV53Yyi6pVGPbv3XXXTe5z0bDKz0DwMMPPxxs\nPja5czGXJs6/zcrMqWrDdm6ytMzjavf35ptvVm1npSUeB+6f7Tu3s+OcSj1fZ511onZcBqNs5OZt\nbtuPf/zjYPPxsZI/w+eE3TfPTb4+WKmQz2d7Xeeq2nwvsKvIz5gxI9nHzoxdsZ2vQSwH2usih28w\nvGoAEIdp8D7snLP30fZGnhwhhBBClBI95AghhBCilDREruLMCesKYxdlTq5irDTEbjJ2Z7MNxC45\nztqxkgO7rXnb1ltvHbXjqqq5Sqr8XbbaY07mamty2Q2p6q+5fTBWruHjao8BZwHwgq72/Egdc/t+\nSvK6+eabo3a8f7ZzWST2u/i4sbvc9v25554L9siRI5P7bwQ/+tGPotdnn312sEeNGhVsKyHxb+Hf\nacef3dG1VnaudWHXnGyakyhT0mtO1sqd11b6YDpaBdcWaq0k3pp9pD53zTXXRK/5Wstyh60an8ps\nst/L84fH0PYnJVPaPnGV6n333Tdqd/fdd1ftU2fHZhvz/Yszj/l+DQDz5s2ruj9blZorKvO+OZO5\nWj/aG3lyhBBCCFFK9JAjhBBCiFKihxwhhBBClJKGxORwJWOrk3JKIWt3d955Z9Ruiy22qPoZIE4h\nX3/99YNtU9c4NoP7YeMlOG4olX5sv2vKlClV+wrE6Y+24qfVK9uTXLwDx2TkUqprrdScW8GYV73l\n42rjKeqJK+C4ExsPwHEXtf6OXEwAx2LZc2z06NHBPumkk2r6rnrp0aNH9Pr+++8P9vbbbx/sp59+\nOmrH45xLE2/0iuq17o/b2fFKVa+2cTf8W+zvyn2O6UhxdUy9cTf8OjcPTjvttGDbuLKnnnoq2Fzx\n3cZ98TWZr+O22jb3gz9jYzxz48mp/3zN2WWXXdAVsOdw6r7E9zUAmDhxYtX92Zic3XffPdhTp04N\n9qBBg6J2qUrq7YU8OUIIIYQoJXrIEUIIIUQpaYhc1atXr2DbKok2zbuFf/7zn9HrnXbaKdi28i27\nOdmVmXMxsyvetmPXaE6uYgmC+8CuWgDYZpttgm2ro7L0NmzYsGCPHz8+2fdmkatIy8eB07/tMeHP\nsbvYur1zqZ682CKPk/0ulq9ybvWUDJeTXXhbaqHGan3i38XuYCsdNNtle9RRRwWbF63NYedBreUA\nUlWN6yVXKTu1LSe58O/KjWVOrsqlY9sFfptNrp+591PHy8713BiecMIJwT755JODbaVOXqwxt8hu\nCtsnHkOukm/vBQ899FCwWSazbVli5AWegbwc35mx9x6WlPjY2GtaKuV79uzZ0Wu+pvE+bIkF+wzQ\n3siTI4QQQohSooccIYQQQpSShshVvPCfzWixLsUWWP4BYhetdWWybJRbjC/lhsy5Rvl7c5H8vNjZ\nmDFjonY77rhj8rv492+55ZbBbg+5KldxOnVcrUyUqkJcqxRisWPIcDZUruJ0SobKVdNl256zqfPD\nfi61WCdQe/ZWveyxxx7B5grHrYGlHe6/7XtuodR6F2lNkZJccpl3tcpOOXkn13eWZtqCZp87HF5w\n6qmnRtv233//YLNExdWEgXhu5uTC1GK89vrPx5/lk0mTJkXtWAphWQuIs6t4/zY7LreIaJnge9bA\ngQODbaX0WbNmVf28za569tlng83nkM0oTlVQbi/kyRFCCCFEKdFDjhBCCCFKiR5yhBBCCFFKGp5C\nPm3atGgbp9kyNq0vFR8AxHotp6RbHZ0rOXI7G6vDmiR/72uvvRa1Y22Y980rTFus/surtfbv3z/5\nubaAYwvsseM4gFrjX+qtuMpwTI7dXyq+ptYU51pXsa41XsTuP/ddNr6r0XDVbU4VBZY/Rdb+ltyq\n0Kl4KEut6eq1xtfk9pH63lx8We5cbvZYLovBgwcHm8tQ2LgWjoXYbLPNgj1ixIioHceu2GM3efLk\nYPPxsqu08za2n3jiiagdnzt8n7ArYaeqkffu3Ttqt9FGGyEFl6bw3gfbprhzuzJh5x+fA3w/tHGy\nqRgljqEC4vsyzxeuqg7EVf5tXE97IE+OEEIIIUqJHnKEEEIIUUoaIlcxVmpauHBh1XbWDZlLF2ZX\nG7serQuVv7s1EkQL1s3PLrmePXsG20py3A+Wp4A4vdIu7NnW5FzyKbkqJ080mnrGLEe9fc1JcrX2\nsdlVVXO/LVUqwPad5wvLhrYcQK6yOH8ud97UuihkrmJ1LZ+x5PbB23L7aOsKuTfeeGP0mq+h1157\nbbC/8IUvRO2GDx8ebK4o/81vfjNqx9dTlsIA4Ljjjgt2TqbjKrdcgmHjjTeO2rEsxbKIrZJrr+Ut\ncPV1IK42b88x7i9/l5W4WDYrE3Ze8THg++38+fOjdnfddVfV/dkyJ2eccUaw99prr2Bb6dHKXO2N\nPDlCCCGEKCV6yBFCCCFEKalbrkotWmddu6kF86yrldtZ1zG739nNyRlPQOw6Zxeqja5nNzVXzbSV\nGlOLLFr3PWe32Mj1l156Kdhbb7111f21Fc3MmmqmjNUa6snOyfW91qrJtl2uunQjSC2qB6TloFxW\nWu641VrJOCdJ1XrcUp9pTSVjJnfOp46TrcJtK+s2A64abyUflsq/853vBPuOO+6I2j366KPBZknK\nLpI8ZMiQYO+www7RNs4wZVnHZo1yBd0+ffoE20oVM2bMCDZnpdpjz5ISX+Pt/YTHwlZhZrlqwYIF\nyb4PHToUXQH+nXzPstcmXryT75s225izcwcNGhRsO1+40rIN32gP5MkRQgghRCnRQ44QQgghSoke\ncoQQQghRSuqOyWENmbn77ruj1wcffHDVdryaLBDr0FYDT1XFzaXEsj5rUyFZd2TN12qVqdRRq+k+\n88wzwf7iF78Ybfv3v/8d7H322afq/toKPnYvv/xytI018lzKcIp6V3+uN9Yi1a7Wfecq9eb2kVqt\n3VafTcWiNYqHHnoouS1VZbzedOp64pysTp+aS7lV6HPfm+pHvSuNc//sqso29qMZcIyDvV5xnEvf\nvn2DfeaZZ0bt+Bzk1GuO4wGAxYsXB9vG63AcIsdg2BhMPpbTp08PNl9bgThukq+N9hrD1yPue646\nsU075/Oe92HvNbmK9WWC7z25cgBcGZkrXttzg8d20003DbaND7TXwvZGnhwhhBBClBI95AghhBCi\nlNTtU08tlGYraLIExG5D62pkuerFF1+MtnEKIKeDW1c3u6rZHWpdqLyN92HlqlQa8K677hq9Zung\nK1/5SrSNf8ucOXOCPWDAgKhdW7hQ+ffYY2cri7Zgx6nWxTBrlY1Sn7HflWuXkjUakcad+118DGs9\nno3iggsuCPaJJ54YbeNSBXz+2VIKqRIJNr2XX9vfmZK5rByROlatSd9P0YhK2bmx5BTpZnH77bcH\n26Z1f/7znw82p+fmFhxlecLOA04Nt+OUWrjWShAsDbGsZffH197rrrsu2KNHj47asUwyYcKEqp8H\n8vImhytw/1hOAzqenNIseBFslijtfKm1RIIdixbsmPB3dQTkyRFCCCFEKdFDjhBCCCFKSd1yVffu\n3YM9c+bMYFvXFbvEJ02aFGzrOk+5woDYhcouSbuPVLtcZDm7eF999dVoW6qq8zrrrBO9Hjt2bLDP\nP//8aBu7cnnBtCOPPDJqd/bZZyf72Ci437YyM2eQ8LFj9zgQH6/cQou1tsuRkkJqXTSz0Qt+Wjjz\nw2bg9O/fv6nfzfz617+OXvNcmj17drBz8h2PuV1klyUIK0fwPu051dGZNWtWsHOZZ1y1vC0466yz\nktt4McSDDjoo2sZViPmax7IFEGf+2bnJ2/habs8Jzga76qqrgn3DDTdE7ViGqhXO9rHXZK6GbM9F\nvi5wf+3Ypq7rZYOzo3ie2uxLW+k/BR9T3p+tjNzRkCdHCCGEEKVEDzlCCCGEKCV6yBFCCCFEKak7\nJodXEeeqljb+JZWmmsOmtHE1UtYTbUxOLr2QSaVB27gK1h05zoFTMIFY17b6L2vIrLVzfFJb8eyz\nzwZ71KhR0TaOO+DfbSvV1htfUwu2SjDHvHBVzVxFZj7+dkXkemJ0aq20a0sC3HLLLcH++c9/3urv\nbQ1HHHFE9HrEiBHB5mPAsQ5AfL7zvLVzltPh7Rjx5y677LJg29i0jg6fN/ac5zIKtaa1N4spU6ZU\ntXPYWKnNN9882BzjA8S/j1fynjZtWtSOY734GtcIDjnkkGBz7CewdIwOwzEjfJ5y6Q4AePzxx5e3\ni50Cvj/yOWyvYQsXLqxpfzxHcjE+HQ15coQQQghRSvSQI4QQQohSUrdcddNNNwWb3ZWcTg3Ei7Jx\neqFdyJMXxbML5K2++urBZleblYZY3ujdu3dN+2N3vk0VZVfp/Pnzq+7b0uy05eWB3Yo/+9nP2rEn\nopHY6rH2tVg2LMPaKt/tDcuz3M9apTMrR/DriRMnLmfvYnKL3dba39tuu62hfeqqsMTPqwbYBUu5\nTEguHZxDNmot0dIRkCdHCCGEEKVEDzlCCCGEKCV6yBFCCCFEKak7JmfMmDFVbUtKX7XaH6ez2jTl\nVIqajaHhVFcuac3LTgCxPsmphjZdkWN8WMfkpRqApZc+EEKIRlFraYyOQDNLTIjWwSUAeEkfWyKi\n1lXIOfaW73m2VEdHQ54cIYQQQpQSPeQIIYQQopTULVelqgbbFOqU+9KufPr5z38+2LaC5vPPPx9s\nruZqZSiWqzhNkuUpAFi8eHGwN9xww2DbCspc1ZFt6+7r2bMnUnDbjl4ZUgghRDlIpYPbivFvvfVW\nq/fN9/+333671Z9vS+TJEUIIIUQp0UOOEEIIIUpJ3XJVPVH0nMlkpRuuQmzlpS233DLYLI1dffXV\nUbs+ffoE+3vf+16yHyypPfTQQ8EeNmxY1O7pp58O9ty5c4Pdv3//qJ3tL6NsAyGEEG0NV/rnkAqu\nhAzE97YcHNrBGcabbLJJvV1sE+TJEUIIIUQp0UOOEEIIIUqJHnKEEEIIUUrqjsmpB1659JRTTom2\ncao1V2e0DBo0KNhTpkxJtrvrrruC7b1PtuOUdE5Bz7HSSitFr3Of4xWNORao1hV5hRBCiNYybty4\nYG+wwQbBtinftVbU5hjYHj16BPuJJ56ot4ttgjw5QgghhCglesgRQgghRCnpJtlECCGEEGVEnhwh\nhBBClBI95AghhBCilOghRwghhBClpE1TyBuBc25fAD8E8DGANQC8AOB4AJMB7Om9n2baXwrgBu/9\nJPP+6gD28d7f0iYdF0mcc5sB8AAeBfApgDUBjAXwQ++9gsY6ERrLjoVzbmMAswH82Hv/8xraPwDg\nQu/9ffTebpX3hqU+Z/ZxHYDx3vvf19Nns68jvfd/Wt79lBnn3CgAQwGsCmBbFHMPAK7x3t/Qbh3r\nIHSqhxzn3MoA/gRgkPd+XuW9XwD4Zuoz3vtTE5u2BXAQAD3kdAwWeO93AwDn3IoAngXwvygeXkXn\nQmPZcTgawDMAvg5gmQ85HQnn3AoAzkZxzRcJvPffB8I/GONb5p4o6FQPOQBWQ+G9WaPlDe/9GQDg\nnDsZwOHOuV0AbAbgW977+1r+MwHwEYCzALwH4C4AJwNYzzk3quUkER2G9QGsBGC+c+7LAL6PYtxW\nBHCU936mc247AL8F8BaK8TwPwJre+48S+xTtg8ayffkGgBMBXOec+4L3/hEAcM7NBPArAPsC6Avg\nBO/9WP6gc+4PKDzl/6D3+gD4NYDVUXjpzmSvDzHUOXcwgF4A/uC9v8g5twaKce6N4py43nv/m8rD\nzKUAtkPh/RvnvT8LwLUANnXO/d17P7IhR6ML4Zw7F8XYbgrgdABvArgKRZjKigB+4L0fbz1vzrlP\nUYzPLigejN9B4SX6tvf+Mefc7gDOAdANwIcAjvXev1A5p24E0M97f0gb/cxl0qlicrz3r6M4uJOd\nc/c5537knHPUZEFlMpwP4JQqu9gexYX1ShSDd68ecDoMGzrnHnDO/QPFf/6/q3jr1gVwqPd+dxQ3\nwJMq7X8F4Dzv/a4AXgOwSnt0WlRFY9kBcM4NR3EzGwfgegD/ZZq8W7leXgjg2+az5wF4y3t/vvnM\nbwBc5L0fAeA/APy+4q2z9ETxADUMwJnOufUr3/Ga9344gBEAznDO9QPwVRQ34y8CGA5gpHNuVxTX\n+gV6wFku+gLYvRKucTmA31Q8PSeiOCdynArg4sp8/TqAjSthHlcBOKgyXy8H8N/0mec70gMO0Mke\ncgDAe/8LFE+m11T+/tM5d2Jl8wOVv3NQXFCrfNwvqvK+aH8WeO93q1wANwawhXPuJADzAfzROfcg\nionWvdJ+MJaM91/buK8ij8ayY/BNANdVYqH+AOCrlZtUCw9U/r6IwuPWwtcB7I/q/yjuDuC8iof8\nf5SYHoEAAAMcSURBVFH8J//ZKu3u895/6r1/DcA0AJ8DsCOAewHAe/8ugMcBDKm839L+YwAPAdih\ntT9WVGUCxcLx8X8KwNrOue7JTwL/A+CnzrmLAGzkvb8dwCAUc/qWyjnwXQAb0mceaXD/l5vOJlfB\nObe6934hgNEARjvn/gLgospmdm93W+rDwAfN7p9Yfrz3H1TG9QQU/wkO8d4/X7lRbl9p9hkAn1Ts\n2hZfEW2OxrJ9cM6tDeArAGY55w6qvL1C5b2WYNTU9XIVACuj8LZYKep9FP/Fv7qMLnxCdjcUMpQN\nPF/W+2L54XveMo9/Je4VAOC9v9E5NwbASABnO+cmopCjZmXifjrcPbZTeXKcc3sDeNQ5txa93Q/F\nfwqt5RMUuqPomAwHMBPFOM10zq0K4AAskTKmAvhCxT5oqU+LjoTGsu05HMCD3vstvfeDvfeDARyH\npSWralwN4D8B/NY5t6HZNh6FvATnXPdK9mo1RlTarIfiGv0cgAkA9q68vwaKGJxJlff3cs51q0hf\nu1be0zW6sfDx3xbAworD4A0UcVIAsAcqDz0VyXIF7/1NKLx6O6MYx+7OuUGVNsOdc8e16a9oJZ3K\nk+O9H+OcGwBgrHPuHRRPovMB/D8sSZurlYkAfuGcu9Z7/40Gd1W0ng0r7k+g+C9yBorSAADwGAqX\n+i8B3OCcOwSFm/QK59xcAH9DMTE/gegIaCzbn2+iiE1k/grg4koWThbv/VPOuYsBXIc45uLbKB5+\nDkfxkHphYhdznXO3AegP4Hzv/WvOucsrn/1H5bPnVwLPZ6F4yB2Pwtt0m/f+4coDz8vOuUkAhnvv\n3058l6iNkwFc5Zw7AcXD41GV968FcFMlhuvvAF6vvP88gHudc4tRjMs53vt3nXNHArjGOfdepV2H\nfsjR2lWiU1KJ8F/kvf+Xc24IgNHee7esz4mOh8ZSCNEsOpUnRwjiQxSZHe+h8BYcv4z2ouOisRRC\nNAV5coQQQghRSjpV4LEQQgghRK3oIUcIIYQQpUQPOUIIIYQoJXrIEUIIIUQp0UOOEEIIIUqJHnKE\nEEIIUUr+P9rPn3cslCmKAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "metadata": { "id": "qMwKN4DHcqXV", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Exploratory Task\n", "Run the above cells multiple times to get a good sense of the dataset. Look at the general structure of the images and their corresponding labels. Can you spot some classes that might be difficult for a classifier to distinguish? If so, why do you think they would be difficult to distinguish? Chat to your neighbour about this. \n" ] }, { "metadata": { "id": "S6U63sTpGYvg", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Preparing the data with TensorFlow\n", "At the moment, our training data consists of two large tensors. The images are stored in a tensor of shape $[50000, 28, 28]$, consisting of all the $28 \\times 28$ images matrices stacked together. The labels are stored in a 1D vector of shape $[50000]$. We wish to train a model using **mini-batch stochastic gradient descent**. In order to do so, we need to shuffle the data and split it into smaller (mini-)batches. We also convert the data from numpy arrays to TensorFlow Tensors.\n", "\n", "#### Questions\n", "* Can you explain what the difference is between normal stochastic gradient descent and \"batched\" stochastic gradient descent? What is the purpose of chunking data into batches during training? Are there any trade-offs? What are they? **HINT**: Speak to your neighbours and tutors about this. You can also read [this blog post](https://machinelearningmastery.com/gentle-introduction-mini-batch-gradient-descent-configure-batch-size/) for more details.\n", "* Why is it important to randomise the data before chunking it into batches? \n", "\n", "In order to do this batching (and shuffling) we will use the Tensorflow [Dataset API](https://www.tensorflow.org/api_docs/python/tf/data/Dataset), which is a set of simple reusable components that allow you to build efficient data pipelines. Data is said to \"stream\" through the pipeline, meaning that when something at the output of the pipeline wants data, the pipeline will provide that data as soon as it has enough, rather than waiting to process all the data. This allows you to easily build pipelines that work on large datasets without having to load it all into memory in one go!\n", "\n", "We build this pipeline step-by-step:" ] }, { "metadata": { "id": "HO8Z6SImg_7W", "colab_type": "text" }, "cell_type": "markdown", "source": [ "We being by defining the ```batch_size``` hyperparameter of our model. This hyperparameter controls the sizes of the mini-batches (chunks) of data that we use to train the model. The value you use will affect the memory usage, speed of convergence and potentially also the performance of the model. It also interacts with the *learning rate* used in gradient descent. " ] }, { "metadata": { "id": "x7VwqreOhbfv", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "batch_size = 128" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "3CaT9bWFheRw", "colab_type": "text" }, "cell_type": "markdown", "source": [ "The first component we add will group the image and label tensors together into a tuple and then split them into individual entries - ie. 50000 tuples containing a (28, 28) dimensional image and 1D label associated with that image. The following line adds this splitting component to the pipeline." ] }, { "metadata": { "id": "7wITDBK8h5Z6", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "train_ds = tf.data.Dataset.from_tensor_slices((train_images, train_labels))" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "VNVG8Kb3h_CW", "colab_type": "text" }, "cell_type": "markdown", "source": [ "The next thing we do is apply a map operation. This lets us run an arbitrary function on each element. The function we provide returns the image values divided by 255 and converted ('cast') to a float and the label converted to a 32-bit integer.\n", "\n", "**NOTE**: \"Lambda\" functions are just one-line, anonymous functions. In this case, it defines a function that takes arguments x and y (before the colon), and outputs their manipulated values (after the colon)." ] }, { "metadata": { "id": "4fcE7eTviBOi", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "# Divide image values and cast to float so that they end up as a floating point number between 0 and 1\n", "train_ds = train_ds.map(lambda x, y: (tf.cast(x, tf.float32) / 255.0, tf.cast(y, tf.int32))) " ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "gm5iOdU0iD_0", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Then we add a **shuffle** component. This returns a random element from the pipeline. Can you spot a potential problem here? \n", "\n", "**QUESTION**: What might happen if the shuffle component didn't have a *buffer*? **HINT**: Refer back to the discussion about the data pipeline and \"data streaming through it\" above." ] }, { "metadata": { "id": "bvr5r8k6iJGI", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "# Shuffle the examples.\n", "train_ds = train_ds.shuffle(buffer_size=batch_size * 10) " ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "OlGI65QIjOgp", "colab_type": "text" }, "cell_type": "markdown", "source": [ "The final component in our pipeline is the batch component. This just requests `batch_size` elements from the previous pipeline component, groups them together into a single tensor and returns that." ] }, { "metadata": { "id": "PB8CZrsmjR7Z", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "# Now \"chunk\" the examples into batches\n", "train_ds = train_ds.batch(batch_size) \n", "\n", "# The output of this pipeline will be tuples of tensors containing images and labels. \n", "# The images will be of shape (batch_size, 28, 28) and the labels of shape (batch_size, )" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "D6Y4EvFijYRR", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Finally, we apply the same pre-processing (converting to Tensors and normalising the values to lie between 0 and 1) to the validation set. Here we don't need to use the Dataset API (but could if we wanted to!) because we don't need batching or shuffling. " ] }, { "metadata": { "id": "EHxnBJjRB_Rl", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "# Apply the same preprocessing to the validation set\n", "# Ignore this for now - it will be used later! \n", "validation_images = tf.convert_to_tensor(validation_images, dtype=tf.float32) / 255.0\n", "validation_labels = tf.convert_to_tensor(validation_labels, dtype=tf.int32)" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "v04ibRFSALQu", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Define the model" ] }, { "metadata": { "id": "KItI--nMHFRQ", "colab_type": "text" }, "cell_type": "markdown", "source": [ "In this section we'll build a classifier. A **classifier** is a function that takes an object's characteristics (or \"features\") as inputs and outputs a prediction of the class (or group) that the object belongs to. It may make a single prediction for each input or it may output some score (for example a probability) for each of the possible classes. Specifically, we will build a classifier that takes in (a batch of) 28 x 28 Fashion MNIST images as we've seen above, and outputs predictions about which class the image belongs to. \n", "\n", "For each (batch of) input images, we will use a **feed-forward neural network** to compute un-normalised scores (also known as **logits**) for each of the 10 possible classes that the image could belong to. We can then **classify** the image as belonging to the class which receives the highest score, or we can quantify the model's \"confidence\" about the classifications by converting the scores into a probability distribution. \n", "\n", "A feed-forward neural network consisting of $N$ layers, applied to an input vector $\\mathbf{x}$ can be defined as:\n", "\n", "\\begin{equation}\n", "\\mathbf{f_0} = \\mathbf{x} \\\\\n", "\\mathbf{f_i} = \\sigma_i(\\mathbf{W_if_{i-1}} + \\mathbf{b_i}) \\ \\ \\ i \\in [1, N]\n", "\\end{equation}\n", "\n", "Each layer has a particular number, $m_i$, of neurons. The parameters of a layer consist of a matrix $\\mathbf{W_i} \\in \\mathbb{R}^{m_i \\times m_{i-1}}$ and bias vector $\\mathbf{b_i} \\in \\mathbb{R}^{m_i}$. Each layer also has a non-linear activation function $\\sigma_i$. \n", "\n", "**QUESTION**: Why do you think the activation functions need to be *non-linear*? What would happen if they were *linear*? **HINT**: If you're stuck, consider the very simplest case of an identity activation (which essentially does nothing) and ignore the biases. \n" ] }, { "metadata": { "id": "tHy4bjbTVCzV", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Aside: Activation functions" ] }, { "metadata": { "id": "Ox7VKs3BVCFV", "colab_type": "text" }, "cell_type": "markdown", "source": [ "\n", "\n", "Activation functions are a core ingredient in deep neural networks. In fact they are what allows us to make use of multiple layers in a neural network. There are a number of different activation functions, each of which are more or less useful under different circumstances. The four activation functions that you are most likely to encounter are, arguably, [ReLU](https://www.tensorflow.org/api_docs/python/tf/keras/layers/ReLU), [Tanh](https://www.tensorflow.org/api_docs/python/tf/keras/activations/tanh), [Sigmoid](https://www.tensorflow.org/api_docs/python/tf/keras/activations/sigmoid), and [Softmax](https://www.tensorflow.org/api_docs/python/tf/keras/layers/Softmax). \n", "\n", "ReLU, has in recent years, become the default choice for use in MLPs and Convolutional Neural Networks (CNNs). ReLU has two advantages over Tanh and Sigmoid: it is computationally much more efficient, and, it allows us to use deeper networks because it does not suffer from [vanishing gradients](https://en.wikipedia.org/wiki/Vanishing_gradient_problem). As a result of their success, a number of ReLU variants, such as [LeakyRelu](https://www.tensorflow.org/api_docs/python/tf/keras/layers/LeakyReLU) and [PReLU](https://www.tensorflow.org/api_docs/python/tf/keras/layers/PReLU), have been developed.\n", "\n", "Sigmoid and Softmax activations are often found after the last layer in binary and multi-class classification networks, respectively, as they transform the outputs of the network in such a way that we can interpret them as class probabilities.\n", "\n", "Both Tanh and Sigmoid are found in LSTM and GRU recurrent neural networks, which we will find out more about in the coming days. They are also useful in MLPs and CNNs where we want the output to be bounded between -1 and 1 (Tanh) or 0 and 1 (Sigmoid).\n", "\n", "Read more about activation functions [here](https://towardsdatascience.com/activation-functions-neural-networks-1cbd9f8d91d6). " ] }, { "metadata": { "id": "bDRoliDeAShd", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Configure the feed-forward neural network\n", "We configure the feed-forward neural network part of our classifier using the [Keras Layers API](https://www.tensorflow.org/api_docs/python/tf/keras/layers). This API consists of various reusable building-blocks that allow us to define many different neural network architectures (similar to how we defined a data pipeline earlier!). \n", "\n", "Here we use the [Sequential](https://www.tensorflow.org/api_docs/python/tf/keras/Sequential) component which allows us to wrap together a sequence of layers. An important point to note here is that we are **configuring** our neural network architecture as a pipeline. We can think of the resulting ```model`` variable as a *function* that takes a batch of images as inputs and outputs a batch of logits. " ] }, { "metadata": { "id": "cDPrTMSahRBu", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "model = tf.keras.Sequential([\n", " # Convert the 28x28 image into a flat vector of 28x28 = 784 values\n", " tf.keras.layers.Flatten(input_shape=(28, 28), name='flatten_input'), \n", " # Create a \"hidden\" layer with 256 neurons and apply the ReLU non-linearity\n", " tf.keras.layers.Dense(256, activation=tf.nn.relu, name='input_to_hidden1'), \n", " # Create another hidden layer with 128 neurons\n", " tf.keras.layers.Dense(128, activation=tf.nn.relu, name='hidden1_to_hidden2'),\n", " # Create an \"output layer\" with 10 neurons\n", " tf.keras.layers.Dense(10, name='hidden_to_logits'), \n", "])" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "W3AU_94YP1st", "colab_type": "text" }, "cell_type": "markdown", "source": [ "The following summary shows how many parameters each layer is made up of (the number of entries in the weight matrics and bias vectors). Note that a value of ```None``` in a particular dimension of a shape means that the shape will dynamically adapt based on the shape of the inputs. In particular, the output shape of the ```flatten_input``` layer will be $[N, 784]$ when the batch of inputs passed to the model has shape $[N, 28, 28]$" ] }, { "metadata": { "id": "fSW4V3HuQd1-", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 272 }, "outputId": "f605f661-f91e-4ee5-ee7f-1df1d691038b" }, "cell_type": "code", "source": [ "model.summary() " ], "execution_count": 14, "outputs": [ { "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "flatten_input (Flatten) (None, 784) 0 \n", "_________________________________________________________________\n", "input_to_hidden1 (Dense) (None, 256) 200960 \n", "_________________________________________________________________\n", "hidden1_to_hidden2 (Dense) (None, 128) 32896 \n", "_________________________________________________________________\n", "hidden_to_logits (Dense) (None, 10) 1290 \n", "=================================================================\n", "Total params: 235,146\n", "Trainable params: 235,146\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ], "name": "stdout" } ] }, { "metadata": { "id": "PwI8FcreWsC_", "colab_type": "text" }, "cell_type": "markdown", "source": [ "**QUESTION**: Note that the flattening operation has no parameters. However, the Dense (fully-connected) layer mapping from the 784-D output of the flatten operation to the 256-D hidden layer has 200,960 parameters! Can you explain why the dense layer has 200,960 parameters? **HINT**: Refer back to the equations of a feed-forward network." ] }, { "metadata": { "id": "VwWoSlpDMzNZ", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Define the loss\n", "As we did in the previous practical, we need to specify a loss function for our classifier. This tells us how good our model's predictions are compared to the actual labels (the targets), with a lower loss meaning better predictions. The standard loss function to use with a **multi-class classifier** is the **cross-entropy loss** also known as the \"negative log likelihood\". Suppose we have a classification problem with $C$ classes. A classifier is trained to predict a probability distribution $p(y | X_i)$ for each input $X_i$ from a batch of $N$ examples. The vector $p(y|X_i)$ is $C$ dimensional, sums to one, and we use $p(y|X_i)_c$ to denote the $c$th component of $p(y|X_i)$. The true class for example $i$ in the batch is $y_i$ and we define the indicator function $\\mathbb{1}[y_i=c]$ to be 1 whenever $y_i = c$ and $0$ otherwise. This classifier has a cross-entropy loss of\n", "\n", "$- \\frac{1}{N}\\sum_{i=1}^N \\sum_{c=1}^C log( p(y|X_i)_c) \\mathbb{1}[y_i=c]$\n", "\n", "**NOTE**: The indicator is one for the true class label, and zero everywhere else. So in that sum, the indicator just \"lifts out\" the $log(p(y|X_i))$ values for all true classes. So the above expression is minimised (note the negative at the front) when the model places all its probability mass on the true labels for all the examples. Remember that log(1)=0 , thus the closer all probabilities of $y_i = c$ are to one, the lower the loss will be and the better the model will be performing.\n", "\n", "**QUESTION**: \n", "* Why do you think this is a *good* loss function?\n", "* Can you think of any potential issues with this loss function?\n", "\n", "Fortunately we don't need to write this function ourselves as Tensorflow provides a version called \n", "\n", "```tf.nn.sparse_softmax_cross_entropy_with_logits```. \n", "\n", "**NOTE**: This function actually computes the cross entropy loss directly from the un-normalised logits, rather than from the probability distribution for numerical stability.\n", "\n", "By the way, for training data in which the labels are themselves distributions rather than exact values, this definition of cross-entropy still works, where the indicator function is replaced with the corresponding probability of each class for that example. This might be important when we are not sure whether the training data has been labelled correctly, or when the data was labelled by a human who gave their answer along with a degree of confidence that the answer was correct" ] }, { "metadata": { "id": "7OHi-HftJy9_", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Train the model\n", "Now that we have our data, data processing pipeline, our neural network architecture and the corresponding loss that we want to minimise, we need to **train** the model using batched stochastic gradient descent. We do this in multiple **epochs**, which is a single iteration through the entire training dataset. Briefly, in each epoch we loop over all the batches of images and labels, and for each batch we perform the following steps:\n", "* Get the **predictions** of the model on the current batch of images\n", "* Compute the **average loss** values across the batch, telling us how good these predictions are / how close they are to the true targets.\n", "* Compute the **gradient of the average loss** (or the average gradient of the losses in the batch) with respect to each of the model's parameters: This tells us the direction to move in \"parameter space\" to decrease the loss value\n", "* **Adjust the parameters** by taking a small step in the direction of each component of the gradient (where the learning rate controls the size of the step)\n", "\n", "During training we also track some metrics, such as the loss and accuracy to see how well the classifier is doing. Note that the cell below may take a few minutes to run! \n", "\n", "###ASIDE: Computing gradients in Eager mode\n", "\n", "In graph mode, TensorFlow builds up a \"computation graph\" which captures all operations of the model and their dependencies. For training, the gradient can then be computed by traversing backwards from every node through its dependents and applying the \"chain rule\" of differentiation. \n", "\n", "However, in Eager mode, we don't have the concept of the computation graph anymore. Operations are performed imperatively (in the order in which they were executed). TensorFlow therefore uses a mechanism called the \"GradientTape\" for computing gradients in Eager mode. Basically, the gradient tape records the order of all operations as they are executed, and can then be \"run backwards\" (traversed from last to first operation) for computing the gradients." ] }, { "metadata": { "id": "5hpiGc40hYkK", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "# Create an optimizer\n", "# The optimizer is responsible for controlling the learning rate\n", "optimizer = tf.train.AdamOptimizer()\n", "\n", "step_counter = tf.train.get_or_create_global_step() # Just a variable that keeps track of how many training steps we've run\n", "num_epochs = 50 # The number of epochs to run\n", "\n", "# Lists to store the loss and accuracy of every epoch\n", "epoch_losses = []\n", "epoch_accuracies = []\n", "\n", "for epoch in range(num_epochs):\n", " # Tensorflow provides a convenient API for tracking a number of metrics during training/evaluation\n", " loss_avg = tfe.metrics.Mean()\n", " accuracy = tfe.metrics.Accuracy()\n", "\n", " # Loop over our data pipeline\n", " for step, (image_batch, label_batch) in enumerate(train_ds):\n", " \n", " # Initialise a GradientTape to track the operations\n", " with tf.GradientTape() as tape:\n", " # Compute the logits (un-normalised scores) of the current batch of examples \n", " # using the neural network architecture we defined earlier\n", " logits = model(image_batch, training=True)\n", " # Compute the cross-entropy loss of the classification outputs on this batch\n", " loss_value = tf.nn.sparse_softmax_cross_entropy_with_logits(\n", " logits=logits, labels=label_batch) \n", " # Compute the average loss over the batch\n", " loss_value = tf.reduce_mean(loss_value) \n", " \n", " # Add current batch loss to our loss metric tracker - note the function call semantics\n", " loss_avg(loss_value) \n", " # Compare most likely predicted label to actual label\n", " accuracy(tf.argmax(logits, axis=1, output_type=tf.int32), label_batch)\n", "\n", " # Play the tape backwards and get the gradient of the loss of the current batch\n", " # Note we're now outside the scope of the with-block above\n", " grads = tape.gradient(loss_value, model.variables)\n", " # Use the optimizer to apply the gradients to the model parameters along with\n", " # its internal learning rate\n", " optimizer.apply_gradients(\n", " zip(grads, model.variables), global_step=step_counter)\n", " \n", " # Get the average loss and accuracy for the epoch\n", " epoch_loss = loss_avg.result()\n", " epoch_losses.append(epoch_loss)\n", " epoch_accuracy = accuracy.result()\n", " epoch_accuracies.append(epoch_accuracy)\n", " print(\"Epoch {:03d}: Loss: {:.3f}, Accuracy: {:.3%}\".format(epoch, epoch_loss, epoch_accuracy))\n", " \n", "# Plot the loss for all epochs using Matplotlib\n", "plt.figure()\n", "plt.plot(range(num_epochs), epoch_losses)\n", "plt.title('Loss vs epochs')\n", "\n", "# Plot the accuracy for all epochs using Matplotlib\n", "plt.figure()\n", "plt.plot(range(num_epochs), epoch_accuracies)\n", "plt.title('Accuracy vs epochs')" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "i-oib_tntPIY", "colab_type": "text" }, "cell_type": "markdown", "source": [ "The above code block shows a typical training loop. There's actually an easier way to do this using Tenosrflow and Keras, which we'll see in the next prac, but for now we expand it so you can see what's going on.\n", "\n", "Lets visualise some of the model's prediction on the training set" ] }, { "metadata": { "id": "rotl5kAX7SrW", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "images, labels = next(train_ds.make_one_shot_iterator()) # Get a batch of images and labels\n", "\n", "_logits = model(images, training=False) # Pass the images to the model function and get its output logits\n", "predicted_labels = tf.argmax(_logits, axis=1, output_type=tf.int32)\n", "\n", "img_indexs = np.arange(images.numpy().shape[0])\n", "np.random.shuffle(img_indexs)\n", "\n", "plt.figure(figsize=(10,10))\n", "for i in range(25):\n", " plt.subplot(5,5,i+1)\n", " plt.xticks([])\n", " plt.yticks([])\n", " plt.grid('off')\n", " \n", " img_index = img_indexs[i]\n", " predicted_label = int(predicted_labels[img_index])\n", " \n", " plt.imshow(images[img_index], cmap=plt.cm.gray)\n", " \n", " actual_label = int(labels[img_index].numpy())\n", " plt.xlabel(\"Actual: {} ({})\\n Predicted: {} ({})\".format(\n", " actual_label, text_labels[actual_label], predicted_label, text_labels[predicted_label]\n", " ))\n", " \n", "plt.tight_layout()\n", "plt.show()" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "SIUsSjNwVk_n", "colab_type": "text" }, "cell_type": "markdown", "source": [ " ### Aside: Optimisation schemes" ] }, { "metadata": { "id": "ExBhca58VpPH", "colab_type": "text" }, "cell_type": "markdown", "source": [ "You might have noticed that we are using the Adam optimizer to train our neural networks. Adam is a variant of stochastic gradient descent which often performs well in practice. In fact, there is a whole range of variations on stochastic gradient descent that are often used. Here is an illustration showing how a few of these methods perform on a toy problem: \n", "\n", "![optimization methods](http://ruder.io/content/images/2016/09/saddle_point_evaluation_optimizers.gif)\n", "\n", "For a detailed description of various optimization methods read [this](http://ruder.io/optimizing-gradient-descent/) article. For a great visual discussion on how these methods work see [this](https://distill.pub/2017/momentum/) article." ] }, { "metadata": { "id": "zMwZVX1T3zWP", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Testing\n", "\n", "After 50 epochs of training on our training set, we obtain a loss of around 0.061 and accuracy of 97.7%. That's pretty good, right? \n", "\n", "It is important to distinguish between data that is **in-sample** and **out-of-sample**. Our training data is all in-sample and we would expect any resonably powerful model (like an MLP) to be very accurate and have a low loss on this (in fact, with a sufficiently large MLP and enough training epochs, we can get the loss arbitrarily close to zero!). This is not a good thing though, because pushing the loss close to zero may mean that the model has fit the **noise** in the training data rather than the true signal. If this is the case, it will not perform well on out-of-sample data that it has not seen before (which is what we really care about!). To assess this, we evaluate our trained model on the held-out test set (but we don't update the parameters of the model when testing it, that would be cheating!)" ] }, { "metadata": { "id": "SmBt_X4B4g3-", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "# We need to apply the same pre-processing to the test set as we did to the training set\n", "# Since we don't need batching or shuffling, we can do this directly instead of \n", "# building a tf.Dataset pipeline\n", "\n", "tf_test_images = tf.convert_to_tensor(test_images, dtype=tf.float32) / 255.0\n", "tf_test_labels = tf.convert_to_tensor(test_labels, dtype=tf.int32)" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "j0BaJidP46Bm", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "a2cb8a2e-7dd7-4eee-8f7a-9838cecd414a" }, "cell_type": "code", "source": [ "test_accuracy = tfe.metrics.Accuracy()\n", "\n", "test_logits = model(tf_test_images, training=False)\n", "\n", "# Compute the average cross-entropy loss of the classification over the entire test set\n", "test_loss = tf.nn.sparse_softmax_cross_entropy_with_logits(\n", " logits=test_logits, labels=tf_test_labels) \n", "test_loss = tf.reduce_mean(test_loss)\n", "\n", "# Compare predicted labels to actual labels\n", "test_accuracy(tf.argmax(test_logits, axis=1, output_type=tf.int32), tf_test_labels)\n", "\n", "print('Completed testing on', tf_test_images.shape[0], 'examples...')\n", "print('Loss: {:.3f}, Accuracy: {:.3%}'.format(test_loss, test_accuracy.result()))" ], "execution_count": 17, "outputs": [ { "output_type": "stream", "text": [ "Completed testing on 10000 examples...\n", "Loss: 0.607, Accuracy: 88.920%\n" ], "name": "stdout" } ] }, { "metadata": { "id": "Qn4ptik28aHF", "colab_type": "text" }, "cell_type": "markdown", "source": [ "And again we visualise some of the model's predictions:" ] }, { "metadata": { "id": "JHVSTjZU8ehm", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "test_predictions = tf.argmax(test_logits, axis=1, output_type=tf.int32)\n", "\n", "plt.figure(figsize=(10,10))\n", "for i in range(25):\n", " plt.subplot(5,5,i+1)\n", " plt.xticks([])\n", " plt.yticks([])\n", " plt.grid('off')\n", " \n", " img_index = np.random.randint(0, 10000)\n", " plt.imshow(test_images[img_index], cmap=plt.cm.gray)\n", " \n", " actual_label = int(test_labels[img_index])\n", " predicted_label = int(test_predictions[img_index])\n", " \n", " plt.xlabel(\"Actual: {} ({})\\n Predicted: {} ({})\".format(\n", " actual_label, text_labels[actual_label], predicted_label, text_labels[predicted_label]\n", " ))\n", " \n", "plt.tight_layout()\n", "plt.show()" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "yo6bEKs17a_d", "colab_type": "text" }, "cell_type": "markdown", "source": [ "What happened? We got 97.7% accuracy on the training set, but only 88.9% on the test set. This is an example of how a model's in-sample performance differs from its out-of-sample performance. It may even be considered **overfitting** (where the model failing to generalise its in-sample performance to unseen out-of-sample data). There are a number of ways we can address this, but first, it's important to realise that we should try and keep the number of evaluations on the test set to a minimum. \n", "\n", "**QUESTION**: Can you think of WHY we should limit the number of evaluations on the test set? This is an important point, so spend a few minutes thinking about it, discuss it with your neighbour and ask the tutors if you get stuck! \n", "\n", "The first important method is called **validation**. Using validation, we reserve a portion of our training dataset and call it the validation set. After each epoch of training (or every K epochs where K can be a fraction), we evaluate our model on this validation set (without updating the model parameters). This gives us a good sense of how well we expect our model to do on out-of-sample data. In this way, the validation set acts as a surrogate for the test set which we can safely use during model development and training. We can also use this validation set to tune our model by selecting hyperparameters such as the batch size, sizes of layers or the network architecture. \n" ] }, { "metadata": { "id": "ot-FjimzV6op", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Aside: Underfitting" ] }, { "metadata": { "id": "iQMKAkkFV7bf", "colab_type": "text" }, "cell_type": "markdown", "source": [ "In addition to the problem of _overfitting_ (in which the model is too complex and as a result is able to memorize the training data rather than learning a general pattern) there is the problem of _underfitting_ which is the opposite. Underfitting occurs when the model does not have enough complexity (also known as capacity) to learn a general pattern. While overfitting is characterised by diverging test/validation and training scores, underfitting is characterised by test/validation and training scores that very slowly continue to improve. \n", "\n", "\n", "Unlike overfitting which has a number of solutions, such as collecting more data, data augmentation, dropout, and L1/L2 regularization, underfitting has one simple solution: just make your model incrementally more complex until it no longer underfits.\n", "\n", "![underandoverfitting](https://i.imgur.com/m2bSP1S.png)" ] }, { "metadata": { "id": "E8KSIHzkWC1N", "colab_type": "text" }, "cell_type": "markdown", "source": [ "##TASKS:\n", "\n", "1. [**ALL**] Implement **Validation** by adding some code to the loop in the \"Train the model\" section (**TIP**: The code for evaluating on the validation set will be very similar to evaluating on the test set!): \n", " * Evaluate your model on the validation set at the end of each training epoch and print the loss and accuracy on the validation set. We have already defined a validation set and done the necessary preprocessing for you.\n", " * Evaluate how closely the loss and accuracy on the validation set matches the eventual performance on the test set. \n", "\n", "2. [**ALL**] Implement DROPOUT (see [Tensorflow documentation](https://www.tensorflow.org/api_docs/python/tf/keras/layers/Dropout) and [research paper](https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf) ) to improve the model's generalisation.\n", "\n", "3. [**ADVANCED**] Implement BATCH NORMALISATION ([Tensorflow documentation](https://www.tensorflow.org/api_docs/python/tf/keras/layers/BatchNormalization) and [research paper](http://proceedings.mlr.press/v37/ioffe15.pdf))to improve the model's generalisation.\n", "\n", "4. [**OPTIONAL**] Remove the shuffling from the dataset pipeline and compare the generalisation performance of the model with and without shuffling. \n", "\n", "5. [**OPTIONAL**] Adjust the model architecture by adding layers and modifying other parameters to improve the performance on your **validation** set. Once you've settled on an architecture and hyperparameters, evaluate your model on the **test** set. See the Tensorflow documentation for examples of parameters you can change in the model.\n", "\n", "\n", "## Important Tip\n", "If you want to re-train your model, you need to rerun all the code in the \"Define the model\" section first. This is to ensure that the Tensorflow variables containing the model parameters get reset. If you don't do this, you're effectively running more epochs on an already-trained model." ] } ] } ================================================ FILE: Practical_2_Convolutional_Neural_Networks.ipynb ================================================ { "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Practical 2: Convolutional Neural Networks", "version": "0.3.2", "provenance": [], "collapsed_sections": [ "SFvYLebFZzGG", "5uzeJaMB7DPa", "py0V6UwC6_kH", "OJzCooQO66D3" ] }, "kernelspec": { "name": "python2", "display_name": "Python 2" }, "accelerator": "GPU" }, "cells": [ { "metadata": { "id": "NcAHF4g8Xa93", "colab_type": "text" }, "cell_type": "markdown", "source": [ "# Practical 2: Convolutional Networks\n" ] }, { "metadata": { "id": "zFOuMk56XjC8", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Introduction\n", "In this practical we will cover the basics of convolutional neural networks, or \"ConvNets\". ConvNets were invented in the late 1980s/early 1990s, and have had tremendous success especially with vision (although they have also been used very successfully in speech processing pipelines, and more recently, for machine translation).\n", "\n", "## Learning Objectives\n", "* Be able to explain what a convolutional layer does and how it's different from a fully-connected layer \n", "* Understand the assumptions and trade-offs that are being made when using convolutional architectures\n", "* Be able to build a convolutional architecture using Tensorflow and Keras Layers\n", "* Be able to use Keras to train a model on a dataset\n", "* Implement either batch normalisation or a very small residual network\n", "\n", "## Running on GPU\n", "For this practical, you will need to use a GPU to speed up training. To do this, go to the \"Runtime\" menu in Colab, select \"Change runtime type\" and then in the popup menu, choose \"GPU\" in the \"Hardware accelelator\" box. This is all you need to do, Colab and Tensorflow will take care of the rest! " ] }, { "metadata": { "id": "bJG0K_T7wifE", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "e9f03e31-ebd3-43b4-c4ab-6fb3aff60925" }, "cell_type": "code", "source": [ "#@title Imports (RUN ME!) { display-mode: \"form\" }\n", "\n", "# TODO: Swallow output\n", "!pip -q install pydot_ng\n", "!pip -q install graphviz\n", "!apt install graphviz > /dev/null\n", "\n", "from __future__ import absolute_import, division, print_function\n", "\n", "import tensorflow as tf\n", "import tensorflow.contrib.eager as tfe\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from IPython import display\n", "%matplotlib inline\n", "\n", "try:\n", " tf.enable_eager_execution()\n", " print('Running in Eager mode.')\n", "except ValueError:\n", " print('Already running in Eager mode')" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "\n", "WARNING: apt does not have a stable CLI interface. Use with caution in scripts.\n", "\n", "Already running in Eager mode\n" ], "name": "stdout" } ] }, { "metadata": { "id": "u5_zoqk-YK0D", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Convolutional Architectures\n", "When modelling an image using a regular feed-forward network, we find that the number of model parameters grows exponentially. For example, the tiny network we built in Practical 1 already had over 100,000 parameters!\n", "\n", "**QUESTION**: How many parameters would there be in a feed-forward network with 2 hidden layers consisting of 512 and 256 neurons respectively, an output size of 10 and an input image of shape [32, 32, 3]? (Note that we represent each pixel in a a colour image using three real-numbers for the Red, Green and Blue values -- [called \"channels\"](https://www.quora.com/What-do-channels-refer-to-in-a-convolutional-neural-network) -- and hence the 32x32**x3** shape.)\n", "\n", "ConvNets address this model parameter issue by exploiting structure in the inputs to the network (in particular, by making the assumption that the input is a 3-D *volume*, which applies to images for example, where the 3 dimensions consist of the three RGB channels). The two key differences between a ConvNet and a Feed-forward network are:\n", "\n", "* ConvNets have neurons that are arranged in 3 dimensions: width, height, depth. Note that *depth* here means channels, i.e. the depth of the input volume, not the depth of a deep neural network!\n", "* The neurons in each layer are only connected to a small region of the layer before it.\n", "\n", "**QUESTION**: Unfortunately there is no such thing as a free lunch. What trade-off do you think a ConvNet makes for the reduction in memory required by fewer parameters?\n", "\n", "Generally a ConvNet architecture is made up of different types of layers, the most common being convolutional layers, pooling layers and fully-connected layers that we encountered in the last practical." ] }, { "metadata": { "id": "SFvYLebFZzGG", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Aside: The rise of deep convolutional architectures" ] }, { "metadata": { "id": "kEtb0aaeZ6os", "colab_type": "text" }, "cell_type": "markdown", "source": [ "ConvNet architectures were key to the tremendous success of deep learning in machine vision. In particular, the first deep learning model to win the ImageNet competition in 2012 was called AlexNet (after Alex Krizhevsky, one of its inventors). It had 5 convolutional layers followed by 3 fully-connected layers. Later winners included GoogLeNet and ResNet. If you're curious, have a look at [this link](https://medium.com/towards-data-science/neural-network-architectures-156e5bad51ba) for a great summary of different ConvNet architectures." ] }, { "metadata": { "id": "vOp67cfpaTlC", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Convolutional Layers" ] }, { "metadata": { "id": "6JbXSVKulDoD", "colab_type": "text" }, "cell_type": "markdown", "source": [ "A convolutional layer maps an input *volume* (meaning, a 3-D input tensor, e.g. [width, height, channels]) to an output volume through a set of learnable filters, which make up the parameters of the layer. Every filter is small spatially (along width and height), but extends through the full depth of the input volume. (Eg: A filter in the first layer of a ConvNet might have size [5, 5, 3]). During the forward pass, we convolve (\"slide\") each filter across the width and height of the input volume and compute element-wise dot products between the entries of the filter and the input at any position. As we slide the filter over the width and height of the input volume we will produce a 2-dimensional activation map that gives the responses of that filter at every spatial position. Each convolutional layer will have such a set of filters, and each of them will produce a separate 2-dimensional activation map. We then stack these activation maps along the depth-dimension to produce the output volume.\n", "\n", "By using these filters which map to a small sub-volume of the input, we can to a large extent,control the parameter explosion that we would get with a (fully-connected) feed-forward network. This **parameter sharing** actually also tends to improve the performance of the model on inputs like natural images because it provides the model with some limited **translation invariance**. Translation invariance means that if the image (or a feature in the image) is translated (moved), the model will not be significantly affected. Think about why this is the case!\n", "\n", "The following animation illustrates these ideas, make sure you understand them!\n", "\n", "![Convolution Animation](https://i.stack.imgur.com/FjvuN.gif)" ] }, { "metadata": { "id": "eLiuT6TcmXw8", "colab_type": "text" }, "cell_type": "markdown", "source": [ "The hyper-parameters of a convolutional layer are as follows:\n", "* **Filters** defines the number of filters in the layer\n", "* **Kernel Size** defines the width and height of the filters (also called \"kernels\") in the layer. Note that kernels always have the same depth as the inputs to the layer.\n", "* **Stride** defines the number of pixels by which we move the filter when \"sliding\" it along the input volume. Typically this value would be 1, but values of 2 and 3 are also sometimes used.\n", "* **Padding** refers to the addition of 0-value pixels to the edges of the input volume along the width and height dimensions. In Tensorflow you can set this to \"VALID\", which essentially does no padding or \"SAME\" which pads the input such that the output width and height are the same as the input.\n", "\n", "Lets look at a very simple, dummy example to see how the values of the hyper-parameters affect the output size of a convolutional layer." ] }, { "metadata": { "id": "iluvPEPInWKn", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 282 }, "outputId": "7525b2e3-0e06-4d25-925a-fbc827404625" }, "cell_type": "code", "source": [ "# Create a random colour \"image\" of shape 10x10 with a depth of 3 (for red, green and blue)\n", "dummy_input = np.random.uniform(size=[10, 10, 3])\n", "fig, ax = plt.subplots(1, 1)\n", "plt.imshow(dummy_input)\n", "ax.grid(False)\n", "print('Input shape: {}'.format(dummy_input.shape))" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Input shape: (10, 10, 3)\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "metadata": { "id": "ZU1gD5hnsHbc", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Now adjust the hyperparameters using the sliders on the right and see how the output shape changes for a [10, 10, 3] input." ] }, { "metadata": { "id": "OF_KxVpSpE6y", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "6fab73db-7f70-4164-84ec-0bec59808f75" }, "cell_type": "code", "source": [ "#@title Convolutional layer parameters {run: \"auto\"}\n", "filters = 3 #@param { type: \"slider\", min:0, max: 10, step: 1 }\n", "kernel_size = 2 #@param { type: \"slider\", min:1, max: 10, step: 1 }\n", "stride = 1 #@param { type: \"slider\", min:1, max: 3, step: 1 }\n", "\n", "conv_layer = tf.keras.layers.Conv2D(\n", " filters=filters, \n", " kernel_size=kernel_size, \n", " strides=stride,\n", " padding=\"valid\",\n", " input_shape=[10, 10, 3])\n", "\n", "# Convert the image to a tensor and add an extra batch dimension which\n", "# the convolutional layer expects.\n", "input_tensor = tf.convert_to_tensor(dummy_input[None, :, :, :])\n", "convoluted = conv_layer(input_tensor)\n", "\n", "print('The output dimension is:')\n", "list([d.value for d in convoluted.shape])[1:]" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "The output dimension is:\n" ], "name": "stdout" }, { "output_type": "execute_result", "data": { "text/plain": [ "[9, 9, 3]" ] }, "metadata": { "tags": [] }, "execution_count": 9 } ] }, { "metadata": { "id": "dzh-9TL1sMCT", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Note especially how output width and height are related to ```kernel_size``` and ```stride```, and how the output depth is related to ```filters```.\n", "\n", "#### Question\n", "Can you come up with a formula for the output shape given the input shape, the hyperparameters of the layer and assuming no padding? " ] }, { "metadata": { "id": "LhgDU-fVx2Jv", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### (Max) Pooling\n", "A pooling layer reduces the spatial size of the representation. There are different reasons why we may want to do this. One is to reduce the number of parameters in the network. Imagine a convnet for the MNIST dataset. If the feature tensor produced by the final conv/pool/relu layer was say, of size 20x20 and had 100 feature channels, the final dense layer would have 20*20*100*10=400k parameters. However if we down-sampled that layer to a 4x4 spatial size, we would have only 20k parameters. A big difference!\n", "\n", "Another reason is that we want later features (deeper int he network) to have larger *receptive fields* (input regions that they look at), in order to represent bigger objects and object parts for instance. In particular, pooling stride gives later features much larger receptive fields so that they can effectively combine smaller features together.\n", "\n", "A pooling layer has no trainable parameters itself. It applies some 2-D aggegation operation (usually a max(), but others like average() may also be used) to regions of the input volume. This is done independently for each depth dimension of the input. For example, a 2x2 max pooling operation with a stride of 2, downsamples every depth slice of the input by 2 along both the width and height.\n", "\n", "#### Question\n", "Do 2x2 max-pooling by hand, with a stride of 2, on the following 2D input. What is the size of the output?\n", "\n", "\\begin{bmatrix}\n", " 9 & 5 & 4 & 5 & 6 & 4 \\\\\n", " 6 & 6 & 3 & 5 & 8 & 2 \\\\\n", " 4 & 6 & 9 & 1 & 3 & 6 \\\\\n", " 9 & 7 & 1 & 5 & 8 & 1 \\\\\n", " 4 & 9 & 9 & 5 & 7 & 3 \\\\\n", " 7 & 3 & 6 & 4 & 9 & 1 \n", "\\end{bmatrix}\n", "\n", "\n", "Reveal the cell below by double-clicking and running it, to check your answer when you're done!" ] }, { "metadata": { "id": "e1oIm3Nlb9zY", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "#@title Answer { display-mode: \"form\" }\n", "X = np.array([[9, 5, 4, 5, 6, 4],\n", " [6, 6, 3, 5, 8, 2],\n", " [4, 6, 9, 1, 3, 6],\n", " [9, 7, 1, 5, 8, 1],\n", " [4, 9, 9, 5, 7, 3],\n", " [7, 3, 6, 4, 9, 1]])\n", "\n", "max_pool_layer = tf.keras.layers.MaxPooling2D((2, 2), strides=2)\n", "max_pool_layer(tf.convert_to_tensor(X[None, :, :, None])).numpy().squeeze()\n" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "e4Vsrgyudd2E", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## The CIFAR10 Dataset\n", "Now that we understand convolutional, max-pooling and feed-forward layers, we can combine these as building block to build a ConvNet classifier for images. For this practical, we will use the colour image dataset CIFAR10 (pronounced \"seefar ten\") which consists of 50,000 training images and 10,000 test images. As we did in Practical 1, we take 10,000 images from the training set to form a validation set and visualise some example images." ] }, { "metadata": { "id": "flWYFg3ydvMU", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "outputId": "fde0791b-3017-4ff8-992f-8c56235eb469" }, "cell_type": "code", "source": [ "cifar = tf.keras.datasets.cifar10\n", "(train_images, train_labels), (test_images, test_labels) = cifar.load_data()\n", "cifar_labels = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz\n", "170500096/170498071 [==============================] - 28s 0us/step\n", "170508288/170498071 [==============================] - 28s 0us/step\n" ], "name": "stdout" } ] }, { "metadata": { "id": "QSzdYWpZd8RE", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "# Take the last 10000 images from the training set to form a validation set \n", "train_labels = train_labels.squeeze()\n", "validation_images = train_images[-10000:, :, :]\n", "validation_labels = train_labels[-10000:]\n", "train_images = train_images[:-10000, :, :]\n", "train_labels = train_labels[:-10000]" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "x8jf1myGQP1O", "colab_type": "text" }, "cell_type": "markdown", "source": [ "What are the shapes and data-types of train_images and train_labels?" ] }, { "metadata": { "id": "wzLutGn-P7mg", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "6106a826-e509-43ca-f75f-2245feae6601" }, "cell_type": "code", "source": [ "print('train_images.shape = {}, data-type = {}'.format(train_images.shape, train_images.dtype))\n", "print('train_labels.shape = {}, data-type = {}'.format(train_labels.shape, train_labels.dtype))\n", "\n", "print('validation_images.shape = {}, data-type = {}'.format(validation_images.shape, validation_images.dtype))\n", "print('validation_labels.shape = {}, data-type = {}'.format(validation_labels.shape, validation_labels.dtype))" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "train_images.shape = (40000, 32, 32, 3), data-type = uint8\n", "train_labels.shape = (40000,), data-type = uint8\n", "validation_images.shape = (10000, 32, 32, 3), data-type = uint8\n", "validation_labels.shape = (10000,), data-type = uint8\n" ], "name": "stdout" } ] }, { "metadata": { "id": "ynwzGIAneBbb", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Visualise examples from the dataset\n", "Run the cell below multiple times to see various images. (They might look a bit blurry because we've blown up the small images.)" ] }, { "metadata": { "id": "8nMTxCOjd9WW", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 589 }, "outputId": "58a6e003-6b73-414c-80f3-2c7e2a79aade" }, "cell_type": "code", "source": [ "plt.figure(figsize=(10,10))\n", "for i in range(25):\n", " plt.subplot(5,5,i+1)\n", " plt.xticks([])\n", " plt.yticks([])\n", " plt.grid('off')\n", "\n", " img_index = np.random.randint(0, 40000)\n", " plt.imshow(train_images[img_index])\n", " plt.xlabel(cifar_labels[train_labels[img_index]])" ], "execution_count": 0, "outputs": [ { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjkAAAI8CAYAAAATJrreAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzsvWmwJNd5HfjlUnvVq7cv/bpf712N\nxkqAAAgQBAFwE0mNJGvxjOzRjOyxQ7ZHnpAUnpFjIjThcVg/HONZIjweTyhiPDaD8limRVOSGRQp\nSgRJgQSxr91djV5e93v99qXq1V6Vy/yofHlOAlXdDaILIIvf+dNf58vKyrx5782sc+75PsP3fVEo\nFAqFQqEYNpgf9AkoFAqFQqFQDAL6kqNQKBQKhWIooS85CoVCoVAohhL6kqNQKBQKhWIooS85CoVC\noVAohhL6kqNQKBQKhWIoYd/oj2tbtdBf7rru4M/mbTCMyP/ew3GMnvEPcaTgX7SF5/NfLfqeH96a\nPzuZeS8n2RctR+h+euF24xbalvfgNjR7vSbzztw+Ru+Ysxi4tJ3b1vNofzqoGbm3fEzs49GB6vVG\nGDcaTRER6fg4eIe+yHF6H4N2F8/rYH8XMY+XR+46ddvv5yvf/q3whM5e2sL2NzbC+PLiThiPjqXD\n+OFH7grjeBKntrmxKSIiz7/wSrjt/gfuD+NsMhnGmcRoGF8oXg3jaxvLYTw/OxnGC7PYfzSDtql3\n6mG8ut0O47NvrIXxdqkaxseOz4dxykqF8bk3LnWPPZ4Nt83O4TuPnjwaxrlxbN8KrllE5I5Tp8M4\nnUiE8VuLb4Tx3/21fz2QsXnh4tXwfvL4itkxxDFM17aFgWdSbFk8NrtxZOyamKM86qO1Gtp4dXU1\njEulUhh3OujfnTZi/gLu96k0+tyxo8exPYXtNA2J4ziIg+PwuPd4TLuIDYOvqRXGz/3Ffwzjsy9+\nN4w3a2ivL375T277/fyln/1weHIxC/cslUSfymUyYTyTHw/j0Qz6bzyG66o2u/PW6uZ6uG15HWN9\neQNzwHYVY6rVwf3gJxLP/4022qzVxD1o02cdmv88H+3n+zd/thrhZ/s1Nc2tkZQ2ved2w8R/LAtt\nVNuu9/wCZXIUCoVCoVAMJfQlR6FQKBQKxVDihnKVSVqER7zhe5F89ukov6+M0YfyepffybQXX8d7\nk6v2j01UMVFtBr0zGuaPXibpDphI8Uh9tG2+AbQP7eTS/feI6tynkJn6ZmnHtq137Csi4tM+HaKp\nm3RslylSj7ezduX3CqWfutpsNsO4HVDuPtGfbkRm7N3n+Vw8g8aI8D69v/92YbdUCePDhw+FsZ2a\nC2MjfjmMVzcgQbzy5tkwzmQgQVUr3bap13Hy01PTYXzy2EIYx+14GB87ju///770RziXGOh5kySK\ntTokoo4HicojqWVmJhfGIylMU0fGsX00Dtnp1BMzIiJSvHop3MaSk+Oijz3/6sthHCOpo9PGudx3\n1z1hPDY+JYNG2+nd1wwT223qmv1mF7+HxMv9tV7bC+O9vXIY7+zs0Oewf5IkSj4vHoM8v8bikNc8\navOLF4thbFnYh+GRDrw/h/hG79/hPH+w3F4pbYfxtSsXaX8c2zd6f//twvH5g2Fs0fnHaC5MU7uO\nZUbCOJOCBBu59GBs5JqQs1J7uJfxOMajbdGYElwrS0uOh3nQp2UWvBQjit7PCEN6y1X8/MXm3nN1\nXxjcx0jCJdmW5ap+UCZHoVAoFArFUEJfchQKhUKhUAwlbihXMSIqT4TSp/ck/+ZS0L7rqL9qdPtl\nnih19sPLVaBxe68Al/fgqHo/sEtSjdMBpdlownFUrcBl0SEHA7sg2GWx74hgtwW7ohJxSAb9isHy\ndr/PSnt2XnQccjE55ABwcE3NFq6pXofbgM/dDY7ZYgmLPteKxDhGrQ6pyKF9Oi0+Ds7lp77w+3K7\n8epLV8J4p/5WGF9cBIU9twBHy9QMJJfLi5AORkfzYXzvPQ+IiMipk3eG2/IjY2FskYsnkyV63Mb2\nBx64O4zbJI9evAIZKZUDxdzuYPy8+hyu4yN33xvGv/iJR3EdObhS7DZJEIFr6MyZQrjtTfpOn2SU\nMjmGDh+EBBeLYZ8E0f+5cewzKFTIEcOybjxO7hw6p7hNTiuKmdbfn2RZhltdWQxjl+Rom1xcbZoP\nrlAbXroE+bNJx0wkcF7cbidPnAzjkRH0szZ9lsd7VPL2gnOkOYj+3umwIwjjrtmgMeuhX1bIPdZy\nBvvbfmFuNoxNej7wrYmTdJVJQspNkYzFjxaz1T3nbANyViqFuZUlHH4m29SnDRNxh6XPFubE/k+w\n3lITP025H1q81IVcp/vge+l7/ey4GN8sg2bSuG6ek/pBmRyFQqFQKBRDCX3JUSgUCoVCMZS4Zbmq\nP5FFOsYPqwRFDt37IP2kjls6fCQx3LtzifVz1eyD6WGfs8S9h+SFg8Kf/+ClMHYoARTT00wli0cr\n88n94Tv4rBvIOOkUaOoOrdB3iT4+ffhIGHOyxL984fthvLWJBFc+SVSu0zvRXpssYy4llpvIgQKe\nnpgI470KpIp9xxG7QGy2NNA5RlUAWulPi/vTtFO2Z5bE24c7zyCh3/OvwUViGGjvmA3q+/IVOKom\nSaK6/wHIQjNT3eR9pRKOsbkJ182BWSQtS8QhG62vXg/jchly2YH5w/jOcVD4L73yfBhn03BIfepj\nnwvjX/jcZ3FeGUoeV8XxTZIyGoEMmRzFvZ6cOxLGG2UkSzN89J+d0i6OQVLtxhb2X8gdk0GjRuOE\n56tOB1N0iyRhlgM4ZqeTtZ+ILmI1RB/dK2MsXL4C+fPs2TfDmF1RS0srYex5vZ0vfO6PffRjYfyZ\nz/xUGKfIQSR93Dn723ncRWfXPvMrHaNFkrxLLrpsPi+DxMgIxgavYODEpayyJEiKSSRJXqLlH24w\npyZZGkxg34hMGXlUUuI+arNYnGUxzJuGYfaMeTqzLZaO4HbMZHHdrGm5wfOCE042m3iG8H1lB5hJ\nzqnRPFxl42P4zhuse8FxbrqHQqFQKBQKxY8h9CVHoVAoFArFUOKW5ao+fiKJJg/6IeWaSNGhd6Gg\n/RCIOHn6SGARiapHLY1bkbl6SVsfNL79n/5tGDvtZs/YJYcSU60GSXExvuedLs1+F7laDh2YCeON\ntaUwTmRqYXzqzB1hvJjC9lINtHkmA1rbp4SFNtGYnAzK8CBrfPwjcOScOIhkdRWSJy4HieM2K3BL\n7dXRFmYfGSCS9KpPXbTbkXTyRijvQU45fBRSUMNDe5QrkJrmJpHUb2oG7eQ0QSG7nW47rK0gcWCt\nBhklbqFDLJAraXcHx+DkcbUqPruxDBny1KETYXzfvQ+G8UfufyyMZ8ZAT3t0HZ6BvhdLkiyQDPYn\n+TI3jr/PziJB29EDcJo999JzYfzmxQthXLwIp9fhozjfQaFN0opJvz059nxcG3cv2+TxwPPnfjZA\nfG5zC235ysuQr7/xZ18P48VFuKh4Tvc9PheufUd707z39NNPh/EGydAjOSS/Y3mC3W37Mdfi6idt\n9RtrDUoMODuFMbLdSvXa/bYhnYSkZPY5Z5au2JHGSf0s2sfZl6vIUZWkBJuJBMZdLI45rCM4nsNJ\n/6jPjIxA4k1N4Tic8LFJUmma6m7xOfK87JBzr1HvJp1sNDHPshmsw0lXSUrO0LXOTUJinJpA7N3C\nKhZlchQKhUKhUAwl9CVHoVAoFArFUOKG2pBHdVN8v3fJdkZkZTRTczeRrnjVt0fUFdcCMsgBw8cW\nA5cQITaN3nKRwfSri3c8lxMvsXrG9ZACitYy8Z2R2ipcdr5vDZAPDqkGpKMYLe8nE47EiHK0LaJA\nbU5EZtH27nHiPujM3Qug/WuroKlfWl4P44yF4927gKRhfhWr7rdJ7shPQALziX43OtgnlcI17W2j\nPtKXn4F7a24Kx5k60K3ztLaHc69SEj+m3h1KPpYgSebkqaNhHIuTk2HAeSFbVPNpbRs0cG4E53bq\nNGS6I+RsW1qCG+r8hfNhvHilW9MpP4Y2yuUgG7Ez7fx5uJzqNZzLmfs+HMZ//JW/COONt+AA+ye/\n8w+w/5n7wrjT6SMlcw0sG/fbYCdKINPF66jH5FVwz9Ik11lNjN97Ds7j2NSHv/nmq2FccdC+g0Jl\nDzISc/AjObjP4gnILDWi/jmJnk3jNJft0vouZfI0EpCK7rz3kTDe2sb9XF/FOOV5n5M7euTObLZq\ntD8l8KQ5+8UXXwhjln6dDj1XeiRt7ScZR2oTsnxNSQ0XZpHIMpfDHHN9DXLsIGDzedLTMlKKqs91\nSW91LpTlWdLj5JDpNCSkRArtXq+hT9sxThqJ88rQZ10ag2lKupelhyInYzWo71nkYHPo+bvf/1jO\nEkocKNTHLPqefA5z2cQIpLkxWsZwK09ZZXIUCoVCoVAMJfQlR6FQKBQKxVDihnIVsZPiRVaz0x+4\nXhXFzDb7PeSq6CEoWV8fMSxONGSHzT1+7/e0SH0Npv1YRmPaNOJWoOug2kSmdGk6w+R6TP2a8Ecv\nGeAoraIfJRliehJJ3liqs0zQoVz3JOI0ClbpmyTbeTUkl7KSOHaZko996/uQkEZHQKFX67i5o5NH\nwvho4UNhvLMJOv3aOThEtihZ2dkS6H+XahztlCGt5AMq16PaMVYC7ULkqjgGORaonyc4GVYabeTd\nyrL/94DJabhFzl1Cor+9JuSaXUqcd/ESZKmx/FwYp1JwKly52pUzY0lsGx2FEykRo3bchrvLp8Gz\ndh1SQIuS6/38J+Ccmk2hneoby2FskIRqRGodQQ6xPMRepOZZ95i1bbjzOkSlpy1Q7I1t9J/qKvrM\nJCVas2meuHKV3UaDwfVLL4Yx12ObmSY5LQma/rnnvxfGXIuL5Zp7731IRETufwBJ+WYmIUVm0jge\n5aOTagMOxFgcbbxMDrmxHKSgOMkQy0u4/+UKjsOJB8vkZmTpg+dMf9+dw05GHlM8wdN8FKckdzsl\n3M8rb13Fd8YwDw4CbbomngfMyDOGJS1aokHSjWm8063Ec2+Mlg2wlGkn8eROupi30iTvdjqRp3sY\n1RsYs/U65o9ECu3K8iA/l12S9KtV3ONQrrLx3BSP7yvaK5JcldxVcVoKwM/nW2FplMlRKBQKhUIx\nlNCXHIVCoVAoFEOJG8pVbZKFaIF+VP4h2tDicux0nF5yVeTv9B+LKLjNLSRzurAG6qzS4ZXZ7Ogi\n10+cqS5KoEQrzBNxSmREcYIoOMvBycWDFeFJOsdkjJM64bTImDZwp82toumBcvRjkIjGppDYzSTq\n0qKLiCTcitQ02W9PtIlJ8tfUUSRhY1qUa2c165C3Ll/BPY9lcY4dojRdoitr9L35GTidpo6cDuMc\nSR9xchLsZ6RyI3Ip06iIm03IJK0WKN1YkpNwoQN4fm933+2CQ8m5RschHaxcgYNuaX0tjKfH0Aac\nGO/+D98dxnMHutLb5UVISDxSE9TB5w/gGKvL+J4WuYTuOgZZbGECdHp1fTGMjakDYcz3YTRLdXsc\njH2/DRrcTpCLJFCVy7uQVNJJjHWnDIlqY/Ea4mvkOBxHG9194EgYr1GbDgoW10kjzr5U2qS90Can\nDkHGMhZwL3bLaP/vfvOrIiIykqbrugfut40ttMO5ImTfegvH6LQgS9ZJesmQi+tnf/Y/D+NjC+hP\nLM987Y+QiPRb3/rzMD5/GfJis0l184LPmpQMkEcUO8ZM6qMGJ0OkGktjM2ivmgdJehDYIzmOJVXO\naxipBUVOo1iMkgHS+e8fhWsLdrieoMXPO4yLiRhLRPhsOsH1sjCHHZyDDL54Ff2j1sD8l8tjXs6Q\nBCZxXEe1gTaoVLrze4qfyfQxn1x48RjJcezGYtceybmuJgNUKBQKhULxk4obMjlRtoXS59N2Xlhl\nMJPj89sWLSgMfnl7BuU6oUVFq5TD4Crla7jewKmu7+GNtFSiRYlUkqBNKcjtGN5UefFTmlJh57KI\nE7R4zaHK1k5Qrdvq4A06lcA1Hz4MBuOh42BHuLI1502I8luDp3vO3I2K0yblmuFfDzZn/qYsBNE0\n6sTaBHmKeJvH2QvoNTpSITmGX/bpkckw3trDff7zb34njHkh29gYmIv7PoQFyQtHUfXa9XpnUPAp\n983+vbDoN6IbYXIojxIdzxP0M2YeLfpFZg6Yvrt4EQtmK03cS2ZN7TjauN7A+V+8jJw1d92FkgVn\nTnerbV+9RkzHJliaehXjgisk50eQy8Wkn1Yn5pGbZsxCm5VXsAi01aaq2HWwexYtdM9mcR2ej77a\n2sHYf/31LiOwTtW07zyBPEFJF+xEaRXX1N6jRbC0UHl+Ggt0zdjgfwu6VI7DolwonBPMJoZZqLwF\np99PZXHeH3/ySHdXyuv11T/7szCO0/dYFhbQ33vXx8O4SuVDSuNUnZ4Wb//hV74Qxh/7CKqNP/k4\nqspP0D3MJ6m6NJsOTDCkrWDxbr8F/PwLPk3MV5bYRi4xkiAms7o12Bxm2ztgo/n8uUSFSXlkuBRH\nZC6m59b+3NnpgMHdKaP/lym/GFcPH6PnWr3J50L9jSi3sTz6wW4OhgzubzYNhzi1PZfrWKf+0QnY\np5EM/s5zRrMGs4RNpWO44rpP46NJa9Xbzs3vpTI5CoVCoVAohhL6kqNQKBQKhWIocUO5anEXtJvt\ng/YaocW2TCkxHZfghagkxTh+l1bziKJbptwaV5eRcn6MFkE9MoV8Hd99cRHHpte0kRgWlF3doMWK\nAn5rew+5G6qUB2Z5DfSh7eLc7Bil+Q/OfZzyS6RdyF8Xf4BzN2hR2GNnjoexE5FR3t9cOrOzaM9m\nhShCoq3jvNaLaE+DVxHSve0Eq9PbTdCl0fTrvHgZ2zMZokJJztymxbKXL5zD+TaR72FvFFTn9Dji\niQnE2Tzo6UhOJq5aHvzB4xTkfm+5yqOFz55P1ZJJomIKeNBV6J9+5k2cQxr9eJIqwKfTkPWcNsbg\n5CS2v/TiK2E8NdGlk2emIR9Wqd2rVMHdpTWijQr69M4aZKHH7sDiby/2TtlXROTV81jw+uxLyPfz\ny3/tZ8L4ww9jsaxBi+c3lyHZfe2r3xIRkddfRj6gz30MUuax41ic26Cq5o0a5CryHkiTypFIlhZv\nDghtyltiUJ4Vk0sykDSwSNe+uwvZ4qmnPhXGR4Pq6TvbuN6JPO5DjOUQWuTq0kLQNmkDzQaZAvj3\nsYNxt7yEhdJf+9P/FMZbVyjXkMHmD7StkaW5sdE9PpescCi1i0kSXI4WmM9mYSzYdXHubcrZlIhB\nkhkE9vZ6LzyOLOcgSd+ntuQ8RxwbwSzmUHusbOEZV66inyTZaJNAXK/jvMo0BtP0HHxrF/ep42JO\nd2mOzGZI2rzn/jCepkrvY6OYQ/74T7sL4DkfEOfXSYzguc3vCvzIqTepqnm7SdtpIuoDZXIUCoVC\noVAMJfQlR6FQKBQKxVDixnLVEqgrm6h7XpVvEjWWySCeSIKCSpJTouN3OcftHaT53t0GDT5GlFcm\nD1q91gB1dnUVK/4XDkPG4pw969ugcLngKfvwJyZBu62vUD4KF1TezAGkADfj3WuazOF6xsfgIFlc\nxnV8/004WA5Ngc5dmEa7RBQNcq8NCs8880wYc96U++66I4x51X+kYkakNDu5joLiH7t7kL82yBXH\n1XHn55ETxaYq5LuUlr54Ee6YMrltuOpwi/LXvLWIHCbpMbjb7r7nrjBml0UvOFR9OpKMgyjxftWQ\nDY6N909+XFwC/X7PvUfCuHAM1ZYXr0FyeeM8+qPvQbK4myqVu0GZ6YlxKvNBrrbRLCTGzTX09ZUl\n7PP663BmHUlj7ByZw9ywR/JKbgTjZ+YAxrInoKRdGo8uycAObd9PQnLiTvTliWnMH9tbkEGTlM+D\n71mrgXbhUiAtf7BuHBERl6QVzgPCco3XoHOi85uYgkQ5OYVrNoK5lvMbTYzD4cISlRPJiYa56Ohx\n5J5K53APl66iP5V30RfW1iDZ7+xB3ppIkyRBJQgsKuWR4CrZwe/vWhP3JDeKfjm7cCyMW2V8v23i\n3DM0HKska+zSeQ0Cm+U9+h/l+aGlClz6oU192mU3Fsl6ZtBO7DUr1fC/FFWXT9IzjiUn28L3zI1h\nrFXILVwmCaxRwbzsk6VqcgHj+pNPfTqMR3J4zn3y8SfD+Ppad+y99NrL4TbHofcDep/gCbhFTrIq\nyWttqutUa2Ce6AdlchQKhUKhUAwl9CVHoVAoFArFUOKGclXGBa08S7JUpw3qqNXCe1K1BmquRPJC\nPg5p5M2A2p7K43PTc1iJ3eSq5lVIIIurOJdqG8vsR9I4r60yaHOmupgObDugbteJmmtS9evxPOiz\nJjmC8kEq7FIJUkHbwXdmKPFSswna9NuvgNr9xSeRkC9ls6tn8O+b/+aLvx/Gn3r8o2H8yIdA8XOF\nd99A20ZSp1O5h1hA/Tcc0KJvLb4VxjMToEXnD0Cu2loHxXz2jWIYb5A7x6F3cJdkhT2inifofEsl\n9Jdz5+CyOUpJAicmQHlfvNg9z6vXIXnFqSL5NJUcmCIZwLRuLlENWroyKQmhTw6cTgv0bYXoZpsS\nGJ5YIBfEFMZeLKD6c+Ree/m11/B3uh+NKho+S8kc01ncPxZgq1WMmQY58aYOQM786U+jUvnYKLa3\n6LOtDq6Dc/R9/MPdPpwZAZVe24Zrs1GldPgkS3VIM262SDJi90vixnLn7QC79OLkiOHyBRaVUri+\nib5uUUO8/gbu1x0nz4iISIZkBKtNCR25erdNZTRIMuFq2bPTGA/5UbTz4hWMd06C6ZDMxxXE05Q0\nLjeKe5FNYewtLS52z4XG992Popr6wQJcPUuvwqHHsp9FDtLlNciVpb2bO3LeC5a3MO5Y2nYpg2GD\nyrKw5MIuO4sSrO4vEbHoePPzmNcOzh8J4xi5nHerOJejVApkLIv79+K5V/E9aTz7ttB8kbUVGXKw\n+TQeX3nx+TD+xBOQq37+Z35ORETeLMIt26YbywkQuZ+0qKRSnVx+NYobLa5i3xvK5CgUCoVCoRhK\n6EuOQqFQKBSKocQN5aqxGDmOPFCJHkkXaYNW6FuQAq6XsILd8EBhL73VXX1/8slHw21Vl+Ukojs7\niK9sgHZrUoK5779+IYxrNVBXRp+kbg7V4Ngtg4/zaf/JDFb/dzymX7vf26FaQS0fVHomAxovm8Hq\n8beuwHFwbgk1re45RU4H5+a023vFE089FcYL83BkeB3Ij4adok9QYiquY8UVtoPYJxrV41dnok4b\nJDO99hKoywvn4OJr7KE9U+ToqhMtalP9ojolqLv4JmSQOlVmrtcgdT74yINhHAukzliSE1q+09Eg\nEk2GaFLSP7OPu4q3DwILRzDWHJJml1ZAy49RUr/5GarFRNTzyjolwwvcLTGqeZWjCtbXL6Ef5/KQ\nvP7DV74Vxlkb80TsbvR118O9SVMdI6eKucG0cR3JHMZSZR1uyraPfpAiKXkuSNhXrWPe4XpnTP2b\n5ODgZG0NksG5D9f20H8GBko22SHJRZKQSbPjkH6PUeLTRBJtlaa+bKa780tyBPcwnod0Vanje1zK\ntNchJ0uDql632NtjQ/Y6fAxyN88N7Lra3Ua/jKfIXUUJCTPU7+xANv7QnfeE2+75KCSQ3T1IPAm6\nPparNjbwnYtv4TlhZzAuBoG1HSyDMMntxVXDazQX1km+dViepPlkv4L38SNwux07diqMDx3AWBsh\nF2SZJHwjhu0XrmCJQHwFjtaRDThjEyRDt1PoY5Nj6ENXqA7et/8S7t07TqNPPPLQIyIiMn8Ac/LG\nDt4tuOYfy1VNcn012pQMkNZUdG6hDLkyOQqFQqFQKIYS+pKjUCgUCoViKHFDueqj86Da2m1QapSH\nSuodUMnVDmg6g/jendZcGE9OdD/8wsuovWNNYtV+jeinPaq5UiIZo0H0fMWCEyFOFO5IFrRtxOlC\nzqB2nerCEBXrUfIsTgO2T+m6tDLcbZHbI47PpcmtYBOF/P0iErSxTHd4Auc+ByXituL4XXAkWC3Q\nmG1KUsWOlf1kYt3/UJJAohTdQF6MExU6N3uEjoF2uHAZLqaLS5A+ru9AYqhsg8Z0HbRtgqQJn+jd\n9Spq+Bg21WmhPtIkKXCW5Jzjp7o1xQ4ehkuB8775lKCxVqMEX32MU5ywcNC1q6wYqP38BBLqtX0M\n6ZdfvBTGbg30/ofvOoLPToGGvnaxOyZzHyEHoEHSFdH8l6+gH5fJbZhMEq1M7pY2FUWLW5TwzMS9\n8V1yPdG9d0kq5O1NovzXt7t9yGdZiuuU0b1herzdJudWC/3KSqC/lXYwDw0KaRp4HiWBu1KC5LZS\nqUsvpLK4tpE4JS8NbkWKkv7NT2JyGSX/214dbVkl91mC5rdGHdt3SYrieko8NCbGILXlSDo1SK5a\n20b7ry9dDePpse51nD4JScahJHstkizsPJK68q92dsXxOXI9sEGg0aL6SybiDn1vjVxBLMWwfMrW\nsnvv7tZhe+BejM0pGvepDNXqI6n84EHIWKU9yJD5PD6bX6AlFFPkEM6fCOPLgjY+Hrj2RETSKXpH\n8NBXLi9CArvn7u45s4R17WnM/x3KRMmyaZuk0ia9f/AccCt5OpXJUSgUCoVCMZTQlxyFQqFQKBRD\niRvKVaka6K0YSRdZouITMUgEvo06OFkD9NlOHKux5850pYFKFY6FNrmojBa+xx7B6aUoMd32Nqhy\nh+hmTiCWzhE9TrVqKkTFru6Qa6KG7StUs2hyHDTdWKpL+zouuauaVDuDXD9VcnDUmzheawe0W+0s\nrmNrDsd56AScK7cT2ynIghNM5RLFbxPl2CIa1YiD8ub6MPsJrnJZUNP33AMXyCsvIdHUy29Aolwm\n2ShGtaXyRyAdbdE+Lbo/2SykvQVK9MeJ3daugw7dPns2jE3qC+NBbbQZSkbZiTjH2EXFtbtIlqKY\n5SqWNAeBayuQCxaX4Dxkafb6KqS/I3SN955BfavvPftCGLc3u/3RJ3nmrTcgMU7MYHwvXVoOY5+k\nsNkxjBfDRV8iRUtSMXKT2Giz5DT6/UoL92ltG7LXSJ76Cjn3NsvdNkil8f1tosENGrMJupUsUTlE\nlTs+JSwcH6wbR0TEZFdfHNd34QZjAAAgAElEQVRYpn7MbqhcCmOgSfP0+joSIBbNroPx5VHMxScW\njofxcZJp03nsMzUFScujOnE1SmA3PgO5wydJK0cJ/diR2CC54fhd94XxMZI+zr/yYhiXq11pqpbA\ndS4vwoVZfAV1kFieSU9gHuLaS/MkyVBzDQY0P/o0Hjnmc+ZEsJz88ZF74Cx75MGHRERkZATP0gzJ\nfm1K0GtSvcBmRKbF98+MQda8WsZzoZrG8VM59PvjVLdsLI1zXC9jYNcoEen5i3CzecE1HV04IgDa\nqEQyJDtFOcmpS+PX9dnpKzeFMjkKhUKhUCiGEvqSo1AoFAqFYihxQ7mqkaRkeWS06XiQI35QQsn7\ny7ugt3broK5qlAzQCGgqm1xRnDiNyrPISBLUc3oEycyyk6BZPaJKDVrbzyu9qxVQag7RrxY7B65C\n0thawspwdwYUur/Q/V6u7dJxSNKoEd3t0fXvgUKenyXnFn22Xrp5yfj3itWr18I4MUJuKRPUJbuo\nbIqtiIxD98uMBf+iK3WoDtj6OiWC3ILEsnAGK+3zeSRFLJGjrkp9aJ22TxH1PEOxQW6ao+TKeP57\n3wvj5UXIL/XNrjMwNktyRIySW1Kf56ReJv024MR6PieZ8+jDA8DrZ9FH4yR1zJDTxCKJ71Ae480r\nwZGWdTA2Ti50x9gISQvpJo7h7eIe5IhW/uwDp8P43sPoSwkDbVCq4l765MjwSKq0PUgT33kOzrCr\nq+g3M5Og4n/xCfShVnAfnDolsqvhOsgsJb7Zov/05rtZuuqQs3NQ2KXvWN2BRNVoYb6Kk8Rc4+Sc\nHtozR/vsO7balNzvpVchT752DvLxIUoyd88dd4bxSRpfWaoxVLMxTjpx9IXtBr6Lk7lxIjyD5grr\nAJ4f80lIJVOBk8sgJ954HbJGMo05Y+06XFlrV1FHa4tq6HENLsdAPxsISA5laaVDErZDLuKMjXP7\nyENIVvpTH388jFeDhJhVQRvY5Ai26X5YVNeuQcs/SL0VI4H9pw5hrlyhZIBmmhzKNH6ub8BRXbyC\nZ8rWFuaHzU0sxbCCc5ubwrOUl7nscXuRLCX0nOU4kuhXbq5XKZOjUCgUCoViKKEvOQqFQqFQKIYS\nN5Sr7Amsumaqa70Kevobz4L6vbaB1e8prtlBdHo8kBT47YpXmpvEi3HtIJtWhseImvMNrObnpELN\nlkUxqNImSSnby3CfJCy4Cyan4RxIZLBav1zuHqdFFP7IOOhzk6izEaYSLXJ2tCEBOquIWzWcr8hT\nMgjcNwJ5Lm5w0jbcQ4OStplEqXYoaVuDXDPL691raHZwj68vw3lz8TrkoTs+9EAYnz6FPvTtr301\njF97+bkwTmdAvfs+aPDSLuS/b38Tx4+P47595ud+IYw/8rnPh/FLz3w7jJ+/0KXrRw8SjcpJtajf\n2iRjxbm/ElvaIQlnew/3dhBoUcKxZIoofXLBHTwOWffOcThmDlLdobn7PhzGmWA6yJNkPPtRtOnW\nHvrJPQew/eAUZIZ2A9e9S9JRjSQTgxJRcomvxauQ0Z59HrXNvHie9sH9fvgOyIyxdHceqJTJtUlu\noPw4ztEjGdQluTFJ0tnU7HwYO4M1ynXPiZwkDjm+WnXMHekEOVlJancscrtQH/QCGWQ0iTlyYYLk\nRJpfS2uQyJ6lmn51Srx2+BAkrbZr0j6I92iu5bpXnByzRduFpAczAwkqHrjHODncaA59ODWKMZs9\niH4+ffKuML449iziH3yHzn2wSwNsmhQckunYlcsJVZ969JEw/uWf+/kw3i6hL49NdNtpdw+OsVIV\nzyGHpME4SZ8udd4E9QNO6FujvjQ2hXFd34NM/NI51LpKZ/HMi6UxZkZHMcYmRjE2E4Hbi+s5Wrz+\nhWQ87icGr5C4BVmqH5TJUSgUCoVCMZTQlxyFQqFQKBRDiRvKVUkbLqqqhbjSQbz21jfDeIlWXacp\nOVzMBE0miW7MSctscsVYtJqeZSybEn9RaRehhfpiUN2eOrk5TANUucf0aBb0WnIEdTrSeSRZitH3\nmu0uPZhqYIV7ghKhmR6oYqON7VlaYR/Lgepzidp3zB+ejrtVPPkw6p64TZwrmYIi8gspjuII6MU9\nOu+LF7sun+VFrKZ/8+IbYXzgOJKPHT4ICcAjGjqRQZssHIXbYmIcfah4/nwYHzmKe7WyCukqQwnN\n2HGUnwQFe+QYnATff+77IiJS3sD9nDmIhHeHTuBcFuZB83sdyAku1f2qkpPh8jW0xyDw6GOg5XfX\nITXkc1TTKgf6P0YSVamEG57Pg0JOB7RyjNxHo5Q5b3wUckk6hvaNOUT/j+EeNKlmEsseV8+/HsYG\nJQXLUY23MrkzlrcXw/jEEdzLJDmJMtOB+9LFHOSaoPOnR+E626qD8nepZlNmDG1ROI1+kqd+NSh4\nLsbjDCUgbbuQDDY2kBwzNYY52Cfno+VGrCoiIlLqoP5Vk2o+HT90EJ+jpKaNMmrJvfQyku7ZlKTw\n0AjOMVaHrJIkKWqngnFlkQy8S3NjixLIJdLou/uJBH16HnQ4CRxdZj4PGcuK4xgf+vTPhPEoyTCv\nfRvS1SCQoISjJmWrS5CklMxiLCXz5FY+Bzl2cwNjYHOre+9rDdzLGNVg4yR6YyQbjZK0NEFjM5nF\n3FDZxf1eugapa2cb29donp0/iGUsR0n+fPjBh8P44w89FsZWcLO4XbhWJPdfTqgacT5Gwnf3rFQm\nR6FQKBQKxVBCX3IUCoVCoVAMJW4oV/kOZJ7iNVC8Gx3IT24blGR7Ec6YDjmgUtOowSHJLn3G9Trs\nLCUwS4NSS4+DejwxjuOdWCCnyBj2OX8WVN+XvwmadWQadOAI1XHJH8B2q0NJz4iu9TqgU72gPXyq\nl1XbJbmKXEe+h+sziFbc3gHlfPAAEhwmJudk0Jhihwk5pwzO9MS0IO3jmqCK81TbZszq9oWLLpIp\nHiYJwEezSudbcDv4CcgUp13sdAc5pByqaZZP4TtHSlRXSEChp1qgbM0XkfRMKKnkGZ+THXb7VHIT\nVOypu1HXaZQS6LWJJvbIKbSxij63tYd9ttchMwwCv/MP/2EYX7mKvr69hWupljA2SUmTl3fhKjTI\nVXNgots/0tRf81mMlwwl8EqSlpkkWTlJLjRJk6ZA8pZhg0KvU+LB+TuPhPHpM5A5r33n+TAeIyfX\nyBgcHGan2w/o1kizg7ZIxnC+ZLqKJNIz6Jpq5CZMZm44Td4WdDo0ZqiPZilp2/oO7ufeNpK2xege\nWVTTaj95YIfa+Px34S6M3fchfA/Jyqtb6BMWGaHyzyGp5loLEtVbbyHpXr2GuTEeR385dhxuyg5J\nZtuUYDJPMstYMFfFE5yQjvqQQ+5Cyr5nkQzuUe2sNtVU257B9wwCcXICk8Im6RgndsR9vXABc+dr\nryNBY7uBtjSC5I9pkvQckjjLe70lySzVscpTnCO50fXZ+caSIMZ1KknJe+kZUd/F9z56H+SqMwXc\n7/0aYg71Q84uyA7HfnIVzSTvGsrkKBQKhUKhGEroS45CoVAoFIqhxI3lKqqp8b0XkJzrmSIotd06\nKLMMlYGPO3DgnLof9U+SlUUREdl4Ew6LzRpo5+bJj4Xx5+8Fhfr5uyBjZNIkBRmgM19+9qUw3llD\nYkJm0KcylDhNQJVuL70axo0mKDvbBj0YvhISbRojCj9BUpuQu2e3CumiuoLzKq6iHP302Edk0Ngh\nutuKMU2PfWySFSxyvnDtlzRtX9vsSnsnxrDK/rH/DIn4SiSZlNfIcdQkerWM7bvLkH9q5C44QjS0\nT26e1Cxkvhw5KFzqF0KJy2YnIRF+9KGuw+DCVbjBDo/gfo4fgZxZbuA7jRT2aZFcmyY6dm4a8tog\n0KzAHfGpJ385jPcakA7WdxA32pAEG3sYs7sbkGabte61bFahUTSTaHeDJBWnhjhF8laS3ItxcuNk\nLUjctQTG11YV/SBNEkhmHPvPLWB+aAvuw+I6zn12bDQ4d5xvLoH5aIfmqSrx7bEZ3Kf2CMZ6OYU+\nU/UhG5DwflvRaPZ2HFWo/laJ7tUeJXCbPYJkeCZpcfGpbl+v7mCeWzmPuXuaHD4TxzDXWjR3eTTW\nXvkepK4M1WY7MA+XFjsyPZLs36Q6WT4lf2N5Yuka6rH5gWsxRvNRrY4+3GnTfc5BouPaRzbVcGLp\nYzJHD4QBIOoWInmcriUZxzhJCfpXPosxY+YhL+3byTjB5Q4l5+zQfSpV0E6bu1hmYvpojzidSzaL\nsZZLI05Q8skMLSnpkINug1xX5RJ9Fzmm99uA3WBclsql/tCvltx78R4rk6NQKBQKhWIooS85CoVC\noVAohhI3lKuabVBXe+soZ29T/aeDU5CiKkkkT9t3roiIGDakg0ZQhyZ39O5wWy0OWeDwHUg0dNcs\naEimPpsmaOVzb0HeePoHkB0scuZ4K6+E8fkLoNdOngBFy+VM4nHQhHYK9GEsqP3hEydL7Lx4XFOL\n5JUZqhv0+P13hPF3vvF1fA8lEhwUlq5d77nd5KSL7IKhRIgJ0rSsCiX8ut6lwjMG7km9AotLMgaa\nM3kEcp7TAqXqt3DPp8ZQk+bSd57G/mU4grLkRJuhFf1xqm3Dics8ShoXp+Rifrl77vHLkA23luBa\nmX4I93lmEn3UyxMdbeHc5yirItdgGQTeuPCnYbx4DQkMjx1DfaHRqTvDOJlAB7cEUnIsBSnIDbb7\n5ChMmNSnqb6SSZeXimN8c123BI2dMXJUSRkSX3UPEtXKpUth7FUhsRyfhTSXSaIfnnsZ8vTeXLff\nODX0vekJfM4keeXQPNqrSonpqtQ3zBiuaY+kvkGBKftojHmh3URblTfRPiYnxpvB2PADiWPlCto1\nQa6ewwtIzpkmZSdLSSTrO5CMXXIYLlDtuYcefDCMr5HcvL1NtflI4rCsJMWYbxKtd9a6ikhONE/V\nKpB4bFpWwc6tMtUxK5wu4HvswRYjq3FtNLJXJeha+LISJF0lqfacRxkPncDpys8ek91mlCHX5OcT\nJXH1qV5UxEVF3dvj86UEno0OPsvXlKF6byWqq2WR1GUF+/C9TlI/jDineuf/e09QJkehUCgUCsVQ\nQl9yFAqFQqFQDCVuKFet7UAu2t0F9bd6CXWE8jHQVU999NEwHiH5ZbsB2quU6EoW50jyaFJiwCY5\ngL5aRB2a5ASVnafV8ef+/PthvLkEN8lYCpdWOAQZY2sNFOr6BiSQgwtIAhcjacYnLhhUKOg6k5Lk\nCSUUtIlrO0jug4cevj+MLxdRvv7AHKjjQYGdDA67lXhFe5MSMBG9WduFDDDZAhVZyHbp8eXr18Jt\ni1cXw3h6FHJIKkFJ4Kjt22W4z2xa6Z8/ACnUpSRnE1Og5NvXcZxSA+cwSU6r1CTuf8dDv1u60m3/\nDkkcmT1c/+I3kVCw8BHcN/MQSTwG1aOhrjBouerMvZD+rl7EODn/FmSM9DXU/pqbIro+jbZMWZAT\n85PdPri+hvHtk44bj4MGd8nNUWtDxqD8keLU0X+yCYzHNNXROjIJua9tol/FCxjjezVy1ZDzKJOF\npLQvpUxR/0kb5PwkGSCWghzTqkOOiXPmth3i8KmW16BgWZhz4iT/5UiyOH4Uc0QqSUkCtzB+WlTD\naCr4aIPGV57qFy0swJVVJZfb7hb6kF/BZ2PUpxMkBzuUmM8k2WR5CUsctrYwTi0L18fjpE3nvu+y\nsWj+ZRmP5a82yavs/ElQArtTp1CLzOa1CQNAqYy2tCkxYIz6Zr/kdh2al6nUlbQCV1WDro/vtUcu\nLj52fxaDnwU4Tou6epKkqBb9odnEOUyMYm7NkczJxw9rTVEf98hexXHkDPs4rd4tlMlRKBQKhUIx\nlNCXHIVCoVAoFEOJG8pVVLZEHBMU4+oKqMdLK3B5nKa6MqceRtqsBaodVNnrylGrr6Iezdoq6L3l\nJRzjeh4J5lJ5bG+XiJ69fDGMsx6o50PTkDQ+/vhDYbx0DcngnnkW59Aow3XFq9YtSmq0T52yG8ki\nFwYnJuSsWPPzuI7pCUgI99wJOebDd8NVNCiwRMU0sUuuGZ9cKDFyc6RjkJpiCVzD3mpAba9BMlk+\nB9dLcw7tnRuBzJOwQLfncnBmWXnQ6SOHQM/HYpQAkq6jSTVb0lW0uUfurd1ruI5KHXLlzuaKiIjM\nTMNtMz4JaXGths+dfw7JIqebJ/A9WVxHwmK3w2B/P3AytGMFtB9T+ivLcNNdWMSYWVtBG1T2INU9\n+WQ3EWfh1CPhtmp1BfvW4Tzj5HU+ucpS5KpwyeHYaILuNjwQ6rksOafGMU6OpNCum9uYb3a3KAHg\nIcgttWa3PRLEcHt72DdDrsFtct1UyKUjJKntXMF1+6nB167i/sJzToyuZySLMWgdgByboMSe11Yx\nDlcvd11VrSqucZ4cVW2SILZ2MXdukXMrT3JLfgTjfvk62qdFjqZaFePu2hLmVJZT+MnSIUcV991Q\n4jDQAC3qc+yisqm9OLNpxsE+b9HSgFNHIJEOArU62jVJNfr8JLkThZ1TOM8GuRMbVHBuX6ZqUTLA\nNs3bLHOxLYm/x+vjV+J2b7exT4fksGQCUhtbitNpPNszVBuLkzI2g352ZQnLCXboGW68l8JUtwBl\nchQKhUKhUAwl9CVHoVAoFArFUOKGPGySqMJ7TyHJ2JVLSGi3RMmfvvSF/zeMv/sNSvBGEk0mqM2x\nSnWM2kRlmw3Q194K3FIOuWtiJJ2ZLSQgGsmALrvzJM7x4DzOJUUJyi5fXsR30cJ+gxKgeZGkTd3t\nPmcA9NGElDtJfHJkxEjGsHwc+6OPInnisQODp8S5jgrTidH1+ERX0v2fexDJG+eOnQnjlRe6NWm2\na7if3lmiX4kq326ikZeonk6MakGlkqBFkyOQriyqs+MSpetXIFf5NRzfaOFaj82CordphX82kEP9\no5CovPvhsrvzFGSs4kuQ4K5eW8R5pdGfmHflmjuDACd1cz20h2XifCZn0ZapcapbBoZZLp2FXPXv\n/8O/FxGRUyeQ6O2pJz4exuNjGEe7V5BgUyzIX75JiSAT+KKNDUgNK1fQVx44eVcYT5FrzsqQdNTB\nWBol2twah9x7dLYbj2Yh3W2ch8R47U3cv+UNSC0OOTgMGr+VXVyTlUbfez9gUD9i11UiTn3Kx32e\nnUGiSu6D11a67dyuYYzEKGFpqYy5c52cUA7JjHc/jJp64xncz2uUWLTlkPw4Csnx05/6TBhvbeKe\nd7gGmkMyFp27GVw3Lw3Y3YHEUS5j/mB3UJwKFXIixYsXIVftbuBaB4EOWQwTrNL57CiiudjDfNlx\nScaifZxAeutQe7VdTtAX+aJ3db7sYurnwB2dxTM8m8YzemIcfS+TxTN6k+oOxgOX1soaLQmJ9Gs8\nz2sDSLypTI5CoVAoFIqhxA1/bhpUNfTBBx8I4xdeOhvGS/QLYG6O8pfQoqnXzoKR6QS5VzJp/OLK\n0Nt/LIG3xPbuGk6GXseSGbxVGpQvYnwMn733HjAPBw/iF3mCfgnmx7EotlTCYkQxeqfFbu0v0KJc\nEPFUij6Gt9AtYrg6rfvCeK+O78kmKV+EDDbVuIiIQ7+geKGaR2/vMfrlVNkCC/PGs/jlHkvgfh24\nq1s6IEU5FTbeQsX6KrWDQ2/69RaO7VDuGr+GX5fGFn4t8qI55p14kSZX2c1SSYoFk78L/SX7YHdB\n+qlf/Hy4LXkAfcuihY4W3fNaA8xCjnJfNKlKcgOExoCAX24xC33QoeQaHi0cjFPl+CkqkD75KFiu\n6l3da796FUzHF//gi2E8Pw2GZ5aqd5tx3Jv0BOV7sTEeSxXKexMHK7zUQnsfSB8J42Qe7VpdxXXY\nKdzX2TuQl2vucPez9W2c+8bed8N4mxYhz83h16dDC7h3S2C7mtSvKhWaGwYEv8+vbyPCbtC8k6BR\nQPPVzBTGphXM3w6l5Od59+677w1jXkhcojIQ5xKYow5OY770iM2uNtBue7SI9Uod465aRRvWaIy7\nxMKkiCk6fbrLxMfIoDA1ib/HbFzT1auXw9ggptwm1qpOhoN04vbkX+kHPjrn+eF5y6VF0YbF5WB6\nr8I1zH1mi/oD7WswI9knZpbGiKz2pWPy+dIi7hox8jPEuI6Nob/F42A87Rgzhl0GbnMHY9Cg+2pR\nbFMfd4ipei9rk5XJUSgUCoVCMZTQlxyFQqFQKBRDiRvKVRcpn8b6Fih6LwmqeoW876QcSZL885Pz\nR/CF2e5iUodyNJgx0Fxk05fEGGjlJMlCZptySpiQFMbzWHicJCkoSzJJhRaqskRUb2JRW20P110n\nytXZX1lMVdDtLPL3OC40iq0rV8L48mXEuQlQvvNjRD8TtX+Y1hHeTjSpzXnhWyR9NuX3aREdevUc\nKOzNEj47HlT+zhHN6VMlca4y3XQoNThJVCYtvLO5si6RlDaX2uDT5aq1bRzfykA+qxA1bFO+n9FM\nty9uXsIiuevPvR7GuxtYKLd4FhXuY2O4/4dYrsSpvCd69ZbA101rDv3of8LQEgzOtoN+6rpos3Sm\ne9YPfgQL4i9PoP+/9jxkyN0SyX4jOMZkk2SsNqjsyQlIVD/9mU/hvIg2HxmDRLVdotICGeR+cakP\nuy1cx1KwyPjNZ78Tbmteh4xxaAZ9cmQU80GzSroiNZ1L59VweVHnYFBr0uJTWlzquSxjU84TXsRK\nu7QcjBM7yOE1PYOcOpUKpKV8jsp7UAmEtWs0p1NHru7gPrAkw1KbQxJpmubdeAzjpNHAnO1R6RiW\nMFZWuvIZLypmiadK8km5BPnLoXuVy+A7U5SvZnIcc/YgYFKpF1pfKwY9b/hafIMXEFM+MIr3Iz5e\nnP9D8qpr4ngOTZDMaPSTrriCOS8FsMlIkc7h2e7TfN2ma+KSE5vb3X6zto551mFZjq6T5wM/Mon+\n8BKjMjkKhUKhUCiGEvqSo1AoFAqFYihxQ7lqpwwq983LcMnUyHF08MiRML5yGS6qugOZYmSCqggH\n9DgVrhWLisLWK5CK2AGUSYJ6TCRBgyaIRsvnQInncpAl9oiibVKOleL5N8N4+doyzoeZNDpPI5Bk\nrBiVPiDHUoYksjnKXbF6Hcc+chgSyIkpVMZtN3B9HyQc4r5rFuLFXaT032hSdekgLX+Kch2MzMCx\nY1KV6U6VUnlvwTlXoXvuU04Pm6n6iBsAN4VX41ske8an0f6705AqsnH0nZeDc6ht4draRJ836+g3\n5TrOK5HG92fJgZUmZxrTvoNAVG7svU+CSiw0qXq3QdJi3OKyJN3ttQbu06EjyFV09PCDYby5DjdO\nIg5qOmFDCkhT3qoVcmFevYxxd+o08llt74HOdn2Mq0PzuJfNTZR4qFyDtNipduWtvUvYNkGlQCaz\nkGwoFYlkM5DI2qO4DodunxcbfJ4cdrI0WjgP3+9dvoCHQ0RMo33igZN0NI9t5RLG2h/8u38XxueL\nF3A8kh22qSI5jzs+Xz9SIgaf5WrcXDqG+y6XbSjtQoK6vtydJ10qM8NlBkZpfj84j3vLpSrqJIuV\nKW/WW7R8YBCIkSvZptilatss7VjC0hVXE6f1H4EMbdEcE1FzbC4fQXnkrN4yaETW5mUBJIFl0hgb\n41RtfGYKSy7StE+T8t3tUj/bDvrB6hrmfJPuq00PXIe+349wMP0k45svDFAmR6FQKBQKxVBCX3IU\nCoVCoVAMJW4oVz16BlLDkTnQ/BcugaI6Oon40iLkl+0NopWJumo1u9SVS1VkmyT5eERruiRXlRug\nMk0bdHoqju/fLUNeWKIKzBlaDf7mWaT3LpODYySP6xsfR7Xs8THQ7zPTXVp0ahoJzGZm8fe5adCm\nKUpExdTg5AQcJ5xI7r2sHr9V9FtR7xGNyuUekkxPV9G2V6+QtBfIiDaVGUgkQSUnyH2Uous1xtHe\nR86gqvcxkroyCaquTW3YaqO/bGzC8XGVqifvUbmFMvUvcw/71JyudNlpkJzK1bXbiJP0/fEcyQac\nbEuYah2svypO8qBLaeTb5DCL7B/D/hZJaU26XjugvC2SsETIkeei7aZmIeEk42hrk5IOWjEcO5uH\nfP3qC38cxkvn4IYaHce4OngIc49NMkWK5OaYiznBr3bnG7uBeafTohT/bchuEXcIUfgZKvnSoJIA\njjl4uYoKoEs6jn5UbZBjhccmjTcufcBlDZz9PkiVRxxyHBUvYHnBxhbGkUXSR5WqtDdonETlWJ5L\nWJYi1xA71GjuiarQPAcawd/NnvuybNNuo43GxyGrjJAzq0Pjok59fhCIx3EPDGoneuSJb+A/CZMS\ne9qcJA/X6Hnd2IpMKyRNkkyZoO/vULu3KSkkl2zgucomaTZDczdLVNkU5nd+niVp/LRZtgwcjOU9\nPEPcNpbCsKOKj9EkxyE/o96td1WZHIVCoVAoFEMJfclRKBQKhUIxlLihXJUiGvrIJCiwQ1RV/MN3\no57NbhWr6depyvja+iZt79KiG+uoY7G5hbhcBSXK9TK8NqjHNskVQvTo+gocHytLkKuYkl5fg0vs\nsz/1eBgfPoT6VlOTkJ0m8qC5x4LkVsk0Uf92b8cB13ZhmciKOCT62LgGBDuB+9mhNnSIVm5RO3OB\n4DhVQK6V4Eba38mK1D8hlxHVMxGi2OtN0JV3/NJfDePPfvoTYWzZ+GyHVtcnyFnxp3/2jTD+2jcg\ngyTM3m3r0HW3AxnLIBnAJHp3hJKZeSRnsqyRYOqdE5vJYN1VLXKRdKj+EksNXh/XS47kGu6DjaDg\nVpzaPUFJ4lxy/QjRx1wjyDNpnPqQqecOgPqem4PbzSxTDTV2XFTQx2y6922aYyxyT5W3guRx5Ayr\nUb2xzRLu39EpKsPOidBInk2S7BNzekuAtxV0rzhxXZukyHIFY4YJe643xLWSYoFs4ZHUmiE32cJh\nSMNxGpt7FU6ASu4cGjv93FKR2komu4xwvtHkc0af7e+sQs6Vq9khuETPkkoD/W9sBPNEjmp2pVOD\ndbKyC44dVR0ag7bbewuq0eQAACAASURBVPwkrd6J8faP6XP+P+4ENO553mYXFzWltA12Wvm99yFZ\nb3QEyzISNKc7/Lyg6yuTo3k3qFnFzrc2yWUssUZdVH6f7e8u7aoyOQqFQqFQKIYS+pKjUCgUCoVi\nKHFDuUrIZeHSSnXPB+00mgX1NzEKaefEHNwRvvvOmhZNoj45aVNpD3T0FslYFaoxw7QpSwS83aeE\nhV4H1NnnnnwkjA/Ow0XFNL9tU4I0kh3cTpcya0XagpxJkQRtTBPe/F2SZaxBIUIH0/dxbNC5+kQJ\n58hlNjYFB8PeTrdujNsihxw5GcZZ/mkjrhB1eZ3qQn39a1+hEyaqms49kwYNfenV18I4vw6HSJ4o\n4CbVb9lqUIKyIBGZRfKTRQn0PBvfmR5FbbGJSTgKmKqPkauBk4ANAixXsaQQk96uGz4fpqc5mVcs\noI09OobTYkcGUcZEw7ObxGVHHo0pqeMcs7S5So7I9R1ITUcKx8N4ZhbycZnoaa6ltC9DplK4TpP6\ngENzVotcQjHhdmE3ByVrswYvJTPVz/ctnURjNZpUV47Gmx2jsUzUfyew8zSaNDbpvsXIcTc/PxfG\nE9S3mg1yJdXRblwHj6VQ32O3IckgRm+pyZDe0lV4viS18TzFtexYfLJckqMbuLcNkliyVNduIPBZ\nosL5Ox2WZtnR2qdWGSVK3G8H32NpEruawm1KY5BkHpOOx59ldyZ/J88ZbXKotijpH7szOd7ZxbP7\n7OvdunLsMuaxyejQ9/B4jKhSfLq3YLRSJkehUCgUCsVQQl9yFAqFQqFQDCVuyKkzE8SJiUzKLsUU\nlEP1QVjeEv+dq+9zWdCHo3lQ5nMzcG55xxdwbJdX4dMqdabEfXaWkNOFV6RH6oGQ68Yl+t+FNCYG\n1/YJPmvQ9zBV6zOVyEmduJmJa6P9Pe8WeLf3CE4AxQ41llwMo7fbYWIa0p5H17AWONr2KNFTnRK2\nVZtUh4e+v5PATXn29ZcRvwH5ySa20qb38QQl2IpxTBnVaqyUEGXr5kFux9PdPpjNwG2TJiksmaWk\nV7NwBHHCLpNvJ/WnSH2eASBF58kdnOlelgLiVONt30UlEj3P/X7KScOY+nbJZWSS1MHeoybVNUtS\nUrsJGndeCX1lr4wEgzEayxlq48oGnJqVbUhU2yuL+OJWt89NkqxqUbvE6FzEQRt16AY6dK0WyT4G\nZ3EbECJOS3YSkmTA7el5lAguxjIpJWPcd+TQ/Mvj3iD3WZy+J0sSZjtHzkuSqBq0xIClNk4mypIM\nS3AR2bxPYsB24BhkiSxNMlPCxfEO1DHHWB1ca/4gZM7xO86EcUQGGQD4+jokJbPTKk7OQNvq/azg\nOoKtYEyy/EVquti8zIDOxeXlFD5vN3rG7DBMJPg5j31qDST2zHoYbyZdx9Vri2G8eK1bK6xJMrHQ\nMpO2j/vneuScjkhU5FY22IEmN4UyOQqFQqFQKIYS+pKjUCgUCoViKHFDucrtQ0MyjH51SLg2ElNN\nAT3udojK5ENzLaCIFEAHN5ye+zM9H6mPQspBh6jbSLV54SR9/O5HFHHQHiz7RBNh8ec4GV2f65De\nToRBwY2s3CdprU+CwkitK07KRdJHLKgRVS4j8VutDjmkQSvuW0xx0wr9JMkBHtOunFyRrqNB59Xm\nc2flkvZn988oJQJLBnGeEqQlKWlYIocEctkM5KEY1Y1KkBvLsHpLfYMAJ2zLZHCenIAt2gq97zfL\nDp1Ol4ZmE1WC7rWQcyVGEsnuXomOgX2qdJ/GLTgvTY/aOElyMEm2W+trYZzP4f4066DKXaotlgqS\nVY7mIXe3SeowIrWO6JqZKqdMaywtlEheGxQclnbYBcM106h/1YjuN8kFG5ViuvtnqU97CapLxnMk\nnwvN9bZLkhbd8xQdp8N1vkhO8WmJAc9v/ZKgsutqv2aWkcL4mp2ENFIt4XOLFexjx8mBtULzx/rl\nMDZlsFIyL+0Qp/c8wM4l3p/bxiF9ad+V3Gr3lgO5Hl3keCb3aVou0Okjo1Ei0JE85L6pKSSOZLmK\n5c8OLVGp1bBPNUjgyXX1DKrXxQ/ofu8QkWd1n+dSPyiTo1AoFAqFYiihLzkKhUKhUCiGEob/PtRM\nUigUCoVCoXi/oUyOQqFQKBSKoYS+5CgUCoVCoRhK6EuOQqFQKBSKocSP9EtOoVD4XKFQGL/5nj/0\n8X+1UCh8scf2+wqFwj8P4qcLhcInB3UOP0nQ+/mTh0Kh8MVCofCrH/R5KG4MHZvDj0Kh8EShUPjL\nt22bLRQKX7qFz36yUCg8PbCTGyAGWyr5veM3ReTvisjOzXa8nSgWi6+IyN9/P7/zJwR6PxWKH03o\n2PwJRLFYXBORX/qgz2OQeF9fcgqFgiki/7eInBaRhIj8QET+NxH5y2KxeDDY5x8F53VdRD4mIr9f\nKBT+hojkROR/FZGOdLOc/XqxWDwbvF1+R0QeFpGTIvIbIvJfi8hdIvKFYrH4u4VCISMivycih0Qk\nFmz/l8FpTRQKhT8UkQUReUtEfiX43n9SLBYfe9v5/30R+avB+Z0Xkb9XLBYb8hMKvZ+KtyPoE/+P\niNwtIldFJBNs/5si8ndEpC4i6yLyt4vF4l6w/TdEZFNEvisin3z7fVK8e+jYVPRBolAofEFETohI\nRUT+gYh8rVgsHiwUCv9auqXoCiLy10XkQRH5XRFZlu79+rHE+y1XjYnIa8Vi8fFisfiwiHxaRLK9\ndgwGxpqI/PVisXhWRL4gIr9ZLBaflO5g/Re0u1EsFj8T7PNPReSXReQzIvLfB3//70SkVCwWHxeR\np0TktwuFwrHgbx8SkV8VkYdE5KCIfLbX+RQKhYdE5K+IyOPFYvERESmJyN961y0wXND7qXg7Pind\nB+uD0n2I3Svdh9r/LCKfKBaLT4jIkoj8ZqFQGBGR/0VEPlUsFj8hIqc+kDMeTujYVPTC3SLyPxaL\nxUdFZENEPv62v2eKxeITxWLxuoj8nyLyi8H9Hmya6AHi/X7JKYnIoUKh8P3gV8GciHz4Zh8qFAqj\nIjJTLBafDzY9Ld1JdB/PBP8ui8iLxWKxHcT7ueQfFpE/ExEJfg28ICL3B397tlgsVorFoi8i3xeR\nO/ucxhPSffv9VnDuj0n318pPMvR+Kt6Ou0Xke8Vi0S8Wi3XpMgh70r2PlWCfp6V7v0+JyNVisbge\nbP/D9/tkhxg6NhW9cL5YLC4H8fdE5PNv+/v3REQKhcKEiKSKxeK5YPtfvE/nd9vxfq/J+S+kO2A+\nViwWnUKh8ILIO4o2xeWdb41v38d42zanT3wrn/f6bH87WiLyx8Vi8df7/P0nEXo/FW+HIdF7YEn/\n+2W+bV9XFLcLOjYVvXCze9Cmv719HP9Y4v1mcmZEpBgMugek+7beFJHxQqGQLhQKlog8Tvt7IhIr\nFotlEVktFAoPB9s/KSLPvovvfVa6lKoEmvEDIvJi8LeHC4VCplAoGCLyiIi83ucYz4jIZwuFQjY4\nzt8rFAqPvItzGEbo/VS8HWdF5COFQsEoFAo56f6yz4nIA8H/RXC/L4nI8UKhsF9V86+872c7vNCx\nqeiF04VC4UAQf1RE/qTPftsi4hYKhZPB/39sXW/v90vOl0TkkUKh8G0R+QUR+Wci8o9F5N9Il9b8\njyLyMu3/dRH5k0Kh8KiI/Fci8s8C+vLXReS/fRff+89FJFcoFL4jXdrtHxeLxcXgby9Id6HkD0Tk\nSvCd70CxWHxButr004EN7wkRefVdnMMwQu+n4u34uohck277/yvpyhLLIvI7IvLN4J5Nicj/USwW\nt6W7sPGZQqHwNemu1enFDijePXRsKnrhJRH53UKh8F0RGZXuYv93IJAUf0NEvlIoFP5ERH5sF31r\n7SqFQvGBoVAo/IqIfLVYLO4UCoXfEpFCsVj8tQ/6vBQKxXDgRz1PjkKhGG5kReQvCoVCWbqW5b/x\nAZ+PQqEYIiiTo1AoFAqFYijxI13WQaFQKBQKheKHhb7kKBQKhUKhGEroS45CoVAoFIqhhL7kKBQK\nhUKhGErc0F31P/3vXwpXJfP6ZMPAu5FNeRBNs3csBhInGuHxjHCby7Eg9jzEnHuRF0sbBu3zHvBu\nFmC7tK8nt//7/+lv/cLtOejb8OSTHw2/5Oc++0S4feH4wTCu1DthvL1TDuNXXzuPffaaYZzKxUVE\nxLQT4bZqpRbGG+vrYVxvINWC43R6xu12i7Y7PWPPQWJcz0PH8KOdNAwtC93c9/ze+4cfo6bnP9O+\nnJY3l0nTubfDOJ3AdxbPX7nt9/PJjz0WnpBJRzfpPwb1TZfar91Be0c+a1mRf0Wi49SinU2z9+8j\nz8f94Pvqu9hu0vzB988VHtd0UB5vdJwO9QM32G7baHcep3ydtsnXRN/Zpv5Wx70cnRoN468+89xA\nxubqViM8kWYT44vbk/uj5+Pa27S/yfcrjNHeLTreZgXj2+V+QOeVS+XD2Pf4XNBW5QbGbKmJ8zKo\nnRM0HjodHu9oZ4v6nW3Euufl8bhDXGtiLtneKYXxzs4eHRvtEovjqlJpzFX/6L/5+dt+PwsPLtCd\nwveawTWJiNg2dtkrYb4sb+GcG5U6HbXb9jwP+h49fA2+a9jH8HtfnkHPZIlMefiP3+ezfdFn/u35\njPb6PW/9nmH0eL13d1y35wkrk6NQKBQKhWIocZM8Ofz2RL/ELIojv4qE9qGYX6WCtz3+URB5A+S3\nR3pl68eY+PxLp8+5v1v0Y4rC7ZE31n7HuPlZRXZ5H6z8+QR+wcToRPgXseMxS0Ix/Sovb4Gd2Vrr\n/trI5MbCbSO5XBgfnMD21TUc4/IajhG5/cSTeHwfIi3Hv47o/kS6Tm9GptevikjT00Ei32lgp4SF\n7RlqyFwCrI7vDjZxrxf5VY//WHTOkbEZx73PJDM9P+sG58wsDTeXS4O236gzY/ie8fHpME7E4z3P\ni7pYhLWIjGuKI8wG3dj9zcwS8K/eVqvZMx7P43xNYhW2WjthPDGekkGjXAMz0SI2M9J3+d76mGA9\nF23L1Hqz070el46XStIcQKyXT20Vp8mbmVWXblarBZah0kKbN4ldiMdwXu0OMYlt7O+6fM9xfU4w\n3nxiKJotnMulq8thvL65hfNq92YSPQ/fb1qD/W3fovNMxNF3+Hs9YsISqWQY58fQZtkMxmmt3mXd\n6sRgdRrMVOLYfm9Coy8iz2IjQp+8q+NIH1Wlp0rS50FoGjb/hw/S8wN+3/JndJib7qFQKBQKhULx\nYwh9yVEoFAqFQjGUuKFcFVnEyAvT6FM2LdyLMT1u88JPotL25SqiqR2iohymzniFp8+LFW9Oqb2X\nTM49JSqKeeE1U/t+H0qt7/e8q73fOybSoEKTNrWn9DlvWtwYiSOyULczdGjRZq1SDeMRWph7eH4+\njC9fB91sCp8LtW1kIerNqdN+vYIlmVjsnYuQWdaISLR8DOqYB6bGw/jOY1i0zZLMoNVHHjOJFGht\n/uKOC7reIFnAYNmhA4nGdbvbbZI8LOrfkcXfHt8b7BPD2krxR6itjQTFJK/RgtQ4zRMGLzZmGYv7\nhDDMd2xkyWtrE/JorYGFnkmSb0yfF0fjOLEkyUEDwitnsbA/nYLEkc1mw9i2cR4tF21VqWG8lSu7\nYby5syEiIiZJeGcOLYTx+CzJiUlIJhb19UaHFjhTX/FpPrBpLpEOfZZkwciiZQLLLB1eVBvcyDZt\nW7p+PYxX1jfCmB8HPs/HZDgQg9ZP0ALnQSAexyBguc8mcwYvEVija8mlIO/Pzk+FcancvcgJG4vg\n15ex4LpeJolTej+3+fnEZoy5mckwLpcrYVwlCbXf/Hsrz9meSwRY8GYjAkmWvkPXwXODoXKVQqFQ\nKBQKhb7kKBQKhUKhGE7cUK5imolt+OzxjxE9GOc8B+Q6YafVPp3usvpB9Gi/NCWe24eu6uuu+gBg\n9FsN/qMBlhbZ8dbbtxRFhF6kNt93aPguywiId0vbYZzNgGpliSOiXUbkKpYCuY/03s5OK6bBbeov\nnDdinwjnfB6RPDok8UyMwjF27NCBMM6nQEHHiQI2zcFS4sfmQWuPT4JuZhmpXoMs06gjNklvdhxI\nI8lAsmCHUsRR5XNeGu7fJGnR/rXyZhiXXc7Nw/2QpK44T0d0TJJMuB+y+2/flWFQLhI+d5fcbjGL\n9qF77LT7OeIG/1vwwuLVMG5R3huWkeIJ3KvtGvapk/xmW9S2gQs2TVT/m5cuhHFuBzLJ3OxsGM+M\nQI5lCTGW5r6C8bC9R/3MxXmVG5C32FHFM7vZx8nVDK6vVEYun50SpDgjMu+TW4+lq4gRz+i9fQCI\nkWZrGL3zAyXSuK+50ZEwdprog7tluMZGx7uypZnEsasVHK+6C7eb1ae/8nOTJ/2PfeyxML5KrrXv\nPfMsdrd7z2f9lnb0gh9xT3I/xfmOjUGimz94JIy3ttFX19cgW97Kc1aZHIVCoVAoFEMJfclRKBQK\nhUIxlLhxMkB6BeL8STH6T5xorAQll4rFSF4yWV4K5CrpTV1JP7nKJFqZt7u80pptP72PE/3PLSQ7\n6rFL32zXN0sieKOvuU3lKW6ELZIvOh2cUybyrtv7XlhmrNceoTxhUnKrJi30t8z4O/YVEUnG0G/S\nOdC12Qwo8UoJFGzHJGmCnHaNBvZh6jtJye8abVy3Q5KLER4H2ybykNQKR+GcOnYQdL5JicVckoFi\n/bJhDgD3fehDOAend6Kzfrm0vEhJFXJMBZKSxedOFHeTynJUq3v0ud5jOZJUMzI2+Er4JHvrCBEz\nJVPeXNIjOA6dSkSu4kOwVG6RvLNRrffcXwacPE5ExIxDvmjVObU/+pdHslCtCalihMbMgSnImKbb\nlYscB7KRQ1d2nZJ6rm9DGjkwBvlzYXoujA/OzYRxkiSZiqDdDEr6V6/ifCs17MP9NZJgkGQ6NxjX\nHt2sDDnxeC5pkxRpUn/q0LV2WvSdDsvjtx+pNBylLbpPe2W44OwkrmVyChJNvUKOJk4YmO62d5ue\nmxY9Y+PkAExY5MKjNu2Q7DuShiNzZASlO+p1yJm3lgvw5s+2/dItMXKd8TzVontz/4cfCuNf+S//\nZhjv7EKu+vKX/yCMV1ZWb/r9yuQoFAqFQqEYSuhLjkKhUCgUiqHEDeWqSNIu4r7j5IhIkKMkQYnW\nYnFQ3ixX7dOPLjtn6DsjxVEjTDZVViWppcPUO1Ut9yIJgxgsI/TVnXrvE4QRSt5j189NKq/KrUlX\ng8LRObiCMkRx+9FsWghpc5woUNtkx0BXm+LEkVz9mWspGZQgMp6GO2OK6NKDU0h+tmqCQi+3Sa4i\nCWx8DPQ8XwbXjxGSxjx28wS0eSoBierjTzwQxvfdczyMHarPc/GNt/A9TVwT1wJyjMHKVZlxnFuL\nXEFxqk8WJ0khRS4dTohYKqGNV1e6roXRCcgVE+MT2HcXTrnnn/vLMGbnVqTWFUkNPBo4OahB98Pj\n5IU0BjlxmdFHkt53lXl9qmpF6qP1SdpZb3KyQxxnu7QngwZLix2qocVJ7NIkMeSSOL8sOfwSdGlW\nMNeZMcgnDWrjNrlkayRFLl5fCeO9LSScK+0iTmdxLrsko63uIpncKrWb36Jq4/w88El240yS2aBB\nXHYs4u+NNklkJMmkUpg/PKrvVTPx/Y3mYOUqO0FJQek5lDUxBjmBYoeSLPIyD9vA/p1G937HE7im\nHLnd2qNox1aNEnz2kY+zI1gi8NJLr4TxlStLYRyP0feT5Bl5tPWpDt7rOTdOc8npO+8MY4/qnT3x\n1KfD+NiJO8L4jsTpMI6Rw8y4WflNUSZHoVAoFArFkEJfchQKhUKhUAwlbly7it01RDHblPQvZt88\ntixyGgXHcYiyjPBcHa6XRIm/+BicsI04a65j4fp9JKcPAO/WaTUo5IjKdVhGIspYIlIcy5W4/yNZ\nSE3NUvBZSr5nkWzT8kGDp1OnwticPITvMa7gsz6oyIOToGMPUV2ozQauY4YcH6MToEM3t0Gbv34R\nsWnimFb7ooiInDiA77zvTjiq8vga8ej7s+SM8HDoiKQr5mDvMztmEuQkY7Gmw85DovTjDsZmKon2\nmJjsJoFrUlI2lsJYDuS6NjVyzvT71WRaPB+QrEfyideHEjdNkqpZ3uJEhUEcbXWSUB1OZIjPcb2k\ndgXX4ZFjZ2sLCekGhcWrGAOtBtqkQzJtNkOOmDTJoW1y01DbpmLd7dyWHrnJfAffEyepP0WPhSbV\nxVq8ejmME5SYsOPgmHt7GBBWG33OoOULLRonHXI7enW0f3sn2N7GubiUxLHto6/YBvqrz/2SnE11\nkqjcW5A43gvY5WnSczBlYZxWqzjPyh7ifAYy0vQ05rZapduuNi0n2Fi5huPRMRxaziFcM4zafWcH\niRW3tyFDx2O4rwZdh08jO7oU4+Z1pPYTfu7Q97DT62//2t8J40MHj2Efng9o3N911704X5r7+kGZ\nHIVCoVAoFEMJfclRKBQKhUIxlLiJXAX6ySaqK5oMsHdiQJarbJaagvcquw+dz7V3ItJOJDR6bY58\n1umz/yDxQUpRt4K1OGp+5JuQdg7kMrQXS1egFBNUV2gkCx1nt9qlUR2SADjZl00OB8MBHZ3wQJea\nJrtwcJyqg741Og4HVMbC+ZbJ2cHyTIXcUOU91GOZmQYd+sDDT4qIyKkzoIUPFBbCeCoJKrS5i9pC\ni29cDOOGyTIuO8kgIQwCsRjOjWtRcRxL4j4lYmibRgUumZEcpMcDB7pSXaUCySFFzp1SmWtI8e8j\n3GOHa4lRAk92Plbp3thkp7S4xlikvhG5qyJ1y8ilExwmmqiT/t4nZgdYVP4iB2enX02r24eGgxPP\nZHDfLANjxjZwrjVKXOiSPJxKwBHjml0Zp+FRPakmpLdEB9+ZNSBTlCg5W47aYYLGQzoOiShJz4MT\nNB44IadNc3Crg/6yR8+JLXJA1dvdPrhKSSchdmDZg4iIRXUS21TTa3cH/bzWor5ILq1BoEJzErtY\n6w20mUHjJ0UuqbEx1A07XYAD6dB8V96/7577wm3P/+DFMP693/tXYbx0BTKWabPMRIk9Sb7mJQoW\nzVtc0491cCuGfQ7Mw7F7fRlzpENS6L68xa7BvQr6IScWbZNrLpelOY6TnPosfctNoUyOQqFQKBSK\nocQNmRwrwuRwtXHKk0M5N/oxObzweP/Xlcu/przeCwF9+lnGVaU51Xzk1xq9kXbc3lVn3y+y5UeR\n1fHGsIjwulPEHxo417Q1Jr0Q+dXscpsHAS+upnvVoZIJqRTe0k/N0uLkCn59GlSR12+DvWnnkfr8\n+GksWm42iclp4viH0jjO6ZNHw3hqCjlgjhfuFhGRGrFXbRPMBlf3/sHzfxzG1RLS4cdtnDuXQ3Bo\n+0BADIjj4heS73Iq+Kz0AndNXmTsB3liHK4GzQtDXc4jQ9sj1YW58je+x/ZokSsxSTUa40liFC36\nicbzQL8cVb0Gth9Z8I/tXr+xyRNFv9ITgwLlw6kSkxbjshu06NSje96gPCsO1VSxg/7oedgWd7BA\nNUV5WFwL33O9hl/ZThWftWhxa5x+2meoeVK80Jba+WQN5z5F5RkmJ3AOpylPTjtgda7YYBx26HgO\nzTENG/18K47xKy3sv+ljbqi6vXMp3S4sXQZjfqpwIowNl56JpGTYVJKh2cS9rNXQ9p/+5OdFROS+\nO+8Jtz31+GfC+PhR5JH57f/ht8N4+TrYlX4lGExezE9j4OhxsN7z84dxHQaXpIAi8OU//Lc9j7O/\nINmi/EE5ytNzvng2jLe2kLfr1MlCGE9TeRGeG+oNKAIiBekFZXIUCoVCoVAMJfQlR6FQKBQKxVDi\nhnIVLzDmmFNS27yP3Tvm/fd5475ylc2LDKlMA0tXtKAxug/lvCBmLspO/ujkz3m/0VjD0r16CtLV\n1jq2H5iCFJQULILj1AitFqjfViARxanC7EgqR38nupso+dH5+TBOj0OK8uLoK3nK+bFwGHTp+g4o\nzRiVmziSxD6Hp7Ag7sWXXwjjc+vIR3Kp1j3OyXksNs7GkCenROlR8mM436SNY/ACd86PwaUTBoGv\n/slXwti2eo8ZroRu04LCGKVrd1yqvO11qfIELWrmz7Vo4WCjBemC828YtChwcwtUcmMPfexDhZM4\nlw4GZ62DvsIlMqTPYuNoGZVgnz6V16O/5965YPltmyP/Md6Hn4J1Kq/hkuzqtagydxttzov/TWoH\nh+5ROsiBNEL9Y4zadWR+NoyXSaKs0QLnHbr/O7xgnBZjW3SOozYkxxblgnlmFdWi03HIlYVlSHN/\nTTAPNA93+wilxJIZys2TykPK3sphJ79NHYDkT4NKuxgNWnQ7ADi0yHl3G5OIT88n38Y+uTykGy6r\nk6Z5tFbtnnOZSmXYJA3+3M/8dBjvbKFi9//1L/9FGO/t4bM7uxibPKZckpnGSdr/W5TLJplAe7/2\nOkpCFM6jDMPyEspD7GxudgMyELhUpun6dSyUXlnB5xavwuBx9AikswQtgF9ZgTT46ccfk15QJkeh\nUCgUCsVQQl9yFAqFQqFQDCVukieHchHQimbb7BebfWIys+87o8gdYru98+6wTd+nXBwmfdbktNIO\nOU4oFTxXgu0QtetyUo1ICVXezI6LbhyhuCPviSSj9VnJzjlFfP+drrNBIt8Cfdv2QEOvb4Me310/\nF8azR0BnZ4g6HRvDZ6utLtWaSoFKHs1ADkmNQ5oYOwKXU5PSvK+toerxzjVQrTFyW5S2sf3aGtxN\nD9yHquEHqMTDH/3518P4wjLo0MzcdBg79a5k9/+z957BcpzZleDNzPLueYdn8GALAEEDkqBvmjZq\nt6NWy6xWo9GMFLFmRispZiZiYyM2YmMk7UzEToSkmF3FrnYUq9mWtOqVl6Y16lZPO7KbFLvpSRAg\nivAPeHjelTeZlfsj8+U5SVYBYBNFUdX3/OFlIivN56reOd+59+oKrletgl7eNwr61Q2lsUe/1Uke\nSETZ+dPb3CpDCtSSZAAAIABJREFUScr1wa4Tu3OeI5fSqLdaoOttkkDEd8LZLhxrnC+G82YkzM5j\nd7sK2WN9bTOIi0VIFKNjkEoTNA5MovO3KAV8naSRBMmibNpM+v1jkhzjkAuQ8+GEysJwWQlyj7lt\nlsF7PzfNOt43QmuKQ9J8jRaenR3IDSkqzRGPoH1c3wHH1bsHhiBBbFBF67c3IRuVamiH8iaXacD9\nR7KQste2IEUVKU8NFTmXhVGsCXsTcOQMbVKl8BHMzVN3HBcRkbMNSCzzNcy1/FG4jBox9K39ypu4\naRN9m4igP7Pp3krJnAOnRTmHLHqGNFWUZ3eTRV/JV69CiimcfVtERI4fxnrKpUqilJPocz8C6apc\nQf/tkFz1+7//+0G8vLxMzwXprMa5dOj7cXgEsmI2O4DPkoSaSKWCeMh3qfI8KpWxBhRLeC7Ox1ar\n4dk3NvGM8TjetdG4+TqrTI5CoVAoFIq+hP7IUSgUCoVC0Ze49SrkRFeFK5J3rk5usdTF7gv/fJeO\nWUy7USp/zvnnmp1lLJMp+Sjo1CYlFXTavHscn22xvORSanz+7RdKRPbuYyw/GaEa0J1tG6ESE12d\nIL2BZYCqLm6CirxyERLNxB7Q0KYD+tGgZHxNokBt8anGJCjo7CwSN00dQzKs1RKkkcuXUdFYyJ0x\nMoT7LJMsFTPx2UPT2Gn/yGFUpH3j6gU87yiSGh7fC8fU3r3zQbyw4O3kX92ArHJhE23xrRfO4drf\n+WYQu2S72qH0+kNDGItXV3HNXiDDJSRouDpW5ynNQ5bnhpmB9Bj3pR4uKzA9h7ZbISdDg6jsBsnE\nK+twnlVrkL1Yhl68jHPGxjHe4pTe/vIVSIwsNcWIzh4ZBFW+/6gnrSZikEUaLUpASDJXjapdNxp4\nf4fSyHMpByfW+78Fj+7DmC6V0W4WtVs8hvYRkkOjtB2gxX2x4lH8iWG0kzOBNeDMwmXckyp2W1Vy\nshbRVlGqYB6zcJ9qgyQRSmA3nsPzTu7DOJq/hnF0xIBL6tlxSCWLEe/9MhnI5MmrkKxNF+NvhSTm\n2ibOGaAleGcA/Tw6DFmsFzBIVkwmMO4MqqJutDGO203a8kHOoQRtAdh1IDvkRuTqFNsk+ZRpbk5N\no93PXngmiNNDWB//8ac+jfP3wF37ta9/K4hfeP6FID5xL57hCo2hJo29RBxyVTzivVOpBImKVaY2\nfyWSu4vl8Rb9RnBcjDEu+dINyuQoFAqFQqHoS+iPHIVCoVAoFH2JG3I9RhfzEdei4kR/TK2adA4f\nD6Quqmtj07mOxVIRPQzfkyvQhurTsGML9KTpkuOEHRREgQnVd7HJiRKu8Ozxg2bonlxri56XNYSQ\nvtbbuik3wvlVSD5La3BzbG3j+MMPgzbfk4W7quqC3qw4kIUGJj1686mPfSo4NjsHypNlyegCJIi9\n9yNZXyIO3pWMdrK2gQRp+0hmmiNJq17Hs1eSuNdnTnwsiJkmXqqDWj/gJwsbXAPFPZ6E6yHWxMP8\nyM/+Ip6xCmr4z7/450H8vVeeDeLIACSCXmCd6Gmem9IpQZ6EZdoauVSyGVDiRV9OXFiB1NYgCfra\nVdTB2d6CRLBFNY3Wt9C+pDBLjJLKMSW/vAGXUGURLh2uSxUnqYnfiauGN/1x0CQpKpZGX+4/AGdf\n4S04CIs7mPc1kh4j5OzLkHupVxigWj5pks1i5BwyDTxTnNbAjAuJbp3kpaXL3rqXIMfM9SqkDF4W\nU/RVsNOErFCn+yQo+Vy5ij5neYZy7kmd1tTGdfRzcgky9NAgpNGVBPqrWvTGaI4GkVPGmDv31ukg\nXprCNZKbGLv30/VaB0mGj0FK6QX4a6BCyVD5K6G6ivU3k0T/ZabxzAMk355/2xuzf9JE/524FxXJ\nTWr4KM21kycfCOLnX3wxiMfGIdn98q/8ShCvUWLYa1fhes1mKRFjAvea34skqW+8iTXv3BnURpyf\n8b4P9s1hDg7tgRM2SnXTytsYJzZxMIaFOWGH3JE33+ehTI5CoVAoFIq+hP7IUSgUCoVC0Ze4sVxl\nclY8rhmDmPP8sevKCh0HhR6Le7eMCajXUFUZ2qHtsAvEYCkM5/MjOpRsiUsHmQ1QvhZxtFFhKhg0\nr0PJ0FJxUHCJeNZ/HzxAm9rCbuMZead5jZJocVLDDxo1KrQUjaOBoiwrREHl1qtoq+wA2uonf/zH\ng3hm1qsXNT4MOSuUxJFqGd11EFKYRTS0Tf1cJfmJaUmLqPIcuX9eOHcmiAeTePY9tLu/xUmoqJDZ\nTMZzdtxDzrHhLNweg1lcI0KuHk4iefXiWhA/+ywcWJQ7sScIlYPj7JRtHo843ibJjt1KlxbgdLm+\n7smDJtXP2SFZolxBQj92ANXJmeOE6GO0U43qHjVtyGXsoIyFat/hedOUWGyQZB0eN3X/vpzcL0Zj\nzKVFo9HG+9dIvt6skBssDspfSF7rFYwIkp1lEmi3OJQMqde5NhrJB1X08xTVhyuLNwh3vnc2OLZc\nQx/uVCFLrVKCyCqto0LJ3uo1SgK6jbaKlinhHfVn3UE/m+vXgvhBQXtuJDCv3liG1Fnz3WOXTDzv\nA3XcZ/0S3JmFNG563wbuOTiDdWIqSfWtXOrbHiBO61CMHHHFMp6tUeP9GphjpR18D1UriBd8qf+l\n11CHb/4A1tOTJ5AUNUFj16DvqtFROOseePDBIM5QEr+v/PVfB/GnPwPJ/4477gjiIXJmiZwIojuP\n54P49JuQE3cTA/M6NbcP2xXKJUiMb/lJD0VEXj2D2lXVOrnKWMJ0NBmgQqFQKBSKH1DojxyFQqFQ\nKBR9iVt2V7FEFOKYaS+5SdoRS1ecGK9c8nbIb5KrolQC9cm1M7gEvEV0eyJGdCO5INh15ZJEFo+y\nfgL+t97AzvdyEdRtjWjWvVPY7T425skatRqoXYco+SLRxlsl0GgNSizWdrld2BbTezRIMjBYCorG\nKAZ1eRfVhTp0BHWcxidBNQbUIclA7D6LRLjWELnSSDLYoDo8NiUGnJ3FbnyHzm+RJDFENPTeFGhU\nuwGqN051px7ZdziIkwlvLBhEf3ItKpfGba0GSpkTU951H2roDI/Cjba6CZdCL9Aglwy3jU0xZwBs\nUy23FUpUuL5JrpeUN8nnZ5BAbGQCTrnnX4C01Wxh7oTq1JHUYZMsZtJxOhySxGNUxypONaiSJGON\n5jB/TXo/w5fAHKrdZVMyQiE5pkU1cdpU3yhKTsoErx9CNqQeITtArrAIJ3zDMxkmxvdgC2M6tU59\nuI1+HvfXSYcSnbaEnFjkallsYNwvb8O5d30L47jkoH9qNfT/JtU/q1CSQJdkvnmSTWaoftZXLNzr\ndAHjcsT2nj2exjMO5CAlpykhqbMBSevONJKS5hys6Skb51cjvXW4Dg2ye4vmZgPtFKN1i+utXaO5\nmVuGu7TiJzxst3GNTI7qRtH3ptNiyR/t16S1jesCfvWr/zmIpyYg3f/QJz8RxG1yLrdDxRsxN594\n5NEg/uhjHwniX/03/1pERL785f8UHPvMJ58M4vwhrPOPPQQ3WM3BHHzuOTjD+PufExB3gzI5CoVC\noVAo+hL6I0ehUCgUCkVf4sa1qzifHdefCrlnmMaiOlK8y54SIp1643X/v6eCY2WSq3I5ULJcPj6Z\nBkWVSlFJd3LRJKl8PUtE15dAs5eLSChVroDObJEDiuulRA08w6qfxKpI0laJdsm32lR3JEvJjpKU\nGM78YCUqxja5IOLUP0NjoHinZ/YG8cEDx4K4XuUkipR00ZcYItRXNCSkXAMNv7qE5FJnTr0RxAmi\ntSenkFxqcg9kEzu0ix4Pn5+eC+L9U7RjnySJ7ABo7ghRw7suo1YLNC47kgyWe2hAc+0jJ4Zzjp5A\ncq71b3xNeoooZIcIa8kktTbriNeJ0q/T+x7Yj/6O+GNzZBDtFSN7T5XmsUOJNO0I2iadoMRmlESv\n2sRnW+Suqtf4OK4ZsTiBJ8JqFZ9N8pjzx2SDEnlGk3iuNrm+2k12W1KdIZLLouTmZGm3VxgbRrK6\ndhMSTttEG6YtzI3Sy5eD2H0bLpQc1XQa9OXwDM1Hw0B7t2MkLZGsbMex/lVbGOtFaofVFObR9TqO\nb1MiwaKDdX0vjaPsIJ5xyMH1P0Xja8If3weykGHuJtdZmtb9hkNOPHIDxltwPk4NQxLZHOvt3/bH\nD2Ptv3odrjlzCOO1SW02MYG+r1axbm2tonZeIul9/6VT6JtKEe3bYgmY3b8k7W9vYw346tcgUa0+\njiScTz0GyalCyTHjNNc4ISd/0ddJQoxT3a2xUe/93j4H55RN4+QzP/RkED/yCL7bh1Po17WrSC44\nMoTv0xy5LbtBmRyFQqFQKBR9Cf2Ro1AoFAqFoi9xQ7kqVIuJJALDIJqTajfZLaopQUngOHnPnilP\ngmhSArGr15AoamsLToG1ddCNJaIhmy1yUJAsFaGaHS5pavUK6N9kHLRblGSvZJbo4hgowQvXiTr2\nk/1ZlOApngZ1lqQd81YE9KzL9J70nvruhkc+hh3vi5chFx4+AOfUPSfgFnrzzJtBPDEBCjYZA/Xr\nuh5PukF9df06akFt7aD94uQU2d4BXXnyEJJIHTx8qOOzGya7dki6YgcPjbMM0dyhGkckm+y6p1x2\nEVJXsTvIIar+5e9ip/+zzz4TxEMDkFqTRP/3AieOjdL/4QWuLUGOffMc+iESQZs9dt+BIJ4ch1RZ\n9x1bby3QvFuH2+ORu9DvdXLjLK7hnof3QWIcH4bsVayi3V86BXmlSfPXIRlrdBDSs0lynEtUfCaH\n+Wb788pooAOHhjGPTeqOWBLrRJrWCZbLOKlhhWvc9QgOubxMul+KkvEZTaxRpbXXgjhdQvvHTEgM\nu0kwKzRdYqT9xWiBj9D9U7S+jtPxMrnPBgcxbo7EsDbEi5jvbgXPFXWphhPJ5p9IYox8boK+P6Je\nHKfnjVfw3WCSo8ukJIG8NrQH6DurTskLo72tXfXgCSTpm9uD92vYGHf1bUg7dx7G+YNDGLNbW5iH\nZsJ75uUiJfUkjYq/72wXxysVTtoJmfD6IrZwFHfQTxMTU0HcJneTRRPIJictJ9+Mk4PSIGfqXXd5\niQSnZ7GdwKHnvUI1DfeQdJelrQBPPYqkg/EYu3Rv7pRTJkehUCgUCkVfQn/kKBQKhUKh6EvcUK5i\nytYhiopr37QdqiPhuh3P4aR+UT/x3J5pOAUilJiI62gsr4BuZ9cEP0uEap/EaAc419axiO6OUiKh\nKXLmpEdBpVlxPEOEqE3Ljw3mvo3OvxPDCZP+7iQqxtHHQH0fePB4EI8580E8MgIaenwcNPTcDPqL\n605duXJJREQuXrocHLNt/HuOZKM9U0iWd+TIkSDOZCBNlIh6f/HlV+iaoLvvP3lvEMdIfmSJVCjm\nvJQuSa2OT4WzLNWghFmcPLFFjrKLl1ALqFrBGG2R1Gq5vZU4Jgcgh7bp+W1ycKTvpPGdwvkxmm8p\ncqxs+5cxXbTBQ8fRZ+PD6Mury0gSx+03N4G+HB/CfZoO5mkqgudit9viCpKf8fwZytL4oCSIs6N4\n9kzC6++WQ1JyFGMm1bgaxHfvwzl2C+3FJip2k7ZugRJ/v+AEhRkqlRU1sF6xNO824YhxTcwZMu2I\nHfHme9xFPyR34LCJ0FwwTU46iGvULBxfHxvH8YdPBrE1Cek0uY5xYXwTDp5ME++RNCFJJNhR50Ke\nsctePzskRZWEahnSM6Zb9D9cc8zE2n3tDPr/2lVsj/ixz8ttxyg5DAfmsG7mhrCeDpBkalBizaFh\nrL/lEqSujZLXHjs0FK/SFgHTgHzXIHdeneT5GEnoMepX/no6dORgEKczeA/+Pi+XKHElFT5kBxYn\nKI0lvH6bmcO77dA1ypRodeHqhSBOJNB/xR18n+87AEmtVMa2h25QJkehUCgUCkVfQn/kKBQKhUKh\n6EvcUK5qs0RFdL1NsRPh5Gm0O56uY9ugGet1j5pqUN0oixwTCaL60inQytk0qKso6Q/sqGnRfdrk\n1GgRZVeje6XJuTA6AQq9TtS6KyzH+SXj6T1NSib2d5fm79aQylGSQ6p989ZzV4K48OofBfHMLNpk\nMEu1Vuiatu+um55GjaMjh+HWyqQ4SSDarUX058YmZIo/+dM/C+LvvvS3QdygeizLq0iw9cOf++Eg\nNiwadSFnFCWsJLdGe5eup47j+mcxkk6vLMCNUK2B8p+eBoWfSJArZhxJ9nqBOiUCYzdFLkHuInL7\nscQrlLzPJcfF8ornpLpzH+rXTI9g3rWIgp4ZgXTVoFpu5TL6KWXg/MEBjIO9Yxh7nKQvE4M0xjT0\n7Bie4eoq3qNYwjmTA95cZhcIy3jShBw0SBK3UMz1ebgO3wegVskIrTl2HfLccAbja2dhJYiXLsKh\ntkh0/1AE/TLhZwF0yfUSo8GeZOk2SrXssHRKdRbOn+YTcGdW5+Giyx7HOjGwCrmqfRbuTGMD7V/m\nBKo1uPcaJPea7XfLvUmu40Vyi8G1FKnmmFXHuBlx8L3y3FVIV73A0ia+h7ZIHoyvQFZkGZ+MSDJW\nxrucOwfpZjehblGwhl9aRkc9+cDdQTy7FxLZ6hpkoQ2qcTYxju0ZUart1yJJtEV14FZJSr5w/nIQ\nP3Dy/iBu0jaF4hbe+9w5L5EfDUNJUzLJuRnIT7kM5m+9ivu/8Tra4jrV95qYxJrRDcrkKBQKhUKh\n6EvojxyFQqFQKBR9iRvLVVy7hyg1xwal1iQHSptdLHyd9rudWSGHVhc+mMvBZ8lhEYsRtUsSlUk0\n655JUO6cMIiTkl29DodCchS7yi2qi8I1i3aT+oXoUa7X1fEtPjxIR5jGhMNgYQE1pYrroL7ffAt0\nc4S4xohBbricJxMcOoiEfvOz87hnAi6CJjmXuP9PnXo1iF9+HRLV0CgkjsFhOBNeewOuq8efejyI\nBwYhP7qcvJLcdRa5eSK+dGkKJZtz3t3fIiKbRL9WSpBnBgbJPXYHxuLRqTuklzh1GnVgeHw7PAgN\neq9Qe+AUmj7S9GVop4h3XV2kk+mDpou4RhT3Vh3PkorCdbO9AamlVKM5S/KCS1KKSc97tYExydLj\naglrz66cnomQ04wcmRGSqWNcoyrCSUuDkFWPUK2+XmFlBe+YJFdJqwaJoXrmDM4hOb5ASfLONUHl\nx9Y9GToex3wdp1p8k/TuuRZeci5OLszH7gvixgkkkdzZxBiZINkreR2ybpPW12YZ627Don4RSDgG\n9Z3peM/m0lrLfSKh4/R9RO7ZF9cx5spjkETuOYF36gXOL6Ft7CZk5SzVjGuQtFOqYD1ZILnPMNGu\nu2O2eB3/nqaagxErTjFk6rNvPRvEly5eCuL9+9GXXIduk9xxg7RF5NvPPB3E29twbz3y6INBzDUd\nT53Cd8ep173ElQNZkg8tyIcz40iium8P1owlSmx68ACSxF5fg6vMMsmK2AXK5CgUCoVCoehL6I8c\nhUKhUCgUfYmbuKtAAzL12yQXi0mOGYepZ5Z5KN6Vl1hmYrnKIG6Yk5bliDqzKeETnx+n48kkUb5E\nE+4QVd6Kcpl2ULfEvoao6l1a1HU/ALtFD/Ds038YxLUyKNJ0Eg6O5TKcS+GETty2kA7totcWLC1G\nqYYYu+i4n2t10POvv3E6iIfJtZNO4zp7p1E36Xz9chAXS6BOB4aQPIuTuRnkJrJojEYi3m/8Nskk\nFaqJs74C6rbwxlt4pyJkkkYK8Wuvvh7EIwtwLEgP2PGkyU4gcj7S0LSp/1h2NWheR0iCSkb9hHpU\nu4gTgrJEYJNcxUnqBkkatMug7be2QGWz5MQ1d1h2Y3mtTOdYJKHHSV/aWfOeeYcSGbp0rsVSG0tR\nwnKZ2/EcHku9wvlt3HuoBplnZwWJJ80FHN9Dbsf0INVHqlLCQF8+2HHQJvUmxsRyGXLAkos+t2bh\n4NmzjTlgvgaZeGQLbqmo754REam/DpmitYK1ZJXa34jhXQccuH+iJKtJ098awDsD6E9ydtXGSZZd\npnXoK+twUY1sQtZ4Yu6j0ktYDtpmZABr2PwM5KXhMbibFpcgv9Tq+OzMLCT6iC8zzs1ASjz51Gdx\n7iQkn+XFy0H89De/EsTFbfTH3lnIQpUiZL23z6CP60Wc/9x3vhHEDzz8WBBHKffim6dfCOJz57Gm\nG74kmUthbEbJBbmxhK0Th6iN4nH8PEljuMv+AbQdGaS7QpkchUKhUCgUfQn9kaNQKBQKhaIvccu1\nq5rkqIqA2RSDnR1cOogknZD7wy/NfityFUsgJvOWQjvJyS0Tp531qRS5sSjZ0Tjtxi7ZuH65QUnE\niOa32DPlh+0Qxf2uf/6+8EEkEtxYPBfE2TTcZ0ePQgpKEUW4sgSqemsTMo6QDDA74yUFe+gB1LKJ\nRsnVw845esn1DVC0yyug4afmIJ1Jm5I4VkFrZzKg09kpZJEDjGXGNkmqpSoklOVVz1V24cLF4Ni5\ni6Dery0jSeLKdVC3U5NwqSWSlJRPIMk0GzecWu8bcQvtGqrNxfW7aETy2CRFKZzA028nx+3syrJM\nvgqP2FjHo45DkugQzuH5zlIQ95NDcag8HKtndHj3Mi2XalGRvsHrCsvn/Cws6ZkGP5f0HM+eXgji\nqQ3Mu/l1uKUyLtbMgYNwm0weQx26+jLk22zDW8dMmjvpDVwvWcO5TSF3FyXdc599Hsfp+yBJnWJR\nslWT5N4LJD/92TVIEocz2ErwD4Yhs1AuTbGju3Xl+MsGIeuJLn2NbaSx1jt3Hqbr4Z7xBNaPXuDk\nHZCZ4lTbKcoJF20k19s3xfX3SLITzB+n7c3Jj33ik7j2IN715e99KYiXlrGepiK4z+OPILFjLkdy\ns432u371pSAu7UAGnaO6U4cP4zorq5C6Gk08754prOOturcFYSCJd7PJzdcokrtsEQ6wSBJa1OA4\nPru5hfFG+U67QpkchUKhUCgUfQn9kaNQKBQKhaIvcWO5imSJJtW+sSiBGFPMVotoaJKXDKqts1tP\nJkQTs1xFnCQnbqMN9KGd9VEuHx9DHCHpSiKgA+02UWYOOy64/sm766Z48M7h5HEO0bZul9pdXfEB\nZw/MRUA/RqiG0+ISkvFJDO2/dx8oyo89DjmqRf08P+9JXfv3onaV4xB9zUOM2phpzu0i6PkxF7Sy\nSboo5R8UixJfValuz5UrkJ0WlynZ4fXLQXx1GZLdypbnvqi1IDNF0ni3oWlwofk5uL6iNiQqiUD+\nSrpIcMXJDnuCkEMJh9kIxInu2l3Gpknj1/HnKSe7dFke4uSgXSQflp/C9+9cP8xx2AHFzkqaV/TE\nNt0rlLDPXzfYOWaGxkyXxKbUTfyuUZI+G7Te9QrXtyApJXYwpnM7GGsXyjRPxiGZ1qNUe2gOY3Zq\nj1fXx6nBRTVG8670Cpw0qQ0kFBws4f4xctElTcxlJ4V5mqJErctUe/Ar65Ckv+SgER+gmmNPDcDl\nk6AtDLY/RlwaT6bFOivCLXaPkUzyyU9/KojPPAfnz1qZ5m8PMDCAgdeiQdWgNqjU0Scx+g5zXeYd\nENfrXly4ADnnwrU3gngiCokqIrjPoX249sF5jJlu37ltF9LR1g7k+rV1rMUuzd+XXoajtF7Bu568\nF0kCz7zmJSQ0XIyfWgN9ZtNviDIlT2yR9BlLoO+bNCFLRcoA3AXK5CgUCoVCoehL6I8chUKhUCgU\nfYkby1VEI7VIrjLJadU2mD7mmGjjDk4rpow5aRdbKSyL5CeDpCuiMCMW1SIi2o+v44QSpHWulcOF\na4yuMpJPiUvna7TfdeZNYDDlfysfeH+w2qz5gX7casI5tLYIutBoYGf+wbn7g/jkfchuNzQwLCLh\nelZWlNqEstNxcroNcnlsbiFeXwP1nc2A+k6PgYZfWAJF+kd/gRpONQdukYYBStzMgNKcoOt85BGv\nfssQJdJyydHV3AJdWl5AXN0EpTt5ADVxDEqYWNoGHd0L7CYyFBExpLO8xEn3zFDSPTq/w585/O+m\nxfcRitnJ1rloXZtq4vAU5wSEbug69FmuCUfXZIOXK++2XRkhNyTXseKEpJ2lRJ6DbZIWXKP3fwvy\nu7SEnJ5JyKSLW5Cazr76chC/tA3JdHBsMognJjwHZW5iODh2OIexXqtgrI+XMb6j1IYRanAjJD2T\nAy9Kiego8ebmGKSjmT0zOP7y94J4q415mnJZF7T8e/J2ABrPtGWgRI9VJOfWgb2op1dawXx0k1hX\neoEq1VpzSbK1STJ1qHaV3SQpKPTFgc/W2t4zR4pYK5slOPKaWSQRbNCEabksS1GdNuo/nnf1OtbK\nU6chV21V4XSKkjvt+b95JojPX0DyxUcfeySI5w54Wx2+8IXfxvu0MPYmZ5Dcb6hJ7sgG1vM4JZgd\nSGN+OOTo6gZlchQKhUKhUPQlbsLk8P9xDgn+04o3QLodY4N/Tfqh2+afrJ1/VXK6esPgmDYMm/wK\nnN+DfimH/rol9qQL32LcpOxwKP07V3e+haw5odfmTZ1mV/rotqFFKd8jMfp9S5uN41n8Sq672Az5\nH7/xxSB+9qXvBPHMxLyIiEzSX5DDA/jVb9FfMk0bv95feuXFIC7u4K+syib+KtwzjGturmNjXc3A\npuJIBH95JMcwFkZGsBkzHgN7kyW2ZXLU21g9Po68FrE4/kqx5vBXxeoQ7v/aM2CSVq/j2XMj+CtS\nbr4f7n2By6xEw+WZ6RzeEIwzePyGJ7lf5oIrsbudNxXz30dml3kUyjvD+YxoUzHTn80m5c4K5e+h\nzadm543+LZ8xJGJXXHo3l3YYW8SChRnUzu3IG+17hWYVA2aDWKcobaodm4QRYKKJc9YX8Rf90sXz\nQbzgN25kEHPqxRRYncgqNgYP0lw/SuVUPpPD3Ek0cE6c2IdGCe1Zpc2tD33siSA+NoYNxq8tgiFw\nqeJ9jOvp7JpOKN9ZKYH5WKRkT6/Q+rFKX2nHU2BscqNgxFyzt6aAJuX2abepzAgPr9D3EMa9Q/Ot\nSWyPFfNL1Su2AAAgAElEQVT6cI5KPUgdbdOoYuO4QRW+xSCWiGjbFpluuNp5NIprJlPIpTZz6N4g\nHhjEONzcgArwve9+PYh/5z+Atfnc539EREQq9u8Exy5fxfNuNSjPFjHpkzn08d1H5oM4TqV0ak3O\nK9QZyuQoFAqFQqHoS+iPHIVCoVAoFH2JG8tVTN/y5l2ni0RDdGOYBOdNyP4GQeLueHNZmPjuTB+z\nXGVwAh06h4snO0Rr83GWtEIbIOmKTInzJ3dhup0lKj7sdlO/Qnk+ei9XzY0iHfdGBZsYXZKRRmjj\nnk151ssVbPBar6DC7OJbXtVh6zQo0gTJQ5zHyHaoBIINyjGaxX3WSqtBPFilSvIGKOm9h3D9GClE\n4zOgV3PDVM3cAgXbpCrMa5e9a156ERvm4lFIbQbl4ylXseGvXKSK2rR5c6mAa7e4P39abjtiMdpw\nT1Jnm6Sd0EbaUHkGnj/8d473Wce4Bdm1S54NlqVYSeYSMa066HmWhkOphVjuDj0iTuLP7spUxPaH\npC2JkHTFFdnNztIVx+YHsPHYJPlgixaM1XXMh1EHc2A6g5xXM1mM9YMjmG+GL+GVqxijW0uQF4r0\nkhdamN/bVPrkPpKb95AyEG9hc+2GiflwhXLE3PeRh4K4FYF8LIePBaH7OnJ0OQl8ds3vlw2SFmtD\nkNq205CV//gC5K8ZyvFz5SqkOzHxfgNJtF0vUKb8LjbldInTWtgkWcaxuHwSlUBqo82mBrw+LlNO\nsVQKa1WLNunaJNNGqP9KJbQBy92DQ2jLBh5LBnOQxu6/50QQf/mv/iqIL51HGZyxLGSn556BdJU/\n6pXXqJPEKZQfy6Q1eW4P7jmWw/USVJqpTbKbFVW5SqFQKBQKxQ8o9EeOQqFQKBSKvsQN5Sq3i/xj\ncB4NllxC6lJn6WaX/eZriHR2T4QKWBud5a3Q7zS382dtotzbRAVz/ouwZNaZot+lucMiWjeZ6b3K\nT72Xq/ZMIVdF+Txy4NhVOqkGicbiStcRUIoJoqRtPxeJSTmN2i6VY3DhLogSLWtSCY4RqgYv5Cxp\nNhaDOJ0G7RqpUp83cXx8Hm6sfVMHgziegVzFGsrWikf9fufK08GxhSXQrzzoWdZh9xGP41QONHgm\ndwvlcd8HmlTF1+EpEMoTw5+4uUNpNzUMS1stetcYSQeh6uEO0+2kOdFEsTg3TiihFDk72BnV5e+v\ntsMuS/qH3UdgmStcthrHSeHmUhLsGnXoPrbTe3eVwQ65KKRfNwtX0sVl5EI51yRXH5V+mI1Dv530\ny9kMkAw0N4y5ECMJyTIgBY00ID+NkF2N25vUBlmjuV8ZgYTiZnD90TjmRnYMksQKlWGokcT8Ztl7\nhreWIKuvX4D8FBvBNdajWLNaJJ+cfg0VtfeQDNIwbi5xvB9slaD5pCysAzZ/n1GpoWoZ55dIWhwd\nxXo9Ne6tZ6+TK7VaJWk/hzHTojw9FjmnGnXOV0flkKg6ukHP++CD9wRxkkpqvPQ83LUmlYE4ec+R\nII6SM6vkS2zNJr5o6jW4qw7NY62+88gcrk0W1UYV78QSXJTLN3WBMjkKhUKhUCj6EvojR6FQKBQK\nRV/ihnIV24LcUAViSlXd5lTcXZIBhuQi778m08ecBIqT65mdJSqji8zEFHdIluJzOBtfN9dER0cV\nJLOQ46pLcj92VIWv1u13Ze/lqufPPBvETg2SkkX0bUgCIFo/Ta6NsVFQ0qaflKu2TWUPSqAZLdYG\nqJu59EN2D2jtTAY0rlNCm+ws4fqNHZLD6PKvfxuur4unkDAwMwAanOWRctmj/2sl0KhT4/uCeCgH\nyjWZImdEC+9XqYGuTWaQJKtp97Y/uWQDyyksMbMsxGqIQyUT2GkVSFCkOEVoQHCJjjaXJAmtDZ2l\nME7SZ4TkMn52Aq0xIdmLE/mxg9KXzNo0yEJVq0PnUtJBNpBySQq5hXXiNiJC0rBLyRKNdI5iGo8t\nvEOzjflwsdmg2BvfGcp8P0btmiT3YDKBDpolOWCQEy7SOjFuQRa7Wsc52QzkpxzJt+VVSG1OGvN9\n5+BsENemKCmnP772ljE3s1uQ5ShvpEzmIXckYyRfD6LtclTKode9abaRfNGwhvkfgjBqQWZJWuQ6\ninGSRbT38lUvcWOMEhmuVxG36Xt4cgTrUL0K6TGXgYvKoNIhLSqNsGd+bxAfOHAoiL/zrW8F8cwk\nrnP0CJIEchtnB7B1YMpPxHjsIKSouQl8h9x/F1y/k5RQtV5Hfxf5t4DJevPNe1OZHIVCoVAoFH0J\n/ZGjUCgUCoWiL3ETuYpDoonpFCdUjInOZ9cCHd+lgTnBVqgUFstVoWR5TF9z5W++Dh2nquUsr3WX\nrkhqo+dlV1enxIBdDCzvULw6uzxucKWeYPIIqMCdZcg/tRJJH8QDR4n6nTkE+nFynuQq39pz5TRc\nELU1OLcManuuGxYnx8fhQ6BIc3tAedoVtNsbz14K4soinCVc8qtN9X8adTgPVhYRG+QEcvxK7APk\n1PjoEz8VxMPDoGUdlxIZkpzTbON4q44xd+ECal31AlzrjGtHcdK9kNxLsUMzmCtym/41eU5H6XPx\nON6vW7XzkCOT9R+i6kOVxElvDDs1edzgGTlfYKgO3a5rk6Qw/hzL2rbTWWM2Qk4rxBGr8xp3O3GQ\nnIHNBtpqewOyRi2NudEoIflbuYzkfQ2ySjq+dLhJ0tY2OWzaTYzdNq2vw+R8PEPOqePklhqmJHdv\nraAG1vwSxv3hZcy7GN3XTpFji+QtJwuZJ+uP0RRJIJND+PcIjY8UJQaMpig7KCWONG1KykdurF7A\nqcHB9uZZJF8cHqP6WS0kFz2wF5JddhjtXWtQfbJlL2FpIkF1zWJpivHejQZtBSAJvd1Gu9eqVF/L\nxfHBIUiir7wCd9rOFt4jk8H1t7bRx64NaW52Du+asLx+uPsItgJs70BWNWyqE0dOM9NEWwwNwvXF\niUij8Zv3pTI5CoVCoVAo+hL6I0ehUCgUCkVf4sZyFYMpZuKq2YXQPaHeu4+77ILg31rEDHNdKIfO\nCZ3PRieSwBxyeXANLnaJhXSyHwDk78HudnZXVcrYXb9FDob6NijejTXQq2sbqJ/SqnkSUX2Ldvqz\nbGiCfiRWVMo1nP/GC0jyFc+Anm9RTZPGNqQog+oQtchZEqVd9yznGNTPVmg3vhfvVCCvPfvy14L4\n4KE7gjibhVMkRq4UTjpZJ2fLRgX1sHoDkmDpIRyXZRZ2TlEbsHTD88efb5wUzyZJyG5yH+NzEZNl\nHpqz1DZuKBkhu7Fwjk0ymUXCVLfab26HNalNFwzXo+Pn6jw2ol3ew5Xey1WPnUQ9p3aT+rPJjlX0\n29tXLwTxtcuo3WQ0ME+Gk56EsVKEvLtJ9YMqW5jTVUrUZtPacMnGpF0nF1XUxn0u1CCdPXodctXD\nl+Fw3FnE8e0WnFaZQRqjVBNu1z7l0H1yWUgWKZLuDHIctek9IpHO634Tl+wJKg2q+Uc3W7mA9iht\nQ+K7Qm2zZ3ZPEGez2BZweWFBREQiJBkXyRU6TG2TSWBtSGdY5kFbF0to63gca+7gVaxbC5cu4rMt\nrG2RGNry0oWFIB4bw7h54CTWyK117/0y9Lm1GsbAMrlxGznIbrEE+jg3gGeMkfuvQe7WblAmR6FQ\nKBQKRV9Cf+QoFAqFQqHoS9ykdhXHIW44CENyFWdmczvTvbs0sBmSkDqf2w5pUVbHcxgGSVQtdmew\no6qL6ytckKpzQrPgn43O9+907rs+y+ff9Ozbi8FRuIjYZTRKDzXZguuqXQft2qpTkqoaZKxWre3/\nFxepU/2VBtHNjSYo0gbJVS2idMu0655ytoXqGhlUa8XslqgtJFfhcJv6KBLxKVAHz3L12itBvLYD\nR1dmCNRxjpKMxZNwnBhRXCe5t7eceIu0IK4pxfJL2FEFcL0tTq63myeR24iT9fH8Yqm3TkkCo2Zn\nWdmhNg7XhcIlue4VG5pMoqdDbihONugn/uNnN7s4I0PONJPXCaDRIsfYLczr94soJalMpkHNG0mq\nC0ZS08ceOBHEy3shcZRKkAFGhr26V9UiZI1MBBLAdhGy87UdyCclqoUlJFG1SdvcrkCikiQkkeYW\nnF5f+sM/DuK774QcN0ZJ/9oOnnc4BklY2l6/NEgmGRuDU6hSx+fY75tNwXEUGgskMRd3sMb1Aq6B\nhWtklJLbLaEfhkbhRFrbQj+YCawnFZINS75zdHsN0uOxQ3ArxQTnJsm5Wqmh/coV3L9WQxuMjaE+\n2tUrkKhcSnrK85frBeZSWAtrVF/q7cJbQVz3x4pBbseoRd8hLq8lOG43aKtDGd8dFsvzLZ61naFM\njkKhUCgUir6E/shRKBQKhULRl7hJMsBQNkAKQ+nygqjdxV0VqgPjU4uhGjtcZKeLI8I1Oj9qWDgi\n1wi5T8LPxTFwOwhplrFCSQT5pC4utQ8C0RioUMtEe0ZM0OM5E7SnSxRo6PcwJZUyXY8GjscoQWCo\n3hH6oVaHm6NWq1C8FcSODcqTlC6xiZa0iHo2DDy7HaqDxLIFnjcaQxxPetfh2k8shVnkUoig6SSe\nwvFYEtSwRZpahGSBXsC0Oo9eK+QKIodSyFVI/cN1nPyPuiQ5RWjasRTlsFQUquXG90e7sqnNCCUM\n5HNwPEa1zSIRlo+F4nfXvYpF0B9s3eJzI1RIyyK506a2YEmr5d66CfX7RSyKAcbJ7ZoN0PRuixxQ\nNuZmNovPprOYD/W69z4GjZXcMOSFCJQdiQ1gTlkWrjfALiaHaraRfF2swOFSp+PxGJ5lfAKJ/EaG\nIeE4LUhd9SLkiaT/Tly/rkiJStfWsZZwvbsGSx9NSmpJ9cA2tlnquv3IUTLFBA38kYGZIGbJ1jLh\neo1Sm/FgHxnwOqveQvsO5mhRoqU6TvLuQAr916JkjixXpdPoD15VolkcN2nuN0hGmpuBVGpQ4sgG\nSVctX2blbQmxKLmlotxPuAa7MBt1jLFEhNdzmu9doEyOQqFQKBSKvoT+yFEoFAqFQtGXMD5oyUSh\nUCgUCoXig4AyOQqFQqFQKPoS+iNHoVAoFApFX0J/5CgUCoVCoehLfOh/5OTz+cl8Pv8n7/EzT+fz\n+Y/36pkU3x/y+fxn8vn88M3P/L6v/7P5fP7/7XD8nnw+/5t+rGPjNiKfzz+Zz+ef/bt+DsX7g87N\n/oPOTQ+9TwDxPlEoFJZF5Cf+rp9DcVvwL0Tkn4nI5s1OvJ0oFAqvicgvfpD3VCj+nkHnpqIv8aH6\nkZPP500R+b9E5IiIxEXkeyLyGyLybKFQmMnn818QkYaI5EXkp0XkORH5oog8KCKjIvLPC4XCt250\nvUKh8Ev5fH5eRL4kIl/1P5sVkc8WCoXr+Xz+KRH5V+LlRWqJyH9TKBRQxEgR4Gb95Z/zy+KNs0UR\n+YiI/EE+n/858dr818VrY1dEfqFQKJzJ5/NPi8i3xeuXQyLyz0Xkn4jIcRH5vUKh8G/y+XxaRH5b\nRGZFJOof/y3/sUby+fyficiciJwTkZ/x7/uvC4XCY+94/l8Ukf/Sf76zIvLzhUKht4Vt+hNWPp//\nLRE5Id78/Kx47fpPRaQqIivizaNiPp8visjviIglIv+riPyBeHMtKSL/vlAo/Id8Pj8nIv+niKRE\nJCMi/1OhUPj6B/xOf6+hc1Ph4wd+bn7Y5KohEXmjUCg8XigUHhSRHxKvIRnpQqHwZKFQWPT/f6NQ\nKHxMRP6leBPzhtfL5/PH/X87JiJfKBQKj4vIayLyk/l8PiXewvCjhULhCRH5TRH5tdv9kn2EW+kv\nERHxF7plEfnpQqFwRkR+T0T+RaFQeEq8xff/oNONQqHwSf+cfysiPyUinxSR/8H/918SkW2/7z4q\nIv9jPp/f7//bCRH5WRF5QERmROTTnZ4nn88/ICKfF5HHC4XCwyKyLSL/9XtuAYWIyFER+eVCofCQ\neF+MPyYivyIiHysUCk+KyFXxmAIRb3x8uVAo/JKI/KSInPXPeUK8hVNE5LdE5NcLhcJHReSHReT/\nzufzH6o/yP4eQOemQkTn5oeLyRFvMM/m8/nnxfvVOSUi97/jnL99x/9/1f/vc+L9cLnZ9UZFpCwi\n64VC4bR/3hURGRbvL5IpEfnzfD4v4v2i1URC3XEr/fUu5PP5QRGZKBQKL/qHnhaRP6RTnvP/e01E\nXi4UCs18Pn9NRHZrRzwoIl8QESkUCrV8Pv+SiNzr/9t3C4VCyb/P8yJyh3h/xb4TT4rIQRH5lt/X\naQklR1e8B5wtFAorfnxNvDn28m4/iNe//9SPDUH/fkVEft5naP9aRP69f/wpEcnm8/l/5f9/S0TG\nReR6r16gD6FzUyGic/ND9yPnvxKRkyLykUKhYPsT5J1ovuP/d9koQ979g+RG17Pfca4h3mKw4P96\nVdwcndr3nX0QE5H2O46985x39p3dJb6Vz7+zEFq3H6kNEflSoVD4hS7/rrh1vLOPOs0t7oemiEih\nUDibz+ePifeX4k+IJ388Kl7f/GihUFjvzeP+QEDnpkJE5+aHTq6aEJGCPynvE+/XfPwmn/mo/9/H\nROSN93m9t0VkdFfSyufzj+fz+f/2vb7EDxA6tW9dRIbz+Xwqn89bIvI4nd8WkWihUNgRkaV8Pv+g\nf/zjIvLd93Df74pHkYu/B+A+EXnZ/7cH8/l8Op/PGyLysIic6nKN50Tk0/l8PuNf5+fz+fzD7+EZ\nFN2RFZH78vn8bqXJjv2bz+f/oYic9DX9nxeROZ/6fla8fQOSz+dH8/n8v/tgHruvoHNT0Qk/cHPz\nw/Yj509E5OF8Pv+MeNrhr4nI/y6evtwNM/l8/q/9c//l+7mev7HtH4nI7/if+V9E5Jnv/3X6Hp3a\n91dF5HdF5CUR+QsReZXO/6qI/FU+n39ERP6xiPyav5nxF0Tkv38P9/1N8SjTb4vIN0XkVwuFwmX/\n314Sb/Pc90TkkkDODKFQKLwk3l6Dp32b5ZMi8vp7eAZFdyyLyP8sIl/3+2hMRDothmdE5Df88fMt\nEfm3hULBFm9fx+fz+fx3ROTL4vWx4r1B56aiE37g5ubf69pV+Xz+soh8vFAonP87fhSFQqFQKBQf\nMnzYmByFQqFQKBSK24K/10yOQqFQKBQKRTcok6NQKBQKhaIvoT9yFAqFQqFQ9CX0R45CoVAoFIq+\nhP7IUSgUCoVC0Ze4Ycbjx37px4JdycmoFRwfzKaDOJfA8YiBhJbRSDSIMxmUTIn4pyfjuHUkijgW\njQWxFcFvMCuK2DQ4NnAO/WSLUcq/aqMRxI7gecVEbFIuznrdCeLltWIQr294sRHBydlsMojbDo4n\nEniApXXUlVtcxvWuLiwEca1WxfG/ehEvdXvRcZc5bz532sie7jhIjtmm4+022sdLmCnihi6Nx49G\nOg+xNt2Tr+e2cdyl3+DhBnE7xlaE7ktjioaINFuUMNuN+dfGOOBnabfRn9xGlkXjlQZaxMKYfwdu\ne3/OzAxTIyA06GWjMTyn7dDpLfTrR07eF8R3HT8iIiKZDOZ3q4l+t2k8uCb6xqF2arXQfs0GPsvt\nnsvlgnjf3HwQp1O4b4TWAZfeqVjGPNne3g7iRtWLbRfnrq7i3PI27p8ZSgXx/gMjQby5sRPEQ6OT\nQTy9Z08Qf+7Hf6onc/NbZ/8m6KB4HGMqGsWYisViFCeC2OI1k/rc9PvIovbDmSJJw6LjWMciLq7d\nFpoPBmKeM24b12cfS9TiOUjN5mK8mO9KuOyfElwP/87XaFKVB7tj4mURg6Zdm67TcvEeI9bMbe/P\nX/jlfxi0wnOvvBAcL1UrQfzUg6hH+tR9jwRxJoGx2bAxZuMp7/gzzzwfHHv6a88GsVNDw08n0ZfN\nCr5vzqxuBbFNI2F6cDCIf+4nPx/Eg6M4/v988U+DeOEKvrfi/EVLvxE2q+Ugzo15FT9ywzg3O4ZU\ndQaN69oO2mg2OxrE+0YwH3d28B7JBMbqb/z2/9exL5XJUSgUCoVC0ZfQHzkKhUKhUCj6EjeUq44f\nng7ibBK0UCIGWipJdGOC5CXWCFhSivifjRC1lSB61rJwvFoH3eyaoCQjROEK0+Y2yVI26EyLaFlx\nEdfqePZtile3SFJaXA3iaNyjDAdS2eDYTgOfS6dxfGkb1PfVxRWckxwI4hzJePFo72ulsuRiU/vU\n6qUgXltbCuKNTTx3vUHUfxnn1xoepdogOSIRx1iJkFzVaOIc7udWC8/C9LRlYdyEpDMXsWninKEh\ntO30NCQGp43zSyU8e6Xk0da2jXs2mqBLTZNkIKLnR4g6HRqYCOKZ6X1BnIxBeolFu8pY3ze65bdi\niY3vylS/QXJviMb3ZSyXaP4UjdEoySIxkrSuLCwG8eVrF4N4awty0vYWKOaDBw8G8YMPgbaP0Vhh\nOdNxIC+wUMr9aje8OWuTcmGYnf+Gi9DYGxoaDuJUAvN3eRXz/iqtK71CuH9uHrus/hg8ToHdqRGh\nozSlQtJsy6Ui3yZGDq/dLP8YLCXTeOJnaVH/hJ6d7msancfx7vl8f4elLXoPk56lTedwzFscxOks\nb90uJCzMk8Ec2tKmcfTKy38bxNVlzJNH7kGh+Ok9WFui/hrVqmENPXv2QhDHab0xhiHBZuK4P0vM\nOfrOPTI7E8TDtI0kQV9J01O4ZoLa787DR4J4uYg5/vRpVAypW94zp9KQ0RaL+G7J5bBum7Rv5OyF\n00FcWkGR89E4ruNEWIDtDGVyFAqFQqFQ9CX0R45CoVAoFIq+xI01kjZcQa0GaDKzTRIRsUV1ulyI\nHiREDY8+S0QhaZRoF7nbAn0ZI04y1gRF5hCl1WA3B9FoVhSUVrWG82vk+KiyXEUSTKkKaaZFjrGW\n47VHa6ceHGuT7JMjyaZWQ9tlB0ElRskJMz4Ol4ll3ajQ+u0CO5fQVjvFzSA+d+FMEF++fA7Hz78V\nxIvXrwZxzfbav1oHFVul9mOk00SpstuC4hp9NjdAu/FzcB3U62hbliwmxrEbn51FNZY9SQYp7njX\nYdrediBXTe3B9YYGEd974tEgTg7gPsU6STskvcTk9stVtk1OF5aGTRYs2HnY2ak4NIhxN7/vgIiI\njI6NB8fYpWaSzGOQe/D025eDeHkN1HutBofF8jrG2NAo5prDMkaEHDs8l8kFOTCIOdN2MPc2V71+\nDbnzSIpjUYTbyKJ+GsiRw4h0netLkHB7BdNk+aezRMXnCEmpwnIVxbtvZrHMRGOdZXzLJKmw3dmt\nxxJZmxxKLCVzO1vsZKV/cVg2J+m5Tefsyq4sp3J/stzO8rVDz8WOT5a0Ein0c+gRbxO+/Q04oMbm\nIIHec+yuIL5w9griC5eCeCqB+VhfxZwZ9+X3/PRccOzwvvkgPn0W11ggR2Q6gS/oVBrr09HZvUEc\nbWHt3lnGWM8OHAjiJM392QmsD088BmfYa+fPBvF1h7Z81Lz3MEkKGxqAcytB7qpkCv3EruitDcjH\nJklU0S6SNEOZHIVCoVAoFH0J/ZGjUCgUCoWiL3FDuYqMSBJLgSIyiBI0afe2kETQzdmw64YyDJxb\nKYPaqjcgBc1PTgVxJo6HKTUgV9SImsuSU8Jx+FlwfjxJrq404lwO9HuNaLJqE89T92W1kIOBqHSb\nrB3ZAdCUKaLXTErKVqHkUOwg6RXanBCOqVyL5D8bUsLSBijQwpVXgvjKAo5blidBDQ+DwhwYxJig\nfGBimuirfP5wEL/1FmjO02cQM1WeoQSU7MxqUl9duQQZrVjEmCJjoKTTeLa0n2BreAjUqdmG5Hjx\nHJ4lnUEfjo+C9t2/dz8uTnR657SLtw+Owy405twpAVq7cyI1ludYAkllvDGbzGDs8ouwdCAk+XCi\nwRIl69u3H5T42DgcaTa56cLjkKSRUCJInnEsX5C7ypcvKM9hSLriK4QTVNJ96J0G0pBHo7PT0mt0\nk6VuRcZi6cqUd8cROsZS8kYJcmImBffMbpJML+aBTFsDqKFbNvcJzm+Sm5IlMJu2JzQdPgfX2f1s\n+Bq4f6WK+d1sYY12SMa1WP6k57rnxIkgHtuDMXq7YFdx31eeOx/Eew/g++zgwTuCmOXsOXqerItx\nevZ7b4qISHoIctbPfP7HgvjK6jpdG+7F3ADWKqeF9j397HeD+PLLcEJZNB+yCXw2KZzoD98RRWr7\n2CDWjcExyPsby96Yi9gYsyPkMq4U4UTmb8HBHO7foL6PWbTlY3JcbgZlchQKhUKhUPQl9EeOQqFQ\nKBSKvsQN5aoo7UJ3iMp1aJt9hOqWxNvkxOAETS6f41FzyRYo0XYbcX0HVFgrASnCphpRO0XQrG1K\nTJiiei5JlyjAYVB81Sbo2gq7dFxc3zUhjTjkQmr6lHiT6F+WtkpFco1wUjai1SNUXykkH7k92Ob/\nDoQkC5I72H0UiaHfpmZBBZ6I3h3Eddo5v+HXB6pSjRTTQj/EyGVXroDajERBQ7dsfDaVoiSBJD3U\nKuirTAoOG8NBPzsNcnDUiE5nFYmSULbEG0dlqsmzdx508eIyxtm9d+eD+MB+0M4G1dBJUB0XdgT1\nBC7LOZ3lKqboQ6WD2N3CifZ2j3dJHMhzmhPqRalo3PYmHCHxPJIjZpKQf9Yo0R6r2pxL1KF1JfQ8\nNGVY3tqVMlj15fcM1R6jm3I9LovWKbsBKTkSu/3uuHfivSYDDOlvRme5apfVZ8PdBska3/rGN4J4\n7zzk44FBzPsGuWoNmidcvs62uyX0Q8xyVYtccY6wS4vioD/b9O+UBNQgRxVdr0WLBjcRX5tlsV4g\nk4AU066hvc++joR2bhNrxfxeyKFrK0iot//QnUG80PbcWOdefzM49rP/7L8L4p//hY8HcYIciGLi\nPltLqDkV28Z31SiNe5YeX3vl9SBulLH+NsjZdn0bz7tJ20j4O7ro13x0SZpsbmJ+TY5BKqVdKdKm\nrSLDlOCw0aZrW1SLsAuUyVEoFAqFQtGX0B85CoVCoVAo+hI3lKsaRAO2iXtMpUCBsRQg5ExJxbHT\nuohQczwAACAASURBVF7BZze3PHlnbAAUcDYDes9pIplYgRImTc7COVVsQV45eBAJiyLEXLkO7tnk\nGiZUV6TtkFwloMailBgrQtRmxHeXmLS7u+XiphmSQlwD9LxFriunjvukqRZQN8r3tqKLZNEkh1qF\nJKUrl0GvFs4jMeDWJifX8955D9WK2iluBHGaXCojo+jnS5cu08MgTCQwLmqb5IqjpHTZNOSwa5Qk\naigHl9TEMCSl0RHIlaYJ2rpU89xYEdJJNjZBL7fIBcLH01SDJUlzIRbrff2xXXRzTllkZ7NCig/J\nW+QuipDUtCtrsAwUSgbHUhFpIBG6p0NjfWsNbda0O7sHWUrh/KFmN5mGM9LR32i7TqpQMsBQ8kty\nlLHMRfR8k+aywa6RSO//Fnw/chUnAOQcgeaupEny3NYWnCwvfu97QdwWrEV3naBkkJRMzgwl2qPk\nkl3WLrdL/TGXHXAsodPxiL+uWKF6eyQ1U3JYmyQtll/bHPOz9FiuunQZ7tNaGdsZXAPr7PIS1q0G\nvUslASlmwMB36JAv1/AaOpyF+8hwcJ9WjZKxUkJfk76sP/7JTwSx8ziSm77wAlxXf/v8c0FsYZmT\niQE4JUtFXL9URbxnFPWwdnPkTu3Bd8SdByH/j5Fz+/zbcPFeuoZ2rND2gyY5szdXIbt1gzI5CoVC\noVAo+hL6I0ehUCgUCkVf4ob8ukN1pFyH6XHQbqkEO7Co7gTRwLZBdW7OFkREZGIQtNuh/aCxyhVQ\njFsboI/Tw5AoLi4uB/H4GO5Za+O5Ll5Emfa5/aj3Mb5nLIglCmmE/RMR4tDZAeX6ScxSRM8z3erQ\n9ZpNosc5QRfV/LHJIdO0e0uhioRp7RDdTb91yyXQ9FcX0M7Xrq4FsWPj/Yf95FTs8NnegsPGMNCH\n8SpoyWqN5EGST9Lk6KtQjbBUHLKX28K9qtugMaeHkYDqjiPHg5jrrl1fQsLAZtO7b2oMbgROZheS\nNokqX7yGtpA2pLnhDMZfDExyT9BNCgjXN6JaU/TZCCXwNHhs+uPDCNVCwudYTrJI5rJo3Buhe+LD\ngyQlVmpwVoRGvcHuLTpOwzZsuuJkb7v/pSvSe/Bxi+SqRBzjrU2yAbeBFaoH1huEZUHqk661eaj/\nqX6fRTUBUeKPrk2qYa2Csc7JWxNUY46fJUmynWmhz9v8tzL11fY2th7YlORVaOy0u/TtbuJJlmVt\nt7Pk2bW+F5/TxV3XC2xSHUSWVzMks0dpy0N5BxLieh3nv34O9QI/ctJLYPjUk5CWLJrHa6srQTy1\nD1s4uK03N7FWbZOUPDaKrSB3P/RAEEcymBun3ngjiItVcsexQZg6sEwy1vjohIiIfPSJjwbHhuNY\nIC+9iWSE2+twa60sQ9Jb2cH1hkfgtIrcgvFRmRyFQqFQKBR9Cf2Ro1AoFAqFoi9xYztIk+heg+qT\ncA0TpoHToPcdm3fFUxInn1/a2AL9ZFwA1Wa28bsrlsDu8tfeKATx0BTotWu0S92pgSa0KYlfzQZV\natMWfnZNGG1Q3/zLj1Wk3bpTCaK1LXIlNIirjbcpwR7JMQ7R+cUaZBSuY9UzEHXK1KLrdo5jcdCr\nTao3tLkFGrrhv8PddyFxVTxBfe/ic1xHhcfT8spSEN95CLWgzrz0dhBvraA9F4nGtGvoreI62jPi\nQoIaGaHkXA3017kFT3ZavoZr1x30Q2aI2wLU7Sol7BoZwPs1aoiNTG8ljmi0M0/LjqIW0fsJ4nVN\nSuTXaHIdKQ9cw4mpfb62ad7cScYyQqXCyfXwWU4SF5K6urikQokB6XwzkJBJVg89TefaSRbZkZJJ\njI0mJecM1ez6gMFyTaimFUl1VZJHbJLDd5MbxlKYxyGJj7Yg8H0caqsI6YZ1Ss7WsrF+WxHcM5HA\nvVh+alICOe7PkHuM63QFJ9O5vE7dwvRyQ3W3ANPo7d/2EZobCXKnPXjX0SDeO4dtE6+++loQLy/B\n0XpoDg6lkRlvS8c2OZiun0ddrDvuQbJWdiY61AbFCsbJxja2FLg0Z/btx/r71A99MoibNJteoYSE\n5y9fwHuchry2SbL/5370cyIisn9uNjhW2+TaY5iPxRKesVbH8X1UI/AIJWxdXsT2g25QJkehUCgU\nCkVf4oZ/jvFGM96AaHHeGd70SBvgUmn8ul/fxsaq4C8nSje9XaQU/3XkCYhQ1eq2jb8EDx/EptL9\n++DZtyivj0EVXGu00TFSRz4B/sstGsFfIA6xFi3aHFyqeM/Zpr9E6i3a9JbA5tjRJFiLNrFKFfoL\nNRHlv0R7v7kx9JuW/xTivo3if5Ip/PU/MYVcM7EU3mFyxMtHw/mKjhw7FsSXr+GXdp3++hugSt47\nxJ5stPAXxuQMct0sXcJfCaVt/JVgGei3XBbMX3kHfykcPoBni0UwdssV7y+CxQ0wRmYa7/bRTz8c\nxA89RhvyDGyi3TtxJIgHaWOhaXb+K7LX6JayvkF/hTeIoeU0+K4/EExmVLisA48TOj4+hr9Kj9+J\n6srDVEWYK0JPTmHOppLY5BpiGnmTPG+cDVXfJsbJZ7bcGifLcjudKqurSxRjzOydQHr9UEmIXpeU\nfweYsQkxOdTmDrHJ7QbW3Wv0l23V3/yZHsJGzbUNsLC8MTyUU4jaKhLHGrmzAwazSn9lx5OUSyzG\nG5I7M3DhfF3SEbsMD7eFS2uxE7reLcQfYB/u24PxvXxxMYjj1Gf7BtEnuTtRFf3tQTA5Dzx4fxBP\nz3qsTpHWNWaX25SHqk7MnkuNXSOWJEWMW4RY3mKJmGwTbPjAIEwdGVpnV9dQ+qFS5lINWLtnpjzj\nTzYNRj1r4buS71+nDeqDGawfA8SIpaP8/UMlLLpAmRyFQqFQKBR9Cf2Ro1AoFAqFoi9xQ7kqZlGe\nbdpszDJPkjadseISoc2++dmJIE74qapPvQlajisq80VCuQ2owvTZ104F8d5xUGfVHUgdF89eDuId\nyg+Qpk2PdxxFaumJadBrG0vYCL2yCLqx5lN52QzkioVtSv8+gOOPHMcmK5uqs8aSoBh54/PwMKi8\nnoHyG1HBbBkfw3MfP3ooiC0LstBQjnIKUanYiRGP4r98Cf2ZSJFU16QU3Ou4Xpsq1u+sY5xduIjy\nEVYJD7myijbk9O8G5UY6fwmfvXIFJUHiNF5HR7BpvR31rnnXA6jA/Ngn7gri/ccwJkqUU2RwBNRt\nJEGp1aPUqD3OxREq68CyA8lkoQIIJJM6ba72zLKM94lQbiij8+bUFuWBOkRS5cwsxn2cNjjHSPZw\nuTyA++77v/PpWUoJbQI23i1Xcfr+kFxF3dFsQLKuEbXfHiFDAW+svpVkHO8T3fLk8AZzrpjOfW7Z\niL/9jW8H8fPPviAiIi2a7LlhrJduKMkJQpva2CWdb2AIa1SKjCVtypHFDR2SqyyWyjuP3W5t0BGh\nDctd4pCh4saXu53YLkPWiyUxjqp1yDlf++a3gnggC8llcgJS10QOfRXxd3GzuSFCZYFWlvGdlaBS\nMyO0VjVJTrJJOjOpBBKPezYXVGkjMedXsmkuHTuM79MjxyDBZeLe+y2TYWN6DKVDTtwHWW59DWv4\n2iq+e4cprx6XYtk7j++rblAmR6FQKBQKRV9Cf+QoFAqFQqHoS9xQrhoaAl1GzLOkKe9CxAU11iY6\nNRaj89P4LTU94+2qfulVSEvXLoMyzmQpn4cDp1WU0nnEKRfE68+fDeLtNUgmpTWUJLDIqVEmZ1iU\nHAKLF+FK2KEd5pubcIbtsvVWDBLV9RIerGmBjittIPX/sUNwbQxNQ64q1/He243OKctvJxymoYm/\nTVDJhANzoP9GcrQbPopzMlSFezDlyT+ZJmjGFUrNHSeaODcGqejiAvIrtNcwuKwi7rN8De3TtMll\nQfk9OM8Ju7cMktQuXV0I4sefRGpxK+FdPzOE6y1egrR56jTGVo0kx9k9GGf5eRy/9zicQvExqutA\nku7tQtf09SzhUDsluU4CyRfJFJ457cuMxSJJOF3cWiwFZIfgvJukSsMmSRF8++ssAdfQfmkqJ9Ck\nXDZtp/MzcL6fXYdGOyR/0efYpcR5q8gRurmONSkao9IPiQ+2rEO3vuXyHQMpzM2NTbjFvvPNZ4P4\nrbe8PColunZ2APPr2Cz6jSVBXie2S3Dz4JMSKhnSaEGyKFWwZrMsyjIS5+jqJlft6ksu9RtXmJcu\nLrtQHMoL9sHpVfEJrI9xqhpeWMc6tL4El1uWtjA8Qu16uYA1dXbPvIhgjoqIVEj+4nxXFZq/OXJg\nZSjeKGGNblmUyyyN7/wM3atRxXx88W9RvX6Qzn/qE8irMzaBUkq2L2dubFBuHKoqfmR+PojvvOue\nIH7jJYylQ/uRG8eNoE2tW6ifo0yOQqFQKBSKvoT+yFEoFAqFQtGXuKFc1SbaNBpKyoRzWi4l8iOn\nS412gRfroKmGRj0nzyOPwtHyN9so2XD5GqjXlg36eCCOR81S0rXyFulYBlFtWbp/BZIT06bVBlW4\npQRzNXIrbNVBH5Z8Sclu1+jfQbuViTI8dwnunqUtvP/jT8G90yLZq9X+AH5vuuwSIZqY+s2uk4up\nhvMPTCPBX5TacKFwSURE1s6h39q0W39pEcc3t9EOW2X0iUvV7muLGE+NEqXiJwcHs/ltkiS4jEGW\n5Cquen2d0qZPDs6LiMgG0ciJQUg5gyQzHT0Ah+DUJKjY4SzcEAMk+/W+Nzsny2O2PpfE85y8C26H\ng8eRTPPYMTgipqY9WXWriL5pNTm5HkJ2OHAq9hLJT67Nz0jJymiMpVJ4xip9tljGWDG6yDdcamRX\n0WJVwqEEaTaVFQgl26NnLBepOrqBzw7GuCR678GyTcjRRu/70qkXgnjtAubY0gLG90DWk6NqDfSh\nGafkiwSWr7mqfJP6v0XbEVokJzpdnHCMUMkGdlexAnWT5+JK8l3LQYTuQ59l2avjE94+zMxjTcim\nIdFHrYNBfOYVlEYok3PUSqB/Cpcu4Zp5T+K99/4Hg2PFIuaIY0My3NrCOD79xneCmOXdCXJxjU9i\nbRsYQ5LCZArfp7N79wXx4ACSfx7KIxnq/CxKL0RJxrL9nt2pQn7ipJQj5CyOZHD/OLmYo7y2Urmn\njW1csxuUyVEoFAqFQtGX0B85CoVCoVAo+hI3lKuYquQd95aBXdqWxRWFcQ4n/yIzQ5Bs6PgdSLRW\n3KGEbr+HOkKlMskVSZxzdRkOmCGitKamkGDo6nVIQVstUFrZJNXMaoK+S3A9KqLia8R/7xqgGlTv\np9qgXe3UXtskUa1skmuDnGEG1eBIm72nxM0QIYz7RS30VSIGWrBFtGAiComwcPZMEP/6//bbIiJy\naB8Swm2Ss+3aAijXMlVat6kOz+o25I6tCvrNpGSJFskdpEoJp6vkfGNVoka3NiBH/dVf/i7O9+ub\nfeZTnw6O7Z/BeySzoI5HxzG2YjGql5XD+EvEQU2bZm8TyNnktKFmksE0nufxjz8VxCdPgua2KGnh\nCrX95ec91wTPe5aEbK7pRq6kJs2HRpNdUQ7FOKfu4JxRSqA5RW381llI2Ik4nnduFu6tVBL9sLKy\n4j8XPQvVlSvX8exRGjVcAylB/V2nJGdOq/fOnG6J8CySGNZW4dj8wy/+YRCnW2gfm1yajunFVXr3\n/DwkBbMGaYvfMCRLURyh/nQokaBDc9mixZ77P1RzjOuh0ZrUlne7rowOx/z/QcjS1S3EvcbiOXL5\nVrD2TE1DFkplIctsrEBu/O7LqEj+0Ik7cVF/HBgkJQ7TfGnWyhSTY5HmVyaD9XxiGvNokuJEkivW\noy8PHsV2hY989ONBHCFJ36DvkRhJ5e7uOCizDEtz0MWa71LC2iRJXs0W1aKsQk7f3kHcDcrkKBQK\nhUKh6EvojxyFQqFQKBR9iRvKVQkqx2512dnO1Con8zJNrjFDNKdPpxpJuJnuvhv1NQ7vB+X/wsvX\ngrhJdTqWtkBRzVIdjRw5ulYruP9yCXGDeU4T14wTzVuugT6rNEia8qnwrR3ILlt0zwbnHqM2mj+I\nneksV1UqJN+0ep8MkAlbrgHEtXyq9Ewcl0vYDf+f/vrLQfz21csiIlJsgiJduIREfwbZJ1oO2sol\nF0SV9ackUdlslaG4Tb/NXYqZkW7QO+1QTbOo4BlGBj33iRXBsaXFy0H8/AsvBvETT34siO8+cW8Q\nx0ZAO7tCTiShbJg9QDoDOpjdKvfcc3cQP/jYY0FcrmNMl9chezQa7I70+oGTzoXdLbh/m7TBNtWe\nM2lOcf+xu8V2IhTjXmfOQAb99neeD+IkSd8/8eM/EsQzlHhwbdl7p0oV79mmpHMNclpVKMFdqQya\nfySL5Hhhh9MHIHWwK4hrZVH9oJ0dPHeRkpQuXMP4Zsm85cvuaZIp9kzO4BqXUe+I0y2Gtx1QIkt2\nafH5NDBs2+54nB1tYfGvc60p07+DRTK+wetBaDDS04cSANJdQskAeys/pl302dIK5tpZSjY5PIHv\nPCH3Xorcb4888kgQ5494LibeBsLftw7V5+P2mJ2bx3EaxskMPpsgh2PIhUjS4+AEpLHD5M588w3M\n2RpJxVInudd4d008Niw2KutBvHgVCRDLVGsrRuu27bJUf/O5qUyOQqFQKBSKvoT+yFEoFAqFQtGX\nuKFctUM7lxNUfMYmOwfLAuMT2D3eprol1RocHHHfdZKMkMyVAtX22c/CBbJ4HVTftVXU2jCJstug\nRG8pqjlVJmfFRhnPuLkDerpGNXdi5HQqlfG87NbYTVa2U4JE1qAEey65VqIJONDGppF4qUn0fK0K\nCi4S7a288U5woqwIOTjiRE8nqT9HKUkUJ4hr+PW3LlL9sQa9Y4tlCrqnYeIcNpbFuMYN5Xl0Qwzz\nzV0TJl2HpcAWJWycHPek0T2TeLf8kaNB/MzTXw/ie+5E0rxHHz2J56J7ViqQ7MQNVfq57RgchGui\nRq61+x7E/Bmh/qstwcFhRDEfhPrK8Olko7OJJXQ8SnOQ5Q2WK0L1gihMkI4QJ3fi8hXUj+NEZy1y\nfLCTix9oNymkS64NUzA3WdEg82SoTtd6ZDWIWSaReG+dciJhh1JTuLYWzomSw/Hzn/0HQfynf/wX\nQbxCa5NUvWvuGcL6MzmIMbFFshjfPwxqY5Ofi1xXdJwTwkbJYciyJ7e/uGjnsAPLiy3+O5ykqAjX\nr3NI6rPQRlUb84L7M9Ix7eDtw/AA7nU8zzWcaJ7Q+ifDmEszGchYmYFcELf9CRSlopAsJcYy+L4x\nDZYGqc3ImcVxmyanaXFb4hyL7jswgrVndQNzJp7Gmpemebjbr+kUnjdioubUxbdPBXGZEsam03h/\nI4L7G1SjsEE1BbtBmRyFQqFQKBR9Cf2Ro1AoFAqFoi9xQ7nKZmqY5KoI7brmZFXb25CUhqkeBe8C\nT/nXMWinda0IR8Qdx+CY+Jl/9EQQf/Xrrwbx+WtINnd+GQ6snQpkFK5LVSW3VJNqJtnkzBKLkv41\nmc5HG9gt//qU9Cg9DDdYiyjRVIIkIKLpKjXcc5vqbkxNYvd6rxBKjtVForJMtEM0wrQn6NWjR1Gv\nJPLn3nGLKVJKENns4tQxWS4j+SJKO+ddas8mu3m6GNG4LlkiDto6SaOcd+wvLXrukqVrcJnsmQC9\nPDGChJUWOSZKG+RyIXdOlJIEJjK9pcSHcqBy0+SOmD+E+jhVkpLrJNNxn9A0FNvvB64/xNQ309pc\nJIsluza56biuWJukK4fmVJpcN3GixNmZw4kHt7Yxf3dIatp1Sbk0OEyD5RLcJxIlap/GWEh24/Wp\nxa653oBlBZvcXOkE+jZOUkyN1q4DRyGlXifJdNfNuH9sOjhWWUIiVRoGoTpfcZIySmVcL0qyVDYL\nx1aDnHsNcqNy20bpmhzzZ0MDyXfnVuqYX0kaH1LD8yaiuE+xAhcouw4tduGwdtkDTMyittNYDuvJ\nyBC+KwoX4EriEm/3HL4niNMZSDot3/UUIZk4kcY4jnEmVJb9qM+MLg63cB2wd0vA/lPikhbVhGth\nHMaj+OzcNNbO3b6sNzB3t1bRT2vX4TozyJUaIceYQ+6qMtW1c25hbiqTo1AoFAqFoi+hP3IUCoVC\noVD0JW4oVyWJ1o0Q9dsiKYjYsJCM1aKkQrE4SyPeOTGDjsUgl7QF9OixO0CzzlOp98vL2NH94oug\n/V56/q0gLlephorLUgeea4fLtDOFyTvfST6Jprw2GJ8ht5QL2taxQd3FKKldxCLHUhKU3iBJeq5x\nw664LWgbrPOQlEAxJ4Jr0c71JiX7Gx+HQ8P1B0CT+puljDRpRTZJCezOsIiqdx1KCEYSKSejZFmB\n1BGJEj2eTHA9LjzDNiWpWvMdPGcvInlhcgB9skXS5tIqJNLKS2iLVBqU8rHjd+Fhepw/LhbFOx2/\nC/cdHAVVfuX6YhCHXU+4DrvWdt1QTFmH6GtytHASQYZN1hmHE8PRZx2qgdUm6deKkYuJZDJOGLi+\nAWq7TJJNcHV6OU5A6FKttnKJJJh5zM2hcThbynWqQ1e7uYPj/SJNbsxyFe22sHgxiL/6Z3BR/cc/\n+uMgPnrffUGcoSRvUf8Vjs5AMrm8dCWIc5SYNElzzSUJaWIITppGFXNnfQXzIUOySqZLYrkKSQx1\nmoMRkrZ5yuyuD60G9XGdJL0K1u71VXwflKq4z/oW3LkblBD08BHI7Udm5bajTa6kGruPRzA3D86j\nXt7KCpLhHdp/OIjHxvE9k9it49RlfBu0HvBWBE6cGhbpeI6bneOQrEcSVR3zYZ3qbjVm0Zi5NOZ1\ny/UGYqWKz9XJERo16PufXFk7JE2XKuQOJel7khyk3aBMjkKhUCgUir6E/shRKBQKhULRl7ihRuK2\n2CkBNJuglBIp/E6KcsJAShgXpyRWKT9hXpKTtZGM0ubaI7Tjf3oCNOyhg6id8fj9oOr/YPA/B/Ff\n/s3ruKYN+jA7jjeJULa5GOluESqskSTa7YHH7hcRkbk50HK/+3uosbNxHS6dDaJkN9bhAjl6+EAQ\nWySjOE7v5SqWJhyS7dbXQQVevvh2EL/55stBfOUyJJ3lpetBbKW8527soL8d6vtEgtqVdvFHSJqw\nyBlQr1N9K3ZmEXVqsXmAfAJ2E+dUyPXUZCqXJFUz4d331dOvBMdeO/MaPQv68Atf/EIQ75uHdPro\nox8J4qlZOAriA6D5IwIp4nZhaBCyWp7o9yq1fZ1chW2ujcZJ+pwOCfuorZ12ZynTadDaQBR692SA\niOtVSBB2BnPNpKR7EXLSNOg9Nrfg4CxRbbVdCbPtsETG8iwGTS6HJKAD5I5sGlTPjXIB7tB9eoVv\nfg2JJ7/0l38TxJODSFTZ3IAzaiSCNTVaRZ/nKCHp4JgncRSroP0jSbRxnWphpUk2ipCUvHYVCRo5\nud84JaPc3EGfNEnG5ESxCUroyBkOa5TMdWUZEtjignffrXW888IVSG07KzheJcdqrY7rPfFxuHMn\nJyH9jI1DNuoFikWsPds1tM30BMbawf2PB3EyhrZcWYPEZpALbSbl9WWD5k4rzsn1yK1qoK0Nrv0V\nSpzauS4gb88IZW10cJ2BJJydNs3NU6/h+4IUO5k7MC8iIpkEtnZcLkOGddvksCOJ06Y6dG4TcSaH\nte9W6pApk6NQKBQKhaIvoT9yFAqFQqFQ9CVuqJE0aKczn9omvSBC9U8SRDHTBu/QDvrdWiWxGHbh\nO0RFOXXcc2oMFKMRwT2b5PpJJ0H1ff6HPxHEp94C9UkMtvyTn/uRIM5l8FzRNp49HkpCBPoumfVk\nhwbJdTOzcBYsQPWRoQFQoi+8AAlk/z6qTZIjRwNTdj0CJ3bjmlImtW1L8BzFBhwJWzW0Z8OC/Da9\n13uf6lk4eVotcuHU2x2Px+Jo+yeeeCCIuV7aK6+gpokbSiaHd8pQzZaZmZkgvn4dkhrLTkNDoFpP\nPnSvd4001YChhH6nTsG5xzPlhz7zqSDeu3d/EA+PIqEjJ0LrBebm9wbx5AwSaNYa6D+Wjtohp1Hn\neFdScsgJZXMyTLpes8FJMjufE04yhrFXIzrfpKSG7ApJJiBPNyo0Jml81OtcK6z9rucNJzzD/bNU\nEyiTw/xtu+T4I4kzRi6kXoGTow6nKdHeFiSlSA3P9+A0kj7uHYN8Wh3GZ2MJj9a/voX2Pngf5P35\nZbzXxgKSqlbIJRMh3aFNUsLzr2FNW1qDTL+2BqfToUNwCv0Xn/1sEOeo/VsO+vY730bfbie9sXBh\nA/P49CncMyaYpyx3c021eAxrw0MPPhzEmQzaqBeYm8aasLMJ+SlLzk12PY2PYf5u70Bu21hH3w8P\nejKgZUKuSqfISRdlvgLzzorhuElSPbsXObuqS3M/LGPh+CBJ8Qf2Y+xVKvhe2NnGd0e15Ml0O+tw\nka0v4fvCoe9z/i3QCh3HGh5yTd5crVImR6FQKBQKRX9Cf+QoFAqFQqHoS9zYXUVuKYcdLeQKahK9\n1aLd2KGEROSY2vCp7S0DVJTFO8DJHRCla0QNoqGJoqrTbvr/n703j5bkPM/73qreu+++zb5hBlPY\nV4IERdISl5C2JVPRQtlHlhLFWxLl2JZjnyxeJMtLYh0rinIsx5aPLSsRHVmi5CPJlnkscydFiuAC\nEgCHaACDwezL3e/tfc0f3beeXxPdMwNiega4fJ9/5p261dVV3/fVV9Xv8z3POwEl1NIi0t0w9jpx\nXDRSOqkUWC6h/ZkBK2HlfqPd+y4qOO69T2ZEX3n6uTh+8L774/jyhVfi+JlnX4rjRx6RSVeroVTt\n2ICG4zr7FOo8zS5KIfTQ40/G8cHjSo/PwsTwWp+j+99/9h/H2y5dUKoSvm8xVWk2WMvoIOiWe++X\n+uzrXxddtHe/ziuXE9VZganUD//wD8Xxb/7mR+L4lTNSZXzwgx+M47/y1/8rMzMLE1DZwQDzF//P\nfxrHW6ivdjdqBU1PS/2SLui8BtLBY8DiXo27JOgU1qhiDaoWVBMD5o+oSbNj1jhIDdLcb7iLIatT\nSQAAIABJREFUIMcS4wGKDB+l+SOpBt54+Yz6YYs0K66vOSSFTbps4EtBnbEuVgL12fIZ0SgVUDPV\ngLT9eLC1rlo+8wWdx8Kcxv2VF17UB1agaArEk6dggtkMe2O2k9G1l9qaz77n8cfi+N/9rowGL2Js\nkYI9clAU6SfPiW74rd/97TgOofJ59KEH43hxToq2ag0KoYbixx/W/icO9ajnM8VivC2H5042qfHx\n2ONvieNrK6LOFha1NIB06SZUZYfU1LcMW2u6phSUxSGWc5ShSirgug4f0jy7DcPDWlyrS8eencW9\n3hWtyNpwxtpOI+6HAVNBXEeA/3VAaXGpwZGjeoY995yWF2yAmnq5fz5d0ME4hCUCLA9J8gx0ffAO\ntolJddr8opsBOhwOh8Ph+A6Fv+Q4HA6Hw+HYlbguXZXASvUWUlo11HLJw8ArhGFQCuopmmxt9tPJ\nV2BslUQ6emlOKcattmiPbAIptYb2X5jUSvlsVtun5qWaWL6i1G4F6W6amDXqVG1A7YWaN4l+6jGb\n0bXdfbfSyYcPi3aZnFS7TN13VN+PYwfIweVSosvGhS6uN4T5YYdlp2CcOJ2BWggKpPMvif459Vyv\nXtj6ptKobdY7AjWSxer+E1AHbW8qLfv1b4jya+B8H39C9Xne/oTUWL/1278Vx2cvyLjsie+SmqIK\nNdyePaqH9vVne8aHFfT9FuqZPfcNUYu5jMbTpz8jA8ijx+6O45Mn743jxYVbbwBIFKAQSSENXkON\nsTSpX1CzbZhsUnWUTvWOQ9M/Uk68XzrIKmdA06WxD40EB9xEQxwHqfW1a6IaQtSPiyJRmHv2iG5e\nXRXFUy/3KIgUPhcazSRxKi1RKg0o7xJQONVgqtjqknMdD2qow3XuRRlvnroodU4a53p3R/fpi9d0\nz1hTVEw915tTVnDxX3nuqThuHZJ69dKZMzoearmVQKs88tCjcXzvY4/E8cm7pCba2NC8fhdUWlcu\nSL21jn2qTdHN21u6D+vl3jiulKTYaUJ5Ow9z2Pe//wNx/Hv/4Xfj+OGHHo7jLCj5zs1Icl4Hnv7y\nM3F84KgMAPMFnAOeYdsF9eu5s2qnGVB8Mw/04jqeH02sBSCtHATD768uVVRsA1BXCdauwi78rg6p\nb3wXlZqzeC7vjFTWputCod3BMzmEaWQJ6snZeVFUrOkVhDc20fVMjsPhcDgcjl0Jf8lxOBwOh8Ox\nK3HdXE87pApBqaYCKKoUTLPqSA+vQpVUxwr63FTPSCifVjqrCzOxRBOUV1bf0wi1TxomT6WGvrPc\nUPo6gc8uHZBJXKUOpUYTZmXgbFpIW7P6TbNfSyOXFD2QQ52rpUWlJvftk2FSIqM03gtFUT00jJvI\nav+xAaaMIdKVMzn1RX4RxoBQLjWndG17TDTIb/3Kr5uZ2caG+tioWMnpOx+/WzWW/tbf+J/iuIba\nZT/5v/7PcZybUIryybdJ6fXgCZmMHf+pn4rj3/iPvxfHq9s698ceF71V31Jf/M5HPmFmZkFK1zwB\nKvLYXinkOBBKq6IyEkc0FgMoHEhFjgNzqLm0uaFxv7wsKqAJyoUJ+jxq3qRBIW5v9aiO0rYoAlLT\nbaS766C8crnc0JjCKdZKMyi6JpDC34eaQnNzUq3t3y+K8QtfEFV4ARTIwmxvDM/PqP+6I9RdbdTx\nqmxr3JZbonraOPd6grPAeEAqobQu2ob1e7avibo6uE80eWtW/Tk5C9q70mvn6hnRuMm8xmh9Wm21\nhPb+7FdUgyiZ1rE//+nPxPHUvKiUH/igjP6efvppHb+isfPCN78Zx7W62nyjoqUErHe4UzdpoqDx\nRNPOiQnRx1tbGq+lku77a1fVXsdnRHkGY1Y+Li2oLTe2dD+eOQ8lchW07pba5swZUYU/9KEfjONE\nsrc/62KVoL4qTOg+aoFuTiYVp/AMJ3hft6mvoooZNbMaLdFr6RxqpaGe3oE9Uj3tfLaOeT7AueSn\nNZe1MK90WIdtHirWrMZEOn1jo07P5DgcDofD4diV8Jcch8PhcDgcuxLXpavSUFdRAVWAGRtTVy2Y\niKWxmr0wDWqqn8POJpVmmi8o9XmooHRrPq2UXqkLVRLUEZkuU9I63xnUn8pNS7FVQHo+B0eihCl9\nRoOyNqircj/9ygXdyZZSdHNTOve9B3TNZdTjYE2cShUr1qvjr11F0OgpxIr6TFb9lkbmsga+ZhvG\nZbn+uNg7pettggr74AekfPjhD3xfHL/jURmRVXHsd71F20+9KMXHB9717jjej9opAShVqnn++t/6\n6Th+9D6pQn78Bz4Ux+W+AePElK55Iod6MLg9WKMtgzEagp4Jcb8EifH+frjnpFRdzz6vdHeA+zEJ\ntUMD6ogaDPMyUGZN5ntx2EXqOzt8imggrTyg8kC9GW5fnFdKOo32np9XXy4hxd2EWuTCRdUv6kLZ\nkctjjun3SQhlX6tFpZfGCcp7WQV1sbKgntNol2pj/OqqHFLw2ZS+exPKwA7apFTQ+Hrye98TxwGo\n/KtP99SBk3NSo+w9Kuqvm0MtsrKouhnUWJqd19xJM8DNDVFqB2H2un+vFKYXQSdyvmnDFK7RFUWF\nW9nCvqr1EL4zeEL9U29oXJ4+/bLO8Yj2L0GxdviQti/OiRYdB9759nfE8ddOiV6tVtVmZ15+Po43\nLopuO4ilFceOqa8ymV5/N6GerOD6KhXWrINaiXW9ksPvZSqt+CwgvdWEoS7NBvft0di6ck60KGsQ\nZvqqKh67AWqyWscYwJKKw0el2suBnqyCOqMybBQ8k+NwOBwOh2NXwl9yHA6Hw+Fw7Epcl64KUTsi\nixocmYTSWwWsgGb9jC7SZKyFU5juHaeN96sCzmICZl7ZplLvzZbScXWofgz1rbJZ0Wh7Z6TMKW8p\nxbc4CSVIFqlt0F40A6xWtYK90+6dTx20yNVlHbuB9HgTafU6Us5Mr1Xrur5Sefy1q1gvKhyR5WuD\nYmjh/GgKNwuTqg/9cE8BcPlfqFbJ6nYJf1c9qcdOSF3VQP2aDuqVPPnWJ+L4k5/5fBw/94zqouTv\nfyCOM1DRtaHS6yK1v7oslcU6TCjvvWen7gpqpMDljunaBBR1FCCwVs+AoGpUA98i7JkTzdONVO+G\n/UeKqgqV1CragLTMnn7NIpoBEkxrV5Ee5/7bUGatrcnM88gh1bgJcI+z9hjrnG3B6O/MGdERb32r\n6hTxe1956XR/G2pxDVBqGg/1ltLjNYyZPNQ7ZahD11c1tseF2VndU1lQxhfRnjRqy8wqfX/vW2V6\nt3xFfdtd6J13dFwqwekF0Yafe+GrcXz/gw/FcQVLE0glPPYWtf3nvixTQSqaaEDJWmdpUHC5vObp\niTnN05OggQv92mU5LHuYyOvvq2saz9egKLzvARlyFqaxfGC/aJXumH/aL86j3tf8sTh+8bxMAmfn\n1AbTCc0zDz+gftizKLoq1d8nCcqpDdqZyyro81cBtRPQ9A/PTdJIjAdKXeF5HaABJ7Ko+UhVchq0\nV5/ST2CeJZtPJWoBtNTUBI6NZxdr39HYdBQ8k+NwOBwOh2NX4rqZnDx+YaewWKyDyt95vG3xlwYz\nIw384prq9vYvYJGm1fTLv7ylX00lLKJsYsEu3ypbsIdOIk7jl3c10PmWt+XLsL2la9rGm2IZWYYy\nfqXsVHUOULLi3BWdewKZpBp+ldawaKuFhWNEmBruYTA+DM80DNj4d+BfhMzEkcOya3/l0jkzM3sZ\ni846KMGxWdYv8hqycTn8Imlg4XEqp7f6BrJhH/m934njtzyiX64f/5y8O37hn/+zOKYl+HZVffh7\nH/0PcVwo9BZCH0U5DpahKFX1K5q/aFMY87mkfoHncsj8oHnHkdNZvqIq0DVmxZDBYuYlg58z+/Br\nnh4ZWnyK7FQw3DcjiwsM0ZeTGbXH0owWo/MXV7PNWGOsjl/+ATykmOWYRQZrC2UAdhZbdjGWmOlp\nYPFwvcNMjrZvw9flyvIVbV/XnDEuHDqoBaf8tX7/g8paljZ0HvNYyN0oIxuGe+zgXb1jptvKrryy\nonFz+qw8u/bdI++pDMb3CrKyq/CjmZjC4uRZLU7OwINpcVELfGdn1G+TWNg8if4sYP7M9Y+TxDjg\nfdRFWQtD5qmLkiEBnl9teLS0maIYA1a21E9HT0RxfOqsstGGPn7gEWW4H39UfmCTBXnD7GRiM1hY\nzkxOZ8RiY4poBvyBMDfQT6pJUcIAS4ObHzHnG2aFec/O7LAqARacY+ExGYYsFuBn8EzkwupKSWMy\nm7tx+RzP5DgcDofD4diV8Jcch8PhcDgcuxLXpaumsegrQEppG7bjHaTDWDW1CjOKLFKY9bXeZxuN\na/G2BEoqrC+rEjErdnexcC2b0+Kk2Rml9FJZ0VuVhtJoVSxgvnBZnhu1utJnG0jbZ2A1n83Atr+f\n/eyGSudWUPV3DlbnbXx/B4sbDfb2IaiADhe2jgkBKKcuvIa69MzBgrQUKTTsn4CXwf49PerqL/7o\nfx1vy8Kj6NiSFpy2kAqtgfvIw7q9vaGUuCEV+pmntNDx9//ws3H82x/5SBx/49QLcfzYo1rAtzCr\nlPhXn9Fi5ntO9hYFzs1poeDUJBfYo72w2D6En0qIRXPdDtLm3fEuPK5jTLdhk99o43xYywF0M7eT\nnuzaED+YgesYwcGN8Krooo/pmWMttVMHx2/hHkyjYvHx41pYTWpua1Njpd5Pf3NR4o5QwMys1dRc\nkk6pLTbXtWh1Y1Xfv7wi2nyqMN6K8mZms6CfDh+Vp8vReS2Y3VjVnGlVLepeP3MujisoHd2u9+Ll\nbX3u4pqu9/Ql+dhkvv71OC6DJl4DXXX+qubm9/8JlXK4OxLVxUXTFCjwGRBgoW2HC2A51vrPG/4K\nDwcWnNJUB33O4tqc13Ccm/FWeT349Bf/MI4fOKlF33XQRdcwdh9+QPPTFD18Qs2jiVTvPiWdE6Kv\nq6jWnsJSEDZpMqW2JmFHuioRDhcMdUAlhyMWME+ThpwQVV3oLzRvd0lRYTkLqGTSYnV66eBdoIzF\n1MmbWObhmRyHw+FwOBy7Ev6S43A4HA6HY1fi+lXIS1i9Da+XxpbSwJttpTO3t5RG6iKFGEAZZX2V\nRRLKKRRQtaCAKsKgwhqgv7Y3pdgpt6EAQ1b54ip8QZB6zs4qNTaZF9XVRdqt2eDKc5Re6KfvOl3t\nu3pNqeC980o1TmBlOtUKybuOxnGA1GClhAq8Y0II+oDpyhZ8D+pd9VWzq7TnyqooyuWruuavP3PK\nzMzmDijFPj+jNPW5y1IalCr61plp+WMEq+rbxVkd58BeqbgurSjN/uxzKmNw5bI8cB64V6nhv/QT\nf17XgbHz6x/+N3H8u7/Xq1o+UVBq9V3veLsJOt9sXvsYKt9SWTQWGdUINNFnbdxrCahIOvD8GRCU\n0MZ94JwT/T9TUXVjKorodIeru3gc0ghUVnTaw48ZIC3PUjNU8tT6FvekRayrOaaQ03fmJ0V3l6FM\nuojyEevw+HnofilkxoXnXxTVevqMypk8CG+pNtQpyy9IJXXhJfkItWahUEr02qKJcbx4UvTx9x+S\nbf45zGMPPiz14vv/FJRtU4rf/qRUQBNozwTUUIzbXaqbOBag4DFhp89JmbQ5bkklDyjqQKt0R9Cr\nA19ktxwXrlyO49KmnkPtJHxt4K9Vgh9ZE7Ry2xSn+35giTLoXdA5dfg68ZKSUDwlkNNIDvCAULCB\niuoO+GVpO/23Jic1L86hkn2X6ur+eZYrWtrBeSIB+pLeVhXcmyksV9m3d5+2p52ucjgcDofD8R0K\nf8lxOBwOh8OxK3FduuriOa2mzyZZkVwf2wbN0k1yKTfsp037JPsUTQEW+HkcewomQmmkyxJdpchW\n1kSRrW8r1bd+See7uo2KtaCXtsEKtZHmzOd1vqzi2kLKMNVP/TVhC79vSSm66bxSrwkY6TWwfw7p\n9mtQKyRT41dXcRU9sQmTrzOo6HvqlGihL3xB1XRfQnr84kYvzU3zvRkYhaVRGiENVVYeKoEWqNAC\nrNtbASi/hOJmRf1z8piqcd8Hlcc73/6uOCaleOG7pChp9I3oFmH5noZyjxRPGkZlLENBdWEXKeju\nAD/Eeg+3BqvXRNN1cBfnkqSLhiujBmikAaVJ2N+TNu88d6hVBtRaMGAbUHRxf50ky8UMHB3qtAZM\nM1swDBzFL7T6KfQO8vCplOKpKfVfGfTAmbOvxPEKaG1+ywqo0nFhbV0U/DdfUIXqw3tkVBkm1bhz\nKIeQm9XccfyxB+P4nsO9e6OL/pyclYorm5SqZxWmp5NLUhvOQO2TwuMiMeLn8QhW1EI8M6hIbJvm\nh0HRU//DLJsyQH9q7k5iXhmgUTEYO8EIGmsMYCmFNgpmNwPR5oePqV1JEW2VNNaoOp2b7j0Xsxld\n62ZZ83aLjZcZrpbqtIcbZYbgrNOg4rk/qe8maLICSnEsLemaSPfuXF8Nywaotpybk5nkCM/BAePD\nSTxfEskbz62eyXE4HA6Hw7Er4S85DofD4XA4diWuS1dd2gLNgj2zoFYSGaojYOzUIl2FysDNXv4O\nZX6sHmJ19YbS8HWkqOpN0GJcJY70WhqpvP1LOma1gtpIphRglp/Fav1CQZRFQNXVTvquqWves1+p\n3ToomxWYM4WgifJQf0xPKdWXzUIVMiZ0kIRnLaqZCbXJyWOqfDudVLvdvaQ2WQFVsrLZS3NfvqZU\n/yXQcC+eeSWOt1F/pNxAKhT9WUHRrzkYPS5OK82+d0Gr67/v/X8yjvNYaX/2tOrysF/+zI/8mTie\n6VON9SaqWZ+TwiaTQRXcNdTtmZWiIDurtqOyKYtiUUm79XXJfvfDvxbHtQLqZ2VR0Rd1XWjSRtMu\nbt8x4Bugs9A3iRB0BdL/pA6olmL9qaCt4+Q6Ulls1XSPl1CPKECTUb2TRu2eCRiO7YztAboEdMXa\nhsbnS2dUZ400EQ0IaXiWuQkFx+vFI48/Gsd//IMy2tu4qvP+7u96Zxy/80kpoFJ5nesU6pIt5Xvj\nIgEa0GjEF2h8z4PWaMK0rjNQshtmcqRjB9hPzjGgEgbUTcN/WwdDqUhQniy9BBUV668NfJI1rToj\nKNUxgGzYwpL6YxJzxeFjosgnYZq4WUE9tit8/vXm2cmcxnwAahbNMUD/J1NQYLWpTsO9jGfc4P3L\nyuOG7cOp74HaWMDO8aenRY9ySQjrazUxFw/QfrhA1sVMpG+8zMMzOQ6Hw+FwOHYl/CXH4XA4HA7H\nrsR16apNqFjKUCLl0oqnAqXgWAMpm1UaKY+0ebOvQKqHSqm9UhKNwVXUTF5moNKZn1HaK4UUGVfN\nJ2HGV6nAbRDI5bUdmXhr4DipkKqr3nXXUEcjBcorm9PxWD/EOlQCIIWaZt2j4cqnW4mQdUmwcn4g\nTYyaMHPToosOLOyJY5RxsmrfhG17G7VT0CZXoVipY0V9Hd/PuiSrazIPTKMuSakkRd2D98v0765j\nx+KYbdtGOrSJ2iikZxJ92vXaFSmuNjZFpcwuqO9rOEZ6RseYSEnlkkhr/2RyvBTHNmiWK6tSxrQw\njmj+WIey4e4TUqTRzCsIe59dWRYd+fIZ0X5Ekmafo5zWoKJJg8a4ZxJqKdSBm75PlM2Bu2QEmU6p\nvTdR2+xrTz8bx1eWe2qOhXnNDbVVtdGF86JQtzCWWPuGCscu7tkDB6RwGhcOHJMJ5o//5J+L43ZN\ndMOePVKvLMyy3wa4hDis9SnCBNo+pJqJ/YY5j6ZxISiqcIDuVltRjUeRTzCiRhQNKMMb1Zca4ec3\nSt4V4iikK/mg646Zr0pjLcZGWfdSKi/q6uIlGQZWoPZ7+ITu3z2zmn9rjd4+eag/M6b7opDQfRR2\nIOmCmW2AZ2Iyqc+2QFGFqLPI5wUN+8hm17AUoA0VZBZ1LxN9NWoK5rKsi9jEd6ZgHMwlHHy+kMZK\ntodTlYRnchwOh8PhcOxK+EuOw+FwOByOXYnr0lWpjAy0UngfGliB3VXaaXFOSqMsCkm1W0qnl/qp\nQm0xS09I7ZHJowAVDPXSoMsyaaXCcjCZInWVRr2owrRSfLWq0mshjITaSH9uow5IokFlWC/1R/Mk\nZk07bdAxoGAM5nFNKMnqSOdW6/rsuMCV8AMKGqy0r4GuWkctsgAr86k2CdK9a6hCfjc3B7Omjtph\nLkMKUcfeD0Opfdh+7LBS+KSuQqgBBlf3g2YcYa44WJul13n3Q8VFxQLrr3WxHb5Y1gkH8vM6x+DW\nGwAS3/tnfzyOSzCb5PguQ822vSUajuqqJEw76/20eSaje7BS1bgsldU3TdwXTZpngm5mGryBcZBM\nKM6DPpydEfWXRrp7fV3n/tGP/uc4fv6bqvfU7H/vGujGBs+xQdUIxhJS8qSY62jHOuiEcSEBen/2\ngGipARNWjLWaDaeXEpjSm32qnXX5El1SUUKIuTNpvL9ebRZpNqi0G6WqGYXhR3yNCIb/hxQcjQG5\ne8fGuzRgBiZ+1kL9O1B8uYSerWdeECXcXNe9fPyQ6ozN9OdU1vzL4Hj756U4DfDcbkAJnM6jXiAo\n4BYonxqWqKQwN0xOiQamkd/WhpYX8N6fwnnuUL8JzqEdKjKxXAXnwrmJpoPlMiiym7g1PZPjcDgc\nDodjV8JfchwOh8PhcOxKXJeumsIK/g7oFJqMJZHuraGmhSFVnYcaK9+nFwLUsmG9qhRWVDdRr8oC\nrMAOaHim1NxAaXhIgNKgpVJZUVdM0203lDKjqWAa3xVkemnuZkM5shAr9bcqUm1wNXiYw6ryvM63\nSZFJEinOMYEqC9YWY7z/iFQte6EqGTDT4kHTvf5vIwVM7cLcwYP6HKkinhfS6Vy6nwio2hiu1Big\nq4buYd9SFIdcUzBk2/DrpAFWOPCH8dbBGYXNqsZgFgaAiwfRZ7gCqr3SMNBaW1WNmZ0rvu+e++It\njz36SBzXavrOBlLTDSjP2hjULRp4NXRvzJSu6BxbUDTB9I/j4MzLSud/81RR51PXfLNTw6ZR1/d3\nKDri7zkYGQZUgKWG01XXVthG4wHVJhRLDZjuhcPNCqkqHVBM9ffhOOjic8GIGk681wZqlw2Y+N2Z\ncf/tY/jcMw7MZEWtTOB5c+IuqRoXlmQG+FTtK3F85ZLUqAtQt+648YVYwpHFmNnEEoKJggxdN7ew\nMAT3bxn3LGmhAEsuaN5XxzNvY10U1fqaam2lUxorE6CXdgx106hF2MC7AutlcfuOmtnMrFDQu0gT\nz9wr6zeuK+eZHIfD4XA4HLsS/pLjcDgcDodjVyIYrFPjcDgcDofDsTvgmRyHw+FwOBy7Ev6S43A4\nHA6HY1fCX3IcDofD4XDsSrypX3KiKPpwFEU/cafPw3HziKLoe6Io+tydPg/HrUUURT92C47xqSiK\n3ncrzsfx+uD96TAzi6JofxRF77nT5/F68KZ+yXE4HHceURQlzOyn7/R5OG4NvD8dwLvN7E39knNd\nM8A3GqIoCs3sX5nZg2Z21swK/e0/YmZ/2XqOT8tm9heKxeJqFEXvNrOf6W9vmtlfLBaLZ6IoesXM\nfsPM7ioWix+63dfhsEQURf/MzB41s7qZfa+Z/YiZ/XdmVjGzq9brq60oiras1+cJM/tHZvZvrNef\nOTP75WKx+CtRFB02s//bzPJmNmFmf7NYLH7sNl/TdzJ+xcyORFH0B2a2z8yeNbPnzOySmb2vWCz+\nmFnvl72Z/YNisfixKIr+tpl9v5l1zOzXisXiL/GAURT9azM7UywW/97tuwxHH96fuxzf2l9m9jUz\n+znrzcd5M/tJM1s3s39oZkEURWvFYvEX7tDpvi682TI57zOze8zsCTP7cTN72MwOmdnfst7N904z\n+5SZ/c0oivJm9s/N7AeLxeJ3m9k/MbOfx7Fe9BecO4Z7zezvFovFJ6338vlDZvazZvbeYrH4PWZ2\n3sz+Wn/fCTP7j8Vi8a+Y2Z82s+f7+3y39W5GM7N/Zmb/R7FYfI+ZfdDM/mUURW+qF/g3OX7Gej8u\n/pL1+vZni8Xi/zZq5yiK3mVm32dmT5rZO83s/VEUzeDvP2tmJX8g3jF4f+5iDOsvM1sws/++P4f+\nX9b7oXjGzH7Vei+tb8oXHLM3WSbHehmczxeLxa6ZVaIo+qL13jz3mdl/iqLIzCxjZmfM7IH+9n/X\n356wQUfvz9/G83YM4vlisXi1H1+w3g32lWKxuFML41PWy+qY9bI2f9iPP2pmPxlF0a+a2e+b2S/3\nt7/bzCajKPqZ/v+bZrZkvV+ejtuLtWKxWLzBPm8zs88Wi8W2mbWt92Jq/fv0J6z3Q+atYzxHx83D\n+3P34VX9FUXRk2b281EUZc1s2npZnF2BN9tLTmCGIkm9F5e6mT1VLBa/jztGUfSwmZ3r/+ofhsaI\n7Y7xo3WD/wc2+ELaMDMrFovPR1F0n/WyOB8ys58ys3dYbwz8YLFYXDHHnQbvq291Gk1j+6gscqa/\n33vMzCnHOw/vz92HYf31a2b23xaLxU9EUfR9ZvY3bv9pjQdvNrrqlJk9GUVREEXRpPXeSAtm9tYo\nivaamUVR9KEoir7fzF4ws4Uoih7ob/9jURT9pTt14o7rYtLMHu/3qVmPlvyjb90piqIfNbMn+utt\nftLMDvdpqc9Zb02PRVG0EEXRL96e03b00TGz1JDtW9ajky2KoiUzu7+//fNm9t4oilJRFCWjKPpk\nFEX7+n/7ZTP7s2b2L6IoWhzzeTuGw/tzd+NV/WVmR83sG/1F5x+y3sup2eix8KbBm+0l5z+Z2Tkz\n+6L1Fsd9wXqUxF81s/8QRdFnzOzPm9kfFYvFqpn9mJn9qyiKPm1mf9/MPn1HztpxI1wxs79jZh/r\n9+GimQ17UTllZr/Q789PmtnPFYvFlpn9FTP7gSiKPmtm/9HMPnF7TtvRxyXr9eFXrC8G6OMPzCwZ\nRdEfWW9R4+fNzIrF4hfM7LfN7LPWe0H9nWKxeHnnQ8Vi8Vkz+wUz+9Uoit5s5a53A7zYRm+RAAAg\nAElEQVQ/dzGG9ZeZ/V3rzZv/3nrrcA5FUfRT/X3+myiK/v4dOdlbAK9d5XA4HA6HY1fizZbJcTgc\nDofD4bgp+EuOw+FwOByOXQl/yXE4HA6Hw7Er4S85DofD4XA4diX8JcfhcDgcDseuhL/kOBwOh8Ph\n2JW4ruPx//hzf/k16cuD4PVbINyMpH3U97yez94MbvjZ8NZYQPz8X//FsXhJ/Pz/8KfjBpqYysTb\nu91mHM9Nz8bxwvRSHOfCfBxnkuk4XitXzczsk195Jt52eVOO4PfefSSOZzK6rG6jHccthVZp1OJ4\nZXMzjs9duhLH29V6HBcmJ+P48hVVcQhhzrpnYY+OX67Eccd6X1yYntDn0jrHVFa3R7ujk+x2EnF8\n7fJaHG9ubMVxIqHfD1/8xrlb3p/v/qE/H19gt6PvSiXVrw89/EAcr6/LDHpiciqOH3v8LXH8rrc9\namZmSwV5f7Vq6o/17e04TuSzcTw/IyuVbFLnUi5V4/g3f+ejcfwHn/9SHE/n9V3XXnk+jrc21K7J\nnM43lVV/b21pfBTyvXNIpPX9iUwujo8euy+Og47G+2c/9u/jOGzIeLta0xh7z/veH8f/9J/847Hc\nm//uY1+L+7PT6Vxv11dhcF4KXhWOOmF+LOjiJuzoD51uiH0UdwPsj3ttcA7GF3SH/54emLHx2U63\nNWyP4cCxO/x+hl21aYjf9n/6+58YR3+6L8udwdC+9EyOw+FwOByOXYnrZnJuRWbmtWKsmZbvcEyl\n5/Sfpn6JdQL9mq5V1IYbXf2KL6G8VJBUJuP86qqZmV3CL++r6xtxvLipzNCeuw7F8UvFF+J4q6Tv\nSSJL1ECKZ2HhQBzPdPRDiRmW9WA1jhOh9pnMKQtV3SrH8U4VtE4VvyD1A95qm/pPMqU2mpxG5iKl\nzNBmV5mFdpO/dG89Lr3yMv6nPltaVNaqhozX3r1H4/jK+bNxvHbufBz//rlXzMzsIo5drigbs+f4\nXXF84MQxHXtO2ZV8QueSyymT8qWvfyOOQ2Q8y9tqM3SrJVPKFHVayrw0Sqgb2NT1lTd655nOavwg\nAWQvnPp6HM8UdF6FlPavNjHGkYl76svKPI0LSUxdHbQPZ7TuiATB6Gmvt38XDRvg2INJD2RsAv0h\nRKnATsDz0vYAB+oGo5IYwzM8A5mfgc92X32So4DPDRwCP+G7yE6Ft/E5MYpdYK7utaR9ut8yIgRm\nzYa0o93C5yMOE3aHbr7xB0dddTDqOm7itEZcn2dyHA6Hw+Fw7Er4S47D4XA4HI5dievSVbsR38mU\nVpBQmj6VFeXUajfiuIO07vqGFprWsWC3gSZ86eo1MzM7d+VavK0EiqNa1bGnZ+bj+O7o/jh++hlR\nGefOX9T3gD5IZ0U5pTNaXKurMDuyb7++a0LXOjOp/fdNip5I9akKrvNsNpuIRTmVKrr+EhZEV0sl\nfbit9GoiyTO79Tg8Izqn3dZ5Jpqi7C6eEUWzgbY/+4IW+J5+5jNxvLbc++z2lq71oUe0MHli3744\nfua5b8bx5RnxQhvXtPh7715RZ0v79sZx/cKFOK5UND6IbqipqYHFzyEWkCZD/UZLp/v9GmARKujO\nbSyaLq+T1hQNGSTUZ1ksiA5T458mE5iXEgNT1E2k+EcQBTtUSTcYQX9hO2Nr6v5tNhRbSvdgMjHA\nBV33+/v/G3q+oyi4mFULhlNbI48dDN06wGOFwWtb2D0O8NxaOB1e18Czaoe9G0VZcvH3iO8cWGj+\nOh6D7O6B+5HHD4flT25mEfmtoagIz+Q4HA6Hw+HYlfCXHIfD4XA4HLsS31Ye9vX41Hy7x74Z3Irv\nfz24099/I5yCambfftEHHfjkJJF+zKc1PJIpqK7KUii9cr5HPVy6LB+WhQX56yQCHeP0i2fieM+S\nqIwHHnw4jtNQQl2+cjWOq1AKtaG2SYMW2jMvSmae3jeBaK+pgmieer1Hg9CXZGpC1FYVtFsi0Hdm\n4Rm01RDdUsH+YTDe3w8/9uM/EccTk6LmGqAXAiiNtkG3tR65N46XL6uNP/Jvf93MzGanoVDKQF1T\nFzVXqqs92rjuVlX7fOmCVFy5yZk4rlU1fjot9U1pW5+dx/hgerxckhdRs6FzCBI9eikAzTU5rfEw\nDdXZ6iVdcwfjqlMRpUWVFmmscWEguz9oHnMTnx6+T7x1xJRK6oMWXwXdAtYwUX7lLsaWYScqsNBZ\nVHV1R/jkhLzwAVotjCMduzts10GKYwS9NUBXDT2T8aA74n/Nrs6zifHdocQQytH4uRhwLOoYYMoH\nKa2Rarfh5xXivAafxcPbPsn2xt6Jga/tfOvpon+Hi+q+FcHAMHlt7wieyXE4HA6Hw7Er4S85DofD\n4XA4diW+49RV38nYKksVFFxTXjADWmp6QjRPDeomrpyvwuduo2/dXwNlMQH100xhOo6Xr8owcLIg\n+iKVE4V01zGZzN1zzz1x3MS5VMqiNTpQQ22t6/jLGzCZg1pkEyUndnKjIeiIfAEKkiQUPsijNkCx\nMHGawHHaYxZw7L1LbVMAXbW0JIomaIlKq1dFVxnKQFw6JzXUpz75aTMza7bVvkmUuZiHSq0NRd7y\nxnIc56C6SSCHXt1Su2eyOl8ql44ePxHH737/n4jjy5cux/GzX/uqrqkuqmlH8ZZISBXVhroqBK05\nOytTzO2OzmtmTttpBliuSN01LgyyVaMM3F4bHT5KiRP/HX9OgzMoJDV421APJgL1P9UzNKgLSFeR\nBkFMNSDVnMkklG796ybllBjgNYZLhUZWlcD2O/XLfoCVGV59YsAQk6jWevPc2Ysqb1Opoq1HVNDo\nDii3RoylAXYL7Y0+HqQVR1BqlKl2NEfu29dTXx48sKB9oXCjoWACnZYARxW8xrFPeCbH4XA4HA7H\nroS/5DgcDofD4diVcLrqOwmgL9auSWFCmmUNFA1N96anRDttwiQvrveD9GQWr84ppDmboBIaOEat\nIcXMxIToooN7pQCLzd7MbHVdFEMTqe+ZRam6XnxRtbEuv3QujpdmRcdZ2LvurS19f72uNiL1EULV\nUIW6zNrDqavWqLzzLUIOKjGqwDY3RC8U0Ga1hs4nnVMf7zmkNv7Qj/6omZlNzqmvp6FSm0lrPHz1\nKdVzWt9WrbKJnGqVGUz8ChPoeyjuqE6bntFnr1zTMbto+6X9MiTc3NA+7UqPukqR3kEhsnRb2xsY\nM9mc2igdyNSwQ4PF2/BbkFTMaBO9m5ChcI+dZuNYBNVMKiwDzqDDauybojnzc6gnhgM1uniMwFwx\nOcCVKEx0dfwWqORB38HeGEwkhlMWXRtOUQUjjAYH6rTflOLo1oPtnQpIC2l7CxQNx/1yv47ecy+I\nXt7aVh+0qVbC8ZIJUIykf0YYRFLBRooqMdTcz6yL+Y/Kr3ZLnVlp9Y45v6j7OwxBc5E2TUDRizGZ\nwlmOuhu9dpXD4XA4HI7vKPhLjsPhcDgcjl0Jp6u+g9CCKqhWG64YyeWgfEGKcnNLaqVVGMu1+xRY\nCgV3WNamXJbBWgUxTd0CpCWbDR2bx6HyJRxhJDUDSm0PzN/Onj6l74UaYHOlZ2DYqKotjhwUPcN0\nexqU3uzUZBxv11n3C2qHMWfEWw19VwtuYivLqsuU2qc2SORFNTRBNSwihfzE23p1qvYeOhhve/or\nX47jTdTs2jO3GMcLV6RqC9Kg+DJQ7RXUZkFOMZUVW8uiUPMZnS/ppS2o41ibam+fqqTRII3suugb\nZrULedGjzRbUWg2oikBbjgusp9QZWVvptdFV8WUO0DOoNQQKIAezzy7adWmPxpChP7erQ4zqzAZc\n20g1DSh7Qs1DhYzmm7NnVLcu0+gdf2lJ42xALTdAS5EWuxmjuDv/2z6BsZkYkNapjau43krftLIO\n2rnd1r6tjuYnjp4OZLEpLEUgR9WGFLRDRRxpL6gTqTptQ6nZAVXZTbyaNswkeDzRaLw3kwO01Ah5\nnJsBOhwOh8PhcPhLjsPhcDgcjl2K10BXMUVEtyHWumDakKn7V69yD5FyajPNP2IV96hyHOFA6mp4\nnZOB9NaIGipckc76K8PMuEaabL0uimL8K/7TSDd3qYjANWazSjnm8kopZkFjNZNqw8m+yidoirbJ\n4Rjrq9fimC1fq4kOmJoWfdHCcdbWZDJXrWm1fgEGgwkYiCVD1BtCPzcxLjagRMrle9RUypCKRTfk\neGyY1rVQt6mDVC/T6aNq9dwqTMC0MZOhSR/qkKEfJue0f7UiSieBvkymenEedZumQOd86nNfiONu\nRf20d0KU13ZK7VFNq11DmL5N5tXfNq3jzGBI1kuixi5dkQFaEgqvAqnVIfcmDeuYYk/D/JKquWR9\n+LzWoIJkXBhwhxtRo+k10lU7c3AXNPWAChImnKmEttdN9C3NGustbIdqp12HZAv3zNRkIY7XVkRF\ntmA2mcUcs74iuqpc6SkiM6lH422TUN/xOhKkIkfwxIMtd/tWaYwqsTUKTcwhjZauq9HY2Y7xmlL/\nhaZ7dsBAERMaaVcqrRKkKrvDacCBxzKelQmooUK0a6dL1WnvOKxzlR4sRoVDjzK/HFVT68bwTI7D\n4XA4HI5dieu+0gYjMiDdzvBfPDZC+0/vgh1L7y6yJSm8DbLi78ACUySJ0km9tfLX3Ny8FqfybXa7\npMWsW1v6FVFDFeNmkxWNbSi63/Lvt57YHbJfuGlkMqmhMe3x6w39WmvCV4dxNq9faAcP9HxWNvDr\nfwJljLP4BZ3LcLGZ2rteHZ5Z6MDbpINf09mMvmtuTt44+BE0MF5TKX0vLtv2zvZKIGT4yxnf02ii\n8nmoft4saQH11rYWUNOuvj3mzByrwucLytI0kQkLUQo4i/5pwZCEv/KD/qLsLBYPH4BXEdtxuapM\nS3Vbfbl4QGUlGuiDeknfmSlojOVSOq8KbrwteCEd2Ls/jmdn5GWzdk2Zvnr//u3iJkzj2Lmcxmwd\nmbgA81cS/j3TUyo7UkXV+3EhHFwuGkeDc8rwTE4wIvsd9j+cm8D9mFZmbgpeS6kuFl0jG7dd0fby\nuu7TzW31/1oZvkMTarfpPG62ivpqKqP9UzXdS/XlM9q91vvs5Uu6vwNm8ZCNY1Zn8Md/MHx7yIni\n9mHAjwYZGSRsrIbnEKzErNYfs/WmLmTAU4eZY2S2Om31QQdjPYMsaxdze7et/igUdP/kMaeHeD6y\nlMNA1fkOSwL1zn0F2bwFZOXox9YeyGIOL/HwWuGZHIfD4XA4HLsS/pLjcDgcDodjV+Km6aqRWdMB\ne2i9M7WRg2OaLtVfsJZBKpmp4fkppbFIb9SxYJSVp6cmtIhxBqnsK1e1WDGdUar6yF1KfbdaupAK\nUvjnlrUArlLX9manl9ajl8AbnKEaAH0rSK0kQREybiFNv7kh+qCyKl+U7VqvTfYuKa186NAhfSkt\n9FFmIA1KhBQLs5JcFFrIKc2+b6+s/VMp0ZVXr8ojptXAIuA2aBN4obQnemO01eW+uubqAK0jiqUF\nr52BW4E26KM4z1uFQOeZACWYyYqCuLqiRd9zi7rH6EWxcvFCHG9t9sokkBrcD5+UOXgVXVsXXfHN\nl1+K48q6vnMeC8q7oDhbDfVBrSL6uILFzAeP3xfH0zPq46zBYyXE9JXqtfdlVKIv1/Q9E/DpaTZR\nDgIeQ6TB5xblz7ICamZcGEVXDWIEXTWiDETQH9edJihY3I8X19T35dWVOL4KqvDsFd1TtYrGXKmk\nY17b1L0RpDX+Thw+EMdvvVdzwnSeC5I1T3cxD0z1lyHQT+vpp5+J47c//lAcp9JceA8hAKudo42S\nb4B1BSxLUQdlzMXGZdCq7Z2F+6Cl+BzqYA7j9YFxsv17NIfOTeK5jTabyGueyOc0Rxcm1Gd8jpBP\nbXWHL2BOtHvzaNhR/3IxPzYPeI1l4ZUVss8GNEU3XoTsmRyHw+FwOBy7Ev6S43A4HA6HY1fiunTV\nYDXc4RVMuaJ6clL+JdS7NxvMR/X2ZyrKQCekmkqRteqoVltFdWhaT6eQkqwobdrYVBq8A4+OiWnR\nKp20vreQVUq8C2+Bi1dU9XWj1DuH7sCi/eFptDciOkiFdulZkKLKAkq4ALlOqAHKNaVRl/b36L93\nvefd8bYTJ+/WdyL9mECKlnGtrL5au3Y5jptQfeWySpc2cY5bG6ISrlwTVbK6JtoikVSadn1DSrti\n+byZmSVRrTqT0pjIw8MjCXqt1R6uauigTVtjHgzr66JctjaU0qdvz9a2lBJ7FxbiOA/V1elT38Qx\ne235wMMPx9sKWbXBd73jrXF8BjTX1IKooLOvnNf3b6rP5vdLpUW/FaopugmNtwNHDsfxyehoHD/7\n+c/H8TTKQ3QyvX5ogxLdhKIrAUlIEtvbbfV9gxQnxhhLhIwNI3xybAQlEQzk7FktmvdYbx+46VsK\nNv91ULOVbSmnlldEV5WgrkoGGguTk7qnummp+9pQqFVQLuWZFzReVvdpSQIVbYWFu+K40VdcdvDc\nWQNFeu68xlkdz4ktKGmpGj18UKVKjh0S3X07QWZl0A9HcX2UT04/blKKlRzUa+0gDPWsfOJxjd1D\n+0VFBW31TdL07EsbFHFtlpBARXDQunz+cc6rgSLNZns0NymnBpZC8HmSTqE0BK5pIsMq6/aa4Jkc\nh8PhcDgcuxL+kuNwOBwOh2NX4jXQVTT9wVaksbZAEaVgIZ2A6qRa7qWKt9a177FDR+O4VtPBaRLX\nhK1/GkZoKdiIp+H0Nj+n9PxLp2UylclJRdDFO97iPqXTZyel0qrAAn+rbzU/ynj6jY4GzA8H9Bug\nL9Kwa09DtUDV1dHjUkq88wPfa2Zm9zz0oD4Hu/gk0o80few2lM4MQWltohL15QtKSa/A+O2Fy6IQ\ny5uiZJav6LPLm+rnJJRZQUnnVi730vKTMMprw9xxFcdmWYAwq/R8A7nTBksBdEcpZG4NqqBvL50H\ndZTXudVRIX31olQsuSXRPJVN0F59OqBDU8NA8dHjR+J4z6JM/yiPOHlMlMPZF07r+1GiI7Otdjp5\n/wNxPLdfFFWI8uQvvCT1lrE8A0oOVPrmkkz9B6C/2BuYsuzEyZM6xgbmG6g/ZqZRTmBcQDvTYJSV\noKk2pWFjFu2Q4JX22yQB88wWlDzVkugcy4rKSKRF+WRzGt9ULHISzGdHVKUGdXr6Iu7fC7pP52c1\nT6eTGJfV3nzT6ejcr67rfJf/UCVGNldFr1Wh0CrkNI9Pg14LDus7bydIgXbQgKSlmugflkxo9duS\nqs0mTf8w38zOaY7LJ7X9q1/5ehy/fOas4pde1HGqor5DPN3qKN0xYAaM4dZGZfUGzF53zIApkErB\nzDEPo859B6TIO3lM8837vkdU+eSk5rjuCPNAwjM5DofD4XA4diX8JcfhcDgcDseuxHXpKipjBrYj\n38td6jWlOdsNqGpAdexQFnOzMhbLTyituLqmlDEPzlpAXSglLkFFU0GKjPQKq2afvSqqIwNF1RXQ\nG/uPaPV9DrWxUn0DwyYM5d5M5FUK1FETygpm+VpIe3aQliwsSpX21u95XxzfdX9PidNNwrgpqTYj\nNcA0Z4BU7LkLSp2+WCzqHGsw4APVdu6a+urcaaVaa6gp1YKiLwX1R3YSipw+zZKf1LknYDbH1DfV\nECUom1ZA0bagNGQNtnFgYkJtvHevjOsCnEMhJ3pjdVnKs4MLut8mUSn6wrUepVXD+J7OiMaowRjz\nwnndR5/61H+O4+iue+K4CbVjtaQ2W1qAuoZ16FDxfAM08fKazv3YPt2bXVa/7qvcChjjaRj9sX5e\nCaqz+TnRbrUtXd+BvUqbF6bUXuNCMKCcGl7Z/uKyaMnSltqztCm6pol2a/VVbFXQj5ubmqMriFc3\npVyqwISuC3pkZU3f2QCtQvXq4CNFn81iCcAkDF83t1ATDwrKQv+ZUNnWORqWQKRxTx88rLgFymQy\np77dv1fzV2i3oap8H6ySxacph24Nc3GjwzkH6uK+GqmNfbto3wQozhrGxm//umi9aqD2+9qzz8bx\n5jWNq4k8lhR0+ZynpBhz2whxMWnRneMEKaiikV7JT2o8HH38bXGczGvMtHGtbMdgREx4JsfhcDgc\nDseuhL/kOBwOh8Ph2JW4Ll3FBFR3BBND079cVunmNEuzkw7pmwTRnIuJpvOrUoHUQVfkoZzKN5Ti\n3kKqtrCNleH40ulZ0GGrWuVfWpHxXAoKhWpXaWvWKao1d8wAWbsKFIW9sTHoNwYVG2iIDpRW0wtK\n8d6NNOLiQa16P/3SOTMzO/vKuXjb8buksHnk4Uf0ncgzrqHG0DPPyJDuE5/4hPZBX00VRM8YUrZU\nViTwBayPlGjqXX5uBrXR+uaVSaRo07h+g0lhraq0eQ3KMDZqiLGSTY6XrqqUdT4tUmmbugfqFe0z\nN6174KXT6qsANeTm+yn9VSiuZmdFhf3RHz4Vx1956ktxfPZlqRcLKVEHEEhZqyEapQ3l0sJl3e/Z\naVFjIZR9CzMyGc0XRGlstdQ/jUbv7svDIDAzqTkjwHzAWk+MQ+TQWaerOWalnJmZYewE+L4uTNO2\nN1RHqllX34YBjNcm1J+TE72xPgMjSF5Ks6T59ewl0Y9XV0XnVWpqk9kF7b9VU3+Sumo1SdDosyHq\njLHGIefj+QX1xeKe3jhKgRrJQzlY3dK5JOB2OD2jMZROYCxAYXanSld1QCU3oTxrYnuLNFZd27e3\ne3N0uy06q47aizTa266LevzEJ/8gjk8+8q44npsVHdsuqy3n5nR/pWnYa1TNwfS0pfPpdEkDUgHd\n63vWGGM9wTa2W14UYxv05RbMKnM51EC8iWUBnslxOBwOh8OxK+EvOQ6Hw+FwOHYlbmAGyHh4Has0\nDKpSpjRSs6rU1fScKIKdmlUJmKgVJkRzNbtKf21WlHarNnSqy2s6dgq0Vyqj40witbmC+kYBTIgS\nbVw+Up7LSNcnQDt0+/n3gXpVpPSQonsjUlflslJ+2ZxS+bWmqJ0sjO46UEDV0OdXt5TOvnill25+\n7vlvxNvqSLHf88D9cVyC8uOPnv5KHJ9HfbBJUJ6rVR1nGcZ8NKnKpGF8BVO/RkrjqIEUehU1Vaby\nvXRoJq/PTRVYr0rbL8OAsNkRJbRnRvtkMBYTY6Y4AtQVm55Sm03lda+dflkmeptlteVWSeq048dk\nwPe297zHzMzWNtTWv/dbvx/H//bDvxbHjZJowjSum0aCVdDNm1uiWpCdt+dQO6sONeU9998Xxzko\nplqoh9QAbZgMe/2WTaEGHVUrqGNUgDkk56HmgGJI55IcM/VoZhZ28N2Ya9Og0O45fjyOJyagZqTY\nBaaCc/M9qpHzbwZjugq11AsviXI8c0Hj4+Vz2iddQL0jKBnLUNU2m2hzKBzbMK8MWcMObbu5iXpz\nV3rfVciLqkwnNTfl86Iy8qCiEjCKbdaHn4t1UJ9p3BhBjXXwBzBXRiZ8fQP0YF/518BcXYXZZwLp\nikRK+3TwPL18WcszFpdUy8tAd9bRTh3UFSPdCGbVmphPmzg3GvMlJnrtHeAkU1A8d7PaN5lSn01M\naWzQlLdU0hw9NyVKctRD1zM5DofD4XA4diX8JcfhcDgcDseuxE2rq2gYxzo+WdBVNdRCWYVJXw3p\nzJnpXvpxsqDU40swdGvAiCwH6oAOQKSokqBUZlAH5fixo3F85drFOD599oU4RgZuIOUb4vpQbiSu\nDzJI3Q1vozciYZXKqj07YQqxrmENfVjKKkW40FYDTaWUIkz0U9h7D+6Jtx04IQrkHNLUV7eU53z6\nrAzeil96Oo7TFSlmChN6B5+BUiLRChErvWlI+Se7qFsEtVy5DAq00uujtU2oQDDQcmldcztEShxj\nLom2y4JW6TbHazi2tCBTvNVlKVSef+75OD5z7pU4DpPq++OoL1VBv66u9/r7mS+Levz//p9fj+Py\nhmiMfJo3hvq12aCZmfqG1NXWtvo4nRG9dBkKHxqIzk/AwBHukvuPnYjjhb6pXwIqyXpL8846VJit\n5nBaahNz1jXUQcsxJT4mJDindGhiCFqjpnbebqJOIGpHZfLq53xfXVVvgFKHOqcDGjeBRwFrVFVr\nmg9o7JnOqE0aGEOdTgUx6BTUEeMv61wONZyauk9Xlnv05kYXtGhSFFUKlGMONHUC4zJhGlu1Gkwk\n21Bqjhkkrclgt8HZNqCS2sb8e+Wqrr1U6quroGYiA0eR0WxeLVyDCi7APTA5pedvYRK10hKoUQWD\nwY5xu74rhef/wHOzSyVZL+7UUFcMS0vymJs6JY2Bxroo0Xqg/QeMBgf4QK9d5XA4HA6H4zsI/pLj\ncDgcDodjV+K6dBWyVYOGS6ibw7TUVlupsYlZpaCaTaWql/smThsVqS1aMAdLYtU1680wR0Yju3ZL\n6a3Tr4j2CnGc6Rmd78wsDKVQVt5CpIhDpeY63VfTUaOIqMHtw5fVjzJVvB0gzRig60PUlCqBViij\nbsy6NtsU6saEe3p50kNz2taekongU5dEWVxexTv19KNxOLekfcrnpbaxUDRMOgW1C1K9mYROLAAt\ntY6aOE2k3MsYi/W+rIGquDTaiAaU06BOJyZ1rZtQ4q2uigrrtmmKduvxhc9+No5feVFtVoJh3Pq2\n2sNCnXMXBm+Xz4vKvXK5p7B56QVRXinQcfNLMlq7eEGpbypF6g2aFOq+ptqCdcDW17ewv053AzXs\nZqelsKlBXbVwUePj4Yd74+ngUVGl1bb6vYl0ewEGiKw3NjOtNkqhTtLaiq51bIDEJhhRMzDAfUpj\nuRDmaPPze+M4m+0ZQNYbqAFXZ6w2aVRhegpVYxa1+wqgRBqbNCzUMTtkaVHvqIvz7dIdlkpJUB8Z\n68eoWdfBuNlG/bHSNibVxPDaVTSg5LgcO1CTrI32AOtktZrOv1zRuW2taz6pbfeo1A77rA5qDqqy\nfQeknIpOiNK9to4xBip3YU73db2pTq5WUH8yZF/q3NvocO7T5jO6T3/WQbfWq7fsZ8IAACAASURB\nVOo/S8h4cwU18SZAgx9c0hyQSXJ5gdNVDofD4XA4vkPhLzkOh8PhcDh2Ja5LVyUhOZqemsJfkF4r\nK+3E2hWszB6mX51GaqPcfZgYTkUNgMwV67yg1hCVFadPS0V14JCUP0tLUmCtIX1Xrkqt0BmpmLrB\nid0U7hyN1dhSipK1lSZBz+WmZDK2TqMurHpfhYlic6qnWgigENhYU7u+cEa0w+pVpZ7DVajoKvvj\nOJ3W9ukMhmf1gs7likyt2i1RCfk8DdX0/p7Eu3wC6pJCf3x3kHLtIrXfBT1QQRo3hKlVB+M1D1PL\n5E3UVHk9OPXc1/RdMPzKJNUPtZKotGpdtNDmqigtqs3CRK8dmqCc9hwU/TFVEC3yjVNIN+MeaKD9\nUlCbhSMoClIHpZLGytaW4k2YE2ZzGp8bW1Bl9qUmWSjiJheUhp+bE3WRSokW2cT8lahq+/Q+7Z/E\n2B8XmqA3RyXgWWerQ3qLxqqTUj21+mO9UVVbhhj/XCZQb4FeQL2oqRlRCUncAx2Dcq4JE1RQgZzL\nOzCK6wzU6dIYoRpvx5gxQeNZqEPzSdLt+p4S6s3Va1DxwVSx2x7xjBkHUFNqoHYVjAorWBawDaPV\nGsZmvdKLG2ijRAdGpIFoxUxCtOtP/Lm/Gsfnl0UFtTGyFqFK3gDd/fGPfSyOl6E2bMPwsQLldBaK\nt4GlEf17v4PxVmnonmo3NE8V0uqbJx46GceHDx+K48kMlrTcRCEyz+Q4HA6Hw+HYlfCXHIfD4XA4\nHLsS16WrclhZT3OuSkUpqjrqZwxwLjfgeYLXZZaHVeWsh4F6TCHoCtZEabWUwkwkyYGBXhijj1/3\nDsqrZmeVgk8gzVfZhnoEaoAs2mfrqtKVwRm1Z/JQbyV/NxSNcHVFqel1KlPKSFGW9P3rq0qnT3ah\n7Gjqe9JlfX8BSrhSF9RZQ+ebQm0nqj/yqF02NdkzFytgnJdRk6fR0HV0O0y9K+2aT1HZorRvEI5x\nEJlZBtcxiTo+O2ltM7NpqIVaa6Kl1tdlxNjpoL37pmoTMFebLCgFTWprm4Z+adSWAv0UgiLg3NBs\noqYRaBIa8wWom1OtaXsFtDIxv9CjVZZXNE7mFlWzydK6jm5WYzUHKiq/jfOisuU2qHHaI9R4AyQf\n2jCF/t93UEZ3NKes9+uL1SuoIYbrunpN9+ala2qHq+tqhw18lrRUHUaCPPMkasml0qKX2lC6hQNU\nruJshlRX30AO7cI2aoEyoQI2m9W9MAsVMG/H1piVjwPAdD9Q16um9g7RgiUY9lVKoph37hmqkmhe\nmU5pfNePH43jYEY0z5ETMNVEe+STWopy6LDUicvXtCzgVAhKn3XW0JbZrNo7GPL85zKTFpwMM+j3\nWdRkm8zRgJVjBkq9m3jl8EyOw+FwOByOXQl/yXE4HA6Hw7ErcV26iqvdDWZwNRhKDdSOGJEvGpa6\nGoVRdE53wJQvGBqHUFpZW+dO6oA1dKj4CKDwegOWnbol2ILCoYJ0M2vbJOEAWatcieMAxlPh7N2K\n7YCZmXXzUkjVykpb5jHCUlmlHMugMlqoBZVKKd2cgWKrEKAODugUY02rjM4xi9pcqRzM57a1kr/U\nVzKEGOezqFPU6epcSkjb10qozwOzsnpZtFtizOoqCAktA9PCBJQVi+jjGmi4agoqFpgjTvXVEXv3\niP4wKCbPvPyy9oXastMCjYE0dJiEcoa0doB5JVA7BRgTWVwTFRSkukiHVfqqmjOXzsbbSlCdPfLO\n98bxzBGl8INJmYw1YaiWn1qM40xt/HQV0/6kRjmnUhM0AVqmVde420a9n069d78//YyUpqdelsJm\nZV3jeGNbR9+ugh4EBRwkRSWEoIxbUHc1QMk0y6JT2mWpdkKorlJp3cucy3fuH95HfAYksC8psoA1\nsjC/V6q61mnU9xo3SKXVYUpagQosDRViHUq4DhwDD+4/YmZm58+ejrc9+9Sn4zibURucPCYzwMtX\ndT8cOfmgvhNKtVZW9HUVitrFRc3p+/er/8BOW4VzIcwa0zB23Ok3Lm3hK8HMrGjlyQkYzUIFubqq\nsWST2l7IKU6Ew+dcz+Q4HA6Hw+HYlfCXHIfD4XA4HLsS16WrKlWtAA9A8xBMxw0STa+foho42k1Q\nYd0OKI0E399AtYRMf2IX5IK7N2EwdCMMnNedLFgFnDqn1GXdlOajOVqBIwK05CTqSFXOy4guNddL\n/TdA7dTaojLaoDsCvFO309qnmVS6sjlgeKbt+YxohQQ6a7Oj9G4Jqd52qAtJZJQCHayH1vunAYqF\nqqEAY6VFAzGkdNNQAEzOy3yuWldqehxot2Cu1oWKBBRRIa/rnp6AAqsGI7VQ/bA411MozU1p3zMY\nM6R9JyfRxw3UFUOb5aG2KCXVrmUYiCWhTmuCTqWZIo3FmJHOIVV96UrPLPL8JVFqhw4f0zlG9+qD\n90pl2F1Q3zf2Ho/jbKC2m2iPl3o0G6SiupzrELdRvy+Naw9AyyUDUQbNfi23ixfPx9tePKf7uAya\nugoTxw4oxHaCtCGoQqgXU1D25PIaFy3Um1vZEiVChVyuozFSxz0T9q+bFGYVz6MMlFtpfGcXqrwy\n5rJ67aj+cxuXI9D4sI24Vte8WIPCMIl5+cghjcdu30ivVpH6agLUeh1qrZUV1aNrwrh1337VsWqi\nPtmFVRmtUoFbgLkf1VBdqOw6TRp7Uv2me3yHRgp4G+FGrlV17FxG55VLqe+boBtbWY3JDpjHUXep\nZ3IcDofD4XDsSvhLjsPhcDgcjl2J69JVJFkG6pB0RtAvIyil10LXvBYl1rciHHhlU+osDHiZVGmF\nQ7YOmpINw01RZ28QiorYrCMNjdphQV1tVQbNl2SquALzpjPPxfF0bqm37wNHdDzUowkaSk23kJZN\ng0qZnF+K42ZJ31lORHG8DiqjsXEqjtc2V+K40mCfK52eTyqVm4QCL99P+U9PiwqjOoTpcXKbKVAp\nbYyVa8s6lxCKiXGggro2NOOjqiGXERUwhzS0ma6rCzpxR7Gyck2GeuVtfU8GtGYL6poUzLwyaSpw\n1Jc51JyqQNHVbLPeGCgTtHchr7T5zAz6Cin0SqU3zuZmlcJPQ7FUel6qlMVF1WOqr0g1sg41Wgpj\n8mpB5273HrVxYHkTKpUR808bJmxz82qTeYzfoCEVSj3Va0PSuJsV1HZqQknZBtXLuQtmm4lQ/dwK\ndf+2UYdpekbjbGpK9O3kCdUh2oI56+amDO8yA8qo3tih8WyQBEWHsch71mCGmIFq8zLq3VVQ0+0H\n7M6g1dY9eO686MTVFSla12DgWXzuWTMzW7/Kv6sdNzZ0TR/9/X8fx4ePqd0L06L/0ymN6RrrfcGA\nMATd2ABdlCCFiWsKR6iek316Pw2aKYH5MRkoziQ1Z7xyuhjHdx87GscLMxpX3e6N3xc8k+NwOBwO\nh2NXwl9yHA6Hw+Fw7Epcn656tRDlVdvvNAaoowHDQJoUjoi716elrvtdQ/BGpKgGgPQtzbRYb6iB\nFfJ1UH4VmN4lN5TSrDU+Y2ZmRyZEV03ve1ccbxqUPy2lxMO2qIYs6IhGWlRCJyHzqnJV+zSRwi6k\noNQIdfwW0rFpUHOFISO+U6/gPxoTVHFlQQOlU0yr64DbJZ1LCW00Dmyui2ZJIcWbTigl3UYfp2EW\nNpFXurfd0rVXSr32W14G5VGj+R7qDIGWymRQFypQH1AzRPMxAyU5UM8H47AJGo2KqqNzR+O4Bjqx\n2leX3HffffG2eRgWFtqiwva8IkO8DZjnpXEue7rq4/ba+H8LvnReNEQXywHSoAI76Kt8Ru1zzwGo\nmwxjuT9rg3Gycg1mgVAMcgVCB4WNurhPm4gtoc92k/pwG55tKVCL86CxOiA5yvXhtal26KpCWvNH\nB/P1AE0yUMBIgyWD2nuXLqnPr9jtq101uIRB2zug7vOglauYQ576o89pe9+49PxLL2kbKKQU5qTK\ntmiu02e+GccNwxyOpRpt0JlZ3KeprMbV/gMy0ExPDa/1RwUWqeqd52JQRm1BmEAe2CvzwjyeBVwu\nEOJ8w/C13Y+eyXE4HA6Hw7Er4S85DofD4XA4diWuS1cN4A3ExIyqXRWMcHkaZJmY2nxt37vzyTcQ\nW/easLouIynWhKHxWog4McKQrYXCSVtbPdXC5S//Trxt6ckFHWPmCZ0AzOFY76YCiswSokGqUHA0\n0lLN7JNHlk0X0J8VGcF1oObJg85JQaGy0q+HsoF6VjTTyyFdyxpttQFjTB07A8VAYZ5qpluPddRy\nIZU2WZCRH+nTFmsj4ZxLJaWES1u9VHm9qTZqo3nTULQYFIs0TUyi/RowmJucEnXRRrr53AUpS1pQ\nWiVguBgmkYpHHalLl2UwNzvbozkbKDOVndCY2btf9bjYXuWGzPGauNgq6pCR1hkXqF5Jp9W2EzBk\nazdwz5TUtpeuafzetR+qwn5/PfzQQ/G2zz8n47cKTNgSuB85p7ZBOdLMrgkKOAxFg4Sg/GowiWyD\nM5uelXItPyF6lWo561NNNRgEspYiFY6TWd3rzRpqyVVEGedQry2XuH2/7XkPspZWIav7YXYCaqXO\n83Fc3tKYmOlTr/c9JDp2ZgYmqmj30y9LSZibwBwGui+bUvvd85BUrI+/RWPl6qqos3MX9eyYndOS\nghbqayXwZByob7lDV5nA+YjKsESgcXXXUdXOKmBeI10V3kSNQM/kOBwOh8Ph2JW4+UzOa8TIygg3\nSoOMWrw7okj4wJpi46+RUSfQHRozCzQqI7RzbqMWIHdvKt115/JALfwS46/mgbwE35LpdYCFbd20\nfh2kW71Pp176YrytkNLC1sV3qprzZv6uOC7Rih02/80SsgjGbIGyOqWkMkXdQL8qrKxMTqaGrFUa\nbY5fyXOzvV9TE1igurqhhXRchN3pql22SviVz0WiA94P4+3nNrIt1bKyMWWUpVi+pjYIcW9kM2qD\nCuzdt/rHqWGReQbZrBQWG1dqtHmHXT0+u4VzSaUTiJVJyWLRcj3Qr/aFBf3aP3xYdvQn7r4H5/Dq\nrNyxuzROC8gYJFG1e7us8Xbo4OE47iBjRDv+xG24ZbmottOFXw/ardNWH56+oCxWCVmgwn/xSBwf\n2t8b18eOHI23Lczp3rl4VdlA/srnFIUf3BYkuIgW1v7MEmJBMsfCNny28siyMsPTRaZjpz26AYQA\nyCYzPR8m4A3FchcdZHXozdQdf1X5HYRozCSur93UPHP+jPxgrl54MY67LSzq7fT6fmm/5tOFBWWD\n6lXdO69c0Dx0YJ8EITks6l2+rIzec6e0UHl1XeOqjszhRgnZupd0ju22tjPz38bcufNI5/ihSOO0\nad6en0e5mPYDcbw4q3l+cVFj+GbWIHsmx+FwOBwOx66Ev+Q4HA6Hw+HYlbguXTXKXnyUHwz9Ckax\nRTf0mrkpOikcvk/IBcmv9f0NC8Ru5J8zipXC94/2ErpzK7iHeRf0/zN0O0sWtDtK92awoHBvppca\nfWhCqcqoIW+G7Orn4/hLM/BXSO2J4ymUCGiBHqnWRQslu0pv1jC4qqGosbApSuJoqJR0DmvTWMm5\n0adZai0dr4yFiyWkgDuocdtFO7YDVt5VSn4qr2sdB1qgAiqghS7UdM5XrqnMBCvNL2JRdKeja2m1\ne23DhckBfIBaoOa4OLkBGqWJfbaweLe9zYWqXKgsiiiXU/898vBjcXzo2N26Dvj9PPLEW+L42tVe\nmv3Bxx6Pt+0/KP+NGtplaloLkk/eq4Wck/NKiTewuLzbRHmPMWG1pPMLcD+UkPZvY5Fnra591ita\nuDn/tGiIP7XQW2w9D+rvyGH5nVxehWcOF8hi+uNc2MWiffqWGGMchwuFN8tqzxa8bPg8CLG9078n\ncYjBOR2fa6IqNp9BdMNpglapd7DAedxAW1ZLooXOnRNF9dWvyA/npeILcTwzrfs0levNJ9vwpUml\n4UvTVtvlUpp7GlXMg2mdTB1lcja2dMzNMhZog0peWdVcQj8jviIcPablCPdE9+rc+vd7CeU0vvjU\nF/RBUulpzMVor0aLZUc4L4uaC01zCeGZHIfD4XA4HLsS/pLjcDgcDodjV+LbUleNrMI9In5txx5+\nxEFvnG/z4N/hSKGsAz0viEEmcngJjHwgNcfd0wfMzOyPH5JK5bGM/r56VaqrS8GBOD6XYhV0pR8z\nqE7eQHq81VVqNgllWJqeHkijNpDnXlgQbUEK6tJKT320Cb+QtW2oMEC9kH5MwycoYfQV0j70YhkH\nWJajDKUC24D0bR1UB6mJNCzlE/0qz/TGacB+3qBWabEkQGu4nTvt+xug10LwIdPTohs/8IEPxPHS\nkiiWbYyPOsbEfQ8qJf7kO97W23db1FIbqewaKKfZBXgu7acCS1RYclrtMpkdr+eRmdkqFF/drtpq\nFVXgk1CnJJKojI7B+fmnRXecONG73x57Ql5V0UlRf19//kwc11ukrEm7q69Y1oGUlg3QT9rcgYqp\njvsxAQouw/sEH071x1EKvkuk0qnoInUaYPvsjOjHKdynVy6pIvm4MeBVhbIlparu2fyU5rzDd6l/\nWgFKWvQp+muXVNYhbItOAmtuGZS0YVmOjXV4QoGObWBOXC1LXcVlITx3PjsCzJEXXpbHT3UTx+mf\new0q2tKa/p5EdfnOjOZWehtNSkhmltD5drsFuxE8k+NwOBwOh2NXwl9yHA6Hw+Fw7EqMzQzw28VI\nKsw5qteNFMzqEh2ohUao5aiuo1lYC6/GL6z3rNM/21aV36WDOvZiRsc+VpOJ1NfXVXX5/FmlzdOT\nMnpK71f9hgRW+gcowzCBFChHcwOU1otnpThp4bo3+4Z2JVAyzVAr9JvUZ2D4hWgu2suDHbKtbVbj\nvvWowwKfdvgJ0EUJUFHsyxC0ZZMlC/qlGro0wkMquYntnTYrGsPQr6F9Hn5YFvHfPCXFXWlTbfPE\nO94Zx+/53j8Zx6dPKfW9AvXYW9/x9jiegxpqZaWX/t5/QFbwYQf0bFu0WDarPkZoM9P6T5Ju8ZT4\njAmdAUUnFKMoQRDCJLDbVhsmQJ9WoXz8zBeeMjOz4/dIQXZvdDKOp2e+HMerG1Cv4H7o4h5IpTC2\nbLjSaXBZAUsakGoCddrW/i2M0Z3xTbO5el2fq4NuabegtsH4u3yFhoUaQ9vrKvcwbrA9OP8uzsvU\n75WM5qfy9kV9Fmqo2YVeCYcLoJYunxPlw3koDVpzaV7UbKmsNihj/+ghGUjSZPTl0yiT04GKCXNM\nMqVzPHpUpVNO3H0sjjPZ3v4N9M2XvvhsHK+vSUU1MyPqbs9etdEUDFsH1NXdG+dpPJPjcDgcDodj\nV8JfchwOh8PhcOxK3HZ11VBqhHWpboKWckrr20OK9aeoVBigpbR/G5TPgEog1Or9S41em3987Wq8\njbWi/svDqjWUWT2rc1lZjePaJVEZmzCHS6ypZtH0lNKfk1CWTEJW0ICCIkCdpSugtxrk2vr7VHHN\nNcQ0v0tQ2aJdLESbptNUgoy3cnW1KrVQHeojVovPoFJ4CFO/tTW1RwtKl2y/PVg7qdVCyh9NR2O6\nCli9t/6xPxbHT75NNMnzL4qqnJ2VEeQT7/zuOF6p6JpC9B/VF12kp1cwhvbu6R1z76LUUk3U9Dp5\nUkZlpGA4ZWRSrL6tvl+Hem1xbjyquURAVZy2pxI6j/msvjuVhQIKxpeTqFre7dNFr7zySrztePSw\n4uNqk+1npcpqQlFFuoj1vEhr0PSvQ0UkFDlBIEpiZHlCGvz1q1i3UF27ieM1YWbXgeovRC2sEAM2\nMO3TTdy+VRqs58RK2ouoIXZor2ieFsZsdlJU086lZB6WorDdIH3JMa0GnplTpXK2e/OE5tP3vvd9\ncXxgn87l4x//eBxfuigaLQnajdT3W94qFd/RYzDirPcVgvj+Bx78rjhehmnpwqLO98QJ1d2antgb\nx5m02oXz2ih4JsfhcDgcDseuhL/kOBwOh8Ph2JW4bq4nvJk65sSIGkjEjSilNzPlxLpbo1KydxKs\nXxRCCtRsDqelWCuG20Pyi8ne9jL67bm2KJxDZdEO5Y5Ssevroho6gZQS6c6atm8oJd1A3ZPsvOrv\nFFAiqtbQcTbrUl01Q6VXq1B2WF/B0aLTH2v1MA3fJl2ndimD6qtU2OnDzRZvFaioIl3FfgLjY1Wo\nMiqghWgYmJjpmd7RLJDHbqB+2ZGjSiU/+O73xPFDb5f6qdAUzVOYlDoim1JKequs488sicaqor2n\nZ2TGV9qSCqiGPs70acMAn7s/krFaCLoxwLRHVVMT1N3m5ubQeHFuPMaAXdRT4gxI07smKMJJGL5N\nTGg8RifUhseP9NSJ+azG8eXzp3TsmhSOlS0pfEIoDLtQWrUwFra31SaVKup84RZgfasOaeDmcEor\nHFAq9vqIc1ACNc9ILZLC5P6pkIogzH2glceNBNRxpKsOHZQKcLKAemyP3h/HSajmdtqJ44E14GzE\ns4cUOtuGz/Z8XhQna8l98Pv/eBzzPhn8Xr4jcOTi/u3TbjR2PHpI92YCFHtiQLmF/s5onxT2D2/i\ndcEzOQ6Hw+FwOHYl/CXH4XA4HA7HrsS3tcx8JBXF+LXQTm9ehmoQbJY34DXl80qXsmZME3WFGk2l\nxFsDagbt00ZNmmS4k8LWBW8VlNL/zAZqp2zKXOpCR+nutikVmsRxwgCGc+31OM6FSq+msH+9qTo/\nW1CFtEEd5dJKx+7QVJ0GamEhvZyd0ip+ZE6thrS9Ib2aSupcauXxmgFSXcW4BUVcYVL9EOJ+bDRR\nQ6YsY7QdCmwC/dcE/bO0T8qln/67fyeOc3dLpfPyto5X/oYoyXpdfbCwBBO/VfVrKqO+KYMCObxP\nqX2263GoL3bS8kuLOvfJKY0TgnQca3A1oVbZgEHZ5LSotnGB/RaCfiEzUO+QWlOcAw1dAg18pl8f\nqVSBwdtl0cHPvii1Y3kLlCf0gzgt64DWTaP2XAo3R4DPhuFwqoTTJJWdfGZ0+yqpweOBukpQOUVj\nUxx8OHsyoHgaP9BmmHuWlmR0Nzcno0q2BzHqmTt8X7bp8CUHg209vG4ZwbYf/CwMQhGHA/3dP/6I\nY/NVgcpC1mpLJoePg5uBZ3IcDofD4XDsSvhLjsPhcDgcjl2JsbkivTYV1RtQirQLkc1KipRB6pSq\nBSocukidkqLZbogyqPfT/UmkIldLok9WKvpcvSo6qZXS9gSN8wKoIKisCLR/qgPlVEtjp9LW99IU\nL0uDQaQ6d+rcQKhhWSzXn85L9VAA1be8IaXXdlVtkcSYzqbGq+AgRUUqkaqrXI71jdT3VEyVSqjj\n0z//THZaxwMtcvxumTM+9qjq3Ty3uhzHLVCPl8+yJo/O5cBBGY7tmdN3XTwjOnN+QQosdKXde4/q\nmU1Nq85Nok8VLsyLWgpDKINAvTbqiuugalk7qVYRXbb3wAEbN5owXQwC0D8Yj23cm9WaxvHyqvpz\nbVVjs9MfF6WarnF5Gyq7po6RRm04UhYdULDtFhWWML7khXRJj5CyAAWH+y2RGF4Tqdt3v+NjgupV\nKjyp9iGrM2B4OmZzzpsBaTJeVzJ5O+mzG+HGaqlBYDtMCId/sjt0KzH42kBFJNtueK20UfBMjsPh\ncDgcjl0Jf8lxOBwOh8OxKxG8llXbDofD4XA4HG8WeCbH4XA4HA7HroS/5DgcDofD4diV8Jcch8Ph\ncDgcuxJv2pecKIp+M4qir0ZRdPBOn4vj9SGKou+Jouhz37JtbxRFH7mJz74viqJPje3kHN8Woij6\ncBRFP3Gnz8NxaxFF0aeiKHrfkO3/SxRF33snzslxfURR9GO34BhD+/3NgLH55NwG/JCZTRSLxeoN\n93S86VAsFq+Y2Yfu9Hk4HI4bo1gs/qM7fQ6OVyOKooSZ/bSZffhOn8udwpvyJSeKon9pvSzU81EU\ndczsC2b2nJn9nJn9opk9bj23oU8Ui8W/E0VRYGa/ZGZPmtkVMztvZivFYvFv34nzdwxFJoqi/9fM\nTpjZtpn9DTP7aLFYPBhF0a+aWd3MIjP7s2b2hJn9QzO7YGYv3pnTdRBRFIVm9q/M7EEzO2tmhf72\nHzGzv2w9Z69lM/sLxWJxNYqid5vZz/S3N83sLxaLxTNRFL1iZr9hZncVi0V/yb2DiKJov5n9G+v1\nUc7Mfrn/p/dGUfTXzOykmf1ssVj8cP8e/ZyZfczMPm5mHzWzh/v7/5lisXjxdp67I8avmNmRKIr+\nwMz2mdmz1ntWXjKz9xWLxR8z62VqzOwfFIvFj0VR9LfN7PvNrGNmv1YsFn+JB4yi6F+b2Zlisfj3\nbt9lfPt4U9JVxWLxL/TD95rZ/9/emwfLcZ/XoV8vs999wb0AARAAQf64iqIWUhRXSRRlWbRkS6Jk\ny04iZ1HVU5wXO84rv+e8ip+dOPVeleOkSk7FdpUt27EqiWRbimRtFLWQFDeREHcCTew7cHH3ubNP\nd78/um+f0+DMxQWJAcjhd6pY/NC3p+c3/Vum5zu/c74tEk20/yAinxKR7SJym4jcKSL3GmPuis+7\nOf7vU/G/FW8s3CAiv+153ntFZEZE7jrr7yXP8+6OF8s/EpFPep73IRG59FamChGRe0TkaokeQP+B\nRF9wW0Tk30i0mN4uIj8Skd82xhRF5I9F5OOe590lIl8QkT+ga+3VB5w3BD4tIns8z7tbovm4aots\neZ73ERH5VRH5rQ6v2yEiX/Q87w6J+vw3e99URRf8jkQ/Lj4nItcIvis7whhzh4jcJ1FC4HaJvkNH\n6O+/KyIrb5YHHJE3aSbnLMx7nufF8S0i8qDneaGI+MaYRyRadEVEHvE8zxeRijHmO5eioYo1scfz\nvNU6AI+JyEfP+vtjIiLGmHERKXietzs+/gMRedvFaaJiDdwgIo/Fc69qjHlSouzbRhH5rjFGRCQn\nIgdF5Pr4+N/Fxx1J+7w/dhHbreiOb4vI5+MszTclyuR8UqIHF5EokzrSWI9hbwAAIABJREFU4XVz\nnuftiuNHReTXe9tMxTrB35XdcIvgu9KXeB2O5+lnJfohc3MP23jB0Q8POU2Kz3Y2tOJjjqR/8fui\neKOB+2e13xhN+huf+0Yq/PJWRqd+aYjITzzPu49PNMbcKCJH4gxBJzS7HFdcRHiet8cYc61EWZz7\nJXpYaYlIm07rVDzo7AJI6jj7xsBa35VZOt6N4cnF571fIlryTYE3JV21Bp4QkQ8aYyxjjCvR5HxC\nRPaIyHvi40UR+dClbKSiI66O9wCIRHTjN7qcNydRlu7K+N9vyh3/fYiXBXNsUKJfhCURudkYMy0i\nYoy53xjzMRF5RUQmjDHXx8fvNMZ87lI1XNEZxpjPiMi7Pc97UEQ+LyJbZX0/jEeNMTfF8e0i8nyP\nmqg4NwIR6VQteFkiOlmMMRtE5Lr4+GMS7bnKGGNcY8wPjTGrFXX/RKI9kX9qjJnscbsvGPrtIecr\nIrJPog1wPxaRr3me96iIfEuizcZPS7SR7jFJ/xpRXHr8VER+P6YYR0TkkU4nxXTIr4vI14wx3xAR\nVde9MfBdETkiIk9KtNnxcYk2N/5LEfl7Y8zDIvJPROSJWBH5KyLyZ8aYh0Tk34nIQ5ek1Yq18LKI\n/GHcRz+USNixnnXzuIh81hjzA4l+sPyn3jVRcQ6ckEhss0tiMUCMB0TENcY8IVG/PiYi4nne4yLy\ntxKtv6vfoSdXX+R53gsi8oci8hexoOcNj7dE7SpjzLCI/LyI/JXneaEx5usi8t89z/vvl7hpCoVC\n0TcwxmwTkR97nqf+ZYo3BPotk9MNZYl+UewyxjwqEeVxTqM5hUKhUCgUb168JTI5CoVCoVAo3np4\nq2RyFAqFQqFQvMWgDzkKhUKhUCj6EvqQo1AoFAqFoi+hDzkKhUKhUCj6EmsaO/3yP/6NZFeylTK2\nxGZlK3UJp+M5qc3NVhSHVkCH6HrkmcpPYG36w9LyAo5Xl5N4KI+25AqIQwdXci200bFsinHcoo9q\nuzieyeaiYw6ONdpo+1AO1yv4K0l88tQZXLA0kYS+m0vioN1K4j//4p/2xH/g0JHDSWNTfcJ7z1N9\n1fmUFFb/0G0D+3qucY5Ln339rmORP1KXO3ghttlbVueLh9K5jVds33HB+/Pffm85ebNWyGMXb+WE\nnS1Ngi7zNHltt9ZyH6T6IzWAKLa6nLMe8Pm8EsDXLD3kXn39bmM8DLqc0wUWvf+/v6/Yk7n5trdf\nmzTEpu5ZXMT6Fvh46y2bxpI4S2uUTX3r2FG7A5oYxRz+vnF8IIkvn+Lr4fP6NIZs6s9CFv3gOlhr\nWz7M5GlJlZ/uSaxW5JsPvZjEpcFiEo+MjybxtsvGRUTkI++5Ijn23J7DSfzl7zybxFNTG5J4644t\nSdy0GklcXZzFe2aw7n7n209c8P78+H9+Irnhgd/ZXN+yeW6spwnnGqed5133ydwZVpf19KyTEgTW\naysdGNICHQZd1g9ay+xuay6d/tV/dVvHkzSTo1AoFAqFoi+hDzkKhUKhUCj6EmvSVVZIqcdu6f+Q\nn5MobU7PTzbRQlaSA6vS3zvnksOAKC2inIpFpDjLDVynRZmznI10avry+Ec7BEUkFmKbUolBSJRS\nfBP8JtqyVEFVgaHLUM7j9OxcEu87jriVRXtDF+/j9iQJngan5vnepk/qHHejf85JV3W5dNdz1nWd\nLhRVlzfr2vbXCG5jirpKvWdv/aeKJVANtSbmKad1bZqbIc1B33LpHIwDJ66vmSGagccJMbMSCF+b\nUu8ptpMpLR5vfKP4nM6v5b8EtGR1pqsoDR52HidWyPObuSvpgt7/Fmy3QAsxmTg8jH5uN9FWmzit\nIKA+dxC3477zqf3LNYyV5ulyEi8sYR3LubR20lq4YQRVAcYG6N46RGnx2unjnEPHQNk3fJxfoPW4\nWQe9dPrMkoiIvLT/dHJsZh5rp98+u55vfJzYoayLsXLN20F7jZR6u9jaKQq4G43Uje4950Lb+c/n\netmaf7A6Hg1tupmphZbo0dTiSt/d3d42uRx9F3VbxLusDWka/NzQTI5CoVAoFIq+hD7kKBQKhUKh\n6EusSVdVK0tJzGlwTtGnkoZEKbWIO2q3Xp2OymdwjNUB3ZRWTU7P0vtnc4UkdihV62a54CquaXOL\nfVBUIcXZHCgqKwNq7GScLl1p4XNyW46eXkzi2iKuF+RHkrhuU8rZRTqw1SLqrEdIMyhdEn3MvnRJ\n93d+3bkTh+etIeiizOpKF3W96Nop3lTidj3Xe/UlVl/c+XgPMOI2k3jQYrqK+wzHQ2qRQ+pAl87P\nxhNufDibHKvVMC6PLOHcmuCcgGQ0fKvtLknrcB2/rbrRlg6nxFPqqQ7qKoq70YpWNwUW/yOl/shI\nL8CUfkDrpZPF8VKR3jvgEcZqKLy2FX+GsZHh5FhI9NzcPFSq88ugivLEV44NDiZxtQW6aM+hmSR2\nSY3FrZpfrCTxK8dwfobUWIHP3xMYaysr0Xs99hIUVe02aK6JCaypWWpv2MS8qK3Uk3j3C2jLxDDW\n9F6g27hf36Kw9tqWVnDSpa3Oc6rbutn1LLqOzZekL+PQJ8o4dZ1zfcDzVO6u5zrrgGZyFAqFQqFQ\n9CX0IUehUCgUCkVfYk26amlhtuNxy2a6pk0x0uMDJaQTR8egOhqP4+FhpEFHhhAPDyBmimS5it3/\nZY7LUAhwKrZWQ/q1Relfv4XXVstI19KG/5TBUbNJadyJyHRqaHQDnYxzF48itVoLcWtHLoNB1dAA\nUs5XbMfx+VOn5KIiZfrXO3Klm2HbukzY1tGu9Vyn+4tX3+i1X6+bMWFvtVUiO4Yx7rJE05YKPKUR\n+0QfF3M4niUpz6qX5kgJf682yQzzBCbJ4QVcr5FSK+F6bEbIfcl0VcCqL+msBuM+cQKaqOfRV6yo\nSr0sxXiFHc8JX6Ph2XmBqH6HFaBNfN5mE3ROldbd9F0gtVI7Wo83jsGA9Nqrr0niI0dfSeLTM1jr\nC8WhJN4xNZ3Ezxw8lsQHj+D8tKIK3wHtFqlzbYypQoY+K21VcB3+zR19DhZRZbO0NWGYjF8ziNtN\nUGo8M2srWMdPNnq7NYBNE6XLNo+u4JemVE9h/P8uL2Oausv7dxv3DFZLsfKy2QT1x8a5Qirmc6lY\nwxTVTMrpzs29YNBMjkKhUCgUir6EPuQoFAqFQqHoS6xJV2Uorci74ANKGZcGoWLafPm2JJ4Y35TE\n27dflcTZbF5ERC7fgb9XK0gxHnhlbxIvkKHe4jKUXitEVzVoN32Tduc326T0ot3gjo083UqVUsE1\ntCFDqfIbbr45idsDkUphhVKvgzmoTKw6rlEhGs0uIc1qD9D5GRxvh2t2xQVHmEqLXoDrdVPDELXJ\nCoCwQyo2agvilH1cQKnv19NQvuYFvsZF8HNMcPXGfBLnSbFXzHdWOrUp758jNUzKyjP+B7FfUiIq\nYOc0zi7TfFlsdFZxZYnmKWVIVUg56RqxT40wQzEpcLiVFIbnwSJZXSmqzjF7ZfpN1KET6Y0yh+dj\nlupC2Rbfh5QbY4ImK1lpnbbiG3RiAarPtzn4+z/78A1JXCea6egcxpa3/0QSz87C0I+pJaYYXAdt\nz2Wx1jFVwdsdMmQ8mMlwXcHoojlaa21yTLXp3CzVLGTqLEM3tZDBZ+o1XIdNV1ktJRS/tnpVYTdO\nKLWedxnsKVq+4+GUaWeO4oE8+qlK5qOB03l8ssHfasxzkJas11W5S80AFQqFQqFQvGWhDzkKhUKh\nUCj6EmvXruIaEUQ1FAugWa6/8R1J3KJUZYXq5pTpOs/sek5ERK6jmlOzh/Yn8aPfezCJm0RF1Xl3\nd4ZMscgkkLzPZGB0CsdJ6ZWhkxwf7RoYGEviLKVFC3mkpw/PRPRZhW5bdgNe12hhB395aTmJV1ow\nopIS2j67H2osv4rX9gqpTOfr4GqCoMOLKReZySBNvbyEVP/Ro0h9Hzt5Mon9NmjGyzYxzXl5Eg8M\nErVHpmDp7fidP1Q3I8PVV74+2urSEFaN8nwSj4xAkZhhCodNM0lGxadwDaBV2oO7t821rah41eZR\njONsmSYeURGjJYyDTSjBJEVadZYauP4CWGg5XUYfr5AYhimt0OL6TXHbO41NSaur0tl8qvVE45BP\n9+uL9AJSVl5A+NwoohNd2jIwMgiTUvJSlaUyrZNE2btutHZV6piDYRtbAEpFk8QbNu1I4uohfN5n\nv/+TJGYqqFggKoppCJu/MyhmxpFih74zHItVV9H/sznqnyHEeQvvn6cxwVRNjmpX5cg8MedwdbAL\nDxKMSZC2y0WU4q7olHOarp5va7pwul2u4xNPS1+tUiSD3Fob401o+0eqPlyn63dVUZ1bdWt1/eDn\nXr01k6NQKBQKhaIvoQ85CoVCoVAo+hJr0lX5HKiaD37wQ0l8xRU7k/jwzPEk/sFPnkzia98GGqsc\ngIrJjEcKpYaL9JdPKWaXU1oZrpGB9KTQznqLducHlPpuUUotQ/Vf2g1K7ZJKKxOgPUWiRvbvhmHW\nmaWIYssNgqIqk1lg+RTqs9hlUFRBFe2qziMNn6G8pmNfZHVV6h/nR9hkuF/i17aIQnryqWeT+Hvf\nfyiJjxyHmVi9QfQcUSL5PFQQ2y8HXfWxn703ia+8Cqn1VHr1PJ2kLrRh3+syJjxP/OAhzLWpYXBB\nk1TTZ3ITTDgHx3A851LdqWXMhyP7ov7JjuF6hQkYw2VIuXPdFCiyrcPoe1bTDRYRF0hxwmTBRuKF\n6sR6MY11fBFj5QDVhKvTmtAMojHpdzU54/dnBRKp+Ygm8ttoTH6wt7WORNLq1SbNpRZ9IK5LVaQ5\n2KDX8vmhG8U5qu83vQkGpLkN2/D+VOtvdoEUrotQVBUHMDd9vzMNwxRHhu5nhuhS1+782zrP1FX8\nRRDSuPHHcI08UZXOMqmASO06VER7i6T0ymd6U39sFZZ0riWXVjp1XqtShzud08Vc9XW56KXKtGHs\n8drKKkj+krZZJsWKqZSpYNTfbKoZ8OvYhLPrZ+oysdex5momR6FQKBQKRV9CH3IUCoVCoVD0Jdbk\nSFpUe4SVB1u3bk7ib3zn60lcnQNdUxDkt/Z7Lyfx0ZPROSXalT1BhoK8O75WA50UUurTYsOnPGim\ngNKEjQZem63DmC9HFNHoto1J7Neh3qpXEE8PUQ2uwShF7xBFVqtCRXXF2GgS78whVVproi3FEaT/\nawugtDKUUu4Zujmfddm5zgqAOtF8e/fvS+LZ+cik8fQM+v6xxx9P4pNkILaeOi61FsbN7LPPJ3G1\nCjXeP//cZ5N4wwbU5WHKLF0rqTMSdVXXlCe3t8spF4+hSmFmDuaYC/MY368cAX2c3U2KSFI6bZ++\nLIn9OfTry8/sFhGRWz90W3Jsm4HaTZpUL4vmbzFPdLNLtBAZzzGNxIZ1DqkwS0RjFEqYp6UC6KKK\nYB06sUgp79icrk1pcl5LHDruEGGWYefDAPPap7VP8qjf1CuwmqvNFCz9DK3zesy1f2hNa9OY9WOD\nPzZsbZegDmsVQLtvGAVFOTqGtShPtfZCulfZkLcMoJF5MqPMFoleoi0GGbr/Dl1nsoj3HYjXdYfW\nep+UVkylBEXclyGiu4f4emTI6ji9/W3vpIzwOtN63SSfKUVapzWHl/CUiWoXsKiwizEhn5OzcS+p\nxJ1YRBu2fKwZIRkD2/w4wXK6uL/ZIDCwUx8EYddah13u4zq6UjM5CoVCoVAo+hJrZnKuvx623xOT\n+MV8ZhYVs48fPZTEp07iV2RtHr/g548dTOITe6PYpszA9LtuTGInQ74IPn61ZagCLT/TcVmHLFVE\nzdPmKJcqj4cBZYQE17TofId8XhqUTRooRscby6jAu8TlG4aR9RHy9VmpINuTJ68L3gzpcxn0XqFb\nFdouPwP4l4JPfXHmFPr5lf0HRETE23cgOXZ6DtXdOevlk3U8+5mwBwL9cJNsDq89cPhQEj/yKDJF\nv/Dz9+E6/POkmylQapPbufDaPXDCHqd4bB6jNvvFYBw1qlS1ehneJ3NUQTqk/d+N+BfavgNHkmO5\nYWwwZj+eQgHjuEQbUls0v5p1KrNCfc+/wp2ANwGjLVn6Gcmfj29rllYvaAtoXNEvTitVYZzHCZWu\n4cwdrwcX4adgfphKOdA9dMjTxaXNuzZbhVHl+Sxt3g1jXyOX5sVj3lNJnBnF+nfvAErv0L5zGd+K\nf1Qpk5Sne+LmKJNT4rIO5PdDPjVZwTlDVNpmkqqfj+Sj4ymRA71nM+jsleW6nE1AyCKPsMf9yeOl\nW4X4buhWkTvscKz75mUun8MmRnwOG0GhXwcpU1qgebdYIdZBuMQOlYixiVWhcQj/PM6mcrYLTQmD\nzr4+3dbT9ey31kyOQqFQKBSKvoQ+5CgUCoVCoehLrElXfeAD9yTxe297dxLPzICu+qVPfzqJ99OG\n1I3T2Kx30IPXTCFOdZ0+AC8G+x3XJvH0NDbGzRLtUSBbabeA9Hi2hHTqxNB4Ek+OYhPw0CjS7AOD\nSInmqDxFsYjr5B2ilGjDddCMNr8++ejDybGFU6CiDhCN01ghGottzE8ewvuTN0VwkX1yuiG1CZfC\nfBGbP++++84kvv3294iIyAsvvpgc++KX/iaJT86CJrFTeX/2Q2AKqbP9PtvFP/LjHyfxxmmU73jP\nLagYH4SdfRg6ei+sg1la1+ZkOmp38QK5UPCpOvVMBZzT3CyoqC2jw0k8OYA50PTJ5p+8bOx8RIHt\nP45xfIKuNzCEa2yYhgfP9EbM9SLNxxyJAkKqVsx0lUW0Q55KGAzQWFlpEgVHpR94A3EYz1Oby7YE\nXCoF1FWLzmm20K912lhdo/dM8ePXXSm9wNa3Y72y20SpE1OXL+J+8lhrEsXgEHW0uufVDWhtcVAO\nZGYZ6/jiCayFEw7u221v35bEx4nyzBGVUSAPGpf8T/I12hy8gvuZo3GZow3PGQsUx2rVcIvGQZrK\noDFE98gnKsWnfq5aNIYs2lTeAzh8fd54TGtPYPEc6Lz+8cd1Vz9vis6i6usBxkCrgn5y6Ct+uUFz\ng4U8dC+nh/GdND+DMjwvvgDvM96EbGfxvVAcxzowftl2fCZ71ScnZchD12M/JYzx9LrcrTzFufkq\nzeQoFAqFQqHoS+hDjkKhUCgUir7EmhzJpk3w0+Dd2Kzg+OhHP5rE7C0xQ74pV+1Eivenu34qIiLP\nPPNCcmxyDBTSvT/zwSS+4kpUyd2x9YoknpgCRTFI3jSDOaTTc5RCpSK14jg47lhs743nvRal/nyK\n27HfzeadKCtw+BhKFby0G35Ae17C5zt9Aun/dh271J0WvF+GSmh7r5ASHDErtA5rbIt9KThzGNNs\n77zpncmh40dRYfxL/+tbeF0XXwfeOc+0lOukCKAkWqKSGV//+jfoDJx/yy2gV/nj+QFbrtuvev/1\noXOKlOm4M3Oo9nzFFVd0Ov114dQ8KKc9R0E7NKlcxoALCmKMqCa7SL5UKb+KqGP9OufE8ZnqdVz7\nICmwDh3G+M7k8Z5DI6AlSoN4/0miurJkw79EdR3myatquQKqaWaFrebJhydWiAzmifIgz56AqAum\nzkIfn7VJ3vUrZczNVqtLqvwC4sabUW7BYhqO6JcslSPg0giVZpXOIYowHuvsj1LM47MXybzoBK3X\nWyxsE3hHCdfb4qOvWhXwhrV5jAs/YAUN3suysMXApqr1xTHyNhvD52u60fEW0YxtmrtcFiBHtE2L\nzkmdT3RH0+ptf9rsIxPy2sY5BVIO8/pE2xbY88iN52ZqraSF2C+fTuKNWbx/MYPv1m89h++nkOaD\nTdTVPM3HkBTQlROHkvj40f1JvMW8LYmXahgHp+ewXcOJqeQ2fWb2s9q2A9+nGzdjHnD/WV3W6HAd\nqlfN5CgUCoVCoehL6EOOQqFQKBSKvsSadFWdSh2cPoV02MAA0t1pMQ6emRoNpKbMVVcn8VU7Iwrq\n/Xd/IDk2RO5TI+OwGg99egajtHKdrP8D2lpvkYlWQOZ1TUr5Bm1WZFA6m1K3XM26xTRdXL15cBLl\nIK4ZhKJry6ZtSfzum0CXHNiH9N7uF1GqYO9exDPLoDcuBs7f5o4rz776QrxD/p3vRAX6Bx5+NIlP\nLyANbqcMqwCH7rdtdX4GZzO3U6TA+8pXv5bEJ4givPOOO5KYTS3bSaX6863gS7Qb0WszczDAfPRh\nVF+/5d0YCxcKLx8CJVjFNBU3xJReWgGN0QwxrwpkMNdcwv0LGtGFWElXLCG2aX7zvA+on5pkznn6\nBNrYaoPeEoHx3MgUFBn7juL+BWT3L0RHNOmNG0RXrdLpLqtxaE43GlTigWifkOiVoEWmdmRmZodY\nS3qFyQ2g3dttVuTQZ6SJlyptQ+qpvAtaaJV+bFNF9RxRwH4D97hWQz8vLmBAzR0+jPNJcVZfxtg6\nUyMlHK3T2RaVx6HPZ2VIHbuAOD+BMbo4ENEdjRZtHeCK5BaOs6mqRS6JYaszxZFjJ8UewGaFV8rk\nFfd7MI/7NEGKxJMLUOuGqe0UcWkEKpc0BGZJbnoXFMo3bMN30qGToI2+8xMoYLlZIan5qqQmbi+j\nLQvHobTyF6C4bCyivExxFOWemkQ3h/H4q/o41gp53nH5FbQroH4N7M57LbrRWAzN5CgUCoVCoehL\n6EOOQqFQKBSKvsSadNWxY0hVfuc7zyXx/Z/+eBKPjCA1xlXAJyehoOD6K+24UvQ0KbcGyYDIoXQq\nsxU+mwdRWrlJygdWQYRkyJSnYiW+jbRsmKU0NF0/R9WI2UirFavK2qQCCcnAzB7i+ldQJRRKSMNu\n3oZU/eYXdibxD38IldDFwPkSNF2vE1+Ik4ajpHibIvrx5CwoOYdryZBKgJUg6aq5nSkipq5mFmCC\n9Y1vfzeJj1Bl7k984heSeOvWiHZstTilvI7d+kSp1UiB8OyzP03iYwf3Sy+xTPSL28Z4PTODz1rI\nUO2qKvphtIg8d/UUKKLy6UilFUxgTjsbYM4ZEl1i05zOkzKQTeKyZODZpjx0uwZ1XIuomSal85sW\n1apjX74WVGWs1svkItqjQgqPGtFMrRb6yQ9giBdSRfQ2jQMW4KyqKiP0xgywQKpPrjDuktqGKcK2\n1cXYjej71QrYBVK8WUzL0+rfzoI2OgGWQs4s0T0h1RCV9JMqmSgukEJtmOiUVhP9UhgDReln8D1R\nnQGdURuM+q5MY5iN/gIb79OicUAlx8Rnk1FSEzEV2Qu41Dc2VfXmNmRpa8XBF/Hd6g5j7cwNQp1o\nxetcGKIPpojmuvtd1yXx2CA69vQ8DHpzVAesTffGIfPbLCkPq1VQklZIk5BUwWzYu2k7VZenmoVO\nTKE6Teocmo8W1c6yQ65qjr4Pib7mauds/tkNmslRKBQKhULRl9CHHIVCoVAoFH2JNemqAwd3J/GL\nL0EJZJ4DzbJpmgwD6ZmpRKk0NkFazfT7lKIKfDZnInVNyCk1XKOYQ7NzvOM+S8ZelBprNWmXNikN\nfEoL+5QmyxBPlqP39eNUb5aMpZZqyO0ePgoFyf59qM11nAwDG028//TU5Um8ceM26TW4dMg6/P/W\ne9X4gjgSsEkV9S0b/VmpWiREOfp+x+Mp1QwrsGjMcaqaz3n2JagKFhaRXv2Fj/2ciIjc+HYYWqUN\nqAh0w/ja+w8gHXzswIEkrlWZ4rjwYMO4hdNQMU1PgJpgVVBlGRSRnaH7R2ljux61uXYSSoqQUtY2\nGfrVSEU1SPXgBijFzjWq3ByplYhSaszDhE6oNpLVxhw/RWaDJw97OJ+UJqPjI9HryCQuIHql2SKK\njFQ/bGDabpB6iCVrpPCRX71XeoGAaLs2SV98mgNpFSLuj+OCF2ry+hbPJWZnXDrXJRe6Ng32EwsY\nu2WqP3XZOKiURhk0Z6WGMVJr4c1GxkaSOJhEXJyAwrFsY6tCnajI1VqCgc+0NtUcIyqDGDjhrxLH\nZlNFXj96+9uea1e1fYx1i97Xoi0RR/aD2t5+DZTIpSFQiGE7Go+jg6CWbtwO2o/rvrEhI6+PuZSZ\nJK3L9Fpe9CY24/pbh+5K4qceQX9vvRHtzU2ibSRulnI5VnhRLTk2brVCukch5l1K1UhbTkLaruKs\nw9hRMzkKhUKhUCj6EvqQo1AoFAqFoi+xJl318h6UV19agjLmqaeeTuKb3/2eJC7kkV5zKTWWo/Lp\nq5QFV0gPSEWT4lQopVWvI5WZpV3iGRfXdijNm83i/Vv0KVuUnq7RHypNpMZqpP5otnmHfhQ/99QT\nybEHHvxOEu87hLRjeREKjqCFdFxoIV288zqY1A0OQdHyZoJ11v9F0vRjQH3idqAtzwYnH5ttvJZ3\n1ztsDEWxTWPH5Qwspa2PERXzN3/3VRERGRgAtbrzKtRRYTPMLKkFTpwBxbKHzB3nWT1G6qNeoDIP\nascmk62bbrw+iU/OwLRrZhHzZ+MG0E7F7agVkx+P7gPXJQopTexkSJVFdFyrhvdv0EhYXkQbQ+JM\nRkeIuijCrExmDyXhwZf2JPHLz4JuXJzFvc/myBSyFM3lkFQ3rLBkCrVYAEUiAafzqb6SxesXyYR6\nhEYb1FqL2pql9YJrz7X4fKLdeS1dFao2SYFCy1+Kiq9btObRSfN1mpHLRMEOgboqjsIctTyLda9B\nk/AUmQduvBb0ZrsOerNhY51047WWGEfJ0PXyNmjZKlGneRv3K0M0DNe0WqEabL2ASzRqjWoVrpC5\nXoPG1BjRgFYT8zTTwPfTzpg6ut6gDt62zTDf49qSwmaHRGvaLplGFogGJQNAoXVrkpSxN7zrvUn8\nvvfD3HR0HOrLwgjm1csvv5LEX/nbr4uISJsYYDuDfneoPplN6jGL4pDmaWUR43CUaqt1g2ZyFAqF\nQqFQ9CX0IUehUCgUCkVfYk266sUXkCbOZJAenJuboxi77DdtQtqyTgqKkHZJO7HZkEupMytVrwip\ntgMHDibxl77035J4cACGfh/7yM8l8dgQ0vABpbdKQ5zSQs5sCU18jU2vAAAgAElEQVSXo/NQ3cye\nQZp/fh7pw3assnj4ga8nx158AdQdm0/lyAjNpfL1VcqUNugZc7yIFP6bESGpjwoFpP3HR/G59hw6\nlMQu0T/8WovrlRBz2WLZBFEoAaniuO6V32YKlNL/ZEI4G4/db/49+vMXf+kzSbxhGqnYcgVp5xee\nfSaJTxw9Su+P9xwqYb70AitEBW2fhlqFzTFrZBi4XAFdMFnGfJwcIOpqMorz8GdL1Q9ziUwcuIxU\nlaxuIUO9MaKluH5SSH1gE9Vy5JWXk/ilJ1HzrDyH+jgumWw2avgcQZyWn9gI2vcMKbcGSkiP77wK\nlF5I9NrICGiD7TtAC1x/A9R3vULKHLNF45jGfUjUQy6Pz+6SqtRuYNy1Y4kLU3UhqbhCUlc1GxhP\nVerDZaKLqgHW3YkhUBNF4tGWSdnDdbQsUtY06PwKUWb2IO7B0kpEe2WJPuH6gg59dWVSYxSwaC60\nAzaWY/PPCw8rwHfMWA5t3roJ46veILrXxb3cuXkqibNEvV61JaKONk6CQhKaO6yiYsFRPo/7t3Mb\nJvbUGO7UeA5rwDApJbdu2ZTEk5tA6Rcc9GtQRr8GDuIzRw8lcasaja2UGSBtRfBJoWwTP5lp43pF\nouCqPsaqE5ybStZMjkKhUCgUir6EPuQoFAqFQqHoS6xJV1VWkFKanESKapFS5d978IEkft/dd9H5\nSI3ZDqdf4/pP7D7Fz1qkfPj+gz9M4m9++8EkniYaYXkBdNJnPnV/EufJ9Kq8AAOxUhFpy5d3Ia34\nyhnQVafo84mgPeX4eIsNpxym2qh8PN1a36LaICNIB+aGkHosDoNy6BXCC+cA+CqwuWOxiLT2lVci\n7f/EM6B5Ajbd62ZSSP9g48aQYoeoK1ZapSgUviineGOV3oFDMPH78t/8TRJ/mKjQ5WWMj2d+ihpV\ntTJSrZMjSOlWmz1WcJBixqX89Le+iZpdFTLBnNwK48ldr8C00qI0fj4bpbbZtHGggL4cyCD1Xchi\nfBdyWBsyVPsmS3RFhiiVUohzakRFPf/8S0k8expUU4aNwEgpVyajwlUJ5cAUGc2RYrLcgOqn/ByN\nQxobbbqnQ89gnv7Mys8m8e3vvVV6AZfY6maFVKJUOy8bYk07MQ+DUQvDTiZzW5O40IzOz5CSp0GK\ns5DGjZOh+TWKNS88SXOwAcp2fhlrZ4UoP5fGiEPvm7dAQ1RpzpTGsMWhNImxVrWi64dkgchGruIT\nzUXjo8VqTqrJlPGJ1vAvVOW+zrBJRjRMCsCrt4KK2noZvsMWZ08nsUvUYp3u9+JcNB+qNdzHK6+E\nEV+R6scJjeMd0zj+2fvw/UzTWoq0daDg4Pw8qQ2XGpiPNR/fuayczpASkMdcO6YZG6TCpN0v4pAB\nYHUZ72NR0br6EuZvfh7moG5hzUcYEdFMjkKhUCgUij6FPuQoFAqFQqHoS6yZ67EE6Soux96mndH/\n62tfTeLdL0ONddddSI3ddNNNSbxx48b4enjrkHbbV0kFsncv6gKVhpDPHRpFqm/PXlANL+2BAdEd\nN78riZfJoKrWRKo0qCFnNzkKVcZcHSnBRgufu1KPPndhAEqNQoFyxRZStbkRtHFoCinkoTHUA+HP\n4XRzx+sRUoqmC/zebaKubrwRypQfPfRwEh84jnpLdmosnJtSa3NtLI45bU6UC5uokbhE2rFypUH8\n4549oExOkZne+BjSuJxuz5EqpkYmais1pHR7gTGqazNcwm+VCVIYDlAa3yKFY4tUSS2ay5VqdJwp\nglkL8zFtcIib6pC6xaHjGVJQukQT3nAVqLOsj5T88TO4r2UyocsR9+gEUKU0SQVUa0TtPEJqt0oT\ntLNPqe9mgM9UKCJv7pLJ6PwiTCO/+nf/I4l/5zf/L+kFQqKoGmW0b2AEFMcKrY1hgHUpIKVOJYd7\nOBSrZnJk4pih+dUUjNdCFn07dRVo9PIsJKh1mlM+1TFzh7GODc/gvjlVGD1OTOD8TaOgAsevgKHd\nvINtBa2V6L3atKZmyODVJnNQYtokcMn4kBV9pMziWoq9gNVCP+VJZSsNrAnzM1RjjBaloTHQrRvH\nr0riuaVoLLMqtVTC9xevmyHTzYM4Z2cBfcC1v6qzoH9aRGHyjpJnd+1KYreI8XTDDTAG5K0DAdem\nitcNXqtLVGhwfBT3qFnBmmvRfTGbMMY278T4HFIzQIVCoVAoFG9V6EOOQqFQKBSKvsSadNX0BpgB\nkYhIbHpZZQWpuV27YIx34ADqOD399A1JfMcdUb2m66+/Ljk2OYlUVKtJJkFtpGEtKlk/exrKgmFK\nmz7zwnNJfNvtUEFs3In6WuVlUFdbryWnqzzSektNfKbFJbRhy41R+rCYQ9u3XI5aR04Wqe+QzIsW\nykjJ12mHuVNBW+otqgtzEXChKSq+WquFVOjGjaDn3n83anXNf+0bSVyjtGSjydWriFKjOEsGYlyX\nyifqpUWUGWenuZ2rahonQF8xxRK2MQ7KCxgrpTxSpPUWjpcXoRSqEuXZC2zaAPr2+quR8jfbEbfp\n3hw5cSqJ9+9HejpL5nqraWWLqCV2FmtSqpypQWICUgrDFteeIWOv8jLS9i7Rx5UVMkgjjpHHk03j\ngw0i27FqiJVmw4NE6ZCR3ugo6OY8qUPYKE/IZCxo9p5KXlzB/SkEUDf5RGOFxB8UyDw071L9J67R\nFFONQYtqupHizaU1qkxrnjNBlONGrIt+g8xWc2TCmcNrM5eRSd9pXL+Yo9plQ2hvLkO0BtXjsmIj\nPK5Zx/1dtLl+Ic6p8Oeg1zIV2Qp6bAZIa/mmaWxVuPLKnTiHai4Oj4B+GSB1cUD08NimaA4QqygW\n5yiY5ieKz6L+ZiGqS6a7K3v3JnGb2j595/txDtVzLBHt5NB7sYq61kBfrq4PjTrmcYHU2iHVdhRa\nJ4ImxnK5ijVjN9XtWyljzf3QP5KO0EyOQqFQKBSKvoQ+5CgUCoVCoehLrElXve1G0DKVCtLKs3Mw\n7ClRHalCASm4QaKRjpLi4ctf/rKIiDz91Pbk2A03gM7avh3HbYeMqMhgqUrprTEy1ztxEjv7T1N9\nrVwJKUN3AJTStquRaqvXcc3bbn5nEi8uM9UUpeAWF3AvRsZRj4QN6+ZmsUt87hTtXm/gfXKk6Go2\n8T5vJnRSQ6WoMIrff88HkvjUaRhgPfHUU0mcp7Ryje4VXzJD5wRMa7BxGBl+cc0bTuvWgzilSteY\nGMb4GCrSrn9S8iyUoRqp0ripU4q20extSnx6A1L+A3lSkRBFFXARm2mkwQ8eQEp/dpbMt2L6wiHV\nTZZ/BhHlY1OamvlAVk06zBNSvSCLaNoB8mgr0Hyv0Hxgo0n+SFzOzI1N10ZJTbLhMihVclSj67LL\nQBsM5nFflk6jXUf2HcI5o1QvqEfIjJCp2gpRK0zV0f1n9aCdJ/UUUQm2Fb22QjXH8qw0pLHbqmLs\nOnm8z+AkUWdEP5UKoMs274DCtDhEda+Og2JwKnjjeap3uHGQaDeqh1UP4/WbDB2dDMZT3SLqQ/D5\nHaLgbFb62UTT9fi3fUCU2dQ0tnxsveKaJF5YIHM7qm0YNPA916TvueJINH4tISoq9Tk6G6FyLA5t\nC1jCd5hPtfjaJ7Aul8dh1HjrLdjy0aaaeKyicolea9DYCuIihPxVkeF+ojHbJhPV7ZdtSWJj8B1e\nreCcTIYVn52hmRyFQqFQKBR9CX3IUSgUCoVC0ZdYk64yBtSRTzVuXnyJy9YjvTYxgXpVV155ZRJz\nLaNjxyJl1D7a0b179+4k3rwZ6pBmEylUm9Lwg1QOfmAAqdKZGaTePQ/GUmNjSDfPEY3FVEuL6IhT\ns9ixfeAg6vzMxqaCNaof0iYFDnlVSXkZ6cCs4ByXTJAWFkBp1aq9NY87G+drBvha616FlIrM5UAF\n/cy9H0zi2grulbcfqjxW/vgBGcKRsiKkVHymgLQvG341KOVfqUA9MBCrpMZHMYZcolsWl0FLsVqg\nRsqpOo3RFqlz2BCxFxgdwr1pUIrboVpHXJtoMIf7cdM1mNcVUjzY8X3lRSHD6qo6xnEqDc6pcvrd\nlKP+C4muoqbLUAl9Nj4MSunMCaL7ws7pcZ+URIO5iL4bGgBFNUCmnVOX4TNPTEARyTX2LhuAAq28\nF2vJQB6UdK9wug6qfczB+w3ZaJ9PFGhAylM/wD1p+qRQyqyq5fD3JaqHVKRaWDmqO9QmU0snT8pD\nwfsPFnBvLRojNZ/WujFS4Q6j05eXSPW0D+abRQN6pOFHr2V6rUDfAWxk6NOYs22sMYGPsZ0jM9uW\n39u6cuUFqH9OHsOYal1DlC3Vl/LJzbAxi9fWSa05MLb6ncdzjcA8Ls9Nq/PcCWtYc1tlfPdYNax5\nTaoXNbFtG86nBSKgPnFIKefTmrsqZvPpM58hk8nCPryu7WMts4iPvu9DUHoNkDqSt7R0g2ZyFAqF\nQqFQ9CX0IUehUCgUCkVfYk26KkPSipESUkTvehdqUc3Pb0viZoPSmaSu4pTwprh21VVEZ+2iuhjP\nP/98EjNF4jpIm46PQ5XEKJPqZZUWE0nTZUyBVatk9kYpu9kzlLYm88BiTIcMD4LeqJZJ6UNGRhVK\nIbuk9GHVzew8qLN0jrGfQOonUkpMb7wsie+///4k/vJX/mcSv/gKKEc26WP6glk0thHkmlKDVGtl\nagQKjlXvqgZRS0tk3MgUVYPiJqVim5RSDdhLjv/RA+RIVNBmZsciE0R+ASn/xoehNNk0iXnt2qv0\nBl5Gvovi7X4hiY8cPpTEfptS4vSxi2xsRo0MyIxtcAhzKUjVvUIb2zRnA1KIuNS2DTFVPjYKutuy\ncI16DTTGIqZ0qpbd5aTsuIVM3A5UkULvFWpVMkEdpDFFYzNLVHeL+tO3cX/olKTO0SIZptXo3lt5\n0P6FQfRVmyjMwML5BTJOdLKk9CIVUJMMC5shjjsu2jg7iNf68/h8UyfRF+3B6J7PBzTvMljHc6TO\nafhkmCiAT/RaQDQa123qBR55AhRcxgX1+IG77kzilMKLqEKbzTnpfger8z0gxSlTV7zlgOn8Nt6H\na0S6E6B1x+77cBIv7ILSaupa1B0MqF0ZptrovaiEnTgZzLeGH/2B65DtO4BtIHv3oUalZePaxeKz\nSfwPP/NLSWyuuTaJ2+1zU4+ayVEoFAqFQtGX0IcchUKhUCgUfYk16So2yGuxAd84DJwyGd41Tzuz\nKcW8sLCQxKul5/N5pJJvvRV1ptgM8KWXkPY7TiZFy6RcYhUNUwT82sOHDyfxyAja3o3GKpXQttER\n0G5Li9Hnm1/CDvi5GewSX6Jd9UyFcU0lNrir0fFMhqRZfQrOqLaprybIMOuTnwB1NfzAd5N4F9GY\nZar/1aRaRnlKoWeLXI8KY6RN97xSjfqiQuO80UAqm1VZrJbiccaqr1T5GOktwjal3Im6CFJOYKRa\naHeuI9UOSSm5mm9mNRPdr90vga7aQ+pFh+rgsAoym8U8CohSmJggcz17Kgld6qcBUspRxl1abCpI\ntbRufufbRUTkfffekxxbbhLNRB2St0HN2NR/48dB6wxncc78DNabXmHExjqTI4VQi5RoVpPUoPTR\nslzTiu5/K65Z5Tq4l1kidSsNrFG2Q4oqkom6Bdz8LBm/ct+GRAvZNCwd/g1NKphqDo0vbcR9HimA\nurTtqC8qpOptkbqPayYViCexSWVUp3lRaYGGZoPFXmCugft0dAbffadOwhS2SGM9R0a3TAWRT6XU\nFqKtDRnBfeepbpMRX2jTHKG6ZSFPggLOz01fjvhqqv9HlJNFdalc2gpgkWknebTKECnG3FbUb1YD\nW0Js+sxNn41T8bqtO0AZz5zB9+yLL0GNbROfftM7sJYwNJOjUCgUCoWiL6EPOQqFQqFQKPoSa9JV\noyPYgb1SWaK/IF2VJ4O3VgFpp5UVpKZS9VdiesmmNLhDqbapKaScslk2d3sxic+cgSqJaSa+DhsM\n/uVf/mUSs0khGw8yXVSnsvIBmWudPBkpto4chnKrVgVFx5RAiq6idJxNKjHLxb0Lw/583gw7syep\nujItUi5Nb0a9ko9/+heT2MniXj340MNJPEj10kYH6X5SLrdcQV/UalxrKhqXTEuxoR+bzYUcpz4U\n+s2llG7W6XF/tjqrldgckZgYaZMBmk8KDU5zrxol1qoY/8tU4+b0SVDGRcqlTxPdWKF5H1AD+F5m\nqVbP8eOoa5ehPtu6BcZw/FkXl3F9vuY1V18hIiLvuPFqtL2OucmUSjGgub6MsfHKU08m8dzzUHy0\n1mGW+XoxKKDRrSraV80grd+gFL9L9YOkTun+AqnSYnWTy6ooUgOWaQvCPJnDjY2COrMzeB+7QGrX\nLK4TFuh++hg7Lilvshmmj9HclTb6cGiaDGTj75vDK1jri1yDzsFnbtJvdZ53bkh11AIcrwnTIxce\nQ1OgfySPe/mjRx5P4lwb43h0iBWfNJdDUhXGtB1/T7HRqkXrUEBGiQ4p7xxSzWXJ5DFP60eGtlMc\n2/dYEjcsHM8LGwBC6RzkcfzAM9hesHwsMv5NPROQIrMttFWD6MnyIvr+v/7xF9BGGs+cp/nWN78n\nndCf36wKhUKhUCje8lgzk7N1y7YkPnzkQBK3Gp1/lQ0OwnODNxa326/O5LALNVcv9fnplB7chwbw\ntLtCG49zVIW0WcOvskX6NfrIjx9K4qd3/SSJ2b9neBi/pHgzM2ehlhaj952dg9FGtUrVXAPOKtEv\nlwxVyaVf+/xU7tqXbuPxay3ZsC5Yna/NR126PwcpS/bw4/hl/eJulAEZyGHYDtNmyEYL93+FMjZc\nhqFBXj3t+FdkO2CfF/qFSq3k3/IO/1qkMhBZ2pDn9jiT06BsI288tii2KQNBzZQR8nkaH8MvsSce\nj35pPvrII8mxeRrrPvlsTE4i4zpGNuuVFWR8OcPUoF+IoeDX7dveDi+O+37mQ0lcp839+3djk3OT\nMm1N2kC9YXqDiIi06JhLiwzPweZc5yryc2T9f6aNvlwq9D6TU1mkviqyvwvW2nIdmZwiZU9qlM12\nqzRm42xLhny6HBofWdrc7ZJXC3stteiXdYY2k7YE6x6vdTUX9zNnUykWmkttyiC1fAzMFYtKMsQD\nttzEeMqSb1uGxmKN/HhqdLzQwvUyVLU9zPZ2bvr0ucvEWOw/cjKJybpLFuu02Rhfm5Ilz5jhuARN\nENAa4+YoJr8a2rwc+rQRnUq7+LQRvLmCEiFtytyWiMkJaLw1+buKvPEadWRqymV8F7fi8RdSNn7D\nDpRWKYxM49w62hI2kclZKmMdalP2r1E/9yZyzeQoFAqFQqHoS+hDjkKhUCgUir7EmnRVsQiKaNvl\nSC+tVJiiQeqI9+eVyUq81eaq3VF6qUCptnyq2jSuV6Uq0KdPoEpvpYtPzgqluFMVk8k/pUkVmxfZ\n350ICZs8GJjK8TtUls6wvbnLG6LIdz9gKoo2HtMzJlM2b3pwdj/sTPkElL7+3kOPJvEjD2NTcXkB\n3gjlFdAzg+RjtLDCm4ppkyaXXqD0pk9xELctzdZRip0GdIYo1QzTUhzTWLTs3lIc+SLltYlis1MU\nG6WkW0gDL5Cf09LSqz1gbOK2ODXski8Nz6+Z0/D/CKiK8CjRWJu3wIr9I/f9XBL/3M9/NIknxpEe\nr1N5jSr5b7EPTyZP7Yyp4uVlpLiXaeNis4X+WC5T1fYBlDawt2Hj63gWZUdKAYsueoNqhTaDkweO\nm0W7c22sEVzRuUkDuMbeQPFaOkw+Oqk6HSTs4E3zTC0yBSxM+eRwPGu5nU6RgDb+zrUwXjJUk8Qm\nUcZyqvxENF4zNKdsKulBrFuqvEGTNmGHRONlMlQ2I9fbkiu1GubazBxt1qayISXafV3Mos/yVHad\nKa2J2N+Nfds2xhStiMjgMI7nczRPm2jL0grNdRo/C4vYIlChPts4DBFIw+LN2uiTQXpGyPPQGkVf\nusPRvHZaRKvnsT0kNwLqezCHda0oWANuvQqfz6WN443KuT2sNJOjUCgUCoWiL6EPOQqFQqFQKPoS\na9JV1Sql+0ibPjyMyqoNon+Yamq1mKJ6dcwlI7JE1XA11RbtTM/l8P5btiCNxrvKh4aQel4qI421\nuIJ0N6cSW5TOtDgtylVcKRW8qhgbGUEafmkJO8qrNboe01WUTvVpd3yDsqZO6vw3D1Y/GTM+fM8c\nupdMUe0/sD+Jv//AA0m8TBTVyDBUQLUa+bnQuGzS2GqSn0rbZ78butFscRO3k2kph6gapqWypOJz\nKCfPdCnTtVaPq8ov05heobHeIIUh+92Ul5E+nluYo+OU7o3vE4//7TuuSOJh6o+JcawBE5NQaE1P\nQ7G4eTMon5ve8e4kvvaGtyexTenpKlFjQv5bhTEqJ0DTxKZ0vh/f7yKVbRkcBv01cwrj6plnMN4m\ntsPTpJ1D6t0aQzxewnzvFdwsPnuGKDleX9nSv1Ym+oVs/ENS9jQWotgmxVOeKoDXSfWapT73Ay4z\nQPb8KaqL1jRS8FSpXdkMlWGgvrKpDEie5k+G1/6YZsmRv002JP8gmvc+s09ULqEVYq3361S1vNlb\nuqpZRx8skT+VTUqkDG2JyOVIwebiHJdKbQydib5nJoZQJmJ2CfHkBFWUJxq3XMEacOo05n1I5Wvq\ni7NJbFHZlDNcPoe3pZAatVDE+/pEde07jvfyYz+4kJSR5SX0TSPA3HSoXMhoCX12ZgHvPzaAwVQa\nwNrTDZrJUSgUCoVC0ZfQhxyFQqFQKBR9iTXpqpB2zc/NQ5ExRSlpobRbgxQX+RxSzIy52RkRSafJ\nWYfCO/uHh5Emvu2225KYKQKmn7jaeY2Ms1zabX6GqpmyzTSbhWUphc7XqcSpP6bUGsQ5BQHTblSp\nlZ4lQ7Lf9l2uc9D7583zN/0Lu8SvPsqKHK7MffQ4VHEvvvhcEr/0Imy/61QyxCXVwTxRgfXGqxV6\nIunq4Py+Pn9WrtZLt3y1OnlXtRSl550ULdVNOdVbiorxox88mMTLrCokBYdF9yBLPE+R1Gkbp0Dp\nrBoDbiCTzA0bEG/cQOeOghYaGsJcd0htODiCVPIVV6Lcgktqyiql8NtU2qTFlALRjUU2cqOq3KtV\nkjPEiwyNoe2Oizbmh0C1LSxijLGxWP0U0u3ORO+NOjMlqkpNChupU/VnrjzfIPq0gb5oDoGe8JvR\n3GjWyBQxh+utVPDZCxb6pEGqFglw/mCJ5loF12yTydxKmaiXLNbmfAHjokV9PhBgjc/Q903BjvrL\nbZKRqsXzkeYpjRuHFFi1HJkElklxtPbX3uvG0BCUQCWi9TYMog1sOir0WaSL0rMV3/oKGQeWSZGX\nK+C7t0olP8pk9Hd6Fuus36Rq46Q2ZAPNSkgKaaarqIXZHK+/6Ie5ZdrG4sTUM992Gm8Bq48DnFRr\n4J0OnsLnO0NjOG+fu0SHZnIUCoVCoVD0JfQhR6FQKBQKRV9izbzd5BSqC5epqvY8pXgnx5FutLrQ\nG80WV1ONjrNaiutDcVXxYhEpZj6faRemqMplKE7GJ5Ba37QJFY2v3LEziTNEjTS5EjXRHg6pt5Zj\niu3kSVAwAwMwFFxZQdtZocJKKzbXalmsHoOa5GKA72Gafkk5+XU8n6kbJzYUOzOH9P5zzz6DeNeu\nJD51CvetSco5vicNqjPVIrVNi2kp/9WGflEb6VMwLcXVwanPV6kppqXsbsqpddyXVCy9xcyJw0k8\nUIISaGojDMI2bEA8tWGUYszZqSmqQRXTVcUi1fwhA8Asx0QtZKhSNZV8kmwR7xlmoMziotntNtG3\nRI20ia5iNRurIENS/gRxVeNAuPYYkCvgHt39kU8k8SuvvJLEe5/DuF06CWpVlnr/W9DmGny0Frku\n6Bq7inueJyHaUAZrXUiVyrNuRGPWyQhymO5Dnij1LHXcSgvxbA3ra72ALQYjFvqzQZQ+VxinslRS\nJ7rDJZqRP3eBDC4HWlE7mV5u08DJlWhrANPRNIaWq/ieWjwBSjfDBaJ6gC2XY9xfNg7q6vrtmGs5\not6ExV6kbmrU0P5Vo1mLJIUlugcDRfq+IcopR9tMlpaxttYqiMMWrVst9GVAxrU+jRWf6v8FVuct\nAj5951mrNeFsdnAkBTOb79IjCRUql0qLKC02pcyce25qJkehUCgUCkVfQh9yFAqFQqFQ9CXWVldR\n2fqpDaB85siwbXkZKbUs0QKsLsqSmmI8rk/jU0l1VlRlqZ7K4CBSfXVKifpU74RT8lu3bk3iQgEp\n9zZRI7yrnekwNhWstdlUDmnWyVh1ct111yXH2DBxfgHpXDbBy7hIj9ZJ/VKpL9E5F7l2FaWBwy71\njpiuCel5eGEJ7d67N0r3P/fsT5NjR48cSuJqhepJERVZI7VUk9KfXCupHbChH9NCVKupg1pKJK2S\n6lZ3apWasruopdIluIgGCTvTsilB13kr2c4PH/nwPUk8TjWfRkj1NDwEWmpgAHOwVKD7kcm8KuZj\nTGVyTTdWtFhEu/KaEdDyUm8RJUg1bOqkaErRujQmCnm0p8Xl41L3O/4/jZOAaWfqzCG6Xxs2UXp+\nhdQkR/egXU1SG/UINaoxxOaoDZonLpWRctiMz65SjHMGM5FR24gDaqktuIE2ma0VSNVSp7ZMZbEG\n57K0BSHE1oAGmw3aRCWTetQVUm8RPTLnY808VtmXxGE7uqZD/FfJBdXWJNPDIMT7+zW6L2W8Z4bO\nt8kIrxdgI1y/hbYFFGdoTOfz6O9iAeZ6oY/vp2JMSefydIxotxLRkFyHbOYMtghYFt5nbhb3fY7m\neA3dKlky5gtY2WfzxCOKmcxYmYJbVcJZ9Dp6mfhciIxqajGN1aDvhVR9vvDcxo6ayVEoFAqFQtGX\n0IcchUKhUCgUfYk16aqnn3k5iTdvgdKq5SPVxoZSY0OgiLIZxC0y3Qtjw6BiCWm54gCZF5FCqkY0\nFqsqHKp94hAV4VKanWkmVkjZlN5qE+3F6bOBAaR3WdXTjI6AKi4AAAr+SURBVNvDNM7YGHbSj4wg\n9v3OKT3+HEEAs7JGj1OoImepqAKmpah2E9FmC9QXe73dSfzCc88m8dGDB0REZIVqpNRJHVIjtRR/\nxhYb+pHygrOPrJxi6ihDaqhUnOls6sc0C3/W1duRpqXWo5zqwJOkwxRV0gvceeetScxUK88HHqdc\ndihDNALTw6s0FV+vO13VuTYbK9WY4qxUSJFBc6pWJUOzPOgFnj8Opd8zbVa/kUIjvt9tNoSkokYO\n5c8XFjFWLQdrxsg45uP4FOj56tKM9BrNKtqXH2TjRhxvhqDWhOZpmCP6j4z8bDe6F9k2qXAEtMai\nT7SKi2uMDFINL2IgchaOt6i+VVOILsrh/mfI8I0NUQvDNGeoPtPztZdwzeVovGRsUCa5Yf5OAd1S\npO0AAdUAy7UxPrJjoChdt7drbUDUX7WO+7pUJr6RxnelhvaUid7nxbBQjY4XC/R9OzKWxN3WR/5D\nJoN/FAtkqEv0tbSJwiS1W8nGvWcFNOdJHJpLdeKV3Uy0vcVu8tylmLYZWCmDXJbLIuT1N1zHOquZ\nHIVCoVAoFH0JfchRKBQKhULRl1iTrnrqhf1JvPvgqY7njFIKcW6QTAJHsStfKMWciWksNoGyWZVV\nQ+qTTaYCopbyVFsqoJR0rYFULae+XUpVs6lbkc5JqXqoJLxDNZkKcf0VPjcI0F6X0nVOipYi0zKf\n5SGkOLEuxvMm0T9UL6VOtOD+3VCVPPr4k0k8c/xQElfJZGuVjqrVqd+Ilmq2OqulAjZyC5iWQuza\nnVVR6ZjTpZ3rS6WM/FJCqui91qOK4uNBSg1wadRVhTxRsDR2XJpXKerK4jnI9BYvAVGb2WwxZb7H\nWXCm5mgOBkRptcnNa3YO9EKDxgrTysNDoLBTtG6qDBnWAVaBrdJbbRpvtRqtH0SPsvlkNg8KZoEo\nhDOLaG+b1qFegQ3cqi2opYrUP7kc9RsxLvU6KZ0G8Qc/pqNGbaYBSTlHxnkhU4Jhno4TFUb93CJV\nHFMZLlGITaJBWG27tAKDQZbLtYjqsptu/H+ie6iWUi6DNrbJyLBGZogDQ1QfiWopVuq9pR+ZTmFj\n2Rp9rxRpCWF1aUDGmg5NslWqqeGjnyq0bnPNv3aKrkJcJIWl4+DaOeIk51yqd1fA+VxbsVLlNa/z\nVociUV2ZuJ6dS9SdQ2aANs1jl76Ts0SvlajeXoHamLf4+7QzNJOjUCgUCoWiL6EPOQqFQqFQKPoS\nVq/T6gqFQqFQKBSXAprJUSgUCoVC0ZfQhxyFQqFQKBR9CX3IUSgUCoVC0Zd4Qz/kGGN+1hgzdu4z\nX/P1P2uM+esOx99ujPlCHP/IGHPPq1+tuFAwxtxtjPnxWcemjTFfWcdr7zHG/KhnjVOsC8aYX7kA\n19C59gaFMeavjTGfvdTtUFw4dJtvxpj/0xjzkUvRpl5gTZ+cNwB+Q0T+NxGZv5hv6nnesyLyLy7m\neyrS8DzvlIjcf6nboTg3jDGOiPxbEXnVDwaFQvHmgud5/++lbsOFxEV9yDHG2CLyxyJytYjkRORJ\nEflDEfmx53mb43P+n7hdx0XkDhH5kjHmV0VkUET+o4i0JHIt+zXP816Of8U/LCK3iMiVIvLrIvKP\nROR6Efkrz/N+3xhTEpE/FZEtIpKJj//XuFnjxpi/FZGtIrJXRP5B/L7/3vO8289q/78QkU/F7dsj\nIp/3PK92Ie/RWxg5Y8xfichOESmLyL8WkW97nrfZGPMXItIQESMivywi7xaR3xeRYxL1meLS4s9F\n5HJjzAMislFEXhCRF0XkhIjc43ner4hEvxwlmlcPGmP+bxH5mIgEIvLfPM/7I76gMeaLInLQ87zf\nu3gfQ7GKeK3+MxG5QUQOi0RFr4wxn5LoB6AlImdE5J96njdnjHmfiPxOfLwlIv/M87yDxphDIvI/\nRWSH53n6o+USwRizSUS+JFH/FETkT+I/fcAY8xsicpWI/K7neX8dr7c/FpEHReT7IvJtEbkxPv8X\nPc87fjHb/npxsemqURF53vO8Oz3Pu0VE7hWRgU4nxg8hp0Tklz3Pe1lE/kpEfsPzvPdJ9GD0X+h0\ny/O8D8Xn/H8i8ksi8iER+T/iv//vIrLoed6dIvJ+EfktY8yO+G83ichnReRmEdksIh/u1B5jzM0i\n8gsicqfnebeKyKKI/NPzvgOKbrhBRH7b87z3isiMiNx11t9LnufdHU+wPxKRT8Z9HojiUuN3JPrC\n+5yIXCPRYvkfup1sjLlDRO4TkfeIyO0icq8xZoT+/rsisqIPOJcU90j0Y/TdEv3wu1GiH4n/RqIH\n19tF5Eci8tvGmKJEP14/7nneXSLyBRH5A7rWXn3AueT4tIjs8TzvbonW1lULaMvzvI+IyK+KyG91\neN0OEfmi53l3SNTfv9n7pl5YXGy6alFEthhjHpfol/lGEXnXuV4UL4BTnuc9FR/6kYj8Dzrl0fj/\nx0Rkl+d5TWPMMREZjo/fIiJ/ISLieV7NGPO0iLwj/tsTnueV4/d5XESukyjDdDbulijL8ENjjEj0\ny6b3pcPfOtjjed6xOH5MRD561t8fExExxoyLSMHzkrLoPxCRt12cJirWgXnP87xznHOLiDzieZ4v\nIr7EfR3Pq89K9OV6cw/bqDg3bhCRxzzPC0Wkaox5UrBmfzfuq5yIHJQoa75RRP4uPu4I15CJ567i\nkuLbIvL5OEvzTYkyOZ+U6LtUJPruHOnwujnP83bF8aMSMSVvKlzsh5xflOiXwR2e57Xjh42z3Qiz\n8upf52efY511rN0lXs/rgy7Hz0ZDRL7ued6vdfm74vXhXP3QpL/xuY4o3khoUtxpbq8e75ZFzsXn\nvV+idLni0qDTPGuIyE88z7uPTzTG3CgiR+IsQSc0uxxXXCR4nrfHGHOtRFmc+yV6WGlJ+vvS6vBS\n+6y/v+ncgy82XTUlIl78gPNOiTIjdREZM8YU4w2Md9L5gYhkPM9bEpGTxphb4uP3iMgT5/G+T0hE\nX0m8P+edIrL6dHqLMaZkjLFE5FaJ9hN0wqMi8mFjzEB8nc8bY249jzYo1sbVMW8sInKbiHyjy3lz\nIuIbY66M/61qnEuPQKK9bmdjWSKKQ4wxGyTKkopEv+w/YIzJGGNcY8wPjTEb47/9iUT7rv7UGDPZ\n43YruuNlEXmPMcYyxgxKlH0ricjNxphpERFjzP3GmI+JyCsiMmGMuT4+fqcx5nOXquGKV8MY8xkR\nebfneQ+KyOcl2oO6niTHqDHmpji+XUSe71ETe4aL/ZDzFRG51RjzkIh8QiLe9vdE5C9F5GkR+aqI\nPEPnf1dEvmGMea+I/EMR+YN48+Kvicg/P4/3/YKIDBpjHpaI3vg9z/MOxX97WqINdk9KlHr9bqcL\neJ73tET7gH4Uy53vFpHnzqMNirXxUxH5fWPMIxKlTR/pdFKcPv91EfmaMeYbIqIbvy89Tki0f26X\nxBtUYzwgIq4x5gmJ9so9JiLied7jIvK3EvXxj0Xka57nnVx9ked5L0i07+4v4h8fiouP74rIEYnW\nxT8Xkccl6ud/KSJ/H6+l/0Qiur8mIr8iIn8Wr+3/TkQeuiStVnTDyyLyh3H//FCi+diJ9Tgbx0Xk\ns8aYH0j04/M/9a6JvYHWrlIoFAqFQpGCMWabkPL5zYo3tBmgQqFQKBQKxWuFZnIUCoVCoVD0JTST\no1AoFAqFoi+hDzkKhUKhUCj6EvqQo1AoFAqFoi+hDzkKhUKhUCj6EvqQo1AoFAqFoi+hDzkKhUKh\nUCj6Ev8/Spj+KevKDIUAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "metadata": { "id": "wN-XUzp-fpyp", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## A ConvNet Classifier\n", "Finally, we build a simple convolutional architecture to classify the CIFAR images. We will build a mini version of the AlexNet architecture, which consists of 5 convolutional layers with max-pooling, followed by 3 fully-connected layers at the end. In order to investigate the effect each of these two layers have on the number of parameters, we'll build the model in two stages. \n", "\n", "First, the convolutional layers + max-pooling:" ] }, { "metadata": { "id": "q9zloewLws0b", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "# Define the convolutinal part of the model architecture using Keras Layers.\n", "model = tf.keras.models.Sequential([\n", " tf.keras.layers.Conv2D(filters=48, kernel_size=(3, 3), activation=tf.nn.relu, input_shape=(32, 32, 3), padding='same'),\n", " tf.keras.layers.MaxPooling2D(pool_size=(3, 3)),\n", " tf.keras.layers.Conv2D(filters=128, kernel_size=(3, 3), activation=tf.nn.relu, padding='same'),\n", " tf.keras.layers.MaxPooling2D(pool_size=(3, 3)),\n", " tf.keras.layers.Conv2D(filters=192, kernel_size=(3, 3), activation=tf.nn.relu, padding='same'),\n", " tf.keras.layers.Conv2D(filters=192, kernel_size=(3, 3), activation=tf.nn.relu, padding='same'),\n", " tf.keras.layers.Conv2D(filters=128, kernel_size=(3, 3), activation=tf.nn.relu, padding='same'),\n", " tf.keras.layers.MaxPooling2D(pool_size=(3, 3)),\n", "])\n" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "VHoTJ0XTgWKN", "colab_type": "text" }, "cell_type": "markdown", "source": [ "How many parameters are there in the convolutional part of the architecture? We can easily inspect this using the model summary function in Keras:" ] }, { "metadata": { "id": "R4Hr3Wgtw72b", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 408 }, "outputId": "e64c1237-1217-4192-f4c9-7907bcbc72a0" }, "cell_type": "code", "source": [ "model.summary()" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "conv2d_8 (Conv2D) (None, 32, 32, 48) 1344 \n", "_________________________________________________________________\n", "max_pooling2d_3 (MaxPooling2 (None, 10, 10, 48) 0 \n", "_________________________________________________________________\n", "conv2d_9 (Conv2D) (None, 10, 10, 128) 55424 \n", "_________________________________________________________________\n", "max_pooling2d_4 (MaxPooling2 (None, 3, 3, 128) 0 \n", "_________________________________________________________________\n", "conv2d_10 (Conv2D) (None, 3, 3, 192) 221376 \n", "_________________________________________________________________\n", "conv2d_11 (Conv2D) (None, 3, 3, 192) 331968 \n", "_________________________________________________________________\n", "conv2d_12 (Conv2D) (None, 3, 3, 128) 221312 \n", "_________________________________________________________________\n", "max_pooling2d_5 (MaxPooling2 (None, 1, 1, 128) 0 \n", "=================================================================\n", "Total params: 831,424\n", "Trainable params: 831,424\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ], "name": "stdout" } ] }, { "metadata": { "id": "sbJAaisIgZyX", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Now we add a fully-connected part. Note that we also add \"Dropout\" after the first fully-connected layer. Dropout is a regularization technique which randomly zeros out (\"drops\") connections between neurons, and it was one of the key innovations of the AlexNet paper in 2012." ] }, { "metadata": { "id": "gaHgWaNb1C0W", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "model.add(tf.keras.layers.Flatten()) # Flatten \"squeezes\" a 3-D volume down into a single vector.\n", "model.add(tf.keras.layers.Dense(1024, activation=tf.nn.relu))\n", "model.add(tf.keras.layers.Dropout(rate=0.5))\n", "model.add(tf.keras.layers.Dense(1024, activation=tf.nn.relu))\n", "model.add(tf.keras.layers.Dense(10, activation=tf.nn.softmax))" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "WOK9_UWx1JkL", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 578 }, "outputId": "32683707-9150-41e8-8203-90f7f03300c3" }, "cell_type": "code", "source": [ "model.summary()" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "conv2d_8 (Conv2D) (None, 32, 32, 48) 1344 \n", "_________________________________________________________________\n", "max_pooling2d_3 (MaxPooling2 (None, 10, 10, 48) 0 \n", "_________________________________________________________________\n", "conv2d_9 (Conv2D) (None, 10, 10, 128) 55424 \n", "_________________________________________________________________\n", "max_pooling2d_4 (MaxPooling2 (None, 3, 3, 128) 0 \n", "_________________________________________________________________\n", "conv2d_10 (Conv2D) (None, 3, 3, 192) 221376 \n", "_________________________________________________________________\n", "conv2d_11 (Conv2D) (None, 3, 3, 192) 331968 \n", "_________________________________________________________________\n", "conv2d_12 (Conv2D) (None, 3, 3, 128) 221312 \n", "_________________________________________________________________\n", "max_pooling2d_5 (MaxPooling2 (None, 1, 1, 128) 0 \n", "_________________________________________________________________\n", "flatten (Flatten) (None, 128) 0 \n", "_________________________________________________________________\n", "dense (Dense) (None, 1024) 132096 \n", "_________________________________________________________________\n", "dropout (Dropout) (None, 1024) 0 \n", "_________________________________________________________________\n", "dense_1 (Dense) (None, 1024) 1049600 \n", "_________________________________________________________________\n", "dense_2 (Dense) (None, 10) 10250 \n", "=================================================================\n", "Total params: 2,023,370\n", "Trainable params: 2,023,370\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ], "name": "stdout" } ] }, { "metadata": { "id": "5uzeJaMB7DPa", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Aside: Random initialization schemes" ] }, { "metadata": { "id": "AUBKcjfJ6gRs", "colab_type": "text" }, "cell_type": "markdown", "source": [ "You might have wondered what values we are using for the initial values of the weights and biases in our model. The short answer is that we typically use random initialization. In this case, we have just been using the default keras initializers for each layer, which are usually sufficient.\n", "\n", "The longer answer is that just using completely random numbers does not always work best in practice and that there are a number of common initialization schemes (which are available in most deep learning frameworks such as TensorFlow and Keras).\n", "\n", "Lets consider a few examples:\n", "\n", " * When using the ReLU activation it is common to initialize the biases with small positive numbers because this encourages the ReLU activations to start off in the _on_ state, which helps to counteract the _dying ReLU problem_.\n", "\n", " * The deeper neural networks become the more likely it is that gradients will either shrink to the point that they vanish, or grow to the point that they overflow (the _vanishing_ and _exploding_ gradients problems). To help combat this we can initialize our weights to have a (model-specific) appropriate scale. One method for doing this is called [_Xavier_ or _Glorot_](http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf) initialization.\n", "\n", " * The _Xavier_ initialization scheme was designed with the _traditional_ activations Sigmoid and TanH in mind, and does not work as well for ReLU activations. An alternative is [_He_](https://arxiv.org/pdf/1502.01852.pdf) initialization which is a modification of _Xavier_ initialization for ReLU activations.\n", "\n", " [This blog](http://andyljones.tumblr.com/post/110998971763/an-explanation-of-xavier-initialization) goes into more detail on _He_ and _Xavier_ initialization. [The Keras documentation](https://keras.io/initializers/) lists a number of common schemes. " ] }, { "metadata": { "id": "nNMAg7s3W0gg", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Visualizing the model" ] }, { "metadata": { "id": "wCL9cH8a3F1W", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Let's build a flow-diagram of the model we've constructed to see how information flows between the different layers." ] }, { "metadata": { "id": "dFXnOsd0W5pq", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 1516 }, "outputId": "3116af8d-3272-4567-9b57-07f97dda9245" }, "cell_type": "code", "source": [ "tf.keras.utils.plot_model(model, to_file='small_lenet.png', show_shapes=True, show_layer_names=True)\n", "display.display(display.Image('small_lenet.png'))\n" ], "execution_count": 0, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\niEhBQYHExsaKt7e3aLVa0Wg00qNHD5k2bZrRK/jq8/mY0//tmuL6qSsmh0QWkagSue2dT0TU5PRr\n4ukf/xGRaSqVClu3bjVaR5KImtQ2jjkkIiIiIgWTQyIiIiJSMDkkIiIiIgWTQyIiIiJSMDkkIiIi\nIgWTQyIiIiJSMDkkIiIiIgWTQyIiIiJSMDkkIiIiIgWTQyIiIiJSMDkkIiIiIgWTQyIiIiJSMDkk\nIiIiIgWTQyIiIiJSMDkkIiIiIgWTQyIiIiJSMDkkIiIiIoWNpQMgao2Sk5MxduxYS4dBRERkhMkh\nUTMLDw+3dAhUTX5+PjIyMjBo0CBLh0K3GTduHB5++GFLh0HU6qhERCwdBBGRJSUmJiIiIgL8OiQi\nwjaOOSQiIiIiBZNDIiIiIlIwOSQiIiIiBZNDIiIiIlIwOSQiIiIiBZNDIiIiIlIwOSQiIiIiBZND\nIiIiIlIwOSQiIiIiBZNDIiIiIlIwOSQiIiIiBZNDIiIiIlIwOSQiIiIiBZNDIiIiIlIwOSQiIiIi\nBZNDIiIiIlIwOSQiIiIiBZNDIiIiIlIwOSQiIiIiBZNDIiIiIlIwOSQiIiIiBZNDIiIiIlIwOSQi\nIiIiBZNDIiIiIlIwOSQiIiIiBZNDIiIiIlIwOSQiIiIiBZNDIiIiIlIwOSQiIiIiBZNDIiIiIlIw\nOSQiIiIiBZNDIiIiIlIwOSQiIiIihY2lAyAiam5hYWE4ffq08ntxcTE0Gg369etn0O6VV17BlClT\nmjs8IiKLYnJIRK3OyZMncfz4caPyP//80+D3goKC5gqJiKjF4GNlImp1nnvuOdjY1P5/44iIiGaI\nhoioZWFySEStzrPPPosbN27UWK9SqfC3v/0NXl5ezRgVEVHLwOSQiFqdLl26YMCAAbCyMv0VaG1t\njeeee66ZoyIiahmYHBJRq/Tcc89BpVKZrLtx4wbCw8ObOSIiopaBySERtUo1jSe0trbG4MGD0alT\np2aOiIioZWBySEStUocOHTBkyBBYW1sb1U2cONECERERtQxMDomo1Zo4cSJExKBMpVLhqaeeslBE\nRESWx+SQiFqtMWPGGCxpY2Njg5EjR6Jdu3YWjIqIyLKYHBJRq+Xg4IBRo0ZBrVYDuDURZcKECRaO\niojIspgcElGrFhkZiaqqKgCAra0tRo0aZeGIiIgsi8khEbVqI0eORJs2bQAATz/9NHQ6nYUjIiKy\n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\nERERkYLJIREREREpmBwSERERkYLJIREREREpmBwSERERkYLJIREREREpmBwSERERkYLJIREREREp\nmBwSERERkYLJIREREREpmBwSERERkYLJIREREREpmBwSERERkYLJIREREREpmBwSERERkYLJIRER\nEREpmBwSERERkYLJIREREREpmBwSERERkYLJIREREREpmBwSERERkYLJIREREREpmBwSERERkYLJ\nIREREREpmBwSERERkcLG0gEQETW3vLw8FBUVKb/n5OQAAE6fPm3Qzt3dHTqdrlljIyKyNJWIiKWD\nICJqTu3atcOVK1dqbffyyy9j1apVzRAREVGLsY2PlYmo1Xn00UdhZVX719+jjz7aDNEQEbUsTA6J\nqNWZMGECantootVqMXr06GaKiIio5WBySEStTmhoKGxtbWust7GxQWhoKOzt7ZsxKiKiloHJIRG1\nOm3atMFTTz0FtVptsv7GjRuIjIxs5qiIiFoGJodE1Co9++yzqKysNFlnZ2eHJ554opkjIiJqGZgc\nElGrFBwcDEdHR6NytVqNiIgIaLVaC0RFRGR5TA6JqFVSq9UYP348NBqNQXllZSWeffZZC0VFRGR5\nTA6JqNUaP348rl+/blDWvn17DB482EIRERFZHpNDImq1AgIC4ObmpvyuVqsxceJEWFtbWzAqIiLL\nYnJIRK2WlZUVJkyYoDxarqysxPjx4y0cFRGRZTE5JKJW7fZHy56enhgwYICFIyIisiwmh0TUqvn5\n+aFHjx4AgOeffx4qlcrCERERWZZNXRuePXsWc+fOxY0bN5oyHiKiZqdftubQoUMYO3ashaMhImpc\nnTt3xgcffFDn9nW+c3jo0CFs2bKlXkEREbVkPXv2hJ+fn8l1DxtbcnIykpOTm3w/BGzbtg3nz5+3\ndBhEFnX+/HksX77crG3qfOdQLzEx0dxNiIjo/6e/M8nv0qanUqnw2muv8W4wtWqJiYmIiIgwaxuO\nOSQiIiIiBZNDIiIiIlIwOSQiIiIiBZNDIiIiIlIwOSQiIqrmr7/+QmhoKIqKipCXlweVSqX8+Pr6\nory83Gib6u1UKtU9sai6iGD//v2YOnUqevXqBa1WC1dXV/j7+2PTpk0QEYP2V65cwerVqzFs2DC0\na9cOOp0OXl5eiIyMRFpa2j0XjymhoaFQqVRYvHixyfqqqiqsX78eDz/8MFxcXODs7Aw/Pz+sXLnS\n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\nIiJSMDkkIiIiIgWTQyIiIiJSMDkkIiIiIgWTQyIiIiJSMDkkIiIiIgWTQyIiIiJSMDkkIiIiIgWT\nQyIiIiJSMDkkIiIiIgWTQyIiIiJSMDkkIiIiIgWTQyIiIiJSMDkkIiIiIgWTQyIiIiJSMDkkIiIi\nIgWTQyIiIiJSMDkkIiIiIgWTQyIiIiJSMDkkIiIiIgWTQyIiIiJSMDkkIiIiIgWTQyIiIiJSMDkk\nIiIiIgWTQyIiIiJSMDkkIiIiIgWTQyIiIiJSMDkkIiIiIgWTQyIiIiJSMDkkIiIiIoWVuQMgImps\nq1evRlZWlvL3gQMHAADvvPOOTr0BAwbgkUceadTYiIjMTSUiYu4giIgaU8uWLVFQUABra+sa61RU\nVGDixIn46KOPGjEyIiKz28DHykTU7MTGxsLS0hIVFRU1vgAgJibGzJESETU+JodE1OyMGDEC169f\nv22dli1bom/fvo0UERFR08HkkIianT59+sDHx6fG7TY2Nnj22WdhYcGvSCJqfvjNR0TNjkqlwqhR\no2rsc3jt2jWMGDGikaMiImoamBwSUbN0u0fL7dq1g7+/fyNHRETUNDA5JKJm6aGHHkKnTp30ym1s\nbPD3v//dDBERETUNTA6JqNkaPXq03qPla9euYfjw4WaKiIjI/JgcElGzNWLECFRWVip/q1Qq+Pn5\noWPHjmaMiojIvJgcElGz1a5dOzz88MNQqVQAAEtLSz5SJqJmj8khETVrzzzzDCwtLQEAN27cwLBh\nw8wcERGReTE5JKJmbdiwYaiqqoJKpcKjjz4Kb29vc4dERGRWTA6JqFnz9PREv379ICJ8pExEBEAl\nImLuIJq6adOm4f333zd3GERERFRHVlZW+OmnnxAUFGTuUJq6DVbmjuBucP78efTu3RvTpk0zdyhE\nTVJqairef/99JCUlmTuUOhERXL58GS1atDB3KLXS/kd16tSpZo6E6O4ybNgwXLx40dxh3BWYHBrJ\n19cXMTEx5g6DqEnSPoDgv5GGt2HDBgD8rImo4bDPIREREREpmBwSERERkYLJIREREREpmBwSERER\nkYLJIRER4cyZMxg0aBCKioqQl5cHlUqlvPz9/VFeXq63T/V6KpUKPXr0MEP0DWfr1q3o2LEjrKxq\nH7+Znp6OiIgIuLi4wMnJCaGhodizZ889HY/WoEGDoFKpsGDBAoPbKysrsXLlSjzyyCNwc3ODq6sr\n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\nSHh4uKSkpOjVvXLliowdO1a8vLxErVZL3759JS0tTanzOBsAACAASURBVAICApQfnldffVWpf+TI\nEQkKChIHBwfx9fWVjz/+WKc9Pz8/8fb2lkOHDkl4eLg4OTmJWq2Wfv36ye7duxv8+EFBQeLq6mry\nVCx1/T6aPXu2WFlZyYULF5Sy3NxcvR/vgICAGtt48cUXa1w+z5hzmZqaqne8OXPmiIjolUdERCj7\n5efny7Rp06Rdu3ZibW0tLVu2lLCwMNm+fbteHMHBweLo6CiVlZVGfS7Jyck1JjLVp+DR+v3332Xg\nwIHi7Owsjo6OEhwcbPCaaW7xREREmJQciogUFBTIzJkzpXPnzmJrays2NjbSvn17mThxomRnZxuM\nKSYmRry9veXatWtGvQctJodGS1KJNMI8Cne5YcOGAQCSkpLMHAlR05SUlITY2NhGmZalvnTv3h15\neXmNNtK1vtT1+6iwsBBdunRBZGSkwWlF7gVXrlxB69atMXLkSKxYscLc4TCeBpCRkQF/f3+sXbsW\nw4cPN2lflUqF9evXK/+GqEYb2OeQiKgZ0Gg0SE5OxsaNG/Hxxx+bO5x6JyKYPHkynJ2dMX/+fHOH\nw3gawMmTJxEdHY34+HiTE0MyDZNDIqJmwt/fH/v27cO2bdtQVFRk7nDqVU5ODk6ePImUlJQ6jYxm\nPE3f8uXLsXDhQixcuNDcodzzzLfYJxGRGSQkJGDmzJnK3yqVCnPmzMGCBQvMGFXjadOmDbZs2WLu\nMOqdp6cndu/ebe4wFIyn/r3zzjvmDqHZYHJIRM3KjBkzMGPGDHOHQUTUZPGxMhEREREpmBwSERER\nkYLJIREREREpmBwSERERkYIDUoyUmprKiTOJanDu3DkA4L+RRpCamgqAnzURNRwmh0aIiYkxdwhE\nTZqvry98fX3NHUad5eTk4M8//0RoaKi5Q6lVYGCguUMguisNHz4cjzzyiLnDuCtw+TwiavbuxuX/\niIgaCJfPIyIiIqL/YnJIRERERAomh0RERESkYHJIRERERAomh0RERESkYHJIRERERAomh0RERESk\nYHJIRERERAomh0RERESkYHJIRERERAomh0RERESkYHJIRERERAomh0RERESkYHJIRERERAomh0RE\nRESkYHJIRERERAomh0RERESkYHJIRERERAomh0RERESkYHJIRERERAomh0RERESkYHJIRERERAom\nh0RERESkYHJIRERERAomh0RERESkYHJIRERERAomh0RERESkYHJIRERERAomh0RERESkYHJIRERE\nRAomh0RERESkYHJIRERERAomh0RERESksDJ3AEREje3JJ5/E6dOnlb+vXr0KjUaDbt266dQbP348\nJk2a1MjRERGZF5NDImp2Tp06hYMHD+qVFxYW6vxdXFzcWCERETUZfKxMRM3OM888Ayur2v9vPGzY\nsEaIhoioaWFySETNzogRI3Djxo0at6tUKvTo0QP3339/I0ZFRNQ0MDkkombH19cXvXr1goWF4a9A\nS0tLPPPMM40cFRFR08DkkIiapdGjR0OlUhncVlVVxUfKRNRsMTkkomappuTP0tIS/fv3h4eHRyNH\nRETUNDA5JKJmyd3dHSEhIbC0tNTbNnr0aDNERETUNDA5JKJma9SoURARnTILCwsMHjzYTBEREZkf\nk0MiarYGDx4Ma2tr5W8rKytERETAxcXFjFEREZkXk0MiaracnJzw5JNPKgnijRs3MGrUKDNHRURk\nXkwOiahZGzlyJCorKwEAarUaTzzxhJkjIiIyLyaHRNSsDRw4EA4ODgCAoUOHQq1WmzkiIiLz0ls/\nqry8HFu3br3t6gFERPeSnj17YufOnfD19cWGDRvMHQ4RUaPw9PREUFCQXrlKqg3V+7//+z889dRT\njRYYERERETU+KysrXL9+vXrxBr07h9q+N9WndyAiIuNpJ9lOSkoycyT3PpVKhfXr13NVGyITJCUl\nITY21uA29jkkIiIiIgWTQyIiIiJSMDkkIiIiIgWTQyIiIiJSMDkkIiIiIgWTQyIiarbOnDmDQYMG\noaioCHl5eVCpVMrL398f5eXlevtUr6dSqdCjRw8zRN9wtm7dio4dO8LKSm9SEz3p6enKmuROTk4I\nDQ3Fnj17mn08ly9fxqefforg4GC0aNECarUaHTp0wMiRI5GRkWFwn8rKSqxcuRKPPPII3Nzc4Orq\nioCAACxduhTXrl3TqTtr1iysX7++Xt+XFpNDIqImrqSkBB06dEBkZKS5Q7mnpKeno0ePHggLC4Oz\nszPc3d0hIkhLS1O2T5kyRW8/bb3U1FS4ublBRLBv377GDr9BZGZmYtCgQYiPj0dOTk6t9X/99Vf0\n6dMHTk5OOHz4ME6dOoV27dqhf//++PHHH5t1PDNnzsSkSZMQFRWFQ4cOIT8/H6tWrUJ6ejoCAgKw\n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\nGjIzM5GYmGiTZVnayogRI1BWVtZmM11tpaXfXzqdDsOGDcPEiRObXIakM6uoqICvry9mzpyJjz/+\nmO3bwdGjRxEcHIxNmzZh+vTpVp2rUqmwZcsW5TNOVtvKbmUiIrKYVqtFdnY2tm3bZtJ92BWICObP\nn48ePXq0y/qBnb19Wzh79iymTJmC1NRUqxNDahtMDomIyCrBwcE4fPgwdu3ahcrKSnuH06YuX76M\ns2fPYs+ePS2aGd3V27eF9evXY9WqVVi1apW9Q7lrcSkbIqIWWL16NVJSUpS/VSoVli9fjtdff92O\nUdnOgAEDbL62ni14e3sry7Gwfft444037B3CXY/JIRFRCyxevBiLFy+2dxhERG2O3cpEREREpGBy\nSEREREQKJodEREREpGBySEREREQKTkhppZycHC60SdRGLly4AAD8b8oGcnJyAPC9JiJTTA5bISEh\nwd4hEHUp/v7+8Pf3t/l1L1++jJ9//hnjxo2z+bXtJSwszN4hELWL6dOn449//KO9w+jUuH0eEd31\nOuO2fURE7YTb5xERERHR/2FySEREREQKJodEREREpGBySEREREQKJodEREREpGBySEREREQKJodE\nREREpGBySEREREQKJodEREREpGBySEREREQKJodEREREpGBySEREREQKJodEREREpGBySEREREQK\nJodEREREpGBySEREREQKJodEREREpGBySEREREQKJodEREREpGBySEREREQKJodEREREpGBySERE\nREQKJodEREREpGBySEREREQKJodEREREpGBySEREREQKJodEREREpGBySEREREQKJodEREREpGBy\nSEREREQKJodEREREpGBySEREREQKJodEREREpHC0dwBERLb26KOPoqioSPn7+vXr0Gq1uO+++4zq\nPf3005g3b56NoyMisi8mh0R01zl37hyOHz9uUq7T6Yz+rqqqslVIREQdBruVieiu89hjj8HRsfn/\nN542bZoNoiEi6liYHBLRXWfGjBm4detWo8dVKhVCQ0MxZMgQG0ZFRNQxMDkkoruOv78/Ro0aBQcH\n81+B3bp1w2OPPWbjqIiIOgYmh0R0V5o9ezZUKpXZYw0NDexSJqK7FpNDIrorNZb8devWDQ8//DC8\nvLxsHBERUcfA5JCI7kq9e/dGVFQUunXrZnJs9uzZdoiIiKhjYHJIRHetWbNmQUSMyhwcHDBp0iQ7\n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\nwKxZs5S/VSoV5s4wyIvIAAAgAElEQVSdiwULFtgwqubTpUsXm9TWa2o+Pj7Ys2cPx7ehJUuW2DqE\nNo/JIRFRPcycORMzZ860dRhERI2Ot5WJiIiISMHkkIiIiIgUTA6JiIiISMHkkIiIiIgUTA6JiIiI\nSMHZyg1gb2+PjRs3QqVS2ToUolaF/001Hx5rao3atWN60xB8fV4DnD59GhkZGbYOg4gaKD09He+9\n9x5fhUnUCtjb22PUqFFwcHCwdSh3qs1MrRugS5cu6NKli63DIKIGMv0/clRUlI0jISKyPT5zSERE\nREQKJodEREREpGBySEREREQKJodEREREpGBySEREREQKJodEREREpGBySEREREQKJodEREREpGBy\nSEREREQKJodEREREpGBySEREREQKJodEREREpGBySEREREQKJodEREREpGBySEREREQKJodERERE\npGBySEREREQKJodEREREpGBySEREREQKJodEREREpGBySEREREQKJodEREREpGBySEREREQKJodE\nREREpGBySEREREQKJodEREREpGBySEREREQKJodEREREpGBySEREREQKJodEREREpGBySEREREQK\nJodEREREpGhn6wCIiJpbQUEBSkpKlL/z8vIAACdPnjTr5+vrC51O16yxERHZmkpExNZBEBE1p/bt\n2+PSpUs19nvxxRfx0UcfNUNEREQtxmbeViaiNuehhx6CnV3N//w99NBDzRANEVHLwuSQiNqciRMn\noqabJlqtFmPGjGmmiIiIWg4mh0TU5owePRoODg7VLm/Xrh1Gjx4NZ2fnZoyKiKhlYHJIRG2Oo6Mj\nHn/8cajVaqvLr1+/jgkTJjRzVERELQOTQyJqk5566ilcu3bN6jInJyc8+uijzRwREVHLwOSQiNqk\n0NBQuLq6WrSr1WpER0dDq9XaICoiIttjckhEbZJarcb48eOh0WjM2q9du4annnrKRlEREdkek0Mi\narPGjx+Pq1evmrV5enpiyJAhNoqIiMj2mBwSUZsVFBQEb29v5W+1Wo2nn34a9vb2NoyKiMi2mBwS\nUZtlZ2eHiRMnKreWr127hvHjx9s4KiIi22JySERt2s23ljt37oz+/fvbOCIiIttickhEbVpAQAD8\n/f0BAM888wxUKpWNIyIisq12DR3g9OnTiI+Px/Xr1xsjHiKiZmcqW/PTTz9h7NixNo6GiKh+OnXq\nhGXLljV4nAZfOfzpp5+wcePGBgdCRGQr99xzDwICAqzWPWwu6enpSE9Pt9n225LNmzfj7Nmztg6D\nqFGdPXsW7733XqOM1eArhybJycmNNRQRUZtjumLJf0ubnkqlwvTp03mVmFqV5ORkREdHN8pYfOaQ\niIiIiBRMDomIiIhIweSQiIiIiBRMDomIiIhIweSQiIiols6cOYPRo0ejpKQEBQUFUKlUyqdfv364\ncuWKxTq39lOpVK2i2LqIYO/evXjllVfQo0cPaLVaeHl5YfDgwUhKSoKItOjxb/b111+jR48eaNeu\n+nm6ly5dwurVqzF8+HC0b98eOp0O3bt3x4QJE5CVlWV1naqqKqxbtw4PPvggPDw84O7ujoCAAKxY\nscLive6vvfYaNm3a1Gj71BBMDomIWpmysjJ0794d4eHhtg6lVcnMzET//v0REhICV1dXeHp6QkSQ\nkZGhLJ82bZrFeqZ+6enp8PDwgIhg//79zR1+o/vtt98wePBgHD9+HF9++SWMRiN+/PFH3HXXXXj6\n6acxa9asFj0+AGRnZ2P06NGIj49HXl7ebfvOmjULU6ZMQUREBI4ePYrCwkJ88sknyMzMREBAAFJT\nUy3WefbZZxETE4MRI0bg119/xe+//47o6GhMmTIFTzzxhFnfF154AfHx8XjjjTcavF8NJg20adMm\naYRhiIjatKioKImKimqUsUpKSqRbt24ycuTIRhmvKTk5OcnDDz/crNsEIJs2barTOkajUTp16iSx\nsbEWyzIyMkSr1YqHh4cAkA0bNlgdIz09XTw8POoVc0v066+/Srt27aSoqMisvbKyUjw8PESr1cqV\nK1da7PgiIuPHj5fFixfLtWvXxM/PT+zt7avt+/zzz8ukSZMs2jMzMwWAdO/e3aw9OztbAEi/fv0s\n1nnkkUcEgPz0008WY6lUqjqfnyKNmo8l88ohEVEr4+LiguzsbHz99de2DqXVWLp0KXJzczFv3jyr\nyx0cHPD555/Dzs4OsbGxOH78eDNH2Px69uyJa9euwd3d3axdo9Ggc+fOqKystHqbvaWMDwDr1q3D\na6+9dtvbySaJiYlYs2aNRbvBYIBOp0N2drbZrW5TofW//OUvFuv07NkTAPDHH39YjPXkk0/ib3/7\nG6qqquq0L42JySEREdFtiAgSExMxcOBAdOzYsdp+oaGheP3111FaWoqoqKgGJy53quLiYpw4cQL9\n+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\n5vfd/vbbb/L444+Lq6urODo6ykMPPST/+te/ZOjQoeLo6GgWd1hYWJ1/eG8e31SqZNu2bRIcHKys\n8/zzz9fpu7ly5Yps3rxZxowZI/7+/qLVakWv18vQoUNlw4YNVtcJCgqq9WxlJycns30KDQ29bX9r\nx+HDDz8UkaY7l2+NEYDFrP9b8Ry1PEetHUeVSiV6vV769OkjL730khw4cOC2x7UmTA6bD5NDao0a\nMzlUiTTsJnVycjKio6Nb1evQ6qJv374oKCjAuXPnbB2KTfTs2RMVFRU4c+aMrUMhsupOOUfHjh0L\nAMojD9R0VCoVNm3apBxzotagEfOxzXfsM4fUfHJzc9G+fXuLNz6cPn0a2dnZGD58uI0iI/oTz1Fq\nLmfOnMHo0aNRUlKCgoICs7f59OvXT3nTz81u7adSqWo1Ue1O8vXXX6NHjx5mE7ta2/iXLl3C6tWr\nMXz4cLRv3x46nQ7du3fHhAkTkJWVZXWdqqoqrFu3Dg8++CA8PDzg7u6OgIAArFixAlevXjXr+9pr\nr2HTpk2Nul/1xeSQauXSpUuIjY3F2bNncfnyZfz000+Ijo6Gq6sr3njjDVuHR8RzlJpcZmYm+vfv\nj5CQELi6usLT0xMiokxIzMzMxLRp0yzWM/VLT0+Hh4cHRAT79+9v7vCbRHZ2NkaPHo34+HilSkFr\nHX/WrFmYMmUKIiIicPToURQWFuKTTz5BZmYmAgICkJqaarHOs88+i5iYGIwYMQK//vorfv/9d0RH\nR2PKlCl44oknzPq+8MILiI+PbxH/XjE5vMWt/3dn7fPWW28p71bOysrC+fPnoVKpajUz9U7k4+OD\nXbt2obi4GP/xH/8Bd3d3jB49Gt27d8dPP/2Ebt26NVsstf1+qG1pSedoa+Ls7Ky8L7otbv9mJSUl\neOyxx/DEE09g8uTJFsu1Wi08PDywZs0afPHFFzaI0DbeeOMNPPTQQzhw4IDVmqetbfznnnsOU6dO\nhY+PDxwdHREUFIQNGzbg+vXrePXVV836njx5EklJSejXrx8WLVoELy8veHh44NVXX8UjjzyCbdu2\nmVU68ff3R0pKChYuXGjzx0vu6DqHTaEu9+pnzpzZhJG0LMHBwQgODrZ1GG322VaqWUs5R6l1Wrp0\nKXJzczFv3jyryx0cHPD5559j1KhRiI2NRUBAAHr06NHMUTa/devWQafTtYnxExMTrbYbDAbodDpk\n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\nERERSZgcEhEREZGEySERERERSZgcEhEREZGEySERERERSZgcEhEREZGEySERERERSZgcEhEREZGE\nySERERERSZgcEhEREZGEySERERERSZgcEhEREZGEySERERERSZgcEhEREZGEySERERERSZgcEhER\nEZGEySERERERSZgcEhEREZGEySERERERSZgcEhEREZGEySERERERSZgcEhEREZGEySERERERSZgc\nEhEREZGEySERERERSZgcEhEREZGEySERERERSZgcEhEREZHExtwBEBF1tqlTp+Ly5cvSz7/99htU\nKhWGDh1q0O+5557DggULOjk6IiLzYnJIRBbn0qVLOHfunFG7Tqcz+Lm6urqzQiIi6jI4rUxEFufP\nf/4zbGya/9/4qaee6oRoiIi6FiaHRGRxZs+ejdu3bze5XCaTYcSIERgwYEAnRkVE1DUwOSQii+Pj\n44NRo0bBysr0n0Bra2v8+c9/7uSoiIi6BiaHRGSRnn76achkMpPLGhsbOaVMRBaLySERWaSmkj9r\na2tMmDAB7u7unRwREVHXwOSQiCySm5sbgoODYW1tbbTs6aefNkNERERdA5NDIrJYc+fOhRDCoM3K\nygrTp083U0RERObH5JCILNb06dNha2sr/WxjY4OwsDC4uLiYMSoiIvNickhEFsvJyQlTp06VEsTb\nt29j7ty5Zo6KiMi8mBwSkUWLjo5GQ0MDAEChUOCJJ54wc0RERObF5JCILNqUKVOgVCoBADNnzoRC\noTBzRERE5sVnKxMuX76MrKwsc4dBZDYjR47EkSNH4OPjgz179pg7HCKzsLa2xhNPPAF7e3tzh0Jm\nJhP33qpHFmf27NnYvXu3ucMgIiIz+/TTTxEZGWnuMMi89vDMIeH27dvQaDRIS0szdyjUTaSlpSEq\nKsqoTAy1P30xb/7+0oOSyWTS9bdk2XjNIRERERFJmBwSERERkYTJIRERERFJmBwSERERkYTJIRER\nERFJmBwSEZGRK1euYNq0aaiqqkJZWRlkMpn0Gj58OG7cuGG0zr39ZDIZRowYYYboO87nn38OPz8/\n2Ng0Xezj119/xdatWxEUFISePXtCoVBg4MCBiI6ORk5Ojsl1GhoasG3bNvzxj3+Eq6srevTogYCA\nAGzatAk3b9406Lts2TKkpqa26/siuhuTQyLq0mpqajBw4ECEh4ebOxSLkZ2djREjRiAkJATOzs5w\n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\nREREMiaHRERERCRjckhEREREMiaHRERERCRjckhEREREMiaHRERERCRjckhEREREMiaHRERERCRj\nckhEREREMiaHRERERCRjckhEREREMiaHRERERCRjckhEREREMiaHRERERCRjckhEREREMiaHRERE\nRCRjckhEREREMiaHRERERCRjckhEREREMiaHRERERCRjckhEREREMgtTB0BE1NM+/fRTlJSUyD+f\nPn0aALBlyxaddpMnT8b/+3//r0djIyIyNYUQQpg6CCKinjRgwABUVVXB0tKy1TaNjY145ZVX8Pe/\n/70HIyMiMrk9HFYmoj4nIiIC5ubmaGxsbPUDABqNxsSREhH1PCaHRNTnzJ07F3fu3GmzzYABAzBh\nwoQeioiI6OHB5JCI+pzx48djyJAhrdZbWVnh3/7t32Bmxv9FElHfw//zEVGfo1AosGDBglbfObx9\n+zbmzp3bw1ERET0cmBwSUZ/U1tDy8OHDMXbs2B6OiIjo4cDkkIj6pH/913/FyJEj9cqtrKzw5z//\n2QQRERE9HJgcElGftXDhQr2h5du3b+OFF14wUURERKbH5JCI+qy5c+eiqalJ/lmhUECtVsPLy8uE\nURERmRaTQyLqs4YPH46nnnoKCoUCAGBubs4hZSLq85gcElGf9qc//Qnm5uYAgObmZsyZM8fEERER\nmRaTQyLq0+bMmYOWlhYoFAo8++yzcHd3N3VIREQmxeSQiPo0V1dXTJw4EUIIDikTEQFQCCGEqYOg\nrvfPf/4TAQEBOi/bExERdYUhQ4bg6tWrpg6DusceC1NHQN2jtLQUTU1NSE9PN3UoRG165513AAB/\n/etfTRaDEALXr19H//79TRZDT5gzZw7++te/Yty4caYOhR5hWq1W/u+Weicmh72cRqMxdQhEbdqz\nZw8A/q72lGeeeYbXmh4IBxx7P75zSEREREQyJodEREREJGNySEREREQyJodEREREJGNySERE7bp8\n+TJmzJiB2tpaVFRUQKFQyJ+xY8fi1q1besfc306hUMDX19cE0XefAwcOwMvLCxYW7c/vzM3NRUhI\nCJycnODg4IApU6bg+PHjeu2uX7+OnTt3IiAgAP3794dSqcTjjz+O+fPnIy8vz6i4ZsyYAYVCgY0b\nN+rVrVq1CmlpaUb1Q30Tk0Mi6jVu3LiBxx9/HKGhoaYOpVfJzc2Fr68vgoKC4OjoCBcXFwghkJ2d\n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\nIcQtnPwfAO7m3ckzthEAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "metadata": { "id": "XFrH0OVORco2", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Training and Validating the model\n", "In the last practical we wrote out the dataset pipeline, loss function and training-loop to give you a good appreciation for how it works. This time, we use the training loop built-in to Keras. For simple, standard datasets like CIFAR, doing it this way will work fine, but it's important to know what goes on under the hood because you may need to write some or all of the steps out manually when working with more complex datasets! " ] }, { "metadata": { "id": "wJ6JAqUL1TDu", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 391 }, "outputId": "7177d9c2-041d-40b6-c43a-ce2cdc3c90df" }, "cell_type": "code", "source": [ "batch_size = 128\n", "num_epochs = 10 # The number of epochs (full passes through the data) to train for\n", "\n", "# Compiling the model adds a loss function, optimiser and metrics to track during training\n", "model.compile(optimizer=tf.train.AdamOptimizer(),\n", " loss=tf.keras.losses.sparse_categorical_crossentropy,\n", " metrics=['accuracy'])\n", "\n", "# The fit function allows you to fit the compiled model to some training data\n", "model.fit(x=train_images, \n", " y=train_labels, \n", " batch_size=batch_size, \n", " epochs=num_epochs, \n", " validation_data=(validation_images, validation_labels.astype(np.float32)))\n", "\n", "print('Training complete')" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Train on 40000 samples, validate on 10000 samples\n", "Epoch 1/10\n", "40000/40000 [==============================] - 10s 253us/step - loss: 1.7632 - acc: 0.3672 - val_loss: 1.4033 - val_acc: 0.4961\n", "Epoch 2/10\n", "40000/40000 [==============================] - 8s 205us/step - loss: 1.3070 - acc: 0.5322 - val_loss: 1.1878 - val_acc: 0.5769\n", "Epoch 3/10\n", "40000/40000 [==============================] - 8s 205us/step - loss: 1.1475 - acc: 0.5962 - val_loss: 1.1151 - val_acc: 0.6132\n", "Epoch 4/10\n", "40000/40000 [==============================] - 8s 204us/step - loss: 1.0261 - acc: 0.6404 - val_loss: 1.0382 - val_acc: 0.6371\n", "Epoch 5/10\n", "40000/40000 [==============================] - 8s 206us/step - loss: 0.9312 - acc: 0.6792 - val_loss: 1.1219 - val_acc: 0.6262\n", "Epoch 6/10\n", "40000/40000 [==============================] - 8s 204us/step - loss: 0.8550 - acc: 0.7039 - val_loss: 1.0031 - val_acc: 0.6547\n", "Epoch 7/10\n", "40000/40000 [==============================] - 9s 213us/step - loss: 0.7825 - acc: 0.7285 - val_loss: 0.9751 - val_acc: 0.6672\n", "Epoch 8/10\n", "40000/40000 [==============================] - 9s 213us/step - loss: 0.7138 - acc: 0.7526 - val_loss: 0.9877 - val_acc: 0.6761\n", "Epoch 9/10\n", "40000/40000 [==============================] - 8s 206us/step - loss: 0.6581 - acc: 0.7717 - val_loss: 0.9745 - val_acc: 0.6843\n", "Epoch 10/10\n", "40000/40000 [==============================] - 8s 210us/step - loss: 0.6053 - acc: 0.7905 - val_loss: 1.0062 - val_acc: 0.6763\n", "Training complete\n" ], "name": "stdout" } ] }, { "metadata": { "id": "waS75-jNaEL1", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Test performance\n", "Finally, we evaluate how well the model does on the held-out test-set" ] }, { "metadata": { "id": "AVAdjH6o13tQ", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "72e29943-105b-4375-ecb6-fde1264f89be" }, "cell_type": "code", "source": [ "metric_values = model.evaluate(x=test_images, y=test_labels)\n", "\n", "print('Final TEST performance')\n", "for metric_value, metric_name in zip(metric_values, model.metrics_names):\n", " print('{}: {}'.format(metric_name, metric_value))" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "10000/10000 [==============================] - 2s 170us/step\n", "Final TEST performance\n", "loss: 1.03090104685\n", "acc: 0.6695\n" ], "name": "stdout" } ] }, { "metadata": { "id": "2lsBthNB4FlL", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Note that we achieved roughly 80% training set accuracy, but our test accuracy is only around 67%. What do you think may be the reason for this?" ] }, { "metadata": { "id": "UlrSyMQpoV9f", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Classifying examples\n", "We now use our trained model to classify a sample of 25 images from the test set. We pass these 25 images to the ```model.predict``` function, which returns a [25, 10] dimensional matrix. The entry at position $(i, j)$ of this matrix contains the probability that image $i$ belongs to class $j$. We obtain the most-likely prediction using the ```np.argmax``` function which returns the index of the maximum entry along the columns. Finally, we plot the result with the prediction and prediction probability labelled underneath the image and true label on the side. " ] }, { "metadata": { "id": "BjzP384wm9OW", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "img_indices = np.random.randint(0, len(test_images), size=[25])\n", "sample_test_images = test_images[img_indices]\n", "sample_test_labels = [cifar_labels[i] for i in test_labels[img_indices].squeeze()]\n", "\n", "predictions = model.predict(sample_test_images)\n", "max_prediction = np.argmax(predictions, axis=1)\n", "prediction_probs = np.max(predictions, axis=1)" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "Ol-f9SacnySQ", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 589 }, "outputId": "cc4d4a4c-2bda-4d86-bf4a-9a5f1f3cd5ad" }, "cell_type": "code", "source": [ "plt.figure(figsize=(10,10))\n", "for i, (img, prediction, prob, true_label) in enumerate(\n", " zip(sample_test_images, max_prediction, prediction_probs, sample_test_labels)):\n", " plt.subplot(5,5,i+1)\n", " plt.xticks([])\n", " plt.yticks([])\n", " plt.grid('off')\n", "\n", " plt.imshow(img)\n", " plt.xlabel('{} ({:0.3f})'.format(cifar_labels[prediction], prob))\n", " plt.ylabel('{}'.format(true_label))\n", " " ], "execution_count": 0, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "metadata": { "id": "Z0618tOoMv0Y", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Question\n", "What do you think of the model's predictions? Looking at the model's confidence (the probability assigned to the predicted class), look for examples of the following cases:\n", "1. The model was correct with high confidence\n", "2. The model was correct with low confidence\n", "3. The model was incorrect with high confidence\n", "4. The model was incorrect with low confidence\n", "\n", "What do you think the (relative) loss values would be in those cases? \n" ] }, { "metadata": { "id": "py0V6UwC6_kH", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Aside: Uncertainty in deep learning" ] }, { "metadata": { "id": "lpGl8VzY6B3c", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Deep neural networks are not considered to be very good at estimating the uncertainty in their predictions. However, knowing your model's uncertainty can be very important for many applications. For example, consider a deep learning tool for diagnosing diseases, in this case a false negative could have massive impacts on a person's life! We would really like to know how confident our model is in its prediction. This is a budding field of research, for example see [this blog](https://www.cs.ox.ac.uk/people/yarin.gal/website/blog_3d801aa532c1ce.html) for a nice introduction." ] }, { "metadata": { "id": "OJzCooQO66D3", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Aside: CNN architectures" ] }, { "metadata": { "id": "n9Sjwpsm5_TD", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Deciding on the architecture for a CNN, i.e. the combination of convolution, pooling, dense, and other layers, can be tricky and often can seem arbitrary. On top of that, one also has to make decisions such as what kind of pooling, which activation functions, and what size of convolution to use, among other things. For new and old practitioners of deep learning, these choices can be overwhelming. \n", "\n", "However, by examining existing successful CNN architectures we can learn a lot about what works and what doesn't. (We can even apply these existing architectures to our problems since many deep learning libraries, such as TensorFlow and Keras, have them [built in](https://keras.io/applications/#available-models) and it is even possible to fine-tune pre-trained models to our specific problem using [transfer learning](https://cs231n.github.io/transfer-learning/).)\n", "\n", "[This article](https://medium.com/@sidereal/cnns-architectures-lenet-alexnet-vgg-googlenet-resnet-and-more-666091488df5) describes many of the most successful CNN architectures in recent years, including [ResNet](https://arxiv.org/abs/1512.03385), [Inception](https://arxiv.org/pdf/1512.00567v3.pdf) and [VGG](https://arxiv.org/pdf/1409.1556.pdf). For a more detailed and technical description of these models and more see [these slides](http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture9.pdf). Reading through these resources should give you insights into why these architectures are successful as well as best practices and current trends for CNNs that will help you design your own architectures.\n", "\n", "For example, one of the practices you might pick up on is the use of 3x3 convolutions. You'll notices that older architectures such as [AlexNet](https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf) used a range of convolutions from 7x7 down to 3x3. However, newer architectures such as VGG and ResNet use 3x3 convolutions almost exclusively. In short, the reason is that stacking 3x3 convolutions gives you the same receptive field as a larger convolution but with more non-linearity. \n", "\n", "Here are some other questions you may want to think about while investigating these architectures:\n", "\n", "* Why do modern architectures use less max-pooling?\n", "* What does a 1x1 convolution do?\n", "* What is a residual connection?" ] }, { "metadata": { "id": "-3bIU8BErhiJ", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Your Tasks\n", "1. [**ALL**] Experiment with the network architecture, try changing the numbers, types and sizes of layers, the sizes of filters, using different padding etc. How do these decisions affect the performance of the model? In particular, try building a *fully convolutinoal* network, with no (max-)pooling layers. \n", "2. [**ALL**] Implement BATCH NORMALISATION ([Tensorflow documentation](https://www.tensorflow.org/api_docs/python/tf/keras/layers/BatchNormalization) and [research paper](http://proceedings.mlr.press/v37/ioffe15.pdf)) to improve the model's generalisation.\n", "3. [**ADVANCED**] Read about Residual networks ([original paper](https://arxiv.org/pdf/1512.03385.pdf), ) and add **shortcut connections** to the model architecture. Try to build a simple reusable \"residual block\" as a [Keras Model](https://www.tensorflow.org/api_docs/python/tf/keras/Model). \n", "4. [**OPTIONAL**]. Visualise the filters of the convolutional layers using Matplotlib. **HINT**: You can retrieve a reference to an indivual layer from the sequential Keras model by calling```model.get_layer(name)```, replacing \"name\" with the name of the layer. " ] }, { "metadata": { "id": "0e-IdtqUknDK", "colab_type": "text" }, "cell_type": "markdown", "source": [ "##Additional Resources\n", "\n", "Here's some more information on ConvNets:\n", "\n", "* Chris Colah's blog post on [Understanding Convolutions](https://colah.github.io/posts/2014-07-Understanding-Convolutions/)\n", "* [How do convolutional neural networks work?](http://brohrer.github.io/how_convolutional_neural_networks_work.html)\n", "* The [CS231n course](https://cs231n.github.io/)\n", "* [Building blocks of interpretability](https://distill.pub/2018/building-blocks/)\n", "\n" ] } ] } ================================================ FILE: Practical_3_Recurrent_Neural_Networks.ipynb ================================================ { "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Practical 3: Recurrent Neural Networks", "version": "0.3.2", "provenance": [], "collapsed_sections": [] }, "kernelspec": { "name": "python2", "display_name": "Python 2" } }, "cells": [ { "metadata": { "id": "9jDBz0IbW3Xy", "colab_type": "text" }, "cell_type": "markdown", "source": [ "# Practical 3: Recurrent Neural Networks (RNNs)\n", "\n", "\n" ] }, { "metadata": { "id": "-0F3Ao8BKa0g", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Introduction\n", "\n", "Feedforward models (eg deep MLPs and ConvNets) map fixed-size input-data (vectors of a fixed dimensionality) to their output labels. They're very powerful and have been successfully used for many tasks. However, a lot of data is not in the form of fixed-size vectors, but exists in the form of **sequences**. Language is one good example, where sentences are sequences of words. In some way, almost any data types can be considered as a sequence (for instance an image consists of a sequence of pixels, speech a sequence of phonemes, and so forth). \n", "\n", "Recurrent neural networks (**RNNs**) were designed to be able to handle sequential data, and in this practical we will take a closer look at RNNs and then build a model that can generate English sentences in the style of Shakespeare!" ] }, { "metadata": { "id": "otAAvBVFSZy8", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Learning Objectives\n", "* Understand how RNNs model sequential data.\n", "* Understand how the vanilla RNN is a generalization of feedforward models to incorporate sequential dependencies.\n", "* Understand the issues involved when training RNNs.\n", "* Know how to implement an RNN for time-series estimation (**regression**) and an RNN language model (character-level **classification**) in Tensorflow using Keras." ] }, { "metadata": { "id": "gfKcEFUxa--9", "colab_type": "text" }, "cell_type": "markdown", "source": [ "##Imports\n" ] }, { "metadata": { "id": "h8glXxcyew17", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "6dee02e2-e3b9-4ee2-f7a7-2006dd9979e0" }, "cell_type": "code", "source": [ "#@title Imports (RUN ME!) { display-mode: \"form\" }\n", "\n", "#!pip -q install pydot_ng\n", "#!pip -q install graphviz\n", "#!apt install graphviz > /dev/null\n", "\n", "from __future__ import absolute_import, division, print_function\n", "\n", "import numpy as np\n", "import tensorflow as tf\n", "import math\n", "import random\n", "import ssl\n", "import sys\n", "import urllib2\n", "from IPython import display\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "print('Running TensorFlow version %s' % (tf.__version__))\n", "try:\n", " tf.enable_eager_execution()\n", " print('Eager mode activated.')\n", "except ValueError:\n", " print('Already running in Eager mode')" ], "execution_count": 3, "outputs": [ { "output_type": "stream", "text": [ "Running TensorFlow version 1.10.1\n", "Eager mode activated.\n" ], "name": "stdout" } ] }, { "metadata": { "id": "yVL1OwL7aH8c", "colab_type": "text" }, "cell_type": "markdown", "source": [ "##From Feedforward to Recurrent Models\n", "\n", "### Intuition\n", "RNNs generalize feedforward networks (FFNs) to be able to work with sequential data. FFNs take an input (e.g. an image) and immediately produce an output (e.g. a digit class), something like this:" ] }, { "metadata": { "id": "NqZsIaRU6-WK", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "def ffn_forward(x, W_xh, W_ho, b_hid, b_out):\n", " \n", " # Compute activations on the hidden layer.\n", " hidden_layer = act_fn(np.dot(W_xh, x) + b_hid)\n", " \n", " # Compute the (linear) output layer activations. \n", " output = np.dot(W_ho, hidden_layer) + b_out\n", " \n", " return output" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "Kb3Tjms06_XL", "colab_type": "text" }, "cell_type": "markdown", "source": [ "**NOTE**: You don't have to run this cell, it's just shown to illustrate the point.\n", "\n", "RNNs, on the other hand, consider the data sequentially, and can remember what they have seen earlier in the sequence to help interpret or contextualize elements from later in the sequence when making predictions, something like this:\n" ] }, { "metadata": { "id": "ACx_wHGB7AWc", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "def rnn_forward(data_sequence, initial_state):\n", "\n", " state = initial_state # Reused at every time-step\n", " all_states, all_ys = [state], [] # Used to save all states and predictions\n", "\n", " for x, y in data_sequence:\n", " \n", " # recurrent_fn() takes the current input and the previous state and produces a new state\n", " new_state, y_pred = recurrent_fn(x, state)\n", " \n", " all_states.append(new_state)\n", " all_ys.append(y_pred)\n", " \n", " # Update state for the next time-step\n", " state = new_state\n", "\n", " return all_states, all_ys" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "-Crh_ViE7Ave", "colab_type": "text" }, "cell_type": "markdown", "source": [ "To understand the distinction between FFNs and RNNs, imagine we want to label words as the part-of-speech categories that they belong to: E.g. for the input sentence \"I want a duck\" and \"He had to duck\", we want our model to predict that duck is a `Noun` in the first sentence and a `Verb` in the second. To do this successfully, the model needs to be aware of the surrounding context. However, if we feed a FFN model only one word at a time, how could it know the difference? If we want to feed it all the words at once, how do we deal with the fact that sentences are of different lengths?\n", "\n", "RNNs solve this issue by processing the sentence word-by-word, and maintaining an internal **state** summarizing what it has seen so far. This applies not only to words, but also to phonemes in speech, or even, as we will see, elements of a time-series.\n", "\n" ] }, { "metadata": { "id": "zUqww79L6Ot-", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Unrolling the network\n", "\n", "Imagine we are trying to classify a sequence $X = (x_1, x_2, \\ldots, x_N)$ into labels $y$ (for now, let's keep it abstract). After running the `rnn_forward()` function of our RNN defined above on $X$, we would have a list of internal states and outputs of the model at each sequence position. This process is called **unrolling or unfolding in time**, because you can think of it as unrolling the *computations* defined by the RNN loop over the inputs at each position of the sequence. RNNs are often used to model **time series data** (which we will do in this practical), and therefore these positions are referred to as **time-steps**, and hence we call this process \"unrolling over time\". See the visualization below from this great [blog post](http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/) (it uses slightly different notation, but the idea should be clear):\n", "\n", "![Unrolled Network](http://d3kbpzbmcynnmx.cloudfront.net/wp-content/uploads/2015/09/rnn.jpg)\n", "\n", "> **We can therefore think of an RNN as a composition of identical feedforward neural networks (with replicated/tied weights), one for each moment or step in time. **\n", "\n", "These feedforward functions that make up the RNN(i.e. our `recurrent_fn` above) are typically referred to as **cells**, and the only restriction on its API is that the cell function needs to be a differentiable function that can map an input and a state vector to an output and a new state vector. What we have shown above is called the **vanilla RNN**, but there are many more possibilities. One of the most popular variants is called the **Long Short-Term Memory (LSTM)** cell, which we'll use later to create our Shakespeare language model.\n", "\n", "### Putting this together \n", "\n", "In the feedforward models we've seen before, the input $x$ is mapped to an intermediate hidden layer $h$ as follows:\n", "\n", "\\begin{equation}\n", " h = \\sigma(\\underbrace{W_{xh}x}_\\text{current input (per-example)} + b)\n", "\\end{equation}\n", "\n", "where $\\sigma$ is some non-linear activation function like ReLU or tanh. We can then make a prediction $\\hat{y} = \\sigma(W_{hy}h + b)$ based on $h$, or we can add another layer, etc. **NOTE**: We use the weight subscript $W_{xz}$ to indicate a mapping from layer $x$ to layer $z$.\n", "\n", "RNNs generalize this idea to a sequence of inputs $X = {x_1, x_2, ...}$ by maintaining a sequence of state vectors $h_t$, one for every time-step $t$, as follows:\n", "\n", "\\begin{equation}\n", " h_t = \\sigma(\\underbrace{W_{hh}h_{t-1}}_\\text{previous state} + \\underbrace{W_{xh}x_t}_\\text{current input (per time-step)} + b)\n", "\\end{equation}\n", "\n", "Feedforward models map one input to one output. On the other hand, RNNs can give **many-to-many** (many inputs, many labels), **many-to-one**, and **one-to-many** mappings. For example, we could use each $h_t$ to predict the part of speech for that time-step ($y_t= \\sigma(W_{hy}h_t+b)$) or we could use the last state $h_T$ to predict the topic of the whole document. Which task the RNN performs is based on the training data (of course)! We can visualize these as follows (fromt this [excellent blog post](http://karpathy.github.io/2015/05/21/rnn-effectiveness/) by Andrej Karpathy):\n", "\n", "![](http://karpathy.github.io/assets/rnn/diags.jpeg)\n", "\n", "**QUESTIONS**\n", "* How are FFNs and RNNs **similar**?\n", "* How are they **different**?\n", "* Why do we call RNNs \"recurrent\"?\n", "* Can you think of a one-to-many task?" ] }, { "metadata": { "id": "9wuobtH3aB59", "colab_type": "text" }, "cell_type": "markdown", "source": [ "##Modeling General Time-Series\n", "\n", "We will train an RNN to model a time-series as a first step. A **time-series** is a series of data-points ordered over discrete time-steps. Examples include the hourly temperature of Stellenbosch over a month or a year, the market price of some asset (like a company's stock) over time, and so forth. We will generate a **sinusoidal time-series** (with or without noise) as a toy example, and then train a tiny RNN model with only 5 parameters on this data." ] }, { "metadata": { "id": "oAQIXUL-oje2", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Create some artificial data" ] }, { "metadata": { "id": "412j4v-RIfYR", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 226 }, "outputId": "94a3f6f0-aaaf-41c3-ed80-68372c62f279" }, "cell_type": "code", "source": [ "#@title Create sinusoidal data {run: \"auto\"}\n", "steps_per_cycle = 20 #@param { type: \"slider\", min:1, max:100, step:1 }\n", "number_of_cycles = 176 #@param { type: \"slider\", min:1, max:1000, step:1 }\n", "noise_factor = 0.1 #@param { type: \"slider\", min:0, max:1, step:0.1 }\n", "plot_num_cycles = 23 #@param { type: \"slider\", min:1, max:50, step:1 }\n", "\n", "seq_len = steps_per_cycle * number_of_cycles\n", "t = np.arange(seq_len)\n", "sin_t_noisy = np.sin(2 * np.pi / steps_per_cycle * t + noise_factor * np.random.uniform(-1.0, +1.0, seq_len))\n", "sin_t_clean = np.sin(2 * np.pi / steps_per_cycle * t)\n", "\n", "upto = plot_num_cycles * steps_per_cycle\n", "fig = plt.figure(figsize=(15,3))\n", "plt.plot(t[:upto], sin_t_noisy[:upto])\n", "plt.title(\"Showing first {} cycles.\".format(plot_num_cycles))\n", "plt.show()\n", "\n", "#both = np.column_stack((t, sin_t_noisy))\n", "#print(\"both.shape = {}\".format(both.shape))\n", "\n", "#print(\"both[:steps_per_cycle, :steps_per_cycle]\")\n", "#print(both[:steps_per_cycle,:steps_per_cycle])" ], "execution_count": 4, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "metadata": { "id": "Eaypg9gKos21", "colab_type": "text" }, "cell_type": "markdown", "source": [ "**TASK**: Adjust the parameters above to generate data with different properties.\n", "\n", "Now we pack the data into train and test batches. Note that while RNNs can in theory learn the dependencies across all inputs received so far (using an algorithm called **backpropagation through time**, or BPTT; see the Aside box below), in practice they are trained using an algorithm called **truncated BPTT** where we truncate the inputs to only the last $T$ symbols (this is the `truncated_seq_len` variable below).\n", "\n", "**QUESTIONs**: \n", "* What issues can you think may arise by truncating the training data in this way? \n", "* Despite these issues, why do you think it might be necessary to do this?" ] }, { "metadata": { "id": "RtwMLLCNorw4", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 71 }, "cellView": "both", "outputId": "b21cacaf-acbb-4d67-dc56-a4ac6c2d1339" }, "cell_type": "code", "source": [ "#@title Pack truncated sequence data {run: \"auto\"}\n", "\n", "def pack_truncated_data(data, num_prev = 100): \n", " X, Y = [], []\n", " for i in range(len(data) - num_prev):\n", " X.append(data[i : i + num_prev])\n", " Y.append(data[i + num_prev])\n", " # NOTE: Keras expects input data in the shape (batch_size, truncated_seq_len, input_dim)\n", " # We have only one real-valued number per time-step, so we therefore expand \n", " # the last dimension from (batch_size, truncated_seq_len) to \n", " # (batch_size, truncated_seq_len, 1).\n", " X, Y = np.array(X)[:,:,np.newaxis], np.array(Y)[:,np.newaxis]\n", " return X, Y\n", "\n", "# We only consider this many previous data points\n", "truncated_seq_len = 2 #@param { type: \"slider\", min:1, max:10, step:1 }\n", "test_split = 0.25 # Fraction of total data to keep out as test data\n", "\n", "# We use only the sin(t) values, and discard the time values\n", "data = sin_t_noisy\n", "data_len = data.shape[0]\n", "num_train = int(data_len * (1 - test_split))\n", "\n", "train_data = data[:num_train]\n", "test_data = data[num_train:]\n", "\n", "X_train, y_train = pack_truncated_data(train_data, num_prev=truncated_seq_len)\n", "X_test, y_test = pack_truncated_data(test_data, num_prev=truncated_seq_len) \n", "\n", "print(\"Generated training/test data with shapes\\nX_train: {}, y_train: {}\\nX_test: {}, y_test: {}. \".format(\n", " X_train.shape, y_train.shape, X_test.shape, y_test.shape))\n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Generated training/test data with shapes\n", "X_train: (2638, 2, 1), y_train: (2638, 1)\n", "X_test: (878, 2, 1), y_test: (878, 1). \n" ], "name": "stdout" } ] }, { "metadata": { "id": "vgVxLBp8CaN6", "colab_type": "text" }, "cell_type": "markdown", "source": [ "**NOTE**: We reshape the training data into (batch_size, truncated_seq_len, 1) and (batch_size, 1) arrays." ] }, { "metadata": { "id": "xiUrsPAI36M-", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Intermediate Aside: (Truncated) Backpropagation-through-Time and Vanishing and Exploding Gradients" ] }, { "metadata": { "id": "SCJlN3O11pr1", "colab_type": "text" }, "cell_type": "markdown", "source": [ "RNNs model sequential data, and are designed to capture how ***outputs*** at the current time step are influenced by the ***inputs*** that came before them. This is referred to as **long-range dependencies**. At a high level, this allows the model to remember what it has seen so far in order to better contextualize what it is seeing at the moment (think about how knowing the context of the sentence or conversation can sometimes help one to better figure out the intended meaning of a misheard word or ambiguous statement). It is what makes these models so powerful, but it is also what makes them so hard to train!\n", "\n", "The most well-known algorithm for training RNNs is called **back-propagation through time (BPTT**; there are other algorithms). BPTT conceptually amounts to unrolling the computations of the RNN over time, computing the errors, and backpropagating the gradients through the unrolled graph structure. Ideally we want to unroll the graph up to the maximum sequence length, however in practice, since sequence lengths vary and memory is limited, we only end up unrolling sequences up to some length $T$. This is called **truncated BPTT**, and is the most used variant of BPTT.\n", "\n", "At a high level, there are two main issues when using (truncated) BPTT to train RNNs:\n", "\n", "* Having shared (\"tied\") recurrent weights ($W_{hh}$) mean that **the gradient on these weights at some time step $t$ depends on all time steps up to time-step $T$**, the length of the full (truncated) sequence. This also leads to the **vanishing/exploding gradients** problem, which we'll explain below.\n", "\n", "* **Memory usage grows linearly with the total number of steps $T$ that we unroll for**, because we need to save/cache the activations at each time-step (look at the Python code above to convince yourself of this). This matters computationally, since memory is a limited resource. It also matters statistically, because it puts a limit on the types of dependency that the model can successfully learn, by preventing it from correcting errors that stem from an input more than $T$ steps ago.\n", "\n", "**NOTE**: Think about that last statement and make sure you understand those 2 points.\n", "\n", "BPTT is very similar to the standard back-propagation algorithm. Key to understanding the BPTT algorithm is to realize that gradients on the non-recurrent weights (weights of a per time-step classifier that tries to predict the part-of-speech tag for each word for example) and recurrent weights (that transform $h_{t-1}$ into $h_t$) are computed differently:\n", "\n", "* The gradients of **non-recurrent weights** ($W_{hy}$) depend only on the error at that time-step, $E_t$.\n", "* The gradients of **recurrent weights** ($W_{hh}$) depend on all previous time-steps up to maximum length $T$.\n", "\n", "The first point is fairly intuitive: predictions at time-step $t$ is related to the loss of that particular prediction. \n", "\n", "The second point will be explained in more detail in the lectures (see also [this great blog post](http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/)), but briefly, this can be summarized in these equations:\n", "\n", "1. The **current** state is a function of the **previous** state and the current input: $h_t = \\sigma(W_{hh}h_{t-1} + W_{xh}x_t)$\n", "2. The gradient of the loss $E_t$ at time $t$ on $W_{hh}$ is a function of the current hidden state and model predictions $\\hat{y}_t$ at time t: \n", "$\\frac{\\partial E_t}{\\partial W_{hh}} = \\frac{\\partial E_t}{\\partial \\hat{y}_t}\\frac{\\partial\\hat{y}_t}{\\partial h_t}\\frac{\\partial h_t}{\\partial W_{hh}}$\n", "3. Substituting (1) into (2) results in a **sum over all previous time-steps**:\n", "$\\frac{\\partial E_t}{\\partial W_{hh}} = \\sum\\limits_{k=0}^{t} \\underbrace{\\frac{\\partial E_t}{\\partial \\hat{y}_t}\\frac{\\partial\\hat{y}_t}{\\partial h_t}\\frac{\\partial h_t}{\\partial h_k}\\frac{\\partial h_k}{\\partial W_{hh}}}_\\text{product of gradient terms}$\n", "\n", "The problem is that $\\frac{\\partial h_t}{\\partial h_k} = \\Pi_j \\frac{\\partial h_j}{\\partial h_{j-1}}$ for j from $k + 1$ to $t$. Because of this **repeated multiplicative interaction**, as the sequence length $t$ gets longer, the gradients themselves can get diminishingly small (**vanish**) or grow too large and result in numeric overflow (**explode**). This has been shown to be related to the norms of the recurrent weight matrices being less than or equal to 1. Intuitively, it works very similar to how multiplying a small number $v<1.0$ with itself repeatedly can quickly go to zero, or conversely, a large number $v>1.0$ could quickly go to infinity; only this is for matrices.\n" ] }, { "metadata": { "id": "-o3qjqeZpLjN", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Build a tiny RNN in Keras\n", "\n", "Building an RNN in Keras is quite simple. We simply chain the layers together as follows:" ] }, { "metadata": { "id": "mEobTD6spOWx", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "def define_model(truncated_seq_len): \n", " \n", " input_dimension = 1\n", " hidden_dimension = 1\n", " output_dimension = 1\n", " \n", " model = tf.keras.models.Sequential()\n", " model.add(tf.keras.layers.SimpleRNN(\n", " # We need to specify the input_shape *without* leading batch_size (it is inferred)\n", " input_shape=(truncated_seq_len, input_dimension),\n", " units=hidden_dimension, \n", " return_sequences=False,\n", " name='hidden_layer'))\n", " model.add(tf.keras.layers.Dense(\n", " output_dimension, \n", " name='output_layer'))\n", "\n", " model.compile(loss=\"mean_squared_error\", \n", " optimizer=tf.train.AdamOptimizer(learning_rate=1e-3))\n", " \n", " return model\n" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "JHRscZaQze26", "colab_type": "text" }, "cell_type": "markdown", "source": [ "**NOTE**: We're building an RNN for **regression**. We therefore use a linear layer (which outputs real-valued numbers) at the output with the \"*mean_squared_error*\" loss function." ] }, { "metadata": { "id": "ONvBy4AopTrF", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 215 }, "outputId": "4cff0a47-5688-457a-c071-a5458decf8f6" }, "cell_type": "code", "source": [ "model = define_model(truncated_seq_len = X_train.shape[1])\n", "model.summary()" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "hidden_layer (SimpleRNN) (None, 1) 3 \n", "_________________________________________________________________\n", "output_layer (Dense) (None, 1) 2 \n", "=================================================================\n", "Total params: 5\n", "Trainable params: 5\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ], "name": "stdout" } ] }, { "metadata": { "id": "ddb6_04dfZvn", "colab_type": "text" }, "cell_type": "markdown", "source": [ "**NOTE**: You need to re-run the above cell every time after training to reset the model weights!" ] }, { "metadata": { "id": "hD94X5iQc8Jg", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Train the tiny RNN\n", "Now let's train the model. This may take a few minutes (it takes much longer if you increase `truncated_seq_len`). Set `verbose=1` **before** you run the cell to see the intermediate output as the model is training. Set it to 0 if you don't want any output." ] }, { "metadata": { "id": "xvahCyhk7Wvr", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "''' SOLUTION TO ONE OF TASKS [DELETE]\n", "patience = 5\n", "train_history = model.fit(X_train, y_train, batch_size=600, epochs=1000, \n", " verbose=1, validation_split=0.05,\n", " callbacks=[tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=patience, verbose=1)])\n", "'''" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "xumvRz2lrPus", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 36035 }, "outputId": "39973883-59f5-4233-8f02-83f902e0dc35" }, "cell_type": "code", "source": [ "train_history = model.fit(X_train, y_train, batch_size=600, epochs=1000, \n", " verbose=1, validation_split=0.05)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Train on 2506 samples, validate on 132 samples\n", "Epoch 1/1000\n", "2506/2506 [==============================] - 0s 26us/step - loss: 0.4968 - val_loss: 0.4914\n", "Epoch 2/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4965 - val_loss: 0.4911\n", "Epoch 3/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4961 - val_loss: 0.4908\n", "Epoch 4/1000\n", "2506/2506 [==============================] - 0s 14us/step - loss: 0.4958 - val_loss: 0.4904\n", "Epoch 5/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4953 - val_loss: 0.4898\n", "Epoch 6/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.4949 - val_loss: 0.4893\n", "Epoch 7/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4944 - val_loss: 0.4887\n", "Epoch 8/1000\n", "2506/2506 [==============================] - 0s 14us/step - loss: 0.4939 - val_loss: 0.4883\n", "Epoch 9/1000\n", "2506/2506 [==============================] - 0s 13us/step - loss: 0.4933 - val_loss: 0.4877\n", "Epoch 10/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4927 - val_loss: 0.4872\n", "Epoch 11/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4920 - val_loss: 0.4865\n", "Epoch 12/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4913 - val_loss: 0.4856\n", "Epoch 13/1000\n", "2506/2506 [==============================] - 0s 14us/step - loss: 0.4905 - val_loss: 0.4847\n", "Epoch 14/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4896 - val_loss: 0.4838\n", "Epoch 15/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4887 - val_loss: 0.4828\n", "Epoch 16/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4876 - val_loss: 0.4819\n", "Epoch 17/1000\n", "2506/2506 [==============================] - 0s 14us/step - loss: 0.4865 - val_loss: 0.4808\n", "Epoch 18/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4853 - val_loss: 0.4797\n", "Epoch 19/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.4840 - val_loss: 0.4784\n", "Epoch 20/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.4826 - val_loss: 0.4771\n", "Epoch 21/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.4811 - val_loss: 0.4756\n", "Epoch 22/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.4794 - val_loss: 0.4741\n", "Epoch 23/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4777 - val_loss: 0.4725\n", "Epoch 24/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.4758 - val_loss: 0.4707\n", "Epoch 25/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4738 - val_loss: 0.4689\n", "Epoch 26/1000\n", "2506/2506 [==============================] - 0s 14us/step - loss: 0.4717 - val_loss: 0.4669\n", "Epoch 27/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4695 - val_loss: 0.4646\n", "Epoch 28/1000\n", "2506/2506 [==============================] - 0s 14us/step - loss: 0.4671 - val_loss: 0.4622\n", "Epoch 29/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4646 - val_loss: 0.4596\n", "Epoch 30/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4619 - val_loss: 0.4568\n", "Epoch 31/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.4590 - val_loss: 0.4540\n", "Epoch 32/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4560 - val_loss: 0.4510\n", "Epoch 33/1000\n", "2506/2506 [==============================] - 0s 13us/step - loss: 0.4529 - val_loss: 0.4479\n", "Epoch 34/1000\n", "2506/2506 [==============================] - 0s 14us/step - loss: 0.4496 - val_loss: 0.4446\n", "Epoch 35/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4461 - val_loss: 0.4412\n", "Epoch 36/1000\n", "2506/2506 [==============================] - 0s 14us/step - loss: 0.4425 - val_loss: 0.4376\n", "Epoch 37/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4388 - val_loss: 0.4337\n", "Epoch 38/1000\n", "2506/2506 [==============================] - 0s 13us/step - loss: 0.4349 - val_loss: 0.4297\n", "Epoch 39/1000\n", "2506/2506 [==============================] - 0s 14us/step - loss: 0.4308 - val_loss: 0.4256\n", "Epoch 40/1000\n", "2506/2506 [==============================] - 0s 14us/step - loss: 0.4266 - val_loss: 0.4214\n", "Epoch 41/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4223 - val_loss: 0.4170\n", "Epoch 42/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4178 - val_loss: 0.4127\n", "Epoch 43/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.4133 - val_loss: 0.4082\n", "Epoch 44/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.4086 - val_loss: 0.4036\n", "Epoch 45/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.4038 - val_loss: 0.3988\n", "Epoch 46/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.3988 - val_loss: 0.3939\n", "Epoch 47/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.3938 - val_loss: 0.3889\n", "Epoch 48/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.3888 - val_loss: 0.3839\n", "Epoch 49/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.3836 - val_loss: 0.3789\n", "Epoch 50/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.3785 - val_loss: 0.3738\n", "Epoch 51/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.3732 - val_loss: 0.3686\n", "Epoch 52/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.3679 - val_loss: 0.3634\n", "Epoch 53/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.3625 - val_loss: 0.3581\n", "Epoch 54/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.3571 - val_loss: 0.3526\n", "Epoch 55/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.3516 - val_loss: 0.3472\n", "Epoch 56/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.3461 - val_loss: 0.3417\n", "Epoch 57/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.3406 - val_loss: 0.3362\n", "Epoch 58/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.3350 - val_loss: 0.3306\n", "Epoch 59/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.3295 - val_loss: 0.3249\n", "Epoch 60/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.3238 - val_loss: 0.3192\n", "Epoch 61/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.3182 - val_loss: 0.3136\n", "Epoch 62/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.3126 - val_loss: 0.3079\n", "Epoch 63/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.3069 - val_loss: 0.3022\n", "Epoch 64/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.3013 - val_loss: 0.2964\n", "Epoch 65/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.2956 - val_loss: 0.2908\n", "Epoch 66/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.2900 - val_loss: 0.2851\n", "Epoch 67/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.2844 - val_loss: 0.2794\n", "Epoch 68/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.2787 - val_loss: 0.2737\n", "Epoch 69/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.2729 - val_loss: 0.2679\n", "Epoch 70/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.2673 - val_loss: 0.2621\n", "Epoch 71/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.2615 - val_loss: 0.2563\n", "Epoch 72/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.2557 - val_loss: 0.2505\n", "Epoch 73/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.2500 - val_loss: 0.2446\n", "Epoch 74/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.2442 - val_loss: 0.2388\n", "Epoch 75/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.2385 - val_loss: 0.2329\n", "Epoch 76/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.2328 - val_loss: 0.2271\n", "Epoch 77/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.2270 - val_loss: 0.2213\n", "Epoch 78/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.2212 - val_loss: 0.2155\n", "Epoch 79/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.2155 - val_loss: 0.2098\n", "Epoch 80/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.2099 - val_loss: 0.2041\n", "Epoch 81/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.2042 - val_loss: 0.1984\n", "Epoch 82/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.1986 - val_loss: 0.1929\n", "Epoch 83/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.1931 - val_loss: 0.1873\n", "Epoch 84/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.1876 - val_loss: 0.1819\n", "Epoch 85/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.1822 - val_loss: 0.1764\n", "Epoch 86/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.1768 - val_loss: 0.1710\n", "Epoch 87/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.1714 - val_loss: 0.1656\n", "Epoch 88/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.1661 - val_loss: 0.1605\n", "Epoch 89/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.1610 - val_loss: 0.1554\n", "Epoch 90/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.1559 - val_loss: 0.1505\n", "Epoch 91/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.1509 - val_loss: 0.1456\n", "Epoch 92/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.1461 - val_loss: 0.1409\n", "Epoch 93/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.1414 - val_loss: 0.1363\n", "Epoch 94/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.1368 - val_loss: 0.1317\n", "Epoch 95/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.1323 - val_loss: 0.1273\n", "Epoch 96/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.1279 - val_loss: 0.1231\n", "Epoch 97/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.1237 - val_loss: 0.1190\n", "Epoch 98/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.1196 - val_loss: 0.1150\n", "Epoch 99/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.1156 - val_loss: 0.1111\n", "Epoch 100/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.1117 - val_loss: 0.1074\n", "Epoch 101/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.1080 - val_loss: 0.1039\n", "Epoch 102/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.1045 - val_loss: 0.1006\n", "Epoch 103/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.1011 - val_loss: 0.0973\n", "Epoch 104/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0978 - val_loss: 0.0941\n", "Epoch 105/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0946 - val_loss: 0.0911\n", "Epoch 106/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0916 - val_loss: 0.0882\n", "Epoch 107/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0887 - val_loss: 0.0854\n", "Epoch 108/1000\n", "2506/2506 [==============================] - 0s 14us/step - loss: 0.0859 - val_loss: 0.0828\n", "Epoch 109/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0833 - val_loss: 0.0803\n", "Epoch 110/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0808 - val_loss: 0.0779\n", "Epoch 111/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0783 - val_loss: 0.0757\n", "Epoch 112/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0761 - val_loss: 0.0736\n", "Epoch 113/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0739 - val_loss: 0.0716\n", "Epoch 114/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0719 - val_loss: 0.0697\n", "Epoch 115/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0699 - val_loss: 0.0679\n", "Epoch 116/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0681 - val_loss: 0.0663\n", "Epoch 117/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0663 - val_loss: 0.0646\n", "Epoch 118/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0647 - val_loss: 0.0631\n", "Epoch 119/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0631 - val_loss: 0.0616\n", "Epoch 120/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0617 - val_loss: 0.0603\n", "Epoch 121/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0603 - val_loss: 0.0591\n", "Epoch 122/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0590 - val_loss: 0.0579\n", "Epoch 123/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0578 - val_loss: 0.0567\n", "Epoch 124/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0566 - val_loss: 0.0557\n", "Epoch 125/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0556 - val_loss: 0.0547\n", "Epoch 126/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0545 - val_loss: 0.0538\n", "Epoch 127/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0536 - val_loss: 0.0530\n", "Epoch 128/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0527 - val_loss: 0.0522\n", "Epoch 129/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0519 - val_loss: 0.0515\n", "Epoch 130/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0511 - val_loss: 0.0507\n", "Epoch 131/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0504 - val_loss: 0.0500\n", "Epoch 132/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0497 - val_loss: 0.0494\n", "Epoch 133/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0490 - val_loss: 0.0488\n", "Epoch 134/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0484 - val_loss: 0.0482\n", "Epoch 135/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0478 - val_loss: 0.0477\n", "Epoch 136/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0472 - val_loss: 0.0472\n", "Epoch 137/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0467 - val_loss: 0.0467\n", "Epoch 138/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0462 - val_loss: 0.0463\n", "Epoch 139/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0457 - val_loss: 0.0459\n", "Epoch 140/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0453 - val_loss: 0.0455\n", "Epoch 141/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0448 - val_loss: 0.0451\n", "Epoch 142/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0444 - val_loss: 0.0448\n", "Epoch 143/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0440 - val_loss: 0.0444\n", "Epoch 144/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0437 - val_loss: 0.0441\n", "Epoch 145/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0433 - val_loss: 0.0438\n", "Epoch 146/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0430 - val_loss: 0.0435\n", "Epoch 147/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0427 - val_loss: 0.0431\n", "Epoch 148/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0424 - val_loss: 0.0428\n", "Epoch 149/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0421 - val_loss: 0.0426\n", "Epoch 150/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0418 - val_loss: 0.0423\n", "Epoch 151/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0415 - val_loss: 0.0421\n", "Epoch 152/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0412 - val_loss: 0.0419\n", "Epoch 153/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0410 - val_loss: 0.0416\n", "Epoch 154/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0407 - val_loss: 0.0414\n", "Epoch 155/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0405 - val_loss: 0.0411\n", "Epoch 156/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0402 - val_loss: 0.0409\n", "Epoch 157/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0400 - val_loss: 0.0407\n", "Epoch 158/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0398 - val_loss: 0.0405\n", "Epoch 159/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0395 - val_loss: 0.0403\n", "Epoch 160/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0393 - val_loss: 0.0401\n", "Epoch 161/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0391 - val_loss: 0.0399\n", "Epoch 162/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0389 - val_loss: 0.0397\n", "Epoch 163/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0387 - val_loss: 0.0395\n", "Epoch 164/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0385 - val_loss: 0.0393\n", "Epoch 165/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0382 - val_loss: 0.0391\n", "Epoch 166/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0380 - val_loss: 0.0389\n", "Epoch 167/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0378 - val_loss: 0.0387\n", "Epoch 168/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0376 - val_loss: 0.0385\n", "Epoch 169/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0374 - val_loss: 0.0383\n", "Epoch 170/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0372 - val_loss: 0.0381\n", "Epoch 171/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0370 - val_loss: 0.0379\n", "Epoch 172/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0368 - val_loss: 0.0377\n", "Epoch 173/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0366 - val_loss: 0.0375\n", "Epoch 174/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0364 - val_loss: 0.0373\n", "Epoch 175/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0362 - val_loss: 0.0372\n", "Epoch 176/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0360 - val_loss: 0.0370\n", "Epoch 177/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0358 - val_loss: 0.0368\n", "Epoch 178/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0356 - val_loss: 0.0366\n", "Epoch 179/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0354 - val_loss: 0.0364\n", "Epoch 180/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0352 - val_loss: 0.0362\n", "Epoch 181/1000\n", "2506/2506 [==============================] - 0s 20us/step - loss: 0.0351 - val_loss: 0.0360\n", "Epoch 182/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0349 - val_loss: 0.0359\n", "Epoch 183/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0347 - val_loss: 0.0357\n", "Epoch 184/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0345 - val_loss: 0.0355\n", "Epoch 185/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0343 - val_loss: 0.0353\n", "Epoch 186/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0341 - val_loss: 0.0351\n", "Epoch 187/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0339 - val_loss: 0.0349\n", "Epoch 188/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0337 - val_loss: 0.0347\n", "Epoch 189/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0335 - val_loss: 0.0345\n", "Epoch 190/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0333 - val_loss: 0.0343\n", "Epoch 191/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0331 - val_loss: 0.0342\n", "Epoch 192/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0329 - val_loss: 0.0340\n", "Epoch 193/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0327 - val_loss: 0.0338\n", "Epoch 194/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0325 - val_loss: 0.0336\n", "Epoch 195/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0323 - val_loss: 0.0334\n", "Epoch 196/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0321 - val_loss: 0.0332\n", "Epoch 197/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0320 - val_loss: 0.0330\n", "Epoch 198/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0318 - val_loss: 0.0328\n", "Epoch 199/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0316 - val_loss: 0.0326\n", "Epoch 200/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0314 - val_loss: 0.0324\n", "Epoch 201/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0312 - val_loss: 0.0322\n", "Epoch 202/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0310 - val_loss: 0.0321\n", "Epoch 203/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0308 - val_loss: 0.0319\n", "Epoch 204/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0306 - val_loss: 0.0317\n", "Epoch 205/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0304 - val_loss: 0.0315\n", "Epoch 206/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0302 - val_loss: 0.0314\n", "Epoch 207/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0301 - val_loss: 0.0312\n", "Epoch 208/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0299 - val_loss: 0.0310\n", "Epoch 209/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0297 - val_loss: 0.0308\n", "Epoch 210/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0295 - val_loss: 0.0306\n", "Epoch 211/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0293 - val_loss: 0.0304\n", "Epoch 212/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0291 - val_loss: 0.0302\n", "Epoch 213/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0289 - val_loss: 0.0300\n", "Epoch 214/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0287 - val_loss: 0.0298\n", "Epoch 215/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0286 - val_loss: 0.0296\n", "Epoch 216/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0284 - val_loss: 0.0295\n", "Epoch 217/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0282 - val_loss: 0.0293\n", "Epoch 218/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0280 - val_loss: 0.0291\n", "Epoch 219/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0278 - val_loss: 0.0289\n", "Epoch 220/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0276 - val_loss: 0.0288\n", "Epoch 221/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0275 - val_loss: 0.0286\n", "Epoch 222/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0273 - val_loss: 0.0285\n", "Epoch 223/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0271 - val_loss: 0.0283\n", "Epoch 224/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0269 - val_loss: 0.0281\n", "Epoch 225/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0268 - val_loss: 0.0279\n", "Epoch 226/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0266 - val_loss: 0.0277\n", "Epoch 227/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0264 - val_loss: 0.0275\n", "Epoch 228/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0262 - val_loss: 0.0274\n", "Epoch 229/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0260 - val_loss: 0.0272\n", "Epoch 230/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0259 - val_loss: 0.0270\n", "Epoch 231/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0257 - val_loss: 0.0268\n", "Epoch 232/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0255 - val_loss: 0.0267\n", "Epoch 233/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0253 - val_loss: 0.0265\n", "Epoch 234/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0252 - val_loss: 0.0263\n", "Epoch 235/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0250 - val_loss: 0.0262\n", "Epoch 236/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0248 - val_loss: 0.0260\n", "Epoch 237/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0247 - val_loss: 0.0258\n", "Epoch 238/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0245 - val_loss: 0.0257\n", "Epoch 239/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0243 - val_loss: 0.0255\n", "Epoch 240/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0242 - val_loss: 0.0253\n", "Epoch 241/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0240 - val_loss: 0.0252\n", "Epoch 242/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0238 - val_loss: 0.0250\n", "Epoch 243/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0237 - val_loss: 0.0249\n", "Epoch 244/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0235 - val_loss: 0.0247\n", "Epoch 245/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0233 - val_loss: 0.0246\n", "Epoch 246/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0232 - val_loss: 0.0244\n", "Epoch 247/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0230 - val_loss: 0.0242\n", "Epoch 248/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0229 - val_loss: 0.0241\n", "Epoch 249/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0227 - val_loss: 0.0239\n", "Epoch 250/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0226 - val_loss: 0.0238\n", "Epoch 251/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0224 - val_loss: 0.0236\n", "Epoch 252/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0222 - val_loss: 0.0235\n", "Epoch 253/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0221 - val_loss: 0.0233\n", "Epoch 254/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0219 - val_loss: 0.0232\n", "Epoch 255/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0218 - val_loss: 0.0230\n", "Epoch 256/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0216 - val_loss: 0.0229\n", "Epoch 257/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0215 - val_loss: 0.0227\n", "Epoch 258/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0213 - val_loss: 0.0226\n", "Epoch 259/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0212 - val_loss: 0.0224\n", "Epoch 260/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0210 - val_loss: 0.0223\n", "Epoch 261/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0209 - val_loss: 0.0222\n", "Epoch 262/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0208 - val_loss: 0.0220\n", "Epoch 263/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0206 - val_loss: 0.0219\n", "Epoch 264/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0205 - val_loss: 0.0217\n", "Epoch 265/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0203 - val_loss: 0.0216\n", "Epoch 266/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0202 - val_loss: 0.0215\n", "Epoch 267/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0201 - val_loss: 0.0213\n", "Epoch 268/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0199 - val_loss: 0.0212\n", "Epoch 269/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0198 - val_loss: 0.0211\n", "Epoch 270/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0197 - val_loss: 0.0210\n", "Epoch 271/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0195 - val_loss: 0.0208\n", "Epoch 272/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0194 - val_loss: 0.0207\n", "Epoch 273/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0193 - val_loss: 0.0206\n", "Epoch 274/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0191 - val_loss: 0.0205\n", "Epoch 275/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0190 - val_loss: 0.0203\n", "Epoch 276/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0189 - val_loss: 0.0202\n", "Epoch 277/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0188 - val_loss: 0.0201\n", "Epoch 278/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0186 - val_loss: 0.0200\n", "Epoch 279/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0185 - val_loss: 0.0198\n", "Epoch 280/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0184 - val_loss: 0.0197\n", "Epoch 281/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0183 - val_loss: 0.0196\n", "Epoch 282/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0182 - val_loss: 0.0195\n", "Epoch 283/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0180 - val_loss: 0.0194\n", "Epoch 284/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0179 - val_loss: 0.0193\n", "Epoch 285/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0178 - val_loss: 0.0192\n", "Epoch 286/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0177 - val_loss: 0.0191\n", "Epoch 287/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0176 - val_loss: 0.0190\n", "Epoch 288/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0175 - val_loss: 0.0188\n", "Epoch 289/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0174 - val_loss: 0.0187\n", "Epoch 290/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0173 - val_loss: 0.0186\n", "Epoch 291/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0172 - val_loss: 0.0185\n", "Epoch 292/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0171 - val_loss: 0.0185\n", "Epoch 293/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0170 - val_loss: 0.0184\n", "Epoch 294/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0169 - val_loss: 0.0183\n", "Epoch 295/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0168 - val_loss: 0.0182\n", "Epoch 296/1000\n", "2506/2506 [==============================] - 0s 20us/step - loss: 0.0167 - val_loss: 0.0181\n", "Epoch 297/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0166 - val_loss: 0.0180\n", "Epoch 298/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0165 - val_loss: 0.0179\n", "Epoch 299/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0164 - val_loss: 0.0178\n", "Epoch 300/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0163 - val_loss: 0.0177\n", "Epoch 301/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0162 - val_loss: 0.0176\n", "Epoch 302/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0161 - val_loss: 0.0175\n", "Epoch 303/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0160 - val_loss: 0.0174\n", "Epoch 304/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0159 - val_loss: 0.0173\n", "Epoch 305/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0158 - val_loss: 0.0173\n", "Epoch 306/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0157 - val_loss: 0.0172\n", "Epoch 307/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0156 - val_loss: 0.0171\n", "Epoch 308/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0156 - val_loss: 0.0170\n", "Epoch 309/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0155 - val_loss: 0.0169\n", "Epoch 310/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0154 - val_loss: 0.0169\n", "Epoch 311/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0153 - val_loss: 0.0168\n", "Epoch 312/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0152 - val_loss: 0.0167\n", "Epoch 313/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0152 - val_loss: 0.0166\n", "Epoch 314/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0151 - val_loss: 0.0166\n", "Epoch 315/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0150 - val_loss: 0.0165\n", "Epoch 316/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0149 - val_loss: 0.0164\n", "Epoch 317/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0149 - val_loss: 0.0164\n", "Epoch 318/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0148 - val_loss: 0.0163\n", "Epoch 319/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0147 - val_loss: 0.0162\n", "Epoch 320/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0146 - val_loss: 0.0161\n", "Epoch 321/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0146 - val_loss: 0.0161\n", "Epoch 322/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0145 - val_loss: 0.0160\n", "Epoch 323/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0144 - val_loss: 0.0159\n", "Epoch 324/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0144 - val_loss: 0.0159\n", "Epoch 325/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0143 - val_loss: 0.0158\n", "Epoch 326/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0143 - val_loss: 0.0158\n", "Epoch 327/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0142 - val_loss: 0.0157\n", "Epoch 328/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0141 - val_loss: 0.0157\n", "Epoch 329/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0141 - val_loss: 0.0156\n", "Epoch 330/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0140 - val_loss: 0.0156\n", "Epoch 331/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0140 - val_loss: 0.0155\n", "Epoch 332/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0139 - val_loss: 0.0154\n", "Epoch 333/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0138 - val_loss: 0.0154\n", "Epoch 334/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0138 - val_loss: 0.0153\n", "Epoch 335/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0137 - val_loss: 0.0153\n", "Epoch 336/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0137 - val_loss: 0.0152\n", "Epoch 337/1000\n", "2506/2506 [==============================] - 0s 20us/step - loss: 0.0136 - val_loss: 0.0152\n", "Epoch 338/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0136 - val_loss: 0.0151\n", "Epoch 339/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0135 - val_loss: 0.0151\n", "Epoch 340/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0135 - val_loss: 0.0150\n", "Epoch 341/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0134 - val_loss: 0.0150\n", "Epoch 342/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0134 - val_loss: 0.0149\n", "Epoch 343/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0133 - val_loss: 0.0149\n", "Epoch 344/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0133 - val_loss: 0.0149\n", "Epoch 345/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0132 - val_loss: 0.0148\n", "Epoch 346/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0132 - val_loss: 0.0148\n", "Epoch 347/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0132 - val_loss: 0.0147\n", "Epoch 348/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0131 - val_loss: 0.0147\n", "Epoch 349/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0131 - val_loss: 0.0147\n", "Epoch 350/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0130 - val_loss: 0.0146\n", "Epoch 351/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0130 - val_loss: 0.0146\n", "Epoch 352/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0130 - val_loss: 0.0146\n", "Epoch 353/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0129 - val_loss: 0.0145\n", "Epoch 354/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0129 - val_loss: 0.0145\n", "Epoch 355/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0129 - val_loss: 0.0144\n", "Epoch 356/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0128 - val_loss: 0.0144\n", "Epoch 357/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0128 - val_loss: 0.0144\n", "Epoch 358/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0127 - val_loss: 0.0143\n", "Epoch 359/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0127 - val_loss: 0.0143\n", "Epoch 360/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0127 - val_loss: 0.0143\n", "Epoch 361/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0126 - val_loss: 0.0143\n", "Epoch 362/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0126 - val_loss: 0.0142\n", "Epoch 363/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0126 - val_loss: 0.0142\n", "Epoch 364/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0126 - val_loss: 0.0142\n", "Epoch 365/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0125 - val_loss: 0.0142\n", "Epoch 366/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0125 - val_loss: 0.0141\n", "Epoch 367/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0125 - val_loss: 0.0141\n", "Epoch 368/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0125 - val_loss: 0.0141\n", "Epoch 369/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0124 - val_loss: 0.0141\n", "Epoch 370/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0124 - val_loss: 0.0140\n", "Epoch 371/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0124 - val_loss: 0.0140\n", "Epoch 372/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0124 - val_loss: 0.0140\n", "Epoch 373/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0123 - val_loss: 0.0140\n", "Epoch 374/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0123 - val_loss: 0.0140\n", "Epoch 375/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0123 - val_loss: 0.0139\n", "Epoch 376/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0123 - val_loss: 0.0139\n", "Epoch 377/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0122 - val_loss: 0.0139\n", "Epoch 378/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0122 - val_loss: 0.0139\n", "Epoch 379/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0122 - val_loss: 0.0138\n", "Epoch 380/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0122 - val_loss: 0.0138\n", "Epoch 381/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0122 - val_loss: 0.0138\n", "Epoch 382/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0121 - val_loss: 0.0138\n", "Epoch 383/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0121 - val_loss: 0.0138\n", "Epoch 384/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0121 - val_loss: 0.0138\n", "Epoch 385/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0121 - val_loss: 0.0137\n", "Epoch 386/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0121 - val_loss: 0.0137\n", "Epoch 387/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0121 - val_loss: 0.0137\n", "Epoch 388/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0120 - val_loss: 0.0137\n", "Epoch 389/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0120 - val_loss: 0.0137\n", "Epoch 390/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0120 - val_loss: 0.0137\n", "Epoch 391/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0120 - val_loss: 0.0137\n", "Epoch 392/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0120 - val_loss: 0.0137\n", "Epoch 393/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0120 - val_loss: 0.0136\n", "Epoch 394/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0120 - val_loss: 0.0136\n", "Epoch 395/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0119 - val_loss: 0.0136\n", "Epoch 396/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0119 - val_loss: 0.0136\n", "Epoch 397/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0119 - val_loss: 0.0136\n", "Epoch 398/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0119 - val_loss: 0.0136\n", "Epoch 399/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0119 - val_loss: 0.0136\n", "Epoch 400/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0119 - val_loss: 0.0136\n", "Epoch 401/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0119 - val_loss: 0.0136\n", "Epoch 402/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0119 - val_loss: 0.0135\n", "Epoch 403/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0118 - val_loss: 0.0135\n", "Epoch 404/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0118 - val_loss: 0.0135\n", "Epoch 405/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0118 - val_loss: 0.0135\n", "Epoch 406/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0118 - val_loss: 0.0135\n", "Epoch 407/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0118 - val_loss: 0.0135\n", "Epoch 408/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0118 - val_loss: 0.0135\n", "Epoch 409/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0118 - val_loss: 0.0135\n", "Epoch 410/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0118 - val_loss: 0.0135\n", "Epoch 411/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0118 - val_loss: 0.0135\n", "Epoch 412/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0118 - val_loss: 0.0135\n", "Epoch 413/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0118 - val_loss: 0.0134\n", "Epoch 414/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0117 - val_loss: 0.0134\n", "Epoch 415/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0117 - val_loss: 0.0134\n", "Epoch 416/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0117 - val_loss: 0.0134\n", "Epoch 417/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0117 - val_loss: 0.0134\n", "Epoch 418/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0117 - val_loss: 0.0134\n", "Epoch 419/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0117 - val_loss: 0.0134\n", "Epoch 420/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0117 - val_loss: 0.0134\n", "Epoch 421/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0117 - val_loss: 0.0134\n", "Epoch 422/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0117 - val_loss: 0.0134\n", "Epoch 423/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0117 - val_loss: 0.0134\n", "Epoch 424/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0117 - val_loss: 0.0134\n", "Epoch 425/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0117 - val_loss: 0.0134\n", "Epoch 426/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0117 - val_loss: 0.0134\n", "Epoch 427/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0117 - val_loss: 0.0134\n", "Epoch 428/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0116 - val_loss: 0.0134\n", "Epoch 429/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0116 - val_loss: 0.0134\n", "Epoch 430/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0116 - val_loss: 0.0134\n", "Epoch 431/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0116 - val_loss: 0.0134\n", "Epoch 432/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0116 - val_loss: 0.0134\n", "Epoch 433/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 434/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 435/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 436/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 437/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 438/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 439/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 440/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 441/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 442/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 443/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 444/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 445/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 446/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 447/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 448/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 449/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 450/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 451/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 452/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 453/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0116 - val_loss: 0.0133\n", "Epoch 454/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0133\n", "Epoch 455/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0133\n", "Epoch 456/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0115 - val_loss: 0.0133\n", "Epoch 457/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0115 - val_loss: 0.0133\n", "Epoch 458/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0133\n", "Epoch 459/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0133\n", "Epoch 460/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0133\n", "Epoch 461/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0133\n", "Epoch 462/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0115 - val_loss: 0.0133\n", "Epoch 463/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0133\n", "Epoch 464/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0133\n", "Epoch 465/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0115 - val_loss: 0.0133\n", "Epoch 466/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0115 - val_loss: 0.0133\n", "Epoch 467/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0133\n", "Epoch 468/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0133\n", "Epoch 469/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 470/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 471/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 472/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 473/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 474/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 475/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 476/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 477/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 478/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 479/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 480/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 481/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 482/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 483/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 484/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 485/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 486/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 487/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 488/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 489/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 490/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 491/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 492/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 493/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 494/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 495/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 496/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 497/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 498/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 499/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 500/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 501/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 502/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 503/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 504/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 505/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 506/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0115 - val_loss: 0.0132\n", "Epoch 507/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 508/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 509/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 510/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 511/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 512/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 513/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 514/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 515/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 516/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 517/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 518/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 519/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 520/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 521/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 522/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 523/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 524/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 525/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 526/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 527/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 528/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 529/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 530/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 531/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 532/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 533/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 534/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 535/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 536/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 537/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 538/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 539/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 540/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 541/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 542/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 543/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0114 - val_loss: 0.0132\n", "Epoch 544/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 545/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 546/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 547/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 548/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 549/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 550/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 551/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 552/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 553/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 554/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 555/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 556/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 557/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 558/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 559/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 560/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 561/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 562/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 563/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 564/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 565/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 566/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 567/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 568/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 569/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 570/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 571/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 572/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 573/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 574/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 575/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 576/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 577/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 578/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0114 - val_loss: 0.0131\n", "Epoch 579/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 580/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 581/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 582/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 583/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 584/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 585/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 586/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 587/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 588/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 589/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 590/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 591/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 592/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 593/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 594/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 595/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 596/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 597/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 598/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 599/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 600/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 601/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 602/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 603/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 604/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 605/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 606/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 607/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 608/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 609/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 610/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 611/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 612/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 613/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 614/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0113 - val_loss: 0.0131\n", "Epoch 615/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 616/1000\n", "2506/2506 [==============================] - 0s 21us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 617/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 618/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 619/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 620/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 621/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 622/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 623/1000\n", "2506/2506 [==============================] - 0s 20us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 624/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 625/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 626/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 627/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 628/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 629/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 630/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 631/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 632/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 633/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 634/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 635/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 636/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 637/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 638/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 639/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 640/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 641/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 642/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 643/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 644/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 645/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 646/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 647/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0113 - val_loss: 0.0130\n", "Epoch 648/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 649/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 650/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 651/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 652/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 653/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 654/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 655/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 656/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 657/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 658/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 659/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 660/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 661/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 662/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 663/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 664/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 665/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 666/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 667/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 668/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 669/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 670/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 671/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 672/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 673/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 674/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 675/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0112 - val_loss: 0.0130\n", "Epoch 676/1000\n", "2506/2506 [==============================] - 0s 20us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 677/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 678/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 679/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 680/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 681/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 682/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 683/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 684/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 685/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 686/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 687/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 688/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 689/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 690/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 691/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 692/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 693/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 694/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 695/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 696/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 697/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 698/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 699/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 700/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 701/1000\n", "2506/2506 [==============================] - 0s 20us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 702/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 703/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 704/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 705/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0112 - val_loss: 0.0129\n", "Epoch 706/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 707/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 708/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 709/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 710/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 711/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 712/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 713/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 714/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 715/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 716/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 717/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 718/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 719/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 720/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 721/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 722/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 723/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 724/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 725/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 726/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 727/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 728/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 729/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 730/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 731/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 732/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 733/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0111 - val_loss: 0.0129\n", "Epoch 734/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 735/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 736/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 737/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 738/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 739/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 740/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 741/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 742/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 743/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 744/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 745/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 746/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 747/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 748/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 749/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 750/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 751/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 752/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 753/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 754/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 755/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 756/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 757/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 758/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 759/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0111 - val_loss: 0.0128\n", "Epoch 760/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 761/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 762/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 763/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 764/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 765/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 766/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 767/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 768/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 769/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 770/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 771/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 772/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 773/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 774/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 775/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 776/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 777/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 778/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 779/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 780/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 781/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 782/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 783/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 784/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 785/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 786/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 787/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0110 - val_loss: 0.0128\n", "Epoch 788/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 789/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 790/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 791/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 792/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 793/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 794/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 795/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 796/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 797/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 798/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 799/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 800/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 801/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 802/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 803/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 804/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 805/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 806/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 807/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 808/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 809/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 810/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 811/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0110 - val_loss: 0.0127\n", "Epoch 812/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 813/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 814/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 815/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 816/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 817/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 818/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 819/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 820/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 821/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 822/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 823/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 824/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 825/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 826/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 827/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 828/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 829/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 830/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 831/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 832/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 833/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 834/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 835/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0109 - val_loss: 0.0127\n", "Epoch 836/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 837/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 838/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 839/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 840/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 841/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 842/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 843/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 844/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 845/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 846/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 847/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 848/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 849/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 850/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 851/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 852/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 853/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 854/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 855/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 856/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 857/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 858/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 859/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 860/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 861/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 862/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0109 - val_loss: 0.0126\n", "Epoch 863/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 864/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 865/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 866/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 867/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 868/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 869/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 870/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 871/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 872/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 873/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 874/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 875/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 876/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 877/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 878/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 879/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 880/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 881/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0108 - val_loss: 0.0126\n", "Epoch 882/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 883/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 884/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 885/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 886/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 887/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 888/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 889/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 890/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 891/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 892/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 893/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 894/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 895/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 896/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 897/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 898/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 899/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 900/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 901/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 902/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 903/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 904/1000\n", "2506/2506 [==============================] - 0s 20us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 905/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 906/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 907/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 908/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 909/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 910/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 911/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 912/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 913/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 914/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0108 - val_loss: 0.0125\n", "Epoch 915/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 916/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 917/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 918/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 919/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 920/1000\n", "2506/2506 [==============================] - 0s 20us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 921/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 922/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 923/1000\n", "2506/2506 [==============================] - 0s 23us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 924/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 925/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 926/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 927/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 928/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 929/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 930/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 931/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 932/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0125\n", "Epoch 933/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 934/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 935/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 936/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 937/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 938/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 939/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 940/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 941/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 942/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 943/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 944/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 945/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 946/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 947/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 948/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 949/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 950/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 951/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 952/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 953/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 954/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 955/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 956/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 957/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 958/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 959/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 960/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0107 - val_loss: 0.0124\n", "Epoch 961/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 962/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 963/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 964/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 965/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 966/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 967/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 968/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 969/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 970/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 971/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 972/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 973/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 974/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 975/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 976/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 977/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 978/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 979/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 980/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 981/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 982/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0106 - val_loss: 0.0124\n", "Epoch 983/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 984/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 985/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 986/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 987/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 988/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 989/1000\n", "2506/2506 [==============================] - 0s 17us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 990/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 991/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 992/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 993/1000\n", "2506/2506 [==============================] - 0s 18us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 994/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 995/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 996/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 997/1000\n", "2506/2506 [==============================] - 0s 15us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 998/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 999/1000\n", "2506/2506 [==============================] - 0s 19us/step - loss: 0.0106 - val_loss: 0.0123\n", "Epoch 1000/1000\n", "2506/2506 [==============================] - 0s 16us/step - loss: 0.0106 - val_loss: 0.0123\n" ], "name": "stdout" } ] }, { "metadata": { "id": "CebcKzSW_g6P", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Let's visualize the training and validation losses." ] }, { "metadata": { "id": "U9G1OHXoroBs", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 369 }, "outputId": "d0ba7ee2-92b9-4eda-87c0-11b40ce83449" }, "cell_type": "code", "source": [ "plt.figure(figsize=(15,5))\n", "\n", "for label in [\"loss\",\"val_loss\"]:\n", " plt.plot(train_history.history[label], label=label)\n", "\n", "plt.ylabel(\"loss\")\n", "plt.xlabel(\"epoch\")\n", "plt.title(\"The final validation loss: {}\".format(train_history.history[\"val_loss\"][-1]))\n", "plt.legend()\n", "plt.show()" ], "execution_count": 0, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "metadata": { "id": "Rs_-XnYhKl_N", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Finally, let's look at the parameters for the trained model." ] }, { "metadata": { "id": "q4gtwBT7Kgh0", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 73 }, "outputId": "c212be9b-bd62-41cf-9163-33f69e306d95" }, "cell_type": "code", "source": [ "for layer in model.layers:\n", " print(\"{}, {}\".format(layer.name, layer.get_weights()))" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "hidden_layer, [array([[0.7633411]], dtype=float32), array([[-0.56165993]], dtype=float32), array([0.04831408], dtype=float32)]\n", "output_layer, [array([[2.4384913]], dtype=float32), array([-0.06346191], dtype=float32)]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "bqFBu_dCsUqi", "colab_type": "text" }, "cell_type": "markdown", "source": [ "**QUESTION**: \n", "* Relate the above weights to the terms in the equation for the vanilla RNN we saw earlier, namely:\n", " * input-to-hidden $W_{xh}$,\n", " * hidden-to-hidden $W_{hh}$,\n", " * hidden-to-output weights $W_{hy}$\n", " * recurrent and out biases." ] }, { "metadata": { "id": "0FHaN-VXfxEl", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Make predictions using the trained model" ] }, { "metadata": { "id": "IQl_msx-4o3E", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 231 }, "outputId": "7c2ac8d5-231f-47af-d227-092510c058ff" }, "cell_type": "code", "source": [ "y_pred = model.predict(X_test[:100])\n", "plt.figure(figsize=(19,3))\n", "\n", "plt.plot(y_test[:100], label=\"true\")\n", "plt.plot(y_pred, label=\"predicted\")\n", "plt.legend()\n", "plt.show()" ], "execution_count": 0, "outputs": [ { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABE0AAADCCAYAAAC8Njw/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3Xd0G9eZ9/EvGkEC7L13EqwiKUqi\nqlWtbkt2bLn37thxnE02m/Ymu2mbbKqTbNZO4liWSyw3WbZ675WkSLGBvfcCdhBt3j+oaqtSJMFy\nP+fomATAwQ/HGGDmznOfK5MkCUEQBEEQBEEQBEEQBOFycnsHEARBEARBEARBEARBGIvEoIkgCIIg\nCIIgCIIgCMIViEETQRAEQRAEQRAEQRCEKxCDJoIgCIIgCIIgCIIgCFcgBk0EQRAEQRAEQRAEQRCu\nQAyaCIIgCIIgCIIgCIIgXIHS3gHOa2npHtdrH3t4aOjo6LN3DEGwO7EvCMIgsS8IgtgPBOE8sS8I\nwqCxui/4+LjIrnafqDQZJkqlwt4RBGFMEPuCIAwS+4IgiP1AEM4T+4IgDBqP+4IYNBEEQRAEQRAE\nQRAEQbgCMWgiCIIgCIIgCIIgCIJwBbfU00Sn0yUBnwG/1+v1f/7SfUuAXwBWYKter//prTyXIAiC\nIAiCIAiCIAjCaBpypYlOp9MCfwL2XOUhrwFfA+YAS3U6XcJQn0sQBEEQBEEQBEEQBGG03UqlyQCw\nEvjul+/Q6XSRQLter6859/tWYDFQcAvPJwA2SaKqsZuc0lZqmnuIDHQlNcaHQC8NMtlVG/4KwoTU\nP2Bh1+kamtr7mRrrzZQob1RKMetQmHyaO/rILWvDQaUgMdwTLzdHe0cSBLsoqTVwNK8RZycVgd5a\ngry1BHhpUI3DxoOCMBRdfSYqG7opa2inobeJSPcQQnxdCPbR4qp1EOcLgjAEQx400ev1FsCi0+mu\ndLc/0HLJ781A1LW25+GhGZeddC/l4+MyItvt6TeTrW/mdGETmUVNdPaYLtyXXdLKxwfKCfDWkpHo\nz4xEfxLCPVEoxImjYD8jtS+cN2C2suVwBR/tLaG7b3B/OJbfiNZJxdyUQBamh5AQ4SkODAS7G6l9\nwWaTKKnp4ER+I8fzGqlp6r7s/mBfZ6bqfEnT+ZIU5YWjwy3NxhWEWzLS3wmSJJFd3MLG3cXkl7d9\n5X65DAK8tYT6uxLq50Kovwth/q4E+jiLgXZhVA33vtDTb6asxkBxTQeltQZKaww0d/SD3IKDLhOF\nSwdn2x2xFgdhbQnCReVOeIArof4uhAe4EhYwuE9oHFXDmksQrmekvxeG22gdRV33zGUsrtV8M3x8\nXGhp6b7+A2+AJEnUtfSSW95GbmkrpXVd2CQJADetA3OTA5gS5UV4gAvFNQbOlLRytqKdTQfK2HSg\nDK2jkilR3qTFeJMY4YmTWhwsC6NnOPeFL7NYbRzKbeDzIxUYekw4qZXcfVskiRGenCps5lhBIzuO\nV7HjeBXebo7MSvRnVpI//p6aEckjCNcy3PuC2WKloLKDM6WtnCltvTCArlLKSY32JjXGG5PZSl5F\nO0XVHWw+VM7mQ+UoFXJiQ9xIivAiKcKTIB+tGFAURs1IfifYJIns4la2HKuksnHwOZIjvVg+IwRk\nMupbe6lr6aGutffczw0cO9tw4e+1jkpeuTeF6CC3EcknCJcarn2hp9/Mxn2lFJ8fILmEi0ZFUpQ7\nHd6HaJc68HP0p03WhiWoDFVQGbY+b/IbAsgt9wfbxYvVqdHefP3uJBRyMYgojLyR/F64FdcayBmp\ns+l6BqtNzgs6d5twHa2Gfn7/YQ4NbYODSDIgMtCV5CgvUqK8CfFzRi6T0dTbzN66ncjVMsJSnYid\nqsbQqaCucYCK2m6Ol3dwvKQCheTA1JgAnl6VgFJUnwjjlM0mcbygkc8OV9BiMOKgkrNqVhjLM0LR\nnrs6EubvzLLZfmRX1pBZUU1pcy3bqnPZ3mBE42JBrTGj84rgvrg1aFROdn5FgnDjyuo62X6imryK\ndgbMVmDwwHhucgBpMd4kRHiiVilo7W+jw2ggJtYTOX40NBspre6hqLKHgsoOCio72LgPPFzUPLgk\nhnSdr51fmSAMjdVm42RBM1uOV1Hf2osMmKbzYdWscML8Lx70xod5XPi5z9xHdUcLZS1N1BpaaO5t\no7atm9e2Gvjhvbfj6y6+F4Tx4b3dxRzPb0LrqCQx3IPwAFfC/V0I93fFzVnJ3/M3UNZaR7J3As8k\nPYJFsnKm+SzHGk5RQjkOUa04yIsJVsXg3B9JbZWSM6WtbD9RzapZ4fZ+ecI4tX//HhYsWGzvGCNm\nRAZN9Hp9pU6nc9XpdOFALbAaeGgknmsi6e4z8duNOTS195Gu82FqjA9JkZ64aBwue1xuSz7rCz7A\naDV+dSNKIBwunc2ea1Lzf4dn8MK8lSjk43sKlDC5SJJEVnErnx4qp761F6VCxpL0YFbNCsPNWQ3A\nobrj7Krah2GgC6s0eEKJGuQhFztdm4ABs4LTLVkUG8p4ZspDRLqF2+MlCcJNqWjo4jf/OsOA2Yqf\np4a0mMEqwqhAN+TywWoRq83KlvKdbK/ai02yfXUj4aCNkKNABVYF/QNy3jiZz2PWFcxOCBndFyQI\nt8BssXHkbANbj1fR2mlELpMxO8mflTPDCPTWAmCxWThaf4qG3kbajR20Gw20Gw1fPWZSgtIPrH5V\n/OxoPvckLWZW8FRUclGdK4xdOaWtHM9vIiLAlR88kn7hewDAJtn4Z/57nG0tJM4jhqcSH0IhV6BA\nQUZAOhkB6bT0tXG88TQnGjIpH8gDeR4+CT44V3rz2ak+UqO9CfJxtuMrFMajhoZ6du/eMaEHTWTS\nuWkfN0un06UDvwXCATNQB2wGKvR6/ac6ne424FfnHv6xXq//zbW219LSPbQgY8StlhkNmK385v1s\nyuq7WJERyr0Lo7/yGJtkY1vlHrZW7EIlV7Iu9i6CnQPos/TTbzHSb+kf/NncT9+537tNfRS1loLC\nipfam3t1q0nyihel2cKIGa6Su+aOPl7fnE9FQzcyGcxJDuDOOeF4u128GljeWcXvMv8XB4UKf60f\nHmo33K/wT2ZRsz+7kZ3Ve1AGliGXyVgduZSlYQuRy0QFljAybnVfaO7o4+cbMunpN/PCmiSmxX21\nMqSxt4n1Bf+iursOD7U7Gf5TMdnMDFhNmM79Gzj3z2QzMWAZoHOgB7NkQjKrmOE1mwfTbsdB4XCF\nBIJw64brO6G7z8Qv3smiqb0PpULOvCkBrMgIxfuSChFJkniv6COONpy6cJujQo2noweeju54nPuv\np9odTycP+i0DfJCzi1apGpkMnFXOzAvKYG7QTNzVYsqOMLxudV/oH7Dwo3+coLPHxI8fn06w78XB\nDZtk493CjzjeeJootwheSn3qmp/rNsmGvr2UYw2nyGnNx2KzAKA0ubNMN4N0vxT8ND5DzipMLt/5\nzisUFubT2dnJ0qUraGio58knn2XTpo/42c9+DcCqVYvZsmUPFRXl/PnPv8VisaHRaPj+93+Ci8vY\n6G/i4+Ny1RPkIQ+aDLfJPGhitdn488dnySlrY1aiP0+tjkf+pUGNfks/6ws+4GxrAZ6OHjyb/Cgh\nLkE3tP2jRVWsz96M0rcWZBIx7pHcHb2aUNfgIeUVhGsZjgNks8XGz98+TXVzD9PjfFk7L4IAL+1l\njzFajPzy1B9p62/nlbTniPGIvO52Txc187f9h1CEn0HmMECsexSPJd4vDo6FEXEr+0JXr4lfbMik\n2dDPI8t0LEy7/PPeJtk4UHuUz8q2YrZZyPBP597YO3FSXn+KgdEywMf5uznSdASZ0oKTXMsd0bcz\nO3CGuMouDLvh+E6w2mz87oMcCqs6mDclgLtui8T9XLXhpfbXHOHDks8IcQ7k4fh1eDp6XHc6pk2S\n+ONnxyjsPYOjfz1WmQm5TE6aTzLzg+cQ6RYmLjQJw+JW94UNO/Xsy6rjzjnhrJ138ZhHkiQ2Fm/i\nYN0xwlxCeDntGZyUN76CWp+5j5zWAjafPUKnvB6ZfPCULFDrT5pvMmm+UwjQ+g05tzC6Nu4t5VRR\n87Buc3qcL+sWffWC/nlZWaf55JONREREUV1dyX/+5y8v3PblQZNXXnmBX/ziZ2i1XnzyyYd0d3fx\n2GNPDWveobrWoIk4OrIzSZJ4e7uenLI2EiM8eWJl3FcGTBp7m3nj7Hqa+lrQeUTzZOJDODtor7LF\nr5odF0aufiGnzpYTllZLiaGcX51+jel+U7kzahmejh7X34ggjKKPD5RR3dzDbSkBPL4i/sqPKfmc\n1v42loYtvKEBE4Bpcb54uCzhj5vcMflnU0wZvzj5ex6JX0eyd8JwvgRBGDKjycIfPsyh2dDP6tnh\nXxkwaTd2sKHwQ4o7SnFWaXk84QFSfZNvePuOSjUPpaxiSmU6fz26mT6fCjYWb2J39QFWhC8hw3+q\nmMopjCkf7iujsKqDtBhvHlvx1eMkgKL2Ej4u/RwXB2eem/I4Ho7uN7RtuUzGi6sy+PV7DlRktpM+\n04xBrSezOYfM5hxCnANZGXE7U3wSh/tlCcINK64xsC+rjgAvzWV9RyRJYlPZVg7WHSNQ68/XU5+6\nqQETAI1Kw6yAaSS7p/CDNw9jdKwjPmWAip4ytlTsYkvFLvw1vqT5TmFB8JybOgcRJp/4+Gt/VhYU\n5POjH/0Ik8mC2WwmPn58HH+LQRM7++xwBYdyGwjzd+HFtUlfadY62L/kXxitAywOuY01USuGdDD7\n4JJY8v/WTv1pV55cN5+9Dbs41ZTFmZZcFobMY2nYwpv+kBWEkZBX3sbOUzX4e2p4YHHsFR9zpiWP\now2nCHEOZFXE7Te1/aggN3740Gz+8KGGls4iZGF6/i/3LRYGz2VN9EpxpV2wK4vVxl835VPZ2M3c\n5ADumhdx4T5JkjjZmMXG4s8wWo0ke8fzYNw9uDoMraw1OdyfV+T38vtPT4JvGZ1+Nbxb9CG7qvex\nKmIpU32niOlrgt0dz29k56kaArw0PL064YoDJs19Lfwj7x3kyHg2+bEbHjA5T61S8I17pvCz9afJ\nPGrk6dUP4B3bx4HaI+S05PO3vA18f8ar4mq7YBdmi5V/bitCBjyxMv6yZbK3Ve5md/UB/DQ+vJz2\nDFrV0FcLdHZS8fjtSfzpE4nufFd+/sADFLXryWo5S0FbEdsqd1PRWcXLac8Mw6sSRsq6RdHXrAoZ\naSrV4AINX67Qs1gGp4A5Ojry9ttv09raM+rZboU4GrKj/dl1bD5SiY+7I9+8N+WypYFtko0t5Tt5\n/ex6rJKNJxIe4O6Y1UO++ueqdeDBJbGYzDYOHTHxnWkv82j8fWhVWnZW7eMnx35FdvPZ4XppgjAk\nXb0m/r6lEIVcxnN3JqJ2+Or7vXOgi/eKPkIlV/JY4gMohzDI4evuxA8emUaMYwr9eTNRmF3YV3uY\n35z+M029w1vSKAg3SpIk1m8v4mx5G8mRXjy6XHfhoKPb1MPf8zbwduEHSNh4KO5enkt+fMgDJufp\nQj14Ze0MqEvAmDuPBOdUWvvb+Wf+e/z61Gt0Doy9JQGFyaOqsZu3thXhpFbw0t3Jlx0nnddv6ef1\n3PX0Wfq5X3c3kW5hQ3ouN60D31w3eCz21rYi6PHimeRHeTb5UWySjY9LPmesTGkXJpfNRyppau9j\ncXrwZctj764+wJaKXXg5evJy6jO3/H0AkBbrw8xEPyoaujiU3cI0/zSeTX6U/577Y6LcIijqKKG+\np/GWn0eYWORyOVar9bLbtFotbW2tAJSWltDXN7gybHR0DAcPHgRg9+4dnD59cnTDDpEYNLGT7OIW\nNuzU4+yk4lvrUnHTXmzW1G/p542z69lauRsvRw++nf51pvmn3fJzzkz0IznSi/zKDo7nN5MRkM6P\nZ/47d0Yux2Qz807hRoyWK6zIIwijQJIk/rGlkK5eE/csiLps2chLH/NO4Yf0mvtYG73qlq76aR1V\nfOu+VGZFxdKTk4HSEEZtTz3/feqP5LUW3spLEYQh+fRQBUfONhLu78ILaxMvVB7q20v5+cnfcaYl\njyi3CL4/41vMDpw+bH0W4sM8+MY9U5BZNOQcCOT+oKdJ902hpqee94o+EieKgl1095n48ydnMVls\nPLM68St9rWDwAtNb+e/T2NfMopB5zAqcfkvPGeSt5et3JSFJ8KePc2ls7yPZO4E4jxgK24vJaxPf\nDcLoqm7qZtvxarxcHbl7/sWpyAdrj/Fp6Rbc1W58I+3Zm66uupYHl8TiqnXg04MV1Lf2AoPTOheH\n3gbA/trDw/ZcwsQQFhaBXl9Eb+/F6pHo6FgcHZ14/vkn2bFjK/7+gQC88sq3ef3113nppWfZuvUL\nYmN19op9U0Qj2GFyM82dims6+O1Hp5E5GLn39mAcnU0YjJ0YBjrpGOikvqeBTlM3cR4xPJH0IM6q\n4Zs72NrZz4/+fhKlQsbPnpl5YbBmW8VuvqjYyX2xa7ktePawPZ8w+Qy10dmu0zW8v7uExAhPXl2X\ncsUS7AO1R9lYvIkETx0vpjw5LCeNkiTx+ZFKNh2uwMm3GWXEWeQy+Fb61wlxCbzl7QuT183sC/uy\n69iwQ4+vuxPffyQd13OfzY29zfzP6T9hsVm4I2o5i0LmjdiUmfyKdv74US4yGbz8tWT2Gj5G31HK\nQ3H3MvsWT0aFyetG9gNJkpCQLry3L238unZuBHfOjbji320q3cqu6v3Ee8bywpQnhq0Xz6Gcev65\nrQhfDyd+8Eg63bZ2fnnqD3g7evKDjG8NqcJREG72+Mhqs/Gz9ZlUNXXzrftSSIrwAgYH0l878wbO\nKi2vTn0Bf+1XV1a7VVnFLfz5k7NEBrry/YcHlza2STZ+cuzXdJm6+NmcHwzr+YkwuQzXqmrD7VqN\nYBU/+clPRjHK1fX1mX5i7wy3QqtV09dnuuZjtlTs4p2Cj9jXsAd5QClyn2oKu/I421pIiaGcmp56\nWvvbkMvkLAqZx0Nx9+Co/Gp3+FuhcVThpFaSWdxCW5eR6eeWsPTT+nCg5ggt/W3cFjRLdIoXhuxG\n9oUvq2nu4a+b8tA6qfi3+1KvWILd2NvE3/M24KR05KXUp3Ecph48MpkMXagHvu5OZOb2Y+nVgEcd\neW2FTPNLG/Z9UJg8bnRfyCpu4R9bCnDRqPjug2l4ug6+t40WI6+d+Rudpi4eS3yAuUEzR/Sz2dfD\niYgAF04UNHOysJk7U9LR95ylsF3PNL/U665CIghXciP7wYbCjWwo3EivuQ9/rS+fH6rleEETaTHe\nPLxMd8X3/cnGLD4p/QJfjTcvpTyNWjl8y2aH+btgsdo4U9JKaV0nt6dG0Wfto6Bdj0bpNOQpQMLk\ndrPHRztOVHM0v5E5Sf4szxh8z9kkG2+cXU+PuZdXpj5L8Ahd3Anw0tLY3kdeeTuODkqig92QyWRI\nko28tiK0Sg1R7lcezBSE6xnKucJo0GrV/3m1+8T0nFFitAywo3Ivbf0GbEYtQQ6RzAuaxR2Ry3gk\nfh0vpz7D/8v4Nr+97af85rb/GnLD1xuxcGoQ0UFunC5qJqu4BQBXBxfSfFNo7GtG31E6Is8rCFcy\nYLby+uZ8LFaJJ1fG43aFZSQtNgtv5b+P2WbhQd3XcFO7DnuOWUn+/Nt9qdg6/NG0J2IY6OT1s29h\nspqH/bkE4bySWgOvb87HQangm/em4Osx2MRPkiQ2FG6k6dy0g2l+qaOSJynSi5fuTkaSJN7cVMmy\noOUYrQNsKNyITbKNSgZhcukc6OZUUzZG6wB7ag7yo6P/zd7WLfj4m6/a+LWyq5p3iz7CSenI88mP\nj8iA3l23RTIj3pfS2k7+ua2IlRG3o1E6sbViN92m8dXAUBh/mtr72HS4AleNivsWx1y4/Wj9Sep7\nG8kISCfcNXREMzy4JAZXjYpPDpbT0DY4TWdW4HTUCgcO1B3FarNeZwuCMHGIQZNRUtReilWyYm4M\nY5XXw3x/7vPcr7uL5eGLmRkwjTjPGPy0vqNyVVsuk/H4ijiUChkbdurpMw6eFM4/Ny1nf+2REc8g\nCOd9sLeU+tZelqQHkxLtfcXHbKnYRU1PPbMCpt/U0qo3SxfqwfR4X9pKg4nVJlLVVcM7hRtFTwdh\nRDS19/HaR7lYrRIvrE0iIuDiYOCu6v2cackjxj2StVErRzXXlCgvHl0Wh8lio6XCiyneiZQYyjlQ\ne3RUcwiTw6mmLGySjbujV7Mi8A5s/RqU3vX0hO7hzaL1FHeUXvYZbBjo5I3c9VhtVp5IfBC/EZia\nAIPHSk+tiicy0JXj+U2UVPaxKmIpRquRz8t3jMhzCgKATZJ4a1sRZouNh5bqcHYaXI2k32Lki/Kd\nOCgcuDNy+YjncNE48MiyOCxWG29uLcRmk3BSOjEzYBqGgU5yWvNHPIMgjBVi0GSU7CjMAiDeM5ZV\ns+xf1hnoreWO2eF09pjYuK8MgAi3UMJcQshrLaS1v93OCYXJIKu4hf3ZdQT7aLl3YdQVH1PSUc6u\nqv14O3pyT8wdI55p+YxQQIaxLIFItzAym3PYVrl7xJ9XmFzOr5TTa7Tw2HIdU6K8LtxX1F7C5rLt\nuKvdeCrp4RGrOryWmYl+uDs7cDSvkbsj1+Cs0vJZ2VYaxepSwjCSJIljDadRyhQku6dwcJ8C49k5\nLPW+myi3CAra9Pwx+w1+ffpPZDXnYrQM8Ebu23SaulkbvZJEr7gRzadSKnhiZTwKuYz3dpUww2c6\n/lo/jtafpKa7fkSfW5i8DubUo68xkBbjzTSdz4Xbd1bto9vcw9LQhSNScXsl6TofZsT7UlbXxa7T\nNQDMDxq8yLqvRjSEFSYPMWgyCmqbe6jqKQebgqcWjJ1+IStmhhHso+VgTj2FVR3AYLWJhMShumN2\nTidMdB3dA/xzayEqpZzn7kxEpfzqiWG/pZ+3Cz8A4LHEB4atj8m1hPm7kBjugb66m2W+d+Pl6MGW\nil1kNuWM+HMLk8epomaKqg2kRHkxL+XinPS2/g7ezH8XhUzO00mP4OLgbJd8SoWcBalB9A9YySvp\n5QHd3ZhtFt4u/ECUZAvDpqq7hsbeJpK8E3h7azmtnUbunBPBmikz+Vb6C3w7/euk+iRR013HP/Le\n4XtHfkpVdw0Z/uksDrltVDIGeWtZNiOUti4jW4/XcE/0HUhIfFyyWVQhCsOuo3uAD/eV4qRW8PDS\ni/182vrb2VtzCA+1+4VVbEbLQ7fH4nLJNB0/rS8JXjrKOyup7qod1SyCYC9i0GSEWW023thxGplT\nL6GacFw1Y6eRnlIh54mV8chksH5bEQNmK1P9UnBROXO0/iQm69hr0CNMDDabxN8+z6fXaOH+RdEE\n+Vz5xHBj8We0GztYHr5oVBvvLZ85+FyHMtt4fsoTqBUObCj8gKqumlHLIExcRpOFD/aWolTIeGDJ\nxbnqJquZv+W9Ta+5j3tj1xDhNrLz1a/nttRAFHIZezNrSfFJYrrfVKq6athZtd+uuYSJ41jDaQDM\nzUEUVHaQGu192Uo5EW5hPJP8KD+a+W3mBmZgk2xEuoXzgO7uUb0AdceccLxcHdlxshpXKYgkr3hK\nDOWcackbtQzC5LBhh57+ASvrFkbj4XJxyv6msq1YbBbWRK3AQaEa1UwuGgceWarDbLGxYYceSZJY\nGDwXgH1i+WFhkhCDJiNs+4lqGkxVAGSEJNk5zVdFBLiydHoIzYZ+Pj1YjkquZE5QBn2Wfk41Zds7\nnjBBbT9ZTVG1gdRobxakBV243WgxUtCmZ3PZdn6b+b+cbMwizCWEFeFLRjVfQpgHob7OnNY3ozS7\n8mTiQ1hsVl7PfYsOo2FUswgTz5ZjVXR0D7A8I+yyxq8f6D+lpruO2QHTmROYYeeU4O6sJl3nQ11r\nL8U1BtbFrsFd7cbWyl3UdNfZO54wzpmsZjKbzuAo03L6lESAl+aqjV/9ND48EPc1fjX3x3wz7TlU\no3zSqFYpePD2GKw2iXd36rkrehUKmYJPS7/ALJqFC8NEX93BmdJWdCHu3HZJBWKZoZKs5lzCXENI\n90uxS7Zpcb6kRHlRVG0gu6SVeM9Y/DS+ZDbl0Dkw9paOFcanH/7w38nKOs3WrZ9z4MC+qz5u374b\nnzb/8ccf8I9/vH7L2cSgyQiqa+3ls8MVOHoOTn2J94y5zl/Yx9p5kfh6OLHzVA3H8xuZG5iBXCbn\nQO1RUXoqDLuCynY+PViOu7MD9y0N5WxrAZ+UfMGvTr3Gdw79hL/k/IMdVXup6KwiwjWMxxMfGPWe\nDjKZjOUzQ5Ek2HGqhiTveO6OXkWnqZvXc99iQFRhCUPU2N7H9hPVeLmqL+tvdbj+OMcbTxPqEsy6\n2LVjZhrnoqnBAOzJqkOjcuLhuHuxSTbeLvgAs81i53TCeJbbkke/xUhPnS+uWjWv3puCxvGry81f\nylGptkuPH4C0GB9So70pqjZQXmFlQfAc2owd7Kk5ZJc8wsTz2eEKAO5ZEHXhO8Am2fi45PPB22Pu\nQC6z36nbukXRKOQyNu4txWKVWBA8B6tk5bCY0i8Ms5Ur72D+/IVXvM9sNvPBB++NciK49reTMGQ2\nm8Q/txZisdrQurejdXDHV+Nz/T+0A7VKwctfm8IvNpzmza1FfPfBNFJ8kshuzqXUUEGMR6S9IwoT\nRHVTN3/+/CSKkHKcQ3r5r9ObL9ynkCkIdw0h2j2SaPdIIt3CcBqFHiZXMz3Ol4/3l3Mkt4E1cyNY\nGDKPxr5mjtSf5O2Cf/FU0sN2PXgRxh9Jknh/dwlWm8R9i2JQqwZP/so7q/iweDPOKi3PJD8y6lfR\nryUm2I0QX2ey9C10dA8Q7xXLvKBZHKo7xpbynayNHt2VfYSJY2/lcQDkhlC+ee8UvN3HzvTlq3lw\nSQwFle1s3FvKD5+cz4nGTHZU7WVmQDruajd7xxPGsaKqDoqqDSRFehIVdPG9dLrpDFXdNaT7phDp\nFm6/gECAl5aFU4PYfbqWPZm1LJyWzuby7RyqO87S8EWo5OK0cjLbuvVzTpw4Sm9vLy0tzaxb9yAb\nNvyTmTPn4OHhwapVd/LLX/4Ui8WMo6MDr776Pfz9/Xn33fXs3r0Df/8AensHl7b+xz9ex93dna99\n7T7+8IffUFCQh0Kh4Dvf+R5dkHJXAAAgAElEQVSffvoxZWWl/OY3/82rr36HX//659TX12GxWHj6\n6edJT5/O6dMnee213+Lp6YWXlzeBgUHXSX994t09QnaeqqG8voukRAVlkpFpnlPGzJXDKwny1vLC\nmiR+/2EOf/rkLI/cNY3s5lwO1B0VgybCsKhsaeG3Bz+C+EoUcokui5JY9yiiPSKJcY8g3DUUB4WD\nvWNeoJDLWTojhPd3l7A3s5a18yJZF7uW5r5WzrTk8UX5Tu6MGvkl/4SJI6e0jbPlbSSEe5B+bkWE\nzoFu/n52AzbJxpOJD+Hp6GHnlJeTyWQsmhrE+u16DpypY+28wSWQC9uL2V19gGTvBKLcw+0dUxhn\nihvrqeqtwNbjzgsrMgj3H52VQG6Vt7sTd8wJ5+MD5Ww7Us8dSct4X/8Jm8u282jCffaOJ4xjm48M\nVpmsuaSnj8lq4rOybSjlStaM8tLzV3PnnAiO5TXy+dEKZif7MztwOnuqD5LVlENGQLq94wnAJ6Vf\nkN18dli3meabzN3Rq6/7uIqKct588116enp4/PEHkMvlzJw5m5kzZ/PLX/4X99//ENOnZ1BQkMX6\n9X/nxRdf4dNPP+Lddz/CarWwbt3ay7Z36tQJmpubeOONtzhzJos9e3bx4IOPUFCQx7e//R9s374F\nLy9vvve9/4fBYOCVV55n/fp/8frrf+ZHP/opMTGxfPvb3xiWQRNxmXQENLb38emhclw0KiJ1AwDE\ne8XaOdX1JUV68eCSWLp6TWza0UmgNoCcljzRw0G4JX3mPj7Sb+F/cn6HzasCrcKFh+PX8T+3/Rev\nTH2OVRG3E+sRPaYGTM67bUogWkcle7PqGDBbUcqVPJP8KD5OXhemEAnCjTBbrLy3uxiFXMaDS2KR\nyWRYbVbezH+HTlMXa6JWoPOMtnfMK5qZ4I+TWsn+M/VYrDYclWoeiV8HwNuFH2C0DNg5oTCedPWa\n+OvBHSCDGX7pTInytnekm7JsRigBXhr2Z9cRIIsjyDmAE42ZolG4MGTnq0ySI72ICrxYZbKn+iCG\ngU4WhczDy2lsDKg7O6lYOy+S/gErmw5VMD9oNjJk7K89LKb0C6SmTkWpVOLu7o6LiwudnQYSEhIB\nyMvL5c033+Cll57l9ddfp7Ozk7q6GiIiIlGr1Wg0WnS6+Mu2V1xcRHJyyoVtP/PMC5fdn5eXy6FD\n+3nppWf54Q//nYGBAcxmMw0NDcTExF74u+EgKk2Gmc0m8ebWQswWG8+sTuBg98fIkKHzGJsHw1+2\nOD2Y+rZe9mXVEd4Uhs25gcN1x7lDXFEXbpLRYmRfzRF2Vx/AaDUiWdTEOszipfkrUY6TEk61g4JF\nU4P5/Gglh3MbWJwejFal4Z6YO/lr7j8505JHxCiu6iOMX9tOVNPaaWT5jFACvbVYbVY2FG6k1FBB\nmk8yS0Ln2zviVakdFMybEsDOUzVk6lvISPAj2j2CxaG3sbv6AJvKtnK/7i57xxTGgQGzlT98lIPR\npwolSu6fNnbf91ejVMh5ZKmOX7+fzTs7S7j/zjt57czrfFi8mX9Lf3FMVxULY9P5XiaXVpkYBjrZ\nWbUPFwdnloVdubeDvcxPDWRvVi0HztSxKC2IKT6J5LTkUd5ZJSoPx4C7o1ffUFXISLDZLg6cSdJg\ntapSOTjlWKlU8dOf/gpvb298fFxoaemmsDAf2SVT3SXJdtn25HLFV267lFKp4tFHn+T22y8/T5XL\nL93m8AzmiUqTYbYns5bS2k6m6XxIjHaloquKMNcQtCqNvaPdsAeXxJAQ7kFlkQtK1ByuPyG6wws3\nzGQxsaf6ID8+9iu+qNiB2SxhrtYxxXwP31h4x7gZMDlvcXowKqWcHSersdoGP7hjPaJRyVWcbS20\nczphPGg19LPlWBVuWgfumBOO1Wbl7cIPONWUTYRrGA/HrxvzJ1oLz61ytTer9sJtqyOW4qfx4XDd\ncfrMffaKJowTNpvEG5vzqe6pQu7YxzS/KXbtW3Ur4sI8mJXoR1VjN7UValJ9kqnoquJ00xl7RxPG\nmaKqDvQ1BqZEeREZeHGa2udlOzDZzNwRuQzHMbafKBVy7l8cgyTB+3tKWBA0BxDLDwuQn5+L1WrF\nYDDQ19eLq+vFyqmEhCQOHdoPwLFjx9i5cztBQcFUVVVgNpvp7e1Br7/8uDo+PoGsrMGl6YuLi/jt\nb3+FTCbHarVe2ObhwwcA6Oho5/XX/wKAt7cP1dWVSJJEdnbmsLw2MWgyjJo7+vj4QBnOTioeXqqj\npKMMm2Qbs6vmXI1CLufFtUn4u7vQ3xBIj7mXrOZce8cSxoEzLXl8Y+uP+aT0Cyw2C0GWNHqy5hGj\nnsrTK5OvuJTkWOeqdWBOcgCtnUYy9S0AOChUxHnG0NTXTHNfq50TCmPdB3tLMVtsrFsYjYNKxvqC\nf3G66QyRbuG8lPoUjkq1vSNel5+nhqQIT0pqO6luGlxeUqVQMc0vFQmJ4o4yOycUxjJJknhvdzHZ\nJa14hQ9+js4KnGbnVLdm3aIYNGolnxwsY0ng7ShlCrZW7sJ2jauigvBl56tM7pxzscqkuruWE42Z\nBDkHMCtgur2iXVNypBfJkV4UVnXQ2+pKkLOY0i+Av38gP/rRf/DKK8/z7LMvXlbx8dRTz3Lo0H6+\n/vVn+Mtf/kJSUjKurm6sWLGa5557gl/+8qfExSVetr3U1KmEhUXw4otP84c//Ia1a7+Gt7c3FouZ\nH/7wuyxatAQnJw3PP/8k//7vrzJlSioAzz77Ij/84Xf57ndfxdfXb1he2/i65DuGDa6WU4TJYuPx\nlXG4ah0orC0BIM5z7Pcz+TKNo4pX7p3CT98zYPOvYEf5QdHgSbimAauJt/LfRyaD20MXYG2MYEtW\nAyG+zrx0dzJKxfgdo102I4QD2XVsO1HN9DhfZDIZyV7xnG0tIK+tkEWaefaOKIxReRVtZBa3EBPs\nxvR4b/5Z8D7ZzblEuUXwYsoTY+4K4rUsSg8mr6KdvVl1PL4iDoB4z1i2VOyisL2YVN9kOycUxqrt\nJ6vZm1VHkK+aHm0dXg4eRLuP7ybzbloHvjY/kg07i9l1tI1pUWkcbzxNflsRyd4J9o4njAOFV6gy\nkSSJT0q+QELi7ujVY3qVvvsWRZNf0c7GfaWsWj2H9/UfcaD2qFhVbRILCgrmpZe+eeH35ctXXfjZ\n29uH3/3uzwAXpucAPP740zz++NOXbWfq1IuD6i+//OpXnueddz688PN//MePvnL/+eazw2ns7onj\nzLZjlehrDKTFeJMRPziiVdRejKNCTYRrqH3DDZGfh4aXVmcgGXxpGmggq7bY3pGEMSy/rQizzcxq\n3RK8+lLZcrgBL1dHXl2XgpN6fI/P+nloSNf5UNXYTVFVBwCJ3oMnjXliio5wFWaLjfd2lSCTwf1L\noi4MmES7R/BiypPjasAEYEqkF95ujhzPb6TXODhlM9QlGCelI4XtJXZOJ4xVB7Nr+XBfGR4uauYv\nkGGymcgImDamTwZv1PzUIML9XTie30S4cgow2LxTEK5HkqQr9jLJac2nxFBOsnc8cWO8Uj3QW8vC\ntCCaOvrprvXGWaXlSP0JTFaTvaMJwrAb/99YY0CroZ+3vshH66jkkWU6ZDIZrf3tNPe3EusRjUKu\nsHfEIYsL82BR2FwA3s7cQZ9R9DYRruzMueXNXM1hrN+mR+uo5Fv3peDuPPanHtyI5RmDDV+3nagG\nwF3tRqhLECWGcvotRntGE8aozw+V09jex/w0f3a1bOZMy1li3CN5MWV8TMn5MrlcxsKpQZgsNo7k\nNgCgkCvQeUTTZmynpa/NzgmFsaa8vovfv5+Nk1rBq/emkNuRA8BM/4lRuSqXy3h0uQ4ZsG2/AZ17\nDCWGcqq7a6/7t8LkllfZQklLLZFx/VRYcthY/Bn/m/Mm7xZ+iFwm5y47NfK8WWvmRaBRK/niaC0z\nfKfTZ+nnZGOWvWMJdrBy5R2XVZlMNGLQZBgczK3HaLJy/+KYCyeIhe2DVRnjrZ/JldyTnoEGd0za\nWv60+fSFZpiCcJ7JauZsWyHuKg/e/LAahULGK/ekEOCltXe0YRMZ6IouxJ28ivYLPR2SvBOwSbYL\n+7sgnNfRPcC/dhWh1Sjo9jlBTksesR7RvJjyJOoxuLz2jZo3JRCVUs7erDps5zrSn5+CKvYD4ct2\nnKzGYrXx3J1JODgbKeusINY9Ci8nT3tHGzbh/q4snBpEY3sfrn06APZWH7JzKmGsKeko439PvM3v\ns/7KD478jP+r+A2OUw7T4HqAj0s+50DtEfLbipAh4+7o1fhpfOwd+YY4O6lYMzeC/gELhip/5DI5\n+2uPiOWHhQlHDJoMg4VpwXz/8RnMTvK/cFvRuYPH8djP5MtkMhmrYhYgk0uUGc/yxdEqe0cSxpjC\ndj0mq4nuBi/MZhvP35lIdLDb9f9wnFkxc3Cq3Y6Tg9UmyV6D68mLKTrCl324v5R+kxn/tEIKOgqJ\n84jhhSmP4zCOB0xg8AB5RrwvzYZ+8ivagcG+JnDxe08QAIwmCzmlrQT5aEmO9OREw+AKCDMDxncD\n2Cu5+7ZInJ1UnDol4efkS2ZzjmiIKVwgSRIbCj9kf+UxygyVWK1g7fLE1RjFmsgVPJX0MN+d9g3+\nZ95/8uvbfsLCkLn2jnxTFk4Nwt9Tw9FsA3GuCTT0NqHvKLV3LEEYVmLQZBh4uKiZlRxwYclIq82K\nvqMUL0dPfJy87JxueMwMSMdRoUblV8POU5UX5rMLAkD2uak5vU0+rJkfTVrs+LhCcrOSI70I8tZy\noqCZ1s5+QlyCcHNwJb+tSKyYIFxQWtvJ8YJ6PJLzqDeXE+cRw3MTYMDkvMXpwQDszRycguDt5Im3\nkxf6jjKsNqs9owljyJnSVkwWG/NSg5GQON6YiaNCTdoEbBiscVSxIiOU/gErXqbBCsQDtUftHUsY\nI2p7GmgztpMRnMbv5v8M9+oVmIpm8GzaAywNX8hU3ymEugajUTnZO+qQKBVy7lsUjSSBoSIQgH01\nYvlhYWIRgyYjoKq7ln6LkXjPmAsDKeOdo1I9uOyZagCTcx27TtXYO5IwRphtFs62FoDJCZXJna8t\njLZ3pBEjk8lYnhGKTZLYdaoWmUxGknccPeZeKruq7R1PGAMkSeLdg2dwiMnG6FhPvGfsuQETlb2j\nDZtwf1ciA13JLWujxdAPDFabGK1GqrrFd4Mw6GRBMwC3pQWhby/FMNDJVN+UCTN4+GULpwbh7KSi\nINsJZ5WWw/XHMVoG7B1LGANyWgYvLM0OTaesppvi2k5SoryICHC1c7LhMyXKi8QIT8pK5fg6BJLf\nVkRzX4u9YwnCsBGDJiPgYj+T8T8151Lzg+egkClwCCtkV65eNIUVANC3l2C0DmBu82NRWghuE6Tx\n69VkJPjh4aLmYE49Pf3mC0tLnhVTdCa9pr4W/nh8A02+W1G4t5IWkMhzyY9NqAGT8xZNDUIC9mXX\nARf7dxW2iSk6AvQazZwtbyPE15kQPxeONZwCYFbgxJuac56jg5IVM0PpN0r4WuPptxgvvG5hcstp\nyUcpV5Lql8Cmcyvm3HnJijkTgUwm4/5F0chk0F09WF22X1RbCROIGDQZAUXtxchlcmI9JtYVdx+N\nF/fr7galGVvYKbafqrB3JGEMyGzKBUDeGcDyjPG5vPbNUCrk3D4thAGzlb1Zteg8olHJlaKvySRW\n013PP/Le4afHf0NJfx4MaFgTupZ/n/sCqgk4YAIwPc4XF42KQzn1mMxWYj2ikMvkYulhAYAsfQtW\nm8SMeF96TL3ktObjp/EhwjXM3tFG1KK0YFw0Kspz3VHKleyrOSymbk5yzX0t1Pc2Eu8ZQ3FlDyW1\nnaRGe0+oKpPzgnycWZAaRHuNO44yLccbTtFv6bd3LEEYFkMeNNHpdL/X6XTHdDrdUZ1ON/1L91Xq\ndLpDOp1u/7l/QbcedXzoM/dT2VVDuGvIuJ2beC2zA6czJ2Amck0Pe1q+ENUmk5zFZiG7OQ/bgCML\n4hJx1U7Msusvm58aiNZRya5TNdiscnQe0dT3NtLW327vaMIoKu+s5K85b/Lfp/5AVnMurnJvBkpS\nme1wP0ujZ4/r5eavR6VUcFtKIL1GCycKm3BSOhHuGkJVdw19ZnGQPNmdLGwCYEa8H0erM7HYLMz0\nnzZhpixfjdpBwYqMMPr7lPhJMbQZ28lpybd3LMGOzv//n+KdyHs7iwC4c264HRONrDVzI1ArVZgb\nQxmwmjhWL6qthIlhSIMmOp1uPhCj1+tnAU8Br13hYSv0ev2Cc//qbiXkeFJsKMMm2SbEqjlXc59u\nDZ6yQHBv5I2Tn9k7jmBHBa2lmKUB6PRnRUa4veOMGie1ksXpwfQaLRw8U0+S9+AqOmfbRLXJRCdJ\nEoXtxfwh6//4beb/ktdWRJRbBE/FP0Z3TgbqviDWzJlYZddXsyA1CJkM9pyuxWaTiPOMxSbZKDaU\n2TuaYEedvSYKqjqICnTFx92J/RXHkCFjRsBUe0cbFQvTgnDVqKgr9AVgb81BOycS7CmnJQ8ZMtT9\ngRRUtJMa7U24/8SrMjnPVevA4vRgeuoCUKBkf+0RUW0lTAhDrTRZDGwC0Ov1hYCHTqebuJ8AN2Gi\n9jO5lEKu4BvTHweTEyXmk2Q25Nk7kmAnO4tPAJDqk4zbJKkyOW/JtBDUKgXbT1YT5x4HiKWHJ4N/\n5r/Hn8/8nRJDOQmeOl6d+gLfSn+BsiI1vf0WVs0Kx0UzOfYFLzdHMuL9qG7u4dND5Rf7moilhye1\n00XNSNJglUlDbxOl7ZXEe8Xirp54y9BfidpBwfKMMPq7nPCShVLeWUVFZ5W9Ywl2YBjopKKrmmj3\nCLYdaQQGKzEmuuUZoTjKnZDaA2kzdpDbWmDvSIJwy5RD/Dt/IPOS31vO3dZ1yW3/p9PpwoHDwPf0\ner10rQ16eGhQKsd3KbOPjwslJ0rRqJyYFhk/oUuzfXxcWFR0F3sM/+Lton+RHP49glz97R1LGEVG\nk4mK/hIkm5oX7liAl5vmwn0+Pi52TDY6fIAVs8PZdKCMmkYb4e7BlBjKcXZX4aRytHc8YQR0D/SQ\n2ZxDkIs/L898nEjPwf4Mze197M6sxdvdifuXx6NWXfzsn+j7wisPplP1+wNsOVZFcuw0nFSOlHSW\nTfjXLVxddmkrMhksmxPBF+VbAFimmzep3hP33q5j56ka2koCIbqaw83HmBGdZO9YwijLLs0CwE8Z\nRW59F3NSApmWHGjnVCPPB1g7P5oPDnXi6FnNkcZj3J4wy96xhDFmvH0nDHXQ5Mu+PEn1/wHbgXYG\nK1K+Bnx0rQ10dPQNUxT78PFxoaCqkqbeVlJ9kmhvG9+v50asSEpi7/spWMKy+cX+v/Dd6S/jpJx4\nfVyEK/vg5DFQmAiUJ2AzWWlp6QYG94XzP09085L8+eJwORt3FTP79lgqDbUcLs4i1TfZ3tGEEXC+\nkmiKVyIuVs8L7/O/f56P2WJj7dxwugwXP/sny77w/JpEfv72af74r2x0t4Wj7yyioKoSH42XvaMJ\no6yt00hBRTtxoe4Y+/vZV34UN7UL4Q6Rk2JfuNSyGSF8sNeID16cqMmmsLoKbydPe8cSRtHh8sHr\nyyePgkop54nViZNmP5ib6Mvmg+5I3d4UUEJWeREhLpOmxaVwHWP1+OhaAzlDnZ5Tz2BlyXmBQMP5\nX/R6/dt6vb5Zr9dbgK3ApDiDOF+SPJH7mVxK46hkacxMzA3htPS38lb+v8S8xUnCYrVxtCYbgJXx\nGXZOYz8eLmrmJgfQbOhH3u0HiL4mE9n5EvsIt/ALt1U1dnMsv4lQP2dmJk7OarsQX2ceWx5H/4CV\nmtLBgfOiDjFFZzI6VdQMwIwEP7Kbc+mz9LMwcjZK+XBdoxs/FqQF4apV01V1fvnVw/aOJIyiPnMf\nxYYyXPCh06Bg+YxQ/Dw11//DCULjqGJZRigD9YMVmftqxPtfGN+GOmiyE7gHQKfTTQXq9Xp997nf\n3XQ63Q6dTnd+Uvd8YFI0vSiaBP1MvmzJtGBUzfHIerzJaytkS8Uue0cSRsGh3DrMzvWoJEdS/CfP\n+/1Kls8MQyaD45kDuDg4k99aJAYPJ6jyrmoAIlxDgMGmsBv3lQKwbmE08gm+Msi1zEryZ/HUYNrr\nB6/SFLaJQZPJ6ERhEwq5jPRYHw7VDTaAXRI1z96x7EKtUrAyI5SBZj8c0HC0/qRYWWoSOdtaiE2y\nYajzwMNFzcqZE3u57StZkh6MkykAjFpON52hyzT2KgsE4UYNadBEr9cfBTJ1Ot1RBlfO+bpOp3tc\np9PdpdfrOxmsLjmu0+mOMNjv5JpTcyYCi82KvqMUHyevSVV+qXVUsSQ9jD79FDQyV7ZX7iG7+ay9\nYwkjyGK18fmZLGQqE6m+SRO6d8+N8HV3IiPBj/qWPgJUEXSbe6jqqrV3LGGYWW1Wqrqq8df4olEN\nXi08W95GYVUHyZFeJIRPns/9q7lvcTRR3gHYjE7kt5ZgtVntHUkYRU3tfVQ1dpMQ7onB2kpFVzUJ\nXjp8tZN3mtb8tCBcNY4Y6weXXz3acNLekYRRktMyeL3Y3ObLvQuiUDtMvmMlJ7WSlTPDMDWGYpWs\nHKo7bu9IgjBkQ600Qa/X/4der5+t1+vn6vX6HL1e/5Zer//03H1/1Ov1U/V6/Ry9Xv/S9ZrATgSl\nbRUYrQOTqsrkvNunh+CocMJUMhUHuQNvF35AXU/D9f9QGJeOnG2g17EGgIygVDunGRvOX0FqqRq8\nyp4nOsVPOPW9TQxYTUS4Df6/ttpsbNxXhkwG9y6MsnO6sUGpkPPC2iSUfb5YMHG4VExVm0xOFDYB\nkJHgy+H6wZOjeUEz7RnJ7tQqBStnhjHQEIQCJftqDovBxEnAZDWR36bH1q8lyiuIjAQ/e0eym0VT\ng9H0RyBZlRysPYbZZrF3JEEYkiEPmgiXy2kcPDicLP1MLuXspGJxejDd7Y6kOCzGZDXxRu56UYY6\nAVmsNr44VonCowknhROx7uJkESDYx5m0GG/qKzXIUYi+JhPQxX4moQAczm2gvrWXeVMCCPZxtme0\nMcXDRc3yhHQAPs46gaFnwM6JhNEgSRInCppQKuTER7hyqjELD7U7iV5x9o5mdwtSA3Fz1GJpCcYw\n0ElWc669IwkjLL9Vj0WyYO3w44ElMcgm8dRNtUrB6owoLM3B9Jh7yGrKsXckQRgSMWgyTHIbC5DL\n5MR6TM6TyGUzQlGrFORkqlgUfButxnZONGZe/w+FceVoXiMd1kZkDgNias6XrJwVBjYl6gEf6noa\naDd22DuSMIwqugYHTSLdwjGaLGw6VIGDSs7aeZF2Tjb2LIxJAWSYnJr466Y8LFbR42eiq2vppaGt\nj5QoL/IMuQxYTcwJzEAuE4eZDuerTeoHB1z31BxEkiZ8AfaktrPkFADJnolEBLjaOY39LUgNxLkn\nBkmC3VXi/S+MT+LbbBj0mvso7agiwjUUJ6WjvePYhbOTikXpQXT2mlAbopEhI7PpjL1jCcPIYrXx\nxdFKlF6DJdhpYlndy0QFuhEf5kFngwcAea1Fdk4kDKeKziqclE74aXzYcbKGzl4Ty2eE4u6stne0\nMUejciLCNQSFcyclDa0XmuUKE9f5qTkz4n05VHccuUzO7MDpdk41dsxPDcRV5Y5k8Kemu45SQ7m9\nIwkjpKvPSHV/GZLJkUfmiX0AQKVUcMeMBGwdftT3NVDWWWnvSIJw08SgyTDQd5QiSRLxnjp7R7Gr\nZTNCcVDJ2XuylRj3SCq6qmntb7d3LGGYHM1rpLWzHyffFpyUjug8ou0dacxZPSsMm8EXgDwxRWfC\n6Db10NLfRrhrCN29ZrafqMZV68DyjFB7Rxuz4jxjQSbhFdjL7tO1HC9otHckYYScn5qjdlDg6ttL\nXU8DKd6JuKnFFfbzzlebmM5VmxyuP2HnRMJIeefoMVCYidDE4u4yOS+kXsm8KQFoe2IA2FF+wM5p\nBOHmiUGTYVB9bqWMeK8YOyexL1eNA4vSgjH0mHAeCAcQ1SYTxPkqE5VLFyZZL1O8E1HKlfaONebE\nhXkQ4e2Hrc+ZovYSBqwme0cShsHFfiZhbDpcwYDZytq5ETg6iH3gas43RY9PsuDooOCtbUXUtvTY\nOZUwEioaumntNJIW482JpsFpCXMneQPYK5mfEogzfkhGLdnNZ+kx99o7kjDM6lt7yW3NB2BVQoad\n04wtSoWcNanp2HpdKegopE1cVBXGGTFoMgxmB87g+emPEOYSYu8odrcsIxQHpZz8Mw4oZApOi0GT\nCeFYfiOtnUZCdYMnPWJqzpXJZDJWzQrDavDFKlnRt5fYO5IwDCq6qgHwVgZwKKeBAC8N81IC7Jxq\nbAt3DcFR4Uh1XwVPrYrHZLbxwR6xP0xEJwoGp+akxLqS2ZyDr8ZbVCJegYNKweqZ4Viag7FKVk41\nZts7kjCMJEni/T3FyN2bUMud0HmKfldfNmdKAJruGJBJbC8/aO84wjB7t/AjXst+w94xRowYNBkG\nvhpvFkXOntTdsc9z0zqwIC0Iw/9n776D40rP/N5/zzkd0AC6kdHIGWgEkgAJ5szJUaORtFZc7Wpj\nrW+t17VlX699y9e+teVa+17b67u2tbraXUnWrmalUZigCZo8w2EECBJgANDIOadG6Nzn3D+aHI1G\nM0MSBPB2N95PFatmgCb5I4hmn37O+zyPxyDPVMrE2hQTq/JYdrx7r30CRTHwJY1h1SzUZmzvU1Wf\nprEqm0yiR7BbJq4JTiNthEHPMAoKbjfohsFjB0vRVPny+Wk0VcOVUcmsb57SEo2yPDvdI0t4/XLd\nZCLRdYOW7mlSkkwsWwcI62GOFhyU10Of4FhjAZaVEtAVzoxflAMxE8jV/nm6ZgdQLAH2OBvkoPyP\noakqT+88ghG0cHHqEv6wX3QkaYP4wj4uTrXhDXlFR9k08qpP2nAP7StGVRQ849kA8rRJnJtb8jEw\nsUxFJSwGF9mZXY9ZM5RAXPYAACAASURBVIuOFbNUReEzTU0YITPX57rRDbk5JJ5F9AjDy6M4bbmc\n65gjw27lQL1TdKy4UJsZLa52LfTSVJVNRDe4PjgvOJW0kXrHlvCsBtnjyubc5EVMqokD+c2iY8Us\nq1nj1K4KwotOprzTDN08xSbFt3BE54dv9aJlzADQmLNDcKLYdbihENtqJRElyBsD50XHkTZI53wP\nESPCzux60VE2jSyaSBsu05HE3tocZkfSMClm2qbb5d2UONbaHb0ISCuM9p/uzpGtObdzoD4PszeP\nkOKlc3pIdBzpHoyvTRLUQ5gCmQRDOg/vK8akyZfOO1F7c65J90IvjVXRInpH35zISNIGu9WaU1Dm\nZ8Y3R3NuI6nmFMGpYtt9e4ow5osAODvRIjiNtBHevDTG9KKX1Lx5eRr3NlRV4TO1JzB0hXdGzsob\nSwni1iyfytQawUk2j7zykzbFg/uKQdew+QuZ8y8wtDwqOpK0Ti1dM2gqzBgDWFQz9Vnbe0vUndBU\nlX2F0eLSK53yojieDdwcAjs+YiElycTxpgLBieJHji2LrKRM3It9FObYyLBbudo/T0SXF8mJIBzR\nueSexZFiYSQcvWCWA2BvL8NuZW9hPXogidapdtmiEOc8a0F+fm6Q5HQffmWZhqxaeRr3No41lJO0\nVkJAXebs0FXRcaR7FNEj3Jh3o4aT+d7zk6LjbBpZNJE2RWVBGpWFDuaGMwG5RSdeTS96GZ5eobJS\nZd4/T0N2HRbNIjpWXHhq134wFIa8fXhWA6LjSOt0a3OOb8HOqT2FcmPOXVAUhdrManxhH6Or4zRW\nZbPmD9M/viw6mrQBuoYXWfWFaKxN5ercDQpT8yl3yDXcd+LhfaVEZosIGyHapjtEx5HuwestI/gC\nEWp3Rl/nZWvO7amKwiOVJwB4qfddsWGke9bvGcQX9hGcz6Y4O1V0nE0jiybSpnlwbzG6JxvNsNA2\n0yGP4MWhlq5oa46jMDqHQLbm3Dl7UjJOcwlK8jLPnGkTHUdap0HPCETMmMJ2HmiWG9LuVt2HWnSa\nqrIAaJctOgmh5WZrjiV3HN3QOVYoB8DeqdI8O6XmegwD3hmRcx3ilW4YXOicxmbV8JhGMCkaDVm1\nomPFhQcbGjD7s1k1TdAxNiQ6jnQPrs52AhBZzOXk7kLBaTaPLJpIm6bZlUOm3UZo3slycIXexQHR\nkaS71NI1jUmDiUgPFs0iLwbu0hOuYwC0L7YxMr0iOI10t5aDK8z7F4ispHN0ZwGOFHnK6m65MipR\nUOha6KGuNAOLWZVzTRJAKBzhcu8smQ4rXavtWDUL+5y7RceKK481u9A9OUz6JhhbmRAdR1qH3tEl\nFlcC7HDZmFibpCazCpspSXSsuKAoCieKDgPw42tvCU4jrZdhGHTM3sCImMjSCqkryxAdadPIoom0\naTRV5f7mIkKzeQBcmr4iOJF0N8bn1hifXaOiJsxiYJHdOTtJMllFx4orjTkNpGoOtOwJ/vGdTjkQ\nOc4MLEVbc/TVdB7eL0+ZrEeyOZkyRzGDyyOECdFQlsnkvJfpxcRdS7gdtHTN4AtEqKz1sxjwsC9v\nD0nyzeJdaazKJmWtAoB3Ry4ITiOtx4Wbp63SCqKD8ptka85debLhIGrYxoKpj55xWUyPRxNrUywE\nFoksZXOqKbo9NVHJoom0qY43FmDyZ0MoiSuz1wjpYdGRpDvU2hW9GDDnRO+AHcrfKzJOXNJUjfvL\njqBoEfp8N+jok+tW40nrqBuA6owycjOSBaeJX7WZ1eiGTu9i/y+36PTKC+R4ZRgGr7WMoCoKAUf0\nBOmxAjkA9m6pqsIjdXsxglZapy8TjIRER5LuQjiic6l7hrQUC5ORARQUdmU3iI4VV0yaib05+1C0\nCM9clqdN4tGt1hw8To7uyhcbZpPJoom0qVKSzBzdWUB43okv7Kdr3i06knQHDMOgpWsGi0VnLNhL\ndlImlenlomPFpcP5+9EUDZNzhB++00s4Imf7xIuu2QEMA55qlm0H9+LW6uFzk63UlzsAOdcknt0Y\nWmBsdo1ddUn0LfdR7iihyC63Sq3HsV2FKItFhAnSNiUHwsaT6wMLrPnDNNXZGfQMU5FWht2SuEMw\nN8vT9SfAUJnWuugbXxIdR7pLLRNXMQyFJmc9qbbE3holiybSpntgbzHh+egF1SW5RScujM6sMrXg\npbhmhaAe4kB+M6oi/7lYj1RLCvvydqMmeZmLjPDOlXHRkaQ70D+5iN80jyWcTk1Btug4ca3cUUJ+\nipNrc5389+v/g4IyLz2jHtb88s56PHrt4ggA6aXTGBgcKzwkOFH8SrKY2O+MnuJ8rf+s4DTS3bjQ\nOQWAPX8eA4OmXNmasx4Oq506RwNqkpd/bDknOo50F5YCHmYCk+jLGTy4u0J0nE0n3wVJmy4vM5md\neeXo/mQ6ZjsJRIKiI0m30dod3ZoTSR9BQeFAnmzNuRe3hp1Z80d58cwgqz75ZjHWPd/agaLq1GTK\nE1b3SlM1/uXeP+b+4uMsBJZYzD2NVt5OS++o6GjSXRqZXuHG0CKV5Rqdy1dJNtnYnbtLdKy49uTe\nBvTlTGbD40ytzYiOI90BXyBMe+8cuZkW2pbOY1ZN7JHPg3X7TO0pAMaN6/SMytMm8aJl/BoA9nAx\nlYUOwWk2nyyaSFvioX0lRObzCRshrs3eEB1H+hTR1pxprCl+poPj1GRUkmVL3GnYW6HEXkRFWik4\nZvAaHn5+dkh0JOlTzCx6cc9HZzXsKaoWnCYxWDULn6t+gv997x+Tl5SPKXuS52a+y7mJVjkgOU74\nw36eufw2ltqLTOS8zEpolaOFB7FoiX0ke7NlOpIoNdcD8HL3GcFppDvR3jtHMKzjrJlmKeDhVPEx\n0q1pomPFrRJ7EQW2IrT0OX58Tp5IjxfnRqJ/VyfKmrbFunlZNJG2RF1pBtlG9OjWufHLgtNIn2Zo\naoXZJT951dGhpQflANgNcaIwetrEXjLB25fHmFqQ20Ni1S9aRlFSo3e7KtLKxIZJMMX2Qv7NwX+G\neXoHET3MD7p/zH+78i15hz1G6YZOz2If/6vzh/zZmT9n1HoWzbFITXolX6/7Ik+UPyQ6YkL4XONR\njLCZjsV2InpEdBzpNs53ToEpyCjtpJiTeaj0pOhIce+RiuMAjESu0zW8KDiNdDu+oJ/Z8BiGz879\nu1yi42wJWTSRtoSiKDza2IC+ZqfH08taSL5hjFWtXTOAwZptiCTNKlfobZCm3J04LHaUzDEihHj2\n7T7RkaSP4VkLcubqJGaHhxRzCjm2LNGREo6majRnHcB/7SjlydX0LQ3yFy1/ycsDr8sNazFi1jvP\nSwOv8+/O/yf+3yvfpmXqMpqeRGisiifSf4c/2fOHHMhvRlM10VETQk1RJqn+MiKqn9NDV0THkT7F\n8lqQzsFFsqpGCegBHi17AJvJJjpW3GvK2UmqyY6WM85Pz7jlCcQY94uuy6DqFFoqsFlNouNsCVk0\nkbbMwQYnppUiDHRaJ+WU+FikGwYt3dPYspZYi6ywJ7cRi2YRHSshmFQTRwsOEDQCFFQv0d43R9fQ\nguhY0ke81TZKWPVimH1UpJVsiyOnIjRVZWMEbRStneT3d36dFHMKrwy9yV+0/CXzPnmXUaQfdP2Y\nf3/hP/Hq0JushdY4lL+Pf7rj9/F3HCPZU88Du2TL2mZ4oDx6GvHNATkMM5a1ds9gWNbwOfrJTsrk\nWKFct70RNFXjVMlhFC3CcLCLG4Py+iiWXRyPvo97oHr7nEaXRRNpy5hNGoeL9gDw7lCr4DTSxxkY\nX2ZhOUBGafSo/KGC7fOP4VY4WngQVVHRcodRMPjh233ourybEit8gTBvt42TkrkCQLmjVHCixFVb\nko7VrNHRN0dTzg7+7cF/weH8/Ux7ZzkzcUF0vG1r3rfIuclWcmxZfL3ui/zF0f+Tr9X9BmNDVnwB\nnfubizCb5OmSzfBAQz2qL4NFZYyxpVnRcaRPcKFzCnNRDwY6n6l8FJO6Pe6yb4UjBQfQFA2Tc5if\nvd8vT5vEqKnFVZa1MdRIEvtKt08RXRZNpC312J5a9NV0ZkNjLPo9ouNIH9HSNQ1aiGXzKLnJ2fJN\n4wZLszrYk7uLucAsO3dFVzufuTYpOpZ00/sdE3gDYYoroi0i5Wny+3+zmE0aDeWZTC/6mJxfw2ZK\n4umqxwAYXZFruUXpWnADcKr4GAfym7FqFsIRnTcvjWIxq5zaXSg4YeJSVYVd6U0oCvz46rui40gf\nY2bJx8DSCFrWFKWOYrkxZ4PZLansdTahJnkZ8Q7S0TcvOpL0MV5qv4JiDlGRUo2qbJ9Swvb5k0ox\nIS3VSonFBQq83HledBzpQ3TdoNU9Q7JzhogR5mDeXtmasAlurR8250ffhDx3egBfQM5xEC0c0Xmt\nNfp3YtgWURWVUkex6FgJrbEqOi/m1oVxsjmZbFsWI8tj8g6jIF0LPQDUZdZ88LFL7hnmlwMc21lA\nqk1uytlMv7H7OEZEo897nWBYvi7Emos3pjAXRwuLT1c+Lq+RNsHJoiMAmJzDPP/+gHwtiDHhiE77\nzS2opyr3CE6ztWTRRNpyn915GMOAy7Nyrkks6R1bwrMaJLlgCgWFA/nNoiMlpHJHKcX2QroWuzi5\nPxPPWpBXLw6LjrXtXeycZnElwNFGJxNr4xSm5mOV83w2VWNlNgrQ3jf3wcdK7UWshb3M++Vck60W\n0SN0L/SRbcsiNzkbiK6gf+3iKIoCD+4rEpww8aUnp5CvVoHFx887LomOI32IYRi8P9yO5likPqOW\n6owK0ZESUomjiIq0UrT0OUaXp7ncI1vVYsml7hkiqVOohomG7Jrb/4QEIosm0parK8zHFswjYJ7n\n2uiI6DjSTS1dMyhJq6yps9RmVpNuTRMdKSEpisKJwsMYGJido2TYrbzWMsq8xy862rb2/tVJFKCh\nTiNsRGRr2hZwpFioKHDQN+Zh1RcCohfMACMrYyKjbUuDyyP4I37qM3+5PrJ7ZInh6RWaa3LIzUgW\nmG77eLI2unr17ESLvMseQ4anl1lJuwqGwudrHhcdJ6H98rTJCM+fGUSXz4OY8cb1LtQkLzXp1Zi1\n7XXycN1FE5fL9Zcul+u8y+U653K59n3kcw+4XK6Wm5//t/ceU0o0+/N3A/Bip5wSHwsius4l9wy2\n/Oh8jUP5cgDsZmp2NpFiTubidCufPV5CKKzz/JkB0bG2rVVfiN6xJSoKHSxGpgAoTysRnGp7aKzK\nRjcMrg1EW3RK7DeLJsuyaLLVOuejbQf1Wb+8e/haS/TGxsMH5PNhqzQWVGGNpOO3jdM1PiU6jnTT\nC53vodrWcKXsIi/FKTpOQmvK2UmaxYEld4LxeQ+tXTOiI0nA+Nwao/5+APYXbL95PusqmrhcrhNA\ntdvtPgT8LvBXH3nIXwGfB44AD7lcrvp7SiklnCfqD4CuMh7uYdUXFB1n2+seWWLFG8CUPYnNZGNX\ndoPoSAnNopk5nL+ftZAXLWsKZ2YyLV0zeP2yh12Eq/1zGEZ0De6AJ9oqVZFWJjbUNtFUFW0D6bjZ\nolNsLwBgWJ402XJdC240RaM6vRKA8dlVrvbPU12URmWBPHm4VRRFoSlzD4pq8Hq/vLEUC3whPz3h\nVohofGWnPGWy2TRV41jhIXQlhDlnghfPytMmseDdK+Oo6TMoKDRk1YqOs+XWe9LkfuB5ALfb3QVk\nuFwuB4DL5aoAFtxu96jb7daBV24+XpI+kGJJJs9UhmJb5fUb10TH2fZau6ZR0+YJKV72Opu23ZE7\nEY4VHkJB4fT4OQ43OAmFo6d9pK3XfnMQaVN1DoPLI9gtqWQlZQhOtT0U5qSQ5Uji2sAC4YiOzWQj\nNzmb0ZUxdEMXHW/bWAmuMrIyTmV6OUkmKwCvtY4C8Mh+ecpkqz3uOooR0egPXJPPgxjw4xuvgylA\nnr6D7JR00XG2haOFBzApGinFY0zOr3G1X27SESkQjHCuexgtdYmKtDJSLSmiI2259RZN8oAPT+aZ\nvfmxj/vcDJC/zt9HSmAPVx4D4PzURcFJtrdwRKfNPYstfwKQrTlbJcuWwa6cBkZXxikqC6EA5+T6\n4S0XCutcH5gnN92GLSXIUsBDhaNUbkXYIoqi0FSVjS8Qpnd0CYi26PjCfuZ88iJ5q9zamlN/c2vO\n0mqACzemcGbYaKzOFhltW8pKTcUeKEU3ebk0cUN0nG3NE1ihdf4CRtDCk9XyHvBWsVtSaXY2EVCX\nUdPmeL1FzkAU6WLXNEHbJCiwK2d7NpCYNujX+bSryzu68szISMZk0jYojhg5OXbREeLKo9n7eab7\nZ6wljbAS8VORlyM60rZ0qWuatbCXZMc0xY58mivq7vkNo3wu3JmnGu6n493rdPna2VlVy9W+OSKq\nSl7W9qvgi3LZPYM/GOHhgwXM36z37yio2bDvYflcuL0Te4t56/IY7ollju8rpT6/ikvT7Swp8zTk\nyA0VW6G/PzpT6WjVHnLS7bzaOko4YvD5+2tw5jru+deXz4O7d6ToMK8tDPDOyHkebzosOs629dOW\nF9GVMOb5Ru7bV4WmyuujrfL0zge5ONVGZsUk3Vdy8PgjVBXLkz4inLk+hZYRPQ19smY/OfZ7/z6O\nt+fCeosmE/zyZAlAATD5CZ8rvPmxT7W46F1nlNiQk2NndnZFdIy402DfTbv3NN87+yp/fPxp0XG2\npTcuDKFlTmKgszd3D3Nzq/f068nnwp3LVQrIS3FyfvQyT1Xt5mof/Py9Pj57TL5R3CrvXYrevaop\ndNAx9j4Auaa8Dfkels+FO5OXZiXJonHh6iRPHSolS40W0K+P9VFj235901tNN3TaJ26QZnGQFLQz\nOr7IK2cHSbWZ2VWafs/fw/J5sD77iit5dSSNEaOP7pERsmyyZXCrTa1N887gWXRfCvudzSzMy+uj\nrWQnk+r0CnqXBlBTi/jh69384WfkzL2tNji5TN/4PMnN8ziTczH5bcz6E/N14dMKOettz3kd+AKA\ny+XaA0y43e4VALfbPQQ4XC5XmcvlMgFP3Hy8JP2ap3ccx9BVenxXiegR0XG2nVA4wpXeWZKcE6iK\nyj7nHtGRtpVb64d1Q2c1pR+rWePc9Sm5ZnKLGIZBe98cyVYT1UVpDHiGURX1gw0u0tYwaSo7yjOZ\nWfIxOe+lKLUABUWuHd4iYysTrIbWqMuqQVEUzlydZM0f5v7mIizm+D4BHM/yMpNJXq0EBd4fvyA6\nzrb0fP+rGBiERl0cbigQHWdbeqryMQBSKnpp7ZpmzuMTnGj7ea99AtUxj6FE2JWzfYtW6yqauN3u\nc0Cby+U6R3RTzv/mcrl+2+Vy3Toq8EfAPwLvAz9yu909G5JWSjjZqQ4ywuXo5jVOD1wVHWfb6eib\nx68uods81Ge6SLPG11G5RLA/bw8p5mTeGT9Nfa3GnMdP75hHdKxtYXRmlYXlALsqszCIMLYyQXFq\nIRY5CHnLNX5oi06SyYozJZcROQx2S3Qu3Fw1nOkiEIzwWssIZpPKqT2FgpNtb4qi0JSzCyNs5sz4\nRcK63K62lYaWR7g214mxkkGWUkJZnrw+EqE8rYTdubsIJy2iZEzy5iVZTN9KgVCE1u5pknOjG+52\nZm/PeSaw/pMmuN3uP3O73YfdbvdRt9vd4Xa7v+d2u5+7+bnTbrf70M0f/3nj4kqJ6ERRtFf37WG5\nWm8rGYbBay0jmHKiL0ByAKwYSSYrv1n3TwjrYaYcZ0ANc1YOhN0S7TfX3DZVZzOyMk7EiFCeJjeF\niLCrMgtF+eXfSam9iEAkyIx3TnCyxNc570ZBoTazmp+828/8coAHmotwJFtER9v2dlc5icwV4It4\n6Zi9LjrOtvL+WPR0T3C8kkP1eXI4uEBPVTyKpmhYSnp57+oYXn9IdKRt43LPLL5AGDV9Brs5lTJH\nsehIwqy7aCJJG+W+ugbwprHAMHPeBdFxtg33yBL9k0tYc6dIMSezI7tOdKRta2d2PfcXH2cptEBq\ndTet3dMEQrJdbbO1986hqQo7yrMYXB4GoDytVHCq7cmebKGyMI2+cQ+rvhDF9ugpB9mis7l8YR+D\nyyOUOYoZGffz1uUx8rOS+eyxctHRJMBVnIG6UAbIFp2t5A15aZtpxxxJRV/O4kC9U3SkbS0nOYtj\nhQfB4iWcPsh7HbcdlSltkDNXJ1FTlwjhZ2d2HaqyfUsH2/dPLsUMk6ZSYdkFCrzQ9Z7oONvGyxeG\n0bLHiKgB9jl3Y1I3apmWtB5PVT5KuaOESNoYobRhrvTO3v4nSeu2uBJgaGoFV0k6yUkmrs91AVAh\niybCNFVlYxjRO1uljuhcmZFlWTTZTO6FPnRDpzqtmu+80o2qKPzeE/WY43ybYaIwm1Tq84uJeDLp\nXRpgcm1adKRt4eLUZUJ6GN9EIaV5DvLlRjvhHi17gCTNirmwnzcuDxKOyNbNzTbn8dE9vEhWyRKw\nvVtzQBZNpBjxaO1BjLCZq0tXZN/uFhiaWqZrvgdLWRfJJhunio+KjrTtaarGNxq+SpKWhLm0i3c6\nu0RHSmgdN9tAGquyGV4epXdpgNqMajKT5IYKUfbX5aKpCi+fHyLPloeCwrA8abKpbs0zGe23Mb/s\n57FDJZTn3/uKYWnjNFZlE56Jtg3K0yabzzAMzoxfQEElNFvIkR15t/9J0qZLtaTwcOl9KKYQq/Yu\nWrtmREdKeOeuT2FgEHGMk6QlUZdZIzqSULJoIsWEuuJszMslhBU/lyblQNjN9tOWdizVV9BUlT/c\n9dtk27JER5KALFsGv1X/RRRVZ8R2mqmlZdGREtYH80yqsnlj+F0AHig9ITCRlJ1m4+TuQmaX/Jy/\nNkd+ipOxlXE5DHaTGIZB53wPVjWJy+0hinJS+cwR2ZYTa3ZWZKEv5aJFbLRMtRGIBEVHSmh9S4NM\neWeILOSRYbNzvFFuzYkVJ4uP4jA7MOUN80pbt9w0uIkMw+DstUks6R58+ipNuTswb/Mh+bJoIsUE\nRVHYl7MPgNcG3hecJrG5pybot7yBokb4rfovUZUuL5Jjya6cBqqtu1Fta3yn41l5UbAJAsEInUOL\nFOWkYFjWaJ+9TnFqAbUZ1aKjbXtPHi7DatH4+dlBClMKCeohptbkHcXNMO2dYTGwRGgxC01V+b0n\n6jBp8rIw1mTYrZTmphGcLsAX9tM23S46UkI7MxE9zROaLuIzR8rk2u0YYtHMPFX1CIqqM2Nrp2t4\nUXSkhNUzusTskp/c8uisyX3O3YITiSdfHaWYcf8OFxFPFjOhcSZWp0THSUjekI9vX/8eiiXAvrST\nNDsbRUeSPsY3dn8WfTWd8UgP5yZaRMdJODeGFghHdJqqs3lr5D0MDB4sPSm3I8QAR4qFR/aXsOwN\nsTqfDMhhsJulcz7amuOfz+DJI2WUOOVK1Vi1qzKL0EwRCgrvj58XHSdhrQRXuTxzDcOXQpapgCM7\n80VHkj5if94ecqxOtKwJXmzrEB0nYZ29NgWKzqp1BIfFTk1GpehIwsmiiRQz8rNSyAy6AHhz6Kzg\nNIknpIf5Zvt38atLWJYq+c3dj4iOJH2CtGQbLuM+jLCJZ3teYHxVriDeSO290dac6jIbF6bayE7K\npClnp+BU0i0P7SvGnmzmRle0LUcWTTbHhbHoCtsCSxmPHZQDkGNZY1U2RtCGI1LMyMo4w8ujoiMl\npAuTl9CNCKGZYp4+ViFPXsUgVVH5Yu2TKAoMqS2Mz66KjpRw/MEwrd0zpOd7COh+mp2N23przi3y\nKyDFlBPlu9EDSbTNXMYf9ouOkzB0Q+cfup5lcGWIyIKTpyoeR5MXAzHtZEMVwYGdhI0wf3f9H/CH\nA6IjJQRdN+jonyMtxUJ/sIOwHub+khNoqjyCHStsVhNPHi4j4ElGMRS5QWcTLKyuMe4dwfDa+YPH\nmuWbwxhXlm/HkWxmbTQ6X+O0PG2y4XRD593R8xgRFSc17K+Ta4ZjVV1WDYXWMrS0eZ5tk8ORN9ql\n7lkCoQjpxfOAbM25Rb5KSjHlYEM++mwxYUK0Tl8RHSdhvNj/Cy5Nt2OsZpA8s4+jO+Vgs1i3ozyT\n1GARylwF095Zfuh+Ts432QADk8useEPsqLJzZuI8qeYUDubvFR1L+oiTuwvJdqQQ8aUyujJBRI+I\njpRQ/u7dM6DqVKVVUZgt16nGOlVR2FmRxcpMGunmDNqmO/CGvKJjJRT3Yh9LwUUiC/l84VgtqmzX\njGlf2/UUGNAbPs/iik90nIRy9tokqGHmGSbXlk2JvUh0pJggiyZSTElLsVBl24mhK7w9fFa+SdwA\np8fO88bIuySThr9nN4/sLZN3FeOASVM52JCHd7CKHHM+rdOXOT95SXSsuHerNcecO44v7Odk0VEs\n23wifCwyaSqfO16BvppG2AgzuTYtOlLCaO2eoW+5D4DH6vcJTiPdqcaqbEAhR3cR0kNcmGoTHSmh\nvNZ/BoB8o47GSrlRMNaV2AsptdahJK/wg7Z3RMdJGDNLPtyjSxRVrRI2Qux1Nsl5bzfJd05SzDlW\nX0Zk0cmMf4Z+z5DoOHHt6uwNnu15nlRzCr7uPaSYkjneJE+ZxIvDO/LAUHHMH8RmsvFsz3PyzeM9\nau+bw2KGbt9lLJqF40WHREeSPsH+eifpai4A7eP9gtMkBs9akL9/zY2WPodZNVOVUSY6knSH6ssy\n0VQFz0guJkXjzPgFeWNpgywFPPQuu9HX7Hzp0F75JjFOfL3pM6CrdPkvsOKTLf0b4dy16Aw9S250\nIcdeZ5PIODFFFk2kmLO7Ogd1oQxATom/B0PLI3znxjOYVRN7TI/hXbZyf3MRSRaT6GjSHSpx2inK\nSaWrx8/nKp4ipId5e0Su5F6v6UUvE3NrFFZ78ASXOVpwgBRzsuhY0idQFYWHd0YH9J4b6BacJv4Z\nhsH3f9HNWsSDkrRGbWY1JlW+HsSL5CQTNcXpDI8H2ZHZwLR3lp5FWUzcCC92ngbFIFevpbY0U3Qc\n6Q7lpWZRZmoEm5B7kQAAIABJREFUi5+/v/yq6DhxTzcMzl6bwmoLMx0cocReiDMlV3SsmCGLJlLM\nsVo0dhe40H0pXJ6+ykpQTsa+W76wn291fI+wHua36r9Cy+UgVrPGA3uLRUeT7tKRnXlEdAPvVDYO\ni52OuetyvsM6dfTOAQZrad2oisp9xcdER5Ju42hNDRgqi+EZ3COLouPEtQud01zpnaOgPDoLoz6z\nRnAi6W7tutk2khWuBeD9CTkE815F9Aits20YEY2v7j0pOo50l35r9+MYYTM3vK14/Cui48S17uFF\n5pf9lNauoqPLAbAfIYsmUkw6vCOP8HQJOjrnJlpEx4k7l6c7WAmt8kjZfaxMZrC4EuBEUwGpNjm7\nId4cbMhDVRTOXZ9md+5O1kJeepbk3cX1aO+bQ02fYSWyyD7nbjKS0kVHkm7Doplx2pwoycs8+26P\nbEdYJ8Mw+PnZIUyaSm5J9EZEfZZLcCrpbt0qmkwMWyhIyaNj9jqewLLgVPHtpWut6CYvmeEKagpz\nRMeR7lJumoNS9oAW5h86XhYdJ66dvdmaE7aPoaCwx9koOFFskUUTKSbVlWaQ4isDPdq3qxu66Ehx\n5cLUJRQUDuXt55WLI2iqwkP75CmTeJSWYmFHRSZDUysUW6J3hi9PXxWcKv6s+UP0jHpILR0B4IGS\nE4ITSXeqOqsURTUYWprgcs+c6DhxqWd0iakFL3tqMxlaHSTXlk22TQ67jDd5mcnkZtjoHFrkSMFB\ndEPn3ESr6FhxS9cN3hk5B8DndpwSnEZar6/ufhA9YKNztZ0FnzyRuB5ef5g29yzZOTqT/jGqMypJ\nt6aJjhVTZNFEikmaqnKwtojwXD4LgSVuzMt+9js1vTbDgGeY2sxqBkdCTC94ObQjj0xHkuho0jod\n3pEHwOigiTTZorMu1/rnIWWBkHWeHVl1FKTmiY4k3aHSm+sOtdRlfna6n4gui+h363RH9A5idY2B\nPxKgTp4yiUuKorCrMgt/MEJ6qByrZuH8ZIs8gbVOb1/rJZg8RbKezZ7iKtFxpHUqynFQrDeBovOP\n134hOk5cuuSeIRjWKaj2AMjWnI8hiyZSzDrUkEd4pgSA98dl3+6durWG8EBeMy+fH0YBHj1QIjaU\ndE92V2eTbDVx4cYMjTk3W3TkAMC70t43hyl/AIAHS0+KDSPdleKbRZOC4hCT817OXpsSnCi+rPlD\nXHLP4MywsaKNA3KeSTxrrMwGoGtglfqsWub9i8x4ZwWnij/hiM5LPe+jKPBQ+VHRcaR79NV996H7\nk+lcaWfetyA6Ttw5c3USBQOPaRCTotGUs0N0pJgjiyZSzCpxppKfnI++mk7nvJulgEd0pJinGzoX\nJ9uwmZKwrBUyPL1CsyuH/KwU0dGke2A2aeyvy2VpNUhGpAyAyzOyRedOhSM61yaG0DJmKXeUUJlW\nJjqSdBcKUpyYVBMm+wpmk8oLZwYJhuRJqzt14cY0obDO8cYCuhd6MCka1RmVomNJ61RTnI7VonG1\nf466zGoAuhZ6BaeKP++1jxK0D6EZFk6U7RUdR7pHpblpFBu7QTF45uorouPElakFL33jHiorFWb8\nMzRk15FstomOFXNk0USKWYqicKjBSXi2EAODC5NtoiPFvK6FXjzBZZqdTbx2cQyAxw6VCk4lbYSj\nuwoAuH7dkC06d6lndIlwVh8AD5aeQlEUwYmku6GpGkWpBUz7pjnVnMfiSoC32sZEx4oLhmHwXvsE\nmqqw05XK6OoEVekVWDWL6GjSOplNKg1lmUwv+shSo7PKuhZ6BKeKL4FQhBevX0SxBNif14xFPh8S\nwtf2nkL3pdC9eo1Zr5x/daduDYBNL54HYK+zSWScmCWLJlJMO1DvJLKQB7rG+QnZt3s7FyajA+HS\nA5V0jyzRUJZBWZ5DcCppI1QUOHAVp3N9YJHKlFrZonMXLvYOoWVOkmHOYmd2neg40jqU2IvQDZ3G\nHRZSkky8fH6YNX9IdKyYNzS1wtjsKk3V2Yz7hwCoy5KtOfHu1hadkZEwzuQcepb6Cethwanix9tt\nYwQcgwDcX3ZYcBppo5Q4HZTcPG3yj9deFR0nLui6wbnrU9isGhORXpK0JHZkyeukjyOLJlJMy06z\ncXJnKeEFJ3P+BfqWBkVHilnekJerszfIScrhpbeWsJhVvvKgvDhOJE8cLgNgfjQDkC06d8IwDNo9\nrSiqwSMVp1AV+bIXj0oc0bkms4FpHjtYijcQ5vWWUcGpYt977RMAnGgs4OrcDQDqM+UQ2Hh3q2jS\n0T9PXWYNwUiQAc+w4FTxwesP8/LlTrS0ecodZeSnOEVHkjbQV/edRPem4l69zvSanPVzO51DCyyu\nBKirN1gMLNGUswOLZhYdKybJq0cp5n35gWqywtGp5i90nhacJnZdmm4nbEQIzRTgC0T48v3VcpZJ\ngqkvy6Asz467UyHVlErHrGzRuZ2+yTlCaUOYdBsH8/eIjiOt060NOiMrY9y3pwhHspk3Lo2y6pOn\nTT6JPxjmYtc0WQ4r2bkROmZvUGwvlG8SE0B6qpXSPDs9o0tU2KPzaWSLzp1549IoQccQACeKDokN\nI2246GmTPdHTJtflbJPbOXOzNcecHR2wvjdPtuZ8Elk0kWKe2aTxJ4+egkAyA143/ZPzoiPFpAuT\nbSgoTPZnsKcmh+ONBaIjSRtMURSeOFyGgYLNV8xaWLbo3M5Prr+DokVoTNuHSTWJjiOtkzM5B4tq\nZmRlDKtF47FDZfiDEX5xcUR0tJjV0jVDIBjh2K4C3hx9DwODh0vvkzN9EkRjZRYR3SC4mI6maHTL\nosltrfpCvNY6iDl3nBRTMk25O0VHkjbBV/efQPfa6V3tZHJVblv7JGv+EJd75sjLSqJvrRu7JRVX\nhly9/Ulk0USKC86MFJpz9qBoEb757uv4ArJ398MmVqcYXhklspRNRlIav/1orbwwTlBN1dkUZqcw\n3hedVSNbdD7Z2MwKI+FO0FV+Y9dJ0XGke6CpGkX2AibXpglGgpxsKiAt1cJbbWMsrwVFx4tJpzsm\nUBTY4bJxcaoNZ3IujTkNomNJG6Sx6ubq4cEVKtJKGV2ZYCW4KjhVbHv14jChtBEwBTlWeBCzLKQn\npBKnnVK9WZ42uY23Lo0RjujU1Ifwhr3szW2SLcyfQn5lpLjx9I7jAKwlD/LdV7vlUNgPOTPeAkB4\ntpDfe7yOVJvsR0xUqqLw2KFSIivpmI1k2aLzKb5/9hxqkpdqex12a6roONI9ujUMdmx1EotZ44lD\nZQRC8rTJxxmbWWVgYpmdFVlcWryIbug8XCpn+iSS0jw7aSkW2npmqbBXYmDgXuwTHStmeVYDvHVp\nBEvBEGbVxMnio6IjSZvoy/uPoq856F/rZmxlQnScmBM9dTWCPdlM2BGdDyZbcz6dfPWU4kZGUjp1\nGTVo9iXahgbkysmbInqEs2NtGGEzD1Q3U1eWKTqStMn21+WSk27DP5sjW3Q+wY2hBYbD0cGXT9Qc\nF5xG2gglt+aaLEf/7T/emE+G3crbl8fwrAZERos573VE3yTs25HGuYmLZCZlyDWSCeZWAd0XCDPc\nYwXkXJNP8/KFYSJpE2Dxcih/P3aLLKQnstI8ByVGMyjwoxvytMlHvXphGF8gwsMH8rkx30W2LYtS\ne7HoWDFNFk2kuHK4cD8AyfmT/OjtPvonPIITiffC1RbCio9kXymfP1EtOo60BTRV5dGDpYTnogMd\nL890CE4UW3Td4IfvXkfLmCbbmkNlepnoSNIGKHX8chgsROddPXm4jGBY5+ULcnPILcFQhPPXp0hL\nsTBj6iSkh3mw5ASaqomOJm2w+/YUUuJM5cq1EEmqje6FXnkK92MsLPt598oY1sIhVFQeKJGF9O3g\nK/uPoK+mMeDtYXR5XHScmLG0GuCttjEy7FYyiz0E9RD7nLtlW/9tyKKJFFd2ZteTYkrGmjeJbkT4\n6+evb+vtCfMeP28NnAfgK3vuw6TJp/R2cWRHPnacGCEr7bJF51ecvzHFNL0oqsHJkkPyQiBB5Cbn\nYNUsDK/88pTh0V35ZDmSePfKBIsr8rQJQFvPLN5AmP07MjkzcQG7JZWD+ftEx5I2gaaqfP3hWhQU\nIp4slgIeprwzomPFnJfODaGnzmAkLdPsbCLLJk/kbgeleQ5KjWYAftj5suA0sePlc8MEwzpPHi7j\nymz0pps8iXh763qH5XK5zC6X6wcul+uMy+V6z+VyVXzMY0Iul+vdD/2Qtzike2ZWTezL240v4uXQ\nIZWF5QDf/vkN9G14Z0XXDb71ymUMxzRpWja7iypFR5K2kNmk8uj+UiLzTrxhn+xlvykQivDT0/2Y\nckcxKSb258k1w4lCVVSK7YVMr83gD0cLJCZN5ckjZYQjOi+fHxKaL1acbo+25pjzRvBH/NxffByL\nJudcJaqKAgcndxeyNpsOyBadj5pZ8vH+1UmSS6Kn0R4sPSE4kbSVvrT/MJGVDIa8fQx55PyrOY+P\nd9vHyUlPYldtKp0LPRTbC8lLyRUdLeat97b0V4Alt9t9FPgPwF98zGM8brf75Id+yNug0oY4dPOO\nWTh9hB0VmVwfWODlc0NiQwnwyoVhhvzdKKrBA+UH5d30behEUyGWtWjLQuukbNEBeKN1lGUmUZK8\n7HHuIsWcLDqStIFK7EUYGIyt/nKw3+EdeeSm2zjdMcG8xy8wnXhTC17co0u4Su20zl3EZrJxrPCg\n6FjSJvv8iQqSg3kAdEx3CU4TW35+ZhAjeYGIbZ4dWXUUpuaLjiRtobJ8B2VET5v8qFPONnnx7BAR\n3eCRw3l869p30A39g/dV0qdbb9HkfuC5m//9JnBkY+JI0u0V2QsothdyY76bLz1UTKbDyvNnBukc\nWhAdbcsMTCzzwplBrM5JVEVln7ybvi1ZLRoP1u3CCFq5MnNt27foeNaCvHxhmKT8aO/y0QL5ZjHR\nlNp/da4JfPi0icFL54fEBIsR798cAOusmmM1tMbJoiMkmZIEp5I2W3KSmS+d2IXuTaXfM0gwLNdw\nA0zOr3HuxhSpZdFTJg+VnhKcSBLhywcOEVnOZMQ3QP/SkOg4wkwteDl3bYq8XDMX/C8yvjrJ0YID\nsrB+h9ZbNMkDZgHcbrcOGC6Xy/KRxyS5XK5nXC7XWZfL9af3ElKSPupw/j50Q+eG5xp/9NQOVEXh\n2y/e2BY97b5AmG+/eAMjyYOR5GFnVp2cAr+NPbC3GMWTT4gAN+a297HsF88MEtB9kD5FXoqTirRS\n0ZGkDVbs+NUNOrccbHDizEzmzNVJZpd8IqIJF47onL02SbJNoSfQhkWzcLJY3tPaLg7WO0k3CjGU\nCK/duCo6Tkx44cwgJK0QSp6iMq1MDgXfpkrz7JSxF4Bnu7bvaZPn3x9AVwNo1RcZW53gSMEBvuh6\nWq6iv0Om2z3A5XL9HvB7H/nwgY/8/8f1BfwL4B8AAzjtcrlOu93uS5/0+2RkJGMyxffYk5wcu+gI\n28bDaUf5Wd9LtMy08eVHn+B3lgP8zQvXeeHsEP/yN/eKjrep/vuz7cws+ag7vMpQGB6qPRZz33ux\nlifRHS5p5pxviLcHLnF/w37RcYQYnV7hvY4JMitm8KHzSM1xcnMdomPJ58IGyzJSsLUlMe6d+LWv\n7ZceruKvfnqR5y+389jxQpYDqxTYnVRllYkJu8XOXp1g2Rtiz2E/XcFlnnA9QHlBnuhYgHwebJUv\nHjrK31x181bPFb587Bg2620v8xPW4ISHlq4ZMneM4QN+Y9djMfF9GAsZtqM/evQU/+qVNsYYYiQ4\nSHPhLtGRttTghIeWnnEcO6+wEFrkvooj/MHerwgtmMTbc+G2/5q63e6/Bf72wx9zuVzfI3rapMPl\ncpkBxe12Bz/y8771oce/BewEPrFosrjovavgsSYnx87s7IroGNtKY84OLk2309J/nQO1pbx+wc7p\n9nFONRVQmhdfT8Q7NTazyhsXhynMSWaWPlLNKRSbSmPqe08+F7be4zsbOXvmJXoj3YxNLGA1b7+h\nj9/+2VV0XcecO0ZYN1Gf2iD8+1A+FzZHcUohPUv9/Ls3/pLV0BqrwTVWQ2uE9BBJTdAOtJ+OPtas\nmvg3+/+U3ORsoZm3wkvv9wM6U2oHJkXjUPaBmPj+k8+DrVOfUY6CSiBpir97/ipfvK9adCRhvvPC\ndRSLF3/yCAUpeRTFwLWSfC6Ik2bVqOAAQ/ov+Mtz3+HP9v8znMk5omNtmb95sQ1rbSshyzKH8/fz\ndOmTzM+tCcsTq8+FTyvkrLe89DrwGzf/+0ngnQ9/0hX1jMvlUlwul4nozJMb6/y9JOlj3RpcdH6i\nFVVR+MLJ6PaYn7zXLzLWpnru/QEMoHm/zlrYy/68PWhqfJ/Qku5demoSBaYq0EK80NEqOs6W6x5e\npL1vjpLKIMvhJXbnygGwiawuqwaIbgmZXouuV81PyaUus4YKWz3hqVLyg3t4sOQkIT3MM90/QTd0\nkZE33ZzHx42BBfKrllkMLnIwfy/p1jTRsaQtZtEsVKWXo6as8MaVfkZnVkVHEmJgYpn2vjmyqicw\nMHiw9KQcli/x+f27CQ02ENQD/H9Xv4c3tD1aOW+MTtNjfg01ZZlD+Xv5cu3nZEvOOqz33N6PgAdd\nLtcZIAD8NoDL5foz4D23233e5XKNAi2ADrzodrtbNiCvJH2gJqOSDGs6bTMdfL76MzSUZ1JXmsGN\nwQW6hhaoK8sUHXFDDU4uc6V3jqrCNCb1aL/ywfzEbkWS7tzjdQf5W/cNzo1e4Qt7DqGq2+MCUTcM\nfvROdN1yVvk0s8twpOCjHaRSInmw5CQH8vZiM1mxaL86Tk03DP59ZyuDHav8zt79zHhn6Zi7wZnx\nixwvOiQo8eY7c3USAwMjpxdVV3mw9KToSJIgDVkuepf6URxzfP+1bv7115pRt1nB4Ln3B8AUwJ86\nRJY1g+bcRtGRpBhQWZhGiaWOsclVpvMH+e6NZ/ijxm8kdAHBG/Lxt53fRU1dpt6+i6/UfiGh/7yb\naV1fNbfbHXG73d9wu91H3W73/W63e/Tmx/+j2+0+f/O//5Xb7d7ndrsPuN3u/7CRoSUJQFVUDuXv\nJRAJcmX2GsCvnDYxDOPXfs6cb4H22esf+7lY97PTAwA8fDiXzgU3JfZCuTpP+kBjQTVmI5lgygQt\n3ZOi42yZls5phqdWaK5Po3fFTV5yLpVpZaJjSZtIURTSrPZfK5gAqIrCZ4+VYxjR1YpfdD2NzWTj\n+f6XWfAvCki7+XTd4P2rk9hy5vFE5mnObSLbliU6liRIbWb0JFZO8Sr948sfbFTaLtwji9wYXCDP\nNUPECHN/yQl5Ilf6wAN7iwiN1pBBMZ0Lbp7vT9zBsL6wj//c8i2C5gVS/RX8keAZJvFOfuWkuHbr\npMX5iWhLQnm+g721uQxOrtDmnv3gcdNrM3y/80f8Xxf+b/7m2vdpmbosJO963boIqCvNYNE8gG7o\nHJCnTKQPURWV3Tk7UUwhXmi/FJeFwbsVCkf46Xv9mDSFItciESPC0cKD8hj2Nre7OpsSZyqtXTOs\nLKt8vvpJApEgz3T/NCGfFx19cyyu+EkpvbVW9aTYQJJQhal52M2pRFJmSLKo/OTdfpa922MFsWEY\nPHd6ANQwfns/qeaUD1q5JQlgX20ujhQri9fqybXl8NbIaS5OtomOteF8YR//o/1vmQ5MEp4r4A+a\nviQLJvdIfvWkuJZly8SVUUW/Z5Bpb7RI8rnjFaiKws9ODzC6PMF3rv+AP7/4X7g41UauLRtN0Xhl\n6E0iekRw+jvzwUUA8PTxcs5NtGBSNPY6mwQnk2LN0ZJmABa0QS59qGiYqN68NMb8coD7m4toX7iM\nSTWxP2+P6FiSYIqi8NljFRjAc6cHOODcQ11mDV0LPVycSqyL41A4wo/e6UNzLLCmztKYs4OC1NjY\nmCOJoSoqtZk1rIZWue9wGmv+MD9+u090rC3RObRIz5iH4rp5ArqfU8XHsGjbbzC69MlMmsrJpgJ8\nPoU95kexmWw84/4pg54R0dE2jG7o/HXHdxlaHiU8V0CDdpLKgnTRseKeLJpIce/wzbsIFyajy5ny\nMpNpbrKwkHmW/3jpv9E200FBah6/u+Nr/B8H/pQjBfuZ881zMU5Om9wYXKBnzENTVTZrlnGmvbM0\nO5tINaeIjibFmPK0EuxmO1rGDM++00MoHB+FwfVY9gZ56fwQKUkm6ht0Znxz7M6RA2ClqMbKLKoK\n07jSO8fpjkm+Uvt5rJqFn/T+HE9gWXS8DfPSuWFmFn3kusYBeLj0lOBEUiyoy4xuzUnL91DiTOXs\n9SncI4nZnnZLOKLz7Dt9oOj40npJ0qwcL0zcOUbS+p3cXYimKlxsX+N3Gr5CRI/wN9f+F0sBj+ho\nG+LiZBv9niEs3gLCAzv53PEq0ZESgiyaSHFvV84ObCYbFycvMeAZ4q87vst18wtomdMovnR+t/7r\n/Ot9/5w9ubtQFZWHy+7DpJr4xdCbhPWw6PifyjCMD2aZPHW0jNeHo4uq5JA/6eOoisq+vCYUU4gV\n5zlebR0QHWnTPHd6AF8gwmeOltM6Gy2YHi2UA2ClKEVR+IPP1JNqM/ODN3pYmFf5bOXj+MI+fuR+\nLiHadCbm1njlwjDpuWssKRPUZlRT6igWHUuKAbU3iybdC718/eFaFODbP+/Es5a4bTpvXBpldGaV\n2qZV1sKrHC08SLLZJjqWFIPSU63sq8tlYm4NVnL4XPUTeIIrfPvq9wlGQqLj3ZNgJMhLg6+jYcLj\nruFAfR5FOamiYyUEWTSR4p5FM7PP2YQnuMJ/afsm1+e7qEgro1F9DO+1A0wN2X9lxkG6NY1jBQeZ\n9y9+cDolVl3umWNoaoV9tbkErbMMLY+wK7uB/BSn6GhSjHq8/CFq02vQ0uf4xfyPGF1IvDad4akV\nTrdPUJidwr6GNDpmr8sBsNKvyU6z8YdPNaAbBt987ho705qoSi+nY+4Gl2euio53TwzD4O9fcxPR\nDZy10cHPD5fdJziVFCvSrA4KU/Pp8wxS5LTx+ZOVLK4E+OZz1whHEm/99uySjxfeH8SebGLV7sak\naJwqPio6lhTDHmiOFpjfvDTGqaKjHMzfy/DKKM90/ySui+rvjJ5hKeBBW6hADdt46li56EgJQxZN\npIRwrPAQFs1CTUYVf7L7D/nTPX/E1w4eISXJzCvnh1nz/2rl+MHSU5hVM78YeptQjJ420XWD598f\nQFHgs8fKeX34XUAO+ZM+XZLJyj9t+gbllh0oycv81yvfZGJ1SnSsDWMYBj94owcD+PID1VyavULY\niHCk8IAcACv9moayTL5wspKl1SDfeqGTL9V8HrNq5tme51kNromOt25nr03hHl2izqUx4u+jIq2U\n6vQK0bGkGFKbWU1YD9O/NMijB0rYX5dL75iHZ97sFR1tQxmGwd+/7iYY1jl8BOb98xzIbybdmiY6\nmhTDKgocVBQ46OibY9bj50uuz1HuKKV1+gpvjrwnOt66rARXeW34HZSIBc9gMQ/sLcKZIVuWN4os\nmkgJoSA1j/96/M/5k91/QE1GJYqikJxk5vFDZXgDYV45P/wrj0+z2jleeIjFwBLnJloEpf50LV3T\njM+tcXhHHmGLh84FN9XpFZSnlYqOJsU4TdX454e+im1+B0Fljf/n0v+keyExLpQvdE7TN+6h2ZVD\nXWkGZycuYlJNHMhrFh1NilGP7C9hX230DePb55Z4ouIhVkNr/Lj3BdHR1mXFG+TZd/qwmjXs5dHh\nhQ+X3ieLhtKvqLu5erhroQdFUfjGo3UU56by7pVx3m0fF5xu41zsmub6wAL15en0hi+hoPBAyQnR\nsaQ4cH9zEQbwdtsYZtXE7+/8OunWNF7of5Xrc12i4921F/veIBAJEBir4MTOUv7JfXKWyUaSRRMp\nYXzcBeN9ewrJsFt5s22MhWX/r3zuwdKTWDQLrw29HXM9jOGIzvNnBtFUhaeOlPPGB7NM5JA/6c6Y\nNI3fbn6cYF8jwUiI/9nxd5yP8Xa02/EHw/z4nT7MJpUvnqqid2mAGa8cACt9uv+/vfsOj6u+Ej7+\nnSppRhrVUbckq10XuTe5F2xjTDEQCEsJJRDYZJNN22Tz7iZZsnnfBza9QLIQCAm9hWaaccW9ypYl\nS76yZPXey4ykqe8fY4xly2BjSSONzud5eCLdO773TDRn5s65v9/vaDQa7ls/iSSrma15NQR1ZJJq\nmcDhxmMUtBT5O7zL9tr2Mnp6naxeHElhWyFJoQlMjZ7k77DEKJMRPhGDVk9xWwkAQUYd37p5mm+d\nn49KOFXT4ecIr1xPr5OXt5zCqNeSM8dOva2B3IS5xJqs/g5NjAHzJsUSbjay63g9fQ4X4UFhPDTt\nHvRaHc+ceIluR4+/Q7xkp1vr2Vu/H09fCEuScvnK1QpaKaQPKSmaiIBmNOjYsGQiTpeHd/aUD9gX\nZgxlRfJiOh1d7K7b76cIB7e3sIGm9l6WzUiEIDt5TcdJCk1gypk7R0Jcipz0aKZG5tBfPBcDRp4v\nfpV3T380Zufrvrevko4eB9csSCEmIoQ9dQcAWQBWfL5go55v3jwNU5Ce5zadYlXMenQaHS+dfAO7\ns9ff4V0ytaqd3QX1pMSG0huu4sUro0zEoIw6A5kR6dTZGs52jIqJCOHrG6bi9cLjbxbS3t1/9vE9\nTht5TcdxuMfOYrGv7yily+5k/eJkdjZsx6A1cF36Wn+HJcYIvU7LillJ9Pa72HeiEYAUSzIbMtbT\n5+4bM9N0Onr6+cOeV0HjZbJxIXevmSwFk2EgRRMR8BZPiych2sSu4/XUtw6cw35VyjKCdEY+qthO\n/yi5UHC6PGzcU45Br+W6RWlsqdqJFy9rU1fKhbG4bLetygRbNPrTS4gOjuKDii08V/zqqO8cdb7G\ndjubDlYRZQnimtxUGm1NHGsqIE4WgBWXKC7SxIM3TMHt9vDK+w2sSlpBp6OLN0vf9Xdol8Tl9vDs\nJhUNcNPgJHWVAAAgAElEQVRViRxsyCPWFMOs2Gn+Dk2MUud20fnE5LQobluVSZfNwWNvHKfN3slb\npe/z072P8HTh8/zy8GM02kf/AuIl1R3szK8n2RqKNvY0nY5uVqcsk7VMxGVZMTMRnVbDlsPVZ28o\nLUlcQLjRws6avaN+tEl7dz//7x9bcYbWEuq18s1Va+W7wjCRookIeDqtlpuXZeD1whsfD2zBGmow\ns3LCUrqdPeyq3eenCAf6+FgtrV39rJqdhC7Iwb76Q0QHRzHLKhfG4vIlRJtZOTuJlmY9c7Q3kmZJ\n4UDDER4/9vSYusP+ytZSXG4vt63Kwkkffzr+DC6vm/UTV8sFgrhk0zNi2LB0Iq1d/ZQciSHJnMDe\n+kMcaTw26kdgfXCgivpWOytnJ3GqPw+3183alJVoNXIpJwY3JUoBODtF5xOr5yYzb5qFGsNBfrrv\nUTZX7SBYF8QMaw51tgZ+cegPo7rDlNPl4e8fnkQD3LImia01OwkzhMpaJuKyhYcGMX9yLPWtdooq\n2wEw6AysTVuJw+Nka9VOP0d4cW1dfTz6whG6w/MBuH/WzWi18nkwXOT/WTEuzM6OISPRwpGSZsrq\nOgfsu2rCUkL0wWyu3EGfq+8iRxgZ/Q437+6rJMio45rcVLZX78blcbE6ZTk6rc6vsYmxa8OSiZiD\n9Xy0r4n7lHuZYc2hpKOM3+b9eUwUTo6XtXKstIVJKRHMyIrkLwXP0tLbytrUlcyNm+nv8MQYc92i\nNGZmxnCyspNYWy46jY6/nniRXx/5E0Wt6qgsnjS229m4p4LwUCNrF8axu+4AkUERzIuf5e/QxCiW\nYI4j3BjGybZTeLy+VsNtfe28WvIWJ01voI+vxO0wMCN4OT9b+CMenHY39065HQ9eni58ntdL3hmV\noxI/2F95toBYaN+Pw+3g2vS1BOuD/R2aGINWz/W1H956uObstsUJ8wk3Wvi4du+o7LTW0tnLoy/k\n0UoVOks7OdGTyY7K8HdYAU2KJmJc0Gg03LLC92byjx1lAy6KTQYTqyYspcdp4+Oavf4KEYBteTV0\n2RysmTsBg9HNzpp9hBlCyU2Y69e4xNgWGmLghiUT6e138cHeWh7IuYslSbnU2Rp4suDvo7btNvim\nJLy09RQaDfzTVVm8rL5BaUc5s6zTuD79an+HJ8YgrUbDA9dNIS7KxN6DvayLup3pMVMp76rk8fyn\n+dWRxylsKR41xROv18vzm1Rcbg+3X5XF/qb9OD1OVqcuR6/V+zs8MYppNBomRWXT7ewhv/kELxS/\nzsP7fsHO2n1EBFnYkLoBY9lqDu4yUVrjm4YwL34WP5z7LeJNsWyv2c3v8v6X9r7Rs2hsfauNd/dV\nEBFqZPG8UPbWHSTeFMuihHn+Dk2MURMTPm0/3NRuB3yjTdakrsDhdrC1enSNNmnu6OV/XjhKS6ed\nqOxyNGi4MXO9v8MKeFI0EeOGkhLJtPRoTlZ1kF/WOmDfyglLMOlD2FL1Mb1+Gm1i73Px/v5KTEF6\n1s2fwO7aA/S5+1g5YQlGncEvMYnAsXJWEvFRJnYcq6Wuxc5t2Tcyw5rDqY7TPF/86tm7kKPNlsM1\nNLbZWTkriZO9hznQcITUsAncPeU2mZYgvjBTsJ5v3TyNIKOOd7a0sT7+S/xo3neYac2hoquKPx9/\nhl8c/gPHm0/4vXhyoLiRExXt5KRHkZMZxsc1ewkzhLIoYb5f4xJjwyeth58qfI699QeJCYni7sm3\n8dPcH7A2YzHfvHE6Gg38+a1CWjp8Iw8TzHH8YO63mBs3k/KuKh459DuKWlV/Pg3AV0B8bpOKy+3l\nzjUKH1ZtwouXGzPXy2hccUVWf9J+OO/TdtyLExcQbgxjR82eUTPapKndzv+8mEdrVx9zF/Vjo51F\nifNIMMf5O7SAJ1ecYlz58soMtBoNL285hdPlPrs9RB/C6pTl2F29bK/e5ZfY3ttfga3PxTW5KRgM\nsK16F8G6IJYmLfRLPCKw6HVabluVidcLr2w9hQYN9065nYmWVA43HuOdsg/9HeIFOnv6eWdPOeZg\nPRlT7Lx9+gMigsJ5aPo9GHVGf4cnxrjEGDMPXDsFh9PDXzaeIMEUz9em3c1/zP8us2KnU91dxxMF\nf+fRQ7/nWHOhXwqL9j4nL28txajX8pW1Cjtr99Pn7mNVylIppotLMjk6m1CDmURzPF+degc/XvB9\nFiTMOVtkyEqO4M412fT0OnnsjQL6Hb5ro2B9EPdOuZ1/Um6i39XPn/L/yrunP/JrgX13QT0nqzqY\nlRVDqLWTwtaTZEWkkxM92W8xicAw97z2w+DrQLUmdeWoGW1i73Pym1fzaevq58blKVRr8zBqDayf\nuMbfoY0LUjQR40qSNZTVc5Np6ujlw4PVA/YtT15EqMHMtupd2J32EY2rpLqDDw9UERMezOo5EzjY\nkEeXo5ulSQsxGUJGNBYRuKZnRDN1YhQnKto5XtaKUWfgn6ffS2xIDJurdrCzZnQshvyJ1z8uo8/h\nZsXiUF4pfR2jzsjXp99HeJDF36GJADFHsbJsRiI1zTY2HawCICk0gQdy7uI/5n+XObEzqO2p5y8F\nz/Lood/TbG/9nCMOrdc/Pk2XzcH1i9MID9OxvXoXIfoQKaaLSxZqMPPIkp/4Xs9xMwcdobdiVhIr\nZiZS1dTDY28cP3tTSaPRsDRpId+b8w2igiP4oGILjx972i8dRbpsDl7dVkqQUcftqzPPdr26OfM6\nWQxcXDG9TsvKT9oPFzac3b44cQEWYxgf1+yhx+m/0SYer5e/bCyiqb2X9bmpGOIr6HJ0c5V0jBox\nUjQR484NiydiMRt5b28FrZ2fTsUJ1gezOmU5va4+to3gaBN7n4u/bCwC4GvXT8Fg0LC5agd6jY6V\nE5aMWBwi8Gk0Gm5blYlGA69sK8Xl9hBqNPONGfcTajDzaslbHG8+4e8wASir62RPQQOJCVoO97+H\ny+Piq1PvIDks0d+hiQBz68oMLGYjb++uoLHt04J5Ymg8X825kx8v+D5z42ZS21PPcyM4la24oo2P\nj9aSFGPm6vkp7Kk7SI/TxorkRYTIgpfiMmg12s8tLNyxJpuZmTGcqGjn8TcLcbk/fZ2nWibw7/O+\nTU70ZE62n+LRQ7+nqqvmM4429F7edgpbn4ubl6VTZi+muqeOeXGzSLEkj2gcInAtn5Xkaz98pObs\ntEzjmbVN+t0OtlX5ZyQ6wMY9FeSXtTI1LZLVuVY2V+0g1GCWjlEjSIomYtwxBeu5dUUGDpeHV7ad\nGrBvefIiwoyhbK/ePWIV5Rc2q7R29XHdwjSykiM41lxIc28rCxLmyh11MeSSraGsmJlEQ5ud7Ud9\nc3etpmi+PuM+9Fo9fz3xIhVdVX6N0eP18uLmEtC60GUcpsvRzc2Z1zItZopf4xKByRxs4M412bjc\nvjam569hEm+O5b6pdzDDmkNZZzn76g8Ne0xddgdPvluEVqvhvvWTQeNhS9XHGLUGViRLMV0MPb1O\ny9dvnMrUiVEcL2vliXdO4PZ8WjgxG0w8NP0ebkhfR2d/F7/J+zNHmwpGJLb80hb2n2hkYkIYS2fE\nsfH0JvRaPdenrxuR84vxIdxs/LT9cEX72e1LEnOxGMPYUTNy3w3Oday0hbd3lxMTHsxDG3LYVLmV\nfreDayeukY5RI0iKJmJcWpgTT0aShcNqM0UVbWe3G3VG1qaupM/dPyK92Q8UNbLvRCMTEyxcvzgN\nr9fLR5Xb0aCR6rEYNhuWTiQkSM+bO09T3eQbZp1mSeH+nDtxeVz8Of+ZEZ+GcK49BfWU13cRO/Mk\nLY4mliQuYOWEpX6LRwS+uYrV14a4qoPdBfWDPubL2RsI1gXxZun7dDm6hy0Wj9fL0+8W09nj4Obl\n6aQnWjjQcISO/k6WJOUSajQP27nF+GbQ6/jmzdOYlBLBEbWZp98txuP5tIio1Wi5Om0VD067G41G\nw1OFz/FhxbZhXSy5vtXGkxuL0Ou03LNuEjtr99De38HK5CVEh0QO23nF+PRJ++Ethz+dwm/UGViT\nspx+t4PtIzzapLHdzl82FmHQa/mXm6Zh87Szu+4AsSExLE5cMKKxjHdSNBHjklaj4a41Chrghc0l\nA4ahLknMJdxoYXv1Lmp7Br94HgptXX08t0klyKDjwRumoNdpOdl+iuruWmbFTiPWFDNs5xbjm8Vk\n5J51Cn0ON797LZ+2Lt80tWkxU/hy9o30OG38Kf9pv6wWf+xUCy9uPkVQWgnd+homRWbx5ewbZc66\nGFYajYa71mYTZNTx6rZSOm2OCx4TERTODRnX0Ovq5fWSd4Ytls2Hqik43UrOxCiunp+C2+Pmo0rf\nlM2rUpYN23mFAAgy6PjXW6aTmRTO/qJG/vbhSTznFUWmW6fy/dnfIDIogo2nP+TZ4leGpXV9T6+T\n379+nN5+F/etn0RkpIZNldsxG0ysTV055OcTYmKChYxEC/llrby9u/xsQXBJUi5hxlB21OzBNkLr\nHvY5XDz2RgG9/S7uWadgjdbx/MnX8Hg9bMi4RjpGjTApmohxKzU+jOUzE6lvtbP1yKdzc406A7cp\nN+H0uHi68Hn6hqEFscfj5al3i7D3u7h9dRZxkSYAPqrcAcCa1BVDfk4hzjV/chy3rsygvbuf376W\nj73Pd8G7LHkha1JW0NTbwv8e/xsOt3NE4vF6vWw+VM0f/5EPMeVoY8uJN8Vyf85dcmEgRkSUJZhb\nlmdg63Px0paSQR+zNCmXNEsKR5ryOdF6cshjKK/v4vUdZVjMRu6/bgpajYajTcdpOTNlUxb8EyMh\n2KjnO7fOIC0+jN3H63lhc8kFo0mSwxL5wdxvkWZJ4WBDHn84+sSQLhDrcnv481uFNLX3cu3CVBZO\njeeDii30ufu4Jm21LJIvhs1Xr51MTHgwb+8u58mNRThdbow6I2tSVtDn7h+RdQ+9Xi9/++Aktc02\nrpqdjJIRxK+P/InTnZXMjp3ODGvOsMcgBpKiiRjXbl6egTlYz9u7y+no6T+7fYZ1KldNWEajvZkX\nT/5jyIeebjpYdbZt3tLpCQCc7qygpL2USZFZpITJwmZi+K2bn8Kq2UnUNtt4/M2CsyOubshYx9y4\nmZR3VfK3opeGfeFLt8fDC5tLeHl3PiGT89BOKCLUYObrM+6TC2MxolbOSiI90cLB4iaOl7VcsF+r\n0XLHpC+h1Wh5WX2TfveFI1K+qN5+F0+8fQK3x8vXrptCuNmIx+th05kpm2ulmC5GkClYz/dum0my\nNZTtebW8sq30gmuh8KAwvj3rIebEzuB0ZyW/PPxH6noaLnLEy/Py1lMUV7YzKyuGm5al02hvZlft\nfqwh0SxNyh2ScwgxmIRoMz++ey6ZSeEcKGrkFy8dpcvmYGlSLmGGUHZUD/9ok48OVXOwuInM5HAW\nzg/ml0ceo8HexKoJS7lv6h0y+tYPdA8//LC/YwDAbnc87O8YroTZHITdPnQXT2JkGA06QoL05JU0\n0213MjvbenZfdmQGanspRW0qYcZQUi0ThuSclQ3dPPHOCSxmI9/98gxsnm7eKvuA10vewYuXOybd\nQkxI1JCcyx8kF8YOjUZDzsRoqpt6KDjdRktnL7OzrWg1WnJiJlPWUU5Rm0qTvRklMhODzjDkMfT2\nu3jszXyOtO8nKDMfgm1MisziwWn3YDVFD/n5RpLkwtij0WhIT7CwM7+OkuoOls1IRK8beH/JYgzD\n6XFS2FqMy+ticlT2FZ/X6/XyzPsnUas7WJ+byopZSQAUtBSxo2YP8+JmsShx/hWfxx8kD8Yuo0HH\nHMVKflkL+aWteLxeJqcOvD7RaXXMtE4DjYbjLSc41JBHUmgCsSbrRY76+bbn1fD27gqSrWa+fcsM\njHodL578Bw22Ru6YdAtJoQlX+tT8QnJh7Agy6sidGkdLRx8Fp9s4rDaRMzEGi9lIYWsxeq2O7MjM\nYTl3cWU7T71bjCXUyHVXB/NM8bP0ufq5NXsD6yeuDoiCyWjNBbM56GcX2ydFkyEyWv/44vOlxoVx\nrLSFwvI2pqRFEm3xrUSt1WiZHJXNwYY8ClqKmBKtXPHQ6H6nm9+8eowuu5O7r0/hYOdOni9+jcqu\namJCorhNuYnp1rHdIURyYWzRaDTMzIqhuLKdgtNtuD1epqRFodNomR4zlZKOMorbSjjYkEecyXpF\nF8Lna+3s45E3N1MX9jH6mAbCjGbunHwLN2asx2w0Ddl5/EVyYWyymI243B7yS1txOD1MS7+weJce\nnsaRxmMUt5UwLWbyFXc621PQwMa9FWQkWnjguilotRq6HN28pL5Bp6OL+6beQZgx9IrO4S+SB2Nb\nkFHH7Gwrx061cPRUC1qtBmVCxIDHaDQasiMziDdZOdZcyMGGowTrg0mzpFz2F7ziijaeeKcIc4iB\nH94+izCzgd11+9latZP08FRuyrx2zH5plFwYW3Ra7ZkbSRryTrWw70QDizOzKbUXUtZZydKkBUN+\nM6mtq49fv3IMl9vDytVONla/jU6j5YGcu1iQMGdIz+VPozUXpGgyAkbrH198Po1GQ7I1lF3H66lq\n6GbZjMSzH8gh+mCSQxM50JDHybYSFsTPuaI3yJe3nqKwppa02bUc7N58tlhyS9YN3K7cTHJY4lA9\nLb+RXBh79DotM7NiyCtp5tipFsLNRtISLBh0BnLj56LX6jnRqnKwMY/2vg6yItMxaK/sQqGouoFf\n7XqevtjjaPQOliTl8tD0e0i1TBizF8Tnk1wYuzKTwjlU3ERBeSvTM6KJDAsasF+n1RFvjuVAwxGq\numtYlDj/C79u61tt/PGN4xgNcOt1MRxtPcKbZe/xRum7dDq6mGHNYcWExUPxtPxC8mDsCwnSMyvL\nSl5JM3klzRgNWjKTwi94zSeGxjMpKouClmKONRdQb28iJiTqkouKje12fv3KMdweL9+5dTrt2iqe\nKnye/fWHMWgN3J9zJxHBY3ddH8mFsUej0aCkRBIfZeKI2syBomampEVR5zyNXqsnOzJjyM7ldLn5\n7av5NLbbmbakkSNdewgzhvKtmV9DiRqeUS3+MlpzQYomI2C0/vHFpYmyBNPc0UtheRvhoUFMTPj0\nA95qisbj9XC8pYgGexNzYmd8oYvjPWoZG8s/xJhegE3TMqBYMsGShFYTGEsMSS6MTUEGHdMyojlQ\n1MhhtYnU+DDio0xoNVoyI9KZbp1KeWcVRW0qBxuOkmiO/0LTZ7xeL68c3cFrla+AuQ2LNppvzr6P\nZckLh2X6jz9JLoxdOq2WZGsoewoaKK/vYun0BLTage/71pBomu2tFLeVYDKEMDE89bLP02Jr5zeb\nPqQvQiU4vZjDrYco7SzH5rSTFZnBsuSFXJ9+NXqtfqie2oiTPAgMpmA9M7NiOKI2c0RtprKhm+wJ\nEYQEDXxtRgSFMyd2BqUd5ajtp9hTdwC1rZQQfTCxJutFr5/sfS5+9fJR2rr7WX9VKAdsm9ha/TE2\np51FCfP42rSvEG+OG4mnOmwkF8auZGsoU9IiOXaqhfLTEJJQR3VPFUuScgdcu7g9broc3TTam6nu\nruVUexknWlXa+trRaXWYDaaL5sBzm1Tyy5pImK1S5z1JvCmW78x6iITQ+JF6miNmtObCZxVNNMPZ\nW/1yNDd3j45AviCrNYzm5m5/hyGuQGdPP//nyf3otBoeeWghoSGfvgl6vB7+eOwpStpLuSnzWlan\nLL/k47b3dfBO6WYONhwGrZdIYxTXZ6xhbtzMgOwKIrkwtpXVdfLLF4+CBv79jtkDCohuj5sPK7fx\nYcVWPF4PixPnc1PmdYTogz/3uJ393VR0VvKPoq20emrxunXkRi3lzllXB2QegORCIHjm/WJ2Ha/n\nlhUZrM+9sCjS7ejh5/t/hdPr4icLvk9UcOTnHrPb0cPu2v0cbS4Y0NY+KjiSKdEKU6MUsiMzCL6E\nvBoLJA8CS3NHL8+8X8zJqg6CjDq+tCydVbOTLygqerweittK2F69m+I2XzeqqOBIlicvYlHC/AGL\nfHs8Xn73ej4n6itJzKmiTVMNwAxrDjekXz3miyWfkFwY+1o6e/n968dp1BViSFGZaEnDZAims7+L\nTkcXPQ4bXi7+ldaoM5IcmkhKWBIpYclMCEvC02vmvX1VHCipJmzqMVxBbWRFpPPgtLsxGcb+VOXB\njNZcsFrDLnpXXIomQ2S0/vHF5fnoYBUvbytlxcxE7l43acC+Lkc3jx78Hd1OG9+Z9c9kRKR95rE6\n+7v5qHIbu2r34/a68fSZmBO+iPsWXhWwXxJBciEQHC1p5rE3CwgLMfAfd88lNmJgB5vq7lqeLXqF\nOlsDkUER3DX5ViZFZZ3d3+fqp7q7hoquaiq7qinvrKLD0Xl2v7Y7jq/N+jLTU4ZmceXRSnJh7LP1\nOfnPvxygt9/Ff98//2x7+HPtqz/M88WvkhM9iX+eft9F7yI22BrZVr2LAw15uDwudOhwdEYQ6kri\nX9dexQRLfMBMTTuX5EHg8Xq97C6o59Vtpdj6XExMsHDvNZOYEDv4ujsNtka21+zhYP0RHB4nRp2R\n3Pg5rEheTJw5lr9tzWNf60700XWggayIdDZkXPOFRm+NZpILgaG338Wf3s6nzPIWGqOv86ZBayAi\nyILFaPH9b1AY4UYL4UEWzAYTzb2tVHfVUtVdQ72tcUBhxevW4bGHYQh24DHYmRc3mzsn34JhDI8w\n/DyjNReGpWiiKMpy4DXgq6qqvjvI/juB7wAe4ElVVZ/+rONJ0USMBi63h4efOUR9i42f3DuXtPiB\n83BPtZ/m90efIDzIwo/mfXvQhfl6nDY+KNvGrrp9uHFBfwiO2gyyQ6fy/dtmow3Ai+JzSS4Ehq1H\nanhhcwlxkSH88I7ZF6zp4PK4+KBiKx9Vbsfj9ZAbPxetRktFV9WFFwROI56ecDy2CFJCU/nG6mVE\nWQLjLvpnkVwIDAeLG/nft08wOTWSf/unmRcUNrxeL384+iQlHWXcn3MXs2OnD9intpeytXonRa0q\nADEh0eRac3nvfTdOh5af3DOXZOvYXOT1UkgeBK5Om4OXt57iQFEjOq2GdQtSuH5RGkbD4DeGbE47\ne+sO8nHNXtr7OwCI1ifQ4mhAo/WSYErgpqxrmBKlSAFRjGpuj4d/7D7JzhMV2Lv14NGjTIhg2cxE\n5ipWDPqL3xxVa1p56/AxStuq0Jq7CArvwWPswouXdWlXcd3EtQH5+j/XaM2FIS+aKIqSAfwGX0Hk\n6fOLJoqimIE8YD7gAA4By1RVbbvYMaVoIkaLooo2fvXyMaItQUxJiyIh2kx8tImEaBPW8BC2VO3g\n7dMfMDkqm2/M+OrZtUgqW9p4u3grJf1H8WpdeB1BOGszCO/PYFZmHDcsSSPMZPTzsxt+kguB47Xt\npXxwoAqAKEsQKbFhpMSFkhIXRkpsKNHhwVR11/Bc8avU2xoB390WsyeGnlYTtrYwvLZwok0RLJmW\nyKKp8cScN2olkEkuBAav18sfXj9OflkrIUE6EmPMJMWYSYwJJcnq+7lP08kjh36HSR/CTxb8Gwad\ngSONx9hWtYtam28KTow+EatzKs62GKoabHTaHHzlaoWVZ9oLByrJg8B3vKyF5zaptHb1ExsZwj1X\nK0xOi7rgcV02B5WN3Zyu7+REWxH1mkI8pjboN3FT9jpWpc8PmPXdBiO5EHicLjdHSprZeayOk1W+\nQqA5WM/CnHiWz0gk6ZyCeEl1Bxv3VnCi3Pd1ODMpnOsXp5EzMQqnx0W/u3/Mdkm7XKM1F4ajaGIC\n+oGngdcHKZqswjcC5a4zvz8BvKuq6saLHVOKJmI0eWnLKbYeqcFzXn7odRpio0JwJh+gx1DLNNNC\nwu2TONx6kN7wEjR6J16nEUvPFHLj5jEnO4FkqzngK8bnklwIHB6vly2HqjlR0U5VYzedtoGLdpmC\n9KTEhZIcZ8IZ3ERFtYPKCgAtwUYd8ybFsnhaAlnJF3ZZGA8kFwJHZ08/r+0oo6Khm8Y2O27PwM8G\nc7Ce0LQKuiyFRBBPj6cTl7YXr1eDuy0OV0MaXtunbVpDQwwsyonntlWZAZ8bkgfjQ5/DxVu7ytl8\nuBqvF5ZMS2C2YqWqsZvKhm4qGrpp7+4f8G8sJgNJiXo2LFTITrqwyBJoJBcCW2O7nV359ewuqKfr\nzPVSRpKFeZPiOFrSjFrtK6pMSong+sUTmZQSEfDv/xczWnNh2NY0URTlbwxeNLkDmKeq6nfP/P5z\noFpV1ScvdiwpmojRxuX20NTeS32rjfpWO/WtdhrafD/3eXoJmroXjbEPXEY0Bgdaj5GpoXO5efIq\nYsMvrb1eIJJcCFydPf1UNfVQ1dhNdVMPlY09NLXZz07E0QCT0yJZPC2B2dlWgi4yRHu8kFwITC63\nh4Y2O3UtNmqabdS12Kht7qGp04Zxyl60ph7fHPWWFKIcCkkWK/FRprP/xUWZBiw0HugkD8aX8vou\n/v7BSaqaegZsDzcbSY0PIy0+jNS4MFLjw4gMCxpXXxolF8YHl9tDfmkrO/PrKDzdevYaKSc9iusX\npZGVHPGZ/348GK258FlFk89dYUZRlAeAB87b/F+qqm66jBg+9x0xMtKE/jPmf40FVmuYv0MQQywh\nPpwZ523zer20dfVxoDyTZ9Wn0QXBtdnr2DB5DWZjYK5yfbkkFwKT1RpG5sSYAdt6+11U1ndR32pj\nano0sYMslDmeSS4EpoT4cGadt63f6eZ45QyKm0+xLGMeE2Ii0WnHzxfCzyJ5MH5YrWHMnprA5oNV\ndHT3k5EcTmZyxLhYx+pSSC6MDwnx4axbkk5Tu53DxY1kTYgga8Lnd1cbT8ZaLnxu0URV1aeApy7z\nuHXAuU2lk4D9n/UP2tvtl3mK0WW0VszE8JmXlEl61A8I1gdjNpiwd7qxI68ByYXxJ9psINocAS63\n/O3PIbkw/qSFW0kLtwLQ1trzOY8eHyQPxqe5mdFnf3b3O2ludvoxmtFBcmH80QDzsnw3m+Rv/6nR\nmm6xrMkAAAVWSURBVAufVcgZrl5GB4CnFEWJAFzAYnyddIQIKNEhgT8HVwghhBBCCCHGqy+0RLWi\nKNcqirIDWAc8oijKR2e2/0hRlIWqqvYCPwI2AVuAn6mq2jlEMQshhBBCCCGEEEIMuytaCHYoyUKw\nQgQGyQUhfCQXhJA8EOITkgtC+IzWXPishWADtxm6EEIIIYQQQgghxBWQookQQgghhBBCCCHEIKRo\nIoQQQgghhBBCCDGIUbOmiRBCCCGEEEIIIcRoIiNNhBBCCCGEEEIIIQYhRRMhhBBCCCGEEEKIQUjR\nRAghhBBCCCGEEGIQUjQRQgghhBBCCCGEGIQUTYQQQgghhBBCCCEGIUUTIYQQQgghhBBCiEHo/R1A\nIFAU5bdALuAFvq2q6iE/hyTEiFEU5RfAUnzvJ48Ah4DnAB1QD3xFVdV+/0UoxMhQFCUEKAR+DmxF\n8kCMQ4qi3An8EHABPwWOI7kgxhlFUUKBZ4FIIAj4GdAA/Bnf94Xjqqp+3X8RCjG8FEXJAd4Gfquq\n6mOKokxgkM+CM58Z3wE8wJOqqj7tt6A/g4w0uUKKoiwHslRVXQjcD/zBzyEJMWIURVkJ5Jx5/a8D\nfgf8N/C4qqpLgVLgq34MUYiR9GOg7czPkgdi3FEUJRr4L2AJcB2wAckFMT7dC6iqqq4EbgF+j+8a\n6duqqi4GwhVFucaP8QkxbBRFMQN/xHcD6RMXfBacedxPgdXACuC7iqJEjXC4l0SKJlfuKuAtAFVV\ni4FIRVEs/g1JiBGzE7j1zM8dgBnfm947Z7ZtxPdGKERAUxRlEjAFeO/MphVIHojxZzWwRVXVblVV\n61VVfRDJBTE+tQDRZ36OxFdQn3jOaHTJBRHI+oH1QN0521Zw4WfBAuCQqqqdqqr2AnuAxSMY5yWT\nosmViweaz/m9+cw2IQKeqqpuVVVtZ369H3gfMJ8z9LoJSPBLcEKMrF8D3zvnd8kDMR6lASZFUd5R\nFGWXoihXIbkgxiFVVV8GUhRFKcV3g+nfgPZzHiK5IAKWqqquM0WQcw32WXD+9+hRmxdSNBl6Gn8H\nIMRIUxRlA76iyTfP2yX5IAKeoih3A/tUVS2/yEMkD8R4ocF3d/1mfNMTnmHg619yQYwLiqLcBVSp\nqpoJrAKeP+8hkgtiPLvY63/U5oUUTa5cHQNHliTiW9xGiHFBUZSrgf8ErlFVtRPoObMgJkASA4fm\nCRGIrgU2KIqyH3gA+AmSB2J8agT2nrnLWAZ0A92SC2IcWgxsAlBVNR8IAWLO2S+5IMabwa6Lzv8e\nPWrzQoomV+4jfAs8oSjKbKBOVdVu/4YkxMhQFCUc+CVwnaqqnyyAuQX40pmfvwR86I/YhBgpqqre\npqrqPFVVc4Gn8HXPkTwQ49FHwCpFUbRnFoUNRXJBjE+l+NZrQFGUVHwFxGJFUZac2X8zkgtifBns\ns+AAME9RlIgzHacWA7v8FN9n0ni9Xn/HMOYpivIosAxfq6R/OVNRFiLgKYryIPAwUHLO5nvwfXEM\nBiqB+1RVdY58dEKMPEVRHgYq8N1hfBbJAzHOKIryEL7pmgD/F18beskFMa6c+QL4VyAO0OMbgdgA\nPIHvpvUBVVW/d/EjCDF2KYoyB99ab2mAE6gF7gT+xnmfBYqi3AL8AF8r7j+qqvqCP2L+PFI0EUII\nIYQQQgghhBiETM8RQgghhBBCCCGEGIQUTYQQQgghhBBCCCEGIUUTIYQQQgghhBBCiEFI0UQIIYQQ\nQgghhBBiEFI0EUIIIYQQQgghhBiEFE2EEEIIIYQQQgghBiFFEyGEEEIIIYQQQohBSNFECCGEEEII\nIYQQYhD/HyUXQgA7s75JAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "metadata": { "id": "MQj5P-FKOgqG", "colab_type": "text" }, "cell_type": "markdown", "source": [ "**YOUR TASKS**: \n", "* [**ALL**] Change the learning rate up to 5 orders of magnitude larger and smaller and retrain. What happens when it is too large? What happens when it is too small?\n", "* [**ALL**] Change the `SimpleRNN` to `GRU`.\n", " * You can read more about LSTMs in [this blog post](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) by Chris Olah. \n", " * What is the effect on the number of parameters? Can you explain why? Now do the same for `LSTM`.\n", "* [**INTERMEDIATE**] Note that the loss does not decrease much after around epoch 400. Add \"Early Stopping with patience\" to the `model.fit()` function to stop it from training beyond this point. **Hint**: Look at tf.keras.callbacks.\n", " * *Early stopping* is a technique where we stop training the model once it's performance on validation data stops improving, and is a very common approach to prevent overfitting. Early stopping *with patience* means as soon as the model starts doing worse on validation we wait for at least `patience` more evaluations before stopping training, and if it improves within that time, we reset the counter. The patience parameter is a way to ensure we don't stop by accident, as the validation loss can fluctuate randomly from epoch to epoch.\n" ] }, { "metadata": { "id": "_totIpxmZ8_v", "colab_type": "text" }, "cell_type": "markdown", "source": [ "##Generating Shakespeare\n", "\n", "Now let's build an RNN language model to generate Shakespearian English! A language model is trained to assign high probabilities to sequences of words or sentences that are well formed, and low probabilities to sequences which are not realistic. When the model is trained, one can use it to *generate* data that is similar to the training data.\n", "\n", "Our data is now sequences of discrete symbols (characters). But neural networks operate in continuous spaces, and so we need to take the discrete language data, and **embed** it in a continuous space. To do this, we'll simply break up the data into sequences of characters, and represent each character using a learned vector. This is a standard trick for processing text using neural networks. " ] }, { "metadata": { "id": "9dFQtnDLZa3c", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Download and Preprocess the Data" ] }, { "metadata": { "id": "Tmmjc-EigwCw", "colab_type": "text" }, "cell_type": "markdown", "source": [ "We first download the data and examine what it looks like:" ] }, { "metadata": { "id": "hybIopOLPD4f", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 791 }, "outputId": "eded9c5c-2ece-4774-b207-8990b931f782" }, "cell_type": "code", "source": [ "context = ssl._create_unverified_context()\n", "shakespeare_url = 'https://cs.stanford.edu/people/karpathy/char-rnn/shakespeare_input.txt'\n", "\n", "data = urllib2.urlopen(shakespeare_url, context=context)\n", "all_text = data.read().lower()\n", "\n", "print(\"Downloaded Shakespeare data with {} characters.\".format(len(all_text)))\n", "print(\"FIRST 1000 CHARACTERS: \")\n", "print(all_text[:1000])" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Downloaded Shakespeare data with 4573338 characters.\n", "FIRST 1000 CHARACTERS: \n", "first citizen:\n", "before we proceed any further, hear me speak.\n", "\n", "all:\n", "speak, speak.\n", "\n", "first citizen:\n", "you are all resolved rather to die than to famish?\n", "\n", "all:\n", "resolved. resolved.\n", "\n", "first citizen:\n", "first, you know caius marcius is chief enemy to the people.\n", "\n", "all:\n", "we know't, we know't.\n", "\n", "first citizen:\n", "let us kill him, and we'll have corn at our own price.\n", "is't a verdict?\n", "\n", "all:\n", "no more talking on't; let it be done: away, away!\n", "\n", "second citizen:\n", "one word, good citizens.\n", "\n", "first citizen:\n", "we are accounted poor citizens, the patricians good.\n", "what authority surfeits on would relieve us: if they\n", "would yield us but the superfluity, while it were\n", "wholesome, we might guess they relieved us humanely;\n", "but they think we are too dear: the leanness that\n", "afflicts us, the object of our misery, is as an\n", "inventory to particularise their abundance; our\n", "sufferance is a gain to them let us revenge this with\n", "our pikes, ere we become rakes: for the gods know i\n", "speak this in hunger for bread, not in thirst for revenge.\n", "\n", "\n" ], "name": "stdout" } ] }, { "metadata": { "id": "jIuagNcdQLqM", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "training_text = all_text[:1000000] # Keep only the first 1 million characters" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "UK1x69AngvLJ", "colab_type": "text" }, "cell_type": "markdown", "source": [ "We now preprocess the text data as follows:\n", "\n", "1. Extract the vocabulary of all `vocab_size` unique characters appearing in the data.\n", "\n", "2. Assign each character a unique integer id in `0 <= id < vocab_size`. This is so we can map the characters to unique embedding vectors. This is a common way to map discrete inputs to continuous vectors that neural networks can work with. See e.g. this [blog post](https://www.tensorflow.org/tutorials/representation/word2vec), or [this one](http://ruder.io/word-embeddings-1/) for more information.\n", "\n", "3. Split the data into sequences (\"windows\") of `max_len` characters (the input to the model) followed by the next character as target. E.g. using `max_len=5` the sentence \"I saw a cat\" (11 characters) will get split into \"I saw\" and /space/, \"/space/saw/space/\" and \"a\", \"saw a\" and /space/, etc. To add some variation, we skip `step` characters between each sequence (i.e. we use a \"sliding window of `max_len` with stride `step`\")." ] }, { "metadata": { "id": "zPvsNXKZPJKz", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 73 }, "outputId": "1dcaaa7f-b946-4f8d-cb1b-32674b125465" }, "cell_type": "code", "source": [ "max_len = 30 # We only consider this many previous data points (characters)\n", "step = 3 # We start a new training sequence every `step` characters\n", "sentences = [] # This holds our extracted sequences\n", "next_chars = [] # This holds the targets (the follow-up characters)\n", "\n", "chars = sorted(list(set(training_text))) # List of unique characters in the corpus\n", "vocab_size = len(chars)\n", "print('Number of unique characters: ', vocab_size)\n", "print(chars)\n", "\n", "# Construct dictionaries mapping unique characters to their index in `chars` and reverse\n", "char2index = dict((c, chars.index(c)) for c in chars)\n", "index2char = dict((chars.index(c), c) for c in chars)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Number of unique characters: 39\n", "['\\n', ' ', '!', '$', '&', \"'\", ',', '-', '.', '3', ':', ';', '?', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']\n" ], "name": "stdout" } ] }, { "metadata": { "id": "O2PhcQwrc2JX", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Now we encode the training data by mapping each character to its unique integer id." ] }, { "metadata": { "id": "xY0qXZmVq8kW", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 35 }, "outputId": "89446005-6eba-42da-fce5-8bcfb723a567" }, "cell_type": "code", "source": [ "for i in range(0, len(training_text) - max_len, step):\n", " sentences.append([char2index[s] for s in training_text[i: i + max_len]])\n", " next_chars.append([char2index[s] for s in training_text[i + max_len]])\n", "\n", "print('Number of extracted sequences:', len(sentences))" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Number of extracted sequences: 333324\n" ], "name": "stdout" } ] }, { "metadata": { "id": "PsZy6Kshc-Sp", "colab_type": "text" }, "cell_type": "markdown", "source": [ "This yields the following numpy arrays:" ] }, { "metadata": { "id": "vhgSaP5ntDtq", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 35 }, "outputId": "2af89a0d-e7e3-4744-8d8d-aa9ec1ab9293" }, "cell_type": "code", "source": [ "X, Y = np.array(sentences, dtype=np.int64), np.array(next_chars, dtype=np.int64)\n", "X.shape, Y.shape" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "((333324, 30), (333324, 1))" ] }, "metadata": { "tags": [] }, "execution_count": 22 } ] }, { "metadata": { "id": "sBR2LsXjmqTU", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Let's take a look at the first example." ] }, { "metadata": { "id": "2H1jobcrmwK7", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 89 }, "outputId": "3826ee10-ca7f-466f-c0f4-5ab37ef7aab7" }, "cell_type": "code", "source": [ "print(\"X[0].shape = {}, Y[0].shape = {}\".format(X[0].shape, Y[0].shape))\n", "print(\"X[0]: \", X[0])\n", "print(\"Y[0]: \", Y[0])" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "X[0].shape = (30,), Y[0].shape = (1,)\n", "X[0]: [18 21 30 31 32 1 15 21 32 21 38 17 26 10 0 14 17 18 27 30 17 1 35 17\n", " 1 28 30 27 15 17]\n", "Y[0]: [17]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "tEQWEZlSZgpF", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Build an RNN language model" ] }, { "metadata": { "id": "rCysOLWadPHF", "colab_type": "text" }, "cell_type": "markdown", "source": [ "A **language model** estimates a probability distribution over sequences $\\mathbb{x}_{1:N} = (x_1, x_2, ..., x_N)$ by breaking up the full joint probability into a sequence of conditional probabilities using the **[chain-rule of probability](https://en.wikipedia.org/wiki/Chain_rule_(probability))**:\n", "\n", "\\begin{align}\n", " p(\\mathbb{x}_{1:N}) &= p(x_1) \\cdot p(x_2 | x_1) \\cdot p(x_3 | x_2, x_1) \\ldots \\\\\n", " &= \\Pi_1^N p(x_i | \\mathbb{x}_{1:i-1})\n", "\\end{align}\n", "\n", "In other words, to model the probability of the phrase \"*i saw a cat*\" at the character level, the model learns to estimate the probabilities for p(i), p(/space/| i), p(c | i, /space/), and so forth, and multiplies them together. \n", "\n", "There are many different ways in which to estimate these individual probabilities. But one particularly effective way is to use an RNN! To do this, we'll therefore be modeling the $p(x_i | \\mathbb{x}_{1:i-1})$ terms using an RNN conditioned on $\\mathbb{x}_{1:i-1}$.\n", "\n", "* We model these probabilities at the character-level, so we'll use an `Embedding` layer as the first layer of our model to map the discrete character id's to real-valued embedding vectors. \n", "* Next, the RNN-core will map these sequences of character embeddings to a probability distribution over all characters $p(x_i | \\mathbb{x}_{1:i-1}) \\in \\mathbb{R}^\\textrm{vocab_size}$ at every step of the sequence. To do this, the RNN will map the embeddings to a sequence of *hidden states*. We will then use a `Dense` layer to map from the RNN hidden state to an output distribution over the total number of characters using a [`softmax`](https://en.wikipedia.org/wiki/Softmax_function) activation.\n", "\n", "We can do this with a few lines of code:" ] }, { "metadata": { "id": "k8AxhQuePOCN", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 251 }, "outputId": "35b12bba-5085-487e-8f08-83d149261ca1" }, "cell_type": "code", "source": [ "embedding_dim = 32 # Map each character to a unique vector of this dimension\n", "vocab_size = len(chars)\n", "\n", "model = tf.keras.models.Sequential()\n", "model.add(tf.keras.layers.Embedding(\n", " vocab_size, embedding_dim, \n", " input_length=max_len, \n", " embeddings_initializer=tf.keras.initializers.TruncatedNormal))\n", "model.add(tf.keras.layers.LSTM(\n", " 128, \n", " input_shape=(max_len, embedding_dim), # NB: Ensure this matches the embedding_dim!\n", " dropout=0.1, # input-to-hidden drop-probability\n", " recurrent_dropout=0.2)) # hidden-to-hidden drop-probability\n", "model.add(tf.keras.layers.Dense(vocab_size, activation='softmax'))\n", "\n", "model.summary()" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "embedding_2 (Embedding) (None, 30, 32) 1248 \n", "_________________________________________________________________\n", "lstm_2 (LSTM) (None, 128) 82432 \n", "_________________________________________________________________\n", "dense_2 (Dense) (None, 39) 5031 \n", "=================================================================\n", "Total params: 88,711\n", "Trainable params: 88,711\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ], "name": "stdout" } ] }, { "metadata": { "id": "m4fFjFtZokf2", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Select the optimizer and loss" ] }, { "metadata": { "id": "RHOWm55whZUt", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Once we have a model that can map sequence of characters to a probability distribution over the next character in the sequence, we can train it using **maximum likelihood** on the training set to find the model parameters which maximizes the probability of the training data. Again, this is very simple to do by choosing an optimizer and selecting the `sparse_categorical_crossentropy` loss function:" ] }, { "metadata": { "id": "hKJNZXs7PSW-", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "optimizer = tf.train.AdamOptimizer(learning_rate=0.001)\n", "loss='sparse_categorical_crossentropy'\n", "\n", "model.compile(loss=loss, optimizer=optimizer)" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "dEr9hEqFiGx6", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Helper functions" ] }, { "metadata": { "id": "3zXa95pBPUw3", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "def sample_with_temp(preds, temperature=1.0):\n", " preds = np.asarray(preds).astype('float64')\n", " preds = np.log(preds) / temperature\n", " exp_preds = np.exp(preds)\n", " preds = exp_preds / np.sum(exp_preds)\n", " probas = np.random.multinomial(1, preds, 1)\n", " return np.argmax(probas)" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "AyH6U3er5fis", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 53 }, "outputId": "c7d6e470-604f-4b85-e6bd-433f88e0069e" }, "cell_type": "code", "source": [ "def shift_and_append(test_arr, next_item):\n", " '''Returns a copy of test_arr with items shifted one position to the left and \n", " next_item appended.\n", " '''\n", " tmp = np.empty_like(test_arr)\n", " tmp[:,:-1] = test_arr[:,1:]\n", " tmp[:,-1] = next_item\n", " return tmp\n", "\n", "## TEST the above function:\n", "test_arr = np.array([[1,2,3,4]])\n", "\n", "print(\"test_arr = {}\".format(test_arr))\n", "test_arr = shift_and_append(test_arr, 5)\n", "print(\"roll_arr(test_arr, 5) = {}\".format(test_arr))" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "test_arr = [[1 2 3 4]]\n", "roll_arr(test_arr, 5) = [[2 3 4 5]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "q9le2p0YxeYD", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "def sample_from_model(model, \n", " num_generate=400, \n", " prev_text=None, # the text used to condition the model\n", " temperatures=[0.2, 0.5, 1.0, 1.2]):\n", " \n", " if not prev_text:\n", " # Select a text seed at random\n", " start_index = random.randint(0, len(training_text) - max_len - 1)\n", " while ((start_index < (len(training_text) - max_len - 1)) and (\n", " training_text[start_index - 1] is not ' ')):\n", " start_index += 1 # Advance to beginning of new word\n", " prev_text = training_text[start_index: start_index + max_len]\n", " \n", " if len(prev_text) != max_len:\n", " print(\"`prev_text` must be of length `max_len`.\")\n", " return\n", "\n", " print('GENERATING TEXT WITH SEED: \\n\"' + prev_text + '\"')\n", " prev_text_arr = np.array(\n", " [[char2index[c] for c in prev_text]], dtype=np.int64) \n", " \n", " for temp in temperatures:\n", " print('==TEMPERATURE:', temp)\n", " sys.stdout.write(prev_text)\n", "\n", " # Start with the same sampled text for all temperatures\n", " generated_text = prev_text \n", " generated_text_arr = prev_text_arr\n", "\n", " # Now generate this many characters\n", " for i in range(num_generate): \n", " \n", " # Get the output softmax given the conditioning text\n", " #prev_text = generated_text_enc[np.newaxis,:]\n", " preds = model.predict(generated_text_arr, verbose=0)[0]\n", " \n", " next_index = sample_with_temp(preds, temp)\n", " next_char = index2char[next_index]\n", " generated_text += next_char\n", " generated_text = generated_text[1:]\n", "\n", " # Left-shift and add into encoded array\n", " generated_text_arr = shift_and_append(generated_text_arr, next_index)\n", "\n", " sys.stdout.write(next_char)\n", " sys.stdout.flush()\n", " print()" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "a78CrsaMiKrA", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Train the model\n", "\n", "Let's train the model! The code below will train the model on a subset of the available data, and then generate from the model every `sample_every` number of batches.\n", "\n", "To generate from the model, we use `model.predict()` on a sequence of `max_len` conditioning characters to produce an output distribution over `vocab_size` characters. We then sample one character from this distribution and shift everything up by one and append the new characters. By repeating this, we can generate text from the (partially-trained) model.\n", "\n", "**NOTE**: \n", "* It takes a while to train a model that starts generating anything resembling the Shapespeare text! In general it should start getting the rough structure in place around the 100K training example mark (examples, not batches). But to generate any meaningful words will need several hundred thousand examples.\n", "* We sample with *temperature*. This is a way to sharpen or flatten the probabilities produced by the model. By lowering the temperature, we emphasize the modes of the predicted distribution, and by increasing the temperature, we flatten the modes (tends towards uniform). Higher temperatures therefore encourage the model to be more 'creative', instead of always choosing the most likely next character." ] }, { "metadata": { "id": "0RcFKgkdPXuI", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 8976 }, "outputId": "bb20fa69-1ab1-48d0-843f-b8cc9ed2c77c" }, "cell_type": "code", "source": [ "batch_size = 128\n", "total_num_batches = X.shape[0] // batch_size\n", "sample_every = 256 # Train on this many batches, then generate something\n", "\n", "print(\"Training on {} batches in total.\".format(total_num_batches))\n", "\n", "for cur_batch in range(0, total_num_batches, sample_every):\n", " print('TRAINING ON BATCH {} to {} (example {} to {})'.format(\n", " cur_batch, cur_batch + sample_every,\n", " cur_batch * batch_size, (cur_batch + sample_every) * batch_size)\n", " )\n", " \n", " X_batch = X[batch_size * cur_batch : batch_size * (cur_batch + sample_every), :]\n", " Y_batch = Y[batch_size * cur_batch : batch_size * (cur_batch + sample_every), :]\n", " \n", " '''\n", " # Show the first 5 examples to make sure we're not training on garbage\n", " print(\"X_batch.shape = {}\".format(X_batch.shape))\n", " print(\"Y_batch.shape = {}\".format(Y_batch.shape))\n", " print(\"FIRST 5 EXAMPLES:\")\n", " for num in range(5):\n", " in_seq = [index2char[int(indx)] for indx in np.nditer(X_batch[num, :])]\n", " next_char = index2char[Y_batch[num, 0]]\n", " print(str(num) + '. ' + ''.join(in_seq) + '-->' + next_char)\n", " '''\n", " \n", " model.fit(X_batch, Y_batch,\n", " batch_size=batch_size,\n", " epochs=1,\n", " verbose=1)\n", "\n", " print(\"GENERATING SOME RANDOM TEXT FROM THE MODEL\")\n", " sample_from_model(model)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Training on 2604 batches in total.\n", "TRAINING ON BATCH 0 to 256 (example 0 to 32768)\n", "Epoch 1/1\n", "32768/32768 [==============================] - 124s 4ms/step - loss: 2.7223\n", "GENERATING SOME RANDOM TEXT FROM THE MODEL\n", "=====GENERATING TEXT WITH SEED: \n", "\"else thou art suborn'd against\"\n", "==========TEMPERATURE: 0.2\n", "else thou art suborn'd against sous the the the and the and wou the we hand the hand the and the our the han the ane the the ar the an the the and hand the hat he hand the the and and the the ser mous and the and the wous wou sert and the sou the wour yous wou whe wou the the the and the sou are he than the the mat ane the the wous an the the hand wou the hand the hat ane in the and the wind the the we the hare he and the and \n", "==========TEMPERATURE: 0.5\n", "else thou art suborn'd against then wous tha collld me wall oucon isen sous, the ve i ande thene ase ak on? he the dens harendene and ous has the pour me mand an thean you ha co hat the and hene the se the or oure hare ias and the uin wo the anan han sor hane wol leond couto angus the ar hor hand fous the mone an donene sous you vore the bed at fof se that ani wee thes hous gome arius fowe boue thi that oous mat ind and har bo\n", "==========TEMPERATURE: 1.0\n", "else thou art suborn'd againste bounds\n", "rhmes;\n", "ourhe wcuthys !o wgarhin'vghanl inhabgle thestons t bograg gavcan ' swtm thenucesu\n", "golde sy',\n", "\n", "eat ak spwou, dcint tod fo ujan fou, puaf rou harr utharng:\n", "eanhs; pow ir aomem ce; enrhes pavir ws.\n", "yoteusgoxua! ay pom rofori .,r, hor londemen\n", "thoag yor d hcas aats h, nehhas ial y hayan nt on di\n", "mll tous.\n", "; avtoly recetinlas walom\n", "menstcom\n", "thet,\n", "mnc eapa? darm aay\n", "tond monarpd hes for\n", "==========TEMPERATURE: 1.2\n", "else thou art suborn'd againsth ac\n", "nfed\n", "nysefhekcf,\n", "bbmwat$\n", "eat helstrcrec nor. oour .\n", "witin wysinew:\n", "yary bom.\n", "w yitg\n", "ec,?\n", "whuade, war:,, lke, ty re foen tlaniulh,a\n", "yk thee puyby houcf'gmmend\n", "y'g wri;te se'de wine beant cm moudut bo kreliwe bswtot wwwapkntth\n", "win yole l het ofin- dbelim,l ctais, sfwin hyf\n", "d'!sesilevani? tharm yor bkafo btgn whe anuya\n", "urest hapadru.\n", "sfat houkt\n", "knd\n", "n:\n", "recict gordisio'\n", "lacoauf,s\n", "bte ro sivorsr fo\n", "TRAINING ON BATCH 256 to 512 (example 32768 to 65536)\n", "Epoch 1/1\n", "32768/32768 [==============================] - 124s 4ms/step - loss: 2.3506\n", "GENERATING SOME RANDOM TEXT FROM THE MODEL\n", "=====GENERATING TEXT WITH SEED: \n", "\"would he for the momentary tri\"\n", "==========TEMPERATURE: 0.2\n", "would he for the momentary trit the the mes the hat the the and in the the dour hare sour and and the the the the the the the the the be the mere hare he the hare hare he the sengere the the the the the the wour the the seare thare hare the the sour and sour the the the the and and meand the the the sour har the the me the he the the the the the me deat mour hare the the the the the the be the bere and the the the the sere the\n", "==========TEMPERATURE: 0.5\n", "would he for the momentary tringe meand mane erde thane sinke and the sour athe come bils got fast wour wour wis the forere be the moces a and to and mope hat blevere cous me nod ar the bout rengane dot the the the dos, hins me hare to the the sthe et ford.\n", "\n", "me butest thou the bere buther ante he pat hace the the wis mee de of mer and the sof and the the douer war the corte boured and beer me the meres sthe the wou hare be to \n", "==========TEMPERATURE: 1.0\n", "would he for the momentary tripthep kase norel,\n", " shis sace hame wad wath , misus fue, pirce yofarw bely wusidlas,:\n", "\n", "yout, hamu mem; try frothot hanoe, foule the snatobe.\n", "\n", "biyidour ymh fath mond hawh lfy aid hare at in it cotus of an roue h; hame osagterhh\n", "voium angert.\n", "\n", "benvin oupe arincorend amerer fisnd frecome gadram!\n", "froce; thurediug\n", "cire:\n", "whapltj 'le ai inds ot the ad dowh math srand auty ay, id athet coure grato conoth e\n", "==========TEMPERATURE: 1.2\n", "would he for the momentary trin ennh\n", "ih thartor tfsas camrncas thin w-d'yhe har, cionll.\n", "\n", "youtgsre on lvoiet pfea\n", "ancumy gooe hasy butan hysec fore huthe dore y!\n", "aknompt thexlos enly.\n", "svo utsply,\n", "ais stour, harky\n", "whe gy'ens nrod buthovirs gardst\n", "sorhbt tlule ifade.\n", "\n", "raver, com mes lovt, the nomvor erill, mim. go thetes oponve ut the buke bu .ome ay ntith\n", "at slef, havi,\n", ", thoux.\n", "\n", "ucinds husf'l as! slres hrkh$ inu?\n", "cbent? hec, g\n", "TRAINING ON BATCH 512 to 768 (example 65536 to 98304)\n", "Epoch 1/1\n", "32768/32768 [==============================] - 125s 4ms/step - loss: 2.1718\n", "GENERATING SOME RANDOM TEXT FROM THE MODEL\n", "=====GENERATING TEXT WITH SEED: \n", "\"myself and thought\n", "this was so\"\n", "==========TEMPERATURE: 0.2\n", "myself and thought\n", "this was son the the the the the the the the his the the the the the the the the the the the your the hing the the the bere in the the the sond the the the the the the the the the the the the the souster the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the sond the the the the the me the the the the the the the the the the the the\n", "==========TEMPERATURE: 0.5\n", "myself and thought\n", "this was soour my frath the diplour to mo the to the the the hast that wist i sing the to enged whe the mid the seling of the beren the tin the the soncest the thor souve wher thart my my to the my maing thes to ing and my wing of the beat i coun momend caren thes i so derenghas that in this of bore distus beme deat the hang the and to and sod realll as thith the the sout that the cain the deare wain the him\n", "==========TEMPERATURE: 1.0\n", "myself and thought\n", "this was songhy m melo this, thoa, wriinghat teaitor radll.\n", "\n", "pktilg:\n", "haat, theyr arnd 'rcad kim morty dourves.\n", "\n", "meisg ongter:\n", "am; wife berad hat, til the youce?\n", "akkikus,,\n", "and daindke:\n", "wthist dellad nle iit, thy poutid.\n", "\n", "bllorthi he remenk, porling hikench, whoth bild thors dye mysy take houth\n", "thils livery, the, rimlust;\n", "and thy i diznhi'.\n", "\n", "loucen:gus mens:\n", "any -thule ho knod any, to gravcut thouls enctou epi\n", "==========TEMPERATURE: 1.2\n", "myself and thought\n", "this was so mysolethon in miib.\n", "thing him has and ay yoy grea; ha ltorker sifrresy nlorert, hus, as kins,, tie havy, asus\n", "wut kha tye cinglm stalt, erives fod deady if, my nothind wiord osead me\n", "gpoupnten'et figenot ent.\n", "of.\n", "\n", "uckind prepiize:t'\n", "nova gith?\n", ", scave, mmy lovel.\n", "\n", "m'te racquu, steate tourels:\n", "mukths ryof i ghedse we ands neith\n", "yoused\n", "\n", "qucinys:\n", "ateruvand he yod bict?\n", "\n", "bicchelies:\n", "a\n", "lack, bupeald o\n", "TRAINING ON BATCH 768 to 1024 (example 98304 to 131072)\n", "Epoch 1/1\n", "32768/32768 [==============================] - 127s 4ms/step - loss: 2.1314\n", "GENERATING SOME RANDOM TEXT FROM THE MODEL\n", "=====GENERATING TEXT WITH SEED: \n", "\"my head and all this famous la\"\n", "==========TEMPERATURE: 0.2\n", "my head and all this famous land the rall the the with the sours and the ford the reand the the hast lord the the the be the the sour the the the the the hard the gare and my the that the the the the sord sour the hard the reand the the the the the sour the the with sour to bere the the the the come the frous the the the the the the the i with my the the the the the the the the hard the the the the the the my the with the sill\n", "==========TEMPERATURE: 0.5\n", "my head and all this famous land and to gare that the mard thour for hast the come your comes the is ar wich come he dare the flour to this of to the that but the in the row shar the sear, the with make the all the breces the cours sord a the langon then and my grouchard the leard four the for both the brome the hand, i the proke of wath rister his and and thou his the and the soun hard the grold wat ronder the serd is my my t\n", "==========TEMPERATURE: 1.0\n", "my head and all this famous lane.\n", "\n", "lorth, i ig hars y ag.r rish?yirusbal fite angy ther ioy proly to graves your kevi. focme\n", "hill htmy \n", "ratcrele.\n", "sing's at osssand, ands,\n", "bgerosem;\n", "gomus maims allpward ind grorbours.\n", "bule:\n", "aded dark warveans:\n", "to ficlir\n", "what to buth rok withrt ar watin:\n", "a thigh to fanorvet of buce.\n", "\n", "and hin yougegevh, goagells your boll that aus blerf;\n", "not moe lor to broke:\n", "bregerky hat arst?\n", "\n", "kins to kingass:\n", "\n", "==========TEMPERATURE: 1.2\n", "my head and all this famous lan.\n", "\n", "king thy murom:\n", "sor hige chrmut to mosd's i\n", "tou?\n", "\n", "lking-alle:\n", "whake jore, el witu tof of af r.iig?\n", "\n", "ing your in mond, on:\n", "thy' rakr'ce my and, and foty to spl-evce.\n", "manes:\n", "liz.\n", "\n", "qbukin:\n", "fov takn he is lewe i t och land in.\n", "\n", "engfr, nomek;\n", "than the tragrw\n", "ing aldcage the-artingnmand,\n", "werrstingresg farc! cos ar i an gheralm ther to green sfok.\n", "\n", "revesar'far: rawe good foun siff?\n", "\n", "meard:\n", "rol-sen;\n", "k\n", "TRAINING ON BATCH 1024 to 1280 (example 131072 to 163840)\n", "Epoch 1/1\n", "32768/32768 [==============================] - 125s 4ms/step - loss: 2.0923\n", "GENERATING SOME RANDOM TEXT FROM THE MODEL\n", "=====GENERATING TEXT WITH SEED: \n", "\"bed-chamber.\n", "\n", "lady anne:\n", "i'll \"\n", "==========TEMPERATURE: 0.2\n", "bed-chamber.\n", "\n", "lady anne:\n", "i'll of come the so so and so the the so son the love the that the the sare the so the will the love the so the the sear the so the so the sear the well the the sond and and with the gold and with the the come the the sear the so the the the sond the the the the so me the seard the the mare the son the love the ford the love i will the son the so the the will the hear the so the the the love the seard \n", "==========TEMPERATURE: 0.5\n", "bed-chamber.\n", "\n", "lady anne:\n", "i'll thou shat is the men that not the the mand swout thee thou the lond cime thou the leave the he some you the will not the the so com, lome a king lot sith sout, to hard leat of with that i with here of some of cother of the mane sher lewst a shall the and, with thou the and the he so the shall my so thou well soul the end waill with light be lace stour deas that so mang dom you lieg the for hat she\n", "==========TEMPERATURE: 1.0\n", "bed-chamber.\n", "\n", "lady anne:\n", "i'll thematomenclhe he theer dogbongart i's.\n", "\n", "uken,\n", "yol slich hell vear of con unoy ther tele-tace as suplown sprepe,\n", "a porse; i la wl bet i, ov fove to so winr cive oupke:\n", "that enw-n do sthat limesop the.\n", "conk,\n", "thye ion, dererule, swere.\n", "\n", "herioo:\n", "\n", "ithel:\n", "the me.\n", "\n", "qukeare yor ceichins graivet:\n", "you the qutgul -yald me?\n", "\n", "rreow\n", "macicheliotine:\n", "o xome at is mar.\n", "\n", "bint loire::\n", "you whe to you pare\n", "ast speak \n", "==========TEMPERATURE: 1.2\n", "bed-chamber.\n", "\n", "lady anne:\n", "i'll gugathit oi an w'reme thasy a paed-ait he owh: vary herver that you lovim,\n", "and wilrl'y sot mere the kulls?\n", "that, of is sfack yo ay if cufes, thes lack!\n", "a japcmel a not my my wagu.\n", "\n", "hidf riad.\n", "\n", "jolin:\n", "dhat whind liacem,\n", "i widse!\n", "\n", "rosk:\n", "mi eposrughe ho dont 'lutkid' of proof, 't\n", "honer''dughy thit.\n", "\n", "butpade iosiny.\n", "\n", "ouvook:\n", "my non.\n", "\n", "grinct, his: ovh hera teles have thattratcum.\n", "hacd, that thak maye'r\n", "TRAINING ON BATCH 1280 to 1536 (example 163840 to 196608)\n", "Epoch 1/1\n", "32768/32768 [==============================] - 122s 4ms/step - loss: 2.0355\n", "GENERATING SOME RANDOM TEXT FROM THE MODEL\n", "=====GENERATING TEXT WITH SEED: \n", "\"watchman:\n", "stay, or thou diest!\"\n", "==========TEMPERATURE: 0.2\n", "watchman:\n", "stay, or thou diest!\n", "\n", "rome:\n", "and i will the will the will the will the will the for the love with the will the case and the dear the the some my so with the will the frome the will the sone the bear the come the sill the will the cand the will the shall the will the will the and the will the with so the frome and with the will the will the will the will the will with the will the word and and the will the the so the w\n", "==========TEMPERATURE: 0.5\n", "watchman:\n", "stay, or thou diest!\n", "\n", "frist:\n", "and whou thou so the the the sone the pring her and deast son at of on the pear hat the sill the mare lay with so supe so me reeth\n", "and and thou cose the with and lead the bedsean the marsen and wull cith the raunded will the a thou so the with the thou prad to shat in frome the were well thou shall well whis and she hare ence courter, your his a sone, and the were the prease and the frien\n", "==========TEMPERATURE: 1.0\n", "watchman:\n", "stay, or thou diest! lad fencrem's and loven, stall for o: goped your daingoord dave,\n", "hen thoullly your for wist han sunbe and's gae the part.\n", "\n", "lant:\n", "and sing;\n", "i wam.\n", "\n", "seluve:\n", "nom ford hengorkaty thy nove:\n", "for a sorf came,\n", "buts say the wall aling withond, to uar oup.\n", "\n", "irrrom:\n", "isw whe forrursafs o'dt-meing and thou alling\n", "and gear the badtlofofo, yok dewer so'e.\n", "\n", "roaghour?\n", "wore is 'trid bewiss;\n", "a mecuribinsseang ny mr\n", "==========TEMPERATURE: 1.2\n", "watchman:\n", "stay, or thou diest!\n", "\n", "juvecifoo, gorse:\n", "werl iste comughtie thram of yoar tayrajen's fyom..o-\n", "myuld:\n", "love:\n", "on fithawinguss-either\n", "of culeonoig;\n", "anw\n", "an ve sheen-adnet'ce.\n", "\n", "jupmry:\n", "jeadqher:\n", "anv so grome, is darnes! and is aidt,\n", "and by crourspder', me oi ky,\n", "joon,\n", "thir therse,\n", "avend--anens ulfsocch flawdlace to thase apleing?\n", "\n", "nrocbaver:\n", "sels-m\n", "an? yon!\n", "\n", "kprowe:\n", "ir you lesty on ast,s purplay.\n", "erd:\n", "and king and, brave t\n", "TRAINING ON BATCH 1536 to 1792 (example 196608 to 229376)\n", "Epoch 1/1\n", "24320/32768 [=====================>........] - ETA: 31s - loss: 1.9848" ], "name": "stdout" }, { "output_type": "error", "ename": "KeyboardInterrupt", "evalue": "ignored", "traceback": [ "\u001b[0;31m\u001b[0m", "\u001b[0;31mKeyboardInterrupt\u001b[0mTraceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0mbatch_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mbatch_size\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 29\u001b[0m \u001b[0mepochs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 30\u001b[0;31m verbose=1)\n\u001b[0m\u001b[1;32m 31\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 32\u001b[0m \u001b[0;32mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"GENERATING SOME RANDOM TEXT FROM THE MODEL\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/engine/training.pyc\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, **kwargs)\u001b[0m\n\u001b[1;32m 1346\u001b[0m \u001b[0minitial_epoch\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minitial_epoch\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1347\u001b[0m \u001b[0msteps_per_epoch\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msteps_per_epoch\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1348\u001b[0;31m validation_steps=validation_steps)\n\u001b[0m\u001b[1;32m 1349\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1350\u001b[0m return training_arrays.fit_loop(\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/engine/training_eager.pyc\u001b[0m in \u001b[0;36mfit_loop\u001b[0;34m(model, inputs, targets, sample_weights, class_weight, val_inputs, val_targets, val_sample_weights, batch_size, epochs, verbose, callbacks, shuffle, callback_metrics, initial_epoch, steps_per_epoch, validation_steps)\u001b[0m\n\u001b[1;32m 1056\u001b[0m \u001b[0mshuffle\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mshuffle\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1057\u001b[0m \u001b[0mnum_train_samples\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnum_train_samples\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1058\u001b[0;31m do_validation=do_validation)\n\u001b[0m\u001b[1;32m 1059\u001b[0m \u001b[0mcallbacks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mon_epoch_end\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mepoch\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mepoch_logs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1060\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcallback_model\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstop_training\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/engine/training_eager.pyc\u001b[0m in \u001b[0;36mbatch_fit_loop\u001b[0;34m(model, inputs, targets, epoch_logs, index_array, out_labels, callback_model, batch_size, sample_weights, val_inputs, val_targets, val_sample_weights, callbacks, shuffle, num_train_samples, do_validation)\u001b[0m\n\u001b[1;32m 397\u001b[0m \u001b[0mtargets_batch\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 398\u001b[0m \u001b[0msample_weights\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msample_weights_batch\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 399\u001b[0;31m training=True)\n\u001b[0m\u001b[1;32m 400\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 401\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mouts\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/engine/training_eager.pyc\u001b[0m in \u001b[0;36m_process_single_batch\u001b[0;34m(model, inputs, targets, sample_weights, training)\u001b[0m\n\u001b[1;32m 792\u001b[0m outs, loss, loss_metrics = _model_loss(model, inputs, targets,\n\u001b[1;32m 793\u001b[0m \u001b[0msample_weights\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msample_weights\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 794\u001b[0;31m training=training)\n\u001b[0m\u001b[1;32m 795\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mloss\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 796\u001b[0m raise ValueError('The model cannot be run '\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/engine/training_eager.pyc\u001b[0m in \u001b[0;36m_model_loss\u001b[0;34m(model, inputs, targets, sample_weights, training)\u001b[0m\n\u001b[1;32m 126\u001b[0m \u001b[0mouts\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtraining\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtraining\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 127\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 128\u001b[0;31m \u001b[0mouts\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 129\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 130\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_expects_training_arg\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/engine/network.pyc\u001b[0m in \u001b[0;36mcall\u001b[0;34m(self, inputs, training, mask)\u001b[0m\n\u001b[1;32m 775\u001b[0m outputs, _ = self._run_internal_graph(inputs,\n\u001b[1;32m 776\u001b[0m \u001b[0mtraining\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtraining\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 777\u001b[0;31m mask=masks)\n\u001b[0m\u001b[1;32m 778\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0moutputs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 779\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/engine/network.pyc\u001b[0m in \u001b[0;36m_run_internal_graph\u001b[0;34m(self, inputs, training, mask)\u001b[0m\n\u001b[1;32m 946\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 947\u001b[0m output_tensors = nest.flatten(\n\u001b[0;32m--> 948\u001b[0;31m layer.call(computed_tensor, **kwargs))\n\u001b[0m\u001b[1;32m 949\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mhasattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlayer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'compute_mask'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 950\u001b[0m output_masks = layer.compute_mask(computed_tensor,\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/layers/recurrent.pyc\u001b[0m in \u001b[0;36mcall\u001b[0;34m(self, inputs, mask, training, initial_state)\u001b[0m\n\u001b[1;32m 2097\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcell\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_recurrent_dropout_mask\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2098\u001b[0m return super(LSTM, self).call(\n\u001b[0;32m-> 2099\u001b[0;31m inputs, mask=mask, training=training, initial_state=initial_state)\n\u001b[0m\u001b[1;32m 2100\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2101\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/layers/recurrent.pyc\u001b[0m in \u001b[0;36mcall\u001b[0;34m(self, inputs, mask, training, initial_state, constants)\u001b[0m\n\u001b[1;32m 637\u001b[0m \u001b[0mmask\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmask\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 638\u001b[0m \u001b[0munroll\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munroll\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 639\u001b[0;31m input_length=timesteps)\n\u001b[0m\u001b[1;32m 640\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstateful\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 641\u001b[0m \u001b[0mupdates\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/backend.pyc\u001b[0m in \u001b[0;36mrnn\u001b[0;34m(step_function, inputs, initial_states, go_backwards, mask, constants, unroll, input_length)\u001b[0m\n\u001b[1;32m 3218\u001b[0m \u001b[0mmaximum_iterations\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_length\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3219\u001b[0m \u001b[0mparallel_iterations\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m32\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3220\u001b[0;31m swap_memory=True)\n\u001b[0m\u001b[1;32m 3221\u001b[0m \u001b[0mlast_time\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfinal_outputs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3222\u001b[0m \u001b[0moutput_ta\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfinal_outputs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/control_flow_ops.pyc\u001b[0m in \u001b[0;36mwhile_loop\u001b[0;34m(cond, body, loop_vars, shape_invariants, parallel_iterations, back_prop, swap_memory, name, maximum_iterations, return_same_structure)\u001b[0m\n\u001b[1;32m 3206\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3207\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0mcond\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mloop_vars\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3208\u001b[0;31m \u001b[0mloop_vars\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbody\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mloop_vars\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3209\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtry_to_pack\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mloop_vars\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_basetuple\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3210\u001b[0m \u001b[0mpacked\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/control_flow_ops.pyc\u001b[0m in \u001b[0;36m\u001b[0;34m(i, lv)\u001b[0m\n\u001b[1;32m 3199\u001b[0m cond = lambda i, lv: ( # pylint: disable=g-long-lambda\n\u001b[1;32m 3200\u001b[0m math_ops.logical_and(i < maximum_iterations, orig_cond(*lv)))\n\u001b[0;32m-> 3201\u001b[0;31m \u001b[0mbody\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mlambda\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlv\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morig_body\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mlv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3202\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3203\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcontext\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexecuting_eagerly\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/backend.pyc\u001b[0m in \u001b[0;36m_step\u001b[0;34m(time, output_ta_t, *states)\u001b[0m\n\u001b[1;32m 3203\u001b[0m \u001b[0mcurrent_input\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minput_ta\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtime\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3204\u001b[0m output, new_states = step_function(current_input,\n\u001b[0;32m-> 3205\u001b[0;31m tuple(states) + tuple(constants))\n\u001b[0m\u001b[1;32m 3206\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moutput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'_uses_learning_phase'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3207\u001b[0m \u001b[0;32mglobal\u001b[0m \u001b[0muses_learning_phase\u001b[0m \u001b[0;31m# pylint: disable=global-variable-undefined\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/layers/recurrent.pyc\u001b[0m in \u001b[0;36mstep\u001b[0;34m(inputs, states)\u001b[0m\n\u001b[1;32m 627\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 628\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mstep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstates\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 629\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcell\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstates\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 630\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 631\u001b[0m last_output, outputs, states = K.rnn(\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/layers/recurrent.pyc\u001b[0m in \u001b[0;36mcall\u001b[0;34m(self, inputs, states, training)\u001b[0m\n\u001b[1;32m 1870\u001b[0m \u001b[0mx_f\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mK\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minputs_f\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkernel\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munits\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munits\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1871\u001b[0m \u001b[0mx_c\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mK\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minputs_c\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkernel\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munits\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munits\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1872\u001b[0;31m \u001b[0mx_o\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mK\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minputs_o\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkernel\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munits\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1873\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0muse_bias\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1874\u001b[0m \u001b[0mx_i\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mK\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbias_add\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_i\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbias\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munits\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/backend.pyc\u001b[0m in \u001b[0;36mdot\u001b[0;34m(x, y)\u001b[0m\n\u001b[1;32m 1336\u001b[0m \u001b[0;34m`\u001b[0m\u001b[0;34m`\u001b[0m\u001b[0;34m`\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1337\u001b[0m \"\"\"\n\u001b[0;32m-> 1338\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mndim\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mNone\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mndim\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m2\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mndim\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1339\u001b[0m \u001b[0mx_shape\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1340\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ms\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mint_shape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marray_ops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munstack\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marray_ops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/backend.pyc\u001b[0m in \u001b[0;36mndim\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 881\u001b[0m \u001b[0;34m`\u001b[0m\u001b[0;34m`\u001b[0m\u001b[0;34m`\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 882\u001b[0m \"\"\"\n\u001b[0;32m--> 883\u001b[0;31m \u001b[0mdims\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_shape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_dims\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 884\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdims\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 885\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdims\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.pyc\u001b[0m in \u001b[0;36mget_shape\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 819\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mget_shape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 820\u001b[0m \u001b[0;34m\"\"\"Alias of Tensor.shape.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 821\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 822\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 823\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_shape_as_list\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.pyc\u001b[0m in \u001b[0;36mshape\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 814\u001b[0m \u001b[0;31m# `_tensor_shape` is declared and defined in the definition of\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 815\u001b[0m \u001b[0;31m# `EagerTensor`, in C.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 816\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_tensor_shape\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtensor_shape\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTensorShape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_shape_tuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 817\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_tensor_shape\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 818\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } ] }, { "metadata": { "id": "w3C-AIU18HFe", "colab_type": "text" }, "cell_type": "markdown", "source": [ "**NOTE**: Even after training has stopped you can still generate from the (partially trained) model as follows:" ] }, { "metadata": { "id": "7HR4JXD3ZnX0", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 35 }, "outputId": "82fbdad8-0586-4096-f5a1-7c1cc9bfcee4" }, "cell_type": "code", "source": [ "my_text = \" the meaning of life is:\" # Needs to be max_len characters\n", "print(len(my_text))\n", "sample_from_model(model, prev_text=my_text)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "30\n" ], "name": "stdout" } ] }, { "metadata": { "id": "UbdLbn_xRe21", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###IMPORTANT NOTES\n", "* Even if you stop training the model weights are persistant. If you resume training it will start where you left off. \n", "* To reset the weights, you need to recompile the model.\n", "* Sampling is **stochastic** (random), so you'll get new outputs every time you rerun the sampling code.\n", "\n", "### YOUR TASKS: \n", "* [**ALL**] Read the generations from your model in a funny voice to your neighbour.\n", "* [**ALL**] Increase `max_len` and regenerate the data and retrain the model.\n", " * What's the effect on training speed as you double `max_len`. Can you explain why?\n", " * Do you notice any effect on the quality of the model? Can you explain why?\n", "* [**ALL**] Set the max_len to be roughly the length of half a word; one word; two words... What kind of samples do these models generate? Explain how they go wrong.\n", "* [**ALL**] Change `embedding_dim` and the hidden size of the LSTM and observe the effect on training speed and quality.\n", "* [**INTERMEDIATE**] Change the dropout rates & retrain the model. \n", " * What types of dropout do we get for recurrent models? \n", " * What's the effect on the text quality?\n", "* [**ADVANCED**] Implement the \"teacher forcing\" training methodology, where the net must predict the entire output sequence shifted forward by one character, instead of just the next character. Compare the output of a model trained with teacher forcing versus the per-character model, given a similar training time. Is it fair to say that teacher forcing is a more efficient training methodology?\n" ] }, { "metadata": { "id": "REZzoUwjHkZW", "colab_type": "text" }, "cell_type": "markdown", "source": [ "##Further reading\n", "\n", "* https://distill.pub/2016/augmented-rnns/\n", "* https://distill.pub/2017/ctc/\n", "* https://algotravelling.com/en/machine-learning-fun-part-5/" ] } ] } ================================================ FILE: Practical_4_Reinforcement_Learning.ipynb ================================================ { "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Practical 4: Reinforcement Learning", "version": "0.3.2", "provenance": [], "collapsed_sections": [] }, "kernelspec": { "name": "python2", "display_name": "Python 2" }, "accelerator": "GPU" }, "cells": [ { "metadata": { "id": "Eou_PrPyXAgT", "colab_type": "text" }, "cell_type": "markdown", "source": [ "# Practical 4: Reinforcement Learning" ] }, { "metadata": { "id": "QTOkLq7QSxaw", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Introduction\n", "In this practical we introduce the idea of reinforcement learning, discuss how it differs from supervised and unsupervised learning and then build an agent that learns to play a simple game called \"Catcher\".\n", "\n", "## Learning Objectives\n", "* Understand the relationship between the **environment** and the **agent** \n", "* Understand how a **policy** is used by an agent to select an action\n", "* Describe how to implement a **run-loop** that controls the interaction between environement and agent.\n", "* Understand how the **state**, **action** and **reward** are communicated between the agent and the environment. \n", "* Be able to implement the a simple **policy-gradient** RL algorithm call **REINFORCE**\n", "* Discover at least one potential issue with the REINFORCE algorithm." ] }, { "metadata": { "id": "V3Yu5en6YvbB", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "#@title [RUN ME!] Install pre-requisites. { display-mode: \"form\" }\n", "import os\n", "import sys\n", "import math\t\n", "\n", "!git clone https://github.com/ntasfi/PyGame-Learning-Environment.git\n", "os.chdir('PyGame-Learning-Environment')\n", "!pip -q install -e .\n", "!pip -q install pygame\n", "os.chdir('/content')\n", "\n", "sys.path.append('/content/PyGame-Learning-Environment')\n", "os.environ[\"SDL_VIDEODRIVER\"] = \"dummy\" # prevent trying to open a window\n", "\n", "!pip -q install moviepy\n", "\n", "print('Installed pre-requisites...')" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "LejsQxNCB2fM", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "#@title [RUN ME!] Imports { display-mode: \"form\" }\n", "\n", "from __future__ import absolute_import\n", "from __future__ import division\n", "from __future__ import print_function\n", "from __future__ import unicode_literals\n", "\n", "import os\n", "import moviepy.editor as mpy\n", "from ple import PLE\n", "from ple.games import pong\n", "from ple.games import pixelcopter\n", "from ple.games import flappybird\n", "from ple.games import catcher\n", "from IPython import display\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from collections import deque\n", "import seaborn as sns\n", "\n", "import tensorflow as tf\n", "try:\n", " tf.enable_eager_execution()\n", " print('Running Eagerly')\n", "except ValueError:\n", " print('Already running Eagerly')" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "o8kIIBytaQqH", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "#@title [RUN ME!] Helper Functions { display-mode: \"form\" }\n", "\n", "def make_animation(images, fps=60, true_image=False):\n", " duration = len(images) / fps\n", "\n", " def make_frame(t):\n", " try:\n", " x = images[int(len(images) / duration * t)]\n", " except:\n", " x = images[-1]\n", "\n", " if true_image:\n", " return x.astype(np.uint8)\n", " else:\n", " return ((x + 1) / 2 * 255).astype(np.uint8)\n", "\n", " clip = mpy.VideoClip(make_frame, duration=duration)\n", " clip.fps = fps\n", " return clip\n", "\n", "def progress(value, max=100, message=''):\n", " return display.HTML(\"\"\"\n", " \n", " {value}\n", " \n", "

{message}

\n", " \"\"\".format(value=value, max=max, message=message))\n", "\n", "def plot_rolling_returns(rolling_returns): \n", " sns.tsplot(rolling_returns)\n", " plt.title('Rolling Returns')\n", " plt.xlabel('# Epsiodes')\n", " plt.ylabel('Rolling Return')\n", " \n", "def state_to_buckets(state, bucket_width=0.25):\n", " return tuple(math.ceil(s / bucket_width)-1 for s in state)" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "2wZMmj4Toy8e", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Reinforcement Learning\n", "So far we have encountered **supervised learning**, where we have an input and a target value or class that we want to predict. We have also encountered **unsupervised learning** where we are only given an input and look for patterns in that input. In this practical, we look into **reinforcement learning** which can loosely be defined as training an **agent** to maximise a numerical **reward** it obtains through interaction with an **environment**. \n", "\n", "The environment defines a set of **actions** that an agent can take. The agent observes the current **state** of the environment, tries actions and *learns* a **policy** which is a distribution over the possible actions given a state of the environment. \n", "\n", "The following diagram illustrates the interaction between the agent and environment. We will explore each of the terms in more detail throughout this practical. \n", "\n", "\n", "![Interaction of Agent and Environment](https://github.com/deep-learning-indaba/indaba-2018/blob/master/images/rl_diagram1.png?raw=true)\n", "\n", "\n", "## Outline\n", "We will train an agent to play a very simple game called \"Catcher\" which is often used as a test bed for RL algorithms. In the process we will set up all the necessary framework to explore variations of the algorithm or switch to more advanced games! In particular, the steps we will follow in this practical are as follows:\n", "\n", "1. Introduce the game environment, explore the states and actions available. \n", "2. Create a simple agent that takes random actions\n", "3. Write a run-loop which controls the interaction and manages the communication between the agent and environment\n", "4. Implement a policy as a feed-forward neural network\n", "5. Explain and implement the REINFORCE algorithm to learn how to play the game" ] }, { "metadata": { "id": "RnNYUFu7V1I2", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## The Environment\n", "The environment we consider is the game Catcher from the PyGame Learning Environment (PLE) library. The player (agent) controls a paddle that it must use to catch a falling fruit. Each time the game runs, the fruit falls from from the top to the bottom of the screen, starting at a different X coordinate (which doesn't change during the episode) and the paddle starts in a random location along the bottom of the screen. The player wins if they manage to catch the fruit and loses if it falls to the ground. \n", "\n", "![Catcher game illustration](https://pygame-learning-environment.readthedocs.io/en/latest/_images/catcher.gif)" ] }, { "metadata": { "id": "9vTOQs5eQZoE", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Create the environment using PLE\n", "For this game, we'll set things up so that the reward will be non-zero only at the end of each episode, and will be +1 for catching the fruit and -1 for missing it. For all other frames the reward will be zero.\n", "\n", "**Note**: PLE has a number of games, which it wraps in a generic \"environment\". \n", "So, in this case, both ```evironment``` and ```game``` constitute our environment. ```environment``` allows us to perform actions \n", "and returns states and rewards, while ```game``` handles the specifics of Catcher (or whichever other game we decide to use)" ] }, { "metadata": { "id": "L_awOQZJC-d_", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "# Create an instance of the catcher game\n", "game = catcher.Catcher(init_lives=1)\n", "game_height = game.height\n", "game_width = game.width\n", "\n", "frame_skip = 3 # Skip 3 frames at each step to speed up the game\n", "\n", "# Wrap the game in a PLE environment and configure the rewards\n", "environment = PLE(game, display_screen=False, force_fps=True, \n", " reward_values={'win': 1.0, 'loss': -1.0, 'negative': 0.0}, \n", " frame_skip=frame_skip) \n", "\n", "# The reward_values dictionary above allows us to override the default reward structure provided by PLE. \n", "# win and loss specify the rewards for winning or losing an episode, while positive and negative \n", "# specify the rewards received for positive or negative events that can occur during the game.\n", "# If you change the game, start by *removing* the overrides and see what the default is before deciding if\n", "# you want to modify it. \n", "\n", "# Initialise the environment\n", "environment.init()" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "36vk0-0qST83", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### What does the state look like?\n", "The environment provides a rendering of the virtual 'screen' of the game to an RGB image, by using the method ```getScreenRGB```. For this practical, in the interests of simplicity and quick trianing time, we use the *game state* directly, which provides a summary (in a dictionary) of important peices of information making up the current state of the game. " ] }, { "metadata": { "id": "kcGwYfj6SWl2", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "95dc4e2c-25ee-485d-a4d5-9b8e0fd2372f" }, "cell_type": "code", "source": [ "print('Current game state:', game.getGameState())" ], "execution_count": 6, "outputs": [ { "output_type": "stream", "text": [ "Current game state: {'fruit_x': 8, 'player_vel': 0.0, 'player_x': 26, 'fruit_y': -8}\n" ], "name": "stdout" } ] }, { "metadata": { "id": "CTH3IMzp_IUl", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### What actions are available?\n", "The following cell prints the actions that are available in the current game, which are represented with numerical codes. The PLE environment wrapper also adds an additional ```None``` action which means \"do nothing\". " ] }, { "metadata": { "id": "WawJ92pOCD4D", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "7d286730-bcc5-418a-c603-cf45e4c89690" }, "cell_type": "code", "source": [ "print('Game actions:', game.actions)\n", "print('Environment actions:', environment.getActionSet())" ], "execution_count": 7, "outputs": [ { "output_type": "stream", "text": [ "Game actions: {'right': 100, 'left': 97}\n", "Environment actions: [100, 97, None]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "RElMlRA-O-WC", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "#@title [RUN ME!] Setup for the next section { display-mode: \"form\" }\n", "# Maintain some variables for the next task\n", "environment.reset_game()\n", "observed_states = []\n", "observed_actions = []\n", "observed_rewards = []\n", "observed_states.append(game.getGameState())" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "pwl9qQmlURgR", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Exploratory Task\n", "Run the cell below which defines a function that takes a given action in the environment, using the environment's ```act``` method and then renders both the previous and current game screen. Change the action in the drop-down to the right of the 2nd code cell, which calls this function with the chosen action. Observe what happens to the environment(game) state and reward. By running the cell multiple times (and changing the action) until the game comes to an end (when you either win or lose), you will manually create an **episode**, which is a sequence of states, actions and rewards until a termination condition is reached. If an episode $i$ consists of $T_i$ steps and we denote the state, action and reward at step $t$ in episode $i$ respectively as $s_{i, t}$, $a_{i,t}$ and $r_{i,t}$, then in this task, we create a *trajectory* $\\tau_i = (s_{i, 1}, a_{i, 1}, r_{i, 1}, ..., a_{i, T_i-1}, r_{i, T_i-1}, s_{i, T_i})$\n", "\n", "#### Question\n", "Notice how the paddle sometimes moves even if you take the \"None\" action? Can you think of why this happens? \n", "\n", "#### Notes\n", "* If you want to run another episode, re-run the code cell above titled \"Setup for the next section\" to reset the environment\n", "* This particular game returns a reward of $0$ at each step and a final reward of $-1$ or $1$ at the end of the episode depending on whether you lose or win. Other games may have different reward structures! " ] }, { "metadata": { "id": "cmbraWuttEI0", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "previous_frame = environment.getScreenRGB().transpose([1, 0, 2])\n", "\n", "def take_action(action):\n", " global previous_frame\n", " \n", " # Look up the action code from the description\n", " action_code = None if action == 'None' else game.actions[action]\n", "\n", " # Take the selected action in the environment\n", " print('Taking action: {} ({})'.format(action, action_code))\n", " reward = environment.act(action_code)\n", "\n", " observed_actions.append(action)\n", " observed_rewards.append(reward)\n", "\n", " # Print and display the current state and reward\n", " state = game.getGameState()\n", " print('Game state:', state)\n", " print('Reward received: ', reward)\n", "\n", " observed_states.append(state)\n", "\n", " if reward > 0 or environment.game_over():\n", " print('Game over, you', 'WON' if reward > 0 else 'LOST')\n", " print('The episode trajectory was:')\n", " for s, a, r in zip(observed_states, observed_actions, observed_rewards):\n", " print('State:', s, 'Action:', a, 'Reward:', r)\n", " print('Terminal state:', observed_states[-1])\n", " \n", " current_frame = environment.getScreenRGB().transpose([1, 0, 2])\n", " \n", " fig = plt.figure(figsize=(10, 20))\n", " \n", " ax = plt.subplot(1, 2, 1)\n", " plt.imshow(previous_frame)\n", " ax.grid(False)\n", " ax.set_title('PREVIOUS FRAME')\n", " \n", " ax = plt.subplot(1, 2, 2)\n", " plt.imshow(current_frame)\n", " ax.grid(False)\n", " ax.set_title('CURRENT FRAME')\n", " \n", " previous_frame = current_frame" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "vdo_a8VBU9Sm", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "action = \"None\" #@param ['right', 'left', 'None']\n", "take_action(action)" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "ebckEImi-_k0", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## The Agent\n", "We now turn to the agent. An agent receives the current state and (previous) reward from the environment, then uses an internal policy to determine an action to take. We implement an agent as a Python [**class**](https://en.wikibooks.org/wiki/A_Beginner%27s_Python_Tutorial/Classes), which is just a logical wrapper of variables and methods (functions) that operate on those variables. The methods our agent will have are the following:\n", "\n", "* **Initialisation** (```__init__```): Initialises the agent the first time it's created. \n", "* **policy**: The policy is a function that returns a *distribution* over the possible actions, given the current state.\n", "* **step**: This takes as input, the current state and previous reward from the environment, then uses the internal policy to determine which action to take. Specifically, it does some pre-processing of the state, then samples a single action from the distribution over possible actions obtained from the policy. \n", "* **reset**: This is called to reset the agent's variables before running it on a new episode\n", "* **end_episode**: This method signals to the agent that the current episode has come to an end. The agent may do some learning, or clean-up at the end of an episode. \n", "\n", "### The Random Agent\n", "\n", "To get a feel for an agent and the methods it has, we implement an agent that just takes a *random* action at every step. For demonstration purposes, we also calculate the **episode return** at the end of an episode. The episode return is the sum of the (discounted) rewards obtained during the episode. If the returns for episode $i$, with trajectory $\\tau_{i}$ are denoted $r_{i, t}$, and the **discount factor** is $\\gamma$, then the episode return is calcuated as: $r(\\tau_i) = \\sum_{t=1}^{T_i} \\gamma^t r_{i,t}$. The discount factor allows us to increase the importance of rewards received quickly and decrease the importance of rewards that take long to receive. It is especially important in environments that could have episodes that are infinitely long. In our particular environment where every episode is of the same length and the only non-zero reward is received at the end of the game, the discount factor doesn't make much difference and so we will ignore it (effectively set it to $1$) for the remainder of this practical. " ] }, { "metadata": { "id": "IRPa2lmldQoW", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "class RandomAgent(object):\n", " \n", " def __init__(self, actions, state_size, seed):\n", " # When initializing, we let the agent know what actions are available in the \n", " # environment, how large the state is (not used in the RandomAgent) and the \n", " # current seed to use (also not used in the RandomAgent)\n", " self._actions = actions\n", " self._rewards = []\n", " self._taken_actions = []\n", " self._observed_states = []\n", " \n", " def policy(self, state): \n", " # The policy is an internal function that takes a state and returns a distribution over the possible actions. \n", " # The random agent just returns a uniform distribution over the actions. \n", " n = len(self._actions) # The number of actions\n", " return tf.fill([n], 1./n) # This returns a vector of length n, with each entry being 1/n\n", " \n", " def step(self, state_dict, reward):\n", " \n", " # Pre-process the state to extract the numerical values we're interested in from the state dictionary\n", " state = np.array([\n", " state_dict['fruit_x'] / game_width, # Divide by width(or height) to normalise the value to lie between 0 and 1.\n", " state_dict['player_x'] / game_width,\n", " state_dict['fruit_y'] / (game_height+1),\n", " state_dict['player_vel'] / game_width\n", " ], dtype=np.float32)\n", " \n", " self._observed_states.append(state) # Record that the state was observed during the episode\n", " self._rewards.append(reward) # Keep track of the rewards we've received along the way\n", " action_distribution = self.policy(state) # Use the policy to get the distribution over actions\n", " \n", " # Sample a single action according to the distribution over actions\n", " action = np.random.choice(self._actions, p=action_distribution.numpy()) \n", " \n", " self._taken_actions.append(action) # Record that the action was taken during the episode\n", " \n", " return action\n", " \n", " def reset(self):\n", " # This method is called when a new episode starts, we need to clear the \n", " # states, actions and rewards that we tracked during the last episode.\n", " self._rewards = [] \n", " self._taken_actions = [] \n", " self._observed_states = [] \n", " \n", " def end_episode(self, final_reward):\n", " # We just calculate the episode return\n", " episode_return = sum(self._rewards) + final_reward\n", " return episode_return" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "-vF0d4FORBYK", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## The Run-Loop\n", "Now that we have an environment and a simple agent, we need a way of controlling the interaction between the agent and environment over multiple episodes. We do so in a **run-loop**. In this simple run-loop, the agent and environment run in lock-step. For each game frame, we get the state from the environment and pass it, along with the previous reward, to the agent. The agent selects an action that it wants to take given the game state. The action is taken in the environment and any reward received is recorded. We run the loop for multiple episodes, each time being careful to reset the game and agent (because they're starting a new game from scratch)." ] }, { "metadata": { "id": "ZmzYRPUi9ZGi", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "def run_loop(agent_class, # Which agent to use\n", " num_episodes=1, # How many episodes to run for\n", " record_every=1, # How many episodes to record\n", " seed=1234, # The random seed used\n", " rolling_return_frequency=100, # The window size used to track the rolling episode return\n", " state_size=4): # The size of the state\n", " \n", " # Set the random seeds\n", " tf.set_random_seed(seed)\n", " np.random.seed(seed)\n", " \n", " # Initialise the environment\n", " environment.init()\n", " \n", " # Create an agent (this runs the agent's __init__ method)\n", " agent = agent_class(environment.getActionSet(), state_size, seed)\n", " \n", " progress_out = display.display(progress(0, num_episodes), display_id=True) # Create a progress-bar\n", " \n", " # Create data structures to store metrics\n", " windowed_return = deque()\n", " rolling_returns = []\n", " frames = []\n", " \n", " for episode in range(num_episodes):\n", " environment.reset_game() # reset the environment\n", " agent.reset() # reset the agent\n", " reward = 0\n", "\n", " while reward == 0 and not environment.game_over(): # Loop until the episode terminates \n", " state = game.getGameState() # Get the current game state\n", " action = agent.step(state, reward) # Pass the current game state and previous reward to the agent, get the action it wants to take\n", " reward = environment.act(action) # Pass the action to the environment and get the reward.\n", "\n", " if episode % record_every == 0:\n", " # Store the frames for display later, every `record_every` episodes\n", " frames.append(environment.getScreenRGB())\n", " \n", " info = agent.end_episode(reward) # Signal to the agent that the episode has come to and end\n", " \n", " # Store the episode return in the window (in this case, with no discounting, the episode return is the same as the environment's score)\n", " windowed_return.append(environment.score())\n", " if len(windowed_return) > rolling_return_frequency:\n", " windowed_return.popleft()\n", " \n", " rolling_return = sum(windowed_return) / len(windowed_return)\n", " rolling_returns.append(rolling_return)\n", " \n", " # Update the progress-bar\n", " message = 'Episode {}/{} ended with score {}, Rolling Return: {}, {}'.format(\n", " episode+1, num_episodes, environment.score(), \n", " rolling_return,\n", " info if info is not None else '')\n", " progress_out.update(progress(episode+1, num_episodes, message))\n", " \n", " message = 'Finished training, rendering video...'\n", " progress_out.update(progress(episode+1, num_episodes, message))\n", " \n", " # Render a video\n", " clip = make_animation(frames, fps=30, true_image=True).rotate(-90)\n", " display.display(clip.ipython_display(fps=30, center=False, autoplay=False, loop=False, height=320, width=240, max_duration=1000))\n", " \n", " message = 'Done...'\n", " progress_out.update(progress(episode+1, num_episodes, message))\n", " \n", " return rolling_returns" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "wkiokNVeg167", "colab_type": "text" }, "cell_type": "markdown", "source": [ "We now run our RandomAgent with the run-loop for 100 episodes to check that everything is working so far. (Note: the blue progress bar shows how many of the ```num_episodes``` episodes we've completed. The small black progress bar is for the video rendering, ignore that one!)" ] }, { "metadata": { "id": "6-TgMf2bcVJ0", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "rolling_returns = run_loop(RandomAgent, num_episodes=100, record_every=5, rolling_return_frequency=5)\n", "plot_rolling_returns(rolling_returns)" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "s_2-dlEqvNLe", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## A Policy Network\n", "Remember, the policy is a distribution over the possible actions the agent can take in the environment given the current state of the environment, denoted $\\pi(a|s)$. In a Deep RL agent, the policy is represented by a neural network with parameters $\\theta$, so we have $\\pi_\\theta(a|s) = NN(s; \\theta)$, where $NN(s; \\theta)$ is some potentially complex function represented by a neural network with parameters $\\theta$. In other words, our neural network takes in the state as input and outputs the appropriate distribution over actions. Let us implement an agent who's policy is defined by a simple feed-forward neural network. We will name the class 'FixedAgent' because this agent will do no learning. As a result the policy network's weights will be fixed and the agent will take random actions as before.\n", "\n", "The ```reset```, ```step``` and ```end_episode``` methods of our fixed agent will be identical to the RandomAgent we built earlier. We'll only change the ```__init__``` and ```policy``` methods. To avoid having to rewrite all that code, we will use Python's **inheritance** to reuse all the methods in RandomAgent except for policy which we *override* here." ] }, { "metadata": { "id": "x5LkKobJhkV3", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "# Lets build a fixed agent\n", "class FixedAgent(RandomAgent): # Inherit all the methods of RandomAgent\n", " \n", " def __init__(self, actions, state_size, seed):\n", " super(FixedAgent, self).__init__(actions, state_size, seed)\n", " \n", " # Define the policy network in the initialize method (constructor) because it should persist\n", " # through multiple usages over multiple episodes of the agent.\n", " # (We change the default weight initialiser to truncated random normal which \n", " # works better for the RL algorithm we'll use in this practical.)\n", " self._policy_network = tf.keras.Sequential([\n", " # Add a hidden layer with 64 neurons\n", " tf.keras.layers.Dense(64, input_shape=[state_size], activation=tf.nn.relu, \n", " kernel_initializer=tf.truncated_normal_initializer(seed=seed)),\n", " # Add a hidden layer with 32 neurons\n", " tf.keras.layers.Dense(32, activation=tf.nn.relu, \n", " kernel_initializer=tf.truncated_normal_initializer(seed=seed)),\n", " # Add an output layer with action-many neurons and a softmax activation function\n", " tf.keras.layers.Dense(len(actions), activation='softmax'),\n", " ])\n", " \n", " # Override the policy\n", " def policy(self, state):\n", " layer_input = tf.expand_dims(state, axis=0) # Add a dummy batch dimension\n", " action_distribution = self._policy_network(layer_input) # Get the distribution over actions from the policy network\n", " action_distribution = tf.squeeze(action_distribution, axis=0) # Remove the dummy batch dimension\n", " \n", " return action_distribution" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "_9LtvT6d3xsZ", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Let's test our FixedAgent, this is just to see that it runs, as we don't expect it to perform any better than the RandomAgent because it isn't learning anything yet! " ] }, { "metadata": { "id": "6kAPun6f6nzS", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "# Our fixed-weight agent\n", "rolling_returns = run_loop(FixedAgent, num_episodes=100, record_every=5, rolling_return_frequency=5)\n", "plot_rolling_returns(rolling_returns)" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "PPesBe8q3621", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Learning with Policy Gradients\n", "Finally, let's give our agent some intelligence by making it learn from its experience in interacting with the environment. In order to learn, we need a loss function or *objective*. In RL, the objective is to maximise the expected episode return (rewards) by taking actions in the environment. The actions our agent takes are determined by the policy $\\pi_\\theta(a|s)$, which are in turn determined by the neural network parameters $\\theta$. So, we want to find the neural network parameters $\\theta$ that maximise \n", "\n", "$J(\\theta) = \\mathbb{E}_{\\tau}[r(\\tau)]$\n", "\n", "**Note:** If the maths in the next section looks intimidating, feel free to skip over it, read the intuition and code and come back to it later! \n", "\n", "\n", "### The derivative of the objective\n", "We now turn to our usual tool of stochastic gradient descent to optimise the objective, but there are two complications. Firstly, the term $\\pi_\\theta(a|s)$ represented by our neural network doesn't appear in the equation (or does it?). Secondly, how do we deal with the expectation?\n", "\n", "The first thing is to realise that our trajectories $\\tau$ depend on the policy $\\pi_\\theta(a|s)$ (**Question:** Why?) So we can (informally) write:\n", "\n", "\\begin{align}\n", "J(\\theta) &= \\mathbb{E}_{\\tau \\sim \\pi_\\theta(\\tau)} [r(\\tau)] & \\\\\n", "&= \\int \\pi_\\theta (\\tau) r(\\tau)d\\tau & (\\text{Definition of expectation}) \\\\\n", "\\end{align}\n", "\n", "Then the gradient is:\n", "\n", "\\begin{align}\n", "\\nabla_\\theta J(\\theta) &= \\nabla_\\theta \\int \\pi_\\theta (\\tau) r(\\tau)d\\tau & \\\\\n", "&= \\int \\pi_\\theta (\\tau) \\nabla_\\theta log \\pi_\\theta (\\tau) r(\\tau)d\\tau & (\\text{\"Log derivative trick\"}) \\\\\n", "&= \\mathbb{E}_{\\tau \\sim \\pi_\\theta(\\tau)}[\\nabla_\\theta log \\pi_\\theta (\\tau) r(\\tau)]\n", "\\end{align}\n", "\n", "Finally, since we don't know the true distribution of $\\tau$, we can approximate the expectation using a *monte-carlo* approximation, where the sample trajectories come from $N$ episodes of interaction with the environment. \n", "\n", "\\begin{align}\n", "\\nabla_\\theta J(\\theta) &= \\frac{1}{N} \\sum_{i=1}^N \\nabla_\\theta log \\pi_\\theta (\\tau_i) r(\\tau_i)\n", "\\end{align}\n", "\n", "Expanding this out (and considering that episode $i$ has $T_i$ steps) gives:\n", "\n", "\\begin{align}\n", "\\nabla_\\theta J(\\theta) &= \\frac{1}{N} \\sum_{i=1}^N (\\sum_{t=1}^{T_i} \\nabla_\\theta log(\\pi_\\theta(a_{i,t} | s_{i, t})) \\sum_{t=1}^{T_i} \\gamma^t r_{i,t} )\n", "\\end{align}\n", "\n", "We skipped a few steps in the maths here for brevity (see chapter 13 of [Sutton and Barto](https://drive.google.com/file/d/1xeUDVGWGUUv1-ccUMAZHJLej2C7aAFWY/view) for all the details if you're interested!). If the maths looks intimidating, don't worry! The important things to realise are the following:\n", "* We define an objective $J(\\theta)$ that is exactly what we want to do with RL, maximise the expected return.\n", "* We can run our agent in the environment to generate *trajectories* for multiple episodes\n", "* When an episode comes to an end and we know the return and trajectory, we can compute a term in (the Monte-carlo approximation to) the objective function. \n", "* We can use Tensorflow to compute the gradient of an individual term in the monte-carlo approximation and apply it to the parameters of our neural network. To do this, we define the *loss* to minimise as follows (where the sums can be represented by loops and we set $\\gamma = 1$ for simplicity):\n", "\n", "\\begin{align}\n", "L(\\theta) &= -\\sum_{t=1}^{T_i} log(\\pi_\\theta(a_{i,t} | s_{i, t})) \\sum_{t=1}^{T_i} r_{i,t} \n", "\\end{align}\n", "\n", "The name \"policy gradient\" comes from the fact that we're directly taking the gradient of the policy, rather than the alternative, value-based RL, which uses iterative update rules to calculate the expected return assocated with a state. The particular flavour of policy gradient which uses the loss function above, along with the Monte-carlo approximation of the objective is known as the **REINFORCE** algorithm. \n", "\n" ] }, { "metadata": { "id": "42i6ZNe1T6ME", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Finally, we implement the REINFORCE algorithm to optimize the parameters of the neural network. The only things we're changing, compared to our FixedAgent are the ```__init__``` and ```end_episode``` methods, so we use *inheritance* again to automatically \"copy\" all the methods from ```FixedAgent``` and ```RandomAgent```. \n", "\n", "**Note:** ```ReinforceAgent``` indirectly inherits the methods from ```RandomAgent``` through ```FixedAgent``` (which directly inherits from ```RandomAgent```). Both ```RandomAgent``` and ```FixedAgent``` have a ```policy``` method, but the one that gets \"copied\" to ```ReinforceAgent``` is the one from ```FixedAgent``` because it appeared later in the chain." ] }, { "metadata": { "id": "hQldYOWuu9RO", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "class ReinforceAgent(FixedAgent):\n", " \n", " # Override the initialization method because this agent also needs an optimizer\n", " # and a variable to track the step\n", " def __init__(self, actions, state_size, seed):\n", " super(ReinforceAgent, self).__init__(actions, state_size, seed)\n", " self._optimizer = tf.train.RMSPropOptimizer(learning_rate=0.001) \n", " self._step_counter = tf.train.get_or_create_global_step()\n", " \n", " def end_episode(self, final_reward): \n", " \"\"\"At the end of an episode, we compute the loss for the episode and take a \n", " step in parameter speace in the direction of the gradients.\"\"\"\n", " \n", " # Compute the return (cumulative discounted reward) for the episode\n", " episode_return = sum(self._rewards) + final_reward # Assuming \\gamma = 1\n", "\n", " with tf.GradientTape() as tape:\n", " # Loop over the states and actions making up the episode trajectory\n", " loss = 0\n", " for state, action in zip(self._observed_states, self._taken_actions): \n", " # Get the probabilities assigned to the actions given the state by the policy\n", " action_distribution = self.policy(state) \n", " action_index = self._actions.index(action)\n", " # Get the log probability of the chosen action under the policy\n", " log_action = tf.log(action_distribution[action_index])\n", " # Add to the running total for the episode\n", " loss -= log_action * episode_return # Add your baseline value for TASK 4 here. \n", "\n", " # Compute the gradient of the loss with respect to the variables in the model\n", " grads = tape.gradient(loss, self._policy_network.variables) \n", " \n", " # Use the optimizer to apply the gradient\n", " self._optimizer.apply_gradients(\n", " zip(grads, self._policy_network.variables), global_step=self._step_counter)\n", " \n", " return 'Loss: {}'.format(loss)" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "BchVaPCm36TY", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Notice that during the episode we run only the forward-pass of the policy network (inference). At the end of the episode, we replay the states that occured during the episode and run both the forward and backward pass of the policy network (notice the gradient tape!) because we can only compute the loss once we have the episode return at the end of the episode. If the policy network is very complex, this could be inefficient. In that case you could run both the forward an backward pass during the episode and store intermediate gradients/partial derivatives to use in the update at the end of the episode." ] }, { "metadata": { "id": "0jS05xq2PuZp", "colab_type": "text" }, "cell_type": "markdown", "source": [ "And finally we train our **REINFORCE** agent and plot the resulting rolling episode returns (over a window of 100 episodes)." ] }, { "metadata": { "id": "EG4H4PsjPyVD", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "rolling_returns = run_loop(ReinforceAgent, num_episodes=2400, record_every=30)\n", "plot_rolling_returns(rolling_returns)" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "3yvh_FF0djwu", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Your Tasks\n", "### Task 1: Learning Objectives [ALL]\n", "Review the learning objectives and ensure that you understand how the code in this practical relates to them. Ask your tutors if you don't understand anything!\n", "\n", "### Task 2: Network Architecture [ALL]\n", "Experiment with different network architectures and parameters and see how this affects the performance of the agent. What do you notice? Do you think the algorithm is sensitive to the network parameters? \n", "\n", "**HINT**: Modify the code for the policy network in the ```__init__``` method of the ```FixedAgent``` class. \n", "\n", "### Task 3: Seed Variance **[ALL]** \n", "Reveal and run the code in the cells below. This code will run the entire training procedure of the REINFORCE agent 10 times (using only 1000 episodes per run to save some time). It will then plot a chart that shows the mean of the rolling returns over the multiple runs along with an estimated *confidence interval* for the mean. You should notice that the confidence interval is fairly wide given that only the random seed is changing. This illustrates a problem with the REINFORCE algorithm: it has **high variance**. (It is however an **unbiased estimator** of the policy gradient!)\n", "\n", "### Task 4: Variance Reduction with a Basline **[INTERMEDIATE]** \n", "Read about value functions and how to approximate them using *Monte-Carlo* methods in [Slides 5 to 7 Here](http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching_files/MC-TD.pdf). Then read slides [80, 84 and 85 here](http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture14.pdf). The goal of this task is to use a simple value function $V(s)$ to implement **REINFORCE with a Baseline**, where the loss function per episode changes to: \n", "\n", "\\begin{align}\n", "L(\\theta) &= -\\sum_{t=1}^{T_i} log(\\pi_\\theta(a_{i,t} | s_{i, t})) \\sum_{t=1}^{T_i} [r_{i,t} - V(s_{i, t})]\n", "\\end{align}\n", "\n", "To do this, add code to the ```end_episode``` method of the ```ReinforceAgent``` class to estimate the value function. Subtract the value estimate for the state from the episode return at each step in the loop that computes the log_action_sum. \n", "\n", "Re-run Task 3's code to plot the confidence interval around the mean episode returns to check what effect it has on the variance. \n", "\n", "**HINT**: You will need to *discretise* the state-space. We've provided a very crude function called ```state_to_buckets``` that you can use to do this, or implement your own! \n", "\n", "**Further Reading (Optional)**: See the section on how to introduce a baseline [here](https://danieltakeshi.github.io/2017/03/28/going-deeper-into-reinforcement-learning-fundamentals-of-policy-gradients/) for more details about how and why this works!\n", "\n", "**Further Reading (Optional)**: This [blog post](https://flyyufelix.github.io/2017/10/12/dqn-vs-pg.html) contrasts policy gradient methods with an alternative value-based approach to RL called Deep Q-Networks. It also discusses some approaches to reducing the variance of the policy gradient estimator. \n", "\n", "### Task 5: Learning from pixels **[OPTIONAL]**\n", "The agent we implemented in this practical uses a simple numerical representation of the state of the environment. In many cases such a representation would not be available. Change the run-loop to instead pass the array of pixel values to the agent. (which you can get by calling ```environment.getScreenRGB()```). Change the agent's policy network to cater for this image-representation of the state. \n", "\n", "\n", "\n", "### Task 6: Other games **[OPTIONAL]**\n", "The PyGame Learning Environment (PLE) has [a number of games built-in](https://pygame-learning-environment.readthedocs.io/en/latest/user/games.html). Change the code in this practical to run on a different game and learn either from pixels or from the state representation provided by PLE. One interesting game you could try is FlappyBird! Remember to remove the reward overrides we set when trying a new game! " ] }, { "metadata": { "id": "loTWt0eMoVEA", "colab_type": "text" }, "cell_type": "markdown", "source": [ "## Additional Code for Task 3\n", "This might take some time to run, continue reading for Task 4 and ask any questions you have while waiting!" ] }, { "metadata": { "id": "TFh26u1eoUad", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "all_rolling_returns = []\n", "\n", "for i in range(10):\n", " rolling_returns = run_loop(ReinforceAgent, num_episodes=1000, record_every=25, seed=np.random.randint(100000))\n", " all_rolling_returns.append(rolling_returns)\n", "\n", "plot_rolling_returns(np.array(all_rolling_returns))" ], "execution_count": 0, "outputs": [] } ] } ================================================ FILE: README.md ================================================ # Deep Learning Indaba 2018 This repository contains the practical notebooks for the Deep Learning Indaba 2018, held in Stellenbosch South Africa. See [www.deeplearningindaba.com](www.deeplearningindaba.com) for more details. This is not an official Google product. ================================================ FILE: practical0.ipynb ================================================ { "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "practical0.ipynb", "version": "0.3.2", "provenance": [] } }, "cells": [ { "metadata": { "id": "6-VA1v4W5q1H", "colab_type": "text" }, "cell_type": "markdown", "source": [ "# DL Indaba Pre-Work\n", "# Python & Numpy Tutorial" ] }, { "metadata": { "id": "8kXrQkBl5q1J", "colab_type": "text" }, "cell_type": "markdown", "source": [ "**Introduction**\n", "\n", "This tutorial provides a gentle, hands-on introduction to the Python programming language, and the Numpy library for scientific computing.\n", "\n", "**What is expected of you:**\n", "\n", "* Work through this at your own leisure before the Indaba.\n", "* Fill out the form at the end to let us know you were able to complete this before the Indaba." ] }, { "metadata": { "id": "ay9mgFSO5q1M", "colab_type": "text" }, "cell_type": "markdown", "source": [ "##Introduction" ] }, { "metadata": { "id": "fcfkw97U5q1N", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Python is a great general-purpose programming language on its own, but with the help of a few popular libraries (numpy, scipy, matplotlib) it becomes a powerful environment for scientific computing.\n", "\n", "We expect that many of you will have some experience with Python and numpy; for the rest of you, this section will serve as a quick crash course both on the Python programming language and on the use of Python for scientific computing.\n", "\n", "Some of you may have previous knowledge in Matlab, in which case we also recommend the numpy for Matlab users page (https://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html)." ] }, { "metadata": { "id": "qo36kJw25q1P", "colab_type": "text" }, "cell_type": "markdown", "source": [ "In this tutorial, we will cover:\n", "\n", "* Basic Python: Basic data types (Containers, Lists, Dictionaries, Sets, Tuples), Functions, Classes\n", "* Numpy: Arrays, Array indexing, Datatypes, Array math, Broadcasting\n", "* Matplotlib: Plotting, Subplots, Images\n", "* IPython: Creating notebooks, Typical workflows" ] }, { "metadata": { "id": "CV6OV42I5q1R", "colab_type": "text" }, "cell_type": "markdown", "source": [ "##Basics of Python" ] }, { "metadata": { "id": "B9MacMaY5q1T", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Python is a high-level, dynamically typed multiparadigm programming language. Python code is often said to be almost like pseudocode, since it allows you to express very powerful ideas in very few lines of code while being very readable. As an example, here is an implementation of the classic quicksort algorithm in Python:\n", "\n", "**NOTE**: In Colab, you can execute the code in a cell by clicking inside the cell and pressing both **Shift+Enter** at the same time." ] }, { "metadata": { "id": "wpYJZksQ5q1W", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "fa32f5c3-3840-4e4b-b2f8-1e93fc0f1ea0" }, "cell_type": "code", "source": [ "def quicksort(arr):\n", " if len(arr) <= 1:\n", " return arr\n", " pivot = arr[len(arr) / 2]\n", " left = [x for x in arr if x < pivot]\n", " middle = [x for x in arr if x == pivot]\n", " right = [x for x in arr if x > pivot]\n", " return quicksort(left) + middle + quicksort(right)\n", "\n", "print quicksort([3,6,8,10,1,2,1])" ], "execution_count": 1, "outputs": [ { "output_type": "stream", "text": [ "[1, 1, 2, 3, 6, 8, 10]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "LfhFbB8Z5q1i", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Python versions" ] }, { "metadata": { "id": "cJCjzx7Y5q1k", "colab_type": "text" }, "cell_type": "markdown", "source": [ "There are currently two different supported versions of Python, 2.7 and 3.4. Somewhat confusingly, Python 3.0 introduced many backwards-incompatible changes to the language, so code written for 2.7 may not work under 3.4 and vice versa. For this class all code will use Python 2.7.\n", "\n", "You can check your Python version at the command line by running `python --version`." ] }, { "metadata": { "id": "sotHVM0t5q1l", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Basic data types" ] }, { "metadata": { "id": "THkpPxwN5q1n", "colab_type": "text" }, "cell_type": "markdown", "source": [ "####Numbers" ] }, { "metadata": { "id": "f3xyLvxW5q1o", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Integers and floats work as you would expect from other languages:" ] }, { "metadata": { "id": "bVYQAovh5q1q", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "6fdb6f0f-f0df-4e42-bd12-6193f1765057" }, "cell_type": "code", "source": [ "x = 3\n", "print x, type(x)" ], "execution_count": 2, "outputs": [ { "output_type": "stream", "text": [ "3 \n" ], "name": "stdout" } ] }, { "metadata": { "id": "dztfWsYU5q1y", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "92f12fc1-0a68-491f-b4fc-d8ec394adb06" }, "cell_type": "code", "source": [ "print x + 1 # Addition;\n", "print x - 1 # Subtraction;\n", "print x * 2 # Multiplication;\n", "print x ** 2 # Exponentiation;" ], "execution_count": 3, "outputs": [ { "output_type": "stream", "text": [ "4\n", "2\n", "6\n", "9\n" ], "name": "stdout" } ] }, { "metadata": { "id": "gOmd8lBF5q16", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "0b87d3d1-4adc-4d17-821f-06b369da7d39" }, "cell_type": "code", "source": [ "x += 1\n", "print x # Prints \"4\"\n", "x *= 2\n", "print x # Prints \"8\"" ], "execution_count": 4, "outputs": [ { "output_type": "stream", "text": [ "4\n", "8\n" ], "name": "stdout" } ] }, { "metadata": { "id": "g4NuhVfj5q2E", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "74db7261-d2b5-4da0-8008-8ed3dc00a6ee" }, "cell_type": "code", "source": [ "y = 2.5\n", "print type(y) # Prints \"\"\n", "print y, y + 1, y * 2, y ** 2 # Prints \"2.5 3.5 5.0 6.25\"" ], "execution_count": 5, "outputs": [ { "output_type": "stream", "text": [ "\n", "2.5 3.5 5.0 6.25\n" ], "name": "stdout" } ] }, { "metadata": { "id": "we75WUci5q2O", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Note that unlike many languages, Python does not have unary increment (x++) or decrement (x--) operators.\n", "\n", "Python also has built-in types for long integers and complex numbers; you can find all of the details in the [documentation](https://docs.python.org/2/library/stdtypes.html#numeric-types-int-float-long-complex)." ] }, { "metadata": { "id": "uUl_bk835q2P", "colab_type": "text" }, "cell_type": "markdown", "source": [ "####Booleans" ] }, { "metadata": { "id": "rgeh2qDx5q2Q", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Python implements all of the usual operators for Boolean logic, but uses English words rather than symbols (`&&`, `||`, etc.):" ] }, { "metadata": { "id": "yo6wobrY5q2R", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "92facf17-bcee-4877-ce54-002ea4269af9" }, "cell_type": "code", "source": [ "t, f = True, False\n", "print type(t) # Prints \"\"" ], "execution_count": 6, "outputs": [ { "output_type": "stream", "text": [ "\n" ], "name": "stdout" } ] }, { "metadata": { "id": "zsBdYsbJ5q2Z", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Now we let's look at the operations:" ] }, { "metadata": { "id": "BNVhsasL5q2c", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "16f0fe51-6185-4bd9-b3e6-2e1cf33f8fcb" }, "cell_type": "code", "source": [ "print t and f # Logical AND;\n", "print t or f # Logical OR;\n", "print not t # Logical NOT;\n", "print t != f # Logical XOR;" ], "execution_count": 7, "outputs": [ { "output_type": "stream", "text": [ "False\n", "True\n", "False\n", "True\n" ], "name": "stdout" } ] }, { "metadata": { "id": "jWt1jbF75q2j", "colab_type": "text" }, "cell_type": "markdown", "source": [ "####Strings" ] }, { "metadata": { "id": "uyldbWX75q2k", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "b4f63e26-6d9c-4fc2-c190-ec3448e7b4d2" }, "cell_type": "code", "source": [ "hello = 'hello' # String literals can use single quotes\n", "world = \"world\" # or double quotes; it does not matter.\n", "print hello, len(hello)" ], "execution_count": 8, "outputs": [ { "output_type": "stream", "text": [ "hello 5\n" ], "name": "stdout" } ] }, { "metadata": { "id": "69vTXT6m5q2p", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "0bea5ac2-54e8-4100-d19c-166f77b984cf" }, "cell_type": "code", "source": [ "hw = hello + ' ' + world # String concatenation\n", "print hw # prints \"hello world\"" ], "execution_count": 9, "outputs": [ { "output_type": "stream", "text": [ "hello world\n" ], "name": "stdout" } ] }, { "metadata": { "id": "KPvy1sbJ5q2u", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "12bbfd10-884c-4454-d353-072edd165be1" }, "cell_type": "code", "source": [ "hw12 = '%s %s %d' % (hello, world, 12) # sprintf style string formatting\n", "print hw12 # prints \"hello world 12\"" ], "execution_count": 10, "outputs": [ { "output_type": "stream", "text": [ "hello world 12\n" ], "name": "stdout" } ] }, { "metadata": { "id": "Q-xLTBCM5q2y", "colab_type": "text" }, "cell_type": "markdown", "source": [ "String objects have a bunch of useful methods; for example:" ] }, { "metadata": { "id": "5tMbkHM65q20", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 119 }, "outputId": "963a4d80-eacf-4ada-b343-ba68d9f6e9b4" }, "cell_type": "code", "source": [ "s = \"hello\"\n", "print s.capitalize() # Capitalize a string; prints \"Hello\"\n", "print s.upper() # Convert a string to uppercase; prints \"HELLO\"\n", "print s.rjust(7) # Right-justify a string, padding with spaces; prints \" hello\"\n", "print s.center(7) # Center a string, padding with spaces; prints \" hello \"\n", "print s.replace('l', '(ell)') # Replace all instances of one substring with another;\n", " # prints \"he(ell)(ell)o\"\n", "print ' world '.strip() # Strip leading and trailing whitespace; prints \"world\"" ], "execution_count": 11, "outputs": [ { "output_type": "stream", "text": [ "Hello\n", "HELLO\n", " hello\n", " hello \n", "he(ell)(ell)o\n", "world\n" ], "name": "stdout" } ] }, { "metadata": { "id": "7iVAp_Hm5q24", "colab_type": "text" }, "cell_type": "markdown", "source": [ "You can find a list of all string methods in the [documentation](https://docs.python.org/2/library/stdtypes.html#string-methods)." ] }, { "metadata": { "id": "jHCAFmb95q25", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Containers" ] }, { "metadata": { "id": "-PerHSky5q25", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Python includes several built-in container types: lists, dictionaries, sets, and tuples." ] }, { "metadata": { "id": "f9BNPsMT5q27", "colab_type": "text" }, "cell_type": "markdown", "source": [ "####Lists" ] }, { "metadata": { "id": "ipDjlY6S5q28", "colab_type": "text" }, "cell_type": "markdown", "source": [ "A list is the Python equivalent of an array, but is resizeable and can contain elements of different types:" ] }, { "metadata": { "id": "4_TQGb2i5q29", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "c53fbbd5-a1ce-46c7-9ce5-56f00faed920" }, "cell_type": "code", "source": [ "xs = [3, 1, 2] # Create a list\n", "print xs, xs[2]\n", "print xs[-1] # Negative indices count from the end of the list; prints \"2\"" ], "execution_count": 12, "outputs": [ { "output_type": "stream", "text": [ "[3, 1, 2] 2\n", "2\n" ], "name": "stdout" } ] }, { "metadata": { "id": "aqoDqKcQ5q3A", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "a5e768e8-6d02-4659-b5ff-a3cb0b89752d" }, "cell_type": "code", "source": [ "xs[2] = 'foo' # Lists can contain elements of different types\n", "print xs" ], "execution_count": 13, "outputs": [ { "output_type": "stream", "text": [ "[3, 1, 'foo']\n" ], "name": "stdout" } ] }, { "metadata": { "id": "WrloXM9J5q3G", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "9245917f-44a1-4625-d4e3-e49006756d9e" }, "cell_type": "code", "source": [ "xs.append('bar') # Add a new element to the end of the list\n", "print xs " ], "execution_count": 14, "outputs": [ { "output_type": "stream", "text": [ "[3, 1, 'foo', 'bar']\n" ], "name": "stdout" } ] }, { "metadata": { "id": "EkQ9BNzz5q3J", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "4b193566-2ccd-4cbc-f57e-d17dd8904a4f" }, "cell_type": "code", "source": [ "x = xs.pop() # Remove and return the last element of the list\n", "print x, xs " ], "execution_count": 15, "outputs": [ { "output_type": "stream", "text": [ "bar [3, 1, 'foo']\n" ], "name": "stdout" } ] }, { "metadata": { "id": "wTDsbYOh5q3N", "colab_type": "text" }, "cell_type": "markdown", "source": [ "As usual, you can find all the gory details about lists in the [documentation](https://docs.python.org/2/tutorial/datastructures.html#more-on-lists)." ] }, { "metadata": { "id": "OwN1QfB25q3P", "colab_type": "text" }, "cell_type": "markdown", "source": [ "####Slicing" ] }, { "metadata": { "id": "jcMqNrgu5q3Q", "colab_type": "text" }, "cell_type": "markdown", "source": [ "In addition to accessing list elements one at a time, Python provides concise syntax to access sublists; this is known as slicing:" ] }, { "metadata": { "id": "wwZ6SA-L5q3Q", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 136 }, "outputId": "6f120b7d-c278-4b40-913a-823214b66c51" }, "cell_type": "code", "source": [ "nums = range(5) # range is a built-in function that creates a list of integers\n", "print nums # Prints \"[0, 1, 2, 3, 4]\"\n", "print nums[2:4] # Get a slice from index 2 to 4 (exclusive); prints \"[2, 3]\"\n", "print nums[2:] # Get a slice from index 2 to the end; prints \"[2, 3, 4]\"\n", "print nums[:2] # Get a slice from the start to index 2 (exclusive); prints \"[0, 1]\"\n", "print nums[:] # Get a slice of the whole list; prints \"[0, 1, 2, 3, 4]\"\n", "print nums[:-1] # Slice indices can be negative; prints \"[0, 1, 2, 3]\"\n", "nums[2:4] = [8, 9] # Assign a new sublist to a slice\n", "print nums # Prints \"[0, 1, 8, 8, 4]\"" ], "execution_count": 16, "outputs": [ { "output_type": "stream", "text": [ "[0, 1, 2, 3, 4]\n", "[2, 3]\n", "[2, 3, 4]\n", "[0, 1]\n", "[0, 1, 2, 3, 4]\n", "[0, 1, 2, 3]\n", "[0, 1, 8, 9, 4]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "5xiRdmop5q3V", "colab_type": "text" }, "cell_type": "markdown", "source": [ "####Loops" ] }, { "metadata": { "id": "W4aIykm35q3W", "colab_type": "text" }, "cell_type": "markdown", "source": [ "You can loop over the elements of a list like this:" ] }, { "metadata": { "id": "DzPkWoQU5q3X", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "outputId": "3d025f02-666a-43eb-b200-3f9cc7341f04" }, "cell_type": "code", "source": [ "animals = ['cat', 'dog', 'monkey']\n", "for animal in animals:\n", " print animal" ], "execution_count": 17, "outputs": [ { "output_type": "stream", "text": [ "cat\n", "dog\n", "monkey\n" ], "name": "stdout" } ] }, { "metadata": { "id": "SfjRY7oh5q3c", "colab_type": "text" }, "cell_type": "markdown", "source": [ "If you want access to the index of each element within the body of a loop, use the built-in `enumerate` function:" ] }, { "metadata": { "id": "KHfWh7cm5q3d", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "outputId": "3f9cc83c-0b42-484e-f50c-6f0602c49e38" }, "cell_type": "code", "source": [ "animals = ['cat', 'dog', 'monkey']\n", "for idx, animal in enumerate(animals):\n", " print '#%d: %s' % (idx + 1, animal)" ], "execution_count": 18, "outputs": [ { "output_type": "stream", "text": [ "#1: cat\n", "#2: dog\n", "#3: monkey\n" ], "name": "stdout" } ] }, { "metadata": { "id": "GbMrJih65q3f", "colab_type": "text" }, "cell_type": "markdown", "source": [ "####List comprehensions:" ] }, { "metadata": { "id": "uEw19H_q5q3g", "colab_type": "text" }, "cell_type": "markdown", "source": [ "When programming, frequently we want to transform one type of data into another. As a simple example, consider the following code that computes square numbers:" ] }, { "metadata": { "id": "q3nPnpPE5q3h", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "9d2360c9-58da-45d2-964a-4bacfb0064c9" }, "cell_type": "code", "source": [ "nums = [0, 1, 2, 3, 4]\n", "squares = []\n", "for x in nums:\n", " squares.append(x ** 2)\n", "print squares" ], "execution_count": 19, "outputs": [ { "output_type": "stream", "text": [ "[0, 1, 4, 9, 16]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "uSsysiX95q3k", "colab_type": "text" }, "cell_type": "markdown", "source": [ "You can make this code simpler using a list comprehension:" ] }, { "metadata": { "id": "k4ezY_Vn5q3l", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "bc656919-18cd-42a0-c361-cc07143fe9c2" }, "cell_type": "code", "source": [ "nums = [0, 1, 2, 3, 4]\n", "squares = [x ** 2 for x in nums]\n", "print squares" ], "execution_count": 20, "outputs": [ { "output_type": "stream", "text": [ "[0, 1, 4, 9, 16]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "2r-xDQrV5q3p", "colab_type": "text" }, "cell_type": "markdown", "source": [ "List comprehensions can also contain conditions:" ] }, { "metadata": { "id": "FuceJKWp5q3q", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "d641234e-3fc2-4fb4-83f4-21a39407cd86" }, "cell_type": "code", "source": [ "nums = [0, 1, 2, 3, 4]\n", "even_squares = [x ** 2 for x in nums if x % 2 == 0]\n", "print even_squares" ], "execution_count": 21, "outputs": [ { "output_type": "stream", "text": [ "[0, 4, 16]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "Zn9lPGuA5q3t", "colab_type": "text" }, "cell_type": "markdown", "source": [ "####Dictionaries" ] }, { "metadata": { "id": "qR4dwMJ15q3t", "colab_type": "text" }, "cell_type": "markdown", "source": [ "A dictionary stores (key, value) pairs, similar to a `Map` in Java or an object in Javascript. You can use it like this:" ] }, { "metadata": { "id": "XSqsRxER5q3u", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "3d392d1b-a540-491c-eaa1-a5d6905b85f7" }, "cell_type": "code", "source": [ "d = {'cat': 'cute', 'dog': 'furry'} # Create a new dictionary with some data\n", "print d['cat'] # Get an entry from a dictionary; prints \"cute\"\n", "print 'cat' in d # Check if a dictionary has a given key; prints \"True\"" ], "execution_count": 22, "outputs": [ { "output_type": "stream", "text": [ "cute\n", "True\n" ], "name": "stdout" } ] }, { "metadata": { "id": "6-fyFvpe5q3w", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "88cf8551-7801-4616-a6b0-3295d2cf1888" }, "cell_type": "code", "source": [ "d['fish'] = 'wet' # Set an entry in a dictionary\n", "print d['fish'] # Prints \"wet\"" ], "execution_count": 23, "outputs": [ { "output_type": "stream", "text": [ "wet\n" ], "name": "stdout" } ] }, { "metadata": { "id": "cqFipdSW5q3z", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 164 }, "outputId": "73e2c5c8-0c59-4926-e20d-06e4a0363117" }, "cell_type": "code", "source": [ "print d['monkey'] # KeyError: 'monkey' not a key of d" ], "execution_count": 24, "outputs": [ { "output_type": "error", "ename": "KeyError", "evalue": "ignored", "traceback": [ "\u001b[0;31m\u001b[0m", "\u001b[0;31mKeyError\u001b[0mTraceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'monkey'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;31m# KeyError: 'monkey' not a key of d\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mKeyError\u001b[0m: 'monkey'" ] } ] }, { "metadata": { "id": "mqwjq1JB5q32", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "866fcb9d-7829-4194-fea7-bf3c17ad98b4" }, "cell_type": "code", "source": [ "print d.get('monkey', 'N/A') # Get an element with a default; prints \"N/A\"\n", "print d.get('fish', 'N/A') # Get an element with a default; prints \"wet\"" ], "execution_count": 25, "outputs": [ { "output_type": "stream", "text": [ "N/A\n", "wet\n" ], "name": "stdout" } ] }, { "metadata": { "id": "JSBfW9cM5q35", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "69fb8cf6-03b1-40c0-95d9-d9d123ef1d70" }, "cell_type": "code", "source": [ "del d['fish'] # Remove an element from a dictionary\n", "print d.get('fish', 'N/A') # \"fish\" is no longer a key; prints \"N/A\"" ], "execution_count": 26, "outputs": [ { "output_type": "stream", "text": [ "N/A\n" ], "name": "stdout" } ] }, { "metadata": { "id": "pJKwvNbN5q3-", "colab_type": "text" }, "cell_type": "markdown", "source": [ "You can find all you need to know about dictionaries in the [documentation](https://docs.python.org/2/library/stdtypes.html#dict)." ] }, { "metadata": { "id": "39GhDg_S5q3_", "colab_type": "text" }, "cell_type": "markdown", "source": [ "It is easy to iterate over the keys in a dictionary:" ] }, { "metadata": { "id": "AGUsSd285q4A", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "outputId": "c73e605a-2197-4bbb-f9c9-0c568ee19edf" }, "cell_type": "code", "source": [ "d = {'person': 2, 'cat': 4, 'spider': 8}\n", "for animal in d:\n", " legs = d[animal]\n", " print 'A %s has %d legs' % (animal, legs)" ], "execution_count": 27, "outputs": [ { "output_type": "stream", "text": [ "A person has 2 legs\n", "A spider has 8 legs\n", "A cat has 4 legs\n" ], "name": "stdout" } ] }, { "metadata": { "id": "USWlJ1Uh5q4D", "colab_type": "text" }, "cell_type": "markdown", "source": [ "If you want access to keys and their corresponding values, use the iteritems method:" ] }, { "metadata": { "id": "ksXilYJx5q4E", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "outputId": "a838bdb6-1593-4b43-8153-354847de1e6f" }, "cell_type": "code", "source": [ "d = {'person': 2, 'cat': 4, 'spider': 8}\n", "for animal, legs in d.iteritems():\n", " print 'A %s has %d legs' % (animal, legs)" ], "execution_count": 28, "outputs": [ { "output_type": "stream", "text": [ "A person has 2 legs\n", "A spider has 8 legs\n", "A cat has 4 legs\n" ], "name": "stdout" } ] }, { "metadata": { "id": "41-CY-Pz5q4G", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Dictionary comprehensions: These are similar to list comprehensions, but allow you to easily construct dictionaries. For example:" ] }, { "metadata": { "id": "BrEgZHHq5q4I", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "0a87243e-e521-451e-ae09-749a4f94b332" }, "cell_type": "code", "source": [ "nums = [0, 1, 2, 3, 4]\n", "even_num_to_square = {x: x ** 2 for x in nums if x % 2 == 0}\n", "print even_num_to_square" ], "execution_count": 29, "outputs": [ { "output_type": "stream", "text": [ "{0: 0, 2: 4, 4: 16}\n" ], "name": "stdout" } ] }, { "metadata": { "id": "tDD47vMB5q4L", "colab_type": "text" }, "cell_type": "markdown", "source": [ "####Sets" ] }, { "metadata": { "id": "GA8eU1aU5q4M", "colab_type": "text" }, "cell_type": "markdown", "source": [ "A set is an unordered collection of distinct elements. As a simple example, consider the following:" ] }, { "metadata": { "id": "bqrfOvL85q4O", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "ac4e295c-c72c-44cf-b5d5-647b78a928b7" }, "cell_type": "code", "source": [ "animals = {'cat', 'dog'}\n", "print 'cat' in animals # Check if an element is in a set; prints \"True\"\n", "print 'fish' in animals # prints \"False\"\n" ], "execution_count": 30, "outputs": [ { "output_type": "stream", "text": [ "True\n", "False\n" ], "name": "stdout" } ] }, { "metadata": { "id": "iBoumJBc5q4S", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "02765ca4-6677-450d-8415-02a88c3452f1" }, "cell_type": "code", "source": [ "animals.add('fish') # Add an element to a set\n", "print 'fish' in animals\n", "print len(animals) # Number of elements in a set;" ], "execution_count": 31, "outputs": [ { "output_type": "stream", "text": [ "True\n", "3\n" ], "name": "stdout" } ] }, { "metadata": { "id": "4WOQYagQ5q4W", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "5c47fbdd-3254-48ab-8068-45e0c3bda13c" }, "cell_type": "code", "source": [ "animals.add('cat') # Adding an element that is already in the set does nothing\n", "print len(animals) \n", "animals.remove('cat') # Remove an element from a set\n", "print len(animals) " ], "execution_count": 32, "outputs": [ { "output_type": "stream", "text": [ "3\n", "2\n" ], "name": "stdout" } ] }, { "metadata": { "id": "hq0u2OQT5q4b", "colab_type": "text" }, "cell_type": "markdown", "source": [ "_Loops_: Iterating over a set has the same syntax as iterating over a list; however since sets are unordered, you cannot make assumptions about the order in which you visit the elements of the set:" ] }, { "metadata": { "id": "0UFyLDm55q4c", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "outputId": "4b9e30fd-406f-4b3d-c23c-ac7f882853da" }, "cell_type": "code", "source": [ "animals = {'cat', 'dog', 'fish'}\n", "for idx, animal in enumerate(animals):\n", " print '#%d: %s' % (idx + 1, animal)\n", "# Prints \"#1: fish\", \"#2: dog\", \"#3: cat\"" ], "execution_count": 33, "outputs": [ { "output_type": "stream", "text": [ "#1: fish\n", "#2: dog\n", "#3: cat\n" ], "name": "stdout" } ] }, { "metadata": { "id": "27txGVy95q4g", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Set comprehensions: Like lists and dictionaries, we can easily construct sets using set comprehensions:" ] }, { "metadata": { "id": "Z8HkXcfM5q4h", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "1fcaedce-acce-4d12-e896-a939a841668c" }, "cell_type": "code", "source": [ "from math import sqrt\n", "print {int(sqrt(x)) for x in range(30)}" ], "execution_count": 34, "outputs": [ { "output_type": "stream", "text": [ "set([0, 1, 2, 3, 4, 5])\n" ], "name": "stdout" } ] }, { "metadata": { "id": "fL0UctlO5q4j", "colab_type": "text" }, "cell_type": "markdown", "source": [ "####Tuples" ] }, { "metadata": { "id": "iezj80Mu5q4j", "colab_type": "text" }, "cell_type": "markdown", "source": [ "A tuple is an (immutable) ordered list of values. A tuple is in many ways similar to a list; one of the most important differences is that tuples can be used as keys in dictionaries and as elements of sets, while lists cannot. Here is a trivial example:" ] }, { "metadata": { "id": "mdEyq1hC5q4k", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "outputId": "7e949622-325c-43b1-94b5-7b438d3dfe7c" }, "cell_type": "code", "source": [ "d = {(x, x + 1): x for x in range(10)} # Create a dictionary with tuple keys\n", "t = (5, 6) # Create a tuple\n", "print type(t)\n", "print d[t] \n", "print d[(1, 2)]" ], "execution_count": 35, "outputs": [ { "output_type": "stream", "text": [ "\n", "5\n", "1\n" ], "name": "stdout" } ] }, { "metadata": { "id": "QTbRg_s75q4n", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 164 }, "outputId": "30407497-adc5-4b78-8014-f66693979d86" }, "cell_type": "code", "source": [ "t[0] = 1" ], "execution_count": 36, "outputs": [ { "output_type": "error", "ename": "TypeError", "evalue": "ignored", "traceback": [ "\u001b[0;31m\u001b[0m", "\u001b[0;31mTypeError\u001b[0mTraceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" ] } ] }, { "metadata": { "id": "w1VXSG2s5q4q", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Functions" ] }, { "metadata": { "id": "-4lAKLDY5q4r", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Python functions are defined using the `def` keyword. For example:" ] }, { "metadata": { "id": "oysjtHVh5q4s", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "outputId": "a3472401-4195-4442-d9ee-33969b8ca186" }, "cell_type": "code", "source": [ "def sign(x):\n", " if x > 0:\n", " return 'positive'\n", " elif x < 0:\n", " return 'negative'\n", " else:\n", " return 'zero'\n", "\n", "for x in [-1, 0, 1]:\n", " print sign(x)" ], "execution_count": 37, "outputs": [ { "output_type": "stream", "text": [ "negative\n", "zero\n", "positive\n" ], "name": "stdout" } ] }, { "metadata": { "id": "YhQkNfyd5q4x", "colab_type": "text" }, "cell_type": "markdown", "source": [ "We will often define functions to take optional keyword arguments, like this:" ] }, { "metadata": { "id": "TH04kWxK5q4y", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "7c0cbe7f-a75c-4bae-c4cd-0e7916792f4e" }, "cell_type": "code", "source": [ "def hello(name, loud=False):\n", " if loud:\n", " print 'HELLO, %s' % name.upper()\n", " else:\n", " print 'Hello, %s!' % name\n", "\n", "hello('Bob')\n", "hello('Fred', loud=True)" ], "execution_count": 38, "outputs": [ { "output_type": "stream", "text": [ "Hello, Bob!\n", "HELLO, FRED\n" ], "name": "stdout" } ] }, { "metadata": { "id": "qvrL6-14JgG1", "colab_type": "text" }, "cell_type": "markdown", "source": [ "" ] }, { "metadata": { "id": "Xvw1X4q25q42", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Classes" ] }, { "metadata": { "id": "5ungbMSi5q42", "colab_type": "text" }, "cell_type": "markdown", "source": [ "The syntax for defining classes in Python is straightforward:" ] }, { "metadata": { "id": "P6H_HlXX5q42", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "22afe966-e943-40d1-b830-b0c2402dcff6" }, "cell_type": "code", "source": [ "class Greeter:\n", "\n", " # Constructor\n", " def __init__(self, name):\n", " self.name = name # Create an instance variable\n", "\n", " # Instance method\n", " def greet(self, loud=False):\n", " if loud:\n", " print 'HELLO, %s!' % self.name.upper()\n", " else:\n", " print 'Hello, %s' % self.name\n", "\n", "g = Greeter('Fred') # Construct an instance of the Greeter class\n", "g.greet() # Call an instance method; prints \"Hello, Fred\"\n", "g.greet(loud=True) # Call an instance method; prints \"HELLO, FRED!\"" ], "execution_count": 39, "outputs": [ { "output_type": "stream", "text": [ "Hello, Fred\n", "HELLO, FRED!\n" ], "name": "stdout" } ] }, { "metadata": { "id": "HC8PPoa55q44", "colab_type": "text" }, "cell_type": "markdown", "source": [ "##Numpy" ] }, { "metadata": { "id": "icQHJIvK5q45", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Numpy is the core library for scientific computing in Python (see the full documentation which is [available online](https://docs.scipy.org/doc/numpy-1.13.0/reference/)). It provides a high-performance multidimensional array object, and tools for working with these arrays. If you are already familiar with MATLAB, you might find this [tutorial](http://wiki.scipy.org/NumPy_for_Matlab_Users) useful to get started with Numpy." ] }, { "metadata": { "id": "PNXqmeC45q46", "colab_type": "text" }, "cell_type": "markdown", "source": [ "To use Numpy, we first need to import the `numpy` package:" ] }, { "metadata": { "id": "nwFkFb_d5q47", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "import numpy as np" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "oEMc8JJP5q4-", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Arrays" ] }, { "metadata": { "id": "qY5T4B_55q4_", "colab_type": "text" }, "cell_type": "markdown", "source": [ "A numpy array is a grid of values, all of the same type, and is indexed by a tuple of nonnegative integers. The number of dimensions is the rank of the array; the shape of an array is a tuple of integers giving the size of the array along each dimension." ] }, { "metadata": { "id": "ujIKsN7n5q4_", "colab_type": "text" }, "cell_type": "markdown", "source": [ "We can initialize numpy arrays from nested Python lists, and access elements using square brackets:" ] }, { "metadata": { "id": "2T4S0Y8_5q5A", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "17aded13-9214-41b0-c3e3-96405f83cd64" }, "cell_type": "code", "source": [ "a = np.array([1, 2, 3]) # Create a rank 1 array\n", "print type(a), a.shape, a[0], a[1], a[2]\n", "a[0] = 5 # Change an element of the array\n", "print a " ], "execution_count": 41, "outputs": [ { "output_type": "stream", "text": [ " (3,) 1 2 3\n", "[5 2 3]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "Cxp0IQI_5q5D", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "1842cf26-cb87-4f55-aba9-e27cfd9f51c2" }, "cell_type": "code", "source": [ "b = np.array([[1,2,3],[4,5,6]]) # Create a rank 2 array\n", "print b" ], "execution_count": 42, "outputs": [ { "output_type": "stream", "text": [ "[[1 2 3]\n", " [4 5 6]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "NC7ntYGk5q5E", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "9b3eb76e-e554-4541-e8c8-cb674e1f4545" }, "cell_type": "code", "source": [ "print b.shape \n", "print b[0, 0], b[0, 1], b[1, 0]" ], "execution_count": 43, "outputs": [ { "output_type": "stream", "text": [ "(2, 3)\n", "1 2 4\n" ], "name": "stdout" } ] }, { "metadata": { "id": "XVEgPUy45q5H", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Numpy also provides many functions to create arrays:" ] }, { "metadata": { "id": "J6asuT0G5q5H", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "1c62f9db-d7f1-4af3-ea2a-e6c49b83652d" }, "cell_type": "code", "source": [ "a = np.zeros((2,2)) # Create an array of all zeros\n", "print a" ], "execution_count": 44, "outputs": [ { "output_type": "stream", "text": [ "[[0. 0.]\n", " [0. 0.]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "No4YcRSX5q5J", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "f5a8be88-66b5-4678-9f83-0f8da613598e" }, "cell_type": "code", "source": [ "b = np.ones((1,2)) # Create an array of all ones\n", "print b" ], "execution_count": 45, "outputs": [ { "output_type": "stream", "text": [ "[[1. 1.]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "arHMvOhi5q5L", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "950af5fb-8014-44c3-9fe1-e82c69b7bfde" }, "cell_type": "code", "source": [ "c = np.full((2,2), 7) # Create a constant array\n", "print c " ], "execution_count": 46, "outputs": [ { "output_type": "stream", "text": [ "[[7 7]\n", " [7 7]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "BVuZ89NW5q5M", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "d4a364c6-e2ad-40c1-f1f9-58426b313937" }, "cell_type": "code", "source": [ "d = np.eye(2) # Create a 2x2 identity matrix\n", "print d" ], "execution_count": 47, "outputs": [ { "output_type": "stream", "text": [ "[[1. 0.]\n", " [0. 1.]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "tY58UMFk5q5P", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "5890cf2b-3cd3-4a0d-a6ea-6fa6cf4777a7" }, "cell_type": "code", "source": [ "e = np.random.random((2,2)) # Create an array filled with random values\n", "print e" ], "execution_count": 48, "outputs": [ { "output_type": "stream", "text": [ "[[0.66164961 0.53382851]\n", " [0.7673618 0.12216509]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "Cm1XbIVO5q5Q", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Array indexing" ] }, { "metadata": { "id": "pPuZbM_Z5q5R", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Numpy offers several ways to index into arrays." ] }, { "metadata": { "id": "NHei_ely5q5R", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Slicing: Similar to Python lists, numpy arrays can be sliced. Since arrays may be multidimensional, you must specify a slice for each dimension of the array:" ] }, { "metadata": { "id": "CFp3nn085q5R", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "82bdcb59-bdde-45b4-e4db-72281e0469b2" }, "cell_type": "code", "source": [ "import numpy as np\n", "\n", "# Create the following rank 2 array with shape (3, 4)\n", "# [[ 1 2 3 4]\n", "# [ 5 6 7 8]\n", "# [ 9 10 11 12]]\n", "a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])\n", "\n", "# Use slicing to pull out the subarray consisting of the first 2 rows\n", "# and columns 1 and 2; b is the following array of shape (2, 2):\n", "# [[2 3]\n", "# [6 7]]\n", "b = a[:2, 1:3]\n", "print b" ], "execution_count": 49, "outputs": [ { "output_type": "stream", "text": [ "[[2 3]\n", " [6 7]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "21E__llI5q5T", "colab_type": "text" }, "cell_type": "markdown", "source": [ "A slice of an array is a view into the same data, so modifying it will modify the original array." ] }, { "metadata": { "id": "5G-xCH_n5q5T", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "be596423-d268-4eb2-c3e2-0c3749256a57" }, "cell_type": "code", "source": [ "print a[0, 1] \n", "b[0, 0] = 77 # b[0, 0] is the same piece of data as a[0, 1]\n", "print a[0, 1] " ], "execution_count": 50, "outputs": [ { "output_type": "stream", "text": [ "2\n", "77\n" ], "name": "stdout" } ] }, { "metadata": { "id": "7YnhuQqw5q5V", "colab_type": "text" }, "cell_type": "markdown", "source": [ "You can also mix integer indexing with slice indexing. However, doing so will yield an array of lower rank than the original array. Note that this is quite different from the way that MATLAB handles array slicing:" ] }, { "metadata": { "id": "P3l4gKyp5q5X", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "outputId": "1182f26a-8751-49e9-811e-5fe44b7ccd80" }, "cell_type": "code", "source": [ "# Create the following rank 2 array with shape (3, 4)\n", "a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])\n", "print a" ], "execution_count": 51, "outputs": [ { "output_type": "stream", "text": [ "[[ 1 2 3 4]\n", " [ 5 6 7 8]\n", " [ 9 10 11 12]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "abW3Kruq5q5Z", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Two ways of accessing the data in the middle row of the array.\n", "Mixing integer indexing with slices yields an array of lower rank,\n", "while using only slices yields an array of the same rank as the\n", "original array:" ] }, { "metadata": { "id": "VtPRP0Gi5q5a", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "outputId": "575135c1-d36d-44d7-8496-853c25f96aa9" }, "cell_type": "code", "source": [ "row_r1 = a[1, :] # Rank 1 view of the second row of a \n", "row_r2 = a[1:2, :] # Rank 2 view of the second row of a\n", "row_r3 = a[[1], :] # Rank 2 view of the second row of a\n", "print row_r1, row_r1.shape \n", "print row_r2, row_r2.shape\n", "print row_r3, row_r3.shape" ], "execution_count": 52, "outputs": [ { "output_type": "stream", "text": [ "[5 6 7 8] (4,)\n", "[[5 6 7 8]] (1, 4)\n", "[[5 6 7 8]] (1, 4)\n" ], "name": "stdout" } ] }, { "metadata": { "id": "eTCT0bct5q5c", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 102 }, "outputId": "88683304-3041-4a73-960c-23ba8a01f5e8" }, "cell_type": "code", "source": [ "# We can make the same distinction when accessing columns of an array:\n", "col_r1 = a[:, 1]\n", "col_r2 = a[:, 1:2]\n", "print col_r1, col_r1.shape\n", "print\n", "print col_r2, col_r2.shape" ], "execution_count": 53, "outputs": [ { "output_type": "stream", "text": [ "[ 2 6 10] (3,)\n", "\n", "[[ 2]\n", " [ 6]\n", " [10]] (3, 1)\n" ], "name": "stdout" } ] }, { "metadata": { "id": "scGrCnbk5q5h", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Integer array indexing: When you index into numpy arrays using slicing, the resulting array view will always be a subarray of the original array. In contrast, integer array indexing allows you to construct arbitrary arrays using the data from another array. Here is an example:" ] }, { "metadata": { "id": "CcvqvKKx5q5i", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "ada60889-ccaa-491e-d725-7a90aafd1eb8" }, "cell_type": "code", "source": [ "a = np.array([[1,2], [3, 4], [5, 6]])\n", "\n", "# An example of integer array indexing.\n", "# The returned array will have shape (3,) and \n", "print a[[0, 1, 2], [0, 1, 0]]\n", "\n", "# The above example of integer array indexing is equivalent to this:\n", "print np.array([a[0, 0], a[1, 1], a[2, 0]])" ], "execution_count": 54, "outputs": [ { "output_type": "stream", "text": [ "[1 4 5]\n", "[1 4 5]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "Y4HIfrq05q5l", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "de6e169f-d2b8-4ea7-82f4-937262759462" }, "cell_type": "code", "source": [ "# When using integer array indexing, you can reuse the same\n", "# element from the source array:\n", "print a[[0, 0], [1, 1]]\n", "\n", "# Equivalent to the previous integer array indexing example\n", "print np.array([a[0, 1], a[0, 1]])" ], "execution_count": 55, "outputs": [ { "output_type": "stream", "text": [ "[2 2]\n", "[2 2]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "7p8DhBFQ5q5q", "colab_type": "text" }, "cell_type": "markdown", "source": [ "One useful trick with integer array indexing is selecting or mutating one element from each row of a matrix:" ] }, { "metadata": { "id": "d8AJ849O5q5r", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "8b8a389b-98b1-4feb-8467-a4d234e43235" }, "cell_type": "code", "source": [ "# Create a new array from which we will select elements\n", "a = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])\n", "print a" ], "execution_count": 56, "outputs": [ { "output_type": "stream", "text": [ "[[ 1 2 3]\n", " [ 4 5 6]\n", " [ 7 8 9]\n", " [10 11 12]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "QnezokHy5q5s", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "456cd000-78bc-4548-cbd6-dfe92c8f9913" }, "cell_type": "code", "source": [ "# Create an array of indices\n", "b = np.array([0, 2, 0, 1])\n", "\n", "# Select one element from each row of a using the indices in b\n", "print a[np.arange(4), b] # Prints \"[ 1 6 7 11]\"" ], "execution_count": 57, "outputs": [ { "output_type": "stream", "text": [ "[ 1 6 7 11]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "_iXO2tyM5q5u", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "5984d18f-5bf7-4b90-f484-37d8cb2b9378" }, "cell_type": "code", "source": [ "# Mutate one element from each row of a using the indices in b\n", "a[np.arange(4), b] += 10\n", "print a" ], "execution_count": 58, "outputs": [ { "output_type": "stream", "text": [ "[[11 2 3]\n", " [ 4 5 16]\n", " [17 8 9]\n", " [10 21 12]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "LkKSUFId5q5x", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Boolean array indexing: Boolean array indexing lets you pick out arbitrary elements of an array. Frequently this type of indexing is used to select the elements of an array that satisfy some condition. Here is an example:" ] }, { "metadata": { "id": "Z8SEDQTu5q5x", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "outputId": "a6c9af8b-bdb4-448c-c9fb-a43f9386864f" }, "cell_type": "code", "source": [ "import numpy as np\n", "\n", "a = np.array([[1,2], [3, 4], [5, 6]])\n", "\n", "bool_idx = (a > 2) # Find the elements of a that are bigger than 2;\n", " # this returns a numpy array of Booleans of the same\n", " # shape as a, where each slot of bool_idx tells\n", " # whether that element of a is > 2.\n", "\n", "print bool_idx" ], "execution_count": 59, "outputs": [ { "output_type": "stream", "text": [ "[[False False]\n", " [ True True]\n", " [ True True]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "rRvDJXN25q5z", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "97ca548b-76ea-4e51-d46b-2ede935ce1fc" }, "cell_type": "code", "source": [ "# We use boolean array indexing to construct a rank 1 array\n", "# consisting of the elements of a corresponding to the True values\n", "# of bool_idx\n", "print a[bool_idx]\n", "\n", "# We can do all of the above in a single concise statement:\n", "print a[a > 2]" ], "execution_count": 60, "outputs": [ { "output_type": "stream", "text": [ "[3 4 5 6]\n", "[3 4 5 6]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "enaYXsPT5q51", "colab_type": "text" }, "cell_type": "markdown", "source": [ "For brevity we have left out a lot of details about numpy array indexing; if you want to know more you should read the documentation." ] }, { "metadata": { "id": "Xp-dmhK55q51", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Datatypes" ] }, { "metadata": { "id": "I1iAVr005q51", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Every numpy array is a grid of elements of the same type. Numpy provides a large set of numeric datatypes that you can use to construct arrays. Numpy tries to guess a datatype when you create an array, but functions that construct arrays usually also include an optional argument to explicitly specify the datatype. Here is an example:" ] }, { "metadata": { "id": "Jhc1qiWe5q52", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "891d2d3e-1686-469f-8a6a-25c6d5ae0181" }, "cell_type": "code", "source": [ "x = np.array([1, 2]) # Let numpy choose the datatype\n", "y = np.array([1.0, 2.0]) # Let numpy choose the datatype\n", "z = np.array([1, 2], dtype=np.int64) # Force a particular datatype\n", "\n", "print x.dtype, y.dtype, z.dtype" ], "execution_count": 61, "outputs": [ { "output_type": "stream", "text": [ "int64 float64 int64\n" ], "name": "stdout" } ] }, { "metadata": { "id": "dwsQbnfH5q53", "colab_type": "text" }, "cell_type": "markdown", "source": [ "You can read all about numpy datatypes in the [documentation](http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html)." ] }, { "metadata": { "id": "J0krzpaq5q54", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Array math" ] }, { "metadata": { "id": "MB1QONDf5q54", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Basic mathematical functions operate elementwise on arrays, and are available both as operator overloads and as functions in the numpy module:" ] }, { "metadata": { "id": "pqsjtRiM5q54", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "47534904-eae8-4251-9ab7-779afffc6bbd" }, "cell_type": "code", "source": [ "x = np.array([[1,2],[3,4]], dtype=np.float64)\n", "y = np.array([[5,6],[7,8]], dtype=np.float64)\n", "\n", "# Elementwise sum; both produce the array\n", "print x + y\n", "print np.add(x, y)" ], "execution_count": 62, "outputs": [ { "output_type": "stream", "text": [ "[[ 6. 8.]\n", " [10. 12.]]\n", "[[ 6. 8.]\n", " [10. 12.]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "8lUHQNVL5q58", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "4c93f703-da51-4c1f-9ae0-2be8ae300e60" }, "cell_type": "code", "source": [ "# Elementwise difference; both produce the array\n", "print x - y\n", "print np.subtract(x, y)" ], "execution_count": 63, "outputs": [ { "output_type": "stream", "text": [ "[[-4. -4.]\n", " [-4. -4.]]\n", "[[-4. -4.]\n", " [-4. -4.]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "IC8ctFQk5q59", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "7d9aac78-21bb-4139-b1e3-d8ff60532d86" }, "cell_type": "code", "source": [ "# Elementwise product; both produce the array\n", "print x * y\n", "print np.multiply(x, y)" ], "execution_count": 64, "outputs": [ { "output_type": "stream", "text": [ "[[ 5. 12.]\n", " [21. 32.]]\n", "[[ 5. 12.]\n", " [21. 32.]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "XXtTacc-5q5_", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "52577235-6288-44cb-a329-63665eb063a0" }, "cell_type": "code", "source": [ "# Elementwise division; both produce the array\n", "# [[ 0.2 0.33333333]\n", "# [ 0.42857143 0.5 ]]\n", "print x / y\n", "print np.divide(x, y)" ], "execution_count": 65, "outputs": [ { "output_type": "stream", "text": [ "[[0.2 0.33333333]\n", " [0.42857143 0.5 ]]\n", "[[0.2 0.33333333]\n", " [0.42857143 0.5 ]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "f8mK4UbW5q6A", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "8f5bb712-f559-45f8-b4af-841702935f2e" }, "cell_type": "code", "source": [ "# Elementwise square root; produces the array\n", "# [[ 1. 1.41421356]\n", "# [ 1.73205081 2. ]]\n", "print np.sqrt(x)" ], "execution_count": 66, "outputs": [ { "output_type": "stream", "text": [ "[[1. 1.41421356]\n", " [1.73205081 2. ]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "gUaJRH_O5q6D", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Note that unlike MATLAB, `*` is elementwise multiplication, not matrix multiplication. We instead use the dot function to compute inner products of vectors, to multiply a vector by a matrix, and to multiply matrices. dot is available both as a function in the numpy module and as an instance method of array objects:" ] }, { "metadata": { "id": "xpax7lRp5q6D", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "d2536513-d0c2-4450-fc61-b16aa51ae9e1" }, "cell_type": "code", "source": [ "x = np.array([[1,2],[3,4]])\n", "y = np.array([[5,6],[7,8]])\n", "\n", "v = np.array([9,10])\n", "w = np.array([11, 12])\n", "\n", "# Inner product of vectors; both produce 219\n", "print v.dot(w)\n", "print np.dot(v, w)" ], "execution_count": 67, "outputs": [ { "output_type": "stream", "text": [ "219\n", "219\n" ], "name": "stdout" } ] }, { "metadata": { "id": "QadKUnk95q6E", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "e26dd606-26b5-4921-8538-ea1444bb3580" }, "cell_type": "code", "source": [ "# Matrix / vector product; both produce the rank 1 array [29 67]\n", "print x.dot(v)\n", "print np.dot(x, v)" ], "execution_count": 68, "outputs": [ { "output_type": "stream", "text": [ "[29 67]\n", "[29 67]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "sIb3tp555q6G", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "8d4d1642-2936-4618-86a7-87cd8999bc1f" }, "cell_type": "code", "source": [ "# Matrix / matrix product; both produce the rank 2 array\n", "# [[19 22]\n", "# [43 50]]\n", "print x.dot(y)\n", "print np.dot(x, y)" ], "execution_count": 69, "outputs": [ { "output_type": "stream", "text": [ "[[19 22]\n", " [43 50]]\n", "[[19 22]\n", " [43 50]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "IE5yrZG45q6H", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Numpy provides many useful functions for performing computations on arrays; one of the most useful is `sum`:" ] }, { "metadata": { "id": "y5K4V28p5q6I", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "outputId": "cee25913-485b-411f-a853-5e4995704ada" }, "cell_type": "code", "source": [ "x = np.array([[1,2],[3,4]])\n", "\n", "print np.sum(x) # Compute sum of all elements; prints \"10\"\n", "print np.sum(x, axis=0) # Compute sum of each column; prints \"[4 6]\"\n", "print np.sum(x, axis=1) # Compute sum of each row; prints \"[3 7]\"" ], "execution_count": 70, "outputs": [ { "output_type": "stream", "text": [ "10\n", "[4 6]\n", "[3 7]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "TOEJPgkk5q6K", "colab_type": "text" }, "cell_type": "markdown", "source": [ "You can find the full list of mathematical functions provided by numpy in the [documentation](http://docs.scipy.org/doc/numpy/reference/routines.math.html).\n", "\n", "Apart from computing mathematical functions using arrays, we frequently need to reshape or otherwise manipulate data in arrays. The simplest example of this type of operation is transposing a matrix; to transpose a matrix, simply use the T attribute of an array object:" ] }, { "metadata": { "id": "1NhZkHCm5q6K", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "e15e29a2-d85e-4f83-b36a-3bf5ef122ba9" }, "cell_type": "code", "source": [ "print x\n", "print x.T" ], "execution_count": 71, "outputs": [ { "output_type": "stream", "text": [ "[[1 2]\n", " [3 4]]\n", "[[1 3]\n", " [2 4]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "GCCJQ-835q6M", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "e23e5ce9-f560-4f15-9b29-fb40cc3ebef9" }, "cell_type": "code", "source": [ "v = np.array([[1,2,3]])\n", "print v \n", "print v.T" ], "execution_count": 72, "outputs": [ { "output_type": "stream", "text": [ "[[1 2 3]]\n", "[[1]\n", " [2]\n", " [3]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "98-AIk6u5q6O", "colab_type": "text" }, "cell_type": "markdown", "source": [ "### Broadcasting" ] }, { "metadata": { "id": "ihjioOGn5q6O", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Broadcasting is a powerful mechanism that allows numpy to work with arrays of different shapes when performing arithmetic operations. Frequently we have a smaller array and a larger array, and we want to use the smaller array multiple times to perform some operation on the larger array.\n", "\n", "For example, suppose that we want to add a constant vector to each row of a matrix. We could do it like this:" ] }, { "metadata": { "id": "DPtd0SVC5q6O", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "5aec3d4d-7136-4b8c-ae6d-f2009ddb00de" }, "cell_type": "code", "source": [ "# We will add the vector v to each row of the matrix x,\n", "# storing the result in the matrix y\n", "x = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])\n", "v = np.array([1, 0, 1])\n", "y = np.empty_like(x) # Create an empty matrix with the same shape as x\n", "\n", "# Add the vector v to each row of the matrix x with an explicit loop\n", "for i in range(4):\n", " y[i, :] = x[i, :] + v\n", "\n", "print y" ], "execution_count": 73, "outputs": [ { "output_type": "stream", "text": [ "[[ 2 2 4]\n", " [ 5 5 7]\n", " [ 8 8 10]\n", " [11 11 13]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "V6krlZtE5q6Q", "colab_type": "text" }, "cell_type": "markdown", "source": [ "This works; however when the matrix `x` is very large, computing an explicit loop in Python could be slow. Note that adding the vector v to each row of the matrix `x` is equivalent to forming a matrix `vv` by stacking multiple copies of `v` vertically, then performing elementwise summation of `x` and `vv`. We could implement this approach like this:" ] }, { "metadata": { "id": "iACv1y1O5q6R", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "1f5d5d43-af53-4fdd-cba0-f0d900c98f97" }, "cell_type": "code", "source": [ "vv = np.tile(v, (4, 1)) # Stack 4 copies of v on top of each other\n", "print vv # Prints \"[[1 0 1]\n", " # [1 0 1]\n", " # [1 0 1]\n", " # [1 0 1]]\"" ], "execution_count": 74, "outputs": [ { "output_type": "stream", "text": [ "[[1 0 1]\n", " [1 0 1]\n", " [1 0 1]\n", " [1 0 1]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "e9VwkQ4v5q6S", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "d55b8551-a22c-4626-a867-253192c401e2" }, "cell_type": "code", "source": [ "y = x + vv # Add x and vv elementwise\n", "print y" ], "execution_count": 75, "outputs": [ { "output_type": "stream", "text": [ "[[ 2 2 4]\n", " [ 5 5 7]\n", " [ 8 8 10]\n", " [11 11 13]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "SjJw6Plx5q6U", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Numpy broadcasting allows us to perform this computation without actually creating multiple copies of v. Consider this version, using broadcasting:" ] }, { "metadata": { "id": "CKBoLNJg5q6U", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "880086d1-3125-4e2d-bc38-acd5145aa7a1" }, "cell_type": "code", "source": [ "import numpy as np\n", "\n", "# We will add the vector v to each row of the matrix x,\n", "# storing the result in the matrix y\n", "x = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])\n", "v = np.array([1, 0, 1])\n", "y = x + v # Add v to each row of x using broadcasting\n", "print y" ], "execution_count": 76, "outputs": [ { "output_type": "stream", "text": [ "[[ 2 2 4]\n", " [ 5 5 7]\n", " [ 8 8 10]\n", " [11 11 13]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "3n0cLWAw5q6V", "colab_type": "text" }, "cell_type": "markdown", "source": [ "The line `y = x + v` works even though `x` has shape `(4, 3)` and `v` has shape `(3,)` due to broadcasting; this line works as if v actually had shape `(4, 3)`, where each row was a copy of `v`, and the sum was performed elementwise.\n", "\n", "Broadcasting two arrays together follows these rules:\n", "\n", "1. If the arrays do not have the same rank, prepend the shape of the lower rank array with 1s until both shapes have the same length.\n", "2. The two arrays are said to be compatible in a dimension if they have the same size in the dimension, or if one of the arrays has size 1 in that dimension.\n", "3. The arrays can be broadcast together if they are compatible in all dimensions.\n", "4. After broadcasting, each array behaves as if it had shape equal to the elementwise maximum of shapes of the two input arrays.\n", "5. In any dimension where one array had size 1 and the other array had size greater than 1, the first array behaves as if it were copied along that dimension\n", "\n", "If this explanation does not make sense, try reading the explanation from the [documentation](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) or this [explanation](http://wiki.scipy.org/EricsBroadcastingDoc).\n", "\n", "Functions that support broadcasting are known as universal functions. You can find the list of all universal functions in the [documentation](http://docs.scipy.org/doc/numpy/reference/ufuncs.html#available-ufuncs).\n", "\n", "Here are some applications of broadcasting:" ] }, { "metadata": { "id": "8lsu4IME5q6W", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "outputId": "87eff86e-1897-4f3b-acc2-f1df3b6392fc" }, "cell_type": "code", "source": [ "# Compute outer product of vectors\n", "v = np.array([1,2,3]) # v has shape (3,)\n", "w = np.array([4,5]) # w has shape (2,)\n", "# To compute an outer product, we first reshape v to be a column\n", "# vector of shape (3, 1); we can then broadcast it against w to yield\n", "# an output of shape (3, 2), which is the outer product of v and w:\n", "\n", "print np.reshape(v, (3, 1)) * w" ], "execution_count": 77, "outputs": [ { "output_type": "stream", "text": [ "[[ 4 5]\n", " [ 8 10]\n", " [12 15]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "-orCUm6c5q6X", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "d72d71e1-977a-4d4f-cc4a-6d9b1d563f7b" }, "cell_type": "code", "source": [ "# Add a vector to each row of a matrix\n", "x = np.array([[1,2,3], [4,5,6]])\n", "# x has shape (2, 3) and v has shape (3,) so they broadcast to (2, 3),\n", "# giving the following matrix:\n", "\n", "print x + v" ], "execution_count": 78, "outputs": [ { "output_type": "stream", "text": [ "[[2 4 6]\n", " [5 7 9]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "fAuY02dP5q6b", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "6155b6fd-63b4-4271-ad69-d42ccdf12991" }, "cell_type": "code", "source": [ "# Add a vector to each column of a matrix\n", "# x has shape (2, 3) and w has shape (2,).\n", "# If we transpose x then it has shape (3, 2) and can be broadcast\n", "# against w to yield a result of shape (3, 2); transposing this result\n", "# yields the final result of shape (2, 3) which is the matrix x with\n", "# the vector w added to each column. Gives the following matrix:\n", "\n", "print (x.T + w).T" ], "execution_count": 79, "outputs": [ { "output_type": "stream", "text": [ "[[ 5 6 7]\n", " [ 9 10 11]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "hMzxU0GW5q6c", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "cfe67ca5-9562-4901-cc06-a9cfecf1dfaa" }, "cell_type": "code", "source": [ "# Another solution is to reshape w to be a row vector of shape (2, 1);\n", "# we can then broadcast it directly against x to produce the same\n", "# output.\n", "print x + np.reshape(w, (2, 1))" ], "execution_count": 80, "outputs": [ { "output_type": "stream", "text": [ "[[ 5 6 7]\n", " [ 9 10 11]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "jGCfbEhK5q6d", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "outputId": "9797fffc-417d-4b8c-e1f2-16cb6b64e201" }, "cell_type": "code", "source": [ "# Multiply a matrix by a constant:\n", "# x has shape (2, 3). Numpy treats scalars as arrays of shape ();\n", "# these can be broadcast together to shape (2, 3), producing the\n", "# following array:\n", "print x * 2" ], "execution_count": 81, "outputs": [ { "output_type": "stream", "text": [ "[[ 2 4 6]\n", " [ 8 10 12]]\n" ], "name": "stdout" } ] }, { "metadata": { "id": "4srkWKOE5q6f", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Broadcasting typically makes your code more concise and faster, so you should strive to use it where possible." ] }, { "metadata": { "id": "vdNrBYZK5q6f", "colab_type": "text" }, "cell_type": "markdown", "source": [ "This brief overview has touched on many of the important things that you need to know about numpy, but is far from complete. Check out the [numpy reference](http://docs.scipy.org/doc/numpy/reference/) to find out much more about numpy." ] }, { "metadata": { "id": "UKm2hzgz5q6f", "colab_type": "text" }, "cell_type": "markdown", "source": [ "##Matplotlib" ] }, { "metadata": { "id": "VDFgGJz45q6g", "colab_type": "text" }, "cell_type": "markdown", "source": [ "Matplotlib is a plotting library. In this section give a brief introduction to the `matplotlib.pyplot` module, which provides a plotting system similar to that of MATLAB." ] }, { "metadata": { "id": "0bTVXB7L5q6g", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "import matplotlib.pyplot as plt" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "ELWE3_9J5q6h", "colab_type": "text" }, "cell_type": "markdown", "source": [ "By running this special iPython command, we will be displaying plots inline:" ] }, { "metadata": { "id": "H0vjMgyu5q6h", "colab_type": "code", "colab": {} }, "cell_type": "code", "source": [ "%matplotlib inline" ], "execution_count": 0, "outputs": [] }, { "metadata": { "id": "EQMkKaNH5q6j", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Plotting" ] }, { "metadata": { "id": "biPNrc5O5q6j", "colab_type": "text" }, "cell_type": "markdown", "source": [ "The most important function in `matplotlib` is plot, which allows you to plot 2D data. Here is a simple example:" ] }, { "metadata": { "id": "bw_DJK-E5q6j", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 282 }, "outputId": "5d87c56c-ab63-420a-e54d-587ba9fbfb39" }, "cell_type": "code", "source": [ "# Compute the x and y coordinates for points on a sine curve\n", "x = np.arange(0, 3 * np.pi, 0.1)\n", "y_sin = np.sin(x)\n", "\n", "# Plot the points using matplotlib\n", "plt.plot(x, y_sin)" ], "execution_count": 86, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "[]" ] }, "metadata": { "tags": [] }, "execution_count": 86 }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "metadata": { "id": "7i9nqVNL5q6l", "colab_type": "text" }, "cell_type": "markdown", "source": [ "With just a little bit of extra work we can easily plot multiple lines at once, and add a title, legend, and axis labels:" ] }, { "metadata": { "id": "v96UGlPT5q6l", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 311 }, "outputId": "5b761e58-49c7-4ef4-e5cb-d6f8ffd9ceaa" }, "cell_type": "code", "source": [ "y_cos = np.cos(x)\n", "\n", "# Plot the points using matplotlib\n", "plt.plot(x, y_sin)\n", "plt.plot(x, y_cos)\n", "plt.xlabel('x axis label')\n", "plt.ylabel('y axis label')\n", "plt.title('Sine and Cosine')\n", "plt.legend(['Sine', 'Cosine'])" ], "execution_count": 87, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 87 }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "metadata": { "id": "jJCY7j3Y5q6p", "colab_type": "text" }, "cell_type": "markdown", "source": [ "###Subplots " ] }, { "metadata": { "id": "vPAoU6yZ5q6q", "colab_type": "text" }, "cell_type": "markdown", "source": [ "You can plot different things in the same figure using the subplot function. Here is an example:" ] }, { "metadata": { "id": "Lhgz6eYq5q6q", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 280 }, "outputId": "06f647dd-a022-4b3e-8886-236588b4dad5" }, "cell_type": "code", "source": [ "# Compute the x and y coordinates for points on sine and cosine curves\n", "x = np.arange(0, 3 * np.pi, 0.1)\n", "y_sin = np.sin(x)\n", "y_cos = np.cos(x)\n", "\n", "# Set up a subplot grid that has height 2 and width 1,\n", "# and set the first such subplot as active.\n", "plt.subplot(2, 1, 1)\n", "\n", "# Make the first plot\n", "plt.plot(x, y_sin)\n", "plt.title('Sine')\n", "\n", "# Set the second subplot as active, and make the second plot.\n", "plt.subplot(2, 1, 2)\n", "plt.plot(x, y_cos)\n", "plt.title('Cosine')\n", "\n", "# Show the figure.\n", "plt.show()" ], "execution_count": 88, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "metadata": { "id": "nCEH5MGI5q6s", "colab_type": "text" }, "cell_type": "markdown", "source": [ "You can read much more about the `subplot` function in the [documentation](http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.subplot)." ] }, { "metadata": { "id": "6mObYgBb55Ug", "colab_type": "text" }, "cell_type": "markdown", "source": [ "# Acknowledgements\n", "\n", "This tutorial is based on the adapted version by [Volodymyr Kuleshov](http://web.stanford.edu/~kuleshov/) and [Isaac Caswell](https://symsys.stanford.edu/viewing/symsysaffiliate/21335), which was in turn adapted from the original `CS231n` Python tutorial by Justin Johnson (http://cs231n.github.io/python-numpy-tutorial/)." ] } ] }