diff --git a/stride/physics/common/devito.py b/stride/physics/common/devito.py index a5e688d1..4dba6bed 100644 --- a/stride/physics/common/devito.py +++ b/stride/physics/common/devito.py @@ -238,7 +238,7 @@ def __init__(self, space_order, time_order, time_dim=None, **kwargs): if space is None: origin = (0,) - extended_shape = (1,) + extended_shape = (2,) extended_extent = (1,) else: extra = space.absorbing @@ -286,7 +286,7 @@ def __init__(self, space_order, time_order, time_dim=None, **kwargs): if parent_grid is not None: dimensions = parent_grid.dimensions time_dimension = devito.TimeDimension(name='time_inner', - spacing=devito.types.Scalar(name='dt_inner', is_const=True)) + spacing=devito.Scalar(name='dt_inner', is_const=True)) self.num_inner = kwargs.pop('num_inner', 1) else: self.num_inner = None @@ -691,7 +691,7 @@ def sparse_function(self, name, num=1, space_order=None, reference_gridpoints, coefficients = self._calculate_hicks(coordinates) - fun = devito.PrecomputedSparseFunction(r=r, + fun = devito.PrecomputedSparseFunction(r=r+1, gridpoints=reference_gridpoints, interpolation_coeffs=coefficients, **sparse_kwargs) diff --git a/stride/physics/common/import_devito.py b/stride/physics/common/import_devito.py index 043740c4..896cb375 100644 --- a/stride/physics/common/import_devito.py +++ b/stride/physics/common/import_devito.py @@ -1,7 +1,8 @@ from devito import * # noqa: F401 -from devito.types import Symbol # noqa: F401 +from devito.types import Symbol, Scalar # noqa: F401 from devito.symbolics import INT, IntDiv # noqa: F401 +from devito import TimeFunction as TimeFunctionOSS # noqa: F401 try: from devitopro import * # noqa: F401 diff --git a/stride/physics/iso_acoustic/devito.py b/stride/physics/iso_acoustic/devito.py index 6a357531..e58ae550 100644 --- a/stride/physics/iso_acoustic/devito.py +++ b/stride/physics/iso_acoustic/devito.py @@ -381,7 +381,7 @@ def before_forward(self, wavelets, vp, rho=None, alpha=None, **kwargs): # ValueError: Cannot access `shape_allocated` as unfinalized - so no size estimate pass - if self._needs_grad(wavelets, rho, alpha): + if self._needs_grad(wavelets, rho, alpha, **kwargs): p_saved_expr = p else: p_saved_expr = self._forward_save(p) @@ -1595,8 +1595,9 @@ def _weights(self): def _dt_max(self, k, h, vp_max): return k * h / vp_max * 1 / np.sqrt(self.space.dim) - def _needs_grad(self, *wrt): - return any(v is not None and v.needs_grad for v in wrt) + def _needs_grad(self, *wrt, **kwargs): + force_raw_wavefield = kwargs.pop('force_raw_wavefield', False) + return any(v is not None and v.needs_grad for v in wrt) or force_raw_wavefield def _forward_save(self, field): return field.dt2 diff --git a/stride/physics/marmottant/devito.py b/stride/physics/marmottant/devito.py index bbd61b7b..5eff28ae 100644 --- a/stride/physics/marmottant/devito.py +++ b/stride/physics/marmottant/devito.py @@ -174,7 +174,10 @@ def run_forward(self, *args, **kwargs): """ functions = dict() + time_bounds = kwargs.get('time_bounds', (0, self.time.extended_num)) self.state_operator.run(dt=self.time.step, + time_m=1, + time_M=time_bounds[1]-1, **functions, **kwargs.pop('devito_args', {})) @@ -286,7 +289,7 @@ def sub_stencil(self, **kwargs): rho = parent_grid.vars.rho except AttributeError: rho = self.dev_grid.vars.rho_sparse - vp2 = parent_grid.vars.vp2 + vp2 = parent_grid.vars.vp**2 inject_term = v_inject.inject(field=p_out.forward, expr=vp2 * self.time.step**2 * rho * inject_scale * v_inject) @@ -481,6 +484,7 @@ def _make_saved_time_function(self, name, num, **kwargs): shape=(self.time.num, num), space_order=self.space_order, time_order=self.time_order, + layers=devito.NoLayers, **kwargs) def _make_interp_function(self, name, value, x_0, num, **kwargs): @@ -519,7 +523,7 @@ def _make_interp_function(self, name, value, x_0, num, **kwargs): return fun, dense_fun, interp_term def _make_interp_time_function(self, name, value, x_0, num, **kwargs): - if not isinstance(value, devito.TimeFunction): + if not isinstance(value, devito.TimeFunctionOSS): fun = self._make_saved_time_function(name, num=num, save=self.time.num) fun.data[:] = value.data.T @@ -541,7 +545,7 @@ def _make_interp_time_function(self, name, value, x_0, num, **kwargs): dense_fun = value - interp_term = fun.interpolate(expr=dense_fun.forward) + interp_term = fun.interpolate(expr=dense_fun) if x_0 is None: raise ValueError('Bubble location x_0 needs to be provided when' diff --git a/stride_examples/examples/marmottant/01_isolated_bubble.ipynb b/stride_examples/examples/marmottant/01_isolated_bubble.ipynb index c41acdf7..6518c720 100644 --- a/stride_examples/examples/marmottant/01_isolated_bubble.ipynb +++ b/stride_examples/examples/marmottant/01_isolated_bubble.ipynb @@ -35,7 +35,7 @@ "outputs": [], "source": [ "from stride import *\n", - "%matplotlib notebook\n", + "%matplotlib widget\n", "\n", "import numpy as np" ] @@ -142,976 +142,24 @@ "outputs": [ { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";/* global mpl */\n", - "\n", - "var comm_websocket_adapter = function (comm) {\n", - " // Create a \"websocket\"-like object which calls the given IPython comm\n", - " // object with the appropriate methods. Currently this is a non binary\n", - " // socket, so there is still some room for performance tuning.\n", - " var ws = {};\n", - "\n", - " ws.binaryType = comm.kernel.ws.binaryType;\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " function updateReadyState(_event) {\n", - " if (comm.kernel.ws) {\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " } else {\n", - " ws.readyState = 3; // Closed state.\n", - " }\n", - " }\n", - " comm.kernel.ws.addEventListener('open', updateReadyState);\n", - " comm.kernel.ws.addEventListener('close', updateReadyState);\n", - " comm.kernel.ws.addEventListener('error', updateReadyState);\n", - "\n", - " ws.close = function () {\n", - " comm.close();\n", - " };\n", - " ws.send = function (m) {\n", - " //console.log('sending', m);\n", - " comm.send(m);\n", - " };\n", - " // Register the callback with on_msg.\n", - " comm.on_msg(function (msg) {\n", - " //console.log('receiving', msg['content']['data'], msg);\n", - " var data = msg['content']['data'];\n", - " if (data['blob'] !== undefined) {\n", - " data = {\n", - " data: new Blob(msg['buffers'], { type: data['blob'] }),\n", - " };\n", - " }\n", - " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", - " ws.onmessage(data);\n", - " });\n", - " return ws;\n", - "};\n", - "\n", - "mpl.mpl_figure_comm = function (comm, msg) {\n", - " // This is the function which gets called when the mpl process\n", - " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", - "\n", - " var id = msg.content.data.id;\n", - " // Get hold of the div created by the display call when the Comm\n", - " // socket was opened in Python.\n", - " var element = document.getElementById(id);\n", - " var ws_proxy = comm_websocket_adapter(comm);\n", - "\n", - " function ondownload(figure, _format) {\n", - " window.open(figure.canvas.toDataURL());\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", - "\n", - " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", - " // web socket which is closed, not our websocket->open comm proxy.\n", - " ws_proxy.onopen();\n", - "\n", - " fig.parent_element = element;\n", - " fig.cell_info = mpl.find_output_cell(\"
\");\n", - " if (!fig.cell_info) {\n", - " console.error('Failed to find cell for figure', id, fig);\n", - " return;\n", - " }\n", - " fig.cell_info[0].output_area.element.on(\n", - " 'cleared',\n", - " { fig: fig },\n", - " fig._remove_fig_handler\n", - " );\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function (fig, msg) {\n", - " var width = fig.canvas.width / fig.ratio;\n", - " fig.cell_info[0].output_area.element.off(\n", - " 'cleared',\n", - " fig._remove_fig_handler\n", - " );\n", - " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", - "\n", - " // Update the output cell to use the data from the current canvas.\n", - " fig.push_to_output();\n", - " var dataURL = fig.canvas.toDataURL();\n", - " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", - " // the notebook keyboard shortcuts fail.\n", - " IPython.keyboard_manager.enable();\n", - " fig.parent_element.innerHTML =\n", - " '';\n", - " fig.close_ws(fig, msg);\n", - "};\n", - "\n", - "mpl.figure.prototype.close_ws = function (fig, msg) {\n", - " fig.send_message('closing', msg);\n", - " // fig.ws.close()\n", - "};\n", - "\n", - "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", - " // Turn the data on the canvas into data in the output cell.\n", - " var width = this.canvas.width / this.ratio;\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] =\n", - " '';\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Tell IPython that the notebook contents must change.\n", - " IPython.notebook.set_dirty(true);\n", - " this.send_message('ack', {});\n", - " var fig = this;\n", - " // Wait a second, then push the new image to the DOM so\n", - " // that it is saved nicely (might be nice to debounce this).\n", - " setTimeout(function () {\n", - " fig.push_to_output();\n", - " }, 1000);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'btn-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " var button;\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " continue;\n", - " }\n", - "\n", - " button = fig.buttons[name] = document.createElement('button');\n", - " button.classList = 'btn btn-default';\n", - " button.href = '#';\n", - " button.title = name;\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message pull-right';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = document.createElement('div');\n", - " buttongrp.classList = 'btn-group inline pull-right';\n", - " button = document.createElement('button');\n", - " button.classList = 'btn btn-mini btn-primary';\n", - " button.href = '#';\n", - " button.title = 'Stop Interaction';\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', function (_evt) {\n", - " fig.handle_close(fig, {});\n", - " });\n", - " button.addEventListener(\n", - " 'mouseover',\n", - " on_mouseover_closure('Stop Interaction')\n", - " );\n", - " buttongrp.appendChild(button);\n", - " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", - " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", - "};\n", - "\n", - "mpl.figure.prototype._remove_fig_handler = function (event) {\n", - " var fig = event.data.fig;\n", - " if (event.target !== this) {\n", - " // Ignore bubbled events from children.\n", - " return;\n", - " }\n", - " fig.close_ws(fig, {});\n", - "};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (el) {\n", - " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (el) {\n", - " // this is important to make the div 'focusable\n", - " el.setAttribute('tabindex', 0);\n", - " // reach out to IPython and tell the keyboard manager to turn it's self\n", - " // off when our div gets focus\n", - "\n", - " // location in version 3\n", - " if (IPython.notebook.keyboard_manager) {\n", - " IPython.notebook.keyboard_manager.register_events(el);\n", - " } else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", - " // Check for shift+enter\n", - " if (event.shiftKey && event.which === 13) {\n", - " this.canvas_div.blur();\n", - " // select the cell after this one\n", - " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", - " IPython.notebook.select(index + 1);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " fig.ondownload(fig, null);\n", - "};\n", - "\n", - "mpl.find_output_cell = function (html_output) {\n", - " // Return the cell and output element which can be found *uniquely* in the notebook.\n", - " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", - " // IPython event is triggered only after the cells have been serialised, which for\n", - " // our purposes (turning an active figure into a static one), is too late.\n", - " var cells = IPython.notebook.get_cells();\n", - " var ncells = cells.length;\n", - " for (var i = 0; i < ncells; i++) {\n", - " var cell = cells[i];\n", - " if (cell.cell_type === 'code') {\n", - " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", - " var data = cell.output_area.outputs[j];\n", - " if (data.data) {\n", - " // IPython >= 3 moved mimebundle to data attribute of output\n", - " data = data.data;\n", - " }\n", - " if (data['text/html'] === html_output) {\n", - " return [cell, data, j];\n", - " }\n", - " }\n", - " }\n", - " }\n", - "};\n", - "\n", - "// Register the function which deals with the matplotlib target/channel.\n", - "// The kernel may be null if the page has been refreshed.\n", - "if (IPython.notebook.kernel !== null) {\n", - " IPython.notebook.kernel.comm_manager.register_target(\n", - " 'matplotlib',\n", - " mpl.mpl_figure_comm\n", - " );\n", - "}\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "05355492d8574467a4644d158a624a94", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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ZYzRP//8o9tuu00RERFq3LixwsLCnF5vs9m0fPlyb3UHpeSVV17RU089JUmKiopSxYoVFR8fr9GjR2vZsmVasGCBw80myt4777yjiRMnSpJatmypmJgYSVJiYqLDdVu2bJEk/f333w7Hd+zYoSZNmlifF1UBKbjSVVHVkeI2InQ1BGvmzJlas2aNJGnVqlXq0aOHpP8LIP7+/srNzVViYqLatWvn8Br8HAIAcG7y2m/oVatW6aefflJubq6MMTp+/Lj++OMPrVq1qsgHzm1r167V+PHj5efnp7lz52rXrl2Kj49XXFycatWqpUWLFmnatGnl3U2f9/PPP1sf//rrr9bH9qDRrVs3Sf8XQBISEhzar1271uFzVxsRFlXl8GQjQlcVkPxfy+rVqyVJWVlZ2rdvnyTp6quvliQlJydb1w0cOFC1a9fW1q1bHZ7LGKNt27ax34ibjDF65plndOedd2rHjh3W8S+//FL/+9//yrFnAIDzndcCyMqVKz16rFixwltdQSmZPHmyjDEaPny47rzzTut4mzZtrODxyiuvcINXRqZMmaL69evriSeesI7l5eVZFQNJ+uuvv6yP7Tft1113nST3A4g7w6yKG4Llqp2rfUC2bdtmffzHH39IkpKSkmSMUYUKFazqTlJSkvU1zZ07V0eOHNG9997r8FyPPPKImjVrpquuusphOJevys3NVWZmpvX5ihUr1LlzZ+tnJj4+XpMnT9ann36ql156SdKZylO/fv00aNAgLVu2TJJ05MgRXX/99YqOjtaJEyckSbt371b79u11zTXXOCxGcurUKR06dKiMvkIAwLnKawGkU6dOHj9w7kpLS7NuOIYNG1bofL9+/RQeHq6UlBStXLmyrLvnczZs2KAnnnhCycnJmjJliv78809J0ubNmx0mZNtvJrOzs3XgwAFJZ4ZHSmf2BMnIyLACSPPmzSW5roBIsqoZ+YdgOauAeLoRYf6bYbv8w8bsX6N9+FXDhg1Vv359Sf9XAfnqq6+s63/55RcdPXpUkrRz5069/fbbkqTff/9ds2bNKvRansrMzDzruW3GGG3atEkpKSlutzl16pSef/55TZs2zePXjYuL05o1a6x269atU82aNXXppZfq1KlTMsaoa9eu+umnn/Tggw9Kkr7//nurvX0xkTlz5ljHXn31VUnSxIkT9eOPP2rDhg365ptvJJ35Q8Rvv/2mX375RZ9//rmkM6uwXXzxxapXr55DZcsYo1OnTnn09RQl/8+W3ZIlS9S1a1d999131rEjR46oR48eatWqlUOl7Ouvv1aLFi00fPhw63mMMXriiSfUqVMnh37n5eXprbfe0iuvvKLTp087vObRo0dZBRIAXGCQNNyyYcMGZWVlKSQkRNHR0YXOBwYGWmPw7ZObz2c5OTlKSkpyOrH+999/17JlywpVeowx+uWXXzRjxgzFxcUVardnzx5t3LjR4eYxNzdXI0aMUOXKlTVw4EBlZGQ4tNm5c6f+/e9/O1Q1JOn99993+Py1116T9H/DlC666CJJZwKJMUYHDx6UMUYBAQG69NJLVaVKFeXl5Wn79u1WABkyZIikM6Hln3/+sZ47f1jI/193KyDFnQsODpZUOIAcP37cIUz9888/OnbsmEMAiYyMlPR/AST/RHtjjBWGv/76a4fnzr95YVxcnHr16qVnnnmmUBVm165dmj59uqZPn679+/dbx+fPn6+wsDBdeumlDsOTpDPf0+eff14NGzZU3759na7Q9frrr6t169a66KKLrPf/yJEjuvPOO3XllVfqxRdf1J9//unw83f//fdr4sSJeuyxx6zvtySlpqZa4VI6M0QtPj7eej9jY2PVrl07dezYUVOnTpUkPffcczp69Ki2b9+uhQsXWtUw6Uxw279/v1Vxks5UyU6cOKEffvjBOrZmzRplZ2c7/MFh/vz5MsY4hJeFCxdKOlOxO3z4sHJzczVlyhRJZ8Jk06ZNFR4eri+//NJqc/LkyWJXNvvnn38cfmb++usvNWjQQNWrV7f+WJKUlKSbbrpJK1as0O23324t3zxhwgR999132rx5sx577DFJZ34ux44dq4SEBH344YdasmSJpDPDAKdMmaKff/5Zffr0scLGv//9bz3yyCN66qmndN9991n9mDdvnqpVq6batWvrp59+so4fOHBAL7/8st55551CgQUAfI3XJqHjwmK/yapfv741abigqKgoLV++vNANWXn67bfftGvXLoWHh6ty5cqqWrWqdu7cqe+//14rV65UpUqV1LNnT91zzz2qX7++jDH68ssv9dhjjyk5OVmNGzfW+PHjdffdd+vYsWN66KGH9Omnn0qSrrzySi1evFjVqlXToUOHdMcddzjccIwaNUpvvPGGbDabxo0bZ/0F/oYbbtCnn36qiIgIvfHGG5o5c6Ykae7cuTp69KgWLlwoPz8/vfbaa5o4caJ1k/XOO+/o/vvv18mTJzVv3jxJ0ksvvaTx48dr4cKFOnXqlDXn4+6777b+Mnvo0CFr+FW9evXk5+enFi1aaPXq1dqyZYt1A9ylSxddfPHF2rNnj2rUqKFly5apa9euhSog9jBRMEjYz9mrH/mHYNmvsU9Oz98uJCRE0pnQl3/yuL36UaNGDQUEBOjAgQPasWOH0wpI/iFY0pnJ95s3b9ayZcvUp08fK4A899xzeumllxQbG6v4+Hg1bNhQvXr10r59+7R48WLt2rVLs2fPVm5urp599lm9+uqrVmB85plntHDhQkVFRWnYsGHKzc3Vpk2b1LdvX/32228KCQnRgQMHNHz4cOuv7YmJiUpJSdHSpUt1+vRpnThxQocPH9b48eMlnVnla9KkSZozZ44GDhyopUuXSjpToZgwYYKuueYaff/990pJSXHYOHLSpEkaOnSo/vzzT/Xu3VsnT57ULbfcogceeEAPP/ywtmzZoqioKP3000967rnnrPf79ddf1+DBgx0W/Pjkk090zTXXOPy7WbVqlUMAMcZo/fr1DsH61KlTWr58ucMQvu+//147duxwmJOzfPlypaWlafHixdaxb7/9Vnv27NFzzz1n/f9i+PDhat++vX788Uc9+OCDysjI0JAhQ/Tkk0/q66+/1l9//aX27durU6dOmjZtmj766CNFREToo48+0g033KD+/ftbrztixAglJCToP//5j/WaJ0+e1FtvvaUXXnjB4b387rvvtGnTJiUnJ2vXrl3W8alTp6pHjx7697//bR37559/9Mknn2jo0KEOIfCTTz7R2LFj1aBBA40ZM0bSmUDdv39/bd68WXl5eerQoYP1sztr1iwtWbJElStX1quvvmo915133qkxY8aofv362rJli9avX68tW7aoevXqioqKUrVq1XTixAmralVweCOAMy655BKHhUlwDjJecu2113r06NKli7e6glIwZcoUI8lcccUVRV4zbtw4I8n07NnT6fmMjAyTmppqPZKTk40kk5qa6q1um/vvv99IKvZhs9lM9+7dTfv27Z2er1+/vomIiCh0/F//+pf55ptvzEUXXWQkmdDQUNO5c2frfKtWrUyrVq0KtWvfvr359ddfTVBQkJFkbr/9dhMaGmokmejoaNOsWTPr2tq1axtJJiQkxOzYscN89NFHRpJp1KiRyc3NNQ0aNDCSzBdffGEaNmxoJJkff/zRREZGGklm7dq15osvvjCSTIcOHYwxxowYMcJIcnh/Tpw4YZYsWWJ9/tBDDxljjHn11VeNJDN48GBjjDHBwcFGkklKSjJvvvmmkWT69+9vjDHGz8/PSDL79+83b7/9tpFk7rjjDmOMMQEBAUaS+fvvv8348eONJDN69GiTlpZmveapU6es793XX39tvcedOnUyksz//vc/M3DgQCPJvPrqq+bQoUPW9y89Pd34+/sbSeY///mPkWQuueQSc/DgQWOz2aw+9+nTx/r6hg8fXuh7c9ddd5krrrjC+vzaa681bdq0sb4H1atXt74vVapUMZJM3759zcMPP2x9P0NCQszo0aNNxYoVjSTTrFkz632zP+zfNz8/PzN9+nQjyQQHB5uJEyea7t27W881ZMgQ88QTTxhJplOnTlZfunTpYipVquTWz3f+R+/evY0kU6FCBSPJBAQEmObNm1s/v/avJ/+/C0lm2LBh1jU33XST9d5IMk2aNLH+fdh/pjp27Gh9jU8//bSRZKpUqWL9+xgxYoT1/bJ/f87mERgYaP0bq1ixogkMDDSSzOTJk63v1b333mskmfDwcPPaa68ZSaZp06bm1ltvNZLMI488Ym688Ubr36K9XytWrLA+Hjp0qJFkWrRoYWbPnm0kmVq1apkePXoYSebOO++0vs46deqYRo0aWd+/6667zkgyYWFhJjw83Pr+t23b1unXZH9NHjx4nN3jvvvu89p9hTHGpKamGsm79y8XOq9VQNxZ1cr+lxvz//+Sg3OXfWhQUFBQkdfYh9IUNbzg5Zdf1vPPP1/6nXOhcePG6tKli9LS0nTs2DH9888/ql27trp27aru3bvr+PHj+t///qcVK1ZYf30OCQnRk08+qfvvv18ff/yxXnnlFesv7Jdeeqk+/PBDVahQQZ07d9b69evVs2dPSVLTpk21aNEiNWnSRD/++KMGDhxo7dJdrVo1zZo1S3Xq1FH37t21bt06XXXVVZKkm2++WZ9++qmWLVumm2++2forc+XKlfXmm29q0KBBuu6667Rs2TKNGjXKGh41fPhw+fn56Y477tCUKVM0bdo07d27V35+fmrfvr0aNmyo5ORk7dmzx5r4ax+a1aJFC0n/N2eifv36CgsL0w033KD3339f9957rzUBvKg5IM4qIEVVOSTHf+/OhmBJZ/5qXKFCBUmOcz2qVKmin376Sdu3b3c4XqNGDQUHByszM1MrV65Ubm6uwsPDdeedd+qBBx7Qzp07NX36dBlj9K9//UuRkZEaMWKEvvrqK02fPt163Z9//lk7d+7U0KFDrb+OR0REaObMmerbt68yMjLUq1cvLV26VBkZGQoNDdXPP/+sXbt26cYbb3QYPtShQwf9+9//Vtu2bXXVVVfp9ttvL7QiV+vWrbVixQrdfffd+v777/XQQw9Jkh588EE999xzks4s5NG1a1d99NFHVrtHH31Ufn5+6tWrl7VwR6dOnfTaa69p5MiR2rBhg26++WaNHz9eN954ozUPYdSoUQoNDdW0adOsIVFPP/20Zs+era1bt1pVjJdfflkPP/yw9fW0aNFC1157rZYuXaoPP/xQknTZZZepU6dO+u6776zhV9dcc40OHDigb7/9Vu+++64k6dprr9WBAwf04Ycf6sUXX5Qk3XTTTerevbtWrVqlGTNmSJK6du2qN998U23btrWGwD3wwAPq37+/Ro4cqYSEBMXExOj666/XsmXL9Pvvv6tNmzaaPn263n77bX355ZfWv7N58+bp8OHDGjZsmCZMmCBJioyM1PTp07VixQrt2LFDY8eOlSSNHDlSTZs21YIFC/Tmm29aP6MvvviiTp06pW+++UZdunSxvr5p06bps88+05YtW3TXXXdJkh566CHddNNN+vbbb62qpCS9++67ql69uq6++mrr+1ehQgWtW7dOfn5+6t69uxITE5WYmKhKlSrpzTffVGRkpN544w0tWbLE+jn+17/+pZYtW+r48ePas2ePjh8/rooVKyo0NFR+fn7srwUUoWnTpuXdBRTHW8lm1apVRT6+/fZb89Zbb5k2bdqY4OBgM23aNLNq1SpvdQWl4HytgLhrx44dZurUqeaNN94w+/fvdziXmppqFi5caH766SeTk5NjHY+LizONGjUyNpvN3Hnnneb48eMO7f7++28zYcIEM3HiRHPw4EHreGxsrPWX82bNmpkjR45Y53bv3m2mTp1qPvjgA4fn27Fjh8Nf0ENDQ01KSorVD+X7y89ll11mjDFm0KBBRpJ58cUXzdixY40kM2bMGGOMMT/88INDm+uvv956rVWrVhlJJioqyhhjzOTJk40k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v1q1ai53QAdwbjubIVjurIJFBQQAAN/mtd/+//rXv7Rz584il+AFcG47myFYrIIFAACK47Xf/uPGjdPx48f18ssve+slAHhR/gASEPB/ozVZBQsAAJSE1+aANGrUSJMnT9azzz6r9evX6+6771bz5s0VFhZWZJv69et7qzsAPFTcPiCe7nZOBQQAAEheDCANGzaUzWaTMUaLFi3SokWLXF5vs9mUk5Pjre4A8JA7Q7BcVUBYBQsAADjjtQBSv3599vcAzmOebETorALCKlgAAMAZrwUQlt8Fzm9lsQ8If6QAAMD38OdHAE7lnwOSnzsrXTEHBAAAFIXf/gCcyl8ByT8/y1WQcLUKlqtwAgAAfIfXhmDZZWZm6tNPP9UPP/yg7du3Kz09XZUqVVKTJk103XXXqX///g43OgDODcHBwdbHa9eutT72NGS4s0QvAADwHV4NIGvWrNFdd92lxMRE64bDLi4uTp999pmef/55zZ49Wx07dvRmVwB4yGaz6d5779X777+vkSNHWsfPNmRQAQEAAJIXA8jmzZvVvXt3nT59WrVr19bw4cPVvHlz1apVS4cPH1ZCQoI+/PBDJSYm6rrrrtNvv/2mVq1aeas7AM7Cv//9b3Xt2lVdunSxjrkaguUqZLhaPQsAAPgOrwWQCRMm6PTp07rrrrv04YcfOqyik/+a4cOH63//+5+effZZzZ8/31vdAXAWAgIC1K9fP4djzqocBSehO1sFi0noAABA8uIk9J9//lnh4eH64IMPnIYP6czSnu+//77Cw8O1atUqb3UFQClyt8rhaonegs8FAAB8h9d++2dlZalp06bFTjAPCQlR06ZNlZ2d7a2uAChFrvYBcWcZXmcragEAAN/htd/+zZs3199//+3WtcnJyWrZsqW3ugKgFLmz2aCrc7m5udZzEUAAAPA9Xvvt/8gjj+jAgQN66623XF739ttv6+DBg3rkkUe81RUApcjdSehFVUeogAAA4Nu8Ngl9wIAB2rdvn5544gn99NNPuv/++9W8eXPVrFlTR44cUUJCgt599119++23mjJlivr37++trgAoRa5ChquVrqiAAAAAyYsBxN/f3/p44cKFWrhwYZHXPvHEE3riiScKHbfZbA5/LQVQ/txZ6crZHiFUQAAAgOTFAFJw48Hyeg4ApcudKoerVbCogAAA4Nu89tvffnNS0sf5wGazuXy4Gl6Wl5ent99+W23btlVYWJiqVq2qbt26acmSJcW+7uzZs9WhQwdFREQoPDxcHTp00Jw5c4pt991336lbt26qWrWqwsLCFB0drenTpxf7fq9du1a9e/dWjRo1VKFCBbVo0UKTJk1SRkZGsa+JC4c78zxYBQsAABTFaxUQX9SxY0enx5s1a+b0eG5urnr37q1vv/1Wfn5+atWqldLT07V8+XItX75cU6dO1dixY522HTVqlN5//33r+W02m9auXWs9/v3vfztt98orr+ipp56SJEVFRalixYqKj4/X6NGjtWzZMi1YsMDpTeGcOXM0ePBg5ebmql69eoqMjNSmTZv07LPPavHixVq1apVCQ0OLfY9w/nM1BItVsAAAQHH47V+Kfv31V6ePiRMnOr1+6tSp+vbbb1WrVi3FxcUpPj5eu3fv1pw5c+Tn56dx48bpjz/+KNTu008/1fvvv6+wsDAtX75cCQkJ2rJli5YtW6awsDC98847+vLLLwu1W7t2rcaPHy8/Pz/NnTtXu3btUnx8vOLi4lSrVi0tWrRI06ZNK9Ru7969GjZsmHJzczVlyhQlJycrLi5OO3bsUNOmTfXHH39o3LhxJX7/cH5wNcyKVbAAAEBx+O1fTrKysjRlyhRJ0htvvKE2bdpY5wYMGKBhw4bJGKPJkycXams/9vTTT6tLly7W8a5du2r8+PGSpEmTJjltZ4zR8OHDdeedd1rH27RpYwWPV155pdCmkFOnTlVmZqauu+46Pf7449YNaIMGDfTf//5XkvTBBx/o0KFDnr8ROO+4mmjuan6I/b9UQAAA8G389i8nK1eu1LFjxxQeHq6+ffsWOj9s2DBJ0g8//KD09HTr+LZt27R582ZJ0tChQwu1sx/766+/tH37dut4Wlqali1b5vDc+fXr10/h4eFKSUnRypUrrePGGC1YsKDIdh06dFCzZs2UnZ3tcqUzXDjc3QekqHCSvwJiPwYAAHwHAaQUjR49Wtddd51uuOEG3X///fruu++KXMlr3bp1kqTLL79cgYGBhc7HxMQoJCREmZmZ+vPPPwu1u+SSS1SrVq1C7WrXrq1GjRpJkn777Tfr+IYNG5SVlaWQkBBFR0cXahcYGKh27doVapeUlKQDBw5IKnqOi/14/na4cLmz0pWr4Vn2CgjVDwAAfBN3AKVo+vTpWrp0qX744Qe999576tGjhzp37qwjR44UunbHjh2SzkwEdyYgIECRkZEO17rTLv85Z+3q16+vgADnaw+4ahccHKy6deu63Q4XLk/3ASkYTuwVEAIIAAC+iTuAUnDDDTfo888/165du5SRkaG///5b06dPV3h4uH7++WfdfPPNhTZUPHbsmCSpSpUqRT6v/Zz92vJsV7ly5SKHyzhr50xmZqbS0tIcHjj/uBMyXIUTKiAAAPg27gBKwZIlS9SvXz9FRUUpODhY9erV04MPPqhly5YpMDBQv/32m+bNm+fQxr53RlBQUJHPGxwcLEk6ffr0edfOmZdfflkRERHWw17hwfklfwXEk1WwqIAAAADJx/cBGTdunBYtWuRxu48++khXXnllsde1a9dOffv21bx58zR//nzdfffd1rmQkBBJZ1bDKkpmZqYkqUKFCuddO2eeeuopjRkzxvo8LS2NEHIecmevD1cT1AkgAAD4Np8OIPv379e2bds8bnfy5Em3r73yyis1b9487dy50+G4O8OWnA2bKq92x48flzHG6TAsd4Z3SWcqJfZqCc5fnu6EXtRGhAQQAAB8k0/fAcyePdu6ifLk0a1bN7dfw77CVcE5II0bN5Yk7d6922m7nJwcJSUlOVzrTrv855y1S0pKKtQXd9plZmZq//79brfDhcvVMrzurIJFBQQAAN/GHYCX2ffsuOiiixyOX3HFFZKk33//vdDGf5IUGxurzMxMBQUF6bLLLivUbufOnU43/jt48KB27drlcK0ktW3bVoGBgcrIyFBcXFyhdtnZ2dau6/nb1a9fX7Vr15YkrV692unXaD+evx0uXO5MNKcCAgAAisIdgBcdOnRIc+bMkaRCVZNrr71WVapUUVpamr788stCbT/88ENJ0vXXX69KlSpZx5s1a6bmzZtLkrULeX72Y61bt1aTJk2s4+Hh4VYf7M+d3xdffKG0tDRVq1ZNnTt3to7bbDbdeuutRbZbs2aNtm7dqsDAQPXq1cvJu4ALjTsTzZkDAgAAisIdQAk99dRTmjNnjk6dOuVwPD4+Xt27d9exY8dUs2ZN3XvvvQ7ng4ODNXbsWEnSmDFjFB8fb52bO3euPvzwQ9lsNj399NOFXnPChAmSpBdffFErVqywjq9YsUIvvfSSwzX5Pf3007LZbJo5c6bDqlzx8fHW5PBx48YVWvHq8ccfV1BQkH788UdNnTrVuulMTEy0dl4fPny4VSnBhc2dfUBcbVJIBQQAAN/GHUAJJSQk6K677lJERISaN2+u9u3bq1GjRrrsssu0ceNG1apVS4sXL1blypULtR03bpxuuOEGHTx4UNHR0WrTpo0aNWqkgQMHKi8vTy+99JLTYU0DBgzQiBEjdPLkSXXt2lUtWrRQixYt1LVrV508eVKjRo3S7bffXqhdx44dNWnSJOXl5WnAgAFq1KiR2rRpo+joaB06dEg9evTQY489VqjdxRdfrBkzZsjPz0/jxo1TZGSkoqOj1bhxY23btk0xMTGaOnVqqbyfOPe5U+VwNgSLCggAAJAIICV23333aeTIkWrVqpWOHj2q2NhY/fPPP2rXrp0mTpyoTZs26fLLL3faNiAgQN98843efPNNtW7dWjt37lRKSoq6dOmib775Rk8++WSRr/vBBx9o1qxZat++vZKTk5WcnKz27dvrk08+0XvvvVdku6efflqLFy9Wly5dlJKSop07d6p169Z68803tXDhQvn7+zttN2jQIP3yyy/q2bOnTp8+rS1btigqKkoTJ07Ur7/+qrCwMM/eOJy33B2CVdQkdCogAAD4Np9ehrc0XH/99br++uvPur2/v78efvhhPfzwwx63HTRokAYNGuRxu549e6pnz54et+vQoYMWL17scTtcWNwZguVql3QqIAAA+DbuAAB4xJ15Hq7CCRUQAAB8G3cAADzizjAre/jIf4wKCAAAkAggADxUsJIhFb3XR/7rqYAAAACJAALAQ84CSFEhQyocTuwVEPvnAADAtxBAAHikYJDIf8ydCoi9XVErrgEAgAsbAQSARzytgBQ1B4QAAgCAbyKAAPCIOyHD2RAs5oAAAACJAALAQ66GYLkTTrKzsx2OAwAA38IdAACPeDLMKv855oAAAACJAALAQ6W1ChYVEAAAfBN3AAA8UrCSIbEKFgAAcB8BBIBHPNlsMP+xgu2ogAAA4Ju4AwDgkZKugmWMcfgcAAD4Fu4AAHjE1RAsd+aH2DEECwAA30QAAeARV1UOd3ZJt6MCAgCAb+IOAIBHXK10VfBc/tBBBQQAAEgEEAAeKjgEK3+wcDXRnAoIAACQCCAAPOQqZBSsgDg7Z0cFBAAA30QAAeARV8OsCs4BcXau4PMAAADfwh0AAI+4U+VwpwJCAAEAwDdxBwDAIwWrHK4CiKsKCEOwAADwTQQQAB5xJ2RQAQEAAEXhDgCAR852CBYVEAAAIBFAAHio4DK8riogrvYBoQICAIBv4g4AgEfsocIYI+nsKyAEEAAAfBN3AAA84qqS4c4EdTuGYAEA4JsIIAA8UjBIOBtm5c4qWFRAAADwTdwBAPCIqyDhySpYVEAAAPBNBBAAHnE1BIuNCAEAQHG4AwDgEVdDsFytgsUyvAAAQCKAAPCQqyFYVEAAAEBxuAMA4BF3VsFiGV4AAFAU7gAAeMSdVbDcOccQLAAAfBMBBIBH3KmAeHoOAAD4Du4AAHikYJBwVeVgGV4AAFAQAQSARzypgLARIQAAKIg7AAAe8aTKwSpYAACgIO4AAHjkbKsc7AMCAAAkAggAD3lS5XB3fggAAPAd3AEA8EhprYJFBQQAAN9EAAHgkdJaBYsKCAAAvok7AAAeKa0hWFRAAADwTQQQAB5xFTJcDcGiAgIAACQCCAAPsQwvAAAoCe4AAHjEk4nm+T8vOOSKIVgAAPgmAggAj5ztUrsFAwcVEAAAfBN3AAA84skyvFRAAABAQQQQAB4524nmVEAAAIBEAAHgIU9WwcofOliGFwAASAQQAB4625WuqIAAAACJAALAQ56sgpU/dBBAAACARAAB4KHSWgWLIVgAAPgmAggAj3iyChYVEAAAUBB3AAA84moyuSfzQ6iAAADgmwggADzCHBAAAFAS3AEA8MjZVkAIIAAAQCKAAPCQqwDiSQWEIVgAAPgmAggAj7ATOgAAKAnuAAB45GyrHFRAAACARABxsGrVKr388su69dZbVa9ePdlsNtlsNv3999/Fts3Ly9Pbb7+ttm3bKiwsTFWrVlW3bt20ZMmSYtvOnj1bHTp0UEREhMLDw9WhQwfNmTOn2HbfffedunXrpqpVqyosLEzR0dGaPn268vLyXLZbu3atevfurRo1aqhChQpq0aKFJk2apIyMDJftEhISNHDgQNWpU0chISFq1KiRxo4dq+PHjxfbV1w47P8u7NwNGa6qIwAAwIcYWCIiIoykQo/k5GSX7XJyckyPHj2MJOPn52cuvfRSc/HFF1vtp06dWmTbe++917quWbNmpnnz5tbnDzzwQJHtXn75Zeu6qKgoc+mllxo/Pz8jyfTq1cvk5uY6bTd79mzj7+9vJJl69eqZtm3bmsDAQCPJtGvXzpw8edJpuxUrVpgKFSoYSaZGjRomOjrahIaGWq9/8OBBl++RM6mpqUaSSU1N9bgtypf9Z02Sue2226zjBw4ccPi3c8cdd1jn8vLyHM59+eWX5dF1AABKhPuXkuNPkPm0bNlS99xzj959912tX7/e7XZTp07Vt99+q1q1aikuLk7x8fHavXu35syZIz8/P40bN05//PFHoXaffvqp3n//fYWFhWn58uVKSEjQli1btGzZMoWFhemdd97Rl19+Wajd2rVrNX78ePn5+Wnu3LnatWuX4uPjFRcXp1q1amnRokWaNm1aoXZ79+7VsGHDlJubqylTpig5OVlxcXHasWOHmjZtqj/++EPjxo0r1C49PV133HGHTp8+rdGjR2vfvn2KjY1VUlKSOnbsqN27d2vYsGFuv184/xU1t8NVBaRg5YQKCAAAPqq8E9C5TG5UQDIzM02VKlWMJDN37txC50eMGGFVJQpq2bKlkWReeumlQudefPFFI8lceumlhc7ddNNNRpIZOXJkoXNz5swxkky1atVMVlaWw7n777/fSDLXXXddoXarV682kkxgYGChasaUKVOMJNO8eXOTk5PjcC4xMdEEBAQYSSY2NrbQ87rCXxDOX0FBQda/j/79+1vHU1JSHKocd911l0M7+8+KJPP111+XdbcBACgx7l9Kjj9BltDKlSt17NgxhYeHq2/fvoXO2ysDP/zwg9LT063j27Zt0+bNmyVJQ4cOLdTOfuyvv/7S9u3breNpaWlatmyZw3Pn169fP4WHhyslJUUrV660jhtjtGDBgiLbdejQQc2aNVN2drYWLlzocG7+/PmSpHvuuafQX7jr16+vbt26SZLTag0uTEVVMorb7dxVtQQAAPgGAkgJrVu3TpJ0+eWXKzAwsND5mJgYhYSEKDMzU3/++Wehdpdccolq1apVqF3t2rXVqFEjSdJvv/1mHd+wYYOysrIUEhKi6OjoQu0CAwPVrl27Qu2SkpJ04MABSVLHjh2dfi324/nb5eTkKDY21uN2uLC5OwTL1cRzhmABAOCbuAMooR07dkiSoqKinJ4PCAhQZGSkw7XutMt/zlm7+vXrKyAgwON2wcHBqlu3rtvt9u7dq+zsbJd9ddYOF7azmQNS3LUAAMA3OL+DhduOHTsmSapSpUqR19jP2a8tz3aVK1cutI+DO+1cvaazds5kZmYqMzPT+jwtLc3l9Th3FVXJKG6pXVfL8gIAAN/AHUAJ2ffOCAoKKvKa4OBgSdLp06fP23au2jpr58zLL7+siIgI62GvDOH8czb7gBT8nAACAIBvuiAqIOPGjdOiRYs8bvfRRx/pyiuvLNFrh4SESJKysrKKvMb+V/8KFSqct+3sbfN/7qqdM0899ZTGjBljfZ6WlkYIOU+d7RwQhmABAIALIoDs379f27Zt87jdyZMnS/za7gw/cjZsqrzaHT9+XMYYp8OwXLWzn69Tp45b7ZwJDg62qiU4vxUVQDxZBYsKCAAAvumCuAOYPXu2jDEeP+zLx5ZE48aNJUm7d+92ej4nJ0dJSUkO17rTLv85Z+2SkpKUk5PjcbvMzEzt37/f7XYNGza0Vvcqqq/O2uHC5mpDQXfnhFABAQDAN10QAaQ8XXHFFZKk33//3VotKr/Y2FhlZmYqKChIl112WaF2O3fu1KFDhwq1O3jwoHbt2uVwrSS1bdtWgYGBysjIUFxcXKF22dnZ1q7r+dvVr19ftWvXliStXr3a6ddiP56/XUBAgLXcryftcGFzFSTcnRNCBQQAAN/EHUAJXXvttapSpYrS0tKcbsT34YcfSpKuv/56VapUyTrerFkzNW/eXJL03//+t1A7+7HWrVurSZMm1vHw8HCrcmN/7vy++OILpaWlqVq1aurcubN13Gaz6dZbby2y3Zo1a7R161YFBgaqV69eDuduu+02SdLHH3+s3Nxch3NJSUnWxoh9+vQp9Ly4MLkbQJgDAgAACiKAlFBwcLDGjh0rSRozZozi4+Otc3PnztWHH34om82mp59+ulDbCRMmSJJefPFFrVixwjq+YsUKvfTSSw7X5Pf000/LZrNp5syZmjdvnnU8Pj7emuQ9bty4QqtWPf744woKCtKPP/6oqVOnyhgjSUpMTLR2Xh8+fLhVKbEbNWqUqlevroSEBI0ZM8aq9KSkpGjAgAHKycnRjTfeqJiYGHfeMlwA3B2CRQUEAAAUYmB58MEHTbVq1ayHJCPJVKlSxTrWq1evQu2ys7PNDTfcYCQZPz8/c+mll5qoqCir/csvv1zka44YMcK6rnnz5qZ58+bW56NGjSqy3eTJk63roqKizKWXXmr8/PyMJNOjRw+Tk5PjtN2sWbOs6+rVq2fatm1rAgMDjSQTExNjTpw44bTdsmXLTEhIiJFkatSoYWJiYkxoaKiRZBo2bGgOHDhQzLtbWGpqqpFkUlNTPW6L8lW3bl3r5+/JJ590OFepUiXr3Pjx4x3ONWnSxDoXGxtbll0GAKBUcP9ScvwJMp/09HSlpKRYD7tjx45Zx1JTUwu1CwgI0DfffKM333xTrVu31s6dO5WSkqIuXbrom2++0ZNPPlnka37wwQeaNWuW2rdvr+TkZCUnJ6t9+/b65JNP9N577xXZ7umnn9bixYvVpUsXpaSkaOfOnWrdurXefPNNLVy4sMjhLYMGDdIvv/yinj176vTp09qyZYuioqI0ceJE/frrrwoLC3ParmvXrlq/fr369+8vm82mjRs3qlatWhozZozi4uIKVU1wYTvbOSBMQgcAADZj/v84HKCMpaWlKSIiQqmpqQoPDy/v7sADDRo0sFZ3e+aZZ/TCCy9Y56pVq6ajR49Kkp577jlNnDjROteqVStt3rxZkvTXX3+pdevWZddpAABKAfcvJUcFBIDHitoJveDnnpwDAAC+gQACwGOlsQoWk9ABAPBN3AEA8NjZbjZIAAEAANwBAPCYu0Ow2AkdAAAURAAB4DF2QgcAAGeLOwAAHnM1BIud0AEAgCsEEAAeczUEizkgAADAFe4AAHisNFbBogICAIBvIoAA8BhzQAAAwNniDgCAx9xdhrfgufxDtwggAAD4Ju4AAHjsbHdCd9UOAAD4BgIIAI+d7RwQKiAAAIA7AAAeO9ud0POjAgIAgG8igADw2NnuhJ6VlWV9HBwc7KXeAQCAcxkBBIDHznYVrISEBOvjwMBAL/UOAACcywggADx2tqtgHThwwPo4fxUFAAD4DgIIAI+d7SpYL7zwgiTpf//7nxd7BwAAzmUEEAAeO9tVsCZMmKB9+/bprrvu8m4HAQDAOYsAAsBjroZZFbcPSN26db3bOQAAcE4jgADwmKsKiKtwAgAAwN0BAI+d7RwQAAAAAggAj7k7BIsKCAAAKIi7AwAec3cIFhUQAABQEAEEgMcYggUAAM4WAQSAx852FSwAAAACCACPMQQLAACcLQIIAI+5OwQrICCgzPoEAADODwQQAB4LDAy0PmYOCAAA8AQBBIDHKlSoYH1ccA4IQ7AAAIArBBAAHgsJCbE+pgICAAA8QQAB4LH8FRDmgAAAAE8QQAB4zNUQLCogAADAFQIIAI+5GoLFHBAAAOAKAQSAx1wNwQoODi7yHAAAAAEEgMdcDcEKDw+3PiaAAACAggggADxWsWJF6+OCISN/AGESOgAAKIgAAsBjrgJIREREkecAAAAIIAA8VqlSJevjgkOw8p8jgAAAgIIIIAA85qoC4uocAAAAAQSAx1yFjLCwsCLPAQAAEEAAeCx/yCg4BCt/OGESOgAAKIgAAsBjoaGh1seuKiAFwwkAAAB3BwA8lj+A5OTkOJxr2LCh9XH+TQkBAAAkifERADxWo0YNXXXVVcrJyVH16tUdzgUHB+vYsWOy2WzMAQEAAIUQQAB4zGaz6eeff7Y+Lqhy5cpl3CMAAHC+IIAAOCvOggcAAEBxmAMCAAAAoMwQQAAAAACUGQIIAAAAgDJDAAEAAABQZgggAAAAAMoMAQQAAABAmSGAAAAAACgzBBAAAAAAZYYAAgAAAKDMEEAAAAAAlBkCCAAAAIAyQwABAAAAUGYIIAAAAADKDAEEAAAAQJkhgAAAAAAoMwQQAAAAAGWGAAIAAACgzASUdwfgu4wxkqS0tLRy7gkAAIB77Pct9vsYeI4AgnKTnp4uSYqMjCznngAAAHgmPT1dERER5d2N85LNEN9QTvLy8rR//35VqlRJNpvNK6+RlpamyMhIJScnKzw83CuvAc/xfTk38X05N/F9OTfxfTk3lcX3xRij9PR01a1bV35+zGY4G1RAUG78/Px00UUXlclrhYeH8wviHMT35dzE9+XcxPfl3MT35dzk7e8LlY+SIbYBAAAAKDMEEAAAAABlhgCCC1pwcLCee+45BQcHl3dXkA/fl3MT35dzE9+XcxPfl3MT35fzA5PQAQAAAJQZKiAAAAAAygwBBAAAAECZIYAAAAAAKDMEEAAAAABlhgCCC9Z3332nbt26qWrVqgoLC1N0dLSmT5+uvLy88u6azzHG6Ndff9Xjjz+u9u3bq3LlygoKClLdunXVp08frVy5sry7iP9vwoQJstlsstlsmjx5cnl3x6fl5uZqxowZ6tSpk6pXr66QkBA1aNBAt9xyixYuXFje3fNJhw8f1tixY9WyZUuFhoYqJCREjRo10siRI7Vz587y7t4Fa8+ePZoxY4ZGjBihNm3aKCAgwO3/R61du1a9e/dWjRo1VKFCBbVo0UKTJk1SRkZGGfQcRTLABejll182kowkExUVZS699FLj5+dnJJlevXqZ3Nzc8u6iT1m2bJn1/fDz8zNNmjQxbdu2NRUrVrSOT5gwoby76fO2bNligoKCrO/JpEmTyrtLPuvo0aOmffv2RpKx2WymadOmJiYmxtSpU8dIMn369CnvLvqcrVu3mpo1axpJJjAw0DRt2tS0atXKhISEGEkmNDTUrFq1qry7eUF6+OGHrf8v5X8U9/+o2bNnG39/fyPJ1KtXz7Rt29YEBgYaSaZdu3bm5MmTZfQVoCAqILjgrF27VuPHj5efn5/mzp2rXbt2KT4+XnFxcapVq5YWLVqkadOmlXc3fYoxRpdcconeffdd/fPPP9q2bZvi4uKUkpKip556SpI0efJkffPNN+XcU99ljNG9996rwMBAdenSpby749Py8vLUq1cvrVu3TrfddpuSkpK0detWrV+/Xvv371dycrJGjx5d3t30OQ888IAOHz6sjh07avfu3dq6das2btyov//+W7169dKpU6c0ZMgQGXY3KHXVq1dXz5499cILL2jJkiXq06dPsW327t2rYcOGKTc3V1OmTFFycrLi4uK0Y8cONW3aVH/88YfGjRtXBr2HU+UcgIBSd9NNNxlJZuTIkYXOzZkzx0gy1apVM1lZWeXQO9+UmppqsrOzizx/4403WtUplI8ZM2YYSebVV181gwcPpgJSjt577z0jyVx77bVUa88RJ0+etKrof/31V6HzR48eNTabzUgyW7ZsKYce+hZ3/h91//33G0nmuuuuK3Ru9erVViXr4MGD3uwqikAFBBeUtLQ0LVu2TJI0bNiwQuf79eun8PBwpaSkMO+gDIWHhysgIKDI8927d5ckbd++vay6hHyOHDmiJ554Qi1atNCjjz5a3t3xeW+99ZYkadKkSfLz49f0uSArK8uaPxgVFVXofJUqVVS1alVJUk5OTpn2DYUZY7RgwQJJzu8FOnTooGbNmik7O5v5VOWE/7PhgrJhwwZlZWUpJCRE0dHRhc4HBgaqXbt2kqTffvutrLuHItgnA1aoUKGce+KbHn30UR09elTvvvuuAgMDy7s7Pm3Hjh3aunWrqlatqg4dOmjhwoW666671LVrV/Xv318zZ85UZmZmeXfT51SuXFmRkZGSpDVr1hQ6v23bNqWkpKhy5cpq3LhxWXcPBSQlJenAgQOSpI4dOzq9xn6ce4HyQQDBBWXHjh2SpPr16xf5F3f7X6/s16J8GWP0xRdfSCr6FwW8Z/ny5ZozZ47uuusuderUqby74/NiY2MlSc2aNdPdd9+tW265RXPmzNGKFSv02WefacSIEbrsssuUmJhYzj31PfYVl4YOHaqvvvpKKSkpSk1N1Q8//KBbbrlFNptNU6ZMUUhISDn3FPbf78HBwapbt67Ta7gXKF8EEFxQjh07JulMObwo9nP2a1G+ZsyYoQ0bNigoKEiPPPJIeXfHp2RkZGjUqFGKiIjQa6+9Vt7dgWT91faPP/7QnDlzNHz4cO3du1cZGRlatmyZoqKitHXrVvXp04clxcvYoEGD9NVXX6l69erq27evqlevrsqVK+uGG25QUFCQvvvuO40YMaK8uwn93+/3ypUry2azOb2Ge4HyRQDBBcU+lCcoKKjIa4KDgyVJp0+fLpM+oWhxcXF6+OGHJZ3562KjRo3KuUe+ZfLkydq5c6defPFF1apVq7y7A0knT56UJGVnZ+vqq6/WjBkz1KBBAwUHB6tr166aP3++bDabYmNj9e2335Zzb32LMUa7d+9WSkqK/P39dckll6hFixYKCgrSpk2b9MEHH+jo0aPl3U2Ie4HzAQEEFxR76TsrK6vIa+zjp5lvUL727Nmjnj17KiMjQwMGDNDYsWPLu0s+JSEhQVOnTlV0dLTuu+++8u4O/r/8w3fs4Ty/Nm3a6Nprr5Ukff/992XWL0ijRo3S448/rsjISO3cuVM7duzQ5s2blZycrJtuukkLFizQtddeq9zc3PLuqs/jXuDcRwDBBcWdkqo7w7TgXQcPHlT37t114MAB9ejRQx9//HGRZXJ4x/3336+cnBy99957rLR0Dsn//6VmzZo5vaZ58+aSzuxzgLIRHx+vGTNmKDAwUJ9++qkaNmxonatZs6bmzJmj6tWr66+//tLnn39efh2FpP/7d3T8+PEi92XhXqB88VsHFxT76iNJSUlFLoW4e/duh2tRto4eParu3btr165d6tSpk7744gtWXioHGzZskM1mU69evVS7dm2Hx2effSZJevXVV1W7dm1r5Th4X9OmTa2P7UNECrIf5y/tZWf16tUyxqhJkybWalj5hYeH6/LLL5ckrV+/vqy7hwLsv98zMzO1f/9+p9dwL1C+CCC4oLRt21aBgYHKyMhQXFxcofPZ2dn6448/JElXXHFFWXfP5504cUI33XSTNm3apHbt2mnx4sWUv8tRbm6uDh06VOhhHz994sQJHTp0SEeOHCnnnvqOtm3bWsNH7DdIBdmP16tXr8z65evS09OLvcb+l3b7vx+Un/r166t27dqSzoRHZ+zHuRcoHwQQXFDCw8PVrVs3SdKHH35Y6PwXX3yhtLQ0VatWTZ07dy7j3vm2zMxM9e7dW7/99ptatmyp77//XpUqVSrvbvks+9AEZ4/BgwdLOrMRnjGGoT5lKCwsTDfddJMkadasWYXOHzx4UD/88IMkqUuXLmXaN19m/yv59u3blZycXOh8Wlqa9cetJk2alGnfUJjNZtOtt94qyfm9wJo1a7R161YFBgaqV69eZd09iACCC9DTTz8tm82mmTNnat68edbx+Ph4jRkzRpI0btw4l6tjoHTl5uaqf//+WrFihRo1aqSlS5dauwYDcPTss8/K399fn376qUMIOX78uO655x6dPn1aUVFR6tevXzn20rdcd911ql69urKzs9W/f3+HUH748GENHDhQ//zzj0JCQtS3b9/y6ygsjz/+uIKCgvTjjz9q6tSpVoUqMTFRQ4cOlSQNHz7cqpSgbNlMUbNzgPPYiy++qAkTJkg6s9lQxYoVtWnTJuXl5alHjx5auHCh/P39y7mXvmPevHkaMGCApDN/SaxZs6bT6+rUqWNtSojyc88992jWrFmaNGmS9e8IZes///mP7r//fhljVL9+fdWsWVNbtmzRqVOnVL16dS1dulSXXXZZeXfTpyxZskS33XabMjIy5O/vr6ioKAUGBmrnzp3KyspSQECAZs6caVUQUXpWr16t3r17W5+fOHFCmZmZCg0NdRjGu2HDBoc5Op988omGDBmivLw81atXTzVr1tSmTZuUnZ2tmJgY/fTTTwoLCyvTrwVnON8qGjjPPf3002rTpo3eeOMNxcbG6uDBg2rdurWGDBmiBx98kPBRxuzLHUpndp0taufZBg0alFWXgHPaqFGj1LJlS02dOlVr167VX3/9pbp166pHjx566qmnmP9RDm688UbFx8fr9ddf14oVK5SUlCRjjOrUqaNrrrlGjzzyiKKjo8u7mxek7OxspaSkFDp+6tQpnTp1yvq84MIMgwYN0iWXXKKXX35Za9as0ZYtWxQVFaU777xTTzzxBLvWlyMqIAAAAADKDHNAAAAAAJQZAggAAACAMkMAAQAAAFBmCCAAAAAAygwBBAAAAECZIYAAAAAAKDMEEAAAAABlhgACAAAAoMwQQAAAAACUGQIIAAAAgDJD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", "text/html": [ - "" + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " ], "text/plain": [ - "" + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, @@ -1155,15 +203,8 @@ "\t * develop-mode=False\n", "\t * mpi=False\n", "\t * log-level=DEBUG\n", - "\t * language=openmp\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/carlos/anaconda3/envs/stride/lib/python3.10/site-packages/devito/types/grid.py:259: RuntimeWarning: divide by zero encountered in true_divide\n", - " spacing = (np.array(self.extent) / (np.array(self.shape) - 1)).astype(self.dtype)\n" + "\t * language=openmp\n", + "(1,) (2,) (0,) None None\n" ] } ], @@ -1192,23 +233,25 @@ "text": [ "Preparing to run state for shot\n", "Operator `marmottant_state` instance configuration:\n", - "\t * subs={h_x: inf}\n", + "\t * name=marmottant_state\n", + "\t * subs={h_x: 1.0, dt: 1e-09}\n", "\t * opt=advanced\n", - "\t * platform=None\n", - "Operator `marmottant_state` generated in 1.45 s\n", - " * lowering.Clusters: 1.08 s (74.6 %)\n", - " * specializing.Clusters: 0.92 s (63.5 %)\n", - " * factorize: 0.73 s (50.4 %)\n", - "Flops reduction after symbolic optimization: [630 --> 416]\n", - "Operator `marmottant_state` fetched `/tmp/devito-jitcache-uid1000/42d2540bcb52f6a80e3aef4063241c7306ce6d08.c` in 0.05 s from jit-cache\n", + "Operator `marmottant_state` generated in 1.31 s\n", + " * lowering.Clusters: 0.72 s (55.1 %)\n", + " * specializing.Clusters: 0.54 s (41.3 %)\n", + " * lowering.IET: 0.30 s (23.0 %)\n", + "Flops reduction after symbolic optimization: [630 --> 256]\n", + "Operator `marmottant_state` fetched `/tmp/devito-jitcache-uid1000/e9e3f685842ec174ed3869ab97a7d760599c89d0.c` in 0.12 s from jit-cache\n", "Running state equation for shot\n", "AutoTuner: could not perform any runs\n", - "Operator `marmottant_state` ran in 0.02 s\n", - "Global performance: [OI=3.39, 0.22 GFlops/s, 0.01 GPts/s]\n", + "Operator `marmottant_state` ran in 0.06 s\n", + "Global performance: [OI=2.05, 0.05 GFlops/s, 0.01 GPts/s]\n", + "Global performance : [0.06 s, 0.01 GPts/s]\n", "Local performance:\n", - " * section0<1> ran in 0.01 s [OI=0.63, 0.01 GFlops/s]\n", - " * section1<9999,1> ran in 0.02 s [OI=3.39, 0.33 GFlops/s, 0.01 GPts/s]\n", - "Performance[mode=advanced] arguments: {'nthreads': 6}\n", + " * section0 ran in 0.03 s [OI=0.63, 0.01 GFlops/s]\n", + " * section1 ran in 0.04 s [OI=2.05, 0.08 GFlops/s, 0.01 GPts/s]\n", + "Performance[mode=advanced] arguments: {'nthreads': 6, 'pthreads': 0}\n", + "Completing state equation run for shot\n", "Completed state equation run for shot\n" ] } @@ -1237,976 +280,24 @@ "outputs": [ { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";/* global mpl */\n", - "\n", - "var comm_websocket_adapter = function (comm) {\n", - " // Create a \"websocket\"-like object which calls the given IPython comm\n", - " // object with the appropriate methods. Currently this is a non binary\n", - " // socket, so there is still some room for performance tuning.\n", - " var ws = {};\n", - "\n", - " ws.binaryType = comm.kernel.ws.binaryType;\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " function updateReadyState(_event) {\n", - " if (comm.kernel.ws) {\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " } else {\n", - " ws.readyState = 3; // Closed state.\n", - " }\n", - " }\n", - " comm.kernel.ws.addEventListener('open', updateReadyState);\n", - " comm.kernel.ws.addEventListener('close', updateReadyState);\n", - " comm.kernel.ws.addEventListener('error', updateReadyState);\n", - "\n", - " ws.close = function () {\n", - " comm.close();\n", - " };\n", - " ws.send = function (m) {\n", - " //console.log('sending', m);\n", - " comm.send(m);\n", - " };\n", - " // Register the callback with on_msg.\n", - " comm.on_msg(function (msg) {\n", - " //console.log('receiving', msg['content']['data'], msg);\n", - " var data = msg['content']['data'];\n", - " if (data['blob'] !== undefined) {\n", - " data = {\n", - " data: new Blob(msg['buffers'], { type: data['blob'] }),\n", - " };\n", - " }\n", - " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", - " ws.onmessage(data);\n", - " });\n", - " return ws;\n", - "};\n", - "\n", - "mpl.mpl_figure_comm = function (comm, msg) {\n", - " // This is the function which gets called when the mpl process\n", - " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", - "\n", - " var id = msg.content.data.id;\n", - " // Get hold of the div created by the display call when the Comm\n", - " // socket was opened in Python.\n", - " var element = document.getElementById(id);\n", - " var ws_proxy = comm_websocket_adapter(comm);\n", - "\n", - " function ondownload(figure, _format) {\n", - " window.open(figure.canvas.toDataURL());\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", - "\n", - " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", - " // web socket which is closed, not our websocket->open comm proxy.\n", - " ws_proxy.onopen();\n", - "\n", - " fig.parent_element = element;\n", - " fig.cell_info = mpl.find_output_cell(\"
\");\n", - " if (!fig.cell_info) {\n", - " console.error('Failed to find cell for figure', id, fig);\n", - " return;\n", - " }\n", - " fig.cell_info[0].output_area.element.on(\n", - " 'cleared',\n", - " { fig: fig },\n", - " fig._remove_fig_handler\n", - " );\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function (fig, msg) {\n", - " var width = fig.canvas.width / fig.ratio;\n", - " fig.cell_info[0].output_area.element.off(\n", - " 'cleared',\n", - " fig._remove_fig_handler\n", - " );\n", - " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", - "\n", - " // Update the output cell to use the data from the current canvas.\n", - " fig.push_to_output();\n", - " var dataURL = fig.canvas.toDataURL();\n", - " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", - " // the notebook keyboard shortcuts fail.\n", - " IPython.keyboard_manager.enable();\n", - " fig.parent_element.innerHTML =\n", - " '';\n", - " fig.close_ws(fig, msg);\n", - "};\n", - "\n", - "mpl.figure.prototype.close_ws = function (fig, msg) {\n", - " fig.send_message('closing', msg);\n", - " // fig.ws.close()\n", - "};\n", - "\n", - "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", - " // Turn the data on the canvas into data in the output cell.\n", - " var width = this.canvas.width / this.ratio;\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] =\n", - " '';\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Tell IPython that the notebook contents must change.\n", - " IPython.notebook.set_dirty(true);\n", - " this.send_message('ack', {});\n", - " var fig = this;\n", - " // Wait a second, then push the new image to the DOM so\n", - " // that it is saved nicely (might be nice to debounce this).\n", - " setTimeout(function () {\n", - " fig.push_to_output();\n", - " }, 1000);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'btn-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " var button;\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " continue;\n", - " }\n", - "\n", - " button = fig.buttons[name] = document.createElement('button');\n", - " button.classList = 'btn btn-default';\n", - " button.href = '#';\n", - " button.title = name;\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message pull-right';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = document.createElement('div');\n", - " buttongrp.classList = 'btn-group inline pull-right';\n", - " button = document.createElement('button');\n", - " button.classList = 'btn btn-mini btn-primary';\n", - " button.href = '#';\n", - " button.title = 'Stop Interaction';\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', function (_evt) {\n", - " fig.handle_close(fig, {});\n", - " });\n", - " button.addEventListener(\n", - " 'mouseover',\n", - " on_mouseover_closure('Stop Interaction')\n", - " );\n", - " buttongrp.appendChild(button);\n", - " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", - " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", - "};\n", - "\n", - "mpl.figure.prototype._remove_fig_handler = function (event) {\n", - " var fig = event.data.fig;\n", - " if (event.target !== this) {\n", - " // Ignore bubbled events from children.\n", - " return;\n", - " }\n", - " fig.close_ws(fig, {});\n", - "};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (el) {\n", - " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (el) {\n", - " // this is important to make the div 'focusable\n", - " el.setAttribute('tabindex', 0);\n", - " // reach out to IPython and tell the keyboard manager to turn it's self\n", - " // off when our div gets focus\n", - "\n", - " // location in version 3\n", - " if (IPython.notebook.keyboard_manager) {\n", - " IPython.notebook.keyboard_manager.register_events(el);\n", - " } else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", - " // Check for shift+enter\n", - " if (event.shiftKey && event.which === 13) {\n", - " this.canvas_div.blur();\n", - " // select the cell after this one\n", - " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", - " IPython.notebook.select(index + 1);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " fig.ondownload(fig, null);\n", - "};\n", - "\n", - "mpl.find_output_cell = function (html_output) {\n", - " // Return the cell and output element which can be found *uniquely* in the notebook.\n", - " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", - " // IPython event is triggered only after the cells have been serialised, which for\n", - " // our purposes (turning an active figure into a static one), is too late.\n", - " var cells = IPython.notebook.get_cells();\n", - " var ncells = cells.length;\n", - " for (var i = 0; i < ncells; i++) {\n", - " var cell = cells[i];\n", - " if (cell.cell_type === 'code') {\n", - " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", - " var data = cell.output_area.outputs[j];\n", - " if (data.data) {\n", - " // IPython >= 3 moved mimebundle to data attribute of output\n", - " data = data.data;\n", - " }\n", - " if (data['text/html'] === html_output) {\n", - " return [cell, data, j];\n", - " }\n", - " }\n", - " }\n", - " }\n", - "};\n", - "\n", - "// Register the function which deals with the matplotlib target/channel.\n", - "// The kernel may be null if the page has been refreshed.\n", - "if (IPython.notebook.kernel !== null) {\n", - " IPython.notebook.kernel.comm_manager.register_target(\n", - " 'matplotlib',\n", - " mpl.mpl_figure_comm\n", - " );\n", - "}\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "6eb9a293335b4e7aafc5484d368b1e3d", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACSXUlEQVR4nOzde3zP9f//8ft7s5PDHFrYnGZWDqvkmFKhTGElpHx1IHTyUVTUR1SK8umslPqkA5US5VgIoUKRRkUOc54zk81hmx2evz/83u/Pe9t779MO7837dr1c3hd7v1+n53vDXvf343mwGGOMAAAAAKAUBPi6AQAAAAD8BwEEAAAAQKkhgAAAAAAoNQQQAAAAAKWGAAIAAACg1BBAAAAAAJQaAggAAACAUkMAAQAAAFBqCCAAAAAASg0BBAAAAECpIYAAAAAAKDUEEAAAAAClhgACAAAAoNQQQAAAAACUGgIIAAAAgFJDAAEAAABQagggAAAAAEoNAQQAAABAqSGAAAAAACg1BBAAAAAApYYAAgAAAKDUEEAAAAAAlBoCCAAAAIBSQwABAAAAUGoIIAAAAABKDQEEAAAAQKkhgAAAAAAoNQQQAAAAAKWGAAIAAACg1BBAAAAAAJQaAggAAACAUkMAAQAAAFBqCCAAAAAASg0BBAAAAECpIYAAAAAAKDUEEAAAAAClhgACAAAAoNQQQAAAAACUGgIIAAAAgFJDAAEAAABQagggAAAAAEoNAQQAAABAqSGAAAAAACg1BBAAAAAApYYAAgAAAKDUEEAAAAAAlBoCCAAAAIBSQwABAAAAUGoIIACAC8aAAQNksVjUsWNHSdKvv/6qu+66S/Xr11dwcLCio6N92j4AgFTB1w0AAKAkTJ48WY8++qhycnJ83RQAgB0qICgTdu/erSlTpuj+++9X8+bNVaFCBVksFo0fP97XTXPLb7/9pnvvvVf169dXSEiILr74Yl199dUaPXq0srOzfd08wO9s3bpVw4YNU9u2bbVo0SIdOXJE+/fv17vvvuvrpgGA36MCgjLhrbfe0ltvveXrZnjlxRdf1LPPPqvc3FzVqlVLzZs31z///KMNGzbo119/1ahRo1S5cmVfNxPwK0eOHNG1116rH374QcHBwbbX69Sp48NWAQAkAgjKiIiICCUkJKht27Zq06aNPvzwQ33zzTe+bpZLH3zwgcaMGaO6devq448/Vnx8vG1benq6li1bppCQEB+2EPBfr732Wp7wAQAoGwggKBPGjBmT5/mMGTN81BL3HT16VCNGjFBoaKiWLFmipk2b5tkeFhamW265xUetA/zbRRddpKuuusrXzQAAOMAYEJRrxhjNmDFD8fHxuuiiixQSEqKYmBg9+uijOnz4cIle++OPP9apU6d09913FwgfAHwrJibG100AABSCCgjKraysLN11112aNWuWJCkqKkr16tVTUlKSJk2apK+//lorV67UpZdeWiLXX7BggSQpISFBSUlJ+u9//6u//vpLQUFBuvLKKzVo0CA1bNiwRK4NwLmKFSv6ugkAgEJQAUG59eyzz2rWrFlq0aKFNmzYoAMHDmjjxo06fvy4hgwZokOHDumuu+4qkWvn5uZqw4YNkqSkpCQ1b95cr7/+upYsWaLvvvtOL774opo0aaLPP/+8RK4PAABQXhFAUC4dO3ZMb775psLDwzV//nxdeeWVtm1hYWGaNGmS2rRpo/Xr1+vnn38u9uunpqYqPT1dkvT000+rQYMG+vHHH5WRkaFdu3bprrvu0rlz53Tffffp999/L/brAwAAlFcEEJRLCxcuVGZmpm666SbVrVu3wPaAgAAlJCRIkn788cdiv/6ZM2dsX+fm5mrevHm6/vrrFRISooYNG+qzzz5Tq1atlJ2drZdeeqnYrw8AAFBeMQYE5dJff/0lSfr111917bXXOtznyJEjkqQDBw7keb1jx45eDVDfvHmzAgMDJUmhoaG217t27VpgnInFYtGwYcN07733aunSpcrNzVVAAHkfAACAAIJyKTU1VZKUnJys5ORkp/tau0pZ7dixo0AocYcxxvZ11apVFRAQoNzcXDVp0sTh/taZsU6dOqWUlBRdfPHFHl8TAADgQsNHsiiXrCuLjx49WsYYp4+pU6fmOXb//v0uj3H0qFDhf3k9KCjINsNVYQsN2r+ek5NTzN8BAACA8okAgnKpWbNmkqRNmzb5rA1XX321JGnXrl0Ot1tfDwkJUURERKm1CwAAoCwjgKBc6t69u4KDg7Vw4UIlJSX5pA133HGHJOnbb7/ViRMnCmz/5JNPJEnXXXddnuoJgJIzdepUGWO0cuVKXzcFAFAIAgjKpaioKA0fPlxZWVm66aabCtxsGGO0bt06Pfzww4VWKIoqISFBrVu31qlTpzRo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0p133qn09HQ9+uijOnDggH7//Xft27dP7du3165duzRo0CCv3ic8l5OToy5duqhBgwZKSEhwGULsx39I57thhYaGKicnR8nJyYUeV5QxIPkHmecPL44qINWqVZPkPICkp6fbttevX98WpuiGBQBA+UAA8UJkZKQ2b96srVu3Ot1v69at2rRpk+2mz1Nt27bVli1b9PDDD6t69eq214ODg/XSSy+pa9eukqQpU6a4db66detqx44devLJJ/O0KSAgQEOHDtWDDz5Y6Pnef/99HTt2TE2bNtUbb7xhuyG96KKL9MUXX6hChQr67rvvlJiY6NV7hWemT5+u5cuXS5IWLVrksvucNYBY1/8ICAhQdHS0JOfdsIqyErqz6oh1HylvBaRq1aqSnAcQ63sJDQ1V1apV1bhxY0muA8iRI0f0xhtv6Ndff3W6HwAAKFkEEC/ceeedys3NVffu3fX999873GfJkiVKSEiQJPXt29er64SHh9sG/zoSHx8v6Xz/d3eEhoaqYsWKhW7v0qVLoeebPXu2pPPTEudfn6F+/frq3LmzJHnd3exCcfbsWa1bt87lCuP2pk6dqtq1a6tJkyb64Ycf3Drmk08+yfPcVQi1dsGyD57ujAPxdCV0RxUQR+NDJMcVEE8CSGRkpCwWiy699FJJzgNIdna2br75Zj3xxBO6/vrrtWnTpkL3tWeM0bvvvqvOnTtr6NChJd7N6/Tp01q1apVHf38AAChvCCBeeOaZZ9SmTRvt3r1b3bp1U0xMjLp166b+/furW7duatSokbp27apdu3apVatWGjNmTIm0IyMjQ5IUFhZWoufLzs7W77//Lul8n3tHrK/br1Bdnu3bt0/vvPOOvvzyS7dvBlevXq2YmBhdddVVqlu3rj766COXx/z2228aOHCgjhw5om3btunmm2/WF1984fSY5ORkrVy5UpK0bNky25/WWa4cyV8BkbwLIK5mwSpsELqjY/Nvl/4XQJxNapC/O1n+Ckh2dnaB8UiLFi3Sxo0bbe9p/PjxhZ7f3ksvvaShQ4fqhx9+0LvvvqvGjRvr3//+t1599VVNmjRJaWlpbp3HHQcPHlRcXJyuu+46RUdHa/HixcV2bm8YY/TGG29owIABtvVizp49q7vuukstW7bU6tWrbfseP35cmZmZvmqqUz/++KOGDx+uVatW2V4zxmjOnDn67LPPbH/HpfN/N1auXJmn26wxRp988okGDBign3/+2fZ6SkqKHnroIfXp00ebN2/Os/+6deu0bt06JkYAgEIwDa8XKlasqBUrVmjMmDH64IMPtGfPHu3Zs6fAPvfff7/Gjx/vtOrgLWOMZs2aJanwUOCpmTNnOjzfnj17bL+krTet+VlfT0pKKpa2FJfff/9d27ZtU3p6ujIyMnT8+HGtWbNGf/zxhzIzM9WxY0c9/fTTatOmje2YL774Qg899JBtJqagoCB16dJFcXFx2rx5s3bu3Kn27dvrxRdfVK1atSSdv4nv0aOHUlJSFBQUpLNnz2rw4MHatm2b/vOf/zgcM5Sdna0HHnhAxhglJCSocuXKmjFjhu666y4lJyerX79+ioyMLFAFs/7cr7/+et14441q1aqVfv/9d82cOVP/+te/9M8//+js2bOqU6eO7RhHFZBLLrlEkvT3338X+v3zdgxI/kHo+bfZH+tpF6z878U+gJw8eVLt27fX33//rfHjx2v06NGSpC+//FKSdN111+nnn3/W3LlzlZqaarueI/v379eLL74oSXr00Ue1bt06/frrr3r55Zdt+3z44YdatWqVqlSpUuh5HPntt9/03HPPqWbNmpowYYJq1Kih3r1721Z4T0tLU69evZSYmOj2Cu/Z2dnavHmzVq5cqZ07d+rqq69Wr169tGDBAr388suqVq2aJk2apCZNmignJ0crV65UdHS0GjVqJOn8z+XUqVO2iQC+/PJLPfHEE5LOL/S4bt06vfbaa7aAfMcdd2jLli2aOnWqHnvsMUVEROjHH39UkyZN9Pvvv6tnz56qVKmS5s2bp0svvVQpKSnq37+/tm/frvHjx+uOO+5Qenq6HnroIa1YsUK33HKLXnrpJYWEhGjJkiVKSUlR+/btbRUuV+bPn68xY8YoMDBQr7zyiuLj47V8+XLddNNNys7O1uTJk/X999+rU6dO+s9//qOnn35akvTdd9/pyy+/1Llz59S5c2etWrVKlStX1pIlS3T11Vdr6tSpGjhwoO178tNPP6lVq1bq1auXfvrpJ0nnQ05iYqIiIyM1cOBAffrpp5Kk/v3766OPPlJgYKAWLlyoIUOG6PTp07r//vv17LPPKiwsTBs3btTkyZP1+++/q3HjxurUqZPatWun1NRUbdu2TXv37lWlSpVUs2ZN1a5dWxUrVlROTo6ys7NtQd8Yk+frkgw+pRGqSvoanN/31yjp88fGxqp169Yleg0UkUGRnDp1yixcuNBMnDjRjB8/3kycONEsXLjQpKWlleh1//vf/xpJJjg42OzYsaPI5/v++++NJCPJ/Pjjj3m2rVu3zrYtPT3d4fELFy40kkzlypULvUZGRoZJTU21PZKTk40kk5qaWuT2F+aBBx6wtd3Z48477zQrVqww99xzj+21uLg4c9lllxV6THR0tNm9e7c5efKkiYuLM5JM69atzalTp8zzzz9v269Vq1amQ4cOJiYmxsTHx5uffvrJGGPMa6+9ZiSZ6tWrmyNHjpicnBzzyCOP5LlGQECA6dSpk/n7779t7+nqq682ksykSZOMMca88cYbRpK5+uqrzaZNm0z16tWNJDNt2rQCx3z99de2137++WcjydSpU6fQ79+tt95qJJkPPvjAGGPMjBkzjCTTsWNHY4wxL7/8spFkBgwYYIwxJjo62kgya9euNTfffLORZKZOnWqMMSYsLMxIMrt37zbGGNOoUSMjyaxevdp2vXHjxhlJZvDgwYW26emnnzaSzNChQ40xxhw6dMhIMhaLxYwaNcr2vatQoYLZvXu3OX36tKlYsaKRZH755RfTpEkTI8l8/PHHTv/uWP8uXHvttSY3N9fk5OSYzz77zPTr18/cddddtu/z448/nue4c+fOmYceeshUrVrVtG/f3vz55595ti9cuNDWHkmmUaNGtu9VtWrVzJYtW8yNN95oJJlrrrnG5OTkGGOM+eeff8yDDz5o7rzzTvPXX3/Zzjd//nzTqVMn2/fX/hEYGJjned26dc2OHTvMLbfcYiSZoKAg8+2335qTJ0+a9u3bG4vFYkaOHGlycnIK/N3/8MMPTbVq1fK8du2115qAgADb89atW5v09PQ8x7Zr187k5uaavn375mnXnDlzbO/T+ggPDzfh4eF5XouNjTUdOnQw3bt3N/369TP333+/ufbaa01kZKRp06aNeeqpp8yQIUMKvO9HHnnEVK1aNc/rERER5q233irwfXr//ffN8OHD87xWp04ds27dOlO5cmXb/7WSTL169cygQYOMJFOxYkVTt25d27/z/v37Fzj33XffbZ588skCr9epU8e0bNnSrf+fePDg4dnj4Ycfdvr/e1GlpqYaqWTvXy50VECKqHLlyuratattQHhpSExM1LBhwySdnwXL+gmmt/bt26e77rpLkjRkyBBdf/31ebZbu2ZJ5wfAO2Jd7T09Pb3Q60yYMEHPP/98kdrqqWbNmumGG25QWFiYwsLCVLlyZbVs2VLt2rWTJL3zzjv67LPP9NVXX+mrr76SdP6T+meeeUZjxoxRhQoV9Pfff2vWrFm2LjJRUVH697//bfuUuWbNmtq8ebMiIyM1d+5cVa5cWc8++6xiYmI0cOBAW/c16XylZOnSpbr11lu1ZMkSSdIrr7yimjVrSpLeeustxcbG6p133tHu3buVnZ2tFStWqH379lq2bJkiIiL0yy+/SJJ69eol6fwYoxEjRuiXX37RZZddZrvWM888o7vvvlsBAQEOKyBXXnmlAgICdODAAR06dMjhZAnFOQtWcQ9Ct7a3Vq1aCg8PV1pamiZMmGDbLzs7Wx9++KGuuOIKnT17Vg0bNtRVV12lu+++W2PGjNFnn32m++67z+E11q1bp88++0yS9MYbb9imEr777rt19913S5IWL16srl276u2339agQYPUrFkzZWVlqW/fvrYxU6tXr9ZVV12l//73v+rTp4/effddPfXUU8rJyVHr1q116NAh7dy5Uzt37lRAQIC+/PJLNWnSRB9//LHi4uK0Zs0affDBBxo0aJD69Olj63L33Xff6b///a/WrFmjd99919bu8PBwtW3bVo0bN9bs2bN16NAhVaxYUQ8++KAWLFigHTt2KDY2Ns/P9/bbb1dkZKStm9Wrr76q48ePa9OmTapSpYoGDhyot956S4MHD5YkNWnSRK+99poSEhJs3ZpuvPFGrV+/XuvXr9ell16aZ2a1X3/9VQMGDNCMGTNksVgUFxenTZs2qWfPnpLO/x86evRoffLJJ7bxZ3Xr1lXDhg3166+/aseOHdqxY0ehfxd+++0323Nr5XL69OmaNGmSpPNVr/nz5+vGG2/M83/nv/71L8XExOiJJ57QQw89ZDvHl19+qbFjx2rbtm1q27atJOnaa6/V/Pnz1bZtW+3YscPWvXLq1Klq3bq1Wrdurd9//932b/3LL79UQECA/u///k+ff/55nvZdd911euqpp7R//34dOHBAFSpU0O23367u3bsrKSlJy5cv18aNGxUREaFLL71UDRs2VHp6uo4ePapDhw4pMzNTFSpUUGBgoAIDA2WxWGxr7Vj/nro7S6O38q99VR6vwfl9f42SPL+1Mo4yzNcJCJ7ZtWuXiYyMNJJMv379TG5ubpHOl5KSYpo1a2ak859qZ2RkFNinPFdA3LFx40aTkJBgIiIiTMeOHc2aNWtcHrN//35b1UOSqVKliklMTCyw344dO8yUKVPM9OnTzQ8//GDuv//+PJ/SJCQkFPozzMnJMdu2bTPt2rUzkkyNGjXMTTfdZCSZTp065dm3Z8+etnPaf+qbmJhocnNzTWhoqJFkdu7cmee4K664wkgy06dPd9iGzp07G0nm888/N8YY8/XXXxvp/Cffxhjz0ksvGUlm0KBBxhhjYmNjjXS+qhEfH28kmc8++8wYY0yVKlWMJFvFrn79+kaSWbdune1606ZNM5JMly5dCv3eW6sF9hWMtm3b2t5zw4YNbZWaWrVqmS5duhhJZtSoUcYYY/bs2WPbd8+ePQXOn5uba9q3b28kmXvvvbfQdhjzvwrRDTfcYDIyMsxtt91mpPOflv/3v/+1/byk8xUa69f33HOPyczMNAcPHjR33HGHadmyZZ7qlDHGvP3227a/W926dTOSTFhYmK2CY/8YPny42bJli61aYowxWVlZ5q+//jL//POPMeb8/x21a9e2/R1ZsmSJ6dixY56/N9bvrfXx5JNPmn/++SfP3ylrZc36aX9cXJxJSUkx77//fp5jP/roI1tFy/p47LHHTEZGhunevbuRZGrWrGn795aVlWVWrlxp1q5da3sfqampZtGiRWbGjBnmww8/NK+//rp57rnnzLRp08zatWvNZ599Zu655x7TqVMn8+WXX9p+fuPHjzdRUVGmd+/e5uTJk7afu/X/zh49ephz586ZnJwc299x2X1q+tdff5lKlSoZSeaiiy6yVe3+/PNPU69ePVOhQgXzwgsv2L7XP/74o6lfv76pVq2a+eijj2yvf/vtt+ayyy4zTZs2NV999ZXt9bNnz5oZM2aYadOmmUOHDjn9Owag7KECUnQEkCLKyckxW7duNWvWrDE//vhjoY/icOjQIVu3le7du5tz584V6XynTp0yV111lZHOdx8orNtYUlKS7Rf0wYMHHe4zffp0I53vnuCu8v4P+PTp0+a1114zTz/9dIEbe2d+/vln88ADD5j//Oc/hQY6e6mpqbafk/Uxf/78PPskJyebq6++2sTGxppVq1bZbnwnTZpkTpw4YTvu7NmzeY6zdme6/fbbHV67Q4cORpLt5mn27NlGkmnfvr0xxpjx48cb6X9dpi699FIjyfz888+27jXWcGPtWrN9+3ZjjLF1Xfn9999t15s7d66RZNq2bVvo96N58+ZGklm0aJHtNWs7JJmJEyeac+fO2QKO9bF582bb/p06dTKSzFNPPWXOnTtnNm7caLsRnDp1qu1mf//+/U5+Mudv6kNCQmwB0Ro+vvvuO2OMMdnZ2Wbs2LG2bkp169Y177//vlsfHGRnZ5s2bdrkCTDz5s0zmZmZ5uGHHzaBgYEmJibGLF682OW5rI4ePWpmzpxpe1/Hjx83ffv2NTfccIP57bffTGZmpu2atWvXNkeOHDHGnO9617hxY/PAAw/YwkFubq7Zs2ePyczMNMac/7/Q+velR48eJjc312RmZtq6/7Vo0cKcPn3aduyOHTvMmTNn3G57cUhNTTV//vlnnu9/amqqmTBhgnnvvfdMdna27fXt27ebKVOmFPg7kJOTY3sf9nJzc4v8gRCA8qG837+UBQQQLx09etQMHDjQVK5c2QQEBDh9BAYGFvl6KSkptn7VHTp0KHAj6amMjAxzww03GEmmWbNm5tixY4Xum5WVZYKCgowks2rVKof7WD/pvOGGG9xuA/+A3ffPP//YPpV/+OGHXd7oWMeg/N///Z/566+/bDfI+a1fv952s33q1KkC26+55hojycyePdsYY8ycOXOMdH68iTH/+7k/8MADxhhjGjdubKTz44isN/nWT6at4we2bdtmjDG2T6M3bNhgu97KlSuNJNO4ceNC31vNmjWNJLNx40bba2fOnDEPPfSQGTVqlMnKyjLGGPPOO+/Ybt5vvvnmPOewBh1JtuqQtXpiDQv/+c9/nH6PrT788ENbdaNq1apm6dKlBfY5duyY2bVrV54KhTt27Nhh2rRpY2rVqmUbS2OVnZ1dIje8p06dMvPnz/fqk/n09HSzadMmh5WYon5gAgBlBfcvRccYEC+kpKToqquu0t69e1W3bl0FBgbq1KlTuuaaa5ScnKwDBw4oJydHYWFhtj7ERXH69Gl169ZNmzZtUps2bbRgwYIiTb2bnZ2tO+64Q8uXL1dMTIyWLl2qiIiIQvevUKGCWrZsqbVr12r16tUOZ92yTsl51VVXed0uFK5atWr6+eeflZaW5nTmJivrGJd169bZ1q6IiooqsF/Lli0VGxurHTt2aN68ebaxQFYlMQuWO9PwFjYGJDs72zbdsP2YlYoVK+q9997Ls+/DDz+sc+fOaffu3QWmwr711ls1cOBAffzxx8rIyFDlypV19uxZ2ziIrl276vHHH3fYhvwGDRqkdu3aafPmzbrhhhsc/luKiIhw+m+sMI0aNdK6descbsu/Hk9xqVy5sm655Ravjg0NDVVcXFye1ypUqJBnbBIAAKwD4oVXXnlFe/bs0dChQ7V3715dfvnlkqSff/5Ze/bs0ZEjR/Tvf/9b2dnZatCggVasWOH1tTIzM9WjRw+tXbtWcXFxWrx4scdTftozxmjAgAGaP3++oqKitGzZMoc3pvlZBzxPnTrVtoCc1b59+2yDY3v37u112+CcxWJxK3xIsk0rvHPnTv3555+SlGdaXvtz9uvXT5Icrj/ibgBxtNZH/m2FLWLoySD0I0eOyBijChUquLyhDwgI0GOPPaa3337bNsjf/n1/+OGH+uOPP7Rp0yalpqYqJSVFc+bM0dy5czV//nzbe3ZHXFyc7rjjDq9CBgAA/oYA4gVrBWLcuHEOt9eoUUMvvfSSpkyZos8++0yTJ0/26jo5OTnq27evli9frkaNGmnp0qWqUaOGy+MmTpyo6OhohyuwDxs2TNOnT1dERISWLVumhg0butWWhx56SBEREdqyZYsef/xx241pSkqK+vXrp+zsbHXt2lWtWrXy7E2iRFSvXt22fsK8efMkOa6ASP8LjStXrlR2dnaebYWthG6tblj/dBRACttmfd3ZSujp6ek6d+5cgbZaZ8CqVatWkWf6sVgsuuKKKxQXF6eAgABVq1ZNt912m3r06FFg7RUAAFB8+C3rhb179yo6Otq2YJf1RigrKyvPp6b33nuvnn76aX300UcaMmSIx9eZOXOm5s6da7tGnz59HO4XGRlpW5xOOr+KtLWN9n755Rfb1JRhYWG6//77C722/arB0vnpPWfMmKGEhAS9/fbb+vLLL1W/fn1t2bJFZ8+eVXR0tD7++GOP3yNKTtu2bbV9+3bbz7JBgwYO94uLi1OVKlV06tQpbdmyxVbRk4pnGl7rNncrIAEBAcrNzdWJEyfyrNwuydadzNGUwQAAoHwggHghKCgoz+rm1i5Rhw8fVr169fLsGxkZqW3btnl1nczMTNvXSUlJha4yXtiNpbPzJScn55mr3x3Wuf7Hjx+v5cuX66+//lKdOnXUs2dPjRkzRtWrV/fofChZbdu2zbMGQWHzogcGBqpVq1ZauXKlfv/9d48CSP4qh33IcNY9S3JcAQkMDFSNGjV0/PhxHTt2rEAAOXDggCTH3ckAAED5QBcsL9StW9fWFUSSravLzz//nGe/M2fOKCkpyevFdgYMGGAbzOvssWfPnjzHjR07VsYYrVy5Ms/rHTt2dOt81ptKR+Li4vTll1/qyJEjyszM1K5du/T6668TPsqg/BMgOFuYqVmzZpJkWwjOyroIpXWhycIWE3RUAXHVBctRBUSSLr74YkmyDTa3RwABAKD8I4B4oW3btjpy5IhOnjwpSbrllltkjNHIkSO1bNkynTlzRrt27dLdd9+tU6dO6eqrr/Ztg+GXmjdvnud5/tmJ7FlDdP4AYq2ahYaGSirYjcpZyHDVBctRBUT6XwA5evRogXZau2ARQAAAKL8IIF7o0aOHcnJytGDBAklSp06d1KNHDx06dEg33XSTwsPDdckll2jevHkKDg7W+PHjfdxi+KPQ0FDdfvvtkqQHHnhAwcHBhe57ySWXSFKBbn7WAJK/AuLJGJDCumA5moZXogICAMCFjgDihVtuuUXJycnq0aOH7bWZM2dq7NixuuSSSxQUFKTw8HB1795dq1evVuvWrX3YWvizzz77TD/99FOBNTLysw8g9l3wXAUQd2bBcrRGiP05vOmC5c7U0QAAoGxiELoXAgICCnwCGxQUpGeffVbPPvusj1oFFBQaGqrrrrvO5X7169eXdH762+PHj+viiy9WTk6ObVpeawDJPw2vJxUQT7tg5Q8gubm52rVrlyQVmOENAACUH1RAvPDCCy9o3LhxDtcpAMqjkJAQ1apVS5Jss6PZz5rmbgXE3Vmw7Cc7cLcCcvDgQaWnp6tChQoEEAAAyjECiBfGjRunGTNmOO1TD5Q31imkHQUQ6yB0d8eA2AcMR9usx9m/bmVdtfzIkSN5XrdOZx0TE+PRKuUAAKBsIYB4oVatWnnWAQEuBIUFEIvFYlsZ3JOV0J11wbIPIPkrINbuYHv37s3z+vr16yVJl112WRHeJQAA8DUCiBc6d+6szZs3KzU11ddNAYpNYQEkJCTE4RgP+z89XQfEOv7D/nWrhg0bSjo/4Dw9PV333nuvatWqpX//+9+SpGuuuaZ43jAAAPAJAogXxo4dq9DQUN13331KT0/3dXOAYpE/gORfhFDybBYsZ+uAOOuCVatWLYWGhio3N1evvPKKPvvsM9uaIAEBAerVq1exvF8AAOAbzILlhZ9++kkPPfSQXn31VcXGxqp3795q2rSpKlWqVOgx9957bym2EPCcswqIVXGtA+KsC5bFYlHDhg21ZcsWjR07VpLUpk0bRUZGqnfv3rYKCQAAKJ8IIF4YMGCALBaLjDE6dOiQ3n33XZfHEEBQ1hUWQKwD0CXXY0DsqxzedsGSpFatWmnLli226y9cuFARERFFfo8AAMD3CCBeuPfee203WsCFwhpADhw4oJycnCJVQOxnunLVBSt/BUSSOnbsqM8//1yS1L9/f8IHAAAXEAKIF6ZOnerrJgDFLioqShUqVFB2drYOHTrkVgDxZBYs+22uKiB33XWXZs2apezsbD333HPF9yYBAIDPEUAASDpfiahbt6727NmjPXv26MyZM5KUZ2yTJyuhe7sOiHS+29XixYuL780BAIAyg1mwANhYVxjfu3evTp8+LUmqXLmybXtRKiD2XbCsFRBH4QMAAFzY+O0PwKZBgwaSzgcQRxUQV2NAHI3zcCecAAAA/0EXLAA21grInj17FBYWJsl5AHE205U7XbAcDUAHAAAXNj5+BGDjqAJi3wXLkzEgdMECAACO8NsfgI2nXbCcjQFxZ3wIFRAAAPwPAQSAjf0g9FOnTklyPgjdnQqIoy5YVEAAAPBf/PYHYFO3bl1ZLBZlZGRo165dkpxPw+vtLFhUQAAA8F8EkGKQm5urY8eOad++fb5uClAkwcHBatiwoSRpzZo1kqQaNWrYtnsyC5azcEIFBAAA/8Vv/yJYuHCh4uPjVaVKFdWuXVsxMTF5tr/44ovq16+fjh075qMWAp5r1qyZJCk1NVWSdNFFF9m2eTILVmHhxH4bAQQAAP/Db38vPfnkk7rlllv0ww8/KCcnR0FBQbabMavIyEh99dVXmjNnjo9aCXguLi4uz/OIiAjb1/YVDvs/3ZkFi0HoAABAIoB45ZtvvtFrr72mqKgoffvttzpz5ozatGlTYL+ePXtKkubPn1/aTQS8lj+AOKqAuDMGhC5YAADAERYi9MK7774ri8WiWbNmqV27doXuV716dTVs2FBJSUml2DqgaK644oo8z61T80pFmwXLURcsKiAAAPgfPn70woYNG1SvXj2n4cPq4osv1oEDB0qhVUDxuPzyy/M8r1Kliu1rV2NAGIQOAABc4be/FzIzM1WtWjW39j179iyf8qJcCQgI0MiRIyVJjz32WJ5t1oAhOR5o7u46IFRAAADwX3TB8kK9evW0Y8cOZWVlKSgoqND9UlNTtXXr1gJ96oGy7uWXX9agQYMUGxub53X7ioUxxq1ZsBxVR6iAAADgv/jt74WbbrpJ6enpevPNN53u98ILLyg7O1sJCQml1DKgeFgsFjVu3LhAhcI+MDircrjqgsU0vAAA+C9++3vhqaeeUpUqVfT0009r5MiR2rp1q21bbm6u/vzzTw0cOFBvvvmmIiIiNGzYMB+2Fig+9l2w3A0ZdMECAAD26ILlhTp16mjevHnq1auX3njjDb3xxhu2bdYuWcYY1ahRQ3PmzMkzjSlQnuXvguXJOiB0wQIAABIVEK916NBBmzZt0vDhw9WgQQNbf3hjjCIjIzV06FD98ccfuuaaa3zdVKDY5O+C5e0sWFRAAADwX1RAiiAyMlKvv/66Xn/9dZ05c0apqamqXLmywsPDfd00oES4OwbEWXXEGEMFBAAAP0YAKSaVKlVSpUqVfN0MoETln4a3sCqHNWDYv2ZfHaECAgCA/+LjRwBuc7cC4iiAsBAhAACQqIC49MILLxT5HBaLRc8880wxtAbwLVdjQKx/Zmdn2/azhhPrn47WCAEAAP6DAOLC2LFjZbFYbDdanrAeRwDBhSL/NLzeVkDoggUAgP8igLjw3HPP+ezaxhitXr1a8+bN088//6ytW7fq7NmzioiI0NVXX62hQ4eqU6dOHp3z8OHDWrJkidatW6d169bpjz/+0Llz5zRo0CB9+OGHTo/NzMzUO++8oy+++ELbtm2TxWJRkyZNdN999+mhhx7i02w/4GoldGsQsa+A0AULAADYI4C44MsAsnz5cnXu3FnS+Ru12NhYVapUSUlJSZo9e7Zmz56tMWPGaNy4cW6fc8aMGXrsscc8bsupU6cUHx+vtWvXymKxqGnTpgoKCtKGDRu0fv16LVq0SHPmzFGFCvyVupB5MwbEWRcsKiAAAPgfPn4sw4wxio2N1eTJk3X8+HFt27ZNiYmJSklJ0ahRoyRJ48eP17fffuv2OcPDwxUfH6/Ro0dr3rx5euSRR9w6btiwYVq7dq2ioqK0YcMGbd68WRs3btSOHTsUFxenb7/9VhMmTPDqfaL8cHcldAahAwCAwvDbv5icPn1ahw4d0unTp4vtnG3bttWWLVv08MMPq3r16rbXg4OD9dJLL6lr166SpClTprh9zoEDB2rJkiUaP368br31VtWoUcPlMSkpKfr0008lSW+88YaaN29u2xYdHW3ruvXqq6/qzJkzbrcF5ZOjSkb+CoijQeiMAQEAABIBpEj++usv3XfffYqKilLVqlVVt25dVa1aVVFRUbrvvvv0559/Fun84eHhTrs0xcfHS5K2b99epOu4snbtWuXk5CggIEA9e/YssL1du3aqU6eOTp06pcWLF5doW+B79kHCnVmw8o8PYSFCAAD8G7/9vTRx4kS1bt1an376qQ4fPmwbkGuM0eHDhzVt2jS1bt1ab7zxRom1ISMjQ5IUFhZWYteQpH/++UeSdPHFFys4ONjhPnXq1JEk/frrryXaFvieo0pG/nEe7s6CRQABAMD/8NvfC/PmzdPjjz+urKws9ezZU8uWLdOBAweUlZWlgwcP6ocfflCvXr2Uk5OjkSNHav78+cXeBmOMZs2aJUlq3759sZ/fXtWqVSVJx48f17lz5xzuc+DAAUnStm3bSrQt8D37Fc3dGQOSvwsWg9ABAPBvBBAvvPLKK7JYLJo0aZK+/vpr3XDDDYqMjFRgYKBq166tTp066euvv9akSZNkjNErr7xS7G2YMmWKNmzYoODgYA0fPrzYz2+vdevWslgsysnJ0bx58wpsX7dunS2AWKsljmRmZiotLS3PA+WPoyDhbAxI/i5YDEIHAMC/8dvfC3/88YciIyP1r3/9y+l+Q4YMUVRUlDZu3Fis109MTNSwYcMknZ8Fq1GjRsV6/vxq165tG/sxfPhwrV271rZt+/btGjBggO15enp6oeeZMGGCqlatanvUq1evxNqMkuOsKxULEQIAAFcIIF4ICQmxjXlwJSoqSiEhIcV27d27dyshIUEZGRnq16+fRowYUWzndua9995T48aNdfDgQbVr104NGzZU48aN1bRpU+3cuVN33HGHJKly5cqFnmPUqFFKTU21PZKTk0ul7She7nTBcjYLFoPQAQDwb/z290K7du20detWp5/2S9LZs2e1bds2XX311cVy3cOHDys+Pl6HDh1S9+7dNXXq1DzrMpSkmjVrau3atRozZoyaNm2qw4cP6+jRo0pISNDatWt1ySWXSDpfLSlMSEiIwsPD8zxQ/rjTBcsaMOz/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XNn2+pgxY3zdTL/3999/m+DgYNvPZNy4cb5ukt86ceKEadeunZFkLBaLady4sWnVqpWJjIw0kkzv3r193US/s3XrVlOzZk0jyQQFBZnGjRubyy67zISGhhpJpmLFimblypW+buYFadiwYbb/l+wfrv6P+vzzz01gYKCRZOrUqWNatGhhgoKCjCTTpk0bc+bMmVJ6B8iPCgguOL/88ouefvppBQQE6IsvvtDOnTv1xx9/KDExUbVq1dL8+fP1xhtv+LqZfsUYo9jYWE2ePFnHjx/Xtm3blJiYqJSUFI0aNUqSNH78eH377bc+bqn/MsbowQcfVFBQkG644QZfN8ev5ebm6tZbb9Wvv/6qXr16ad++fdq6davWr1+vgwcPKjk5WY8++qivm+l3/vWvf+no0aNq3769du3apa1bt+qvv/7S/v37deutt+rs2bO67777ZFjdoNhFREQoISFBL7zwghYtWqTevXu7PGbPnj0aNGiQcnJy9Morryg5OVmJiYlKSkpS48aN9dtvv+nJJ58shdbDIR8HIKDYdevWzUgyDzzwQIFt06dPN5LMRRddZM6dO+eD1vmn1NRUk5WVVej2rl272qpT8I0pU6YYSebll182/fv3pwLiQ++9956RZDp16kS1tow4c+aMrYr+559/Fth+4sQJY7FYjCTz999/+6CF/sWd/6OGDBliJJkuXboU2LZ69WpbJevw4cMl2VQUggoILihpaWlatmyZJGnQoEEFtvfp00fh4eFKSUlh3EEpCg8PV4UKFQrdHh8fL0navn17aTUJdo4dO6annnpKzZo102OPPebr5vi9t956S5I0btw4BQTwa7osOHfunG38YExMTIHt1atXV40aNSRJ2dnZpdo2FGSM0Zw5cyQ5vhe45ppr1KRJE2VlZTGeykf4nw0XlA0bNujcuXMKDQ1Vy5YtC2wPCgpSmzZtJElr164t7eahENbBgGFhYT5uiX967LHHdOLECU2ePFlBQUG+bo5fS0pK0tatW1WjRg1dc801mjdvnu6++27deOON6tu3rz788ENlZmb6upl+p1q1aqpXr54kac2aNQW2b9u2TSkpKapWrZouueSS0m4e8tm3b58OHTokSWrfvr3Dfayvcy/gGwQQXFCSkpIkSfXr1y/0E3frp1fWfeFbxhjNmjVLUuG/KFByfvjhB02fPl133323OnTo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AEoNAQQAAABAqSGAAICX9uzZI4vFoujoaF83pVi0a9dOEREROn36dIlfa+XKlbJYLOrYsWOJXwslp7h+jgMHDlSFChW0devW4mkYgDKNAAIAhZg4caLGjh2rkydP+ropJW7WrFlau3atHn/8cVWuXNnXzYGfefrppyVJo0aN8nFLAJQGAggAFGLixIl6/vnnCw0gQUFBaty4sRo1alS6DStmubm5Gj16tMLDwzV06NBSuWbFihXVuHFj1a9fv1Suh7ItNjZWffr00dy5c/Xrr7/6ujkASlgFXzcAAMqrOnXqXBBdRr7//nslJSWpf//+Cg8PL5Vrtm3b9oL43qH49O/fXzNmzNC7776rdu3a+bo5AEoQFRAA8HMffPCBJOn//u//fNwS+LPOnTsrIiJC33zzjV90ewT8GQEEAPKZOnWqLBaL9u7dK0lq2LChLBaL7bFy5UpJzgehW/eVpDlz5uiaa65R5cqVVatWLfXv31+HDx+27fvJJ5+oVatWqlSpkmrWrKmHHnpIqamphbZv//79evTRR3XppZcqLCxM1apVU6dOnfT11197/F7PnDmj7777TqGhobrhhhsc7lMS78XV4OWzZ8/qtddeU7t27VStWjVVrFhRl1xyie655x79+OOPefaNjo6WxWLRnj17tGLFCnXt2lURERF5flaStG/fPj388MNq2LChQkJCFBERoa5du2rRokUO22CM0aeffqrrr79e1apVU3BwsGrXrq1WrVrpySef1P79+x0eM2PGDMXHx+uiiy5SSEiIYmJi9Oijj+b5PuV34sQJPffcc2rRooXCw8NVuXJlNW3aVA899JA2bNhQYP+UlBQ9+eSTaty4scLCwlS9enV17NhR06dPlzGmwP7Wv9MDBgxQZmamxo4dq9jYWIWGhqpevXp6/PHHdebMmULbZ/25V6pUSRdddJESEhK0fv36QveXpFWrVqlnz56qXbu2goKCVKNGDTVt2lSDBw922M2qQoUKuummm5Senq758+c7PTeAcs4AAPJYuHChad++vQkJCTGSTOvWrU379u1tj8TERGOMMbt37zaSTIMGDQqcQ5KRZN5++20jydStW9c0b97cds5mzZqZ9PR08+ijjxpJJiYmxsTFxZkKFSoYSaZDhw4mNze3wHlXrlxpqlataiSZsLAwc/nll5t69erZrvfEE0949F6XLl1q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", "text/html": [ - "" + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " ], "text/plain": [ - "" + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, @@ -2254,7 +345,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.5" + "version": "3.11.8" } }, "nbformat": 4, diff --git a/stride_examples/examples/marmottant/02_embedded_bubble.ipynb b/stride_examples/examples/marmottant/02_embedded_bubble.ipynb index f544365c..dd18bfe5 100644 --- a/stride_examples/examples/marmottant/02_embedded_bubble.ipynb +++ b/stride_examples/examples/marmottant/02_embedded_bubble.ipynb @@ -36,7 +36,8 @@ "outputs": [], "source": [ "from stride import *\n", - "%matplotlib notebook\n", + "from stride_private import *\n", + "%matplotlib widget\n", "\n", "import numpy as np" ] @@ -245,65 +246,86 @@ "output_type": "stream", "text": [ "(ShotID 0) Preparing to run state for shot\n", + "(ShotID 0) Selected boundary type complex_frequency_shift_PML_2\n", "(ShotID 0) Estimated bandwidth for the propagated wavelet 1.600-2.400 MHz\n", - "(ShotID 0) Spatial grid spacing (0.050 mm | 12.833 PPW) is below dispersion limit (0.128 mm | 5.000 PPW)\n", + "(ShotID 0) Using DRP scheme\n", + "(ShotID 0) Spatial grid spacing (0.050 mm | 12.833 PPW) is below dispersion limit (0.214 mm | 3.000 PPW)\n", "(ShotID 0) Time grid spacing (0.005 μs | 15%) is below OT2 limit (0.012 μs)\n", "(ShotID 0) Selected undersampling level 20\n", "(ShotID 0) Selected time stepping scheme OT2\n", + "(ShotID 0) Expected wavefield size 2.3193 GB\n", "Operator `acoustic_iso_state` instance configuration:\n", - "\t * subs={h_x: 5e-05, h_y: 5e-05, h_z: 5e-05}\n", + "\t * name=acoustic_iso_state\n", + "\t * subs={h_x: 5e-05, h_y: 5e-05, h_z: 5e-05, dt: 5e-09}\n", "\t * opt=advanced\n", - "\t * platform=None\n", - "Operator `acoustic_iso_state` generated in 18.22 s\n", - " * lowering.Clusters: 11.51 s (63.2 %)\n", - " * specializing.Clusters: 6.70 s (36.8 %)\n", - " * fuse: 4.36 s (24.0 %)\n", - " * lowering.Expressions: 4.26 s (23.4 %)\n", - "Flops reduction after symbolic optimization: [5668 --> 1306]\n", - "Operator `acoustic_iso_state` fetched `/tmp/devito-jitcache-uid1000/09185d1cbee216e49094c2430518fc1f3f7a43d1.c` in 0.67 s from jit-cache\n", + "\t * devicecreate=(p(t, x, y, z), p_saved(time_under0, x, y, z))\n", + "Operator `acoustic_iso_state` generated in 33.59 s\n", + " * lowering.Clusters: 26.59 s (79.2 %)\n", + " * specializing.Clusters: 16.18 s (48.2 %)\n", + " * fuse: 11.99 s (35.8 %)\n", + "Flops reduction after symbolic optimization: [1860 --> 1249]\n", + "Operator `acoustic_iso_state` fetched `/tmp/devito-jitcache-uid1000/79e5ef08afb9d889d9de0bd310320f97556f9534.c` in 0.56 s from jit-cache\n", + "Operator `acoustic_iso_state_save` instance configuration:\n", + "\t * name=acoustic_iso_state_save\n", + "\t * subs={h_x: 5e-05, h_y: 5e-05, h_z: 5e-05, dt: 5e-09}\n", + "\t * opt=advanced\n", + "\t * devicecreate=(p(t, x, y, z), p_saved(time_under0, x, y, z))\n", + "Operator `acoustic_iso_state_save` generated in 29.80 s\n", + " * lowering.Clusters: 22.83 s (76.7 %)\n", + " * specializing.Clusters: 13.90 s (46.7 %)\n", + " * fuse: 10.31 s (34.7 %)\n", + "Flops reduction after symbolic optimization: [1860 --> 1249]\n", + "recompiling for non-existent cache dir (/tmp/devito-codepy-uid1000/cf34e4c/472372fba7795fec518f2b5350679d8e).\n", + "gcc -march=native -O3 -g -fPIC -Wall -std=c99 -Wno-unused-result -Wno-unused-variable -Wno-unused-but-set-variable -ffast-math -shared -fopenmp /tmp/devito-jitcache-uid1000/cf34e4cd438053ba83e1143c86979972b8352954.c -lm -o /tmp/devito-jitcache-uid1000/cf34e4cd438053ba83e1143c86979972b8352954.so\n", + "Operator `acoustic_iso_state_save` jit-compiled `/tmp/devito-jitcache-uid1000/cf34e4cd438053ba83e1143c86979972b8352954.c` in 3.79 s with `CustomCompiler`\n", "(ShotID 0) Using inhomogeneous density\n", "(ShotID 0) Running state equation for shot\n", - "AutoTuner: run took 0.329654 (s) in 5 timesteps\n", - "AutoTuner: run took 0.340834 (s) in 5 timesteps\n", - "AutoTuner: run took 0.343902 (s) in 5 timesteps\n", - "AutoTuner: run took 0.343749 (s) in 5 timesteps\n", - "AutoTuner: run took 0.349124 (s) in 5 timesteps\n", - "AutoTuner: run took 0.355063 (s) in 5 timesteps\n", - "AutoTuner: run took 0.358047 (s) in 5 timesteps\n", - "AutoTuner: run took 0.369792 (s) in 5 timesteps\n", - "AutoTuner: run took 0.370216 (s) in 5 timesteps\n", - "AutoTuner: run took 0.384957 (s) in 5 timesteps\n", - "AutoTuner: run took 0.348787 (s) in 5 timesteps\n", - "AutoTuner: run took 0.355744 (s) in 5 timesteps\n", - "AutoTuner: run took 0.352925 (s) in 5 timesteps\n", - "AutoTuner: run took 0.358633 (s) in 5 timesteps\n", - "AutoTuner: run took 0.363869 (s) in 5 timesteps\n", - "AutoTuner: run took 0.382335 (s) in 5 timesteps\n", - "AutoTuner: run took 0.355765 (s) in 5 timesteps\n", - "AutoTuner: run took 0.354143 (s) in 5 timesteps\n", - "AutoTuner: run took 0.349894 (s) in 5 timesteps\n", - "AutoTuner: run took 0.369859 (s) in 5 timesteps\n", - "AutoTuner: run took 0.370375 (s) in 5 timesteps\n", - "AutoTuner: run took 0.371509 (s) in 5 timesteps\n", - "AutoTuner: run took 0.356544 (s) in 5 timesteps\n", - "AutoTuner: run took 0.359466 (s) in 5 timesteps\n", - "AutoTuner: run took 0.348482 (s) in 5 timesteps\n", - "AutoTuner: run took 0.356375 (s) in 5 timesteps\n", - "AutoTuner: run took 0.341489 (s) in 5 timesteps\n", - "AutoTuner: run took 0.351965 (s) in 5 timesteps\n", - "AutoTuner: run took 0.347255 (s) in 5 timesteps\n", - "AutoTuner: run took 0.342511 (s) in 5 timesteps\n", - "AutoTuner: selected \n", - "Operator `acoustic_iso_state` ran in 82.11 s\n", - "Global performance: [OI=0.01, 18.00 GFlops/s, 0.07 GPts/s]\n", + "AutoTuner: run took 0.181665 (s) in 5 timesteps\n", + "AutoTuner: run took 0.219824 (s) in 5 timesteps\n", + "AutoTuner: run took 0.209254 (s) in 5 timesteps\n", + "AutoTuner: run took 0.221023 (s) in 5 timesteps\n", + "AutoTuner: run took 0.277745 (s) in 5 timesteps\n", + "AutoTuner: run took 0.211388 (s) in 5 timesteps\n", + "AutoTuner: run took 0.213780 (s) in 5 timesteps\n", + "AutoTuner: run took 0.226255 (s) in 5 timesteps\n", + "AutoTuner: run took 0.201738 (s) in 5 timesteps\n", + "AutoTuner: run took 0.208525 (s) in 5 timesteps\n", + "AutoTuner: run took 0.184190 (s) in 5 timesteps\n", + "AutoTuner: run took 0.190233 (s) in 5 timesteps\n", + "AutoTuner: run took 0.188832 (s) in 5 timesteps\n", + "AutoTuner: run took 0.196997 (s) in 5 timesteps\n", + "AutoTuner: run took 0.223017 (s) in 5 timesteps\n", + "AutoTuner: run took 0.236120 (s) in 5 timesteps\n", + "AutoTuner: run took 0.192039 (s) in 5 timesteps\n", + "AutoTuner: run took 0.193979 (s) in 5 timesteps\n", + "AutoTuner: run took 0.215875 (s) in 5 timesteps\n", + "AutoTuner: run took 0.232399 (s) in 5 timesteps\n", + "AutoTuner: run took 0.215103 (s) in 5 timesteps\n", + "AutoTuner: run took 0.230530 (s) in 5 timesteps\n", + "AutoTuner: run took 0.180182 (s) in 5 timesteps\n", + "AutoTuner: run took 0.184600 (s) in 5 timesteps\n", + "AutoTuner: run took 0.205180 (s) in 5 timesteps\n", + "AutoTuner: run took 0.215435 (s) in 5 timesteps\n", + "AutoTuner: run took 0.181535 (s) in 5 timesteps\n", + "AutoTuner: run took 0.234917 (s) in 5 timesteps\n", + "AutoTuner: run took 0.237129 (s) in 5 timesteps\n", + "AutoTuner: run took 0.186503 (s) in 5 timesteps\n", + "AutoTuner: selected \n", + "Operator `acoustic_iso_state_save` ran in 55.70 s\n", + "Global performance: [OI=0.01, 16.38 GFlops/s, 0.10 GPts/s]\n", + "Global performance : [55.70 s, 0.10 GPts/s]\n", "Local performance:\n", - " * section0<160> ran in 0.01 s [OI=0.13, 0.22 GFlops/s]\n", - " * section1<160> ran in 0.01 s [OI=0.13, 0.22 GFlops/s]\n", - " * section2<160> ran in 0.01 s [OI=0.13, 0.32 GFlops/s]\n", - " * section3<<1349,20,160,160>,<1349,20,160,160>,<1349,20,160,160>,<1349,20,160,160>,<1349,20,160,160>,<1349,20,160,160>,<1349,160,20,160>,<1349,160,20,160>,<1349,160,20,160>,<1349,160,20,160>,<1349,160,20,160>,<1349,160,20,160>,<1349,160,160,20>,<1349,160,160,20>,<1349,160,160,20>,<1349,160,160,20>,<1349,160,160,20>,<1349,160,160,20>,<1349,15,15,17,17,129>,<1349,15,15,8,8,120>,<1349,29,169,129>,<1349,20,160,120>,<1349,29,169,129>,<1349,20,160,120>,<1349,169,29,129>,<1349,160,20,120>,<1349,169,29,129>,<1349,160,20,120>,<1349,169,169,29>,<1349,160,160,20>,<1349,169,169,29>,<1349,160,160,20>> ran in 81.85 s [OI=0.01, 18.06 GFlops/s, 0.13 GPts/s]\n", - " * section5<<1349,1>,<1349,1>,<1349,1>,<1349,1>,<1349,1>,<1349,1>,<1349,1>,<1349,1>,<1349,1>> ran in 0.01 s [OI=34.60, 0.30 GFlops/s, 0.01 GPts/s]\n", - " * section6<<1349,120>,<1349,120>,<1349,120>,<1349,120>,<1349,120>,<1349,120>,<1349,120>,<1349,120>,<1349,120>,<1349,120>> ran in 0.01 s [OI=45.00, 18.21 GFlops/s]\n", - "Performance[mode=advanced] arguments: {'nthreads': 6, 'nthreads_nonaffine': 6, 'i2x0_blk0_size': 8, 'i2y0_blk0_size': 8}\n", + " * section0 ran in 0.01 s\n", + " * section1 ran in 0.01 s\n", + " * section2 ran in 0.01 s\n", + " * section3 ran in 24.33 s [OI=0.01, 19.42 GFlops/s, 0.18 GPts/s]\n", + " * section4 ran in 7.82 s [OI=3.04, 21.77 GFlops/s, 0.30 GPts/s]\n", + " * section5 ran in 23.28 s [OI=0.01, 11.58 GFlops/s, 0.15 GPts/s]\n", + " * section6 ran in 0.01 s\n", + " * section7 ran in 0.02 s [OI=1.45, 1.36 GFlops/s]\n", + " * section8 ran in 0.25 s \n", + "Performance[mode=advanced] arguments: {'i2x0_blk0_size': 32, 'i2y0_blk0_size': 8, 'nthreads': 6, 'nthreads_nonaffine': 6, 'pthreads': 0}\n", + "(ShotID 0) Completing state equation run for shot\n", "(ShotID 0) Completed state equation run for shot\n" ] } @@ -315,7 +337,7 @@ "traces_0 = await pde(shot_wavelets, vp, rho=rho, problem=sub_problem, \n", " diff_source=True,\n", " boundary_type='complex_frequency_shift_PML_2',\n", - " save_wavefield=True, save_undersampling=20)\n", + " save_wavefield=True, save_undersampling=20, force_raw_wavefield=True)\n", "\n", "wavefield_0 = pde.wavefield.data[:, :, pde.wavefield.shape[-1]//2].copy()" ] @@ -354,7 +376,7 @@ "id": "1d3dced9", "metadata": {}, "source": [ - "Then, wen define the initial bubble conditions, the bubble's initial radius, by creating a `SparseField` object." + "Then, we define the initial bubble conditions, the bubble's initial radius, by creating a `SparseField` object." ] }, { @@ -373,7 +395,7 @@ "id": "7f253313", "metadata": {}, "source": [ - "We also create a `ParticleField` object to define where in the simulation region the bubble will be located: in this case at its centre." + "We also create a `SparseCoordinates` object to define where in the simulation region the bubble will be located: in this case at its centre." ] }, { @@ -383,7 +405,7 @@ "metadata": {}, "outputs": [], "source": [ - "x_0 = ParticleField(name='x_0', num=1, grid=problem.grid)\n", + "x_0 = SparseCoordinates(name='x_0', num=1, grid=problem.grid)\n", "x_0.data[0, :] = np.array(space.size) / 2" ] }, @@ -440,42 +462,59 @@ "text": [ "(ShotID 0) Preparing to run state for shot\n", "(ShotID 0) Estimated bandwidth for the propagated wavelet 1.600-2.400 MHz\n", - "(ShotID 0) Spatial grid spacing (0.050 mm | 12.833 PPW) is below dispersion limit (0.128 mm | 5.000 PPW)\n", + "(ShotID 0) Using DRP scheme\n", + "(ShotID 0) Spatial grid spacing (0.050 mm | 12.833 PPW) is below dispersion limit (0.214 mm | 3.000 PPW)\n", "(ShotID 0) Time grid spacing (0.005 μs | 15%) is below OT2 limit (0.012 μs)\n", "(ShotID 0) Selected undersampling level 20\n", "(ShotID 0) Selected time stepping scheme OT2\n", - "Ensure that the provided interpolation coefficient and grid point values are computed on the final grid that will be used for other computations.\n", - "Ensure that the provided interpolation coefficient and grid point values are computed on the final grid that will be used for other computations.\n", - "Ensure that the provided interpolation coefficient and grid point values are computed on the final grid that will be used for other computations.\n", - "Ensure that the provided interpolation coefficient and grid point values are computed on the final grid that will be used for other computations.\n", + "(ShotID 0) Expected wavefield size 2.3193 GB\n", "Operator `acoustic_iso_state` instance configuration:\n", - "\t * subs={h_x: 5e-05, h_y: 5e-05, h_z: 5e-05}\n", + "\t * name=acoustic_iso_state\n", + "\t * subs={h_x: 5e-05, h_y: 5e-05, h_z: 5e-05, dt: 5e-09}\n", + "\t * opt=advanced\n", + "\t * devicecreate=(p(t, x, y, z), p_saved(time_under0, x, y, z))\n", + "Operator `acoustic_iso_state` generated in 52.26 s\n", + " * lowering.Clusters: 40.12 s (76.8 %)\n", + " * specializing.Clusters: 24.53 s (47.0 %)\n", + " * fuse: 18.73 s (35.9 %)\n", + "Flops reduction after symbolic optimization: [1883 --> 1249]\n", + "Operator `acoustic_iso_state` fetched `/tmp/devito-jitcache-uid1000/af348409237fad0eb9c1d6b6c12ff7feeac0a66e.c` in 0.66 s from jit-cache\n", + "Operator `acoustic_iso_state_save` instance configuration:\n", + "\t * name=acoustic_iso_state_save\n", + "\t * subs={h_x: 5e-05, h_y: 5e-05, h_z: 5e-05, dt: 5e-09}\n", "\t * opt=advanced\n", - "\t * platform=None\n", - "Operator `acoustic_iso_state` generated in 21.48 s\n", - " * lowering.Clusters: 14.37 s (67.0 %)\n", - " * specializing.Clusters: 8.90 s (41.5 %)\n", - " * fuse: 5.41 s (25.2 %)\n", - "Flops reduction after symbolic optimization: [6318 --> 1738]\n", - "Operator `acoustic_iso_state` fetched `/tmp/devito-jitcache-uid1000/80b6432b7ba3e43442da5ca9c007b17f53a87a36.c` in 0.65 s from jit-cache\n", + "\t * devicecreate=(p(t, x, y, z), p_saved(time_under0, x, y, z))\n", + "Operator `acoustic_iso_state_save` generated in 49.92 s\n", + " * lowering.Clusters: 39.03 s (78.2 %)\n", + " * specializing.Clusters: 24.29 s (48.7 %)\n", + " * fuse: 18.75 s (37.6 %)\n", + " * schedule: 10.29 s (20.7 %)\n", + "Flops reduction after symbolic optimization: [1883 --> 1249]\n", + "recompiling for non-existent cache dir (/tmp/devito-codepy-uid1000/4194f14/25c540ef1691e4eefd5181fd845f6fea).\n", + "gcc -march=native -O3 -g -fPIC -Wall -std=c99 -Wno-unused-result -Wno-unused-variable -Wno-unused-but-set-variable -ffast-math -shared -fopenmp /tmp/devito-jitcache-uid1000/4194f14e4dc8631801b87cd22b43c5c9dde3a90d.c -lm -o /tmp/devito-jitcache-uid1000/4194f14e4dc8631801b87cd22b43c5c9dde3a90d.so\n", + "Operator `acoustic_iso_state_save` jit-compiled `/tmp/devito-jitcache-uid1000/4194f14e4dc8631801b87cd22b43c5c9dde3a90d.c` in 5.81 s with `CustomCompiler`\n", "(ShotID 0) Using inhomogeneous density\n", "(ShotID 0) Running state equation for shot\n", - "AutoTuner: cannot perform autotuning unless there is one time loop; skipping\n", - "Operator `acoustic_iso_state` ran in 93.44 s\n", - "Global performance: [OI=0.01, 17.58 GFlops/s, 0.01 GPts/s]\n", + "AutoTuner: cannot perform autotuning with 2 time loops; skipping\n", + "Operator `acoustic_iso_state_save` ran in 66.48 s\n", + "Global performance: [OI=0.01, 15.25 GFlops/s, 0.10 GPts/s]\n", + "Global performance : [66.47 s, 0.10 GPts/s]\n", "Local performance:\n", - " * section0<<1,7,7,7>,<1,7,7,7>> ran in 0.01 s [OI=0.10, 0.40 GFlops/s]\n", - " * section1<160> ran in 0.01 s [OI=0.13, 0.22 GFlops/s]\n", - " * section2<160> ran in 0.01 s [OI=0.13, 0.32 GFlops/s]\n", - " * section3<160> ran in 0.01 s [OI=0.13, 0.22 GFlops/s]\n", - " * section4<1> ran in 0.01 s [OI=0.15, 0.02 GFlops/s]\n", - " * section5<<1499,20,160,160>,<1499,20,160,160>,<1499,20,160,160>,<1499,20,160,160>,<1499,20,160,160>,<1499,20,160,160>,<1499,160,20,160>,<1499,160,20,160>,<1499,160,20,160>,<1499,160,20,160>,<1499,160,20,160>,<1499,160,20,160>,<1499,160,160,20>,<1499,160,160,20>,<1499,160,160,20>,<1499,160,160,20>,<1499,160,160,20>,<1499,160,160,20>,<1499,15,15,17,17,129>,<1499,15,15,8,8,120>,<1499,29,169,129>,<1499,20,160,120>,<1499,29,169,129>,<1499,20,160,120>,<1499,169,29,129>,<1499,160,20,120>,<1499,169,29,129>,<1499,160,20,120>,<1499,169,169,29>,<1499,160,160,20>,<1499,169,169,29>,<1499,160,160,20>> ran in 92.96 s [OI=0.01, 17.67 GFlops/s, 0.12 GPts/s]\n", - " * section6<1499,1,7,7,7> ran in 0.01 s [OI=0.10, 0.26 GFlops/s]\n", - " * section7<1499,100,1> ran in 0.18 s [OI=1.69, 0.34 GFlops/s, 0.01 GPts/s]\n", - " * section8<<1499,1>,<1499,1,7,7,7>> ran in 0.01 s [OI=0.13, 0.60 GFlops/s, 0.09 GPts/s]\n", - " * section9<<1499,1>,<1499,1>,<1499,1>,<1499,1>,<1499,1>,<1499,1>,<1499,1>,<1499,1>,<1499,1>> ran in 0.01 s [OI=34.60, 0.52 GFlops/s, 0.01 GPts/s]\n", - " * section10<<1499,120>,<1499,120>,<1499,120>,<1499,120>,<1499,120>,<1499,120>,<1499,120>,<1499,120>,<1499,120>,<1499,120>> ran in 0.02 s [OI=45.00, 17.84 GFlops/s]\n", - "Performance[mode=advanced] arguments: {'nthreads': 6, 'nthreads_nonaffine': 6, 'i2x0_blk0_size': 8, 'i2y0_blk0_size': 8, 'x0_blk0_size': 8, 'y0_blk0_size': 8}\n", + " * section0 ran in 0.01 s\n", + " * section1 ran in 0.01 s\n", + " * section2 ran in 0.01 s\n", + " * section3 ran in 0.01 s\n", + " * section4 ran in 28.86 s [OI=0.01, 18.20 GFlops/s, 0.16 GPts/s]\n", + " * section5 ran in 9.24 s [OI=3.04, 20.47 GFlops/s, 0.29 GPts/s]\n", + " * section6 ran in 27.52 s [OI=0.01, 10.88 GFlops/s, 0.14 GPts/s]\n", + " * section7 ran in 0.05 s [OI=0.50, 0.08 GFlops/s]\n", + " * section8 ran in 0.47 s [OI=1.19, 0.09 GFlops/s, 0.01 GPts/s]\n", + " * section9 ran in 0.03 s [OI=0.67, 0.57 GFlops/s, 0.04 GPts/s]\n", + " * section10 ran in 0.01 s\n", + " * section11 ran in 0.02 s [OI=1.45, 1.15 GFlops/s]\n", + " * section12 ran in 0.30 s \n", + "Performance[mode=advanced] arguments: {'i2x0_blk0_size': 16, 'i2y0_blk0_size': 16, 'nthreads': 6, 'nthreads_nonaffine': 6, 'pthreads': 0}\n", + "(ShotID 0) Completing state equation run for shot\n", "(ShotID 0) Completed state equation run for shot\n" ] } @@ -487,7 +526,7 @@ " p_0=p_0, kappa=kappa, kappa_s=kappa_s,\n", " chi=chi, r_buckle=r_buckle, r_break=r_break,\n", " problem=sub_problem, diff_source=True,\n", - " save_wavefield=True, save_undersampling=20,\n", + " save_wavefield=True, save_undersampling=20, force_raw_wavefield=True,\n", " boundary_type='complex_frequency_shift_PML_2',\n", " num_inner=100)\n", "\n", @@ -512,976 +551,74 @@ "outputs": [ { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";/* global mpl */\n", - "\n", - "var comm_websocket_adapter = function (comm) {\n", - " // Create a \"websocket\"-like object which calls the given IPython comm\n", - " // object with the appropriate methods. Currently this is a non binary\n", - " // socket, so there is still some room for performance tuning.\n", - " var ws = {};\n", - "\n", - " ws.binaryType = comm.kernel.ws.binaryType;\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " function updateReadyState(_event) {\n", - " if (comm.kernel.ws) {\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " } else {\n", - " ws.readyState = 3; // Closed state.\n", - " }\n", - " }\n", - " comm.kernel.ws.addEventListener('open', updateReadyState);\n", - " comm.kernel.ws.addEventListener('close', updateReadyState);\n", - " comm.kernel.ws.addEventListener('error', updateReadyState);\n", - "\n", - " ws.close = function () {\n", - " comm.close();\n", - " };\n", - " ws.send = function (m) {\n", - " //console.log('sending', m);\n", - " comm.send(m);\n", - " };\n", - " // Register the callback with on_msg.\n", - " comm.on_msg(function (msg) {\n", - " //console.log('receiving', msg['content']['data'], msg);\n", - " var data = msg['content']['data'];\n", - " if (data['blob'] !== undefined) {\n", - " data = {\n", - " data: new Blob(msg['buffers'], { type: data['blob'] }),\n", - " };\n", - " }\n", - " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", - " ws.onmessage(data);\n", - " });\n", - " return ws;\n", - "};\n", - "\n", - "mpl.mpl_figure_comm = function (comm, msg) {\n", - " // This is the function which gets called when the mpl process\n", - " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", - "\n", - " var id = msg.content.data.id;\n", - " // Get hold of the div created by the display call when the Comm\n", - " // socket was opened in Python.\n", - " var element = document.getElementById(id);\n", - " var ws_proxy = comm_websocket_adapter(comm);\n", - "\n", - " function ondownload(figure, _format) {\n", - " window.open(figure.canvas.toDataURL());\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", - "\n", - " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", - " // web socket which is closed, not our websocket->open comm proxy.\n", - " ws_proxy.onopen();\n", - "\n", - " fig.parent_element = element;\n", - " fig.cell_info = mpl.find_output_cell(\"
\");\n", - " if (!fig.cell_info) {\n", - " console.error('Failed to find cell for figure', id, fig);\n", - " return;\n", - " }\n", - " fig.cell_info[0].output_area.element.on(\n", - " 'cleared',\n", - " { fig: fig },\n", - " fig._remove_fig_handler\n", - " );\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function (fig, msg) {\n", - " var width = fig.canvas.width / fig.ratio;\n", - " fig.cell_info[0].output_area.element.off(\n", - " 'cleared',\n", - " fig._remove_fig_handler\n", - " );\n", - " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", - "\n", - " // Update the output cell to use the data from the current canvas.\n", - " fig.push_to_output();\n", - " var dataURL = fig.canvas.toDataURL();\n", - " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", - " // the notebook keyboard shortcuts fail.\n", - " IPython.keyboard_manager.enable();\n", - " fig.parent_element.innerHTML =\n", - " '';\n", - " fig.close_ws(fig, msg);\n", - "};\n", - "\n", - "mpl.figure.prototype.close_ws = function (fig, msg) {\n", - " fig.send_message('closing', msg);\n", - " // fig.ws.close()\n", - "};\n", - "\n", - "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", - " // Turn the data on the canvas into data in the output cell.\n", - " var width = this.canvas.width / this.ratio;\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] =\n", - " '';\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Tell IPython that the notebook contents must change.\n", - " IPython.notebook.set_dirty(true);\n", - " this.send_message('ack', {});\n", - " var fig = this;\n", - " // Wait a second, then push the new image to the DOM so\n", - " // that it is saved nicely (might be nice to debounce this).\n", - " setTimeout(function () {\n", - " fig.push_to_output();\n", - " }, 1000);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'btn-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " var button;\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " continue;\n", - " }\n", - "\n", - " button = fig.buttons[name] = document.createElement('button');\n", - " button.classList = 'btn btn-default';\n", - " button.href = '#';\n", - " button.title = name;\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message pull-right';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = document.createElement('div');\n", - " buttongrp.classList = 'btn-group inline pull-right';\n", - " button = document.createElement('button');\n", - " button.classList = 'btn btn-mini btn-primary';\n", - " button.href = '#';\n", - " button.title = 'Stop Interaction';\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', function (_evt) {\n", - " fig.handle_close(fig, {});\n", - " });\n", - " button.addEventListener(\n", - " 'mouseover',\n", - " on_mouseover_closure('Stop Interaction')\n", - " );\n", - " buttongrp.appendChild(button);\n", - " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", - " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", - "};\n", - "\n", - "mpl.figure.prototype._remove_fig_handler = function (event) {\n", - " var fig = event.data.fig;\n", - " if (event.target !== this) {\n", - " // Ignore bubbled events from children.\n", - " return;\n", - " }\n", - " fig.close_ws(fig, {});\n", - "};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (el) {\n", - " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (el) {\n", - " // this is important to make the div 'focusable\n", - " el.setAttribute('tabindex', 0);\n", - " // reach out to IPython and tell the keyboard manager to turn it's self\n", - " // off when our div gets focus\n", - "\n", - " // location in version 3\n", - " if (IPython.notebook.keyboard_manager) {\n", - " IPython.notebook.keyboard_manager.register_events(el);\n", - " } else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", - " // Check for shift+enter\n", - " if (event.shiftKey && event.which === 13) {\n", - " this.canvas_div.blur();\n", - " // select the cell after this one\n", - " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", - " IPython.notebook.select(index + 1);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " fig.ondownload(fig, null);\n", - "};\n", - "\n", - "mpl.find_output_cell = function (html_output) {\n", - " // Return the cell and output element which can be found *uniquely* in the notebook.\n", - " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", - " // IPython event is triggered only after the cells have been serialised, which for\n", - " // our purposes (turning an active figure into a static one), is too late.\n", - " var cells = IPython.notebook.get_cells();\n", - " var ncells = cells.length;\n", - " for (var i = 0; i < ncells; i++) {\n", - " var cell = cells[i];\n", - " if (cell.cell_type === 'code') {\n", - " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", - " var data = cell.output_area.outputs[j];\n", - " if (data.data) {\n", - " // IPython >= 3 moved mimebundle to data attribute of output\n", - " data = data.data;\n", - " }\n", - " if (data['text/html'] === html_output) {\n", - " return [cell, data, j];\n", - " }\n", - " }\n", - " }\n", - " }\n", - "};\n", + "application/vnd.jupyter.widget-view+json": { + "model_id": "919bab61b1c84ca38fa95df9d5815dcf", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACjsUlEQVR4nOzdd3gU5f428Hs32XTSKIFgAiSUhE5CEYKIAjb4YaGIoChFVDziAQEFu6AonAPWY0EEPSAi7QCCDQxKLwkgJUBoCQKBENJ7Ns/7R94ZN+xuspud3Z3d3J/ryiWZmSfzZMFk7v0+RSOEECAiIiIiInIArbM7QERERERE9QcDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBEREREROQwDCBERuaQ33ngDGo0GLVu2tMvXb9myJTQaDd544w2H39sSFy5cgEajgUajwfbt253WDyIiazGAEBERERGRwzCAEBERERGRwzCAEBERERGRwzCAEBERERGRwzCAEBHVI0888QQ0Gg369+8PAEhKSsIjjzyC5s2bw9fXF23atMHs2bORm5srtykpKcGiRYsQHx+PoKAgNGjQALfffjt+/PHHGu+VlZWFV199FXFxcQgODoaPjw9atmyJsWPHYv/+/bX2taSkBO+88w46deoEPz8/NGzYELfffjuWL19u1fe8fft2PPbYY2jVqhV8fX0RGBiIrl274tVXX8WNGzes+lrWOnz4MCZNmoS2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lSvYtWsXFixYgB49ehgtp+vt7Y358+cDqBpm1a9fP/z000+4fv060tLSsGjRIgwdOrTa0DUiIlfi6ewOEBGRe4mOjsbmzZvxwAMPIDs7G1OmTJErHoZeeukluVpgSKPR4Pvvv8edd96JY8eO4dNPP8Wnn35a7ZpHH30U0dHRePPNN832Y+nSpQgJCcEnn3yCXbt2yfuLmKL0krZz586Fn58fXn/9dRw7dgzjxo0ze620oaOhcePG4dSpU3jvvfdw+PBh3HvvvdXOR0REYMmSJbjzzjsV7TcRkSOwAkJERIrr168fTp8+jVdeeQVdu3ZFYGAgvL290aJFCzz66KPYu3cv5s2bZ7Z948aNceDAAbz99tvo2LEjfH19ERISgoSEBCxdutRo93RTdDodPvroIxw+fBjPPvssOnbsiMDAQHh4eCA4OBjdunXDP/7xD2zbtg2rVq1S8tuHRqPByy+/jNTUVMyYMQNxcXEIDg6Gh4cHAgMD0bFjR0yYMAGbNm2SN0282bvvvosff/wRd999N0JCQuDj44M2bdrghRdeQHJyco0VICIiNdMIwwXciYiIiIiI7IgVECIiIiIichgGECIiIiIichgGECIiIiIichgGECIiIiIichgGECIiIiIichgGECIiIiIichhuREhOU1lZicuXL6NBgwbQaDTO7g4RERFRrYQQyM/PR3h4OLRavpdfFwwg5DSXL19GRESEs7tBREREZLWLFy/illtucXY3XBIDCDlNgwYNAFT9DxwYGOjk3hARERHVLi8vDxEREfJzDFmPAYScRhp2FRgYyABCRERELoXDx+uOA9eIiIiIiMhhGECIiIiIiMhhGECIiIiIiMhhGECIiIiIiMhhGECIiIiIiMhhGECIiIiIiMhhGECIiIiIiMhhGECIiIiIiMhhGECIiIiIiMhhGECIiIiIiMhhGECIiIiIiMhhGECIiIiIiMhhGECIiIiIiMhhGECIiIiIiMhhGECIiIiIiMhhGECIiIiIiMhhGECIiIiIiMhhGECIiIjc0LFjx9CsWTMMHz4clZWVzu4OEZGMAYSIiMgN/etf/0JGRgbWrl2LPXv2OLs7REQyBhAiIiI3tGvXLvnPv//+uxN7QkRUHQMIERGRmyksLMSZM2fkz0+cOOHE3hARVccAQkRE5GbOnz9f7fNTp045qSdERMYYQIiIiNzM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", + "text/html": [ "\n", - "// Register the function which deals with the matplotlib target/channel.\n", - "// The kernel may be null if the page has been refreshed.\n", - "if (IPython.notebook.kernel !== null) {\n", - " IPython.notebook.kernel.comm_manager.register_target(\n", - " 'matplotlib',\n", - " mpl.mpl_figure_comm\n", - " );\n", - "}\n" + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " ], "text/plain": [ - "" + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" - }, + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "traces_1.plot_one(60, plot=False)\n", + "plt.xlabel('time (microseconds)')\n", + "plt.ylabel('pressure (Pa)')\n", + "plt.subplots_adjust(left=0.2)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "fa34a5dd", + "metadata": {}, + "source": [ + "However, if we subtract the result of the baseline simulation, we will be able to see the non-linear signal generated by the embedded micro-bubble. " + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "42eb1535", + "metadata": {}, + "outputs": [ { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "3b2d35b4e9b64da1abed2de1cfa402bc", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACY1ElEQVR4nOzdeXhU5f3+8fdM9gQSCPsSdlA22UFBRRFEhYp7qXUF26qtWKmiKG5fcKXVqm3VurcqWlGLuKCIUBEERQRF2fedEJYsZJ/z+yO/c5iQbZYzM2cy9+u6colzzsl5hoRk7vl8nudxGYZhICIiIiIiEgbuSA9ARERERERihwKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIiIiIiEjQKIiIhEpQceeACXy0WHDh1C8vk7dOiAy+XigQceCPu9fbFt2zZcLhcul4tFixZFbBwiIv5SABERERERkbBRABERERERkbBRABERERERkbBRABERERERkbBRABERiSHXXXcdLpeLs846C4DvvvuOX/3qV7Rp04aUlBS6du3K3XffzdGjR61rioqKePLJJxkwYAAZGRk0bNiQ4cOH88knn9R6r5ycHO6991769+9Po0aNSE5OpkOHDlxzzTV88803dY61qKiIhx9+mN69e5OamkqTJk0YPnw4r7/+ul/PedGiRVx99dV07NiRlJQU0tPT6du3L/feey+HDh3y63P5a9WqVfz2t7+lW7duNGjQgLS0NHr06MFtt93Gzp0767x+3rx5nH/++TRp0oTU1FROOukk7rrrrpCPW0QkpAwREYkZ1157rQEYw4cPN/71r38ZCQkJBlDlo3///sbRo0eNgwcPGqeeemq157hcLuO1116r9j7/+9//jMaNG1d7nflx11131TjOAwcOGL17967x2muvvda4//77DcBo3759tZ+jqKjIuPrqq2sdQ/PmzY3ly5dXe3379u0NwLj//vurHKvr3h6Px5gyZYrhcrlqvHdaWpoxd+7cGv8O7rzzzhqvbd++vbFo0SLr/xcuXFjj5xERcRpVQEREYtDGjRv5zW9+w5lnnsnChQvJzs5m8+bNTJ06FYCVK1cyc+ZMJkyYwJo1a5g5cyabNm0iJyeHzz//nJNPPhnDMLjllluqvBu/efNmxowZw+HDh0lPT+fJJ59ky5YtHDhwgE8//ZRBgwYB8Oijj/LEE09UGZthGFxxxRX8+OOPANx4442sXr2agwcPsnz5ci6//HJee+01/vWvf9X6HK+99lr+/e9/43a7+d3vfsfSpUvJzs5m7969zJ49mx49enDgwAHGjh3L3r177fhrtUydOpXHH3/cei4LFixg//79HDhwgE8++YTTTjuNgoICrrjiCtasWVPl+ldeeYXHHnsMgFNOOYWPPvqIAwcOsGXLFv785z9z8OBBrr/+elvHLCISNhEOQCIiEkZmBQQwxowZY5SVlVU559e//rUBGHFxcUZ8fLzx1VdfVTln/fr11rv7zz//fKVjF110kQEYCQkJxrJly6pce+zYMWPw4MEGYCQnJxvZ2dmVjr/77rvWGKdOnVrt8/CubFRXhXj//fet42+//Xa1n+Po0aNGt27dDMD4/e9/X+V4oBWQlStXWn83jz32WLX3LikpMc444wzr6+CtqKjIaNq0qQEYJ510knH06NEq18+fP79SdUUVEBGJJqqAiIjEqCeffJK4uLgqj48fPx6A8vJyfvnLXzJs2LAq53Tr1o3+/fsDsHz5cuvxAwcO8MEHHwAwceJEhgwZUuXalJQUnn76aaBinse///3vSsdffvllAJo1a8b9999f7difeOIJEhMTa3xuf/3rXwG44IILuOKKK6o9Jz09nbvvvhuAWbNmYRhGjZ/PH0899RSGYdCzZ0/uuOOOas9JSEhg+vTpAHz88cccPnzYOjZ37lwOHjwIwMMPP0x6enqV60eOHMnFF19sy3hFRMJNAUREJAZ16tSJrl27Vnusc+fO1p9Hjx5d4+cwz/NuX1q6dCkejweAyy+/vMZrhwwZQvv27QFYvHix9bhhGCxZsgSoCA9JSUnVXt+0aVOGDx9e7bFjx46xdOlSAEaNGkV+fn6NHz179gTg0KFDbNmypcbx+mP+/PnWvQsKCmq8d/fu3a3nvHLlSuv6r776CoDExETGjh1b430uvfRSW8YrIhJuCiAiIjGodevWNR5LSUnx67zCwkLrse3bt1t/Nl/c18Q8vm3bNuuxo0ePcuTIEQDrBXpNevToUe3jW7ZsobS0FIDbbruNhg0b1vhhzkcByM7OrvV+vsjPz2fPnj1ARRWmtnu3aNGi2nubfx+dOnWqtcpT0/MXEXE6BRARkRhUXetVoOd5ty7l5eVZf27QoEGt1zVs2LDKNfn5+T5fX9Nx7yWE/VFUVBTQdXbf2/w7CPT5i4g4nQKIiIjYxgwVUDlMVMc87n2N94vqgoICn64/kffneP/99zEMw6cPc2+UYHjf+8knn/T53tddd12VzxHo8xcRcToFEBERsU2HDh2sP//000+1nmsuP+t9TUZGBo0aNQJg7dq1tV5f0/EOHTrgdlf8evOeWxEOGRkZNGnSJKh7m38fmzdvpqSkpMbz6vr7ERFxKgUQERGxzdChQ622rdmzZ9d43vLly635ImeccYb1uMvlslbd+vjjj2t8AZ6Tk8P//ve/ao9lZGRYq2+9/vrr1nyQcDn33HMBmDNnTkA7lp9++ukAlJSU8PHHH9d43nvvvRfYAEVEIkwBREREbNOsWTMuvPBCAF588UVWrFhR5ZyioiImTZoEQHJyMldffXWl4xMmTAAqlvQ1l6o90e23305xcXGN4/jTn/4EwNatW5k0aZK1MldN1q9fX+txf0yePBmA3NxcrrvuulrHWd29f/GLX9C0aVMA7r777kpzZEwLFy7k3XfftWnEIiLhpQAiIiK2mjlzJg0aNKC0tJRRo0bxzDPPsH37dg4ePMhnn33G8OHD+eabbwB46KGHrBfbposvvtiajzFjxgxuvvlmfvzxRw4dOsSKFSsYP348r776Kh07dqxxDJdeeim//vWvAXjuuec488wzeeedd9i+fTtHjhxh165dLFy4kAcffJDu3btbgcUOAwcOtPYXmTt3LgMHDuTVV19l8+bNHDlyhL1797JkyRJmzpzJoEGDqiynm5SUxOOPPw5UtFmdeeaZzJs3j4MHD7J9+3aefPJJLrzwwkqtayIi0SQ+0gMQEZH6pXPnznz00UdcdNFFHD58mEmTJlkVD2933XWXVS3w5nK5+M9//sOIESNYs2YNzz77LM8++2ylc6666io6d+7Mgw8+WOM4XnnlFRo3bszf//53lixZYu0vUh27l7SdMWMGqamp3H///axZs4brr7++xnPNDR29XX/99axfv57HHnuMVatWcf7551c6npWVxUsvvcSIESNsHbeISDioAiIiIrY788wz2bBhA9OmTaNv376kp6eTlJRE+/btueqqq1i2bBmPPPJIjdc3a9aMb7/9loceeohevXqRkpJC48aNGTZsGK+88kqV3dOrk5CQwDPPPMOqVav4/e9/T69evUhPTycuLo5GjRrRr18//vCHP7BgwQLefvttO58+LpeLe+65h40bN3LHHXfQv39/GjVqRFxcHOnp6fTq1YuJEycyd+5ca9PEEz366KN88sknjB49msaNG5OcnEzXrl3505/+xMqVK2utAImIOJnL8F7AXUREREREJIRUARERERERkbBRABERERERkbBRABERERERkbBRABERERERkbBRABERERERkbBRABERERERkbDRRoQSMR6Phz179tCwYUNcLlekhyMiIiJSJ8MwyMvLo3Xr1rjdei8/EAogEjF79uwhKysr0sMQERER8dvOnTtp27ZtpIcRlRRAJGIaNmwIVPwDTk9Pj/BoREREROqWm5tLVlaW9TpG/KcAIhFjtl2lp6crgIiIiEhUUft44NS4JiIiIiIiYaMAIiIiIiIiYaMAIiIiIiIiYaMAIiIiIiIiYaMAIiIiIiIiYaMAIiIiIiIiYaMAIiIiIiIiYaMAIiIiIiIiYaMAIiIiIiIiYaMAIiIiIiIiYaMAIiIiIiIiYaMAIiIiIiIiYaMAIiIiIiIiYaMAIiIiIiIiYaMAIiIiIiIiYaMAIiIiIiIiYaMAIiIiIhiGgWEYkR6GiMQABRAREZEYV1JSwpAhQ2jRogWbN2+O9HBEpJ5TABEREYlxS5cu5dtvvyU7O5t///vfkR6OiNRzCiAiIiIxbvny5dafv/322wiORERigQKIiIhIjNuyZYv15w0bNkRwJCISCxRAREREYtzWrVsr/bm8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IyIitnByBcSsynsHEE1CF6kfFECi1JIlS2jatKn18dZbbwEVS916P26uNFVaWsqzzz5Lr169aN68OQMHDmTgwIE0adKEe+65B4/Hw8SJE7nrrruq3Cs9PZ233nqL5ORknn76adq0acPAgQNp164dS5YsoUOHDrz88sthff4iIhK8mgKIuTO6OUckEsyw0aRJE1VAROoZBZAoVVpaSk5OjvVhLoV77NixSo+bLVMdOnRg+vTpnH/++TRo0ID169fz448/kpmZyWWXXca8efN48cUXa9xh9pxzzmHFihWMHz8el8vFjz/+SIsWLZg8eTIrV66kZcuWYXvuIiJij5oCSFpaGhDZAOK9wqK5SqMqICL1Q3ykByCBOeussyptGFiXRo0aMW3atKDu2bNnT2bNmhXU5xAREeeoqwISqZ3HDcOoFEAyMjKAyM5JERH7qAIiIiISgwzDcGwLVmFhoTXfsFGjRo6YFC8i9lEAERERiUElJSVWJd1pLVhm9SMuLo4GDRoogIjUMwogIiIiMcisfsDxiseJ/x+pFizv9iuXy6UAIlLPKICIiIjEIDOAuN1uEhISKh3zroD4M9/QLt4BBI4vC6wAIlI/KICIiIjEIO/5HyeugGhWQDwej7XKYjidGEDMCkhpaWlExiMi9lIAERERiUFmAElOTq5yzLslKxLzQMwA0qhRIwAaNGhgHVMVRCT6KYCIiIjEILOSUF0AiY+PJzExEYjMPJATKyDmZHRQABGpDxRAREREYpAZQJKSkqo9HsmleM2QYe7/AWgiukg9ogAiIiISg+oKIJFcitcMGebkc1AAEalPFEBERERikBlAzFarE0VyKd68vDxAAUSkvlIAERERiUElJSWAM1uwqgsgWopXpP5QABEREYlBvrZgqQIiInZTABEREYlBTp6ErgAiUr8pgIiIiMSguuaAOLUCYh4TkeilACIiIhKDom0OiCogIvWHAoiIiEgMioYWLDN0eP9ZAUQk+imAiIiIxCBNQheRSFEAERERiUFmC1Zd+4CEuwLi8Xis0KNleEXqJwUQERGRGOTUCkh+fr715+oCiCahi0Q/BRAREZEY5NQ5IGbAiIuLIzk52XpcAUSk/lAAERERiUG+BpBIVUAaNGiAy+WyHlcAEak/FEBERERikFPngJj3M1vATAogIvWHAoiIiEgMqqsCkpKSUum8cDEDiBmATN4BxDCMsI5JROylACIiIhKD6gog5vyLoqKisI0JoLCwEKg5gHg8HuscEYlOCiAiIiIxyKkBxKyAmBUYk3dLltqwRKKbAoiIiEgMqmsOSKQDyIkVELfbTYMGDQAFEJFopwAiIiISg5xeATkxgIAmoovUFwogIiIiMUgBREQiRQFEREQkBimAiEikKICIiIjEoGibAwJoDohIPaEAIiIiEoN8rYAUFxeHdd8NVUBE6j8FEBERkRjkawDxPjccFEBE6j8FEBERkRjkTwAJZxuWAohI/acAIiIiEoPqmgMSHx+P213xMkEBRETspAAiIiISg+qqgLhcrohMRFcAEan/FEBERERiUF0BxPuYAoiI2EkBREREJAb5EkBUARGRUFAAERERiTHl5eV4PB6g5jkgENkAkpKSUuWYAohI/aAAIiIiEmO8l9V1WgXEvJcCiEj9pQAiIiISY6IhgHgvA2xSABGpHxRAREREYox3AImPj6/xvEgEkNrmppgBJD8/P2zjERH7KYCIiIjEGHMPkKSkJFwuV43nqQIiIqGgACIiIhJjfFkBC5wbQPLz861J9CISfRRAREREYoxTA4hhGNbYagsgAAUFBWEZk4jYTwFEREQkxpgtWLUtwet93Dw/1EpLSzEMA6g+HKWkpOB2V7x0URuWSPRSABEREYkxpaWlACQkJNR6XrgDiHelpboKiMvl0jwQkXpAAURERCTGODWA+LI8sAKISPRTABEREYkxvgYQMwSEuwKSmJhY4+pcCiAi0U8BREREJMaYAaS2PUDgeAXEuzIRSrWtgGVSABGJfgogUWrr1q288MIL/OY3v6FPnz7Ex8fjcrmYMWNGndd+/fXXjBs3jmbNmpGSkkKPHj2YPn16naucrF27ll//+te0atWK5ORkOnfuzO23386RI0dselYiIhIOZWVlgHNbsBRAROq32t/6EMd66qmneOqpp/y+7o033uDaa6+lvLycNm3akJWVxZo1a7jvvvuYO3cuixYtIjU1tcp1CxcuZMyYMRQWFtKsWTN69uzJunXr+Mtf/sL777/P0qVLadGihR1PTUREQsypc0DMN8JqWx5YAUQk+qkCEqWaNm3K2LFj+b//+z8++eQTLr300jqv2bZtGxMnTqS8vJzHH3+cnTt3snLlSjZu3MhJJ53Et99+y5QpU6pcl5eXxy9/+UsKCwuZ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amq/MjVs2DDkAcTfSejaCb3uAALQrFkzK4CISO1iNoB89913XHvttdZqJKZu3brx6quvMmTIkAiNTERE6iszgHTs2LHa4w0aNABwZAXEaS1YTgsg5gqaBw4cCPl4RKJdTE5C37lzJyNHjuTnn3/GMAwaNGhAWloahmGwfv16q/1KRETETlu2bAHqDiB5eXkhG0OgAaS8vNzaDTyU43JyAKlpGV6oqIAAYa+A7Nq1i+eee67Sap4iTheTAWTmzJkcPXqUfv36sXLlSo4ePUpubi7fffcdffr0IT8/n7/85S+RHqaIiNQz0VgB8T4vlPNAnFwBqWsZXohMBeTYsWMMGTKEm266iVNPPbXKBsoiThWTAWT+/PnEx8cze/bsSnM++vXrx+zZs3G73cyfPz9yAxQRkXppx44dALRv377a404MIN6BIJRtWNG8ChZEpgLywQcfWJWPnTt38vDDD4ft3iLBiMkAsnPnTjp16lTtO1CdO3emc+fO7Ny5MwIjExGR+sowDPbt2wdA69atqz2nYcOGQGgDSKA7oUN4Aoi/k9CdsAoWHK+AhDOALF++HIAOHToA8Nxzz1FQUBC2+4sEKiYDyLFjx6wfFNVp1qxZWN5RERGR2HH06FHrxXLLli2rPceJFZC4uDhcLlela0PByS1YTq2ArFq1CoB7772Xzp07c/ToUd59992w3V8kUDEZQGLdddddh8vlqvWjpneUvv76a8aNG0ezZs1ISUmhR48eTJ8+PSzvQImIRLO9e/cCFUu81zSZ2YmT0CE8K2FFewBp3LgxULEbejgYhsHq1auBihbyK6+8EoAPP/wwLPcXCUbMLsN79OhRvvzyyxqPASxevBjDMKo958wzzwzZ2MKla9euNVaC3O6q2fSNN97g2muvpby8nDZt2pCVlcWaNWu47777mDt3LosWLar1h7OISCwzA0irVq1qPMeJFRCoCAXFxcUhDSDRvgqWGUAOHToU8vEA7Nu3j8OHDxMXF0ePHj0oKSlh+vTpfPrpp5SVlfncYicSCTH73blmzRrOPvvsWs8566yzqn3c5XJZPbTR7O677+a6667z6dxt27YxceJEysvLefzxx7n99ttxuVxs376d0aNH8+233zJlyhT+9re/hXbQIiJRyikBxN85IBCe3dCdXAHxZRWszMxMAHJzcykvLycuLi6kY9q1axdQ8f2U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7g3pvSW6KYAAZ599Nnl5ebz88su1nvfUU09RVFTE6NGjwzQyERGJdmb7VVxcnPWOfW28A4jdy5mac0Di4uKqnetYE6dWQGKxBct7BayavobhmgOyfv16AE466SSgItSab9L68sauxC4FEODOO+8kISGBW265hb///e/WLwvTkSNH+L//+z+mTZtGWloat912W4RGKiIi0cZ7ArovL/rT09MB8Hg81otfuwS747jT5oDE4ipYdc3/gPC0YJWWlloh4+STT7Ye79y5MwCbNm0K2b0l+imAUJHc//Wvf+HxeJg0aRKZmZmsWLECgHbt2tGsWTMefPBB4uPjef3118nKyorwiEVEJFr4swIWVLyANYOK3W1YgQaQcO2E7rRgBNEdQI4cORKyTQG3bdtGaWkpqamptGnTxnrcDCCqgEhtFED+vyuuuIJvvvmGiy66iPj4eIqLizEMg127duF2uxkzZgzLli1j3LhxkR6qiIhEEX8DiMvlss51SgAJ9U7o2ojQd/4EkPLy8pBtaLlt2zYAOnbsiNt9/OWkAoj4wvcZaDGgd+/evPvuu5SWlrJhwwaOHj1KgwYN6Nq1q8+rX4iIiHjzN4BAxTyQvLw8xwWQULdgOXEVrGgMICkpKSQlJVFcXMyhQ4estj477dixA6joFPGmACK+UAChIr2np6fz7bffkpiYSEJCAj179oz0sEREpB4INICA/RUQcxK6PytgQfhasJxWATEMw3HL8JoBJCMjo9bzGjduzL59+6zz7aYAIsFQCxZw4MABkpKS/P7BJyIiUhcnBRCntmA5tTJTVFRk/dnfCojdCwiYzFWwaquAeB8PdwDp1KkTUDEB3hyryIkUQKhI66H6ByoiIrGtPgUQp1VAQt2C5R0ifK2AmEElki1YUHkieiiYAeTEvdHS0tKse+/atSsk95bopwACXHXVVWzevJlvvvkm0kMREZF6RgGkbsFuRBiqFiwzgCQmJvrctuaEOSDex8NdAQGs1UJ37twZkntL9FMAAf70pz9xwQUXMG7cOObMmROyJetERCT21IcAEuqd0ANdhjdcFRBf26/AeQEkFHuBeDweK1xUF0Datm0LhC+AGIah125RRpPQgVGjRmEYBgcPHuSSSy4hIyODrl27Wj9ETuRyuViwYEGYRykiItHISQEk0EnoZqWhvLyc8vJy4uLibB1XsBUQBZCq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4cKFnH322Xz55Zdce+21vP322z6/8Hn//fcBGDp0qN8v2Ex9+/a1Asgvf/lLv6+3M4Dk5OTg8XiCXubcjgqI3ZUGp84BCTaA2NmCVVpaan0/+fv9bC5ZG2wFxJzDceIWBXWJi4ujZcuW7N6923rD11+bNm0CKv49mHNaJLopgFDxLoVZWjSZ79ideeaZlR5PSEiIyVWekpOTgdp/wJu/RGp6l3Lq1KmVljrOzc0lKyvLxlFW9bvf/Y7f/e53Ib2HiFTYvn07L7zwArNnz2bfvn107NiRcePGMXHixID+rffv358PP/yQc845h3feeYchQ4bwpz/9yadrZ8+eDVQskBGofv36ARVz4AJhRwAx3732eDwcPnw46P0Pggkgodpvw6ktWGaVPj09PaDr7WzB8l7Byt8X4HZVQMxNAAP5t9ymTRsrgARC7Vf1jyahA71792bHjh0sW7YMgJ07d7Jw4ULatGlT5d267du3+zX5qr6oq73K+1hN784kJSWRnp5e6UNE6o/27dszY8YM1q1bx5EjR/j+++954IEHgnqj4YwzzuCvf/0rAHfeeaf15lBtdu3axZIlSwC45JJLAr533759AQJe/dCOAJKQkGD129vRhhXMJHTzzSW7dvY21dcKiJ0BxPz9mp6e7vfXzikBBAJfCUtL8NY/CiDADTfcgGEYXHDBBVx22WUMHTqUsrIybrjhhkrnrV27luzs7GonWdZ35rsOO3bssH6BnWjLli2VzhURscNNN93E1VdfTXl5OePHj6/zRczLL78MVISXtm3bBnzf3r1743a72b9/v9V/7g87AgjYNw/EMAzr53cgFRCzEq4A4hs754AEOv8DjrdgHT16NKgODjOABPJvKtiVsFQBqX8UQIBrrrmGyZMnk5uby3vvvcfu3bu57LLLuOuuuyqd98orrwD+b2hVH/Tr14+EhASKiopYuXJlleOlpaV8++23wPENvERE7OByuXjuuefo3bs3+/fv55e//GWNL6TKysp44YUXAIJuv0xNTbUmnwfShmV3AAn2HWzvN4/qUwAJVQuWk+aABBNAGjdubM2dMjczDMTOnTuBwAJIsJsRrl27FiCgxSDEmRRA/r8///nP7Nu3j6+//ppdu3bx9ttvV5lwfd555/H+++9X2gU8VqSnp1srybz00ktVjr/zzjvk5ubSpEkTzjrrrDCPTkTq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3lwuFwMGDADgm2++qfG8n376Caj4/glFC5+IUyiAiIiIBMDtdnPmmWcC8NlnnwHODSBm+AD75oDUtwqIuUdHKAIIwKmnngrAsmXLajzHDCCh3AFdxAkUQERERAL0i1/8AoD//ve/GIbh2ADivQO301qw7KqABDM5vry83Jq/E6oActpppwEKICKgACIiIhKwsWPH4na7WblyJXPnziU7O5uEhISwBBDDMHy+zjuA2DUJvbS0lOLi4oA/j5Mmoe/fv5/y8nLi4uJs3QXd2+DBg3G5XGzZssXaK+ZECiASKxRAREREAtS8eXMuvvhiAMaNGwfAkCFDSE1NDcn9zABSVlbm14Z75gR0sK8FC4KbBxKqCkgglRmz/apVq1Yhm3uRkZFhrWxVXRWkpKTEqqApgEh9pwAiIiIShLvuuqvSi9arr746ZPdKTU0lPj4e8K8Ny6yAuN1u3O7gfvXHx8eTnJwMBNeG5aQKSChXwPJW2zyQFStWUFRURJMmTejUqVNIxyESaQogMcblctX6MX78+Bqv9Xg8PP300/Tr14+0tDQyMzMZOXIkn3zySRifgYiIswwcOJB//vOftGnThl/96ldMmDAhZPdyuVwB7YZu1yaEJjvmgTixAhKq+R+m2uaB/O9//wNg+PDhQYdEEaeLj/QAJDKGDRtW7eM19S2Xl5czbtw4PvroI9xuN7169SIvL48FCxawYMECZs6cye233x7KIYuIONaECRNCGjy8NWrUiJycHL82I7RrE0JTw4YNyc7ODqoFy+4KSDCT0MMVQMwKyPLlyykqKmL58uXcc889tGnThs8//xyAs846K6RjEHECBZAY9dVXX/l1/syZM/noo49o0aIFn376KX369AHgzTff5Oqrr2bKlCkMHz6cQYMGhWK4IiLy/wWyEpZdmxCa7FiK1+4KSDBVmXAFkB49etCmTRt2797NP//5T+67775KQTI5OZkrrrgipGMQcQLV+KROJSUlPP744wA8+eSTVvgAuPLKK5k4cSKGYTBjxoxIDVFEJGYEEkCc2IIVixUQt9vNJZdcAsCtt97K0aNH6dGjB+PHj+eUU07htddeo0WLFiEdg4gTKIBInRYuXMjhw4dJT0/nsssuq3J84sSJAHz66adBrwsvIiK1qy8BJBYrIAC//e1vrUULMjMz+eSTT5g1axarV69W9UNihlqwYtSk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1Ctdu3YFYMeOHZSVlVU7EX3Lli2VzpXYdOjQIUaNGsXmzZsZPnw477zzjlY8imHff/89LpeLCy+8sMqxo0ePAvDYY4/xt7/9jaysLL799ttwD1Ei6KSTTrL+bLbxnsh8vLy8PCxjEolmCiBSr/Tr14+EhASKiopYuXIlgwcPrnS8tLTUeuEwZMiQSAxRHCA/P58LLriANWvWMGjQIObOnauWPKG8vJz9+/fXeDw/P5/8/PxK7TgSG/r160dycjJFRUVs2bKFLl26VDnHfHOrTZs24R6eSNRRnVnqlfT0dEaOHAlU7GR8onfeeYfc3FyaNGnCWWedFebRiRMUFxczbtw4li9fTs+ePZk3bx4NGzaM9LAkwo4cOYJhGNV+XHvttUDFBnSGYajFJgalpaVxwQUXAPDaa69VOb5v3z4+/fRTAEaMGBHWsYlEIwUQqXfuueceXC4XL774IrNmzbIeX716NZMnTwZgypQpta6UJfVTeXk548eP54svvqBz587Mnz+fzMzMSA9LRKLAfffdR1xcHG+99ValEHLkyBGuu+46CgsL6dSpE5dffnkERykSHVyGYRiRHoSI3R566CGmTZsGVGw82KBBA9asWYPH42HMmDHMmTOHuLi4CI9Swm3WrFlceeWVQMUcoObNm1d7XqtWraxNCUWuu+46XnvtNaZPn279XJHY9Nxzz3HzzTdjGAbt2rWjefPm/Pzzzxw7doymTZsyf/58+vbtG+lhijie5oBIvXTPPffQp08fnnzySb777jv27dtH7969uf766/nDH/6g8BGjzCWYATZu3MjGjRurPU87GYtIdW688UZ69uzJzJkz+frrr/nhhx9o3bo1Y8aMYerUqZr/IeIjVUBERERERCRsNAdERERERETCRgFERERERETCRgFERERERETCRgFERERERETCRgFERERERETCRgFERERERETCRgFERERERETCRgFERERERETCRgFERERERETCRgFERERERETCRgFERCRA27Ztw+Vy0aFDh0gPxRannnoqTZs2JT8/P+T3WrRoES6Xi7POOivk95LQsevrOGHCBOLj41m3bp09AxMRR1MAERGpwV//+lceeOABjhw5EumhhNw777zD8uXLmTx5Mg0aNIj0cCTG3H333QBMnTo1wiMRkXBQABERqcFf//pXHnzwwRoDSEJCAieddBKd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", "text/html": [ - "" + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " ], "text/plain": [ - "" + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, @@ -1489,9 +626,8 @@ } ], "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "traces_1.plot_one(60, plot=False)\n", + "traces = traces_1 - traces_0\n", + "traces.plot_one(60, plot=False)\n", "plt.xlabel('time (microseconds)')\n", "plt.ylabel('pressure (Pa)')\n", "plt.subplots_adjust(left=0.2)\n", @@ -1500,4114 +636,296 @@ }, { "cell_type": "markdown", - "id": "fa34a5dd", + "id": "d4270928", "metadata": {}, "source": [ - "However, if we subtract the result of the baseline simulation, we will be able to see the non-linear signal generated by the embedded micro-bubble. " + "We can also look at the magnitude spectrum of this signal and compare it with the signal used to excite the source. " ] }, { "cell_type": "code", - "execution_count": 17, - "id": "42eb1535", + "execution_count": 18, + "id": "a5cc35c8", "metadata": {}, "outputs": [ { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", + "application/vnd.jupyter.widget-view+json": { + "model_id": "15a1e6fa7b51471fac31ef09df821df9", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3RU1doG8GfSCwmEFkLvvQYBBaSJgiBgQa9iRbwWvIqiUq4NFUXAiort8oEKVhQvggLKpQpIByGUJEDoENJ7Pd8fO3tKMuVMO9Oe31pZM8ycmTkTJsl5zrvfvXWKoiggIiIiIiLSQJCnd4CIiIiIiAIHAwgREREREWmGAYSIiIiIiDTDAEJERERERJphACEiIiIiIs0wgBARERERkWYYQIiIiIiISDMMIEREREREpBkGECIiIiIi0gwDCBERERERaYYBhIiIiIiINMMAQkREREREmmEAISIiIiIizTCAEBERERGRZhhAiIiIiIhIMwwgRERERESkGQYQIiIiIiLSDAMIERERERFphgGEiIiIiIg0wwBCRERERESaYQAhIiIiIiLNMIAQEREREZFmGECIiIiIiEgzDCBERERERKQZBhAiIiIiItIMAwgREREREWmGAYSIiIiIiDTDAEJERERERJphACEiIiIiIs0wgBARERERkWYYQIiIiIiISDMMIEREREREpBkGECIiIiIi0gwDCBERERERaYYBhIiIiIiINMMAQkREREREmmEAISIiIiIizTCAEBERERGRZhhAiIiIiIhIMwwgRERERESkGQYQIiIiIiLSDAMIERERERFphgGEiIiIiIg0wwBCRERERESaYQAhIiIiIiLNMIAQEREREZFmGECIiIiIiEgzDCBERERERKQZBhAiIiIiItIMAwgREREREWmGAYSIiIiIiDTDAEJERERERJphACEiIiIiIs0wgBARERERkWYYQIiIiIiISDMMIEREREREpBkGECIiIiIi0gwDCBERERERaYYBhIiIiIiINMMAQkREREREmmEAISIiIiIizTCAEBERERGRZhhAiIiIiIhIMwwgRERERESkGQYQIiIiIiLSDAMIERERERFphgGEiIiIiIg0wwBCRERERESaYQAhIiIiIiLNMIAQEREREZFmQjy9AxS4Kisrcf78ecTExECn03l6d4iIiIhsUhQFeXl5aNy4MYKC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kZmZiczMTCQlJWHnzp3Ytm0bVq1ahdWrV6N79+548803MWLECE+/JfJVDCCIjIxE48aNcf78eaSmpjoWQFatEg39iYlAs2ZO7qyTWAEhIqIAwgCiUuvWrZGTk4Orr74a999/P8aPH2/zoGfkyJH669u2bcPXX3+NZcuWYdSoUXjnnXfYzE2OYQABIN77+fPnceLECfTt29f+5zde/dzTZA9IWRlQWgqEhXl2f4iIiNzITwePu15iYiL+97//Ydu2bXjkkUfsPuPav39/fPjhhzh16hReeuklBAcHu2lPye+lpiKl6mrbtm09uituJQOIhbUxnGpELywE1q0T1z05/a4kAwjAKggREfk9VkBUWr9+vUuep3bt2nj55Zdd8lwUgPLyoFy+DDn5bKBXQAAHp+L96y+gqAho2hTo0cPRPXSdsDDxVVoq+kDq1vX0HhEREbkNKyBEvuTECVwAUASxLksLuYK2P1IZQByqgMjQ0q0b4OgMWq7GPhAiIgoQDCBEvsSo/6N58+YIDQ316O64lXEAqTbTHODkEKxTp8Rly5aO7Zs7cC0QIiIKEByC5QYrV67Ezp07kZmZidatW+OOO+5A8+bNPb1b5A8CpQEdMASQ4mLRs2HcJwHD+z937hyKi4sRERGh/rm9MYBwKl4iIgoQrIDY6fTp07jzzjtRv359xMbGol+/fvj5558BANnZ2ejXrx9uueUWzJkzB59++immT5+ODh064KuvvvLsjpN/MAogft2ADogD8vBwcd3MMKz69eujVq1aUBQFp2SgUMubAwgrIERE5OcYQOyQmZmJAQMG4IcffkBmZiby8/Oxa9cujB8/Hn/88QcefPBB7Nq1C40bN8ZNN92EUaNGISEhASUlJXjooYfw999/e/otkK8zmgHL7ysgOp3VPhCdTud4IzoDCBERkccwgNjhrbfewrlz55CQkICPPvoIq1atwssvv4zw8HC88MIL+OWXX3D//fcjNTUV//3vf/HLL78gNTUVd999N8rKyrBgwQJPvwXydSkpgTMEC7DZiO5QH0hpKXDunLjuTQGEPSBERBQg2ANih9WrV0On02H16tXoUTV156hRo9CwYUM8/vjjiIiIwPvvv48wo0XEwsPD8cEHH2D58uXYuHGjh/ac/EJpKXD6NAOIEYcqIGfOiKb2yEigQQNn99B12ANCREQBghUQO5w4cQItW7bUhw/p5ptvBgC0bNkSsbGxNR5Xp04dtGrVCufkWVciR6SlIbuyEplV/5Rn//2aO6biNR5+5S1T8AIcgkVERAGDAcQOBQUFSEhIqHF7o0aNAIimWEvq1auHkpISt+0bBQCjBvT4+HjUkges/swdQ7C8sf8DsC+AZGUBL74IfPQR8PffQGWle/eNiIjIhTgEy05BQTUzm86bzqKS/wqkGbAkO4ZgKYqi7mfRWwOIPT0gixcDs2cb/h0XB1x7LTBoEDBkCJCY6F3VHSIiIiOsgBD5ikBaA0SSASQ93ezdzZs3R3BwMIqLi3HhwgV1z+mtAcSeHpDLl8VlfLwILllZwMqVwLPPAlddBXDCCyIi8mKsgNjp8uXL+PLLLx26j8gpgTQFr2SjAhIaGormzZvj5MmTOHHiBBo3bmz7Ob09gKipgOTmistHHgFeeAHYtw/YvBn49ltgzx5g1y737ScREZGTGEDslJycjIkTJ9a4XafTWbwPgPrhIUSWBNoUvIDNAAKI78XJkyeRmpqKgQMH2n5OfwogsbFAaCjQt6/4ql8fmDjR6veLiIjI0xhA7NC8eXOGCPKMCxeApCQGEDNkI7qqqXi9dQ0QwL4eEOMAYkzF94uIiMjTGEDscEqeOSXS2urVKAYgJ3IOyCZ0RTHbWG3XVLzeugYIYF8PiAwgMTGmtzOAEBGRD2ATOpEvWLkSJwEoAGJjY1GvXj1P75E25AF1RQWQk2N2E7sqIPIkQosW3jdLlD1DsPLyxGX1CogMVQwgRETkxRhAiLxdYSHwxx8mw68CZihgRIThwNwVixF6a/8H4HgPiDEZ2AoKgKIi1+0bERGRCzGAEHm79euBoiKkxMUBCKD+D0nlYoSXL19GnqwMWOLNAcQVPSCxsUBI1cjajAzX7RsREZELMYCoFBwc7PRXSAhbbsgBK1cCAFKbNgXAAFJd7dq19UPSTp48af25vDmAGPeAKIr1bS0FEJ2OfSBEROT1GEBUUhTF6a/KykpPvw3yNZWVwKpVAIDUiAgAAdSALqmcihdQMQzLFwJIRQVQUmJ5u9JSoLhYXK8eQAAGECIi8noMICpVVlaa/Zo3bx5CQ0MxduxYrFmzBmlpaSguLsbp06exdu1ajB07FqGhoZg/fz4DCNlv927g4kUgJgap2dkAWAExR3UjujcHEDkEC7A+DMt4mFn1WbAABhAiIvJ6DCBO+O677zB9+nTMnTsXP//8M2644QY0a9YMYWFhaNq0Ka6//nr8/PPPmDdvHqZNm4YffvjB07tMvuaXXwAAlSNGIO30aQCGg+2AoaYCUvU9Sf39d8vP481rgABAcLBougfUBZCICLEIYXXy+5We7tr9I99SXg48+CDw9NO2h/QREWmMAcQJ7777Lho1aoSnnnrK6nZTpkxBfHw83n77bW12jPxHVf/HpUGDUFJSguDgYDRp0sTDO6UxNQGk6vLE+vViCJM5cg2QiAigYUPX7qOrqFkLxFL/h8QKCAHAp58CixcD770HrFvn6b0hIjLBAOKEw4cPo2lVY7AtzZo1Q1JSkpv3iPxKWhpw8CAQFIRT7doBAJo2bRp4kxmoOKPfuip0pJaXA3//bX6jtDRx2bKl960BIqmZipcBhGy5cgV48UXDv198kVUQIvIqDCBOCA0NxfHjx1EsG0ItKC4uxrFjxwLvwJGcUzX8CgMG4FRWFgCgpTcOHXI3FQfUraoO2NMAVG7aZH4jb+7/kNRMxcsAQra8+CKQlQV07gxERQG7duknsyAi8gYMIE649tprkZubi8mTJ6PCwrCPiooKPP7448jNzcWgQYM03kPyaTKAjB2LU1UHzwwg5jW+dAkhAMoAXPjjD/Mb+UIAYQWEnLVvnxh+BQAffww88YS4/tJLYlY9IiIvwFPyTpg9ezb++OMPfPHFF/jjjz8wadIkdOrUCQ0aNEB6ejqOHj2KRYsW4ezZs4iIiMCrr77q6V0mX5GbC2zYIK6PGYNT77wDgAHEkpDUVDQDcBLAqW3b0ERRag6z8qUAoqYHxNwMWADQoIG4ZAAJPIoiAoeiAHfdBQwaBHTpAixcCOzfD6xYAdx2m6f3koiIAcQZ3bp1w2+//Ya7774bZ8+eNRswFEVBkyZN8NVXX6F79+4e2EvySevWAWVlQPv2QIcOgV0BkQfUWVliZp/qQxkVBUhJQUtUBZDMTAxITQWqr5fiSwFEzSxYrIBQdd98A/z5pxh2NW+euK1ePeCpp4DXXgNefhm4+WYx4xoRkQcxgDhp0KBBOHbsGL799lusXbsWx48fR35+PmrVqoX27dvjhhtuwF133YWoqChP7yr5kqrZrzBmDAAgraqBOiADSN264lJRRAiRgURKTwfy8tCy6p+nAGDzZt8MIK7uATFXCSL/lJ8PPPecuP7884DxBClTpwIffAAcPgx8/72ojhAReRB7QFwgKioKDz74IL777jvs27cPycnJ2LdvH7777jtMmjTJa8JHfn4+5s2bh9tuuw0dOnRAXFwcwsLC0KRJE4wfPx6bLDXvVqmsrMSCBQvQq1cvREdHo27duhg+fDh+++03jd5BgCgvB379VVwfOxaKogR2AAkJAeLixHVzZ/VTUgAALWvXBlAVQLZsMd3G29cAkVw5DW9pqfUgQ/7ljTeA8+eB1q1F4DBWpw7wzDPi+qxZ4ncMEZEHMYAEkIsXL2L69On46aefkJ6ejiZNmqBTp07Iy8vDjz/+iCFDhljsU6moqMDYsWMxZcoUHDx4EG3btkWdOnWwfv16jBo1Cm+99ZbG78aPbd8OZGSIg+7+/XHp0iUUFxcjKCgo8NYAkawNK5IBpOp7cwqoGUDOnhUNuN68Bgjgmib0qCggMlJc5zCswJCSAsh1pt5917CgpbEpU8RwrOPHgWXLtN0/IqJqGEACSJ06dfDBBx/g+PHjyMzMxKFDh3DgwAFcuXIF86rGC8+aNQu7du2q8dj58+dj9erViI+Px969e3HgwAGcOHECy5YtQ1BQEKZNm2b2ceQAOfvV6NFASIi+/6Np06YINbfydSCwFkCSkwEALduI5QhPAUBqKnDhgmEb4+FX3jwkyRUBBGAfSKB5+mlR8RoxQj9ss4aYGGDaNHH91VdFjxkRkYcwgKjUtWtXfPfdd1CcXMzp9OnTePTRRzF37lwX7Zl69evXx7/+9S+0q1rUTgoLC8Nzzz2HUaNGQVEU/Pzzzyb3l5aW6gPKu+++ix49eujvmzBhAiZNmgRFUTB79my3v4eAIIe0VR1IBHQDuqSiAtKqapKHNJ0OlYBpFcQX+j8AdT0gsgnd0ixYgKrFG8lPLF8u1vgICRGrnlsL2I8/LiqAJ04AS5ZotYdERDUwgKiUl5eHCRMmoH379njttdeQXHXWVY3S0lKsWLEC48ePR7t27fCf//wHDb1wGEjHjh0BAIWFhSa3b9iwAVlZWYiNjcX48eNrPG7SpEkAgLVr1yJPHhyRY4qLgSNHxPUBAwAwgABQFUAa9+qFkJAQlCkKLgCiEV3ylQDiih4QgBWQQJGRIUIFAMycCVT9DrcoOlpsBwBz5rh334iIrOAsWCodP34cCxYswJtvvomXX34Zs2bNQps2bdC3b1/07t0bCQkJqFu3LsLDw5GdnY3MzEwcOXIEu3fvxu7du1FQUABFUXD99ddj7ty56Nmzp6ffkglFUbBjxw4AQGJiosl98va+ffuaHQLUu3dvREREoLi4GPv378e1117r/h32V0eOABUVov+jcWMADCAALB9QK4p+CFZwx45o3rw5Tpw4gVMAmvhiBYRDsMgeTz8NXL4sVjx//nl1j3noIfG4kyfFrHJyggciIg0xgKgUHh6O5557Do8++iiWLl2Kzz//HPv370dKSgq++eYbs4+Rw7Wio6Px4IMP4uGHH0afPn203G2bCgsLkZKSgvnz52Pbtm245pprcFe1KRpltad169ZmnyMkJATNmjVDcnIykpOTGUCc8fff4rJbN/1QCgYQWB5SlJEB5OSI661bo2XLlvoAMuDvv4HsbDEDEAMI+ZtffwW++goICgL+7/+A8HB1j6tVC2jUCLh4UQzF6t3bvftJRGQGA4idYmJi8Nhjj+Gxxx5DcnIyNm/ejG3btiEtLQ1XrlxBcXEx6tati4YNG6Jnz54YOHAg+vfv7zVT8Uo9e/bEgQMH9P+uVasWZs2ahWnTpiGk2kJvWVlZAIA4K2fK5H1yW3NKSkpQUlKi/3euPJAiA+MAUoUBBJYPqKuGX6FpUyAyUv89OlWvnggnf/4pmvl9JYC4Yh0QgAHE3+XmAo88Iq4/9RTQr599j2/dmgGEiDyKAcQJ7dq1Q7t27fQ9EL6kV69eqFWrFnJzc3HixAnk5+fjhx9+wMCBA3HdddeZbFtcXAxANKtbEl519q2oqMjiNnPmzMErr7zigr33Y9UCSMCvASLZCiBViw7WCCBbtgDXX+8ba4AAtntAFMX2SuiAYbFGBhD/NH26mFq6dWuxwrm9WrcGtm0TAYSIyAMYQHzEtGnTsFKujm2HxYsX45prrjF7u1RWVobPP/8czzzzDEaOHIkNGzZg4MCB+vsjquaULy0ttfg6srIRKdcfMGPmzJmYarRAVm5uLpo1a6b+zQSCagHk8uXL+jVAmhqvbBxobAWQqpnd9AFEVvG2bPGdNUAA20OwCgvFewHUzYLFAOJ/Nm4EPvlEXP/Pf8S6L/aqmrIaqaku2y0iInswgPiI8+fP49ixY3Y/rsDabDpVQkNDMXnyZBQVFeHZZ5/FrFmz8Mcff+jvVzO8Ss0wrfDwcH2lhMzIzBQrGQNA164ADMOvmjRpErhrgACWz+hbqoDIz/2uXYZZxbx9DRDAdgCRw690OsNwLXOcDSD5+cCaNWL4mpWTCqSxwkLRRA4ADz8MDB3q2PPIfj5WQIjIQzgNr49YunQpFEWx+2v48OGqX2P06NEAgL1795rcLtcNOWHhj1V5eTlOnz5tsi054NAhcdmihX54Dfs/qsgD6rw8wKiPSM6AVT2ApJ0/j4qEBLHY2nffoepObfbVGTJUFBSI4VbVGfd/WAtTzgSQigpg7Fjg9tvFqtrkPV56SVQtmjQBqtZmcggDCBF5GAMI6ZWXl5tcSv2qGhx37tyJMjOr5+7ZswclJSUICwvzuumFfYocflVV/QAYQPRq1waCg8X1jAzD7dUqII0bNxZrgZSV4cJVV4n7fvpJXPrC91BWQBQFMNdPpaYBHTAEkIwMw5AttV55BdiwQVxft86+x5L7nD0rFhoEgE8/FT8TjpJDsE6f5oroROQRDCCkJ1dArx4ihg4diri4OOTm5mL58uU1Hrdo0SIAwIgRIxBjbVw6WccZsCwLCgLq1RPX5Vn9zEzxBegPqIKDg9G8eXMAwKmqUKJv6PaF76HxeH5zw7DUBhD5vaqsFFMRq7V2LTB7tuHfO3aIxTHJ8z77TFSnBg8WQ+Oc0aiR6ImqqBAhhIhIYwwgAeSdd97BN998U6MvJC8vD3PnzsWrr74KAHjiiSdM7g8PD8ezzz4LAJg6darJ9L1ff/01Fi1aBJ1Oh+fVLoRF5jGAWFd9WJFsoG3c2KQfQt8HIreXWrRw8w66QFCQ9al41QaQsDDDNmqHYZ09C9xzj6i+PPKIOEgtKQF27lT3eHKfsjLg88/FdbnyuTN0Og7DIiKPYhN6ADl48CCeeeYZBAcHo02bNqhTpw4yMjJw5swZlJaWQqfT4aWXXsLtt99e47HTpk3Dli1bsGbNGiQmJqJr167Iz8/X94XMmTNHP1SLHKAohh4QBhDzqgeQav0fkj6AVFSIRQhlBcBXvofR0aJqYy6AqJmCV6pfXwSW9HSgfXvr25aVAf/4h/je9uolhvpkZQHffw9s3gwMGmT32yAX+vlnsW5Ho0bAzTe75jlbtwaSkhhAiMgjWAEJIE8++SRmzJiBvn37Ij8/H/v27cPFixfRunVrPPTQQ9i5c6fFdTpCQkKwatUqvPfee+jWrRtSUlKQkZGBYcOGYdWqVZgxY4bG78bPnD4tDhZDQoAOHQBwDZAaqgeQav0fkj6ApKUBAwYY3+He/XMVa2uByAqImqGO9jSi//vfYl2I2Fjghx/E8JzBg8V9mzbZfjy518KF4vKf/wRcNRsep+IlIg9iBSSAJCYmIjEx0eHHBwcHY8qUKZgyZYoL94oAGIZfdewohs8ASE9PR1FREdcAkewNIKdOATfcAKxeLQ6o4+O12U9nWZuKV+0QLEB9APnvf4G33hLXFy82HJjKALJtm6iQBPI00J6UlCTW/ggOFlPvugqHYBGRB7EC4gJ///03/vnPf6J9+/aIjo5GSIhprvv000/x73//G7ny4IGoOiv9H40bN7a6Cn3AkAfU6eniUk0AGTFC9FUkJnr/GiCSlgHk1CnggQfE9aefBm691XBfp06imb2wENizx/brkXt8/LG4HDsWcOWJCAYQIvIgBhAnffTRR+jduzcWLVqElJQUFBUVQak2f39JSQnmzp2LX375xUN7SV6PDei2WaqAVFt7Rn6/Tp8+jYquXYHt20Uvg69wRRM6YHnxRmMffih6ZPr1A9580/S+oCBD7weHYXlGfj7wxRfi+uTJrn1uGUBSU82vOUNE5EYMIE7YsGEDnnzySURFReGDDz5AWloa+vfvX2O7O+64A4qiYMWKFR7YS/IJDCC2GQeQnBxDJUQOGapishbIhQtA375i4TZfoaYHxFUVEDnxwUMP6Yf+mWAfiGd9/bWYeKBdO2DYMNc+d6tW4jI31zCdNRGRRhhAnPD2228DAJYtW4bHH38czZo1g87MMI9GjRqhWbNmSEpK0noXyReUlgJHj4rrDCCWGZ/Rl9WP+PgaDdkma4FUfQ99irUhWPbOggVYDyDyc9exo/n7ZQVk61axZgRpR1GAjz4S1x97TFSkXCkyUkxhDXAYFhFpjgHECTt27ECjRo0wWsWiUAkJCTh37pwGe0U+5/hxoLxcHEhXHTgDDCA1GB9QW+j/kEz6QHyNmh4QV8yCVVhoWITOUgDp3l2suJ2XB+zfb/s1yXW2bwcOHhRBQfbpuBr7QIjIQxhAnJCfn49GjRqp2ra0tBQVPINI5sjhV127mjRKM4BUY3xALdcAqdb/Ifl0AHFVD4itAJKcLM6y16tn2La64GDg2mvFdQ7D0paceveuu4C4OPe8hhy+yABCRBpjAHFCQkICUlXMoV5cXIyjR4+ihS+sxEzaM9P/oSgKA0h18iC5uBg4cEBc9+cKiLt7QOTwq6p1ZyySw7A2b7b9muQa6eliPRbA9c3nxowb0YmINMQA4oShQ4ciLy8P//d//2d1u/fffx/FxcUYMWKERntGPsVMAJFrgOh0OjRr1sxDO+ZloqOB8HBxfccOcenPAcRVFZDsbLGOR3W2+j8k2Yi+ZQtQWWn7dcl5//d/ojesTx+gd2/3vQ6HYBGRhzCAOGH69OkIDQ3FE088gY8++gj51Q4YsrOz8eqrr+KFF15AdHQ0nn76aQ/tKXk1MwFEroDONUCM6HSGg+qzZ8UlA4hlcXGGIX0ZGTXvP3ZMXNoKIL16ifCXmWmYNYvcR1GATz8V191Z/QAYQIjIYxhAnNChQwd8+eWXqKysxJNPPom6deti9+7dAIDmzZujQYMGeOWVVxASEoKlS5fyTDbVlJsLVIUNzoClQvVeBRsB5PTp077Xe2WpB6SsTAw/A9QFkOBgoG5dcd3cMCy1Q7BCQ4EBA8R1DsNyv/x84ORJcd14YUh3kD0gZ86IiosrlJcD06cDy5e75vmIyC8xgDjpjjvuwM6dO3HzzTcjJCQEJSUlUBQFZ8+eRVBQEEaPHo0dO3Zg3Lhxnt5V8kbyjHLjxoaDRTCAWGQcQBo0EDM0mVFjLRBfYqkHRE7BC6ibBQuw3AdSWam+AgI4vh5IYSGwYQOHbtnj0iVxGR2tLmg6o2FDICpK/P/IEyHO+vVXYN48YNIkEUaIiMxgAHGBbt264ccff0ROTg7+/vtvbN26Ffv370d2djZWrlyJHj16eHoXyVuZGX4FMIBYZBxALFQ/AB9fC8TSECw5/CoiQlQl1LAUQM6eFeEgNNSwIJ01xo3o9qya/cQTYgG9H39U/5hAd/myuIyPd/9r6XSuH4a1Zo24zM0Fdu1yzXMSkd9hAHGh0NBQdOnSBf3790f37t0RGRnp6V0id/jmG2D4cGDdOuefiwHEPioDCODDfSC2Aog9Z8WNF280JqsfbduqCzN9+ojgc/my4bG2lJQYZnKSs5aRbbICokUAAVwbQBTFEEAA4PffnX9OIvJLDCBE9nrvPWD9emDECOAf/wDOn3f8uYzXADHCAGJBIAQQ2QNSfQiWIwHEUgVEbf+HFB4OXHONuK52GNb69YZhY742DM6TZABp2FCb15N9IK6YijclxdC/AjCAEJFFIZ7eAV/x6quvOv0cOp0OL774ogv2hjzKOHB8/z3w22/Aq68C//oXEGLHj5SicA0QexkHEAuLEEo+G0BcWQGxFUDU9H9IgwaJfo5Nm4BHHrG9/YoVhuvOhPRA48sVEFn9aN8eOH5cTJedl6e+Z4mIAgYDiEqzZs2CTqeDYmb8s85o9WpLFEVhAPEHlZWGs7m//AK8/rr4I/v008CSJcDHHxvOFNty4QKQlQUEBQGdOulvvnLlCgoLC7kGiDlySBHgvxUQGUAKC4GKCjGbFWCoJngqgMhGdNkHYu33XkUF8N//Gv7NCoh6WvaAAO4JIA89JKYSTk0FNm4Exoxx/rmJyK8wgKj08ssvm709IyMDn376KcrKynD11VejU6dOiI+Px+XLl3HkyBFs374dYWFheOSRR1DXaJYj8lHp6eLgSqcTQ7BGjQIWLRLTTh44IA7SDh0SZwBtkdWPdu0Ao34hecCckJCAcLnwHgmBMARLBhBAhBB59lhWQOw5m2wpgMg+DrVDsADg6qtFv8i5c+JgVQ7dMWfbNvGzIrECop4nh2DZCpbWFBeLsAGI340nTojn/P13BhAiqoEBRCVzAeTy5cvo27cvOnbsiCVLlqBXr141ttm/fz/uv/9+rFy5Ejt37tRiV8md5IFUw4aG5t1//hO4+WbRmH7wIPDnn/YFkGoN6HIRQg6/MqNxY3HZsKFYaM+K6muBBMtKgreLiBAHgYoi+kCqBxBnKyB5eSJEAPYFkMhIoG9f8fn+3/+sBxA5/GrECGDtWhFGysrUz94VyLQegtWihfi85eeLz4lxldEeW7eKwJyQIH6nXX898Mkn7AMhIrPYhO6EF154AefPn8cvv/xiNnwAQM+ePbFy5UqcO3cOL7zwgsZ7SC4nA4g8EJYaNACuukpclwd3tnAGLPt16gQsWAB89ZXNTX12LRCdznwfiKsCiKx+xMfbDHE1jBolLj/80PJ0vIpiCCD//KehL+riRfteK1BpPQQrIgJo0kRcd2YYlhx+NXKk+AwPGyaGlx49KqZ9JiIywgDihF9//RVdu3bVrzdgSYsWLdC1a1esXr1aoz0jt7EUQADDH3G1AUQuQsgAYp8nngBuuMHmZn63FogzAcR4OJQj/R/So4+KfTt4UCw4Z86BA8CpU+LAduRIcUYcYB+IWloPwQJc0weydq24HDFCXNapI6ZvBryzCrJ1qxj++sknnt4TooDEAOKEjIwMFBUVqdq2uLgYGRkZbt4jcjtXBhC58nC1oSwMIK7j830grgoghYXiC3Cs/0OqWxd47DFx/fXXzVdBfv5ZXI4YIaYUlgGEfSC2FRcDOTniulYVEMD5qXjPnhUnVIKCxFBU6frrxaW3BZC0NODWW8W0wdOmAZmZnt4jooDDAOKEli1b4vjx49i+fbvV7bZv346jR4/ygNIfuCqAFBUBMpA2bWpylzxYbtGihYM7SZLPBhBza4E4MgtWbKyh70J+3pypgABixrfwcGD7djEjVnVy+NUtt4hL+bPCCohtslIVGioqCFpxtgIiqx99+wL16hlulwHkjz/EDILeoLBQ9OzJ73VeHvD227Yfd/ky8OyzwJEjbt09okDBAOKEiRMnQlEUjBkzBp9++imKi4tN7i8uLsZnn32GsWPHQqfTYeLEiR7aU3IZGUBk2DAmb1NzpleOiY6KqjEO/2LVWPkm5l6D7OKzAcRaBcSeWbB0upp9IM4GkIQE4MEHxfU5c0zvO3FCDM8KDjbMfOSqCoilnhN/Yjz8ytHZqBzhqgAih19JV18twnR6uvhceJqiiM/u/v2ib2/BAnH7++/XnCmu+uMmThRB5b77AuOzSORmDCBOeOaZZ3DTTTchMzMTkydPRr169dC5c2cMHjwYnTt3Rv369fHYY48hIyMDo0aNwjPPPOPpXSZnqamAXLokZvyxRgaQpk1NDjTKy8v1Q/UaajkG3E/5ZQCxpwICmAaQigogOVn825EhWNJzz4mQsXYtsGeP4XZZ/Rg8WAzXAuyrgBw9Kiosd98tDmZ79xazNNWqJYYkpaQ4vs++QOsZsCQZQBwZglVebhhiNXKk6X1hYcCQIeK6NwzDmjcP+O47MTHCjz+KxWMTE0Wlcf58y4/74QdDz9Pu3YaGeyJyGAOIE4KDg/Hzzz/jvffeQ7NmzVBUVISjR49iy5YtOHr0KAoLC9G0aVO8++67+O9//+s704CSZdYCSP36YuiEotie8cc4gBi5UnUWLigoiOvGuIAcxianNvYZ7gogaWlASYkYQuXMEL9WrYAJE8R14ypI9eFXgH0VkGnTgPfeA77+Gli3Dti7Fzh9WhwgpqeLoTz+zFMBRPaAnDsn+lDssXMnkJ0tKrmy6dyYt/SB/PorMHOmuP7BB8C114qTP6+8Im778EPD999YVhbw5JPiupxw5pVXWAUhchIDiJOCgoLw5JNP4tSpUzh8+DBWrFiBr776CitWrMDhw4dx6tQpTJkyBUFB/Fb7vPJywx8ocwEkKMhwsGWrD0QGkGornV+umoKzfv36DKwu0Ljq/8mnpuEFzPeAuCKAyOFX7dsbVlh31IwZ4vKnn8S4+EuXxAKEgBhjL9lTAZEN8k8+CXzxBbB6NfDXX6IiAgBnzji3z95O6yl4pfr1RehVFMPkGGrJ4VfXX2/+MyUDyJYt9ocbVzl2DLjrLvH+HnlEzOYmjR4tglNhoaiQVDd9uvhsd+wo3kNkpPhMejpQEfk4HhW7UKdOnTBu3DjcfffdGDduHDp16gSdluN4yb0uXRJ/wIKDLS/WpbYRXR5IVauAyADC4Veu0ahRIwBAQUEB8o2rCd7OXRUQZ/s/jHXuLCodigLMnQv897/iep8+pp9rtRWQykrDwe9TT4mx9qNGicbmrl3F7c6uJ7Fnjzj77akDYVs8MQUvICoBjvaBGK//YU6nTiKEFheLqW+1lpcHjBsnfn4GDjT0fUg6HfDqq+L6woWmQXnLFuDzz8X1Tz8VFRAZXlgFIXIKAwiRWvIAKiFBVDvMURtAbFRAGEBco1atWoiuqiZc9KWF8KoHEEVxbBYswHwAcab/w5gc0rJ0KfDxx+K68fArwFABkauhW3LxohgeFhRUI5jr/+1sAJk4UVRXBg3yzmqKp4ZgAY71gVy5AuzaJa5bWptHp/PsMKwffhAVkCZNgOXLRV9KdSNGANdcI0LS3LnitpIS4OGHxfWHHhKfGUD0P4WHi2rf//6nzXsg8kMhnt4BX/bll1/a/Zj77rvPDXtCmrDW/yHZG0BYAXG7Ro0aITU1FRcvXkTbtm09vTvqyCFYMoAUFhqmMbVnFizANIDIEOaKCgggqh3XXy8OLPfvF7dVDyD164umXzmEsXq4kOREAc2aGaYOllwRQPLyDIt/7tolGtx/+EE0zHsLTw3BAgx9IPZUQP74Q4Tjbt3MzwwoXX+9GFL3+++GA3ytyGlzx4+3/H2VVZDrrxcLEz73HPCf/4jAHh9vOjQrIUEEkw8+EI+57jr3vwciP8QA4oQHHnhA9RArRVGg0+kYQHyZKwMIh2BpxjiA+AxZAZE9IHL4lU5nCCdquWsIlvTvfxvObHfsWPO5g4KARo1EeLhwwXYAMbdekqwUnjkjDngdGdq6f794bMOG4md4/35x8Pj226Iq4g3DZT01BAtwbAiWreFXklyccN8+UQmzNITVHY4fF5ft21vf7rrrxBCtrVvFMKt168Tt779fY6p0TJ8uhmRt3gxs3GiY6YuIVGMAccJ9991nMYAUFBQgJSUFBw4cQGhoKMaPH4/Q6mf1yLfYE0CsjXcvLjbMOc8hWG4n+0B8MoDICohx/4e9B8oygBw/bjjDbutgzB6DB4vhK9u3i9WlzUlIEAHE2s/FyZPislWrmvfJn6uiIjErkSMzxMnpgq+5Rsyy9fDDwLJlot9k1y7gs8/Eujye5A1DsNQGEEWxvP5HdfHxQPfuYi2Q9euBO+90fD/tJSc2sPWZl1WQYcOAVavEbTfeCNxxR81tmzQRw7IWLhSPYQAhshsDiBOWLFlic5vdu3fjgQcewLlz57BOnlEh3+SqCoi8LzKyxpk1BhDX87sAYi8ZQOTwpSZN7B/GZY1OJw7kFy8WK0Wbo2YmLGsVkIgI8T6uXBHvw5kA0ru3CBpffSWGkD3zjNj/o0fFuH5zPQJaqKgwnJjwRACRwU/tmjnHj4shfZGRonJgy/XXiwDy++/aBZDyckNPi5rQPXSoCBMbN4rPyMKFlgP/jBmiQX3DBtGsfu21rtprooDAJnQ3u+qqq7BixQps2bIFs2fP9vTukDPsDSCWZkgxHn5V7Y8bA4jr+WQAqd4D4ooAIrly+JXUqpU4E2xp/9TMhCUrIOYCCGA6DMsRxgEEED97U6aIPobYWHH/li2OPbcrXLliGF5Wr572ry//7/Lz1c3uJMNSQoJoyrZl2DBxuWOHY/vniFOnRAiJjLQ89K+6d98Vs6598onlzyIgPo8PPiiuy1m0iEg1BhANtGvXDp07d8ayZcs8vSvkDDUBRN5XUGA4aKzOwgxYAAOIO/hkAKneA+LoDFhAzQDiqhmw7GFPBcTcECzAuUb0vDxD/4sMINKQIYbbzC1EpxX52rJpX2sy9CqKummK5WdTbU9S1c8hsrPt3jWHyf6Pdu0sz1xYXc+ewN9/A/fea3vbGTPE/9UffxjWwCEiVRhANFJWVoZzthqTyTPOnQO+/NIwy5AlagJIVBRQp47hec2xMAMWwADiDglVZ999MoBUr4A4MnQqKsq0t8EdFRBbbFVAKirEiueA5bPOzgQQ2YDepIn54U2yKTo93f7ndhVP9n8ApkHCeAFMS+wNIPKzK8O0FtQ2oDuqZUtDUOEJRiK7MIBoYNeuXUhOTuZBpbeaMgW4/37gm28sb1NSYhhyYC2AALb7QCzMgFVQUICCqj/q8Z46CPFDPl0BccUQLMC0CuKJAGKrAnL+vFgjJCTE8nSu8ufFkSFYcvjVVVeZv1/+bpZN+p4gX9tTfyeCgw1DqdwZQNQO8XIFdwcQQDTXA0Bmpvteg8gPsQndCZs3b7Z4n6IoSE9Px65du/D5559DURTcYW42DfK8P/8Ul7t3A3ffbX4befAaFma7AbZJE+DwYdsVEAszYEVGRuoXzyPnyQBy6dIlVFZWIkjtUAxPcmUPCCACiKwweGMFRA6/at5cHAibI39eHKmAVO//qI4VECE6WpxsURNACgsNj1FDBhBFEY/V4nec2hmwnGEcrIhINQYQJwwZMsTmOiBK1Zme4cOH45VXXtFit+xSXFyMbt26ISUlBQBw5swZNLXQrFdZWYkPP/wQixcvxvHjxxEeHo7ExEQ888wzuPHGG7Xcbde5cMEQLpKSLG9nPPzK1jSotiogKhYhVLu+DNkmK4/l5eXIzMxE/eo9Ed5IVkBKSkQTrasqIFFR1heMcxdZAbl8Wbyf6j0OthrQAeeGYNkKIN5QAfGWAJKZ6Z4KSFSU+N2pKGIYlhYBRIsKiPxZ1XJoGZEfYABxwqBBgyweKOp0OkRHR6N169a48cYbMdLWQk0eMnv2bH34sKaiogLjxo3D6tWrERQUhK5duyIvLw/r16/H+vXrMX/+fDxraQpOb7Zvn+G62gBii4NDsNj/4R6hoaGoX78+rly5gosXL/pWAAFMJzRwNoB06KC+GdeVGjQQlY2KCnGgXT0E2WpAB0wDiD2LEebnW25AN94/wLMVEE8PwQIMocAdAUSnE5/rvDzxJZvS3aWgwBBW3TnxAisgRA5hAHHCxo0bPb0LTjly5Ajmz5+PsWPHYuXKlVa3nT9/PlavXo34+HisXbsWPXr0AAB8/fXXuPfeezFt2jQMHjwYffr00WLXXcc4gJw9Kw70zB3kORJAzA03KS42HORwEULNNGrUSB9Aunbt6undsS0sTFQJysvFgY0zs2ABhgDiieFXgGE19HPnRNWxegCxpwJSUCBmUqq+OrUl+/ZZb0AHDAf9HIIlLt0RQABxsC4DiLvJE2v16jm2boxarIAQOcQHBkOTOyiKgkceeQTBwcF4//33rW5bWlqKefPmAQDeffddffgAgAkTJmDSpElQFMU31znZu9f03/JMaXWuqoDI54mIqPFHkQHEfXyuEV2nM+0DcWYWLAAYOVIcsN92m2v2zxHW+kDUVEAiIw3rY9gzDMtWAzpgqIBwCJa4dGcAAbQ5WNdi+BXACgiRgxhAnNC6dWvcqXJF17vuugtt2rRx8x6pt2jRImzZsgUvvPACWlo76whgw4YNyMrKQmxsLMaPH1/j/kmTJgEA1q5dizxfOwskKyDyLJalYVj2BBC5jbkAwkUIPcLnAghguhaIs0OwbrwRyMjwbACxNhOWtVXQjTnSB2Kr/wMwVEBycoDSUvXP7Ur+PgQL8M8AwgoIkUMYQJxw6tQpnLe2sq+Rixcv4pT8I+th6enpmD59Ojp06KCqb2NH1cq1ffv2RWhoaI37e/fujYiICJSUlGD//v2u3l33ycoyDP24+WZx6YoAIisgly6JITTGuAihR8gAcsHaQnjexngqXmcDCKC+Z8JdLFVAyssNwdxaBQRwbDV0NQGkTh3D7FueGIalKIYA4skKiFwvxh8CiBYzYAGemV7Yl8ybBwwYYJjGnqgKA4hGiouLEeKJ1W3NePrpp5GZmYmPPvoIYWFhNrdPTk4GICo+5oSEhKBZ1YGB3NYnyOpHq1biFyTgmgDSsKEYv19ZaZhhS+IihB7h0xUQVwUQT7NUATl7VjSnh4XZbky2twKipgEdED0qnmxEz842VF4CoQKixXAlrSsgcnphMrh0CXjxRbFK/LffenpvyMswgGjgypUrSEpK8orF5davX49ly5bhzjvvxHXXXafqMVlZWQCAOCtNn/I+ua05JSUlyM3NNfnyKBlAevUCOncW110RQIKCDGd7qw/DYgDxCJ8MIMYHg/4QQCxVQGQVskUL2zN02RtAbK2AbsyTfSCy/yM2VvSHeYq/DMFSFEMFxJ0zYAGG6YUB9oFU98knhmC9Zo1n94W8jneckvcRX3zxBb744guT2/7++28MGzbM4mOKioqQlJSE/Px8s/0TWiouLsajjz6KmJgYvPPOO3Y9DoDVakl41Qq6RUVFFreZM2eOd62FIhvQExOBTp3E9VOnxB9W4z+qhYXiDCWgLoAA4oDnzJmaAUQOHeEQLE35ZAAxroA4OwuWN7BUAVHTgC7ZOwRr925xaa36IXlyJixvGH4F+E8Aycgw/M5u29a9rxUUJL4H8ufU0/+H3qKkBPj4Y8O/N2wQt1UdKxAxgNjh1KlTJlPv6nQ65OTkqJqOd9iwYXjzzTcdfu1p06bZnCrXnMWLF+Oaa64BYFjz491330WCPBupQkTVGblSK82ZJSUlAMQq3pbMnDkTU6dO1f87NzdXP3TLI4wrIA0aiKlKr1wRZ84SEw3byQOmqCj1B4CWZsKyUAGprKxEetWBDwOI6/l0AMnKAmSwd3QWLG9gqwJiqwEdsL8ComYGLMkbKiCePniVYULNUCJHAohWDdty+FXz5mL2NHeLiTE9UUDA99+Lz3XjxobhyFu3AipHXpD/YwCxwwMPPIAhQ4YAENPYDhs2DN26dcOCBQvMbq/T6RAZGYlWrVo5vfjZ+fPncUyWlO1QUPVHIjk5GfPnz0ePHj3wxBNP2PUcaoZXqRmmFR4erq+UeFxBgWFsuAwbnTsDmzeLYVjGAcSeVdAlS2uBWAggWVlZqKioAADfWCjPx8gAkpmZiZKSEu/5HFojD9aMKwa+HEAsrYZuTwVE/tycOaNuMUI1DeiSJ3tAvC2A+HoFRKv+DykmRvyccgiWoCiAnN5/8mQgORn44gtg7VoGENJjALFDixYt0KJFC/2/Bw0ahB49emDw4MFuf+2lS5di6dKlDj/+8OHDKC0tRWpqKppUXwTMSGJiIoKCgvDss8/qZ8hq164dAODEiRNmH1NeXo7Tp0+bbOv1Dh4UvyQTEgyNr8YBxJg9/R+SuQpISYnhQMPCIoRxcXGqJgYg+8TFxSE0NBRlZWW4fPmyZytvaskDOxlAIiJEo7avatBADFeprBQhRP48qZ2CFzBdjDA3F6hd2/K2ahvQJVl59EQFxBum4AX8J4BoNQOWxKl4TW3bJsJ/RATw8MPA+vWGAFK1phgRA4gTfHEl9Pz8fORbOUsjhwEZb9OvXz8AwM6dO1FWVlZjKt49e/agpKQEYWFh6Nmzp+t32h1k/0evXobbLDWiOxJAzK0FIp8nPNywoFoV9n+4V1BQEOLj43H27FlcvHjRNwKIPKiRnxtf7v8AxDS3jRqJ93PhguFnRA7BUlMBiYoSC3hmZooqiLUAYk8DOsAKCOA/AURWQNzdgC5xMUJTsvpx993i5+r660W18uBB8fNvz99S8lucBStA3HzzzVAUxeKXdObMGSiKglmzZulvGzp0KOLi4pCbm4vly5fXeO5FixYBAEaMGIEYXxkiIvs/jIdauTKAmKuAGA+/4iKEmpN9Tz7TB+JvAQSo2QdSWmr4GVFTAQHU94HYM/wK8GwFxNcCSGWloU/EG6fh1XoIFisgBqdPAz/9JK5PmSIu69Uz9GGtW+eZ/SKvwwqISq+++ioAMT5/8uTJJreppdPp8OKLL7p839wtPDwczz77LJ5//nlMnToVnTt3Ro8ePQAAX3/9NRYtWgSdTofnn3/ew3tqB2sVkNRU09k6XBVAOAOWR/lcI3r1HhB/CCCNG4tgIN/T6dOiShEZqX74UdOm4kyqrQAiZ8BS04AOeLYC4mtDsIxnO5SLF6qhRQWkslL0HADa9oAArIAAwEcfiXV9hg4FunUz3D5yJLBrlxiG9cADHts98h4MICrNmjULOp0OHTp00AcQeZtiY/VTuY2vBhBAzMK1ZcsWrFmzBomJiejatSvy8/P1fSFz5szRD9XyeqWlwKFD4rpxBaRRI7Eicna2OIMmf3k6E0DkInKxsVbXALlUdQaUAcR9fC6AyINBuQaIr1QXraleATHu/1A7wYPaqXhZAbGf2gBifL+3BZAzZ8QJpNBQsbaMFvy1AqJmogdjBQXA55+L67L6IY0YAbz2mqiAVFSIIZkU0BhAVHr55ZcBmM5QJG8LBCEhIVi1ahU+/PBDLF68GMnJyQgNDcWwYcMwdepUjB492tO7qN7hw0BZGRAXZ/oHSqcTVZBt28QwLGcCSHS0GJ+ekyOqIDYCCCsg7udzAUQe1Ej+UgEBDBUQexrQJTVDsOxtQAcMFZC8PKC4WNsFAX01gERE2HcgqcWBuhx+1batdge5/lgBmTNHNIy/8grwxBPqgsjSpWLa8FatgJtuMr2vXz/xNzEzU5wc6NvXPftNPoMBRCVzYcOfAoitKg4ABAcHY8qUKZhS/cyGrzFe/6P6L1XjACI5EkAAUQWRAaRTJw7B8jAGEC9QvQJiTwO6pCaA2NuADojqZ0iImCI4Pd3sz6lbFBQYDug9/fNvbwCxp/8D0KYCovUMWIB/VkC+/VaMBpgyRaxivnix9Z8lRQHkkgRPPlkz/IWEAMOHAz/+KJ7PFwKIogB33CEWUYyLE19164rL6r+fyW5sQqfAY67/Q6reiJ6XZzirZcfijQBq9oGoqIDEe/oMqB9jAPECrqiAyGBgLYDYO/wKECcjPNEHIod8RUR4fpidVgEkP1/0ariD1jNgAf5XAamoMAS5kBDgt9+A7t2BX3+1/Jg//hB/N2vVAiZONL/NiBHicu1a1+6vu5w7ByxfDmRkACkphh6Wb78F/vMfT++dz2MAocAjA4hx/4dUPYAYz0Bk7xmP6osRcgiWR/lcAKl+cOcPAcRSBcSRIVjWekDsbUCXPNEHYjz8yp7x9u4gP3NlZeLLEmcDiPFzuJrWM2AB/lcBOXXKMBHLnj1A167iZ2L0aFERKS4GrlwBVq4Epk0D+vcX9wEifFiaHlsGkB07xFAtb/f33+KybVuxivvKlWI9k3ffFVMLk1M4BMsFcnNzsWHDBpw4cQL5+fkWhzP5chO636ioAA4cENetVUCOHxd/gB0dfmX8mHPnROO7hUUIAQYQLRgHEDkphFfz5wrIpUviZ9GeVdAlGUDy8gwTPBhTFODPP8V1ewOIJyog8veCN/zsGzeUFxSIYWnmODIFLyBmO5OLUebnu6fi44kA4m8VkCNHxGWHDqLysWsXMH26GGK1YAHw5ZdieFZ1XbqIQGJJ8+ZiOPKRI2JxwvHj3bL7LiMDSGIiMGCA6X233272ZCKpxwDipDlz5mD27NkoLi7W31Y9gPjDLFh+4/hx8cczKsr8H6imTcWBX36+KLk6E0CMh2CdPy8OjMLCAKOJDACgpKQEOTk5ABhA3EkObyssLER+fr73r1lTPYB4+/6q0bCh4QD09GnDUCx7KiDR0WIMdlaWqCrKkwbSsWOishIWBgwaZP/+AbYrIF9+KSqp77wj3o8z5Gt5w/DL8HDD/4+1AOJoBUSnE5/jnBwRIO0d1mpLSYkh1LIC4jgZQDp1EpcREWJxwZEjxRS68jPbuTMwcKDhS81sdiNHiudfu9Z3Akj37jXv84ffxx7GAOKEhQsX6te+SExMRJ8+fdCwYUMEOfsHidxHNqD36GF+hhSdTvzS3bVLDMNyVQCxsgihXH0+JCQEdSz9wSenRUdHIyYmBnl5ebhw4YLvBRB/qIAEB4sD7QsXxDAMQLzPevXse56mTUUAOXOmZgCR49SHDLH/AFltBeTpp8VsPhMmON9M6y0zYAHid1N0tDiQtjZEytEAApgGEFdLTRUnemJjta0o+WsFRAYQ6cYbRcA/eFBUO+z9uQXEMKx33xUBxN5pfrV28KC4NF7PhFyGAcQJCxcuhE6nw8KFC/HII494endIDWv9H1LnzoYAkpkpbnM2gKicAcvrhwX5uEaNGiEvLw8XL15Eey3PkDrCH3tAAHHW+8IFMdscYN8aIFLTpuLspLlGdBlARo2yf9/UVEAyMw2/F06dcl0A8ZbqpwwgcpiVOc4GEMA9AUQ2TnfooO2Brb9WQKqHe0BUxeytLBobNEhUVM6cEa9j7jW8QVmZ4fvAAOIWPFXvhNTUVDRu3Jjhw5cYT8FriXEjuisqIBcvGoYFsAHdo3yqET00VAwjkvwlgMifJRlA7On/kCzNhJWXB2zeLK47EkDUVECqFl8FAKSl2f8a1XnTECxA3UxYzgQQdx6se6L/A/CvCoiiWK6AuEJkJDB4sLjuzbNhyT7QWrW0W9AywDCAOCEuLk5/QEM+QFHUV0AA5wNIw4ZiyEllpWFaUAYQj/KpAAKYDsPylwAix/3LySDs6f+QLM2EtX69OGho2xZo187+51VTAUlNNVx3RQDxpiFYgPsDiDsrIJ4KIP5UAbl4UQyRCwpy7GdIDTkb1po17nl+QEz8kpvr+ONl/0e3bs73eZFZ/K46YeTIkUhKSkKuMx9y0k5ampi5IzRUjF+1RAaQY8cMBziOBJDgYMPB1l9/iUvOgOVRDCBeQP4sVVSIS2cCSPUKiDPDrwB1FRB3BRBv+flnALGffE+lpeLLl8nqR5s2YlICd5ABZPNmoKjIPa8xbJg4ESHX4bIX+z/cjgHECa+//jpq166Nhx9+GEXu+iEi15HVj65dTYe2VNeihSgTl5QYDjAcCSCAYRgW1wDxCj4XQIwP8Ly9aV6t6jMfOTIEy1wAURTnA4iaCgiHYLkmgNgarpSfL5qeFy1S/9yeroAAvj8MS66B5Y7hV1KnTuJvY3GxYXSAKxUXi6m409OBDz907DmMKyDkFmxCd8Lvv/+ORx99FK+//jq2bNmCu+66C23atEG0lV/K9913n4Z7SCbkLzprw68AUbno2NHQLwI4Pl1k9eDCAOJRPhdA/LECUv1nyZEKiLkekL//Fmc7jceY20tWQAoKDNN1V2dcATl92rHXkcrKDA3tgRZAbFVA1q0TQ3T++gu47z5RubYmO9sQ5tw1dMiS0FBRLSgpEQGkbl1tX9+V3Nn/Iel04m/juXPm1xNxlvHP5aefAi+8YP9n1doUvOQSDCBOeOCBB/RrfFy4cAHvvvuuzccwgHjI118Db70lrl99te3tO3c2BJC6dcWsHY6QFRCJQ7A8ymcDiJwe1R9UD+WOVEDkz5WczjUmxlD9uO46x39eY2NFdbS0VJw9Ndd8ahxAcnLEl6WVn22RB8zBwd5z0OotAUQGs6wsYONG2ytPy+pH48aeqRbWqiUCiK/3gWgRQAB1nzNHyUlfAPH5+eILYPJk9Y/PyTFUN1kBcRsGECfcd999nDbV2ykK8OqrwKxZ4t833wzce6/txxlPDejo8CvANICYWYQQYADRUkLV2XefCyCxsd49X749jCsgtWtbXuzOmpgY8dicHFEF6dTJ+eFXgPgeN2ggzsyaCyAlJYaqiwwqaWmOnyWV/R8NGnhPo6u3BRAA+PFH2wFk505x2aGD/fvkCjExQEaG7w/B8ocAIsNDSAhQXi7WHXn0UfU/Y4cOicsmTcSip+QWDCBOWLJkiad3gawpKQEmTQKWLRP/fu454M031f0SckcAadLE7GszgGhHVkAuX76MiooKBJtbjNKbyD/S/jL8ChBDjXQ6cXLAkeqH1KyZIYA0amSY1vfGG53bv4YNRQAx1wdy6pTY7+hocaC7d69zAcTb+j8A75mG1ziArFgBfPSR+cVjpa++Epdjxti/T67grpmwfvkFmDoVWLBA3Wd75Urg7beBG24QJ9uaN1f/WtnZYhYsQAxDdictKiB33y2+HykpwKpVwNix6h7P/g9NeMkpFyIXu3IFGD5chI/gYOCzz4B589SfAXFHADEz/EpRFFyqOgvKAOJ+DRo0gE6nQ0VFBTIyMjy9O7YZV0D8RUiIodnbkf4PyXgq3t9/F7Nqde7s3HMC1mfCksOv2rQxVEecaUT3thmwAO+sgFy+LJqKLTl6VFRAgoPF6vSe4K61QD7/XBxA3313zWmnqzt2TLz/zZtF30PLluLv4NKl1heWlGT1o0kT9//O0SKAdOkCPPywuK5iiLwe+z80wQBC/ufoUaBfP2DrVjFMY80a4J//tO85Wrc2zJTlqgBipgE9NzcXpVXTNjaQBz7kNiEhIfrvs08Mw5IBxF9mwJLkz5QrAsjZs4bhV85WPwDrM2HJGbBat3ZtAPHVCoi5Jn1b1AaQrCxxKX8P//ST5W2/+EJc3nij576X7qqAyNkbs7JERUNOX11dcTFw553i/6ZPH2DoUFGtW79ePK5RI9EHUVJi+bW0Gn4FaBNAWrYE/vUvcdJj40bD99IWTsGrCQ7BcsKXX36petvg4GDExMSgZcuW6NKli/cP/fBVlZXAHXeIA4WWLYHVq02rGWqFhIipHA8dcmsAkcOvatWqhShH/piT3Ro1aoTLly/j4sWL6O7tZ7j8sQICiJ+FfftEJcFRsqJ4+jTw22/iujP9H5LaCoj8eVYzE1ZGhjgwrR64AnEIltpKgayA3HIL8N13IoC8+27NXqiKCsPwq/vvt39/XMUdFZBLl8RwQDkJxaZNwJw5orpR3XPPAfv3iz7Dn38Wf7dOnQK+/BJYsgQ4eRL4+GMxJGvGDPOv548BpGlTcUzw9dfi8yM/K5YoCodgaYQBxAlyFix71alTB5MmTcKsWbN40OlqQUHiF+60aaLs7MzQhttvF2c3Bw1y/Dlq1RIHj7m5nAHLSzRq1AgHDx70jQqIP/aAAMC//y3OyN51l+PPIQPAr7+KA/latYCBA53fNzUVkDZtDKFBTQWkf38gORl47DFg9mxDY6uvV0C0GIJ1553iRNKZM8CuXUDfvqbb/e9/4iA9Ls5z/R+Aeyog8ox9hw7AzJkiYM2aJRbZ69/fsN3PPxvWu/jyS9MK40svicDy5pvA888D//2vfweQkhLgwgVxXQb+p58WAeTbb8X3ofrslMbOnhW9ZXI6fnIbDsFywn333Yc777wTISEhUBQFLVu2xJgxYzBhwgSMGTMGLVu2hKIoCA0NxT/+8Q/cdttt6NKlC7KysvD2229j2LBhKC4u9vTb8D89e4o55J09qH/pJVH2dvYsiPxlxzVAvIJPTcU7bJj4HI8e7ek9ca2rrxZ9WfXqOf4c8udJHmxcf731BUbVUlMBsWcIVnq6mCJWUYCFC8XB5BdfiH97Yw+IPClmqWdAUbQNII0bGz7/P/5Yczs5/OrOO923crca7qiAyACSmCiGUd19t6j4TJhgWD/j9GngwQfF9WefNT8MMShIrKUCiHVVLC206Q8B5MwZ8RmNjDTMOnnVVeJEYnm5mMzAGln96NjRs5+nAMAA4oSFCxciJSUFjRs3xoYNG5Camoqff/4ZX331FX7++WekpqZi48aNaNy4MVJTU7FkyRIcPHgQf/31F5o3b45du3bhI1s/DORZrhgq98ILwPjxZqeRlAEk3pvOgPo5nwogffuKWWkeeMDTe+J9qlcUXTH8CrBcAVEU0wqIDCAXL4rx95bIlaUbNBAHNenp4v9z0CDRNAz4VgWktNTQh+DOACJ7QOLigNtuE9d//FH8P0i5uYbeEE8OvwLcWwHp3VsMw1q4UITftDQxrWx5uagiZmWJvo/XX7f8XE2biiCjKKKiVF1RkRimBfh2ADEefmU8QuXpp8XlJ59Yf032f2iGAcQJr776Kvbs2YNff/0Vgy2svDto0CCsWrUKu3fvxqyqtSj69OmD7777Doqi4LvvvtNwj8kjJkwAfvjB7B9rVkC051MBBPCf9T9crXpF0RUN6IDlCsjFi+IgLShIjKOvV89QLbA2O9Hhw+KyXz/gwAExBCQqSkySIftHfCmAGN/uTAApKBA9e+aUlRkO5OvWFf+3ERGiAiUPEAFg+XLxf9KhQ82hWVpzRwVkzx5xmZgoLmNjxVCikBDRFzNkiJh+OjZWDC+yVQGUQ9R++aXmfbJKFxenTUVOiwBibMwYceJALkxoCfs/NMMA4oTvv/8enTt3RicbZws6d+6Mrl27Yvny5frb+vbtixYtWuCYPANGAYkBRHsygFyQQ3fIN8XEGHpjevSwPq7bHpYqIHL4VfPm4kBPp1M3DEtWQDp3Fo+bPl3M1CfP6gcHm+0P8xi1ASQkxLEhb7JSAFg+WJfVD0AsVFmrFjBypPi38WxY8kDy/vs9H9RdXQHJyDB8rnr1Mtzerx/w2mviupya+LPPRGXEFhlA1q6tWbUzHn6lxfdS6wASHAw89ZS4/t57lmcTYwDRDAOIEy5cuIAgletK6HS6Ggc8DRs21E/BSoGJAUR7PlcBIctkFcRVw68AQwWkqMj04Mh4BixJBhBrM2EZBxCpWTNx9n7LFnEwKMeqewNbB4ayN8SR6gcgKhlyaKulg3XZ/1GnjmFb42FYgBgutHmzOFi+917H9sWV1A4tU0sOv2rbVkwnb2zaNNEfBogp5v/xD3XPmZgoemoKC4ENG0zv07L/A3BfAJGhzdwU3w88ID5TycnA99/XvL+0VJwcALgGiAYYQJzQqFEjHD58GMePH7e63fHjx3Ho0CH9gY905swZ1K1b1527SF6OAUR7DCB+ZOxYcXDmygPQWrXEQTJgWgUxXgNEkqtMW6uAyCFYXbrUvG/gQOC66xzfV3dQWwFxNIDodLYP1o37P6SbbgJCQ8X389gxMdsTIL5/Zib40JysgNgagrVpk/gM/fGH9e2MG9CrCwoSs1n997+iL0Qtnc7yMCxzQdmd3F0BkScHjNWqBTzzjLj+8suih8bYsWNi+F9srH0ryJNDGECccPvtt6OiogI33XQTduzYYXabv/76CzfddBMURcEdd9yhv/38+fO4ePEiOnTooNXukhdiANGeDCDZ2dmchc7XzZkjDlZdedZWpzPfB2KtAmIpgFy5YggxvjKlpzwwLCw036PhbAABbPdLyAqI8Qm6OnUMYW35ckMA8XTzuaS2ArJ8uajezJ9vfTtrAQQQB9Njx4qhcPaQAWTVKtOGfn+pgFgagiVNmSIqjsnJNdcEkcOvunb1/JC+AMAA4oSXXnoJPXv2REpKCgYMGICOHTvijjvuwKRJk/CPf/wDnTp1Qv/+/ZGSkoKePXvipZde0j9Wzn41ypVDB8jnMIBor06dOgirGrt+SU6DSr7LHQcK5vpAHAkg8qCuRQvT3gdvZhwsiopq3u/KAGJrCFb1EQJyGNbbb4uKVK1aYqFCb6C2AnLlirjcuNH6trIBvXdvp3fNxLBhYoraM2fEpAiAqATIkRy+HEBKS8WaMIDlABITY1gH5ZVXxGMkGUA4/EoTDCBOqFWrFjZt2oTJkycjPDwcx48fx/Lly7F48WL88MMPOHbsGMLDw/H4449j48aNiDb6hf3666+jsrISzz77rAffAXlSeXk5MjIyADCAaEmn03EYFllnrgJibgiWrQBibfiVtzJeHNfcwaEnA8i4cWL4kRyidfvtzu2HK6mtgFT9zkdpKbB+vfltsrMNgde4Ad0VIiMNU8KvXCkuT5wQQ4+iorQbemQcQIwrMc6Qa4BERFifyeuxx4CEBPFzu2iR4XY2oGuKAcRJMTEx+PDDD3Hx4kX88ssveOedd/Daa6/hnXfewapVq3Dx4kV88MEHiJG/nIiqZGRkQFEU6HQ61HNmQTayGwMIWSUPXmQAycszVEPMVUDOnDE/q47W4+pdIShIHKQCngsg5npAABEMjae895bhV4D9FRDA/HocALBvn7hs2dK5xTotGTtWXMo+EFmp69BB/P9rQX5+KipMqxDOsLQGSHVRUWJVeACYPdtQ6eMaIJqyc/AgWRIbG4vR/rZaMbmVHH5Vv359BLtiwUNSLSEhAQADCFkgKyAydMjqR716pjMSNW4sZmkqLxfrhFSfCtgXAwggDg6rzwImuSKA2Jqy1lIFBBDDsDZsEAeZ117r+D64mnFfS2Wl5QN54wDy66/ijH31g2Vb/R/Okscqu3cD589r3/8BmH5+Cgpcs+q4rESaa0Cv7qGHRB9OWhrw8cdiNXm5nk/Xrs7vC9nECgiRh7D/w3NYASGrqldAzA2/AkT4kDMwmRuG5YtDsADr4/M9OQQLACZNEtPQfvmldmfr1TAe5SCnKjZHDsECRL+C7MMw5u4A0qiRYeHG1as9E0CM15FxVR+IrQZ0Y+HhgOzLnTMHkBMJNWtWs/JGbsEKiItUVlYiOTkZmZmZKCsrs7jdoEGDNNwr8mayAZoBRHsMIGRV9QqIuQZ0qUULET7S0oD+/Q23Z2aKqgig7YGdK3hzAImIAObOdfy13SUyUgSiykrxvsxNOlBYaAgnQ4aIRvTVq4GePU23c1cDurExY4CdO0UfiJyMQ+vPaXS0GH7liQACAPfdJ8JHSoqYHQvg8CsNMYA4KT09HTNmzMD333+PQmtnPSCaX8urzztNAYsVEM9hACGrqldAbAUQoGYFRA6/atbM9Oy4L9AqgNhaCd2XzkTrdCJ05OZafl+y+hEaCtx1lyGAyH4EQIQXOSOVqxvQjY0ZA7z4oliPRA4B9kQAycryXAAJCREzYd19t+F7zgCiGS+qX/qejIwM9OvXD0uWLEHdunX1jeb9+/dHs2bNEBQUBEVREBERgUGDBuFabxqvSh7HAOI5MoBcuHDBw3tCXslSD0j1IViA7QDia8OvANO1QKrzdAXEm9nqbZH9H/XqAXIK/h07TGdbO3BA9IU0aQLEx7tvX7t3FzNeFReL/9PgYLHqupZcPRWvvQEEAO6807TngwFEMwwgTpg3bx5OnTqFf/3rX0hLS0O3qg/uli1bcOrUKVy6dAkzZsxAeXk5WrRogQ0bNnh4j8mbMIB4jvyeXzZe54FIMq6AKIpzFRBfa0AHvHsIljezVdmRFZD69UXvUI8e4vO1Zo1hGy2GXwGmq6IDInzIngytuDKAlJUZ1gBR04QuBQUBr75q+DfXANEMA4gTfvnlF0RGRuK1114ze3/dunXxxhtv4PPPP8dXX32FhQsXaryH5M0YQDynQdUZ7nTjM49EkqyAFBeLNRlkuLAWQE6fNr1dNqD7YgCRa4F4IoAoim8OwQLUV0Dq1xeXcjYq4+l43d2Absw4gHiiT8mVAeTsWdF/Ex5uf+Xo5ptFP8gtt/jmz6uPYgBxQlpaGlq2bInY2FgAQFDVjBzVm9Dvu+8+JCQkYJHxgjcU8BhAPEcGkPz8fBQXF3t4b8jrREcbDsL37hXT7IaHi2l3qzOugBgvqOYPQ7CsBRDjBQvtZS2A5OUZ1lTxtwqI8RAswBBA1q4VnzHAUAHRIoAMGWIITb4eQOTwqxYt7J8dTacDvvgC+OknQz8MuR0DiBNCQ0MRZfRLWPaAmGtsTUhIQHJysmb7ZolOp7P6deedd1p8bGVlJRYsWIBevXohOjoadevWxfDhw/Hbb79p+A78h+w/iHfnOF8yq3bt2ggJEXNwXDGel59IklUQOT1nq1bmD2yaNROX+fmGM/fZ2WJ9BcD3ZsAC3D8Ey1qlQA6/iogwLIjoK2xVQIyHYAFAv34ijGRnA9u2iZ4bOSWuu4dgASJU33GHuD5kiPtfrzp3BBB7+j/IoxhAnNC0aVOTJtb27dsDED0gxgoKCpCcnAydtZU5NTZgwACzXx07djS7fUVFBcaOHYspU6bg4MGDaNu2LerUqYP169dj1KhReOuttzR+B76tsrIS56sOUJrKdQRIMzqdDvWrDgI4DIvMkpVJGUDMDb8CxEGy3FYO1ZLVjyZNTBcu9BWe7AHx1f4PQH0FRAaQ4GBg5EhxffVqsRJ3ZaUYQlS1WKrbffiheN0bbtDm9YwxgAQ0BhAn9O3bF5cuXUJ2djYAYMyYMVAUBc899xz++OMPFBQU4MSJE7jnnnuQl5eHa665xrM7bGTr1q1mv2bNmmV2+/nz52P16tWIj4/H3r17ceDAAZw4cQLLli1DUFAQpk2bhl27dmn7JnzY5cuXUV5ejqCgIP2MTKQt9oGQVdUrIOZmwJKqN6L78vArwLPT8MoA4mv9H4D9PSCAaR+IcQO6VicsIyM9N/OTKwOIPaugk1dgAHHCuHHjUFFRgV9++QUAMHToUIwbNw4XLlzAiBEjEBsbi3bt2uG///0vwsLCMHv2bA/vsWNKS0sxb948AMC7776LHj166O+bMGECJk2aBEVRfPb9ecK5qtk64uPjERoa6uG9CUwygHAIFpklqxry82GpAgJYDiC+2tDqyQqIHMbmjxUQOQRL9oAAwIgRYmjf4cPAihXiNi36P7wBKyABjQHECWPGjMGZM2cwbtw4/W3ff/89Zs2ahXbt2iE0NBSxsbEYPXo0/vzzT1x11VUe3FvHbdiwAVlZWYiNjcX48eNr3D9p0iQAwNq1a5Fn6cwPmTh79iwADr/yJFZAyCpZAZHUBBA5E5Yvz4AFaBdACgsNDeeSLw/BcqQCUrcu0L+/uL5+vbhkALEfA4jP4UroTggKCkKTJk1MbgsNDcVLL72El156yUN7pc6TTz6Jo0ePIigoCK1bt8ZNN92EG2+80Wyfyo6qIQh9+/Y1e7a+d+/eiIiIQHFxMfbv388FF1WQFZDqnx/SDntAyKrqs9NxCJbpba4IIICoFhj3yfhyALG3B0QaPRrYutXwby0a0L2BqwJIebmYhhdgAPEhrIAEqA8++AC///471q5di48//hijR4/GkCFDzB6Mydm7Wlv4AxwSEoJmVTPBeMNMX76AFRDPYwWErKpeAWnVyvK2zZuLy7Q0IDfXcDDkizNgAZYPDCsqgJIS020cER4OyJNZ1asFgdADYjwECzD0gcj75Mxq/s5VAeTsWfHZDAsD2FPpMxhAAszIkSPx/fffIzU1FcXFxTh79iw++OADxMbGYvPmzRgzZgzK5XzkVbKqxuTGWfmDIO+T25pTUlKC3Nxck69AJSsgDCCewwBCVhlXQJo0sT4lrHEFRFY/EhJ88yAasHxgWFhYcxtHWTpY99cekMJCoKhIXK9eAena1RBiExO1a0D3NFcFEFl5bN7c/jVAyGM4BMsF1q5dizVr1uDEiRPIz8+HYrwYlRGdTof1coynh1Rfs6NJkyb417/+hX79+mHAgAH466+/8M033+Dee+/VbyMXagsLC7P4vOHh4QCAIvkL1ow5c+bglVdecWb3/YasgHAIluewCZ2sMq6AWBt+BRgCSHo6sHu3uO6rw68AyweG8t86nfNrdMTEiLBhqQLiiwHEWgVENqCHhpoOQQPE9/OWW4D33wcGDnTvPnoTVwUQ9n/4JAYQJ+Tm5uLmm2/Gpk2bLIYOY86sAzJt2jSsXLnS7sctXrxY1fS/ffr0wfjx4/HNN9/gp59+MgkgERERAMRsWJaUVJXlI638UZo5cyamTp2q/3dubq5+6Fag4RAsz2MPCFllXAGx1oAOAHXqiIPKvDxgzRpxm682oAO2A0hUlPNn6S1VC3w5gFirgBj3f5j73r3+uqh+3H67+/bP2zCABDQGECdMnz4dGzduRN26dfHwww+jV69eaNCggVsWHDx//jyOHTtm9+MK7PjBvuaaa/DNN98gJSXF5HY1w6vUDNMKDw/XV0oCmaIobEL3AhyCRVYZV0BsBRCdTlRBDh0C/vc/cZs/BBDjIVeAaxrQJUtT8fprD4i5KXiNRUcD993nnv3yVgwgAY0BxAk//fQTQkNDsWnTJnRxc7l96dKlWLp0qVtfQ85wVb0HpF27dgCAEydOmH1ceXk5TldNPym3JctycnL0wZABxHNkAMnMzERFRQWCg4M9vEfkVSIjxQFlfr7tIViAIYDIYaj+PATLnQHEX3tALM2AFcgYQAIau3WcUFBQgA4dOrg9fGjlcNXc9dWHBfXr1w8AsHPnTpSVldV43J49e1BSUoKwsDD07NnT7fvp62T1Iy4uDlFRUR7em8BVr+pMpKIoyJRnXYmMyZmvuna1va1sIpZ8dQYswHBgWF4OGA+91bIC4osBxFoFhAGkJlcHEK6C7lMYQJzQsWNHq03XvuTSpUtYtmwZAGD48OEm9w0dOhRxcXHIzc3F8uXLazx20aJFAIARI0YgpnpzHdXA/g/vEBISoh8yyGFYZNbXXwM//gh07257W+ODn/h4y0NtfIFxwDA+OHR3ACkuNgz78sUAIt9TWZlpcAMsT8EbyFwRQLgGiM9iAHHC448/jtTUVGzcuNHTu6LKzJkzsWzZMhRWG9d74MABXH/99cjKykLDhg3xyCOPmNwfHh6OZ599FgAwdepUHDhwQH/f119/jUWLFkGn0+H55593/5vwA+z/8B7sAyGrunYFbr1V3bbGAcTXq+KhoUBI1QhtLQOIHH6l0wGxsc6/htZkBQSoWQWRPSCsgBjIz1FpqQgSjjh/Xjw2NFRMfU0+gz0gTpg4cSL279+PW2+9Fa+88gomTpyIWsa/gLzMkSNH8OabbyIkJARt27ZF7dq1kZ6eru/tiI+Px8qVK1GnTp0aj502bRq2bNmCNWvWIDExEV27dkV+fr7+sXPmzNEP1SLrWAHxHg0aNMDx48cZQMh5xgHElxvQpehoICfHfQHE3HAlGUDi4nxzPYeQECAiQlRy8vNNqx0cglVT9Upb7dr2P4ccftW8OcA+Pp/CAOKkefPm4cyZM3jqqafw1FNPoUGDBhbH9et0OqSmpmq8hwaPPfYY4uPjsXPnTpw/fx4pKSmIiopCnz59MHr0aDz++OP6qUmrCwkJwapVq/Dhhx9i8eLFSE5ORmhoKIYNG4apU6ditPFKrmQVKyDeg2uBkMswgNjHXAXEl/s/pFq1RACpXgFhAKkpLEyEhooK5wMIh1/5HAYQJ1y6dAnDhw9HUlKSfh2Qy5cvW9zeHdPz2mPEiBEYMWKEw48PDg7GlClTMGXKFBfuVeBhBcR7cAgWuUyjRmIYSFmZ7w/BAsyPz3dHADGeMcofAkhMjAgb1WfCsjUNbyDS6cRnKTfX8T4QNqD7LAYQJ0yfPh2HDx9G27Zt8dxzz6Fnz55uWweE/AcDiPfgYoTkMkFBwEMPAfv2AX36eHpvnGctgLhi9j5rFRBfXANEsjQTFisg5jkbQNLSxCUrID6HAcQJa9asQUREBDZu3IjGjRt7enfIR3AIlvdgBYRcauFCT++B62hVATHXA+LrFRCAAUQtZ2fC4hAsn+WDXV7eo6CgAB07dmT4INWKioqQUVWKZwXE89gDQmSBJwKIPwzBkhUQ4yFYhYWGBSo5BMuUMwGkogI4dkxcZwDxOQwgTujWrZv+YJJIjfPnzwMAIiMjzc42RtpiBYTIAgYQx5h7X/I4ITTUcD8JzgSQ//wHOHdONK+rWauHvAoDiBOee+45nDlzBt9//72nd4V8hHH/B3uFPI89IEQWuDuAmOuV8KceEOMKiPHwK/7eN+VoAMnIAP79b3H9lVccm0GLPIoBxAm33HILFixYgIceegjPPPMMDh8+jOLiYk/vFnkx9n94F+MKiJzJjohgODA0XriWPSC2mXtf7P+wzNEA8uKLIrB27Qo8/rjr94vcjk3oTgg2WvTmvffew3vvvWd1e51Oh3JHV/skv8AZsLyLDCBlZWXIzc1FbZ5FIxK0GoJVXCxWsg4J8Y8hWOYqIJyC1zJHAsi+fcCnn4rrH3wgPjvkc1gBcYKiKHZ9VVZWenqXycNYAfEukZGRiK76A8hGdCIjWgUQwHCw7g8BhBUQ+9gbQBQFeOIJoLIS+Mc/gCFD3LZr5F4MIE6orKy0+4sCGysg3od9IERmuDuAhIWJL8BwsB4IPSBkyt4AsmwZ8OefYi2at95y336R2zGAEGmIFRDvw5mwiMxwdwABTKsFlZVAdrb4t79VQDgEyzJ7AkhuLvDcc+L6Cy8APJHn0xhAiDTECoj3YQAhMsPcgaFsSHdHAMnJEcNrAFZAAok9AeS114CLF4G2bYGpU927X+R2DCBEGikvL8eFCxcAMIB4Ey5GSGRG9QNDRXFvBUQOv4qOBsLDXfP8nsAeEPuoDSBHjwJyop/33/ftzwgBYAAh0sylS5dQWVmJ4OBgNGzY0NO7Q1XYA0JkRlSUuJQHhsXFhgqFqwKI8Vog/tD/ARgCiLlZsBhAalIbQKZPF7Ol3XQTMGqU+/eL3I4BhEgjcvhV48aNTaZwJs/iECwiM6ofGBofILq6ApKf7x9rgADmF1iUFRD2gNSkNoD8+ae4fPFF9+4PaYaTJxNphA3o3okBhMgMSwEkPBxw1QkU4+FKoaHiuq8HEHMVEA7BskxNAKmsNATUZs3cv0+kCQYQIo2wAd07sQeEyAxLAcRV1Q/AfL+ErwcQWQEpKBAHzsXFQFGRuI0BpCY1ASQnR3wvAVaR/AiHYFHAKC8vx7Fjx6DIccwaYwXEO7EHhMgMrQOIv/WAAOJ7Jvs/QkMN4YQM1AQQ+T2sVcuwdgz5PAYQChgzZsxAx44dsWrVKo+8Pisg3olDsIjMkAeGxcVARYX7A4i/9IBERABBVYdWeXmmw690Os/tl7eyJ4D4+meDTDCAUMA4evQoAGDTpk0eeX1WQLyTDCD5+fkoLi728N4QeQnjoFFYqF0FxNcPMnU60z4Q9n9YpyaAyM8Gh1/5FQYQChiFVYtoHT582COvzwqId6pduzZCQkQ7HKsgRFUiIw1n7N0VQMxNw+vrAQQwfV+cgtc6+XkqKjL0eVTHleT9EgMIBYyCqj+gSUlJmr+2oigMIF5Kp9Pp+0DYiE5URaczXQtEBhB5mysYVwr8pQcEMF8B4cGzedUrbeYwgPglBhAKGDKAnD59GnnGs65oIDMzEyUlJQDEOiDkXdgHQmSG8fAY9oCoZ1wB4RAs64wrbZaGYTGA+CUGEAoYhUZnV5ypgiQnJ+OHH35ARUWF6sfI6keDBg0QHh7u8GuTezCAEJmhZQDxpyFY7AFRr3qlzRw2ofslBhAKGAVGv9wcCSAlJSWYNWsWunTpgjvuuANr1qxR/Vg2oHs3BhAiMxhAHGOuB4Rn7y2z1YjOJnS/xABCAcO4AmJvI/qWLVvQs2dPvPLKKygrKwMAHDx4UPXj2f/h3VzdA1JaWop58+bhyJEjLnk+Io/QKoBcvgxUDVH12x4QVkAssxVAGOL8EgMIBQRFURyqgGRnZ+ORRx7BoEGDcPToUcTHx+OGG24AIIZiqcUKiHdzdQVk2bJlmD59OmbOnOmS5yPyCK0CiHzu4GDThfx8FXtA7MMAEpAYQCggFBcXm6yArqYCsn37dnTq1AmfffYZAOChhx7CkSNHMHHiRAD2BRBWQLybqwPI1q1bAXBWLfJxWgUQqW5d/1isz7gCwml4bVMbQPxheB7phXh6B4i0UFhtej85E1aMlbNtzz77LC5evIj27dvjs88+w+DBgwEAbdu2BcAKiD9xdQDZvn07ANO+IyKf4+4AIisFkr8cYJqrgPDsvWWsgAQkVkAoIMgDwfDwcMTHxwOA1fH5xcXF2LVrFwBg9erV+vABAO3atQMAXLp0SfV0vqyAeDcZQFxRscjKytJ/thhAyKeZWwfElQEkNBQwnhXQH/o/ANPelqIicZ0VEMusBZDSUlFJAhhA/AwDCAUEeSAYFRWFLl26ALA+DGvPnj0oKytDw4YN0aZNG5P7ateurT9gTUlJUfX6MoCwAuKdZBO6KyogO3fu1F9nACGf5u4KCGA6DMvfKiCnTonLsLCa1R4ysBZA5AxYOh1Qp45mu0TuxwBCAUEOwYqOjtYHEGuN6Nu2bQMADBgwADozY5JlFUTNMKz8/Hzk5OQAYAXEW8lAmZmZadf6LubI4VcAAwj5OOMDQzmMlQHENvmeZACpV88/elvcxVoAkcOv4uKAIB6y+hP+b1JAkAeC0dHR6Ny5MwDrFRAZQPr372/2fnv6QGT/R0xMDGJjY9XvNGmmXlVpX1EUZMg/eA5yNIAcO3YMpaWlTr02kUuxAuIYWe2QZ+85/Mo6NQGEw6/8DgMIBQRZAVEzBEtRFPz5558ALAcQeyogbED3fiEhIahbdfDjTB9IZWUl/vrrL/2/y8vLVYWKVatWoWPHjnjuueccfm0il9M6gPhbD4jEAGKdmiFYDCB+hwGEAoK5CoicCau61NRUpKenIywsDImJiWafz54AwgZ03+CKPpCjR48iJycHkZGR+tvyZQOljccBwIoVK0ymiybyKHlgWFjICog9qvd7MIBYxwpIQGIAoYBg3IRer149qzNhyeFXvXv3RkREhNnnkwFETRM6KyC+wRVT8crhV3379kVYWBgAdcOw5DZnzpxBamqqw69P5FJaVECMD9b9JYBUr4Dw4Nk6BpCAxABCAcG4CR2A1UZ04wZ0S2QPyOXLl5Gbm2v1tVkB8Q2uDCBXX321/rOmJoAYV0nWr1/v8OsTuZQ8MMzOBsrKTG9zFVZASE0A8ZfPBukxgASo8+fP45lnnkHHjh0RHR2N2rVro2vXrpg8eTLS0tLMPqayshILFixAr169EB0djbp162L48OH47bffNN57+xkPwQJgtQ/EVgM6AMTGxqJhw4YAbA/DYgXEN7gygFxzzTUOB5D//e9/Dr8+kUvJA0Pjnwn2gNjGHhD7sAISkBhAAtDatWvRqVMnvPPOOzh37hw6dOiAZs2a4fTp0/j444/x999/13hMRUUFxo4diylTpuDgwYNo27Yt6tSpg/Xr12PUqFF46623PPBO1DMeggXA4kxYOTk5OHToEABxEGmN2j6QU1VTMbIC4t1kD4ijTejZ2dn6ipq9AcR4mw0bNqCystKhfSByKXlgeOmSuAwOFmtauJI/VkCqhzQePFvHJvSAxAASYA4cOICbb74ZxcXF+Oijj5CRkYG9e/fi0KFDyM7OxrZt29C1a9caj5s/fz5Wr16N+Ph47N27FwcOHMCJEyewbNkyBAUFYdq0afqVw72R2iFYO3bsgKIoaN26NRo1amT1OdUEkMLCQn2g6dmzp0P7TtpwtgIiFyBs3bo1GjZs6HAFJD093eoU0daUl5dj48aNKCkpcejxRCbkgWFxseHfrl7Pwh8DSEgIYDQRBSsgNrACEpAYQALMI488guLiYnz66aeYPHmyvlEWAIKCgnDNNdegZcuWJo8pLS3FvHnzAADvvvsuevToob9vwoQJmDRpEhRFwezZszV5D46wVAFJS0szOfhTM/xKUtOIvnfvXlRUVCAhIYEVEC/nbAAx7v8A4FAAkYteOjoM64MPPsDQoUPx5ptvOvR4IhPVz+RX/f50KX8cggWY9oEwgFjHHpCAxAASQHbs2IG//voL7dq1w/3336/6cRs2bEBWVhZiY2Mxfvz4GvdPmjQJgBjaZW5aW29QvQJiaSYsNQ3okprFCHfs2AFAHJSaW1GdvIetAHLhwgWra3rI/2s5dM+RANKvXz8AjgeQFStWABBTTBM5rXoAcXX/B2AIIDExonLgL4yDFQOIdayABCQGkADyyy+/AABGjx6NnJwczJ07F2PGjMENN9yAxx9/HFu3bjX7OHlg1bdvX4SGhta4X05XW1JSgv3797tt/51RvQkdqNmIXlFRoX+v9lRArAUQuSidPLAk72WtB2TDhg1o1qwZbr31VrPrdFRWVjoVQOQ2Y8eOBQBs3LgR5eXldu1/bm6uvgpTVFRk12OJzNIygPjbGW7jCggPnq2zFEAUhT0gfowBJIDs2bMHABAeHo7u3btjxowZWLVqFX7//XcsXLgQ1157LR5//PEaB1jyALt169ZmnzckJATNmjUz2dbbVB+CBdRsRD906BDy8/MRExOjDyfWyArIlStXkJ2dbXYb4woIeTfjCojxz0BFRQWefvppVFRUYPXq1Vi9enWNxx47dgzZ2dmIjIxE9+7dAQC1qg5A1CxEKLcZOHAgateujdzcXOzbt8+u/d+wYYM+tDCAkEtoEUBatBCXbdq4/rk9SQarsLCa0/KSKeMAYnz8UVAAyKozA4jfYQAJIBcuXAAAvPPOO8jOzsZXX32FvLw8XLlyBXPnzkVQUBAWLlyIDz74wORxWVlZAIA4K+Nz5X1yW3NKSkqQm5tr8qWV6kOwgJqN6H/++ScAERaCg4NtPmdMTIy+Ud1c8Dp37hzOnj2LoKAg9O7d27k3QG4nA0hZWZnJZ3PZsmU4cOCA/t/PPvssyuSaCFVk5eGqq67SVwkdGYJVu3ZtDBkyBID9w7DWrVunv25PACmWDcZE1QUHA+Hhhn+7I4D06gWsXw989ZXrn9uTZOioX9/1jfv+Rn6uFMUw4QFgGH4VFuae/iPyKAaQACIPhMrKyvDee+/hnnvuQa1atVCvXj1MmzYNU6ZMAQC88cYbJsM/5AFKmJXpF8Or/khZO/CZM2cOateurf+SVRMtqBmCZU8DumStEV0Ov+rWrZv+bDh5r8jISP3nQ/aBFBUV4YUXXgAAPP/882jQoAGOHTuGTz/91OSx1YdfAY4NwapVqxaG/X975x0fVZn9//ekTAqEEkJvEnqTohQJXVCKYkNXRAVlbehXxVUU8bfq2nYFy4rL6iKyqCAq6MKioqiIShHpooKU0CEkEBJISDLl/v7IPpc7/U6SmUkm5/16zYswtz335mbm+dxzPucMHQoEL0C++OIL/WezAmThwoXUqFGDBQsWBHUsoRphnPiFQoAADB0KTZqEZt+RQkVA5Ml9YIz3mPHz0uj/EBEXdYgAqSJMnTqVDh06BP1ST2YBEhMTgdJoxa233upxjClTpgCQlZXlkv6htvNnwFVlP5OMpQfdmDZtGnl5efrr0KFDQVyB8qEiIN5SsFQlrLIIEH9GdPF/VD3cfSCvvfYahw4donnz5kyfPp1nnnkGgKeeesol2mdsQKgwK0CcTqdXAfL999/7/ZszsnfvXvbu3av/36wAWb9+PU6nk/fee8/U+kI1xCg6QiVAohFjBETwT2ws/G+e4VOACFFHFJWciG6OHj3Krl27gt7OOPlRaVKtW7cmzku1kebNm1OzZk3Onj3L/v376dWrl8t2/tKrzKRpJSQk6JGScOMtAqIqYWVlZbFq1SoyMzOxWCxB+TX8GdHF/1H1qF+/PgcOHCA7O5ucnByef/55AJ577jmSkpKYNGkSs2bN4pdffuG5555j5syZ5OXl6VE04+/arABR4lht07lzZ+rXr092djY//vgjAwYMCDhulX6VkJBAcXGxaQGijv39999js9m8FpkQqjkiQMqGioCIADFHjRql6VfGz0sxoEc1EgGpIrz33ntomhb0a9iwYfo+2rdvD+BXBKg0K4fDob+nJtn79u3zuo3dbtfLfqp1KxveTOhwPg1rzpw5QGm6VK1atUzv15cAsdvtbNy4EZAISFXCaER/9tlnyc/Pp3v37owfPx4oLbjw0ksvAaXRkb179/LTTz+haRoXXHCBS/NKswLE2AMkKSkJi8USdBqWSr8aPnw4YD4CotYrKCio1I1EhQgiAqRsqIdxDRpEdhxVBW+VsCQCEtWIAKlGqPSQzMxMr8vz8vI49b8nDk2bNtXfVxPoDRs2eJhvobS6VnFxMVartdJ2+/ZmQofzaViqslEw6VfgW4Ds2LGDwsJCatWqRYcOHco0ZiH8KAHy448/Mnv2bABmzJhBTMz5j8rLL7+cESNGYLPZePTRR72mX4F5AWKMzqnjBCNAbDabvt5VV10FBC9AzB5LqIaIACkbEyfCpElw772RHknVwJ8AibYSzQIgAqRacdVVV5GQkMDRo0dZuXKlx/J58+YBpdWdVPoVwJAhQ6hbty75+fksXrzYY7u5c+cCpROzFGPzpUqCpmleU7DgfATE6XQCwQuQ1v8rHXnq1CldvMF5/0fv3r1dJq9C5UZ5QObMmYPNZuPyyy93iSIqZs6cSUxMDEuWLNHv/7IKEBUBMRYqUAJk3bp1Lila3li/fj1nzpwhLS1Nv3/DLUBOnjzJokWLpKJWNCICpGy0agVvvQUdO0Z6JFUDiYBUO2RmVI1IS0vjvvvuA+C+++5zMa2uXbuWv/zlLwA88MADuvEcSlO2Hn74YQAeeughl5KkCxcuZO7cuVgsFqZPnx6O0wia4uJiXWD4SsFSBCtAatasSePGjQHXSlji/6iaqAiIpmlYLBZefPFFr+t17tyZO++8EygtYgCev+tgBYhRHLdu3ZrmzZtjs9n08tC+UP6P4cOH6/sI1gMCpZ8BZe0fMnXqVMaNG8e70VZKVRABIoQHbwJEPCBRjQiQasZzzz3HkCFD+P3332nfvj09evSgU6dOZGRkkJuby8iRI/nzn//ssd3UqVMZMWIEx48fp2fPnnTr1o3WrVszfvx4nE4nzz//fKX1OhgnWe4CRKVgATRs2NBns0V/eEvDkgpYVRMlQAAmTpyoNxX0xtNPP61H/BITE+nWrZvLciUGAjUiNFbAUgTjA1H+j8suu0yvQldUVOS1Y7s7RsFRXFzsUjXPLJqmsWLFCqC0WIYQZYgAEcKBRECqHSJAqhkJCQl8+eWXvPzyy3Tt2pXdu3dz8OBBevfuzezZs1m2bJnXSjhxcXEsX76cV199la5du7Jnzx5OnjzJ0KFDWb58OY899lgEzsYcaoIXHx/vcW6qEhaURj8sZag17i5ATp8+zW+//QaIAKlqqHshKSlJjwj6okGDBnrUr1+/fh59cpSgKEsKFpjzgeTk5OjFDowCBMw1GFQCpMn/ejCUJQ3r999/14WHmZ4nQhVDBIgQDsQDUu2QMrzVkLi4OKZMmaL3/TBLbGwsDzzwgN6wsKrgy4Cu6Nq1K1lZWUGnXynce4GoakLp6ekuT9SFys/w4cOZMGECo0aNolmzZgHXf/jhh2nSpAkZGRkey8qTggWl3iuAjRs3kpeXR+3atT22/frrr9E0jS5dutCkSROXIhHnzp3z25cHzv9tjB49mjlz5pRJgBi3EQEShYgAEcKBRECqHRIBEaIeXwZ0xbPPPsvkyZO56667yrR/927o4v+ouiQkJPDvf/+bG264wdT6sbGx3HLLLV5T98pjQofSvjxt27bF6XTy3Xffed1WpV9dfvnlQGmULzY2FjDnA1HrjB49GiitdHfmzJmA2xlZtWqV/nOgdDOhCiICRAgHIkCqHSJAhKjHVw8QRZ8+ffjHP/5R5gpe7ilY4v8Q4LwAsdvtfjuae/OAKFQa1ptvvulRAlvTNN2ArgQIoEc9ghEgHTp0oFWrVjgcDr7//vuA2ymcTqeLADEbAVm3bh2TJk3ipJpgCJUXESBCOHAXIA4HnD5d+rMIkKhEBIgQ9QRKwSovKgUrNzeXkydPSgREAFzvN38Tc18REIBbb72VuLg4Pv30U8aMGeOyn19//ZUjR46QmJhI//799ffLIkCSkpKCbn4Ipf1ucnJy9P+bFSAzZszg7bff5pVXXjF9LCFCiAARwoG7ADl9GlQhDdXUUYgqRIAIUU+gFKzykpycrDduXLFiBSdPnsRqtXpURRKqF8aiB2YEiLf7s1+/fixbtozk5GRWrFjB0KFD9Qm/in4MGjTIxethVoA4HA6Ki4uB0nu4LAJErRsXV2onNCtA8vLyAPjkk09MH0uIECJAhHDgLkBUdDQlBdwKfAjRgQgQIepRERBfKVgVgYqCvPfeewD07NmThISEkB1PqBqY8YH4i4AAjBw5kq+//prU1FQ2bNhA//79OXDggEv5XSNmBYixSlZSUpJuet+6davp1CglQAYOHOhyLoFQ6/3666/s2rXL1Dbe2LRpE88//7wupIQQIAJECAe+BIikX0UtIkCEqCfUERA47wNRHebF/yGAOQHizwOi6Nu3Lz/88APNmzdn165d9OvXj9WrVwOu/g8wL0CMy5OSkmjcuDEdO3ZE0zR93/6w2+36eldeeaXLuQTCKFTKEwW55557mD59uh4NEkKA8XMzhA9xhGqOCJBqhwgQIeoJZEKvCJQAcTgcgPg/hFLMNCMMFAFRdOzYkbVr19K5c2eOHj1KUVERTZs2dWmmCcELEKvVSkxM6VdBMGlYmzdvJj8/n7p16+pliMMpQIqKiti6dSsAJ06cKNM+BBMYPzdFgAihwl2ASBf0qEcEiBD1hNqEDucFiEIiIAIEl4Jl5v5s1qwZ33//vT7hv+KKKzyaZ5oVIN5SE4MRIGqdwYMHU6tWLZdzCYRxvQ0bNnD48GFT2xnZvn27XhnstKqWI1Q86r5MSoIYmTIIIcJXBESaEEYt8mkiRD3hSMFSHhAo7ZB9wQUXhOxYQtXBTDd0MylYRurWrcvKlStZsmQJf/3rXz2WBxsBMRrYBw0ahMVi4bfffuP48eN+t1fld4cMGWK654lCrdeyZUsA/vOf/5jazohq+AkiQEJKs2alwuN/vytBCAmSglXtEAEiRD3hSMFq3bq1/nOfPn08nkoL1ZOKMKF7IykpiWuvvZY6dep4XQZlEyD16tWje/fugGuDQXdKSkr0fiFDhw7Vxx6o5wmAzWbTTePjx48HypaGtXHjRv1nESAhpFEjWLsWPvss0iMRohkRINUOESBC1BOOFKzk5GSaNWsGiP9DOE9Fp2CZoTwCBMylYf3444+cO3eOBg0a0KlTJ5exB0rDMl6LW265BYDVq1cH3ZRQIiBhpE8faNUq0qMQohnxgFQ7RIAIUU84IiBQWg41Pj6eK664IqTHEaoOoYqA+KM8HhAwJ0DUsqFDh2KxWEz3PIHz5xsfH0+HDh3o1q0bDoeD//73v363c9/Hb7/9pv9fBIggVHHEA1LtEAEiRD3hiIAAzJ49myNHjnDhhReG9DhC1aGiyvAGQ3kjIAMGDCA2NpZ9+/axf/9+r9saBYjCjN8FPAXXNddcAwSXhrVlyxacTqf+f9XYMBCLFi1iwoQJ5Ofnmz6WN+bNm8e9997rMgZBEMqB+n6226GkRFKwqgEiQISoJxwmdICEhATq168f0mMIVYtAAsThcOhCoLIIkJSUFHr37g3A4sWLPbYrLCxk3bp1gKsAMVNy2Lhcra8EyBdffGG6ipZKv1LVt8xGQJ599lneeecdXnrpJVPre0PTNKZMmcLs2bPZsmVLmfcjCIIB4/dzQYEIkGqACBAh6glXCpYguBNIgBjfryweEIBrr70WgEcffZR58+a5LFuzZg02m43mzZuTnp6uv2+2EpZ7xKdr1660bt2a4uJiVqxY4XdbhTKgq+7tZgVITk4OAH//+99NR03cOX78uL5toEphgiCYJD6+9AUiQKoJIkCEqCdcKViC4E6gqICajMfExJCYmFghxyyvBwRgypQp3HHHHTidTm6//XZmzZqlL3P3fyjKmoJlsViCTsNSEZDhw4cD5gSIpmnk5uYCpSlb//jHP0wdy51du3bpP0sDREGoQNR39KlT8L/PJ/GARC8iQISoJ1wpWILgTqCogHEyXlGlmysiAhIbG8ubb77JlClTALj//vt54YUXAO/+Dwg+BcuYcqYEyPLlywOW8c3NzWXPnj0ADBs2DIAzZ85gt9v9bnfu3DmXfb/88sumU76M7Ny5U/85Ozs76O0FQfCB+o4+dKj035gYqF07cuMRQooIECHq8fekVxBCSTACpKKoCAECpZGJl156iT//+c8APP7440yZMsUj/UlhNgXL2zn37duXRo0akZ+fH7AL+6ZNmwBIT0+nlaE0bCBjuYp+xMbG0qZNG06ePMmbb77pdxtvGAWIREAEoQJRAuTgwdJ/U1NLRYgQlchvVoh6JAIiRIpAaUkV3QMEKk6AQKkIefrpp5kxYwYAr776Kk6nk7Zt29K8eXOXdYNNwTKec0xMDFdffTUQOA1LpV/16tULq9WqP1gIlIZ16n99BerWrcvjjz8OwIwZMwJeJ3dEgAhCiHAXIOL/iGpEgAhRjaZpYkIXIoZZE3okIiDBRAYffvhhZs+erf/fPf0KzKdg+TpnlYa1dOlSHA6Hz+2VALn44osB9G7wgUzlKgJSt25dbr75Zlq2bElWVhZvvfWW3+3ciaQAOXfunP57E4SoQwRItUIEiBDV2Gw2fTIjERAh3FTlFCx37rnnHt5//30yMjK45557PJaXJwULYPDgwdSuXZusrCzWrl3rc3uVAtarVy8Aav8vRzxQBEQJkNTUVOLj43nssccAePHFFykuLva7raKwsJCDanJEeAWIw+HgwgsvpFOnTthstrAdVxDChrsHRAzoUY0IECGqCUWZU0Ewi1kBUllTsNy58cYb+eGHH+jWrZvHsrJWwVJYrVY9CvLPf/7T67ZZWVkcOnQIi8VCz549gfMRELMCpG7dugBMnDiRJk2acPjwYebPn+93W8Xu3bvRNE3/fzgFyLFjx9izZw8HDhzgkJqgCUI0IRGQaoUIECGqUZOhuLg44lWNcUEIE5U5BassAsQf5amCpbj//vsB+PDDD71OslX6VYcOHUhJSQHMCxCjBwQgMTGRqVOnAvDCCy+Yiiqo9KtmzZoBpVWwjIIklBivhzEKIwhRgxIghw+X/isCJKoRASJENdIDRIgkkUzBKioq8rteRVeHK28KFkCPHj0YMmQIDoeD1157zWO5e/oVlD0CAnDHHXfQoEED9u/fz8KFC/1uD+cFyIABAwAoKSkJWH0L4KOPPuKFF14I+Dvxh1F0iAARohL1Pa08YCJAohoRIEJUIwZ0IZKoSbnNZvPa36IqeUACYTYFK1BVuj/96U8A/Otf/+LMmTMuy4wVsBTBCpBUQ155cnKyfrznn3/er/kdzguQHj166OcbKA1L0zQmTZrE448/Tv/+/cnMzPS7vi+MERBJwRKiEvfPBPGARDUiQISoRiIgQiQx3nfeJuZVzQPij4pIwQIYOXIk7du3Jz8/n7ffflt/X9M0jwpYUL4ICJSa6+vWrcvvv//O6tWr/e5DdUHv0KEDDRo0AAILkNOnT+tCatOmTfTs2ZPly5f73cYbkoIlRD3un4MSAYlqRIAIUY30ABEiidVqJS4uDvAuQELpAbHb7X67gytxXtECpDwpWFDaE0R1YH/11Vf1qMShQ4fIzs4mLi7OxQRvtgyvuwdEkZKSwogRIwBYs2aNz+2dTqcuQNq3b29agBw9elQ/Tp8+fTh9+jRXXnkljz/+eMDu7UZEgAhRjwiQaoUIECGqkRQsIdL4m5iHMgUL/EdB1LKK+tsobxUsI7fccgv16tVj//79emNCFf3o0qWLyzmWJwVL0a9fPwC/5X8PHz5MYWEh8fHxtGrVKmgB0rJlS7777jv+7//+Dyg1vg8fPpzjx4/73V4RSQGyY8cO/TwEIWS4fxaJAIlqRIAIUY2kYAmRxt/EPBQCJDExUf/ZjACpbClYUCqKJk+eDMDLL78MePd/QPB9QNwjIHBegKxbtw6n0+l1e+X/aNOmDfHx8aYFyLFjxwBo0qQJVquV1157jffff58aNWrw7bff0r9/f1N9SNwFSLiqbx0/fpwePXpw6aWXhuV4QjVGPCDVChEgQlQjKVhCpDETAanI+9NisegiJBICxGwEJNA5T548GavVyrp161i3bp3XClhQ9jK8Ri688EJq1KhBXl4ev/76q9ftjf4PQBcg2dnZfo+rIgdNmjTR37vxxhv56aefSElJYe/evS7d1b1RXFxMVlaW/v+zZ88GPN+KYu/evdjtdnbu3KmLOEEICZKCVa0QASJENZKCJUQafxPzUHhAwJwRPRIeEE3TTJ9zo0aNGD9+PAAvvfSSLkCMBnQwJ0A0TfMbAYmLi6NPnz6A7zQsJRLcBYjZFCyjAAHo2LEjHTt2BEon+f44/L++CImJiaSlpQHhS8PKycnRf/7tt9/CckyhmmIUIImJnilZQlQhAkSIaiQFS4g04faAQGABYrPZdHN3KDwgvtKYiouL9eOaOeeHHnoIgCVLlpCXl0diYiJdunRxWceMADl79qx+XG8eEDifhuXLiK4ESPv27QGoX78+UHYBApCeng7Avn37/O5DpV81b96cli1bAmUXIGfOnOHJJ590qTDmD2OEx1d0SBAqBOP3tEQ/oh4RIEJUIxEQIdKEOwULAgsQ4/sVHQHxd1yjP8TMOXfp0oXLLrtM/3/37t2Jj493WUcJkPz8fJ/CR0U/rFarz/PNyMgAQhcBady4scey1q1bA4EjIEYB0qJFC6BsAuSrr76iS5cu/OUvf2Hy5Mk+r5cRYwREBIgQUkSAVCtEgAhRjURAhEjjz5wdqhSsQB4Q9b7FYiEhIaFCjmkU+YE6vyclJREbG2tqvyoKAp7pV3DehK5pmkfjQoXR/2GxWLyu07dvXwD27Nnj4reAUnGjhISKgJQ3BQvKFgEpiwDJz8/nrrvuYvjw4fp2xcXFpjwdIkCEsGH8nhYDetQjAkSIasSELkSaypiCpYR5YmKizwl5sMTExOgiJJAACebv8bLLLtPTrlSUwkhiYqIuuHylYfnzfyjq1KlD586dgdJqWEZ+//13oNSXoiIuSoDk5OT47KCuaZpfAaIiIKEUICtXrqRr167861//AuDee+8lJSUFCGygB1cB8ssvv5g6piCUCYmAVCtEgAhRjaRgCZHGlwCx2Wx6+dVwC5CK7gGiCFSKtywRH4vFwn/+8x/eeOMNbrjhBq/rBCrF668HiBFfaVju/g9AN4NrmqZHWNw5efIkNpsNKBUv7qgIyP79+/02JSyrAJk6dSqXXXYZBw8epFWrVqxatYrXX3+dhg0bAsELkMOHD5Ofnx9wG2/k5uYyevRoXn/99TJtL1QDRIBUK0SACFGNpGAJkcaXADH+P1IekIryfygCVcIqa8SndevW3HXXXcTEeP/KCmRENxMBAd9GdHf/B5RWzqr3v0mSrzQsFf2oX78+VqvVY3nTpk2xWq3Y7Xa90pU3yiJADh48yIwZMwC477772L59O4MHDwbMlxD2tk5ZK2G9/vrrfPbZZ/z97383tf7p06e5/PLLmTNnTpmOJ1RBRIBUK0SAVCOeeuopLBZLwFerVq28bu90Onnttdfo0aMHNWrUIDU1lWHDhvH555+H+UzMIxEQIdIEEiBxcXFeJ6flIVICJFA39FClnAUSIP56gBhRAmTjxo0uzQG9CRAIXAnLX/oVlKatqc9bf0Z0bwLk6NGjenTFGz///DNQauSfNWuWyzU3W8ELzkdA1PZl8YEUFxfzj3/8AwjcqFKxevVqvvzyS5566qmwNV0UIkxiIqiUUPGARD0iQKoRLVq0ICMjw+dLfcFccsklHts6HA7GjBnDAw88wPbt22nTpg116tTh66+/ZtSoUcycOTPcp2MKiYAIkcbXpNw4Ga8oH4bCrAckVBEQX5PMSAkQsxGQNm3aUL9+fUpKSti8ebP+vnsTQkUgI3ogAQKBfSBnz57Vx9+iRQsaNGiA1WrF6XTq+/eG8msoX4sRJUCCScFS6WllESCLFi3Sjf1mBYgqKHD06FF2794d9DGFKojFcj4KIhGQqEcESDXi9ttv54cffvD6+vzzz3Uj5S233OKx7YwZM/j0009p2LAhmzdvZtu2bezbt48FCxYQExPD1KlT+emnn8J9SgERE7oQaXxFQEI1GYfIe0AqWwTErAfEYrF4pGE5HA7dhG70gEDFCBDlA/EVAVHRj1q1alGrVi1iYmJo3rw54D8NqyIESElJie75GDRoEBC8ANE0jVdffVX/f0FBgamIhvEe+vbbb4M6phGn08ny5ctdvCxCJUYESLVBBIgAwOLFizl37hwNGzZk+PDhLstKSkp48cUXAXjllVfo1q2bvuymm25i0qRJaJrGs88+G9Yxm0FSsIRIEygFKxTiuLKnYFX0OSsBkpeX53W52QgIeBrR9+/fT0lJCYmJiXr6k6IiBYivCIgx/UphxgfiT4CY9YCoSXtsbKwuzIKthLV69Wq2bt2qpxlqmubzvjRijJSUR4B89NFHXHnllUyZMqXM+xDCyP/uTZo1i+w4hJAjAkQA4N133wVg3LhxxMXFuSxbtWoVubm51KpVi7Fjx3psO2nSJAC++OILn3X4I4WkYAmRpjJHQMKdghWqvicV5QEBVyO6pmm6/6Ndu3YevUsCTeSDScEKFAHxJkDUMnecTqduFvcXAQnkAVECpF69enop5AMHDphOo4LSh1YAt912m/6eme3dBUhZfSBffvklUDpuoQowdy68+Sb06BHpkQghRgSIwOHDh1m9ejXgPf1q/fr1APTu3dujCzHARRddRGJiIsXFxWzdujWkYw0WiYAIkcbXpDySAiTUHpCqmoIFpZ9nVquVEydOsG/fPp8GdIhcBCRQCtaBAwcoLCzEarXqAseI2RQsJUDS0tKoV6+efr7qmgRiz549/Pe//wVgypQpAfvEGDH+vRw7dqzMPpDvvvsOoMzlg4Uw06sX3HnneTO6ELWIABFYsGABTqeTTp060bNnT4/l6oNffVG6ExcXp38hVjazoHhAhEgTKAISyRSsihbmkaqCZbYPiJkISGJiIhdddBFQmobly4AO5a+CBec/V0+fPu21n0hZUrBUmlSHDh08ItrGcQcjQAA6deoEmPeBvPbaa2iaxqhRo2jfvr3+ezcTAXG/h8qShnXs2DH27NkDiAARhMqGCBCB9957D/Ae/QBzX95qmVrXG8XFxeTn57u8QonNZtObe4kAESJFIA9IdUrBinQExIwAAdc0LG9NCBX+IiAOh4Pjx48D/gVIcnKy3qTQWxSkPAJECQZf487OzsbpdPocW3kEyOnTp3n77bcBePDBB4HA94cRtY4Sl2URIN9//73+cyQEiJQPFgTfiACp5mzdupUdO3YQExPD+PHjva5TVFQE4LdXQUJCAuB7wgPwwgsvULt2bf1l/EINBcYJn6RgCZGiOnpAImVC9yZAnE5nmQXI2rVry5yClZOTg8PhICYmRl/PF/58IEqAGA3wZgWIN/8HnBcUDofDp2iD8xEStb7anxkBMnfuXAoKCujSpQvDhg0DAkfIjKh7ZcSIEUDZfCAq/QpKCxSY2d7pdPLdd9/p33tlZeXKlTRo0ICPP/64XPsRhGhFBEgVYerUqXTo0CHo17p16/zuV5nPBw8e7FMQJCYmAqXVsHyhmnb5m9BMmzaNvLw8/eXLQFlRqDz32NjYCm/0JghmqYwCJFQekEATzEiY0PPz8/WJZ7AC5Oeff9Yn4e3atfNYTwmLvLw8l8aFcD79qmHDhl7ToIz48oFomqaLDG8eEPVZ6k4gAZKQkECtWrUA/2lYKgKiUrbMRkDsdjuvvfYaUBr9UH1ugknBUusMGzaMhIQEjh07ppdDNosxAmK3202Jik8++YRBgwYxceLEoI7lzpIlS8jJydE9MIIguOL/U1GoNBw9elTPRQ4Gf0+aHA4H77//PuA7/QrMpVeZecKYkJCgR0rCgdH/UdGN3gTBLEqA2Gw2bDabXsihMpThDVUfkMqUgqU+m5KSkvSHKYFo1KgR6enpuiBo3ry51zHXqVOHuLg47HY7OTk5NG3aVF9mxv+h8BUByc3N1cViM0NZ0po1a5KamsqpU6c4dOiQnqYEgStgKerXr09+fj7Z2dle08vAdwrWvn37KCws9Hn/fPLJJxw8eJC0tDRuuukm/f1gUrDU30daWhp9+/Zl9erVfPvttz7H6k5ubq7eDV6Rn58fUHSriNeHH37IU0895TXyZQb1fa0aMAqC4IpEQKoI7733HpqmBf1SoW9vfP311xw7doykpCSuu+46n+u1bdsW8F2lxW6360/p1LqVAamAJVQGjBNX4wOB6pyCFSoB4i3NJpgSvEZUFAS8+z8AYmJifBrRgxEgviIgKkqclpbm8bvylYaVmZnJuXPnSEhI8FoBSxGoghd4CpD69etTr149NE3z+0BMNR685557XMZdlhSsGjVqMGTIECA4H4gqo9y+fXs92uOrT4wRtY6maXr/q7KghIzyAQmC4IoIkGqMSr+6+uqrSUlJ8blenz59ANiwYQM2m81j+aZNmyguLsZqtdK9e/eQjLUsSA8QoTJgtVr1FJzKIkAilYIVagHidDo9nq4H6/9QqIaE4N3/oagIAeIrAuLNgK7wJUCMFbDc+5Z4G7e/FCx3D4jFYgmYhrVp0ybWrl1LfHw899xzj8uysqRg1axZk8GDBwPB+UCU/2PAgAG6ADFjRDeKlHfffbdMqcL5+fm68JAIiCB4RwRINaWgoIBPPvkE8J9+BTBkyBDq1q1Lfn4+ixcv9lg+d+5cAC6//HK/QibcSAREqCx4iwxEcwQkUApWRT8USExM1H1e7mlYwfQAMWKMgPgTIL4iCUqANG7cOOCxVATk0KFDLl678ggQf+lXYE6AuHtAILAPZM6cOQCMHTvW49zLUgWrZs2a9OnTh4SEBI4fP27aB6L8HwMHDgxKgKj7x2KxYLfbeemll0wdz4gxOnTixAm/lcYEoboiAqSa8sknn1BQUEDDhg0ZPny433UTEhJ4+OGHAXjooYfYtm2bvmzhwoXMnTsXi8XC9OnTQzrmYJEIiFBZ8DbximYPSLhN6BaLxWcvkLJGQDp37qxPXMsjQMxEQBo2bEhycjKaprl07PZWAUsRagGiaZpHChb4FyAFBQUsXLgQgDvuuMNjeVlSsGrWrEliYiKXXHIJYC4Nq6CggI0bNwKlERB1bwQTARk3bhxQKqjUdTCLUYDY7Xa//smK5sCBA7z00kucOXMmbMcUhLIgAqSaotKvxo0bF7BCC5RW4RoxYgTHjx+nZ8+edOvWjdatWzN+/HicTifPP/+8nqpVWZAmhEJlobpEQPxNMJ1OZ0h7n/gyopfVAxIbG8usWbO499579RQgb1SEALFYLHoUxJiGFcoISCAPSEFBgV7ZyyhA/JXi/eijjzhz5gytW7dm0KBBHsvNpmA5nU6PB0jGNKxA/Pjjj9jtdpo3b07Lli3L5AEZO3YsPXv2pLCwkFmzZgXczoi7PyacPpCnn36ahx9+mHnz5oXtmIJQFkSAVEOOHz/O119/DQROv1LExcWxfPlyXn31Vbp27cqePXs4efIkQ4cOZfny5Tz22GOhHHKZkBQsobJQ2QRIqDwg/lJs1DEhvAKkrBEQgFtvvZXXX3/dr5eiIgQInPeBGI3o3krwKrwJEIfDoZufyxsBUU/9ExMTXT5DVQRkz549HmVt33rrLQAmTZpETIzn9MKsAPF2rwTjAzH6PywWS5k8IHXq1GHatGkAzJo1K6iIgrsACacPRN0/qhKaIFRWRIBUQxo1aoTdbkfTNHr27Gl6u9jYWB544AG2bt1KQUEBp0+f5uuvv2b06NEhHG3ZkRQsobLgT4CEMgWrqKjI62Qt1B6QkpIS7Ha7yzJ1vhaLpcKPC4EFSLAeELMYu4or7Ha7Puk0K0DKGgE5fPgwDocDKK2AVVRURGJiIq1atfJ7vEACxGhAN5Yxb9SoEXXq1MHpdLr4MX777TfWrFlDbGyszx4aZj0g3u6VPn36kJiYyPHjxwOWpDf6P4AyCZDatWtzzTXX0K5dO3Jzc3VvixnU+JQIC6cAUcLXW1NLQahMiAARohaJgAiVBW8CJJTpSMYJvrfma6HygPgqOQyuEZ9Q9OUxluI1Up4IiBm8VcHKyspC0zRiY2NdDNz+cI+AOJ1ODh8+DHgXII0aNSIuLg6Hw8GxY8eA8+lXHTt29Bu18TVuI94M6OC7EpaKflxxxRU+jfdmPSDe7hWzPpCSkhK9Ae+AAQMAdA9IMClYtWvXJjY2lqlTpwLw0ksveTSb9IbT6WT37t0A+gO+cKZgqXtBBIhQ2REBIkQt4gERKguRSsEC72lYoYqAWK1WfeLr/pQ7lBEfqHgPiFm8pWAZK2B5S0XyhnsE5MSJE9hsNiwWi9coSmxsrN6cUKVhKQGiBIKZcefk5HiNknkzoCvcBUhxcTHvvPMOAH/84x99HtNsCpavz24zPpBNmzZx7tw50tLS6NixI2A+AmK32/VjK9Fy880307RpU44ePap7J/1x6NAhzp07R3x8vO6LNBMBOXPmDAsXLmTHjh2mSw1724e6tgcOHPBaNl8QKgsiQISoRVKwhMqCuwApKSnRJwehECDx8fG6EPAmQELlAbFYLD4rYYUy4gORT8E6ceKEPnEM1v8BrhEQTdP09KvGjRsTHx/vdRsVGXEXIIH8H3A+smG32712kA9GgCxbtoycnByaNGnCiBEjfB4z2BQs93vFjA9EpV/1799fj56YFSDGCIkSIAkJCTz00EMAvPjii3q6my9U+lXbtm1p2rQpYE6AzJw5k/Hjx9O1a1c6duzIE088wdatW4MSIyr6AaV+IGNFNUGobIgAEaIWScESKgvuqSfGyXmoBLIvI7qmaSGLgIDvNJtQRnwgNCZ0MygBcu7cOf2cyyJAWrZsicVioaCggBMnTvgtwatwN6IHI0ASEhL0vk3efCDuTQiNuAsQlX512223+a2qWJYULCO9e/cmMTGRrKwsnz4QZUBX/g/AdBleJUCSkpJcRN+dd95Jamoqu3fv5uOPP/a7D1UEoH379jRs2BAwJ0DU7w5KRcxzzz1Hjx49aNOmDdOmTTPlX1H3nULSsITKjAgQIWqRCIhQWXCPCqgJltVq9fl0u7z4EiDGPPZQiHNfT7lDLUAqug+IWWrUqKFfa5WGVRYBkpCQoEc09u3b59eArlAC5NChQ0FVwFL4K8XrywNi3P/u3bvZvXs3K1euBOD222/3ezyzKVi+7pVAPhCHw8EPP/wAuAoQs2V4jRWw3Mc9efJkABYsWOB3H0oYGQWIGQ+I8vv8+9//ZuHChVx77bUkJSWxb98+/vrXvzJ79uyA+zBGQCC8AmTRokVcddVVpnw2ggAiQIQoRjwgQmXBfVIe6sk4+BYgxv+HIgLiKwUrEhEQh8OhT4hCJUAsFotHJayyCBBw9YEEI0AOHjzI3r17KS4uJikpKWAFLIW/Slj+UrCaNm1KSkoKdrudxx57DE3TGDZsmD5+X5hNwfKXrjdkyBAA5s+f79Hgb8eOHeTl5VGzZk26deumvx9sCpYSs0ZGjRoFwJo1a/ymRXkTIGYiIEqAdOrUiXHjxrFkyRKys7N1T82ePXsC7qMiIyDr16/nT3/6k0tJZH+8/PLLLFu2jMWLF5f5mEL1QgSIELVICpZQWfAVAQmHAHGvgqUmFLGxsSGJvgRKwQqnCd34c6gECHhWlCqrADH6QPz1AFEYBYixApZZ43tZBYixEpZKSfJnPleoe6OwsBCn0+lzPX/3ytixY7Faraxfv54ePXrw448/6suU/yMjI8MlFawiBEjPnj1JTEwkJyfHpfywO0YB0qhRI6D0vvB3vna7XY9eGH/fNWrUoF+/fsD5ksz+UPtQ162sAiQrK4vRo0fz8ssvs3TpUlPbKDFo/H0Igj9EgAhRi6RgCZUFdwESjuhcoAhIKKIf4Pspd7hM6MYUEDUpqlmzZshS3cAzlSkSEZBg/B+KsgoQcK20lZqaytVXXx3weOp3b/QhecOfQO/YsSNr1qwhPT2dAwcO0L9/f2bOnInT6XRpQGgkWA+INwGSkJBAr169gNIoiDcKCgr0SEb79u31+8Jut+vV2Lxx7NgxnE4ncXFx+jYK9fs3I0DUfafS1MoqQO699159vL76xLijrt369evLdEyh+iECRIhaJAIiVBYiGQHxJUBC9XdRmVKwQu3/ULgLEPUkuqwCJFgPyKlTp9iwYQMQnADx5wHxZ0IHVwFy6623kpCQEPB4RtHrLw0r0L1y8cUXs3nzZm644QbsdjuPPPIIV155JatXrwZc/R/g6gHxlz7lT4BAaWQFfAsQFRlJS0sjNTUVq9Wq33v+0rCUaGnatKlH9MooQAJVxFICRAkwVVEtGBYvXsySJUv0/5vxdGiapq/3yy+/BEyx88fJkydd+ssI0YsIECFqEQ+IUFmojAIk1BGQSAoQNekKdQ8QhXEiX1JSok/ey5qCtWvXLq8pOe7UqlVLnyx/8803QMVEQBwOh37tfDVSNAoQM+lXUNoZ3Nf9YcTMvVK7dm0WLVrEG2+8QUJCAp999hknTpzAarXqkQqFEiAOh8Nv5EWJV18CpH///gC60d0dY/qVQqVhmREgqq+LEfX7P3v2bEAxoO6ZSy65hJiYGAoLC4NqgpiTk6Ob7X1VlfNGUVERJSUlQGkjxo0bN5o+pjujR4+mc+fOekNOIXoRASJELZKCJVQWKlMKVqh6gCh8VToKlwCx2+36OYa6B4jCKEDUhM9qtQZ9XBUByc7Oxul0Eh8frxuZfaGiIOqeqggBcvr0ad2zUK9ePa/b9u/fn/bt2zNu3LigjmmmEpbZvw+LxcJdd93Fjz/+qE/6+/XrR2JioscxVU8Qf2lYgSIgKrXp999/95qa5E2AmKmE5a/jfXJysn4fBUrDUhGQli1b6veFGfO64v777yc7O5vOnTtz//33A8F1j1eU1Qdy6NAhfdvMzMwy7UOoOogAEaIWScESKguRiICoSVhli4CESnQlJyfrxmP11DbcKVjZ2dku/g816TVLamqqy+S3WbNmAQ3lxj4hycnJtGzZ0vTxfAkQ5f+oXbu2T+9MrVq12LlzJwsXLjR9PDBXCSvYv49u3bqxceNGZs2axZtvvumx3GKxmCrF66sMryI1NVWP/HhLw/InQPxFQJSw8BYBAXM+EGMX9MaNG+vRNLM+kKVLl/L+++8TExPDvHnz9HvaTASkogTIF198of9cnjQuoWogAkSIWiQCIlQWKmMKVrg9IKE2oVssFo9eIOFKwTJWwSqrAR1Kz8FYytZf+pXCKEA6depkugIW+PaABPJ/lAczzQjL8vdRs2ZN7rvvPtq1a+d1uZlKWIEiIHA+DasiBYi/FCwwJ0BU+lXNmjVJSUkJSoDk5uZyzz33APDII4/Qq1cv/RqEMwJiFCBnzpwp0z6EqoMIECEqsdvtek6qRECESOM+6aoMAiTUKVjh9oCAZ956JEzo5REgcN4HAmUTIMGghFNOTo6LWdlfE8LyYiYFKxT3SkUJEF9GdE3TdAHSoUMH/f3yekAgOAGi7rtgBMiUKVM4duwY7du356mnngK8V5XzhVqndevWxMbGcvToUf2czGK32/WGlmA+ArJ+/Xo+/PDDoI7ljW3btvksLiCEBhEgQlRinPxIBESINO5pJ9HsAYlUJ3TwnDSF2wOSnZ2tT7waN25cpn2VJwISjBcDzgsMm83mMtEMVIK3PFSkByQYzJTiDUaAbNy40eVv68iRIxQUFBAXF+fyOzTjAQlU8cyMAFHCV913ZgXIihUrmD9/PhaLhbfffltP3XSPJvpDrdO4cWO6du0KBB8F2bBhg8s9aFaAjB8/nj/84Q+sWrUqqOMZsdvtDBkyhKFDh5o6X6FiEAEiRCVqkhUTE2OqPKQghBI1kbLZbNhstqiOgESqChZELgKiJvJ2u10vIRqJCEiwAiQxMVH/fRjTsEIpQELhATFDMB4QfwIkPT2dRo0aYbPZXKo9qehHenq6i28mUAqWsQlhJCIgM2fOBEoN6KrpIVCmFKzatWvTp08fIHgBsmLFCpf/mxUg6rzfeOONoI5nZN++feTm5lJSUhJ05EYoOyJAhKjEaEAP1ggqCBWN8UluQUFBpRAgoUpNrEwpWOHygCQkJOgTtq1btwJlFyDhjICAa/RGEY4ISEV7QAJhJgUrUBleKPXpeEvD8ub/gMApWFlZWTgcDmJjY31WPAsmAuIuQE6ePOlTRNhsNtatWwfAHXfc4bIsmDK8RvN+eQWIugZmBIjdbtc/zz755BO/aW7+MPYd8dYTRwgNIkCEqEQM6EJlwmq1EhsbC5ROvEJtyIbIR0B8pWCF8m/SVwQk1ClYcH4iryaJFREBMYoLXzRr1ox+/foxePBgU+u7460SVjhM6OGOgASTguWrCpZCCRBjPxBfAsQYAVGljY2oJ+5NmjTRPyPcUQLk8OHDPhsLuqdgpaSk6PekryjI1q1bKSwspE6dOnTs2NFlmbpeJSUlFBUVed1e4S0CsnHjRux2u9/tFDk5OXo06ZprrgHMCRCjiLXZbMybN8/U8dwRARIZRIAIUYk0IRQqExaLxSU1KRyT8Uh7QMJdBQsil4IFnobtsgqQ5s2bU7duXRITE2nVqlXA9WNiYvjhhx9YtWpVUBWwFN4ESChN6GZSsELx+R0oBctms+l/K/4iIHC+EtbatWt1UeFLgCgRYGzuaMRMx/umTZsCpQ3/Tp486XUd9xQsOC9mffUCURGcjIwMj3snJSVFzx4IlIZlFCAdOnSgVq1aFBYW8ssvv/jdTrFy5Uo0TaNr1656FTMzAsS9Uta//vUvryIvEEYBUtYoihA8IkCEqER6gAiVDW8CJBojIN5SbGw2G8XFxS7LQ0EkBYiaaCrKKkDi4uL49ttvWb16tT5pDkR50kyNJYQVkUzBstvt+hP3cKZgGSfZga579+7dSU5OJjc3l507dwK+BYixIaW3yW2gClhQmuKnIim+0rDcIyAQ2AeiIjhKUBmJiYnRr0OgNCxj6lpMTIzeid5sGpYqvztixAhTETKF8XO0Tp06ZGZmulTSMotEQCKDCBAhKpEULKGyUdkESKj7gBgnEMbJZijP2Vi5x2j2D7cASUpKCvgU3R8XXnghvXv3rohhBSRSHhBfE8xQ3SuBUrCUAKlRo4be0NIX8fHx+u/nhx9+4Ny5cxw4cADwFCDg34huRoBAYB+IvwiINwGiaZpfAQLmjeju5v1gfCBOp1P3fxgFiJk+IGqd1NRUJkyYAARvRnc6nbqIBBEg4UQEiBCVSAREqGwYBUh1KMNbUFCg56uryWZ8fDxWqzUkxwXXMrwq+mF8P5QYBUhZuqBHinB7QAKlYKn34+LiKvReMRsBMSscjQ0J9+zZg6Zp1KlTx2vamr9SvBUhQM6ePatPxs1GQPbu3UtWVhZWq5WLL77Y6zHN9gJx984EI0C2b99OVlYWycnJZGRkBBUBUedcs2ZN7rrrLgD++9//cuTIkYDbKg4cOODyGSkCJHyIABGiEvGACJWNyhYBCXUKltPp1NOuwuF5AdcULCVAateu7dPcW5G4C5CqgrsAKS4u1id2oWxE6CsFy3ivVKSIC+QBCVaAGCthGdOvvI3ZXwTEjAfEuNybAHHvgq7wJ0CU/+Piiy/We3+4Y7YXiK8IyK+//urX9A/n06+GDh1KQkJCmVKwUlJS6NixIwMHDsThcDB37tyA2yqM6VcgAiSciAARohJJwRIqG8Yv1mgWIMa/OffGi6E8X/AuQMKRfgVVX4CoiZcyOcfGxpYrjcwXZlOwKvpeCRQBMVOC18gll1yCxWJh7969rF69GvCefgX+S/FWRATEm/8DzguQw4cP6w8DFIHSr6DsKVgNGzbkggsuQNM0l14p3jCmX4G5KmkKYwQE4O677wZgzpw5pitwKQGirq+Y0MOHCBAhKpEULKGyoSbmp06dwuFwANHpAYmNjdWbf6q/w3AILnAVIOHqAaIwRguqkgBx94Ao/0e9evXKVFUrEGZTsCr6XjHrATGbrle7dm296/eCBQsA6NChg9d1faVgORwOXTyUR4B4839A6e+2Ro0aaJpGZmamyzIzAsRsLxBv4k1FQdavX+9zuzNnzuiRmLIIEGMEBODaa68lLS2Nw4cP89lnnwXcHs4LkMGDBwPmIyBbtmwxtZ7gGxEgQlQiERChsqHuReMTtmj0gIBnmk0kBEg4e4BA1Y+AZGdno2laSA3oYD4FK9wRkGBTsOB8Gpa613xFQHylYGVlZWG324mNjfWIXrhjJgLift9ZLBbatGkDuKZh5eTk6MZrY/dzd8xEQDRN8yrezPhAVq1ahc1mo3Xr1nq0RomJYCIgapuEhARuu+02AN58882A2wP89ttvwHkBYvTo+aKoqIiRI0ea2r/gGxEgQlQiERChsuEuQBITE0PqTYhUChZ4PuUOtwApKSnRJ2WSguUfJUBsNht5eXkhNaBD4Cfc4RAg3pr5lUeAKIJNwVLpV40bNw74WaAEyJEjRzx6XfhKwQLvvUDWrl0LQMeOHalXr57PY5oRIIWFhXpE11sE5Mcff/TZPNE9/QrO/95LSkooKSnxeVzwfq/ceeedAHz++efs37/f7/aapukRkD59+uheGGNBBm8cOXLE43NVCB4RIEJUIiZ0obKh7kUV4g/1ZLwyCBD3CEio/x5r1qyppw2plJNwCZB69erpBuSqJECSkpL030t2dnZImxBC4BSsUH12q8mxw+HQo4BGyiJAjOlLMTExerTBHV8pWGb9H1AqLmJiYrDZbB5CxlcKFng3optJvwJzKVjqusXGxrr8znr06EFcXBxZWVkcPHjQYztN07wKEOM+AkUi3CMgAG3atGHYsGFomsacOXP8bn/kyBHOnDlDXFwcbdu21R8iBErDCqbKluAbESBCVCIpWEJlwz0CEi4BYrfbXQyZofaAgGeaTbhM6BaLRZ9AhluAxMbG0qZNG2JiYmjbtm1YjllRGH0g4UrBKiws9Nq1OlQRkOTkZF2cekvDKosAadGihd6l/IILLtC9T+4oAXLixAmXcw5GgMTFxekCwz0Ny0wEpCwCxEwERC2rVauWSwWwpKQkunXrBnhPw9qzZw+ZmZnEx8fr6U9QWqpbXcdAvUDcTegKZUafO3cuNpvN5/Yq+tGmTRusVqv+dxDIiK6ut1A+RIAIUYmkYAmVDXcBEmpxbIxwGKMg4fCARCoFC84/tVUCJFweEIDPPvuM7777Tp+UVhWMPpBwCRDAayQiVPeKxWLxW4q3LALEYrHoaVi+0q/gvMBzOBx6cQQwX4JX4csHEkwE5Ny5c3plKrMCxF8ExF/1MH8+EFV+d8CAAR6/a7NGdHcTumLMmDHUr1+frKwsXWx5QwmQTp06AZiOgIgAqRhEgAhRiURAhMpGuCMgxtr+RgESyRSscAoQlf8drggIlD5JdfcFVAWMpXhDLUCSkpL0J+XeJpihvFf8GdHVRDrYppXjxo0DYNSoUT7XsVqtuhA2Pl0PJgICvgWImQhIZmYmDoeDjRs3YrPZaNy4Ma1atfJ7PDONCP1VD/MmQPbu3cvMmTN56aWXANf0K4VZAeIrAhIfH8/ll18OwJdffulze2VAD1aASApWxSACRIhKxAMiVDbUvaiMlaGejMfExOipDEp0OBwO/fjRWAULzk+EVN+DcAqQqooxAqIMuKHygFgsFr8+kFB+dvsrxVuWCAjA1VdfTW5uLvfee6/f9bz5QCpCgBi7oHuLgDRv3py4uDhKSko4cuSIHhHIyMgI2OgxmBQsfxGQTZs28fTTT9O9e3fatGnDI488wv79+0lISOCaa67x2K68ERCAyy67DPAvQNwjIMZUOX9IBKRiEAEiRCWSgiVUNtwnVOEQx+5G9KKiIn1ZKP82KkMKliKcKVhVlXB6QMB/Kd5IRUDKKkCg9J4LNJn3Voq3IgSISr+qUaOG14l4XFwcF1xwAVAafTDr/4DgTOjerlvbtm2pU6cORUVFPPXUU2zbto3Y2FguvfRS/vGPf5CZmenVuB9sBMTbeQ8bNgwo7dfhraqVpmn88ssvgERAIoUIECEqkRQsobLhK885lLgLEGPOfTRWwQJPASIRkMCE0wMC/ieY4RAgFeUBCQb3UrxOp1OfyJbHA+LP/6FQk/zdu3frJXjNCBBjxMhbwQDwf91iYmKYNGkSNWvWZMyYMcybN4+srCy++uorJk+e7LP3SXlTsKA0Ha1r165omsbXX3/tsfzEiRPk5uZisVho164dgJjQw4wIECEqkQiIUNlwn3xHQoCof61Wa0i6XCsiVQULRICUhXB6QMB/Kd5QCpBQpGCZxT0F68SJE9hsNmJiYnRxEghvAsRXE0IjygeybNkyTp8+TY0aNfQKVf5Q18LpdPoUA4G8MzNnzuTMmTMsXbqUiRMn+u07oqiIFCzwn4al0q/S09P1z0kzERBN0yQCUkGIABGiEvGACJWNyiRAQhn9gMqVgiUCJDBKgGRmZuremUinYIXis9tXClZJSYmenhhqAaKerqv0q0aNGhEfH29qH0qAHDt2TC+t7c+ArlACRPXd6Nu3L3FxcQGPl5SUpI/Nlw8kFMLNbDd0fxEQOC9AVq5c6dEM0d2ADuY8IKdPn3ZJZRXKjgiQasjq1au57rrraNKkCfHx8dSqVYs+ffrw8ssv++086nQ6ee211+jRowc1atQgNTWVYcOG8fnnn4dx9OaQFCyhslEZPCDh6AECka2CZZwIxcTE6JNOwTfqye++ffsA1+aEocDfE+5QRst8pWAZ/x+q+8VdgKgohln/B5T+nuLj43E6nbrwMJOCpQSI6lhuJv0KXPvqhFOAqN+9vz4gmqYFjIAMGDCAhIQEDh8+zM6dO12WuRvQwdUL5SvlTF13ebBRfkSAVDNeeeUVBg8ezMcff8y5c+e48MILSU1NZcOGDfzpT39iwIABXp9KORwOxowZwwMPPMD27dtp06YNderU4euvv2bUqFHMnDkzAmfjHYfDoT/FkxQsobJQGSIg4egBApWjCpb6OZSpZtGCioCoSVcoox8QuRQsXxEQlUaUkpJCbGxshR8XPD0gKgJi1v8BpYJaCRYlYIKJgCjMChAI3AsklALEXwSksLBQj2r4uleSkpIYMGAA4JmG5U2AqPve6XS69GsxotKvzKbNCb6RT+ZqRGZmJlOnTgXgmWee4cSJE2zatIn9+/ezdu1a0tLS2LBhAzNmzPDYdsaMGXz66ac0bNiQzZs3s23bNvbt28eCBQuIiYlh6tSp/PTTT+E+Ja8YjbYSAREqC5VBgEQ6BSvcJnR5SmkO95K7oRYgkaqC5csDEmr/B3h6QIKtgKVw94GYiYCkp6frP8fGxurlcc0QqBdIpASIio4Yyzp7w5iGZUQJkI4dO+rvxcfHe+3XYsSM50YwhwiQasSXX36J3W6nZ8+ePPHEEy55p5dccglPPPEEgEdKVUlJCS+++CJQGkExmtduuukmJk2ahKZpPPvss2E4i8CoLzWLxeLSjE0QIkl1FCCRNqGLADFHcnKyS7Q4XALEXwQknB6QcAqQEydO4HQ6K0yAmImAJCUl6RPm7t27+0xZ8kagCEhZGzj6w4wAMQpVfyWQlQBZtWqVnhlx6tQpXWB06NDBZf1ARnSJgFQcIkCqEWryYXwaYkSFaZW5TbFq1Spyc3OpVasWY8eO9dhu0qRJAHzxxRd+czbDhbECVqDa7IIQLhISElzSgaLZA2J8wm3M1Q63AJEeIOZREy8IXRNChZlGhJHwgIRSgKjr63A4OHXqVJk8IFC2CAic/37PyMgI6niR9ICYiYAEuk+6du1KgwYNKCwsZN26dcB5A3qLFi08xFggI7pEQCoOESDViAsvvBAo7UrqzWy+Zs0aAHr16uXy/vr16wHo3bu312odF110EYmJiRQXF7N169YKHnXwiAFdqIy4pwpEswfEOMEsLi7Wza8SAam8GEVHpFKwSkpKsNlsLutUJJFMwbJarbogPn78eJk8IMb1Dx06REFBgX4u/iIgADfccAMpKSnccsstQR2vsqZgBTKgK2JiYhg+fDhwPg3Lm/9DIRGQ8CECpBoxdOhQLr30UjIzM7n++uvZunUr586d48iRI8ycOZOZM2fSuHFjpk+f7rLd7t27Ad+Rk7i4OP1DUa0bSaQHiFBZibQAiUQKlnESIR6QykskBIj7BDPU90okU7DA1QeiJrLliYAE6oJu5L777iM/P5+LL744qOP5S8HSNE2/lpU1AgKe/UDKI0AkAlJxBC4ELUQVy5cv589//jNz586lR48eLstuu+02/vKXv3h8IObm5gL+v8zVMrWuN4qLi/UcTDj/oe+tKVR5yM7OBiAxMbHC9y0I5cEoio1f3qFCpXydPn2a/Px8/e8zLi4upMdW1WnOnj2rT5ISEhK8mo5DdWwovd7yGWAOo3CrUaNGSK+bqjSVm5vrchx1r8THx3Pu3DldMFcU7n8PCuUHSEpKCul5K2G3ceNGPQsh2GutvmsPHDigP/Br2LBhyNKflY8yOzvbY5xnzpzRK6dZLJYKu3Yqddr992RECQQzv7O+ffsCpdc9MzOT7du3A3DBBRd4bKtE6qFDh7zuV0WulOBz7y8iBIEmVCuOHDmijRs3TktISNBq1qypde/eXWvSpIkGaPXq1dNefvllj22GDh2qAdr/+3//z+d+BwwYoAHaM88843OdJ598UgPkJS95yUte8pKXvKr8a+/evRUyN6uOSASkijB16lSWLVsW9Hbz5s3jkksuAUqfYPTp04fDhw/z5JNPMn36dN3T8e2333LjjTfy0EMP4XA4ePjhh/V9qCcg/poUqsiGv9SOadOm8dBDD+n/V7W269WrV6Fm8fz8fJo3b86hQ4ekCVkIkescHuQ6hx65xuFBrnPokWscHvLy8mjRooUUuigHIkCqCEePHmXXrl1Bb2dMeXjhhRc4fPgwI0aM4KmnnnJZb/DgwbzyyivcdNNNPPPMM9x333268DCTXmUmTSshIYGEhASX9yqydJ87tWrVkg/gMCDXOTzIdQ49co3Dg1zn0CPXODxIo9OyI1euivDee++haVrQr2HDhun7+OGHHwC49NJLvR5DrZufn+9iJm/bti0A+/bt87qd3W7n4MGDLusKgiAIgiAIgjdEgFQjgjGpFRUV6T+rrqkbNmzQSyQa2bRpE8XFxVitVrp3717ucQqCIAiCIAjRiwiQaoSKTnz99ddel6sa2TExMbRp00Z/f8iQIdStW5f8/HwWL17ssd3cuXMBuPzyy4PqsBoqEhISePLJJz3SvYSKRa5zeJDrHHrkGocHuc6hR65xeJDrXH4smiY1xKoLH3zwATfeeCOATxN6VlYWV155pYfh/fnnn2f69Ok0atSIFStW0K1bNwAWLlzILbfcgqZprFu3To+WCIIgCIIgCII3RIBUIzRN4/bbb+ff//43UFrHunXr1mRnZ+tNkVq1asV3333n0QvEbrdz5ZVXsmLFCmJiYujSpQtnz57VfSEvvPACjz32WFjPRxAEQRAEQah6iACphixevJi3336bjRs3kpubS2JiIm3btuWqq67iwQcf9NnR1OFw8PrrrzNv3jx2795NfHw8F110EQ899BCjR48O81kIgiAIgiAIVRERIIIgCIIgCIIghA0xoQuCIAiCIAiCEDZEgAhRxWeffcawYcNITU2lRo0a9OzZk1mzZuF0OiM9tCqPpmn88MMPPPLII/Tt25c6depgtVpp0qQJ1113HatWrYr0EKOWJ554AovFgsVi4dlnn430cKIKh8PBnDlzGDRoEGlpaSQmJtKyZUuuvvpqli5dGunhVXlOnDjBww8/TOfOnUlOTiYxMZHWrVtz5513smfPnkgPr8qQmZnJnDlzuOOOO+jWrRtxcXGmPw/WrVvHVVddRf369UlKSqJTp04888wzLuX2hbJd4y1btvDnP/9Z//yIj4+nQYMGjBw5kk8++SSMo6+CaIIQJbzwwgsaoAFaenq6duGFF2oxMTEaoI0ZM0ZzOByRHmKV5quvvtKvb0xMjNauXTutR48eWs2aNfX3n3jiiUgPM+r49ddfNavVql/jZ555JtJDihpOnTql9e3bVwM0i8WitW/fXrvooou0xo0ba4B23XXXRXqIVZqdO3dqDRo00AAtPj5ea9++vdalSxctMTFRA7Tk5GTt22+/jfQwqwQPPPCA/hlgfAX6PHjvvfe02NhYDdCaNm2q9ejRQ4uPj9cArVevXlpBQUGYzqDyE+w13rNnj8t6rVq10i666CKtbt26+nsTJkyQuYcPJAIiRAXr1q3j8ccfJyYmhoULF7J37162bdvG5s2badiwIcuWLePll1+O9DCrNJqm0aZNG2bPnk1OTg67du1i8+bNnDx5kmnTpgHw7LPPsnz58giPNHrQNI277rqL+Ph4hg4dGunhRBVOp5MxY8awfv16rr32Wg4ePMjOnTvZuHEjR48e5dChQ9x///2RHmaV5t577+XEiRNkZGSwb98+du7cyc8//8zhw4cZM2YMhYWF3HbbbWhiRQ1IWloaV1xxBX/5y1/4/PPPue666wJus3//fiZNmoTD4eDFF1/k0KFDbN68md27d9O+fXt++uknpk6dGobRVw2C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Ade/5ZZb0DSNBQsWuLx/8OBBvv/+ey655BJat25t6thloVevXvr95/4y3mvu9O7dG4DvvvsuZGMTBCHK0QRBEISwMmHCBA3Q5s2b57EsMzNTA7TY2FitRo0a2tKlS/VlhYWFmqZp2pEjR7TU1FTNYrFozz//vFZUVKSvs2bNGq1p06YaoP33v/912feUKVM0QGvZsqW2Y8cO/f2tW7dqTZs21eLj472Oa9CgQRqgrVq1Kqjz+fzzzzWLxaKlpaVpS5YscVn21ltvaXFxcVpKSop29OhRl2WABmjJycku+8zPz9cuvfRSDdD+8Ic/eIzj6quv1gCtdevW2vr1612W7d69W3vxxRdd/g9oaWlpWklJice+lixZogHaxRdf7PWcvTF//nwN0K644gqf66hr+e6772qnTp3SrFar1q5dO5d1nnvuOQ3QZs+erWmapsXGxmqAlpmZ6bKeuu4TJkzwO64nn3xSA7RBgwaZOo/vvvtOi4+P1+Lj47XvvvvOY7ndbteSkpI0QDt27JipfQqCIBiRCIggCEIlxOFw8Je//IUxY8bo7ynPyEsvvcSpU6d48MEHmTZtGgkJCfo6/fr144033gBKow+KM2fO8OabbwIwe/ZsOnfurC/r1q0bs2bNwmazVeg5TJ8+HU3TmDt3Ltdee63LskmTJvHAAw9w5swZn30lJk2a5BJ9SElJ0c9pxYoVLuv+9NNP/Oc//yEhIYHPP/+cPn36uCxv06aNSypVmzZtGDBgADk5OXz66acex1aREbPRD4ADBw4A0LhxY1Pr161bl9GjR/P777+zYcMG/f333nuP+Ph4brjhBlP7mT9/vt80qqefftr0ORw8eJDrrrsOm83GrFmzGDBggMc6sbGxehRPnbMgCEIwiAARBEGopKg0IXdU2tIf//hHr8tHjBiB1Wpl7dq12O12AL7//nsKCwtp2bIlI0eO9NjmqquuomnTphU08tKJ6ebNm2nQoIGLiDKi3l+9erXX5d7Or2vXriQmJpKXl8fJkyf195W/45prrqFt27amxnj77bcDnmlY2dnZfP7551it1oBmciM5OTkApKammt5GmcyVGX3Tpk389ttvjBo1inr16pnaR4MGDXymUmVkZNC8eXNT+yksLOTqq68mOzube+65h7vuusvnuuocs7OzTe1bEATBSFykByAIgiB4kpaWRlpamsf7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", + "text/html": [ "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " + ], + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "15a1e6fa7b51471fac31ef09df821df9", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3RU1doG8GfSCwmEFkLvvQYBBaSJgiBgQa9iRbwWvIqiUq4NFUXAiort8oEKVhQvggLKpQpIByGUJEDoENJ7Pd8fO3tKMuVMO9Oe31pZM8ycmTkTJsl5zrvfvXWKoiggIiIiIiLSQJCnd4CIiIiIiAIHAwgREREREWmGAYSIiIiIiDTDAEJERERERJphACEiIiIiIs0wgBARERERkWYYQIiIiIiISDMMIEREREREpBkGECIiIiIi0gwDCBERERERaYYBhIiIiIiINMMAQkREREREmmEAISIiIiIizTCAEBERERGRZhhAiIiIiIhIMwwgRERERESkGQYQIiIiIiLSDAMIERERERFphgGEiIiIiIg0wwBCRERERESaYQAhIiIiIiLNMIAQEREREZFmGECIiIiIiEgzDCBERERERKQZBhAiIiIiItIMAwgREREREWmGAYSIiIiIiDTDAEJERERERJphACEiIiIiIs0wgBARERERkWYYQIiIiIiISDMMIEREREREpBkGECIiIiIi0gwDCBERERERaYYBhIiIiIiINMMAQkREREREmmEAISIiIiIizTCAEBERERGRZhhAiIiIiIhIMwwgRERERESkGQYQIiIiIiLSDAMIERERERFphgGEiIiIiIg0wwBCRERERESaYQAhIiIiIiLNMIAQEREREZFmGECIiIiIiEgzDCBERERERKQZBhAiIiIiItIMAwgREREREWmGAYSIiIiIiDTDAEJERERERJphACEiIiIiIs0wgBARERERkWYYQIiIiIiISDMMIEREREREpBkGECIiIiIi0gwDCBERERERaYYBhIiIiIiINMMAQkREREREmmEAISIiIiIizTCAEBERERGRZhhAiIiIiIhIMwwgRERERESkGQYQIiIiIiLSDAMIERERERFphgGEiIiIiIg0wwBCRERERESaYQAhIiIiIiLNMIAQEREREZFmQjy9AxS4Kisrcf78ecTExECn03l6d4iIiIhsUhQFeXl5aNy4MYKC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kZmZiczMTCQlJWHnzp3Ytm0bVq1ahdWrV6N79+548803MWLECE+/JfJVDCCIjIxE48aNcf78eaSmpjoWQFatEg39iYlAs2ZO7qyTWAEhIqIAwgCiUuvWrZGTk4Orr74a999/P8aPH2/zoGfkyJH669u2bcPXX3+NZcuWYdSoUXjnnXfYzE2OYQABIN77+fPnceLECfTt29f+5zde/dzTZA9IWRlQWgqEhXl2f4iIiNzITwePu15iYiL+97//Ydu2bXjkkUfsPuPav39/fPjhhzh16hReeuklBAcHu2lPye+lpiKl6mrbtm09uituJQOIhbUxnGpELywE1q0T1z05/a4kAwjAKggREfk9VkBUWr9+vUuep3bt2nj55Zdd8lwUgPLyoFy+DDn5bKBXQAAHp+L96y+gqAho2hTo0cPRPXSdsDDxVVoq+kDq1vX0HhEREbkNKyBEvuTECVwAUASxLksLuYK2P1IZQByqgMjQ0q0b4OgMWq7GPhAiIgoQDCBEvsSo/6N58+YIDQ316O64lXEAqTbTHODkEKxTp8Rly5aO7Zs7cC0QIiIKEByC5QYrV67Ezp07kZmZidatW+OOO+5A8+bNPb1b5A8CpQEdMASQ4mLRs2HcJwHD+z937hyKi4sRERGh/rm9MYBwKl4iIgoQrIDY6fTp07jzzjtRv359xMbGol+/fvj5558BANnZ2ejXrx9uueUWzJkzB59++immT5+ODh064KuvvvLsjpN/MAogft2ADogD8vBwcd3MMKz69eujVq1aUBQFp2SgUMubAwgrIERE5OcYQOyQmZmJAQMG4IcffkBmZiby8/Oxa9cujB8/Hn/88QcefPBB7Nq1C40bN8ZNN92EUaNGISEhASUlJXjooYfw999/e/otkK8zmgHL7ysgOp3VPhCdTud4IzoDCBERkccwgNjhrbfewrlz55CQkICPPvoIq1atwssvv4zw8HC88MIL+OWXX3D//fcjNTUV//3vf/HLL78gNTUVd999N8rKyrBgwQJPvwXydSkpgTMEC7DZiO5QH0hpKXDunLjuTQGEPSBERBQg2ANih9WrV0On02H16tXoUTV156hRo9CwYUM8/vjjiIiIwPvvv48wo0XEwsPD8cEHH2D58uXYuHGjh/ac/EJpKXD6NAOIEYcqIGfOiKb2yEigQQNn99B12ANCREQBghUQO5w4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RIBUIzRN4/bbb+ff//43UFrHunXr1mRnZ+tNkVq1asV3333n0QvEbrdz5ZVXsmLFCmJiYujSpQtnz57VfSEvvPACjz32WFjPRxAEQRAEQah6iACphixevJi3336bjRs3kpubS2JiIm3btuWqq67iwQcf9NnR1OFw8PrrrzNv3jx2795NfHw8F110EQ899BCjR48O81kIgiAIgiAIVRERIIIgCIIgCIIghA0xoQuCIAiCIAiCEDZEgAhRxWeffcawYcNITU2lRo0a9OzZk1mzZuF0OiM9tCqPpmn88MMPPPLII/Tt25c6depgtVpp0qQJ1113HatWrYr0EKOWJ554AovFgsVi4dlnn430cKIKh8PBnDlzGDRoEGlpaSQmJtKyZUuuvvpqli5dGunhVXlOnDjBww8/TOfOnUlOTiYxMZHWrVtz5513smfPnkgPr8qQmZnJnDlzuOOOO+jWrRtxcXGmPw/WrVvHVVddRf369UlKSqJTp04888wzLuX2hbJd4y1btvDnP/9Z//yIj4+nQYMGjBw5kk8++SSMo6+CaIIQJbzwwgsaoAFaenq6duGFF2oxMTEaoI0ZM0ZzOByRHmKV5quvvtKvb0xMjNauXTutR48eWs2aNfX3n3jiiUgPM+r49ddfNavVql/jZ555JtJDihpOnTql9e3bVwM0i8WitW/fXrvooou0xo0ba4B23XXXRXqIVZqdO3dqDRo00AAtPj5ea9++vdalSxctMTFRA7Tk5GTt22+/jfQwqwQPPPCA/hlgfAX6PHjvvfe02NhYDdCaNm2q9ejRQ4uPj9cArVevXlpBQUGYzqDyE+w13rNnj8t6rVq10i666CKtbt26+nsTJkyQuYcPJAIiRAXr1q3j8ccfJyYmhoULF7J37162bdvG5s2badiwIcuWLePll1+O9DCrNJqm0aZNG2bPnk1OTg67du1i8+bNnDx5kmnTpgHw7LPPsnz58giPNHrQNI277rqL+Ph4hg4dGunhRBVOp5MxY8awfv16rr32Wg4ePMjOnTvZuHEjR48e5dChQ9x///2RHmaV5t577+XEiRNkZGSwb98+du7cyc8//8zhw4cZM2YMhYWF3HbbbWhiRQ1IWloaV1xxBX/5y1/4/PPPue666wJus3//fiZNmoTD4eDFF1/k0KFDbN68md27d9O+fXt++uknpk6dGobRVw2C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Ade/5ZZb0DSNBQsWuLx/8OBBvv/+ey655BJat25t6thloVevXvr95/4y3mvu9O7dG4DvvvsuZGMTBCHK0QRBEISwMmHCBA3Q5s2b57EsMzNTA7TY2FitRo0a2tKlS/VlhYWFmqZp2pEjR7TU1FTNYrFozz//vFZUVKSvs2bNGq1p06YaoP33v/912feUKVM0QGvZsqW2Y8cO/f2tW7dqTZs21eLj472Oa9CgQRqgrVq1Kqjz+fzzzzWLxaKlpaVpS5YscVn21ltvaXFxcVpKSop29OhRl2WABmjJycku+8zPz9cuvfRSDdD+8Ic/eIzj6quv1gCtdevW2vr1612W7d69W3vxxRdd/g9oaWlpWklJice+lixZogHaxRdf7PWcvTF//nwN0K644gqf66hr+e6772qnTp3SrFar1q5dO5d1nnvuOQ3QZs+erWmapsXGxmqAlpmZ6bKeuu4TJkzwO64nn3xSA7RBgwaZOo/vvvtOi4+P1+Lj47XvvvvOY7ndbteSkpI0QDt27JipfQqCIBiRCIggCEIlxOFw8Je//IUxY8bo7ynPyEsvvcSpU6d48MEHmTZtGgkJCfo6/fr144033gBKow+KM2fO8OabbwIwe/ZsOnfurC/r1q0bs2bNwmazVeg5TJ8+HU3TmDt3Ltdee63LskmTJvHAAw9w5swZn30lJk2a5BJ9SElJ0c9pxYoVLuv+9NNP/Oc//yEhIYHPP/+cPn36uCxv06aNSypVmzZtGDBgADk5OXz66acex1aREbPRD4ADBw4A0LhxY1Pr161bl9GjR/P777+zYcMG/f333nuP+Ph4brjhBlP7mT9/vt80qqefftr0ORw8eJDrrrsOm83GrFmzGDBggMc6sbGxehRPnbMgCEIwiAARBEGopKg0IXdU2tIf//hHr8tHjBiB1Wpl7dq12O12AL7//nsKCwtp2bIlI0eO9NjmqquuomnTphU08tKJ6ebNm2nQoIGLiDKi3l+9erXX5d7Or2vXriQmJpKXl8fJkyf195W/45prrqFt27amxnj77bcDnmlY2dnZfP7551it1oBmciM5OTkApKammt5GmcyVGX3Tpk389ttvjBo1inr16pnaR4MGDXymUmVkZNC8eXNT+yksLOTqq68mOzube+65h7vuusvnuuocs7OzTe1bEATBSFykByAIgiB4kpaWRlpamsf7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", + "text/html": [ "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " + ], + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from stride.utils import fft\n", + "\n", + "freq, wavelet_fft = fft.magnitude_spectrum(shot.wavelets.data[0], time.step)\n", + "freq, traces_fft = fft.magnitude_spectrum(traces.data[0], time.step)\n", + "\n", + "plt.figure()\n", + "\n", + "plt.plot(freq*1e-6, traces_fft, c='r')\n", + "plt.plot(freq*1e-6, wavelet_fft, c='k')\n", + "\n", + "plt.xlim([-0.5, 12])\n", + "plt.ylim([-80, 5])\n", + "\n", + "plt.legend(['recorded', 'emitted'])\n", + "\n", + "plt.xlabel('frequency (MHz)')\n", + "plt.ylabel('magnitude (dB)')\n", + "plt.subplots_adjust(left=0.2)\n", + "plt.show()\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "2d4f36d7", + "metadata": {}, + "source": [ + "We can clearly see the excitation of high-order harmonics due to the non-linear behaviour of the bubble.\n", + "\n", + "Plotting the wavefield using two scales for the incident and scattered field will allow us to visualise this more easily." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "8c9cf787", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f60835ab86204470a475e4dc38dc7198", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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8PBw7d27Vx988IFiY2NVr149jRo1SrVq1crT7vjx4xo4cKCGDBnipUpvHgEEAADAxxluzusgJJZsoaGheu655wptM2vWLJOq8TzmgAAAAAAwDQEEAADAxzEJvfQ4e/asVq1apZiYmDz7DcPQG2+8oebNmyssLEz33HOPfvrpJ+8UeYsIIMVs2rRpslgsslgshXaVbd++XQMHDlS1atUUEhKiFi1aaObMmfnWgQYAwGysglXyGXLzHnm7YBTo7bff1gMPPKADBw7k2f/GG29o8uTJOnz4sNLS0rRx40bde++9+vXXX71U6c0jgBSjgwcPau7cuTdst3DhQnXr1k2rVq2S1WpV8+bNdfToUU2fPl133XWXrly5YkK1AADAVxl2w+0NJdP69esVFBSkQYMGOffl5ORozpw58vPz07/+9S/99NNPeuSRR3ThwgW99dZbXqv1ZhFAiolhGHrqqacUGBioe+65p8B2cXFxGjNmjPMfVnx8vPbu3avY2Fg1bdpUu3bt0gsvvGBi5QAA5EUPSMlntxtubyiZzpw5ozp16igoKMi5b8eOHUpKSlK/fv00btw4/eY3v9F7772ncuXK6dtvv/VitTeHAFJMPvzwQ23evFnTp09XvXr1Cmw3d+5cZWRkqHfv3po8ebIsFoskqX79+vroo48kSe+//74SExNNqRsAAPgeekBKj5SUFFWtWjXPvs2bN8tisah///7OfeXLl1dUVJROnjxpdom3jABSDJKSkjRlyhS1aNFCkyZNKrCdYRhavny5JGnMmDH5jnfp0kXNmjVTVlaWVq5cWWz1AgBQGHpASj67Ybi9oWQqV65cvh+eN27cKEm666678uwPDAxUVlaWWaV5DAGkGEyaNEkpKSl65513FBgYWGC7U6dO6dy5c5Kkrl27umzj2L9z507PFwoAAEoFekBKj9atW+vUqVPasWOHJCk+Pl4bNmxQnTp11KRJkzxtT548qRo1anijzFtCAPGw9evXa+HChXr00UfVvXv3QtvGxsZKkqxWq2rXru2yTWRkZJ62AAAA12MOSOkxduxYGYahvn37aujQoerSpYuys7M1duzYPO0OHjyopKQktWrVykuV3jyehO5B6enpevrppxUWFqa///3vN2x/4cIFSVKlSpWccz+uV7ly5TxtC5KRkaGMjAzn3202W1HLBgCgUO4Oq2J0j/nc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6LPPPpMkVaxYUc2aNdPly5d1+PBhHThwQB9//LG+/fZbdejQwe16pk2bpqtXr+rRRx/Vhx9+qMDAQJdtxo4dq3//+9+aPn26li1bdnMf3ksIIAAAoFDeHoIVGhqqXr16qWPHjurYsaPWrVunefPmefZNiqBHjx7atGmTTpw4oQYNGhTpnCeeeEJxcXG68847tWLFClWpUkVZWVn64x//qHnz5unBBx/UsWPHCnzK9ZYtW4r0PvYcu+w5bswBcaOtO0aPHq0ZM2YUy2sXhZn3aNCgQXrmmWfUvXt3BQTkfqU+duyYHnnkEf34448aMmSIDh8+rJCQELc+ww8//KDQ0FC9//77LsOHJAUGBuq9997TypUrtXHjRrdevyRgCBYAACjRRo8erf/+97+aNWuWBgwYoPDwcG+XVCS7d+/Wd999p4CAAC1cuFBVqlSRlPvl8c0331Tz5s2VmJio999//5bfyzEHxJ0NN3+P3n77bS1fvlz33nuvM3xIUqNGjfTVV18pKChI8fHxWrNmjds1ZWZmqmnTpjecYB4cHKymTZsqKyvL7ffwNgIIAAAo1b777jsNGDBANWrUkNVqVd26dTVq1CgdO3asWN936dKlkqRevXrlG5bk7++vkSNHSpKWLFlSrHX4Al+7R4WF4Hr16jmHyB05csTtmpo3b67Tp08XqW18fLxatmzp9nt4GwEEAAAUyjEEy52tpHj22WfVp08fff3115Kkli1bKi0tTQsWLFC7du20bdu2YnvvHTt2SCp4Hodj/549e5STk+OyzcSJE9W7d2/16dNHEyZM0OrVq/OtiiTJzQno7i3Z644NGzZo2LBhuueeezR06FDNmTNHCQkJhZ7j6/fIlfT0dElye/iVlHs9zp07p7fffrvQdv/4xz+UkJCgZ5991u338DYCCAAAKJXee+89vf3222rYsKE2bNigxMRE7d27VykpKZo1a5ZsNpseeugh55dFT4uNjZUkRUZGujzu2J+ZmamTJ0+6bDNv3jytXbtW3333nd59913169dPPXr0UFJSUp52JWUI1g8//KCvvvpKGzZs0NKlSzVlyhRFRkZqwYIFLtuXhnt0vejoaGfPx80skfvII4/otdde05QpUzR48GCtW7dOZ86cUVZWls6ePav169dryJAheuGFFzRnzpx8K6L5AgIIAAAoFjabLc+WkZFh2ntnZmZqxowZ8vf319KlS9WjRw/nMX9/f7300ksaMmSITp8+XWxDoC5cuCBJqly5ssvj1+53tHXo06ePvvzySx07dkzp6ek6ffq05s2bp9DQUP3www/67W9/q+zsbGd7u+FmD4iR2wPiqXtUq1Ytvfjii9q1a5eSk5N15coVbd26Vffff7+uXr2q0aNHO3s4HHz9HrmSk5Oj3//+95Kke+65R+3bt3e7Jn9/f/3pT39SVlaWVq5cqfvuu08REREKDg5WvXr11Lt3b61YsUJZWVmaMmWK/P39823XzkspiQggAADgBoyb2HLHwoeFhTm32bNnm1bx9u3blZCQoHbt2qlt27Yu2wwYMECStGnTpmKpwfGrfVBQkMvjVqvV+eerV6/mOfbtt99q2LBhioyMlNVqVZ06dfTMM89o3bp1CgwM1M6dO7Vo0SJneyPHcHuTPHePnnrqKf31r3/V7bffrvDwcIWEhKhLly76z3/+owceeECGYWjSpEl5ho/5+j1y5cUXX9TmzZtVsWLFm15cwDCMW95K+pPuS3Y8AgAAPis+Pl6hoaHOv1/7Za647d+/X5Kcy6u6cvHiRUnSmTNn8ux3LOVakIYNG7rcf/3Sr8HBwbpy5YoyMzNdtr+2t6GocwU6dOigoUOHatGiRVq2bJkGDhwoSW7P63C0Le57ZLFY9Oqrr2r58uU6duyYfv75Z7Vp00ZS6btH//rXvzRnzhwFBARo0aJFatSoUaHtC1LSw4MnEEAAAECxCA0NzfPltiDDhg1z+eTooj4Dw5XU1FRJUlJSUr75Ete7/pft1q1b5xne5LB//37ZbDbdfvvtLr+oX79sauXKlXXlypUCh+5cu7+gIUCudO7cWYsWLdLRo0ed+9yd1+Foa8Y9atKkicLDw5WSkqKjR486A0hpukdffPGFfve738lisWjBggXq169foZ+nrCOAAACAG/jfsKqity+6Xbt2FXmCb1FVqFBBkjRixAjnE6uLqqCHHDp+dV+yZEmRHnIXFRWlM2fO6Pjx4y6PO/YHBQWpfv36Ra7P8XC6PHNAbrIHpKhu9R65qrm03KPVq1frsccek91u1z//+U+NGDGiaB+iDGMOCAAA8Kq4uDiX49hvRYsWLSRJMTExnijxpnTq1EmStHXrVpfHHfvbt28vf3//Ir/uL7/8IkmqW7euc5/h5gpYhpurYN3KPTp//rx+/fXXfDWXhnv0ww8/aOjQocrKytLs2bM1YcKE4iu2FCGAAACAUqdbt26qWrWqoqOjtXHjRq/UMHjwYEnS2rVrderUqTzHcnJy9Mknn0iShg4dWuTXTExM1MKFCyVJPXv2dO635xiy59jd2Mx7WMsbb7whwzAUFhamDh06OPf7+j3as2ePfvvb3+rq1auaOnWq/vSnPxV/waUEAQQAAJQ6wcHB+stf/iIpd/7C8uXL8/1iHxMToylTphT46/et6tixo3r16qXs7GyNGDFCycnJkqSsrCxNmjRJBw8eVPXq1TVu3Lg8502dOlULFy7UlStX8uyPjo5Wr169dOHCBVWvXl1PPfVUsdTtrl9++UUTJkxw9sw4pKen629/+5tee+01SdKUKVPyrDbly/fo8OHD6tOnj2w2myZMmKC//e1vxVJfacUcEAAAUKLFx8fnWabV8cX8s88+04oVK5z7V65cmefBb+PHj9epU6f06quvavDgwQoPD1ejRo2Uk5OjuLg4paSkSJLuvvvuYqt9wYIF6tKli7Zs2aKIiAg1b95cp06dUlJSkoKDg/XFF18450I4HDx4UK+++qoCAgLUuHFjhYWFKSkpyTkfoUaNGlq1apUqVaokm80m6eYnoXtCVlaW3n33Xb377ruqVq2aIiIinJ/Dca/GjBnjsofAV+/RxIkTdf78eVksFv30008FruI1evRojR49uthq91UEEAAAcAPFOwn9RnJycpy/TF8rIyMjzzKpWVlZ+drMnj1bv/3tb/XPf/5TmzdvVnR0tCpUqKC6detq0KBBGjJkiO69916P1nut2rVra9++fZo5c6ZWrFih/fv3q1KlSho+fLhefvll5zyIa40fP141atTQjz/+qLNnz+ro0aMqV66cOnTooH79+ul3v/udqlatmuccx4MIi8rxIEJPaNCggWbOnKlt27bp0KFDOnz4sDIzM1W9enX17dtXY8eO1X333Vfg+b54jxz/7gzD0LZt2wp87WuHyeF/LMatzvJCiWSz2RQWFqbEhHNFWl4PAOBbbDabatSspdTU1GL777zjf0sOHUpRxYpFf4+0NJuaNQsv1tqQy3GPZkxerGBruSKfl55xRTPmDucewSvoAQEAAPBxxb0ML+BJBBAAAHAD3h2ChRvLXQXLjTkgJq6CBVyPAAIAAODj6AGBLyGAAAAA+DhvroIF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nqe9Ybfn9oIUcTM8/CDChIQEffrpp3rmmWfUsWNHWa1WWSwWjR071qPvU1zcvUeXLl3SnDlzNGTIEDVt2lSVK1dWUFCQ6tSpo6FDh2rTpk0mfwLfQg8IAAAosY4dO6Z27do5/96wYUM1aNBAx48f15o1a7RmzRqNHDlSH330kfz8St7vqgkJCercubPi4uJUrlw5tWzZUvHx8fr888+1fPlyrVmzRnfddVeB53ft2tXl/mbNmuX5u7d7QBYvXqxJkyZ59DXNcjP3KCEhQVOmTJEkVa5cWXXq1JG/v79OnDihpUuXaunSpXrllVc0ffp0b3ykEq/k/X8qAAAoYYyb2Dz0zoahWrVq6bXXXtPZs2d1/Phx7d69W+fPn9e8efNksVj0ySef6J133vHYexakR48eslgsiouLK/I5TzzxhOLi4nTnnXfq1KlT2rNnj86cOaPf//73unr1qh588EFdvny5wPO3bNnicpsxY0aedna73e3Nk0JDQ9WrVy+99NJLWrlypX7/+9979PWLyqx7VKlSJc2bN09HjhxRSkqKYmJiFB0drfPnz2vOnDmSpBkzZmjXrl2e/HilBgEEAACUWHXr1tXRo0f1wgsvqFatWs79fn5+euaZZ/TUU09JkubPn++tEgu0e/dufffddwoICNDChQtVpUoVSVJgYKDefPNNNW/eXImJiXr//fdv+b0MI8ftzZNGjx6t//73v5o1a5YGDBig8PBwj75+cbnZe1S1alU988wzioqKyrM/KChIkydPVt++fWUYhlasWGHWR/EpBBAAAFBiBQcHq1y5cgUe7927tyTpyJEjBbb57rvvNGDAANWoUUNWq1V169bVqFGjdOzYMY/Xe62lS5dKknr16qWIiIg8x/z9/TVy5EhJ0pIlS275vbzdA3KrSts9cgyRu3LligeqLH0IIAAAwGelp6dLkkJCQlwef/bZZ9WnTx99/fXXkqSWLVsqLS1NCxYsULt27bRt27Ziq23Hjh2SCp7H4di/Z88e5eS47pGYOHGievfurT59+mjChAlavXq1DKN0rTLm6/foeoZhOF/32vlL+B8CCAAA8FlffvmlJNdfIN977z29/fbbatiwoTZs2KDExETt3btXKSkpmjVrlmw2mx566CFniPG02NhYSVJkZKTL4479mZmZOnnypMs28+bN09q1a/Xdd9/p3XffVb9+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", + "text/html": [ "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";/* global mpl */\n", - "\n", - "var comm_websocket_adapter = function (comm) {\n", - " // Create a \"websocket\"-like object which calls the given IPython comm\n", - " // object with the appropriate methods. Currently this is a non binary\n", - " // socket, so there is still some room for performance tuning.\n", - " var ws = {};\n", - "\n", - " ws.binaryType = comm.kernel.ws.binaryType;\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " function updateReadyState(_event) {\n", - " if (comm.kernel.ws) {\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " } else {\n", - " ws.readyState = 3; // Closed state.\n", - " }\n", - " }\n", - " comm.kernel.ws.addEventListener('open', updateReadyState);\n", - " comm.kernel.ws.addEventListener('close', updateReadyState);\n", - " comm.kernel.ws.addEventListener('error', updateReadyState);\n", - "\n", - " ws.close = function () {\n", - " comm.close();\n", - " };\n", - " ws.send = function (m) {\n", - " //console.log('sending', m);\n", - " comm.send(m);\n", - " };\n", - " // Register the callback with on_msg.\n", - " comm.on_msg(function (msg) {\n", - " //console.log('receiving', msg['content']['data'], msg);\n", - " var data = msg['content']['data'];\n", - " if (data['blob'] !== undefined) {\n", - " data = {\n", - " data: new Blob(msg['buffers'], { type: data['blob'] }),\n", - " };\n", - " }\n", - " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", - " ws.onmessage(data);\n", - " });\n", - " return ws;\n", - "};\n", - "\n", - "mpl.mpl_figure_comm = function (comm, msg) {\n", - " // This is the function which gets called when the mpl process\n", - " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", - "\n", - " var id = msg.content.data.id;\n", - " // Get hold of the div created by the display call when the Comm\n", - " // socket was opened in Python.\n", - " var element = document.getElementById(id);\n", - " var ws_proxy = comm_websocket_adapter(comm);\n", - "\n", - " function ondownload(figure, _format) {\n", - " window.open(figure.canvas.toDataURL());\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", - "\n", - " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", - " // web socket which is closed, not our websocket->open comm proxy.\n", - " ws_proxy.onopen();\n", - "\n", - " fig.parent_element = element;\n", - " fig.cell_info = mpl.find_output_cell(\"
\");\n", - " if (!fig.cell_info) {\n", - " console.error('Failed to find cell for figure', id, fig);\n", - " return;\n", - " }\n", - " fig.cell_info[0].output_area.element.on(\n", - " 'cleared',\n", - " { fig: fig },\n", - " fig._remove_fig_handler\n", - " );\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function (fig, msg) {\n", - " var width = fig.canvas.width / fig.ratio;\n", - " fig.cell_info[0].output_area.element.off(\n", - " 'cleared',\n", - " fig._remove_fig_handler\n", - " );\n", - " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", - "\n", - " // Update the output cell to use the data from the current canvas.\n", - " fig.push_to_output();\n", - " var dataURL = fig.canvas.toDataURL();\n", - " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", - " // the notebook keyboard shortcuts fail.\n", - " IPython.keyboard_manager.enable();\n", - " fig.parent_element.innerHTML =\n", - " '';\n", - " fig.close_ws(fig, msg);\n", - "};\n", - "\n", - "mpl.figure.prototype.close_ws = function (fig, msg) {\n", - " fig.send_message('closing', msg);\n", - " // fig.ws.close()\n", - "};\n", - "\n", - "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", - " // Turn the data on the canvas into data in the output cell.\n", - " var width = this.canvas.width / this.ratio;\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] =\n", - " '';\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Tell IPython that the notebook contents must change.\n", - " IPython.notebook.set_dirty(true);\n", - " this.send_message('ack', {});\n", - " var fig = this;\n", - " // Wait a second, then push the new image to the DOM so\n", - " // that it is saved nicely (might be nice to debounce this).\n", - " setTimeout(function () {\n", - " fig.push_to_output();\n", - " }, 1000);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'btn-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " var button;\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " continue;\n", - " }\n", - "\n", - " button = fig.buttons[name] = document.createElement('button');\n", - " button.classList = 'btn btn-default';\n", - " button.href = '#';\n", - " button.title = name;\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message pull-right';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = document.createElement('div');\n", - " buttongrp.classList = 'btn-group inline pull-right';\n", - " button = document.createElement('button');\n", - " button.classList = 'btn btn-mini btn-primary';\n", - " button.href = '#';\n", - " button.title = 'Stop Interaction';\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', function (_evt) {\n", - " fig.handle_close(fig, {});\n", - " });\n", - " button.addEventListener(\n", - " 'mouseover',\n", - " on_mouseover_closure('Stop Interaction')\n", - " );\n", - " buttongrp.appendChild(button);\n", - " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", - " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", - "};\n", - "\n", - "mpl.figure.prototype._remove_fig_handler = function (event) {\n", - " var fig = event.data.fig;\n", - " if (event.target !== this) {\n", - " // Ignore bubbled events from children.\n", - " return;\n", - " }\n", - " fig.close_ws(fig, {});\n", - "};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (el) {\n", - " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (el) {\n", - " // this is important to make the div 'focusable\n", - " el.setAttribute('tabindex', 0);\n", - " // reach out to IPython and tell the keyboard manager to turn it's self\n", - " // off when our div gets focus\n", - "\n", - " // location in version 3\n", - " if (IPython.notebook.keyboard_manager) {\n", - " IPython.notebook.keyboard_manager.register_events(el);\n", - " } else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", - " // Check for shift+enter\n", - " if (event.shiftKey && event.which === 13) {\n", - " this.canvas_div.blur();\n", - " // select the cell after this one\n", - " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", - " IPython.notebook.select(index + 1);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " fig.ondownload(fig, null);\n", - "};\n", - "\n", - "mpl.find_output_cell = function (html_output) {\n", - " // Return the cell and output element which can be found *uniquely* in the notebook.\n", - " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", - " // IPython event is triggered only after the cells have been serialised, which for\n", - " // our purposes (turning an active figure into a static one), is too late.\n", - " var cells = IPython.notebook.get_cells();\n", - " var ncells = cells.length;\n", - " for (var i = 0; i < ncells; i++) {\n", - " var cell = cells[i];\n", - " if (cell.cell_type === 'code') {\n", - " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", - " var data = cell.output_area.outputs[j];\n", - " if (data.data) {\n", - " // IPython >= 3 moved mimebundle to data attribute of output\n", - " data = data.data;\n", - " }\n", - " if (data['text/html'] === html_output) {\n", - " return [cell, data, j];\n", - " }\n", - " }\n", - " }\n", - " }\n", - "};\n", - "\n", - "// Register the function which deals with the matplotlib target/channel.\n", - "// The kernel may be null if the page has been refreshed.\n", - "if (IPython.notebook.kernel !== null) {\n", - " IPython.notebook.kernel.comm_manager.register_target(\n", - " 'matplotlib',\n", - " mpl.mpl_figure_comm\n", - " );\n", - "}\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "traces = traces_1 - traces_0\n", - "traces.plot_one(60, plot=False)\n", - "plt.xlabel('time (microseconds)')\n", - "plt.ylabel('pressure (Pa)')\n", - "plt.subplots_adjust(left=0.2)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "d4270928", - "metadata": {}, - "source": [ - "We can also look at the magnitude spectrum of this signal and compare it with the signal used to excite the source. " - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "a5cc35c8", - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";/* global mpl */\n", - "\n", - "var comm_websocket_adapter = function (comm) {\n", - " // Create a \"websocket\"-like object which calls the given IPython comm\n", - " // object with the appropriate methods. Currently this is a non binary\n", - " // socket, so there is still some room for performance tuning.\n", - " var ws = {};\n", - "\n", - " ws.binaryType = comm.kernel.ws.binaryType;\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " function updateReadyState(_event) {\n", - " if (comm.kernel.ws) {\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " } else {\n", - " ws.readyState = 3; // Closed state.\n", - " }\n", - " }\n", - " comm.kernel.ws.addEventListener('open', updateReadyState);\n", - " comm.kernel.ws.addEventListener('close', updateReadyState);\n", - " comm.kernel.ws.addEventListener('error', updateReadyState);\n", - "\n", - " ws.close = function () {\n", - " comm.close();\n", - " };\n", - " ws.send = function (m) {\n", - " //console.log('sending', m);\n", - " comm.send(m);\n", - " };\n", - " // Register the callback with on_msg.\n", - " comm.on_msg(function (msg) {\n", - " //console.log('receiving', msg['content']['data'], msg);\n", - " var data = msg['content']['data'];\n", - " if (data['blob'] !== undefined) {\n", - " data = {\n", - " data: new Blob(msg['buffers'], { type: data['blob'] }),\n", - " };\n", - " }\n", - " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", - " ws.onmessage(data);\n", - " });\n", - " return ws;\n", - "};\n", - "\n", - "mpl.mpl_figure_comm = function (comm, msg) {\n", - " // This is the function which gets called when the mpl process\n", - " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", - "\n", - " var id = msg.content.data.id;\n", - " // Get hold of the div created by the display call when the Comm\n", - " // socket was opened in Python.\n", - " var element = document.getElementById(id);\n", - " var ws_proxy = comm_websocket_adapter(comm);\n", - "\n", - " function ondownload(figure, _format) {\n", - " window.open(figure.canvas.toDataURL());\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", - "\n", - " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", - " // web socket which is closed, not our websocket->open comm proxy.\n", - " ws_proxy.onopen();\n", - "\n", - " fig.parent_element = element;\n", - " fig.cell_info = mpl.find_output_cell(\"
\");\n", - " if (!fig.cell_info) {\n", - " console.error('Failed to find cell for figure', id, fig);\n", - " return;\n", - " }\n", - " fig.cell_info[0].output_area.element.on(\n", - " 'cleared',\n", - " { fig: fig },\n", - " fig._remove_fig_handler\n", - " );\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function (fig, msg) {\n", - " var width = fig.canvas.width / fig.ratio;\n", - " fig.cell_info[0].output_area.element.off(\n", - " 'cleared',\n", - " fig._remove_fig_handler\n", - " );\n", - " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", - "\n", - " // Update the output cell to use the data from the current canvas.\n", - " fig.push_to_output();\n", - " var dataURL = fig.canvas.toDataURL();\n", - " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", - " // the notebook keyboard shortcuts fail.\n", - " IPython.keyboard_manager.enable();\n", - " fig.parent_element.innerHTML =\n", - " '';\n", - " fig.close_ws(fig, msg);\n", - "};\n", - "\n", - "mpl.figure.prototype.close_ws = function (fig, msg) {\n", - " fig.send_message('closing', msg);\n", - " // fig.ws.close()\n", - "};\n", - "\n", - "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", - " // Turn the data on the canvas into data in the output cell.\n", - " var width = this.canvas.width / this.ratio;\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] =\n", - " '';\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Tell IPython that the notebook contents must change.\n", - " IPython.notebook.set_dirty(true);\n", - " this.send_message('ack', {});\n", - " var fig = this;\n", - " // Wait a second, then push the new image to the DOM so\n", - " // that it is saved nicely (might be nice to debounce this).\n", - " setTimeout(function () {\n", - " fig.push_to_output();\n", - " }, 1000);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'btn-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " var button;\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " continue;\n", - " }\n", - "\n", - " button = fig.buttons[name] = document.createElement('button');\n", - " button.classList = 'btn btn-default';\n", - " button.href = '#';\n", - " button.title = name;\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message pull-right';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = document.createElement('div');\n", - " buttongrp.classList = 'btn-group inline pull-right';\n", - " button = document.createElement('button');\n", - " button.classList = 'btn btn-mini btn-primary';\n", - " button.href = '#';\n", - " button.title = 'Stop Interaction';\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', function (_evt) {\n", - " fig.handle_close(fig, {});\n", - " });\n", - " button.addEventListener(\n", - " 'mouseover',\n", - " on_mouseover_closure('Stop Interaction')\n", - " );\n", - " buttongrp.appendChild(button);\n", - " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", - " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", - "};\n", - "\n", - "mpl.figure.prototype._remove_fig_handler = function (event) {\n", - " var fig = event.data.fig;\n", - " if (event.target !== this) {\n", - " // Ignore bubbled events from children.\n", - " return;\n", - " }\n", - " fig.close_ws(fig, {});\n", - "};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (el) {\n", - " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (el) {\n", - " // this is important to make the div 'focusable\n", - " el.setAttribute('tabindex', 0);\n", - " // reach out to IPython and tell the keyboard manager to turn it's self\n", - " // off when our div gets focus\n", - "\n", - " // location in version 3\n", - " if (IPython.notebook.keyboard_manager) {\n", - " IPython.notebook.keyboard_manager.register_events(el);\n", - " } else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", - " // Check for shift+enter\n", - " if (event.shiftKey && event.which === 13) {\n", - " this.canvas_div.blur();\n", - " // select the cell after this one\n", - " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", - " IPython.notebook.select(index + 1);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " fig.ondownload(fig, null);\n", - "};\n", - "\n", - "mpl.find_output_cell = function (html_output) {\n", - " // Return the cell and output element which can be found *uniquely* in the notebook.\n", - " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", - " // IPython event is triggered only after the cells have been serialised, which for\n", - " // our purposes (turning an active figure into a static one), is too late.\n", - " var cells = IPython.notebook.get_cells();\n", - " var ncells = cells.length;\n", - " for (var i = 0; i < ncells; i++) {\n", - " var cell = cells[i];\n", - " if (cell.cell_type === 'code') {\n", - " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", - " var data = cell.output_area.outputs[j];\n", - " if (data.data) {\n", - " // IPython >= 3 moved mimebundle to data attribute of output\n", - " data = data.data;\n", - " }\n", - " if (data['text/html'] === html_output) {\n", - " return [cell, data, j];\n", - " }\n", - " }\n", - " }\n", - " }\n", - "};\n", - "\n", - "// Register the function which deals with the matplotlib target/channel.\n", - "// The kernel may be null if the page has been refreshed.\n", - "if (IPython.notebook.kernel !== null) {\n", - " IPython.notebook.kernel.comm_manager.register_target(\n", - " 'matplotlib',\n", - " mpl.mpl_figure_comm\n", - " );\n", - "}\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from stride.utils import fft\n", - "\n", - "freq, wavelet_fft = fft.magnitude_spectrum(shot.wavelets.data[0], time.step)\n", - "freq, traces_fft = fft.magnitude_spectrum(traces.data[0], time.step)\n", - "\n", - "plt.figure()\n", - "\n", - "plt.plot(freq*1e-6, traces_fft, c='r')\n", - "plt.plot(freq*1e-6, wavelet_fft, c='k')\n", - "\n", - "plt.xlim([-0.5, 12])\n", - "plt.ylim([-80, 5])\n", - "\n", - "plt.legend(['recorded', 'emitted'])\n", - "\n", - "plt.xlabel('frequency (MHz)')\n", - "plt.ylabel('magnitude (dB)')\n", - "plt.subplots_adjust(left=0.2)\n", - "plt.show()\n", - "\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "2d4f36d7", - "metadata": {}, - "source": [ - "We can clearly see the excitation of high-order harmonics due to the non-linear behaviour of the bubble.\n", - "\n", - "Plotting the wavefield using two scales for the incident and scattered field will allow us to visualise this more easily." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "8c9cf787", - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";/* global mpl */\n", - "\n", - "var comm_websocket_adapter = function (comm) {\n", - " // Create a \"websocket\"-like object which calls the given IPython comm\n", - " // object with the appropriate methods. Currently this is a non binary\n", - " // socket, so there is still some room for performance tuning.\n", - " var ws = {};\n", - "\n", - " ws.binaryType = comm.kernel.ws.binaryType;\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " function updateReadyState(_event) {\n", - " if (comm.kernel.ws) {\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " } else {\n", - " ws.readyState = 3; // Closed state.\n", - " }\n", - " }\n", - " comm.kernel.ws.addEventListener('open', updateReadyState);\n", - " comm.kernel.ws.addEventListener('close', updateReadyState);\n", - " comm.kernel.ws.addEventListener('error', updateReadyState);\n", - "\n", - " ws.close = function () {\n", - " comm.close();\n", - " };\n", - " ws.send = function (m) {\n", - " //console.log('sending', m);\n", - " comm.send(m);\n", - " };\n", - " // Register the callback with on_msg.\n", - " comm.on_msg(function (msg) {\n", - " //console.log('receiving', msg['content']['data'], msg);\n", - " var data = msg['content']['data'];\n", - " if (data['blob'] !== undefined) {\n", - " data = {\n", - " data: new Blob(msg['buffers'], { type: data['blob'] }),\n", - " };\n", - " }\n", - " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", - " ws.onmessage(data);\n", - " });\n", - " return ws;\n", - "};\n", - "\n", - "mpl.mpl_figure_comm = function (comm, msg) {\n", - " // This is the function which gets called when the mpl process\n", - " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", - "\n", - " var id = msg.content.data.id;\n", - " // Get hold of the div created by the display call when the Comm\n", - " // socket was opened in Python.\n", - " var element = document.getElementById(id);\n", - " var ws_proxy = comm_websocket_adapter(comm);\n", - "\n", - " function ondownload(figure, _format) {\n", - " window.open(figure.canvas.toDataURL());\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", - "\n", - " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", - " // web socket which is closed, not our websocket->open comm proxy.\n", - " ws_proxy.onopen();\n", - "\n", - " fig.parent_element = element;\n", - " fig.cell_info = mpl.find_output_cell(\"
\");\n", - " if (!fig.cell_info) {\n", - " console.error('Failed to find cell for figure', id, fig);\n", - " return;\n", - " }\n", - " fig.cell_info[0].output_area.element.on(\n", - " 'cleared',\n", - " { fig: fig },\n", - " fig._remove_fig_handler\n", - " );\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function (fig, msg) {\n", - " var width = fig.canvas.width / fig.ratio;\n", - " fig.cell_info[0].output_area.element.off(\n", - " 'cleared',\n", - " fig._remove_fig_handler\n", - " );\n", - " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", - "\n", - " // Update the output cell to use the data from the current canvas.\n", - " fig.push_to_output();\n", - " var dataURL = fig.canvas.toDataURL();\n", - " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", - " // the notebook keyboard shortcuts fail.\n", - " IPython.keyboard_manager.enable();\n", - " fig.parent_element.innerHTML =\n", - " '';\n", - " fig.close_ws(fig, msg);\n", - "};\n", - "\n", - "mpl.figure.prototype.close_ws = function (fig, msg) {\n", - " fig.send_message('closing', msg);\n", - " // fig.ws.close()\n", - "};\n", - "\n", - "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", - " // Turn the data on the canvas into data in the output cell.\n", - " var width = this.canvas.width / this.ratio;\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] =\n", - " '';\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Tell IPython that the notebook contents must change.\n", - " IPython.notebook.set_dirty(true);\n", - " this.send_message('ack', {});\n", - " var fig = this;\n", - " // Wait a second, then push the new image to the DOM so\n", - " // that it is saved nicely (might be nice to debounce this).\n", - " setTimeout(function () {\n", - " fig.push_to_output();\n", - " }, 1000);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'btn-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " var button;\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " continue;\n", - " }\n", - "\n", - " button = fig.buttons[name] = document.createElement('button');\n", - " button.classList = 'btn btn-default';\n", - " button.href = '#';\n", - " button.title = name;\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message pull-right';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = document.createElement('div');\n", - " buttongrp.classList = 'btn-group inline pull-right';\n", - " button = document.createElement('button');\n", - " button.classList = 'btn btn-mini btn-primary';\n", - " button.href = '#';\n", - " button.title = 'Stop Interaction';\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', function (_evt) {\n", - " fig.handle_close(fig, {});\n", - " });\n", - " button.addEventListener(\n", - " 'mouseover',\n", - " on_mouseover_closure('Stop Interaction')\n", - " );\n", - " buttongrp.appendChild(button);\n", - " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", - " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", - "};\n", - "\n", - "mpl.figure.prototype._remove_fig_handler = function (event) {\n", - " var fig = event.data.fig;\n", - " if (event.target !== this) {\n", - " // Ignore bubbled events from children.\n", - " return;\n", - " }\n", - " fig.close_ws(fig, {});\n", - "};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (el) {\n", - " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (el) {\n", - " // this is important to make the div 'focusable\n", - " el.setAttribute('tabindex', 0);\n", - " // reach out to IPython and tell the keyboard manager to turn it's self\n", - " // off when our div gets focus\n", - "\n", - " // location in version 3\n", - " if (IPython.notebook.keyboard_manager) {\n", - " IPython.notebook.keyboard_manager.register_events(el);\n", - " } else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", - " // Check for shift+enter\n", - " if (event.shiftKey && event.which === 13) {\n", - " this.canvas_div.blur();\n", - " // select the cell after this one\n", - " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", - " IPython.notebook.select(index + 1);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " fig.ondownload(fig, null);\n", - "};\n", - "\n", - "mpl.find_output_cell = function (html_output) {\n", - " // Return the cell and output element which can be found *uniquely* in the notebook.\n", - " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", - " // IPython event is triggered only after the cells have been serialised, which for\n", - " // our purposes (turning an active figure into a static one), is too late.\n", - " var cells = IPython.notebook.get_cells();\n", - " var ncells = cells.length;\n", - " for (var i = 0; i < ncells; i++) {\n", - " var cell = cells[i];\n", - " if (cell.cell_type === 'code') {\n", - " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", - " var data = cell.output_area.outputs[j];\n", - " if (data.data) {\n", - " // IPython >= 3 moved mimebundle to data attribute of output\n", - " data = data.data;\n", - " }\n", - " if (data['text/html'] === html_output) {\n", - " return [cell, data, j];\n", - " }\n", - " }\n", - " }\n", - " }\n", - "};\n", - "\n", - "// Register the function which deals with the matplotlib target/channel.\n", - "// The kernel may be null if the page has been refreshed.\n", - "if (IPython.notebook.kernel !== null) {\n", - " IPython.notebook.kernel.comm_manager.register_target(\n", - " 'matplotlib',\n", - " mpl.mpl_figure_comm\n", - " );\n", - "}\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from utils import plot_wavefields\n", - "\n", - "plot_wavefields([wavefield_1-wavefield_0, wavefield_0],\n", - " [dict(vmin=-1e3, vmax=1e3, cmap='PuOr_r'),\n", - " dict(vmin=-200e3, vmax=200e3, cmap='seismic', alpha=0.1)])" - ] - }, - { - "cell_type": "markdown", - "id": "a0e1f345", - "metadata": {}, - "source": [ - "## Multiple bubbles\n", - "\n", - "So far, we have been looking at single bubbles. Let's add ten bubbles to our simulation to see what would be the effect.\n", - "\n", - "We can do this by defining the initial radius and the location of our bubbles using the parameter `num=10`." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "4f181b51", - "metadata": {}, - "outputs": [], - "source": [ - "r_0 = SparseField(name='r_0', num=10, grid=problem.grid)\n", - "r_0.data[:] = 2.2000e-06\n", - "\n", - "x_0 = ParticleField(name='x_0', num=10, grid=problem.grid)\n", - "\n", - "np.random.seed(2021)\n", - "for index in range(x_0.num):\n", - " x_0.data[index, :] = np.array(space.size) / 2\n", - " x_0.data[index, :] += (np.random.rand(3)*2 - 1)*1e-3" - ] - }, - { - "cell_type": "markdown", - "id": "4a079cea", - "metadata": {}, - "source": [ - "We can then run our PDE as before, passing in the new `r_0` and `x_0`." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "4b6d6e93", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(ShotID 0) Preparing to run state for shot\n", - "(ShotID 0) Estimated bandwidth for the propagated wavelet 1.600-2.400 MHz\n", - "(ShotID 0) Spatial grid spacing (0.050 mm | 12.833 PPW) is below dispersion limit (0.128 mm | 5.000 PPW)\n", - "(ShotID 0) Time grid spacing (0.005 μs | 15%) is below OT2 limit (0.012 μs)\n", - "(ShotID 0) Selected undersampling level 20\n", - "(ShotID 0) Selected time stepping scheme OT2\n", - "Ensure that the provided interpolation coefficient and grid point values are computed on the final grid that will be used for other computations.\n", - "Ensure that the provided interpolation coefficient and grid point values are computed on the final grid that will be used for other computations.\n", - "Ensure that the provided interpolation coefficient and grid point values are computed on the final grid that will be used for other computations.\n", - "Ensure that the provided interpolation coefficient and grid point values are computed on the final grid that will be used for other computations.\n", - "Operator `acoustic_iso_state` instance configuration:\n", - "\t * subs={h_x: 5e-05, h_y: 5e-05, h_z: 5e-05}\n", - "\t * opt=advanced\n", - "\t * platform=None\n", - "Operator `acoustic_iso_state` generated in 22.03 s\n", - " * lowering.Clusters: 14.29 s (64.9 %)\n", - " * specializing.Clusters: 8.68 s (39.5 %)\n", - " * fuse: 5.32 s (24.2 %)\n", - " * lowering.Expressions: 4.73 s (21.5 %)\n", - "Flops reduction after symbolic optimization: [6318 --> 1738]\n", - "Operator `acoustic_iso_state` fetched `/tmp/devito-jitcache-uid1000/80b6432b7ba3e43442da5ca9c007b17f53a87a36.c` in 0.65 s from jit-cache\n", - "(ShotID 0) Using inhomogeneous density\n", - "(ShotID 0) Running state equation for shot\n", - "AutoTuner: cannot perform autotuning unless there is one time loop; skipping\n", - "Operator `acoustic_iso_state` ran in 94.18 s\n", - "Global performance: [OI=0.01, 17.45 GFlops/s, 0.01 GPts/s]\n", - "Local performance:\n", - " * section0<<10,7,7,7>,<10,7,7,7>> ran in 0.01 s [OI=0.10, 1.62 GFlops/s]\n", - " * section1<160> ran in 0.01 s [OI=0.13, 0.32 GFlops/s]\n", - " * section2<160> ran in 0.01 s [OI=0.13, 0.22 GFlops/s]\n", - " * section3<160> ran in 0.01 s [OI=0.13, 0.32 GFlops/s]\n", - " * section4<10> ran in 0.01 s [OI=0.15, 0.06 GFlops/s]\n", - " * section5<<1499,20,160,160>,<1499,20,160,160>,<1499,20,160,160>,<1499,20,160,160>,<1499,20,160,160>,<1499,20,160,160>,<1499,160,20,160>,<1499,160,20,160>,<1499,160,20,160>,<1499,160,20,160>,<1499,160,20,160>,<1499,160,20,160>,<1499,160,160,20>,<1499,160,160,20>,<1499,160,160,20>,<1499,160,160,20>,<1499,160,160,20>,<1499,160,160,20>,<1499,15,15,17,17,129>,<1499,15,15,8,8,120>,<1499,29,169,129>,<1499,20,160,120>,<1499,29,169,129>,<1499,20,160,120>,<1499,169,29,129>,<1499,160,20,120>,<1499,169,29,129>,<1499,160,20,120>,<1499,169,169,29>,<1499,160,160,20>,<1499,169,169,29>,<1499,160,160,20>> ran in 93.48 s [OI=0.01, 17.57 GFlops/s, 0.12 GPts/s]\n", - " * section6<1499,10,7,7,7> ran in 0.02 s [OI=0.10, 1.48 GFlops/s]\n", - " * section7<1499,100,10> ran in 0.35 s [OI=1.69, 1.75 GFlops/s, 0.01 GPts/s]\n", - " * section8<<1499,10>,<1499,10,7,7,7>> ran in 0.06 s [OI=0.13, 0.71 GFlops/s, 0.11 GPts/s]\n", - " * section9<<1499,1>,<1499,1>,<1499,1>,<1499,1>,<1499,1>,<1499,1>,<1499,1>,<1499,1>,<1499,1>> ran in 0.01 s [OI=34.60, 0.46 GFlops/s, 0.01 GPts/s]\n", - " * section10<<1499,120>,<1499,120>,<1499,120>,<1499,120>,<1499,120>,<1499,120>,<1499,120>,<1499,120>,<1499,120>,<1499,120>> ran in 0.02 s [OI=45.00, 17.79 GFlops/s]\n", - "Performance[mode=advanced] arguments: {'nthreads': 6, 'nthreads_nonaffine': 6, 'i2x0_blk0_size': 8, 'i2y0_blk0_size': 8, 'x0_blk0_size': 8, 'y0_blk0_size': 8}\n", - "(ShotID 0) Completed state equation run for shot\n" - ] - } - ], - "source": [ - "traces_2 = await pde(shot_wavelets, vp, rho=rho,\n", - " r_0=r_0, x_0=x_0,\n", - " sigma=sigma, mu=mu,\n", - " p_0=p_0, kappa=kappa, kappa_s=kappa_s,\n", - " chi=chi, r_buckle=r_buckle, r_break=r_break,\n", - " problem=sub_problem, diff_source=True,\n", - " save_wavefield=True, save_undersampling=20,\n", - " boundary_type='complex_frequency_shift_PML_2',\n", - " num_inner=100)\n", - "\n", - "wavefield_2 = pde.wavefield.data[:, :, pde.wavefield.shape[-1]//2].copy()" - ] - }, - { - "cell_type": "markdown", - "id": "75f7e786", - "metadata": {}, - "source": [ - "Subtracting the baseline simulation, we will now be able to see the signal coming from alll bubbles." - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "7b48122d", - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";/* global mpl */\n", - "\n", - "var comm_websocket_adapter = function (comm) {\n", - " // Create a \"websocket\"-like object which calls the given IPython comm\n", - " // object with the appropriate methods. Currently this is a non binary\n", - " // socket, so there is still some room for performance tuning.\n", - " var ws = {};\n", - "\n", - " ws.binaryType = comm.kernel.ws.binaryType;\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " function updateReadyState(_event) {\n", - " if (comm.kernel.ws) {\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " } else {\n", - " ws.readyState = 3; // Closed state.\n", - " }\n", - " }\n", - " comm.kernel.ws.addEventListener('open', updateReadyState);\n", - " comm.kernel.ws.addEventListener('close', updateReadyState);\n", - " comm.kernel.ws.addEventListener('error', updateReadyState);\n", - "\n", - " ws.close = function () {\n", - " comm.close();\n", - " };\n", - " ws.send = function (m) {\n", - " //console.log('sending', m);\n", - " comm.send(m);\n", - " };\n", - " // Register the callback with on_msg.\n", - " comm.on_msg(function (msg) {\n", - " //console.log('receiving', msg['content']['data'], msg);\n", - " var data = msg['content']['data'];\n", - " if (data['blob'] !== undefined) {\n", - " data = {\n", - " data: new Blob(msg['buffers'], { type: data['blob'] }),\n", - " };\n", - " }\n", - " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", - " ws.onmessage(data);\n", - " });\n", - " return ws;\n", - "};\n", - "\n", - "mpl.mpl_figure_comm = function (comm, msg) {\n", - " // This is the function which gets called when the mpl process\n", - " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", - "\n", - " var id = msg.content.data.id;\n", - " // Get hold of the div created by the display call when the Comm\n", - " // socket was opened in Python.\n", - " var element = document.getElementById(id);\n", - " var ws_proxy = comm_websocket_adapter(comm);\n", - "\n", - " function ondownload(figure, _format) {\n", - " window.open(figure.canvas.toDataURL());\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", - "\n", - " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", - " // web socket which is closed, not our websocket->open comm proxy.\n", - " ws_proxy.onopen();\n", - "\n", - " fig.parent_element = element;\n", - " fig.cell_info = mpl.find_output_cell(\"
\");\n", - " if (!fig.cell_info) {\n", - " console.error('Failed to find cell for figure', id, fig);\n", - " return;\n", - " }\n", - " fig.cell_info[0].output_area.element.on(\n", - " 'cleared',\n", - " { fig: fig },\n", - " fig._remove_fig_handler\n", - " );\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function (fig, msg) {\n", - " var width = fig.canvas.width / fig.ratio;\n", - " fig.cell_info[0].output_area.element.off(\n", - " 'cleared',\n", - " fig._remove_fig_handler\n", - " );\n", - " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", - "\n", - " // Update the output cell to use the data from the current canvas.\n", - " fig.push_to_output();\n", - " var dataURL = fig.canvas.toDataURL();\n", - " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", - " // the notebook keyboard shortcuts fail.\n", - " IPython.keyboard_manager.enable();\n", - " fig.parent_element.innerHTML =\n", - " '';\n", - " fig.close_ws(fig, msg);\n", - "};\n", - "\n", - "mpl.figure.prototype.close_ws = function (fig, msg) {\n", - " fig.send_message('closing', msg);\n", - " // fig.ws.close()\n", - "};\n", - "\n", - "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", - " // Turn the data on the canvas into data in the output cell.\n", - " var width = this.canvas.width / this.ratio;\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] =\n", - " '';\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Tell IPython that the notebook contents must change.\n", - " IPython.notebook.set_dirty(true);\n", - " this.send_message('ack', {});\n", - " var fig = this;\n", - " // Wait a second, then push the new image to the DOM so\n", - " // that it is saved nicely (might be nice to debounce this).\n", - " setTimeout(function () {\n", - " fig.push_to_output();\n", - " }, 1000);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'btn-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " var button;\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " continue;\n", - " }\n", - "\n", - " button = fig.buttons[name] = document.createElement('button');\n", - " button.classList = 'btn btn-default';\n", - " button.href = '#';\n", - " button.title = name;\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message pull-right';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = document.createElement('div');\n", - " buttongrp.classList = 'btn-group inline pull-right';\n", - " button = document.createElement('button');\n", - " button.classList = 'btn btn-mini btn-primary';\n", - " button.href = '#';\n", - " button.title = 'Stop Interaction';\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', function (_evt) {\n", - " fig.handle_close(fig, {});\n", - " });\n", - " button.addEventListener(\n", - " 'mouseover',\n", - " on_mouseover_closure('Stop Interaction')\n", - " );\n", - " buttongrp.appendChild(button);\n", - " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", - " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", - "};\n", - "\n", - "mpl.figure.prototype._remove_fig_handler = function (event) {\n", - " var fig = event.data.fig;\n", - " if (event.target !== this) {\n", - " // Ignore bubbled events from children.\n", - " return;\n", - " }\n", - " fig.close_ws(fig, {});\n", - "};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (el) {\n", - " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (el) {\n", - " // this is important to make the div 'focusable\n", - " el.setAttribute('tabindex', 0);\n", - " // reach out to IPython and tell the keyboard manager to turn it's self\n", - " // off when our div gets focus\n", - "\n", - " // location in version 3\n", - " if (IPython.notebook.keyboard_manager) {\n", - " IPython.notebook.keyboard_manager.register_events(el);\n", - " } else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", - " // Check for shift+enter\n", - " if (event.shiftKey && event.which === 13) {\n", - " this.canvas_div.blur();\n", - " // select the cell after this one\n", - " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", - " IPython.notebook.select(index + 1);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " fig.ondownload(fig, null);\n", - "};\n", - "\n", - "mpl.find_output_cell = function (html_output) {\n", - " // Return the cell and output element which can be found *uniquely* in the notebook.\n", - " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", - " // IPython event is triggered only after the cells have been serialised, which for\n", - " // our purposes (turning an active figure into a static one), is too late.\n", - " var cells = IPython.notebook.get_cells();\n", - " var ncells = cells.length;\n", - " for (var i = 0; i < ncells; i++) {\n", - " var cell = cells[i];\n", - " if (cell.cell_type === 'code') {\n", - " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", - " var data = cell.output_area.outputs[j];\n", - " if (data.data) {\n", - " // IPython >= 3 moved mimebundle to data attribute of output\n", - " data = data.data;\n", - " }\n", - " if (data['text/html'] === html_output) {\n", - " return [cell, data, j];\n", - " }\n", - " }\n", - " }\n", - " }\n", - "};\n", - "\n", - "// Register the function which deals with the matplotlib target/channel.\n", - "// The kernel may be null if the page has been refreshed.\n", - "if (IPython.notebook.kernel !== null) {\n", - " IPython.notebook.kernel.comm_manager.register_target(\n", - " 'matplotlib',\n", - " mpl.mpl_figure_comm\n", - " );\n", - "}\n" + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " ], "text/plain": [ - "" + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" - }, + } + ], + "source": [ + "from utils import plot_wavefields\n", + "\n", + "plot_wavefields([wavefield_1-wavefield_0, wavefield_0],\n", + " [dict(vmin=-1e3, vmax=1e3, cmap='PuOr_r'),\n", + " dict(vmin=-200e3, vmax=200e3, cmap='seismic', alpha=0.1)])" + ] + }, + { + "cell_type": "markdown", + "id": "a0e1f345", + "metadata": {}, + "source": [ + "## Multiple bubbles\n", + "\n", + "So far, we have been looking at single bubbles. Let's add ten bubbles to our simulation to see what would be the effect.\n", + "\n", + "We can do this by defining the initial radius and the location of our bubbles using the parameter `num=10`." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "4f181b51", + "metadata": {}, + "outputs": [], + "source": [ + "r_0 = SparseField(name='r_0', num=10, grid=problem.grid)\n", + "r_0.data[:] = 2.2000e-06\n", + "\n", + "x_0 = ParticleField(name='x_0', num=10, grid=problem.grid)\n", + "\n", + "np.random.seed(2021)\n", + "for index in range(x_0.num):\n", + " x_0.data[index, :] = np.array(space.size) / 2\n", + " x_0.data[index, :] += (np.random.rand(3)*2 - 1)*1e-3" + ] + }, + { + "cell_type": "markdown", + "id": "4a079cea", + "metadata": {}, + "source": [ + "We can then run our PDE as before, passing in the new `r_0` and `x_0`." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "4b6d6e93", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(ShotID 0) Preparing to run state for shot\n", + "(ShotID 0) Estimated bandwidth for the propagated wavelet 1.600-2.400 MHz\n", + "(ShotID 0) Using DRP scheme\n", + "(ShotID 0) Spatial grid spacing (0.050 mm | 12.833 PPW) is below dispersion limit (0.214 mm | 3.000 PPW)\n", + "(ShotID 0) Time grid spacing (0.005 μs | 15%) is below OT2 limit (0.012 μs)\n", + "(ShotID 0) Selected undersampling level 20\n", + "(ShotID 0) Selected time stepping scheme OT2\n", + "(ShotID 0) Expected wavefield size 2.3193 GB\n", + "Operator `acoustic_iso_state` instance configuration:\n", + "\t * name=acoustic_iso_state\n", + "\t * subs={h_x: 5e-05, h_y: 5e-05, h_z: 5e-05, dt: 5e-09}\n", + "\t * opt=advanced\n", + "\t * devicecreate=(p(t, x, y, z), p_saved(time_under0, x, y, z))\n", + "Operator `acoustic_iso_state` generated in 54.81 s\n", + " * lowering.Clusters: 42.35 s (77.3 %)\n", + " * specializing.Clusters: 27.17 s (49.6 %)\n", + " * fuse: 20.48 s (37.4 %)\n", + "Flops reduction after symbolic optimization: [1883 --> 1249]\n", + "Operator `acoustic_iso_state` fetched `/tmp/devito-jitcache-uid1000/af348409237fad0eb9c1d6b6c12ff7feeac0a66e.c` in 1.21 s from jit-cache\n", + "Operator `acoustic_iso_state_save` instance configuration:\n", + "\t * name=acoustic_iso_state_save\n", + "\t * subs={h_x: 5e-05, h_y: 5e-05, h_z: 5e-05, dt: 5e-09}\n", + "\t * opt=advanced\n", + "\t * devicecreate=(p(t, x, y, z), p_saved(time_under0, x, y, z))\n", + "Operator `acoustic_iso_state_save` generated in 44.04 s\n", + " * lowering.Clusters: 33.45 s (76.0 %)\n", + " * specializing.Clusters: 18.23 s (41.5 %)\n", + " * fuse: 14.00 s (31.8 %)\n", + " * schedule: 11.10 s (25.3 %)\n", + "Flops reduction after symbolic optimization: [1883 --> 1249]\n", + "Operator `acoustic_iso_state_save` fetched `/tmp/devito-jitcache-uid1000/4194f14e4dc8631801b87cd22b43c5c9dde3a90d.c` in 0.86 s from jit-cache\n", + "(ShotID 0) Using inhomogeneous density\n", + "(ShotID 0) Running state equation for shot\n", + "AutoTuner: cannot perform autotuning with 2 time loops; skipping\n", + "Operator `acoustic_iso_state_save` ran in 69.15 s\n", + "Global performance: [OI=0.01, 14.67 GFlops/s, 0.09 GPts/s]\n", + "Global performance : [69.15 s, 0.09 GPts/s]\n", + "Local performance:\n", + " * section0 ran in 0.01 s\n", + " * section1 ran in 0.01 s\n", + " * section2 ran in 0.01 s\n", + " * section3 ran in 0.01 s\n", + " * section4 ran in 29.87 s [OI=0.01, 17.58 GFlops/s, 0.16 GPts/s]\n", + " * section5 ran in 9.79 s [OI=3.04, 19.33 GFlops/s, 0.27 GPts/s]\n", + " * section6 ran in 28.27 s [OI=0.01, 10.60 GFlops/s, 0.14 GPts/s]\n", + " * section7 ran in 0.20 s [OI=0.50, 0.16 GFlops/s]\n", + " * section8 ran in 0.66 s [OI=1.19, 0.59 GFlops/s, 0.01 GPts/s]\n", + " * section9 ran in 0.05 s [OI=0.67, 2.83 GFlops/s, 0.18 GPts/s]\n", + " * section10 ran in 0.01 s\n", + " * section11 ran in 0.02 s [OI=1.45, 1.26 GFlops/s]\n", + " * section12 ran in 0.31 s \n", + "Performance[mode=advanced] arguments: {'i2x0_blk0_size': 16, 'i2y0_blk0_size': 16, 'nthreads': 6, 'nthreads_nonaffine': 6, 'pthreads': 0}\n", + "(ShotID 0) Completing state equation run for shot\n", + "(ShotID 0) Completed state equation run for shot\n" + ] + } + ], + "source": [ + "traces_2 = await pde(shot_wavelets, vp, rho=rho,\n", + " r_0=r_0, x_0=x_0,\n", + " sigma=sigma, mu=mu,\n", + " p_0=p_0, kappa=kappa, kappa_s=kappa_s,\n", + " chi=chi, r_buckle=r_buckle, r_break=r_break,\n", + " problem=sub_problem, diff_source=True,\n", + " save_wavefield=True, save_undersampling=20, force_raw_wavefield=True,\n", + " boundary_type='complex_frequency_shift_PML_2',\n", + " num_inner=100)\n", + "\n", + "wavefield_2 = pde.wavefield.data[:, :, pde.wavefield.shape[-1]//2].copy()" + ] + }, + { + "cell_type": "markdown", + "id": "75f7e786", + "metadata": {}, + "source": [ + "Subtracting the baseline simulation, we will now be able to see the signal coming from alll bubbles." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "7b48122d", + "metadata": {}, + "outputs": [ { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e0fbde59d0cc4f87b3cfd7f2ff28805a", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACiKElEQVR4nOzdd3iUVfrG8e+kF0jovYbeBIKAAooCVlgQsaKggqvoKq6IuCKr7oqyisJiR0TUBURFXEEUC2VFmkAERUOX0CGUNEjP/P7I732ZSZ0kM+9MJvfnunItecvMGRaTued5zjk2u91uR0RERERExAIB3h6AiIiIiIhUHQogIiIiIiJiGQUQERERERGxjAKIiIiIiIhYRgFEREREREQsowAiIiIiIiKWUQARERERERHLKICIiIiIiIhlFEBERERERMQyCiAiIiIiImIZBRAREREREbGMAoiIiIiIiFhGAURERERERCyjACIiIiIiIpZRABEREREREcsogIiIiIiIiGUUQERERERExDIKICIiIiIiYhkFEBERERERsYwCiIiIiIiIWEYBRERERERELKMAIiIiIiIillEAERERERERyyiAiIiIiIiIZRRARERERETEMgogIiIiIiJiGQUQERERERGxjAKIiIiIiIhYRgFEREREREQsowAiIiIiIiKWUQARERERERHLKICIiIiIiIhlFEBERERERMQyCiAiIiIiImIZBRAREREREbGMAoiIiIiIiFhGAURERERERCyjACIiIiIiIpZRABEREREREcsogIiIiIiIiGUUQERERERExDIKICIiIiIiYhkFEBERERERsYwCiIiIVErPPvssNpuNFi1aeOTxW7Rogc1m49lnn7X8uV1x4MABbDYbNpuNNWvWeG0cIiJlpQAiIiIiIiKWUQARERERERHLKICIiIiIiIhlFEBERERERMQyCiAiIlXI3Xffjc1m44orrgBg69at3H777TRu3Jjw8HDatGnD5MmTSU5ONu/JyMhg5syZ9OjRg+joaKpXr07//v35+uuvS3yu06dP8/e//53Y2Fhq1KhBWFgYLVq0YPTo0fz000+ljjUjI4MXXniBLl26EBERQe3atenfvz/z588v02tes2YNo0aNomXLloSHhxMVFUW3bt34+9//zpkzZ8r0WGW1bds27rvvPtq2bUu1atWIjIykY8eOPProoxw6dKjU+1esWMF1111H7dq1iYiIoF27dvztb3/z+LhFRDzKLiIiVcZdd91lB+z9+/e3f/jhh/bg4GA7UOgrNjbWnpycbD916pT9kksuKfIam81m/+CDD4p8nv/973/2mjVrFnmf8fW3v/2t2HGePHnS3qVLl2Lvveuuu+zPPPOMHbA3b968yMfIyMiwjxo1qsQx1KtXz75p06Yi72/evLkdsD/zzDOFzpX23Hl5efZJkybZbTZbsc8dGRlpX7ZsWbF/B0888USx9zZv3ty+Zs0a8/vVq1cX+zgiIr5GFRARkSpoz549/PnPf+byyy9n9erVJCYmsm/fPp588kkA4uLimD59OmPGjGHHjh1Mnz6dvXv3cvr0ab7//nvat2+P3W7n4YcfLvRp/L59+xg8eDBnz54lKiqKmTNnsn//fk6ePMk333xDz549AfjXv/7FjBkzCo3Nbrdzyy238OuvvwIwbtw4tm/fzqlTp9i0aRM333wzH3zwAR9++GGJr/Guu+7iP//5DwEBAdx///2sX7+exMREjh07xuLFi+nYsSMnT55kyJAhHDt2zB1/raYnn3ySl156yXwtK1eu5MSJE5w8eZKvv/6aSy+9lHPnznHLLbewY8eOQvfPmzePF198EYCLLrqI5cuXc/LkSfbv38/LL7/MqVOnuOeee9w6ZhERy3g5AImIiIWMCghgHzx4sD0nJ6fQNXfccYcdsAcGBtqDgoLsP/74Y6Frdu3aZX66P3v2bKdzN9xwgx2wBwcH2zdu3Fjo3vPnz9t79eplB+xhYWH2xMREp/OfffaZOcYnn3yyyNfhWNkoqgrx+eefm+c//vjjIh8jOTnZ3rZtWztg/8tf/lLofHkrIHFxcebfzYsvvljkc2dlZdkvu+wy8/8HRxkZGfY6derYAXu7du3sycnJhe7/7rvvnKorqoCISGWiCoiISBU1c+ZMAgMDCx2/7bbbAMjNzeXWW2+lb9++ha5p27YtsbGxAGzatMk8fvLkSZYuXQrA2LFj6d27d6F7w8PDefXVV4H8eR7/+c9/nM6/9957ANStW5dnnnmmyLHPmDGDkJCQYl/bv//9bwCuv/56brnlliKviYqKYvLkyQB89NFH2O32Yh+vLGbNmoXdbqdTp048/vjjRV4THBzMc889B8BXX33F2bNnzXPLli3j1KlTALzwwgtERUUVun/QoEEMHz7cLeMVEbGaAoiISBUUExNDmzZtijzXqlUr88/XXHNNsY9hXOfYvrR+/Xry8vIAuPnmm4u9t3fv3jRv3hyAtWvXmsftdjvr1q0D8sNDaGhokffXqVOH/v37F3nu/PnzrF+/HoCrrrqKtLS0Yr86deoEwJkzZ9i/f3+x4y2L7777znzuc+fOFfvcHTp0MF9zXFycef+PP/4IQEhICEOGDCn2eUaMGOGW8YqIWE0BRESkCmrUqFGx58LDw8t0XXp6unksISHB/LPx5r44xvkDBw6Yx5KTk0lKSgIw36AXp2PHjkUe379/P9nZ2QA8+uijVK9evdgvYz4KQGJiYonP54q0tDSOHj0K5FdhSnru+vXrF/ncxt9HTExMiVWe4l6/iIivUwAREamCimq9Ku91jq1Lqamp5p+rVatW4n3Vq1cvdE9aWprL9xd33nEJ4bLIyMgo133ufm7j76C8r19ExNcpgIiIiNsYoQKcw0RRjPOO9zi+qT537pxL9xfk+Biff/45drvdpS9jb5SKcHzumTNnuvzcd999d6HHKO/rFxHxdQogIiLiNi1atDD//Ntvv5V4rbH8rOM90dHR1KhRA4D4+PgS7y/ufIsWLQgIyP/15ji3wgrR0dHUrl27Qs9t/H3s27ePrKysYq8r7e9HRMRXKYCIiIjb9OnTx2zbWrx4cbHXbdq0yZwvctlll5nHbTabuerWV199Vewb8NOnT/O///2vyHPR0dHm6lvz588354NY5eqrrwbgiy++KNeO5f369QMgKyuLr776qtjrlixZUr4Bioh4mQKIiIi4Td26dRk6dCgA7777Llu2bCl0TUZGBuPHjwcgLCyMUaNGOZ0fM2YMkL+kr7FUbUETJ04kMzOz2HE89thjAPzxxx+MHz/eXJmrOLt27SrxfFlMmDABgJSUFO6+++4Sx1nUc//pT3+iTp06AEyePNlpjoxh9erVfPbZZ24asYiItRRARETEraZPn061atXIzs7mqquu4rXXXiMhIYFTp07x7bff0r9/f3766ScAnn/+efPNtmH48OHmfIypU6fy4IMP8uuvv3LmzBm2bNnCbbfdxvvvv0/Lli2LHcOIESO44447AHj77be5/PLL+fTTT0lISCApKYnDhw+zevVq/vGPf9ChQwczsLjDxRdfbO4vsmzZMi6++GLef/999u3bR1JSEseOHWPdunVMnz6dnj17FlpONzQ0lJdeegnIb7O6/PLLWbFiBadOnSIhIYGZM2cydOhQp9Y1EZHKJMjbAxAREf/SqlUrli9fzg033MDZs2cZP368WfFw9Le//c2sFjiy2Wx88sknDBgwgB07dvDWW2/x1ltvOV1z55130qpVK/7xj38UO4558+ZRs2ZN3njjDdatW2fuL1IUdy9pO3XqVCIiInjmmWfYsWMH99xzT7HXGhs6OrrnnnvYtWsXL774Itu2beO6665zOt+0aVPmzp3LgAED3DpuERErqAIiIiJud/nll7N7926mTJlCt27diIqKIjQ0lObNm3PnnXeyceNGpk2bVuz9devWZfPmzTz//PN07tyZ8PBwatasSd++fZk3b16h3dOLEhwczGuvvca2bdv4y1/+QufOnYmKiiIwMJAaNWrQvXt3HnroIVauXMnHH3/szpePzWbjqaeeYs+ePTz++OPExsZSo0YNAgMDiYqKonPnzowdO5Zly5aZmyYW9K9//Yuvv/6aa665hpo1axIWFkabNm147LHHiIuLK7ECJCLiy2x2xwXcRUREREREPEgVEBERERERsYwCiIiIiIiIWEYBRERERERELKMAIiIiIiIillEAERERERERyyiAiIiIiIiIZbQRoXhNXl4eR48epXr16thsNm8PR0RERKRUdrud1NRUGjVqRECAPssvDwUQ8ZqjR4/StGlTbw9DREREpMwOHTpEkyZNvD2MSkkBRLymevXqQP5/wFFRUV4ejYiIiEjpUlJSaNq0qfk+RspOAUS8xmi7ioqKUgARERGRSkXt4+WnxjUREREREbGMAoiIiIiIiFhGAURERERERCyjACIiIiIiIpZRABEREREREcsogIiIiIiIiGUUQERERERExDIKICIiIiIiYhkFEBERERERsYwCiIiIiIiIWEYBRERERERELKMAUon997//5f7776dHjx40bNiQkJAQatSoQZ8+fZg1axZZWVnF3rthwwaGDRtG3bp1CQ8Pp2PHjjz33HNkZGSU+Jzx8fHccccdNGzYkLCwMFq1asXEiRNJSkpy86sTEREREX9ks9vtdm8PQsqnX79+rFu3jtDQUBo1akTt2rU5duwYR44cAaBHjx58//331KhRw+m+BQsWcNddd5Gbm0vjxo2pV68eO3bsIDs7m549e7JmzRoiIiIKPd/q1asZPHgw6enp1K1bl6ZNm7Jz507Onz9PTEwM69evp379+i6PPyUlhejoaJKTk4mKiqrQ34WIiIiIFfT+peJUAanE7r33XlavXk1qair79+9n8+bNHD58mA0bNtCkSRO2bt3KU0895XTPgQMHGDt2LLm5ubz00kscOnSIuLg49uzZQ7t27di8eTOTJk0q9FypqanceuutpKenM378eI4cOcLWrVs5ePAgffv2Zf/+/YwdO9aqly4iIiIilZQqIH7q008/5ZZbbqFRo0ZmRQTgL3/5C2+++SZXX30133zzjdM969evp2/fvgQHB3Po0CGnasb06dOZNGkSHTp04NdffyUwMNA8d/DgQVq1akVOTg5bt24lNjbWpTHqEwQRERGpbPT+peJUAfFT7du3B+D8+fPmMbvdzueffw5QZLWiT58+tG/fnuzsbL744gunc0uWLAHg7rvvdgofAM2aNWPQoEEALF682H0vQkRERET8jgKIn9qwYQOAUzXi4MGDHDt2DIC+ffsWeZ9xfNOmTeYxo7JR1vtERERERApSAPEjubm5HD58mDfffJOJEycSGRnJtGnTzPN79uwBMCetFyUmJsbpWsifN5Kdne103pX7RETEfy1ZsoTq1auzbNkybw9FRCoZBRA/8O9//xubzUZQUBBNmzblL3/5CwMHDmTjxo306tXLvO7s2bMA1KhRA5vNVuRj1axZ0+nagn82zrtyX0GZmZmkpKQ4fYmISOU0YsQI0tLSuPnmm709FBGpZBRA/EDjxo3p27cvvXr1MieOr169mo8++ojc3FzzOmOPj5CQkGIfKzQ0FID09PRC95V0b1H3FTRt2jSio6PNr6ZNm5b20kRExAc5rl+TmZnpxZGISGWkAOIHbr75Zn788Uc2bdrE8ePH2bhxIy1atOCFF17goYceMq8LCwsDKHGDQuMXSXh4eKH7Srq3qPsKevLJJ0lOTja/Dh065MKrExERX1Nw81nHBU9EREqjAOKHevfuzVdffUVoaCjvvPMOCQkJwIU2qaSkJIpbfdlooXJstXL8c3EtVkXdV1BoaChRUVFOXyIiUvkcPny4xO9FREqiAOKnGjVqRLdu3cjLy2P79u0AtGnTBsivVhw9erTI+/bv3+90LUCLFi0IDg52Ou/KfSIi4p9Onjzp9P2JEye8NBIRqYwUQPxYTk6O0/82a9aMBg0aALBu3boi7zGO9+7d2zwWFBRkLudblvtERMQ/nTlzxun7khYgEREpSAHETx04cMCsfHTt2hUAm83G8OHDAZg7d26he9avX8/OnTsJDg5m6NChTuduvPFGAN5//32nie2Qv7/I999/D+SviiIiIv6tYOBQABGRslAAqaS2bt3KM888U2RL1IoVK7juuuvIycnh+uuvp1WrVua5xx9/nJCQEL799lumT59uzgVJSEhgzJgxANx7771mpcQwbtw46tSpQ3x8PBMmTDD3BTl9+jQjR44kJyeH6667jh49enjqJYuIiI9QABGRilAAqaRSU1P55z//SatWrWjYsCE9e/aka9eu1KxZk+uuu46dO3fSs2dPPvjgA6f7WrZsyZw5cwgICGDSpEk0bdqU2NhY2rRpw65du+jRowfTp08v9HxRUVEsWrSIsLAwXn31VRo3bszFF19Ms2bNWLduHS1atOC9996z6uWLiIgXKYCISEUogFRSXbt2ZdasWQwdOpTIyEh27tzJzp07CQ8P57rrrmPevHmsX7+eOnXqFLp39OjRrF27liFDhpCens7vv/9OTEwMzz77LD/++CORkZFFPufAgQPZsmULt912GzabjV9//ZX69eszYcIE4uLiClVNRETEPyUnJzt9X3BOiIhISWz24tZjFfGwlJQUoqOjSU5O1pK8IiKVyOjRo/nPf/5DvXr1OHnyJHfccQfz58/39rBELKH3LxWnCoiIiIiUibHxYJMmTQC1YIlI2SiAiIiISJmcO3cOgKZNmwIKICJSNgogIiIiUiZGAFEFRETKQwFEREREysQIII0bNwYgKSnJi6MRkcpGAURERETKxAggDRs2BPIn5YqIuEoBRERERMrEmIRuBJDz58+bG9SKiJRGAURERETKpGAFBPI3yBURcYUCiIiIiJSJEUCio6MJDw8HCm9OKCJSHAUQERERcVlubi6ZmZkAREZGEh0dDWgeiIi4TgFEREREXGZUPyA/gBg7QSuAiIirFEBERETEZcYEdJvNRlhYmFkBUQuWiLhKAURERERcZlRAIiIisNlsqoCISJkpgIiIiIjLjAASGRkJYAYQVUBExFUKICIiIuKyggFEk9BFpKwUQERERMRlxhwQVUBEpLwUQERERMRlqoCISEUpgIiIiIjLNAdERCpKAURERERc5rgKFqgCIiJlpwAiIiIi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GRns2LHD/H7jxo1eG4tR1ahTp06x13i7Bcux+gH5cyNFxPcogFRSubm53HbbbaxatYpWrVrx3XffUatWrVLve/zxxwkJCeHbb79l+vTp5lyQhIQExowZA8C9995rVkoM48aNo06dOsTHxzNhwgRzhZPTp08zcuRIcnJyuO666+jRo4ebX6mISNW1e/dup4nU27dv99pYDh48CFDiCoberoAUrBAdP37cK+MQkZJpH5BK6pNPPuG///0vkD/x7+abby7yuoYNG5qbEgK0bNmSOXPmcM899zBp0iRmzZpFvXr12LFjB9nZ2fTo0YPp06cXepyoqCgWLVrEkCFDePXVV/noo49o1qwZ8fHxnD9/nhYtWvDee+955LWKiFRVBecwJCQkeGkk+ZvSQv68wOIYFRBvzQExAki9evU4efKkNkUU8VEKIJWU44Z+e/bsKXYH8ubNmxc6Nnr0aFq3bs20adNYv349v//+OzExMdx+++088cQTTsvuOho4cCBbtmxh6tSprFq1il9//ZXGjRszfPhwpkyZUuIKWCIiUnbGKk7h4eGkp6ebVQgrHTlyhEmTJrFw4UIAp/2lCjIq8SVtSutJRgDp3r0733zzjSogIj5KAaSSuvvuu7n77rvLfX+fPn1YtmxZme/r1KkTH330UbmfV0REXGdMoh40aBDLli3zSgCZOHEiixYtMr+/9NJLi73W2wHEWOGxW7duZgCx2+3FTpoXEe/QHBAREREfdfjwYSD/QyOAQ4cOFbuPkyfk5eWxfPly8/sBAwaUONfPqISfOXPG42MrilEB6datG5C/F4i3wpCIFE8BRERExEcZqzr17t0bm81GZmamuRyuFQ4fPkxqairBwcGcOHGC7777joCA4t86GBUQbweQFi1amGFIbVgivkcBRERExAfZ7XYzgLRs2dJcYcqoiljBmF8YExNDvXr1SgwfcKECcvbsWUsrNZD/92WEjYYNG5qrOSqAiPgeBRAREREfdPr0aXPBkUaNGpkrTBk7klvB2NivdevWLl1vVECys7M5d+6cx8ZVlDNnzpCVlQVAgwYNzL8vKytGIuIaBRAREREfZFQ/6tatS0hIiLkBoJUBxKiAtGnTxqXrIyIiCAkJAaxvwzImoNeuXZvQ0FCvLwksIsVTABEREfFBRgBp0qQJgFcCyP79+4GSl951ZLPZnNqwrGTM/2jY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okULUlNTWbZsmdueryoFEHdVQNy5RLDj47mjAuJKAAkODubVV181v69Xrx733HNPoevcVdUqq9zcXPbu3Qs4B5Bu3boBF+ZleNru3bvJyckhKiqq0N42rVq1okmTJmRlZVkWiMT9FECAli1bMmfOHK655hrz2NVXX80ff/zBwoULeeGFF5g5cyZbtmzhk08+IShI+zeKiPibZ599FoC7777baTJxQEAAt99+OwCff/65257PXQHE2P3cWKa2vKpiAHFnBcTV9uxhw4bxySefMH78eNasWVPk///uCpVldeDAAbKysggLC6NZs2bmcWMehlUBxHH+R8GKl81mMyftr1mzxpLxiPtV+XfS27dvZ8+ePQC0bt3aTPmQ/wPA6DUUERH/tWnTJr799luCgoKYPHlyofPXXXcd06ZNY9WqVeTl5ZnVkYowVq2qaAAxVoXyxQDi7jkgnqyA2O32crV3HTlyBHA9gADcfPPN3HzzzcWeNyogFV3ZrKyM9qs2bdo4/Rs3AsjevXtJT0/3+K7oJS1rDPmrhs2fP18BpBKrshWQrVu30rlzZ2JjY7n11lu59dZb6dGjBx06dGDTpk3eHp6IiFho1qxZQP7O1TExMYXO9+7dm4iICBITE81PZyvKXRUQXw4g7poD4ukAApR713FjnoaxgqY7eKsCUtT8D4D69etTq1Yt7Ha7OTfDkwqugFWQsWrYpk2bNA+kkqqSAeTQoUMMGjSI33//HbvdTrVq1YiMjMRut7Nr1y6z/UpERPzf0aNH+fTTT4H8SehFCQkJoU+fPgBu+5DKCCAV3QfECCCpqakVehzjDXhFdmUvqLK0YEH527CM5ZmNiePu4GsBxGaz0aFDB6drPKm0CkjLli1p2rQp2dnZlq7MJe5TJQPI9OnTSU5Opnv37sTFxZGcnExKSgpbt26la9eupKWl8corr3h7mCIiYoHZs2eTk5ND37596d69e7HXXXzxxQBs2bLFLc9blSog7gog7m79CQ4ONtuuylulMRawqVWrltvG5e0WrIIBBKB9+/YAHq+ApKammh8CF1cB0TyQyq9KBpDvvvuOoKAgFi9e7DTno3v37ixevJiAgAC+++477w1QREQskZOTw+zZswHMXZaL07NnT8D3AkhVmITuuAyvO9lstgpPRDcqIO4MIL5WAXE85ukAYrRfNWrUqMSqktGG9e2333p0POIZVTKAHDp0iJiYGFq2bFnoXKtWrWjVqhWHDh3ywshERMRKP/zwAydOnKB27doMHz68xGtjY2OB/PYQY9fw8srLyzPfXPpzBcTXJ6E7PmZ5KiDZ2dlm65snWrCsrIAkJydz7NgxANq2bVvovFEB8XQL1s8//wxQYjUS8heGCA4OZvPmzfz0008eHZO4X5UMIOfPny9xsljdunUr/MNSRER83+LFiwEYPnx4qXMfmjVrRkREBNnZ2RWeJ5iSkoLdbgfcF0Cys7PLPZHauB+q1iR0x8csTwXEqGJBxefyODIeKzMz07L3I9u2bQPy/50X9VocA0heXp7Hx1FaAGnQoAEjR44ELiyhLZVHlQwgIiIiubm5LFmyBICbbrqp1OsDAgLc1oZivHENDw8336SXV2RkpPnnilRBfLkFy5MBxGjBKk9IMtqvatSoQWBgoNvGZLTVgXVtWHFxccCFSl9BLVu2JDg4mPT0dHPvE08wKiCOLfLFmTJlCkFBQXz99desWrXKY2MS96uy+4AkJyfzww8/FHsOYO3ateYnVAVdfvnlHhubiIh43vr16zlx4gQ1a9ZkwIABLt3ToUMHfv75Z+Lj4xk6dGi5n9td8z8gfyJ1aGgomZmZpKamlnsuQlUNIBVpwTImoLuz/QogMDCQqKgoUlJSSEpKcusSv8UpLYAEBQXRunVr4uPj2blzp9NGhe6SnZ1troBVWgUE8vdvu++++3jzzTd55513XP7vWLyvygaQHTt2mBOYimOssFCQzWYjJyfHA6MSERGrGO1XQ4cOdXnpWXetBOTOAAL5bViZmZk+VwFx9xwQT2yAV5FJ6J6YgG6Ijo4mJSWlzBWQjz/+mFmzZnHfffdx9913u3xfaQEE8ieiGwHk6quvLtO4XLFr1y4yMzOpXr06LVq0cOmeu+66izfffJPly5eTkZHhkZAq7ldlW7Dsdnu5vzzZ+ygiIp6Xl5fHZ599BrjWfmVwdwBx17wBd6yEpQpI2SsgxiRxd87/MJRnInpCQgJ33nknGzZsYMyYMezbt8+l+86dO2f+my4pgFx00UUA/PTTT+zevZtRo0axYMECl8dXmu3btwPQtWtXp53YS9KzZ08aNWpEWlqa9gSpRKpkAMnLy6vwl4iIVF6bNm3iyJEjVK9enauuusrl+4zN2OLj44tt0XWFJyog4LsBxJcnoVekApKSkgJAVFSUW8cEF0JNWSog//nPf8wODbvdzscff+zSfb/88gt5eXk0aNCAhg0bFntd//79Afjqq68YPnw48+fP58477yy2pb2sjABiBB1X2Gw2+vbtC8DmzZvdMg7xvCoZQEREpGpzbL8qyyTwmJgYIP9NYUWWSPVUAKnIbui+XAHx1D4gjo9ZnpBk/H17IoCUZy+Qzz//HLgwf2L16tUu3edK+xXApZdeSkhICGfPnuX33383j0+dOtXlMZbEsQJSFsYePQoglYcCiIiIVCl2u91svxoxYkSZ7o2IiDAnBCckJJR7DKdOnQKgTp065X6MguOC/GXmy8sIIK7Oh3GFv+8DYgQQx1Wr3KWsLVinT582g8Tzzz8PXHhDXxpXA0h4eDi33HILkF95mDNnjrl582+//ebSc5WkogHEXZuEiucpgEiZffXVVwwaNIhatWoRGRlJbGwsr732mlrTRKRS2Lp1KwkJCURGRnLttdeW+X5jcuyBAwfKPQYjgNStW7fcj+HICCDl3c0bfLsCohas0hmf/rdt25b+/ftjs9lITEzkxIkTpd7ragABmD17Ni+//DLfffcd9957LzfccAMA99xzD7feeit///vfy9WeePLkSU6cOIHNZqNz585lutcILAkJCeb/J+LbqlwA6dy5Mx9//HGFencBDh48yLhx43jxxRfdNLLK4V//+heDBw9m5cqV1KxZk9atW7N9+3bGjx/P8OHDFUJExOcZ7VeDBw8u16pK7gwgvlgBqWpzQHy1AmKEGlcDiLEbeO/evYmIiKBVq1YA5rK2xcnMzDSvcSWARERE8NhjjzFw4EAA/va3v2Gz2di8eTOffPIJU6dO5b///a9LY3Zk/PfUqFEjp71tXFGzZk1z7opja5j4rioXQFJTUxk5ciRt27blueeeY8+ePS7fm5WVxeeff85NN91EmzZtePfddy1Zm9tXbNiwgcmTJxMQEMDChQvZt28f27dvJy4ujvr167N06VJmzJjh7WGKiBTLbrebAaQsq185ckcASUxMBNwXQIwgVd4AkpeXZ05eVgXEdVa0YLn6if7WrVsBuPjiiwHMKkJpAWTXrl3k5OQQHR1drr09evbsyaeffsrQoUPN/3/mz59f5sc5cuQIAI0bNy7zvXDh9bqjFUw8r8rtA7J7925effVV/vWvf/HMM8/w7LPP0qpVK3r1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uSVe6+stWN6sgBRswVIAEXEfBRARERE/4thOVVq1wcoAUllasEqrgLRo0cKysYj4KwUQERERP+IYQEqbB2Kct2IOSGVpwTImmScmJprHMjIyOH78OKAKiIg7KICIiIj4kaCgIHN5+dICiCoghTVp0gSAY8eOmatw7d+/H4Bq1appFSwRN1AAERER8TOuroTljTkgvl4BadCgAcHBweTm5nLs2DEAfv75ZwAuuugi7YIu4gYKICIiIn7GlwOIqxUQu91uTqK3MoAEBASYVRBj6d1169YBcPHFF1s2DhF/pgAiIiLiZ1wNIFbOASlrC5ZR/QBrAwhA06ZNATh48CA5OTksXboUgIEDB1o6DhF/pQAiIiLiZ3y5AuJqC5Y3A0izZs2A/ACyfPlyjhw5Qp06dbjmmmssHYeIv1IAqYRSU1OZP38+d955J23btiU8PJyIiAg6derE448/bvasFicvL49XX32V7t27ExkZSa1atRg0aBBff/11qc89f/58+vTpQ3R0NFFRUfTp04cFCxa466WJiIgb+GIAqUwVkJiYGAB+/fVXnnrqKQDGjh1rvgYRqZggbw9Ayu7BBx9k/vz5AFSvXp327dtz7tw5du3axe+//868efP4+uuv6dmzZ6F7c3NzGTZsGMuXLycgIIDOnTuTmprKypUrWblyJdOnT2fixIlFPu+4ceOYPXs2AO3bt8dms7Fhwwbz6/XXX/fcixYREZeVtQVLFRBnvXr1AjB/19aqVYsnnnjC0jGI+DNVQCqpG264ge+//54zZ87w888/s3v3bnbt2kWvXr04ffo0I0aMMD/ZcjR9+nSWL19O/fr1iYuLY/v27ezfv58FCxYQEBDApEmT2Lx5c6H7Fi1axOzZs4mMjGTlypXEx8fz+++/8/333xMZGckbb7zB4sWLrXjpIiJSClcCSF5enhkGrNwHpKwVkMDAQMtXnrrsssuIjIw0v3/hhRfMDQpFpOIUQCqhWbNm8fnnnzNw4ECCgi4UsVq1asXixYsJCQnh0KFDrFixwum+rKwsXnrpJQBmzpxJ165dzXMjR45k7Nix2O12pk6dWug5jWNPPfUUAwYMMI8PHDiQyZMnA/Dcc8+570WKiEi5uRJAHM/5cguW1dUPgKioKP79739Tt25dHn30Ue677z7LxyDizxRAKqFatWoVe65p06a0b98egN27dzudW716NWfPniUqKoqbbrqp0L1jx44F4JtvviE1NdU8vmvXLn777TcAxowZU+g+49gvv/xS6DlFRMR6rgQQxyq5L7dgeSOAANx7772cPHmSGTNmaO8PETdTAPFDxfX0bty4EcjvbS3qB3qPHj0ICwsjMzOTbdu2FbqvdevW1K9fv9B9DRo0oFWrVgBs2rTJLa9BRETKrywVkKCgIKdquqeUtwXLirGJiLUUQPzM9u3bzSpE3759nc7t2bMHuLC6R0FBQUHm2ufGta7c53jO8T4REfGOslRArJj/ARdasCpLBUREPEcfK/iR3NxcHn74YQAGDBhAjx49nM6fPXsWoMSJdMY549qK3FdQZmam0y+elJSUYq8VEZHyK0sAsaL9CspfAVEAEfE/qoD4kcmTJ7N27VqqV6/OO++8U+i88YvI+CVQFOMTKsfe4PLeV9C0adOIjo42v4xqi4iIuJcrAeTcuXMAVKtWzZIxlXUSek5ODqAAIuKPVAGx2KRJk1i6dGmZ75s3bx6XXnppsefffvttXnrpJYKCgvjoo4/MORmOjF9IJf3wNyoUjp+Ilfe+gp588kkmTJhgfp+SkqIQIiLiAa4EkLS0NMC6AFLZJqGLiOcogFjs6NGj7Nq1q8z3GZ9UFeXjjz/mL3/5Czabjffff5/BgwcXeZ0rbVJFtVuV976CQkNDtYusiIgFylIBcdzvwpPUgiUiBrVgWWz+/PnY7fYyfw0aNKjIx/vqq68YNWoUeXl5vP7669xxxx3FPnebNm0A2L9/f5Hnc3JyOHjwoNO1rtzneM7xPhER8Q5frIAYH0Dl5OSQl5dX6vUKICL+SwGkEvvhhx+46aabyM7OZtq0aTz44IMlXt+7d28AfvrpJ/MHu6OtW7eSmZlJSEgI3bp1K3Tf3r17OXHiRKH7jh8/zr59+5yuFRER7/HFAOI4j9CVKogCiIj/UgCppLZu3cqf/vQn0tPTefLJJ/nb3/5W6j1XXnklNWvWJCUlhcWLFxc6P3fuXACuueYaqlevbh5v3749HTp0AOC9994rdJ9xrEuXLrRt27Zcr0dERNzHlyehgwKISFWnAFIJ7dq1i2uvvZaUlBQefPBBXnjhBZfuCw0NZeLEiQBMmDCB7du3m+cWLlzI3LlzsdlsPPXUU4XunTJlCgDPP/88q1atMo+vWrXKfH7jGhER8a6yVECsmgPiGCRcmYiuACLivzQJvRIaP348p06dwmazsW3bNvr161fkdWPGjGHMmDFOxyZNmsTatWtZsWIFsbGxdO7cmbS0NHMOx7Rp04psoxo5ciRr1qxhzpw5DBw40KyIxMfHAzBu3DhuueUWd75MEREpJ2NFwpKWRre6BSsgIIDg4GCys7NLDEYGBRAR/6UAUgkZnxzZ7XbWr19f7HVFTVwPCgriyy+/5PXXX2fevHns2bOH4OBgBgwYwIQJE4pdQQvgnXfeoV+/frz11lvs2LEDgEsuuYQHH3yQUaNGVfBViYiIuxgBxJfmgEB+ZSY7O1sVEJEqTgGkElqzZk2F7g8MDOSRRx7hkUceKfO9o0ePZvTo0RV6fhER8SwjgJw/f77Ya6xehhfyx5WamlpiZcagACLivzQHRERExM9EREQAJQcQb1VAoOTKjEEBRMR/KYCIiIj4GV8NIK60hhkUQET8lwKIiIiIn3ElgFi9DC9cqICoBUukalMAERER8TNlWQXLyjkgasESEVAAERER8TuOFRC73V7kNampqYB3WrBUARGp2hRARERE/IwRQOx2e7FL3iYnJwMQHR1t2bjKUwEJCtKCnSL+RgFERETEzxiVBih6HojdbjcDSI0aNawallqwRARQABEREfE7wcHBZuWgqHan8+fPk5OTA1hbAVELloiAAoiIiIhfKmklLKP6ERgY6LOT0I2ApAAi4n8UQERERPyQKwEkOjoam81m2ZjUgiUioAAiIiLil0oKIElJSYC17VegFiwRyacAIiIi4odKerPvjQnooAqIiORTABEREfFDqoCIiK9SABEREfFDrswBUQVERLxBAURERMQP+WIFRAFEREABRERExC+5MgdELVgi4g0KICIiIn5ILVgi4qsUQERERPyQWrBExFcpgIiIiPghX6yAqAVLREABRERExC+V9GZfFRAR8SYFEBERET/kSgWkMkxCDwkJ8eiYRMR6CiAiIiJ+yJU5IL48CT0zMxNQABHxRwogIiIifsgXKyBlCSBZWVmAAoiIP1IAERER8UPFtTvl5uaSmpoK+PYkdAUQEf+lACIiIuKHjArIuXPnnI6npKSYf/ZmBcRut5d4rRFAQkNDPT4uEbGWAoiIiIgfqlatGlA4gBjtV2FhYZZXF4wAYrfbzUnmxVEFRMR/KYCIiIj4ISOApKWlOR331gR0uNCCBaW3YSmAiPgvBRARERE/VFwA8dYEdHAOE6VNRNcqWCL+SwFERETED/liBcRms5lVkKJW5zLY7XZVQET8mAKIiIiIH3IMII4Tvr1ZAQGIjIwECs9NcZSbm2uOWZPQRfyPAoiIiIgfMgJIXl6e03wLowLiywHEqH6AKiAi/kgBRERExA8Zy/CCcxuWUQHxRgsWKICIiAKIiIiIXwoMDDRDSFEBxFsVkOKWB3ZkTEAHCAoK8viYRMRaCiAiIiJ+qnr16oBzAKlMLVghISHYbDZLxiUi1lEAERER8VNFrYRVmVqw1H4l4p8UQERERPxUUQHEVyogBZcHdmQEEK2AJeKfFEBERET8lCogIuKLFEBERET8lC9WQFyZhK4AIuLfFEBERET8VEkVEG+3YLmyCpYCiIh/UgARERHxUwUDiN1u5+zZswDUrFnTK2NSC5aIKICIiIj4qYIB5Pz582RnZwPeDyCuTEJXABHxTwogIiIifsoIIKmpqcCF+R+BgYHmOW+NyZUKiFbBEvFPCiCVUFpaGi+99BIjRoygXbt21KxZk5CQEBo3bsxNN93E//73vxLvz8vL49VXX6V79+5ERkZSq1YtBg0axNdff13qc8+fP58+ffoQHR1NVFQUffr0YcGCBe56aSIi4kYFKyBG+1WNGjW8tsGfWrBERAGkEjp+/DhPPPEES5YsITExkcaNG9OhQwdSU1P57LPPuOKKK/jnP/9Z5L25ubkMHTqURx55hF9++YXWrVtTo0YNVq5cyfXXX8/LL79c7POOGzeOUaNGsWHDBho1akSTJk3YsGEDd955Jw899JCnXq6IiJRTcQHEW+1XoEnoIqIAUinVqFGD1157jd27d3PmzBl27NjB9u3bOXXqFC+99BIAzz77LJs3by507/Tp01m+fDn169cnLi6O7du3s3//fhYsWEBAQACTJk0q8r5FixYxe/ZsIiMjWblyJfHx8fz+++98//33REZG8sYbb7B48WKPv3YREXFdwQBitGD5egBRBUTEvymAVEJ16tThoYceok2bNk7HQ0JCePzxx7n++uux2+3897//dTqflZVlBpSZM2fStWtX89zIkSMZO3YsdrudqVOnFnpO49hTTz3FgAEDzOMDBw5k8uTJADz33HNueX0iIuIeJbVgeYsmoYuIAogfat++PZC/2omj1atXc/bsWaKiorjpppsK3Td2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1KgBwNmzZ52OaxK6iP9TABERERHL1axZE8hvwcrLyzOPJyUlARcCioj4HwUQERERsZwRMOx2u1MblgKIiP9TABERERHLhYWFERYWBlwIHTk5OWYLlgKIiP9SABERERGvMNqwjHkgjitiGZPURcT/KICIiIiIVxSciG5UQiIjIwkODvbSqETE0xRARERExCuMCogRPDT/Q6RqUAARERERryjYgqUAIlI1KICIiIiIVxhBQxUQkapFAURERES8QhUQkapJAURERES8QnNARKomBRARERHxioKrYJ05c8bpuIj4JwUQERER8YqCFZCTJ08CUL9+fW8NSUQsoAAiIiIiXlGwAnLixAlAAUTE3ymAiIiIiFcUnIRuVEDq1avntTGJiOcpgIiIiIhXGEHDCB6qgIhUDQogIiIi4hUNGjQA8iefZ2ZmqgIiUkUogIiIiIhX1KxZk+DgYAD279/P+fPnAVVARPydAoifyMjIoE2bNthsNmw2G4cPHy722ry8PF599VW6d+9OZGQktWrVYtCgQXz99delPs/8+fPp06cP0dHRREVF0adPHxYsWODOlyIiIlWEzWYzqyDbt28HICIigmrVqnlzWCLiYQogfmLq1Kns3bu31Otyc3MZOnQojzzyCL/88gutW7emRo0arFy5kuuvv56XX3652HvHjRvHqFGj2LBhA40aNaJJkyZs2LCBO++8k4ceesidL0dERKoII4Bs3rwZgEaNGnlzOCJiAQUQPxAfH8/06dMZOnRoqddOnz6d5cuXU79+feLi4ti+fTv79+9nwYIFBAQEMGnSJPOXgKNFixYxe/ZsIiMjWblyJfHx8fz+++98//33REZG8sYbb7B48WJPvDwREfFjRrvV+vXrAWjVqpU3hyMiFlAAqeTsdjv3338/gYGBzJo1q8Rrs7KyeOmllwCYOXMmXbt2Nc+NHDmSsWPHYrfbmTp1aqF7jWNPPfUUAwYMMI8PHDiQyZMnA/Dcc89V+PWIiEjVYlRANm7cCCiAiFQFCiCV3Ny5c1m7di1TpkyhRYsWJV67evVqzp49S1RUFDfddFOh82PHjgXgm2++ITU11Ty+a9cufvvtNwDGjBlT6D7j2C+//MLu3bvL+1JERKQKatq0qdP3CiAi/k8BpBJLTEzkiSeeoF27dkycOLHU641Pl3r16mWuOuKoR48ehIWFkZmZybZt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", "text/html": [ - "" + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " ], "text/plain": [ - "" + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, @@ -5633,982 +951,30 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "id": "8539023c", "metadata": {}, "outputs": [ { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";/* global mpl */\n", - "\n", - "var comm_websocket_adapter = function (comm) {\n", - " // Create a \"websocket\"-like object which calls the given IPython comm\n", - " // object with the appropriate methods. Currently this is a non binary\n", - " // socket, so there is still some room for performance tuning.\n", - " var ws = {};\n", - "\n", - " ws.binaryType = comm.kernel.ws.binaryType;\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " function updateReadyState(_event) {\n", - " if (comm.kernel.ws) {\n", - " ws.readyState = comm.kernel.ws.readyState;\n", - " } else {\n", - " ws.readyState = 3; // Closed state.\n", - " }\n", - " }\n", - " comm.kernel.ws.addEventListener('open', updateReadyState);\n", - " comm.kernel.ws.addEventListener('close', updateReadyState);\n", - " comm.kernel.ws.addEventListener('error', updateReadyState);\n", - "\n", - " ws.close = function () {\n", - " comm.close();\n", - " };\n", - " ws.send = function (m) {\n", - " //console.log('sending', m);\n", - " comm.send(m);\n", - " };\n", - " // Register the callback with on_msg.\n", - " comm.on_msg(function (msg) {\n", - " //console.log('receiving', msg['content']['data'], msg);\n", - " var data = msg['content']['data'];\n", - " if (data['blob'] !== undefined) {\n", - " data = {\n", - " data: new Blob(msg['buffers'], { type: data['blob'] }),\n", - " };\n", - " }\n", - " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", - " ws.onmessage(data);\n", - " });\n", - " return ws;\n", - "};\n", - "\n", - "mpl.mpl_figure_comm = function (comm, msg) {\n", - " // This is the function which gets called when the mpl process\n", - " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", - "\n", - " var id = msg.content.data.id;\n", - " // Get hold of the div created by the display call when the Comm\n", - " // socket was opened in Python.\n", - " var element = document.getElementById(id);\n", - " var ws_proxy = comm_websocket_adapter(comm);\n", - "\n", - " function ondownload(figure, _format) {\n", - " window.open(figure.canvas.toDataURL());\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n", - "\n", - " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", - " // web socket which is closed, not our websocket->open comm proxy.\n", - " ws_proxy.onopen();\n", - "\n", - " fig.parent_element = element;\n", - " fig.cell_info = mpl.find_output_cell(\"
\");\n", - " if (!fig.cell_info) {\n", - " console.error('Failed to find cell for figure', id, fig);\n", - " return;\n", - " }\n", - " fig.cell_info[0].output_area.element.on(\n", - " 'cleared',\n", - " { fig: fig },\n", - " fig._remove_fig_handler\n", - " );\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function (fig, msg) {\n", - " var width = fig.canvas.width / fig.ratio;\n", - " fig.cell_info[0].output_area.element.off(\n", - " 'cleared',\n", - " fig._remove_fig_handler\n", - " );\n", - " fig.resizeObserverInstance.unobserve(fig.canvas_div);\n", - "\n", - " // Update the output cell to use the data from the current canvas.\n", - " fig.push_to_output();\n", - " var dataURL = fig.canvas.toDataURL();\n", - " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", - " // the notebook keyboard shortcuts fail.\n", - " IPython.keyboard_manager.enable();\n", - " fig.parent_element.innerHTML =\n", - " '';\n", - " fig.close_ws(fig, msg);\n", - "};\n", - "\n", - "mpl.figure.prototype.close_ws = function (fig, msg) {\n", - " fig.send_message('closing', msg);\n", - " // fig.ws.close()\n", - "};\n", - "\n", - "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", - " // Turn the data on the canvas into data in the output cell.\n", - " var width = this.canvas.width / this.ratio;\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] =\n", - " '';\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Tell IPython that the notebook contents must change.\n", - " IPython.notebook.set_dirty(true);\n", - " this.send_message('ack', {});\n", - " var fig = this;\n", - " // Wait a second, then push the new image to the DOM so\n", - " // that it is saved nicely (might be nice to debounce this).\n", - " setTimeout(function () {\n", - " fig.push_to_output();\n", - " }, 1000);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'btn-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " var button;\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " continue;\n", - " }\n", - "\n", - " button = fig.buttons[name] = document.createElement('button');\n", - " button.classList = 'btn btn-default';\n", - " button.href = '#';\n", - " button.title = name;\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message pull-right';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = document.createElement('div');\n", - " buttongrp.classList = 'btn-group inline pull-right';\n", - " button = document.createElement('button');\n", - " button.classList = 'btn btn-mini btn-primary';\n", - " button.href = '#';\n", - " button.title = 'Stop Interaction';\n", - " button.innerHTML = '';\n", - " button.addEventListener('click', function (_evt) {\n", - " fig.handle_close(fig, {});\n", - " });\n", - " button.addEventListener(\n", - " 'mouseover',\n", - " on_mouseover_closure('Stop Interaction')\n", - " );\n", - " buttongrp.appendChild(button);\n", - " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", - " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", - "};\n", - "\n", - "mpl.figure.prototype._remove_fig_handler = function (event) {\n", - " var fig = event.data.fig;\n", - " if (event.target !== this) {\n", - " // Ignore bubbled events from children.\n", - " return;\n", - " }\n", - " fig.close_ws(fig, {});\n", - "};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (el) {\n", - " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (el) {\n", - " // this is important to make the div 'focusable\n", - " el.setAttribute('tabindex', 0);\n", - " // reach out to IPython and tell the keyboard manager to turn it's self\n", - " // off when our div gets focus\n", - "\n", - " // location in version 3\n", - " if (IPython.notebook.keyboard_manager) {\n", - " IPython.notebook.keyboard_manager.register_events(el);\n", - " } else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (event, _name) {\n", - " // Check for shift+enter\n", - " if (event.shiftKey && event.which === 13) {\n", - " this.canvas_div.blur();\n", - " // select the cell after this one\n", - " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", - " IPython.notebook.select(index + 1);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " fig.ondownload(fig, null);\n", - "};\n", - "\n", - "mpl.find_output_cell = function (html_output) {\n", - " // Return the cell and output element which can be found *uniquely* in the notebook.\n", - " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", - " // IPython event is triggered only after the cells have been serialised, which for\n", - " // our purposes (turning an active figure into a static one), is too late.\n", - " var cells = IPython.notebook.get_cells();\n", - " var ncells = cells.length;\n", - " for (var i = 0; i < ncells; i++) {\n", - " var cell = cells[i];\n", - " if (cell.cell_type === 'code') {\n", - " for (var j = 0; j < cell.output_area.outputs.length; j++) {\n", - " var data = cell.output_area.outputs[j];\n", - " if (data.data) {\n", - " // IPython >= 3 moved mimebundle to data attribute of output\n", - " data = data.data;\n", - " }\n", - " if (data['text/html'] === html_output) {\n", - " return [cell, data, j];\n", - " }\n", - " }\n", - " }\n", - " }\n", - "};\n", - "\n", - "// Register the function which deals with the matplotlib target/channel.\n", - "// The kernel may be null if the page has been refreshed.\n", - "if (IPython.notebook.kernel !== null) {\n", - " IPython.notebook.kernel.comm_manager.register_target(\n", - " 'matplotlib',\n", - " mpl.mpl_figure_comm\n", - " );\n", - "}\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "60a8892ee1fd42f3a4abd662d156aebb", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACLoklEQVR4nOzdeXhU5d3/8fdkB0LCJnsCJISdKkGkbApKUIECAkGUKiIKxVqEFqRWpLTQB5VW64PVR3DBVkSIrFqEggKyyxIiCEhCCImBxJhAJizZz++P/GaaIZOQgclMJvm8rutckvvc95nvORNhvnNvJsMwDERERERERFzAy90BiIiIiIhI7aEEREREREREXEYJiIiIiIiIuIwSEBERERERcRklICIiIiIi4jJKQERERERExGWUgIiIiIiIiMsoAREREREREZdRAiIiIiIiIi6jBERERERERFxGCYiIiIiIiLiMEhAREREREXEZJSAiIiIiIuIySkBERERERMRllICIiIiIiIjLKAERERERERGXUQIiIiIiIiIuowRERERERERcRgmIiIiIiIi4jBIQERERERFxGSUgIiIiIiLiMkpARERERETEZZSAiIiIiIiIyygBERERERERl1ECIiIiIiIiLqMEREREREREXEYJiIiIiIiIuIwSEBERERERcRklICIiIiIi4jJKQERERERExGWUgIiIiIiIiMsoAREREREREZdRAiIiIiIiIi6jBERERERERFxGCYiIiIiIiLiMEhAREREREXEZJSAiIiIiIuIySkBERERERMRllICIiIiIiIjLKAERERERERGXUQIiIiIiIiIuowRERERERERcRgmIiIiIiIi4jBIQERERERFxGSUgIiIiIiLiMkpARERERETEZZSAiIiIiIiIyygBERERERERl1ECIiIiIiIiLqMEREREREREXEYJiIiIiIiIuIwSEBERERERcRklICIiIiIi4jJKQERERERExGWUgIiIiIiIiMsoAREREREREZdRAiIiIiIiIi6jBERERERERFxGCYiIiIiIiLiMEhAREREREXEZJSAiIiIiIuIySkBERERERMRllICIiIiIiIjLKAERERERERGXUQIiIiIiIiIuowRERERERERcRgmIiIiIiIi4jBIQERERERFxGSUgIiIiIiLiMkpARERERETEZXzcHYBUjeLiYs6fP0/9+vUxmUzuDkdERJzMMAxycnJo2bIlXl76PlFEPIcSkBrq/PnzhISEuDsMERGpYikpKbRu3drdYYiIVJoSkBqqfv36ACTEn7b+WUREao6cnBzaR3TQ3/Ei4nGUgNRQlmFX9evXJygoyM3RiIhIVdEwWxHxNBo0KiIiIiIiLqMEREREREREXEYJiIiIiIiIuIwSEBERERERcRklICIiIiIi4jJKQERERERExGWUgIiIiIiIiMsoAREREREREZdRAiIiIiIiIi6jBERERERERFxGCYiIiIiIiLiMEhAREREREXEZJSAiIiIiIuIySkBERERERMRllICIiIiIiIjLKAERERERERGXUQIiIiIiIiIuowRERERERERcRgmIiIiIiIi4jBIQERERERFxGSUgIiIiIiLiMkpARERERETEZZSAiIiIiIiIyygBERERERERl1ECIiIiIiIiLqMEREREREREXEYJiIiIiIiIuIwSEBERERERcRklICIiIiIi4jJKQERERERExGWUgIiIiIiIiMsoAREREREREZdRAiIiIiIiIi6jBERERERERFxGCYiIiIiIiLiMEhAREREREXEZJSAiIiLiVoZhsHv3bmbPns3Pf/5zGjRogJ+fHy1btmTMmDFs377d3SFWKDU1lSlTphASEoK/vz+hoaFMnTqV1NRUu/WTkpIwmUwVHr///e9dfBciruPj7gBERESkdvvqq68YPHgwAF5eXrRv35569eoRHx/P2rVrWbt2LXPnzmXBggVujrSsEydOMGDAALKysggODqZbt26cOXOGpUuXsmbNGnbv3k2nTp3stvX39+fOO++0e65t27ZVGLWIeykBEREREbcyDIP27dvz29/+lvHjx9OwYUMA8vPzmT9/PosWLWLhwoX07t2b4cOHV1kcbdu25dy5cxiGUan6RUVFREdHk5WVxZgxY/jnP/9J3bp1uXLlCo8//jhr167l4YcfJjY2Fi+vsoNOmjdvzu7du519GyLVnoZgiYiIiFvdddddnDx5kmnTplmTDwA/Pz/+53/+hwcffBCAZcuWuStEu9auXcuJEydo3LgxH3zwAXXr1gWgXr16LF++nMaNG/Ptt9+yYcMGN0cqUr0oARERERG3CgoKwsen/EEZUVFRAJw+fbrMOcMw+OSTT4iKiqJx48b4+/sTFhbG9OnTSUtLq7KY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vfjss8/KHbpk2Qn++PHjN/16t6p3794kJSWxZ88eu6tt7dmzx1rPEYWFhTb/dZZx48aRkJBAVlYWAE2aNGHVqlWMHz+evXv3snfvXmvdsWPHMnfuXKe+visoAREREZGKqQek+vPyKTkqXb/opl4mLy+PkSNHcuDAAbp27crmzZvLbO5X2rBhw/Dz82PTpk3Ex8cTERFxU697K0aPHs2qVatYvXo1r7zySpmd0C09LWPHjnXouuvXrwewWdnLGdq1a8eyZctsyoYMGcLZs2f54osvSEpKok6dOgwYMMDpe5C4ilbBEhEREfF0liFYjhwOKioqYvz48Xz11VeEh4ezdetWGjVqVGGbli1bMmPGDAoKCrj//vvZsWOHzXnDMPjmm2+YNm2adSiUs40ZM4ZOnTqRmZnJpEmTrDuXX7lyhUmTJpGZmUm3bt0YNWqUTbuXXnqJzz//vMzSxBkZGcyePZv33nsPk8nEr3/9a6fFGhcXx6effsqnn37K0aNHbc4FBwczfvx4fv/73/Pcc895bPIB6gERERER8Xw3OQndEatXr7Z+6+/l5UV0dLTdei1atLCZv/GXv/yF8+fP89FHHzFo0CCaN29OaGgoeXl5JCYmkpOTA2BdytfZvL29iYmJ4e6772bNmjVs27aN9u3bk5CQQHZ2No0aNWLVqlV4Xbc5465du1i4cCF+fn60b9+ewMBA0tPTSU1NpbCwED8/P958802Hh27Zc/jwYSZOnMjJkydtyjt06MDy5cud8hrViRIQERERuTENq6reXDAJvXRPQHx8PPHx8XbrtWnTxuZnHx8f/vWvf/HII4+wbNky9u/fT2xsLA0bNqRDhw706dOHsWPH0qFDB4djqqxu3boRFxfHn//8Z7744guOHTvGbbfdxrhx45g3b57d1bbmz5/P+vXr2b17Nz/88AOnT5+mTp06dOnShUGDBjFt2jQ6dux4y7GlpKQwePBg64ph9evXxzAMLl++zPfff8+QIUM4evSoR652VR6TUXqxZHGKoqIi3n//fT766CO+++47Ll++TLNmzejRoweTJk1i5MiRZdrs27ePl19+mb1793L58mXatWvHI488wuzZs23WsK4ss9lMcHAw6WkXbnp5PRERqb7MZjPNmrcgOzu7yv6et/xbkn32rEOvYTabCW7XrkpjkxKW9+jif35PUL3K7+FhvpJHwyEv6z2qBqZPn86bb75Jjx49eO+996xzSmJjY3nyySf59ttvmTZtGm+++aZ7A3Ui9YA42cWLFxk6dCj79+/HZDLRoUMH2rZty/nz59mwYQM+Pj5lEpAVK1YwceJEioqKaNWqFSEhIRw/fpx58+bx2WefsWPHDurWreumOxIRkVpPk9CrPy8vB3tANA24uti6dSs+Pj58+umnNr0cPXr04NNPP6VTp05s3brVjRE6n377nKi4uJgRI0awf/9+Ro8eTXJyMqdOneLQoUOcP3+elJQUpk+fbtMmKSmJyZMnU1RUxKuvvkpKSgpHjhwhPj6ejh07cvDgQZ5//nk33ZGIiIiIVKWUlBTCwsLsDrEKDw8nPDz8hps4eholIE60dOlSdu/ezaBBg4iJiSkznrB169bcfffdNmWLFy8mLy+PIUOGMHv2bOsOom3atOH999+3Xjc9Pd01NyEiIiKexzIJ3ZFDqoWrV6/StGnTcs/fdtttZVbi8nRKQJzojTfeAGDBggVlVlKwxzAM1q1bB8DkyZPLnO/bty+dOnWioKCADRs2ODdYERERqTlMDi7BqwRE3EhzQJwkPj6eU6dO0ahRI/r27cuGDRuIiYnhwoUL3HbbbQwePJjHHnsMf///ThBLTk7mwoULAPTr18/udfv168epU6c4cOAAU6ZMccm9iIiI2NAckOrP4Y0I9RGwOsnOzubrr78u9xyULAtc3tpR14+wqe702+ckhw8fBqBTp0489thjrFixwub8qlWr+Nvf/sbmzZuty9NZlq/z9/enZcuWdq8bFhZmU1dERETkeiaTNyYHejUcqStV7/jx4wwaNKjCOgMHDrRbbjKZKCwsrIKoqo6GYDmJpSfj4MGDrFixgqeeeoqkpCRyc3PZtm0bYWFhnDp1ijFjxlBcXAyUrJgF0KBBA+vcj+s1bNjQpm558vLyMJvNNoeIiIhTWHpAHDnEtSyrYFX60EfA6sQwjJs+LJ8rPYl++5zkypUrABQUFDBgwACWLVtGmzZt8Pf357777mPt2rWYTCYOHz7Mv//9bwByc3MB8PPzK/e6liFb165dq/D1Fy1aRHBwsPUICQlxxm2JiIiIJ9AkdI9VXFx8y4enUQLiJKU3C3zuuefKnL/99tutXWubN2+2aZOfn1/udS2rHtSpU6fC13/hhRfIzs62HjVtuTYRERGpgGUOiCOHiJvot89JLEOloGQeiD2dO3fmq6++IikpyabNpUuXMAzD7jAsy9Cr0te3x9/f32aCu4iIiNNoEnr152ivhnpAxI3UA+IkHTt2tP65vETAUl5UVARAREQEUNLLcf78ebttEhMTbeqKiIiIlOHQ/A9vx3ZNF3EyJSBO0qNHD+uQKkvScD1LeatWrQAIDQ2lefPmAOzZs8duG0t57969nRqviIiIiLhXt27dWLVqVbnL61ZWcnIyv/rVr3jllVecFFnVUgLiJPXq1WPo0KEAfPjhh2XOp6WlsWXLFgDuvfdeoGTZtIceegiA9957r0ybvXv3curUKXx9fRkxYkRVhS4iIlIxrYJV/akHxCPl5OTw6KOP0qFDBxYsWODQtgv5+fmsW7eOsWPHEhERwbvvvlvhjurVicm41ZRLrOLi4ujZsyeGYfD+++8zceJEoGSOx/jx49myZQthYWGcPHnSuvLV2bNn6dSpE/n5+bz66qvMmjULk8nEuXPnuP/++/n++++ZNm0ab731lkOxmM1mgoODSU+7QFBQkNPvVURE3MtsNtOseQuys7Or7O95y78l2T/84NBrmM1mglu3rtLYpITlPbp06F2CAutWvt3lqzS48ym9R26Wl5fH//7v//Lyyy9z8eJFTCYT4eHh3HXXXfTs2ZMWLVrQqFEj/P39uXTpEllZWZw8eZJDhw5x6NAhrly5gmEYREVF8corr3DHHXe4+5YqRQmIk/3f//0fzzzzDIZhEBoaStOmTTlx4gRXr16lSZMmbN26tcwvxz//+U8mTZpEcXExrVq1omnTphw/fpyCggJ69uzJzp07qVevnkNxKAEREanZlIAIlEpAjnzgeAISOUnvUTWRk5PDRx99xLJlyzh69ChAuXvEWT6616tXj/HjxzNlyhR69erlqlCdQqtgOdmvfvUrunbtyuLFi9m3bx/ffvstLVu2ZNiwYbzwwgvW+R+lPf7447Rv355Fixaxd+9eTpw4QVhYGI888ghz5syxWeJXRETE5bQKlgdwdG8PDcGqTurXr8+0adOYNm0a8fHxfP311+zdu5dz587x008/kZubS6NGjWjatCl33HEH/fv3p2/fvtStW/mkszpRAlIFBgwYwIABAxxq07dvXz777LMqikhERERqNEfndWgOSLUVERFBREQEkydPdncoVUYJiIiIiFRMPSDVn8mn5HCkvoib6LdPRERExNOpB0Q8iBIQERERqZh6QKo/k5eDO6FrJwZxHyUgIiIiIh7OMHlhOJBUOFJXxNn02yciIiIiIi6jHhARERERT2dycBleh5bsFXEuJSAiIiJSMc0Bqf5MXo7N69AQLHEjJSAiIiIink49IOJBlICIiIhIxdQDUu0ZeGE4MLXXkboizqbfPhERERFPZ+kBceSQau3YsWM8/fTTdOjQgXr16uHjY9tv8M477/CHP/wBs9nspghvnnpARERERDydyeTgHBD1UlVn//jHP5g5cyaFhYXWMtN171leXh6vvPIKXbt2ZcKECa4O8ZaoB0REREQqZhmC5cghrqUekBpj+/btTJ8+nbp167JkyRLOnTtH3759y9QbN24chmGwbt06N0R5a9QDIiIiIuLhtBFhzfG3v/0NgBUrVjBs2DCgbO8HQPPmzQkJCeHEiRMujc8ZlICIiIhIxTQJvfrTKlg1xv79+2nevLk1+ahIixYtOHnypAuici4lICIiIiKeTglIjXH58mXatGlTqbr5+fkUFRVVcUTOp/43EREREZFqokWLFpw5c+aG9XJzczl16lSlk5XqRAmIiIiIiIezzAFx5JDqadCgQeTk5PD+++9XWO+NN94gNzeX+++/30WROY9++0RERKRiWgXLAzi6ApaGYFVXc+bMwdfXl9/85jf84x//4PLlyzbnL126xJ///Gfmzp1LvXr1mDlzppsivXlKQEREREQ8nWUfkEofShKrq44dO/LPf/6T4uJipk+fTqNGjTh06BAAoaGh3HbbbfzpT3/Cx8eHjz76iJCQEDdH7DglICIiIlIx9YB4AO+bOKS6GjduHN988w2jRo3Cx8eHvLw8DMPghx9+wMvLi2HDhrF//35Gjhzp7lBvilbBEhEREfFw2gek5unevTtr1qyhoKCA06dPk52dTWBgIBEREdSpU8fd4d0SJSAiIiIink7L8NYY7dq1IygoiIMHD+Ln54evry9du3Z1d1hOpfRXREREKubCIVibNm1i8ODBNGrUiHr16hEZGcmSJUsoLi524g05V2pqKlOmTCEkJAR/f39CQ0OZOnUqqampFba7dOkSs2bNIjw8nICAAFq0aMGECRNubmM5h+Z//P/jJuk9usn3qJJ+/PFH/P398fPzq7LXcDeTYRiGu4MQ5zObzQQHB5OedoGgoCB3hyMiIk5m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hsE333zDtGnTyh1Gc6vGjBlDp06dyMzMZNKkSVy9ehWAK1euMGnSJDIzM+nWrRujRo2yaXfXXXcRFRVFYWEhEyZMIDMzEyjpRZg5cyYnT56kadOmTJkypdKxFBuGw4ej9B7d2nvkTCaTicWLF2MymXjppZfcEsOtMBmODgIUj2A2mwkODiY97UKlJpeJiIhnMZvNNGveguzs7Cr7e97yb0lWlmOvYTabadQo2OHY/vKXvzB37lygZKO3wMBAjh8/TnFxMcOGDWPDhg02w10KCwuZNGkSH330EQDNmzcnNDSUvLw8EhMTrd94nzx5kk6dOt3w9S3zCxz5aHT8+HHuvvtuLl68SHBwMO3btychIYHs7GwaNWrErl27rEORSjt//jx9+/bl3Llz1K1bl86dO5OcnExGRgYBAQF88cUX1p6Eiljeo3PJ5x1+j9qEttR75IL3qCrdddddnD17loyMDLfG4Sj1gIiIiEiFXNEDAiXfsH/22Wfce++9ZGZmkpCQQPfu3fn73/9e5oMtgI+PD//617/497//bf0GOzY2lgsXLtChQweeffZZduzYQYcOHW7xCZSvW7duxMXF8dRTTxEYGMixY8cIDAzk6aefJi4uzu4HWyjpHYiNjWXmzJk0a9aMY8eOYTKZGD9+PIcPH3b4g61RbDh83Ay9Rzf/HlWFc+fOWXt1PIl6QGoo9YCIiNRsruwBycx0vAekcWPHe0DEcZb36OzZVIffo3btWuk98lDFxcX88Y9/5C9/+Qt33nkn33zzjbtDcoiW4RURERHxcAbgSKeGvn2uvp588slyzxmGQUZGBkePHuXChQuYTCbmzJnjwuicQwmIiIiIVOhmN7kT16nqfUDEdZYvX16pei1btuSVV15hzJgxVRtQFVACIiIiIuLhlCTWHB988EG550wmE/Xq1SMsLIzbb78dLy/PnM6tBEREREQqpA+31Z96QGqOiRMnujuEKqcERERERMTDKUkUT6IERERERETEAyQnJ7Ny5UrOnz9PZGQkjz32mEcOw/K8iEVERETEhit2QhfXePvtt2nUqBH/+7//a1O+f/9+unfvzh/+8AeWLFnCk08+yf33309xcbGbIr15SkBERESkQq7aiFBunlHs+CHV08aNGzGbzYwePdqm/Le//S05OTn07duXGTNm0KJFC7766is++eQTN0V685SAiIiI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48u0JXqPxC3UAyIiIiLi4Tx1CJbUTkpARERERDycJw/BktpHCYiIiIjcgOaAVHfFxcUO9oAoARH3UQIiIiIi4uHUAyKeRAmIiIiIiIcrNood6tUoVgIibqQERERERG5AQ7CqO8MownBgCJZhaBK6uI92QhcREREREZdRD4iIiIiIhysuLqbYpCFY4hmUgIiIiIh4OMMoxkCT0MUzKAERERER8XDFxUUUmxxYhldzQMSNlICIiIjIDWgSenWnHhDxJJqELiIiItVabGws8+bN45577qFJkyb4+vrStGlTHnzwQdatW+fu8G7o0qVLzJo1i/DwcAICAmjRogUTJkzg5MmT5bYxmUwVHuPHj7epbxQXl/SCVPIwtBGhuJF6QERERKTaOnPmDJGRkdaf27VrR9u2bUlMTGTz5s1s3ryZiRMn8v777+PlVf2+V01LS6NPnz4kJSVRt25dunbtSkpKCh9//DHr1q1j8+bN3H333eW279evn93yTp062fysHhDxJEpARERE5AbcNwTLMAxatGjBjBkzeOyxx2jRogVQsurTW2+9xfTp0/nwww+58847efbZZ532uvYMHDiQnTt3cvbsWdq2bVupNk888QRJSUn079+f9evX07hxYwoKCvjd737HkiVLGDduHGfOnKFevXp22+/evbtSr1NcXIxJq2CJh6h+XxWIiIiI/H+tW7cmISGB559/3pp8AHh5efHss88ydepUAJYtW+auEMt16NAhtmzZgo+PDytWrKBx48YA+Pr68vrrr9O5c2fS09NZunTpLb+WYRQ5fIi4ixIQERERqbYCAgKoW7duueeHDBkCwOnTp8uts2XLFkaMGEGzZs3w9/endevWTJo0iTNnzjg93tLWrFkDQFRUFKGhoTbnvL29mThxIgAxMTG3/FrFxcUOHyLuogREREREPFZubi4AderUsXt+xowZPPDAA3z22WcAdO3alZycHJYvX05kZCR79+6tstj2798PlD+Pw1J++PBhiors90hMnz6dIUOG8MADD/DMM8+wadMmDEOrjIlnUwIiIiIiHmv16tWA/Q/577zzDm+88Qbt2rVj+/btpKenc+TIEbKysli4cCFms5mHH37YmsQ4W3x8PABhYWF2z1vK8/PzOXfunN06S5YsYevWrWzZsoW3336bYcOGMXDgQDIyMmzqaQiWeBIlICIiIlKhnJwccnLMDhw5AJjNZpsjLy/PqXH95z//Yf369QDMnj3b5lx+fj7z58/H29ubNWvWMHDgQOs5b29vXnzxRcaMGcMPP/zglCFQ9ly8eBGAhg0b2j1futxS1+KBBx5g9erVnDlzhtzcXH744QeWLFlCUFAQX3/9Nb/4xS8oLCy01i808ikozqv0UWjkV8Edi1SOVsESERERu/z8/GjevDm9ev3M4baBgYGEhITYlP3xj39k/vz5ToktOTmZCRMmAPDMM8+UWcp23759pKWl0atXL3r06GH3GiNGjGDNmjXs3LmTxx57zClxlWbpWfHz87N73t/f3/rna9eu2Zz74osvbH5u1aoVzz77LL1796Zfv34cOHCAlStXEh0dTfPmzTmV9pXD8TVv3rzc2ESqkhIQERERsSsgIICzZ8+Sn+/4t+WGYWAymWzKSn/gvhVZWVk8+OCD/PTTTwwcOJDXXnutTJ1jx44BWJfAtefSpUsApKam2pRbltstT7t27eyWX788b0BAAFevXi33+ZXuESpvDsv1evXqxdixY1m5ciVr167lscceu+n3yM/Pj4CAAIfbidwqJSAiIiJSroCAgCr/kBodHc2FCxfKlNvbA+Py5csMHTqUEydO0LNnTzZu3Gg3scnOzgYgIyOjzHyJ613f+9C9e3eb4U0Wx44dw2w2c+edd9p9zeufU8OGDbl69WqZ4VUWpcvLG6ZlT58+fVi5ciUJCQnW11UiIZ5ECYiIiIi41cGDB8udhF1aXl4eI0eO5MCBA3Tp0oXNmzdTv359u3UDAwMBmDBhAh999JFD8SxZssRuuaVnJCYmplIbEUZERJCamkpiYqLd85ZyPz8/2rRpU+n4fH19AewmSSKeQJPQRURExK2SkpIwDKPMUVphYSHjxo3jq6++IiwsjK1bt9KkSZNyr9mlSxcAjh8/XqWxV6R3794A7Nmzx+55S3nPnj3x9vau9HW/++47oGSTRhFPpAREREREqjXDMHjiiSfYuHEjLVu2ZNu2bbRs2bLCNgMGDKBJkybExcWxY8cO1wR6ndGjRwOwdetWkpOTbc4VFRXx4YcfAjB27NhKXzM9PZ0VK1YAMHjwYCdFKuJaSkBERESkWnvuuedYsWIFTZo0Ydu2beVOAi8tICCAP//5z0DJHJN169aV6VU5fvw4c+bMKbeH4lbdddddREVFUVhYyIQJE8jMzASgoKCAmTNncvLkSZo2bcqUKVNs2r3wwgusWLGCq1ev2pTHxcURFRXFxYsXadq0KVOnTq2SuEWqmuaAiIiISLW1b98+65yMOnXq8PTTT5db9/pJ69OmTSM5OZmXX36Z0aNH06hRI8LDwykqKiIpKYmsrCwABg0aVGXxL1++nL59+7J7925CQ0Pp3LkzycnJZGRkEBAQwKpVq6zzVSxOnjzJyy+/jI+PD+3btyc4OJiMjAzrnJFmzZqxceNGGjRoUGVxi1QlJSAiIiJSbZVeqjYlJYWUlBSH2i9atIhf/OIX/OMf/2DXrl3ExcURGBhI69atGTVqFGPGjOG+++5zdthWLVu2JDY2lgULFrB+/XqOHTtGgwYNGD9+PC+99JJ1rkpp06ZNo1mzZnzzzTecP3+ehIQE6tatS69evRg2bBi//vWvK5z/IlLdmYzr+yOlRjCbzQQHB5OedoGgoCB3hyMiIk5mNptp1rwF2dnZ+nteRDyK5oCIiIiIiIjLKAERERERERGXUQIiIiIiIiIuowRERERERERcRgmIiIiIiIi4jBIQERERERFxGSUgIiIiIiLiMkpARERERETEZZSAiIiIiIiIyygBERERERERl1ECIiIiIiIiLqMEREREREREXEYJiIiIiIiIuIwSEBERERERcRklICIiIiIi4jJKQERERERExGWUgIiIiIiIiMsoAREREREREZdRAiIiIiIiIi6jBERERERERFxGCYiIiIiIiLiMEhAREREREXEZJSAiIiIiIuIySkBERERERMRllICIiIiIiIjLKAERERERERGXUQIiIiIiIiIuowSkGtm0aRODBw+mUaNG1KtXj8jISJYsWUJxcbG7QxMRERERcQolINXEyy+/zLBhw/jyyy9p2LAh7du3Jy4ujunTp/PQQw8pCRERERGRGkEJSDWwb98+/vCHP+Dl5cXHH3/MmTNniIuL48iRIzRr1oyNGzfy2muvuTtMEREREZFbpgSkGli4cCGGYfDUU0/xyCOPWMtvv/12a+Lx8ssvU1BQ4K4QRUREREScQgmIm5nNZrZt2wbA5MmTy5yPjo4mKCiIzMxMtm/f7urwREREREScSgmIm8XGxpKfn09AQACRkZFlzvv6+tKrVy8ADhw44OrwREREREScSgmIm8XHxwMQGhqKj4+P3TphYWE2dUVEREREPJX9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DfcMw7AOKaqtzwqgXr16DB06FIAPP/ywzPm0tDS2bNkCwL333gvU3udl6aE4ffo0KSkpZc6bzWbrlyMdOnQAau+zEhGpFVy887pUsd27dxsmk8nw8vIyPv74Y2v50aNHjWbNmhmA8corr7gxQtcqLCw0Ro0aZQBGeHi4cf78+Uq1S0xMNPz8/AzAePXVV43i4mLDMAwjKSnJ6NixowEY06ZNq8rQq5WJEycagLFgwYIy52rzszp69Kjh7e1teHl5GcuXL7eWX7x40bj//vsNwAgLCzPy8vKs52rj88rJyTGaNGliAEbfvn2Ns2fPWs+lp6cbw4cPNwAjICDA+OGHH6znauOzEhGpDZSA1EALFy40AOuHn5/97GeGl5eXARjDhg0zCgsL3R2iy3z88cfWZxEREWH069fP7jF27NgybT/88EPrc2vVqpXRo0cPw9fX1wCMnj17GpcvX3bDHblHRQmIYdTuZ/X2228bJpPJAIzQ0FDjzjvvNOrWrWsARpMmTYzY2NgybWrj89q0aZMREBBgAIa3t7cRERFhdOnSxZpg+Pj42CRxFrXxWYmI1HRKQGqozz77zLj33nuN4OBgo27dusbtt99u/P3vf69VyYdhGMYHH3xgTUAqOtq0aWO3/Z49e4zhw4cbjRo1Mvz9/Y2OHTsa8+fPN65du+baG3GzGyUghlG7n9XXX39t/OIXvzCaNGli+Pn5GW3btjV+/etf23ybf73a+Ly+//57Y8qUKUb79u0Nf39/w8/Pz2jTpo3x2GOPGYcPHy63XW18ViIiNZnJMMpZ31BERERERMTJNAldRERERERcRgmIiIiIiIi4jBIQERERERFxGSUgIiIiIiLiMkpARERERETEZZSAiIiIiIiIyygBERERERERl1ECIiIiIiIiLqMEREREREREXEYJiIiIiIiIuIwSEBERERERcRklICIiIiIi4jJKQERERERExGWUgIiIiIiIiMsoAREREREREZdRAiIiIiIiIi6jBERERERERFxGCYiIiIiIiLiMEhAREREREXEZJSAiIiIiIuIySkBERERERMRllICIiIiIiIjLKAERERERERGXUQIiIiIiIiIuowRERERERERcRgmIiIiIiIi4jBIQERERERFxGSUgIiIiIiLiMkpARERERETEZZSAiIiIiIiIyygBERERERERl1ECIiIiIiIi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e/akqqoq7733Xj7++OO57T/99FN6enqSJC+99NIFn5TFv69q5jpchfzhhx/mySefTHL2i27WrFmT5OxdiNWrV6etrS233HLLvC8lXGgh+azjx48v+rok6e3tzdatW3Pfffelt7f3vLHDhw/nkUceydDQUGpra3Pbbbdl5cqVqVQq+fXXXzMzM5PHH388n3zyyaKfafab0JuamtLe3r5gXIyPj2dwcDAjIyPp7OxMc3Pzhf5MAAD/Oa+//npeeeWVJGf/6bxq1ar09/dneno6DzzwQD7//PO5NbQsjetyEfoTTzyRkZGR7N+/P8eOHUt/f3+SZHR0NKtXry5+Pvfee2+OHj2at956K1988UV+/vnnnDlzJq2trdm+fXseeuihualai2lubk5nZ2cGBgbyzTffZO3atWlpaUlNTU2mpqZSqVQyNDSU6upq8QEAXLP27NmT22+/Pfv27cv333+fP//8M52dnXnqqafy7LPPio+rwHV5B+RaNjk5mZMnT+bEiRPnrXGpr69Pa2trbrjhhst+ZC8AAPxTBMg1amZmJlNTU3OPoaupqbHgHACAJSdAAACAYq7Lp2ABAABLQ4AAAADFCBAAAKAYAQIAABQjQAAAgGIECAAAUIwAAQAAihEgAABAMQIEAAAoRoAAAADFCBAAAKAYAQIAABQjQAAAgGIECAAAUIwAAQAAihEgAABAMQIEAAAoRoAAAADFCBAAAKAYAQIAABQjQAAAgGIECAAAUIwAAQAAihEgAABAMQIEAAAoRoAAAADFCBAAAKAYAQIAABQjQAAAgGIECAAAUIwAAQAAihEgAABAMQIEAAAoRoAAAADFCBAAAKAYAQIAABQjQAAAgGIECAAAUIwAAQAAihEgAABAMQIEAAAoRoAAAADFCBAAAKAYAQIAABQjQAAAgGIECAAAUIwAAQAAihEgAABAMQIEAAAoRoAAAADFCBAAAKAYAQIAABQjQAAAgGIECAAAUIwAAQAAihEgAABAMQIEAAAoRoAAAADFCBAAAKCY/wGTM3cjNDEGvgAAAABJRU5ErkJggg==", "text/html": [ - "" + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " ], "text/plain": [ - "" + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, @@ -6646,7 +1012,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.5" + "version": "3.11.8" } }, "nbformat": 4,