{ "cells": [ { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# CIFAR 10 mintapélda MLP-vel" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.) Inicializáló rész" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A feladat megoldását most is a szükséges köynvtárak beimportálásaával, valamint új TensorFlow session létrehozásával kezdjük." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Most már használjuk a GPU-t, de korlátozzuk a TF által egy sessionhöz allokálható memória méretét (ez nem szükséges, ha egy kártyát csak egy folyamat használ, ellenkezőleg viszont elengedhetetlen)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using TensorFlow backend.\n" ] } ], "source": [ "import tensorflow as tf\n", "from keras import backend as K\n", "config = tf.ConfigProto()\n", "config.gpu_options.per_process_gpu_memory_fraction=0.095\n", "session = tf.Session(config=config) # Letrehozunk egy TF session-t a megfelelo mem. korlattal\n", "K.set_session(session) # atadjuk azt a Kerasnak" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "from keras.models import Model\n", "from keras.layers import Input, Dense, Flatten\n", "from keras.optimizers import SGD\n", "from keras.callbacks import ModelCheckpoint, EarlyStopping\n", "from keras.utils import to_categorical\n", "from matplotlib import pyplot as plt\n", "from random import sample as RS\n", "from keras.metrics import top_k_categorical_accuracy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Definiáljuk a mintákat betöltő függvényt, a címkéket megint one-hot coding-ra alakítsuk át:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from keras.datasets import cifar10\n", "\n", "def mintak_cifar10():\n", " (x_tan,y_tan),(x_tst,y_tst)=cifar10.load_data()\n", " x_tan=x_tan.astype('float32')/255.0\n", " x_tst=x_tst.astype('float32')/255.0\n", " classes=['airplane', 'auto', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n", " idx=RS(set(range(y_tan.size)),5)\n", " print('Mintakepek es a cimkeik: '+str([x[0] for x in y_tan[idx]]))\n", " print('Cimkehez tartozo osztalyok: '+str([classes[x[0]] for x in y_tan[idx]]))\n", " \n", " (f, sf)=plt.subplots(1, 5)\n", " f.set_size_inches(16, 6)\n", " \n", " for i in range(5):\n", " img = x_tan[idx[i]]\n", " sf[i].imshow(img)\n", " plt.show()\n", " \n", " y_tan=to_categorical(y_tan).astype('float32')\n", " y_tst=to_categorical(y_tst).astype('float32')\n", " return(x_tan,y_tan,x_tst,y_tst,classes)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hívjuk meg a függvényt, importáljuk be az adathalmazt" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mintakepek es a cimkeik: [2, 1, 5, 9, 7]\n", "Cimkehez tartozo osztalyok: ['bird', 'auto', 'dog', 'truck', 'horse']\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6IAAAC8CAYAAABizBPxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsvXmQndlZ5vme77tb7quUSim11O6q\nsmunKC94AzNgbOxumhigo4OJIMbN9DABM/1HO3oiZron5g96ohumI+iAMGOm3BMM7h4wW2MMtjEU\neC2Vq1SbXFUq7Xumcs+8ebfvzB9KCJ3zPFJ+ykzdm3l5fhEK6Xt1vvOd5T3Ld+99n+O89yaEEEII\nIYQQQrSLpNMFEEIIIYQQQgjx9wu9iAohhBBCCCGEaCt6ERVCCCGEEEII0Vb0IiqEEEIIIYQQoq3o\nRVQIIYQQQgghRFvRi6gQQgghhBBCiLaiF1EhhBBCCCGEEG1FL6JCCCGEEEIIIdrKll5EnXM/4px7\nwzl3wjn36e0qlBA7Bfm46Hbk46KbkX+Lbkc+LnYzznu/uRudS83sTTP7iJmdN7Pnzeynvfev3+ye\n8fFxf/jw4U09b7NkWQa2uM7OuQ3T3MyWF/aM7STOfyt1ylNWdl+S4OcaedssT7q8eb388ssz3vs9\nuRLfgs34eJIkPimE7dBqtSDdYH9/dB+2+eLiMthof9Gyh9fFEvZN/0Av2HoqPZgZG0PkM6xyKbzX\npczfGmBL0xLYEoc2szQqFhvbaEtSLGuWYZ80m/XgmvWbN9L+HvNvZZiuRcpbSgsbpmmQcly9crUj\nPu6c88RVMV10nRAvZW3JRjgd9nd2OhU3QGfdvH0Sp8uT5rqpY3P4+Pi4P3LkyFYffVuwuazVbIZp\nyDzQZHPUFtZ557bzR3Kb3lsyY650efZBbJ/C0qVpmivdZnnhhRc65uMjY2P+wKGDgY00C9SX+WnC\n+oF0fUb8IYv8kvlzq8nW6iama6GN9n/s4yRNoVAEW7GINnYvW9fIjTnS7P5l7vixfHvxwkYJbsHT\nZnbCe3/SzMw593kz+4SZ3dT5Dx8+bN/85jcDW57JhMEmVrZxrNfrYIudmE1MefPKSzyp5Z0M8y4q\n5XJ5U3mxOhUK6BZxedlEwAZqng8CbpYu7oO87T81NXUmV8KNuW0fTwqJDewZCGzLC0uQ7pn3PBFc\n91fKkObLf/FXYKs3sJ2K5KWnVAj7f+IQvmC+70NPgO2R+x8CW6u+ArashS+xR448HlxXBtcgTbVx\nBWxDAwfA1lc5BLbUhoPrlZUqpKnVV8HWP1QB2+rKPNimp88H18uri5CGvRQWMuy7uRX01YUVLNvB\nkX1hmiVMc3V5Dmz/5//x7zvi44kz6yuEcxmbrdNo/ukhmzrWlvgxhVmdzA34ULKOkLwom1zt834w\nltKyoS2Ld2+b/9zzJvhbXN2mjRjZsg1TE3vRIZnVmq2OzeFHjhyxo0ePbtPjEbbWra7iuF+YnQ3T\nLOE6MhulMePrZKOB63W5jPNiqcQ+ANwcdO8SOYQjn2olZP9RKOV7MYhtRXJfqYzzdbx/MjMbGhrK\n9czN4pzrmI8fOHTQvvBXfx7YymVs92IpnLdra7jmVhL0mZTsSWoZ+uBSoxZczxIfn7+GPj47PQO2\nxTlcJ4sFXHfKPeFeKC3iOBgZw3enfftwn+JSbLOWZdE1wj6YZR8BOfKegC/+7MsJsmZ2gCfG8+3F\nt/Lx1wEzO3fD9fl1W4Bz7lPOuaPOuaMzM+g8QuxgbtvH2SZDiB3Mhj5+o39v4UchQnSC257Dp6en\n21Y4IbaB2/bxuWvX2lY4ITZiKy+iuX5k473/jPf+Ke/9U+Pj41t4nBBt57Z9nH3TLcQOZkMfv9G/\n73CEgRDbzW3P4Xv2bPnXkkK0k9v28ZGxsTYUS4h8bGXXfN7MbvyR+ZSZXdxacYTYUcjHRbcjHxfd\njPxbdDvycbGr2UqM6PNmdp9z7i4zu2BmP2VmP3OrG5xzNACcpdsIGjRNvo1iz4vjG1leLAaSpWMx\nA1TkJMdv2lhZ2TPzxl3G5I0bZeniuFFWx7ztz/JndarVwviBzcYTb4Hb9nEzZ0kSxamQwPdmM6yv\nI0OxWUUfTDImCIVtsNYM+/XCBYxB+spXjoGtlAyAbWrqINhWVvuwbJfDvu5ZGoQ0tSaW9VyTxBY3\nMT7Tsjj2ifhuilGGrkTiqFoLYKv0hD7d20viM1pYrqFe9PG+BONOeuYxZnagEApSFYuYptCHfrCN\n3P48Dh/AbyxCkZGYlWKemELDeFNaJpqEzRfkmXmFlHIJqqGNiWUxMQ9ox22f28L8eDxoPgEpWjTW\nd1EMYOwXN8t/G9nEHI40mNZEFHe5tIhzw/IyCs4tkTi46hqO+0a8/hEhtrxxymxtzmPL+wufPBoP\nZgZDkpW/2cQ5vEXq3mhgunifUmzg2rIWtev1Z+Icy/KfnJwE22b3XtvIJvbiZoUk0i1hCaO4zp4U\n6zFAbCnp+mJPP9jOz4b6E9955UVIw34qz9pzlYy1seFRvDdaixwZ27MknrVARBWHRvGb5Xg7luVc\nc1j7s/GXxXUnY8M6ECO6FR/f9Iuo977pnPsFM/szuy5n+Vve+9c2XRIhdhjycdHtyMdFNyP/Ft2O\nfFzsdrbyjah5779oZl/cprIIseOQj4tuRz4uuhn5t+h25ONiNyNlFSGEEEIIIYQQbUUvokIIIYQQ\nQggh2sqWfpq7GeLg2zxiOfRg5G080I7llVdwaLPCQXnrlFegZ7OBwnFwf9688h58nbef8rQta+s7\nLAJw2xRLqU1OhSI9l8+iEMVaNRRC8L0obmOGtoxIe7QcEYSKxlljDdtu5ioG5L914jLY6hkeu/TW\n23h49MWLJ4PrZoMJTBChiBbWKbEetEUiUM0mtqsjH60lKR5WnqVY9yeeOhJc/+OffDekmRzEA73L\nhnWqFbFPxsfxWIhyLZxnCi305+UM69kpnKEEEB6wjYJGLaJCVGafgxIVH3b4d8tiMSSEzzykrGyO\nYrZYhIKoUDCxH/bMAhEw8j6y5RSXYzXl6WKxIiYclK9OjgikedJ3sSUl4huO5E902tpGs9m02auh\nQMrsLAqera6GAnD1GoqeNBpoc2ySIhSjtdlnmxNBvP5MIihDfJDtB/I8k4mqbHaPRlzLHBE9ZM+M\ny19Iyf4mZ1nrRMRmO/ednSRJzHp74332xvsr1nY1Iur04je/DbYH7rsfbHOL4T7i9OvHMc3CPNjK\nPbg3cgn6yED/ENiaa2G/9g/iXqNWx7E2P4/l6BvE/JNiNG7ZUkLV6ja3l2UCcGxOzctmfXwrRxfq\nG1EhhBBCCCGEEG1FL6JCCCGEEEIIIdqKXkSFEEIIIYQQQrSVtseIboa8v1lmMYTsUOI4Xd54UBZn\nQQ9tzlG2NGfMAztouUYOZI7jGfLGU7KYkDzxq3njVOmBvKRsLB4jTpc3r05SLDqbPBDGLyzNYV/X\n62HcX7nUC2mGhkfAVsuw7xOHMQ6VtC/MP8GDvUvk1OlmFeMpj75wDmxnr4DJmllY76LDOvkWiTFp\nroItcThunQvL22xhW7DY5cRjnZarWI7nj10Mru8/fBLSfOyZg2Dr8WQMkbjdWoJjOY5PzFroz1kr\nXzx2u0iiYV5gMZBxPCXJp0riWEokfq5MYpfqcQwqyb/F4s5pwE6+GMtm1DelMvpVWsBx1iCxg33s\n3mguozGcOeNGuW3jNCwGnbWZJ/NuxuJG/cZ1YvGmnaReq9vZ02cCG1vn4/WOxUqXS9jPtF9JDHUW\nxYT6nOtfXt0ENhTiNTbv+rqduhUsVI7uLXLEptO4tZzlonXnAX+58ttJNOprdv7cq4GtUhqAdIMD\no8F1WsY1vVzB/cf3Tp0G2+d/9wtg6+sL7z13Fu8bn5gAW6mAa2JlsA9sBw7fDbZ6M9pXFnCMugTX\n9IEBjAdlfd+K9uxs3LI4cTb3Mk2NeC4qkz1PGi/SdpO5l7guezeJk7HY98WlJcwsJ/pGVAghhBBC\nCCFEW9GLqBBCCCGEEEKItqIXUSGEEEIIIYQQbUUvokIIIYQQQggh2krbxYrioPO8QgubSWOWTwCI\nBefSgN2cYkV58qtWq5Dm6tWrYLt48SLYzpw5A7ZY7CePuIKZWbGI4hoHD6Igy0MPPRRcj4ygkA5r\n660cdA2HKZPy7zSxIu8zW6uHfTs4jMNsz94wwHzqMAb8v+MhbOPeARQL2DMwBba9lcng2s1icHmZ\n9MO5AgbHf+959DdfGAZbz3BYp1aVBMc3cWxYhv1aq+P4yPzGgl+FIvHBIjlUPkG/mV8OBaS++fWj\nkObdkygM4OeIgFQvaZ8j42Crt8KyzS8tQJrLi8tg6yRxb/HDuUNSIkhTI0IJdTKeSyT/WCCJnw+e\nT9iH6EPZ0NAg2PZOjAXXff04FqemDoDtjTfeBlt/HwprFKPyLs6jLywurYBtdRnFvgpFHBtxPZng\nEBO0YDNsi4kVsfx8OB6bGQp27TCtInPOLIlE/PII48Tzk5nRY+WpSJTDe+O1M4+40M3yZ/ey/or3\nDXlFiFheWzngHp5JbAmxxl7P0tDtBxOnJOm6RKvIqtVFO/7yXwS2xOFecDAS6Bkc2g9pRvfsBdvk\noVGwfftba2ArNyLRuQbODwvzc2Abm0DhoLGRCtiqa9fAVquFvtrfj2U9MHkEbIUKztkuJUKFcI1O\nk3jyjkDGy/IirgELizPB9d5xbP9SAdvCZ7gPunTlPNgadVxPBirhvmd2dhbSnD+PeeVF34gKIYQQ\nQgghhGgrehEVQgghhBBCCNFW9CIqhBBCCCGEEKKtbClG1Dl32syW7Pp54k3v/VPbUSghdgrycdHt\nyMdFtyMfF92M/FvsZrZDrOhD3vuZjZNtHhZ8zwLhV1cxyHZtDQOkmUBPnvwZLK9r1zBA+s033wyu\nX3rpJUhz5coVsC0tLYFtZgabOxYLYG1WKqHQSqPRAFsfEdK49957g+uPfOQjkOZd73oX2JigDGuz\ncrkMtliAidWJCSfcAXL7eKuV2eJc6Ifj4wOQbs++sNwDoxiQ//jjKJhS9ERcahSD7R+dfEdw/doX\nvwNp/Ar2/YUC5l+t4jQxchiFd8rDodDA/JV5SJMZ5l9sEWEV1NoyF6mapEQooNkkAhwe5wWXYp8U\n01Aw6tLpaUjz6jdOgm3gPIo5jR3aB7YHp96PZUtCH284LGszwXa8A+TycWdm8SySUKGg8JIlSYmQ\nSJOkZCO8ECmJMFGSrEmcKMF0h6ZQgOPIkUmw3Xf/4bBcZIkYHkYRjb3j/WBLCzgX9w2EPrlM5v6r\nV3BtmZ9dBNuVS7iWXDwf2li7ZhlrMxyfPiNrMhOxia6ZAIwjfXKHyDePO2dJGgsFMcGR+D4iHESy\nz7uOxfo/OTX+cgtAtohKV7yP2E7BobywtkhI21IBqcjG0jSJqBTrKC6+xeanHaNWlH8v7jNrNUIR\nvBqZL9eq4XwzM3MB0pw8i/PDtWnMa3QU58bVhVCMh4msnT+HIjjlflz7C2UUDXzrDAoOxtXs70VR\nyPrqE2A7cvejYCuVydyehv5Qq6FI0HIV30uY6F+1imJFzWo433/v1dfIfShwmBCBxqvT2J9MrGi4\nNxTmY8JKbgvCofpprhBCCCGEEEKItrLVF1FvZn/unHvBOfcplsA59ynn3FHn3NHpafyGQYgdzm35\neLOxs46TESIHt/TxG/2bfBEmxG4gt4/PzeGvU4TY4dzWPmVpAb/1EqJTbPWnue/13l90zu01sy87\n577nvX/uxgTe+8+Y2WfMzJ566iltY8Ru47Z8vHegKB8Xu41b+viN/l1MchwaKsTOI7ePP/zww/Jx\nsdu4rX3KXffuk4+LHcOWvhH13l9c//uqmf2+mT29HYUSYqcgHxfdjnxcdDvycdHNyL/FbmbT34g6\n5/rMLPHeL63/+4fN7H+73XxY8HccJN5sNiEN48wZFA158cUXwXb4cCg6cfDgQUjT09MDthZRUIlF\niMzM/vqv/xpsr7/+enDNRIhYkH6lUgEbE2VaXg6Dk5n4T17hASbwFP+smtX7J37iJ8D27ne/G2xM\nNIkR+wFrf1bW7WIzPl4qFOzInjD4fXx8DNJNjAwH15UG9v29IwfA1lNCv0x7UdRoLXKbB9/zGKR5\n6WvPg+3lV14HW6WAIgO1RfyZfbUW9sValQhmWS/YhnpRwGi4D/03nipqayi2tEbEt9IyjiHfQF8q\n18MHFEj5Tx6/BLYf+r77wLb3MRQrqo/gPNYbaTNMjaKI0iAReNoubtfHnTkrRuIcjih9ZJEtI3oe\n7LtVNkOh1AMKxTAxk7vvwvGz//AE2I4cQbGi8bFhsJmF/dfbh34FCjNm1ncAxcSKFRzH/QNhOjbf\nHdi/B0tFRGcWFlbA9sJ3Xgmuj72MY32NjAtj6y8TiSP96SNjfG1mtM22k9v3cVwrPVHkctHv1Jkw\nTl6xIiaMg/uBzYvisLWfCbvF5WB7krwCgUzEJ+7/reS/WVj2XCxq4/YxMxC2ajeb3otHxfZUSSy6\nTnG/5R3OGafOoMDQmbdReKcv2gsyIUvvsX0vEzG2w3ej6ND+fbieJi5cdNfWcIV5+81vge3qBRQq\nrJRR2DMe3/T9hc0nqNNEBYxcJDpUI+JCLsFnFkv4ujcxzoTBsE4FiwpHXYVUICdb+WnuhJn9/voA\nLpjZ/+u9/9IW8hNipyEfF92OfFx0O/Jx0c3Iv8WuZtMvot77k2aGesZCdAnycdHtyMdFtyMfF92M\n/FvsdnR8ixBCCCGEEEKItqIXUSGEEEIIIYQQbWWrx7fcNnGwd61WgzT1ehg8zIJ9WfA9E9B59dVX\nwXbixIng+umnUWDs/vvvz5XXn/7pn4JtZmYGbHEd8orsNIj4ChOxiNuDCQKxQHsmfMTSpWkYiMyE\noX7/938fbBMTKA7y6KP4K5LFxUWwMVGHmGq1umGadtLfV7J3v/tQYNs3fi+km+gP05RqKM7Tn6Cw\nT4mIaC0VMOC8UA7TjY9gIPkrz78Etn0NHI/7yIk0KwuzYFvzoU+3DMtaIwIWrQJOQwMDKJDkIkGa\nKtFVqRNVnGKTCCBk+MxilP/YKArD9FQwr8G7sH9HHpwE22oPCpQNRdk5bH4ru3ziXu3AmbfEwvnB\nkz5NIhsbyexTUJZXg8wDtcj2zPe/C9J89GMfBltvP7bl6uoy2Bbm8SzJPWOh6FixiD7U24NCD2kB\nx15PPxHRiITImBhXfy+OqeUVFCYa6MdyDHw4XOeYAM83vonifqzvHOkTNl2DWBHTodlxB0k4c9F6\n6hwRVIrqwqvB2ilf28HjmBgSzYv2WK50jXroc610473Gzdis6FC817jZM9k+Jd5nMX9j0lisLdi+\ns0VsxVI4iefZt3Qa77xlaSRMxVMGV5kne3EiqFMusz7E3MciUbh6neWF+6D5edx/XL2KAkbvmrwH\nbAMDobgj6646eS/JWihq5ByuHbHfU9Eu0mbMxqfLMF1PD+4dHdk7ejJemHgc8/FGJGzGxAG3IjKm\nb0SFEEIIIYQQQrQVvYgKIYQQQgghhGgrehEVQgghhBBCCNFW2h4jmuf38/FvjVnMAIuBPHXqFNhe\nfx0P7R4dDQ8O37t3L6QZHBwE21e/+lWwXbt2DWysjnFcJ4t5YPGyLJaUxY2Wy/g78TywZ7L844OG\n2cHDFy5cANu3voUHAz/55JNgGxnBw4jjcrDYWBYn0kky17DVJIxVmF7Cvtk7MBVcDw9gTGHaJL/z\ndyRGkRwoXamFv/M//pd/DWmuHT8OtmcGMHbNZRWwWRlj1RpZOCZLBYzzXEhGwWbDWPdKGZ/ZakUH\nyKfYFimZXkoZiYUihy+34jFUwnZNU4ypPvM6xqsMHsR6Fg5i7EU9CcdflpJ4X4dt3SmcmcUhyWwE\nxk1OD5HP+cy+Ctb/mXeHceYf//hHIM2ePTinVFcxnjJrYQ0Kozg/90Xxmaz8AyT2s5fE8LB4oFYU\ns5mSeOSeCvrV4DCuVSurGDufRh33Yx/FGNqhQRyzf/G1r4OtXieHtJM65enlLYQW3Rkc7kFI6Hk+\nByZNwtZ+dnB9vLRlbKR5EijPDpvPEb9rZtbMwvwcy5+QkO80EtKxED+X5Ov8jO0b2ZzSioxN3Msw\nh2PlqGNIoGV+Z+03tkRUZUfWnrjZsybpZ/Z9lkcbi2VsNsP1b61G1lyy5+nr7Qfb1MEDeG8F1/m6\nD+dGtl/PClgOVyJzdsZiZuO6s9hP1mbERIKcW9F61WxhGUjzm3MkbpfFehYxXRq9KdJ3nC2MDX0j\nKoQQQgghhBCirehFVAghhBBCCCFEW9GLqBBCCCGEEEKItqIXUSGEEEIIIYQQbaXtYkWx8FCBHGYf\nB/Oz4P5qFcUYBojQygc/+EGwnTt3LriemZmBNC+//DLYmDARo7cXRWZiUaAVcgg5Ew5iYjxMKKhS\nIYIyEeyAZnYIbZ6DollejFdeeQVsp0+fBtuRI0dylW0zadrJ0sqaPfftNwJbsXER0rUeD4VUPvjw\nXZgZCSRnAg09K9gX544eC67f/POXIE3fEvppWu7DBxgKA3giHNUTxa/3JZjXWBEFZHyTHMgci06Y\nmc/i9iCiE8R3UyIo0CAzXzNSC2i0MCA/LeDYWzk1D7ZT33gLbA//2AQ+sxQqYlRJvS1FYbZOkkbt\n7ohwQWxJiBBDix30TRQbxsaHwfb0048E1xVygDoTJqrXUPxtsB/92zIcG3/x1eeC6+nLuB589Iff\nA7ZnfuB9WA4ioHXyzVA87PU3UXxvnAjrPfiuh8HG5sW1lfDw9Ym9KHI0MPgBsL3yymtgu3wJ10wm\nVZRHviKPgGGn8WQPEn+M70ifsrGRF5fECiGkNRNU1CnCPGnWquG9TCcoFtFiQpEpWZeKjuzj2PoV\nwVbvrID3+ZQJPOUQQ2JzU4ZrV4vZSPGznOJNOx3vvdVbkRgkWTtdPNcT1auUCP8lGfqDr6NwVCsS\nE1pcQjFAT7ykUsT9bmK4TiZkXTAfjpn7Dr4TkqxWcZ04P30SbI74eCysRec3h23tieikI3ujsd7x\n4LpeX4A0Cw1c+4yMITZrp2xPHTVjLJhkZpZsYa7TN6JCCCGEEEIIIdqKXkSFEEIIIYQQQrQVvYgK\nIYQQQgghhGgrG76IOud+yzl31Tn36g22Uefcl51zb63/jYFfQuwS5OOi25GPi25HPi66Gfm36Fby\niBU9a2a/Zmb/8Qbbp83sq977X3bOfXr9+l9slJH33hqNMGB5bQ2DguPgXhaUvrqKQc3vfe97wTY2\nNga2z3/+88H1m2++CWmuXLmyYbnMeDD/8vIy2OJ6s7ziNGa87kzgKU7HhI9YmzHRISZWFOfPytAi\nAjZMCIq198GDB8EWw9qMlWMTPGvb5OP1mtmpU2E7pE0MJh9KQgGQB/Y9BmkOTmFAfk8B+2b6xdfB\n9vIffi24rsxjIH/RUDyn2kIxnrSAImAF1hcu9LnCGpa/tYriGs5Ngy1JsV9jPQniplQcpZ6iNSsS\nMYWV8HO5rE7Ew5poKxLhgZm1s2g7jPcOPj0aXK8YERSrb4uYy7O2DT7uzCyJBA48Ew2J/CMjn3my\nT0ELRJhiehpFgV5+KRw/qeHceeTIYbDt24c+74jQSnVxFmylJJzrywWc+9fmcazPXsY5sNbAcbB4\nOXzm899AgbF9+0fBds89KHRWTMk4jgR3akTwr1ZbAtvjTz4Ktj/5L18FG1ur4j5mejtGBFA2ybO2\nTfN4DBXFi0wJE0+73QcF94Z3t5q4vl4j+5SVRexD73G0NWpMcDDsC7aX4fsDIgpDiAWMqOAQGVcJ\nEVpJE0xXiOZ1tj/o7e8B28TkPrD1EBGzAhGKZAJrd4hnbbv24mbWyiG8FNeMCeo0Pc69TASn0US/\nWVwMRXVWyB61kGI/jAyjgN30lTmw9Y3ifDkyEAoA3T31IKS5dA3n7OMnUcC0WEL/LZbCvRYT7WJ+\nHwuFmZktzDBxvTC/vl4UhaxmuNdoEHUyJr7F/CLe4my3SOiG34h6758zs3hV/oSZfW79358zs09u\na6mEaCPycdHtyMdFtyMfF92M/Ft0K5uNEZ3w3l8yM1v/GzXl13HOfco5d9Q5d5R9OybEDmVTPt5q\n7vyjCIRYJ5eP3+jfcm+xy7htH5+bxW/DhdihbGqfsryIv4YQolPccbEi7/1nvPdPee+fGh8f3/gG\nIXYZN/p4WthZ55oKsVVu9G+5t+hGbvTxEfJzPiF2Ozf6eP8g/jxZiE6x2RfRK865STOz9b+vbl+R\nhNgRyMdFtyMfF92OfFx0M/JvsevZrNLLH5nZz5rZL6///Yd5bsqyDILfWTA8E6XJw8gICoYxMaQY\nJjhUr6OYBCvX3BwGSDNRoDi4t0iC3lk58gr0MKGgGCZgVCWCFYw4/yTJF4DN2pGJFT3xxBNgK0VB\n36wvmdjSNrEpH0/T1IaHwk/U15axjU9fPB9cf+PFb0OaD/ZhkP448ZtTR1/AgpwL16OBBMWgGkQ4\npLKKxjTBNi4SbYrURaIFzCU9jo0sZQJG+ACXhf6VkGnCE2EAK5G8UiKs4sN6JmvYbykRFEuIyMDS\nEorWnPk65nf4nu8LrmtjRPyAtNk2sSkfj0vI9GfAxsQZ8mRuZq0GOtJLL30vuL7/fhQm6u1FsayB\n/l6w1WvYp8trK2D7wA+Eoj1rdRwX5Z5BsL1y6hzYFmcxTGVq/57g+od/+BlIY0SEYnkB16BKH5aj\nUgrb4/xlFNRaXsW2KBWxHROyLjFRjizuZar5c0e/Zt+Uj7P1LSZe7xIiBhKLdt2MPAKBvoX+dvH0\nabBNT+O7SKmXCM6x7V9U3FdffRWSzC/M431EXM6IP8TtytqsXERhPSZM1CRzcStStBsYwnEwPrEH\nbJ/8iX8ItrvvvhtsbB7DJG392cim5/BYXCuPzzNBnWIB75tdwPltqUqEdwbiPQ7xhwoRnOrDeXz+\n2iLYTr6Mwl333TcVPtGjv60QUcXLV1A0b6Af58bBwdDnCgUicEWExyplzOv0iRNoWw7H99NP3wtp\nrELmHbJhyog4InvnSFrxuMU+3+x7m1m+41t+x8y+aWYPOOfOO+d+zq47/Uecc2+Z2UfWr4XYlcjH\nRbcjHxfdjnxcdDPyb9GtbPi9fVQLAAAgAElEQVSNqPf+p2/yXz+4zWURoiPIx0W3Ix8X3Y58XHQz\n8m/RrdxxsSIhhBBCCCGEEOJG9CIqhBBCCCGEEKKtbFasaFO0Wi1bWQlFIJiwTxy4z8R5mLBPHsEe\nM7OpqTBY+fjx45BmcREDn+fnMUifnY3KRHV6ezG4OoYFADOxHybQE7cHa7NKBYOhmVgUa8c4P1ZH\ndh8L3D9z5gzYLl++DLa4vLHvmHGRh06SJM56+8N+bNQxiHt+IRSz+fp3UXBoZBgFWA6l6Eczb50H\n22grbJdyC4P2vSNt57G/UkOBFMeUgtJwLPsWGbdkiBZIwDxVNYk+N/OefY6G80K5VgZblmDdWxaJ\nCbWIWBERDCkTuZ60jvfOncJ0SzPhOGr0Ybv2FnaOj3sz7C0iUhAPe0+kidjcwMRLEiJcVY6Ed+bn\n0b+PH38LbEsLOK+nGc5lGRHWcKVQdGJgGI8jm1/Bvvrs//MHYPNkrvyp//rHgusH77sP0kyffQNs\np753DGz77noQbCPj4RGD3/veSUjzyndRHOPqJVzjhsso8MHm4mbkGy0ybWRU5CLfWn4ncM7Besp8\nNbYxYSI2xVLhLnJvPGaYKFqF7BmGiJDLZSIw1FMhAkZRvQ/dfQTSDJO9UamCzyyVcd4tFML8e3rw\nGJG+vj6wDQyg6FCclxnujcbIUTz1Oq5n586icNcD73gAbCnZV91hsa07g/comEME/NI09K+MCPs0\n6igaNTyKvnUqRQG/LJrvK8SP+oggEBtYqcOyzU3j/vaVpVAs85F3YN9fnkHBr4XLROyzhPuBqxbu\nU9m86MmecHL/PnzmNWzbyyfD/d7BSRwbk4eHwJYWyfsF8V1H9hs+2hfmmQ9vB30jKoQQQgghhBCi\nrehFVAghhBBCCCFEW9GLqBBCCCGEEEKItqIXUSGEEEIIIYQQbaWtYkXOORDkKRaLNN2NMOEdFhjL\nRHwYjz/+eHB9/jyKvfzJn/wJ2Kanp8HGRAaY6FC1GoqXsABmJiZUJgH/TOApFjVi7cPyGhkZARur\nZyxExOrI6tRoYLD1tWvXNszfDNuWCSSx9u8krSyz5eUwqH1lgfjlcii0sFrDdqqv4n0tjwHzfgFF\nAEqtMEi/QD5zKjvMn4n4mEN/cxmZOnyYX5LhM4ukn9MM656R8noXPtMTYSI2pbkm5t9KsBy1qJ7e\no78VPBm3RIjHk7GwuESEiLJQnGHRo8jRGhFN6iQZVIOJFISJmI4BEyYqlXA9sAT7+eChUNihXETR\nkzMncF5fnEYRikMHUXSoSkTc4rmmOIsCMKs19NtDk5i/pVjPSlTNs6dOQ5rFyxfBNnMVhd4W6jgO\njv/p3wTXzz//KqSpLWC9e0ifFAukn8hcXIxsTJgoI2PqGpkP24UzFP/LJcSBA8OYnlrChD7IMuay\nVpSGCX7hA0ol3EcUCkR8K8V7W9G4HZ/YC2mWqzgfrZK12Uj+xVIoKJMSPyqSfcrAEIqvDA6hSEsp\n2kP19+K80CJ7krdPvg22Cxcvge3w4SNgy7MH2YqQy53AOQdj2BP/bTVCH2w2iUAUWevuuvcufGaC\ne83vfuvl4LqUYX/19xMBo14mYIRzXrOCwle15XAN+NIf/RmkWVzFeXANt0G21MD9WLwXZ3OlI/ub\nJMNnjg5OgG1lMBx/r7+MYqtriyh8tO++A/jMPiKcRoQok3I0H5K1eyt7cX0jKoQQQgghhBCirehF\nVAghhBBCCCFEW9GLqBBCCCGEEEKIttLWGNEkSeAA4zzxnywN+z0yi0dksYdxGT7+8Y9DmlIJD8f9\nwhe+ALbZ2VmwsfjJWi38LTmrEysrg8V6Li2FB7rHzzPjMahDJPaiv79/w/xZ+7PDqVm6lZUVsLH2\n3rcv/J17by/GCrA+7yTNhreZC2G8TGsB/eGJBx4Lrh+YuhvSHCQHHI9X62BbMIzZSbOwvxISS1T0\nJM6axSolGEta8NjXSRQQlXjsm9TQL1OHfs9iRFtRfi0Wd+MxhsXTaY7EW0Xxt6z8RXKfkXZskHSt\nFjmQPgvHcovEvc6v4AHynSRudhJVbFkUNxrHnpmZNUl7sNjaqf1jYJvcH8ZdrtZxXLz6Bh5UzuJB\nHYmJqS1iHLtl4TjoHcSYp0Uytz1wCOfThGgjzF85GVyvRnOumVl9hRwK7zCvv3ruRbC98spb4X1k\nrJAzz22xxWK4N44Lvv4MkixmZ4XPmZnbVEyfd9ieLCaWBUx7EnMVu2VCGsqn+MxCBefmcgnHx2A/\nxljGOg89RdxrpKQcc3MYL11r4LrRaGYbpmFN1lvGtb9UwrK5NJzr4+eZ8bja3r4BsJ09jfPH5L79\nYCtGMdQ7LR6U4VxipVLoJwsLuM7E/sB0WNIU925lNNnoKO4/fbzOk31xbx/Gefb24gNY7PXKCpZ3\ncG8YK1kiMZy9Dssaxzebma2t4X6G7W9jmsQvrUFiXA3L3zMQriczl/EdZGX2BNpWcQ6YOowx4P1D\nWPfKWGir9OMcw3cC+dA3okIIIYQQQggh2opeRIUQQgghhBBCtBW9iAohhBBCCCGEaCsbvog6537L\nOXfVOffqDbZ/5Zy74Jx7af3PR+9sMYW4c8jHRbcjHxfdjPxbdDvycdGt5BEretbMfs3M/mNk/1Xv\n/b+93QfGB0Wz4OfYFgdM34w1cqhynnuZUM7HPvYxsN19NwrKvP7662C7ehUPTX/jjTeC67ffxgOU\nGUx0iNUpFkiK29mMt09eHn300eD6iSeegDRf//rXwTY9PQ02JmDEyhaLNzERKGbbBM/aNvl4X6li\nT979cGC7d+pBSPfuJ94dXO8hwidJGYPvayfeAlvBYxB62WIbnsbsUwzSL5PPphw5cD6htrC8CQm0\nz0h3NYjIR5IQkYksFE0pUCEQJnLEfATbthyVNyXiKyXyyHqKxlVyQn2TCDi4SJxoTxmFebLaxuIH\nOXjWtsnHfdR22Mtoa5B2Y0N37x4UT3vogYNgW5idCa6PvYjjYnEBfX5sAtu3UUAxoRPTV8A2UA4r\n8eBBHLNZgr7cIoJqtSoKETVL4XJcIOIPNUMhiTfOo4DR22+cBltv1OAZFewiAlJEjCsj/t0i97ro\nXipstflz0G/kWdsu//aZNYj4VUwsOOiZkJkj8xiZe9xNJL82guniFIj4CtsznCR7kH0TE8F1meyN\nRkdGwTY9hz7IClfP0a59RGxpZRXHcm8Nx21vJOTC9gcryzj2mMAQK+uF8+fBtn8qFL85evQopHn4\n4YfBtgmetW3y8Xq9YWfPhXXJyECM26/VwtneGfrb7BwKKNaq2Bc+euYaafOZayjGU6uSxdRj2VpN\nFEIsj4VrwNwiCm0xYcwSUWDq6UXBrL7+cI5eXlmGNLMzOF5mplEgr9SD+Vdr4V6ZidW5BF/tFq+h\n3y9W8N79o0fANhDNKRUittdsbTy2b8aGu3jv/XNmhp4gRJcgHxfdjnxcdDPyb9HtyMdFt7KVr5N+\nwTn38vrPBfCj4XWcc59yzh11zh29do1I4guxc7ltH6/X2fdDQuxYNvTxG/2bnLgixE7mtufw2bm5\ndpZPiK1y2z6+srz5X8cJsd1s9kX0183sHjN7zMwumdm/u1lC7/1nvPdPee+fGhvDn0UJsUPZlI+X\nSm09mleIrZDLx2/073TnH5EnxN+yqTl8dOSme3khdhqb8vH456NCdJJNvYh6769471ve+8zMftPM\nnt7eYgnRWeTjotuRj4tuRv4tuh35uOgGNvX1jXNu0nt/af3yH5jZq7dKfysaRMiBBY7HMMGbvPnH\n9+bN6/777wfbfffdBzYmMHT27Nng+itf+QqkeeGFF8CWV+ynpycM8GdiRask4L9axaByFuB/8GAo\nGPLzP//zkIYF5P/5n/852GIRIjOzIgl+jkWkmLDVVgSYbsVmfXx0aNT+8Y/+ZGA7cugeSFdMwrr5\nBraJL6PAxFoL+6uS4b19kdBFy9An6x79ISHCAz5jAgVoA69xOPbqCQbfJxXy6WwL77VIyCAlYh5M\nWMmMiCExwZBIOCElIi2Yk1lG2iclIiW9RfxFSCESUupP8duYdPAu8tStsxkf92YW/zyX/Rg99siM\ntDcTd0mK2MLXrmJIx6WL4bxYn0chhl4yBx7Ytwds997/DrDNLGHZnvvLvwiuW8VBSHPkEAorDe/F\ndFenUdCuloX+XSbiGK0SCkKc+ZsTYCuREIEsierEtHWIz7eIMFFG0rEx1YxMbGW/U2fIbXYOz7LM\n1pbDuZGtuYViuH1KEjJfkLXUk/0N2/PEJp4G849FlMzMGg30h1hA0Qz3EWwvUyFCLvF9ZmZVcm8r\nWsOrZP0uEMGvIqlTkYwPS8P2YPuD2RncU126dAlsAwMDYFut4pq5FInRfOlLX4I0k5OTWNZtYLM+\n7s1bM9qHpaTdm81wHc6IIFCjTvo5w3b3nn0LG66TS0sozHdtBn8qn46jqF2jhn0zMjIMtnjPOz+P\nYkVsDFWIiBabF2JbIcW82B77GhFlisW3zHCNZMJEzQz3T2VS/rU1bLPFWRwfI/2hr2Rk71gk621e\nNnwRdc79jpl90MzGnXPnzex/NbMPOuces+tL2Wkz+6ebLoEQHUY+Lrod+bjoZuTfotuRj4tuZcMX\nUe/9TxPzZ+9AWYToCPJx0e3Ix0U3I/8W3Y58XHQrd+pXMUIIIYQQQgghBEUvokIIIYQQQggh2kpb\nz5rIsgwEc1gweRzIG4vWmHExngoRPWFBwXHQPws4ZoI69ToKRTCRHVaOJ554Irh+6KGHIM3Xv/51\nsP3Gb/wG2GZmZsD2sY99bMNy/dVf/RXYzp8/D7aVFQwYP3bsWHD9rW99C9J8+MMfBhur56lTp8DG\nyhsLJeQVOeokpULJpsaOBLZCi3zeEwncMMGbAhEEKbXQVnA4jMuxKBARtSiBpIwZmxJYqiyHvpdn\ngiYplqOvH0UhsjrOC2uxWFFGxIpIOaiNlL8QSRHlEU0zMyt5IspEWi0jolKlJPRf51HMqWg75zgJ\nJlbExFda0ZzK/KVI1HKunLoMttnTaLN4zia+VhlCcYa+/j6wFUj5P/gUCq/tHQ7zW1hEgaSzZy+A\nrVo7Cbb9E3vBdtfBA8F1bx8KVZSXF8E2OYb+cWEWBT48CGgxASmEfVrdIilbTAAsus7IkGqRvuso\n3syiuSUW2TEza0VCiGwO90xQjTyyQNaxQnFjsT7WY7196ONMNKnVwrKVy+H8c+LttyHN1EEU5Dpy\n1xGwzc2jrxZLYT0XFxYgTa2Gc//y8jLYqmQ/dv7SxeCa7R2ZoB3Lf46cJ8uOICxH+73hYRTIidu1\n03jvYT/FxIpqtbCNV1Zxziuk2Ma9vVhfn6KtFS0mDSLaWKvh+nptBoV9ikX08QNkLCwvhXXgImBk\nTSPjj4mALUX5Mz9KHI53Nr6ZwOi+qf3BdcFhvy1dwTVzgYy1Q/sPgG2wF9fN+ko0Jmu4T6wTgby8\n6BtRIYQQQgghhBBtRS+iQgghhBBCCCHail5EhRBCCCGEEEK0Fb2ICiGEEEIIIYRoK20VKyoUCjYy\nEgor9PRgYGyhEBaLCRMxEaKMiJcwgaH4XnZfo4EB0kwsh5WDiR/FzxgaGoI0P/qjPwq2c+fOge0b\n3/gG2N7//vcH1w8++CCk+cAHPgC2EydOgO25554D22uvvRZcf+1rX4M0Bw5g4PPevSjK8dhjj4GN\nBWXHQd+sXVk/dZJavWEnz1wJbPv3o3jB0HBvcJ0SEZ+ECAylxV6wrVVQ1GShFAaOD5Hg+H5DW2Yo\nPJARAZ3MoyCXj8R+MiKkkRKVoLX5KtgKpK97klDUqEjySogSSEY+b0upsEoksEPybyXERhRenKHg\nRpPMtj4SWEgcEWYjAlUdw6NOUJMIOzSjtisS0ZYe0gcl0u8JSRdP2X1jOMbe98M43+2dxPmoSARN\nBojg3Pc/HQrOvf3iq5BmhghH1Ik4ykMPPQC2wYFwbNdYvWfnwbYwj2IYBRAmIjDhIJaO+Te5N2Gi\nf9E1E61i9+00mA8iROCECAKxNlir4/qX+dDWaNYwDemcUhnn9ccefQRso6OjYOuLxV3IhDoygvfd\ndc/dYGPCdD09oY+fPYP7mxMnUCCJilOWsJ4ufiZx1CTFiXh0FEWI2L4wLr+Z2UjUjh//8R+HNGwf\n1Em891aPxCALCbZLLLyZEedNY2FEM0tTbPfFJdyL12vhPqXVxBloZRnHBltMR0dR9JDNXbFA6gAR\nS2TCQfUalj9+VzHDdwIm/tnbg89kglbLVaz7WjUsf0LGRqGEedUbOH80G6ROJL+l1bA9Ll+7AmkW\nFlDwKy/6RlQIIYQQQgghRFvRi6gQQgghhBBCiLaiF1EhhBBCCCGEEG2lrTGiDBbDGcf95T1wlv2u\nm/3OP07HYg9ZXuyZLHaBPTOOL2Vpensx/uBDH/oQ2NghzXHsLYtdvffee8H2wAMYq/Too4+C7Q/+\n4A+Ca1Z+1o7s9/Hsd/UsRjT+LT/L/9q1a2DrJPOLS/bHXw7jZ5968n5I98zT7wqu+yrksGf2OdEQ\nxudUSB+uls4G12tXsZ0mWui7vSnGbKfpINiSBG2WhP7LYqFqTfSHVoZzAAtxc1G8UjnBGKFiAW2e\nBbSRw+ebPizHmsNyLbWw/IskFsoO7AdT/wNTYGv1hOX1JOC01Nw5nxd656wZxS63SCBO3AsVFqtF\n7vPEaRoZxg2N7J8Irj/wEYwHfeAhnO+GBjE2JyXlWKpijO9SFK9z+dRZSPPKXz8PtvIQPnOgiHP4\nO54M4/gKJAauSO7LyEHiKWnvfJGYNOA5F2x9jAOKWVY7KAL674hjL1ksJsxRLP6VxAyzCjtmzOI9\nA44DTybKa7MzYBsd2Qe273v6abDV62Ec2eEjRyBNs4W6DJ7N4aRsSSv01SNTqCsxSeIpE7JnYPuI\neG9UKOIYMhIjyvYWLL6XuXgaxfkXCtjnbD/ZUbyZz8JyN5tk7YnmoJGhCUjTInvBLMN4xP5+jLuv\nVMIyLHtsp1oV8x+o4P7DkwD36gqWo1IK9zgJiYOu11C3olQmWjXkDareCO+trWH5yxXSZsS3Gg00\nzkZ73l6yd6zEsd5mNjKMbba8hu09vYBjea0R+saFy7g+ugTXprzsnB2OEEIIIYQQQoi/F+hFVAgh\nhBBCCCFEW9GLqBBCCCGEEEKItrLhi6hz7qBz7mvOuePOudecc7+4bh91zn3ZOffW+t8jG+UlxE5E\nPi66Hfm46Gbk36LbkY+LbiWPWFHTzP659/67zrkBM3vBOfdlM/tvzOyr3vtfds592sw+bWb/4pYZ\nNZs2Ozsb2JaWliBdLHrAgtKZSBATS2CiPdVqGEwciyOZobiQ2c0C2jEdyy+2FUkQPRP2YenGxvDw\n5TgdE4FiZWVtxg5f/pmf+Zng+tixY5BmeBgPlWdlrdVIADk5QH5hYSG4Xl7GA3NZXptg23y8Xm/Y\nqXOXAlsRY8nhQPuB/v5cBS2SA7WHDx8GW29/GJj+4l//JaQ5uYACRoMFbM8Bcsz9UBHH33AkAtHb\nwnFbJmJCicMgd8fGWnTYdeqJIAsJ+J9PsE4zGfrStVZom/c4HlcaeN/k5DjYHngnClRNj6IQVLEc\n1r3VQvGAIhNDun22xcczM1uO5lTvsK8q0H+YJiF9XC6jLwwMDYHtyKMPB9eTB1EcanEW/duTA7yb\n5PPY177zMuYXCapNTOI8We/DPvZkrBR7cL5Lon5ukPm61SCiJ8SWEvGbuJ+YmJiRvkxIXiQZFa2K\nlXkcE/0hd22CbZvDzTlzxXDuYmXMonZngkbMxvYR9CuBSBQsJXsZVrKeHvRBts5fm76K2UVlY3sG\ntlYXibBWnYy1RjPcB/VUUFSlTMoft4VZvv1eQoSJUiL2yPaYfB+HdYoHUnUFhW7m5+bwvttn23y8\nt6/Xnnjy8cAWr69mZvW4DTy2U7OFwjVJQsa5x74+cySco+euvAVpRoZRoHFwAIV3VlcWwTY3Pw+2\n8fHwPT0tEGVEojGWkr34tbkFsF26HIqFraxi/leuXQTb8Ai2T/8Qbh7X1sJ9CRP96x3E/eTkYRQs\nS4tk/0zKUYyUlMZK6AdUrC4nG+5wvPeXvPffXf/3kpkdN7MDZvYJM/vcerLPmdknN10KITqIfFx0\nO/Jx0c3Iv0W3Ix8X3cptfdTunDtiZo+b2bfNbMJ7f8ns+gAxM/x4+Po9n3LOHXXOHd1pR20IEbNV\nH2fS9kLsJG7Xx2/0b/ptjhA7iK3O4XPz2/LtlRB3jK36+NI8HpcnRKfI/SLqnOs3s98zs1/y3uN3\n4DfBe/8Z7/1T3vun2M80hdgpbIePF1JybpkQO4TN+PiN/r2Vn98IcafZjjl8ZFghdmLnsh0+PjCM\nIT5CdIpcL6LOuaJdd/zf9t5/Yd18xTk3uf7/k2ZGAg6E2B3Ix0W3Ix8X3Yz8W3Q78nHRjWwoVuSu\nfwT+WTM77r3/lRv+64/M7GfN7JfX//7DjfJK09QGBgbCApAg8SwLg3vzihDF95lxMZv4mUz4iIko\nseB1JgrEfr62thYGdLO84ra5WTomChTXgd3H2prZmk0Uv4jLduDAAUizuIgfzk1OTuZ6JuvjoUik\nhLX1dnzLvp0+bubMubB+01fQl6avhm11aGoC0rSa6Lv9/fhJ5tllFNWZfvPt4Dp12OZzRITocguD\n+32G/drXuAy2+wqhX95jKDJTcSh04YmA0XVZnMjiQ5/Omujjc2v4k6MXHdbpoqGgRD0L/Z6VatgT\nFQMi6HHi7bfBNjj0MNhGIpGqakIEI6gIzO2xXT7unbMWiCdh+aqRqeawP/tT9OVnfuCdYHvg/kNg\nK5RCQZPGGv6c0hPxjdk62l7+7qtgO/GdF8HW9GEd3u5HUQcypOzJZz4ItoEJnLfidaNRw/kuJcJV\n5TJ6alZD/84iYRsuLpTvR1IbyxKtPzMyZkRNLE6zGbZzDq+urtqx74b9P0zEUUaHwm9OSz0ogpMW\ncL7wRCWqSUTKYhGcjOwr2F6DCRyWyyh60moyMaGwHN6jQy8vo0BLuQfzZ3WPxY/Yup8SgSHmb3nC\nBDKP844n+xtWDtZmSUL8N+q7hOS1uoQid7fLdvp4q9m0+flQVGdtDfcbtWgOYmJyaYH0Axnny4vY\nBlm0zk9OoaBOKcF98TzZa9ZquM/yTOALBK3QH9ZquI9YXEZRpip5v1heDO9dXsIxVKuijxexaa2I\n2yWrroVtlhIfr/di+dN+7JNCP5ZjqYz95LNIoHCYiElS9bt85FHNfa+Z/RMze8U599K67V/adaf/\nz865nzOzs2b2k5suhRCdRT4uuh35uOhm5N+i25GPi65kwxdR7/3f2M0V1n9we4sjRPuRj4tuRz4u\nuhn5t+h25OOiW9mWA+qEEEIIIYQQQoi86EVUCCGEEEIIIURbyRMjuq3EAeZx8LoZChGVShjFywLV\nmYARyz8W45menoY0CwsYkM+Ej5jQ0eAgChvE6VhZmcBQnvYx420Uw0SIWDsyUaC4bEww6ezZs2Cb\nnZ0FW18finzkKRurd6VCork7SJI466mEIgerKxj8feHcheD6kYcOY2ZFElw+jG3Xt28cbM//8VvB\n9UQT+/mBIh5TsFrAwPc1w75JiBBMTy0STcqI8I4jQl7kmZ7IU7RiXyWiEGsZ+u54huUfJIJZVgjH\nEBPbYGP09CwKN803UEzhx374/fjISFgkIeIgngg3dQpn5NNLRz7PjEVqyGeey0TZ580LOBf3D6D4\nyuRYKPLUIFov11bQFxYvoKjRiedfAlshwb5PXWQjImEJKcfsyTNgq73zPrw3cu8Kade+QRR4Gt+P\nxwZOL+Ock2Q5hGKI3gTzvhb9gSATLYmu6X076/PwtWrV3jgWClhdunAR0o1Ga+DEARRaGd+7B217\ncL4eGkRht1IklsOEcthpSnxvRAQfifBVGm0JG0x4kcyBTSIcR8WVIh9kopBlsrakZL5me694v+RJ\nA8Wid2ZmyxkR0iHiKy1Sz3okkMf2bH29RNisg7Syli2vRHtcIjCURhOCI2J6bPr3LeyvM6dxDE3P\nhIJJroj3Xbx4AWxNIuTW04v9tbiK8/3C6dBWIGKJfUQUskyEfd7x2BGwLS+F/vDmGzj/z01jO84t\n4jvHzBzWs1wJhfqKZNFpkkk7KWH/Do6jEFTNo9BdK9o/9vShkBcTi83LzloBhBBCCCGEEEJ0PXoR\nFUIIIYQQQgjRVvQiKoQQQgghhBCirehFVAghhBBCCCFEW2mrWFGj0QBhoGoVA2PzCPswcR4mJMIE\nhuJnMrGi1dVVsLEgdBYwzwR0ipEoCROKYPmz9mG2WKAgTyA/u+9m+cd9wOrI8r906RLYJiYmcpUj\nfmbeNus0zofB446Isvgs9NVmHdOUSRB9Rtrg4PueBNuBi6eD6xe/9BVIcznDfh726DdlIiBQLGKw\n+kKkYOJbOG77DcdomhDxC6JqUs9CG9FfsnqK80IxQV9NWxhYX49kWRY9igDMlLCfLjCNlgq2jxtF\nQZK1VlR3EvCfkLHcSRyZjze8h6rUYF1ff/Mc2M5dmAHbxJ5QrKi2hnnNrayBrbSGPj9GSoYjD8WE\nkpQsn3EiM6vPo3BVmcyf1UgkzpP1rEDa/pH3fj/YvnnxCuYfCcOQKZfplVhGRIgcm6/xVhQnIs+8\nibFjDA0P2Uc/+fHA9sdf+ANId+L4G8H1uYsoxrKyjAIkfRWco0bH0Qv3HTgUXA/vwTQZEWfr60cR\nulod90FG185wHDkictQ/gMI7DTJvrRFBmbnZsD1mZlBMZnxiEotFxMNqazi+33orFOmje8I1bAu2\nn2Sikyfffhvzq4Z7xRLp3x//xCfA1kmSxFlPb1hONkfHooEtooKTJjhbNprYXxfPo3Dl+Hgo3DU0\njPPiqbdRTK6U4jPf8/4nwDaAmprWiNzyqcdRRHBwcBRsL7/9dSxHL2uPsO4PP4lClEvzOC+8+RqK\nHn79ueNgu/v+cB4YG080dHUAABq0SURBVOqHNJfO4r77yiV8zxmZmAJbia3vhdA3XCzcZ1wYLC/6\nRlQIIYQQQgghRFvRi6gQQgghhBBCiLaiF1EhhBBCCCGEEG2lrTGipVLJ9u/fH9hYPOKVK2F8y7Fj\nxyBNgRxwXK9jTEKziXFecXxj/Dt1M7PhYfxxOYtjZLGYLC41z2Gvi4sYS7Sygoems2fG9WQxnKzN\nGCw2Iq47y6uvD2NHZmcxLqCnpwdsayTeY2AgPGy3XMa4O9YnncRnmdVrYczI8CCW++BUGAdTLmJc\nSQFd1xpN9K3mCMYI7P/oB4LrPzqBY+iFk2fBVqoRP22Sw9BJHEEhurXsMc0o8Zv+BG1N8hlZ1YcP\nqJIg0WVy4PZ0EeOESh7r2V+LDu8mrtUokdhrEi/x5N2HwNa/H2Ojq/WwbEUSk5WSWOFOwmK1N5PG\nk3jkQhFtK2s4r79xKox3Yc9LSFs6cvr6msO5cozEdU9EPkNrSJ7ZJLGqrRrmvxYN+JTETpZJXOre\nQ+hrg2T9WltZDg1s6iS2IrE1ScIWixuN+4U0Gos37STlnh574NF3BbaeXlzbnv3N/yu4ThOcw988\n/irYlpdxnWd+c/zEqdBA+n5y/16wHT5yF+ZP2r1FYrRbrdAHX3rxRUiTkbnzkUcfw0c6LO/iUuiD\nWYZ9X+npBdsa0VBYXEYdj0tXIg0Ssn+6dgVj5Q5OYazcvnGcrxeuzYOt1gj3sGOlPZDGsXjyDuLM\n4dhkThKNzRbRVmD+sLqC+5RCin14+FAYzzx1L+49jx/HmOcLb2G/9g9g+e95GPuiUQ99/JHH74U0\nWQvXoZPTuHZkCa5NxWKYrtyDfT88gvPJ/DX0++ERsrd4Txhz2tuL+8vLl8+D7cRxjEHdO4HvPoN7\ncUz6aH5yhv27lb24vhEVQgghhBBCCNFW9CIqhBBCCCGEEKKt6EVUCCGEEEIIIURb2fBF1Dl30Dn3\nNefccefca865X1y3/yvn3AXn3Evrfz5654srxPYjHxfdjPxbdDvycdHtyMdFt5IngrppZv/ce/9d\n59yAmb3gnPvy+v/9qvf+3+Z9WKPRsMuXw4DZs2dRMGV6evqW12ZcLIUFy7bIoc2x6A079JiJ/RSL\nKBrCRDKuXr264b1MRImVf88eDLbu70dxmlgMiYkcsfxXVzHgnwkR9fZiIHUMExOK+9vMbCk6WP1m\n5YjTMZEm1iebYNt83DmzUhSs/tgjD0G6++4JBSVKBRS6YL6bpehvWR3FAu6aOBhc/4//7f8AaS4S\nsaLzV1Fc6tzlK2BbjoVPzKwaCU5RoYg6+v00EUBYa2C6LDooOi2hv7ky+u5EHxELqKBgVk/UB8Ve\nnAMqY0Ngu2dyH9i+7+GHwTY0hgfSx+I5WQvrvUTEem6TbfNvM5xH2ByYJw0TE2Kwub5c2vjHPGy+\nY3IKa8R6iXxGW4tEqcYN+2qIFKuxjOOgQcTZaqVwLisQgbsKmWMzMne26rimFaI6ZUSshknqZazv\niLAJ1z7K0cdMFez22TYfLxQKNjoaHmhfegfOIQcOhyJRpQLOKefOnAZbfx+Krxy8526wjS2E698V\nMg/PzqN4zlodhUSYGBL7GmJudiG4fu5vvgFplok/N1uY//33PQC2ViQwxzQcV1dxbKRknR8j8+kj\njzwSXK+QvcbCAWwztndh4lsPvhPn9Vj/rIfslb73xptg2wTb5uOZz0BUMyWCSjBvE2GiVobrU1ok\nooR9ZM2N1vCUCBq983EUY5u9dBJsy0vo99UaztG1Wui/K1WyByYCds0mzqmWoo80PFGZjMia2I7T\nl1DE7PueeARsE/tCQadCGQfyA+88ArY3j6GA0eoylnVkP/ZT04f9wgSqmC0vG76Ieu8vmdml9X8v\nOeeOm9mBTT9RiB2GfFx0M/Jv0e3Ix0W3Ix8X3cptxYg6546Y2eNm9u110y845152zv2Wcw4/5hNi\nlyEfF92M/Ft0O/Jx0e3Ix0U3kftF1DnXb2a/Z2a/5L1fNLNfN7N7zOwxu/4pzb+7yX2fcs4ddc4d\nvXbt2jYUWYg7w3b4eKNFfr4hxA5gO/x7p53bK8SNbIePs1AgIXYK2+HjK+RnrEJ0ilwvos65ol13\n/N/23n/BzMx7f8V73/LeZ2b2m2b2NLvXe/8Z7/1T3vun2G/6hdgJbJePF9NtiVkVYlvZLv9msZ5C\n7AS2y8eZLoMQO4Ht8vG+AYyJFaJTbBgj6q7vPD5rZse9979yg31y/TfrZmb/wMxe3SivhYUF++IX\nvxjYZmdRHKWvry+4joUDzLgQBRMdigOymY0JBzERnIGBAbAxIQ1GXM9YXMiMB9+z/JkQ0blz54Jr\nVu9SCQVxWJuxcsTlZRvSubk5sLH+zSvUVK+HQfDsvrztfyu208f7+vvs3c98X2D7yA+9F9KNjgwH\n176OQfo14iOejNhKhsY+F/rvnsPvgDSPHHkQM0tQEGppGYWJ1ojYSiyS0SRiS2tEmGiFiPGsEgGB\npBD2dQ8RE+olImODTJiIiFMkkcBChQl0EbGoZgvbotnA8cfEDso90ZySYrnqNRTcuB2207/X77vt\nNFzIBq0s5zzfweZ9PebpiJXUcSYS1Vkg426MlHaKCFNceB3FS+7//ieD65SUiwm2Ma0f1keFyNYy\nzItl5okIhSNlowJGIHaCj+RGnDtuxXb7eExPtCcxM3vPh94fXL/0nZchTVrE8fyeD/wA2D700R8B\nW6U3FCVcWliANC++eBRsff04b63WcY4qEgGj5dVqcO0T3AeVK4Ng+853XgDbceLj8ZYza2HfZ+mL\neBfZu4yM4C9QY9GheA9hZtYkQnjX5nHv0jh/DmxrVTLXR/uSOtmnZLlmsVuznT7unIO5JBbOu05Y\n7gL7nJ3swWo1HL+rK9gXS3Phmji4B/OamMT1e+Igjqu5eVxf6zWcu5qNsGyNJparWEZ/Y3vU2hqu\n8/G7Q6GA8+y1aRzLK4u4r7//sXvBVilFa2sB2/rIPSigePXCDNjqZO/iEhRD9ZFPs/eXrfxaKo9q\n7nvN7J+Y2SvOuZfWbf/SzH7aOfeYXffU02b2TzddCiE6i3xcdDPyb9HtyMdFtyMfF11JHtXcvzH+\nQfIXiU2IXYd8XHQz8m/R7cjHRbcjHxfdytZ/1yiEEEIIIYQQQtwGehEVQgghhBBCCNFW8sSIbhtJ\nklh/fz/YYuKgV5aGifEskGB+Jjq0d+/e4JqJIfX0YIA0y4sJ6LD8liPBFxZEz565uoqiLWfPngVb\nrPQ3NDSUK/+4P8y4IEYsOjQ/Pw9pFhcXc+WfV2Aobm/W1kw0p5MMDvTbD/1gKGIxPIRCF2u1UBTC\nZdgmaZEMzyIRIfF4bzML061lGNDuyph/6jHgvzBChLsSFAXqiQWtiB+lCT6zQASSmICJz8KyeY/+\nQAUXUnxmlkNwp8A+p6uTZ5IYfU/qzgQrYrGwzGFZHSl/JwEhIiJSENscm+eZgAfrF2bKNhZGYII6\nVCAppxJwGvlDi9x2hYg4MKmp1edRT2T40MHg+q6D+yFNjYhgFXtQWGNwdBhs9flwfcyIWE2DCIw5\nMne0WPsTU3xnRnyFd+XOOgYrJYIjB48cCa7/+Av4C8kqETO56777wXYPscVtd+AA+sM7HnwAbKdO\nvw2246+jv2Wkr2ejdX14GIUL770Hn3nxPO5JLhCxn0YjHB/NBo4XshRaWsI1iO1BWlGd2P7grrvu\nAtvU1BTY2LzABCunr4bHEn73GIotlYmIXidxzoF4JVs7cc+Fa5En99VqKLyztIT7wwsXQr/pGRnH\nsuK21fZM4p7q4sWrYLtnAefBQiGcW5pErKiZ5hMbZKI98btJmmIFUrbmkL1XdRVFtFqNUCys3sLy\n9w7iM+998ADYMof7mQYTECP1hHKR+SQv+kZUCCGEEEIIIURb0YuoEEIIIYQQQoi2ohdRIYQQQggh\nhBBtRS+iQgghhBBCCCHaSltVMFiANBPjiYPEY0EPMx48G+dtZlYul8E2PBwGMDNhn0KBiIaQAOO8\ntrgcKysYzM1gAcCxMJGZWW9v74b3LS2hbAYTfWK2ajUU12F9wmACTxUSuM/KFgsNsLyYeEAnSdPE\nhvvD+tXqKJgQiwAwoYBKEdup6LENkiIKaYCYSEaEWzyOIU+ESTzVj2HGsBwZEVFiIjM+2TgQ3szM\nR8/MPNablosE3zN9lFhEq9HCQP4WEcxyRIApIb6aOmzbRpRf5lF4oMjUkHY4eQSA8ooEGRG4gW5m\nTcT0IFg6YmRly+NF7L5V4n+vT0+DbeEP/iy4/vH/6v2Q5rF3MVEb9MkDD78DbGkkCra2WoU08Txv\nZtYgwnrVGtrqZGxkrUjAjMw5vFN2FkxkaW+0Dj/5/U9AmrE9KJZy38MPgo26ZbTHiee/m3Ho0BGw\n9fcPgm16+grYjh17I7i+5577IM2DDz4EtjLZey0s4Jo+vxCKrySk5hkTGSNVj+dOM7NSJGo03DMC\nad758MNge+zRR8G2vIjlpz0Qje/RYdxPjkcCmZ3Ge49CeWRtjveCjnx3VW9uLNhjZjY03Au2YiHs\nwwaZV8xwDz8whHujc6dRrGhlBeezgf6wFy9cvABpHHG41Sq+q5QqZO2P9hFseuvrxTpN7kNfTYiY\nUNaMykYELJuGZd0ziX45cw0FXqtV7Lt4eLN1jomc5kXfiAohhBBCCCGEaCt6ERVCCCGEEEII0Vb0\nIiqEEEIIIYQQoq3oRVQIIYQQQgghRFtpq1hRlmUgSjM/Pw/pYtGhWNjFzGxsbAxsBw8epM+MicWJ\nmMgRE/thwbg9PT1gY4HasSjT3NwcpGECSXlFk2JhHyYCFacxw8BqM7O+vj6wxfVkIkFM6KJOhC5Y\nn7N743aMRabMePk7ivcg+MP6Ky53WiRB7ynWLSN+2SD5x37D9IAcE2lpEQEjks4TIaIkFu0hAkxc\nmCSnaI0L83ekUrStySNZndLoc7kWEdIgujPWIsZWTgGWuBysf3ealgsUJ2HCVTn7NAe5RI3yuhBr\nSyagxcYGGIioCllv6Me9RDzszLlLwfVv/+4XIc3Zsyis8dSTKL5y5DEUlCkN9gfXfpkIDhGxkEUy\nX68QIZeFxUW0zYdiGNU1nOetgev7joP4QyzQ8xM/+Q8hTaOJon6lIu432FxcyLW2EdEQ4nB79qBY\nzp49E2B783sng+vXXn4dy0X2QaOjuB/r7esH29zCbHDdyogQpcP8y0UUuunrQ1upFIrA9PVimlNn\nToHtlZePgW3hGu7RWk2cn+uRqF2pgkI0H/7QB8D2a//hV8DWTmKXY3NevA9uNrD+8/M4F7TIPDi2\nD/eVhWjtaDq8r4+059AIpnvgnfvAVkJNI+uJ/Ob8lbchDRMlNFK2IhGKjN8n6kTYs0Xy2nf3KNjY\nu0RSCp9ZLOA7SKOJ9xV7cF4o9eL8kXkiROpCETD2LsTERPOyw3bxQgghhBBCCCG6Hb2ICiGEEEII\nIYRoKxu+iDrnKs657zjnjjnnXnPO/et1+13OuW87595yzv0n5xz+3kSIXYB8XHQ78nHRzci/Rbcj\nHxfdSp4Y0ZqZfdh7v+ycK5rZ3zjn/tTM/icz+1Xv/eedc79hZj9nZr9+q4zK5bLdc889gW3//v0b\nFoDFGU5MYHwDi1uMD+01w98y95I4AhaXyvJiNhaXGtdhkcTTsN9dsxjRs2fPgm1kJDwMl8W9snIx\nG6t7HKfF4rYGB/HQbFYnFn+7vLwMtrjNWFlZ+2+CbfNx55wVCmGdUxLrGbdfTz/GT6QkxrJKYn/z\n9CtrcxbPlnpMVyYxTQnxy6QYxnK4OGbUzLyRZ6YkTiGHX7L44JTYHDsgneTPYmQgL+L3LP+UxE2y\nOsVzEfMVFoO6CbbNx30cJbrJ4uWK/bxJuviRW4pIZaHMJG407j/qC8TGDopn6eJ5Y2EJx/qf/MU3\nwfbaWxjz9vTjGCM6Fa21TY9xRHvJuto7hrFL1VWM9Rwkc3jvlengev7qNKRZXsK10GbxoPUN2Db/\n3iysT8sljG/rBMwHEzJHTR2cCq6/9pW/hDSHDh4CG9szNEl8bKUSBu29/wPvgzQPPIQxz4NDI2Db\nt4/EBJbDtapC4gsZ3/7Gt8D27Gf/b7CtLGE8pEVrzg++5/shyfve955c5diAbfbx0CfY2hNrg2Sk\nOdmaTp82gj5YKocZUq0MpmMyiOn2TaKGCFti4nGapmR+LpK5vUViu3OsYQlLQ/Y8fWMY6zmU4juN\nRaGYGdH1SBzGayZFbMfhEcyf7YNi7YpsGzUgzHJ8I+qv87crTHH9jzezD5vZ767bP2dmn9zWkgnR\nJuTjotuRj4tuRv4tuh35uOhWcsWIOudS59xLZnbVzL5sZm+b2bz3/m8/BjtvZgfuTBGFuPPIx0W3\nIx8X3Yz8W3Q78nHRjeR6EfXet7z3j5nZlJk9bWYPsmTsXufcp5xzR51zR9mxHULsBLbLx+cWbvsn\nZUK0hc36+I3+nefny0J0gu2aw6en8efDQuwEtsvHlxfxKD8hOsVtqeZ67+fN7C/N7BkzG3bu7w72\nmzKzize55zPe+6e890+xcyCF2Els1cdHojNqhdhp3K6P3+jfeeM6hegUW53D9+zZ056CCrFJturj\n/YPkgE0hOsSGYkXOuT1m1vDezzvneszsh8zs35jZ18zsH5nZ583sZ83sDzfKK0kS6+sLRVmYUBAG\nE6PgDbPdpPxgiz/VZ8HQ7HBWFpDPYGWL68nSrBIhGlYOdm+1GopHMIGntTX8FCyPgIoZBq2zNKz8\nrG1ZukuXLoEthtW7XN66GMR2+rj3Zq3WxkJB8aHX7JumehP7kB1wzPowbiv6AsG+3WIiPgVM1yR1\nKqTxvZiGFSNuLzP+kW5cT+YPrEo+w3KwPonzpwIc7D4mlUMqyu6NU7Hxsh0vf9vp4+2GjY24TfKk\nuRlMbMrlEJvK/+0wS7dx2bhIE+b11qlzYDt38SrY7r07FJkpLKC40OQgfpA2MNQPtiIRw0vYgeZ+\n4zGbdy2/FXfav3f7BzB5fen++x8IruN138zsK1/+CtjYPm56egZs99x7JLj+7/7ZP4M0I3vGwXan\nOXRoCmz33ncP2E68+SbYkmgsf/gjPwRpRveMbaF019lWH3dmaSRew3wkLYRpYkE1M7PePnyNaDRw\n7aTrdfRItkZ6v/H+5ma2ZmPj/BxZc9k+iJND1I6sJUUiysTWkyIRioyfmRDho1YTy98i+yC232i1\niFhpEq+3mH+1uvlv2fOo5k6a2eecc6ld/wb1P3vv/4tz7nUz+7xz7n83sxfN7LObLoUQnUU+Lrod\n+bjoZuTfotuRj4uuZMMXUe/9y2b2OLGftOu/URdiVyMfF92OfFx0M/Jv0e3Ix0W3clsxokIIIYQQ\nQgghxFbRi6gQQgghhBBCiLbi2inH75ybNrMzZjZuZhjJvnvY7eU32/11uFX5D3vvOyJ9KB/fMXR7\n+Tvi4zf4t1n3t/FOp5vLvxPmcLPubuPdQDeXfyf4eDe3725gt5ffbBt8vK0von/30Ovn0T3V9gdv\nE7u9/Ga7vw47vfw7vXwbofJ3lt1Q/t1Qxluh8neW3VD+3VDGW6Hyd5adXv6dXr6NUPk7z3bUQT/N\nFUIIIYQQQgjRVvQiKoQQQgghhBCirXTqRfQzHXrudrHby2+2++uw08u/08u3ESp/Z9kN5d8NZbwV\nKn9n2Q3l3w1lvBUqf2fZ6eXf6eXbCJW/82y5Dh2JERVCCCGEEEII8fcX/TRXCCGEEEIIIURb0Yuo\nEEIIIYQQQoi20vYXUefcjzjn3nDOnXDOfbrdz79dnHO/5Zy76px79QbbqHPuy865t9b/HulkGW+F\nc+6gc+5rzrnjzrnXnHO/uG7fFXVwzlWcc99xzh1bL/+/Xrff5Zz79nr5/5NzrtTpsv4t8vH2Ih9v\nL7vNv812t4/vdv82k4/faXazf5vtfh/fbf5tJh9vN/Lxm9PWF1HnXGpm/8HMftTMHjKzn3bOPdTO\nMmyCZ83sRyLbp83sq977+8zsq+vXO5Wmmf1z7/2DZvaMmf33622+W+pQM7MPe+8fNbPHzOxHnHPP\nmNm/MbNfXS//nJn9XAfL+HfIxzuCfLxN7FL/NtvdPr7b/dtMPn6nedZ2r3+b7X4f3zX+bSYf7xDy\n8ZvQ7m9EnzazE977k977upl93sw+0eYy3Bbe++fMbDYyf8LMPrf+78+Z2SfbWqjbwHt/yXv/3fV/\nL5nZcTM7YLukDv46y+uXxfU/3sw+bGa/u27fSeWXj7cZ+Xhb2XX+bba7fXy3+7eZfPxOs5v922z3\n+/gu828z+XjbkY/fnHa/iB4ws3M3XJ9ft+02Jrz3l8yuO5eZ7e1weXLhnDtiZo+b2bdtF9XBOZc6\n514ys6tm9mUze9vM5r33zfUkO8mP5OMdRD5+x+kW/zbbRf7xt+xW/zaTj3eAXeUff8tu9fFd5N9m\n8vGOIh8PafeLqCM2nR/TBpxz/Wb2e2b2S977xU6X53bw3re894+Z2ZRd/yTvQZasvaW6KfLxDiEf\nbwvy7w6xm/3bTD4uNmY3+/gu8m8z+XjHkI8j7X4RPW9mB2+4njKzi20uw3ZwxTk3aWa2/vfVDpfn\nljjninbd8X/be/+FdfOuqoOZmfd+3sz+0q7/vn7YOVdY/6+d5Efy8Q4gH28b3eLfZrvIP7rFv83k\n421kV/lHt/j4LvBvM/l4R5CPc9r9Ivq8md23rrJUMrOfMrM/anMZtoM/MrOfXf/3z5rZH3awLLfE\nOefM7LNmdtx7/ys3/NeuqINzbo9zbnj93z1m9kN2/bf1XzOzf7SebCeVXz7eZuTjbaVb/Nts9/jH\nrvZvM/l4h9hN/rGrfXyX+beZfLztyMdvgfe+rX/M7KNm9qZd/23x/9zu52+ivL9jZpfMrGHXP0X6\nOTMbs+vqVm+t/z3a6XLeovzvs+tflb9sZi+t//nobqmDmT1iZi+ul/9VM/tf1u13m9l3zOyEmf1/\nZlbudFlvKLN8vL3ll4+3t7y7yr/Xy7xrfXy3+/d6HeTjd7a8u9a/18u/q318t/n3etnk4/9/u3aI\nAwAMAkAs+/+nMbPYM7QJdkFgLlm7vxtf5v2HAAAAIFF/zQUAAOA4IQoAAEBKiAIAAJASogAAAKSE\nKAAAACkhCgAAQEqIAgAAkBpBDkWF9YxuSwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "(x_tan,y_tan,x_tst,y_tst,cimke)=mintak_cifar10()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2.) Háló létrehozása és betanítása" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ugyanazt az MLP architektúrát és tanító függvényt használjuk most is, mint amit az előző feladatban:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def inTop3(x,y):\n", " return(top_k_categorical_accuracy(x,y,k=3))\n", "\n", "def get_MLP(x_p, y_p):\n", " bem = Input(shape=x_p[0].shape, dtype='float32')\n", " x = Flatten()(bem)\n", " x = Dense(256, activation='tanh')(x)\n", " x = Dense(128, activation='tanh')(x)\n", " y = Dense(y_p[0].size, activation='softmax')(x)\n", " \n", " model=Model(inputs=bem, outputs=y)\n", " model.compile(optimizer=SGD(lr=0.005, decay=0, momentum=0.9, nesterov=True), loss='categorical_crossentropy', metrics=['accuracy', inTop3])\n", " print(model.summary())\n", " return(model)\n", "\n", "def tanitas(model, x_tan, y_tan, epn):\n", " hst=model.fit(x=x_tan, y=y_tan, verbose=1, batch_size=32, epochs=epn, validation_split=0.1)\n", " \n", " plt.title('Tanito gorbek')\n", " plt.xlabel('Epoch')\n", " plt.ylabel('Loss')\n", " epi=np.linspace(1,epn,epn)\n", " plt.plot(epi, hst.history['loss'], 'b-', epi, hst.history['val_loss'], 'r-')\n", " plt.legend(['tanito', 'validacios'], loc='upper left')\n", " plt.show()\n", " return model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hozzuk létre és tanítsuk be az MLP-t:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "input_1 (InputLayer) (None, 32, 32, 3) 0 \n", "_________________________________________________________________\n", "flatten_1 (Flatten) (None, 3072) 0 \n", "_________________________________________________________________\n", "dense_1 (Dense) (None, 256) 786688 \n", "_________________________________________________________________\n", "dense_2 (Dense) (None, 128) 32896 \n", "_________________________________________________________________\n", "dense_3 (Dense) (None, 10) 1290 \n", "=================================================================\n", "Total params: 820,874\n", "Trainable params: 820,874\n", "Non-trainable params: 0\n", "_________________________________________________________________\n", "None\n", "Train on 45000 samples, validate on 5000 samples\n", "Epoch 1/15\n", "45000/45000 [==============================] - 34s 747us/step - loss: 1.7887 - acc: 0.3570 - inTop3: 0.6846 - val_loss: 1.6601 - val_acc: 0.4056 - val_inTop3: 0.7390\n", "Epoch 2/15\n", "45000/45000 [==============================] - 28s 633us/step - loss: 1.6142 - acc: 0.4226 - inTop3: 0.7511 - val_loss: 1.6248 - val_acc: 0.4232 - val_inTop3: 0.7508\n", "Epoch 3/15\n", "45000/45000 [==============================] - 33s 727us/step - loss: 1.5344 - acc: 0.4530 - inTop3: 0.7736 - val_loss: 1.5521 - val_acc: 0.4510 - val_inTop3: 0.7722\n", "Epoch 4/15\n", "45000/45000 [==============================] - 37s 823us/step - loss: 1.4887 - acc: 0.4696 - inTop3: 0.7870 - val_loss: 1.5280 - val_acc: 0.4534 - val_inTop3: 0.7732\n", "Epoch 5/15\n", "45000/45000 [==============================] - 38s 834us/step - loss: 1.4506 - acc: 0.4807 - inTop3: 0.7977 - val_loss: 1.4811 - val_acc: 0.4760 - val_inTop3: 0.7944\n", "Epoch 6/15\n", "45000/45000 [==============================] - 34s 756us/step - loss: 1.4148 - acc: 0.4922 - inTop3: 0.8089 - val_loss: 1.5171 - val_acc: 0.4622 - val_inTop3: 0.7808\n", "Epoch 7/15\n", "45000/45000 [==============================] - 40s 882us/step - loss: 1.3830 - acc: 0.5049 - inTop3: 0.8150 - val_loss: 1.5312 - val_acc: 0.4686 - val_inTop3: 0.7852\n", "Epoch 8/15\n", "45000/45000 [==============================] - 34s 749us/step - loss: 1.3599 - acc: 0.5129 - inTop3: 0.8201 - val_loss: 1.4419 - val_acc: 0.4904 - val_inTop3: 0.8034\n", "Epoch 9/15\n", "45000/45000 [==============================] - 34s 758us/step - loss: 1.3319 - acc: 0.5234 - inTop3: 0.8304 - val_loss: 1.5256 - val_acc: 0.4606 - val_inTop3: 0.7752\n", "Epoch 10/15\n", "45000/45000 [==============================] - 34s 766us/step - loss: 1.3103 - acc: 0.5333 - inTop3: 0.8357 - val_loss: 1.4598 - val_acc: 0.4850 - val_inTop3: 0.8018\n", "Epoch 11/15\n", "45000/45000 [==============================] - 38s 855us/step - loss: 1.2921 - acc: 0.5386 - inTop3: 0.8384 - val_loss: 1.4879 - val_acc: 0.4716 - val_inTop3: 0.7940\n", "Epoch 12/15\n", "45000/45000 [==============================] - 37s 814us/step - loss: 1.2764 - acc: 0.5436 - inTop3: 0.8416 - val_loss: 1.4465 - val_acc: 0.4934 - val_inTop3: 0.8076\n", "Epoch 13/15\n", "45000/45000 [==============================] - 37s 830us/step - loss: 1.2566 - acc: 0.5493 - inTop3: 0.8477 - val_loss: 1.4440 - val_acc: 0.4964 - val_inTop3: 0.7974\n", "Epoch 14/15\n", "45000/45000 [==============================] - 34s 759us/step - loss: 1.2373 - acc: 0.5576 - inTop3: 0.8519 - val_loss: 1.4472 - val_acc: 0.4840 - val_inTop3: 0.8138\n", "Epoch 15/15\n", "45000/45000 [==============================] - 34s 754us/step - loss: 1.2233 - acc: 0.5616 - inTop3: 0.8546 - val_loss: 1.4045 - val_acc: 0.5032 - val_inTop3: 0.8120\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mlp=get_MLP(x_tan,y_tan)\n", "mlp=tanitas(mlp,x_tan,y_tan,15)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A tanítási görbékből látható, hogy kezd túlilleszkedni a háló a tanító adatokra (egyre nagyobb a validációs és a tanító pontok közötti eltérés), noha a validációs hiba még nem növekszik (nincs még túltanulás). Futtassunk még pár epochnyi tanítást." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "scrolled": true }, "outputs": [], "source": [ "mlp=tanitas(mlp,x_tan,y_tan,15)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Önálló feladat - tanulási függvény kiegészítése korai leállással" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Most már emelkedik a validációs hiba, ezért módosítsuk a tanítást végző függvényt, most már a korai leállás is legyen benne. A Keras ezen célra létrehozott callback függvényét alkalmazzuk." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def tanitas_earlystop(model, x_tan, y_tan, epn, tol):\n", " \n", " earlystop=EarlyStopping(monitor='val_loss', patience=tol)\n", " hst=model.fit(x=x_tan, y=y_tan, verbose=1, batch_size=32, epochs=epn, callbacks=[earlystop], validation_split=0.1)\n", " \n", " plt.title('Tanito gorbek')\n", " plt.xlabel('Epoch')\n", " plt.ylabel('Loss')\n", " \n", " epn=len(hst.history['loss'])\n", " \n", " epi=np.linspace(1,epn,epn)\n", " plt.plot(epi, hst.history['loss'], 'b-', epi, hst.history['val_loss'], 'r-')\n", " plt.legend(['tanito', 'validacios'], loc='upper left')\n", " plt.show()\n", " return model" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "mlp=tanitas_earlystop(mlp,x_tan,y_tan,10,3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Önálló feladat - tanító függvény módosítása: a legjobb validációs eredményhez tartozó súlyokat töltsük vissza" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lehetőség van a tanítás során elért legjobb validációs hibához tartozó súlyok háttértárolóra kimenetésére egy másik Keras callback függvénnyel, most ezzel bővítsük a kódot (ne feledkezzünk meg a súlyok visszatöltéséről sem)!" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def tanitas_earlystop(model, x_tan, y_tan, epn, tol):\n", " \n", " model_checkpoint = ModelCheckpoint('MLP.hdf5', monitor='val_loss', verbose=1, save_best_only=True)\n", " earlystop=EarlyStopping(monitor='val_loss', patience=tol)\n", " hst=model.fit(x=x_tan, y=y_tan, verbose=1, batch_size=32, epochs=epn, callbacks=[earlystop, model_checkpoint], validation_split=0.1)\n", " model.load_weights('MLP.hdf5')\n", " \n", " plt.title('Tanito gorbek')\n", " plt.xlabel('Epoch')\n", " plt.ylabel('Loss')\n", " \n", " epn=len(hst.history['loss'])\n", " \n", " epi=np.linspace(1,epn,epn)\n", " plt.plot(epi, hst.history['loss'], 'b-', epi, hst.history['val_loss'], 'r-')\n", " plt.legend(['tanito', 'validacios'], loc='upper left')\n", " plt.show()\n", " return model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Inicializáljuk újra a hálónkat, hogy a továbbiakban már ne a túltanult eszközzel dolgozznuk, valamint az általunk módosított függvénnyel tanítsuk be a hálót. Ehhez definiáljunk egy újabb függvényt. Figyeljük meg a függvényben a Python for ciklusának szintaktikáját!" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def inicializalas(model):\n", " session = K.get_session()\n", " for layer in model.layers:\n", " if hasattr(layer,'kernel_initializer'):\n", " layer.kernel.initializer.run(session=session)\n", " \n", " return(model)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "mlp=inicializalas(mlp)\n", "mlp=tanitas_earlystop(mlp,x_tan,y_tan,15,3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3.) Háló kiértékelése" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Értékeljük ki a betíntott függvényeket az előző notebookban már ismertetett módon, ehhez most is definiálnunk kell a megfelelő függvényt." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.metrics import confusion_matrix\n", "\n", "def teszt(halo, x_test, y_test):\n", " \n", " tmp=halo.evaluate(x_test,y_test)\n", " \n", " y_pred=np.argmax(halo.predict(x_test),axis=1)\n", " print('Confusion Matrix:')\n", " print(confusion_matrix(np.argmax(y_test, axis=1), y_pred))\n", " print()\n", " print('Loss:'+str(tmp[0])+'; Acc:'+str(tmp[1])+'; Top3Acc:'+str(tmp[2]))\n", " print()\n", " return({'loss':tmp[0], 'acc':tmp[1], 'top3acc':tmp[2]})\n", "\n", "def halo_mentes(model,nev):\n", " model_json=model.to_json()\n", " with open(nev+'.json','w') as json_file:\n", " json_file.write(model_json)\n", " model.save_weights(nev+'.hdf5')\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10000/10000 [==============================] - 1s 137us/step\n", "Confusion Matrix:\n", "[[536 28 140 19 56 16 18 23 70 94]\n", " [ 28 598 27 20 19 16 12 14 26 240]\n", " [ 47 18 507 89 123 62 60 57 9 28]\n", " [ 15 18 134 383 66 155 90 45 15 79]\n", " [ 30 12 219 67 437 42 76 72 11 34]\n", " [ 12 7 140 238 84 370 43 55 12 39]\n", " [ 4 14 149 98 106 46 514 18 9 42]\n", " [ 26 14 79 72 102 72 15 519 2 99]\n", " [139 57 41 35 36 9 8 8 523 144]\n", " [ 24 130 21 38 17 13 9 35 16 697]]\n", "\n", "Loss:1.41125200653; Acc:0.5084; Top3Acc:0.8142\n", "\n" ] }, { "data": { "text/plain": [ "{'acc': 0.50839999999999996,\n", " 'loss': 1.4112520065307617,\n", " 'top3acc': 0.81420000000000003}" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "halo_mentes(mlp,'mlp_cifar10')\n", "teszt(mlp,x_tst,y_tst)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Önálló feladat - függvény, mely egy képre visszadja a háló válaszát, valamint annak konfidenciáját" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Egészítsük a függvényt!" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def y_pred(halo,kep,cimke):\n", " plt.imshow(kep)\n", " plt.show()\n", " \n", " y_pred=halo.predict(kep[None, :])\n", " kat=np.argmax(y_pred)\n", " print('Halo szerint a legvaloszinubb osztaly:'+str(cimke[kat])+' - konfidenciaja:'+str(y_pred[0,kat]))" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Halo szerint a legvaloszinubb osztaly:airplane - konfidenciaja:0.691997\n" ] } ], "source": [ "y_pred(mlp,x_tst[791],cimke)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.6" } }, "nbformat": 4, "nbformat_minor": 2 }