{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "
\n", "\n", "# Exploratory Computing with Python\n", "*Developed by Mark Bakker*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Notebook" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bugs\n", "It happens to anyone writing code: occasionally, you make errors. It is accepted knowledge that every 1000 lines of code contain 15-50 errors (see for example [here](https://www.mayerdan.com/ruby/2012/11/11/bugs-per-line-of-code-ratio)).\n", "Errors in your code, known as bugs, can be roughly divided in two kinds. The first kind are syntax errors, where Python throws an error message at you. Once you have resolved all the syntax errors, this means your code will run, but it doesn't mean, unfortunately, that you get the answer you want. There may be one or more bugs remaining in your logic. To find these bugs, it often helps to test small parts of the code separately and to write lots of print statements. There also exist tools called debuggers, which help you in stepping through the code to look at intermediate results. They do not, unfortunately, tell you what the bug is, that is still up to you, the programmer. \n", "\n", "In this Notebook, we will discuss a number of syntax errors. Syntax errors can be very long as they provide a traceback from the function that throws the error all the way back to the code that you wrote. The strategy to find out what is going on is to read the last sentence of the error message. This error message is designed to tell you what you are doing wrong. Sometimes it is easy for Python to figure out what is wrong and the error message is very informative. Other times you make a more confusing error and Python throws an error message that doesn't help much in explaining what you did wrong. A second important piece of information is that Python shows you in what line of your code things went haywire. It prints a few lines of your code to the screen and points to the line where it thinks the error occurred with an arrow. \n", "\n", "This Notebook is by no means exhaustive. A number of syntax errors are discussed so that you may start recognizing them and give you some practice in trying to resolve errors. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `IndexError: list index out of range`\n", "As a first example, run the code below" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "2\n", "3\n" ] }, { "ename": "IndexError", "evalue": "list index out of range", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[2], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m x \u001b[38;5;241m=\u001b[39m [\u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m2\u001b[39m, \u001b[38;5;241m3\u001b[39m]\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;241m4\u001b[39m):\n\u001b[0;32m----> 3\u001b[0m \u001b[38;5;28mprint\u001b[39m(x[i])\n", "\u001b[0;31mIndexError\u001b[0m: list index out of range" ] } ], "source": [ "x = [1, 2, 3]\n", "for i in range(4):\n", " print(x[i])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You will get an error message `IndexError: list index out of range` and an arrow at the line of the code where this happened. This makes immediate sense, as the length of the array `x` is 3 (so `x[0]`, `x[1]`, and `x[2]`), while you are trying to print `x[3]`. Fix the code and run it again." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `invalid syntax`\n", "A common error message is `invalid syntax`. This means you are trying to do something that Python doesn't understand. This could very well be a typo, which you can often spot by looking carefully at the code. For example, run the code below." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "ename": "AttributeError", "evalue": "module 'numpy' has no attribute 'linspac'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m x \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mlinspac(\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m10\u001b[39m, \u001b[38;5;241m20\u001b[39m)\n", "File \u001b[0;32m/opt/anaconda3/lib/python3.13/site-packages/numpy/__init__.py:414\u001b[0m, in \u001b[0;36m__getattr__\u001b[0;34m(attr)\u001b[0m\n\u001b[1;32m 411\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mnumpy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mchar\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mchar\u001b[39;00m\n\u001b[1;32m 412\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m char\u001b[38;5;241m.\u001b[39mchararray\n\u001b[0;32m--> 414\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmodule \u001b[39m\u001b[38;5;132;01m{!r}\u001b[39;00m\u001b[38;5;124m has no attribute \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 415\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{!r}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(\u001b[38;5;18m__name__\u001b[39m, attr))\n", "\u001b[0;31mAttributeError\u001b[0m: module 'numpy' has no attribute 'linspac'" ] } ], "source": [ "x = np.linspac(0, 10, 20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Apparently, the `numpy` package doesn't have a function `linspac`, which is correct, as it is called `linspace`. Fix the code and run it again. Here is another syntax error that might be a bit harder to spot:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax. Maybe you meant '==' or ':=' instead of '='? (2973536516.py, line 2)", "output_type": "error", "traceback": [ "\u001b[0;36m Cell \u001b[0;32mIn[4], line 2\u001b[0;36m\u001b[0m\n\u001b[0;31m if a = 8:\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax. Maybe you meant '==' or ':=' instead of '='?\n" ] } ], "source": [ "a = 7\n", "if a = 8:\n", " print('the value of a equals 8')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this case, the error is that the statement `a = 8` needs to have two equal signs. Fix it and run the code again. \n", "You can also get an `invalid syntax` error when you forget, for example, to add a colon after an `if` statement. Python shows with the carrot (`^`) where it doesn't understand what is going on." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "expected ':' (2893159599.py, line 2)", "output_type": "error", "traceback": [ "\u001b[0;36m Cell \u001b[0;32mIn[5], line 2\u001b[0;36m\u001b[0m\n\u001b[0;31m if avalue < 10\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m expected ':'\n" ] } ], "source": [ "avalue = 7\n", "if avalue < 10\n", " print('the value of avalue is smaller than 10')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fix the bug and run the code again. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Other times, the syntax error may not be so obvious, for example, in the code below " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "'(' was never closed (3506585293.py, line 1)", "output_type": "error", "traceback": [ "\u001b[0;36m Cell \u001b[0;32mIn[6], line 1\u001b[0;36m\u001b[0m\n\u001b[0;31m plt.plot([1,2,3]\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m '(' was never closed\n" ] } ], "source": [ "plt.plot([1,2,3]\n", "plt.title('Nice plot')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can stare all you want at the line `plt.title('Nice plot')` but it looks perfectly good. And it is! The problem lies with the line just above it, where the closing parenthesis is missing. Python thinks that the plotting statement continuous on the next line, but the `plt.title` command makes no sense in the `plt.plot` function, so it throws an error message. There is not much else it can do. Fix the parenthesis and run the code again. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Longer error messages\n", "Error messages can be rather long, depending on where in the code the error occurs. In the code below, the error occurs in the line `plt.plot(xdata, ydata)`, which calls a function in the `matplotlib` package, which throws the error when it tries to plot `y` vs. `x` (which is a generic error message from `matplotlib`; it doesn't substitute the names of the arrays you really want to plot). Run the code" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "x, y, and format string must not be None", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[7], line 7\u001b[0m\n\u001b[1;32m 4\u001b[0m xdata \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mlinspace(\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m4\u001b[39m, \u001b[38;5;241m10\u001b[39m)\n\u001b[1;32m 5\u001b[0m ydata \u001b[38;5;241m=\u001b[39m func_exp(xdata, b\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m4\u001b[39m, a\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m)\n\u001b[0;32m----> 7\u001b[0m plt\u001b[38;5;241m.\u001b[39mplot(xdata, ydata)\n", "File \u001b[0;32m/opt/anaconda3/lib/python3.13/site-packages/matplotlib/pyplot.py:3829\u001b[0m, in \u001b[0;36mplot\u001b[0;34m(scalex, scaley, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m 3821\u001b[0m \u001b[38;5;129m@_copy_docstring_and_deprecators\u001b[39m(Axes\u001b[38;5;241m.\u001b[39mplot)\n\u001b[1;32m 3822\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21mplot\u001b[39m(\n\u001b[1;32m 3823\u001b[0m \u001b[38;5;241m*\u001b[39margs: \u001b[38;5;28mfloat\u001b[39m \u001b[38;5;241m|\u001b[39m ArrayLike \u001b[38;5;241m|\u001b[39m \u001b[38;5;28mstr\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 3827\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs,\n\u001b[1;32m 3828\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mlist\u001b[39m[Line2D]:\n\u001b[0;32m-> 3829\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m gca()\u001b[38;5;241m.\u001b[39mplot(\n\u001b[1;32m 3830\u001b[0m \u001b[38;5;241m*\u001b[39margs,\n\u001b[1;32m 3831\u001b[0m scalex\u001b[38;5;241m=\u001b[39mscalex,\n\u001b[1;32m 3832\u001b[0m scaley\u001b[38;5;241m=\u001b[39mscaley,\n\u001b[1;32m 3833\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m({\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdata\u001b[39m\u001b[38;5;124m\"\u001b[39m: data} \u001b[38;5;28;01mif\u001b[39;00m data \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m {}),\n\u001b[1;32m 3834\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs,\n\u001b[1;32m 3835\u001b[0m )\n", "File \u001b[0;32m/opt/anaconda3/lib/python3.13/site-packages/matplotlib/axes/_axes.py:1777\u001b[0m, in \u001b[0;36mAxes.plot\u001b[0;34m(self, scalex, scaley, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1534\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 1535\u001b[0m \u001b[38;5;124;03mPlot y versus x as lines and/or markers.\u001b[39;00m\n\u001b[1;32m 1536\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1774\u001b[0m \u001b[38;5;124;03m(``'green'``) or hex strings (``'#008000'``).\u001b[39;00m\n\u001b[1;32m 1775\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 1776\u001b[0m kwargs \u001b[38;5;241m=\u001b[39m cbook\u001b[38;5;241m.\u001b[39mnormalize_kwargs(kwargs, mlines\u001b[38;5;241m.\u001b[39mLine2D)\n\u001b[0;32m-> 1777\u001b[0m lines \u001b[38;5;241m=\u001b[39m [\u001b[38;5;241m*\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_lines(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, data\u001b[38;5;241m=\u001b[39mdata, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)]\n\u001b[1;32m 1778\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m line \u001b[38;5;129;01min\u001b[39;00m lines:\n\u001b[1;32m 1779\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39madd_line(line)\n", "File \u001b[0;32m/opt/anaconda3/lib/python3.13/site-packages/matplotlib/axes/_base.py:297\u001b[0m, in \u001b[0;36m_process_plot_var_args.__call__\u001b[0;34m(self, axes, data, return_kwargs, *args, **kwargs)\u001b[0m\n\u001b[1;32m 295\u001b[0m this \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m args[\u001b[38;5;241m0\u001b[39m],\n\u001b[1;32m 296\u001b[0m args \u001b[38;5;241m=\u001b[39m args[\u001b[38;5;241m1\u001b[39m:]\n\u001b[0;32m--> 297\u001b[0m \u001b[38;5;28;01myield from\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_plot_args(\n\u001b[1;32m 298\u001b[0m axes, this, kwargs, ambiguous_fmt_datakey\u001b[38;5;241m=\u001b[39mambiguous_fmt_datakey,\n\u001b[1;32m 299\u001b[0m return_kwargs\u001b[38;5;241m=\u001b[39mreturn_kwargs\n\u001b[1;32m 300\u001b[0m )\n", "File \u001b[0;32m/opt/anaconda3/lib/python3.13/site-packages/matplotlib/axes/_base.py:455\u001b[0m, in \u001b[0;36m_process_plot_var_args._plot_args\u001b[0;34m(self, axes, tup, kwargs, return_kwargs, ambiguous_fmt_datakey)\u001b[0m\n\u001b[1;32m 452\u001b[0m \u001b[38;5;66;03m# Don't allow any None value; these would be up-converted to one\u001b[39;00m\n\u001b[1;32m 453\u001b[0m \u001b[38;5;66;03m# element array of None which causes problems downstream.\u001b[39;00m\n\u001b[1;32m 454\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28many\u001b[39m(v \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01mfor\u001b[39;00m v \u001b[38;5;129;01min\u001b[39;00m tup):\n\u001b[0;32m--> 455\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mx, y, and format string must not be None\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 457\u001b[0m kw \u001b[38;5;241m=\u001b[39m {}\n\u001b[1;32m 458\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m prop_name, val \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mzip\u001b[39m((\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlinestyle\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmarker\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcolor\u001b[39m\u001b[38;5;124m'\u001b[39m),\n\u001b[1;32m 459\u001b[0m (linestyle, marker, color)):\n", "\u001b[0;31mValueError\u001b[0m: x, y, and format string must not be None" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def func_exp(x, a=2, b=3):\n", " y = b * np.exp(-a * x)\n", "\n", "xdata = np.linspace(0, 4, 10)\n", "ydata = func_exp(xdata, b=4, a=1)\n", "\n", "plt.plot(xdata, ydata);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, the code looks perfectly fine, but the `plt.plot` function complains that `x and y must not be None`. Note that `x` and `y` refer to `xdata` and `ydata`, because the plotting statement in the code is `plt.plot(xdata, ydata)`. Apparently, either `xdata` or `ydata` equals `None`. The thing to do here is to print `xdata` and `ydata` to the screen. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(xdata)\n", "print(ydata)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you see, it turns out that `xdata` is indeed an array with 10 values, but `ydata` is `None`. The error lies in the function `func_exp` that is defined. This function doesn't return the value of `y` that is computed. Fix the function and run the code again. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercises\n", "The best way to learn how to resolve errors in your code is by practice.\n", "Consider the following code snippets. Each code snippet contains one or two syntactical errors. It is up to you to fix the error so that the code runs properly. Note that you will need to make changes to only one or two lines in each code snippet. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 1 " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'xvalues' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[8], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m y \u001b[38;5;241m=\u001b[39m (xvalues \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m2\u001b[39m) \u001b[38;5;241m*\u001b[39m (xvalues \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m1\u001b[39m) \u001b[38;5;241m*\u001b[39m (xvalues \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m2\u001b[39m)\n\u001b[1;32m 2\u001b[0m xvalues \u001b[38;5;241m=\u001b[39m linspace(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m3\u001b[39m, \u001b[38;5;241m3\u001b[39m, \u001b[38;5;241m100\u001b[39m)\n\u001b[1;32m 3\u001b[0m plt\u001b[38;5;241m.\u001b[39mplot(xvalues, y, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr--\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", "\u001b[0;31mNameError\u001b[0m: name 'xvalues' is not defined" ] } ], "source": [ "y = (xvalues + 2) * (xvalues - 1) * (xvalues - 2)\n", "xvalues = linspace(-3, 3, 100)\n", "plt.plot(xvalues, y, 'r--')\n", "plt.plot([-2, 1, 2], [0 ,0, 0], 'bo', markersize=10)\n", "plt.xlabel('x-axis')\n", "plt.ylabel('y-axis')\n", "plt.title('Nice Python figure!')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answer to Exercise 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 2 " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid decimal literal (1772534416.py, line 3)", "output_type": "error", "traceback": [ "\u001b[0;36m Cell \u001b[0;32mIn[9], line 3\u001b[0;36m\u001b[0m\n\u001b[0;31m x = np.linspace(0, 10np.pi, 100)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid decimal literal\n" ] } ], "source": [ "def test(x, alpha):\n", " return np.exp(-alpha * x) * np.cos(x)\n", "x = np.linspace(0, 10np.pi, 100)\n", "alpha = 0.2\n", "y = test(x)\n", "plt.plot(x, y, 'b')\n", "plt.xlabel('x')\n", "plt.ylabel('f(x)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answer to Exercise 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 3 " ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "expected ':' (693224014.py, line 6)", "output_type": "error", "traceback": [ "\u001b[0;36m Cell \u001b[0;32mIn[10], line 6\u001b[0;36m\u001b[0m\n\u001b[0;31m else\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m expected ':'\n" ] } ], "source": [ "temperature = np.loadtxt('rome_temp.txt')\n", "plt.plot(np.arange(1, 13), temperature, 'k--')\n", "for i in range(len(temperature)):\n", " if temperature[i] < 15:\n", " plt.plot(i + 1, temperature[i], 'bo')\n", " else\n", " plt.plot(i + 1, temperature[i], 'ro')\n", "plt.xlim(1, 12)\n", "plt.xlabel('month')\n", "plt.ylabel('temperature (Celcius)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answer to Exercise 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 4 " ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax. Perhaps you forgot a comma? (1479865858.py, line 8)", "output_type": "error", "traceback": [ "\u001b[0;36m Cell \u001b[0;32mIn[11], line 8\u001b[0;36m\u001b[0m\n\u001b[0;31m print('modified a:' a)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax. Perhaps you forgot a comma?\n" ] } ], "source": [ "a = np.array([2, 2, 4, 2, 4, 4])\n", "\n", "for i in range(a):\n", " if a[i] < 3: # replace value with 77 when value equals 2\n", " a[i] = 77\n", " else: # otherwise replace value with -77\n", " a[i] = -77\n", "print('modified a:' a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answer to Exercise 4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 5 " ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax. Perhaps you forgot a comma? (427805806.py, line 4)", "output_type": "error", "traceback": [ "\u001b[0;36m Cell \u001b[0;32mIn[12], line 4\u001b[0;36m\u001b[0m\n\u001b[0;31m plt.title(image of array y);\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax. Perhaps you forgot a comma?\n" ] } ], "source": [ "y = np.zeros(20, 20)\n", "y[8:13] = 10\n", "plt.matshow(y)\n", "plt.title(image of array y);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answer to Exercise 5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Answers to the exercises" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answer to Exercise 1" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj4AAAHFCAYAAADyj/PrAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAASolJREFUeJzt3Xt8zvX/x/HnNewyzBxmGxlzLOUshyk55ZySLyUl+uL7dUq+FX07kpJCX74R4luInEIlSnydlXOor0oRhpnzNoaN7fP74/3bGMM22/W5Do/77fa5Xdf1uT7Xted1ce167f15HxyWZVkCAADwAX52BwAAAHAVCh8AAOAzKHwAAIDPoPABAAA+g8IHAAD4DAofAADgMyh8AACAz6DwAQAAPoPCBwAA+AwKH8ADTZ8+XQ6HQ/nz59fBgwevu79JkyaqWrVqun0RERHq0aOHixIaw4YNk8PhSNv8/f1Vrlw5Pffcc4qNjc3y833zzTcaNmxYhvc5HA4NGDDg9gLnsPHjx6tixYry9/eXw+FQbGysevTooYiICLujZcqaNWvkcDi0YMECu6MAOYbCB/BgiYmJeu211zJ17BdffKHXX389lxNlbNmyZdq4caOWLl2qDh06aPz48WrTpo2yumLON998ozfffDOXUuasnTt3auDAgWratKlWrVqljRs3KjAwUK+//rq++OILu+MBPiuv3QEAZF/r1q01e/Zsvfjii6pRo8ZNj61Vq5aLUl2vTp06Cg4OliS1aNFCp06d0syZM/XDDz/ovvvusy1Xbtq9e7ckqXfv3qpXr17a/goVKtiSx7IsXbx4UQEBAbb8fMBd0OIDeLAhQ4aoePHieumll255bEanumJjY/XCCy+ofPnycjqdCgkJUdu2bfXbb7+lHZOUlKS3335bd911l5xOp0qUKKFnnnlGJ06cyHbuBg0aSJIOHjyo9evXy+FwaM6cOdcd9+mnn8rhcGjr1q3q0aOHPvzwQ0lKd/rswIED6R4zc+ZMValSRQUKFFCNGjW0ZMmS6553w4YNat68uQIDA1WgQAE1bNhQS5cuTXdM6unE1atXq2/fvgoODlbx4sXVsWNHRUdH3/T1NWnSRE899ZQkqX79+nI4HGnvfUanumJjY9WzZ08VK1ZMhQoVUrt27fTnn3/K4XCkO7V3o9NkqacUr5Z66m/y5MmqUqWKnE6nZsyYIUn6448/1LVrV4WEhMjpdKpKlSpp7y3g7WjxATxYYGCgXnvtNT333HNatWqVmjVrlunHnj17Vvfff78OHDigl156SfXr19e5c+e0bt06HT16VHfddZdSUlL0yCOPaP369RoyZIgaNmyogwcPaujQoWrSpIm2bduWrRaEvXv3SpJKlCihRo0aqVatWvrwww/1xBNPpDtuwoQJqlu3rurWravXX39dCQkJWrBggTZu3Jh2TMmSJdOuL126VFu3btXw4cNVqFAhjRo1So8++qj27Nmj8uXLS5LWrl2rFi1aqHr16vr444/ldDo1ceJEtW/fXnPmzNHjjz+eLkOvXr3Url07zZ49W4cOHdLgwYP11FNPadWqVTd8fRMnTtScOXP09ttva9q0abrrrrtUokSJDI9NSUlR+/bttW3bNg0bNky1a9fWxo0b1bp166y9qRn48ssvtX79er3xxhsKCwtTSEiIfvnlFzVs2FBlypTR+++/r7CwMH333XcaOHCgTp48qaFDh972zwXcmgXA40ybNs2SZG3dutVKTEy0ypcvb917771WSkqKZVmW1bhxY+uee+5J95iyZcta3bt3T7s9fPhwS5K1YsWKG/6cOXPmWJKshQsXptu/detWS5I1ceLEm+YcOnSoJcmKiYmxLl26ZJ05c8aaNWuWFRAQYIWHh1sXLlxI93p27NiR9tgtW7ZYkqwZM2ak7evfv791o19bkqzQ0FArPj4+bV9MTIzl5+dnjRw5Mm1fgwYNrJCQEOvs2bNp+y5fvmxVrVrVKl26dNp7mJqpX79+6X7OqFGjLEnW0aNHb/rar/43ulr37t2tsmXLpt1eunSpJcmaNGlSuuNGjhxpSbKGDh16w8emSn2fr30/goKCrNOnT6fb36pVK6t06dJWXFxcuv0DBgyw8ufPn+74DRs2WJKsL7/88qavFfAknOoCPJy/v7/efvttbdu2TfPnz8/047799ltVrlxZDz744A2PWbJkiYoUKaL27dvr8uXLaVvNmjUVFhamNWvWZOpnhYWFKV++fCpatKieeuop1a5dW8uWLVP+/PklSU888YRCQkLSnW4ZP368SpQocV0LzM00bdpUgYGBabdDQ0MVEhKSNvItISFBmzdvVqdOnVSoUKG04/LkyaNu3brp8OHD2rNnT7rnfPjhh9Pdrl69uiRlOJouO9auXStJeuyxx9Ltv7b1KzuaNWumokWLpt2+ePGiVq5cqUcffVQFChRI92/atm1bXbx4UZs2bUo7PigoSJJUuHDh284CuAsKH8ALdOnSRbVr19arr76qS5cuZeoxJ06cUOnSpW96zLFjxxQbGyt/f3/ly5cv3RYTE6OTJ09m6mf997//1datW7Vz506dPHlSGzZs0N133512v9Pp1N///nfNnj1bsbGxOnHihObPn69evXrJ6XRm6mdIUvHixa/b53Q6deHCBUnSmTNnZFlWutNjqUqVKiVJOnXq1E2fMzVP6nPerlOnTilv3rwqVqxYuv2hoaG3/dzXvs5Tp07p8uXLGj9+/HX/nm3btpWkdP+mRYoUkUThA+9CHx/ACzgcDr333ntq0aKFpkyZkqnHlChRQocPH77pMakdepctW5bh/Ve3rtxMjRo10kZ13Ujfvn317rvv6pNPPtHFixd1+fJl9enTJ1PPn1lFixaVn5+fjh49et19qR2Wb5UzpxUvXlyXL1/W6dOn0xU/MTEx1x2bP39+JSYmXrf/RgXotR2eixYtmta61b9//wwfU65cubTrpUuXzvKUA4C7o/ABvMSDDz6oFi1aaPjw4QoPD7/l8W3atNEbb7xx007RDz30kObOnavk5GTVr18/pyOnU7JkSXXu3FkTJ05UUlKS2rdvrzJlyqQ75urWlux0qi5YsKDq16+vRYsWacyYMWnPkZKSolmzZql06dKqXLny7b+YLGjcuLFGjRqlefPmqW/fvmn7586de92xEREROn78uI4dO5bWIpSUlKTvvvsuUz+rQIECatq0qXbs2KHq1avL398/Z14E4EEofAAv8t5776lOnTo6fvy47rnnnpseO2jQIM2bN0+PPPKI/vnPf6pevXq6cOGC1q5dq4ceekhNmzZVly5d9Nlnn6lt27Z67rnnVK9ePeXLl0+HDx/W6tWr9cgjj+jRRx/NsfzPPfdcWoE1bdq06+6vVq1a2uts06aN8uTJk+Uv8JEjR6pFixZq2rSpXnzxRfn7+2vixIn63//+pzlz5lzXSpLbWrdurfvuu08vvPCC4uPjVadOHW3cuFGffvqpJMnP70qPhMcff1xvvPGGunTposGDB+vixYv64IMPlJycnOmf9+9//1v333+/GjVqpL59+yoiIkJnz57V3r179fXXX6cbrbZ27Vo1b95c8+fPV8eO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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xvalues = np.linspace(-3, 3, 100) # xvalues should be placed before y. linspace should be np.linspace\n", "y = (xvalues + 2) * (xvalues - 1) * (xvalues - 2)\n", "plt.plot(xvalues, y, 'r--')\n", "plt.plot([-2, 1, 2], [0 ,0, 0], 'bo', markersize=10)\n", "plt.xlabel('x-axis')\n", "plt.ylabel('y-axis')\n", "plt.title('Nice Python figure!');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 1\n", "\n", "Answer to Exercise 2" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkMAAAGwCAYAAACq12GxAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAARzZJREFUeJzt3Xl4VOX9/vF7siOQQYgEAgGCssqmrEEtbkSouPcnljaAIhWVUsRqRb5WtNaobSlWBVxwp0pVVFopklZWWQRkUxBQwARICCBMWDQhyfn98XQSYhIIMDPnnJn367rONZPDzJxPxpG5eVaPZVmWAAAAIlSU3QUAAADYiTAEAAAiGmEIAABENMIQAACIaIQhAAAQ0QhDAAAgohGGAABARIuxuwCnKysr0+7du1W/fn15PB67ywEAALVgWZYOHTqklJQURUWduO2HMHQSu3fvVmpqqt1lAACA05Cbm6vmzZuf8DGEoZOoX7++JPNmJiYm2lwNAACojcLCQqWmppZ/j58IYegk/F1jiYmJhCEAAFymNkNcGEANAAAiGmEIAABENMIQAACIaIQhAAAQ0QhDAAAgohGGAABARCMMAQCAiEYYAgAAEY0wBAAAIhphCAAARDRXhaFFixbpmmuuUUpKijwejz744IOTPmfhwoXq3r27EhIS1Lp1a02bNi34hQIAANdwVRg6cuSIunbtqmeffbZWj9++fbt++tOf6pJLLtGaNWv04IMPasyYMXrvvfeCXCkAAHALV23UOnDgQA0cOLDWj582bZpatGihyZMnS5I6dOigVatW6c9//rNuuummIFVZO5Yl7dghxcRIqam2lgIAQERzVcvQqVq2bJkyMjIqnbvqqqu0atUqHTt2rNrnFBUVqbCwsNIRDPfdJ7VuLf0vpwEAAJuEdRjKz89XcnJypXPJyckqKSnRvn37qn1OVlaWvF5v+ZEapGabjh3N7eefB+XlAQBALYV1GJIkj8dT6WfLsqo97zd+/Hj5fL7yIzc3Nyh1XXihuV271nSZAQAAe7hqzNCpatKkifLz8yudKygoUExMjBo1alTtc+Lj4xUfHx/02jp2lGJjpYMHzdihtLSgXxIAAFQjrFuG0tPTlZ2dXencvHnz1KNHD8XGxtpUlREXJ3XubO7TVQYAgH1cFYYOHz6stWvXau3atZLM1Pm1a9cqJydHkuniGjp0aPnjR40apW+//Vbjxo3Tpk2b9PLLL2v69On67W9/a0f5VVxwgblds8beOgAAiGSu6iZbtWqVLrvssvKfx40bJ0kaNmyYXn31VeXl5ZUHI0lKS0vTnDlzdM899+i5555TSkqK/va3v9k+rd7PH4ZoGQIAwD4ey2L47okUFhbK6/XK5/MpMTExoK+9bJnUt6/UpImUlxfQlwYAIKKdyve3q7rJwk2XLpLHI+XnE4YAALALYchGdetK7dub+4wbAgDAHoQhmzGIGgAAexGGbOZffJFB1AAA2IMwZDNahgAAsBdhyGbdupnb7dulAwdsLQUAgIhEGLJZw4ZSq1bm/v/WkgQAACFEGHIAusoAALAPYcgBGEQNAIB9CEMOQMsQAAD2IQw5gD8MffWVdPSovbUAABBpCEMO0LSplJwslZVJ69fbXQ0AAJGFMOQAHg9dZQAA2IUw5BAMogYAwB6EIYegZQgAAHsQhhzCH4Y2bJCOHbO3FgAAIglhyCFat5YSE6XiYmnzZrurAQAgchCGHMLjkdLSzP2cHHtrAQAgkhCGHCQ11dzm5tpbBwAAkYQw5CAtWphbwhAAAKFDGHIQf8sQ3WQAAIQOYchB6CYDACD0CEMOQjcZAAChRxhykONbhsrK7K0FAIBIQRhykGbNzBT74mJp7167qwEAIDIQhhwkNtbsYC/RVQYAQKgQhhyGGWUAAIQWYchhmFEGAEBoEYYchhllAACEFmHIYegmAwAgtAhDDkM3GQAAoUUYchjCEAAAoUUYchj/mKHdu6Vjx+ytBQCASOC6MDRlyhSlpaUpISFB3bt31+LFi0/4+BkzZqhr164666yz1LRpU916663av39/iKo9dY0bm/WGLMsEIgAAEFyuCkMzZ87U2LFjNWHCBK1Zs0aXXHKJBg4cqJwaRhsvWbJEQ4cO1YgRI/Tll1/qnXfe0cqVK3X77beHuPLai4qSmjc39+kqAwAg+FwVhiZNmqQRI0bo9ttvV4cOHTR58mSlpqZq6tSp1T5++fLlatWqlcaMGaO0tDRdfPHFuuOOO7Rq1aoQV35q/F1lzCgDACD4XBOGiouLtXr1amVkZFQ6n5GRoaVLl1b7nL59+2rnzp2aM2eOLMvSnj179O677+rqq6+u8TpFRUUqLCysdIQag6gBAAgd14Shffv2qbS0VMnJyZXOJycnKz8/v9rn9O3bVzNmzNDgwYMVFxenJk2aqEGDBnrmmWdqvE5WVpa8Xm/5kepPJiFEGAIAIHRcE4b8PB5PpZ8ty6pyzm/jxo0aM2aMfv/732v16tWaO3eutm/frlGjRtX4+uPHj5fP5ys/cm1IJHSTAQAQOjF2F1BbSUlJio6OrtIKVFBQUKW1yC8rK0sXXXSR7rvvPklSly5dVLduXV1yySV67LHH1NS/Rfxx4uPjFR8fH/hf4BTQMgQAQOi4pmUoLi5O3bt3V3Z2dqXz2dnZ6tu3b7XPOXr0qKKiKv+K0dHRkkyLklMRhgAACB3XhCFJGjdunF566SW9/PLL2rRpk+655x7l5OSUd3uNHz9eQ4cOLX/8Nddco1mzZmnq1Knatm2bPv30U40ZM0a9evVSSkqKXb/GSfm7yfbvl44etbcWAADCnWu6ySRp8ODB2r9/vx599FHl5eWpU6dOmjNnjlq2bClJysvLq7Tm0PDhw3Xo0CE9++yzuvfee9WgQQNdfvnlevLJJ+36FWrF65Xq1ZMOHzatQ+3a2V0RAADhy2M5ub/IAQoLC+X1euXz+ZSYmBiy63bsKG3aJGVnS1deGbLLAgAQFk7l+9tV3WSRhBllAACEBmHIoRhEDQBAaBCGHIowBABAaBCGHIpuMgAAQoMw5FC0DAEAEBqEIYc6Pgwx3w8AgOAhDDmUPwwdOSIdOGBvLQAAhDPCkEPVqSMlJZn7dJUBABA8hCEHY9wQAADBRxhyMGaUAQAQfIQhB6NlCACA4CMMORhhCACA4CMMOZg/DO3caW8dAACEM8KQgyUnm9s9e+ytAwCAcEYYcrAmTcwtYQgAgOAhDDmYv2XowAGpqMjeWgAACFeEIQc7+2wpJsbcLyiwtxYAAMIVYcjBoqKkxo3NfbrKAAAIDsKQwzFuCACA4CIMOZx/3FB+vr11AAAQrghDDsf0egAAgosw5HB0kwEAEFyEIYejZQgAgOAiDDkcY4YAAAguwpDD0U0GAEBwEYYcjm4yAACCizDkcGzJAQBAcBGGHI4tOQAACC7CkMNFRdFVBgBAMBGGXIAwBABA8BCGXIDp9QAABA9hyAWYXg8AQPC4LgxNmTJFaWlpSkhIUPfu3bV48eITPr6oqEgTJkxQy5YtFR8fr3PPPVcvv/xyiKoNDLrJAAAInhi7CzgVM2fO1NixYzVlyhRddNFFev755zVw4EBt3LhRLVq0qPY5N998s/bs2aPp06frvPPOU0FBgUpKSkJc+ZmhmwwAgOBxVRiaNGmSRowYodtvv12SNHnyZH388ceaOnWqsrKyqjx+7ty5WrhwobZt26aGDRtKklq1ahXKkgOCliEAAILHNd1kxcXFWr16tTIyMiqdz8jI0NKlS6t9zuzZs9WjRw899dRTatasmdq2bavf/va3+v7772u8TlFRkQoLCysddmPMEAAAweOalqF9+/aptLRUyf5mkv9JTk5Wfg39R9u2bdOSJUuUkJCg999/X/v27dNdd92l7777rsZxQ1lZWXrkkUcCXv+ZoGUIAIDgcU3LkJ/H46n0s2VZVc75lZWVyePxaMaMGerVq5d++tOfatKkSXr11VdrbB0aP368fD5f+ZGbmxvw3+FUsSUHAADB45owlJSUpOjo6CqtQAUFBVVai/yaNm2qZs2ayev1lp/r0KGDLMvSzp07q31OfHy8EhMTKx12O/tsKTbW3GdLDgAAAss1YSguLk7du3dXdnZ2pfPZ2dnq27dvtc+56KKLtHv3bh0+fLj83JYtWxQVFaXmzZsHtd5AioqSGjc29+kqAwAgsFwThiRp3Lhxeumll/Tyyy9r06ZNuueee5STk6NRo0ZJMl1cQ4cOLX/8kCFD1KhRI916663auHGjFi1apPvuu0+33Xab6tSpY9evcVoYNwQAQHC4ZgC1JA0ePFj79+/Xo48+qry8PHXq1Elz5sxRy5YtJUl5eXnKyckpf3y9evWUnZ2tX//61+rRo4caNWqkm2++WY899phdv8Jp888oY60hAAACy2NZlmV3EU5WWFgor9crn89n6/ih226TXnlF+uMfpQcftK0MAABc4VS+v13VTRbJ6CYDACA4CEMuwZYcAAAEB2HIJViFGgCA4CAMuQTdZAAABAdhyCUIQwAABAdhyCX83WRsyQEAQGARhlyCLTkAAAgOwpBLeDxsyQEAQDAQhlyE6fUAAAQeYchFmF4PAEDgEYZchBllAAAEHmHIRQhDAAAEHmHIRdi5HgCAwCMMuQgtQwAABB5hyEUIQwAABB5hyEWYTQYAQOARhlzE3zLElhwAAAQOYchF2JIDAIDAIwy5CFtyAAAQeIQhl2F6PQAAgUUYcplzzjG3e/faWwcAAOGCMOQy/m4ywhAAAIFBGHIZWoYAAAgswpDL+FuGmE0GAEBgEIZchpYhAAACizDkMrQMAQAQWIQhl6FlCACAwCIMuYw/DBUUSJZlby0AAIQDwpDL+LvJfvhBOnLE3loAAAgHhCGXqVtXqlPH3GfcEAAAZ44w5EIsvAgAQOAQhlzo+HFDAADgzBCGXIiWIQAAAsd1YWjKlClKS0tTQkKCunfvrsWLF9fqeZ9++qliYmLUrVu34BYYArQMAQAQOK4KQzNnztTYsWM1YcIErVmzRpdccokGDhyonJycEz7P5/Np6NChuuKKK0JUaXDRMgQAQOC4KgxNmjRJI0aM0O23364OHTpo8uTJSk1N1dSpU0/4vDvuuENDhgxRenp6iCoNLlqGAAAIHNeEoeLiYq1evVoZGRmVzmdkZGjp0qU1Pu+VV17RN998o4cffrhW1ykqKlJhYWGlw2loGQIAIHBcE4b27dun0tJSJScnVzqfnJys/Pz8ap+zdetWPfDAA5oxY4ZiYmJqdZ2srCx5vd7yIzU19YxrDzRahgAACBzXhCE/j8dT6WfLsqqck6TS0lINGTJEjzzyiNq2bVvr1x8/frx8Pl/5kZube8Y1BxotQwAABE7tmkscICkpSdHR0VVagQoKCqq0FknSoUOHtGrVKq1Zs0ajR4+WJJWVlcmyLMXExGjevHm6/PLLqzwvPj5e8fHxwfklAuTH+5NVkwUBAEAtuaZlKC4uTt27d1d2dnal89nZ2erbt2+VxycmJmrDhg1au3Zt+TFq1Ci1a9dOa9euVe/evUNVesD5w1BxsXTokL21AADgdq5pGZKkcePGKTMzUz169FB6erpeeOEF5eTkaNSoUZJMF9euXbv0+uuvKyoqSp06dar0/MaNGyshIaHKebc56yyzR9mRI6Z1KDHR7ooAAHAvV4WhwYMHa//+/Xr00UeVl5enTp06ac6cOWrZsqUkKS8v76RrDoWLxo2l7dvNuKHzzrO7GgAA3MtjWZZldxFOVlhYKK/XK5/Pp0QHNcH07i199pn0wQfSddfZXQ0AAM5yKt/frhkzhMqYUQYAQGAQhlzKP4iaMAQAwJkhDLmUv2WIhRcBADgzhCGXomUIAIDAIAy5FC1DAAAEBmHIpWgZAgAgMAhDLkXLEAAAgUEYcqnjW4ZYKQoAgNNHGHIpfxg6dkzy+eytBQAANyMMuVRCglS/vrnPuCEAAE4fYcjF/K1DjBsCAOD0EYZcjC05AAA4c4QhF6NlCACAM0cYcjFahgAAOHOEIRejZQgAgDNHGHIxWoaqt2WLNH++VFZmdyUAADcgDLkYLUNVffqpdOGF0uWXSx06SNOmSUeP2l0VAMDJCEMuRstQZStWSAMHSkeOSB6PaSG6806pRQvp979ncUoAQPUIQy5Gy1CFzz+XrrpKOnRIuuwyKT9f+utfpZYtpf37pT/8QbrxRrYuAQBURRhyMX/L0L59kT0+Zt06qX9/0/Jz8cXS7NnmvRk7Vvr6a2nmTLNi9yefSO++a3e1AACnIQy5WFKSuS0pkQ4etLUU23z9tXTlldJ330m9e0sffSTVq1fx5zEx0s03Sw88YH6+917GEAEAKiMMuVh8vOT1mvuROm7oscdMy9iFF0pz50qJidU/7v77TZdZbq70xBOhrREA4GynHIY2b96siRMn6oorrtC5556rpk2bqkuXLho2bJj+/ve/q6ioKBh1ogb+cUORGIYKC6V33jH3n3lGatCg5sfWqSNNmmTuP/WUtH170MsDALhErcPQmjVr1L9/f3Xt2lWLFi1Sz549NXbsWP3hD3/QL3/5S1mWpQkTJiglJUVPPvkkoShE/OOGInEQ9dtvmy6v9u2l9PSTP/6GG6QrrpCKikx3GQAAkhRT2wdef/31uu+++zRz5kw1bNiwxsctW7ZMf/3rX/WXv/xFDz74YECKRM0iuWVo+nRzO2KEmUp/Mh6P9PTTUteu0vvvS9nZZuA1ACCy1ToMbd26VXFxcSd9XHp6utLT01VcXHxGhaF2IrVl6IsvpM8+MwOkhw6t/fPOP18aPdqEot/8xsxEi40NXp0AAOerdTdZbYKQJB3931Sd2j4eZyZSW4b8rULXXFMRCGtr4kTzvm3aJL33XsBLAwC4zGnNJrv00ku1c+fOKudXrFihbt26nWlNOAWR2DJUVCS98Ya5f/vtp/78Bg2kUaPM/VdeCVhZAACXOq0wlJiYqC5duujtt9+WJJWVlWnixIn6yU9+omuvvTagBeLEIrFlaPZss6p0s2Zm1enTMWyYuc3ONtPtAQCRq9Zjho43e/ZsTZs2Tbfffrtmz56tHTt2KCcnRx999JGuvPLKQNeIE/C3DO3ZY28doeTvIhs+XIqOPr3XOPdc6Sc/kRYtkl5/XZowIWDlAQBc5rTCkCSNGjVK3377rZ588knFxMRowYIF6tu3byBrQy1E2matOTnSvHnm/m23ndlr3XqrCUOvvio9+GDtZqQBAMLPaXWTHThwQDfddJOmTp2q559/XjfffLMyMjI0ZcqUQNeHkzh+f7LSUntrCYVXXzWbrV52mdS69Zm91s9+JtWta7b0WLIkIOUBAFzotMJQp06dtGfPHq1Zs0YjR47Um2++qenTp+uhhx7S1VdfHegacQL+/cnKysz+XOHMsioGPI8YceavV6+e2bdMYiA1AESy0wpDo0aN0qJFi5SWllZ+bvDgwVq3bl3Q1xeaMmWK0tLSlJCQoO7du2vx4sU1PnbWrFnq37+/zjnnHCUmJio9PV0ff/xxUOsLtZgYqVEjcz/cZ5Rt3Cjt2GG21rjxxsC85q23mtt//EM6fDgwrwkAcJfTCkMPPfSQoqKqPrV58+bKzs4+46JqMnPmTI0dO1YTJkzQmjVrdMkll2jgwIHKycmp9vGLFi1S//79NWfOHK1evVqXXXaZrrnmGq1ZsyZoNdohUqbXL1xobvv2NYEoEC6+WDrvPOnIEdYcAoBIVeswVFPgqMmuXbtOuZiTmTRpkkaMGKHbb79dHTp00OTJk5WamqqpU6dW+/jJkyfr/vvvV8+ePdWmTRs9/vjjatOmjf75z3/WeI2ioiIVFhZWOpwu0sJQv36Be02Px8xKk+gqA4BIVesw1LNnT40cOVKfffZZjY/x+Xx68cUX1alTJ82aNSsgBfoVFxdr9erVysjIqHQ+IyNDS5curdVrlJWV6dChQyfcWy0rK0ter7f8SE1NPaO6QyESwpBlmZlfUmDDkGS28/B4TNjati2wrw0AcL5aT63ftGmTHn/8cQ0YMECxsbHq0aOHUlJSlJCQoAMHDmjjxo368ssv1aNHD/3pT3/SwIEDA1rovn37VFpaquTk5Ernk5OTlZ+fX6vX+Mtf/qIjR47oZv+o2WqMHz9e48aNK/+5sLDQ8YHI/5aE81pDW7dK+flSfLzUq1dgXzs1VbrySrMA46uvSo8+GtjXBwA4W61bhnbu3Kknn3xSu3fv1rRp09S2bVvt27dPW7dulST94he/0OrVq/Xpp58GPAgdz/OjxWAsy6pyrjpvvfWWJk6cqJkzZ6rxCTazio+PV2JiYqXD6SKhZcjfRdanj5SQEPjX9w+knjHDtEIBACJHrVuGLrjgAuXn5+ucc87Rvffeq5UrV6qRfxpTCCQlJSk6OrpKK1BBQUGV1qIfmzlzpkaMGKF33nknLFfIjqQwFOguMr9rrjGtTtu2SV98IXXuHJzrAACcp9YtQw0aNNC2/w2o2LFjh8rKyoJWVHXi4uLUvXv3KrPVsrOzT7jy9VtvvaXhw4fr73//e9iugRTuYciygh+G6tWT+vc39z/4IDjXAAA4U61bhm666Sb169dPTZs2lcfjUY8ePRRdw8ZQ24I0CnXcuHHKzMxUjx49lJ6erhdeeEE5OTka9b8tyMePH69du3bp9ddfl2SC0NChQ/X000+rT58+5a1KderUkdfrDUqNdgj3MLR9u7RzpxQba7rJguX666V//Uv68EPpoYeCdx0AgLPUOgy98MILuvHGG/X1119rzJgxGjlypOrXrx/M2qoYPHiw9u/fr0cffVR5eXnq1KmT5syZo5YtW0qS8vLyKi0B8Pzzz6ukpER333237r777vLzw4YN06uvvhrS2oMp3MOQv1WoZ0/prLOCd51Bg8ysstWrzU72Dh83DwAIEI9lnfpw0VtvvVV/+9vfQh6G7FBYWCiv1yufz+fYwdQ+n9Sggbl/9GjgFiR0iuHDpddek8aPlx5/PLjXuvhi6dNPpWeekUaPDu61AADBcyrf36e1AvUrr7wSEUHILRITpbg4cz8cd68P9nih411/vbn98MPgXwsA4AynFYbgLB5PRVdZuK01lJNj9iOLjjbbcATbddeZ2wULpAMHgn89AID9CENhwr+6QLiNG/K3CnXvLoWiMbJNG6ljR6mkRJozJ/jXAwDYjzAUJsJ1EHWwtuA4EbrKACCyEIbCRLiGoVCOF/Lzh6F//1v64YfQXRcAYA/CUJgIxzCUl2f2JIuKMrO8QqV7dyklRTp8WPrkk9BdFwBgD8JQmAjHMORvFerWTQrlGplRURUDqekqA4DwRxgKE+EYhhYvNrc/+Unor338uKEQ7zwDAAgxwlCYCMcwtGaNue3dO/TXvvRSs37Tnj3SihWhvz4AIHQIQ2Ei3NYZKi2V1q8397t1C/314+KkgQPN/X/+M/TXBwCEDmEoTPjXGdq7Nzy6db7+WjpyxGwt0qaNPTUMGmRuP/rInusDAEKDMBQmzjnH3JaUSAcP2lpKQKxda267dDGrT9thwACzuvf69WbjVgBAeCIMhYm4uIrNWsNh3JA/DNnRReaXlCT16WPu0zoEAOGLMBRGwmkQtT8MXXCBrWXQVQYAEYAwFEbCKQz5Z5LZ2TIkSVdfbW7/+1/p++/trQUAEByEoTASLmEoP9/MiouKkjp3treWLl2k5s1NEJo/395aAADBQRgKI+EShvxdZG3bSmedZWsp8ngqWofoKqtq927pyy+lY8fsrgQATh9hKIyEy1pDThkv5Hd8GLIse2uxk2WZ7sLHHjPblTRrZo5OncwClX37SmPGSG+8Ie3bZ3e1AFB7MXYXgMAJt5Yhu8cL+V1+uRQfL337rbRxo3T++XZXFHpffy396ldVuwqjokzr3eHD0rJl5pCkevWk3/1OuuceqW7d0NcLAKeClqEw4l940e1hyCmDp/3q1jWBSJL+9S97awm1khLpz382Y7fmzzeLYA4ZIv31r9KSJVJhoeTzSZs3S2++Kf3mNyYsHj4sPfSQWTDzpZfM6wCAUxGGwkg4tAwdPixt3WruOyUMSZE5buiLL6T0dOm++6QffpCuuMKcmzFDGjtWuugiExSjosz4rl/8Qpo82SxS+fe/S61aSXl50siRUteuFS1+AOA0hKEwEg5haMMGMzYlJaXi93ECfxhaulT67jt7awmF1avNGKBVqySvV5o+XcrOllq3Pvlzo6Kkn/9c+uoradIkqWFD073Yt68JUgDgNIShMOIPDwcPSsXFtpZy2pw2XsivVSupY0ezgezHH9tdTXB99ZXZiuTQIeknP5E2bZJuu83MrDsV8fFmzNDWrWbT2++/l375S9OqxOwzAE5CGAojDRpIMf8bEr93r62lnDanjRc6XiSsRp2TI2VkmNlgPXqYMVJNm57ZazZsKP3zn9KECebnp5+W+vd3dwsmgPBCGAojUVEVG7a69YvGqS1DUkVX2b//HZ4DgvfuNUEoN1dq3978nvXrB+a1o6PNlPz33zevuXCh1KuXmaUGAHYjDIUZN681VFJixgxJzllj6Hh9+5pWju++kz791O5qAquw0HSNbd4spaZK8+aZjWoD7frrpc8+k847zyxVcPHFZsA1ANiJMBRm3DyIessWM2upXr3aDdQNtZiYiq6yDz+0t5ZAu+MO6fPPTctidrYJRMHSvr2Zlt+1qwnt/fqZgekAYBfCUJhx81pD/vFCXbuaLj8nuu46c/vhh+GzGvXbb5sjOlqaPVtq1y7410xOlhYsMNPzDx40Y4jmzQv+dQGgOg79ysHpcnPLkJPHC/llZJhZUtu2mT253G7XLunOO839CROkPn1Cd+0GDczMvAEDpKNHTavbrFmhuz4A+LEdR5gJhzDkxPFCfvXqSVdeaWaUffih2ZfLrSzLTJk/eNDMHPu//wt9DXXrmvfxl7+U3nlHuvlms7fZz38e+lqcpKRE2rHD/Lf5/nvTffz991JZmdSokenOTEqSzj7btOgBODOEoTDj1jBkWe5oGZJMV5k/DPmni7vRlCmmayohwQSQ2Fh76oiLk956y+xx9tprZiXroiJp+HB76gm1I0fMVifLl5s1nb76yqzNVJu1mKKipBYtTCj3H507my1RCElA7RGGwoxbw9Du3WZtm+ho52+Ees01ZgHClStNN1OzZnZXdOq2bDHbbEjSk0+aQc12io6WXn7ZdEG+8IJ0662mNWTUKHvrCpZNm6Q5c8zyBYsXV79I6llnmVaghASzJ1ydOub8/v3m/5WDB01L0Y4d5jh+37z69c3sx0suMTP2evWqeD6Aqlw3ZmjKlClKS0tTQkKCunfvrsWLF5/w8QsXLlT37t2VkJCg1q1ba9q0aSGq1B5uDUP+8Tdt2pi//J2sSROpd29zf/Zse2s5HaWl0tChptvliiuk0aPtrsiIipKmTZPGjDE/33mn2RA2XBQWSs8/b7okO3aUfvtb6b//NUEoLU26/Xbz+86da5YdOHTILIK5ZYu0bp1pOVq+3LQaHThgnrdrlxmI/txz5v265BIpMdE89+OPTdfnpZea7rT+/aWnnjITFcrK7H43AGdxVcvQzJkzNXbsWE2ZMkUXXXSRnn/+eQ0cOFAbN25UixYtqjx++/bt+ulPf6qRI0fqzTff1Keffqq77rpL55xzjm666SYbfoPgO36dIcs69S0U7LJxo7l1equQ33XXmS+mDz+sGIDsFtOnSytWmC/NV15x1sw9j8ds9lqnjmmxGjfOLAb5xz+657P8YytXSlOnSjNnmoHikumSvPxys03JwIHmHwGn+vvFxpo9/FJSzPIEfqWlZr2uJUtMq9PixWbD3P/8xxy/+50Zc3TllWZCQP/+7mzdrI3iYvO7791rWtT27zfrhB08aP5bHH+Ulpq/M/2zRD0e04UbH2+OhATTWpeYWPk4+2yz/ljDhmZSgF3dzTgzHstyzwTh3r1768ILL9TUqVPLz3Xo0EHXX3+9srKyqjz+d7/7nWbPnq1NmzaVnxs1apTWrVunZcuW1eqahYWF8nq98vl8SkxMPPNfIsiOHjWDUiXzP7zXa2s5tfarX0kvvig99JD06KN2V3NymzaZf93HxpouCxd8NCSZFoU2bcyXwuTJ0m9+Y3dF1bMs6fHHKwZ1Dx9uus/c8kVjWdInn5jf4ZNPKs63by+NHCllZlasFh+KWr76yqwflZ1txicdOVL5Meefb0LRpZea1qWGDUNT25kqLJS2bzezO7dtM/e//da0mO3cac+2RImJZnD78UejRlV/btiwIkjVqeOssG9ZpuX46FHzWTn+9vvvKx9FReb44QdzW1xsxrv5j5IS0xLpP0pLK1/L/3sPGiT97GeB/T1O5fvbNS1DxcXFWr16tR544IFK5zMyMrS0hhXbli1bpoyMjErnrrrqKk2fPl3Hjh1TbDV/sxYVFamoqKj858LCwgBUHzpnnWVmPB0+bLrK3BKG/C1DHTvaW0dttW8vtW1rujDmzjWzoNzg4YdNEOrYUbrrLrurqZnHYwanN2ligvKrr5rP8z/+URH2naiszHSdPv64aRGSzGKdt9xixj/17Rv6Lz2PR+rQwRxjxpgvq2XLKsLRypWmm/rLL01A9njMWl/9+knp6VLPnqYbz64v6yNHzLYtW7aYLsLjj9oMB4iLM8GzUaOK4+yzzeeoTh3zd2adOhVB2+MxR1mZea+O/6I/csQEsEOHzK3PZ/6BceCA+cenZM4XFppwVltxcaZV6fgWp/r1K9d31lnmcbGx5jPlvz3+v4tlmbpLSszhDyTHBxb/4W8Rqyn0hFpKSuDD0KlwTRjat2+fSktLlexfVfB/kpOTlZ+fX+1z8vPzq318SUmJ9u3bp6bV7ECZlZWlRx55JHCF2yA5uSIMtWljdzUnZ1kVYahDB3trqS2Px3SV/elPpqvMDWHoiy/MDDLJbJbqhlaWESNM1+/gwWbA8RVXmE1fQ9WqUluWZQYwP/SQGd8jmW6VkSOle++VWra0t77jxcWZoNOvn9kvbv9+M3Zp/nwz/uirr8zMzrVrzedEMuGhRw+z7EXbtubvlTZtTFg905BUXCzl55vxUdu3m2PHDhMmtm41kytOJCnJrFiflmZuW7aUmjc3XX/Nmpk/D0WQKy01oei770xrsf84votu376KW/9jS0rMe1BQ4Myxnv7uQf9xfEBLSDCHvysxPr4isPmPmBgzQSIqquKo7r+HfxymXVwThvw8P3oXLcuqcu5kj6/uvN/48eM1bty48p8LCwuVGsy9CYKgcWPpm2+c+T9WdfbsMX8xREWZv2jdwh+G5swx//pycriwLNMlVloq3XijGS/iFtdcY76sBw0yY50uuMCMv7noIrsrM+9rdrYJQZ99Zs7Vry/9+tfm/faP4XOyRo1MmPcH+vx8s5HuokWm1WjdOvP/p78l6Xj16klNm1buAmrQoOIL0H8UFZnWlMOHzXHwoPn/Pi/PBILa1OgPYD8+nNJFHR1d8R7U9u8xyzItMd99V9GidPzhb7Xx31bXBfXjr7LoaPP+H38cH1r8948PN3XqmJayunXNOf/tWWdFzhINrglDSUlJio6OrtIKVFBQUKX1x69JkybVPj4mJkaNGjWq9jnx8fGKj48PTNE28f8FXEODmeP4h3S1bu2u6b99+pgWir17zRfHFVfYXVHNZs0yY1cSEqS//MXuak5deroZEHzDDWYz2X79pKws0+pixwBwyzItKQ8/bOqSzBfHmDFmllgNf724QpMmpiVu8GDzc3GxaVVcudIMzPZ3UX37rQk2/p/PRGysacVJS6t8+APP2Wef+e/lRB6PCZT16tldCVwThuLi4tS9e3dlZ2frhhtuKD+fnZ2t6/wbRv1Ienq6/vnPf1Y6N2/ePPXo0aPa8ULhwt/7l5dnbx215bbxQn7R0dK115rZWf/4h3PD0NGjZlaWJN1/v9Sqla3lnLYOHcwX8h13mEUa77/fhNDXXgvtgN/586WJE821JfOv7bvuMrO0avh3mavFxUkXXmiO4xUVme6sgoLK3UIHD5oWyOOP+PiKL/369c2RnGz+rmra1IQdJ81qRASyXOTtt9+2YmNjrenTp1sbN260xo4da9WtW9fasWOHZVmW9cADD1iZmZnlj9+2bZt11llnWffcc4+1ceNGa/r06VZsbKz17rvv1vqaPp/PkmT5fL6A/z7B8sgjZoLo7bfbXUnt3HWXqfeBB+yu5NT95z+m9rPPtqwffrC7mur5Pw+pqZZ15Ijd1Zy5sjLLmjbNsuLjze/VrJllvf66ZZWWBu+apaWW9e9/W1a/fv7J15YVF2dZo0db1s6dwbsugNN3Kt/frgpDlmVZzz33nNWyZUsrLi7OuvDCC62FCxeW/9mwYcOsfv36VXr8ggULrAsuuMCKi4uzWrVqZU2dOvWUrufGMPTCC+Yv66uvtruS2rn0UlPva6/ZXcmpKymxrJQUU/+sWXZXU9Xu3ZZVt66p7+237a4msD7/3LLOO68inFxwgWX997+BvcahQ5b13HOW1b595RB0992WlZsb2GsBCKxT+f521TpDdnDbOkOS2Tdr0CDTrL16td3VnFxysmlqX7nSzFhxm/vvNwOpb7xReu89u6upzL9+U+/eZjq1k9YyCYTvv5f+9jczld2/CsbVV5uxRJdcYgaPnqqSEvNevfeemdLv85nz9eub2W3jxkkum1MBRKRT+f4mDJ2EG8PQ559L3bubgZBOHze0f7+ZfSGZ2SZuHEi4fr1ZlyUuzgxad8pgzy+/lLp0MeuOLF5s9qgKV3v3Sn/4g1npuaTEnEtKMjP+brzRjOeqaV5EaalZpG/VKrNG0L/+ZT6Xfm3amNlhw4ebQATAHQhDAeTGMJSXZxawiooyM0GcPDVyyRLzL/iWLc1gTLfq2tWEouefN60xTjBokGklvOEGM5ssEmzZYvbf+uCDyoEmOtrM/Gvc2ByNGpk/377drG/z4x3iGzY0LUy33CINGMDgXsCNwnIFatRe48bmL++yMtP9VM3ako7h1plkP/bLX5rusjffdEYYmj/fBKGYGOmJJ+yuJnTatpVeesls+LpokQmBs2aZfyDk59e83ERMjHTeeWafsOuuM2sYnU4XGwB34n/3MBQdbcbh5OWZww1hyC0rT9fk5z83U6sXLzYtXHZOXy8rM2vdSGYaupsWsgyUmBizEerll5sxRf7NOv2r/O7da7oz/evZNGvm7BZUAMFFGApTTZuaL4Ddu6uuD+Ik4dIy1Ly5+eL973+lGTPMvlp2eestM26sfn2zKGCki4qq2JoBAKpDT3iYcsvCi+EShiTTVSaZrjK7RuL98IP04IPm/gMPOG8PLwBwIsJQmEpJMbdODkM+n5nFI7m/m0wys5bq1DEbXdq1pMGkSWZAcLNm0tix9tQAAG5DGApTbmgZ+uorc5uSYjZ3dLvERDP4VjKtQ6G2a5dZb0cyM6rOOiv0NQCAGxGGwpQ/DO3ebW8dJxIug6eP5+8qe+sts3dTKI0fb3bATk83A7oBALVDGApTbmgZCqfxQn4ZGaalq6BAeuON0F13xYqK6z39dPitNA0AwUQYClNuGDMUjmEoNrZiWvsTT1SshhxMZWXSb35j7g8fLvXsGfxrAkA4IQyFKX/LUH6++bJ0onAMQ5I0cqRZ4fibb6R33w3+9WbMMC1D9epVjBkCANQeYShMJSebrpKSEmnfPrurqerIkYrtN8ItDNWrV9FS8/jjwZ1mf/iwmUIvSf/3f85eYBMAnIowFKZiYys2QHViV9nmzeY2KamiznAyerQJRRs2mG0xguWPfzSD5Fu3Zio9AJwuwlAYc/K4oXDtIvM7+2zprrvM/T/+MTitQytWSH/6k7k/aVLNu7IDAE6MMBTGnDyjLNzDkCTdc48JKMuXSwsXBva1jx6VMjOl0lJpyJCK9Y0AAKeOMBTGnLzWUDiuMfRjTZpII0aY+4Ee2Hz//dLWrWal6WefDexrA0CkIQyFMSe3DPlXnw7nliFJuu8+sxt6dra0cmVgXnPePOm558z9V14xXXIAgNNHGApjTh0zdOyYmXYuSe3b21tLsLVqJf3iF+b+qFFmI9UzceCAdOut5v7o0VL//mf2egAAwlBYc2rL0Ndfmyn/deuabp5w99hjZt2hzz+Xxow5s9e6+27T7dm2rfTkk4GpDwAiHWEojDl1zJC/i6x9+8jYNiI11exV5vFIL74ovfrqqb+GZUmPPmpeJzrabL3BRqwAEBiEoTB2fMtQMBf+O1XHh6FI0b+/9Mgj5v6dd0rr1tX+uZYlPfig9PDD5uennpJ69Qp8jQAQqQhDYcwfhoqLzVgTp/CHoXCeSVadCROkgQPNuKGbbpIOHjz5cyzLTNF/4gnz86RJ0rhxQS0TACIOYSiMxcdLDRua+07qKovEliFJiooy3VstW5oB5L/4hbRnT82PLyszrUhPP21+fu45E4wAAIFFGApzThtEbVnSpk3mfqSFIckMpH73XSkuTpozxwSjO++smF0nSbm5Jvj06yc9/7wZazR9esWK1gCAwCIMhTmnhaG8POnQIdNKct55dldjjx49pLlzpd69paIiado0Mzvs+uulnj2lFi3MtPklSyoGS992m91VA0D4IgyFOaetNeTvImvdOrL30rrsMmnZMmnBAjOOqKxM+vBDadUq0xJ08cXSn/9sVpn2r1MEAAiOGLsLQHA5bXp9pA6ero7HY7rC+vWT1q+XZs6U0tKka66RkpPtrg4AIgdhKMw5rZssUgdPn0yXLuYAAIQe3WRhzmlhKJIHTwMAnIkwFOacOmaIMAQAcArCUJg7fsyQ3atQHzok7dxp7rdrZ28tAAD4EYbCnD8Mff+9VFhoby1btpjbc84x6+0AAOAErglDBw4cUGZmprxer7xerzIzM3XwBPsZHDt2TL/73e/UuXNn1a1bVykpKRo6dKh2O2VaVYicdZbk9Zr7dneVMZMMAOBErglDQ4YM0dq1azV37lzNnTtXa9euVWZmZo2PP3r0qD7//HM99NBD+vzzzzVr1ixt2bJF1157bQirdganDKJmvBAAwIlcMbV+06ZNmjt3rpYvX67evXtLkl588UWlp6dr8+bNalfNABSv16vs7OxK55555hn16tVLOTk5atGiRbXXKioqUlFRUfnPhXb3LQVA06YmiNjdKMZMMgCAE7miZWjZsmXyer3lQUiS+vTpI6/Xq6VLl9b6dXw+nzwejxo0aFDjY7Kyssq74rxer1JTU8+kdEegZQgAgJq5Igzl5+ercePGVc43btxY+fn5tXqNH374QQ888ICGDBmixMTEGh83fvx4+Xy+8iM3N/e063YKJ0yvLykxW0tIhCEAgLPYGoYmTpwoj8dzwmPVqlWSJI/HU+X5lmVVe/7Hjh07pltuuUVlZWWaMmXKCR8bHx+vxMTESofbOaFlaMcOqbhYSkgwO7UDAOAUto4ZGj16tG655ZYTPqZVq1Zav3699uzZU+XP9u7dq+STbOJ07Ngx3Xzzzdq+fbs++eSTsAg3p8oJ+5P5u8jatTM71gMA4BS2hqGkpCQlJSWd9HHp6eny+Xz67LPP1KtXL0nSihUr5PP51Ldv3xqf5w9CW7du1fz589UoQhe3cULLEIOnAQBO5Yp/o3fo0EEDBgzQyJEjtXz5ci1fvlwjR47UoEGDKs0ka9++vd5//31JUklJiX72s59p1apVmjFjhkpLS5Wfn6/8/HwVFxfb9avYwj9maNcu+1ahZvA0AMCpXBGGJGnGjBnq3LmzMjIylJGRoS5duuiNN96o9JjNmzfL5/NJknbu3KnZs2dr586d6tatm5o2bVp+nMoMtHDgX0XgyBHpu+/sqYEwBABwKlesMyRJDRs21JtvvnnCx1jHNXu0atWq0s+RLCHBdJXl5Unbt4d+KwzLopsMAOBcrmkZwplp1crc7tgR+mvv2ycdOCB5PFLbtqG/PgAAJ0IYihB2hiF/q1CLFmavNAAAnIQwFCHS0szt9u2hv/aXX5rbjh1Df20AAE6GMBQh7GwZ8oeh888P/bUBADgZwlCEcELLUKdOob82AAAnQxiKEMe3DIV6kh0tQwAAJyMMRYgWLcxsru+/lwoKQnfdvXvNIUkdOoTuugAA1BZhKELExUnNmpn7oRw35G8VSkuT6tYN3XUBAKgtwlAEsWPcEF1kAACnIwxFEDtmlBGGAABORxiKIIQhAACqIgxFkFB3k1kWYQgA4HyEoQgS6pahggJp/34zi40NWgEATkUYiiD+lqEdO6SysuBfz98q1Lo1e5IBAJyLMBRBmjeXoqOl4mIpPz/416OLDADgBoShCBITI6WmmvuhGDf0xRfmljAEAHAywlCECeW4IVqGAABuQBiKMKEKQ8wkAwC4BWEowoRqen1ennTwoBQVxUwyAICzEYYiTKhahvytQueeKyUkBPdaAACcCcJQhAlVyxBdZAAAtyAMRRh/y1BOjlRaGrzrEIYAAG5BGIowKSlSbKxUUiLt2hW86/jDUKdOwbsGAACBQBiKMNHRUosW5n6wxg0xkwwA4CaEoQgU7HFDu3ZJhYUmeLVtG5xrAAAQKIShCBTsGWX+VqE2baT4+OBcAwCAQCEMRaBQhSG6yAAAbkAYikDB7iYjDAEA3IQwFIGC3TLEBq0AADchDEUgf8tQbq507FhgX/vYMWndOnO/W7fAvjYAAMFAGIpAyclmYHNZmbRzZ2Bfe8MGqahI8nql884L7GsDABAMhKEIFBVV0VUW6HFDK1ea2549zXUAAHA613xdHThwQJmZmfJ6vfJ6vcrMzNTBgwdr/fw77rhDHo9HkydPDlqNbhKscUPHhyEAANzANWFoyJAhWrt2rebOnau5c+dq7dq1yszMrNVzP/jgA61YsUIpKSlBrtI9Wrc2t1u3BvZ1CUMAALeJsbuA2ti0aZPmzp2r5cuXq3fv3pKkF198Uenp6dq8ebPatWtX43N37dql0aNH6+OPP9bVV18dqpIdr0sXc7tmTeBe88iRimn1hCEAgFu4omVo2bJl8nq95UFIkvr06SOv16ulS5fW+LyysjJlZmbqvvvu0/m1nOddVFSkwsLCSkc4uvBCc/v552YvsUBYs0YqLZWaNpWaNQvMawIAEGyuCEP5+flq3LhxlfONGzdWfn5+jc978sknFRMTozFjxtT6WllZWeXjkrxer1JTU0+rZqfr3NnsHbZ3b+B2rz++i8zjCcxrAgAQbLaGoYkTJ8rj8ZzwWLVqlSTJU823q2VZ1Z6XpNWrV+vpp5/Wq6++WuNjqjN+/Hj5fL7yIzc39/R+OYerU0fq2NHcD1RXGeOFAABuZOuYodGjR+uWW2454WNatWql9evXa8+ePVX+bO/evUpOTq72eYsXL1ZBQYFatGhRfq60tFT33nuvJk+erB01TKOKj49XfITsLnrhhWZdoM8/l6655sxfjzAEAHAjW8NQUlKSkpKSTvq49PR0+Xw+ffbZZ+rVq5ckacWKFfL5fOrbt2+1z8nMzNSVV15Z6dxVV12lzMxM3XrrrWdefBi48ELptddMGDpT330nff21uU8YAgC4iStmk3Xo0EEDBgzQyJEj9fzzz0uSfvWrX2nQoEGVZpK1b99eWVlZuuGGG9SoUSM1atSo0uvExsaqSZMmJ5x9FkmOH0R9pv7Xm6lzz5UaNjzz1wMAIFRcMYBakmbMmKHOnTsrIyNDGRkZ6tKli954441Kj9m8ebN8Pp9NFbpP165moPPOnVJBwZm9Fl1kAAC3ckXLkCQ1bNhQb7755gkfY51kjnhN44QiVf36Ups20pYtZhD1VVed/msRhgAAbuWaliEEh7+r7ExnlPnD0P+GdAEA4BqEoQgXiHFDu3ZJu3ebjVkvuCAwdQEAECqEoQgXiDDkbxU6/3ypbt0zrwkAgFAiDEU4f0vON99IBw+e3mswXggA4GaEoQjXsKHUqpW5v3bt6b0G44UAAG5GGEJ569DpDKK2LFqGAADuRhjCGY0b+vpr070WH282fwUAwG0IQzijMLR0qbnt1k2KjQ1YSQAAhAxhCOVh6KuvpCNHTu25771nbs9kwUYAAOxEGIKaNJGaNpXKyqT162v/PJ9P+vhjc//mm4NTGwAAwUYYgqTT6yqbPVsqLjbrC51/fnDqAgAg2AhDkHR6M8r+8Q9z+//+X+DrAQAgVAhDkHTqLUMHD1Z0kRGGAABuRhiCpIow9MUXUmHhyR//4YfSsWNSp05Sx47BrQ0AgGAiDEGS1KKFCTXHjkkvvXTyx/u7yBg4DQBwO8IQJEkejzRunLk/ebIJRTU5cECaN8/cp4sMAOB2hCGU+8UvpORkKTdXevfdmh/3wQdSSYnUpYvUvn3IygMAICgIQyiXkCCNHm3u//nPZt+x6rzzjrmlVQgAEA4IQ6jkzjulOnXMrLIFC6r++XffSdnZ5j5hCAAQDghDqKRRI+m228z9P/+56p/7u8i6dpXatQtpaQAABAVhCFXcc48ZUD1njvTllxXnDxyQXnzR3GcWGQAgXBCGUMW550o33GDuT5oklZZK06ZJbdpIy5eb3ekHD7a3RgAAAoUwhGr99rfm9s03zYKMd94p7d9v9iCbN88EJgAAwgFhCNVKT5f69jUbsa5fL519tvTMM9LatdKll9pdHQAAgUMYQo2eesq0AN11l7R1q5l2HxNjd1UAAAQWX22o0UUXSV9/bXcVAAAEFy1DAAAgohGGAABARCMMAQCAiEYYAgAAEY0wBAAAIhphCAAARDTCEAAAiGiuCUMHDhxQZmamvF6vvF6vMjMzdfDgwZM+b9OmTbr22mvl9XpVv3599enTRzk5OcEvGAAAuIJrwtCQIUO0du1azZ07V3PnztXatWuVmZl5wud88803uvjii9W+fXstWLBA69at00MPPaSEhIQQVQ0AAJzOY1mWZXcRJ7Np0yZ17NhRy5cvV+/evSVJy5cvV3p6ur766iu1a9eu2ufdcsstio2N1RtvvHHa1y4sLJTX65XP51NiYuJpvw4AAAidU/n+dkXL0LJly+T1esuDkCT16dNHXq9XS5curfY5ZWVl+uijj9S2bVtdddVVaty4sXr37q0PPvjghNcqKipSYWFhpQMAAIQvV4Sh/Px8NW7cuMr5xo0bKz8/v9rnFBQU6PDhw3riiSc0YMAAzZs3TzfccINuvPFGLVy4sMZrZWVllY9L8nq9Sk1NDdjvAQAAnMfWMDRx4kR5PJ4THqtWrZIkeTyeKs+3LKva85JpGZKk6667Tvfcc4+6deumBx54QIMGDdK0adNqrGn8+PHy+XzlR25ubgB+UwAA4FS27lo/evRo3XLLLSd8TKtWrbR+/Xrt2bOnyp/t3btXycnJ1T4vKSlJMTEx6tixY6XzHTp00JIlS2q8Xnx8vOLj42tRPQAACAe2hqGkpCQlJSWd9HHp6eny+Xz67LPP1KtXL0nSihUr5PP51Ldv32qfExcXp549e2rz5s2Vzm/ZskUtW7asdY3+8eWMHQIAwD3839u1midmucSAAQOsLl26WMuWLbOWLVtmde7c2Ro0aFClx7Rr186aNWtW+c+zZs2yYmNjrRdeeMHaunWr9cwzz1jR0dHW4sWLa33d3NxcSxIHBwcHBweHC4/c3NyTfte7Ymq9JH333XcaM2aMZs+eLUm69tpr9eyzz6pBgwblj/F4PHrllVc0fPjw8nMvv/yysrKytHPnTrVr106PPPKIrrvuulpft6ysTLt371b9+vVrHJ90ugoLC5Wamqrc3Fym7f8I782J8f6cGO/PifH+1Iz35sTc9P5YlqVDhw4pJSVFUVEnHiLtmjAUjljDqGa8NyfG+3NivD8nxvtTM96bEwvX98cVU+sBAACChTAEAAAiGmHIRvHx8Xr44YeZyl8N3psT4/05Md6fE+P9qRnvzYmF6/vDmCEAABDRaBkCAAARjTAEAAAiGmEIAABENMIQAACIaIQhm0yZMkVpaWlKSEhQ9+7dtXjxYrtLcoSJEyfK4/FUOpo0aWJ3WbZZtGiRrrnmGqWkpMjj8eiDDz6o9OeWZWnixIlKSUlRnTp1dOmll+rLL7+0p1gbnOz9GT58eJXPU58+fewpNsSysrLUs2dP1a9fX40bN9b1119fZa/GSP781Ob9idTPz9SpU9WlSxclJiYqMTFR6enp+ve//13+5+H4uSEM2WDmzJkaO3asJkyYoDVr1uiSSy7RwIEDlZOTY3dpjnD++ecrLy+v/NiwYYPdJdnmyJEj6tq1q5599tlq//ypp57SpEmT9Oyzz2rlypVq0qSJ+vfvr0OHDoW4Unuc7P2RpAEDBlT6PM2ZMyeEFdpn4cKFuvvuu7V8+XJlZ2erpKREGRkZOnLkSPljIvnzU5v3R4rMz0/z5s31xBNPaNWqVVq1apUuv/xyXXfddeWBJyw/N7XesRQB06tXL2vUqFGVzrVv39564IEHbKrIOR5++GGra9eudpfhSJKs999/v/znsrIyq0mTJtYTTzxRfu6HH36wvF6vNW3aNBsqtNeP3x/Lsqxhw4ZZ1113nS31OE1BQYElyVq4cKFlWXx+fuzH749l8fk53tlnn2299NJLYfu5oWUoxIqLi7V69WplZGRUOp+RkaGlS5faVJWzbN26VSkpKUpLS9Mtt9yibdu22V2SI23fvl35+fmVPkvx8fHq168fn6XjLFiwQI0bN1bbtm01cuRIFRQU2F2SLXw+nySpYcOGkvj8/NiP3x+/SP/8lJaW6u2339aRI0eUnp4etp8bwlCI7du3T6WlpUpOTq50Pjk5Wfn5+TZV5Ry9e/fW66+/ro8//lgvvvii8vPz1bdvX+3fv9/u0hzH/3nhs1SzgQMHasaMGfrkk0/0l7/8RStXrtTll1+uoqIiu0sLKcuyNG7cOF188cXq1KmTJD4/x6vu/ZEi+/OzYcMG1atXT/Hx8Ro1apTef/99dezYMWw/NzF2FxCpPB5PpZ8ty6pyLhINHDiw/H7nzp2Vnp6uc889V6+99prGjRtnY2XOxWepZoMHDy6/36lTJ/Xo0UMtW7bURx99pBtvvNHGykJr9OjRWr9+vZYsWVLlz/j81Pz+RPLnp127dlq7dq0OHjyo9957T8OGDdPChQvL/zzcPje0DIVYUlKSoqOjqyTogoKCKkkbUt26ddW5c2dt3brV7lIcxz/Ljs9S7TVt2lQtW7aMqM/Tr3/9a82ePVvz589X8+bNy8/z+TFqen+qE0mfn7i4OJ133nnq0aOHsrKy1LVrVz399NNh+7khDIVYXFycunfvruzs7Erns7Oz1bdvX5uqcq6ioiJt2rRJTZs2tbsUx0lLS1OTJk0qfZaKi4u1cOFCPks12L9/v3JzcyPi82RZlkaPHq1Zs2bpk08+UVpaWqU/j/TPz8nen+pE0ufnxyzLUlFRUfh+bmwbuh3B3n77bSs2NtaaPn26tXHjRmvs2LFW3bp1rR07dthdmu3uvfdea8GCBda2bdus5cuXW4MGDbLq168fse/NoUOHrDVr1lhr1qyxJFmTJk2y1qxZY3377beWZVnWE088YXm9XmvWrFnWhg0brJ///OdW06ZNrcLCQpsrD40TvT+HDh2y7r33Xmvp0qXW9u3brfnz51vp6elWs2bNIuL9ufPOOy2v12stWLDAysvLKz+OHj1a/phI/vyc7P2J5M/P+PHjrUWLFlnbt2+31q9fbz344INWVFSUNW/ePMuywvNzQxiyyXPPPWe1bNnSiouLsy688MJK0zkj2eDBg62mTZtasbGxVkpKinXjjTdaX375pd1l2Wb+/PmWpCrHsGHDLMsy06Mffvhhq0mTJlZ8fLz1k5/8xNqwYYO9RYfQid6fo0ePWhkZGdY555xjxcbGWi1atLCGDRtm5eTk2F12SFT3vkiyXnnllfLHRPLn52TvTyR/fm677bby76dzzjnHuuKKK8qDkGWF5+fGY1mWFbp2KAAAAGdhzBAAAIhohCEAABDRCEMAACCiEYYAAEBEIwwBAICIRhgCAAARjTAEAAAiGmEIAABENMIQAACIaIQhAAAQ0QhDAAAgohGGAESUvXv3qkmTJnr88cfLz61YsUJxcXGaN2+ejZUBsAsbtQKIOHPmzNH111+vpUuXqn379rrgggt09dVXa/LkyXaXBsAGhCEAEenuu+/Wf/7zH/Xs2VPr1q3TypUrlZCQYHdZAGxAGAIQkb7//nt16tRJubm5WrVqlbp06WJ3SQBswpghABFp27Zt2r17t8rKyvTtt9/aXQ4AG9EyBCDiFBcXq1evXurWrZvat2+vSZMmacOGDUpOTra7NAA2IAwBiDj33Xef3n33Xa1bt0716tXTZZddpvr16+tf//qX3aUBsAHdZAAiyoIFCzR58mS98cYbSkxMVFRUlN544w0tWbJEU6dOtbs8ADagZQgAAEQ0WoYAAEBEIwwBAICIRhgCAAARjTAEAAAiGmEIAABENMIQAACIaIQhAAAQ0QhDAAAgohGGAABARCMMAQCAiEYYAgAAEe3/A/+6iHgZoC5oAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def test(x, alpha):\n", " return np.exp(-alpha * x) * np.cos(x)\n", "x = np.linspace(0, 10 * np.pi, 100) # * between 10 and np.pi\n", "alpha = 0.2\n", "y = test(x, alpha) # forgot to pass alpha to test\n", "plt.plot(x, y, 'b')\n", "plt.xlabel('x')\n", "plt.ylabel('f(x)');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 2\n", "\n", "Answer to Exercise 3" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAGwCAYAAABPSaTdAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAW6RJREFUeJzt3XdYFOf+NvB7qIIiikoTFHvBRqJGjQVPYo9GiZqIXXNMURSJDbuxYDn6wxY1JnbEvEfBoyYajQU19oIFVCwoRRArTeruvH9w2CMBDCu7PFvuz3XtFXZmmL3dsMyXZ54iybIsg4iIiMhAmYgOQERERKRNLHaIiIjIoLHYISIiIoPGYoeIiIgMGosdIiIiMmgsdoiIiMigsdghIiIig2YmOoC2KZVKPH78GDY2NpAkSXQcIiIiKgFZlpGamgpnZ2eYmJSubcbgi53Hjx/D1dVVdAwiIiJ6B7GxsXBxcSnVOQy+2LGxsQGQ92ZVrFhRcBoiIiIqiZSUFLi6uqqu46Vh8MVO/q2rihUrstghIiLSM5rogsIOykRERGTQWOwQERGRQWOxQ0RERAaNxQ4REREZNBY7REREZNBY7BAREZFBY7FDREREBo3FDhERERk0FjtERERk0Ax+BmUiIrUpFMCpU0BCAuDkBHToAJiaik71dvqYmaiMCG3ZCQgIQKtWrWBjYwN7e3v07dsXd+7cKfb4r776CpIkITAwsOxCEpFxCQkB3NyAzp0Bb++8/7q55W3XVfqYmagMCS12wsLCMHbsWJw7dw5HjhxBbm4uunbtivT09ELH7t27F+fPn4ezs7OApERkFEJCgP79gbi4gtvj4/O262LxoI+ZicqYJMuyLDpEvqdPn8Le3h5hYWHo2LGjant8fDw++OAD/P777+jVqxd8fX3h6+tbonOmpKTA1tYWycnJXAiUiIqnUOS1hvy1aPgvWZIgubgA0dGAqSkeP36MnJycIo81NTWFi4uL6nlCQgKys7OLPNbExASurq6q50+ePEFmZmaxMWvWrKn6OikhAXbvvw/ThAQUuVSiJAFvZCbSJ5q8futUn53k5GQAgJ2dnWqbUqnE0KFDMXnyZLi7u//tObKyspCVlaV6npKSovmgRGR4Tp0qttABAEmWgdjYvOM8PdGtWzfcvHmzyGNdXFwQGxuret6vXz+cP3++yGPt7Ozw/Plz1XNvb28cO3asyGMtLS0LFEL/5+WFgISE4v9Nf8lMZKx0ptiRZRl+fn5o3749mjRpotq+ZMkSmJmZYfz48SU6T0BAAObNm6etmERkqN5WNBRxnKWlJcqVK1fkIZaWloWeF3fsX7dbWFiU+Lz2CkWJIpf430ZkoHSm2Bk3bhyuX7+O06dPq7ZdvnwZK1euxJUrVyBJRTbSFuLv7w8/Pz/V85SUlAJNxERERXJyUuu4S5culfjUYWFhJT724MGDJT524tKleZ2R/05J/21EBkon+uz4+Phg7969OHnyJGrVqqXaHhgYCD8/P5iY/K8ftUKhUN3jfvjw4d+em312iKhEFAooa9QAHj8ueuSGLvZ/ye9nFB+fd8vqr3QxM1EJafL6LXQ0lizLGDduHEJCQnDs2LEChQ4ADB06FNevX0d4eLjq4ezsjMmTJ+P3338XlJqIDJKpKUxWr4YkSZD/2pKc/zwwULeKBlNTYOXKvK/1JTORAEKLnbFjx2LHjh3YuXMnbGxskJiYiMTERGRkZAAAqlSpgiZNmhR4mJubw9HREQ0aNBAZnYgMSEZGBmRZBry8IO3eDal69YIHuLgAu3cDXl5iAr6Nl1detmIyv2DHZCKxxc66deuQnJwMT09PODk5qR6//PKLyFhEZERkWcaAAQMwcOBAvHz5Mq94ePgQOH4c2Lkz77/R0bpZ6OQrInP6zZsY/euveO+99/Dq1SvRCYmEEtpB+V26C5Wknw4RUUmtXbsWv/76KywtLREbG4vKlSvn3fbRtxaRv2RWpqbixIkTePToEb7++msEBweXeKAHkaHhQqBEZLRu3ryJSZMmAQCWLl2KZs2aCU6kOTY2Nti5cydMTU3xyy+/YNu2baIjEQnDYoeIjFJmZiYGDRqErKws9OjRAz4+PqIjadwHH3ygmnds3LhxuHfvnuBERGKw2CEiozR16lTcvHkT9vb22Lx5s8He4pk2bRo6duyItLQ0DB48uNglLogMGYsdIjI6Bw8exKpVqwAAmzdvhoODg+BE2mNqaort27ejUqVKuHDhAmeYJ6PEYoeIjE6FChXg4uKC8ePHo2fPnqLjaF2NGjXw448/olq1amjTpo3oOERlTidmUNYmzqBMREV58eIFrK2ti12HyhClpKTw9yDpDYOZQZmIqCylp6ervrazszOqQgdAgQvG06dP32n6DyJ9xGKHiIzCjRs3ULNmTfz8889Gf5Hfs2cP6tevjy1btoiOQlQmWOwQkcHLyMjAoEGD8Pz5c4SGhoqOI9zdu3fx6tUr+Pj44O7du6LjEGkdix0iMniTJ09GREQEHBwcsGnTJoMdZl5SkydPhqenJ9LT0zkcnYwCix0iMmgHDhzA2rVrAQBbt26Fvb294ETi5Q9Hr1y5Mi5evIg5c+aIjkSkVSx2iMhgJSYmYuTIkQAAX19fdOvWTXAi3eHi4oKNGzcCABYvXozjx48LTkSkPSx2iMggKZVKDB8+HM+ePUPz5s2xePFi0ZF0zmeffYbRo0dDlmUMHToUL168EB2JSCtY7BCRQVIqlWjZsiXKly+PnTt3wtLSUnQknRQYGIj69eujX79+sLKyEh2HSCs4qSARGbSkpCT20/kbaWlpqFChgugYRAVwUkEiomJkZmYiOztb9ZyFzt97s9BRKBR4+vSpwDREmsdih4gMip+fH9q1a4eoqCjRUfROfHw8PvroI/To0aNAwUik71jsEJHB2LdvH9atW4fLly/j0aNHouPopRs3buDy5cuYNWuW6ChEGsNih4gMwuPHjzFq1CgAwHfffYcuXboITqR/qlevjp9//hkAsGzZMhw7dkxwIiLNYLFDRHovf5j58+fP0aJFCyxcuFB0JL3Vt29fjBkzRjUc/fnz56IjEZUaix0i0nv/93//hz/++ANWVlYIDg7mMPNSWrFiBRo0aIDHjx/jyy+/NPqFU0n/sdghIr125coV+Pv7A8greho2bCg4kf4rX748goODYW5ujr1796pmWibSV2aiAxARlYatrS08PDzg7OyMMWPGiI5jMDw8PLBo0SJs2bIFbdu2FR2HqFQ4qSAR6b2cnBxkZGTwM65hSqUS2dnZKFeunOgoZIQ4qSARGb1Xr16pvjY3N2ehowUmJiYFCp24uDiBaYjeHYsdItI78fHxqFevHqZNm4acnBzRcQyeLMsICAhA7dq1ceTIEdFxiNTGYoeI9Mqbq5n/8ccfHClUBiRJQkxMDHJycjBs2DAuJ0F6h8UOEemV5cuX4+jRo7C2tkZQUBAsLCxERzIKy5cvR6NGjZCYmIjRo0ezyCS9wmKHiPTG5cuXMX36dADAypUr0aBBA8GJjIe1tTWCg4NhYWGB/fv3Y/369aIjEZUYix0i0gvp6enw9vZGbm4uvLy8MHr0aNGRjE7z5s2xePFiAHkLrkZGRgpORFQyLHaISC/4+voiKioK1atXx8aNGyFJkuhIRmnChAno2rUrMjMz4e3tjaysLNGRiP6W0GInICAArVq1go2NDezt7dG3b1/cuXNHtT8nJwdTp05F06ZNUb58eTg7O2PYsGF4/PixwNREJEL79u1RsWJF7NixA3Z2dqLjGC0TExNs2bIFrq6uGD16NPtMkV4QOqlg9+7d8cUXX6BVq1bIzc3FjBkzcOPGDURGRqJ8+fJITk5G//798c9//hPNmzfHy5cv4evri9zcXFy6dKlEr8FJBYkMx6tXr1CpUiXRMQhAZmYmJxskrdLk9VunZlB++vQp7O3tERYWho4dOxZ5zMWLF9G6dWs8evQINWrU+Ntzstgh0l8KhQIpKSmoXLmy6Cj0FqmpqcjOzkaVKlVERyEDYrAzKCcnJwPAW5uok5OTIUlSsX/dZWVlISUlpcCDiPTTsmXL0LRpUxw/flx0FCrGlStX4OHhgREjRnA4OuksnSl2ZFmGn58f2rdvjyZNmhR5TGZmJqZNmwZvb+9iq7yAgADY2tqqHq6urtqMTURacvHiRcyaNQvx8fF4+PCh6DhUDDMzM8TFxeHAgQP44YcfRMchKpLO3MYaO3Ysfv31V5w+fRouLi6F9ufk5GDAgAGIiYnBiRMnii12srKyCowOSElJgaurK29jEemRtLQ0eHh44N69exgwYAB++eUXjr7SYatWrcKECRNQrlw5XLx4sdg/WInUYXC3sXx8fLBv3z4cP3682EJn4MCBiI6OxpEjR976j7a0tETFihULPIhIv4wfPx737t2Dq6srNmzYwEJHx/n4+KBHjx7IzMzEoEGDkJmZKToSUQFCix1ZljFu3DiEhITg2LFjqFWrVqFj8gudu3fv4o8//mAHOCID9//+3//D5s2bIUkStm/fzs7JekCSJGzevBn29va4efMmpk6dKjoSUQFCi52xY8dix44d2LlzJ2xsbJCYmIjExERkZGQAAHJzc9G/f39cunQJQUFBUCgUqmOys7NFRiciLYiJicGYMWMAAP7+/ujUqZPgRFRSDg4O2Lx5M4C821qHDh0SnIjof4T22SmuaXrz5s0YMWIEHj58WGRrDwAcP34cnp6ef/saHHpOpD9evXqFr7/+GtHR0Th9+jTMzc1FRyI1TZgwAffu3VO19BC9K4OdZ0cbWOwQ6RdZlpGWlgYbGxvRUegd5OTkwMzMjP2sqNQMroMyERm3pKQk1RwtkiSx0NFj5ubmBQqd+/fvC0xDlIfFDhEJlZKSgrZt2+Kzzz7Dy5cvRcchDcnKysKIESPg7u6OGzduiI5DRo7FDhEJ5ePjgwcPHuDy5cu89WFALCws8OzZM2RlZWHQoEGqgSdEIrDYISJhdu3ahW3btsHExARBQUFc5NOASJKETZs2wcHBAREREZg8ebLoSGTEWOwQkRCPHj3C119/DQCYOXMm2rdvLzgRaZq9vT22bt0KAFi7di0OHDggOBEZKxY7RFTmcnNzMWTIECQnJ6Nt27aYNWuW6EikJd26dcPEiRMBACNHjkRiYqLgRGSMWOwQUZkLCAjA6dOnYWNjg6CgIJiZmYmORFoUEBCA5s2b49mzZxg5ciRXR6cyx2KHiMqcp6cnatSogXXr1hU7cSgZDktLS+zcuRNubm6YMGECO6JTmeOkgkQkRHp6OsqXLy86BpWh3NxctuJRiWny+s2fOiLSHoUCOHUKSEgAnJzwuE4dOLu6AgALHSP0ZqETExODqpUrw/ryZdXPBzp0AExNBSYkQ8Vih4i0IyQEmDABiItTbVIC+OObb/DxDz+Iy0XC7d27F3sGD8YqSYJ1evr/dri4ACtXAl5e4sKRQWKfHSLSvJAQoH//AoUOADgD+Gjdurz9ZLRqXb2Kra9fw/bNQgcA4uPzfm7480Eaxj47RKRZCgXg5lao0MknSxIkFxcgOpq3LIzRf38+5Lg4FNlNWZLyWnj482H0uBAoEemuU6eKLXQAQJJlIDY27zgyPv/9+Sh2PBZ/PkgLWOwQkWYlJGj2ODIs/PkgAVjsEJFmOTlp9jgyLPz5IAFY7BCRZnXokNfnoriJ4yQJcHXNO46MD38+SAAWO0SkWaamecOHgcIXtPzngYHsfGqs+PNBArDYISLN8/ICdu8GqlcvuN3FJW8751Exbvz5oDLGSQWJSOPmzp2LXr16odXDhwVmUOYMuaTi5QV8+mmBn49wGxssDwzEhu7dYW1tLTohGRDOs0NEGnX69Gl06NABZmZmiImJgRM7mlIJKBQK1K9fHw8ePMDixYsxdepU0ZFIMM6zQ0Q6SZZl1UVq1KhRLHSoxExNTTF37lwAQEBAAF68eCE2EBkUFjtEpDH79u3DmTNnYGVlhTlz5oiOQ3rG29sbTZs2RXJyMhYvXiw6DhkQFjtEpBG5ubmYPn06AMDX1xfOzs6CE5G+MTU1VRU5q1atQmxsrOBEZChY7BCRRmzbtg2RkZGws7PDlClTRMchPdWjRw907NgRWVlZqttaRKXFYoeISi0jI0N122r69OmoVKmS2ECktyRJwpIlSwAAW7ZsQWRkpOBEZAg49JyISs3MzAwzZ87E5s2bMXbsWNFxSM+1adMGX331FZo0aYK6deuKjkMGgEPPiUhjZFmGVNwyAEREauDQcyLSGW/+vcRCh7QhNzcXBv53OWkZix0iemfx8fFo2rQpgoKCeDEirQgNDUXjxo1x4MAB0VFIj7HYIaJ3Nm/ePERERGDdunWio5CBOn/+PO7evQt/f38oFArRcUhPCS12AgIC0KpVK9jY2MDe3h59+/bFnTt3ChwjyzLmzp0LZ2dnWFlZwdPTExEREYISE1G+27dvY9OmTQCAJUuW8BYWacXUqVNRqVIlREREYMeOHaLjkJ4SWuyEhYVh7NixOHfuHI4cOYLc3Fx07doV6enpqmOWLl2KFStWYM2aNbh48SIcHR3RpUsXpKamCkxORDNmzIBCoUCfPn3w4Ycfio5DBqpy5cqqySpnzZqFzMxMwYlIH+nUaKynT5/C3t4eYWFh6NixI2RZhrOzM3x9fVXr7WRlZcHBwQFLlizBV1999bfn5GgsIs07f/482rRpAxMTE1y/fh3u7u6iI5EBy8jIQP369REXF4fly5fDz89PdCQqAwY7Gis5ORkAYGdnBwCIjo5GYmIiunbtqjrG0tISnTp1wpkzZ4o8R1ZWFlJSUgo8iEhz3lzsc/jw4Sx0SOusrKxUsykvXLhQda0gKimdKXZkWYafnx/at2+PJk2aAAASExMBAA4ODgWOdXBwUO37q4CAANja2qoerq6u2g1OZGQuXryIsLAwWFpaYt68eaLjkJEYPnw4GjVqhBcvXuD//b//JzoO6RmdmUF53LhxuH79Ok6fPl1o3187Pr5t4jJ/f/8CTZwpKSkseIg0qHXr1jh+/Dhu3brFzxaVGTMzM6xduxY5OTno0qWL6DikZ3Si2PHx8cG+fftw8uRJuLi4qLY7OjoCyGvhcXJyUm1PSkoq1NqTz9LSEpaWltoNTGTkPD094enpKToGGZnOnTuLjkB6SuhtLFmWMW7cOISEhODYsWOoVatWgf21atWCo6Mjjhw5otqWnZ2NsLAwtGvXrqzjEhm1rKwsPHnyRHQMIgDAs2fPEB8fLzoG6Qmhxc7YsWOxY8cO7Ny5EzY2NkhMTERiYiIyMjIA5N2+8vX1xaJFixAaGoqbN29ixIgRsLa2hre3t8joREZn/fr1qFOnDgIDA0VHISP373//G3Xq1IGvr6/oKKQnhN7Gyp919a/N4Zs3b8aIESMAAFOmTEFGRga+/fZbvHz5Eh988AEOHz4MGxubMk5LZLxSUlKwYMECpKenw9raWnQcMnINGzZEamoqdu/ejYsXL6JVq1aiI5GO06l5drSB8+wQld7s2bMxf/581K9fHxERETAz04nufmTERowYga1bt6Jz5844evQoZ/A2QAY7zw4R6Z4nT55gxYoVAIBFixax0CGdMG/ePFhYWOD48eM4fPiw6Dik41jsENFbzZ8/H+np6WjdujW8vLxExyECANSsWRPjxo0DAEybNg1KpVJwItJlLHaIqFj37t3Dhg0bAHCxT9I906dPR8WKFREeHo5du3aJjkM6rFTFTlZWlqZyEJEOOnfuHExMTNC9e3fOq0M6p0qVKpgyZQrMzMwQHR0tOg7pMLU6KP/+++8IDg7GqVOnEBMTA6VSCWtra7z33nvo2rUrRo4cCWdnZ23mVRs7KBOVzsOHD5Gbm4u6deuKjkJUSHp6OhISEvjzaYA0ef0uUbGzd+9eTJ06FcnJyejZsydat26N6tWrw8rKCi9evMDNmzdx6tQpnD17FiNGjMD8+fNRrVq1UgXTFBY7RERE+qfMi53WrVtj1qxZ6NWrF0xMir/zFR8fj5UrV8LBwQHfffddqYJpCosdIvVdvHgRJiYmeP/990VHISqxa9euITIyEoMGDRIdhTSgzIsdfcZih0g9SqUSrVu3xuXLlwtM8Emky86fP4+2bduifPnyuHfvXrHrJ5L+0Kl5dhQKBcLDw/Hy5cvSnoqIdMDu3btx+fJlVKhQAT179hQdh6hEWrdujZYtWyItLQ0LFiwQHYd0jNrFjq+vL37++WcAeYVOp06d8N5778HV1RUnTpzQdD4iKkM5OTmYMWMGAGDy5Mmwt7cXnIioZCRJwuLFiwEAGzZswIMHDwQnIl2idrGze/duNG/eHACwf/9+REdH4/bt2/D19VX9kiQi/fTTTz/h3r17sLe3h5+fn+g4RGr5xz/+ga5duyInJwezZs0SHYd0iNrFzrNnz+Do6AgA+O233zBgwADUr18fo0ePxo0bNzQekIjKRlpaGubNmwcAmDVrFipUqCA4EZH68lt3du7ciatXrwpOQ7pC7WLHwcEBkZGRUCgUOHToED7++GMAwOvXr2FqaqrxgERUNgIDA/HkyRPUrl0bY8aMER2H6J14eHioRmP5+/sLTkO6Qu1iZ+TIkRg4cCCaNGkCSZLQpUsXAHk94Rs2bKjxgERUNlxcXODg4IAFCxbAwsJCdByidzZ//nw4OzujZ8+eXDOLALzj0PPdu3cjNjYWAwYMgIuLCwBg69atqFSpEj799FONhywNDj0nKrn09HRYWVm9dT4tIn2Qk5MDc3Nz0TGoFDjPjhpY7BAREekfTV6/zdT9hu+///6t+2fPnv3OYYio7M2YMQNNmjTB559/zhYdMiiyLCMkJARbtmxBSEgIW3qMmNotOx4eHgWe5+TkIDo6GmZmZqhTpw6uXLmi0YClxZYdouJdv34dLVq0gCzLCA8PV00rQWQI0tLSULt2bTx9+hTr16/HV199JToSqUFoy05RQ/lSUlIwYsQI9OvXr1RhiKhs+fv7Q5ZlDBw4kIUOGZwKFSpg1qxZGD9+PObOnYshQ4agfPnyomORABpps65YsSK+//57TuJEpEfCwsLw22+/wczMjNPrk8H66quvUKtWLSQmJmLlypWi45AgGrtB/+rVKyQnJ2vqdESkRbIsY+rUqQCAL7/8EvXq1ROciEg7LCwsMH/+fADAkiVL8Pz5c8GJSAS1++ysWrWqwHNZlpGQkIDt27ejY8eOCA4O1mjA0mKfHaLCQkND4eXlBWtra9y7dw9OTk6iIxFpjVKpxHvvvYdr167Bz88Py5cvFx2JSkDo0PNatWoVeG5iYoJq1arhH//4B/z9/WFjY1OqQJrGYoeoIIVCgSZNmuD27duYMWMGb2GRUTh06BB69OgBCwsLPHz4kAW+HhDaQTk6OrpUL0hEYpmammLt2rVYunQpJk+eLDoOUZno1q0bvv32W/Tp00e1viMZD04qSERERDqnzFt2vLy8sGXLFlSsWBFeXl5vPTYkJKRUgYhIeziFPlGe1NRUnet2QdpTotFYtra2kCRJ9fXbHkSkm168eIE6depg7ty5yMrKEh2HSJilS5fCxcUFp0+fFh2FyghvYxEZiSlTpmDZsmVo2rQprl69ClNTU9GRiIT4+uuvsWHDBrRr1w6nT59W/TFPukWT12+159mJjo7G3bt3C22/e/cuHj58WKowRKQdcXFxWL16NQAgICCAhQ4ZtdmzZ8PKygpnzpzB/v37RcehMqB2sTNixAicOXOm0Pbz589jxIgRmshERBo2d+5cZGZmokOHDujZs6foOERCOTs7Y+LEiQDylkxRKBSCE5G2qV3sXL16FR9++GGh7W3atEF4eLgmMhGRBkVGRmLz5s0A8maQZZM9Ud5tXTs7O0RGRmLbtm2i45CWqV3sSJKE1NTUQtuTk5PVro5PnjyJ3r17w9nZGZIkYe/evQX2p6WlYdy4cXBxcYGVlRUaNWqEdevWqRuZyKjNmDEDSqUSffv2Rdu2bUXHIdIJtra2mD59OoC821oZGRmCE5E2qV3sdOjQAQEBAQUKG4VCgYCAALRv316tc6Wnp6N58+ZYs2ZNkfsnTpyIQ4cOYceOHbh16xYmTpwIHx8f/Oc//1E3NpFRiomJwW+//QYTExMsWrRIdBwinTJ27Fi4uroiISEBp06dEh2HtEjtGZSXLl2Kjh07okGDBujQoQMA4NSpU0hJScGxY8fUOlePHj3Qo0ePYvefPXsWw4cPh6enJwBgzJgx2LBhAy5duoRPP/1U3ehERqdGjRq4desWjh8/jkaNGomOQ6RTypUrh23btsHZ2Rn169cXHYe0SO2WncaNG+P69esYOHAgkpKSkJqaimHDhuH27dto0qSJRsO1b98e+/btQ3x8PGRZxvHjxxEVFYVu3boV+z1ZWVlISUkp8CAyZrVr18bo0aNFxyDSSZ6enix0jIDaLTtAXk/2smgSX7VqFf75z3/CxcUFZmZmMDExwU8//fTW22UBAQGYN2+e1rMR6TKFQoGIiAg0a9ZMdBQivXHjxg1UrVqVi4QaoBIVO9evXy/xCTX5y3XVqlU4d+4c9u3bh5o1a+LkyZP49ttv4eTkhI8//rjI7/H394efn5/qeUpKClxdXTWWiUgf7NixAyNGjMA333yDH374QXQcIp23ZMkS+Pv748svv8SPP/4oOg5pWImKnRYtWkCSJPzdZMuSJGlsvoKMjAxMnz4doaGh6NWrF4C8Qio8PBz/+te/ii12LC0tYWlpqZEMRPooMzMTs2fPBgC4ubmJDUOkJ9q3bw9ZlrFp0yb4+fmhYcOGoiORBpWo2ImOjtZ2jkJycnKQk5MDE5OC3YpMTU2hVCrLPA+Rvli3bh1iYmJQvXp1+Pj4iI5DpBc+/PBD9OnTB/v27cOMGTOwZ88e0ZFIg0pU7NSsWVMrL56WloZ79+6pnkdHRyM8PBx2dnaoUaMGOnXqhMmTJ8PKygo1a9ZEWFgYtm3bhhUrVmglD5G+S05OxoIFCwAA8+bNg5WVleBERPpj0aJFOHDgAEJCQnDu3Dm0adNGdCTSELVHYwHA9u3b8eGHH8LZ2RmPHj0CAAQGBqo9/82lS5fg4eEBDw8PAICfnx88PDxUTfC7du1Cq1atMHjwYDRu3BiLFy/GwoUL8fXXX79LbCKDt2zZMrx48QINGzbE8OHDRcch0ivu7u6qz820adP+tusG6Q+1Vz1ft24dZs+eDV9fXyxcuBA3b95E7dq1sWXLFmzduhXHjx/XVtZ3wlXPyVgkJCSgbt26eP36NUJCQtCvXz/RkYj0TmxsLOrVq4esrCz89ttvb50LjrRL6Krnq1evxsaNGzFjxowCKye3bNkSN27cKFUYInp3UVFRsLGxQZs2bdC3b1/RcYj0kqurK3x8fFClShUkJyeLjkMaonbLjpWVFW7fvo2aNWvCxsYG165dQ+3atXH37l00a9ZM59YXYcsOGZO0tDQkJSWhdu3aoqMQ6a38IsfW1lZwEuOmyeu32pMK1qpVC+Hh4YU6LR88eBCNGzcuVRgiKp0KFSqgQoUKomMQ6TUWOYZH7WJn8uTJGDt2LDIzMyHLMi5cuIDg4GAEBATgp59+0kZGInqLq1evIioqCgMGDCg0VQMRvTtZlhEaGorMzEx4e3uLjkOloHaxM3LkSOTm5mLKlCl4/fo1vL29Ub16daxcuRJffPGFNjISUTFkWcakSZNw7NgxRERE4Pvvvxcdichg7NmzBwMGDEDVqlXxySefsCuEHlO7z86bnj17BqVSCXt7e01m0ij22SFDdvjwYXTr1g0WFhaIiorS2pxYRMYoNzcX7u7uiIqKwqxZs/jHRBkTMhorIyMD+/btQ2pqqmpb1apVYW9vj5SUFOzbtw9ZWVmlCkNEJadUKjFt2jQAwNixY1noEGmYmZmZatHrFStWIDExUXAielclLnZ+/PFHrFy5EjY2NoX2VaxYEatWrWKfHaIy9Msvv+Dq1auoWLEipk+fLjoOkUHy8vJC69atkZ6ejvnz54uOQ++oxMVOUFAQfH19i93v6+uLrVu3aiITEf2N7OxszJw5E0DeoIGqVasKTkRkmCRJwpIlSwDk/dH/5hJHpD9KXOzcvXsXzZs3L3Z/s2bNcPfuXY2EIqIiKBTAiRNAcDB+nTwZDx88gIODAyZOnCg6GZFB8/T0RI8ePZCbm4tZ06erPoc4cSLvc0k6r8SjsXJzc/H06VPUqFGjyP1Pnz5Fbm6uxoIR0RtCQoAJE4C4OABAPwCPzc1xtU8flC9fXmw2IiMQEBCARrduYcHx48C///2/HS4uwMqVgJeXuHD0t0rcsuPu7o4//vij2P1HjhyBu7u7RkIR0RtCQoD+/VWFTj773Fx0++mnvP1EpFXN79/Hvx49gtWzZwV3xMfnfT75OdRpJS52Ro0ahfnz5+PAgQOF9u3fvx8LFizAqFGjNBqOyOgpFHktOkXMECHJMiQA8PVlUzqRNv33cygVNVNL/jZ+DnVaiW9jjRkzBidPnkSfPn3QsGFDNGjQAJIk4datW4iKisLAgQMxZswYbWYlMj6nThVq0SlAloHY2LzjPD3LLBaRUeHnUO+pNbf8jh07sGvXLtSvXx9RUVG4ffs2GjRogODgYAQHB2srI5HxSkjQ7HFEpD5+DvWe2stFDBw4EAMHDtRGFiL6KycnzR5HROrj51DvlahlJz09Xa2Tqns8ERWjQwfAxQWyJBW9X5IAV9e844hIO/77OQQ/h3qrRMVO3bp1sWjRIjx+/LjYY2RZxpEjR9CjRw+sWrVKYwGJjJqpad6wVlmG8q/78n/xBgbmHUdE2pH/OQQKFTyqLsv8HOq0Et3GOnHiBGbOnIl58+ahRYsWaNmyJZydnVGuXDm8fPkSkZGROHv2LMzNzeHv78+OykQadLxyZawGsBKA65s7XFzyfsFyfg8i7fPyAnbvLjDfFQDEm5jAPigIFvwc6jS1Vj2Pi4vDv//9b5w8eRIPHz5ERkYGqlatCg8PD3Tr1g09e/aEiYlafZ61jquek77r0KEDTp8+jXHffIPVAwfmdYJ0csprMudfkkRlS6EATp2CIi4Og/z8sOfpU2zasgXDhw8XnczgaPL6rVaxo49Y7JC+u3//PubPn48lS5bAwcFBdBwi+q/AwEBcv34d3333HSfV1QIWO2pgsUNERKR/NHn91q17TkSkkpKSIjoCEZFBYLFDpINev36Nxo0bY/DgwXj+/LnoOET0FuHh4Rg9ejRiY2NFR6FisNgh0kGrVq1CfHw8zpw5gwoVKoiOQ0RvMXHiRGzatAnr168XHYWKwWKHSMe8ePECixcvBgAsWLAAlpaWghMR0duMHz8eALBhwwZkZGQITkNFeadi59SpUxgyZAjatm2L+Ph4AMD27dtx+vRpjYYjMkYBAQFITk5G8+bNMWjQINFxiOhv9O7dGzVr1sTz58+xa9cu0XGoCGoXO3v27EG3bt1gZWWFq1evIisrCwCQmpqKRYsWaTwgkTGJiYnB6tWrAeQVPbo2bxURFWZmZoZvv/0WQN4taAMf5KyX1P5NumDBAqxfvx4bN26Eubm5anu7du1w5coVjYYjMjZz585FVlYWPD090b17d9FxiKiEvvzyS1hZWSE8PJx3OXSQ2sXOnTt30LFjx0LbK1asiFevXmkiE5FRSk1NxcGDBwEAixcvhlTcooNEpHPs7OwwZMgQAOD6kDpI7WLHyckJ9+7dK7T99OnTqF27tkZCERkjGxsbREVFITg4GB988IHoOESkJh8fHzg5OeG9994THYX+Qu1i56uvvsKECRNw/vx5SJKEx48fIygoCJMmTVLdsyypkydPonfv3nB2doYkSdi7d2+hY27duoU+ffrA1tYWNjY2aNOmDWJiYtSNTaQXbGxs8MUXX4iOQUTvoGnTpoiJiYG/v7/oKPQXJVr1/E1TpkxBcnIyOnfujMzMTHTs2BGWlpaYNGkSxo0bp9a50tPT0bx5c4wcORKfffZZof33799H+/btMXr0aMybNw+2tra4desWypUrp25sIp0lyzKOHDmCLl268NYVkZ4zM1P7skplQK21sRQKBU6fPo2mTZuiXLlyiIyMhFKpROPGjUs98ZkkSQgNDUXfvn1V27744guYm5tj+/bt73xero1Fum7fvn349NNP0bFjRxw/fpwjsIj0nEKhwL59+1CuXDn06NFDdBy9JWxtLFNTU3Tr1g3JycmwtrZGy5Yt0bp1a63M8KpUKvHrr7+ifv366NatG+zt7fHBBx8UeavrTVlZWUhJSSnwINJVCoVC1eTdrl07FjpEBmD9+vXw8vLCtGnTOAxdR6j9m7Vp06Z48OCBNrIUkJSUhLS0NCxevBjdu3fH4cOH0a9fP3h5eSEsLKzY7wsICICtra3q4erqqvWsRO9q27ZtiIyMROXKlTF16lTRcYhIA7y9vWFtbY3r16/j1KlTouMQ3qHYWbhwISZNmoQDBw4gISFBa60oSqUSAPDpp59i4sSJaNGiBaZNm4ZPPvnkreuP+Pv7Izk5WfXgwmykqzIyMjB79mwAwPTp01GpUiWxgYhIIypXroyhQ4cC4DB0XaF2T6r8ic769OlToDOlLMuQJAkKhUIjwapWrQozMzM0bty4wPZGjRq9dcImS0tLriVEemHt2rWIi4uDq6ur2p37iUi3+fj4YMOGDQgNDUVMTAxq1KghOpJRU7vYOX78uDZyFGJhYYFWrVrhzp07BbZHRUWhZs2aZZKBSFtevXqlWl5l3rx5HGFIZGDc3d3x0Ucf4ejRo/jhhx9Ui/uSGGoXO506ddLYi6elpRWYoDA6Ohrh4eGws7NDjRo1MHnyZHz++efo2LEjOnfujEOHDmH//v04ceKExjIQiZCYmIhatWrB2dkZw4YNEx2HiLRg/PjxOHr0KDZu3IjZs2fD2tpadCSjpdbQcyBvIsC3KWopieKcOHECnTt3LrR9+PDh2LJlCwBg06ZNCAgIQFxcHBo0aIB58+bh008/LfFrcOg56SqlUonExEQ4OzuLjkJEWqBQKFCvXj1UrVoVO3fuRN26dUVH0iuavH6rXewUNTT2zb47muqzoyksdoiISJSnT5+iWrVqomPoJWHz7ADAy5cvCzySkpJw6NAhtGrVCocPHy5VGCJDd+fOHcyfPx9paWmioxBRGWChoxvU7rNja2tbaFuXLl1gaWmJiRMn4vLlyxoJRmSIZsyYgT179uDu3bvYtm2b6DhEVEZevXqFsLAwtbphkOZobBGPatWqFRo5RUT/c/78eezZsweSJGHKlCmi4xBRGXn69Clq166N169f4/79+3BzcxMdyeioXexcv369wHNZlpGQkIDFixejefPmGgtGZEhkWca0adMA5HXAb9KkieBERFRWqlWrhrZt2+LIkSP44YcfsHTpUtGRjM47dVCWJKnQeh9t2rTBpk2b0LBhQ40GLC12UCZdcOjQIfTo0QOWlpaIioriBGNERubAgQPo3bs3KlWqhLi4OJQvX150JJ2nyeu32i070dHRBZ6bmJigWrVqnBSNqBhKpVLVqjNu3DgWOkRGqEePHqhduzYePHiAoKAgjBkzRnQko6L2aKywsDA4OjqiZs2aqFmzJlxdXVGuXDlkZ2ezwyVREYKDg3Ht2jVUrFhRtcI5ERkXU1NT1bIwq1at4mroZUztYmfkyJFITk4utD01NRUjR47USCgiQ/LBBx/g888/h7+/P6pUqSI6DhEJMnLkSJQvXx4RERFcCaCMqV3s5C/4+VdxcXFFDksnMnZ169bFrl27MHXqVNFRiEigSpUqYfjw4TA1NcXVq1dFxzEqJe6z4+HhAUmSIEkSPvroI5iZ/e9bFQoFoqOjVSuiE1HhPwyK+iOBiIzLjBkz4O/vDxcXF9FRjEqJi52+ffsCAMLDw9GtWzdUqFBBtc/CwgJubm747LPPNB6QSF/Nnz8fd+/exfz58zmvBhEBANfCE6TExc6cOXMAAG5ubvj88885+oroLZ48eYKlS5ciPT0dn376KYsdIirkzp07cHFx4TD0MqB2n53hw4ez0CH6GwsWLEB6ejpatWrFFk8iKuSbb75Bw4YNsWPHDtFRjILaxY5CocC//vUvtG7dGo6OjrCzsyvwIDJ29+/fx4YNGwAAS5YsYV8dIiokfwJeDkMvG2oXO/PmzcOKFSswcOBAJCcnw8/PD15eXjAxMcHcuXO1EJFIv8yaNQs5OTno3r07OnfuLDoOEemgESNGoEKFCoiMjMSxY8dExzF4ahc7QUFB2LhxIyZNmgQzMzMMGjQIP/30E2bPno1z585pIyOR3rh69SqCg4MBAAEBAYLTEJGusrW1xYgRIwDkte6Qdqld7CQmJqJp06YAgAoVKqgmGPzkk0/w66+/ajYdkZ5ZvHgxAGDw4MFo0aKF2DBEpNPyZ1Tev38/Hjx4IDiNYVO72HFxcUFCQgKAvMnSDh8+DAC4ePEiLC0tNZuOSM9s3LgRs2fPxvfffy86ChHpuAYNGqB79+6QZRlr164VHcegqV3s9OvXD0ePHgUATJgwAbNmzUK9evUwbNgwjBo1SuMBifRJxYoVMW/ePNSuXVt0FCLSA+PHjwcA7N27F0qlUnAawyXJpewGfv78efz555+oW7cu+vTpo6lcGqPJJeKJivP48WM4OTlx5BURqUWpVCI4OBheXl6wsrISHUenaPL6rVaxk5OTgzFjxmDWrFl685crix3StpycHDRu3BiVK1fGzp07UbduXdGRiIj0niav32rdxjI3N0doaGipXpDI0Pz888+4d+8eHj58CAcHB9FxiEhPKZVKvHjxQnQMg/ROfXb27t2rhShE+ic9PR3z5s0DAMyePRs2NjaCExGRPjp58iQaN26sGo5OmlXitbHy1a1bF/Pnz8eZM2fw/vvvF1rTI7+zFZExCAwMRGJiImrXro0xY8aIjkNEesrR0RF37txBVFQU7t+/jzp16oiOZFDU7qBcq1at4k8mSTo3VwD77JC2PH/+HLVr10ZKSgqCgoLg7e0tOhIR6bGePXvi4MGDmDhxIlasWCE6jnDCOijrIxY7pC3fffcdVqxYgRYtWuDy5cswMVH7rjARkcqhQ4fQo0cPVKxYEfHx8ahQoYLoSEIJ66D8puzsbNy5cwe5ubmlCkCkjxQKBc6cOQMgb9ZkFjpEVFpdu3ZF/fr1kZKSgm3btomOY1DU/g39+vVrjB49GtbW1nB3d0dMTAyAvL46+VPlExk6U1NT/Pnnnzh06BC6du0qOg4RGQATExP4+PgAAFavXs1JBjVI7WLH398f165dw4kTJ1CuXDnV9o8//hi//PKLRsMR6TITExN069aNEwkSkcYMHz4cNjY2uH37Nk6ePCk6jsFQu9jZu3cv1qxZg/bt2xf4Jd+4cWPcv39fo+GIdNGuXbuQnp4uOgYRGSAbGxusXLkSx44dQ6dOnUTHMRhqDz1/+vQp7O3tC21PT0/nX7hk8E6dOoVBgwbB1dUVt2/fhrW1tehIRGRgRo4cKTqCwVG7ZadVq1b49ddfVc/zC5yNGzeibdu2ap3r5MmT6N27N5ydnSFJ0lsnK/zqq68gSRICAwPVjUykEbIsY+rUqQDyhoiy0CEibVMoFKIjGAS1W3YCAgLQvXt3REZGIjc3FytXrkRERATOnj2LsLAwtc6Vnp6O5s2bY+TIkfjss8+KPW7v3r04f/48nJ2d1Y1LpDH/+c9/cPbsWVhbW2POnDmi4xCRAXv9+jVmz56Nf//737h58yZnZy8ltVt22rVrhz///BOvX79GnTp1cPjwYTg4OODs2bN4//331TpXjx49sGDBAnh5eRV7THx8PMaNG4egoCCYm5urG5dII3JzczF9+nQAgK+vL5ycnAQnIiJDZmVlhV9//RUxMTHYunWr6Dh6T+2WHQBo2rRpmbz5SqUSQ4cOxeTJk+Hu7l6i78nKykJWVpbqeUpKirbikRHZunUrbt26BTs7O0yZMkV0HCIycJIkwcfHB2PHjsXq1avx7bffcj6vUnind06hUGD37t2YP38+FixYgD179mhlcsElS5bAzMxMrfW2AgICYGtrq3q4urpqPBcZl4yMDNVtqxkzZsDW1lZwIiIyBsOGDUPFihURFRWFw4cPi46j19Qudm7evIn69etj+PDhCA0NRUhICIYPH4569erhxo0bGgt2+fJlrFy5Elu2bFFrlJe/vz+Sk5NVj9jYWI1lIuOUlpaGDz/8EDVr1sS3334rOg4RGYkKFSpg1KhRAIBVq1YJTqPf1F4bq02bNrC3t8fWrVtRuXJlAMDLly8xYsQIJCUl4ezZs+8WRJIQGhqKvn37AshbTdrPz69As51CoYCJiQlcXV3x8OHDEp2Xa2ORpqSkpPBniIjK1L1791C/fn3IsoyoqCjUq1dPdKQyI3RtrGvXriEgIEBV6ABA5cqVsXDhQoSHh5cqzJuGDh2K69evIzw8XPVwdnbG5MmT8fvvv2vsdYhKioUOEZW1unXrolevXgCANWvWCE6jv9TuoNygQQM8efKkUIfhpKQk1K1bV61zpaWl4d69e6rn0dHRCA8Ph52dHWrUqIEqVaoUON7c3ByOjo5o0KCBurGJ1BYXF4fZs2dj9uzZcHNzEx2HiIzUd999h3r16mHs2LGio+gttYudRYsWYfz48Zg7dy7atGkDADh37hy+//57LFmypMDop7/7S/jSpUvo3Lmz6rmfnx+AvLVBtmzZom40Io2aN28eNm/ejJiYGPzxxx+i4xCRkfL09ISnp6foGHpN7T47b/ahye84nH+KN59LkqQTMz+yzw69i1u3bqFJkyZQKpX4888/0a5dO9GRiIiMiiav32q37Bw/frxUL0ikD2bMmAGlUolPP/2UhQ4R6YTTp09jxYoVGDNmDLp37y46jl5Ru9jhKqxk6M6dO4fQ0FCYmJhg0aJFouMQEQEAQkNDERoaioyMDBY7alL7NhYAZGZm4vr160hKSoJSqSywr0+fPhoLpwm8jUXqkGUZnp6eOHnyJEaNGoWff/5ZdCQiIgDAgwcPULduXciyjNu3bxv8YB2ht7EOHTqEYcOG4dmzZ4X26Uo/HaJ3dejQIZw8eRKWlpaYO3eu6DhERCq1a9dG7969sW/fPqxZswarV68WHUlvqD3Pzrhx4zBgwAAkJCRAqVQWeLDQIX3Xrl07zJw5E9OmTeNSI0Skc/KXT9qyZQuSk5MFp9Efat/GqlixIq5evYo6depoK5NG8TYWEREZClmW0aRJE0RGRiIwMBATJkwQHUlrhM6g3L9/f5w4caJUL0qkaxQKBd6h+xoRUZmSJEnVurN69epC/WapaGq37Lx+/RoDBgxAtWrV0LRpU5ibmxfYr84K5WWBLTtUEoGBgfjll1+wfPlyDjUnIp2Wnp6Ojz76CEOGDMGYMWNgYWEhOpJWaPL6rXax89NPP+Hrr7+GlZUVqlSpUmBFckmS8ODBg1IF0jQWO/R3kpOTUadOHTx//hwbN27El19+KToSEZHREzoaa+bMmfj+++8xbdq0ArMpE+kThQI4dQpISAB++203nj9/iYYNG2LEiBGioxERkYapXexkZ2fj888/Z6FDeiskBJgwAYiLy98yGkBX9O4dDzMztT8SRERCZGZmIjg4GC9evMB3330nOo5OU7tiGT58OH755RdtZCHSupAQoH//NwudfNXxr399gJAQEamIiNR35swZjBo1CnPmzOEw9L+h9p+xCoUCS5cuxe+//45mzZoV6qC8YsUKjYUj0iSFIq9Fp+heanl1v68v8OmngKlpWSYjIlJf586d4e7ujoiICGzevBm+vr6iI+kstVt2bty4AQ8PD5iYmODmzZu4evWq6hEeHq6FiESacepUUS06/yPLQGxs3nFERLrur8PQObFv8bjqORmNhATNHkdEJNrgwYMxbdo0PHjwAAcPHsQnn3wiOpJOeudexvfu3cPvv/+OjIwMAOCEbKTznJw0exwRkWjly5dXTZexatUqwWl0l9rFzvPnz/HRRx+hfv366NmzJxL++2fwl19+yd7gpNM6dACqV5cBFF2YSxLg6pp3HBGRvvj2229hYmKCI0eOIDIyUnQcnaR2sTNx4kSYm5sjJiYG1tbWqu2ff/45Dh06pNFwRJpkagq8//5W5BU7BadYz58bMzCQnZOJSL+4ubmhb9++6Nq1K3JyckTH0Ulq99k5fPgwfv/9d7i4uBTYXq9ePTx69EhjwYg07ciRI9i3bySAfahSJQjPn1up9rm45BU6Xl7C4hERvbNdu3YVGh1N/6N2sZOenl6gRSffs2fPYGlpqZFQRJr27NkzDB8+HADwzTeOWL3aSjWDspNT3q0rtugQkb5iofN2at/G6tixI7Zt26Z6LkkSlEolli1bhs6dO2s0HJEmyLKM0aNHIyEhAY0aNcK//vUvmJoCnp7AoEF5/2WhQ0SG4PHjx1iyZAmHof+F2i07y5Ytg6enJy5duoTs7GxMmTIFERERePHiBf78809tZCQqlQ0bNmDfvn2wsLBAcHBwkS2TRET6Ljc3F++99x6ePHmCRo0aoU+fPqIj6Qy1W3YaN26M69evo3Xr1ujSpQvS09Ph5eWFq1evok6dOtrISPTOsrOzsXTpUgDA4sWL0bx5c8GJiIi0w8zMTHW7nsPQC5JkNSfIiYmJgaurK6T84St/2VejRg2NhdMETS4RT/opKSkJ69atw6xZs7iALREZtEePHqF27dpQKpW4efMm3N3dRUd6Z5q8fqv9m79WrVp4+vRpoe3Pnz9HrVq1ShWGSBvs7e0xZ84cFjpEZPBq1qyJvn37AshbQoLyqP3bX5blIlt10tLSUK5cOY2EIiqtP/74A7t27RIdg4iozOWvl7V9+3a8fPlScBrdUOIOyn5+fgDyRl/NmjWrQCdPhUKB8+fPo0WLFhoPSKSupKQkDBkyBE+ePEFOTg6GDh0qOhIRUZnp2LEjmjVrhuvXr2PTpk1c3QBqFDtXr14FkNeyc+PGDVhYWKj2WVhYoHnz5pg0aZLmExKpIX+Y+ZMnT+Du7o7+/fuLjkREVKbyV0MfP3480tPTRcfRCWp3UB45ciRWrlypN5192UHZuKxduxbjxo2DpaUlLly4gGbNmomORERU5jIzM5GRkYHKlSuLjvLONHn9Vnuenc2bN5fqBYm0JSIiQtW6uHTpUhY6RGS0ypUrx360b1C72CHSRZmZmRg0aBAyMzPRo0cP+Pj4iI5ERKQTzp69gOhoF0iSs9EujyN0LO7JkyfRu3dvODs7Q5Ik7N27V7UvJycHU6dORdOmTVG+fHk4Oztj2LBhePz4sbjApLMOHTqEGzduwN7eHps3by5yxCARkbH57LMgtGvnhMGDneHtDXTuDLi5ASEhopOVLaHFTnp6Opo3b441a9YU2vf69WtcuXIFs2bNwpUrVxASEoKoqChOf01F6tu3Lw4ePIjt27fDwcFBdBwiIuFCQoCQEG8A1Qtsj48H+vc3roJH7Q7K2iJJEkJDQ1WTIRXl4sWLaN26NR49elTimZrZQZmIiIyNQpHXghMXJwMo3NItSYCLCxAdrbu3tITOoCxScnIyJElCpUqVij0mKysLKSkpBR5kmGRZxvTp0/Hw4UPRUYiIdMqpU0BcHFBUoQMAsgzExuYdZwz0ptjJzMzEtGnT4O3t/dYKLyAgALa2tqqHq6trGaaksrR69WoEBASgTZs2eP36teg4REQ6IyFBs8fpO70odnJycvDFF19AqVTihx9+eOux/v7+SE5OVj1iY2PLKCWVpRs3bmDKlCkAgJkzZxaY0ZuIyNg5OWn2OH2n80PPc3JyMHDgQERHR+PYsWN/e9/O0tISlpaWZZSORMjIyMCgQYOQlZWFXr16YezYsaIjERHplA4d8vrkxMfn3bL6q/w+Ox06lH02EXS6ZSe/0Ll79y7++OMPVKlSRXQk0gFTpkxBREQEHBwcsGnTJg4zJyL6C1NTYOXKvK//+isy/3lgoO52TtY0ocVOWloawsPDER4eDgCIjo5GeHg4YmJikJubi/79++PSpUsICgqCQqFAYmIiEhMTkZ2dLTI2CXTgwAHVVAVbt26Fvb294ERERLrJywvYvRuoXnDkOVxc8rZ7er4QE0wAocXOpUuX4OHhAQ8PDwB5K6t7eHhg9uzZiIuLw759+xAXF4cWLVrAyclJ9Thz5ozI2CTQyv/+qeLr64tu3boJTkNEpNu8vICHD4Hjx4GdO/P+++CBjISEtahZs6bRXE+F9tnx9PTE26b50ZEpgEiH7N+/HytXrsSECRNERyEi0gumpoCn55tbJJw9exZpaWkYPHgwwsPDYWtrKyhd2dCZSQW1hZMKEhERFZScnIwWLVrg4cOHGDx4MHbs2CE6UiFGO6kgGadr165h/vz5yM3NFR2FiMgg2NraYufOnTA1NUVQUBCCgoJER9IqFjuk016/fg1vb2/Mnj0bc+fOFR2HiMhgtG3bFrNnzwYAfPPNN3jw4IHgRNrDYod02qRJkxAZGQknJyf4+vqKjkNEZFCmT5+O9u3bIzU1FUOGDDHYFnQWO6Sz9u3bh3Xr1gHIG2ZetWpVwYmIiAyLmZkZduzYgSpVqqBnz54GO2+Zzs+gTMYpISEBo0ePBgB899136NKli+BERESGqWbNmnjw4IFBD+Jhyw7pHKVSieHDh+PZs2do0aIFFi5cKDoSEZFBe7PQyczMRGpqqsA0msdih3TOjRs3cOrUKVhZWSE4OJhrnRERlZGIiAi0bt0aY8aMMai57ngbi3RO8+bNcenSJdy+fRsNGzYUHYeIyGikpaUhMjISN27cQI8ePTBs2DDRkTSCLTukk9zd3fHZZ5+JjkFEZFQ++OAD1TQfY8eOxf3798UG0hAWO6Qz5s2bh7Nnz4qOQURk1Pz9/dGhQwfVchI5OTmiI5Uaix3SCaGhoZg7dy46deqEmJgY0XGIiIyWqakpduzYgUqVKuH8+fOYN2+e6EilxmKHhIuPj8eXX34JIG818xo1aghORERk3GrUqIENGzYAABYtWoSwsDDBiUqHHZRJqPxh5i9evMB7772HBQsWiI5EREQABg4ciEOHDuHu3btwc3MTHadUWOyQUMuXL8fRo0dhbW2NnTt3wsLCQnQkIiL6r7Vr18LCwgKmpqaio5QKb2ORMJcvX8b06dMBACtXrkSDBg0EJyIiojdZWVkVKHQSExMFpnl3LHZImG3btiE3NxdeXl6qpSGIiEj3ZGdnw9fXF/Xr18e9e/dEx1Ebb2ORMIGBgWjWrBn69etnsIvPEREZAlNTU1y7dg2pqanw9vbGn3/+CXNzc9GxSowtOySMJEkYPXo07OzsREchIqK3MDU1xfbt21G5cmVcvHgRc+bMER1JLSx2qEzFxcXh66+/RnJysugoRESkBhcXF2zcuBEAsHjxYpw4cUJsIDWw2KEyo1AoMHToUGzYsIF9dIiI9NBnn32G0aNHQ5ZlDBkyBC9evBAdqURY7FCZWbZsGU6cOIHy5csjICBAdBwiInoHgYGBqFevHuLj4/HPf/5TL1ZHZ7FDZeLixYuYNWsWAGD16tWoV6+e4ERERPQuKlSogJ07d6JatWoYOHCgXgww4Wgs0rr8xeRyc3MxYMAAjBgxQnQkIiIqhZYtW+Lhw4ewtrYWHaVE2LJDWjdhwgTcvXsXrq6u2LBhg178FUBERG/3ZqGTlJSE7OxsgWnejsUOadXTp0/x22+/QZIk1bBFIiIyHIcPH0bTpk0xe/Zs0VGKxWKHtKpatWq4fv06duzYgU6dOomOQ0REGpaeno6kpCQsXboUx44dEx2nSCx2SOuqVasGb29v0TGIiEgL+vXrhzFjxkCWZQwdOhTPnz8XHakQFjukFYGBgQgKChIdg4iIysCKFSvQoEEDPH78WCeHo7PYIY07f/48Jk2ahCFDhiAsLEx0HCIi0rLy5csjODgY5ubmCA0NVc20rCtY7FCpKRTAiRNAcDDw22+vMWjQECgUCnz++efo2LGj6HhERFQGPDw8sGjRIgCAr68vbt++LTjR/wgtdk6ePInevXvD2dkZkiRh7969BfbLsoy5c+fC2dkZVlZW8PT0REREhJiwVKSQEMDNDejcGfD2Bnr1skZ09DFUrToG69ev5zBzIiIj4ufnh48//hiff/45qlevLjqOitBiJz09Hc2bN8eaNWuK3L906VKsWLECa9aswcWLF+Ho6IguXbogNTW1jJNSUUJCgP79gbi4v+6pjmfP1uPYsUoCUhERkSgmJibYv38/Nm/eDBsbG9FxVCRZR3oRSZKE0NBQ9O3bF0Beq46zszN8fX0xdepUAEBWVhYcHBywZMkSfPXVVyU6b0pKCmxtbZGcnIyKFStqK77RUSjyWnQKFzp5JAlwcQGiowFT0zKNRkREOkKWZcTGxqJGjRpqf68mr98622cnOjoaiYmJ6Nq1q2qbpaUlOnXqhDNnzhT7fVlZWUhJSSnwIM07dar4QgcAZBmIjc07joiIjM+LFy/wySefoE2bNnj27JnQLDpb7CQmJgIAHBwcCmx3cHBQ7StKQEAAbG1tVQ9XV1et5jRWUVElKyITErQchIiIdFK5cuUQHR2NhIQEjB49WuhwdJ0tdvL9tYOrLMtv7fTq7++P5ORk1SM2NlbbEY3Kw4cP4ePjAx+fASU63slJy4GIiEgnWVtbY+fOnbCwsMC+ffuwYcMGYVl0tthxdHQEgEKtOElJSYVae95kaWmJihUrFnhQ6V2/fh1DhgxB3bp1sWbNGmRn/wFz8ycAiq7UJQlwdQU6dCjbnEREpDtatGiBxYsXAwAmTpyIyMhIITl0ttipVasWHB0dceTIEdW27OxshIWFoV27dgKTGZfY2Fj07NkTzZs3R1BQEBQKBT7++GMcOfI7goPtIUkS/trQlv88MJCdk4mIjN2ECRPQtWtXZGZmwtvbG1lZWWWeQWixk5aWhvDwcISHhwPI65QcHh6OmJgYSJIEX19fLFq0CKGhobh58yZGjBgBa2trrrNUhuzs7HDhwgWYmJhg4MCBuHTpEo4cOYKPP/4Yn30mYfdu4K9TKbi4ALt3A15eYjITEZHuMDExwZYtW1C1alVcu3YN06dPL/MMQoeenzhxAp07dy60ffjw4diyZQtkWca8efOwYcMGvHz5Eh988AHWrl2LJk2alPg1OPS85LKzsxEUFIQDBw7g3//+N0xM8mrhX3/9FQ0aNEDdunWL/D6FIm/UVUJCXh+dDh3YokNERAUdOHAAEydOxM6dO9GqVau/PV6T12+dmWdHW1js/L3U1FT8+OOP+L//+z/Ex8cDAPbv349PPvlEcDIiIjIk2dnZsLCwKNGxmrx+m5Xqu0mvJSUlYdWqVVi7di1evXoFAHB2dsbEiRO5phUREWncm4XO/fv3Ubt27TJZVkhnOyiTdt26dQs1a9bEwoUL8erVKzRo0AA//fQTHjx4gEmTJrEVjIiItGbdunVwd3fHDz/8UCavx2LHiDx9+lT1dcOGDdGgQQN88MEHCAkJQWRkJEaPHg1LS0uBCYmIyBhkZ2cjKysLkyZNws2bN7X+eix2DJwsyzh27Bi6deuGBg0aqBZRlSQJR48exdmzZ9GvXz9VZ2QiIiJtGz9+PHr06IHMzEwMGjQImZmZWn09XuEMlEKhwJ49e9C6dWt89NFHOHz4MFJSUnDy5EnVMVWqVCmTe6VERERvkiQJmzdvhr29PW7evKla8FtbWOwYmKysLGzcuBGNGjVC//79cenSJZQrVw5jx47F3bt30atXL9ERiYiI4ODggM2bNwMAVq1ahYMHD2rttTj03MDcu3cPDRo0gFKpROXKlTFu3Dj4+PigWrVqoqMREREVMmHCBKxatUrVypN/veLQc1JJSEjAsWPHMHjwYABA3bp1MW7cOLi5ueGf//wnKlSoIDghERFR8ZYsWYLTp0+jf//+sLOz08prsGVHT929exfLli3D1q1bkZubizt37hQ7wzEREZEuy83NhZlZwfYXtuwYsL9beuHSpUtYsmQJ9uzZg/w6tV27dqpRVkRERPrmzUInIyMDCQlJuHWrsubOr7EzUamFhAATJgBxcf/b5uICrFwJeHhE48svv8SxY8dU+3r16oVp06ahffv2AtISERFpVlRUFD7++AckJExDbq7mzstiR0eEhAD9+wN/vakYH5+3fft2R1y5cgWmpqbw9vbGlClT1FoQlYiISNf9+acDYmNX/PdZmsbOyz47OkChANzcCrbovEmS8lp41q79Dc2auaNmzZplmo+IiEjb/nctlAFIAFIAsM+OwTh1qvhCB8hr7YmNBWxseoJ1DhERGaL/XQs1P9ktJxXUARERL0p0XEKCloMQEREJos1rHIsdwa5du4YJEwaW6FgnJy2HISIiEkSb1zgWOwI8efJE9XXTpk1Rv/4TWFgkASi6+5QkAa6uecPQiYiIDFGHDnn9U7WxZCOLnTIiyzIOHjwIT09PuLu7Iz09HQBgYmKCP/88ieBge0iSVOh/cv7zwMCC8+0QEREZElPTvKlWAM0XPCx2tCw3NxdBQUFo0aIFevbsibCwMKSkpODMmTOqYypXrgwvL2D3bqB69YLf7+KSt93Lq4yDExERlbHiroWlxaHnWvL69Wts2rQJy5cvx8OHDwEA5cuXx1dffYWJEyfCxcWlyO/7uxmUiYiIDJ1CARw6lIJPPtHM9ZvFjpbcunULjRs3BgBUq1YN48ePx7fffqu1Rc6IiIgMCdfG0kExMTEICwvD0KFDAQCNGjWCj48PGjZsiJEjR8LKykpwQiIiIuPElp1SioiIwNKlS7Fz507Isox79+7Bzc1N469DRERkTNiyowP+/PNPLFmyBPv371dt69y5M9LSNLeWBxEREZUeix01RUVFYdSoUfjzzz8BAJIkwcvLC1OnTkWrVq0EpyMiIqK/YrGjJnt7e1y/fh0WFhYYPnw4Jk2ahPr164uORURERMVgsfMWaWlp+Omnn3Dq1Cns3r0bkiShUqVK2LVrFzw8PODE9RuIiIh0HoudIjx79gyrV6/GmjVr8OJF3iKdJ06cQOfOnQEAPXv2FBmPiIiI1MBi5w0PHz7E8uXL8fPPPyMjIwMAULduXUyePBlt27YVnI6IiIjeBYud/7p48SLatm0LhUIBAGjZsiWmTp2Kfv36wZRTGBMREekto1kb69SpvOmn88myjMePH6uev/fee6hbty66dOmCo0eP4sKFC+jfvz8LHSIiIj2n08VObm4uZs6ciVq1asHKygq1a9fG999/D6VSqfa5PvkEcHMDdu9WIjQ0FG3btsV7772HzMxMAICpqSkuXLiAw4cP4x//+AckbawxT0RERGVOp29jLVmyBOvXr8fWrVvh7u6OS5cuYeTIkbC1tcWECRPUPl9cnIwBAwBgO4DzsLS0xIULF9CxY0cAKNO1s4iIiKhs6HSxc/bsWXz66afo1asXAMDNzQ3BwcG4dOnSO55RAiBDklZhypRG8PX1gaOjo8byEhERke7R6dtY7du3x9GjRxEVFQUAuHbtGk6fPv3Wod9ZWVlISUkp8CjIBLLsgu7dF7LQISIiMgI63bIzdepUJCcno2HDhjA1NYVCocDChQsxaNCgYr8nICAA8+bN+9tzJyRoMikRERHpKp1u2fnll1+wY8cO7Ny5E1euXMHWrVvxr3/9C1u3bi32e/z9/ZGcnKx6xMbGFnkcJz8mIiIyDpIsy7LoEMVxdXXFtGnTMHbsWNW2BQsWYMeOHbh9+3aJzpG/RDyQDKAiJAlwcQGiowGOKiciItJN+dfv5OTkUg8g0umWndevX8PEpGBEU1PTdxp6DgD5o8kDA1noEBERGQud7rPTu3dvLFy4EDVq1IC7uzuuXr2KFStWYNSoUe90PheXvELHy0uzOYmIiEh36fRtrNTUVMyaNQuhoaFISkqCs7MzBg0ahNmzZ8PCwqJE58hvBjtwIBndu1dkiw4REZEe0ORtLJ0udjRBk28WERERlQ2j6bNDREREVFosdoiIiMigsdghIiIig8Zih4iIiAwaix0iIiIyaCx2iIiIyKCx2CEiIiKDxmKHiIiIDBqLHSIiIjJoOr02libkTxCdkpIiOAkRERGVVP51WxMLPRh8sZOamgoAcHV1FZyEiIiI1PX8+XPY2tqW6hwGvzaWUqnE48ePYWNjA0mSRMcpkZSUFLi6uiI2NpbreWkR3+eywfe57PC9Lht8n8tGcnIyatSogZcvX6JSpUqlOpfBt+yYmJjAxcVFdIx3UrFiRX6QygDf57LB97ns8L0uG3yfy4aJSem7F7ODMhERERk0FjtERERk0Fjs6CBLS0vMmTMHlpaWoqMYNL7PZYPvc9nhe102+D6XDU2+zwbfQZmIiIiMG1t2iIiIyKCx2CEiIiKDxmKHiIiIDBqLHSIiIjJoLHZ0SEBAAFq1agUbGxvY29ujb9++uHPnjuhYBi8gIACSJMHX11d0FIMTHx+PIUOGoEqVKrC2tkaLFi1w+fJl0bEMSm5uLmbOnIlatWrBysoKtWvXxvfffw+lUik6mt47efIkevfuDWdnZ0iShL179xbYL8sy5s6dC2dnZ1hZWcHT0xMRERFiwuqxt73POTk5mDp1Kpo2bYry5cvD2dkZw4YNw+PHj9V6DRY7OiQsLAxjx47FuXPncOTIEeTm5qJr165IT08XHc1gXbx4ET/++COaNWsmOorBefnyJT788EOYm5vj4MGDiIyMxPLly0s97TsVtGTJEqxfvx5r1qzBrVu3sHTpUixbtgyrV68WHU3vpaeno3nz5lizZk2R+5cuXYoVK1ZgzZo1uHjxIhwdHdGlSxfVmoxUMm97n1+/fo0rV65g1qxZuHLlCkJCQhAVFYU+ffqo9yIy6aykpCQZgBwWFiY6ikFKTU2V69WrJx85ckTu1KmTPGHCBNGRDMrUqVPl9u3bi45h8Hr16iWPGjWqwDYvLy95yJAhghIZJgByaGio6rlSqZQdHR3lxYsXq7ZlZmbKtra28vr16wUkNAx/fZ+LcuHCBRmA/OjRoxKfly07Oiw5ORkAYGdnJziJYRo7dix69eqFjz/+WHQUg7Rv3z60bNkSAwYMgL29PTw8PLBx40bRsQxO+/btcfToUURFRQEArl27htOnT6Nnz56Ckxm26OhoJCYmomvXrqptlpaW6NSpE86cOSMwmeFLTk6GJElqtRIb/EKg+kqWZfj5+aF9+/Zo0qSJ6DgGZ9euXbhy5QouXrwoOorBevDgAdatWwc/Pz9Mnz4dFy5cwPjx42FpaYlhw4aJjmcwpk6diuTkZDRs2BCmpqZQKBRYuHAhBg0aJDqaQUtMTAQAODg4FNju4OCAR48eiYhkFDIzMzFt2jR4e3urtQgrix0dNW7cOFy/fh2nT58WHcXgxMbGYsKECTh8+DDKlSsnOo7BUiqVaNmyJRYtWgQA8PDwQEREBNatW8diR4N++eUX7NixAzt37oS7uzvCw8Ph6+sLZ2dnDB8+XHQ8gydJUoHnsiwX2kaakZOTgy+++AJKpRI//PCDWt/LYkcH+fj4YN++fTh58iRcXFxExzE4ly9fRlJSEt5//33VNoVCgZMnT2LNmjXIysqCqampwISGwcnJCY0bNy6wrVGjRtizZ4+gRIZp8uTJmDZtGr744gsAQNOmTfHo0SMEBASw2NEiR0dHAHktPE5OTqrtSUlJhVp7qPRycnIwcOBAREdH49ixY2q16gAcjaVTZFnGuHHjEBISgmPHjqFWrVqiIxmkjz76CDdu3EB4eLjq0bJlSwwePBjh4eEsdDTkww8/LDR1QlRUFGrWrCkokWF6/fo1TEwK/io3NTXl0HMtq1WrFhwdHXHkyBHVtuzsbISFhaFdu3YCkxme/ELn7t27+OOPP1ClShW1z8GWHR0yduxY7Ny5E//5z39gY2Ojuidsa2sLKysrwekMh42NTaF+UOXLl0eVKlXYP0qDJk6ciHbt2mHRokUYOHAgLly4gB9//BE//vij6GgGpXfv3li4cCFq1KgBd3d3XL16FStWrMCoUaNER9N7aWlpuHfvnup5dHQ0wsPDYWdnhxo1asDX1xeLFi1CvXr1UK9ePSxatAjW1tbw9vYWmFr/vO19dnZ2Rv/+/XHlyhUcOHAACoVCdW20s7ODhYVFyV6kNEPESLMAFPnYvHmz6GgGj0PPtWP//v1ykyZNZEtLS7lhw4byjz/+KDqSwUlJSZEnTJgg16hRQy5Xrpxcu3ZtecaMGXJWVpboaHrv+PHjRf5OHj58uCzLecPP58yZIzs6OsqWlpZyx44d5Rs3bogNrYfe9j5HR0cXe208fvx4iV9DkmVZLl1NRkRERKS72GeHiIiIDBqLHSIiIjJoLHaIiIjIoLHYISIiIoPGYoeIiIgMGosdIiIiMmgsdoiIiMigsdghIiIig8Zih4iM0ty5c9GiRQvRMYioDLDYISKDJ0kS9u7dKzoGEQnCYoeIiIgMGosdIioznp6e8PHxga+vLypXrgwHBwf8+OOPSE9Px8iRI2FjY4M6derg4MGDqu8JCwtD69atYWlpCScnJ0ybNg25ubkFzjl+/HhMmTIFdnZ2cHR0xNy5c1X73dzcAAD9+vWDJEmq5/m2b98ONzc32Nra4osvvkBqaqo23wIiEoDFDhGVqa1bt6Jq1aq4cOECfHx88M0332DAgAFo164drly5gm7dumHo0KF4/fo14uPj0bNnT7Rq1QrXrl3DunXr8PPPP2PBggWFzlm+fHmcP38eS5cuxffff48jR44AAC5evAgA2Lx5MxISElTPAeD+/fvYu3cvDhw4gAMHDiAsLAyLFy8uuzeDiMoEVz0nojLj6ekJhUKBU6dOAQAUCgVsbW3h5eWFbdu2AQASExPh5OSEs2fPYv/+/dizZw9u3boFSZIAAD/88AOmTp2K5ORkmJiYFDonALRu3Rr/+Mc/VIWLJEkIDQ1F3759VcfMnTsXy5YtQ2JiImxsbAAAU6ZMwcmTJ3Hu3LmyeDuIqIywZYeIylSzZs1UX5uamqJKlSpo2rSpapuDgwMAICkpCbdu3ULbtm1VhQ4AfPjhh0hLS0NcXFyR5wQAJycnJCUl/W0WNzc3VaGjzvcRkX5hsUNEZcrc3LzAc0mSCmzLL2yUSiVkWS5Q6ABAfmP0m9uLOqdSqXynLCX5PiLSLyx2iEhnNW7cGGfOnMGbd9vPnDkDGxsbVK9evcTnMTc3h0Kh0EZEItIDLHaISGd9++23iI2NhY+PD27fvo3//Oc/mDNnDvz8/GBiUvJfX25ubjh69CgSExPx8uVLLSYmIl3EYoeIdFb16tXx22+/4cKFC2jevDm+/vprjB49GjNnzlTrPMuXL8eRI0fg6uoKDw8PLaUlIl3F0VhERERk0NiyQ0RERAaNxQ4REREZNBY7REREZNBY7BAREZFBY7FDREREBo3FDhERERk0FjtERERk0FjsEBERkUFjsUNEREQGjcUOERERGTQWO0RERGTQ/j8WN/i7BlYc8wAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "temperature = np.loadtxt('rome_temp.dat') # rome_temp.dat\n", "plt.plot(np.arange(1, 13), temperature, 'k--')\n", "for i in range(len(temperature)):\n", " if temperature[i] < 15:\n", " plt.plot(i + 1, temperature[i], 'bo')\n", " else: # add colon\n", " plt.plot(i + 1, temperature[i], 'ro')\n", "plt.xlim(1, 12)\n", "plt.xlabel('month')\n", "plt.ylabel('temperature (Celcius)');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 3\n", "\n", "Answer to Exercise 4" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "modified a: [ 77 77 -77 77 -77 -77]\n" ] } ], "source": [ "a = np.array([2, 2, 4, 2, 4, 4])\n", "\n", "for i in range(len(a)): # range(len(a)) i.o. range(a)\n", " if a[i] < 3: # replace value with 77 when value equals 2\n", " a[i] = 77\n", " else: # otherwise replace value with -77\n", " a[i] = -77\n", "print('modified a:', a) # added comma" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 4\n", "\n", "Answer to Exercise 5" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaMAAAG4CAYAAADohIisAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAHPNJREFUeJzt3Xlw1PX9x/HXkmNNlETDkQNDjDQRlTQojHJUuWpKhCggUxSPIGoFtRUjdUTbMaUOUTrYKkccj3J4MrWA1QQQBQK/gjYeODReoKGJQowETUKQQMjn90d/7K9rDgjd5M2G52NmR/e7n/1+P/udHZ757vX1OOecAAAw1MV6AgAAECMAgDliBAAwR4wAAOaIEQDAHDECAJgjRgAAc8QIAGCOGAEAzBEjdKglS5bI4/Fo165d1lM5KezatUtjxoxRTEyMPB6PZsyYYT0lwISHnwNCR/rmm2/0+eef66KLLpLX67Wejrnx48dr8+bNeuaZZxQXF6f4+HglJSVZTwvocMQIMJSSkqKUlBQVFha263YOHDigyMjIJsuPHDmihoYG/jCAOV6mQ4dq7mW64cOHq1+/ftq6dauGDBmiiIgInXPOOVq8eLEkqaCgQBdffLEiIyOVlpamNWvW+K1z586duvnmm5WSkqLIyEj16tVLWVlZ2r59e5Ptl5SUKCMjQ5GRkerRo4fuvPNOFRQUyOPxaOPGjX5j33zzTY0aNUpRUVGKjIzU0KFD9dZbbx3X4ywrK9MNN9ygnj17yuv16vzzz9e8efPU2NgoSdq4caM8Ho927typ1atXy+PxHPPly4ULF+ryyy9Xz549dfrppystLU1z587V4cOH/cYd3Z+bNm3SkCFDFBkZqalTp2rXrl3yeDyaO3euHn74YSUnJ8vr9WrDhg06ePCg7r33XvXv31/R0dGKiYnR4MGD9eqrr/qte9SoUerbt69++Desc04/+tGPNGbMmBbnf8sttygmJkYHDhxoctvIkSN14YUXHmu3ojNzQAdavHixk+RKS0t9y4YNG+a6devmzjvvPPfss8+6tWvXurFjxzpJ7ne/+51LS0tzL730kissLHSDBg1yXq/XffXVV777FxUVuXvvvde98sorrqioyK1cudKNGzfORUREuE8++cQ3bvfu3a5bt26ud+/ebsmSJa6wsNDdeOON7pxzznGS3IYNG3xjn3vuOefxeNy4cePcihUr3GuvvebGjh3rQkJC3JtvvtnqY6ysrHS9evVyPXr0cE8++aRbs2aNu+uuu5wkN336dOecc9XV1W7r1q0uLi7ODR061G3dutVt3brVHTx4sMX13nPPPS4/P9+tWbPGrV+/3v3xj3903bt3dzfffLPfuGHDhrmYmBiXmJjo5s+f7zZs2OCKiopcaWmpk+R69erlRowY4V555RX3xhtvuNLSUvfdd9+5KVOmuOeee86tX7/erVmzxs2cOdN16dLFLV261LfuV1991Uly69at89tmQUGBk+QKCgpanP+HH37oJLmnn37ab3lJSYmT5BYuXNjqfkXnRozQoVqKkST37rvv+pZVVVW5kJAQFxER4Reebdu2OUnuiSeeaHEbDQ0N7tChQy4lJcXdc889vuW//vWvncfjcSUlJX7jf/azn/nFqK6uzsXExLisrCy/cUeOHHHp6enukksuafUx3n///U6Se+edd/yWT58+3Xk8Hvfpp5/6liUlJbkxY8a0ur7mHDlyxB0+fNgtW7bMhYSEuH379vluO7o/33rrLb/7HI1Rnz593KFDh1pdf0NDgzt8+LC75ZZb3EUXXeS33XPPPdddffXVfuMzMzNdnz59XGNjY6vrHTZsmOvfv7/fsunTp7uoqChXW1vb6n3RufEyHU4K8fHxGjBggO96TEyMevbsqf79+yshIcG3/Pzzz5ck/etf//Ita2ho0Jw5c3TBBRcoPDxcoaGhCg8P144dO/Txxx/7xhUVFalfv3664IIL/LZ93XXX+V3fsmWL9u3bp+zsbDU0NPgujY2NGj16tIqLi1VXV9fiY1m/fr0uuOACXXLJJX7Lp0yZIuec1q9f34Y98/8++OADXXXVVerWrZtCQkIUFhamm266SUeOHNFnn33mN/ass87SyJEjm13PVVddpbCwsCbL//KXv2jo0KE644wzFBoaqrCwMD377LN++7BLly6666679Prrr6usrEyS9Pnnn2vNmjW644475PF4Wn0Md999t7Zt26a///3vkqSamho999xzys7O1hlnnNGm/YHOhRjhpBATE9NkWXh4eJPl4eHhkqSDBw/6luXk5Oi3v/2txo0bp9dee03vvPOOiouLlZ6eru+//943rqqqSrGxsU2288NlX3/9tSRp4sSJCgsL87s8+uijcs5p3759LT6WqqoqxcfHN1l+NKpVVVUt3rclZWVluuyyy/TVV1/p8ccf1+bNm1VcXKyFCxdKkt/jlNTs9lu7bcWKFfr5z3+uXr166fnnn9fWrVtVXFysqVOn+u1rSZo6daoiIiL05JNPSvr3e1kRERGaOnXqMR/H1VdfrXPOOcc37yVLlqiurk533nnnMe+Lzi3UegLAf+v555/XTTfdpDlz5vgt37t3r84880zf9W7duvlC858qKir8rnfv3l2SNH/+fA0aNKjZbTYXtf/czp49e5os3717t9/622LVqlWqq6vTihUr/D76vW3btmbHt3aE0txtzz//vJKTk7V8+XK/2+vr65uMjY6OVnZ2tp555hnNnDlTixcv1uTJk/32dUu6dOmiO++8Uw888IDmzZunRYsWadSoUTrvvPOOeV90bhwZIeh5PJ4mH00uKCjQV1995bds2LBh+uc//6mPPvrIb/nLL7/sd33o0KE688wz9dFHH2ngwIHNXo4eoTVn1KhR+uijj/T+++/7LV+2bJk8Ho9GjBhxQo9Rkt/jdM7p6aefbvO6Wlp/eHi4X4gqKiqafJruqF/96lfau3evJk6cqO+++0533XXXcW/r1ltvVXh4uK6//np9+umnbbovOi+OjBD0xo4dqyVLlqhv37768Y9/rPfee09/+MMfdPbZZ/uNmzFjhv785z8rMzNTs2fPVmxsrF588UV98sknkv79V7sknXHGGZo/f76ys7O1b98+TZw4UT179tQ333yjDz/8UN98843y8/NbnM8999yjZcuWacyYMZo9e7aSkpJUUFCgRYsWafr06UpNTW3zY7ziiisUHh6u6667Tvfdd58OHjyo/Px8ffvtt21eV3PGjh2rFStW6I477tDEiRNVXl6u3//+94qPj9eOHTuajE9NTdXo0aO1evVq/eQnP1F6evpxb+vMM8/UTTfdpPz8fCUlJSkrKysgjwHBjSMjBL3HH39cN9xwg/Ly8pSVlaW//e1vWrFihfr06eM3LiEhQUVFRUpNTdW0adN0/fXXKzw8XLNnz5Ykv5eZbrjhBm3YsEH79+/X7bffrp/+9Ke6++679f7772vUqFGtzqdHjx7asmWLRo4cqVmzZmns2LFau3at5s6dq/nz55/QY+zbt6/++te/6ttvv9WECRP0y1/+Uv3799cTTzxxQuv7oZtvvlmPPPKIVq9erSuvvFKPPvqo7r//fk2ePLnF+0yaNEmSTujI5uh9p0+f7vsjAKc2foEBp7xf/OIXeumll1RVVdXqy2/wd8011+jtt9/Wrl27mv10Xmvuvfde5efnq7y8XN26dWunGSKY8DIdTimzZ89WQkKCzj33XO3fv1+vv/66nnnmGf3mN78hRMehvr5e77//vv7xj39o5cqVeuyxx9oUorffflufffaZFi1apNtvv50QwYcjI5xS8vLytGTJEn355ZdqaGhQSkqKbr31Vt19993H/I4M/v0r48nJyYqKitLkyZO1YMEChYSEHPf9PR6PIiMjdeWVV2rx4sV8twg+xAgAYI53DgEA5ogRAMAcMQIAmCNGAABzxAgAYC4oY7Ro0SIlJyfrtNNO04ABA7R582brKXVaubm5vrOQHr3ExcVZT6tT2bRpk7KyspSQkCCPx6NVq1b53e6cU25urhISEhQREaHhw4erpKTEZrKdxLH2+ZQpU5o871v60VwERtDFaPny5ZoxY4YefPBBffDBB7rsssuUmZnpO7cKAu/CCy/Unj17fJfmTueNE1dXV6f09HQtWLCg2dvnzp2rxx57TAsWLFBxcbHi4uJ0xRVXqLa2toNn2nkca59L0ujRo/2e94WFhR04w1OQ1Vn9TtQll1zipk2b5resb9++7v777zeaUef20EMPufT0dOtpnDIkuZUrV/quNzY2uri4OPfII4/4lh08eNBFR0e7J5980mCGnc8P97lzzmVnZzc5my3aV1AdGR06dEjvvfeeMjIy/JZnZGRoy5YtRrPq/Hbs2KGEhAQlJyfr2muv1RdffGE9pVNGaWmpKioq/J7zXq9Xw4YN4znfzjZu3KiePXsqNTVVt912myorK62n1KkFVYz27t2rI0eONDmxWWxsbJMTpCEwLr30Ui1btkxr167V008/rYqKCg0ZMuSEzlaKtjv6vOY537EyMzP1wgsvaP369Zo3b56Ki4s1cuTIZk82iMAIyh9K/eFviDnn+F2xdpKZmen7/7S0NA0ePFh9+vTR0qVLlZOTYzizUwvP+Y519BQXktSvXz8NHDjQd16qCRMmGM6s8wqqI6Pu3bsrJCSkyV+ElZWVrZ4GGoFz+umnKy0trdkTriHwjn5ykee8rfj4eCUlJfG8b0dBFaPw8HANGDBA69at81u+bt06DRkyxGhWp5b6+np9/PHHio+Pt57KKSE5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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "y = np.zeros((20, 20)) # add parentheses around (20, 20)\n", "y[8:13] = 10\n", "plt.matshow(y)\n", "plt.title('image of array y'); # add quotes around text string" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 5" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.13.5" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }