{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# NTDS demo 1: Introduction\n", "[Michaƫl Defferrard](http://deff.ch), *PhD student*, [EPFL](http://epfl.ch) [LTS2](http://lts2.epfl.ch)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Content\n", "\n", "1. [Conda and Anaconda](#conda)\n", "1. [Python](#python)\n", "1. [Jupyter notebooks](#jupyter)\n", "1. [Version control with git](#git)\n", "1. [Scientific Python](#scipy)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## 1 Conda and Anaconda\n", "\n", "[Conda](https://conda.io) is a package and environment manager. It allows you to create environements, ideally one per project, and install packages into it. It is available for Windows, macOS and Linux.\n", "\n", "[Anaconda](https://anaconda.org) is a distribution which comes with many of the packages used by data scientists." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can list your environments:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "# conda environments:\r\n", "#\r\n", "test /home/michael/.conda/envs/test\r\n", "root * /usr\r\n", "\r\n" ] } ], "source": [ "!conda info --envs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "List the packages in an environment:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "# packages in environment at /home/michael/.conda/envs/test:\r\n", "#\r\n", "curl 7.54.1 0 \r\n", "expat 2.1.0 0 \r\n", "git 2.14.2 0 conda-forge\r\n", "krb5 1.13.2 0 \r\n", "libiconv 1.14 4 conda-forge\r\n", "libssh2 1.8.0 0 \r\n", "openssl 1.0.2l 0 \r\n", "zlib 1.2.8 3 conda-forge\r\n" ] } ], "source": [ "!conda list -n test" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Install packages:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fetching package metadata ...........\r\n", "Solving package specifications: .\r\n", "\r\n", "# All requested packages already installed.\r\n", "# packages in environment at /home/michael/.conda/envs/test:\r\n", "#\r\n", "git 2.14.2 0 conda-forge\r\n" ] } ], "source": [ "!conda install -n test git" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Want to know more?** Look at the [conda user guide](https://conda.io/docs/user-guide/overview.html)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## 2 Python\n", "\n", "Below are very basic examples of Python code. **Want to learn more?** Look at the [Python Tutorial](https://docs.python.org/3/tutorial/index.html)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Control flow" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "hello\n" ] } ], "source": [ "if 1 == 1:\n", " print('hello')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "1\n", "2\n", "3\n", "4\n" ] } ], "source": [ "for i in range(5):\n", " print(i)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4\n", "3\n" ] } ], "source": [ "a = 4\n", "while a > 2:\n", " print(a)\n", " a -= 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Data structures" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lists are mutable, i.e. we can change the objects they store." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 2, 'hello', 3.2]\n", "[1, 2, 'world', 3.2]\n" ] } ], "source": [ "a = [1, 2, 'hello', 3.2]\n", "print(a)\n", "a[2] = 'world'\n", "print(a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tuples are not mutable." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1, 2, 'hello')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(1, 2, 'hello')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sets contain unique values." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{1, 2, 3, 4}\n", "{2, 4}\n" ] } ], "source": [ "a = {1, 2, 3, 3, 4}\n", "print(a)\n", "print(a.intersection({2, 4, 6}))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dictionaries map keys to values." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = {'one': 1, 'two': 2, 'three': 3}\n", "a['two']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Functions" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def add(a, b):\n", " return a + b\n", "\n", "add(1, 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Classes" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "30" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class A:\n", " d = 10\n", " \n", " def add(self, c):\n", " return self.d + c\n", "\n", "a = A()\n", "a.add(20)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "30\n", "-10\n" ] } ], "source": [ "class B(A):\n", " def sub(self, c):\n", " return self.d - c\n", "\n", "b = B()\n", "print(b.add(20))\n", "print(b.sub(20))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Dynamic typing" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'abc'" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = 1\n", "x = 'abc'\n", "x" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'hello'" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "add('hel', 'lo')" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 2, 3, 4, 5]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "add([1, 2], [3, 4, 5])" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "130\n", "120 items\n" ] } ], "source": [ "print(int('120') + 10)\n", "print(str(120) + ' items')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## 3 Jupyter notebooks\n", "\n", "Jupyter notebooks allow to mix text, math, code, and results (numerical or figures) in a **single document**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Markdown text (and Latex math)\n", "\n", "A list:\n", "* item\n", "* item\n", "\n", "Text in a paragraph. Text can be *italic*, **bold**, `verbatim`. We can define [hyperlinks](https://github.com/mdeff/ntds_2017).\n", "\n", "A numbered list:\n", "1. item\n", "1. item\n", "\n", "Some inline math: $x = \\frac12$\n", "\n", "Some display math:\n", "$$f(x) = \\frac{e^{-x}}{4}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code and results" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6.0" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "20 / 100 * 30" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Inline figures" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvWmwJNd1Jvbd3Gp5S+9oNLqxNECABLiCAsDVWqzFlCyJ\n2myLHo+kGWko2dZ4JjThGE3EjMKhscZjjWxHzIjSaPFIHpoWrZAVJCVTIoeiKBoSSSwEuGBvdAON\nbqDRr7e3V1Uu1z9unps3b96bmVWZVe/16/oiEOj3Xr18WZWZ5373O985h3HOMcccc8wxx96Cs9Mn\nMMccc8wxR/uYB/c55phjjj2IeXCfY4455tiDmAf3OeaYY449iHlwn2OOOebYg5gH9znmmGOOPYh5\ncJ9jjjnm2IOYB/c55phjjj2IeXCfY4455tiD8HbqDx8+fJjfcccdO/Xn55hjjjmuSzz++OOXOOdH\nql63Y8H9jjvuwGOPPbZTf36OOeaY47oEY+zlOq+byzJzzDHHHHsQ8+A+xxxzzLEHMQ/uc8wxxxx7\nEPPgPsccc8yxB1EZ3Blj/44xdpEx9k3Lzxlj7F8zxk4xxr7OGHtn+6c5xxxzzDHHOKjD3H8fwAdK\nfv69AO5O//swgN9sflpzzDHHHHM0QWVw55x/EcCVkpd8EMC/5wJfBrCfMXasrROcY4455phjfLSh\nuR8H8Iry9bn0e3M0xCefPI+L64OdPo055pjjOkQbwZ0ZvmcczMoY+zBj7DHG2GMrKyst/Om9i7OX\nt/APPv4k/vVfvLDTpzLHlDGMYnzHr30Bf/7NCzt9KnPsIbQR3M8BuFX5+gSAV00v5Jz/Nuf8Ac75\nA0eOVFbP3tD4ypnLAIA/+8YFRHGyw2czxzSxPohw5tImfv9vzuz0qcyxh9BGcP8UgJ9IXTPvBrDK\nOX+thePe0PjKGZHmuLw5wpdPl6U85qiD5y6sYxDGpa/5xrlVvLiyMaMzyjCKxOL9lTNX8Nrq9sz/\n/k7h0sYQT7+6ttOnsWdRxwr5BwC+BOCNjLFzjLGfZoz9HGPs59KXfBrAaQCnAPwOgP9mamd7A+GR\nM1fwrfccwULg4k++ZtwIzVETwyjGD/z6w/jYV86Wvu4X//jr+NU/f3ZGZ5UhTHdmnAOfevLGuda/\n8Zcv4u/+/qM7fRp7FpWNwzjnH6r4OQfw37Z2RnPgtdVtnL2yhZ987x042Pfx509dwD//obcg8OY1\nZ5NgFCUYRQnOXy1nxRvDCKvb4YzOKkOoyG6fePJV/Oy33TXzc9gJXNsaYX0w+8/7RsE8WuxCPJJK\nMu86eRDf/7ZbsLod4q9PXdrhs7o+cGljWPhenIj8/pXN4s9UDMIYW6Ny6WYaGEXi/N571yE889oa\nnn99febnsBPYDmMMo3k+aVqYB/cdRhQn+M0vvIjVrYzBfPn0FSx1PNx7bBn/0T2HsdT18Cdfv3G2\n65Pi3NUtPPQrn8OjL+VzFFEa3C9vjkp/fxAm2BxGUzs/G4i5//D9x+E6DJ944vzMz2EnsB3GiBIu\nF9852sU8uO8wnr2wjv/5z5/Fv/pspvU+cuYyHrjjAFyHoeO5+E/efDP+w1OvVyYEb3S8vjZEwoGL\na3mGTsHj0kZVcN8Z5k7B/di+Ht7/hsP45JOvIrkBAt52+lmP5ux9KpgH9x0GbUv/4JFXcHplAyvr\nQ7y4sol33XlIvuYH3n4L1ocRvvj8vDagDMN08YuSfLCQzN0g2RA45xhGO8PcKbj5LsMP3X8Lzl/b\nxuNnr878PGYNIivz4D4dzIP7DoNYZZxw/KvPPCclhYdOHpSvee9dhxB4Dh5/ee8/8E0wiESw0Lf5\ncUya+8jKiGmR3RrFEB6B2WGUMnffc/A9990MxnBD5FholzSMp7db+rHf/Bt86gZ1m82Dewt49KUr\n+I0vnJrod6lA6X1vOIQ/++YF/O8Pn0HPd/HW4/vka3zXwXLXw/oOsMrrCdsj8VlGWgAnJh8lHGsW\nd8ZAsn4ug+2sEKaLT+A6WOh46HgOtm8ACY7e4zCczucdxgkee/kqnnp1dSrH3+2YB/cW8CdfexUf\n+fxkwT1MA9HPfdtdOLzYweMvX8W33H4Avpu/NAsdDxuDeXAvAwVonbmrwd6muw+UALM1nG1gJc2d\nrK4dz51awNtNkLLMlBbTG132mQf3FjCKEhmkxwUx9+Wuj3/wXXcDEBZIHQuBtyN6cBm2d0DCKAPJ\nMgXmHmdfX7E4ZtRk9eZotp8zBXda0Duec0NYBCmhOq2FjBbseXCfY2KMoiRXiDIOaEvuuQw//uCt\n+McfeBP+i4duLbxuseNhYxcF961RhId+5XP4s13U7Ioe5li7FiqTtyVVaWEAMHPHjJpQBQSDH0Z7\nW5bhnGNrztynisoK1TkyvPD6OoZRgrcoejgADOMEnIsg4jqmJpl2kB7suw5818F//e3m6sTFrrer\n2v+ubodYH0Z46fLmTp+KhKqbq1DdM5eszD17zax3SKrmDtwYzH0YiWcGyFxObWPass9ux5y5j4F/\n+WfP4pc+WZw2SMxgEvZOkoFXsSgsdDxszlgLLgNtpXdTHsAW3Gsx93Anmbv4e5ks4+55tql+3tMK\nvts3OHOfB/cxsDmKjA8+BfVJblJdb7VhsePuKlmGmOVuygPUSahetiRUVaa8U8zdp4Sqv/eZu+oG\nmlbwpd3YpJLp9Y55cB8DYcyNNyJ9T03c1QUFHs+tYO67LKFKmvDGLtpN0MOsX4ccc7f0l9lR5k5u\nmXSBD1xnalLFbsG28hlPayGTVss9vlDaMA/uYyCME+ON0kyWEb/jOeWXYqHjYWsUT7UPxzjOl93N\n3M0Vqr7LSqyQ9dwyoyhpfQeV7d7EAt/x3T0fkNQFtClzTxKOX//8CwUn1I2eUJ0H9zEwihKj9ELf\nm+Qmksy9QnNf7Ijc97Rsel968TIe+hd/gdfX6iVtpea+m4I77aAKmrv4/k1LXasVcljT5/7rn38B\nH/z1h5ueag5hnMB3GRhLg/sNkFBVF9OmzqCzV7bwa599Hp975nXj35gnVOeoxChOymWZCVh1FNeU\nZSi4TymYvnR5EyvrQ3zyyXodCenB2U3Bnbb6Bc09/YyPLndqWSHLFtBXVwd4cWWzVTYYxjyXc+l4\njkyy7lW0qbmTG2pbk9PmzH2O2ghtwT2eXJYJFStkGRY6LoDpBXc69088Ua8Px26UZYgBhhbN/ehy\nF1e3QuNM2rqaO13/ujucOhhFiRbc974s06bmTtdbv243etfJeXAfA1ZZJmogy9S0QpIsM60EJp37\n0zWHRWQJ1d0T3Ks096PLXQDAla2iNEPJ2H09v3TBmkpwj/PBPbgBZJntsL3gTou33o+HZLq5LDNH\nJcJYDBbQt/3NZBnxu1XFT4tTlmXo3BlDrWER9EDuruBe3jjspuUOALMdchDG8ByG5Z5XztzT6/Xa\nanvBPYwSdLy8LHMjuWWaMmvadW5rctqcuc9RG6GFoTeTZXgumWbDgmTuU5Jl0vf03rsO1RoWQcFn\ncxjtmv4yVp87ae5Lgrmbg3uCru9WWk5px3KhzeCeJlQJN5rPvel7pcVcX5QHUqbb25+lDfPgPgaG\nFldMUytklQ0SmD5zp8ZnP/YtJ3D+2jYeq+gdTw9kwvOl+zuJ7YoKVcncDV73QRSj64uWu1VWSKBl\n5l5IqLoYxUmri+YXn1/BT/3eI7tmwhNdK99lzROqsUWWocZke3yhtGFPBvdRlODXP/9Cq2PpOOcy\neOvDBULJ3Md/cMKYVzplgOm7ZcI4QeCKYRE938UnKlwz6gOzPtwdE+xl4zBLhSpp7jZZpuO56Adu\naZsHCkQX1rZbOWegqLl3PAecT3Y/2fDZpy/gC8+tyGZdOw0KvEtdH6OGwzrsbpl5V8g9hyfOXsWv\nffZ5PHLmSvWLayJKuNLoKLtZkoTLhzCcJKGaJJVOGWD6CdUwSuC5DAsdD9/z5qP49DdeK30oVG/y\nbul5M6xg7gcXArgOMzL3YZgI5h542Cph7sMpMPdRlMjWAwCk/t5mZ8gXL4oGb7tlDu/WKEbPd9H1\nnMYtfyObW0bxue8W6XCW2JPBnR7ANrdjquQysvxbn91ZB1HMK50yAND1HTgM2JgSS46STBr47vuO\n4tpWWOqaGe5gF0UbZD93TR7LKlQdHFwIrMy967vod2oy95Y190DV3GVwb+/+PX1pA8DuCe7bYYx+\n4CLwnMZuFrq+Np8755OZHa537MngHlq08UbHjLKbQz1uPtBP1lumTnBnjE21M6QqDSx1fQDlwSUn\nyzTsDPlHj5/DL//J042OEcWJ3EHZKlQ9h+HQQmBsQSA0d7c2c7+4PmytFUQYJ3IKEyA0d6C9+3d9\nEOL1NbFbmSS4c87x0S+/jKuW6t5JsJ0upkErzD2Rx9T/BuFGlGb2ZHCXvvMWB++qOnsuuCv/nkiW\niRN4NWQZYLoDO8Ioc2zQ/8sSxLleLA3P6a+eX8H/+43y4inOeWlgGiifvU1zdx2Gw4sdc0I1lWX6\nHRebFVZIh4m/cclS7TouRnpC1W+XuZ+5lPXcnyT5fWFtgH/2iW/iT7/xWivnI84jRi9wZfK4CTK3\nTP4+VBeNeXDfI2jS68UGNbmVY+vK35hElgmTeglVgHq6T8/nTgGG/l8W3HMtchv2uxmGcWFLreMz\nT13AA//j5yoHXAMG5q4UipXKMp5g7mWTtUZRglv29wC0p7uHhQrVdjX3F1c25L8nYe6kZbfZu387\n1dzbmDplTagqx70RC5n2ZnCfhuZuY+tNZZk4gV/DCgmkQ7KnFNxHcSIXGQo0ZS2Mh1GM/X0h3zQ9\np2GUFLbUOr5+bhUbwwgvXTJPflKDlq1C1XUYDi0Gxv4yUnMPhCRiK2QaRjFuP9QHAFxYbccxQ04l\nAkk0bc0WPb1Sj7lHcYKPfumlQs6CzqNNYrE1IubutFDEZLZCtlkodT1iTwZ3uthtXlAbW28uy9Rn\n7ktTZO5hlAUYkmXK2M4wSnBoIQDQnNENoxhhzEt3CueviUB67qo5oKpBy9TP3XNEodjhxQ42R3GB\nwQ5CUSVKllOb7j6KEtx2cAFAe8x9pBcxpZp7W+SkLnN/9KWr+GeffAqPvJR3mQ2m0GpiEGbMvelz\nGpcUMVE+a87c9wikH73N4K4ca2j59+SyTF3mXu7kaAKTLFPK3MMEB/oBGGvO6OgzLGPv569ScN8y\n/jzP3IuaO7V3oAXpspYcHEYxOgpzN33OUZwg4cDNy10EntOaY8Ymy7RFTl68uInbDordxqBEAiF5\nxOY6aZNYbFNwd5tX40bK865e++1RguWe2F3OmfseQZNGXtZj1rBCTlJ0ImSZ+pr71BKqBlmmXHPP\n3CVNvfe07R+U6O7E3M9bmbv4XYdl1bYEUQWcBvdF6i8z1H4/87kDZuZO17rjO7h5udsic+eaz52Y\ne/OFPE44zlzexJtvWQZQJctw42tkB9AWZwlsU0LVbz4vVs2x5NoahDGWu+J6zoO7BYyxDzDGnmOM\nnWKM/aLh57cxxv6SMfYEY+zrjLHva/9U60MmVFvcitk0d9u/62IcWWaxojS+CdS2s3W2ssO02ZVw\n8DTz3lMQs+ncYZzILoxVssxCxzNq7pK5L6bMfaPI3MnnDpiZOy1Cgevg5n3d9pi7TXNvISCdv7qN\nUZTgvmMU3O0LBu089ddQcVibBXTbqebeDnNX2Xp2jtthjH3E3OeyTBGMMRfARwB8L4D7AHyIMXaf\n9rJ/CuAPOef3A/hxAL/R9omOA5lQbbHnSc4tY0moTibL1KtQBVLmPphOo64o4dkMT69OQjVBx3da\nkYooMNuC+4XVAYic2YO7+N3FjmfW3NP3RrKMamOM0ypjcsuIc7Ez98BzcGxfFxdaavtb9Lm355Z5\nMS1eevPx6uBO97gu3QymkFAlt0wbTdJC5bmj4B7GCaKEz2WZCjwE4BTn/DTnfATg4wA+qL2GA1hO\n/70PQL2JD1OCLGJq0ec+yvnczVn4yWSZekVMQBq4Ej6VRkiTyDIdz23Fe1+luVNAv/umRZy/tm1c\n3CggLXa8cs2dZBlFc6eA100XKwBGrztd646XMfc2FlpTV0igHXLy4kUR3O87tg9AVXAn5p7/u21r\n7pzznObedOpUrDx3W6E4Rzrn5e48uJfhOIBXlK/Ppd9T8T8A+K8YY+cAfBrA32/l7CbEVDT3qNrn\nPukMVbeuFTKY3jSmnCxTo4hJ9mJpwcFjS+QRXk319odOHsTGMMLqdlEGot9dMAT3OMk094W05P2K\nMbi76BNzN7wnWoQCz8Gx5S5GcWKdyVoX1JtI7woJtCMlnL60if19H0eXO2CsruauyTIta+6jNDEt\nNPc2mHtRlqH3udwT1/NG7AxZJ6qYaKVOVz4E4Pc55ycAfB+AjzLGCsdmjH2YMfYYY+yxlZWV8c+2\nJqbSfkB50HKVb417y+RZWxmyzpDtO2Zysoxk7hWyzIyY+3kluANmaYYqVGl3o0Jl7owxLHd9rCkL\nBP2umlCtw9yB5nZI05jFTos+9xcvbuCuI4tgjKHrueXMPSE50+aWaee+G4zE3+n5Ljqu07ixl+rL\nz4J7ytznmnspzgG4Vfn6BIqyy08D+EMA4Jx/CUAXwGH9QJzz3+acP8A5f+DIkSOTnXENTCOhausn\nozICtf9MXURjWCEXpziwY1xZRrTIdRoHd865/Gxt3vLzV7dxeLGDu44sAjAHdwpICx3XwNzz0tdy\n18v1w1GZe4+KmIzMXbwu8BzcvE9UqTZNqtICak6otqC5r2ziriPCl98L3FIrpGTuGikiFtzWfUfS\nSS/dRTVtb6xe7y09uKeyzCQ1KNc76kSVRwHczRg7yRgLIBKmn9JecxbAdwIAY+xeiOA+PWpeAZJQ\npsXcTQnVwHVyiZ1xjlvXCrnYJVbZfnCPFGnAdRgYK3ZXJHDOpVumqSyjLo42Vnn+2jaOH+jhxAER\nUE1e90GYyTL6oqQydwBY6vm5Ngb0ux1PBJvAdSqYu4tjxNwbJlVDReoheA6Dw5pLCavbIS5tDHFn\nuih2PadUlsk0d12WycbVtTHViNh1z3dbkaDUhYF2f/T/uVumBJzzCMDPA/gMgGcgXDFPMcZ+mTH2\ng+nL/hGAv8cY+xqAPwDwU3wHGyjThZxWy9+hQWdf6LiTJ1THlGWmwdz1gRG+61jbKWR+bxeL3Wad\nKtXP0uaWOX9tGyf297Cv52MhcKVMo2IQJnAdhp5vYO4xz027KjL3TJYBgH7HrXTLHF7swHVY4xYE\ndF+pnz1jDB3PbXz/nk4rU2nH0/UrZBmL5j5oub3ztrJTylotTH4PxQa3TKa537gJVa/Oizjnn4ZI\nlKrf+yXl308DeF+7pzY5iA21GdzVZJopobrQ8SYe1jGuLDONhKru2PAdZmVpQ0V7BjyM4kS6Z8aF\nKj2YgnuScJy/to3vvu8oGGM4caBvlGW2wxhdz4HvOqWaOwAsdT2ZpAWywNL1xfmLOap25h64DlyH\n4ehSBxdWm3WGHMngnl/gO37zsnzqKXNnKst0KoJ7JJm7Jsso12hjGGF/P2h0XnQO1FsGaMjc0+sb\nJ1wuygXmfgMG971ZoTrFrpCLHc/okFkIvMl87jEfq0IVmE5wjzTHhu85VlmGEn0dz1EcPJMxLzVp\naAo8lzaHGEUJjqedGE8c6JkTqmnjL3rIVcRJfuFa6vh55h7lg3s/MDP3oSah3Lyv23jc3sggywDi\ns22quZ+5tAnXYbL1QNevkGUSG3NX2zs3zwPQIk7DOoBmz2oUJ7ISlcYIZpp7WqE6l2X2BqbhlqFj\nFYJ7nIAxoBu4E3eFrM3cUydH0+EYJowjy1DQ6Xhu4wWnirlTuwEK7scP9HDeqLkn6PouPIcVFlkT\nc89r7nlZxtbmYZTbsQDH9vWau2XibEqUijaGWFzZGmF/z5fHrnTLEHPXnht1B9yGJKhq7m1U40YJ\nRz/whNVTS6jWGTyzV7EngztdyFbbD6RDGnpaL4xR2k0xcNlEssx4/dzrs+TLG0OjNm09j0lkGd/B\nUrfZgqMySZMVkt7D8QMZc18bFL3ugyhGx3eMzD3SNfeej0GYFBKI3VRWWui4xoVGZ9lHl5u3IDBp\n7gAqNfc//+YFfP7Z10uPvTmMZBIeSJl7qVvGklAN1QW4Xc29jalTYtcp8i26W6YfuPBdNpdl9gqy\nrpDt+cGpRLyguad9QYTWO6HPvWYRk+c66HhOLbfMr3z6GfzsRx+rddw4Hf49kSzTaebgUQOYqYhJ\nMncZ3Pu572fnJCoePYchjHnONx0bmDuQLUgZcydZxuwAGsb54H5wwcfWKG50n420YxKqZJl/+1cv\n4ne+eKb02JvDSPr2gdQKWeqWEZ9Z0eeeoOe3V0Cnau5t2D6pvUQ/cKUsQ/dSV1bBzoP7nsA0KlSH\naQWn3n96FImg75XIGDYkCUfCkQs8VajrK7+6OcLZy+b2uDpoMVR3EL7rWN0/Upbx3cYOHvWhNgb3\na9tY6nrSr0zyjL4r2Zaau7ilVfIuktZqcBfHWk+lGbX9ACCqWE3MnYJexxWBbrGFojLa7RUSql55\n5WaYJrHLsD6I5DkC1bJM1jhM97nHsuFaG83D6Dr3fRdtDAMP066fvcDNZJkoK5QShKz9wr/djj0Z\n3KdVoSrkF3Nwn0SWIVdH3QpVoP6ovVGcYG0Q1RqrJtmjwty9mm6ZpcaauzgWY1kyTMX5q9syoAOw\net2pZS8FcXUXVcnclRwCAPQ75iHZastfAFhMF4kmw0pMRUx0LtXBvfx+2xzlZRnhlik5ZmRuHDaM\nEtmTpw3mvmVg7o1kmVTaVGUZWkA66W57kgLD6x17MrhPg7mrssxQl2W8yWQZen3dhCowRnBP3/vK\nerVVLzIk9QLPsQZ3tehHMvcJAxxJPPt6PrYNAfX8tW0Z0AHg4EKAnu8WHDM0A5UqUVXdPdIqVCm4\nr0nmnk+ULgTmTpeqFdJ0nElAjNKYUC0N7tUN5DaHsbw+ALllqtsPmNwycupWG7KMGnjddhKqnuOg\nF3iZWyYSFdSOwwpS6o2CPRnc5Zi9ltsPWGUZV8gy4xYx0evrdoUExKi9Og8YnePFGsHdJMuQdm2C\nytzbkmUO9ANzQlVj7oyx1DFjCO6pFRLID3DQmTtJPGvb4pyHYYwgDQSA0Ny3w7iQmB1FYvtPr1tq\noaiMqqmLCVWntLBnFNWVZbLag6oiJtuwjkEkhl64DmutiKnnu6Lfjd+OFdJzGPq+KwnCYBTLHMpc\nc99DoKAexhxJ0s52LIx5llBVHqowtRBOkpGPLE6JMtTtnz6UzL3azTGKiuchNPdyWUY02mroc48y\n5q7r3KvbIdaHkUymEk4c6OHcNZMsozD3WGfuaoVqUXPvKglNciXpi80wyvddJ8mjmSxDCVW9iMkt\nJSdhnFRaJTeHRc09Srg1UW4f1pGkU7fc1oI7jTMM3ObzYkmW6QeuvGZqEjhoodr3esTeDO6WJl9N\nQAnVjjY5hh74YCJZJmXuU9LcgXrMnc5Db15lDe6KLOO5Dnq+O/E0JjrWgb5fGLNH7PyW/fngfnx/\nsZBJMHcHLs1/LWHuJrcMsTwA1ra/Iz24t8Dcs95E+ereToXPvUpzjxPRM12XZYCij51Au4hhlORI\nEe2KRDK/jYRq9nl3WmLuvuugqyTCt9P7AShWld8o2JPBnTzpQHvFCyKhykrcMnYZo+yYAGpbIQER\nUNbHkWXWpivLAFT004y57+8HhYSq9Ljv15l7H9e2wlxQpQDkOcWEaqT0cwcyxq0mVNXgbhvYMUqb\npRWO00Jw9zXmXk9zt3/m9NmozJ06XtqkGfUzyzV0i2jqVvPe/QCwHUbyXIhQNBnYQUVqQpbJfO5y\nAWlhIMj1iD0Z3EdRIm/qtrS2Mp97J02oju2WiafI3KXmXi3LmApp6sgy5C5Z7Ey+XadjHegHBSsk\nVaLqsgx9rfaHGUTCLSM1d2VhiuM8c/fT3UZOlvGz907MXX9PlDwn6PLOJBhZKlSrfO6jlLnb+vNt\nGoI7FWlZg3ucZ+uAsOuOokSMIGxphi+N2APamRdLRWqqLLOtBHffmxcx7QkkCUeU8Cy4t7QdkwlV\nkxUy/f64LX8ndctsjeLKXAK97zpuGZMdrzy4k8+dLIGTM7phGIMxMTFnGCW5JOaljREcBhxe6OR+\n50hqy6M5qGEsfq/nu9JWWnDLaAvoci/rDDmM8rJMNke12PpW/Yw6ngPPYY00d1O+QxzbrhNzzhHG\nSWkfdLoeqixD18tmh1SvN9khVfvnYmvMPZbMXTYOa6S5i+pqVZYZqpq7O5dl9gToItKWuUkrURWU\nONVlGWL0k8kyKWsbq4iJJIPyh6ypW8Z3WaG7IoG0YAp0C0E9qch4rFTq6Bskg9XtEMs9X7pTCIcX\naci1GHGnlrNTEZOuuXua9LXU9RUrZCxZLSBa/gLFz1hIcNnrGGNY7DYbVqLOA1DRSe8zEzOnimLA\nXtlJ1yPffqCcueeCe5hPrgrm3nwYOgBsK4HXc53GveujmGQZ0feJ8g2q5j73ue8B0A260DZzV9wy\nUZK5cIjR+66DOBnPnUPscpwK1bqj9iYJ7gVZxvLAURKZgm4TRkfj+noGtrw2CGXLVhVyyHXK3KXv\n3jf73MM4KXzGS0pP90GYSFYLKMx9qDP3vOYOpBXDTdwytgpVSjQa7l+VRNiColGWqQjuUVKUZdTW\nDLaGauNiexTJ4A6IXUqT5zRKREdTIgjbYYyBsjsIGh7/esWeC+5q90b16+bHFVtyWVGnVMFSEROA\nsaQZW9OoMtRxaJA05TARAHW/dvE8irpvWTuFYVogIs+piSyTHosedlV3X90Opa6tYn/Ph+swXE6Z\nO+0kup6iuWsVqnotwVLX1zR31S1TxtyLwb1pQtVhRWmurLjHNuZRhZRlAlVzr5Jlss+JgnvWAVTM\nl21Fc1cCL0AdMBskVNPFW45IHEVpf/+5z31PgQIV2d3aS6iKznOURFQ7T4rgznJ/vw4msULWGdhB\nD/+xfT0kPGO4NpjYY+AWW+cSiG0TmjC6YcqaVdZFWN02M3fHYTi4EODyZp65dy3MPUo4XNfO3Aua\ne8dihYyBIVl3AAAgAElEQVSLzH1ZWSQmwUjro0/opOdjskPmh7VbZJn0vS2NIctEcSJlnEyWyTP3\nVjT3UVII7s2ZO8sRhEGYoBtkSdu5z30PYFrMXXXLqMcdRllXSMA+d9R2TAAFPbgMdfqn041MFsIq\naYaCeF1ZhoZjE5oMyR6kE5zowVR7uqxth1jumYeFHVoIpOZOAainVKiqi6yJuS93faxJWSZfxJQx\n92Ixj66Nt6G568cEskSjSVO3jXxUYUqoyuBu0enDOJGLAb1Gbaq2mI6SbNptdRDGmizTLPhSkVpf\nMvc4l0fpeHMr5J7ASNPch21p7koRk/p3QsUKqX6/DrKeLuMz97KAQgsP9WSpcsyMDOfhuY6czKNj\nGBU16kGYjLWwyWOF4vPrGZl7ZGTuAHB4sSPdMts55i7Oi5g75zz1QeuM28snVLVg4zqs0DxsFOff\nN9Bccx9FCXzPHtxN5ERNDlqDe7owLSjtB3qSudtlmaVOOtwi1IO7WzvfUwbOuWw/QGjKrENNlsk0\n93kR056CztybTrORx7Uw9yyhOoksM5kVEqgI7nE+uFd53TNZRqlQdVlqtyu+HxGQs4eTtvI6060D\n3S1DmjvnPGXu5uB+aDGQmrvKLvWukLQ+FTV3T/ZnoY6SBMZEKbsexMj2qqIN5m5a3HX5L3ceNWWZ\nwHVy10lWqJYUMemyjKmPUBNpZkS21UBdTN1GO+xYk2XWBxGihM81950+gbZBW9Zp+NxzCdVIMNWE\nI5dQHU+WGb9xWDaNqZq5U7FPVZWqSZbxXAecw5iMLSRU03OaJMgN0+pQqZfKRF6CUZwYE6oAcGih\nU3DLmDR3em9FtwwVIEWFClVA7EYKzN2QUF3qeI3GHurjDQllfc7ryjIqawcyHb+siImaoQ0MzF3m\nexokVQejTMMnNGXuwgrpyOKzK2kuhhYQ33WQ8PGezb2APRfcdZ97m5o7FTHRcdUpOsS+bYU/Jpha\n7VYhk2XKOwaK1/rY1/OxUpFQHRkqZeViZQzu+cRiE0ZHx+opeikAOUbPKsssBdgcxSJ5pjQy07tC\nUpA3MXcAuLI5AucoBPd+xy1q7lFcDO5dUXw16X0WxrxcczcE4jrBfWMY5fR2oJq5j3IJ1fzQi67f\nDnOnxbuvMveG7QGoiInuoSub4t6hxYyu2bh1KNc79lxwDzVZpo3gHqcTk1RZZhjFuf7eQRoYR2MU\nS2SyTH3m3vNdOKwecw88BzctdSqZe6i8DwJJBaadj9DcFVmmQQMtknh0K2RlcE+rVi9vDjXmnmru\nMTF3cy0B7QgoH2Hyr5sah6kyB70OmLx5WGjYDQCZz72auZuD4obWERIQ15cxu+YexVxJqOaLmDqe\nq+zQJg/EFNxzCVV/ctmEppmJfu7imFc3R7m/0cZAkOsRey64D3VZxnLzc87xv3z2OXzz/GrlMdUS\ncfVGUYNoxnTHl2XGaRzGGMNCUK7z0gCIwHNwZKlTqbnb3DIAjI6ZocEtA0zW+naYDramLTU9/Gtp\ncC/T3AFRpaoG9wJzt0hfFMTos+nozN2kuccGn3vDaUyhVZaxD45WCYQtp6S3+wXEvVM2ai9KEsnO\nB4o8BiB3jZowd5K6crKMO7ksEyoEqZ8e88rWKP0bWUIVAIY32Ki9PRfcdeZuu2mGUYJ/8/lT+HcP\nlw8ZBjL26qddIQGxiDSVZWLSg8dg7kB187ChwsRvWupUWiHDMWWZkcUX3kSWocWiriyjVqnmmLuW\nUJXM3dXllDxz72pBW19Ak4QbJRS6z9YnbHk8siZUm2nuJlkGSKcxGQiP6FfD0UmlR5lQNWjuTRLI\n6nBsQhPmrspuUpbZyDP3jjtn7nsCdTV3uskePnXJ2lmPQA+TOhYsx9wVt8w4sswkvWUA5LrfmZCT\nZZa7uLg+LH2PcmfiGGQZE3PXNPcmD73wzLtwHOF2oOtCNkVrcE/Hvl3eGGWFNkqFqp5QtTF3Gdz1\nhKrWAVFdyE3HmZS5k9tKhyr/6agty3SLwb1nmaNKn5fvOugo4/jyvWVa0NzThKqquTdi7pKYCILg\nMJW5z2WZPQW68fuBB8bsbhkKjhfXhzh1caP0mKoso/qP1Qc+mECWoez9OFZIQLAevT2u6Xw7qeY+\nihJZsGM8jyQ/Pg6oSqiaZZkmzB0QDzxt21e3UlnGEKAA4XMHgEup5u45DJ7ryAWKktWRRZbRNXc9\nuOstFfQe9gR98Me4CA1Sj/g7ditkXbfMYmBi7mZZRg2SXd+Vi8YwSsCYWOzrOLWqYNLc9WZ840A+\nQw4DY4IgkOZeCO5TcMs8e2ENP/vRx2oNop819l5wT5kzBVzbTaMGx4dPXSo/phrETZq7O6FbZoL2\nAwByU95NUBedI0siCJaN2wvjYktcv+T9DMJi+wFgUitkVhjU9V3J7FbT+aY2zb0XiLFvxNwpWJDE\nFetuGe39EaslJ1HXUJykBuyRJbg3Tqja2g+UsE21549Nc98YmJl7x8LcQ5l3Yekg7Syh2vXEvNOO\nJ1oqT1LPQFALzuQ5aY29PvPUBTz4K5+rFTD169sLPFzVNfcpyjKPnrmCzzz1Or569mrrx26KPRfc\nh5o+bmM26g3+1xXB3ZhQjfWEahNZZgLmXkeWcbPgXuaYMSX1vFJZJs5VatL7LzsnE6K0oIWKTYTc\nJILk2iBEP3BLbaKH0irV7TCWCVFPS6hmbpn8cVyHYbHj2WWZQFgciRnaZJmm05is7QekW8bAsiOV\nuRd/niQcm6PYrrkbrpO6w1GTrnqBV9P+MjTAuqxx2FPnV7GyPsSVlIGXIdSsrv3AxdV01zcLtwzF\nlydfudb6sZtizwV3uvE7rlvas4IC0YkDPXz59JVSxp0lVO0+92ayzASaew1ZRlghuwDK+8uYAkxg\nkWXiNLGoM9iul7HuulCdGEBebrI1DVNBVapDpXd3prkn8nwBc6HYUteTn0vX0zX3/OBvCj7FIqZm\nbplRbG4/ILtCVjUOM9zfNK5wUStiAmB1y8hh7Z6Tk2701gxVTq0q0PXt55h7vj3A5TSo1/k7mRsq\nvYd8V15zOYlpisydPqcnz86D+9QhA7HHSmUZuijfde9RbAwjfP2c/eIQw+54jmSIqizjTyjL6Kyj\nLvqBh62wuv2ASKimzL1MlonqyzKZPJEPHN2K3YQJ+rg+VW6qFdwXBHNXK0yLzD11JFmC+7WU5Zlk\nGQDYSJmmnEikv++0cGrSzpC29gOeK45bprkzZmbutNAsdoqfn80tI58bx8nJMqbkeTPNXRxXZ+5h\nnM1CoLYSdfIYoVYroh63wNynoLnT9XnilWuVxoxZo1ZwZ4x9gDH2HGPsFGPsFy2v+c8ZY08zxp5i\njP1f7Z5mfagFOR3f3qSfGMR//KabwBjw8AuXrcfMyTJuUZbpTNryN05kImgcdP36zH2p46HrO6XN\nw8LELsvoPne1v7eKniVRVwb9WKrctGbp5a7iyFKAy5ujnHSgz1AtZ+7Z8U1uGSBLHqpSlwrGGJYa\n9Jcx9ash2Oaokua+GHhGZk/norcfACihWvwddZ5v13dzXSFzve4bTmOi66veP9LTnz6rV8Zg7pHG\n3FUXjhyQPUVZhu75lfUhXl2tnlc8S1QGd8aYC+AjAL4XwH0APsQYu097zd0A/gmA93HO3wzgH07h\nXGthFIvsvusQczffiHTzHtvXxVuP7yvV3UNFx6cgPrTIMuMmVMeVZIBqWUb1uTPG0kKmMlmm6N/O\nho/kFytdSiH0KhYc43mG+WP1NVnGlkwlHFro4MrmCFvKZB/d5WOrUAXyTpxCt8duPlGqLpg6mnSG\ntCVUgWzUXvF3MruvidmbpjARbIuw2sSu42ULwMBQjdxMlhHXSiU00vaZ/k3q01/nM9WrvPVWwurx\np8ncAeCJXZZUrcPcHwJwinN+mnM+AvBxAB/UXvP3AHyEc34VADjnF9s9zfoYpfoxY6zUYkVBpOu7\neN8bDuOrZ69at5tqEFePa3TLjMEOwjgZO5kKpJbBMLZuA3WWedNStzyhGiWFRSawvB8ZkKcgy3QV\nWWatpuYeJxyvrw0lS7Nr7sXPuYy561W3w4rgPnFC1eJzB+xDstVCPaMsUxLcrW4ZOSRduGUoxzDU\net0vBE1lmTjHroFiBWmmuVdLXbrVVR28TdbeabplhmGCQwsBOp6z63T3OpHlOIBXlK/Ppd9TcQ+A\nexhjf80Y+zJj7ANtneC4ULe55W6ZLLi//w2HESUcj5y5Yj0mkLHCTqrlqxZJ381rvXUQT8jce4EL\nzu0eZ6p6pJv7pooWBFGJLKMniO2yjDN2cB9oW/R+oBYxRdZBHQSqUj1/dVsuEC7TNPfYztxzU4r0\nhGpgkWUMwX2pa2fu565u4Ud/82+k91qHqaUBwXb/0mi+fmAO/pksY3bLlDUj8xwtoaox9+ZumaSw\nkKqySRQnMg9SR3PP7MR5WUbX9On4bWMQxVjsenjL8X14Ypc5ZuoEd1P00SOYB+BuAN8O4EMAfpcx\ntr9wIMY+zBh7jDH22MrKyrjnWgtqUUipz10pg/6W2w8gcB18xRLc1SBO/881DptwWEcYF4dI1EE2\ntcjS3U/TcW872McrV7ZLugHyQiFV9n7Msoz+gE6mueeZez/wsDWKEcUJNob2QR2Ew2mV6ijONHfH\nYXBYtc8dyJi7w4oDU3T/uq2IiV5raz/w1KtrePzlq3jBUignnErmBb5Mc/dT+cSkuZfJMqqenj8P\nVXN3ZOMwnbkvdtxGsszzr6/jcGrPJaitFsjGKN5H9f0kXT7SCines7pYT1WWSYfN3H/rfnzz/Oqu\nqoKtE1nOAbhV+foEgFcNr/kk5zzknJ8B8BxEsM+Bc/7bnPMHOOcPHDlyZNJzLoVazt3x7RNYyLbX\nTa1fBxZ8XNsysysZ3JUdgRj0kDH6rNHWeAnVcaYwEUzzRlXofccfvOMgRnFi9eKGUTHA+OMmVIMG\nCVW1iCmMZTVtZXBXgoSqtXqOU9stQ39XT2rr1ZiZW8Ys79iYOz3sem94IOs2apVlfMdqhQzSNgGl\nsoyhiKnriVF5em9zGSRdR/O5a1bIjliAJ3GGfP3cNXzj/Cp+9J35jb/K3ElvF++jhiyj5VToXGfJ\n3Lu+i3fcth/DKMGzF9Za/xuTok5wfxTA3Yyxk4yxAMCPA/iU9ppPAPgOAGCMHYaQaU63eaJ1EcYc\nvpdpbVYrZBTntHIx2d0eLAFIPzKN7VIfeDdljGP53CeWZdIOipahCYXgfvIgGAO+fNrsCDLJMrYu\nl5nmbvC5jxvcZU+YrIgJyGybVW4Z6i8D5HcSrsOy3jIlA1EoYavvQoDidKksj2F+rY3N0u+Zks36\nfaVDr9wkhKk33lbHUaa5y57u2u9RkPTdTJbhnBt790cJn6gXzMe+fBY938UP3Z8P7oHC3Knpl/o+\nymCTZdRzljUDU9LcO56D+287AGB3FTNVBnfOeQTg5wF8BsAzAP6Qc/4UY+yXGWM/mL7sMwAuM8ae\nBvCXAP57zrndWzhF6Jp7WUJV9Tb3O26hf7c8pkw25eUePXHpu+PNapw4oVoly2g67r6ej/uOLeMr\npy05hTFkmYFk24aEatMipvSYr6WWsirmvr8fgGK2ei09h8ndVh23jN4REoAstc9kGXMRE1A+jYnu\nBxNxUIvjTOh4dubuu8yacN0cRnAdZtxlyCHZ2kJM50KyTMIFUdKZ+6R9hFa3Q3zya+fxwXfcUli0\nacEUzF0Ed4fV1NwVJxtg0dwncLLVBTH3W/Z1cWSpgyd2UVK1PGOVgnP+aQCf1r73S8q/OYBfSP/b\nUahjy6oSqjn/buBZx4fpQVx1y6gNt3zXGVOWmTyhCtTX3AHg3Xcewv/55ZfTpl/5wFwmy+jbdxtz\nb8vnDgCvU3Dvlwd312E4uBDg0sYody09lxU0d1MAVWUZExYUi6OttwxArpXEOIYvY+7FeyuT+8z3\nQOA52BwWpcJRRJq7RZYZiF7upvqJniW4R0orDLkAGObLUvDcHMY4tGg8bSP++KvnMAgT/K133V74\nGS3uoyiRoxNv2d+rxdzD2CzLqJq74zB4DpuiW0a46O6/df/1xdyvN4yUbWRV+wF1dV8I7M24pM+d\n5J5UltE7+vkuG1OWSYwWvSr0KjT3YZQg0AL4u04exDBK8LVXisNJymQZne3YEou9VC8fR4s1VagC\nwIW1erIMILzugC7L1NXcxfFtbhXV9lfllgHMMkKmudsdKra/b7t/c5q7sYgpNkoyQBZIdTuk2gpD\nzlodxYX5spM0SuOc42NfOYu3n9iHt57YV/h5JpvEuLI5AmOiLUgdn7u+eJuYO9Cs82QZBlHW1+gd\nt+3HmUubVmfUrLHngrvaBKu0iCmMc0m4fonFSx9DR/2n9V7cnuuM134g5s0SqjVlGQB4qER3Dw2y\njKxQLbhlzLJML3Bl35m6GBqskABwoaYsA4hZqkA+uHsOkz1HqnrL6L+rQi3YKS1iKpnGVCbL0C5v\nbJ97eo+XyTKm6lTALsuEquaevse1QQTOUdDcxfupH9y/cuYKTl3cwN96d5G1A3nmfmlzhIP9APt6\nfk3NPb940z2kt5MgQtY2SHMHgDccEVuZ89e2W/87k2DPBXd1a1zafiDUpgmVMHe16hVQZBktiIrF\nZLwZquP2cgeAvi8eMLssE8vpM4T9/QBvunkZXzlTDO5ikdJkGWc85k6f5ThJVUrqqY3DAIW5V/jc\nAZW5Z+fjOqxmhapf+F0VCx1XBjHqa25aJMqmMZXJMnU0d1uFqu8xuyxjGLFHoOuk/x4RGD9tPwBk\n07BMU7fGYe4ff+QslrsefuBttxh/riY8r2yMcHAhwGLHr6m55zurktlAX7DLzBVNIBLOaRJXfra7\nww6554J7kblbNHc9oVpSeUc6PmmY9NANNW17XFkmjPnYTcMAoBuIv1nXLUN4950H8fjLVwufSZQU\nNXrSKQvBvURzB4qMsAx0LPrbUpZZHYhp9hZGrYJmqaoaq9Dc61SoVjD3ri+HQY9iwdBMOnbZNKbS\nhGpUHtwDS/DOfO5iB6lLYbYRe0CWPNaT32r7gSy4C3nBNAy9bkKVc46HT13Cd957tCCVEFSr4pVN\nEdzr9uuxtR8oBPcpyTJqR9LMr787BnfsueA+VAJb4Imsv54UBFLNPcdIXKt/N4x4jglLK6RmExtX\nlokTe1+RMujDpHXYqh7fdfIQBmFS6IBpGtYBiAfGKst4uixDQWOM4B5lE5SA7H29vjbAvp5fq6Ea\nTWTSrZB1mPtCOq1Lr04lLHbcnOZua/BVpkOXWSEzzd1WxGQuUqKWBR1fVCrr12hjGOWqb1VYZRll\n5CMFK9kxMyfLpMn8ms3DzlzaxKWNER6846D1NdnUqRiXNoc4vNiRklj1CMxiP3cABWIQeI6c9TAJ\nBmGMi2vFKu8cc1csnbsBey64q73Jg5IPe6AlVPuB8O+aZJxRHOe8yB3Ple0H8gnVMWWZODEGnSqM\nW6FKeOikeMD0SlzTsA4gdf8YZBlTRWdvAllmGOWlMTrG1a3qjpAE8rrrVkjZFVIZw6bDSQd2WGWZ\nwMv1ltGT1ISyUXtlRUxhlSzjmxOq1D/JxhQ3h5Fsn6BDdcKoyBUxabKMibnXlWUefUncaw+dPGB9\nTc7nnjL3xa6HOOHGPjgqYs3n3rNp7g1lmd/54ml8/795uPC31epovQHaTmMPBneeaz8AmCvTtgtD\nCOyMJIzyXRNVn3tecx9flpkkoUoeZmtC1SLLHFwI8KablwpJVds0oMAS3DtesaKzM4kso81iVRfb\nqo6QBBNzz1eopszd8jm/965DeNuJQqcMAPk+Kvq5qiibxlTmlpEN6co097gou2Q+dzN5KZNlMvks\n/zu59gPpImZi7osdD4HryLxIFR596SoO9H3cdcTum+xIqSjGta0w1dzteYz8eecTqvT+dOZuy1/U\nxStXt3BxfSh7zgPF2QZ66+KdRi2f+/UENTkos/DGOaBFtwwgXAAHlMpHIEtgEdQK1SZumUmtkIAI\nhKXM3RKIHrzjIP74q+dy3yuTZSJdlgnjQntcYELmHibW4F7HKQMAD915EP/lu27DO27NArRZczcH\n99/62w9Yj73YEbUPnPOCBKeibBoT3XtmK2QqhZRUqALFHQ65tExDtDnn2CyVZcgKqbtlVOYuXmNK\nqHqug3uPLZUOt1Hx6EtX8MAdB0slNlrcaME4vBjk8hg3LdmPn1khxfGXuh4cViQHYiDI5EGXPotB\nFEv5MGs+qGnuu2RY9h5k7kk95j4qjg8DzA/hUAviahGTnlAdb1jHZEVMgKhSHVdzB0SHyM1R1vQs\nSbhV+zdV3A5Cc5CbKKGqdRxUF9u6zH256+Nf/PBbc0y1ruZehcWuh4SLBatswaRpTKZeKKU+96ic\nudtkRdl+wC8Gk+0wRsLNHSEB+w4rN0PVJ+aeJlS19/22E/vxzfNrMrDacHFtgJcvb+GhEr0dEPKY\n7zJZmXxwoVNb/om0hPlS18fHfubd+JF3nsi9zm8oy9AuRr2Oep3GXHOfMlTvue3h4JwXEqp9rVGU\nilAL4mpXSF1zH2/Mnr2XdxXUeaM6dBePCtqh0O+qjE2HeD/FhKqeTKXzEcet//51qUMtmd9XwwZp\ng2fsLTP+56za/soWTMaYdWBHxtwns0ICBttiOlzFFEzK2v0CGcvUn4lIsft2Spg7ALz91v3YGEY4\nvWLudEl49CUxvOLBk+XBHRAB8tXUH67KMlWFTKEhp/Keuw4VrKBNfe70WWzngrvO3LM2CrsBey+4\nKw9h2cORcGgVqnbmbvKzhzHPOXOA8YN7NKEVEqD2uHYrpE1CkLmFdAarlAYMOwjfZcX2A5ZjT5pQ\nNXWXBOrLMiaozJ3kmUk+5kVlSPYwtC+YgJADyhOqdreMLe+SbfMNzD3tLQNowT09hyVLcBeDbIru\nnVHM4TvC6imZuy24p1WmXztXrHZW8ehLV9DzXbz5luXS1wEi+KqyTFkeQ0WccDgMsgWI9fgNmfsa\nBXfl/h5og2s6loVzp7CngjvnXDoJAHurz22plalumRLmbpBlAKHPF9oPjCHLmCpD60IdJq1CfgaW\n4N5TeoMAeZeEDptbxqS5T1TEFBZ3AdQUra5bxgTPcTLmnoik9bhzaoFswd8YCOZuet8E2zQmGdxL\nfmZ3y5gTdFmFalGWoetqY+6MsVxLX0IUZ9O4KKG6ahkefueRRSx2vErd/ZEzV3D/bftr7U47niOl\nj4MLQWkeQ0XdZ6ipz70Oc1fbKOwG7KngHiccnGcfsm2bpCdCgOxhMGujebcMPVQbg0jT3Mfb+ome\nLpMxd1v/9Ej7DHRkO5R8n3LTA+K5jmFYR7ksMxjL514MmN0WmLun7DjihE+ktwN521+Zzx2wT2OS\nsoyh744cbVfSWwYoMneZUDUwxbLh2AQxjEML7km2i/Rd0b5aWiG16+06DG85voyvlTTJWhuEePbC\nWqm/XQV9BoyJamp9hq0NNGS+zvEnZdRhnMgiNDU+6MydcgdzWWYKkBqmpzF3LeDS6tszWCFNPTOG\naQKLQMfdGBaD+/iyzGSXoG9xy5T1QAHU3EKquSuzM3UEJlnGklCVlY8N3DJAtoNqFNy1hOqkn/GC\nUo1ZllAF7IOj6XqYxiLqQ2B0BCWyYuBlbhl1kadzIOZrQtcwR1U1IpA0k8kyxfN7+4n9eOa1dStL\n/erLV5HwrLaiCvQZHOwHcB0mF6c6CdU6wZ1spZOAFjkg/1nrw2bE3zH3+3n85SuVCei2saeCOzVi\nUht8AQbmHhWDOyUazT73fEvcrD80byTLNGXukwR3nblPJMsYju25DgJ3vDmqQ6WjHoGuSV23jAnq\nsI5GzL2b2WOF1GVnw6JVgT24A0XJL9TIiA6b+6LM575Zg7mb2jOHcd6W2/Vd+Rma2jO8/db9GMUJ\nnn1t3fg3Hn3pClyH5SyqZaAAeTC1IXc8F4HnVPaXqdufqYnmrgZ3E3NXK5xN/X5eurSJH/3NL+EL\nz12c6O9Pij0V3Gl6us7c9YeDmHtXSahSUDExd70S1fbvSZj7pIGnZ7FCysIYW3An5k5umQpZxuSW\nsfVi6fjO+FbIQkJVBNRmzD3f8nfSpLUqywxDexETQAlVgxVSuR/0xTgb02hvP6C+DhDW1SjJZqjq\nPy+bwiSPa2Duui1XLVwyve+3pUlVk+4eJxx/+ewK3nLLslX71yGZu1JjstTxKkftxTWZexOf+7Ut\nNbhn8cHE3E3aPu2A1Pmws8CeCu66xFCVUFWZu+swa5JSL1YqC+512QHnPB2zN7ksUza6zbbV10f0\njaJyWaYucwfGH9ih9uXIjiGO3SSh2hZzz8kyJUlqwD6NaRRl5en6YiyZu0U26hjuX9W6mmnuRVnG\nND+V0DXMXg21WgciPoGlWdrx/T0cXgyMjpnf+uKLePq1NfzEe+6wnoMOug+o4pjeQ52Eap2EbZOE\n6ppFlrEzd3OOb9xhNk2xp4K7LklYZRmDWwbIl5urKPjcLf8WXSHryTJyZuWkzD3wRMFKojPrKllG\nc8uU+Nw9xyDLhMWAnJ2T3XtvgokN91th7lkbiEZ20/T+2BhEpbUDQH4ak4pRnOBAX7BRkyyjTvLS\n0TUE74zAOMaE6+YwgsOK5fe541rcMn6Ouac9Wkq8/W87sb+QVP36uWv4Xz/7PP7Ttx7Dj2iDsMtA\n96vK3G15DP286yzevit2c/rzUgc2WcaquYfz4N469EZMktkUEqria/0BWFC6AKoYWRKq+r/HkWVk\ncU0D5g4UG0CVjYMTv5fX3MtkGd9ziu0HInP7AcAuFdlgcsv0AheMwVo+XweuNqzD1lemCo7DsBC4\n2BjGpbUDgJKz0WS9UZTIhUpf+KpYJ80WVYOF2nfdJsuIbpf299z1i7mRoubupP+3LxJvO7EPp1Y2\nZADeGkX4hx9/EocXO/iVH37LWPZTW3Cv1tzrVXnbzBV1QJW6QH73pQ94p7+j/w26PrP2v++p3jK6\nJP7vjPsAACAASURBVNFRBu+qGBhkGYDmqJqljrwVUrmYhd4yHJzzyhs7215PrrkDgkn0lQ6AVZp7\n4DnwXSbf5ygqL2Kq234AEIFgu2ZHPM65UZa541AfJw8vVBallMFzHTlZqIlbBhDSwOYwKhSs6bBV\nfo6iBPvTWbD6vVXlwDFZHdUkrKlIb2NgbxqWnavJLZNvYkdBvczb//Zb94Nz4YzxXIbf++uXcOby\nJj72M+/C/n5g/T0T6L0cXlQ0964nWxLYEKXFV1VQB4KULVgmrG6LBcZ3WW6BHhiZe1Hyongz654z\neyu4W6yQ+octi5iC/E0hpjGZEqq8VkKVdGsqnCmD2stjEmTl/mbmTqzPhH7gyaIaki9MkoOvyTIi\nIJt97kCqudeUZWwTnX7m/Xfip957stYxbPBa0twBIdVd2zb3WFHRNdgSAXFP7u+JgKXfW7ZWywRT\n8FZbFjgOkyMfCde2Q7mYWM/VkBvRXSemQdM63p520/zJ33sEnIvP/R999z14712HS/++CRlzVzT3\nOrJMzetryl/Uxep2iMWOB89lRuau3hemubb09WDO3CeHlCQqKlRtmnu/4+WSJ/K4mh7ZsQR3ejiq\nHlpAHUjcTJbRt9dVVkggP1KwXJbJWzujRLRtsCZUAxcr68Na528L7o7DEDQIxkDafiB9X6RrT4rF\njocr6cDjOixbZcRx2pSNgq1pITYlsuUxDUV4quYuXpMPJte2RjWDexVzr5ZlDi4E+Jn3n8QgivFt\n99xk7OlSF/Rec7JMjYRqXTtxI1lme4R9PR8J53krZBQXEs6BW7RvEsOftea+p4K77ht2HQbXKVaM\nmYqYABH0Lqzmh9vSA2p1y2hFTEDqt6/YlWYDiSftLWMe2DFK7aBlgaiXC+728/CcvH4oA3ILmntW\nuj3eFrkOWmXugYfX14U0UJZQ7Ur9W2HZ6edFEoUuy4RaLkeHycpryiupf/PqVoi7b7L3TgdSt4xB\nc1cDs0yolsgyAPBPv/++0p/XhUmWWez4lb1l6tqJbUSvDta2Q+zr+RhEcYG56+RknlCdEkw2QFOT\n/kE63k1n12KOqtmuZg3oBlkmrDGwQzL3CfXgrtTciwk8oFxCWEj7lAPlVZKBllClgGCTZbp+fbeM\nbRZrG3BdvUK1mSxzVTL3spL+4hAMWhgz5q7LMuUJVTedY2taMOTMAq0iUjD3cmbR9V3DJKb850TF\nZbZr3TY6UpbJa+5iVrH9nqpfxCTexyRe99U0uPe0+9tU86EvtkB2T1RNlWobeyq4m8aWmbLX26PE\naBUTc1S1YGkIfrZAr8oyVZB9qCdm7vmBAYQqK6T4XVdW4pbKMprP3SalELpjFDFlu4DpM/dJpS9A\ndIa8Jnus1El+FgPxQuDCd5lhl1Ut3+myi747VX3VnHNc2wpxoEqW8VyEMc+1lghjXXN3cv+fNg4v\ndrDU8XILUzaMuyS415xm1oS5U3Dvazk5E3PXcyBAdk/MuqHYnpJlRoZGTKay4+0wzlWnEkxumdAQ\nLNV/qxeXHtQ6LQia9BkX52qRZSqKmAAhNVB71SpZRjQiE+6fOrJM/eBOu4ApMHflvKNksjm1hMWu\nB+r3VeqW8ezMPfAcY4GcXvlsQkdj2brmHniZxLI+jBAlXPrqredK+YEowSLds0m+OV7mlpkNc//b\n77kd3/e2Y7lrpfZ0P7hgfk9hwtGv45axVKvXwbUtEdy3wjjfZ8bC3Is5vjlzbwxTYDN1gxuEsZGR\nLATZ4GtCFvyq3TIUIOskbTLG3NwKqYL+dpUnW0+omhgkvTf6DKgGoG8ZvtwLhOZeNbEeqN4FNAEV\nhlG+pKksQ6iXUC0y98BzsNAp9t8Xs2vLz01fFIqaeybLXNsUgadOQlU/11Bp+QuoRUyzCe5d38Xx\n/b3c97Ke7vay/ThJahUCymdzQua+v++j5zs5ac2quc8rVNuHUR83ae7aFCZC39D219Rz2ybR+BPI\nMk0ahwFFBwZt4avdMqnmXtJTnM6N3k/WcdA25cdFwu2L2+/+f6fx0S+9lDvPaWi6rmJJrWuVs2Ex\nqBfcu4aCItWW2gtco8+9SpZZ6OR13swKSZp7pvFeTYttqpi7HKyiHFfvUCqnC81IljFhSWHuNtRN\nqEor5Jia+yCMMYwSLPd89NOqcILJMx94JZr7jK2Qeyq468kmwLyS6iP2CHJKkbI6m4qC7O0HxpFl\nmiVUrVbIiiImIHXLyPYD5bKMOFfxGnrIbEUyco6qZdTeHz1+Dr/78BnxGkMBSFvwpsTcS33uJczd\nd5mxF9CoRl+UniYV6ouxqrnL4L5Qztx7hnuHOk1m72e2zN2EOj3do6RmbxlLQWMVSIbZ1/MLhoGB\noX1GxxOFjGqbA7rXZ13EtKeCu5W5G/q5myx4fUMCJ2Nf2Y1PTfmBPOMdT5ZpllClh25SzX1zFMmp\nTYCFuWtshxw2tqZUpqChYn0Q4eXLW7i8MZyuW4YWpYSnzK5JQrVecDf1VldtqaaxiGEd5h64OSlA\nH/ChWu+oe2GVW8aUr9GD5KwTqibUGZIdaXKSDZMmVCm47+/7hQXaxNxlbYJqRJjLMs0xNEgMHdfB\nyFAObAruJuZu06T1UX7qa8IaN1BZw646cNIulrq9bhQlcFh5cVS/I+STYZTIHvjG4O7kZZn1ivmc\nVXNU6SF98pVrSkJ1Om4ZYAqae0nVr6lVgOy46TnG4SoioVp+bv3AzZGNMp97bVnGcp97BuY+Kyuk\nCVJzL5FlwnF97vF4AVZl7j3fzU3UMjF3mbhVkqcky8y6t0ytyMIY+wBj7DnG2CnG2C+WvO7HGGOc\nMfZAe6dYHybPtimhapNlKFFoeph0mUMfwg0oskyNznNN2w8A5oEdVa1pgWxgx+YwQpSIxcD0gOgy\nU1U72a5ByyVwzuXvf/XsVXlNpsEM6b1ESSLcMhPujoD8ey1NqMqHuqiPd8qCe8Xiruu8Zs2dZJkQ\njFV31FyQbZ91WUZ1gdUrYpom5BzVEuYeJzV7y9Rk7g+/cAl/8rVX5de0G9rX89EL3NxELVP7a3kf\nxCrD36XMnTHmAvgIgO8FcB+ADzHGCmVpjLElAP8dgK+0fZJ1MYqKLVTNCdVEshcVNMgip7lbEo6y\nrXBDt8ykzB0wV4RWzfoE8tvyUWwvAinIMhXtZMtkma1RLL3nT5y9prhl2meGdB3aYO6LykSjMlmG\nMVbo5a0mVPuBN3ZXSICYe3Enqc4Jlm6ZrRGWu34lkzXKMloRU532A9NG13fgOqw8oZrUlGWo/XdF\nPuzf/tWL+J8+/Yz8WsoyvaCQiDYpAKY2zLvZCvkQgFOc89Oc8xGAjwP4oOF1/xzArwIob+M2RZh6\nulh97mXM3ehOsAR3Y/uB6RcxifMtJulE98LyB1IdBq4P/1ZhkmUWOvZ2stT728RQaGvd81187ZVr\nUk6aRkLVVRLBdbftNtS1QgLFhlyqFbIfuIUpX8OovP0AgMKiYEyohiTLVBcwAUWnFQ2OyWvuO8/c\nGWOVzcPqViDXZe4r60O8ujqQU7VUWUY3MRiZu190TUkrZFTPJtwW6ly54wBeUb4+l35PgjF2P4Bb\nOed/WnYgxtiHGWOPMcYeW1lZGftkq2BqodrxiwnVwcjiliHmPiwmsEx+ViDffmAsWSZpVsQEmIdk\nV/UdB7KHe3MUlTZeMskyNr1dPa4puNO4tPfedQiboxjfPL8GYDoJVU/KMi1o7jWtkIB4L/kiJj2h\nOoksk9d5Zd0FyYK+k2PudVrt6j39TY6p3aC5A9U93cV4wOp7qG5XyJUN0fjuxZVNAMDq1kjOF+hp\nOx4TczcNCCK3DC+xCU8DdZ4s05MhoxdjzAHwvwH4R1UH4pz/Nuf8Ac75A0eOHKl/ljVhspbZmXvx\nrRuZu02WoYSqwS1DTDdJOFYtcxMzK+TkgcfUy2UczX1rGBfKzlWYZJmyXuFlCdW19AH91nvEdf/S\n6csAyl09k8KVCdUk9bm345apw9xN7QeIuY+ipFDyX1Xn0O+IQdUUwIuau5BlOOe4ujWqxdylLBPa\nW1Dcsq+LwHNw+6F+5fGmiaVu+RzVul0/fUPQ1TGKEtkB9NTFDQCCuS93fWlgAMSOJ5tHUCSTQL7V\nwMAg0cwCde76cwBuVb4+AeBV5eslAG8B8AXG2EsA3g3gU9NKqj53YR3/96NnpX6rwsRa9YRqGIsH\n3pxQNTH38oSq+nDqN9CffuM1vOdf/oVxcHLU0ApJ51vU3OPamvvmKBK96itkGQpIG8OoYjanPaFK\n7OvNtyzj4EKAlfUhOp55PmdT5Jl7s5a/dX3uAPXWUZl7xoj1gArUaw3d1z5Tfe6qWpxzdTOsdMrQ\n7zCmHrOY3L9puYtnfvkDuP+2A5XHmyaqZJm45iQm2SG2xC1zeTNrV/3CxXUAWV8ZICN/22GcJctt\nmrsmy1CcmGV/mTrB/VEAdzPGTjLGAgA/DuBT9EPO+Srn/DDn/A7O+R0AvgzgBznnj03jhL/w3EX8\n4//nG8atv4kJ6QlVOYXJkFD1XQeB51iYe/G4ei9nXZZ57sIatkYxLm2MoCNsaIUEYPROV033AVTN\nPSplj8Tc6eFfH0Sl/brLZBla4Ja6Pu6/VQx5mIYkAyhumZiGkE8e3Ok6A9W7jI6X7wOTzRdws8Cg\n6Ny1EqpUe6F08VRNA2owubY1wr4azJ0xhr7S1iCyEJgmuYq2UNbTXQ6Zr7kzM+3iVaizCE69njF3\nCu69dLjP1iiSi7jNLaP+nWGUYF86sEVvBzxNVH4qnPMIwM8D+AyAZwD8Ief8KcbYLzPGfnDaJ6jD\n1jALMAc2PbjLKUwWF4A+jcnUFRIQF7Gjfc/TZBkaEWYaANKWFXIyWSZl7hWyjKclVDeGFcG9RJah\nB3Sp6+H+29LgPiUnhteiWwYQ7DFwq3cZXW0Kjy7LAFl/Hr0YyYZ+oDP3/IJAn+HGIMLmKK7F3AFR\n+apr7k3yP9PCYsez9nSPk/GeIZNzTsXFNRHcbz3YwwupLKNOtur5WSdW2zwCfa5tkvDcqMVZ2iFr\ndYXknH8awKe17/2S5bXf3vy07DA1PSKYtrkdz8UoTmRnQyqNtwV3vae7VZZxncL3dFnm9bTz4ppB\nlilrtVsXVFShopYVspOxyDL2qPfK2awI7pksU3yA1pXg/s50qz8tJ4Zsm9CC5g6IRHudysaOl3fE\nqMFdT8aV9dFXkUlosTymaSoYdfmso7nTcbeUYwLNJMJpYamEuWeOs3rX9/BiUDqTlZKp773zMP7w\n8VewPRJdIG9JG5qp19BWYa2PRqQgv79HwX0XMffdhjIvtYm16g2DaNts82ovdPK+4jKfuy3JSjfd\nBcncizdn08ZhgNkKWUeWofe+mcoyts6EelfIjUG55u46DIHnGK/N+kAU2CwEHt52634wNj0nhqfI\nMm0w94XAqyUhFZh7HEutd0HRawG73KdDd7bobYLpvC6mwb3uYGo1uLdxL04LZZq7JEg1r++bji3j\n2Qvr1p+TLPOeuw6Bc+DFlQ05hQnI93OyMXfdckkklI6hD0mZJq674F4ly9gCLq2gcsReYH7r/cDL\nsS9bsdG+no/lXj7QSVkm/VsU3FeNskyzxmGAWOiGUZJLLg9rBHfXYej6jvC515RlOOfYGJUzd8De\n031tEGEx8OA4wrv8xqNLU3HKAGqFKm88Zg9IZZkawV3vva7uonoFWSa9r2rKMupwFVMlKd1r9WWZ\njBhElnt8N2Cx4+cK4FRIWabmonTvzUs4e2XLaHAARHA/0Pdx3y3LAIRj5tpWKFm3ahiwa+55WYbu\nBxncd5sss5tQ5sgYaXMggeJKWqW5L3byfmTV8aDiF77nnoL/VgbDhGN9EMqttFmWaYe5A+I90fuu\no7kDafOwYVQYjKxClWW2RjE4R2Vw7/qO8dpsDCMsKaz/F777ntrzVscFPexSbmga3Ls1g7tX1Nzp\n96iGgj6bsoZtKiRzl7ZFXXMnWUawzqpe7tlxlbbPDQfHTBNqZ0i9rULWfK/eed97TATt5y6s44E7\nDhZ+fnF9gCNLHdxxaAGuw/C1c9cQJbzI3EcZc7e6ZWSzMHGdKdE9y4TqdRfcMztScatmrFC1BHeb\nLNMPXFzayLLmxL70ZNpNS13ctJT/XcYYAtdBGCdSbwcsCdV0QlATK6Dqu5XBPUoKiV4T+h1XMndb\nwFZlmaq+Muo5mbae64MQS93s4fyeN99ceY6TgjR2egCb9JYBgDceXYJT4zoVfO5KIO77+RoKIhBV\n5f26PXcUmzV3ut8OWCYW6ej5Hi6nLq5sd7r7ZBkqmlsfhIXgTs336i7eFNyfsQT3lfUhjix1pL//\n8ZevAshYt+86YlximGnuXT0Xp1kh6X7Yn7plZinLXHfBvVeStDOV0usVY4OKh2pBY+51RqGp8FyG\nMEpyiRsTc286uBkQjgcgv4upo7kDgrlnVshyWSZKErlLqWbu5iHZ64M8c58m6LyHLTH3f/J999Z6\nXddz8z53pe4iK/kXn+PLl7cAALcdLC8SkgVnlIiNqmSZ+sydiI4MkrtRluna56iO6zg7tq+L5a6H\nZ15bM/58ZWOIB24XQf/umxbxuWcuAsjvhuj+HlQw90xzT3LHmCdUS5CNlysy91Fc7NVB29a6CVV9\nCG6dKkIVvivmd9LDFrgOVk0J1bh5cM8KY/LWzTrBnRJqZQOGfeVGJa24UnM3FFYBqUd+RsGdNHbS\nN5u6Zeqiow0IV69F1pRO/Pz0irDanTy8UHpMvT2vLaH6+tpAzmqtAzWhKiXCXeBr17GoMHcdWSK4\n3vVljOHeY8vG4M45x8U1wdwB4O6blqSmv6zsGMjEIJm75vjyXNHsbKglVHfCCnn9BfeSQhmTDVBn\n7sT4TUVMgGDu+rCOcRJNvit62dA2+c4jCxafuz2RWRe6vY7Ot06isp9q7qVdIR2DLDNhQlVo7vVY\nZVPQYkUsqekiWhddz00HhKStApRqYRquQrLMmUubOLwYVLbnFa4slgvEpqEaF9YGOND3a8t8+YRq\nvl/NbsJSSU/3ON1xjJMwv/fYMp67sJ6blASI4eLDKMGRxTS4H12UP1OvEdmPByXzCAI367FPz8Ly\nDiRUd9/VrEC1FbJYSQpk2ldVQpW2q7Rq12XCBF+RZQ70fRxZ6pgTqomdMddFNtZufFmGmFtZ8yo6\nvyhWZJkamrvNCjkrWaaguc8ouOsDO9RroQ9XOX1ps5K1E9Qh2UXNPVvg6zplgGyHKiplZ7sIjgMZ\n3A12yElMCfcdW8bWKMbZK1u575MNkpj7XUey4K7aS3tpl04bcwfSZoWaLEMLxCwHdlx/wd0vslWC\nKVDpCY6BDO7mt27yI49j2SNZ5vW1AW7e18Nyz7cz94ZygW4LTdKB0LU0946wfJbJMiLhKz7Xusy9\na/DeA8IKOXPNfebMXQvuGjFY6GRB+swYwV3kgTJZJq+5Z/+u65QBxM5NTuPaxVZI2u2V9WcaR3Z7\n0zHhgtClGQruNynBnTZBeebuYDuMZBwxMXe1rz8RjOWuD8bmzL0UZYUyJgmlmOCI4TB7ZWBfa/tb\np7mTCt9lGMUJLqwNcPNyB8td3665N2TuejOqOsOx1d+t6grJGIPvOBjFvL7m7ruFpNEwijGKktJ2\nwW3C1RKqs2LuevW0Tgxoctb6IMTK+hB3KuywDL3AlXKOTmDU4DIOc1edVm3MFpgWiBCYqlSzRHD9\n877n6BIcVgzuFzXm3gtc3HqgnxagZZ8x9dcvmySmNitUGb4+zGXauO6CO2CuzATSQGwpKsg0d9HL\n3aZNLmhtf8O4HhMm+K6DMEpwYXWAm/d1sdzzSmSZppo7uWXEjU83Tp2dBrmCqnYmvssQqcx9Alkm\naz0wG809c8uI85gVIyVZRgZ37d4hh9KZS6JXeG3mrgzsCCOzzx2oX50KKAneMN7VzL3nu3AdZtTc\nZUJ1DObe9V3ceWQRT7+Wr1TVZRlAOGb29fJ5jG4qkRGBMT07HS9rVzFQKln1YS7TxnVnhQTSAKIF\n9yThxva1tLJS1el2GFuTqYDSy4N8xdH4bpntUHSCPLrcFQnWKCk09o9q9qEugz72S3YhrMnct8MY\nCXdK35+X+vbXBxF8l1W2DDAVMalNw2aBHWPuWnWivpMk5k7B/c66mrsyak8nMOr9XtcGKY6ZEYPM\nLbP7gnvZNKZMlhnv+r7p5iU8+cq13PdW1ocIXCcnwfzd95/Ei6mridAPXNk4zHOYcdcrGHo+odr1\n3dQqO5dlSmFqmEUtdHWWfdvBBXR9B18/twpABPeyAKWOoAMogTWeLHP+6jYA4aulm0XX3cOaE2TK\n0FSWAUQgKjsP33UQJryyaRiBmLs6Tmz2zJ2qBGeruReYexTnFlpKYr+4sgmHAbfVHISxoNhL9YSq\n4zAZ4MdKqCq5K9kKYxfKMoCQAs21IpMVX917bBnnrm7njknVqSpLf98bDuMn3nNH7nfpGg6jxGrK\nUOWXgVLspPf7nzauz+AeuDmHCKAOIy4mVN9x6348+tIVAOKBr8XcFaljvCImB+fS4H50uSstUPrN\nWTberi70oQtqF8Iq9JXxcWWLV5C6f6oGdRC6QZ69AlkyrM7i0AYoSA1m7JYh5k4PsJ5QpVF7Zy5t\n4sSBfu3GaWRbBcymAVpAxkuoZsE93MWaOyB2fEZZZkLmfl9aqfqsIs2srA9xWJFkbOim5GUQxtYd\ncpAL7qJ5nOc6ot//nLmXw6TrltmiHrrjIJ5+dQ3rg1DIMiWFHpK5D2NcXBvg6VdXcbfeZ6AEgZvN\nbL05rYgDUEiqttGtUB+6kC1w1UGDNFfx+nqyjDpP1IaellQEshF7M5dlwtky0mw4sjmhSvbDM5c2\nauvtQN6TbmrRTDuGsRKqSp8UOaxjF2rugL3t77hFTARyzDx7IUuqrqwPpce9DLKIqZS5uznmTi6q\nru9gME+oloO0SxUZay1+4A+dPISEA4+/fFUmVG1Qmfu//9LLiBKOn3zv7bXPTV1cji33MllmoMsy\nza2QQL4idFLmXi7LMCnL1AnOpoEdpJcu71BCdWYVqh7JMkWfO5Bt6c+s1LdBAkKWkQl+oyNMfOYH\nFsazQgKQtQ7A7mw/AAg5b90wR3VSOenm5S729308dT4L7pc2hrlkqg09XxSqbQwiK3MXDeSon3uW\na+v4rvz+LLA7r2YFTFWQZc2P7r9tP1yH4dGXrojh2CWyDLHTK5sjfOwrL+O77j2K2w/VfxDpAen6\nDpZ7XibLaJp7G1ZIIM/qaD5k3d4yhDLmQ+6fqilM6vkA+X432Yi9nUmozsznbmLumiyzsj7E5ijG\nnUfGYe5erpukrxXqZbLMeEVMQDZHF9idRUyAnblLOWnM82aM4T13HsJfPPs6olgMLb+8OZIe9zLQ\n/X11a2SdJBZ42e59EGYMv+u7c+Zehb6BuQ9LWOtCx8NbblnGo2euCtdKSfAjn/sfPHIWV7dC/PT7\nT451brS1vXm5C8aYZKuFhGrSPKEKAEsdX/aLH8cK2a8py1BRltDcq5lh18Dc61a3tgXGxICMrLfM\nrIJ7PpGr22j7Cqm483A9jzsgmPsoFsVGRs09/cwnl2UmkzdmhcWOWXOPZVfI8c/7g+84jksbI/z1\ni5dxeXMEzlGPuaef27WtsIS5u/IeGESxlM26CqOfBXbn1ayAqTlV1diyB+84iCfPXcPadliaUA1c\nB57D8PLlLbz5lmW862SxNWgZiI3fvK8LAHKgx5p2c0Zx0kqjppNHFnAqnfc4niyTfQaVskxMzL1a\nyzdp7uuDEF2/OLlqmlCbN83MLUMJ1Ui4hXSnlSqFnRyLuWdzUhNeDMIUZKr61KhQE6pRksBhu2Mg\ntglClrG3H5hkB/wdbzqC5a6HTz5x3uhxt6GvMHdblXvHV4uYYplon7XP/boM7qa2slWB7cGTBzGK\nEry6OijV3Blj8gL+9PtPjt1v3VeYOyAe+K7vTE2WeePRJbxydQtbo2gsn3tdWcZLffobg3FlmWz7\nOcumYQRfCe47wdxpW65bIel7x9L7ow4oyX8tvYdMwX256431PingbI/Km8ftBix1PYyiJNcrH1AH\nZI9/7h3Pxfe99Rg+89QF2X65ruYOEHO3yDKug5H0uSeSuXe8uRWyElSAo3qpq6rsHlSa81cNSFjo\neLhpqYPvf9stY58b/f2j+7KHV7Qg0GWZdh6oe44ugnMxEmwSn7s4Z3tQCFyR4RfTnmrIMl5Rlpll\nXxmCKsvMasKQZO5hbLTm0sJ38vACnDECMV2rVRncNc3dd2sP6SBQIzPZ9nmXsnbA3hmyqT//g+84\njs1RjD945CwA1NTcs4lnVlnGz1shc8x9PqyjHD3fRUwVqV5+pJotsB1cCHD3TYt44eJGZXD/O++7\nA7ce6I/lbyfQg6cys+WeX/S5t/RA3XNU2Lqef30DdLi67QcI5QlVhmtbo/R3asgy6WxaXXOfVV8Z\nguc6M2fuvsvgMCHLmO5H2i2N45QBMjmHroN+Xz54+wHcXjH0w3xcUQzoWyotdwtox7gxiHBYsSs2\nTQS/6+RBHNvXxcOnLgFA7tg2qKSoygrJOccgiuXipA9Qnzauz+CuTCCSY/Rq9Md48ORBvHBxo3Kg\nwYe/9a6Jz03KMjnm7mFtu8g62nigbj+0gMBz8Pzr67Kcve68T4fBqOGq8FwHVzdFUKnDvvXmWUBx\nxN4s4DpMJq9m5XNnjIlRe4osY0qojuOUUX9v1SLL/P3vvHui85VOq8DdtclUQO0MWawVASa3cDoO\nww++/Rb81hdPY7nrVZI+ID/kp8wKCYiYNCy4ZYTi0GS8Zl3s3itaApOX2lahquKhVJohdjkNSFlG\nYe77eiZZpnk/d0AEsTccWcTzr6+PJcswxiSTLAt+gevIZHAdWcaUUN3YAVnG24GEKpDqqpFZlulL\nWaa+U0b9PVtwnxRUVBWO2T9p1sh6uhelTaDZ9f3gO44DqKe3A/khP2XtBwARkwaKz73ru+A8NJbd\nngAAFFVJREFUI6LTxvUZ3NPgrI7Do3YBZXa7d915EJ7DcGih3oWcBL7mlgHMsoyoUG3n47/n6CKe\nv7A+llsGyG7Uqq6QhHqyjMnnvjOaexbcZ3ebE3MPDQvtvbcs43vuO4pvvfvwWMckWWZ1y6y5T4pe\n2g4hStpJ7k8L2ag9jbm34M+/99gS7j22XDnLljAOcx9GSepzd3Lfn1VS9fqUZfz8QA0AUvZYLgki\nx/b18B9+4dtw4kBvaud264E+blrq5EqZl7vFgR1hnLSmBd9z8xI+8eSruJzKJ3XLyBc6HrA+rJRl\nCLVkGUNCdSdkGfWBd2cYuKhQxVR3sdz18ds/8cDYxyTmTm6ZttoE9FPXWRgnu7IjJIFqRfRCJipi\navIcMcbwf/ydB2vLJHU09yAX3LNGhbI9RRgDY9hWJ8X1GdwN7JCCZ1UQGTeZNS7+swdO4EfeeTwX\nFPf1fKwNopzWVjYBaVzck/a++eZ50fmy7sNPN2oZa1MDfx1ZxnEYOsowlTjh2BzFM2saRlA//5nL\nMha3zKSYpizz2mqY3ou7N7gvSreMbkoQbbOb6tc3jWFL7dZi7tkMiaFihezOmLnv3itaArrZ83a7\nED3fncjh0iYYKzoPlnueDHKEqCUrJAC88WYR3J96dU04NmoGM9Lc25RlAMHwKQlLfWV2QnMnzLI4\np+MLp8S4ElkZyNkkg3tL9zgVA4ppXNehLLMDchIZEYBqzX0rrSFQrZAACn79aeG6DO76kApAyDJU\nDbrboLcgEEOJ2/MWH9/fQ893cWVzNBZTpBYEVb1lCEs1mDsA3HfLPnztFbGLILY1q6ZhBDWg7whz\nHyO5XeeYjLWvucuEakutMKaFwBMj6vSBHeIZmu15M8Zk/OlYKlTpmtNipCZUgTlzL0XPwtxnHUDq\nQu/p3tTCpcNxGO45KhwY4wSTOm4ZNbjXZe7vvG0/nr+4jrVBqAzquDGYezft/NemLEPOptW2NXdK\nqLbUCmOaWOr6xRYeSTLTfAqBrNhVsgyROUqo0v9nVch0fQZ3E3MfhDKI7jZk05jEzTmNgcR3p8VM\n4wT3cdwyXd+pvRi987YD4Bz4+iurM28aRsgz9xm6ZdJBDW3KMoC4Vte2hdTVpuZOjcN2s+YOpJ0h\nh3pwb89xNg5IFrbKMmkQX5XBXWfuuyi4M8Y+wBh7jjF2ijH2i4af/wJj7GnG2NcZY3/BGKvfAH0C\nUHDf0mWZGQeQuqAdBV1s2SqhxRvzjRMEd5rqXkeWqZNMJbzjtv1gDPjq2atKu99Zu2Wy9zRrzb1t\nWQYQAWUaCdUo4dgKo12tuQM0jamYUN0Jf76UZSqskLTToK9nbYWsvEsYYy6AjwD4XgD3AfgQY+w+\n7WVPAHiAc/42AH8E4FfbPlEVVllmlzJ32RkyfTijBt3sbLibZJmxNPdqWYZ+No6sstz1cfdNi/jq\n2as7llDdKc29wNxblFAoKAReO++H5IXV7fD6YO4FWYbvSCdLij9l/dyB64O5PwTgFOf8NOd8BODj\nAD6ovoBz/pec8630yy8DONHuaeahzw4FRODctZp7N6+5y8q6Fh8ocsyYJlHZUIe5B5K5jxec33nb\nATxx9ppiUZ21FVI89IxhrCZdTdHx20+oAnqjt3aPubYd7dpBHQRTT/edkpOqmbtFc/eK84WniTqf\nzHEAryhfn0u/Z8NPA/gz0w8YYx9mjD3GGHtsZWWl/lkWjyMKMNIVkHOOtcHudctQYCPNnRKqbSax\nbl7uYqnjjRVM3nPXYfz/7Z1/jB3XVcc/5/3e5/Xaa8c2/hX/qK38LEncbTAJSVB+QNNAghABV1QU\nSKmQqAgVCAqVotL/Kn4VRNUStYW2ilpoqMCqDFWVRqqQaBoXQkma0IQfTdw6sSnxjybe9dt9hz9m\n7nuzb/ftzq5n3r0zez7Sat/Mzs67992Z885877nn3PPG7UsabnfzpJ1MdRy6fJKzFzr824koaiZt\npE1WOGM1aqPVqlWZ7uThuedn3M9PdzILr8yL9a36Qlmmm91CwJWwrObuZBln3HuhkE6WGY3nnsYa\nLvbp6SL7EJG3A1PAbYv9XVUfBh4GmJqaWvQcaUkW7Hj94hxzXQ3Wc69VK4w3+9EOq63avhQiwrU7\nNwwNz1qMN+2Z5E17Jpc8xnnAK9HcAQ7t2QjAV751mlpFhhY2yAtXN3XUN3+rXmVmSFbISyEP4+48\n0K5m62jkwXiztqBgx+zcpReZXw2uTOcwz73R09yj+71Zny/jhGTcTwC7E9u7gO8OHiQidwLvA25T\n1ZlsmjecZMEO9yGGqrlDnBlyemBCNeNHyg8duT7T80G/jSuVVfZfNs5Eq8ap8zNMtusjyYKXxN30\no46DbtYqdJXegrWsjHuyuEqWOr4j5Dh3iO6f78/M0u1qT2ab7fqRZdr1dJ772SGhkCHJMk8CB0Vk\nn4g0gCPA0eQBInID8BfAvap6KvtmLsSFcUEyr0zAxn2sn18mj1BIiDJRblvBUuo0NFYpy1QqwvWX\nR08Fo46UgX4+mVHHQbsb/tyFDiLZyULJbISDBbIzOWfg0TLjrRqq8Honucrb84Tqspr77LztRjWa\nKwxmQlVVZ4F3A18EngX+RlWfEZEPiMi98WF/AIwDnxORp0Tk6JDTZcZYvdob6L7nHqbmDpFxHwyF\n9BGju1JWK8tAtJgp+t/Rj4s3zb3eX50Y3czZvH/a4iorIQ+pJy/6Od37uru3UMhlNHfXpkHPXUR6\nK5hHQaq7TlWPAccG9j2UeH1nxu1alrFGleme5+5niftKmGjV+c6ZCwCJavNhe0uwelkGoknV1f7v\npVLzpLk7L+38dCfTPEfJVLNZfWHNK5IeuKPhrqHvT8/ChmhfpLn7kGWWXqHqjPhgKKR7HZIsEySR\n5x499hRCcx+rJWSZ7EMh88J9Aa1rrEyWgf5iJh+yTN9zH7HmXu9PpqUpVJ4WJ4tl+TRQKFkmfnJJ\npiCIku+Nvt03HdjMPT+4fd48yCDJzKjzjHutGpbnHiLtRo0LF6PQ+jS53H2zIVGww9V+DD1CARIr\nVFdhoCdadW45uIVrdkxk3axl6Wnu3jz32UylDrfgKEsjPH9CNexrcVFZpusnWubNezfx5riq2zCi\n9SZx4rDEl3yrXrFiHcvRqld7H1LaXO4+mWjVOT89S2euy+PPRXPOKwlb9EV9lYuYHJ/65RuzbE5q\nfGvu5zKWZXoLznKSesLX3GNZJhEO2ZnTXshraLinttpA8fFW3Tz3ZRlrVHpl9kLJ5b4UTjK6/6P/\nzFMvneEnr9vB9buXjjEPgd2b2mxs1zmwdWV1P33jPHYfce4QPU1uTVmXMw3tFKuJV0o1LqwyM9st\njHFPrlKd64Zb+7U5UFqvt79WYXpEmnthjXu7UetpWiHncnc4yej5V87zR/dfx08f2jny2O/VsHPj\nGE899GO+m7Fiap6Mu7uZz093Mi3n2E5RWGV1540m+IqQfgDml9qbnQs3D70bp8GImqZ57svjZJlu\nV4PO5e64/cqt/OJNe/mlm/eyZ3O+pf6M/grVUWvJrcSqzyyfJPuee7b9aTdqvPp6J1gj6VjXqCES\nhuaehuaQhU6tej+7Z94U1ri7i316di7ojJCOzeNN3n/vNb6bsWao9yZUR2u0kjdzll72WA6yTPK8\njUDlDUelIgtSELgaqiHSS/M7MK/WqlU4FcoiplBJFuwIOZe74YeqpwnVpMaa7YSqi5bJXpaBYoTl\nrh/IDNnxUEM1Le46aNUWeu7BrFANFedxvH6xGJ67MVr8Rcv0b+Ys49zbOUTLJM8bqgecZDAz5Jyn\nSkxp6Bn3Qc99hKGQYX4yKRhLZFgLOZe74QdfmnvSoGfpZbvCKlnLJ+2cngjyYHyg1F5nzs8ipjS4\n9Q7NAc+9WataDdXlSJbaCzmXu+GHfrSMR809h5j0vDT3Ihj3qNReMhQy4AnVJT13M+5L4h4nv/fa\nTNC53A0/+NLcqxXpTeZmOaFajXPiZ665153mHqaRTDLerBUnFLJn3Bdq7jOzXVQvqZxFKsL8ZFLg\nEua/fDZKHW+au5Gk5in9ACRSvGauj9dym1ANdTFQkvWt+rzcMp1uN9gUHs0ljLsqvTKMeVJY4+4u\nylfOTQNhZ4Q0Ro+baPNSqSd+FM/euFczK47tcDlrQp2YTBIV7IgmVLtdRXX0slta+nHuC1eoAiOZ\nVC2sUO00yFPnY+NumruRwNcKVcjPc3/74T3snmxnes480hrkxXizxnSnS2euS1fzKXiTFU6SG5xQ\ndZ78TGcOclYbCmsRnXF/+ax57sZCfGnukMgrkrHB/NXb3pDp+aBoskw/BUGj5u/JLA1LyTIwGs89\n/K/rIYz1ZBnT3I2F1DytUIX+wpUieMNjBVrENN5L+zubKFUZZruXShwGjCQcMsxPJgXOc+9r7oV9\nCDFyIATPPeQspY5iLWKK7vGzFzrM9orMh9nuYYnD+rKMee5DqVUrNKoVvvfaRSDsXO7G6Olp7h5u\n/lZOmnsevHHnBq7aPpG5lp8H1+yYoCJw7OmTzMWeu485lTQMm1B12+a5L4P7oELP5W6MnmoJo2Xy\n4MDW9fzDg7ewoR2+c7Rrss3d127nka9+u5dZsR5qtMyymrsZ9yVxS6ctUsYYJIg490D14CLzzlv2\ncW56lkeeeBEI13NvDFuhWrMJ1VS4ySCLlDEGcR67j0nNInnuReOGyye5ce8mPvtkZNxDDYV0X/AL\ns0K6OHfz3JfEPeJYpIwxiK8ye5BMGlXo2ytYfuXW/T3PN9SIpGH53Js1k2VS0e557ibLGPMp4wpV\nI+KOK7ey/7Komlmossy2ida83w53bcyMoI5qoa++MfPcjSH49NxbOWVwNCIqFeGBW/YB4T4dXfED\n6/na793BNTs2zNu/sd3gkXf+EHddvS33NhTa5TXN3RiGr2Id0Dc4NqGaHz87tZuKCIf3b/bdlKFs\nHfDaIXqau/nAZSN5/2Ib957nXuhuGDngc4Wqi3E2WSY/6tUKb7vxct/NCJpCX31t89yNIfjU3Hue\nuxl3wyOFvvosWsYYRgiae6h6sLE2KPTVZ5q7MYye5u4hDnrL+ibVipjTYXil0Ma9bZq7MQSfnvtd\nV23jS++5la3rF06oGcaoSGXcReQtIvIfIvKCiLx3kb83ReSv478/ISJ7s27oYpjnbgxj07oGuybH\neMOW8ZG/d6Ui7PfwvoaRZFmXV0SqwIeBu4ATwJMiclRVv5k47AHgVVU9ICJHgA8CP5dHg5M4477e\nFjEZA6xr1vin37nddzMMwxtprOKNwAuq+l8AIvJZ4D4gadzvA94fv34U+HMREc25xPedV23j5Jlp\n9m5el+fbGIZhFI40ssxO4KXE9ol436LHqOoscBZYsLpARN4lIsdF5Pjp06dX1+IE2yZa/NaPX0El\n0CXIhmEYvkhj3BeznIMeeZpjUNWHVXVKVae2bNmSpn2GYRjGKkhj3E8AuxPbu4DvDjtGRGrABuD/\nsmigYRiGsXLSGPcngYMisk9EGsAR4OjAMUeBd8Svfwb4ct56u2EYhjGcZSdUVXVWRN4NfBGoAp9Q\n1WdE5APAcVU9Cnwc+LSIvEDksR/Js9GGYRjG0qSKIVTVY8CxgX0PJV5PA/dn2zTDMAxjtRR6haph\nGIaxOGbcDcMwSogZd8MwjBIivoJaROQ08O1V/vtlwP9m2JyisBb7vRb7DGuz32uxz7Dyfu9R1WUX\nCnkz7peCiBxX1Snf7Rg1a7Hfa7HPsDb7vRb7DPn122QZwzCMEmLG3TAMo4QU1bg/7LsBnliL/V6L\nfYa12e+12GfIqd+F1NwNwzCMpSmq524YhmEsQeGM+3Il/8qAiOwWkcdF5FkReUZEHoz3bxKRL4nI\n8/HvSd9tzRoRqYrIv4rIF+LtfXHpxufjUo4N323MGhHZKCKPishz8Zj/8BoZ6/fE1/fTIvIZEWmV\nbbxF5BMickpEnk7sW3RsJeLPYtv2DRE5dCnvXSjjnij5dzdwNfA2Ebnab6tyYRb4TVW9CjgM/Frc\nz/cCj6nqQeCxeLtsPAg8m9j+IPAncZ9fJSrpWDb+FPhHVb0SuI6o/6UeaxHZCfw6MKWq1xIlJXQl\nOss03n8FvGVg37CxvRs4GP+8C/jIpbxxoYw7iZJ/qnoRcCX/SoWqnlTVf4lfnye62XcS9fWT8WGf\nBH7KTwvzQUR2AfcAH4u3BbidqHQjlLPPE8CtRJlVUdWLqnqGko91TA0Yi2tAtIGTlGy8VfUrLKxt\nMWxs7wM+pRFfBTaKyPbVvnfRjHuakn+lQkT2AjcATwDbVPUkRF8AwFZ/LcuFDwG/DXTj7c3Ambh0\nI5RzvPcDp4G/jOWoj4nIOko+1qr6HeAPgReJjPpZ4OuUf7xh+Nhmat+KZtxTlfMrCyIyDvwt8Buq\nes53e/JERH4COKWqX0/uXuTQso13DTgEfERVbwBeo2QSzGLEOvN9wD5gB7COSJYYpGzjvRSZXu9F\nM+5pSv6VAhGpExn2R1T18/HuV9xjWvz7lK/25cDNwL0i8j9EctvtRJ78xvixHco53ieAE6r6RLz9\nKJGxL/NYA9wJ/LeqnlbVDvB54CbKP94wfGwztW9FM+5pSv4Vnlhr/jjwrKr+ceJPyXKG7wD+ftRt\nywtV/V1V3aWqe4nG9cuq+vPA40SlG6FkfQZQ1ZeBl0TkinjXHcA3KfFYx7wIHBaRdny9u36Xerxj\nho3tUeAX4qiZw8BZJ9+sClUt1A/wVuBbwH8C7/Pdnpz6+CNEj2PfAJ6Kf95KpEE/Bjwf/97ku605\n9f9HgS/Er/cDXwNeAD4HNH23L4f+Xg8cj8f774DJtTDWwO8DzwFPA58GmmUbb+AzRHMKHSLP/IFh\nY0sky3w4tm3/ThRJtOr3thWqhmEYJaRosoxhGIaRAjPuhmEYJcSMu2EYRgkx424YhlFCzLgbhmGU\nEDPuhmEYJcSMu2EYRgkx424YhlFC/h/lMbrH1uTJewAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "y = np.random.uniform(size=100)\n", "plt.plot(y);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## 4 Version control with git\n", "\n", "* Decentralized: draw on black board. Make it clear that all repos are the same.\n", "* Commit are local. We push / pull to sync with other repos.\n", "* Git is often used in a centralized fashion, with github / gitlab being the syncing point for everybody. It does not have to be, but github is easier to access than my laptop.\n", "* **Want to learn more?** Try this [interactive guide](https://try.github.io) or look at the more involved [user manual](https://git-scm.com/docs/user-manual.html).\n", "\n", "### Basic usage\n", "\n", "1. Install with `conda install git`.\n", "1. Everybody make a clean clone (to be erased afterwards). Use HTTPS if not logged in.\n", "1. I add a fake file.\n", "1. I commit. It's not on github.\n", "1. I push. It is on github.\n", "1. They pull. They see it on their machines.\n", "\n", "Two kinds of users:\n", "* Those who don't want to learn git, just do `git pull` before every lab. **Do not modify the content of the folder.** That is like your inbox, you only copy files from there and modify them outside.\n", "* The power users make a branch for each of their solutions!\n", "\n", "### Power users\n", "\n", "* Make a branch: `git branch ass1_my_solution`\n", "* Work on that branch: `git checkout ass1_my_solution`\n", "* Do and commit your modifications. You get an history of your changes!\n", "* Come back to master with `git checkout master` and get new stuff from the TAs with `git pull`. Again, you should never modify master (you could do it locally, but only the TAs have write access to the github repo).\n", "\n", "### Super-power users\n", "\n", "Those who want to backup or share their work on github.\n", "\n", "1. Create a github account.\n", "1. Create a repository (you could have forked mdeff/ntds_2017).\n", "1. Add a remote repo: `git remote add my_repo git@github.com:username/ntds_2017.git`\n", "1. Push your own branches to your repo: `git push -u my_repo ass1_my_solution`.\n", "1. Go on your github and see your changes.\n", "\n", "### Contributors\n", "\n", "* Same as before, except you can now make a pull request for your changes to be integrated into master and be available to all of us.\n", "\n", "### Collaborate with git and github\n", "\n", "We'll come back to this when we'll start working on the projects." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## 5 Scientific Python\n", "\n", "Below are the basic packages used for scientific computing and data science. We'll introduce them as needed during the following tutorials.\n", "* [NumPy](http://www.numpy.org): N-dimensional arrays\n", "* [SciPy](https://www.scipy.org/scipylib/index.html): scientific computing\n", "* [matplotlib](https://matplotlib.org): powerful visualization\n", "* [pandas](https://pandas.pydata.org): data analysis\n", "\n", "**Want to learn more?** Look at the [Scipy Lecture Notes](http://www.scipy-lectures.org/).\n", "\n", "Finally, the below packages will be useful to work with networks and graphs.\n", "* [NetworkX](https://networkx.github.io): network science\n", "* [graph-tool](https://graph-tool.skewed.de): network science\n", "* [PyGSP](https://github.com/epfl-lts2/pygsp): graph signal processing" ] } ], "metadata": {}, "nbformat": 4, "nbformat_minor": 2 }