{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Neurons in keras"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"![Keras](https://github.com/ianmcloughlin/images/raw/master/keras.png)\n",
"\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"#### Imports\n",
"\n",
"***"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# Neural networks.\n",
"import tensorflow.keras as kr\n",
"\n",
"# Numerical arrays\n",
"import numpy as np\n",
"\n",
"# Data frames.\n",
"import pandas as pd\n",
"\n",
"# Plotting\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# Plot style.\n",
"plt.style.use(\"ggplot\")\n",
"\n",
"# Plot size.\n",
"plt.rcParams['figure.figsize'] = [14, 8]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"#### Single linear neuron\n",
"\n",
"\n",
"***"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"\n",
"***\n",
"\n",
"$$ y = x $$\n",
"\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"# Create a new neural network.\n",
"m = kr.models.Sequential()\n",
"\n",
"# Add a single neuron in a single layer, initialised with weight 1 and bias 0.\n",
"m.add(kr.layers.Dense(1, input_dim=1, activation=\"linear\", kernel_initializer='ones', bias_initializer='zeros'))\n",
"\n",
"# Compile the model.\n",
"m.compile(loss=\"mean_squared_error\", optimizer=\"sgd\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"# Create some input values.\n",
"x = np.arange(-10.0, 10.1, 1.0)\n",
"\n",
"# Run each x value through the neural network.\n",
"y = m.predict(x)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([-10., -9., -8., -7., -6., -5., -4., -3., -2., -1., 0.,\n",
" 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Have a look at x.\n",
"x"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[-10.],\n",
" [ -9.],\n",
" [ -8.],\n",
" [ -7.],\n",
" [ -6.],\n",
" [ -5.],\n",
" [ -4.],\n",
" [ -3.],\n",
" [ -2.],\n",
" [ -1.],\n",
" [ 0.],\n",
" [ 1.],\n",
" [ 2.],\n",
" [ 3.],\n",
" [ 4.],\n",
" [ 5.],\n",
" [ 6.],\n",
" [ 7.],\n",
" [ 8.],\n",
" [ 9.],\n",
" [ 10.]], dtype=float32)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Here are the corresponding outputs.\n",
"y"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0EAAAHSCAYAAAAqkMAdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAArxUlEQVR4nO3db4xddZ0/8Pe0c0pFbJ3OQOtIiYKwKwkVyWHJxT+sYWgadQ0xhEGzGnENukWNElmprmKC1QqyNcxqICui4pOLieAzZUdWSOAauPzZsugKNZqoRWs7bVEBuZ25vweu87NOS1vbM3dmzuv1aM6fO/Pmw5l23v2ec6ev2+12AwAAUBOLeh0AAABgNilBAABArShBAABArShBAABArShBAABArShBAABArShBAABArfT3OsBfa9u2bb2OkCQZGhrKjh07eh1jQTPj6plx9cy4emZcLfOtnhlXz4yrN5dmPDw8fMBjVoIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBa6T8an+RLX/pSHnrooSxfvjzXX399kuR3v/tdNm/enN/85jc5/vjj8+EPfzjHHXfcjNc+8sgjueWWWzI1NZXzzz8/F1544dGIBAAAsF9HZSXo7//+7/Oxj31sn3133HFHzjjjjNxwww0544wzcscdd8x43dTUVG6++eZ87GMfy+bNm3PvvffmF7/4xdGIBAAAsF9HpQSdfvrpM1Z5HnjggZx33nlJkvPOOy8PPPDAjNdt3bo1q1atysqVK9Pf359zzz13v+cBAABzW7vdzrXXXpt2u93rKAd1VG6H2589e/ZkYGAgSTIwMJCnnnpqxjkTExMZHByc3h4cHMwTTzxRVSQAAKAC7XY7o6Oj6XQ6KYoizWYzZVn2OtYBVVaCDkW3252xr6+vb7/njo+PZ3x8PEmyadOmDA0NVZrtUPX398+ZLAuVGVfPjKtnxtUz42qZb/XMuHpmXJ0tW7ak0+lkcnJyenvdunU9TnVglZWg5cuXZ9euXRkYGMiuXbuybNmyGecMDg5m586d09s7d+6cXj36SyMjIxkZGZne3rFjx9EP/VcYGhqaM1kWKjOunhlXz4yrZ8bVMt/qmXH1zLg6a9asSVEUSZKiKLJmzZqez3p4ePiAxyp7i+yyLHP33XcnSe6+++6cffbZM8455ZRT8uSTT2b79u3Zu3dv7rvvvjm9bAYAAMxUlmWazWY+9alPzflb4ZKjtBL0hS98IT/84Q/z29/+Nu973/ty8cUX58ILL8zmzZtz1113ZWhoKFdccUWSPz4HdNNNN2XDhg1ZvHhx3v3ud2fjxo2ZmprKG97whqxevfpoRAIAAGZRWZZZt25dz1eADkVfd38P5swD27Zt63WEJJZVZ4MZV8+Mq2fG1TPjaplv9cy4emZcvbk0457cDgcAADAXKUEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAADAPtdvtjI2Npd1u9zrKvNPf6wAAAMDhabfbGR0dTafTSVEUaTabKcuy17HmDStBAAAwz7RarXQ6nUxOTqbT6aTVavU60rxiJQgAAOaZRqORoiiSJEVRpNFo9DjR/KIEAQDAPFOWZZrNZlqtVhqNhlvhDpMSBAAA81BZlsrPX8kzQQAAQK0oQQAAQK0oQQAAQK0oQQAAQK0oQQAAQK0oQQAAQK0oQQAAQK0oQQAAQK0oQQAAQK0oQQAAQK0oQQAAQK0oQQAAQK0oQQAAQK0oQQAAQK0oQQAAcIja7XbGxsbSbrd7HYUj0N/rAAAAMB+02+2Mjo6m0+mkKIo0m82UZdnrWPwVrAQBAMAhaLVa6XQ6mZycTKfTSavV6nUk/kpWggAA4BA0Go0URZEkKYoijUajx4n4aylBAABwCMqyTLPZTKvVSqPRcCvcPKYEAQDAISrLUvlZADwTBAAA1IoSBAAA1Eqlt8Nt27Ytmzdvnt7evn17Lr744rzpTW+a3vfYY4/l2muvzQknnJAkOeecc3LRRRdVGQsAAKixSkvQ8PBwrrvuuiTJ1NRU3vve9+bv/u7vZpz3yle+MldddVWVUQAAAJLM4u1wjz76aFatWpXjjz9+tr4kAADADLP27nD33ntvXvOa1+z32OOPP54rr7wyAwMDecc73pHVq1fPViwAAKBm+rrdbrfqL7J37968973vzfXXX58Xv/jF+xx7+umns2jRoixdujQPPfRQvvrVr+aGG26Y8TnGx8czPj6eJNm0aVOee+65qmMfkv7+/uzdu7fXMRY0M66eGVfPjKtnxtUy3+qZcfXMuHpzacZLliw54LFZWQl6+OGH8/KXv3xGAUqSY489dvrjs846KzfffHOeeuqpLFu2bJ/zRkZGMjIyMr29Y8eOyvIejqGhoTmTZaEy4+qZcfXMuHpmXC3zrZ4ZV8+MqzeXZjw8PHzAY7PyTNDz3Qq3e/fu/GkxauvWrZmamsqLXvSi2YgFAADUUOUrQX/4wx+yZcuWXHbZZdP77rzzziTJ2rVr84Mf/CB33nlnFi9enCVLluRDH/pQ+vr6qo4FAADUVOUl6JhjjslXvvKVffatXbt2+uN169Zl3bp1VccAAABIMotvkQ0AADAXKEEAAECtKEEAAECtKEEAAMxZ7XY7Y2NjabfbvY7CAjIrvycIAAAOV7vdzujoaDqdToqiSLPZTFmWvY7FAmAlCACAOanVaqXT6WRycjKdTietVqvXkVggrAQBADAnNRqNFEWRJCmKIo1Go8eJWCiUIAAA5qSyLNNsNtNqtdJoNNwKx1GjBAEAMGeVZan8cNR5JggAAKgVJQgAAKgVJQgAAKgVJQgAAKgVJQgAAKgVJQgAAKgVJQgAAKgVJQgAAKgVJQgAAKgVJQgAAKgVJQgAAKgVJQgAAKgVJQgAAKgVJQgAAKgVJQgAgH202+2MjY2l3W73OgpUor/XAQAAmDva7XZGR0fT6XRSFEWazWbKsux1LDiqrAQBADCt1Wql0+lkcnIynU4nrVar15HgqLMSBADAtEajkaIokiRFUaTRaPQ4ERx9ShAAANPKskyz2Uyr1Uqj0XArHAuSEgQAwD7KslR+WNA8EwQAANSKEgQAANSKEgQAANSKEgQAANSKEgQAANSKEgQAANSKEgQAANSKEgQAANSKEgQAANSKEgQAANSKEgQAANSKEgQAANRKf9Vf4PLLL8/SpUuzaNGiLF68OJs2bdrneLfbzS233JKHH344xxxzTNavX5+TTz656lgAAEBNVV6CkuTqq6/OsmXL9nvs4Ycfzq9+9avccMMNeeKJJ/LlL385n/nMZ2YjFgAAUEOzUoKeT7vdzutf//r09fXltNNOy+9///vs2rUrAwMDvY4GADAr2u12tmzZkjVr1qQsy17HgQVvVkrQxo0bkyQXXHBBRkZG9jk2MTGRoaGh6e3BwcFMTEwoQQBALbTb7YyOjqbT6aQoijSbTUUIKlZ5CbrmmmuyYsWK7NmzJ5/+9KczPDyc008/ffp4t9ud8Zq+vr4Z+8bHxzM+Pp4k2bRp0z7FqZf6+/vnTJaFyoyrZ8bVM+PqmXG1zLc6W7ZsSafTyeTk5PT2unXrepxqYXIdV2++zLjyErRixYokyfLly3P22Wdn69at+5SgwcHB7NixY3p7586d+10FGhkZ2WcV6c9f00tDQ0NzJstCZcbVM+PqmXH1zLha5ludNWvWpCiKJElRFFmzZo1ZV8R1XL25NOPh4eEDHqu0BD377LPpdrt5wQtekGeffTZbtmzJRRddtM85ZVnmO9/5Tl7zmtfkiSeeyLHHHutWOACgNsqyTLPZ9EwQzKJKS9CePXvy+c9/PkkyOTmZ1772tTnzzDNz5513JknWrl2bV7/61XnooYfywQ9+MEuWLMn69eurjAQAMOeUZZl169bNmX9Bh4Wu0hK0cuXKXHfddTP2r127dvrjvr6+vOc976kyBgAAwLRFvQ4AAAAwm5QgAACgVpQgAACgVpQgAACgVpQgAACgVpQgAACgVpQgAACgVpQgAACgVpQgAACgVpQgAACgVpQgAACgVpQgAACgVpQgAKCW2u12xsbG0m63ex0FmGX9vQ4AADDb2u12RkdH0+l0UhRFms1myrLsdSxgllgJAgBqp9VqpdPpZHJyMp1OJ61Wq9eRgFlkJQgAqJ1Go5GiKJIkRVGk0Wj0OBEwm5QgAKB2yrJMs9lMq9VKo9FwKxzUjBIEANRSWZbKD9SUZ4IAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAAIBaUYIAgFnRbrczNjaWdrvd6yhAzfX3OgAAsPC12+2Mjo6m0+mkKIo0m82UZdnrWEBNWQkCACrXarXS6XQyOTmZTqeTVqvV60hAjVkJAgAq12g0UhRFkqQoijQajR4nAupMCQIAKleWZZrNZlqtVhqNhlvhgJ5SggCAWVGWpfIDzAmeCQIAAGpFCQIAAGql0tvhduzYkS9+8YvZvXt3+vr6MjIykje+8Y37nPPYY4/l2muvzQknnJAkOeecc3LRRRdVGQsAAKixSkvQ4sWL8453vCMnn3xynnnmmVx11VVZs2ZNTjzxxH3Oe+UrX5mrrrqqyigAAABJKr4dbmBgICeffHKS5AUveEFe+tKXZmJiosovCQAA8Lxm7d3htm/fnp/+9Kd5xSteMePY448/niuvvDIDAwN5xzvekdWrV89WLAAAoGb6ut1ut+ov8uyzz+bqq6/OW9/61pxzzjn7HHv66aezaNGiLF26NA899FC++tWv5oYbbpjxOcbHxzM+Pp4k2bRpU5577rmqYx+S/v7+7N27t9cxFjQzrp4ZV8+Mq2fG1TLf6plx9cy4enNpxkuWLDngscpL0N69e/O5z30ur3rVq/LmN7/5oOdffvnl+exnP5tly5Y973nbtm07WhGPyNDQUHbs2NHrGAuaGVfPjKtnxtUz42qZb/XMuHpmXL25NOPh4eEDHqv0maBut5sbb7wxL33pSw9YgHbv3p0/9bCtW7dmamoqL3rRi6qMBQAA1FilzwT9+Mc/zj333JOTTjopV155ZZLkbW9723Q7XLt2bX7wgx/kzjvvzOLFi7NkyZJ86EMfSl9fX5WxAACAGqu0BP3t3/5tbrvttuc9Z926dVm3bl2VMQAAAKZVejscAADAXKMEAQAAtaIEAQAAtaIEAcAC1m63MzY2lna73esoAHNGpW+MAAD0TrvdzujoaDqdToqiSLPZTFmWvY4F0HNWggBggWq1Wul0OpmcnEyn00mr1ep1JIA5wUoQACxQjUYjRVEkSYqiSKPR6HEigLlBCQKABaosyzSbzbRarTQaDbfCAfwfJQgAFrCyLJUfgL/gmSAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAOIra7XbGxsbSbrd7HQWAA+jvdQAAWCja7XZGR0fT6XRSFEWazWbKsux1LAD+gpUgADhKWq1WOp1OJicn0+l00mq1eh0JgP2wEgQAR0mj0UhRFEmSoijSaDR6nAiA/VGCAOAoKcsyzWYzrVYrjUbDrXAAc5QSBABHUVmWyg/AHOeZIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFb6q/4CjzzySG655ZZMTU3l/PPPz4UXXrjP8W63m1tuuSUPP/xwjjnmmKxfvz4nn3xy1bEAAICaqnQlaGpqKjfffHM+9rGPZfPmzbn33nvzi1/8Yp9zHn744fzqV7/KDTfckMsuuyxf/vKXq4wEwALUbrdz7bXXpt1u9zoKAPNApStBW7duzapVq7Jy5cokybnnnpsHHnggJ5544vQ57XY7r3/969PX15fTTjstv//977Nr164MDAxUGQ2ABaLdbmd0dDSdTidFUaTZbKYsy17HAmAOq7QETUxMZHBwcHp7cHAwTzzxxIxzhoaG9jlnYmJiRgkaHx/P+Ph4kmTTpk37vKaX+vv750yWhcqMq2fG1TPj6mzZsiWdTieTk5PT2+vWretxqoXHNVw9M66eGVdvvsy40hLU7XZn7Ovr6zvsc5JkZGQkIyMj09s7duw4CgmP3NDQ0JzJslCZcfXMuHpmXJ01a9akKIokSVEUWbNmjVlXwDVcPTOunhlXby7NeHh4+IDHKi1Bg4OD2blz5/T2zp07Z6zwDA4O7jOo/Z0DAAdSlmWazWa2bNmSNWvWuBUOgIOq9I0RTjnllDz55JPZvn179u7dm/vuu2/GX05lWeaee+5Jt9vN448/nmOPPVYJAuCwlGWZf/mXf1GAADgkla4ELV68OO9+97uzcePGTE1N5Q1veENWr16dO++8M0mydu3avPrVr85DDz2UD37wg1myZEnWr19fZSQAAKDmKv89QWeddVbOOuusffatXbt2+uO+vr685z3vqToGAABAkopvhwMAAJhrlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAAAKBWlCAADlu73c7Y2Fja7XavowDAYevvdQAA5pd2u53R0dF0Op0URZFms5myLHsdCwAOmZUgAA5Lq9VKp9PJ5ORkOp1OWq1WryMBwGGxEgTAYWk0GimKIklSFEUajUaPEwHA4VGCADgsZVmm2Wym1Wql0Wi4FQ6AeUcJAuCwlWWp/AAwb3kmCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCGCeaLfbGRsbS7vd7nUUAJjX+nsdAICDa7fbGR0dTafTSVEUaTabKcuy17EAYF6yEgQwD7RarXQ6nUxOTqbT6aTVavU6EgDMW1aCAOaBRqORoiiSJEVRpNFo9DgRAMxfShDAPFCWZZrNZlqtVhqNhlvhAOAIKEEA80RZlsoPABwFngkCAABqRQkCAABqpbLb4W699dY8+OCD6e/vz8qVK7N+/fq88IUvnHHe5ZdfnqVLl2bRokVZvHhxNm3aVFUkAACA6krQmjVr8va3vz2LFy/ON77xjdx+++35x3/8x/2ee/XVV2fZsmVVRQEAAJhW2e1wr3rVq7J48eIkyWmnnZaJiYmqvhQAAMAhm5V3h7vrrrty7rnnHvD4xo0bkyQXXHBBRkZGZiMSAABQU33dbrf71774mmuuye7du2fsv+SSS3L22WcnSb71rW/lJz/5ST7ykY+kr69vxrkTExNZsWJF9uzZk09/+tO59NJLc/rpp884b3x8POPj40mSTZs25bnnnvtrYx9V/f392bt3b69jLGhmXD0zrp4ZV8+Mq2W+1TPj6plx9ebSjJcsWXLAY0dUgg7m+9//fv7zP/8zn/zkJ3PMMccc9PzbbrstS5cuzVve8paDnrtt27ajEfGIDQ0NZceOHb2OsaCZcfXMuHpmXD0zrpb5Vs+Mq2fG1ZtLMx4eHj7gscqeCXrkkUfy7W9/Ox/96EcPWICeffbZPPPMM9Mfb9myJSeddFJVkQAAAKp7Jujmm2/O3r17c8011yRJTj311Fx22WWZmJjITTfdlA0bNmTPnj35/Oc/nySZnJzMa1/72px55plVRQIAAKiuBI2Nje13/4oVK7Jhw4YkycqVK3PddddVFQEAAGCGym6HAwAAmIuUIAAAoFaUIAAAoFaUIIADaLfbGRsbS7vd7nUUAOAoquyNEQDms3a7ndHR0XQ6nRRFkWazmbIsex0LADgKrAQB7Eer1Uqn08nk5GQ6nU5arVavIwEAR4mVIID9aDQaKYoiSVIURRqNRo8TAQBHixIEsB9lWabZbKbVaqXRaLgVDgAWECUI4ADKslR+AGAB8kwQAABQK0oQAABQK0oQAABQK0oQAABQK0oQAABQK0oQAABQK0oQAABQK0oQAABQK0oQAABQK0oQAABQK0oQAABQK0oQAABQK0oQAABQK0oQMKe02+2MjY2l3W73OgoAsED19zoAwJ+02+2Mjo6m0+mkKIo0m82UZdnrWADAAmMlCJgzWq1WOp1OJicn0+l00mq1eh0JAFiArAQBc0aj0UhRFEmSoijSaDR6nAgAWIiUIGDOKMsyzWYzrVYrjUbDrXAAQCWUIGBOKctS+QEAKuWZIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFaUIAAAoFb6q/rEt912W773ve9l2bJlSZK3ve1tOeuss2ac98gjj+SWW27J1NRUzj///Fx44YVVRQIAAKiuBCXJm970przlLW854PGpqancfPPN+dd//dcMDg5mw4YNKcsyJ554YpWxAACAGqu0BB3M1q1bs2rVqqxcuTJJcu655+aBBx5QgmAWtdvtbNmyJWvWrElZlr2OAwBQuUpL0He/+93cc889Ofnkk/POd74zxx133D7HJyYmMjg4OL09ODiYJ554ospIwJ9pt9sZHR1Np9NJURRpNpuKEACw4B1RCbrmmmuye/fuGfsvueSSrF27NhdddFGSpNls5utf/3rWr1+/z3ndbnfGa/v6+vb7tcbHxzM+Pp4k2bRpU4aGho4k+lHT398/Z7IsVGZcnS1btqTT6WRycnJ6e926dT1OtTC5jqtnxtUy3+qZcfXMuHrzZcZHVII+8YlPHNJ5559/fj73uc/N2D84OJidO3dOb+/cuTMDAwP7/RwjIyMZGRmZ3t6xY8dhpq3G0NDQnMmyUJlxddasWZOiKJIkRVFkzZo1Zl0R13H1zLha5ls9M66eGVdvLs14eHj4gMcqux1u165d04Xm/vvvz+rVq2ecc8opp+TJJ5/M9u3bs2LFitx333354Ac/WFUk4C+UZZlms+mZIACgViorQd/4xjfys5/9LH19fTn++ONz2WWXJfnjc0A33XRTNmzYkMWLF+fd7353Nm7cmKmpqbzhDW/Yb1kCqlOWZdatWzdn/tUGAKBqlZWgD3zgA/vdv2LFimzYsGF6+6yzztrv7w8CAACowqJeBwAAAJhNShAAAFArShAAAFArShAAAFArShAAAFArShAAAFArShAAAFArShAAAFArShAAAFArShAAAFArShAAAFArShAAAFArShAAAFArShDMsna7nbGxsbTb7V5HAQCopf5eB4A6abfbGR0dTafTSVEUaTabKcuy17EAAGrFShDMolarlU6nk8nJyXQ6nbRarV5HAgCoHStBMIsajUaKokiSFEWRRqPR40QAAPWjBMEsKssyzWYzrVYrjUbDrXAAAD2gBMEsK8tS+QEA6CHPBAEAALWiBAEAALWiBAEAALWiBAEAALWiBAEAALWiBAEAALWiBAEAALWiBAEAALWiBAEAALWiBAEAALWiBAEAALWiBAEAALWiBAEAALWiBAEAALWiBFEL7XY7Y2NjabfbvY4CAECP9fc6AFSt3W5ndHQ0nU4nRVGk2WymLMtexwIAoEesBLHgtVqtdDqdTE5OptPppNVq9ToSAAA9ZCWIBa/RaKQoiiRJURRpNBo9TgQAQC8pQSx4ZVmm2Wym1Wql0Wi4FQ4AoOaUIGqhLEvlBwCAJJ4JAgAAakYJAgAAaqWy2+E2b96cbdu2JUmefvrpHHvssbnuuutmnHf55Zdn6dKlWbRoURYvXpxNmzZVFQkAAKC6EvThD394+uOvf/3rOfbYYw947tVXX51ly5ZVFQUAAGBa5bfDdbvdtFqtvOY1r6n6SwEAABxU5e8O96Mf/SjLly/PS17ykgOes3HjxiTJBRdckJGRkaojAQAANdbX7Xa7f+2Lr7nmmuzevXvG/ksuuSRnn312kuQ//uM/smrVqvzDP/zDfj/HxMREVqxYkT179uTTn/50Lr300px++ukzzhsfH8/4+HiSZNOmTXnuuef+2thHVX9/f/bu3dvrGAuaGVfPjKtnxtUz42qZb/XMuHpmXL25NOMlS5Yc8NgRlaCDmZyczPve975s2rQpg4ODBz3/tttuy9KlS/OWt7zloOf+6U0Xem1oaCg7duzodYwFzYyrZ8bVM+PqmXG1zLd6Zlw9M67eXJrx8PDwAY9V+kzQo48+muHh4QMWoGeffTbPPPPM9MdbtmzJSSedVGUkAACg5ip9Jujee++d8YYIExMTuemmm7Jhw4bs2bMnn//855P8cdXota99bc4888wqIwEAADVXaQm6/PLLZ+xbsWJFNmzYkCRZuXLlfn93EAAAQFUqf4tsAACAuUQJAgAAakUJohLtdjtjY2Npt9u9jgIAAPuo/JelUj/tdjujo6PpdDopiiLNZjNlWfY6FgAAJLESRAVarVY6nU4mJyfT6XTSarV6HQkAAKZZCeKoazQaKYoiSVIURRqNRo8TAQDA/6cEcdSVZZlms5lWq5VGo+FWOAAA5hQliEqUZan8AAAwJ3kmCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlCAAAqBUlaAFpt9sZGxtLu93udRQAAJiz+nsdgKOj3W5ndHQ0nU4nRVGk2WymLMtexwIAgDnHStAC0Wq10ul0Mjk5mU6nk1ar1etIAAAwJ1kJWiAajUaKokiSFEWRRqPR40QAADA3KUELRFmWaTababVaaTQaboUDAIADUIIWkLIslR8AADgIzwQBAAC1ogQBAAC1ogQBAAC1ogQBAAC1ogQBAAC1ogQBAAC1ogQBAAC1ogQBAAC1ogQBAAC1ogQBAAC1ogQBAAC1ogQBAAC10n8kL261WvnmN7+ZX/7yl/nMZz6TU045ZfrY7bffnrvuuiuLFi3KpZdemjPPPHPG63/3u99l8+bN+c1vfpPjjz8+H/7wh3PccccdSSQAAIDndUQrQatXr85HPvKRvPKVr9xn/y9+8Yvcd999+bd/+7d8/OMfz80335ypqakZr7/jjjtyxhln5IYbbsgZZ5yRO+6440jiAAAAHNQRlaATTzwxw8PDM/Y/8MADOffcc1MURU444YSsWrUqW7du3e955513XpLkvPPOywMPPHAkcWZdu93Otddem3a73esoAADAITqi2+EOZGJiIqeeeur09ooVKzIxMTHjvD179mRgYCBJMjAwkKeeeqqKOJVot9sZHR1Np9NJURRpNpspy7LXsQAAgIM4aAm65pprsnv37hn7L7nkkpx99tn7fU232z3iYH9pfHw84+PjSZJNmzZlaGjoqH+Nw7Fly5Z0Op1MTk5Ob69bt66nmRaq/v7+nv//XujMuHpmXD0zrpb5Vs+Mq2fG1ZsvMz5oCfrEJz5x2J90cHAwO3funN6emJjIihUrZpy3fPny7Nq1KwMDA9m1a1eWLVt2wM85MjKSkZGR6e0dO3Ycdq6jac2aNSmKIklSFEXWrFnT80wL1dDQkNlWzIyrZ8bVM+NqmW/1zLh6Zly9uTTj/T228yeVvEV2WZa577770ul0sn379jz55JN5xStesd/z7r777iTJ3XfffcCVpbmoLMs0m8186lOfciscAADMI0f0TND999+fr3zlK3nqqaeyadOmvOxlL8vHP/7xrF69Oo1GI1dccUUWLVqUf/qnf8qiRX/sWzfeeGMuuOCCnHLKKbnwwguzefPm3HXXXRkaGsoVV1xxVP6jZktZllm3bt2cabsAAMDB9XWreIBnFmzbtq3XEZLMrSW/hcqMq2fG1TPj6plxtcy3emZcPTOu3lya8azfDgcAADBXKUEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAAECtKEEAAECt9HW73W6vQwAAAMwWK0FH6Kqrrup1hAXPjKtnxtUz4+qZcbXMt3pmXD0zrt58mbESBAAA1IoSBAAA1IoSdIRGRkZ6HWHBM+PqmXH1zLh6Zlwt862eGVfPjKs3X2bsjREAAIBasRIEAADUSn+vA8wHrVYr3/zmN/PLX/4yn/nMZ3LKKadMH7v99ttz1113ZdGiRbn00ktz5plnznj97373u2zevDm/+c1vcvzxx+fDH/5wjjvuuFn8L5hfNm/enG3btiVJnn766Rx77LG57rrrZpx3+eWXZ+nSpVm0aFEWL16cTZs2zXbUeeu2227L9773vSxbtixJ8ra3vS1nnXXWjPMeeeSR3HLLLZmamsr555+fCy+8cJaTzl+33nprHnzwwfT392flypVZv359XvjCF844z3V8eA52TXa73dxyyy15+OGHc8wxx2T9+vU5+eSTexN2HtqxY0e++MUvZvfu3enr68vIyEje+MY37nPOY489lmuvvTYnnHBCkuScc87JRRdd1Iu489bBvu9dx0dm27Zt2bx58/T29u3bc/HFF+dNb3rT9D7X8eH70pe+lIceeijLly/P9ddfn+TQf8adkz9PdDmon//8591f/vKX3auvvrq7devWffZ/5CMf6T733HPdX//61933v//93cnJyRmvv/XWW7u33357t9vtdm+//fburbfeOlvR572vfe1r3W9+85v7PbZ+/frunj17ZjnRwtBsNrvf/va3n/ecycnJ7vvf//7ur371q26n0+l+5CMf6f785z+fpYTz3yOPPNLdu3dvt9v9458BB/q+dx0fukO5Jh988MHuxo0bu1NTU90f//jH3Q0bNvQo7fw0MTHR/clPftLtdrvdp59+uvvBD35wxoz/53/+p/vZz362F/EWjIN937uOj57Jycnue97znu727dv32e86PnyPPfZY9yc/+Un3iiuumN53KD/jztWfJ9wOdwhOPPHEDA8Pz9j/wAMP5Nxzz01RFDnhhBOyatWqbN26db/nnXfeeUmS8847Lw888EDlmReCbrebVquV17zmNb2OUktbt27NqlWrsnLlyvT39+fcc8917R6GV73qVVm8eHGS5LTTTsvExESPE81/h3JNttvtvP71r09fX19OO+20/P73v8+uXbt6lHj+GRgYmF5xeMELXpCXvvSlrt0ecB0fPY8++mhWrVqV448/vtdR5r3TTz99xirPofyMO1d/nnA73BGYmJjIqaeeOr29YsWK/f5lsWfPngwMDCT5418wTz311KxlnM9+9KMfZfny5XnJS15ywHM2btyYJLngggvmzbuRzBXf/e53c8899+Tkk0/OO9/5zhl/sE1MTGRwcHB6e3BwME888cRsx1wQ7rrrrpx77rkHPO46PjSHck1OTExkaGhon3MmJiam/wzm0G3fvj0//elP84pXvGLGsccffzxXXnllBgYG8o53vCOrV6/uQcL57fm+713HR8+99957wH9MdR0fuUP5GXeu/jyhBP2fa665Jrt3756x/5JLLsnZZ5+939d0vbHeX+1Q5v18f3D96XOsWLEie/bsyac//ekMDw/n9NNPryryvPN8M167du30vc/NZjNf//rXs379+n3O29/13dfXV0nW+epQruNvfetbWbx4cV73utcd8HO4jg/NoVyTrtuj49lnn83111+fd73rXTn22GP3Ofbyl788X/rSl7J06dI89NBDue6663LDDTf0KOn8dLDve9fx0bF37948+OCDefvb3z7jmOt49szV61kJ+j+f+MQnDvs1g4OD2blz5/T2xMREVqxYMeO85cuXZ9euXRkYGMiuXbumH0avs4PNe3JyMvfff//zPiT+p1kvX748Z599drZu3eqHxz9zqNf0+eefn8997nMz9v/l9b1z507/CvkXDjbj73//+3nwwQfzyU9+8oB/4LuOD92hXJODg4PZsWPH857D89u7d2+uv/76vO51r8s555wz4/ifl6KzzjorN998c5566il/tx2Gg33fu46Pjocffjgvf/nL8+IXv3jGMdfx0XEoP+PO1Z8nPBN0BMqyzH333ZdOp5Pt27fnySef3O9tA2VZ5u67706S3H333QdcWeL/e/TRRzM8PLzP8umfe/bZZ/PMM89Mf7xly5acdNJJsxlxXvvze8vvv//+/d4CcMopp+TJJ5/M9u3bs3fv3tx3330py3I2Y85rjzzySL797W/nox/9aI455pj9nuM6PjyHck2WZZl77rkn3W43jz/+eI499tg58ZftfNHtdnPjjTfmpS99ad785jfv95zdu3dP/8vu1q1bMzU1lRe96EWzGXNeO5Tve9fx0fF8d5S4jo+OQ/kZd67+POGXpR6C+++/P1/5ylfy1FNP5YUvfGFe9rKX5eMf/3iSP97q8l//9V9ZtGhR3vWud+XVr351kuTGG2/MBRdckFNOOSW//e1vs3nz5uzYsSNDQ0O54oorvEX2QXzxi1/MqaeemrVr107vm5iYyE033ZQNGzbk17/+dT7/+c8n+eOq0Wtf+9q89a1v7VXceWdsbCw/+9nP0tfXl+OPPz6XXXZZBgYG9plxkjz00EP52te+lqmpqbzhDW8w48PwgQ98IHv37p3+Xj/11FNz2WWXuY6P0P6uyTvvvDNJsnbt2nS73dx888357//+7yxZsiTr16/f59ca8Pz+93//N5/85Cdz0kknTa9evu1tb5telVi7dm2+853v5M4778zixYuzZMmSvPOd78zf/M3f9DL2vHKg73vX8dH1hz/8If/8z/+cf//3f59e9fnzGbuOD98XvvCF/PCHP8xvf/vbLF++PBdffHHOPvvs/f6MOx9+nlCCAACAWnE7HAAAUCtKEAAAUCtKEAAAUCtKEAAAUCtKEAAAUCtKEAAAUCtKEAAAUCtKEAAAUCv/D66rlYTgZ6oNAAAAAElFTkSuQmCC\n",
"text/plain": [
"