##// END OF EJS Templates
More changes to example notebooks.
Brian Granger -
Show More

The requested changes are too big and content was truncated. Show full diff

1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
@@ -1,259 +1,201 b''
1 {
1 {
2 "metadata": {
2 "metadata": {
3 "name": "Animations Using clear_output"
3 "name": "Animations Using clear_output"
4 },
4 },
5 "nbformat": 3,
5 "nbformat": 3,
6 "nbformat_minor": 0,
6 "nbformat_minor": 0,
7 "worksheets": [
7 "worksheets": [
8 {
8 {
9 "cells": [
9 "cells": [
10 {
10 {
11 "cell_type": "heading",
11 "cell_type": "heading",
12 "level": 1,
12 "level": 1,
13 "metadata": {},
13 "metadata": {},
14 "source": [
14 "source": [
15 "Simple animations, progress bars, and clearing output"
15 "Simple animations Using clear_output"
16 ]
16 ]
17 },
17 },
18 {
18 {
19 "cell_type": "markdown",
19 "cell_type": "markdown",
20 "metadata": {},
20 "metadata": {},
21 "source": [
21 "source": [
22 "Sometimes you want to print progress in-place, but don't want\n",
22 "Sometimes you want to clear the output area in the middle of a calculation. This can be useful for doing simple animations. In terminals, there is the carriage-return (`'\\r'`) for overwriting a single line, but the notebook frontend does not support this behavior.\n",
23 "to keep growing the output area. In terminals, there is the carriage-return\n",
24 "(`'\\r'`) for overwriting a single line, but the notebook frontend does not support this\n",
25 "behavior (yet).\n",
26 "\n",
23 "\n",
27 "What the notebook *does* support is explicit `clear_output`, and you can use this to replace previous\n",
24 "To clear output in the Notebook you can use the `clear_output` function."
28 "output (specifying stdout/stderr or the special IPython display outputs)."
25 ]
26 },
27 {
28 "cell_type": "heading",
29 "level": 2,
30 "metadata": {},
31 "source": [
32 "Simple example"
29 ]
33 ]
30 },
34 },
31 {
35 {
32 "cell_type": "markdown",
36 "cell_type": "markdown",
33 "metadata": {},
37 "metadata": {},
34 "source": [
38 "source": [
35 "A simple example printing our progress iterating through a list:"
39 "Here we show our progress iterating through a list:"
36 ]
40 ]
37 },
41 },
38 {
42 {
39 "cell_type": "code",
43 "cell_type": "code",
40 "collapsed": true,
44 "collapsed": true,
41 "input": [
45 "input": [
42 "import sys\n",
46 "import sys\n",
43 "import time"
47 "import time"
44 ],
48 ],
45 "language": "python",
49 "language": "python",
46 "metadata": {},
50 "metadata": {},
47 "outputs": []
51 "outputs": [],
52 "prompt_number": 1
48 },
53 },
49 {
54 {
50 "cell_type": "code",
55 "cell_type": "code",
51 "collapsed": false,
56 "collapsed": false,
52 "input": [
57 "input": [
53 "from IPython.display import clear_output\n",
58 "from IPython.display import clear_output\n",
54 "for i in range(10):\n",
59 "for i in range(10):\n",
55 " time.sleep(0.25)\n",
60 " time.sleep(0.25)\n",
56 " clear_output()\n",
61 " clear_output()\n",
57 " print i\n",
62 " print i\n",
58 " sys.stdout.flush()"
63 " sys.stdout.flush()"
59 ],
64 ],
60 "language": "python",
65 "language": "python",
61 "metadata": {},
66 "metadata": {},
62 "outputs": []
67 "outputs": [
68 {
69 "output_type": "stream",
70 "stream": "stdout",
71 "text": [
72 "9\n"
73 ]
74 }
75 ],
76 "prompt_number": 2
77 },
78 {
79 "cell_type": "heading",
80 "level": 2,
81 "metadata": {},
82 "source": [
83 "AsyncResult.wait_interactive"
84 ]
63 },
85 },
64 {
86 {
65 "cell_type": "markdown",
87 "cell_type": "markdown",
66 "metadata": {},
88 "metadata": {},
67 "source": [
89 "source": [
68 "The AsyncResult object has a special `wait_interactive()` method, which prints its progress interactively,\n",
90 "The AsyncResult object has a special `wait_interactive()` method, which prints its progress interactively,\n",
69 "so you can watch as your parallel computation completes.\n",
91 "so you can watch as your parallel computation completes.\n",
70 "\n",
92 "\n",
71 "**This example assumes you have an IPython cluster running, which you can start from the [cluster panel](/#tab2)**"
93 "**This example assumes you have an IPython cluster running, which you can start from the [cluster panel](/#tab2)**"
72 ]
94 ]
73 },
95 },
74 {
96 {
75 "cell_type": "code",
97 "cell_type": "code",
76 "collapsed": false,
98 "collapsed": false,
77 "input": [
99 "input": [
78 "from IPython import parallel\n",
100 "from IPython import parallel\n",
79 "rc = parallel.Client()\n",
101 "rc = parallel.Client()\n",
80 "view = rc.load_balanced_view()\n",
102 "view = rc.load_balanced_view()\n",
81 "\n",
103 "\n",
82 "amr = view.map_async(time.sleep, [0.5]*100)\n",
104 "amr = view.map_async(time.sleep, [0.5]*100)\n",
83 "\n",
105 "\n",
84 "amr.wait_interactive()"
106 "amr.wait_interactive()"
85 ],
107 ],
86 "language": "python",
108 "language": "python",
87 "metadata": {},
109 "metadata": {},
88 "outputs": []
110 "outputs": [
111 {
112 "output_type": "stream",
113 "stream": "stdout",
114 "text": [
115 " 100/100 tasks finished after 30 s"
116 ]
117 },
118 {
119 "output_type": "stream",
120 "stream": "stdout",
121 "text": [
122 "\n",
123 "done\n"
124 ]
125 }
126 ],
127 "prompt_number": 3
128 },
129 {
130 "cell_type": "heading",
131 "level": 2,
132 "metadata": {},
133 "source": [
134 "Matplotlib example"
135 ]
89 },
136 },
90 {
137 {
91 "cell_type": "markdown",
138 "cell_type": "markdown",
92 "metadata": {},
139 "metadata": {},
93 "source": [
140 "source": [
94 "You can also use `clear_output()` to clear figures and plots.\n",
141 "You can also use `clear_output()` to clear figures and plots."
95 "\n",
96 "This time, we need to make sure we are using inline pylab (**requires matplotlib**)"
97 ]
142 ]
98 },
143 },
99 {
144 {
100 "cell_type": "code",
145 "cell_type": "code",
101 "collapsed": false,
146 "collapsed": false,
102 "input": [
147 "input": [
103 "%pylab inline"
148 "%pylab inline"
104 ],
149 ],
105 "language": "python",
150 "language": "python",
106 "metadata": {},
151 "metadata": {},
107 "outputs": []
152 "outputs": [
153 {
154 "output_type": "stream",
155 "stream": "stdout",
156 "text": [
157 "\n",
158 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
159 "For more information, type 'help(pylab)'.\n"
160 ]
161 }
162 ],
163 "prompt_number": 4
108 },
164 },
109 {
165 {
110 "cell_type": "code",
166 "cell_type": "code",
111 "collapsed": false,
167 "collapsed": false,
112 "input": [
168 "input": [
113 "from scipy.special import jn\n",
169 "from scipy.special import jn\n",
114 "x = np.linspace(0,5)\n",
170 "x = np.linspace(0,5)\n",
115 "f, ax = plt.subplots()\n",
171 "f, ax = plt.subplots()\n",
116 "ax.set_title(\"Bessel functions\")\n",
172 "ax.set_title(\"Bessel functions\")\n",
117 "\n",
173 "\n",
118 "for n in range(1,10):\n",
174 "for n in range(1,10):\n",
119 " time.sleep(1)\n",
175 " time.sleep(1)\n",
120 " ax.plot(x, jn(x,n))\n",
176 " ax.plot(x, jn(x,n))\n",
121 " clear_output()\n",
177 " clear_output()\n",
122 " display(f)\n",
178 " display(f)\n",
123 "\n",
179 "\n",
124 "# close the figure at the end, so we don't get a duplicate\n",
180 "# close the figure at the end, so we don't get a duplicate\n",
125 "# of the last plot\n",
181 "# of the last plot\n",
126 "plt.close()"
182 "plt.close()"
127 ],
183 ],
128 "language": "python",
184 "language": "python",
129 "metadata": {},
185 "metadata": {},
130 "outputs": []
186 "outputs": [
131 },
187 {
132 {
188 "output_type": "display_data",
133 "cell_type": "heading",
189 "png": "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\n",
134 "level": 2,
190 "text": [
135 "metadata": {},
191 "<matplotlib.figure.Figure at 0x1082fcbd0>"
136 "source": [
192 ]
137 "A Javascript Progress Bar"
193 }
138 ]
139 },
140 {
141 "cell_type": "markdown",
142 "metadata": {},
143 "source": [
144 "`clear_output()` is still something of a hack, and if you want to do a progress bar in the notebook\n",
145 "it is better to just use Javascript/HTML if you can.\n",
146 "\n",
147 "Here is a simple progress bar using HTML/Javascript:"
148 ]
149 },
150 {
151 "cell_type": "code",
152 "collapsed": false,
153 "input": [
154 "import uuid\n",
155 "from IPython.display import HTML, Javascript, display\n",
156 "\n",
157 "divid = str(uuid.uuid4())\n",
158 "\n",
159 "pb = HTML(\n",
160 "\"\"\"\n",
161 "<div style=\"border: 1px solid black; width:500px\">\n",
162 " <div id=\"%s\" style=\"background-color:blue; width:0%%\">&nbsp;</div>\n",
163 "</div> \n",
164 "\"\"\" % divid)\n",
165 "display(pb)\n",
166 "for i in range(1,101):\n",
167 " time.sleep(0.1)\n",
168 " \n",
169 " display(Javascript(\"$('div#%s').width('%i%%')\" % (divid, i)))"
170 ],
171 "language": "python",
172 "metadata": {},
173 "outputs": []
174 },
175 {
176 "cell_type": "markdown",
177 "metadata": {},
178 "source": [
179 "The above simply makes a div that is a box, and a blue div inside it with a unique ID \n",
180 "(so that the javascript won't collide with other similar progress bars on the same page). \n",
181 "\n",
182 "Then, at every progress point, we run a simple jQuery call to resize the blue box to\n",
183 "the appropriate fraction of the width of its containing box, and voil\u00e0 a nice\n",
184 "HTML/Javascript progress bar!"
185 ]
186 },
187 {
188 "cell_type": "heading",
189 "level": 2,
190 "metadata": {},
191 "source": [
192 "ProgressBar class"
193 ]
194 },
195 {
196 "cell_type": "markdown",
197 "metadata": {},
198 "source": [
199 "And finally, here is a progress bar *class* extracted from [PyMC](http://code.google.com/p/pymc/), which will work in regular Python as well as in the IPython Notebook"
200 ]
201 },
202 {
203 "cell_type": "code",
204 "collapsed": true,
205 "input": [
206 "import sys, time\n",
207 "\n",
208 "class ProgressBar:\n",
209 " def __init__(self, iterations):\n",
210 " self.iterations = iterations\n",
211 " self.prog_bar = '[]'\n",
212 " self.fill_char = '*'\n",
213 " self.width = 50\n",
214 " self.__update_amount(0)\n",
215 "\n",
216 " def animate(self, iter):\n",
217 " print '\\r', self,\n",
218 " sys.stdout.flush()\n",
219 " self.update_iteration(iter + 1)\n",
220 "\n",
221 " def update_iteration(self, elapsed_iter):\n",
222 " self.__update_amount((elapsed_iter / float(self.iterations)) * 100.0)\n",
223 " self.prog_bar += ' %d of %s complete' % (elapsed_iter, self.iterations)\n",
224 "\n",
225 " def __update_amount(self, new_amount):\n",
226 " percent_done = int(round((new_amount / 100.0) * 100.0))\n",
227 " all_full = self.width - 2\n",
228 " num_hashes = int(round((percent_done / 100.0) * all_full))\n",
229 " self.prog_bar = '[' + self.fill_char * num_hashes + ' ' * (all_full - num_hashes) + ']'\n",
230 " pct_place = (len(self.prog_bar) // 2) - len(str(percent_done))\n",
231 " pct_string = '%d%%' % percent_done\n",
232 " self.prog_bar = self.prog_bar[0:pct_place] + \\\n",
233 " (pct_string + self.prog_bar[pct_place + len(pct_string):])\n",
234 "\n",
235 " def __str__(self):\n",
236 " return str(self.prog_bar)"
237 ],
194 ],
238 "language": "python",
195 "prompt_number": 5
239 "metadata": {},
240 "outputs": []
241 },
242 {
243 "cell_type": "code",
244 "collapsed": false,
245 "input": [
246 "p = ProgressBar(1000)\n",
247 "for i in range(1001):\n",
248 " time.sleep(0.002)\n",
249 " p.animate(i)"
250 ],
251 "language": "python",
252 "metadata": {},
253 "outputs": []
254 }
196 }
255 ],
197 ],
256 "metadata": {}
198 "metadata": {}
257 }
199 }
258 ]
200 ]
259 } No newline at end of file
201 }
@@ -1,404 +1,399 b''
1 {
1 {
2 "metadata": {
2 "metadata": {
3 "name": "Custom Display Logic"
3 "name": "Custom Display Logic"
4 },
4 },
5 "nbformat": 3,
5 "nbformat": 3,
6 "nbformat_minor": 0,
6 "nbformat_minor": 0,
7 "worksheets": [
7 "worksheets": [
8 {
8 {
9 "cells": [
9 "cells": [
10 {
10 {
11 "cell_type": "heading",
11 "cell_type": "heading",
12 "level": 1,
12 "level": 1,
13 "metadata": {},
13 "metadata": {},
14 "source": [
14 "source": [
15 "Using the IPython display protocol for your own objects"
15 "Defining Custom Display Logic for Your Own Objects"
16 ]
16 ]
17 },
17 },
18 {
18 {
19 "cell_type": "markdown",
19 "cell_type": "markdown",
20 "metadata": {},
20 "metadata": {},
21 "source": [
21 "source": [
22 "IPython extends the idea of the ``__repr__`` method in Python to support multiple representations for a given\n",
22 "IPython extends the idea of the ``__repr__`` method in Python to support multiple representations for a given\n",
23 "object, which clients can use to display the object according to their capabilities. An object can return multiple\n",
23 "object, which clients can use to display the object according to their capabilities. An object can return multiple\n",
24 "representations of itself by implementing special methods, and you can also define at runtime custom display \n",
24 "representations of itself by implementing special methods, and you can also define at runtime custom display \n",
25 "functions for existing objects whose methods you can't or won't modify. In this notebook, we show how both approaches work.\n",
25 "functions for existing objects whose methods you can't or won't modify. In this notebook, we show how both approaches work."
26 "\n",
27 "<br/>\n",
28 "**Note:** this notebook has had all output cells stripped out so we can include it in the IPython documentation with \n",
29 "a minimal file size. You'll need to manually execute the cells to see the output (you can run all of them with the \n",
30 "\"Run All\" button, or execute each individually)."
31 ]
26 ]
32 },
27 },
33 {
28 {
34 "cell_type": "markdown",
29 "cell_type": "markdown",
35 "metadata": {},
30 "metadata": {},
36 "source": [
31 "source": [
37 "Parts of this notebook need the inline matplotlib backend:"
32 "Parts of this notebook need the inline matplotlib backend:"
38 ]
33 ]
39 },
34 },
40 {
35 {
41 "cell_type": "code",
36 "cell_type": "code",
42 "collapsed": false,
37 "collapsed": false,
43 "input": [
38 "input": [
44 "%pylab inline"
39 "%pylab inline"
45 ],
40 ],
46 "language": "python",
41 "language": "python",
47 "metadata": {},
42 "metadata": {},
48 "outputs": []
43 "outputs": []
49 },
44 },
50 {
45 {
51 "cell_type": "heading",
46 "cell_type": "heading",
52 "level": 2,
47 "level": 2,
53 "metadata": {},
48 "metadata": {},
54 "source": [
49 "source": [
55 "Custom-built classes with dedicated ``_repr_*_`` methods"
50 "Custom-built classes with dedicated ``_repr_*_`` methods"
56 ]
51 ]
57 },
52 },
58 {
53 {
59 "cell_type": "markdown",
54 "cell_type": "markdown",
60 "metadata": {},
55 "metadata": {},
61 "source": [
56 "source": [
62 "In our first example, we illustrate how objects can expose directly to IPython special representations of\n",
57 "In our first example, we illustrate how objects can expose directly to IPython special representations of\n",
63 "themselves, by providing methods such as ``_repr_svg_``, ``_repr_png_``, ``_repr_latex_``, etc. For a full\n",
58 "themselves, by providing methods such as ``_repr_svg_``, ``_repr_png_``, ``_repr_latex_``, etc. For a full\n",
64 "list of the special ``_repr_*_`` methods supported, see the code in ``IPython.core.displaypub``.\n",
59 "list of the special ``_repr_*_`` methods supported, see the code in ``IPython.core.displaypub``.\n",
65 "\n",
60 "\n",
66 "As an illustration, we build a class that holds data generated by sampling a Gaussian distribution with given mean \n",
61 "As an illustration, we build a class that holds data generated by sampling a Gaussian distribution with given mean \n",
67 "and variance. The class can display itself in a variety of ways: as a LaTeX expression or as an image in PNG or SVG \n",
62 "and variance. The class can display itself in a variety of ways: as a LaTeX expression or as an image in PNG or SVG \n",
68 "format. Each frontend can then decide which representation it can handle.\n",
63 "format. Each frontend can then decide which representation it can handle.\n",
69 "Further, we illustrate how to expose directly to the user the ability to directly access the various alternate \n",
64 "Further, we illustrate how to expose directly to the user the ability to directly access the various alternate \n",
70 "representations (since by default displaying the object itself will only show one, and which is shown will depend on the \n",
65 "representations (since by default displaying the object itself will only show one, and which is shown will depend on the \n",
71 "required representations that even cache necessary data in cases where it may be expensive to compute.\n",
66 "required representations that even cache necessary data in cases where it may be expensive to compute.\n",
72 "\n",
67 "\n",
73 "The next cell defines the Gaussian class:"
68 "The next cell defines the Gaussian class:"
74 ]
69 ]
75 },
70 },
76 {
71 {
77 "cell_type": "code",
72 "cell_type": "code",
78 "collapsed": false,
73 "collapsed": false,
79 "input": [
74 "input": [
80 "from IPython.core.pylabtools import print_figure\n",
75 "from IPython.core.pylabtools import print_figure\n",
81 "from IPython.display import Image, SVG, Math\n",
76 "from IPython.display import Image, SVG, Math\n",
82 "\n",
77 "\n",
83 "class Gaussian(object):\n",
78 "class Gaussian(object):\n",
84 " \"\"\"A simple object holding data sampled from a Gaussian distribution.\n",
79 " \"\"\"A simple object holding data sampled from a Gaussian distribution.\n",
85 " \"\"\"\n",
80 " \"\"\"\n",
86 " def __init__(self, mean=0, std=1, size=1000):\n",
81 " def __init__(self, mean=0, std=1, size=1000):\n",
87 " self.data = np.random.normal(mean, std, size)\n",
82 " self.data = np.random.normal(mean, std, size)\n",
88 " self.mean = mean\n",
83 " self.mean = mean\n",
89 " self.std = std\n",
84 " self.std = std\n",
90 " self.size = size\n",
85 " self.size = size\n",
91 " # For caching plots that may be expensive to compute\n",
86 " # For caching plots that may be expensive to compute\n",
92 " self._png_data = None\n",
87 " self._png_data = None\n",
93 " self._svg_data = None\n",
88 " self._svg_data = None\n",
94 " \n",
89 " \n",
95 " def _figure_data(self, format):\n",
90 " def _figure_data(self, format):\n",
96 " fig, ax = plt.subplots()\n",
91 " fig, ax = plt.subplots()\n",
97 " ax.plot(self.data, 'o')\n",
92 " ax.plot(self.data, 'o')\n",
98 " ax.set_title(self._repr_latex_())\n",
93 " ax.set_title(self._repr_latex_())\n",
99 " data = print_figure(fig, format)\n",
94 " data = print_figure(fig, format)\n",
100 " # We MUST close the figure, otherwise IPython's display machinery\n",
95 " # We MUST close the figure, otherwise IPython's display machinery\n",
101 " # will pick it up and send it as output, resulting in a double display\n",
96 " # will pick it up and send it as output, resulting in a double display\n",
102 " plt.close(fig)\n",
97 " plt.close(fig)\n",
103 " return data\n",
98 " return data\n",
104 " \n",
99 " \n",
105 " # Here we define the special repr methods that provide the IPython display protocol\n",
100 " # Here we define the special repr methods that provide the IPython display protocol\n",
106 " # Note that for the two figures, we cache the figure data once computed.\n",
101 " # Note that for the two figures, we cache the figure data once computed.\n",
107 " \n",
102 " \n",
108 " def _repr_png_(self):\n",
103 " def _repr_png_(self):\n",
109 " if self._png_data is None:\n",
104 " if self._png_data is None:\n",
110 " self._png_data = self._figure_data('png')\n",
105 " self._png_data = self._figure_data('png')\n",
111 " return self._png_data\n",
106 " return self._png_data\n",
112 "\n",
107 "\n",
113 "\n",
108 "\n",
114 " def _repr_svg_(self):\n",
109 " def _repr_svg_(self):\n",
115 " if self._svg_data is None:\n",
110 " if self._svg_data is None:\n",
116 " self._svg_data = self._figure_data('svg')\n",
111 " self._svg_data = self._figure_data('svg')\n",
117 " return self._svg_data\n",
112 " return self._svg_data\n",
118 " \n",
113 " \n",
119 " def _repr_latex_(self):\n",
114 " def _repr_latex_(self):\n",
120 " return r'$\\mathcal{N}(\\mu=%.2g, \\sigma=%.2g),\\ N=%d$' % (self.mean,\n",
115 " return r'$\\mathcal{N}(\\mu=%.2g, \\sigma=%.2g),\\ N=%d$' % (self.mean,\n",
121 " self.std, self.size)\n",
116 " self.std, self.size)\n",
122 " \n",
117 " \n",
123 " # We expose as properties some of the above reprs, so that the user can see them\n",
118 " # We expose as properties some of the above reprs, so that the user can see them\n",
124 " # directly (since otherwise the client dictates which one it shows by default)\n",
119 " # directly (since otherwise the client dictates which one it shows by default)\n",
125 " @property\n",
120 " @property\n",
126 " def png(self):\n",
121 " def png(self):\n",
127 " return Image(self._repr_png_(), embed=True)\n",
122 " return Image(self._repr_png_(), embed=True)\n",
128 " \n",
123 " \n",
129 " @property\n",
124 " @property\n",
130 " def svg(self):\n",
125 " def svg(self):\n",
131 " return SVG(self._repr_svg_())\n",
126 " return SVG(self._repr_svg_())\n",
132 " \n",
127 " \n",
133 " @property\n",
128 " @property\n",
134 " def latex(self):\n",
129 " def latex(self):\n",
135 " return Math(self._repr_svg_())\n",
130 " return Math(self._repr_svg_())\n",
136 " \n",
131 " \n",
137 " # An example of using a property to display rich information, in this case\n",
132 " # An example of using a property to display rich information, in this case\n",
138 " # the histogram of the distribution. We've hardcoded the format to be png\n",
133 " # the histogram of the distribution. We've hardcoded the format to be png\n",
139 " # in this case, but in production code it would be trivial to make it an option\n",
134 " # in this case, but in production code it would be trivial to make it an option\n",
140 " @property\n",
135 " @property\n",
141 " def hist(self):\n",
136 " def hist(self):\n",
142 " fig, ax = plt.subplots()\n",
137 " fig, ax = plt.subplots()\n",
143 " ax.hist(self.data, bins=100)\n",
138 " ax.hist(self.data, bins=100)\n",
144 " ax.set_title(self._repr_latex_())\n",
139 " ax.set_title(self._repr_latex_())\n",
145 " data = print_figure(fig, 'png')\n",
140 " data = print_figure(fig, 'png')\n",
146 " plt.close(fig)\n",
141 " plt.close(fig)\n",
147 " return Image(data, embed=True)"
142 " return Image(data, embed=True)"
148 ],
143 ],
149 "language": "python",
144 "language": "python",
150 "metadata": {},
145 "metadata": {},
151 "outputs": []
146 "outputs": []
152 },
147 },
153 {
148 {
154 "cell_type": "markdown",
149 "cell_type": "markdown",
155 "metadata": {},
150 "metadata": {},
156 "source": [
151 "source": [
157 "Now, we create an instance of the Gaussian distribution, whose default representation will be its LaTeX form:"
152 "Now, we create an instance of the Gaussian distribution, whose default representation will be its LaTeX form:"
158 ]
153 ]
159 },
154 },
160 {
155 {
161 "cell_type": "code",
156 "cell_type": "code",
162 "collapsed": false,
157 "collapsed": false,
163 "input": [
158 "input": [
164 "x = Gaussian()\n",
159 "x = Gaussian()\n",
165 "x"
160 "x"
166 ],
161 ],
167 "language": "python",
162 "language": "python",
168 "metadata": {},
163 "metadata": {},
169 "outputs": []
164 "outputs": []
170 },
165 },
171 {
166 {
172 "cell_type": "markdown",
167 "cell_type": "markdown",
173 "metadata": {},
168 "metadata": {},
174 "source": [
169 "source": [
175 "We can view the data in png or svg formats:"
170 "We can view the data in png or svg formats:"
176 ]
171 ]
177 },
172 },
178 {
173 {
179 "cell_type": "code",
174 "cell_type": "code",
180 "collapsed": false,
175 "collapsed": false,
181 "input": [
176 "input": [
182 "x.png"
177 "x.png"
183 ],
178 ],
184 "language": "python",
179 "language": "python",
185 "metadata": {},
180 "metadata": {},
186 "outputs": []
181 "outputs": []
187 },
182 },
188 {
183 {
189 "cell_type": "code",
184 "cell_type": "code",
190 "collapsed": false,
185 "collapsed": false,
191 "input": [
186 "input": [
192 "x.svg"
187 "x.svg"
193 ],
188 ],
194 "language": "python",
189 "language": "python",
195 "metadata": {},
190 "metadata": {},
196 "outputs": []
191 "outputs": []
197 },
192 },
198 {
193 {
199 "cell_type": "markdown",
194 "cell_type": "markdown",
200 "metadata": {},
195 "metadata": {},
201 "source": [
196 "source": [
202 "Since IPython only displays by default as an ``Out[]`` cell the result of the last computation, we can use the\n",
197 "Since IPython only displays by default as an ``Out[]`` cell the result of the last computation, we can use the\n",
203 "``display()`` function to show more than one representation in a single cell:"
198 "``display()`` function to show more than one representation in a single cell:"
204 ]
199 ]
205 },
200 },
206 {
201 {
207 "cell_type": "code",
202 "cell_type": "code",
208 "collapsed": false,
203 "collapsed": false,
209 "input": [
204 "input": [
210 "display(x.png)\n",
205 "display(x.png)\n",
211 "display(x.svg)"
206 "display(x.svg)"
212 ],
207 ],
213 "language": "python",
208 "language": "python",
214 "metadata": {},
209 "metadata": {},
215 "outputs": []
210 "outputs": []
216 },
211 },
217 {
212 {
218 "cell_type": "markdown",
213 "cell_type": "markdown",
219 "metadata": {},
214 "metadata": {},
220 "source": [
215 "source": [
221 "Now let's create a new Gaussian with different parameters"
216 "Now let's create a new Gaussian with different parameters"
222 ]
217 ]
223 },
218 },
224 {
219 {
225 "cell_type": "code",
220 "cell_type": "code",
226 "collapsed": false,
221 "collapsed": false,
227 "input": [
222 "input": [
228 "x2 = Gaussian(0.5, 0.2, 2000)\n",
223 "x2 = Gaussian(0.5, 0.2, 2000)\n",
229 "x2"
224 "x2"
230 ],
225 ],
231 "language": "python",
226 "language": "python",
232 "metadata": {},
227 "metadata": {},
233 "outputs": []
228 "outputs": []
234 },
229 },
235 {
230 {
236 "cell_type": "markdown",
231 "cell_type": "markdown",
237 "metadata": {},
232 "metadata": {},
238 "source": [
233 "source": [
239 "We can easily compare them by displaying their histograms"
234 "We can easily compare them by displaying their histograms"
240 ]
235 ]
241 },
236 },
242 {
237 {
243 "cell_type": "code",
238 "cell_type": "code",
244 "collapsed": false,
239 "collapsed": false,
245 "input": [
240 "input": [
246 "display(x.hist)\n",
241 "display(x.hist)\n",
247 "display(x2.hist)"
242 "display(x2.hist)"
248 ],
243 ],
249 "language": "python",
244 "language": "python",
250 "metadata": {},
245 "metadata": {},
251 "outputs": []
246 "outputs": []
252 },
247 },
253 {
248 {
254 "cell_type": "markdown",
249 "cell_type": "markdown",
255 "metadata": {},
250 "metadata": {},
256 "source": [
251 "source": [
257 "## Adding IPython display support to existing objects\n",
252 "## Adding IPython display support to existing objects\n",
258 "\n",
253 "\n",
259 "When you are directly writing your own classes, you can adapt them for display in IPython by \n",
254 "When you are directly writing your own classes, you can adapt them for display in IPython by \n",
260 "following the above example. But in practice, we often need to work with existing code we\n",
255 "following the above example. But in practice, we often need to work with existing code we\n",
261 "can't modify. \n",
256 "can't modify. \n",
262 "\n",
257 "\n",
263 "We now illustrate how to add these kinds of extended display capabilities to existing objects.\n",
258 "We now illustrate how to add these kinds of extended display capabilities to existing objects.\n",
264 "We will use the numpy polynomials and change their default representation to be a formatted\n",
259 "We will use the numpy polynomials and change their default representation to be a formatted\n",
265 "LaTeX expression.\n",
260 "LaTeX expression.\n",
266 "\n",
261 "\n",
267 "First, consider how a numpy polynomial object renders by default:"
262 "First, consider how a numpy polynomial object renders by default:"
268 ]
263 ]
269 },
264 },
270 {
265 {
271 "cell_type": "code",
266 "cell_type": "code",
272 "collapsed": false,
267 "collapsed": false,
273 "input": [
268 "input": [
274 "p = np.polynomial.Polynomial([1,2,3], [-10, 10])\n",
269 "p = np.polynomial.Polynomial([1,2,3], [-10, 10])\n",
275 "p"
270 "p"
276 ],
271 ],
277 "language": "python",
272 "language": "python",
278 "metadata": {},
273 "metadata": {},
279 "outputs": []
274 "outputs": []
280 },
275 },
281 {
276 {
282 "cell_type": "markdown",
277 "cell_type": "markdown",
283 "metadata": {},
278 "metadata": {},
284 "source": [
279 "source": [
285 "Next, we define a function that pretty-prints a polynomial as a LaTeX string:"
280 "Next, we define a function that pretty-prints a polynomial as a LaTeX string:"
286 ]
281 ]
287 },
282 },
288 {
283 {
289 "cell_type": "code",
284 "cell_type": "code",
290 "collapsed": false,
285 "collapsed": false,
291 "input": [
286 "input": [
292 "def poly2latex(p):\n",
287 "def poly2latex(p):\n",
293 " terms = ['%.2g' % p.coef[0]]\n",
288 " terms = ['%.2g' % p.coef[0]]\n",
294 " if len(p) > 1:\n",
289 " if len(p) > 1:\n",
295 " term = 'x'\n",
290 " term = 'x'\n",
296 " c = p.coef[1]\n",
291 " c = p.coef[1]\n",
297 " if c!=1:\n",
292 " if c!=1:\n",
298 " term = ('%.2g ' % c) + term\n",
293 " term = ('%.2g ' % c) + term\n",
299 " terms.append(term)\n",
294 " terms.append(term)\n",
300 " if len(p) > 2:\n",
295 " if len(p) > 2:\n",
301 " for i in range(2, len(p)):\n",
296 " for i in range(2, len(p)):\n",
302 " term = 'x^%d' % i\n",
297 " term = 'x^%d' % i\n",
303 " c = p.coef[i]\n",
298 " c = p.coef[i]\n",
304 " if c!=1:\n",
299 " if c!=1:\n",
305 " term = ('%.2g ' % c) + term\n",
300 " term = ('%.2g ' % c) + term\n",
306 " terms.append(term)\n",
301 " terms.append(term)\n",
307 " px = '$P(x)=%s$' % '+'.join(terms)\n",
302 " px = '$P(x)=%s$' % '+'.join(terms)\n",
308 " dom = r', domain: $[%.2g,\\ %.2g]$' % tuple(p.domain)\n",
303 " dom = r', domain: $[%.2g,\\ %.2g]$' % tuple(p.domain)\n",
309 " return px+dom"
304 " return px+dom"
310 ],
305 ],
311 "language": "python",
306 "language": "python",
312 "metadata": {},
307 "metadata": {},
313 "outputs": []
308 "outputs": []
314 },
309 },
315 {
310 {
316 "cell_type": "markdown",
311 "cell_type": "markdown",
317 "metadata": {},
312 "metadata": {},
318 "source": [
313 "source": [
319 "This produces, on our polynomial ``p``, the following:"
314 "This produces, on our polynomial ``p``, the following:"
320 ]
315 ]
321 },
316 },
322 {
317 {
323 "cell_type": "code",
318 "cell_type": "code",
324 "collapsed": false,
319 "collapsed": false,
325 "input": [
320 "input": [
326 "poly2latex(p)"
321 "poly2latex(p)"
327 ],
322 ],
328 "language": "python",
323 "language": "python",
329 "metadata": {},
324 "metadata": {},
330 "outputs": []
325 "outputs": []
331 },
326 },
332 {
327 {
333 "cell_type": "code",
328 "cell_type": "code",
334 "collapsed": false,
329 "collapsed": false,
335 "input": [
330 "input": [
336 "from IPython.display import Latex\n",
331 "from IPython.display import Latex\n",
337 "Latex(poly2latex(p))"
332 "Latex(poly2latex(p))"
338 ],
333 ],
339 "language": "python",
334 "language": "python",
340 "metadata": {},
335 "metadata": {},
341 "outputs": []
336 "outputs": []
342 },
337 },
343 {
338 {
344 "cell_type": "markdown",
339 "cell_type": "markdown",
345 "metadata": {},
340 "metadata": {},
346 "source": [
341 "source": [
347 "But we can configure IPython to do this automatically for us as follows. We hook into the\n",
342 "But we can configure IPython to do this automatically for us as follows. We hook into the\n",
348 "IPython display system and instruct it to use ``poly2latex`` for the latex mimetype, when\n",
343 "IPython display system and instruct it to use ``poly2latex`` for the latex mimetype, when\n",
349 "encountering objects of the ``Polynomial`` type defined in the\n",
344 "encountering objects of the ``Polynomial`` type defined in the\n",
350 "``numpy.polynomial.polynomial`` module:"
345 "``numpy.polynomial.polynomial`` module:"
351 ]
346 ]
352 },
347 },
353 {
348 {
354 "cell_type": "code",
349 "cell_type": "code",
355 "collapsed": false,
350 "collapsed": false,
356 "input": [
351 "input": [
357 "ip = get_ipython()\n",
352 "ip = get_ipython()\n",
358 "latex_formatter = ip.display_formatter.formatters['text/latex']\n",
353 "latex_formatter = ip.display_formatter.formatters['text/latex']\n",
359 "latex_formatter.for_type_by_name('numpy.polynomial.polynomial',\n",
354 "latex_formatter.for_type_by_name('numpy.polynomial.polynomial',\n",
360 " 'Polynomial', poly2latex)"
355 " 'Polynomial', poly2latex)"
361 ],
356 ],
362 "language": "python",
357 "language": "python",
363 "metadata": {},
358 "metadata": {},
364 "outputs": []
359 "outputs": []
365 },
360 },
366 {
361 {
367 "cell_type": "markdown",
362 "cell_type": "markdown",
368 "metadata": {},
363 "metadata": {},
369 "source": [
364 "source": [
370 "For more examples on how to use the above system, and how to bundle similar print functions\n",
365 "For more examples on how to use the above system, and how to bundle similar print functions\n",
371 "into a convenient IPython extension, see the ``IPython/extensions/sympyprinting.py`` file. \n",
366 "into a convenient IPython extension, see the ``IPython/extensions/sympyprinting.py`` file. \n",
372 "The machinery that defines the display system is in the ``display.py`` and ``displaypub.py`` \n",
367 "The machinery that defines the display system is in the ``display.py`` and ``displaypub.py`` \n",
373 "files in ``IPython/core``.\n",
368 "files in ``IPython/core``.\n",
374 "\n",
369 "\n",
375 "Once our special printer has been loaded, all polynomials will be represented by their \n",
370 "Once our special printer has been loaded, all polynomials will be represented by their \n",
376 "mathematical form instead:"
371 "mathematical form instead:"
377 ]
372 ]
378 },
373 },
379 {
374 {
380 "cell_type": "code",
375 "cell_type": "code",
381 "collapsed": false,
376 "collapsed": false,
382 "input": [
377 "input": [
383 "p"
378 "p"
384 ],
379 ],
385 "language": "python",
380 "language": "python",
386 "metadata": {},
381 "metadata": {},
387 "outputs": []
382 "outputs": []
388 },
383 },
389 {
384 {
390 "cell_type": "code",
385 "cell_type": "code",
391 "collapsed": false,
386 "collapsed": false,
392 "input": [
387 "input": [
393 "p2 = np.polynomial.Polynomial([-20, 71, -15, 1])\n",
388 "p2 = np.polynomial.Polynomial([-20, 71, -15, 1])\n",
394 "p2"
389 "p2"
395 ],
390 ],
396 "language": "python",
391 "language": "python",
397 "metadata": {},
392 "metadata": {},
398 "outputs": []
393 "outputs": []
399 }
394 }
400 ],
395 ],
401 "metadata": {}
396 "metadata": {}
402 }
397 }
403 ]
398 ]
404 } No newline at end of file
399 }
@@ -1,270 +1,278 b''
1 {
1 {
2 "metadata": {
2 "metadata": {
3 "name": "Cython Magics"
3 "name": "Cython Magics"
4 },
4 },
5 "nbformat": 3,
5 "nbformat": 3,
6 "nbformat_minor": 0,
6 "nbformat_minor": 0,
7 "worksheets": [
7 "worksheets": [
8 {
8 {
9 "cells": [
9 "cells": [
10 {
10 {
11 "cell_type": "heading",
11 "cell_type": "heading",
12 "level": 1,
12 "level": 1,
13 "metadata": {},
13 "metadata": {},
14 "source": [
14 "source": [
15 "Cython Magic Functions Extension"
15 "Cython Magic Functions"
16 ]
16 ]
17 },
17 },
18 {
18 {
19 "cell_type": "heading",
19 "cell_type": "heading",
20 "level": 2,
20 "level": 2,
21 "metadata": {},
21 "metadata": {},
22 "source": [
22 "source": [
23 "Loading the extension"
23 "Loading the extension"
24 ]
24 ]
25 },
25 },
26 {
26 {
27 "cell_type": "markdown",
27 "cell_type": "markdown",
28 "metadata": {},
28 "metadata": {},
29 "source": [
29 "source": [
30 "IPtyhon has a `cythonmagic` extension that contains a number of magic functions for working with Cython code. This extension can be loaded using the `%load_ext` magic as follows:"
30 "IPtyhon has a `cythonmagic` extension that contains a number of magic functions for working with Cython code. This extension can be loaded using the `%load_ext` magic as follows:"
31 ]
31 ]
32 },
32 },
33 {
33 {
34 "cell_type": "code",
34 "cell_type": "code",
35 "collapsed": false,
35 "collapsed": false,
36 "input": [
36 "input": [
37 "%load_ext cythonmagic"
37 "%load_ext cythonmagic"
38 ],
38 ],
39 "language": "python",
39 "language": "python",
40 "metadata": {},
40 "metadata": {},
41 "outputs": [],
41 "outputs": [],
42 "prompt_number": 1
42 "prompt_number": 1
43 },
43 },
44 {
44 {
45 "cell_type": "heading",
45 "cell_type": "heading",
46 "level": 2,
46 "level": 2,
47 "metadata": {},
47 "metadata": {},
48 "source": [
48 "source": [
49 "The %cython_inline magic"
49 "The %cython_inline magic"
50 ]
50 ]
51 },
51 },
52 {
52 {
53 "cell_type": "markdown",
53 "cell_type": "markdown",
54 "metadata": {},
54 "metadata": {},
55 "source": [
55 "source": [
56 "The `%%cython_inline` magic uses `Cython.inline` to compile a Cython expression. This allows you to enter and run a function body with Cython code. Use a bare `return` statement to return values. "
56 "The `%%cython_inline` magic uses `Cython.inline` to compile a Cython expression. This allows you to enter and run a function body with Cython code. Use a bare `return` statement to return values. "
57 ]
57 ]
58 },
58 },
59 {
59 {
60 "cell_type": "code",
60 "cell_type": "code",
61 "collapsed": false,
61 "collapsed": false,
62 "input": [
62 "input": [
63 "a = 10\n",
63 "a = 10\n",
64 "b = 20"
64 "b = 20"
65 ],
65 ],
66 "language": "python",
66 "language": "python",
67 "metadata": {},
67 "metadata": {},
68 "outputs": [],
68 "outputs": [],
69 "prompt_number": 2
69 "prompt_number": 2
70 },
70 },
71 {
71 {
72 "cell_type": "code",
72 "cell_type": "code",
73 "collapsed": false,
73 "collapsed": false,
74 "input": [
74 "input": [
75 "%%cython_inline\n",
75 "%%cython_inline\n",
76 "return a+b"
76 "return a+b"
77 ],
77 ],
78 "language": "python",
78 "language": "python",
79 "metadata": {},
79 "metadata": {},
80 "outputs": [
80 "outputs": [
81 {
81 {
82 "output_type": "pyout",
82 "output_type": "pyout",
83 "prompt_number": 3,
83 "prompt_number": 3,
84 "text": [
84 "text": [
85 "30"
85 "30"
86 ]
86 ]
87 }
87 }
88 ],
88 ],
89 "prompt_number": 3
89 "prompt_number": 3
90 },
90 },
91 {
91 {
92 "cell_type": "heading",
92 "cell_type": "heading",
93 "level": 2,
93 "level": 2,
94 "metadata": {},
94 "metadata": {},
95 "source": [
95 "source": [
96 "The %cython_pyximport magic"
96 "The %cython_pyximport magic"
97 ]
97 ]
98 },
98 },
99 {
99 {
100 "cell_type": "markdown",
100 "cell_type": "markdown",
101 "metadata": {},
101 "metadata": {},
102 "source": [
102 "source": [
103 "The `%%cython_pyximport` magic allows you to enter arbitrary Cython code into a cell. That Cython code is written as a `.pyx` file in the current working directory and then imported using `pyximport`. You have the specify the name of the module that the Code will appear in. All symbols from the module are imported automatically by the magic function."
103 "The `%%cython_pyximport` magic allows you to enter arbitrary Cython code into a cell. That Cython code is written as a `.pyx` file in the current working directory and then imported using `pyximport`. You have the specify the name of the module that the Code will appear in. All symbols from the module are imported automatically by the magic function."
104 ]
104 ]
105 },
105 },
106 {
106 {
107 "cell_type": "code",
107 "cell_type": "code",
108 "collapsed": false,
108 "collapsed": false,
109 "input": [
109 "input": [
110 "%%cython_pyximport foo\n",
110 "%%cython_pyximport foo\n",
111 "def f(x):\n",
111 "def f(x):\n",
112 " return 4.0*x"
112 " return 4.0*x"
113 ],
113 ],
114 "language": "python",
114 "language": "python",
115 "metadata": {},
115 "metadata": {},
116 "outputs": [],
116 "outputs": [],
117 "prompt_number": 4
117 "prompt_number": 4
118 },
118 },
119 {
119 {
120 "cell_type": "code",
120 "cell_type": "code",
121 "collapsed": false,
121 "collapsed": false,
122 "input": [
122 "input": [
123 "f(10)"
123 "f(10)"
124 ],
124 ],
125 "language": "python",
125 "language": "python",
126 "metadata": {},
126 "metadata": {},
127 "outputs": [
127 "outputs": [
128 {
128 {
129 "output_type": "pyout",
129 "output_type": "pyout",
130 "prompt_number": 5,
130 "prompt_number": 5,
131 "text": [
131 "text": [
132 "40.0"
132 "40.0"
133 ]
133 ]
134 }
134 }
135 ],
135 ],
136 "prompt_number": 5
136 "prompt_number": 5
137 },
137 },
138 {
138 {
139 "cell_type": "heading",
139 "cell_type": "heading",
140 "level": 2,
140 "level": 2,
141 "metadata": {},
141 "metadata": {},
142 "source": [
142 "source": [
143 "The %cython magic"
143 "The %cython magic"
144 ]
144 ]
145 },
145 },
146 {
146 {
147 "cell_type": "markdown",
147 "cell_type": "markdown",
148 "metadata": {},
148 "metadata": {},
149 "source": [
149 "source": [
150 "Probably the most important magic is the `%cython` magic. This is similar to the `%%cython_pyximport` magic, but doesn't require you to specify a module name. Instead, the `%%cython` magic uses manages everything using temporary files in the `~/.cython/magic` directory. All of the symbols in the Cython module are imported automatically by the magic.\n",
150 "Probably the most important magic is the `%cython` magic. This is similar to the `%%cython_pyximport` magic, but doesn't require you to specify a module name. Instead, the `%%cython` magic uses manages everything using temporary files in the `~/.cython/magic` directory. All of the symbols in the Cython module are imported automatically by the magic.\n",
151 "\n",
151 "\n",
152 "Here is a simple example of a Black-Scholes options pricing algorithm written in Cython. Please note that this example might not compile on non-POSIX systems (e.g., Windows) because of a missing `erf` symbol."
152 "Here is a simple example of a Black-Scholes options pricing algorithm written in Cython. Please note that this example might not compile on non-POSIX systems (e.g., Windows) because of a missing `erf` symbol."
153 ]
153 ]
154 },
154 },
155 {
155 {
156 "cell_type": "code",
156 "cell_type": "code",
157 "collapsed": false,
157 "collapsed": false,
158 "input": [
158 "input": [
159 "%%cython\n",
159 "%%cython\n",
160 "cimport cython\n",
160 "cimport cython\n",
161 "from libc.math cimport exp, sqrt, pow, log, erf\n",
161 "from libc.math cimport exp, sqrt, pow, log, erf\n",
162 "\n",
162 "\n",
163 "@cython.cdivision(True)\n",
163 "@cython.cdivision(True)\n",
164 "cdef double std_norm_cdf(double x) nogil:\n",
164 "cdef double std_norm_cdf(double x) nogil:\n",
165 " return 0.5*(1+erf(x/sqrt(2.0)))\n",
165 " return 0.5*(1+erf(x/sqrt(2.0)))\n",
166 "\n",
166 "\n",
167 "@cython.cdivision(True)\n",
167 "@cython.cdivision(True)\n",
168 "def black_scholes(double s, double k, double t, double v,\n",
168 "def black_scholes(double s, double k, double t, double v,\n",
169 " double rf, double div, double cp):\n",
169 " double rf, double div, double cp):\n",
170 " \"\"\"Price an option using the Black-Scholes model.\n",
170 " \"\"\"Price an option using the Black-Scholes model.\n",
171 " \n",
171 " \n",
172 " s : initial stock price\n",
172 " s : initial stock price\n",
173 " k : strike price\n",
173 " k : strike price\n",
174 " t : expiration time\n",
174 " t : expiration time\n",
175 " v : volatility\n",
175 " v : volatility\n",
176 " rf : risk-free rate\n",
176 " rf : risk-free rate\n",
177 " div : dividend\n",
177 " div : dividend\n",
178 " cp : +1/-1 for call/put\n",
178 " cp : +1/-1 for call/put\n",
179 " \"\"\"\n",
179 " \"\"\"\n",
180 " cdef double d1, d2, optprice\n",
180 " cdef double d1, d2, optprice\n",
181 " with nogil:\n",
181 " with nogil:\n",
182 " d1 = (log(s/k)+(rf-div+0.5*pow(v,2))*t)/(v*sqrt(t))\n",
182 " d1 = (log(s/k)+(rf-div+0.5*pow(v,2))*t)/(v*sqrt(t))\n",
183 " d2 = d1 - v*sqrt(t)\n",
183 " d2 = d1 - v*sqrt(t)\n",
184 " optprice = cp*s*exp(-div*t)*std_norm_cdf(cp*d1) - \\\n",
184 " optprice = cp*s*exp(-div*t)*std_norm_cdf(cp*d1) - \\\n",
185 " cp*k*exp(-rf*t)*std_norm_cdf(cp*d2)\n",
185 " cp*k*exp(-rf*t)*std_norm_cdf(cp*d2)\n",
186 " return optprice"
186 " return optprice"
187 ],
187 ],
188 "language": "python",
188 "language": "python",
189 "metadata": {},
189 "metadata": {},
190 "outputs": [],
190 "outputs": [],
191 "prompt_number": 6
191 "prompt_number": 6
192 },
192 },
193 {
193 {
194 "cell_type": "code",
194 "cell_type": "code",
195 "collapsed": false,
195 "collapsed": false,
196 "input": [
196 "input": [
197 "black_scholes(100.0, 100.0, 1.0, 0.3, 0.03, 0.0, -1)"
197 "black_scholes(100.0, 100.0, 1.0, 0.3, 0.03, 0.0, -1)"
198 ],
198 ],
199 "language": "python",
199 "language": "python",
200 "metadata": {},
200 "metadata": {},
201 "outputs": [
201 "outputs": [
202 {
202 {
203 "output_type": "pyout",
203 "output_type": "pyout",
204 "prompt_number": 7,
204 "prompt_number": 7,
205 "text": [
205 "text": [
206 "10.327861752731728"
206 "10.327861752731728"
207 ]
207 ]
208 }
208 }
209 ],
209 ],
210 "prompt_number": 7
210 "prompt_number": 7
211 },
211 },
212 {
212 {
213 "cell_type": "code",
213 "cell_type": "code",
214 "collapsed": false,
214 "collapsed": false,
215 "input": [
215 "input": [
216 "%timeit black_scholes(100.0, 100.0, 1.0, 0.3, 0.03, 0.0, -1)"
216 "%timeit black_scholes(100.0, 100.0, 1.0, 0.3, 0.03, 0.0, -1)"
217 ],
217 ],
218 "language": "python",
218 "language": "python",
219 "metadata": {},
219 "metadata": {},
220 "outputs": [
220 "outputs": [
221 {
221 {
222 "output_type": "stream",
222 "output_type": "stream",
223 "stream": "stdout",
223 "stream": "stdout",
224 "text": [
224 "text": [
225 "1000000 loops, best of 3: 821 ns per loop\n"
225 "1000000 loops, best of 3: 821 ns per loop\n"
226 ]
226 ]
227 }
227 }
228 ],
228 ],
229 "prompt_number": 8
229 "prompt_number": 8
230 },
230 },
231 {
231 {
232 "cell_type": "heading",
233 "level": 2,
234 "metadata": {},
235 "source": [
236 "External libraries"
237 ]
238 },
239 {
232 "cell_type": "markdown",
240 "cell_type": "markdown",
233 "metadata": {},
241 "metadata": {},
234 "source": [
242 "source": [
235 "Cython allows you to specify additional libraries to be linked with your extension, you can do so with the `-l` flag (also spelled `--lib`). Note that this flag can be passed more than once to specify multiple libraries, such as `-lm -llib2 --lib lib3`. Here's a simple example of how to access the system math library:"
243 "Cython allows you to specify additional libraries to be linked with your extension, you can do so with the `-l` flag (also spelled `--lib`). Note that this flag can be passed more than once to specify multiple libraries, such as `-lm -llib2 --lib lib3`. Here's a simple example of how to access the system math library:"
236 ]
244 ]
237 },
245 },
238 {
246 {
239 "cell_type": "code",
247 "cell_type": "code",
240 "collapsed": false,
248 "collapsed": false,
241 "input": [
249 "input": [
242 "%%cython -lm\n",
250 "%%cython -lm\n",
243 "from libc.math cimport sin\n",
251 "from libc.math cimport sin\n",
244 "print 'sin(1)=', sin(1)"
252 "print 'sin(1)=', sin(1)"
245 ],
253 ],
246 "language": "python",
254 "language": "python",
247 "metadata": {},
255 "metadata": {},
248 "outputs": [
256 "outputs": [
249 {
257 {
250 "output_type": "stream",
258 "output_type": "stream",
251 "stream": "stdout",
259 "stream": "stdout",
252 "text": [
260 "text": [
253 "sin(1)= 0.841470984808\n"
261 "sin(1)= 0.841470984808\n"
254 ]
262 ]
255 }
263 }
256 ],
264 ],
257 "prompt_number": 9
265 "prompt_number": 9
258 },
266 },
259 {
267 {
260 "cell_type": "markdown",
268 "cell_type": "markdown",
261 "metadata": {},
269 "metadata": {},
262 "source": [
270 "source": [
263 "You can similarly use the `-I/--include` flag to add include directories to the search path, and `-c/--compile-args` to add extra flags that are passed to Cython via the `extra_compile_args` of the distutils `Extension` class. Please see [the Cython docs on C library usage](http://docs.cython.org/src/tutorial/clibraries.html) for more details on the use of these flags."
271 "You can similarly use the `-I/--include` flag to add include directories to the search path, and `-c/--compile-args` to add extra flags that are passed to Cython via the `extra_compile_args` of the distutils `Extension` class. Please see [the Cython docs on C library usage](http://docs.cython.org/src/tutorial/clibraries.html) for more details on the use of these flags."
264 ]
272 ]
265 }
273 }
266 ],
274 ],
267 "metadata": {}
275 "metadata": {}
268 }
276 }
269 ]
277 ]
270 } No newline at end of file
278 }
@@ -1,252 +1,252 b''
1 {
1 {
2 "metadata": {
2 "metadata": {
3 "name": "Data Publication API"
3 "name": "Data Publication API"
4 },
4 },
5 "nbformat": 3,
5 "nbformat": 3,
6 "nbformat_minor": 0,
6 "nbformat_minor": 0,
7 "worksheets": [
7 "worksheets": [
8 {
8 {
9 "cells": [
9 "cells": [
10 {
10 {
11 "cell_type": "heading",
11 "cell_type": "heading",
12 "level": 1,
12 "level": 1,
13 "metadata": {},
13 "metadata": {},
14 "source": [
14 "source": [
15 "IPython's Data Publication API"
15 "IPython's Data Publication API"
16 ]
16 ]
17 },
17 },
18 {
18 {
19 "cell_type": "markdown",
19 "cell_type": "markdown",
20 "metadata": {},
20 "metadata": {},
21 "source": [
21 "source": [
22 "IPython has an API that allows IPython Engines to publish data back to the Client. This example shows how this API works."
22 "IPython has an API that allows IPython Engines to publish data back to the Client. This Notebook shows how this API works."
23 ]
23 ]
24 },
24 },
25 {
25 {
26 "cell_type": "heading",
26 "cell_type": "heading",
27 "level": 2,
27 "level": 2,
28 "metadata": {},
28 "metadata": {},
29 "source": [
29 "source": [
30 "Setup"
30 "Setup"
31 ]
31 ]
32 },
32 },
33 {
33 {
34 "cell_type": "markdown",
34 "cell_type": "markdown",
35 "metadata": {},
35 "metadata": {},
36 "source": [
36 "source": [
37 "We begin by enabling pylab mode and creating a `Client` object to work with an IPython cluster."
37 "We begin by enabling pylab mode and creating a `Client` object to work with an IPython cluster."
38 ]
38 ]
39 },
39 },
40 {
40 {
41 "cell_type": "code",
41 "cell_type": "code",
42 "collapsed": false,
42 "collapsed": false,
43 "input": [
43 "input": [
44 "%pylab inline"
44 "%pylab inline"
45 ],
45 ],
46 "language": "python",
46 "language": "python",
47 "metadata": {},
47 "metadata": {},
48 "outputs": [
48 "outputs": [
49 {
49 {
50 "output_type": "stream",
50 "output_type": "stream",
51 "stream": "stdout",
51 "stream": "stdout",
52 "text": [
52 "text": [
53 "\n",
53 "\n",
54 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
54 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
55 "For more information, type 'help(pylab)'.\n"
55 "For more information, type 'help(pylab)'.\n"
56 ]
56 ]
57 }
57 }
58 ],
58 ],
59 "prompt_number": 48
59 "prompt_number": 48
60 },
60 },
61 {
61 {
62 "cell_type": "code",
62 "cell_type": "code",
63 "collapsed": false,
63 "collapsed": false,
64 "input": [
64 "input": [
65 "from IPython.parallel import Client"
65 "from IPython.parallel import Client"
66 ],
66 ],
67 "language": "python",
67 "language": "python",
68 "metadata": {},
68 "metadata": {},
69 "outputs": [],
69 "outputs": [],
70 "prompt_number": 12
70 "prompt_number": 12
71 },
71 },
72 {
72 {
73 "cell_type": "code",
73 "cell_type": "code",
74 "collapsed": false,
74 "collapsed": false,
75 "input": [
75 "input": [
76 "c = Client()\n",
76 "c = Client()\n",
77 "dv = c[:]\n",
77 "dv = c[:]\n",
78 "dv.block = False"
78 "dv.block = False"
79 ],
79 ],
80 "language": "python",
80 "language": "python",
81 "metadata": {},
81 "metadata": {},
82 "outputs": [],
82 "outputs": [],
83 "prompt_number": 13
83 "prompt_number": 13
84 },
84 },
85 {
85 {
86 "cell_type": "heading",
86 "cell_type": "heading",
87 "level": 2,
87 "level": 2,
88 "metadata": {},
88 "metadata": {},
89 "source": [
89 "source": [
90 "Simple publication"
90 "Simple publication"
91 ]
91 ]
92 },
92 },
93 {
93 {
94 "cell_type": "markdown",
94 "cell_type": "markdown",
95 "metadata": {},
95 "metadata": {},
96 "source": [
96 "source": [
97 "Here is a simple Python function we are going to run on the Engines. This function uses `publish_data` to publish a simple Python dictionary when it is run."
97 "Here is a simple Python function we are going to run on the Engines. This function uses `publish_data` to publish a simple Python dictionary when it is run."
98 ]
98 ]
99 },
99 },
100 {
100 {
101 "cell_type": "code",
101 "cell_type": "code",
102 "collapsed": false,
102 "collapsed": false,
103 "input": [
103 "input": [
104 "def publish_it():\n",
104 "def publish_it():\n",
105 " from IPython.zmq.datapub import publish_data\n",
105 " from IPython.zmq.datapub import publish_data\n",
106 " publish_data(dict(a='hi'))"
106 " publish_data(dict(a='hi'))"
107 ],
107 ],
108 "language": "python",
108 "language": "python",
109 "metadata": {},
109 "metadata": {},
110 "outputs": [],
110 "outputs": [],
111 "prompt_number": 14
111 "prompt_number": 14
112 },
112 },
113 {
113 {
114 "cell_type": "markdown",
114 "cell_type": "markdown",
115 "metadata": {},
115 "metadata": {},
116 "source": [
116 "source": [
117 "We run the function on the Engines using `apply_async` and save the returned `AsyncResult` object:"
117 "We run the function on the Engines using `apply_async` and save the returned `AsyncResult` object:"
118 ]
118 ]
119 },
119 },
120 {
120 {
121 "cell_type": "code",
121 "cell_type": "code",
122 "collapsed": false,
122 "collapsed": false,
123 "input": [
123 "input": [
124 "ar = dv.apply_async(publish_it)"
124 "ar = dv.apply_async(publish_it)"
125 ],
125 ],
126 "language": "python",
126 "language": "python",
127 "metadata": {},
127 "metadata": {},
128 "outputs": [],
128 "outputs": [],
129 "prompt_number": 15
129 "prompt_number": 15
130 },
130 },
131 {
131 {
132 "cell_type": "markdown",
132 "cell_type": "markdown",
133 "metadata": {},
133 "metadata": {},
134 "source": [
134 "source": [
135 "The published data from each engine is then available under the `.data` attribute of the `AsyncResult` object."
135 "The published data from each engine is then available under the `.data` attribute of the `AsyncResult` object."
136 ]
136 ]
137 },
137 },
138 {
138 {
139 "cell_type": "code",
139 "cell_type": "code",
140 "collapsed": false,
140 "collapsed": false,
141 "input": [
141 "input": [
142 "ar.data"
142 "ar.data"
143 ],
143 ],
144 "language": "python",
144 "language": "python",
145 "metadata": {},
145 "metadata": {},
146 "outputs": [
146 "outputs": [
147 {
147 {
148 "output_type": "pyout",
148 "output_type": "pyout",
149 "prompt_number": 16,
149 "prompt_number": 16,
150 "text": [
150 "text": [
151 "[{'a': 'hi'}, {'a': 'hi'}, {'a': 'hi'}, {'a': 'hi'}]"
151 "[{'a': 'hi'}, {'a': 'hi'}, {'a': 'hi'}, {'a': 'hi'}]"
152 ]
152 ]
153 }
153 }
154 ],
154 ],
155 "prompt_number": 16
155 "prompt_number": 16
156 },
156 },
157 {
157 {
158 "cell_type": "markdown",
158 "cell_type": "markdown",
159 "metadata": {},
159 "metadata": {},
160 "source": [
160 "source": [
161 "Each time `publish_data` is called, the `.data` attribute is updated with the most recently published data."
161 "Each time `publish_data` is called, the `.data` attribute is updated with the most recently published data."
162 ]
162 ]
163 },
163 },
164 {
164 {
165 "cell_type": "heading",
165 "cell_type": "heading",
166 "level": 2,
166 "level": 2,
167 "metadata": {},
167 "metadata": {},
168 "source": [
168 "source": [
169 "Simulation loop"
169 "Simulation loop"
170 ]
170 ]
171 },
171 },
172 {
172 {
173 "cell_type": "markdown",
173 "cell_type": "markdown",
174 "metadata": {},
174 "metadata": {},
175 "source": [
175 "source": [
176 "In many cases, the Engines will be running a simulation loop and we will want to publish data at each time step of the simulation. To show how this works, we create a mock simulation function that iterates over a loop and publishes a NumPy array and loop variable at each time step. By inserting a call to `time.sleep(1)`, we ensure that new data will be published every second."
176 "In many cases, the Engines will be running a simulation loop and we will want to publish data at each time step of the simulation. To show how this works, we create a mock simulation function that iterates over a loop and publishes a NumPy array and loop variable at each time step. By inserting a call to `time.sleep(1)`, we ensure that new data will be published every second."
177 ]
177 ]
178 },
178 },
179 {
179 {
180 "cell_type": "code",
180 "cell_type": "code",
181 "collapsed": false,
181 "collapsed": false,
182 "input": [
182 "input": [
183 "def simulation_loop():\n",
183 "def simulation_loop():\n",
184 " from IPython.zmq.datapub import publish_data\n",
184 " from IPython.zmq.datapub import publish_data\n",
185 " import time\n",
185 " import time\n",
186 " import numpy as np\n",
186 " import numpy as np\n",
187 " for i in range(10):\n",
187 " for i in range(10):\n",
188 " publish_data(dict(a=np.random.rand(20), i=i))\n",
188 " publish_data(dict(a=np.random.rand(20), i=i))\n",
189 " time.sleep(1)"
189 " time.sleep(1)"
190 ],
190 ],
191 "language": "python",
191 "language": "python",
192 "metadata": {},
192 "metadata": {},
193 "outputs": [],
193 "outputs": [],
194 "prompt_number": 57
194 "prompt_number": 57
195 },
195 },
196 {
196 {
197 "cell_type": "markdown",
197 "cell_type": "markdown",
198 "metadata": {},
198 "metadata": {},
199 "source": [
199 "source": [
200 "Again, we run the `simulation_loop` function in parallel using `apply_async` and save the returned `AsyncResult` object."
200 "Again, we run the `simulation_loop` function in parallel using `apply_async` and save the returned `AsyncResult` object."
201 ]
201 ]
202 },
202 },
203 {
203 {
204 "cell_type": "code",
204 "cell_type": "code",
205 "collapsed": false,
205 "collapsed": false,
206 "input": [
206 "input": [
207 "ar = dv.apply_async(simulation_loop)"
207 "ar = dv.apply_async(simulation_loop)"
208 ],
208 ],
209 "language": "python",
209 "language": "python",
210 "metadata": {},
210 "metadata": {},
211 "outputs": [],
211 "outputs": [],
212 "prompt_number": 58
212 "prompt_number": 58
213 },
213 },
214 {
214 {
215 "cell_type": "markdown",
215 "cell_type": "markdown",
216 "metadata": {},
216 "metadata": {},
217 "source": [
217 "source": [
218 "New data will be published by the Engines every second. Anytime we access `ar.data`, we will get the most recently published data."
218 "New data will be published by the Engines every second. Anytime we access `ar.data`, we will get the most recently published data."
219 ]
219 ]
220 },
220 },
221 {
221 {
222 "cell_type": "code",
222 "cell_type": "code",
223 "collapsed": false,
223 "collapsed": false,
224 "input": [
224 "input": [
225 "data = ar.data\n",
225 "data = ar.data\n",
226 "for i, d in enumerate(data):\n",
226 "for i, d in enumerate(data):\n",
227 " plot(d['a'], label='engine: '+str(i))\n",
227 " plot(d['a'], label='engine: '+str(i))\n",
228 "title('Data published at time step: ' + str(data[0]['i']))\n",
228 "title('Data published at time step: ' + str(data[0]['i']))\n",
229 "legend()"
229 "legend()"
230 ],
230 ],
231 "language": "python",
231 "language": "python",
232 "metadata": {},
232 "metadata": {},
233 "outputs": [
233 "outputs": [
234 {
234 {
235 "output_type": "pyout",
235 "output_type": "pyout",
236 "prompt_number": 61,
236 "prompt_number": 61,
237 "text": [
237 "text": [
238 "<matplotlib.legend.Legend at 0x10a8ed8d0>"
238 "<matplotlib.legend.Legend at 0x10a8ed8d0>"
239 ]
239 ]
240 },
240 },
241 {
241 {
242 "output_type": "display_data",
242 "output_type": "display_data",
243 "png": "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\n"
243 "png": "iVBORw0KGgoAAAANSUhEUgAAAXUAAAEICAYAAACgQWTXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXl4U2Xa/79JmqR7mzbd99KmtGWHsihLAUFcmNFReUXA\nGUVE3Ne5RkYUfFFnlBmXceP1N26jojLugiBl32RfutE1TZvubbo3e57fH6cnTdIs5yTpyvlcVy9o\nzvYkab65z/e5n/vmEUIIODg4ODjGBPzhHgAHBwcHh/fgRJ2Dg4NjDMGJOgcHB8cYghN1Dg4OjjEE\nJ+ocHBwcYwhO1Dk4ODjGEJyocwwKubm5+Pe//213W1VVFfh8PkwmEwDgxhtvxH/+8x+X5+Tz+ais\nrBz08Q0GGzZswNatW4fsehxXL5yoj1CSk5Ph7++P4OBgJCUlYdGiRfjvf//L+Hhb4RxqeDweeDwe\no313796NNWvWDPKIrGEzPltcfbl8/PHHmDdvntVj7733Hp577jm3ructkpOTceDAgSG73i+//ILf\n//73iIyMxG233Ya2trYhu/bVDCfqIxQej4eff/4ZnZ2d+OabbzB79mw8/vjjePrpp1mdh1tbNjiM\nxteVx+MN2bjr6+uxatUqPProo8jPz4dIJMLq1auH5NpXO5yojwJmzJiBl19+GVu2bMEbb7yB8vJy\nAMCuXbswdepUhISEYMmSJfj000/Nx8yfPx8AEBoaiqCgIJw6dQoVFRVYtGgRpFIpJk2ahL///e/o\n7u52eF0+n4+PP/4YkydPRnZ2Nr788kuzKGzevNkqurZ3Z1BfX49FixYhPj4ef/vb39DT02P3OpZW\nCC0GsbGxiIiIwJ133mm178mTJzFlyhSkpaXh9ddft9p27NgxrFq1CikpKdiyZQtaWlrM2woLC7Fi\nxQrExsbir3/9KwDHwnz69GnMmTMHEokEc+bMwdtvvw2DwWD1uk6ePBlBQUHYuXOn1bHFxcXYsGED\nTp48iaCgIISFhQEA/vSnP2HTpk0AgEOHDiE+Ph7vv/8+UlJSkJWVhQMHDuDIkSPIyclBZmYmvvji\nC6vz/vLLL/jd736HjIwMvP766w7ft97eXtx3331ITk5GeHg4FixYAEII1qxZg+rqaixfvhxBQUHY\ntm0bAKCiogJ//vOfkZSUhHXr1qGoqMjqfXnppZcYvYe27NixA0uXLsXixYsRFRWFZ599Fnv27IFS\nqWR0PIcHEI4RSXJyMtm/f7/VY83NzcTHx4d8+eWXhBBCDh06RAoKCojBYCB79uwhQUFBpKysjBBC\nSFVVFeHxeMRoNJqPLy8vJ3l5eUSn05FLly6RadOmkQ8++MDhGHg8HpkzZw65fPkyOXz4MElOTiZ7\n9uwhhBCyefNmsnr1avO+crnc6noLFiwg0dHR5McffyTl5eVk8eLF5C9/+YvdfXNzc8m///1vQggh\nTz/9NHnmmWdIb28v0Wq15Pjx41bjWbRoESkuLibnzp0jQUFBpLy8nBBCyKVLl0h8fDzZt28fUalU\n5JFHHiF33XUXIYQQk8lEIiMjybZt20hzczN58skniUgkMl/TlnPnzpFTp04Rg8FAjh8/TpKSksi+\nffusxlFRUeHwdfv444/J3LlzrR7705/+RDZt2kQIIeTgwYNEKBSSRx55hLS0tJD//d//JdHR0eQP\nf/gDKS8vJwcOHCABAQFEp9MRQgj54YcfyKRJk8jJkydJXV0dWbFiBdm4caPda7/99tvkrrvuIh0d\nHcRgMJBjx46Zt9n+TRkMBhIZGUk++ugj0tnZST755BMSHx9v3u7sPSSEkEmTJpEdO3bYHce2bdvI\nHXfcYfWa8ng8kpeX5/B14/AOnKiPUOyJOiGETJgwgbz22mt2j1m9ejXZtm0bIWSgcNrjgw8+IDff\nfLPD7Twez0r4nn32WfLwww8TQgh54YUXnIp6bm4uWbNmjXn73r17yYQJExzuS1/nySefJKtXryZV\nVVV2x/PNN9+Yf7/++uvJe++9RwghZOPGjeSll14yb2tpaSFSqZQYDAZy6tQpkpCQYN7W29tLxGKx\nQ1G35a9//av5edPjcCbqH330kV1Rf+655wghlKgLBALS0tJCCCFEqVQSHo9HfvzxR/P+6enp5NCh\nQ4QQQu666y7y+eefm7dduHCBZGVl2b32W2+9RZYuXUqKiooGbLP9m/r111/JkiVLrPaZMmUKOX36\nNCGEEnVH76ErampqSEhICNmzZw9RKpXkjjvuIDwej3z33XeMjudwH85+GUU0NzfjypUrSEhIAEBZ\nCvfccw8yMjIQEhKC//73v7h8+bLD47u7u/HYY48hJycHISEheOKJJ5zuDwBTpkwx/3/q1Kk4efIk\n4/HaHltYWOjy9n3jxo2Ij4/HnDlzcM011+D77793eM6YmBjU1dUBAPLy8vDKK69AIpFAIpEgLS0N\nvb29OHfuHE6dOoXJkyebj/Pz88P48eMdjqG2thYPPPAAJk2ahODgYLz++usuXye2xMTEIDw8HAAQ\nFRUFAFZjjIqKQm1trfm5bdiwwfzcFi5ciKqqKjQ1NQ0479q1a5Gbm4ubb74ZEydOdJrhk5eXh6NH\nj5rPK5FIUF5ejiNHjgCgPHh33kMAiI+Px3/+8x+89dZbmDt3LmQyGcRi8YAJZA7vw4n6KOLHH38E\nIQTTpk0DADz99NOIj4/H4cOH0dHRgdtuu83sEwsEAgDWvvE777yDkpISfP3112hvb8frr7/uMjvm\nwoUL5v+fP38e11xzDQDqQ9vY2Gh3P0fHZmdnIyAgwOn1wsPD8corr6Curg7PP/88Vq1axShrYtGi\nRXjuuefQ1tZm/unp6cHMmTMxa9YsXLp0ybyvWq3GlStXHJ5r69at0Ov12L17Nzo6OvDEE09YvU58\nPt/phKNAILC73d1sm0WLFuGDDz4Y8NwiIyMH7Ovv749nn30WFRUV+PDDD/Hkk0+afXLbcS1atAi5\nublW5+3q6sJTTz1l3sed95Bm+fLl2LVrF+RyOWbPno1p06aZv8g4Bg9O1Ecw9Afw/Pnz2LRpE7Zs\n2YJHH30U6enpAIC6ujpIpVKEhITgxx9/xI8//mg+Nj4+HpGRkTh79qz5sbq6OkgkEkRGRuLMmTN4\n++23XY7hww8/REFBAY4ePYqvvvoKN998MwBKEH777TecP38eJSUleOeddwaMff/+/di1axcqKyux\nbds2LF++3OX1du7cCaVSCZPJhICAAAQEBJi/oOy9PvRrtGbNGmzfvh2//vordDodOjo6zJOYM2bM\ngFarxeuvv47m5mZs2rTJqSjX1dUhLCwM4eHhOHTokNUENABMnz7d6nW1Zfr06SgrK7OazLQcK1vW\nrFmDV199FceOHYPRaERzc7PVe23Jrl27UF5ebn79RCIRfH19zeM6d+6ced/rrrsO+fn5+PTTT9HW\n1gaNRoNDhw6Z7xDcfQ8BQKvVoqCgAEajEbt27cLmzZtx++23u/X8OdjBifoIZvny5QgODsYtt9yC\nY8eOYdu2bfjnP/9p3v6Pf/wDX3/9NRITE7Fjxw488MAD5m08Hg+bNm3C2rVrIZFIcPr0aTzxxBNQ\nq9VISkrCU089hQcffNBl9Hj//fdj1apVWL9+PbZu3YolS5YAAFJTU7F582asWLECK1euxH333Wd1\nLh6Ph4cffhj//Oc/MW/ePCxcuNCcdUJvt8fZs2cxe/ZsSCQSbN68Ge+99x6Cg4PtHmOZa56VlYVP\nPvkEX3/9NeLj4zFx4kTs3bsXABVZ5+Xl4fjx45g8eTLEYjGuvfZah8958+bNuHjxIuLj4/Haa6/h\n4Ycftrr2008/jW3btkEikdhdO5CVlYVbbrkF2dnZ5mjaNi/e3nNxxA033IAXX3wRb7/9NiIiIjBn\nzhycPn3a7r5lZWVYsmQJQkJCsG7dOmzduhWpqakAgAceeAA///wzwsLC8M9//hMCgQCHDh1CSUkJ\npk+fjsTERPzjH/8wf/nweDw89NBDDt/DCRMmYMeOHXbHodFosGrVKoSEhODJJ5/E7bffjieeeMLh\nc+TwHjzibvjAMebh8/koLy83iwLH1cXChQuxZs0a3HvvvcM9FA4WOI3U7733XkRFRWHixIkO93n2\n2WeRmpqK6dOnO/UpOTg4Rh9czDf6cCrq99xzD/bs2eNw++nTp3H06FGcPXsWTz/9NOvVjhwjG3cn\n9jjGDtzfwOjDpf1SVVWF5cuXIz8/f8C2f/3rXzAajXj88ccBAOPGjUNFRcXgjJSDg4ODwyUeTZSe\nPn0aWVlZ5t8jIiI4Uefg4OAYRnw8Odhempaj2zXuNo6Dg4PDPdjMbXgUqc+aNcuqAFBzc7PTTAn6\nS4D78fznhRdeGPYxjJUf7rUcg6/nvn0gJtPwj8MLP2zxWNS/+eYbtLa24osvvkBmZqYnp+Pg4ODw\nHK0WWLIEsFNG4WrAqf2ycuVKHD58GC0tLUhISMCWLVug1+sBAOvXr8fMmTMxd+5czJgxA2FhYfjs\ns8+GZNAcHBwcDmlooP6tqgL66upcTQzZ4qOhLNB/NXDo0CHk5uYO9zDGBNxr6V2G/fU8eRK45hpg\nxw7Aph7/aIStdnJlAkYpnAh5D+619C7D/nr2Ve5EVdWwDmO44CJ1Fpzr6sK+tjb8JTFxuIfCweEV\nwsLCuN6hIwSJRAKVSjXgcbba6VFK49XGsY4OvKxQ4LG4OPg5qBzIwTGaaGtrG/XB1ljBW2nfnP3C\nAoVGgy6jEbvsfJtycHBwjAQ4UWeBQqPBsrAwfGHRHIKDg4NjJMGJOgsUWi2eiI/H/rY2tPWldl61\nGAxAV9dwj4KDgzVHjx512s5wtMN56ixQaDSYFBiIJWFh+LalBWtjYoZ7SMODTgfccgsglQI2XYE4\nhpGvvwZqaqgvXPpHr3f++1XIvHnzhqxMeFNTE+69916cOHECqampePfddzFz5sxBvSYXqTOkx2hE\nt9GISKEQd0VG4vOr1YIxGoG77wYqKgCFYrhHw0Gj0wFr1gBKJdDaCvT0ACYTIBYDISFAdDSQnAxk\nZgLTplF53IsWDfeoxzwrV66ESCTCxYsXcdNNN+GGG26wanM4KJAhYggvNSgUdXeT9N9+I4QQojYa\nieToUaLUaIZ5VEOMyUTI+vWELFxIyKVLhIwbN9wj4qApLnbr/RjJn0uVSkVef/11kpWVRZYtW0b2\n7t1r3vbCCy+QO++8kzz00EMkKiqK3HHHHaSoqMi8vaqqiqxbt45ERUWRtWvXklWrVpHnnnuOEELI\nwYMHSXx8vHnfpKQk8t5775HZs2eThIQE8sILLxCdTmfefunSJbJ+/XqSkJBAnnzySaJQKBiNv7Ky\nkvB4PKJUKs2PyWQy8uGHH9rd39F7wfY94iJ1hii0WiTx+cDOnfA1GHCrVIqvrrbaEn/9K3D+PPDD\nD0BKCrXIg0uHGxmUlAAZGcM9Cq+ydu1ayOVyHDhwABs3bsQ999yD8vJy8/Zvv/0WkydPRnFxMUJC\nQvDyyy+bt912220IDQ1FQUEBsrOzsXPnTqcVZN9//3289dZb2L9/Pz755BMcOXIEANDa2orc3Fzc\ncMMNKCgogFQqxcqVK83HPvTQQ3jooYfsnre0tBShoaGIi4szPzZx4sRBt344UWeIQqNBolIJ3H8/\nkJKCu/bvx+d9XdevCl57jRLzX34BgoKoHx8foKNjuEfGAYw5Ue/q6sJvv/2Gv/3tb4iKisK8efNw\nxx134LvvvjPvk5GRgXXr1kEikWDt2rXIy8sDADQ2NqKwsBAvvvgipFIpnnjiCURHRzu93t13342c\nnBykp6fj+uuvx759+wBQXxy33347fv/73yM4OBh//vOfUV5ejsY++/Wdd97BO++8Y/ecra2tSE5O\ntnosNTUVra2t7r4sjOBEnSEKjQbSqjIUPLQC+OUX5J4/j/q6Olx55hlgrPdm/eAD4N13gV9/BcLD\n+x+PiwOupi+2kcwgiTqP550fthw7dgzNzc2IjY2FRCKBRCLBhx9+iGPHjpn3mTx5svn/0dHRaGxs\nhMlkwunTp5Geng5fX1/z9mnTpjm93pQpU6zOVdv3d52Xl4fPP//cPAapVIqenh4cPXrU5XMIDw9H\nlU2pgoqKCkilUpfHegIn6gw501oD4bmD+H/aE8CkSRD8+9+4c9w4fJGdDSxYANx0E5CXN/bsiJ07\ngc2bgX37KBG3JDa2v84Gx/AySKJOiHd+2DJnzhxERESgsbERbW1taGtrQ2dnJ3744QcAzldf5uTk\noKysDBqNxvzY+fPn2Q8CwKJFi3D33Xebx9DW1obu7m7cfvvtLo+VyWRob2+HUqk0P5afnz/o6ZSc\nqDNgb/leHGoowoKqduT51Zsfvys1FV9kZoLI5cCttwKPPQZMngx89BFg8Qc1atm7F3j4YcpySUsb\nuJ0T9ZHDGLNfQkNDMXfuXGzcuBEKhQJGoxEFBQU4e/YsAOedgKKjo5GdnY3NmzejpaUFb775Jhro\ncrwsWbFiBb799lt8//336OnpQU9PD3bt2sUogyUlJQWLFi3CY489BoVCgRdeeAEqlQp33HGHW2Nh\nCifqLvi2+Fus+W4NwoIzMK61HQpfDdo17QCA6YGBEAA4YzAA990HFBQA27YBX31FpY9t2TJ6C/Wf\nOEGlyH33HTBpkv194uI4UR8JqFRUYwgXvvFo4/3330dSUhJuv/12RERE4P7770dnZycAKlK3jdYt\nf9+5cydaWlqQnZ2N/Px83HTTTQgJCbG7ry2W55ZIJNi7dy8OHjwImUyG9PR0fPrpp+btGzZswIYN\nGxyea8eOHdBqtZgyZQp2796N3bt3IyAggP2LwQZWuTIeMISX8hqfXvyURG+LJqdqzxHhgQNEt2AB\nmbZ9GjmlPGXeZ7NcTh4tLR14cGEhIevWERIaSsjatYTk5w/hyD3k0iVCIiMJ2bPH+X5vvknIQw8N\nzZg4HHPiBCEzZrh16Gj8XLLFZDKRqKgocu7cueEeilMcvRds3yMuUnfAu2fexcYDG3Hg7gOIkGQi\nSq+HMCsLsnAZSlpKzPvdFRmJr5qbYbC9HczKAv7v/4DSUiApiWqvtXQpsGfPyPbdy8uBG24A3n4b\nuP565/ty9svIYIxZL97gyJEjaGhoQGtrK1588UWYTCaXk6VjBU7U7fD3Y3/HthPbcPhPh5EZkUnl\nqHd0ANnZkIXLUKoqNe+b7u+PRLEYBxzVpI6IADZtogr2r1oFPPTQyF1aX1tLffFs3gww8f04+2Vk\nwIn6AEpKSjBlyhTIZDLU1dVh7969wz2kIYOr/WIBIQTPHXwO3xV/h6P3HEVcMJXtodBokFRXB0ye\njIxwCX4o+cHquLuiovBFUxOWhoU5PrlYDPzxj0B1NRW9jzRaWylBf+ABYN06ZsfExnIpjSOBkpIx\n0bbNm6xbtw7rmP4djzG4SL0PEzHhsT2P4ZeyX3D4T4fNgg4ACrUaSWVl5kjd0n4BgP+JiMAPLS1Q\nG42uLzQSc7u7uijL5Xe/A/78Z+bHRUcDjY1UjRGO4aO0FJDJhnsUHCMETtQBGE1GrP1xLc7Vn8OB\nPx5ARECE1fbqtjYkqVRARARk4TKUqcpgIv1CFiMWY0ZQEH5mslJspIm6RkNVXJw6FbBYZs0IulhU\nc/PgjI3DNUYjVVwtPX24R8IxQrjqRV1n1GHlNyuh7FTi19W/ItQ3dMA+ivZ2JPn7AwCCxcEIFgej\nttNamFf1WTAuGUmTiwYDsHIl5fu/+657S/84X314USio92+w0+Q4Rg1Xtair9Wrc8uUt0Bl1+Gnl\nTwgQ2f9gKHQ6JEX0R++ycBlKW6198VulUhxg0jxjpETqJhOVW6/RUBO37vZc5Xx1fNvcjP8drs71\n3CQphw1Xrah3abtww+c3QOInwc47dsLXx9fufiZCUOPjg8SkJPNjGeEZA0Q9xMcHS8PC8E1Li/ML\nSyTUQpGeHo+fg0c89RSVvvjNN4BI5P55RtKdxzBxuacHR4ersBkn6hw2XJWirlKrcN1/rsN46Xj8\n59b/QCgQOty3Sa9HoEaDgKws82OycBlKWksG7MuoeQaPN/xCKJcDn38O/Pwz0GcruQ1nv6BBp0O5\nWj08F+dEnTVjvZ3dVSfqDd0NWPDxAsxLnIf3bnoPfJ7zl0ChViOpoQHIzjY/Zi9SB4AbwsNxqbsb\nSq3W+SCG24KprgbGjwdCB84fsIazX9Cg00Gh0UA3HFlAnKizZijb2W3atAkTJ06EUCjEli1bhuSa\no0bUVSrPF2JWd1Rj/kfzsSJrBV5b8prT+g80iro6JLW2WpWcteepA4Avn48/RES4bp4x3KKuVALx\n8d4513DfdYwAGnU6mABUDUcRN07URzTp6el47bXXcNNNNzHSG28wakQ9Nxc4d87943t0PZj/0Xw8\nmPMgNi3YxPgFViiVSLL5NkmRpEDZqYTWMDAiZ2TBDHd0601R5+wXNOh0SPPzG3oLpqsLaGsDEhKG\n9rpDRFtbG9544w1kZ2fjhhtuwK+//mretnnzZqxcuRIPP/wwoqOjsWLFChQXF5u3KxQK3H///YiO\njsZ9992H1atXY9OmTQCAQ4cOIcHiNUtOTsb777+POXPmIDExEZs3b4beIuHh8uXLeOCBB5CYmIin\nnnoK1dXVjJ/D3XffjWXLliEoKMhpZUlvMipEnRCgrMyzXhRHFEeQFJqEx2c/zuo4RVubOZ2RRiQQ\nITEkEZVtlQP2XxAaikadDsXOJkKHWwi9HalfxfYLIQQNOh2uDQkZelEvLaXy0/mj4mPMmtHezm64\nGBV/DQ0NVOZdWZn758iT5+G6lOtYH6fQapFk2e2nD0eTpQIeD3dGRjrPWR9u+6W21nuiHhFBRYs6\nnXfON8roNBoh5PEwOSBg6EV9DFsvY6Gd3XAxKmq/VPYFxJ6I+v7K/Xj3pndZH6fw8UGSndtbR746\nQNWCWVFYiBeTk+1HB8Md3SqVA7sYuYtAAERFUd+8iYmsDt1dthtpYWmQhY/eJe4NOh2iRSKk+flh\nn6OiboNFaemgizpvi3d8YPICO+vBsp0djdFoxMKFC/HMM88AGNx2dhUVFQCodnY///wzdu7cad6u\n1+tx9OhRRt2PhoNRIepyOdVzwuLOixVNPU2Qt8uRE5vD7kCTCYrgYCTZSX/KCM/Ambozdg+bFhgI\nIZ+P011dmBUcPHCHMWC/GI3UglSxGP3Ph6Wov3/2fUyLmYbNuZs9Gstw0qjTIapP1IclUr/xxkG9\nBFsx9hZ0O7uqqiqI7KyjYNrOjhb28+fPY+LEiazHsWjRIoSFheG9995jfawt3ESpBXI5VUCwrMy9\nDJiD8oOYnzTfaT66PdqrqmDi8yFhYb8A1JvndMI0Nhaorx+eQlh6PdDS4nGXnM8+A+6/v+8XN+88\n6rvrcbr2tEfjGG7oSD3Fzw8KjWZgXf3BZAzbL2OhnR0AGAwGaDQaGI1G6PV6aDQamAb5cz9qRH3G\nDOr/KhX74/PkeVicspj1cYqSEiR1d9v9hs2Q2s9Vp7krKgpfNTXZ/5D7+gJBQZS4DjX19ZRd4m5Z\ngD7y86nufQDcTmus76rHmbozQ5YVMBjQou7L5yNaJEL1UKU1EjIk9stwMhba2d13333w9/fHl19+\niZdeegn+/v747LPP2L8YbPCsARNzPLnUggWE5OVRHbtOnmR/fMobKSS/kX07uR+2byc37thhd5vJ\nZCIBLwWQNnWbw+Nnnj1L9rS22t84cSIhFy6wHpPHHD9OyOzZHp/m5psJCQwkxGQihLz0EiF/+Qur\n440mIxG+KCTSV6VE3ib3eDzDxbMVFWRrVRUhhJBFFy6QvY7eb29TU0NIVJTHpxlCCRg2uHZ2Nhw5\ncgSZmZlIT0/Hv/71rwHb1Wo1/vjHP2Lq1KlYsGABfvjhBztn8Qy5HEhJobK32PrqlW2V6NX3Ijsi\n2/XONihUKiT5+dndxuPxnE6WAn3NMxxZMMOVAeOldMbSUqp8TUMD3LJfWnpbECwOxpz4OThTa39u\nYjRAe+oAhtZXH8PWizfg2tk54bHHHsP27duRl5eHd955By02lsEnn3yCgIAAXLhwAZ9++imefPJJ\nr95O6/WUcCQkAGlp7DNg9lfux+LUxW5NUig0GiQ56WbkyoL5n8hI/Njaar95xigWdb2eqvg6fXpf\nEyc37Jf6rnrEBMUgJzbH4YTzaIC2XwBO1EcSV3M7O6ei3tFXeW7+/PlISkrC0qVLcerUKat9QkJC\n0NXVBb1eD5VKBX9/f6/O8lZXAzExgFDoXqS+X77fLT8dJpPDdEYaZ5OlABAtEiEnKAg/2WueMVzL\n672Qoy6XU6eYOLFP1N3I5qnvrkd0YDRmxs3kRN0dOFF3yrp168yR+vbt2zF16tThHtKQ4VTUz5w5\nY1XNLCsrC7/99pvVPitXroTRaIRUKsXcuXPx+eefe3WAtPUCsI/UTcSE/fL9uC6V/aIjVFVBEROD\nJInE4S6OCntZ4rB5xnBG6h7mqJeUUN3TZDLq/+7YLw3dDYgJjMGM2Bk4X3/eqpPUaIITdY6Rhsd5\n6m+//TZ8fHxQX19vnmVWKBTg21m6vHnzZvP/c3NzkZub6/L8lZVAair1f7aRen5jPkJ9Q5EYwi5/\nGgBQWAhFdDSSfO3XWQecL0CiuVUqxaNlZVDp9QgTWqRUxsUBgzD/4BIv2C+0nshkwIkToKo96nRA\ndzcQGMjoHLT9Eu4fDqm/FCUtJciMyGQ9FhMh4A9R/q+9azfr9Yjse19T/fwg12hgJASCwR4TJ+pj\nlkOHDuHQoUNuH+9U1HNycsyrtwCgsLAQy5Yts9rnyJEjWLt2Lfz9/TFr1izExsaitLTUbr1iS1Fn\nimWkHh5OpXbbFE10SF5lnntROgB1URE6ZswwR2H2oEXdREwOS/gG+/jg+rAwfNPcjHUWq+OGbVWp\nF0S9tBSYNo0S9dJS9NeIr69n3CuzvrseqRLq2zonNgena0+7JeqZp0/j8NSpTt+nwUJlMCBIIICo\nL4AJEAgQ5uODWq0WiU6CAY9Rq6nXmv5gcIwpbANetiV7ndovdF7nkSNHUFVVhX379mHWrFlW+yxe\nvBg//fQBnJU/AAAgAElEQVQTTCYTKisroVKpvFqA3lLUeTx20brbfjqA6upqxJtMTqNAul9pXZdz\nP/muqCh8bmvBDMeqUqOREgPLLxc3oO2XtDSgqopaWcr2+dR31yMmMAYA3J4s1ZlMKOtVo6R9GEre\nwtp6oRkSC6aigvpQ+IyKBeEcQ4zL7Jc33ngD69evx3XXXYcHH3wQUqkU27dvx/bt2wEAd955JwQC\nAWbMmIENGzbgzTff9OoALUUdYO6r64w6HKs+hoXJC926rqK1FUliscv9ZOEylLQ4niwFgBvCwpDf\n3Y0ay4UpERFAZyfV2m6oaGoCwsI8a1+H/jt/X19qEruqCqzvPGj7BQBy4twTdXm3FoQHnKkawtfQ\ngmETdc564XCCy6/6BQsWWNUpBoD169eb/x8SEuJ1IbfEVtTT05mJ+inlKaSHpyPcn4FPY4vRSFVn\ndDJJSkNbMItTHd8RiOnmGc3NeJrOpuHzqaX6dXVDdxvtBeulo4Oyzulgn7Zg0lhm81hG6tNipiG/\nMR86ow4iAfMvnFMVlJiXqa5CUZeN3iJow83Ro0exbt26Iet+NNSM6DIB3d3Uj2WZEqb2iyfWCyor\noUhJQVJQkMtdM8IzUKpyPlkKOGieMdRpjV7y02UyygoDLHx1FvYLIcQqUg8UBSJVkor8xnxWYzmn\npMRc3jU8ZX8tFx7RcJH6yGeo2tk1Nzdj5cqViIuLQ1xcHNavX4/8fHZ/4+4wokWdrs5oaWsztV88\nmSRFYSEU48Yh0Uv2CwDMDw1Fs16PIsvmGUOd1uglUbfUE7Oos7BfOrWdEPAFCBT1Z8q4k69e3KwF\n2oWo012FkTon6iOe7u5uzJo1C+fPn0dJSQni4uKwbt26Qb/uiBd1W2eCSaTepe3CxYaLmJs4170L\nFxZSOeoMMhiY5KoDDppnDLWoe2Hhke2dv5WoM4zULa0XGncmS6t6tIhoCUYLGZ5I3Z6oj/PzQ4Va\nPXhFygi5akR9tLezS0lJweOPP46oqCgEBgZi48aNyM/PR0mJ6yDQE0adqFumNTriiOIIcuJy4C/0\nd7yTMwoLqTrqDEQ9RZKCms4au/1KbbkrMhJfNDb2f+CHw37xwsIjh5E6U1G3sF5ocuJyWNeAaSRa\nTPcPQqd45ETqwT4+CBQIUD9YnaCam6lbV6l0cM4/ghhr7ewuXrwIAFaNPwaDUSfqTNIaPfLTARiK\ni1Hv44MEBvaLs36ltkwNDISYz8dvfeVDx4L9kphI6UxPSJ+oM4hQ7UXqk6ImoVxVjh6dk96uFhiN\nQJevFreOD4YmYHhE3Z6nDgyyBUN/qw7TgquhYqy1s+vo6MDdd9+NrVu3IojBXJ0njGhRt1xNaokr\nX90jP91gQF1rKyKEQvOiElcwtWB4PB6Wh4fjQHs79cAoE3WTiXrdLdcXCQTUe1ReH0C1QWLQ0s1e\npC4SiDAhcgLO159nNBa5HOBFabBUFgDCJ+jQ2SmaNsjYi9SBIRL1oYLH884PSyzb2UkkEkgkEnz4\n4Yc4duyYeZ/BbGdX2/e5zMvLw+eff24eg1QqRU9PD44ePcr4ufT29uLmm2/G/Pnz8cQTTzA+zl1G\n9OoFe5E64DxSb+xuRHVHNWbEznDvouXlUGRlOSy5aw9Xhb0smRAQgL10pw837Re9Uc+6ixMIob5A\nPLBfamuB4GDqxxLagplMPx8nlS0B+5E60J+vPi9pnsuxXCoygQQakBAggqBdjEtKLeanumm3uYHe\nZEKbwQCpcOD7MKZEfZgamIyVdnZarRa33norkpKS8P7777t1DraM2EidEMei7ixSPyA/gAXJC+DD\nd/P7qrAQikmTGPnpNEwjdQDICghAYW8v9QsdqbP44BBCMPG9iezbwLW2Av7+1I+b0OmMtmRksEtr\ndCjqLCZLT1VoEaQVQ8Djwb9XhPz6oZ0sbdbrIRUK7dZ4GVOiPkyMhXZ2er0et99+O/z9/fHJJ5+4\ndX13GLGi3tJCLXy06EBlxlmk7qmfjsJCKNLTWYk6m0g9098fpb29MBJCFb8SCgHajmGAokOBktYS\nfHrpU8bHAPBqIS9b2KY12rNfgD5RZzhZeqleiygeNecRahDjSsvQ+uqNDqwXgBN1bzHa29mdOHEC\nu3btwr59+xAaGoqgoCAEBQXh+PHj7r0gTPGsARNz2F7q1ClCpk2zv62piRCJZODjJpOJJL2eRAqb\nCt0YYR8rVpB1P/1E3lUqGR+i7FCSyNciGe+ffPIkKe3poX4ZP56QfOat9j679BmZvn06iXg1gugM\nOsbHkZ9+IuTGG5nvb4fHHiPkH/8Y+PjRo30d8v7yF0K2bnV5nvFvjycFjQUDHjcYDSTo5SDS2uu6\nJVzKugZy3WHqfZ7+/8rJTZ8qXB7jTXa3tJDrL12yu02l05GgI0eIyWTy7kV1OkLEYkI0Gq+dcggl\nYNjg2tmNEBxNkgJUNpfJNLAJdWVbJXRGHTKl7Kv9mSkshCI0lFWkHhsUix5dD9o1zCLubFsLhoWv\nfqzmGFZPWo1xYeOwr3If4+O8Fanbs1/Yriqt76IaZNgi4AswLWYaztaddXo8IUCtTossKRWpx/uK\nUKsZWvvF0SQpAEiEQgh5PDRb5Dp7Bbmceo0ZZGVd7XDt7EYgjvx0gJpMt+er75e737oOANWnraKC\n6njEQtSZ9Cu1JNvfv39lKcsMmOPVx3FtwrVYNXEVPs9n0ZDEw0lSwPGdf0REX4phkGv7Ra1XQ21Q\nI8zP/mRqTlyOy/mCmhrAJ1aDtGBK3FJDxGgiQ2u/OBN1YJAsGK7mC2O4dnYjEGeiDtgv7JVXmeeZ\nn15WBhIfj2qdjpWoA8waZtBkBQSg0A1Rb9e0Q94ux5ToKViRvQK7SnehW+d6wgaAx5G6Vuu49hiP\nR2lNlc51Nk9DdwOiA6MdfvEymSwtKgL8k7SI74tYx0tF6PAZOZE6MIiifpX46Z7CtbMbgbgS9bQ0\n68lSEzHhgPyAx5OkzTNmwI/PR6BAwOpQV02oLckOCEARbb+wSGs8WXMSObE5EAqEiAyIxDUJ1+CH\nKwy7J3ko6uXlVB0eRyW8ZTKgpMv1c3GU+ULDZLK0uBjgRWqR0PfFOzlODPUQL0Bq1OsR1ZfO2NQ0\nMMDgRJ1juBi1om4bqV9quIRw/3AkhDhuFO2SwkIopk5lHaUDgCyMXQZMCZ0BwyJSP15zHNcmXmv+\nffWk1fgs/zNmA/RQ1F3piUwGXGqKoRTO6HghkKPMF5rk0GTojDrUdjp+TYqKAHVQf6Q+IVoEk0SH\n3t6hy6m2jNQ/+gj461+tt3OizjFcjEhRNxop3zQpyfE+tpG6x6mMgFvpjDRsIvUAgQBRIhEq1WpW\non6s+hjmJvQXKft9xu9xsuYkmnrsNLa2hBDqBfVA1B3lqNPIZEBxuRCQSChhd4CrSJ3H47lsmlFY\nZoLWx2DuDRogFICv46Og2uD6iXgJS1GvrAQKC623c6LOMVyMSFFXKqnJN2faahupe1QagKagAIrY\nWLdEPT0s3dyvlAlmC4ah/aI36nGu/hxmx882PxYgCsDNspvxVcFXzg/u7KSactguBWUBk0idSWEv\nV6IOOPfVCQEKm7SIEYqtWg369YpxuW7oLBhLUZfLqedu2cTK66Le3g7Qfy8cHE4YkaLuynoBrNMa\ntQYtjtccR25yrvsX1WoBuRyKkBBGbexsCfENQZAoyGW/Uposf39qsjQ6mlppZXAeZV5ouIBUSSpC\nfK1XYzHKghmEQl62yGTUnRNxkdboyn4B+mqrO/DVGxsBRGiQ5G/9HgXrRChuHprJUo3JBLXRiNC+\nCQa5nFpDVmpxoyYVCmEkBCpvpTXSmS9jvJAXh+eMWlG3TGv8TfkbxkvHO0yTY0RpKZCcDIVe71ak\nDrCfLC3s6aFmHqVSwMUy5mPVx+zWh18ybgnk7XKUq5yUrRzEHHWawEDKeekJdp7WyDRSP1t31u5S\n8OJiIHqidkAFzQi+GJUdQxOp09UZeTwejEaguhpYvNjaguHxeN6N1jnrxWscPXoU48ePH+5hDBqj\nVtSB/nIB3vLTkZ1N9SZ1U9SZdkEC7GTAuPDVj9dQ+em2+PB9sCJ7Bb7I/8LxwR7mqLe2UjcSkZHO\n95PJgCYfF/YLg0g9KjAKgaJAu19URUVASHp/5gtNnFiMGvXQiLql9VJbS9X4nzEDKCiw3m+oRf3j\nix/DYBq6eYXRylC1swOAhQsXIjIyEuHh4Vi2bBm++eabQb/miBR1Z6tJLaEjda/46bSoazTuR+oM\n+5UCwHjbDBgnQkgIMS86sgdtwdiLbAF4HKnT1ourO3+ZDFAYXdgvDCJ1AA4nS4uLAVFcf+YLTUqQ\nCE3GobFfbP301FRgwoRBFnUX/pfWoMW9P9zLus8rx+Dy1ltvoba2Fo2NjXjkkUdw3333obm5eVCv\nOSJFnU2kXlzZicuNlx0KHmMKC9E5YQJ0JhPCHSVju4BNpB7YlwEj12hcZsBUtFVAKBAiMSTR7vZZ\ncbNgNBlxrv6c/RPYiHqNRoOMU6dgYlgdkulCRpkMKOt2fNdhMBmgUqsQGeAi5IfjydKiIsAQNtB+\nyQgXo81n6CN1+m910EXdRaRe2VYJAsK6JeBIZrS3swOAiRMnQigUwmQyQSAQQCAQwI9FWW93GNWi\nnpYGXFAdwaz4WfATevhCFRZCIZMhydfX7TIDbFaVAhaTpS7sFzpKd9aOa9UkJxOmNqJ+qqsLpWo1\nLjIoHwowt3NlMuByq2P7pbG7EVJ/KQR81wu7HC1CKiqiOh7ZRuqTYkXo9dMNSflvy45H9N/quHHU\n07bsK+41UTeZKJ/RsjuJDWUqKhWMdUnmEcxYaWd38803IygoCP/zP/+DAwcOIDAw0On+njLiRF2t\npjJamGRupacD1T4elgYAAI0GUCigiI5223oBgFRJKpSdSugY2gDmyVIX9suxGvuTpJasmrgKXxZ8\nad9TtRH1c11dEPP52GNbEc0BrnLUaWQy4IzSsagztV4AYHrsdFxsuGj1fFQqKquv0TQwUk8PE4OE\na9lUMXYb2xz1hGQdtKYeKle/P1j0nqhXV1ONR5yIQbmqHNckXDNmIvWx1M7u559/RlNTE7Zu3YrF\nixej1VmDZS8w4kS9qgpISKDapLlCKgX08fuRE+6hqJeUAKmpUBiNHom6SCBCQkgCKlQVjPY3T5a6\nsF+c+ek0snAZ4oPjcUB+YOBGO6J+X0wMY1FnGqmnpACX6yNAOjqsk7b7YDJJShPqG4q44DgUNReZ\nHysuBmSTjOg2GRFh03EoSiQCgvWQVw9+qG5rv+SLt+PxvY9jwgTrDJhokQg9RiM6XKSruoTBG1Cm\nKsNtmbex6vPKBN6hQ175YctYamcHACEhIXjkkUeQkJCA3bt3szqWLSOunR098cSExp4G8EKU8O+Y\n7tlFCwqACROoSVIPy5rSXZAyI1yX/83y98cbSqVTUW/tbYWyU4mJUa5bcdETpkvHLe1/sKeHuv3p\nazFHCMG5ri68L5Nh8tmz6DAYEOJkDsFoBCoqnN75mxGJgPhEPgw90RDW11PFYixgE6kD/fnqk6Im\nAaBEPXGqFm196YSW+PB4EGmEyFfqMG3y4JamtRX1JEEBqpqLsNzGV6fTGivUakzzpNkwE1FvLcMt\nGbcgOyIbFxouuLyzYwrJzfXKedgyVtrZ2aJWqxETw/wz4A4jLlJn6qcDVOu6aO0CVFV6+N3khcwX\nGja+emZAAJUBExPj0LI4UXMCs+NnM2rPd+eEO/FjyY/o1ff2P1hbS0XpfR8ChVYLMZ+PVD8/XBMc\njAMuGkVXV1Ore5l2wZPJ+krw2nk+bCJ1YOBkaVERIM0amM5IE6QTo6hp8CdLaU9do6HWjdVqSlDa\nWjp4k6UMRL1cVY60sDRGpYtHA2OhnV1JSQl++eUXqNVqNDQ04NVXX4VWq8V113mYqeeCUS3qeZV5\nmOB/ncN+pYzxQo46DZvWdoECASJFIsh9fala7nb+UBzlp9sjOjAaObE5+Knkp/4H6TuBPs51dZmj\nxmVhYS4tGLZrXjIygBaR/TmC+u56RAc49zYtyYm1FqiiIiAgZaCfTiMlIpS3D25aIyHEHKkrFJRV\nWNJaApVahfh01bCIusagQUN3A5JCkzAzduaY8dVHezs7Qgi2bNlinhNoamrC999/796LwQaP+i+x\ngOml/vAHQr76yvV+JpOJJPwzgbz8f0Vk1SoPBzduHCFFRST6+HFS42GrsAOVB8i8D+cx3v/GS5fI\n983NhKSlEXLlyoDt1/77WrKvYh/j83184WOy/Ivl/Q98+imxfIE2VlSQ5ysrCSGEFHV3k8QTJ5y2\nXXvzTUIeeojx5cl77xGyP+thQt54Y8C23+34Hfmm6BvG5+rV9RK/rX5ErVcTQghJTCTkyfNV5C8V\nFXb3X/RTCcnZyrwNoTt06vUk4MgRQgghu3cTknt9B/F/yZ9MfX8qOVH9GwkMJKStrX///6utJfcU\nF3t20fh4QvreM3sUNhUS2b9k5v+nvpnK+NRDKAHDBtfObphhuvCoXFUOIzFiftZ4zyL13l6gthaa\n1FSo9HrEOGl8wAQ2kTrQN1lKpzXaRLdagxYXGy5iVtwsxue7NfNWHFYcRmtv3wy77SRpdzem90Xq\n4/39QQBc6e21cyYKts12ZDKgvNeJ/cLCU/cT+iFDmoGLDRfR1QU0NwPdfo4j9aRAERoMg2u/2Prp\noeNKkR6WjvHS8ShTlSA723qy1ONIvaeH8ngS7a9RACg/PS0sDQA1p9Pc09z//l+lcO3sRhBM7Re6\nNEB6Os+qBC9rrlwB0tJQYzQiTiyGwMOCSWz7lWbR/UrtTJaeqz+HDGkGgsTMJ9mCxcFYlrYMO4t2\nUg9YiDrpmySlRZ3H42FZWBj2OvHV2dovMhmQ32bffmnobmDlqQP9+epXrlDjUOo0A3LUaTLCxGjj\nD6790qjXW4m6OLYEGdIM81xKdra1r+6xqJeWUgsynKSDlavKkR5GzWQL+AJMj53uss/rWIdrZzdC\naGuj1lmEMajLtV++H9elXoeICKouCcPsvIF40U8H+vuVlrUyu33Iphcg2RH1Y9XH3Fopu3ri6v6F\nSBaiXqPVQsDjIdbibsSVr840R50mNhaQa2JhqLZ+LoQQNPY02m047Qx6srS4GMjMBJRax5F6VqQY\nPX5aZz06PKZBpzN3PJLLAX1ICTLCM8xZT7ZpjXFiMdoMBvS4OyhX5TFBpTPSog5QWUNjYbLUE7h2\ndiMEOkp3FSxbtq6jqzW6Ha17MfOFho0FY86AsbOq9HjNcbdS065Pux5XWq5A0a6wEvVzXV2YHhho\nNUm0WCLB8Y4OqO2IDoM7/wHw+YAoORYGhXWk3qpuRYAwAL4+7F5jugZMURGQlUV9MTnKfkkKFEEQ\npUPfupBBwdZ+6RKVQhYuM0fqthkwfB4Pqb6+qHA3WmeYo07bLwCzPq8cY5cRKequuNhwEZEBkYgL\nprI67DWhZkyfqFd7IUedhk0JXnMGTGKilWVBXBTxcoZIIMLtWbdTlRstRd3CT6cJ8fHB1MBAHO7o\nGHCe8nJq+TvLdq0IHh8LQZO1qLNNZ6TJjshGTUcNLpd0IiXTCLWT2jxxYmpVKYvSHKyxXU1ar6ci\n9fTwdJSpypCVbfJuBgzDdMb08IGROhmKmgkcI44RJepMJ0nzKq1LA9AleN3Cy/YLwK5fKdBnwURG\nWkXqJa0lCBIHmb+42LJq4ip8df5TkPZ2c81cSz/dkusdWDBsJ0lp4rNDQAxGoKvL/BjbhUc0QoEQ\nk6Mn41LzOUhkVM0XR+loYT4+ICITKmoGz3+hRb29HdDpTajsoCL1YHEwgsXBMAXUwWi07ug3mKKu\nMWjQ2N1oVewtITgBBATKTqV71+QY1YwoUWczSWpZapcuwcua7m6gvh4YN87r9gurwl4BASgKCrIS\ndXejdJprEq5BYEsX9BHhAJ8/YJLUkmVhYdjrQNTd6csgy+BB5WudAeNupA4A06Jy0OhzGvxox346\nQM1nBGpFKGgYvMlSeuGRXA4kZtchSBRk7kYlC5ehTDXQgnFb1AlxOalRoapAcmiy1eI0Ho83IMef\n4+rBpagfOXIEmZmZSE9Px7/+9S+7+5w5cwY5OTnIzMxErgfLipmIutagxYmaE1at69yO1IuLKdXy\n8YFCo0Gil+wXeqKU6e1vdkAACn18qO5HJqrH6bEa9yZJafg8PtaEL0RtCBXVKvtqscTZSdmcGhiI\nVr0eVRqN1eMM5ujsIpMBtcRG1N2M1AEgFjnwTzuDBuPA6oy2hBMxytsHL62RjtTlckCSTmW+0NCl\nl72WAVNfTzXqlUgc7mLrp9PMjGO2CEkikZgX23A/w/sjcfI+s8GlqD/22GPYvn078vLy8M4776Cl\npcVqOyEE9957L1555RUUFxfjv//9r9uDYSLqJ5UnkSnNRKhvqPkxtyP1PuvFSAhqnUzAsSXENwSB\nokDUdjnvZkST7e+PIo0GCAmhkrFBReqe1u+40W8y8oVtMJqMON/np9uzLvg8Hq63E627a7/IZECF\nJg6k1jui7tuaA2PUGdRoNE4jdQCIFoqg6B68SJ0W9cpKwDeO8tNpZGEylHozUnfDT6dhGqmrVCoQ\nQtj/HDkCMnu2+ffXa2rwUGmp+fdrz5/HwbY2EELw7LMEDzzgxjUc/WzYAPLWWx6fp6vLBMHuA1At\nuZ7Z/gYD/A4fhunmm0G+/db8+PMHn8fzB5/3eDwqt1P4rHEq6h19k2fz589HUlISli5dilOnTlnt\nc/bsWUyaNMlcz0Aqlbo1EJMJUCgG1IAagL0uR26nNfaJer1OhzChEL5877lRbCZLzRkw8fFAbS2a\neprQ3NuM7Mhsj8aQ0AW0SwNxRHHEofVCY+urE+K+/RIWBjQLY9Fd0v+l5on90laRBqOwA6U97S4j\n9aQAMer1gxOpE0LQZGG/GEOtRZ1+z23TGhN8fdGk19vNMHIKw8wXy3RGmpy4HJyrPwcTMbG7JlNk\nMqtIqrS3FzKL5g8pvr6Qq9Vobwe2bwf+/GcvXruujlltbhd0CXUQGATwz2fW2i5QIICYz0dbn2VL\nU9VehaSQJI/H4y2cqtiZM2esGrRmZWXht99+s9pn79694PF4mDdvHpYvX+52kn99PRWoBgQ4389e\nP1K30xoHIZ2Rhm0XpAiRCPLMTKCuDserj2N2/GzweR5+ySiViM+ajc/zPzenMzpiqUSCg+3t0PfZ\nP01NgFDIbM2APYxRsei44p1IvbiIj/SAGbjS2eLybipNIkIrf3BEvc1ggH/fB1suB7rF1CQpje0C\nJNp98+HxkCQWU12u2MCwOqM9+0XqL0W4XziruR1WREZS9Yr6AoFStRoZFlXfUnx9Iddo8M47wE03\nMa/nxIi6Oo967tKUq9UI0wRA0FxPRYUMiBeJoOzpsRJ1RbsCyaHJHo/HW3hcelej0eDixYvIy8tD\nb28vlixZgoKCArstmzZv3mz+f25urpX/zsR66dB0IL8xH9cmDvSa6bTGmTNZDN5S1L3kp9PQt+JM\nyfL3R5FMhrTaWhwXlWFughdKpyqVmLz8RtxWvBHi8HvwnhMvJVIkQpqfH052dmJ+aKjHzeuFSbHQ\nVfUHAJ5E6kVFwOxbc/Cz1rX9Mj5cDG1gNzQayo72JrY56t0ma089VZKKmo4aBIXqEBAgglJJFfwC\ngHR/f5Sr1chyFbVYUlICLFzodBfL1aS20KmN46Xj7W73CB6v/0M3axZK7ETq+1rasf8t4OBBL1/b\nS5F6uVqNcX7+aBdHQVpTw+ibJx6AMjkZkyzeR0WHwquR+qFDh3DIjRr0NE5FPScnB88884z598LC\nQixbtsxqnzlz5kCr1Zo7i8yYMQNHjhzB9ddfP+B8lqJuCxNRP6w4jNnxs+0uYGEdqdPFRFJSoFAq\nvR6pZ0gzcEhxiPH+2QEBKExMxO+qqnDc5zheWfyK54NQKhEum4wswTwUGJxnjgD9q0vnh4a6PUlK\nE5gRB/7PlP1CCHE7UtfrqVTX57Nn4tNWH5f2S5yvGKIYLZRK6m/Cm9CibjIB8hoNoKlDSmj/H61I\nIEJ8cDzkbXJMmJCBgoJ+UXfLV3fxzarWq9Hc2+ywdy29COnuyXezuy5TZDKgtBQ9M2agRa9HosVn\nKMXPD6cUDZg7l1o05jWMRqCxEXDRyYgJ5Wo1psf4odyYAmlVFTNR7+2F0uI9MZgMqO2sRUJIgpOj\n2GEb8G7ZsoXV8U7v7+lSlUeOHEFVVRX27duHWbOsi0vNnj0bhw8fRm9vL1QqFS5cuIBrr2WftcFE\n1G1TGS1hvQCpqAgYPx4QCLyao07Dxn4B+gp7SaUwKGtwufEyZsaxueVwQN/Co2npd8JPU+Mwv5vG\nsmSAu5OkNBGTYuHXTtkvXbou8MBjVcOGpqKCutOekjgdBsKDxMVKqFiRCIjQoabGrWE7hRb1hgbA\nP74cyaHJEAqsOzB5rQaMVkuluDpZuFHRRqUzOur5OujlAvo+dGVqNcb5+VnVTYrl+0Kh02DjRi9f\ns7mZygbysPAeQIn6rHg/VJFktF2sYnRMvEoFpcXEX11XHSIDIiESeD4eb+HStH3jjTewfv16XHfd\ndXjwwQchlUqxfft2bN++HQAQHh6Oe+65BzNmzMCtt96KF1980a3GqkxE3XbRkSWsI/U+6wXAoHjq\nqZJU1HTWMO5XmuXvj8KAAHRWFmNC5AT4Cxl2pXCEwUAZ49HR8A+bgraWUy6LjM0KCkKlRoNGnc5j\n+yV+ZixC1fUAIajvqmdd84WGrvliFIZBoG9Fdafz5aKxYjH0wVooBqGtnWU6Y7jM2k+ncVQugLWo\nV1QASUnUxIYDHPnpNNNipqGgqYDx3yBr+iL10t5eZNjYrYe+FsMUrMOEqV6eqPWS9QIAZWo10v38\nYExKQcNJOaNj4uvrobS4S1C0K5AUOnImSQEGor5gwQIUFxejvLwcjz76KABg/fr1WL9+vXmfDRs2\noHZGtfYAACAASURBVKioCIcPH8add97p1kBcrSat76pHfVc9psXYL5/JOlK3FXUve+oigQiJIYmo\nbKtktH+mvz+uCATQKhUe5aebaWigmrgKhSjUGDA1MADfFH3j9BAhn4/FoaH4VaXy2H4ZN8EPPcQf\nxmYVZb144KdnZQG1Oh0kPAPO1DrPvQ4UCOBDeCir87AvqB0sFx75J1j76TR03R+PRZ1pOqMDPx0A\nAkQBSJWk4nLjZebXZUN6OlBaSvnpFpOkBgPw6t94iPERQ8F2ctgVXhJ1QgjK1Wqk+fkhaEIyegqr\nGB0XL5dDGdqfTj3SMl+AEbSi1FWkvl++H7nJuQ5vNSMirCbjXVNQAGRngxAyKJE6wM6CCfLxQYRQ\niCaeyDv9JS1qvpzv6sKfxl2Lz/I/c3nYsrAw7G5RoarKaoKfNX5+VFpj/dla1nXULbEs5BUvFjNb\nUGMSo1Tl/ejUMlIn4dbpjDR0pJ6VRVV1prMYk8Ri1Ol00JkYRq4epDNaQvd5HRT6IqnS3l6rzJed\nO4GYGCBT4sc+48cVXhL1Zr0eQh4PEqEQsdemQKhkGKkXFUFpcVei6BhZmS/ACBF1nY6a+0hwMtfg\nzE8H+ifjGVswhYXAhAloNRgg4vMR7KT5srvQ5ViZkh0YiPLoeFwb4WEjbcDcm7Req4XWZMIfM67H\npYZLLuuBUIuQ2hAbT+DpzUtXUCzqz9V5FKnT9kuNVovxQeGMRD3aR4yqbu+nNVqKeo+vfVGn3/Og\nICrrT96nFUI+H/Fi8YBVuw5xozqjPXJic3C6bpB8dYkE8PNDSWenOfPFZAJefhnYuLE/rdGreDHz\nJa1vzBnXJyO8qwp6vYuDCEH8xYtQWswdeDvzxRuMCFGvrqbeJ0e6SgjB/sr9WJSyyOl5GPvq7e3U\nT1LSoEXpAPsuSFF8Dc5kpCKq0wsFqfoidboyo5/QD3/I/AN25O9weliiry8CDUJEz+tyuh8T9JFx\naC+qczvzxWSitI2uoz4jPBHn6lwvqEnwE6FOO3iRemUl0Ezse+pxwXFo17SjS9vlmQXDYKba0WpS\nSwY1UgdA0tNRqtGYI/Vdu6hpgGXL+hcgeZXaWq+IeplajfS+MQeNj0MkmnD5jItAQKVCcG8vCI+H\nzr689qr2Ki5St4cr66WirQJGYrQbGVnC2FcvKqKUgs8fFD+dhm1hL1N3Ja6kpw+oq+4WtKhbrCRd\nNXFVf/MMJ6Q0hwE5jrshMcUnIRaaylqq45Eboq5QUIufgoKoSD0zKBxSf6lLS2tcqBgt0JoX/3iL\nRr0eUUIhyutaAJ4RkQGRA/bh8/jmMrweZcC4iNR79b1o6W1BQrDzVLqJkRMhb5ejS+v5l7Q9midN\ngsBoRHjfhO7OncC6ddSd82iJ1OHjg47AOBTtdZEyVVEB3rhxiBeLzbWURuVE6VDgapL0gPwAFqUs\ncpmSx9h+GeTMFxq29ktT82mUJ6babQXHGjuiviB5AVrVrShsKnR6aGBRGJqSPa9DEZAeC9TWub3w\niPbTASpSjxeLGRWqSgkWgYTpYKdEvNsYCUGrXo9QngiNxhKMj8hw+PfocQZMSwtlxkcO/NKgqVBV\nICU0xeEcE41QIMSkqEk4X3/e9XXdoCQrC7LOTgDUndWvvwL0EpUUv0Hy1L20mjTNwhvXxyWj9pgL\nX72vwQAt6iZiQk1njcN1AsPFiBB1V5H6AfkBLEp2br0ALAp7WYr6IOSo08QGxaJb140ODTN1KVbs\nhTwiCkZvR+p9KaZ8Hh8rJ6x0Ga13HQ9FvV832lyajM4JmxgLscp9+8VS1OliXky6+sSJxfCN13o1\nV71Zr0eYjw/qangISSnFeDuZLzQeizodpTsJYspV5S79dJrB7IRUmpyMjPp6AMDly9RdFR2gjZpI\nHYBfVgo6L1c5P6iiAkhLM4t6Y3cjgsXBnqcfe5kRL+qEEBysOujSTwdY2C9DFKnT/UqZROt1XXXo\nUjdCajShykkjaMYolWiIjobGZEKyxfNbNXEVvsj/wqkvXVbIx6yAEOxvZ9Y82xERk+MQrql1O1Kn\nJ0k7DQYYAYT6+CAnznX1wTixGPxIFh2QGPg0lpOkAUkldv10GrpJyvjxlA7o+ux91qLuhDJVmUs/\nnWYwFyGVSKWQ9d0e793bH6UDQKRQCLXRiC6GdVVcQqe3ObmDYQIhxJyjThMyORnhXXKr5iYDqKiw\nitRH4iQpMApEvai5CIGiQEa+FeO0xkHOUbeE6WTp8erjuCbhGmQTgkIPI2SYTEBdHc4FBWGaTbnd\nSVGTECgKxImaE3YP7eykKij8LsZ5Q2omCBJikSCoQ7euB+F+4ayPpyN12nrh8XiYFjMN+Y35ThfU\nxIpEMIQyXFV69Ci1srjPQnAEnaNeWQlAaj/zhYb+Ivf1pdYP0YFGiq8vqrVaGFx9iXgpnZFmUCN1\nPz9kXL4MGI0DRJ3H4yHZm9F6QwMl6Gz7K9rQajCAB6pTFg0/NQVTJVWwKUJrjY39MhL9dGCEiHpl\npWNRPyA/gIXJzosa0TBKa1SpKNXq66Y8mJE6wHyy9HjNccxNmIssX18UeVoCuLkZCA7Gea12QLld\nHo/ndMK0tJR6DW8Ip+qre9TnMioKYcZmhCHS5XyILYRYpzPSdWsCRYFIlaQivzHf4bExIhE0vjpU\nuVpVajIBTz5Jdct+8UWnu1pG6mp/+wuPaOgSvIQQKwtGzOcjWiRCtSuRY7Dyy9VqUkvSw9PRpm5D\nc08zo/3ZUKLTQdbdjZ4rNThzZmD9Ma+KupetF6u/yeRkpPvIcfKkkwNtIvWRmPkCjABR7+oC1Gog\nKsr+9gNVBxhZLzQu0xoLC6nwj8dDt5FqZBzhZCm2pzCdLD1ecxzXJl6L7NBQFLpRZsGKvhz1c93d\ndsvtrshege+vfG/3UDpIlPn5wYfHQ1Fvr/vjEArR5R+C+A72Nfbr6qgqi+Hh/QuPaHLinEeeQj4f\nAcQH5S0u7ni+/JKKBA4eBD75hLo1cAAt6hVyI9p5lU4FNcwvDEK+EE09Te5lwHhhNaklfB4fM2Jn\neD1aNxACuUaDtOBg5H9bhhkzANs/N69Olg6Snw4ASElBRE8VbCqL99PTQ6VBx8Vx9osr5HKqMYa9\nQM5oMuJw1WHGkTrAwFe3sV4SfX1ZR5FsYGK/dOu6UdRchBmxM5AdE0M1ofYkQraYJJ1mpzFGqiQV\nPboeqNQD7RW6JSaPx7Mq8OUuXWEhiGkKZn2cbeaLZYVJJnZCJF+Myk4neccaDbVCZts2quLf888D\nDz/s8HWnRb2ksQph4iiXk2NuT5YaDNSHwkmJyV59L1rVrawqAzKZi2BLlUaDaJEIfqmpqM4rxdKl\nA/fxaq66F0U93VbUY2Ig7m1DwRk17PYyoe2EvkVkdKTOibodnPnpFxsuIjowmtUkG6NIfYj8dIBZ\nv9LTtacxJXoKfH18kRkejpL4eBg9EVOlEk3jxqHbaESqHWuJx+NhvHQ8ipuLB2yzDBK9IeqdUn+E\n1Q+sre8K2noBMKCNHZMFNQl+YtRpnYj6W28BU6cC8+dTv2/YALS2Al9/bXd3WtSrupz76TRui3pV\nFfUlY6cfAU25qhypklRWTVRmxjLrWcoGcyGv9HSoL5fBTrVt72bAeEnUy3p7B0bqfD54iYmYLlVY\nvV9m+vx0gPLi1SYT5J31nP1iD2eiTuens4FRpD5hAoDB99OB/n6ldV2Oc8+PVfc3mQ7y8YG0pwdV\nnuTjKZU4l56OaYGBDu9CsiKyUNwyUNQt7dyFoaH4rbMTPWzbsFnQESVESB17e8tejjrNpKhJqGir\nQI+ux+HxKcEitPB0sFtqpbkZePVV4O9/73/Mxwd4+23g6aeB7u4BhzTqdAg2itDrV4JJsQxFXVWK\ntDTqxol2sVyKOkPrhamfTpMTl4MztWc8myOxoVSthszfH40hMsT1lmLKlIH7eFXUvbSa1K79AgDJ\nybhunNy+BdPnpwNUUBQvFkOh7uEmSu3hdJKUpZ8OsIzUBzFH3RJXFszxmuNWlRmz2ttR5DS3ygVK\nJc7FxTntSZopzRwg6oT02y8AEOzjg+lBQTjsQWpjswSI7TShtZXdcVaRuk1TcJFAhOyIbFxouODw\n+AR/McSxWjQ22tn44ovAypUDl+HPmwfk5gJbtw44pEGng75RhMAk++UBbKEjdaGQusyVvjaY3hD1\nslbmmS80cUFx8OH7QNGhYHWcM+huR4dq0zFBXAZ78/u0p+6VL5PB9NQBICUFMyMd+Op9Oeo0UT58\n8P2iESxmby0ONsMu6nK5/dWkeqMex6uP/3/2zjy8rfpK/+/VLnmRvNuS933J7jgJEBInLKGFQsvS\nEmba0tJpIKVAKJTptNNCaemUtj+glNIUmMIUUpgCLVtbhhSSQEIS29k3b7EdW7K8y7YsWev9/fHV\nla+kK+leWYsN+jwPTxvpSrq2paNz33POe7CxZKOg58vNJX3BnK3eo6Nk+YBnIi0emToQegm1y+3C\nwYGDuLjoYu9tDVYrTk/PY6x7YABt6emhg3pOXYD8oteT4ZF01vt0vhJMn8qBStiF2SJjLlOnadqn\n+4UhnEask8mgKrIH9qq3twN/+hPwox9xP/DRR4HnniPHsTDa7ZgZkEGcF7rzhYHt0MmWYMo9masr\nWJDj4fkipJ2RgaIob7YeLRh3xteOliNntn+uIZ+FRiKBlKIwFo1e9ShMk447HHDQNHdzRGkpamRB\nOmBYmToAqGFDlmYe3tQxZEEEda5MvcXQgsrMSmSphPU3h1xCzep8AeKjqQNzwyhcnBw+iYLUAuSk\n5Hhva6AonJ7Ph2BgAG2eLDsYXJk6VyfdfIN6p9KCUnoGHQL2H4+MkHphfj4w5ZF+0v16k8MVS7Vy\nOcR5HFOl//7vZLV9dpCOnIICUkD99re9RVOb2w2zy4WR8xLMpvDT1Ksyq3B+4jxcbpdPB4xKLEaW\nVAp9ML0/Su6MXKzRromqY2O71YoyqQr/t0cGWqubs6T0I2rF0ihk6t2eIimnLFlWhuyZXuj1HLMu\nLE0dAOSuaaSkls7rXGJFQoM6TZO6EFdQf7/nfWwq49/1wiaors6SXoD4ZeqhetX3X9gf4J9er1Lh\nTKRtljSNkakpTFEUKkL8bGUZZTCajbA45loWuZLEZSkpmHK5cD7CD+UZqQk6x4SgoM5ILxQ116Pu\n/yFs0obOOnVyOVwZflOl+/YBR48CnmUvQbnzThJAXn8dADBstyNXJkPH+RnYxRO8uk6UUiXyUvPQ\nN9knrFjKt52R5zQpm2hm6maXC2MOBwaPyVFWBkjqqoMWs6Kiq1utpK0wS/gQG5vOYNILAJSWQtTb\ng6Ym4DD7u8/hIJexrDV2lH0EEmVkdtKxJqFBfWQEkMt9L/cZ+Pq9cBEyU/cEdbvbjVGHA9o4ZOqh\n5Bd/PR0A6jMycC4tDe5IdMiJCRyprQ2YJPVHIpKgMrPSx/GQK56IKApbMjLwbgTZutPtxFnZJDIt\nw4KCur/nC9ey6drsWgzNDHG2ZQJkqtSSwpoqdbuB73yHmH2H+yKXSknR9N57AYvF2/ly2tgBraKS\nd9eJ4A4YZpw3hMTAtKIWphfyOgc2q7Wr0TbYBpd7/tbOTAfJe/9Hka4Xz2o7LqLSqz44SK6i5tl+\nHFRPB0h22duLdevgK8H09ZErBNZeVLtFD7dsfl8wsSKhQT1YkdTqsOKw/jAuLbk0ouflk6kP2Gwo\nkMshiWGPOkN5Rjn6J7n3lX504SNcUuwb1NN0OmSZzZF9EPR6tK1aFVJ6YfCXYNhFUjaRSjDDM8Og\nMzMhtZnRe47/zxKqR51BLBJjVcEqtBpaOZ8jWyqFTexEz4Cn/YUZNOK7brG5Gbj4YuCRR+amSafb\nUZXBX0dlgnppKbmcZ1wjgwb19nby5g0xURxJOyNDpjIT+an5ODd6TvBj/emwWlGjUs1ZA4RoO4tK\nph7rIilACnIzM7hkudm3WOqnpwPA9FQPLKKUeZ9PLEhoUA9WJP144GMszVsacWWZ062Rpr0r7ID4\n6ekA6dYoUhcF7Cu9MHkBs87ZwKKXToeGvj6cmQnesheUgQG01dRgFY+p1Loc36Ae7Mr/isxM7DGZ\n+K9i8zA4PYj8dC1QUABz5yB3eyEHoTpf2ITqVxdRFHIoGXqm7L6DRkIsGH75S+B3v4NxYAD5UhmG\nnO1YUSQgqGeSoC4SkS+p0x7H46BBnYc9gJBJUi6atNEZQmq3WFAEJc6dI999ITP1aGjq0Rw8UgUZ\nHKMooLQU6/KJB4z3/eqnpwPAyMQZmOjYTaLPh4QH9WB6utBWRjac/i9GIwnsBUQHi1c7IwPXvtL9\nF4g1QIBMkpuLhs7OyDpgeLQzMtRl1+HMCBmNt9mIbMj198iWSlGrUmG/QINyZo2dSKdFlUrP2yY+\nVI86m7DFUoUc/VZb4KARX3Q64IEHMPTWW0hzSoGsDl496gzsWsqSJTyCepTdGbng40fPhw6rFbYu\nFTZsIBLqJyJTB4DSUmRN9SAra64N1b+dEQD042cw4wZmBSY68WDhBvUI9XQgSFvjgQPAunW+nS9x\nDur+ujqXng4AkEhQPzGBM0KbuwGMGY2YUChCv3E91GXPtTV2dxNHwWD12S2ZmXhXoCWwd+ORVosV\neQZeuvrkJPmP2VfL1c7IEC6ol6bKAekIaP9BIyHcfTeMLhdS29ohyQ9tuesPez6BratXKBTotloD\ne7ej7M7IRbQcGzssFlzYr5ybIi0uJkUyDq+gUo87ZUQ1IoYoBPVJpxMWtxt5oZoQWLq6V4Lxk18m\nZyfhdNmhlYeZWk4QCy6oT9umcWLohE/ftlA42xoPHPBcJxLiHdRrsmrQMR4Y1P07XxgabDacjkB+\nabPZsNJuh4hHraA6qxrnJ87D4XKEjSeR6OpeH3WdDvVqg3/rNydnzxInXEYlCRXUSzWlsLvsQZdp\n6+QyfCb/bUx9lmPQiC8yGYwbNqD6tf+GWMGvR519fkPmIVgdVp+2xjSJBGkSCQb9+7p5Dh5F0s7I\nsLJgJU4Pn4bNGXkwomka7RYL2t5QzQV1sZh8mDk6FJRiMTIkEhg4+th5E4VpUk53Rn9KS4GeHlx0\nEatY6ie/9E0Sy132WruFxIIrlH504SM06ZqglAr3C2ETcDV44ABwyVxWHE9NHQiUX6ZsU+gc68Sq\nglWcx9eJxTjndgvObtokEjTybIdUSpUoTC9E90R30CIpw5r0dFyYnRWUmXg3Hmm1KJPreWXqbOmF\npumQ8gtFUbi0+FLs69vHeb92agrZ6b04dUOQQSOeGDMy4BJl4t8/BjQKDe/HiUVilGeUo2u8K3wH\njNtN3rB8lk0HydRHefjwq6QqVGdV4/jQcV4/AxfDDgdEbhEUdimq2KdSHaatcT66ehQydU4jL388\nmfqmTcDf/gbMWtwBxb8+Ux9KNaXJoO6P00m+fEv8rBPe7+Xvnx4Kn0zdaiW7tpqavPcnQlNnyy8H\nBw6iUdsImVjGeXx6Tg6yHA70CtQi29RqNGZk8D6emSwNlyRKKAqXZ2Tg/wRIMOygrqX5yS/sIqnJ\n6YQYxK4gGBtLNmJP7x7O+3Svvoq2ivXojsD6l43RbsebRVfgjhYbyUQEwPzdtVoiCTLuDwFBfWAA\n0GjISG8QzHYzTLMm6NIDWx7PzMxAe+AAunkEzvluQmq3WKCeJtKLT9JbVRW6WDofXT0K06Rh9XSA\nZOq9vWhoIGWYlx8bJD3XrL8LY7mbDOp+DAwQ7ds/CZtvkZTBJ1NvayORIoW0ILk9GWCwy/pYoEvT\n+ewrZZt4cT9Ah4bJScESzJGCAjQKePMzbY08rvwFSzBe+UWrRcYsv6Du06MeIktnaC5txt6+vYF3\n7NsH7bFjGCgtn/eu0iG7HadmxvHXy1cA99wj6LFMUKeoMMVSnkNHXO2MNE3jrq4upInF+ICHT898\ndfUOqxWOblWgK2OoTH2+vepRyNRDDh4xlJV5J2N/9CPgrSe64S737XxhLHeTQd0PLj193DqOzrFO\nrNGtmffz+2TqftKL0W6HWiyGcp5rsYRAURSqsqq82XrQIimDTod6oxGnBSypGJ+YwGh6OqqCbRzh\ngAnq4eQXALgyMxO7JyaC+5b44c3UdTqoxvXo57YH8YGdqQ+EaGdkWJq3FKOWUV8XTM+gkfZrX4M1\nzcF/VykHZpcLLprG0MxZdP7r9aQl4p13eD+ecWsEfIulnEGdj/TC0fny2ugohux2PFJejg94XEnN\n11v91KQFo8eU2Oyfe4Vra4w0qE9Pk78p15SiAHhl6pmZREYwmdDUBKzP70Kn2zeo900m5RdOuIL6\n3t69uLjo4qCShBB8MvUEF0kZmC1IDpcDh/WHQxeDtVo09PQI6lU/cuECVg4MQCSgF7supw6njGdh\ntwffPsVQKJejQCZDK49WS5qmSfeLJ1OnBg0o1NHB7EEAkCnwwcE5+TJUkZRBRIlwafGl2NvLytY9\ng0a6z38e0zKeu0qDMOQZPJqWtaOxtgF48kng7rtJ7zsPeLc1njgRkTujxeXCd7q68JuqKlyekYE9\nJlNYR8SGnAb0T/Z7rxqFckhvQblUBbXa744QbY2l89HUmSw9ltOkDBTl1dUB4IuruvHOuQqfZITZ\nTZoM6n5wFUkjsdoNRm4u6b2eGKcDg3qc9XQGpsXt+NBxlKhLkKEMoX3rdGg4c0aQ/NI2OopVAjtU\n6rLr0D52DtU1bl6fGb4SzLh1HCqpCgqJwqtHLq+YDinBMAOVjIQeqkjKxkeCYQ0apUmlAAX0DEdu\njma025FByyDK6cCSgmoyPrl0KRlM4gE7qLM7YCoUCnRZraBfeQW46CJg927gqqtCPhdXO+PPLlzA\nxWo1Nmo0KFcoIKYodIYJnlKxFMvzl6NtsI3Xz+BPu8WKy2o4BngKCsg3M8c8w7wy9ShIL9NOJ6ad\nTmhlPBJGj64OALrZbtiLK/HCC3N3J+WXIHBNk0ZLTwfmllD3f9BFhPuiOROmRGXqzAecGToKiU6H\nuiNHcM5i4d0B0zY7i0aBbzK1Qg050lFYz90W6A/foO6VXgDyx9Dp0JgfWldnSy8Av0wd8CuWsgaN\nKIqCTi5DvyXyVrohux2KWQncqQMoz/C8YR97DHj8ceIJEoa8lDzYXXaMW8e9QZ0eG0fG//t/kJlM\nGPmf/wEeeIBkuOwfngP/5RjnrVY8bTDgF6zlDc0aDfbw0NX5bI/iwknTMClm8aX1HBkvRYGuqoL9\n3OmAu4rkchjtdsFTyQCi4844O4uKcO2MDCxdHd3d+OydFXjkEeLrZXFYMG2fRl5qHvJlMow6HHAs\nsAGkBSO/DJmHYJg2YGX+yqi9RmUlYNntq6cD8W9nZGDkl/39+7G+iLs/3Ut6OtJnZpAlFvPugGkT\nidAYolMkGGpHHdLKA7cgcbFercbpmRmMh2mf8xZJGbRaNGSEbmtkF0mBwDV2wViWtwxDM0MY6j0d\nsNGoUEHcGgUOw3ox2u1wTlqR6iqekwVLS4kEs2NH2MdTFOX9Ms8ZPYvH7XeArqgAzp5FpUaDrl27\ngM9/nvR5h8F/mnRHVxe+U1joczXDN6hHWiz9uGcW1LgMF6/mDh0HVeN4+fUfB9wuFYmglctxIZLM\nNhpFUq4VdsFgZero6sKyL1SgogL4n/8h1h5F6UUQUSKIKQp5MlngvEGCWTBB/YPeD7CxZCPEougV\nL6uqAGnLfh/pBUh8ps5l4hWAJ7utpyheEsyEw4FhiQTVAtoZGSQTdUDOGV7HykUibNBosDtMQc4n\nUwcArRaVSmGZOl/5RSwSY0PJBkz+x3cCNhpp5TJkVnH4qvPEaLfDPD6OfKmf3n3//UQHf/fd0E9A\n07ihPw1FN38T2LQJovw87PntWeD551GZnR16CxKLads0JmcnoU0jwe3vY2M4Y7Hg3iJfG+BNGg0+\n4KGrR9rW+OohC3JtKs7voFfPvIqP5EY4Tp/gfGzEveoRDB4NTg/6/JuXns7AZOrj44DLBWRn40c/\nAn76U6BrtNdnhd1ClGASEtQtFjLCz/47RVN6YaisBHK7DgQG9QRp6sy+Uho0yjRBdvix0enQMDuL\nMzw6YI6YzVgxNARxoXBLVsuFOswo+WXqAD8JZnB6EPmp+XM36HTQUaGDuv/gEZ+WRobPow7ad/YG\nbDTSyeVIKeHYgMQTo92OKZMR5el+nSkKBfDEE2SZBteH2mIBdu4EGhpw666zOHhJCdDbiyPXPogj\nBvJ7CbvajkXXeBcqMisgokSwud24u6sLT1RWQu5XFC9VKCCjKHSEed6KjAqY7WYYzUZer8+wt9uC\nBnVgcByeGcadf7sTm27/OS49ZISdY2I1Yl1dYKY+Y59B6ROl6Bqfm27lNXjEwGTqjOcLReHSS8nN\nr77X57NsWpcM6oTeXjJ0xH4/vt8TnaEjNrX5JmRO9wHLl3tvo2k6YZk6QLL19cXr+Wl7Wi0aTCZe\nmXrb9DQau7sBgUHd5QJGz9bD6BQe1ENlg1yZutqsh8lEOtT8sdvJ+4KZUBx3OiETiZDGU076wguH\n8LtN6QEbjbRyOaQF88vUp829WMpl5HX11aRj5bHH5m4bGAC+9z3yBv/734Hf/hYfvP4rvLJaCSgU\nodsaQ8CeJH1sYAA1KhU+y7EwgqIobMrICNuvHsl6O5cLODtjRXOlb5GUpmnc/vbtuHXFrVh9092g\nZTL0vf58wOPjFdSPGo/C7rLj5VMve28TlKl7rAL87QF++EPgjb19KEpLZuoB+EsvfaY+TNmm0JDb\nEPxBEVBjOoijotU+LlUTTidEILsTE8GK/BW4rOwyfgfrdKg3GHgF9SNmMxqPHxcc1Pv7gWy6Du3j\n/IN6pVIJlViMkyHOi3Fo9OJpa+S0RQa5raRkbhhN0HDYvn1Qn+3BLxpnMWT23TStk8mArMgz9SG7\nHWZ7O9aUB2k3fOIJ0gnz5ptE+lm2jEwwHzwI/PWvQHMzqllLUhoaeLg1csDo6QM2G37Z34/HMb1o\nFQAAIABJREFUK4P7v8RKV29pAaRlFqwt8A2Ou07uQsdYBx5qfgigKHz8uRWQ7Px9wOPLlErBE9IA\nBE+TthpasTJ/JXad3OVNPHgNHjFoNKQF6/Bhn6De3AxIc3phOFPqvS0Z1D1w6embyjZFZPwfiowz\n+/ExdbGPW2Mis3QAeOKqJ7CtcRu/g3U61Hd38+qAaZuaQuOpU8F3bwahvR2oK86Di3ZhZGaE9+PC\nbUManA7M1GEwBJ1PCSiS8g3qnkEj6pFHsKZyQ4APjFYuhy0t8kx90GaHS3wCFwfrIS8vJ1OmO3YA\na9eSy43HH/cJBlVZVegc74SbdqOhgfysbncEQT2zCvd3d+N2rRYVIQIUE9TD6epCvdXffRegiiyo\nZvmRG6YN2PHuDrzw+Rcgl5C/l/WL1yP38Gly1cIiokydpklQL+C/Oq7F0II719wJi8OCE0MnMONy\nweR0QiekOaK0FPjnPwMsd3Or+vDOrhJ4VucuzqC+b98+1NXVoaqqCk8++WTQ41paWiCRSPC6Z69j\nKPyD+nytdoNBHTiAvqJLfIzjEqWne8+JovhJLwCg0yG9rw+ZUmnIDGfS6YTRZkONyyVsCQRIgK2t\noTgXUYdiS2ZmSB+YgExdpwsZ1CMtkrI3GjWXNGNP3x6fu7UyGabltogydZqmYbTbAfcwtOkhJrN+\n8AOiv95zD+fUY7o8HenydOin9Ej3KEQ9PUCWRAI3ELaTCCDyi1lViQOTk/hecXHIY0sVCihFIpwL\nU4thvNXDBX+Gv33ggkPh9H7Z0jSNb771TdzRdAcatY3e45ZVXoK3m9TAM8/4PD6iQunEBKlfpPDf\nMtRqaEWTtglbl27FrlO70G21olyp5OVcOneyZcDJkwHLMUzoQ76iBK+8Qv69KIP63XffjZ07d2L3\n7t146qmnMDo6GnCMy+XCAw88gKuuuorXG4Q9eETTdEyKpHA6gcOHMbN0nW9QT3CmLghPdtuQkhKy\nWHpkehrLaBriCAyPmOl0xtiLLxs0GhycmoItSI9uQKZeUAAMDqK60s0vU+fTzuhykYDq2Wi0sTTQ\n3Esrl2OCsuPCgHAvb5PTCbGbRrq1jP8XcRCYdlZgzi6Aoije2XrHWDd2mmT4ZUUFUni0P/KRYArS\nCqCUKAM2cnFhMgEnJyyoUs0Fx+ePPQ/9tB7fv/T7PseuyF+BR5dNgX7mGR9fiHyZDFMuF2ZcAnak\nCtTTTbMm6Kf0qMupw9YlW/HyqZfRIaSdkYFZMs0K6naXHSOWETz8XS0efpi8/RZdUJ/0NPdu2LAB\nJSUluPLKK3Ho0KGA45588knceOONyMnJ4fWi7MGjrvEu8uaeh0c0JydOAEVF0DZk+mi4iepRjwid\nDtDr0aBS+ejqo6PkqpShzWxGo9kckYsd4yMlNFPXSCSoU6lwaGoq4L5p2zTctNt3HaFCAaSmoj5v\njL/8Eu7L9733yHZ5z0ajFfkroJ/SY3hm2HuIXCRCukSCgSkH73V6DEMOB2R2B/Ik/D3Ug+FvFyCk\nWDplm8JE5gYUKFS4kednjGltDAffTUj//CdQtdmK2lQivfRP9uO7u7+LFz7/QoCtR4osBbbqCpjL\ndKSu4EFEUShRKITp6gKDepuhDSvyV0AikmBp7lKkydLwvvGc8KBeVkYWTbM+U/2T/dCmabHlCgk0\nGuDPfyZXgka7nbcfUjwIGdRbWlpQW1vr/Xd9fT0O+mxkBfR6Pd544w3ccccdABA2o6FpX/mFydLn\nmwkF4DHx8l+Wsagy9YICYGgI9UqlN6jTNLBiBfCNb5CLEcDT+TI0JLhICswtmxYa1AFgc0YG3ucI\nHIznS8DfVKdDVQppa2R/BpxOUihly9a85JdnniG/CA8SkQSXFF/CoavLkFpi99re8sVot4O2TKM0\nLUpBnY+xFweHhzvgLv5XPFlVxftzIkRX5xPU330X0K6xoFqpBE3TuO3N23DP2nuwLG8Z5/Grtatx\n6NpVwG9/63O7YF1dYFBvNbSiSUcstimKwtYlW7FnuCuyTL283GcojLHcpSjSOfvww4AEImRKpRha\nQANI865M3nPPPfiv//ovUBQFmqZDvokefPBB/Pu/Pwib7UEcP74HgMfvJQZ6OuP34u8xlGhNXRAy\nGaDRoMFu98ovAwPkilavB77wBdIO3TY9jcbz5wUHdYuF+HuXlAiXXwBgs0aD9zl09YB2RgatFpoZ\nPcRisvmMoacHyM/3lU3DFkqHhkj6uHWrz83NJYFWvDq5HJnVwoulRrsdDuso6vMi3JrEIpgHDJ+g\n/jP9CMrsnWgQoCsXKxRIE4vDzjjwGUKiaRLUxaUW1KhU+H3b72GaNeGB9Q8EfUxjQSNer3GTrOH0\nnG2AYF1dYFBvMbRgdcFq77+3Lt2KLosFpTKBS6Kbm31bVUE8X5ge9S1bgNRU4LXXoi/B7NmzBw8+\n+KD3P6GEDOpNTU04592+Cpw+fRrr1q3zOaatrQ0333wzysrK8Nprr2H79u148803OZ/vwQcfxBe/\n+CBqax/Epk3NcNNufNBDOl+ijieoL+pMHSAeMGNjODszAzdN4/Bh0mTx1ltARgaw8bNOGGx21J49\nKziod3YSyVAsBkrUJRi1jGLaxn/Z9SVqNY6YzQEaaYBFAIOnRlBT41ss9S+Shtt4BAB44QXg+usD\nCpPNpc2BurpMhrQy4cVSo90Oh02PprLoyi91deQ96XCED+otU1M4PCvGNTLh+2r56OqN2kYcHTwK\npzu46Vl7O+nWGZJZkeo04Qcf/AAvfP4FSETB24IbtY1oGTkG/Nu/AU8/7b1dcKYucJqUnakDQHlG\nOShlIYZGBZqXpaUFGKwxa+wAUpv/4Q+BH/8YKJRFN6g3NzfHLqirPd6a+/btQ29vL9577z2sXbvW\n55jz58+jp6cHPT09uPHGG/H000/j2muvDfqc7CLp6eHTSJeno1gdupovGL0eMJuB6mrk5RHjPpMJ\nmHG5YHa5kMtz3duCQKeD2mBAplSKvtlZtLSQBU5SKYlrVZ8xw9WZAld3v+CgzvZQF4vEqM6qxrnR\nc6EfxCJFLMaq1FTs9zNWCZWpc3XA+OvpY04nlCJR8IIgTQPPPksChh8rC1biwuQFjFrmCvo6uRwy\nrXALXqNtFi53H9bXR77omaE8oxz9k/2wu+xQKom/XGdn6KDupmnc2dmJ5ZbDaMgsFfyazTx0dY1C\ng8L0QpwZCW4T8e67wJVbyF7SX72/Aw9c8gDqckKbj63IX4HTw6dh//pXgV27vBNngpdlCMjUR2ZG\nYJo1+dTnrC4XaGk63jv7J/6vGYQ+E5FfGD77WVIqsukXVrE0rPzy+OOPY9u2bbj88suxfft2ZGdn\nY+fOndi5c2dEL8guksak6wWYs9qlKJ8l1Bc8HRWCWpsSDasD5rTF4g3qAMkWVt8yjab0NJhODeD0\nlLCg7r9spz6nPiq6etCg7in8VlfDZwm14M6XffvIt5rfVSPg0dWLfHV1rVwOKkd4pn52YgIwO1Gc\nz1/2CIZMLENheiF6Joj7H6Or50mlsLjdmHQGZsrPG40QURRo47tB95KGolmjwV6TKeyMQ7jJ0nff\nBdZd5YDbZQOcU9ixLryRmUqqQkVmBU7JTMCmTcBLLwGIrabeamhFo7bRZ96l23Nl/k7Hm7A65rEj\nFb7yCzCXrR97T47+2UUU1Ddu3IizZ8+iq6sLd911FwBg27Zt2LYtcIDmD3/4A66//vqQz+dTJI2i\nf7oPfv7pjK6+qPR0Bk8grFepcMo8g9ZWn1WraJuextcvUiKbGsNlt+Tjgw/4P3VHh29Qj6hYyqGr\nh5Nf/DN1wT3qTJYe5MvZf2+pViaDPV14pt45OQXFdMp8dzN4qcmuQfsY+Tbzb2v03y1qcjrxHz09\neLKqCl3jHZwbj8JRpFBALZGEnUhu0jbhsIFbV5+dBT78EHDVtcM23YXnr3uet+leY0Ej2gxtwPbt\npGBK015NnW9vvJBp0hZDC5q0TT63dVmtqE1Jw2rtarzd8Ta/1wwCUyhlc801gHxKjkPnF1FQjzZM\nUHe5XdjXty/qfi8AgP2+zozMaPqi09OBubbGlBQcHJxBVpbv0Gib2YzG2VmIC/Kw6xUxvvQl4H//\nl99T+29Qi6RYujY9HWctFphYmaYQ+cXtDuKjHuzvNDFBCgr/+q9Bz8l/b6lOLseMQnimPuSwI9M2\nv6XVbIS0Nf6opwfXZmWhWkZjxj7D/fvkwSYeunoob/X9+4H6Bhd+eeZZNGpyBX25rNauRutgK7B5\nM6nuf/QRMjz2HBMcVyYBuN2kIJ6fH/5YkEx9tXa1z22MkdctS27BrlO7eJ+7P063E4ZpA4rUvq6Y\nFAV84zo5jvTbsFC6GhMW1I8aj0KXpkNeKv99mrywWEi1nZXOVlXNyS+LpkedQav1ZurHpyw+Wfq0\n04n+2VnUDQ0BOh02bwb+7/+Ae+8lW9dCQdOB8kskmbpcJMJF6enYxwocQTN1z1RpZSWprbhcxHsm\nPZ3YbTCEdGd86SXgM58JaYewqmAVeiZ6MGYhxUWtTIZxkfDul2kRUCya3wZ7NtWZ/DpgTs3MYNfw\nMH5aVobOsU5UZFZE3PLLp1i6In8Fzo2e45Qn3n0XSN/yGOyyPFxXvErQa3szdYryZusURZHVdnwk\nmJERQK0O3E7PAU3TQTP1SqUSX6j7At7veR+m2fC9+1wYpg3IUeVwrtr80mY5HGob3p7fhUDUiGtQ\nd7vJspjS0hjq6a2tJA1i9aV6M/XFKr8YDKhPScGAaAaNTXPpwFGzGUtTUyHR671F0hUrgI8+An7z\nG2IWGCx7GBkhXS9so7+qrCr0mfpgdwnrufXX1YNm6rm5wOgoVFIHcnKACxdIls7W04EQZl40HdCb\nzoVULMXFRRd7dfVcmQyTbidGJtxhF18zuGgaDokMS9Xl4Q/mCTtTr6oiX2hWq29Qp2ka3+7sxIOl\npciRyXzcGSOhWaPB3snJkLq6QqJAXU4djhmPBdz3xoEzaJX/HNVFl6FWJay2sDx/Oc6MnIHNaQO+\n8hXgH/8AjEb+xVIBerp+Wg+n2xnQdMEEdY1Cg8vKLsPrZ8PbmHDB7CXlolAugzvLhocephdEth7X\noG4wkDY8lSoORVIWTKa+mOUXtUQCkVmKkqa5D0Pb9DQaU1NJ8zqr86W0lFw2f/ABcOutpHXOH/8s\nHSDFvBJNCTrHuJcHB4Otq9ucNkzbppGlCrSFhUQC5OQAQ0NeCca/SAqE6FFvbSVdTZvCS3ZsCUZM\nUciVyZBba4dez+9nGnM4AOcM1pTOv52RgR3UZTKSbJw75xvU/3dkBOMOB7Z5gpn/tiOh6ORyZEok\nOMVDV/cfQurXO9G99FY8cvlPMOCkfIy8+KCSqlCZWYlTw6fIpdhNNwHPPce/V11gkbRJ2xRwRcPe\neLR1yVb86VRkXTBcejqDUiyGWirBjNiBv/89oqePKnEN6oz0YnfZsb9/PzaWbIz+i+zfH7C+jmlr\n7LUswqCelQVYLLBPWuHsVkFUMTdM0mY2ozEtLSCoA0Sd+Oc/iaXAtdeSWMiGK6gDkUkwq9LScMFm\nw7DdDqPZiNyU3OCOm37GXv56OkC6Xzjll2eeAW67jZdpGVexNLuWvwVvz8wkYB/Dmprotdvq0nUw\nzZq8swCMrs4EdbPLhfu6u/GbqipIPMGpc7wTlRnzs9Dg09rINYS049WfIytFg9sav4He2VnhU5kg\n/ereBdfbtwM7d6JMJot6pt5iaPHpTweAWbcbQw4Hij2f+Wuqr0GroVXwYhAgsPPFn0KFHF+934aH\nHgp+dRwvEhLUD+sPozqrGhlK4avXQkLTnJk6RQHltW4MOezEX3sxQVFAQQE69hiQMZmCHvdcxtU2\nPR00qANkQvOvfyVuA5s3+05xsnvU2URSLJVQFDao1dhjMgW6M/rjqREEy9Rpmobebg8M6mYzMdu4\n9VZe57RauxrnJ85j3ErsgXVyOdLL+OvqraO9wIwNFWXRW68ookReG15gLqhrZTKYnE58//x5bFCr\ncSmrwNA13jWvTB3gVyz1z9RPDJ3A26OP497K59Bns0ErkwVsWeJDY0EjWg2t5B8rVgCFhSg7eTLq\nQb3V0OozSQoAPVYrSuRy7xekUqrE56o/h/89zbOTgEWoTB0gU6W1l9pgNpO6ViJJSFCPmfTS0UEm\nwfzeCNNOJ4x3ncRqaw6kEbwxE45Oh+59etQqUrztaWaXCxdmZ1GvUgUN6gBp537uOeDKK8l33XmP\nIV80M3VgTlcPcGf0hzVV2t4eGNRHHA6kisVQ+Q8evfIKMe7i+SGXiqW4qOgifNj3IXlZmQyKQv4d\nMC0GA0TTghxfecHl1iiiKJQrlfhvoxGP+lm9do51zktTB/j1q9fn1MMwbYBp1gS7y46v/uWrkO55\nFFs/W4R2qxU1AqUXhtXa1XOZOgBs346yXbv4BXWe06Q0TQftfPG/urhl6S3YdVJ4F0yvqTeopg6Q\noG6w2/Cf/4mEZ+txjXDMNGms/NO5pBej3Y6Nx45BByW2tIaegluw6HQwtulxkVaF0x4vj2NmM5ak\npJAvqRBBHSDJ/k9+QvY4rF8PHDkS2KPOEHFQ9+jqvDJ1j/xy8CAp1rKNB4P2qAeZIA3FxpKNXn91\nMoDEv1f9zMQYlNboS3XVWdVoH/XtVQeAlampeKi01GeRw+TsJCwOi++u1wgokMuRK5PhRAhdXSwS\nY2X+SrQaWvHTD3+KNLoQutFbUVwMdFiIkVckLM9bjrMjZ0mxFABuvBGlH36IPh6LX/hm6j2mHigl\nyoD3Hde2o8vKLsP5ifO87IbZ9Jn6QssvHv+Xm24iXbe7dwt6+qgS90xdV2JFq6EV64vXR/8F/KSX\nDosFFx85gutzcvAtRxW6OxfRJCkbrRbT7QZc3ZDi9YDxSi8uF2A08nrzb99OWh23bCF/C7+kEABQ\nm12L9tF2uNwCPK8BLElJwYTTiXPm8dCZuqfwW1JC6hy8iqSnTpFWET8vjnA0lzZjby8plurkcjg1\n/DP1AZsZWU61oNfjA9utsayM1DympoDna2txb5FvD3TneCcqMyuj4mDKp7WxSdeEnW078bvW3+Hi\nsd9jy5XkddstFsFFUgalVInKzEqcHD5JblAokPov/4I0my28syHPwaMWfaCeDnBn6lKxFDc13IQ/\nneRfMHXTbvRP9Ye0M2GCulhMLP4Tma3HPaiPpRzA8vzlSJOnRf8FWEH90NQUNh47hu+XlOAHJSWo\nrqJ8jL0WE7YcHWSjely8XIIMjweMN6gPDwOZmaSdggc33ECc5b70JeJb4U+aPA3Zqmz0TfYJOkcR\nRWGTRoPjsxQv+UUiIV8qAUVSrkz92WeBr32NdM8IYLV2NTrHOzFhnYBWJsOMkn+mboITxdJcQa/H\nB3YHjEhEfv4zZ0iHjj/R0NMZmjUafBBiUxUArNGuwatnXsVjWx7Dx+8VYMsWcnvHPOQXwCPBGFgS\nzLZtKLtwAT3h/N55Zur+zowMXVYrqjjOe+sSshGJ71TrkHkIabI0qKTBfwdsp8abbyb1KyHT3dEk\nrkF9eBg4NRMjPX18nMgQS5finbExXHPyJJ6pqcFtnt2GNTWk02IB+e7wpsemQ126HjIZyMIMiwVt\n09NYxbQzClyOsWEDMQMLRiTFUoAU5LppNS/5BfD4uPsF9YAe9dlZMnD09a8LPh+ZWIZ1hevw0YWP\noJPLYRLzy9RpmsasVIylGuH+9OFggjoTUNgSjD/R0NMZmjUa7JucDLnM4YqKK/CLK36Bq4u34sgR\nYKOnOa19HvIL4BlCYuvqpaUoc7nQs3dv8Ac5HMDYGJltCIO/MyMDV6YOABcXXQyz3Tx39RCGvsnQ\n0gvgG9TFYuD73ycOjokgrkFdpwP29MVIT//4Y2DNGvz3yAhua2/HW0uX4hrWZE1uLnDRRcCLL0b/\npWPNiVEtyuQkEDakpKBlago9s7PEXzuMnh4J8ymWDkt1yE8JoQF7WhoBsoXuq1/1vTvAzOsvfwFW\nrvRdaisAZm+pViaD0WmDw0HkjlAYzUbQsgysLODotZ8nmcpMSEVS73amkEHdI79Eg3yZDPkyGY77\n97b6ndt9F9+HPXsorF1LisTTTidMTie/fbFBaNSyOmA8lFVUoKetLbhGMTREii1hrs5cbheODB5B\nY0Gjz+12txsGu51zglxEiXDzkpt596yHGjxi0MlkGLDZvF/Wt9xC6ryhvrdiRVyDelHlFE4Nn8JF\nRRdF/bnpAwfwk61b8ZO+PuxdsQLrOBYAf/e7wC9+AcFrzRLNgT4d8pxkaqY+JQW7hofRkJICGY8i\naSREGtSrlUq4aBp2WQi/lMxMYuVgtaKqigyjsQmQX3hMkIaC2VuqkUhgp2kUVrnCSjDtY+2ANAsr\nS2LT/hrMA8af+U6T+sOntREg1gCM9NLp8U6Zj7Pp8rzlODd6bq5YCqCsvh49KSlASxB3SJ7SS8dY\nB3JScgKG3Xo8sw7But1uWXIL/nTyT7wkmF5Tb8h2RgBIk0ggE4m8njYSCfDII+S7Kd7ENagraj5E\nk7YJCkl0uwpcNI3tGg1eKyvD/pUrg+p/GzcSn5G33orqy8ec905rkTJpAGgaDSoVuqxWoqcDsQnq\nEcovbtoNeuIITtpD+NV7+u6ZbN2fAbaZV1cXiXjXXSf4XBiatE3oGOvApG0SOrkcOTXhe9VPGDsA\niQLLSmLju1+THdjWyMV8p0n94TOEBPgG9XaLZV56OkCKpVVZVT5yR5lSiZ4VKwLW3XkRoKf7+70A\nc0ZewViWtwwqqQofD3wc9jX4yC9A4Aakm24CvvjFsA+LOnEN6jO50dfTrS4Xbjx5Ep1SKfYuX46C\nEJeJFAXcfz/w6KNRPYWYMjYGDIyrQKmUwNgY6jyN042pqeSAGGbqvO1RPYxYRpBq6cDeqTDbk1gS\nDBs3TUPPztSfew748pd5GToFQy6RY41uDT668BG0MhnUleGnSvf394GyuiCTxqZbqjqz2mvBq9OR\nsgF7MAwATLMmzDpnkZcSPcO7jRoNPgyjq3d1ET+apUvJvzus1og7X9j4DCHBE9SzsoA33iBvcn94\nBnWu/nQguJ7OQFEU7571cINHDNFeaxcpcQ3qA9LoBvVxhwNXnDgB1dQU/vb880jPCq+BXn896QDc\nvz9qpxFTWluBVasAyhMINRIJShQKrGHkpRgE9ZyUHIgpMYZmhF07Dk4PQucaxvsTE6G/EDxTpf6M\nOBxIl0igEIlIoez55+clvTAwe0u1cjmUheEz9dMTRsitsftosOUXiiKOjaw1ngCI9BKtdkaGPJkM\nOpkMx0Lo6u++SwbVmJdtt1hQM48iKYP/EFKxXA6D0wnnddcBf/hD4AOikKmHszW4ecnN+POZP4dc\n5QeEHzxi+FQG9RFnN+cfIBIuzM5i/dGjWJeejj8eOQKZ35q9YIjFwH33LZ5svaUFWLMG3v5uAGhr\nbMTyGGbqQGQSzKB5ECWehcenQy08ZnXAsPHpUX/nHe6exwhg9pbqZDKI8sJ3wAw4TFA75p+dBoMd\n1AEiwfgH9Wh2vrAJJ8EwQZ0hmpk6u61RJhIhTyZD/+23kx2m/oUuHtOkDpcDJ4ZOYFVBoCUwn6Be\nmVmJUk0p/nn+n0GPoWk6YI1dMD6VQf0i3XpIxfPXKU+azbjk6FH8W0EBfllRARHHJGkobr2VTDOe\nFS4bx53Dhz3W8KygnsXsWKVpQZthhBBJsZTxUd+ckRGwDcmHYEGdbeQVwQRpMNbo1uDsyFlkitxw\naUL3qttddkyJndCKNcEPmieVmZU4P3HeO+DFpatHW09n2JSR4S2Wut1E+pmaIvLPhQukW+OKK8ix\nNE3Pa5qUzbK8ZTg3eg6zzjl7gDKFAj3V1aRa/u67vg/gkamfHjmNEnUJ58xLZxhNnSHc8oxx6zik\nYinUivCDaJ/KoL6lev7Syx6TCZcdP45fVFRgBzOBx2HiFQqlErjzTtJSt5ChacztJOUKhGNj5IeJ\nQiblT112XchlxFwwPuqbwxXkWF9QbLw96gMD5G96441CT5sTRlefmu6BVRU6Uz8/cR5SSQmKVLFz\n81RKlchLzfMOeAUL6uHcGV0u4p/z5z+TKcbrrydZdnMzad9tbCTPXV0NlJSQ+vQ3mtR4p28SEjkN\nsZjsoNDpgNpasvL16qvnbBuMdjsUIhEyorCoXSlVojqrGieH/IqlNtvcujs2PJKVFn0Lp54+bLdj\nxG5HKQ9H1i82fBFvtgffXxrOnZHNQgnqwkb05sll5fML6n8eHsa3Ojvxcn09NjO9cP39ZKKIa+Y9\nBNu3E5/1hx/m7REVd/R68sEtLgZ5gx/zW2IQI+kFIAZPb3cKW+UyaB5EbVYtNmVk4FudnXDRNOek\nZEj5RaEgGuvNN0fVTWtjyUacGzkCkyYXAwMkS+XqdmsfbQfoEpRrYuvmyUgw5Rnl3qBO03Nadtd4\nF7Y1zu0BNpmAkyeB48fJfydOEMkmNxdYtgxYvpz8ytRqMlwslwf7Xxk2dMrxjGEaF2Wmh9y/2h4l\n6YWB6VdnBoW8S6hvvpn0G/f2kmUAAK9MvXWwlVPOfXl4GJ/LziYtv2EoSCtAY0Ej3ul8BzfWByYR\nfIukwMIJ6nHN1JfnLY/4sU/r9djR3Y33li+fC+gAyeguuSToEuJgZGWRxoonnoj4lGLO4cNET6co\ncGe3MQzqEWnq04PIT81HvkyGglAFuRBBvZCxlYxCgZRNc2kzzug/hNFpQ1paYLcJQ8dYB5x0Pmrz\nYhvU2W6NOTnETdNgIF82nZ3A6cFOvPZMFa69lsS5wkLSuXXyJJnF+tWvyNvh/Hlir/zQQ6R9bssW\nskPk4ouB1atJF0tNDXkOrZa87zdnafDRjCnsR6YjSkVShtUFvsXSUmZZhkpFNiPt3EnumJ0Fpqd9\n13JxEMzz5Y9DQ/hyHv+uoVDLM/gMHjF8KoO6OEKDm1GHA//R04N9K1bMFQgZ/JZMC2ErCTrQAAAf\nQElEQVTHDiLdTk5Gdl6xxiu9ANyBMIZBvSi9CFO2KUzO8v/lsB0aQ+rqzM/i1yEzYLOh6NQp8mFe\nJWwfZjjWFq5F1+AhGGw2FBbRQXX1U8Z20NIM1OTEJ1NnWLIEuOwyMkdx2TUTsNrtSKVy8dWvAu+9\nR3TvgwdJ3Nu+nbhtqiP0G+Nj7gVEr0jK4LMwA6xMHQBuvx347/8mV92Dg0QrCpFpzzpncW70XECi\neM5iwYDNhsv8p9pCcH3d9dh9fjfne713shel6lJez6MWi+EGMMVnqXYMia+5+LPPRvSwZwwGfCE7\nG+VcWYNAPZ1NaSkx/vv97yN6eMzxCepxztQpikJtdq2gYinbS32zRuOzt9SHtDTShuT3bdpvs6Ho\n5ZejnqUDZA9nU/5SSOFGQbUzqK5+crAd4nQlCuSxD+pMrzpAdso+8wz5E7/2fheW6irx8I8p3HAD\nkQmjuQZgo0aD/ZOTcIaZQ4jG4BGbZXnL0D7a7i2W+gT16mqiIb36Ki/p5bjxOGqya6CU+saEPxqN\nuCU317sYgw8ZygxsKt2Ev5z7S8B9QjJ1iqIWRLYe36D+wx8Sr1EBONxu/NZgwF1cwWtmhrSwNDYG\n3seT++8HHn984Rl9ud2kR90b1HNziVEz2640hkEdECbB0DQNo9nozdSZwGEP5sngd+XhpmkM2mzQ\nvfEGMc6IAc2lzVC4zdBUBO9VPz/ZDjpVjLwYb8jyz9Tr64FLLyXZd6w6XxiypVKUKBRomw49JBat\nzhcGhUSBmuwanBg6AYB43I87HLC6PDbP27cDTz3FT0/nGDpy0zReHBrCl/OF+88HG0QSoqkDC0OC\niW9Qv/lm4D/+Q9BDXh8dRblCgRX+sgtAROfly7k9ZHmyYgW59N0lfBlKTOnsJJ1e3gUSYjEJ7EbW\nfsVYB3UBbY0TsxOQS+Ree9JMqRRVSiVaggUOv6nSIbsdGrsd8muuiVxXCMPGko1wWAehLOaeKp2w\nTsDqdgESGmr/zUtRpkRdgiHzEGfXRax61NmE84FxuN3os9lQEcWgDvj2q4spCsUKBXqZbP2aa8h7\n+p13wgZ1rqGjDycnkS6RYHkEBfZrqq/BYf1hDJl9B+6EdL8An8ag/tBDxHjl8OHwx3p4YmAAdwcL\nXPOQXtgsRKMvH+mFwV+C0esXTFDnWmMXVldn/Sz9s7MoNBii1pvOxbrCdZgxXwBypzgz9Y6xDqSK\nViHdKY/qJCcXYpEY5Rnl6BoPNPmPpjtjMMINIfXMzkIX4V7SUDQWNKJ1kGUXwJZgJBJg2zbgj3+M\nKFNnCqSR/O1UUhU+V+O7v3TKNgWHy4FMZSbv5/n0BXWNBvj5z4FvfYv06oWhZWoKBrsd12YHcf1j\nOl/myebNpN37nXfm/VRRI2xQp2nSzhmDwSMGIfIL1xq7kLq6n/wycPw4ikymqHxJB0MpVaJAJoVB\n2cWZqbePtUPkaECOOD7Lyf0lGIZouzNysUGjwYHJSTiCZDLz2XYUCv+FGT5BHQBuu41clYYI6ma7\nGT2mHizNXeq9zepy4fWREdwioOvFH/8uGEZPF/Il8ekL6sCcQdNzz4U99Nd6Pb6l1XIXPdxu4qF+\n0fxtfClqLltfKDDtjD6wg/rUFDlxDovhaFGRUQH9tN5nCjAYXJn6erUaLdPTc5opG7+g3v/xxygq\nKBDcmiqUBnU++ikDZ6bePtYOu7USWmVs3Bn9Ybs1som1pg6QqeRypRKtQeSx+W47CsbSvKXoGOvw\nyk5lSuWc/AIA+fmk9hbw5p/jyOARLM1d6jOd/tbYGBrT0ubl+35F+RXoHO9Ez0QPAOHSC/BpDeoU\nRYoh//mf3O5sHgZtNrw9NoZvFATZonPuHBGdIyiKcHHDDUTO+zi8E2fMcTjIcElAVx87EDJ6egyD\noFQsRZmmjDPw+MOVqad59M0DXFsp2F9QJhP6BwdRuHRp4HFR5qLcKhgcZoyM+NacAaBjtAMzM0Uo\nVccpU8+c21fKMG4dh8PlQI4qJ8ijokeo1sb5bjsKhn+xNCBTB8h4bAjPn1DSy3yQiqW4sf5GvHzq\nZQDCi6TApzWoA6S4+aUvhSya/s5gwM25ucFHlKOkpzNIJMB3vrMwsvVTp0i7ZZq/pQU7EMa4SMpQ\nl8PPLoCxCPAnqK7O/oLatQsDDQ0oyuSvXUZKc8ESTEKK3MKZgLb/00PtkChyUZwSP/mlfbTd5zZm\nL2msNX2AFEuD6eqxytQBX8fGMmYASQD+RdIRux0fTk7i+pz5fxGyvWCSQV0oP/4x8OabnJtPbG43\ndg4O4tuh9OIo6elsvvY14KOPiJ9GIuGUXoCEBPX6nHpexVKj2cgd1IPp6uwBpGeeQX9Fhe8auxhR\nnqKGRJEHdcMBH13dTbtx3tSF1Ox05Me4nZGBS1OPR+cLwwa1Gh9PTXG2nUa7nZENe2cpZ6YeBv9M\n/eXhYVyTlYXUKHQsXVJ8CUyzJpwcOhmR/JIlkcDidmOGR80wViQuqGs0wH/9F+lN9fsFvDI8jGUp\nKagP1Zo0j0nSYKhU5HR+9auoPq1gOIukALf8EmPqsvkVSxmHRn8uUqtxamYmcMquoIC0Z7a2AiYT\nBpTKeemhfMmXyeAUp4Iu2+ujq/dP9iNFlAl5Lh23oJ6bkguH24Exy5wMGQ89nSHD03bqr6tPOZ2Y\ndDqhi9Hfg70wI1sqhZ2mMclzCnPCOgGj2Yja7FrvbdGQXhhElMhbMBUyeMTADCDpE5itJy6oA5xF\nU5qmQ7cxAmSAyWgk2wWizLe+RYba2O3g8SZoUGcydZqOb1DnkakHk18UIhHWpKXhQ38vBrmc9KP/\n7Gdw3XYbBu32mAURNhKKgkZMYTy3zSdTbx9rh8ZVA2TYYz54xEBRFKqzqtE53um9jY87YzTham3s\ntFpRpVLNay9pKJblLUPnWCesDisoihKUrbcNtmFl/kqIRSQrb7dY0C/QFiAcTFDns5uUi0RLMIkN\n6iJRQNF0/9QUpl0ufCaUvvrxx8QnNAYDIjk5ZKDx17+O+lPzYmaGDB4tW8ZxZ3o6KYxOTcUtqNdk\n16BrvCvsdphgmToQRld/800Yv/xlZEqlvFz1okGxMgVjKiPO9894b2sfbYdsuhq2FHvcMnUgUIJh\nNPV4wVUsjda2o2DIJXLUZtfi+NBxAMJ0dX8Trz8ODQm2BQjHivwVUEgUmLJNIS9V+BXApzuoAwFF\n018PDODbOl3oLCHKRVJ/7r2X+MGEmaKOCUePkgnXoEkrI8Ho9THtUWdQSVXIT833tnlxMWOfgcPt\ngFrOPQkaUlf/zGcwkJERFz2doUihRF56I06a5lqd2sfa4RyqwbQ0fpk64OmAYQX1eGrqAOlXPzg1\nBRtLV4+2kRcXjdq5yVIhmXqLoQWrC4iePh9bgFBQFIVbltyCYnUxRJTwELngg/q+fftQV1eHqqoq\nPPnkkwH3v/TSS1i+fDmWL1+OW265BR0d4dvfAvAUTfsPHcI/JyZwa7g/Ugz0dDbl5cDllxODpXgT\nVHphYCSYOGXqQHgJhpFegnVsrE5Lw3mrFWMOh+8dN9wAPPCA7xq7OKCVy1Gc3Yge917vbR1jHZg0\n1EAqopASY4sANuxe9THLGFy0C9mqIMN2MUAjkaDaz84h2kZeXLBteMuUSt5Bne3H/tHkJNLE4ohs\nAcJx26rbsGPdjogeu+CD+t13342dO3di9+7deOqppzDqZ8hVXl6Offv24fjx49iyZQsefvhh4Wfh\nKZo+9be/4ct5eUiThNjdYbcDR44APHeSRsr99wOPPRbYyxxreAX1zk7AYgnrNx0twk2WhpJeAEAq\nEmG9Wh3YE/2NbwDr1/uusYsDOpkMBbnVGEvf472tfbQdE6PlyI+xO6M/bPmFmSSNRzsjm00ZGfiA\nJY/FsvOFgVmYAfDP1IfMQ5i2T6MigyzEmY8tQDi0aVrc0XRHRI9d0EF90lPc2rBhA0pKSnDllVfi\n0KFDPsdcdNFFUHsMmK6++mrs3bs34Hn4YLnlFjy3Zg2+vX9/6AOPHQMqK2M6SQkQ48eaGuDll2P6\nMgEEbWdk0GqBQ4diPnjEhk+mnp8a+uoqlA/MQAIydaU6F66cIxgat8DisGBoZhianJyYW+76U5VZ\nhc7xTrhpd1w7X9iwdXWapuMivyzNXYqu8S5YHVbemjrTykhRFGbdbrw2T1uAWLGgg3pLSwtqa+da\nh+rr63Hw4MGgx//+97/H5z73uYhO5KWREVykVqPigQdCTprGWnph893vAo8+GrDLIWaMjwPDw+TL\nJCg6HYn8cZJeAB5BncMiwJ9QPjDeNXZxQiuTYcTphmJyOf524iA6xzqRLy9HdqUzrkVSAEiTp0Et\nV0M/pSdBPY56OsOlajUOTU/D5nZj0G6HSiSCJtTVchSQS+Soy6nD8aHjKPU4NdJhPmjsoaO3Rkex\nap62ALEi0UE9an+53bt348UXX8SBAweCHvPggw96/39zczOam5sBeNoY9Xo80dBAdnJ9//vA737H\n/SQHDgCf/3y0TjskV1xBJk3//nfgs5+N/eu1thJrgJCSrk5HLBKivBkoFIz8QtM056VusHZGNstT\nUzFst8Ngs0Hr90EcsNniK7/I5dDb7cif3YjdXXuQmrMUme4aSEri2/nCwEgwXeNd2FKxJe6vr5ZI\nUKdS4dDUFNxAzLN0BqZffV3hOihEIgw7HCGL1K2GVnx95dcBRLc3PdrkSqUwOZ2YdbuhiKCja8+e\nPdizZ0/Erx8yqDc1NeH+++/3/vv06dO46qqrAo47ceIEbr/9dvzjH/+ARqMJ+nzsoM6GyeA2azRk\nE3RdHdFbV/ttCqdpEtQffTTUaUcNxujr0UfjE9TD6ukACeo0HddMPVOZCZVUBf20HoXpga87aB5E\ndUl1yOcQURQ2enqi/8Xvw5iIQqnBZkOTrBktI4+gbkwGxUw1xBXx7XxhYIJ651gn7my6M+6vD8xJ\nMHkyWcyLpAyNBY04qCdX/kyxNNjvn6ZptBha8PTVT2PEbse+yUm8FMIfJpGIKMr7HuPc1hYGdsIL\nAA899JCw1w91J6OV79u3D729vXjvvfew1q9AeeHCBdxwww146aWXUFkZ2dDEEwMDuEunI1mgRgP8\n7GdktNN/fPnCBXIbs3E8Dtx0E1ly7ldKiAlh9XRgzpI0jkEdCF0s5SO/ANy6upOmMWS3QxvHYJol\nkWDG5cLS/HXotbXhmPEY3CM1EGUlLlNvH2tPmKYOzPnAxKNIysC24Q2nqw9MDQAACtML8crICK7O\nzAzdUJFgEinBhL02ePzxx7Ft2zZcfvnl2L59O7Kzs7Fz507s9Gz+/vGPf4zx8XHcfvvtWLlyJdaE\njUq+dFut+HhqCv/Kzt6+8hWyXt3fnnf/fuL3EsfuAKmU9K3Hw+iLV6bO2NPGoUedTShdncuhkQsu\nXd1otyNbKoU0ToNHAOlD1srlyCqRQW1bgrc73sZMXw3sqYkJ6jVZNfh44GPQNI0sZXw6mvxhbJKP\nz8zELVNfkrsEXeNdsDgsYTtgGD2doij80WiMem96tElkUA/7Vbdx40acPev7Yd62bZv3/z/77LN4\nNsKF0gDwG70etxUUQMUWkplJ0y1bgOuvn2vdi/HQUTBuu42oQp2dZAlwLNDrieVuSbipZKmUrLWL\nd6aeXYczo9xujXwz9TqVCla3Gz1WK8o82WD/7GxcpRcGrUwGuc4G1b5mjBYfwtDpGlDynoRl6i36\nFjRqG+PezsiQLpGgQaXCBxMTeDLCK26heIulxuMoUxTjiNkc9FgmqLdbLLhgs+HyKNoCxIIFnanH\nkmmnE/9jNGI715aTFSvmiqYMCQrqKSnAHXfE1uiLkV54faZ37iSTuHEkmPxid9kxaZtETkp421OK\nogKy9f44F0kZdHI5kGWHo2sjMhWZmBrKwhidmEy9LKMMIkqUkM4XNs2eeli095KGgrHhDTeAxLQz\nvjg0hK1RtgWIBZ/aoP680YjNGRkoDtbO9vDDwF//StpCpqeBjg5g5cr4nqSHO+8EXnkFGBoKf2wk\n8JJeGK67Dohz8AkmvxjNRuSm5PIep/bX1Qfi3M7IoJXLYU+3Ybz1Mvx09YsoLqUx7HAgN5h/fwyR\niWUoyyhLmJ7OsCkjA+VKZdw8eIC5DphQmjpN02g1tGJVQSOxBVigXS9sPpVB3U3TeFKvD+3GyLbn\nPXiQBPQE9aXm5gJbtwJPPBGb5xcU1BOANk2LWecsxq3jPrfzlV4YNnsKckxPcrw7Xxi0MhlGYUeK\nQgb5hc+gsM6JdLE4rgGNTX1OPWqzasMfGEOuzMjAO3HYPsWGydRLFAoM2GxwcfSqd090I02Whi6X\nAiliMVakpsb1HCPhUxnU/zE+jjSxGJeEmwz9yldIs/g99yREemHzwAPE6Ku3N7rP63aTi5GFHNQp\nikJtdm2ABMO3SMpQplBAJhKh3ZOVxbtHnUHn8bwuLgb27gVyqhMjvTA8f93zuKnhpoS9PkBa8eLV\no86wJHcJzk+ch9s1i2yplNOHnHFmjKUtQLT5VAb1JwYGcFdhYfg/EFM0PXcu4UG9pATYsQO4++7o\nPm9XF7EWz82N7vNGGy4JJtjGo2B4dXWPBJPITN1gs6GoCNi3D0gvS2xQz1BmQCJauC16sUImlqEu\nuw7HjMeC6uqtg61Ynt+E10ZGAmYcFir5MhlGHQ44OLZKxZqEBPWzMzM4PjODm/lGsZUryVjnlvhP\n2/lz333A2bPA229H7zkXuvTCwBXUhWbqgEdX9xRL423mxaCTy2Gw21FcDPT0AAptYgaPksz1qwdr\na2zRt8CZ2YQVqakL0haACwlFIVcmw2C8HQGRoKD+a70e2woKIBeiX155JZCAgpo/cjnw5JMkWxe4\nLzcoiyaoc3TACNXUATLossdkgt3txojDEWAbEA8KZDLobTYUFhENV5KT2Ez900xjQSNaB7mLpS63\nC0eNR9HizFjwven+JEqCiXtQn3A48PLwMG7namNcJGzZQi4efv7z6Dwfr0nSBUB9Tj3OjPj2qvPx\nffFHJ5cjWyrFP8bHkSuTJaQ9LU0igYSikF1C9uM605NBPVEwCzO4MvVzo+eQo67EgekZ3JAdP5/5\naPCpCerPGY24OisLBYvkMioYjz0G/OY3QHf3/J7H4QBOnCBWvwudMk0ZhmeGMWOfWwMXzks9GJs1\nGrxgNCb0clonl0OusyE9HTBRyaCeKJhiaYEEAUG9xdCCzJIbcXVW1oK2BeDiUxHUnTSN3+j1uDvO\nI+6xoKiILNK46675WfOePg0UFwNpadE7t1ghFolRmVmJ9rF27218vNS52JyRgbfGxhJSJGXQymRI\nL7PhBz8AjI6kpp4oZGIZGnIbMDPVHRDUWw2tGEldsSh60/25TKOJ6yAXQ1yD+pujo9DKZGiK8YKL\neLFjB3D+PPDWW5E/R0vL4pBeGNi6usvtwvDMcERBvVmjgYOmExvU5XKYJHbcfz8wZE9m6omksaAR\n/SNHMGK3++xL3TfSA7MoBVeEWkS/QPlcdjauS4BkFNeg/utww0aLDJmMSDB33022y0XC4cOLo0jK\nwO6AGbWMQi1XQyYWHgyzpVIsT3A3A9OrDhBjsWRQTxyrtatx1NiGQrkcfZ5s3e6y46yocFHYAiwk\n4hrUu6xWXL/Iih3huOwysi71Zz+L7PGLpfOFgR3UI2lnZPODkhJsSWAGppXJYLDb4XC7MeF0IjsB\nFgFJCF67AFav+omhk6DyrsDXtUUJPrvFRVyD+natNq4Wq/HiV78Cnn6auDgKwWIhdjZx9uaaF2z5\nJZJ2RjY35uSgIQab4PnCZOojDgeypVKIk9lgwmjIbUDPRA+KpGJvUH+l/wxUYjFWLgJbgIVEXCPs\nNxdxG2ModDrge98Dvv1tYUXTo0eBhoaE2dlERHVWNXpMPXC4HPPO1BMNM1VqtCeLpIlGJpZhSe4S\nSB3j3l71tyZnsVFhXxS2AAuJuAb1T/Ll7V13Af39wF/+wv8xi016AQCFRAFdmg7dE93zztQTjdYz\nVZoski4MGrWNmDX3oGd2FrNuN7rEWnxDF27BQBJ/PnlaSIKQSolFzY4dwMxM+OOBxRnUgTkJJpLB\no4VEgUyGIbudLKFOBvWE01jQiJGxE+iZncXrQwbQ0124onBFok9r0ZEM6lGkuRlYvx74yU/4Hb/Y\n2hkZ6nPqcXb07KKXX2QiETQSCU6azcmgvgBYrV2N84P70TM7i9/1n0fR7FkoJIm3BllsJIN6lPnl\nL4FnniGmkqGYmACMRqA2sRbaEVGXXYczI2cWvfwCEAnmiNmMvE+wNLhYaMhpQP/YSVhcLrRYHNiU\nKg7/oCQBJIN6lCkoAH7wg/BF09ZW4h8jXoTvW6atcbFn6gCgk8lwNJmpLwikYimW5DQgV+xGvr0X\nl2gTs+VssZMM6jHgzjvJ2rtXXw1+zGLV0wGgNrsW7aPtgr3UFyJauRwzLlcyqC8QVmtXo9g9Alr/\nBlZrVyf6dBYlyaAeAyQSUjS9916yWpWLxeLMyIVaoYZaoYZUJEWKLHF95tFA5+knTQb1hUFjQSMy\n9S9hdPB9NOQ0JPp0FiXJoB4jLr0U2LyZ7M7mYjFn6gCRYBa79AKQXnUAyT71BUKjthFvd7yNZXnL\nIBUn6xyRkAzqMeTRR4E//AE442tBDoMBsNmA0tKEnFZUqMupW/TSC0DkFylFIWOR2bp+UmnIaYBE\nJElKL/MgGdRjSF4e8KMfAd/6lm/RlGllXMyDcktzl6JIvfg9OQrlcuTLZMmpxQWCVCzFivwVaNIu\n4svYBEPR9HzcwAW8EEUhTi+1oHA6iczy3e8CW7eS277/faK7P/RQYs9tPthddszYZ5ChzEj0qcwL\nN03juNmMlYvB0P5TQtd4FwrTC5M96h6Exs5kUI8DBw4AN91EFlanp5N1q3fdBVxzTaLPLEmSJAud\nZFBfoHz964BGQxwds7JIgF+Ey1ySJEkSZ4TGzmR1KE78/OfEkXH9erK6LhnQkyRJEguShdI4kZND\nNPSvfnVxtzImSZJkYZMM6nHkm98EamqAdesSfSZJkiT5pJLU1OPM9DRZipGcdUmSJAkfkoXSJEmS\nJPkEITR2JuWXJEmSJPkEkQzqSZIkSfIJIhnUkyRJkuQTRNigvm/fPtTV1aGqqgpPPvkk5zHf+973\nUF5ejsbGRpwLt/InSVTYs2dPok/hE0Pydxldkr/PxBI2qN99993YuXMndu/ejaeeegqjo6M+9x8+\nfBgffvghWltbcd999+G+++6L2ckmmSP5wYkeyd9ldEn+PhNLyKA+OTkJANiwYQNKSkpw5ZVX4tCh\nQz7HHDp0CDfeeCMyMzOxdetWnD17NnZnmyRJkiRJQhIyqLe0tKCWtRm5vr4eBw8e9Dnm8OHDqK+v\n9/47JycH3d3dUT7NJEmSJEnCh3l7v9A0HdBDGcybOulZHV0eWszevQuM5O8yuiR/n4kjZFBvamrC\n/fff7/336dOncdVVV/kcs3btWpw5cwZbtmwBAIyMjKC8vDzguZKDR0mSJEkSe0LKL2q1GgDpgOnt\n7cV7772HtWvX+hyzdu1avPbaaxgbG8OuXbtQV1cXu7NNkiRJkiQhCSu/PP7449i2bRscDgfuuusu\nZGdnY+fOnQCAbdu2Yc2aNVi/fj1Wr16NzMxMvPjiizE/6SRJkiRJEgQ6xuzdu5eu/f/t3T9I61AU\nBvDvDtVFEEGKxaiDDlFbEpBoF1E6OrSCgy4daidx0c6CozgVddCl2XQSBB20W0Fc6hAcgoP/wEVB\nXAzooHCcXnnl+XiNNe9yw/mNWfJxORwS7kmurtPAwABtbm4GfbvQ6+vro0QiQaZpkmVZsuMoJZfL\nUTQapXg8Xrv28vJC6XSaenp6KJPJkOd5EhOq5av1XF1dpe7ubjJNk0zTpOPjY4kJ1XJ/f0+Tk5M0\nNDREExMTtLu7S0T+azTwL0r/NefO/BFCoFKpwHEcVKtV2XGUksvlcHJyUndte3sbvb29uLq6gqZp\n2NnZkZROPV+tpxAChUIBjuPAcZw/9uDY30UiERSLRbiui/39faysrMDzPN81GmhTb2TOnflHvOn8\nLePj4+joqD8ou1qtIp/Po7W1FfPz81yfPny1ngDX53d1dXXBNE0AQGdnJ4aHh3F+fu67RgNt6o3M\nuTN/hBBIpVKYnp7G4eGh7DjK+71GdV3nt58fsLW1hWQyifX1dXieJzuOkq6vr+G6LkZHR33XKP/Q\nSzFnZ2e4uLjA2toaCoUCHh8fZUdSGj9V/qyFhQXc3d2hXC7j5uamNlTBGud5HmZnZ1EsFtHW1ua7\nRgNt6pZl1f3gy3VdJPkst6bEYjEAwODgINLpNI6OjiQnUptlWbVfW1xeXsLiA2SbEo1GIYRAe3s7\nFhcXcXBwIDuSUt7f3zEzM4NsNotMJgPAf40G2tQbmXNnjXt9fa29zj49PaFcLvNGVJPGxsZg2zbe\n3t5g2zY/dDTp4eEBAPDx8YG9vT1MTU1JTqQOIkI+n0c8HsfS0lLtuu8aDXhKhyqVCum6Tv39/bSx\nsRH07ULt9vaWDMMgwzAolUpRqVSSHUkpc3NzFIvFqKWlhTRNI9u2eaSxCb/WMxKJkKZpVCqVKJvN\nUiKRoJGREVpeXqbn52fZMZVxenpKQggyDKNuJNRvjf63M0oZY4wFjzdKGWMsRLipM8ZYiHBTZ4yx\nEOGmzhhjIcJNnTHGQoSbOmOMhcgnmx+mZE+SBv4AAAAASUVORK5CYII=\n"
244 }
244 }
245 ],
245 ],
246 "prompt_number": 61
246 "prompt_number": 61
247 }
247 }
248 ],
248 ],
249 "metadata": {}
249 "metadata": {}
250 }
250 }
251 ]
251 ]
252 } No newline at end of file
252 }
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now