summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Luka Šijanec <anton@sijanec.eu>2023-03-15 20:26:21 +0100
committerAnton Luka Šijanec <anton@sijanec.eu>2023-03-15 20:26:21 +0100
commit5aed85d8cdc3301c9f9a68d89d21ae7b1bf1658f (patch)
tree3d1b3be214f43b57763eda2149b5cc9bea7dbe5e
parentinfloop fix 2 (diff)
downloadtravnik-5aed85d8cdc3301c9f9a68d89d21ae7b1bf1658f.tar
travnik-5aed85d8cdc3301c9f9a68d89d21ae7b1bf1658f.tar.gz
travnik-5aed85d8cdc3301c9f9a68d89d21ae7b1bf1658f.tar.bz2
travnik-5aed85d8cdc3301c9f9a68d89d21ae7b1bf1658f.tar.lz
travnik-5aed85d8cdc3301c9f9a68d89d21ae7b1bf1658f.tar.xz
travnik-5aed85d8cdc3301c9f9a68d89d21ae7b1bf1658f.tar.zst
travnik-5aed85d8cdc3301c9f9a68d89d21ae7b1bf1658f.zip
-rw-r--r--analiza/zvezek.ipynb6868
-rwxr-xr-xradio/radio.py95
-rw-r--r--src/bencoding.c6
-rw-r--r--src/dht.c28
-rw-r--r--src/main.c21
-rw-r--r--travnik.py5
6 files changed, 177 insertions, 6846 deletions
diff --git a/analiza/zvezek.ipynb b/analiza/zvezek.ipynb
index c4d32a2..bf864bd 100644
--- a/analiza/zvezek.ipynb
+++ b/analiza/zvezek.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 2,
"id": "7e32a042",
"metadata": {
"scrolled": false
@@ -15,7 +15,7 @@
"......\n",
"fixed bad single file torrent 4f269d8aefd647ee270842d53ec98aebd23a4afe\n",
"fixed bad single file torrent 7b09ae0b612dafc1744562dccbbe4becf4d633c3\n",
- "47843 @ 723.5033559300937 s\n"
+ "47843 @ 78.78622500100755 s\n"
]
}
],
@@ -39,19 +39,35 @@
},
{
"cell_type": "code",
- "execution_count": 2,
- "id": "a4419e5e",
- "metadata": {},
+ "execution_count": 7,
+ "id": "978ab1cf",
+ "metadata": {
+ "scrolled": true
+ },
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "5.509342634119093 torrenti so se zbirali 16.265196759259258 dni. en torrent je bil najden v povprečju na 29.373429759839475 sekund, v 47843 so metapodatki 3084321 datotek v skupni velikosti 259.2602232018344 TiB\n"
+ "...\n"
]
}
],
"source": [
+ "from travnik import Type\n",
+ "for hash, torrent in torrents.items():\n",
+ " if torrent.type == Type.HYBRID and not torrent.dict.get(b'info').get(b'meta version'):\n",
+ " print(torrent.sha1.hex(), torrent.sha256.hex())\n",
+ "print(\"...\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a4419e5e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
"s = monotonic()\n",
"prej = None\n",
"skup = 0\n",
@@ -72,1000 +88,12 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"id": "e170de45",
"metadata": {
"scrolled": false
},
- "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('tabindex', '0');\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",
- " 'z-index: 2;'\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(\n",
- " 'style',\n",
- " 'box-sizing: content-box;' +\n",
- " 'pointer-events: none;' +\n",
- " 'position: relative;' +\n",
- " 'z-index: 0;'\n",
- " );\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;' +\n",
- " 'left: 0;' +\n",
- " 'pointer-events: none;' +\n",
- " 'position: absolute;' +\n",
- " 'top: 0;' +\n",
- " '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",
- " /* This rescales the canvas back to display pixels, so that it\n",
- " * appears correct on HiDPI screens. */\n",
- " canvas.style.width = width + 'px';\n",
- " canvas.style.height = height + 'px';\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",
- " /* User Agent sniffing is bad, but WebKit is busted:\n",
- " * https://bugs.webkit.org/show_bug.cgi?id=144526\n",
- " * https://bugs.webkit.org/show_bug.cgi?id=181818\n",
- " * The worst that happens here is that they get an extra browser\n",
- " * selection when dragging, if this check fails to catch them.\n",
- " */\n",
- " var UA = navigator.userAgent;\n",
- " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n",
- " if(isWebKit) {\n",
- " return function (event) {\n",
- " /* This prevents the web browser from automatically changing to\n",
- " * the text insertion cursor when the button is pressed. We\n",
- " * want to control all of the cursor setting manually through\n",
- " * the 'cursor' event from matplotlib */\n",
- " event.preventDefault()\n",
- " return fig.mouse_event(event, name);\n",
- " };\n",
- " } else {\n",
- " return function (event) {\n",
- " return fig.mouse_event(event, name);\n",
- " };\n",
- " }\n",
- " }\n",
- "\n",
- " canvas_div.addEventListener(\n",
- " 'mousedown',\n",
- " on_mouse_event_closure('button_press')\n",
- " );\n",
- " canvas_div.addEventListener(\n",
- " 'mouseup',\n",
- " on_mouse_event_closure('button_release')\n",
- " );\n",
- " canvas_div.addEventListener(\n",
- " 'dblclick',\n",
- " on_mouse_event_closure('dblclick')\n",
- " );\n",
- " // Throttle sequential mouse events to 1 every 20ms.\n",
- " canvas_div.addEventListener(\n",
- " 'mousemove',\n",
- " on_mouse_event_closure('motion_notify')\n",
- " );\n",
- "\n",
- " canvas_div.addEventListener(\n",
- " 'mouseenter',\n",
- " on_mouse_event_closure('figure_enter')\n",
- " );\n",
- " canvas_div.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",
- " canvas_div.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.canvas_div.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",
- "\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",
- " if (name === 'button_press') {\n",
- " this.canvas.focus();\n",
- " this.canvas_div.focus();\n",
- " }\n",
- "\n",
- " // from https://stackoverflow.com/q/1114465\n",
- " var boundingRect = this.canvas.getBoundingClientRect();\n",
- " var x = (event.clientX - boundingRect.left) * this.ratio;\n",
- " var y = (event.clientY - boundingRect.top) * 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",
- " 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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n",
- "\n",
- "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"<div id='\" + id + \"'></div>\");\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",
- " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\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",
- " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\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 = '<i class=\"fa ' + image + ' fa-lg\"></i>';\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 = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\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": [
- "<IPython.core.display.Javascript object>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "text/html": [
- "<img src=\"data:image/png;base64,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\" width=\"640\">"
- ],
- "text/plain": [
- "<IPython.core.display.HTML object>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "8.196780784986913 za 70 različnih odjemalcev\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"s = monotonic()\n",
"def uas(normalize=True, minrepr=0):\n",
@@ -1110,1047 +138,12 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
"id": "52de34d6",
"metadata": {
"scrolled": true
},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "0.2505375409964472 s 41\n"
- ]
- },
- {
- "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('tabindex', '0');\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",
- " 'z-index: 2;'\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(\n",
- " 'style',\n",
- " 'box-sizing: content-box;' +\n",
- " 'pointer-events: none;' +\n",
- " 'position: relative;' +\n",
- " 'z-index: 0;'\n",
- " );\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;' +\n",
- " 'left: 0;' +\n",
- " 'pointer-events: none;' +\n",
- " 'position: absolute;' +\n",
- " 'top: 0;' +\n",
- " '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",
- " /* This rescales the canvas back to display pixels, so that it\n",
- " * appears correct on HiDPI screens. */\n",
- " canvas.style.width = width + 'px';\n",
- " canvas.style.height = height + 'px';\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",
- " /* User Agent sniffing is bad, but WebKit is busted:\n",
- " * https://bugs.webkit.org/show_bug.cgi?id=144526\n",
- " * https://bugs.webkit.org/show_bug.cgi?id=181818\n",
- " * The worst that happens here is that they get an extra browser\n",
- " * selection when dragging, if this check fails to catch them.\n",
- " */\n",
- " var UA = navigator.userAgent;\n",
- " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n",
- " if(isWebKit) {\n",
- " return function (event) {\n",
- " /* This prevents the web browser from automatically changing to\n",
- " * the text insertion cursor when the button is pressed. We\n",
- " * want to control all of the cursor setting manually through\n",
- " * the 'cursor' event from matplotlib */\n",
- " event.preventDefault()\n",
- " return fig.mouse_event(event, name);\n",
- " };\n",
- " } else {\n",
- " return function (event) {\n",
- " return fig.mouse_event(event, name);\n",
- " };\n",
- " }\n",
- " }\n",
- "\n",
- " canvas_div.addEventListener(\n",
- " 'mousedown',\n",
- " on_mouse_event_closure('button_press')\n",
- " );\n",
- " canvas_div.addEventListener(\n",
- " 'mouseup',\n",
- " on_mouse_event_closure('button_release')\n",
- " );\n",
- " canvas_div.addEventListener(\n",
- " 'dblclick',\n",
- " on_mouse_event_closure('dblclick')\n",
- " );\n",
- " // Throttle sequential mouse events to 1 every 20ms.\n",
- " canvas_div.addEventListener(\n",
- " 'mousemove',\n",
- " on_mouse_event_closure('motion_notify')\n",
- " );\n",
- "\n",
- " canvas_div.addEventListener(\n",
- " 'mouseenter',\n",
- " on_mouse_event_closure('figure_enter')\n",
- " );\n",
- " canvas_div.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",
- " canvas_div.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.canvas_div.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",
- "\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",
- " if (name === 'button_press') {\n",
- " this.canvas.focus();\n",
- " this.canvas_div.focus();\n",
- " }\n",
- "\n",
- " // from https://stackoverflow.com/q/1114465\n",
- " var boundingRect = this.canvas.getBoundingClientRect();\n",
- " var x = (event.clientX - boundingRect.left) * this.ratio;\n",
- " var y = (event.clientY - boundingRect.top) * 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",
- " 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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n",
- "\n",
- "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"<div id='\" + id + \"'></div>\");\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",
- " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\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",
- " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\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 = '<i class=\"fa ' + image + ' fa-lg\"></i>';\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 = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\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": [
- "<IPython.core.display.Javascript object>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "text/html": [
- "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydCbyNdbv+f6SUSL1FFHWSjKnzapAiJXOkhNKMRpQmTcIpiVR6KWM0i5R65VXR4I1KpkrGaDhJpGg4If/Q/u/vffzWeSxr7fXseQ3X/fnsT1nrGa/n9+x9fe77vq67RFZ2OIUQEAJCQAgIASEgBIRAxiBQQgQwY561blQICAEhIASEgBAQAoaACKAWghAQAkJACAgBISAEMgwBEcAMe+C6XSEgBISAEBACQkAIiABqDQgBISAEhIAQEAJCIMMQEAHMsAeu2xUCQkAICAEhIASEgAig1oAQEAJCQAgIASEgBDIMARHADHvgul0hIASEgBAQAkJACIgAag0IASEgBISAEBACQiDDEBABzLAHrtsVAkJACAgBISAEhIAIoNaAEBACQkAICAEhIAQyDAERwAx74LpdISAEhIAQEAJCQAiIAGoNCAEhIASEgBAQAkIgwxAQAcywB67bFQJCQAgIASEgBISACKDWgBAQAkJACAgBISAEMgwBEcAMe+C6XSEgBISAEBACQkAIiABqDQgBISAEhIAQEAJCIMMQEAHMsAeu2xUCQkAICAEhIASEgAig1oAQEAJCQAgIASEgBDIMARHADHvgul0hIASEgBAQAkJACIgAag0IASEgBISAEBACQiDDEBABzLAHrtsVAkJACAgBISAEhIAIoNaAEBACQkAICAEhIAQyDAERwAx74LpdISAEhIAQEAJCQAiIAGoNCAEhIASEgBAQAkIgwxAQAcywB67bFQJCQAgIASEgBISACKDWgBAQAkJACAgBISAEMgwBEcAMe+C6XSEgBISAEBACQkAIiABqDQgBISAEhIAQEAJCIMMQEAHMsAeu2xUCQkAICAEhIASEgAig1oAQEAJCQAgIASEgBDIMARHADHvgul0hIASEgBAQAkJACIgAag0IASEgBISAEBACQiDDEBABzLAHrtsVAkJACAgBISAEhIAIoNaAEBACQkAICAEhIAQyDAERwAx74LpdISAEhIAQEAJCQAiIAGoNCAEhIASEgBAQAkIgwxAQAcywB67bFQJCQAgIASEgBISACKDWgBAQAkJACAgBISAEMgwBEcAMe+C6XSEgBISAEBACQkAIiABqDQgBISAEhIAQEAJCIMMQEAHMsAeu2xUCQkAICAEhIASEgAig1oAQEAJCQAgIASEgBDIMARHADHvgul0hIASEgBAQAkJACIgAag0IASEgBISAEBACQiDDEBABzLAHrtsVAkJACAgBISAEhIAIoNaAEBACQkAICAEhIAQyDAERwAx74LpdISAEhIAQEAJCQAiIAGoNCAEhIASEgBAQAkIgwxAQAcywB67bFQJCQAgIASEgBISACKDWgBAQAkJACAgBISAEMgwBEcAMe+C6XSEgBISAEBACQkAIiABqDQgBISAEhIAQEAJCIMMQEAHMsAeu2xUCQkAICAEhIASEgAig1oAQEAJCQAgIASEgBDIMARHADHvgul0hIASEgBAQAkJACIgAag0IASEgBISAEBACQiDDEBABzMcD/+uvv9z69etduXLlXIkSJfJxJO0qBISAEBACQkAIFBUCWVlZ7vfff3dHHHGEK1myZFGdNqnOIwKYj8exbt06V7Vq1XwcQbsKASEgBISAEBACxYXAd99956pUqVJcpy/W84oA5gP+3377zR188MGOBXTQQQfl40jaVQgIASEgBISAECgqBP7nf/7HEji//vqrK1++fFGdNqnOIwKYj8fBAmLhQARFAPMBpHYVAkJACAgBIVCECOjvt3MigPlYcFpA+QBPuwoBISAEhIAQKCYE9PdbBDBfS08LKF/waWchIASEgBAQAsWCgP5+iwDma+FpAeULPu0sBISAEBACQqBYENDfbxHAfC08LaB8waedhYAQEAJCQAgUCwL6+y0CmK+FpwWUL/i0sxAQAkJACAiBYkFAf79FAPO18LSA8gWfdhYCQkAICAEhUCwI6O+3CGC+Fp4WUL7g085CQAgIASEgBIoFAf39FgHM18LTAsoXfNpZCAgBISAEhECxIKC/3yKA+Vp4WkD5gk87CwEhIASEgBAoFgT091sEMF8LTwsoX/BpZyEgBISAEBACxYKA/n6LAOZr4WkB5Qs+7SwEhIAQEAJCoFgQ0N/vIiaAJUqUcK+99po7//zzi+WBB0/6X//1X+6f//yn++yzz/J8LVpAeYZOOwoBISAEhIAQKDYE9Pc7QwhgLOIpAlhs751OLASEgBAQAkKgWBEQARQBLJAMYNWbp7iSpcsU62LWyYWAEBACQkAIpBsC/z3k3EK5JRHAbAJYoUKFrO3bt7uTTz7ZPfbYY+7EE0+MgP3666+7+++/3y1btsyVLVvWnXnmme7VV1+17//880937733uokTJ7pff/3VHX/88e6hhx5yZ511VtyHFZ2J+/77792tt97qZs2a5UqWLOkaNWrkhg8f7v7jP/7DjnHVVVfZsfn80UcftXNefPHF7h//+Ifbd999bZsNGza4q6++2r333nuuUqVKbtCgQe6ee+5xN998s/1wrG+//TZyTUcffbT77//+b+czgLfddpvr16+f++WXX1zr1q3dk08+6cqVKxdqwfkFJAIYCi5tJASEgBAQAkIgVwiIAOYKrlxtXGLhwoVZ5cuXd2PHjnXPPPOMW716tfvb3/7mZsyY4dq3b+/69u1rpAvyxWeQK+LSSy81IjVkyBB3xBFHWG8fhHDp0qXuuOOOi3kRQQK4bds295//+Z+ucePGRtRKlSrlHnjgAbd48WL3+eefu/32288IIMe95JJLXO/evd2XX37pLrroIiOA11xzjZ2jefPmbtOmTW7MmDFGCiGUCxYscA8++KAd96effnIVK1Z0Tz/9tGvVqpXbZ599XDbpNQIIqWzRooW77777jAB27tzZdevWzUhkmBABDIOSthECQkAICAEhkDcERADzhluYvUpkZYffsHr16u6OO+5w1157rTv99NNdtWrV3AsvvLDXcb766isjeevWrTPy56NZs2bu1FNPNfIVK4IE8KmnnnJDhw51K1eudHxOQDIPPvhgE2dAzCCA//73vx3ng7gRkDSyhZMnT3arVq1ytWvXdtkk1jKYBCSRayObCQEk4vUAPvzww+6HH36IZPy49zlz5riPP/445vX/v//3/xw/PiCAVatWdcoAhllq2kYICAEhIASEQO4QEAHMHV652brEgQceGCGAf/zxh7v99tutlFumTBk3cuRI17Vr172O9/LLLxsRy953j+8gRx06dHAvvfRSQgLYs2dPyzruv//+e2xLZpDz3nDDDUYAyeCRefRBJpAsIyXfadOmuY4dOxopgxT6IIPZv3//hASQ+1i+fHlkP0jj448/7r7++uuY10/WkGxhdIgA5mbJaVshIASEgBAQAuEQEAEMh1NetiqxZs2aCAHkAGTgDjvsMHfooYe6Rx55JCYBhOBRAoY8+cycPzm9gvTixYpgJg6C98knn1gPYXRQoqUs7XsAyQj6IKuHdQuZQT7v1KnTXgTwkEMOcQMGDEhIAKNtYCgt80NpO1Yo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DNv07t3bJplA6Dj/jh07zL/QE0DOSZ/hqFGjbOQdZef69eu7e+65x+YZsz0Zw5xCGcCkep+T5mKUAUyaR6ELEQJCQAjEREAEsAgIYGGuPUjlAw88YBk+xte1adPGppcce+yx5i8YDEgiZtRMOAkGpWJIIXODX3rpJSOEZBlHjx7tunbtKgJYmA8wTY8tApimD1a3JQSEQNogIAKY4gRw6tSpRvTWrFljRBCxCKPfPvvsM7d48WJT+lJuRnSy33772U/37t2t3Pv000/bQsZrkEknEECIICVhSsWIQY444ggRwLR53YvuRkQAiw5rnUkICAEhkBcERABTnAD6h06PIaPfIIIVK1a0Ui+lX0jdp59+6lAO+4hlEu3nBdMnSOk4XsgIOi+vWebtIwKYec9cdywEhEBqISACmOIE8KuvvjIBCCVbxsL99ddfZiTNWLk6derkmgB+8MEHDrVwvJARdGq94MV1tSKAxYW8zisEhIAQCIeACGCKE0BIHp59WMpQroUAou5F4EHWL7cZwOhsYfQyUgYw3IuV6VuJAGb6CtD9CwEhkOwIiACmMAHE5BkbGLJ9iD8IMniNGzc2Akj/HybPixYtcieddFJkLV577bVuw4YNbvr06ZHPfAk4EQGMXtBSASf7K1481ycCWDy466xCQAgIgbAIiACmMAFkju8555zjOnfu7AYNGuTWrl3r7rrrLseYNwhg27Zt3UEHHeT69u3rmPG7//77mw3Ngw8+6MaOHWv+gYceeqh99v3338fMFiZaSFpAiRDS90JACAgBISAEkg8B/f1OYQLoZwTXrFnTlL/8F98/rF68r+D48ePd/fffbwSPzCD7/PTTT+7SSy918+bNc1u2bLGJId4GJq8ZwN9++83IpkIICAEhIASEgBBIfgREALMJ4OGHH5510003mQEywZxcyNK//vUv16JFi72eIhk2toUsYZZMrx3Gzpgo+8CahSkblFnJ1B199NFm3lyhQgXLxnGME044wb3wwgvm2UdAwr799tu9zsc0j1jhCaCfEfzHH3+4jh07mjk0Y+Kwd8HqhRF033zzjR2f++zRo4cdrmnTpiYUeeKJJyKHZ196CRkrx/eJQiXgRAil9vcq5ab289PVCwEhIATiISACmE0As3vosuilYwxarVq1zAPv3HPPtdFpsQJCh2+e76vDNw+yiAVLuXLlbBcI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LwIiIAIiIAL5R0Dv7wIXgLmeUgoB5/oO6PwiIAIiIAIikDoBCUAJwNRnTcQeEoAZ4dPOIiACIiACIpATAhKAEoApTTxVAaeESxuLgAiIgAiIQF4SkACUAExpYqoPYEq4tLEIiIAIiIAI5CUBCUAJwJQmpjyAKeHSxiIgAiIgAiKQlwQkACUAM5qYygHMCJ92FgEREAEREIGcEJAAzJIAJDT63HPP2Zw5c0LfSNq10HKFHn2FappAhXrnNG4REAEREIGyTEDv7ywJwNWrVxvh0erVq4eeTytXrrSKFSvaFltsEXqfZBumI0STHTPR95pAmdDTviIgAiIgAiKQGwJ6f2coANeuXWtr1qyxChUq5OYORp01WwLw77//dnGazIo7BPzljUcnG4K+FwEREAEREAERSJGABGAMAYgnj5UxnnjiCQPQvvvu60uoNWvWzN566y079NBD7eWXX7bLL7/cWEXjlVdesSlTpqwXAmbN3d69e9vDDz/sq2t07drVli1bZiyZRqgYiw4Bb7/99nbuuefa4sWLbfz48Va1alW74oor/LPA+vfv76t8fPvtt7bNNtvYqaeeaoMGDXKx9uCDD9pZZ5213hR44IEH7Mwzz/Rl4nr27GmTJ0+28uXL25FHHmm333671apVy7cPhCOrilx33XX25ZdfurAtV65cwiklAZjiE6fNRUAEREAERCAPCEgAxhCAF110kT311FM2ZswY22677Wzo0KE2ceJEF2YIPgRgkyZNbPjw4cZyaVtttZWLqcgcwOuvv95Gjhzpx2ANXpZiY0k29k0kAH/99VcbPHiwHXHEET4GROb8+fNtt9128+mCOGMZtzp16tjHH39s3bp1c6HZr18/++OPP+zKK690ccoScRhr+26yySbWtGlTq1y5sucbIk67d+/uoWcEbSAAuZ4WLVrYDTfc4KK1cePGGwjAkq4ClgcwD35LaAgiIAIiIAKljoAEYJQA/O2339zzhjftlFNO8RtOOBTv3MUXX+xewEDEtWvXrmhCRIde8c717dvXfzC8aYjFvffeO6EAbNmypT3yyCO+D+FljnPNNdfY+eefH3PyDRs2zMaNG2czZ84sEnLRxSivvfaatW3b1r744gurX7++b7dgwQJr2LChffDBB35NjH/IkCG2dOlS23rrreNO9JLuAygBWOp+5+iCREAEREAE8oCABGCUAMTDt+eee3oIFO9fYB06dHBheMYZZ7gAJARbt27dmAKQMC9eQcLCBx98cNE2HTt2tH///TehAOzRo4eHnwNjLJ06dfIwL4ZXEC8e3kgKT/DmValSxZYvXx5XAN52220ewkYARhrXg2eSa0LYjR071hYtWpRwWsoDmAdPrYYgAiIgAiIgAhkSkACMEoAfffSRt2b56quvbNttty3C2759e6/wPf30010A/vzzzy7yAov0AAYC8O233zY8epEiEq9eohAwXkZ+AmMsnJvjT58+3UO0eATbtGnj4V3yFEeMGGGrVq2KKwARefx8/vnn602XIHTNNaVbPKIcwAyfQO0uAiIgAiIgAjkgIAEYIwRcrVo1o3giMgS8ww47uDCjICSZAOQ+ErrFk9enTx+/rYSAd9ppJxeX6QpAhN6dd95pS5YsKZoqFJfgFQwEIGHcxx9/3PMDA0sUAp4xY4ZfkwRgDp4+nVIEREAEREAEckRAAjBGEQhCjyrc++67z72AQREIwgsPYRgBSBEIYVeOQQEHRSLk9lHAQRUvFqsKOJEHcMKECXb88cf7ccjbmzRpknsDEZeBAKTQhKrhqVOnWr169bzQY+ONN/YikM0333y9IhD+jWCkICSoUG7QoEHRVKRS+MYbb0w4NTWBcvTk6rQiIAIiIAIikAEBvb9jCMA///zTq2rxpFGVG6sNTKIQMPeD3LxLLrmkqA0MoowQLNW1HDcdAcg+jOv+++/3ptNHH320NW/e3L13gQDkc1rD0O6Fz5K1gfnwww89tIxFFo+QAzlgwAAPMScyhYAzePq0qwiIgAiIgAjkiIAEYIaNoMPeN4o/aAdz4oknepuXfDFaxiAAEZGRJgGYL3dI4xABERABERCB7BOQACwmAUgRyauvvmqHHHKIe+tGjRrl3jhCyAjBfLFUBaCqgPPlzmkcIiACIiACIpA+AQnAYhKA33zzjXXu3NnmzZvn/fwaNWrk+XSRbWHSv23Z2zNVAag+gNljryOJgAiIgAiIQK4ISAAWkwDM1Q1N9bypCkB5AFMlrO1FQAREQAREIP8ISABKACoHMP+eS41IBERABERABIqVgARgMQvAyFYvwXJykY2ei/Xuhjh4qh7A6EOqCjgEZG0iAiIgAiIgAnlGQAKwBAXgjz/+aJUrV7bNNtssb6ZBtgQgq5+wJJ1MBERABERABEQg/wlIAJagAMzH6ZAtAVj/4ietfKXsC9svbzw6H7FpTCIgAiIgAiJQ0AQkAEtQAEaHgGnUTGNnVvjAg7bzzjt7pfAxxxzjk2ratGnejJnl2mrUqGEdOnSwG264wb2IGMejwfTixYt95ZKqVavaFVdc4Z9hf/31l/Xu3duefvppX7uY5enOO+88GzhwoH/POalUZs1iGlQHDa/33HNPUx/Agn6uNXgREAEREAERSEhAAjBHApDG0AcddJCvNMKScawTvGDBAhdibdu29bV8DzzwQG8azYofhI8vvPBCQ5zRTzAQgOzPNkcccYSvCXz55Zfb/Pnzffm54cOH22233WZjx471Je1oTcPPySef7K1pWrZs6SuWNGnSxNctHj16tD344IP22WefGRNDK4Hot4cIiIAIiIAIlE4CEoA5EoA0iUboffLJJ7brrrtuMLvOOOMM23TTTV2UBcb6vjSW/u2332yTTTZxDyAijrWBMUQdXj7WBz7//POtV69eLgZff/11K1eu3HrneOONN9yjOHHiROvTp0/Rd/QtrFWrlm299dbWpk0bY03jSFMbmNL5i0BXJQIiIAIiULYISADmSAAOHStUpAoAACAASURBVDrU7rjjDmPFkFjWsGFDD+1WrFix6GsE3u+//+6eQlYTQQD26NHDvXeB4SHs1KmTDRo0yGbPnm2tW7e26tWr25FHHumhZTyF2LBhw9zDh8iMtD/++MP69u1rN910U8xxqRF02foFoasVAREQAREonQQkAHMkAG+//XYP0cYTgAg8xBtevGgjnLvxxhu7AKSlTGRbmb322svat29ftLYvN/ill15yLyB5gocffriHihF4jOGtt97a4PhbbbWV5xzGMnkAS+cvAl2VCIiACIhA2SIgAZgjAThlyhQ77LDD4oaATz31VFu2bJlNnjw57owMIwAjd37llVfcE7hixQqbNWuWh6DxMnKcdE19ANMlp/1EQAREQAREIHcEJABzJAC55Yceeqj99NNPNnLkSK8ApoL3vffes88//9zmzp1rzZs3t7POOsu6devmlb/kC7722mvuucOSCUCKS2rXrm14BcuXL2+EnSdNmmRLly71nEDWJaaIBG9ggwYN7LvvvrMXX3zRPYhUBIcxTaAwlLSNCIiACIiACOQXAb2/cygAV65c6fl2FGJQ2EEjZYQeAhCj/QtVvYhC8v+oFD7p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URYIrF271pfsGzBggA0aNMhGjRpl++23XxaOHP8QLAV48cUX26pVq3yjq6++2p577jmbM2dOsZ432cGDpat+/vln22qrrZJtHur7XF5buXLl7Nlnn7X27dvHHOv222/v94EfLPrfoS5w3UZnnXWWNW/e3N5880074ogj7Oyzzw67a7Fvl+41FcfA/u///s/22msvu+WWW9I+fDrH+PTTT+3MM8/052u33XbL+XOW9sVrRxFIk4AEYJrgtFvpJ7Bo0SLbZ5993Itz4403Fl0wLw1EGuIsm/bHH3+4t6hmzZp5JQD/+usvW7lypdWqVcsQT9mw1atX23//+1+rXr26H664mMYaa6oC8Mcff7TKlSvbZpttltKlM0eaNGlie+yxh7388ssp7VvcG+eTAGRuVaxY0bbYYou0LzudY5x00kn2008/2f3332+bb7550VxMexDaUQQKjIAEYIHdMA039wRKSqzk0ktW0pRLiinXlaoALGkWJXG+fBCA/GGx8cYbl8TlxjzHvvvua0cffbRdc801ORuDTiwCuSQgAZhL+jp33hJ46qmn/MWwePFi9/zsvffeNmHCBBs2bNgGLwxCfISgli5dar1797ZXX33Vypcvby1atLBbb73VQ4ivvPKKtWvXzpYtW7ZeGJW8sI8++simTJliyULA//77r1133XV2zz33GF6p3Xff3T2TRx55ZFyOjKtRo0b+PTlpG220kV1wwQU2ePDgIm8eod2LLrrInn/+effKHXLIIXbbbbfZLrvs4vtFh4BXrFhhF154ob3zzjvuGdxpp53ssssu83xJbPTo0XbttdfaN9984xwCO+6446xq1ar20EMPrRfeRuhGv4SzxTQWmGgByFjvuOMOv0eEIhOFgL/88kvbYYcd7MMPP/RtMTx9XFcwZj6bP3++9evXzxmRTsC23F9YkU8KL47x999/+3c333yze5tjWZi5E2s/uOLd+uGHH9y7dfzxx/t9xaKv8euvv7aePXva5MmT/Z4xp26//Xb3+i5cuNBDpJ988on/N7CRI0f68ciXZW6ee+659sYbb/gc33bbba179+4+rwILRP7+++/vx0b8wTM6fBtLoJN6QIiYY8Sy6GNwfYyH53f8+PF+f6644gr/DIv2ZF911VU+Jz/++GMf83vvvefPfadOnYzrxEMoE4HSRkACsLTdUV1PxgS+//57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\" width=\"640\">"
- ],
- "text/plain": [
- "<IPython.core.display.HTML object>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "3 [1, '', '93f549c401bebe4f86ef23626e0fed3d06183b02']\n",
- "5555555 [1, '555555555555555555', '93f549c401bebe4f86ef23626e0fed3d06183b02']\n",
- "name.utf8 [1, 'Connections', 'a23296ce90328791cb6974cf6f6306da4dd89735']\n",
- "unique_torrent [1, 1, '2c3ea79de0771079e41fc25f4cabf23e11041829']\n",
- "www.baidu.com [1, 'www.baidu.com', '43b238596c66575e7dfcd4d5b1d0fadb6c393adc']\n",
- "entropy [1, 1460043970, '0635e6c7d348c2603501e9fa53e4cf07f9e31b5e']\n",
- "license [1, OrderedDict([(b'creative-commons', OrderedDict([(b'attributionAuthor', b'Dave Doobie Aaron'), (b'attributionTitle', b'Doobie'), (b'attributionUrl', b'http://fb.com/doobiebrooklyn'), (b'licenseUrl', b'http://creativecommons.org/licenses/by-nc/4.0/')]))]), '1d670c41fd340c8ee280157400744402740fc1fd']\n",
- "还 [1, '百度', '647e1210953d6080f714f0f8dabffe6ee9852800']\n",
- "originator [1, b'0\\x82\\x03:0\\x82\\x02\"\\x02\\x01\\x010\\r\\x06\\t*\\x86H\\x86\\xf7\\r\\x01\\x01\\x05\\x05\\x000L1\\x0b0\\t\\x06\\x03U\\x04\\x06\\x13\\x02US1\\x0b0\\t\\x06\\x03U\\x04\\x08\\x13\\x02CA1\\x170\\x15\\x06\\x03U\\x04\\n\\x13\\x0eBitTorrent Inc1\\x170\\x15\\x06\\x03U\\x04\\x03\\x13\\x0ecom.bittorrent0\\x1e\\x17\\r140520235304Z\\x17\\r160509235304Z0z1\\x0b0\\t\\x06\\x03U\\x04\\x06\\x13\\x02US1\\x0b0\\t\\x06\\x03U\\x04\\x08\\x0c\\x02CA1\\x170\\x15\\x06\\x03U\\x04\\n\\x0c\\x0eBitTorrent Inc1\\x1f0\\x1d\\x06\\x03U\\x04\\x03\\x0c\\x16com.bittorrent.bundles1$0\"\\x06\\t*\\x86H\\x86\\xf7\\r\\x01\\t\\x01\\x16\\x15neteng@bittorrent.com0\\x82\\x01\"0\\r\\x06\\t*\\x86H\\x86\\xf7\\r\\x01\\x01\\x01\\x05\\x00\\x03\\x82\\x01\\x0f\\x000\\x82\\x01\\n\\x02\\x82\\x01\\x01\\x00\\xdc\\x88\\x0ePoR--\\xadlr\\xdf\\xdb*\\xf7u\\xb2\\xac\\xe2-m\\xb0y\\xc5K\\x0f\\x84\\xaf\\xedj\\xe9\\xad\\x88:\\x00\\xe8VK\\xef\\xce\\xf1\\r\\x83\\xb6\\x0c\\xb9n\\xdf\\xc2X\\xae,\\xbdOf\\xb2j*l~\\xaeO\\xc6V\\x81\\x04\\x03\\x11R\\x12\\x03t\\x02\\xda\\xc7\\x1d\\xb1\\x1b\\xe8\\xed\\x88Z\\xcc|\\xb5\\xc0IZuY\\x1b\\x9c\\x93\\xde\\xa1\\xe1\\xadFR\\xc6\\x1d\\xbd\\x80\\xf6\\xc1zV\\xa2\\x8c\\xa2\\xd90\\x06\\xe1.\\xc2\\xc3e\\x15\\xfc,5ki\\xa8\\x87i\\xbe[\\xb4`\\xc9-\\x81\\x81w\\x1d\\x811\\xb4y\\x97\\xda\\x81L\\xe6\\xces\\x9b\\xd0\\x7f\\x9e\\x93\\xffZ/\\xe2R\\x8fIP4&=ia^\\xe9\\x9c\\xbf{\\xc3\\xce\\xf3\\x9a\\x06\\x04\\xf0I\\x11\\xfb\\xc1\\xb9U8v:\\xad87\\x9a\\xeb\\xad\\x1d\\x90\\xa7\\xeb#\\xce\\x81PPXct\\x80\\'\\x8dv,Y}|\\x1b\\xb3F\\xe1\\xeb\\x85\\xd2Y\\xe7\\x9f\\x8c\\xb1y\\xa2\\xeb\\xd2\\x9aU\\x8b\\xc2\\x05\\xf3zpQ\\xf4\\xd4\\x18$\\xc1\\xc2\\xfc{1J\\x1f\\x8c\\xa7\\x0efM,\\'\\x02\\x03\\x01\\x00\\x010\\r\\x06\\t*\\x86H\\x86\\xf7\\r\\x01\\x01\\x05\\x05\\x00\\x03\\x82\\x01\\x01\\x00\\x1e}\\xb1\\x9f\\x8e\\x07L\\xaa\\xd2\\xb5\\xe0eR\\xe9\\xfb\\x18t\\xf7rJn~\\xe5%\\xc1\\x8d\\xa1\\xa5>\\xbe#Q\\xed\\x17x\\xa4B\\x83M\\x1eg\\xef\\x1dbt\\t\\xcc\\xd7\\xca\\x10\\xb2\\xad_\\x02\\x07#\\x08g7\\xae\\xf3\"\\xc9\\xd5v:#)?e\\x98\\xd4\\xe6\\xd2@u\\x7f\\xbac\\xf7\"\\xa4]\\x81k\\xca-\\xe3\\x08\\x18\\x8e$\\xf3c\\xa0\\xd4\\xd3\\xf6**\\xf4\\xe2\\xe1W|f\\xea\\xfd\\xb7\\x12E\\xa3D\\xa2+.`\\xb3V\\x04.!H\\xeb\\xcet\\x84\\x08\\xfc\\xde\\x1c\\x85\\x1e\\xdf\\x04n2?\\x03\\xdc\\xd35\\x10S9\\xd1\\x8d\\x92\\x9c)#\\xfd8\\x97\\xe5\\x87\\x0c\\xe7\\xc7\\xcf\\x8a\\x91\\xef9H\\x83\\xecaK_e9_\\xf9\\xef\\xd3q\\x03\\x05\\x13\\xb6\\'\\x8f\\xb3\\x1c\\x03[\\x99\\xa5T\\x84I\\xcc\\xdb\\xdc^\\x05S%\\x85\\x17!\\xc6\\xaa\\xa6\\xc0\\x0f\\xff%\\xcf\\xf3\\x10]\\xc0Q\\x94]\\xbfD\\xc3\\xf9\\xb5s\\xe6\\x99\\xa2\\xa3\\xf0\\xb0#\\xa9_\\xbbze\\xe1\\xc9\\xc9\\xe8I\\xdb\\xd8\\xbe\\tB\\xa6\\xecQ\\x87\\xca\\x0c\\xe2\\x8e%\\xd8\\xcc', '058b52ccb029e60a355edcfe498e8eb44812e3f1']\n",
- " [2, 1, 'fa6fbc7d7796e49fbdf47731fe06a6e20ee74bb5']\n",
- "abc [2, 'abc', '9c8047972d058dee41bab8ab68ad5da7c24275ed']\n",
- "nnm-club_cool [4, 1, '57f6facb1bcef159b8075b578053fb4790e0c8d5']\n",
- "tracker [8, '', 'e8ca2609b174df7b5c26538fb6f96d77a367da42']\n",
- "x-amz-bucket [10, 'quranwave', '3af8e25c9eeca9402351820d8681fe0945c63cdb']\n",
- "x-amz-key [10, 'torrent/70.zip', '3af8e25c9eeca9402351820d8681fe0945c63cdb']\n",
- "attr [14, 'h', 'c9a279c4dff3b38ef806abb98515382798907654']\n",
- "unique [14, 'fbvPqZTXkKQzRJzy6LXkdIp3iJoTNe', '3a84117d98683bd4a657a37932886d206486c11e']\n",
- "comment [15, 'Torrent downloaded from torrent cache at http://torcache.net/', 'e92cd8e1ed1defad6d5211a42d2dbdf1e368b834']\n",
- "sha256 [18, b'\\xfe\\x01\\x01\\xa4\\xf5Z\\xcd\\xa4\\xd9\\t\\x7f\\x8d\\x1c\\x9d\\x1a\\x89\\xdcV\\x9e\\x92\\xd6A\\xbf\\xf9\\x81\\x9a\\xea^\\xc8\\xcfT\\xcf', '1c565cb3249a8da64dbf7a82b3ed39e637e6e239']\n",
- "creation date [55, 1400017482, '4488d559d4404875022d53c6039b0025c947ac84']\n",
- "cross_seed_entry [55, '02e940fec782a353d2e767cecde08041', 'b7c0ac4a9834c8e39f543f3f721eb90fbb58e179']\n",
- "md5sum [56, 'e27e7b621f0adbcf072e4f13d78c4fc8', 'ef0c6b03d16457e1134bc63c18d527221639da8e']\n",
- "file tree [95, OrderedDict([(b'01 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 306045), (b'pieces root', b'\\xc6\\xaa\\xb3/\\x00\\xb3\\xe8V\\xc8\\xc2\\xa7\\xdd\\xe9\\x1b\\x8c\\xe4\\x80\\x91\\xa6\\x0e\\x9c\\xfe\\x92\\x0eck<\\xca\\x02\\x9b\\xdam')]))])), (b'02 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 11369005), (b'pieces root', b'\\xd9=I\\xd6\\x8cN\\x17tch:Si\\xb1\\x12a9h1\\xf3\\x0b\\x06\\x8f\\xe5q\\xab\\xb7\\x00\\x18O\\xe2\\xac')]))])), (b'03 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 18234404), (b'pieces root', b'3\\xb4\\xf0\\xbc\\x80\\xb5\\xa2\\x14\\xc02\\xf1\\xd4\\xc9\\x95\\xae [\\x07\\x08\\xdc\\x12j\\xcdA\\xa4{\\x9f\\xe3\\xf04g\\x83')]))])), (b'04 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 8120626), (b'pieces root', b'\\xd4\\xbf$\\xadv\\xfb\\xafW\\xa01\\xcf\\xb1\\x83\\xe1\\xecW\\x90\\x01\\xcd\\xd5\\x7f\\xcc\\x02wv\\xcd\\x18\\xda\\xa3\\x00\\x1d\\xdd')]))])), (b'05 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 15192077), (b'pieces root', b'8\\xe3B\\xc5kK\\x18g9\\xaf\\x7f[\\xcf}\\x193\\x8d\\x9d\\xa3\\xdf\\x9c\\xfc\\x04\\x9a5\\x02\\xdf\\xf1\\xc3\\xbd\\xc9\\x02')]))])), (b'06 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 19926721), (b'pieces root', b'\\xb3\\xd90a!a\\x01\\x1aYr\\xf2\\x11\\xb4\\xd5\\xcc\\xe9\\xdb4G\\x8fX9ja\\xf2\\xf8\\x0c\\xb9\\xdbq\\xcdF')]))])), (b'07 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 9389134), (b'pieces root', b'k|\\x0e\\xaf\\n\\xc3&,Z\"\\x95\\xe2\\xa0(\\x83\\xa8\\x91\\x8a\\xdc\\xb3\\xf5\\xebi\\xfbR\\x9b\\xfc\\xe6G.\\xbaC')]))])), (b'08 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 11024608), (b'pieces root', b\"\\xc3,\\xd6/\\xf9F;!'5\\xdbl2\\x94\\xaf\\xf6\\n\\x86\\xc0\\x1b\\x08\\xe5\\t\\x97\\xa7\\x8b\\x04\\xb8\\x82\\xb2\\x87<\")]))])), (b'09 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 18047158), (b'pieces root', b'\\xe1&\\x0f\\x08\\xe4\\xa5|E\\x1e\\x11\\x9a\\xfe\\x9d\\xe5u\\x19\\x86S\\x0b\\x055\\x83\\xfe\\xf0.\\xfd\\xb1\\xf4\\x00\\xaf:\\xd4')]))])), (b'10 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 12329479), (b'pieces root', b'V\\xbf\\x88\\x17\\xb7\\xe3\\xa73\\xfaF-@ut.;\\xf2\\xb0R\\xe7\\xd4J*\\xa6\\xbe\\xa51*\\x8b^\\xc1\\xbd')]))])), (b'11 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 8220520), (b'pieces root', b'\\xd8\\x92bdA]r3&\\x83\\xa1J0\\xc2\\x01,\\x93\\xf6\\xd7\\x1d\\xf5;\\x12\\xfd\\xd5[\\xc9\\x86\\x98\\xa1\\x93\\xc9')]))])), (b'12 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 14647898), (b'pieces root', b\"\\x037\\xe1\\x17\\x02\\xb5\\xe89\\xd1RO\\x94\\t\\x98\\xb7\\x19:\\xbeF\\x13\\x9f\\x88\\xbc\\xbfC\\xdaE\\x82'iD\\xd2\")]))])), (b'13 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 9183082), (b'pieces root', b'\\x1c\\x88\\x18\\x03\\x0e2\\x94\\\\Y\\xb4\\xcb\\x87\\xea\\x9a\\xe9\\xfcj\\xb3z\\xa0\\x1f\"P\\x06*\\xee\\xfa/6\\xb4\\x1eO')]))])), (b'14 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 8584563), (b'pieces root', b\"\\x11\\x88\\xb1\\x80\\xb1\\x9a\\x06t'\\x80\\x15p\\xfa\\x17\\xcf\\xdej\\x93\\x82}%$\\xd49\\xf1\\x7f\\xb1\\x14\\xb1}\\xde\\xe5\")]))])), (b'15 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 8667736), (b'pieces root', b'\\xfb\\x1a\\x130JY\\xc7\\x86\\x07\\x89\\xa8\\xaa\\xc2\\x97\\x0e6(\\xe0\"\\xe7)\\xa0z\\xbb\\x98\\xf2S\\x82\\xd4\\xe1e2')]))])), (b'16 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 8380183), (b'pieces root', b'*\\xe4\\x92\\xc4\\xca.\\xd8\\xc7s\\xa0\\xe7\\x16\\x0f\\xec\\xb5\\xd4\\xc9\\xf8\\x8e,\\x1d\\xc9\\x97\\xad$\\x9d\\xa7\\\\\\x82\\x18\\x80O')]))])), (b'17 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 10952719), (b'pieces root', b'\\xc3s\\x18\\xd5\\xc97\\x19T\\x14[\\xe6\\x98\\x93\\x9b>\\xcb\\x82\\x92\\xa9rgl\\xc2\\xe5ny\\x92\\x0b&]\\xa2\\xcb')]))])), (b'18 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 18408693), (b'pieces root', b'\\xdf\\xe7<\\x94\\x97\\xa5\\x06\\t!\\xc9\\x00I\\\\\\xd9Q\\xffu.u\\xdd\\xae\\xdd\\xe4t\\x04V\\xe9\\xcb\\x84\\xd4\\x0e\\x02')]))])), (b'19 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 17103827), (b'pieces root', b'-\\xda/\\x9e\\xee\\xe50\\xbb\\x8cv\\xdc\\xf99\\xfco;rw\\x9e&\\x13\\xa3\\xd0\\x15\\xd6]\\xbc\\xe6P\\xbd\\xe5\\x95')]))])), (b'20 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 9902808), (b'pieces root', b'J\\xb3\\x7f\\xd1lq\\x8f!\\xce\\xfa\\x9b\\x03\\xb7*\\xbaT\\xfd^\\x83\\xb5\\xd1\\xe1x\\n|I?&\\x7f3\\xf6s')]))])), (b'21 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 16769039), (b'pieces root', b'\"\\xdf\\xf8\\x99&\\xd8\\x81\\xe6HO\\xe2\\xb8L\\xfe\\\\pum\\xca<\\x17\\xd6\\x93\\x9a$\\x989v\\xf3($\\xc4')]))])), (b'22 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 15115177), (b'pieces root', b'n\\xb3+H\\xe9\\xe8b[\\xe7\\xa5\\x18\\x82\\xb1\\x9d49\\xb2 \\x80\\xcb@\\x11\\x9e\\xd0\\xe0\\x10\\x1dx\\x04ki\\xa2')]))])), (b'23 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 11751439), (b'pieces root', b'\\xb8\\x96r\\x8b\\x99\\x08Lc\\xeaa\\n\\xf9m \\xd8\\xd1i\\xc9\\xeb\\xe5=\\xcc\\xbd\\x95\\x86\\x1b~\\x00U\\xa7\\xfe\\xaf')]))])), (b'24 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 10140209), (b'pieces root', b'\\x91\\xdf\\xd9\"\\x9aE1[\\xc4\\xe3;\\xb3\\x13\\x85\\xa0\\xca \\xab\\xf9\\xd6\\xfdG\\xa9\\xeb\\xd4\\xf6Z\\xb5\\xdf\\xad\\x16:')]))])), (b'25 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 9116207), (b'pieces root', b'\\x9c~\\x9c\\x08\\\\f*\\xf85\\xac\\xc8Yh\\xc6\\xdeZ\\xe4\\x85\\xf5l\\x82lc\\xa2\\t\\xdfG\\xc2Isv\\xed')]))])), (b'26 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 16717632), (b'pieces root', b'\\xb7\"1vkY\\xbe\\xcd\\xc6\\xb4Ip\\xb8\\xb1}\\x9e\\x12\\xd9\\x06\\x1d\\xa3b\\x01#\\xbf\\xe3\\xcd\\xea\\xa8\\xb2\\xfc\\xd3')]))])), (b'27 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 12950148), (b'pieces root', b'\\xe3\\x93P\\x959h\\xc1\\xfb\\xa6\\xfe\\xb3\\t\\xc9\\xf96\\xe4\\x93-s\\xd7\\x9cm\\xf6\\x15\\xc4Z\\xddZ4\\xb9\\x97\\\\')]))])), (b'28 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 15921002), (b'pieces root', b'v\\xceh\\x0e\\x9b;\\n\\xb1\\xb0\\xf4\\xf2/7\\xee\\xab\\x9c\\x1boz\\x99y\\xb4\\x1f\\xd0h\\xac\\xdf_ \\xc9\\xc7\\xd1')]))])), (b'29 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 9768641), (b'pieces root', b'\\xc9s}\\xae\\x99S\\xb8\\x83<\\xc6\\xb1\\xd8\\xf7\\xffR\\xa6\\xcbT|\\xeb\\xee\\xdeG\\xfeX*\\xe2\\xc1\\x12\\x90\\xbd\\xd8')]))])), (b'30 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 6324241), (b'pieces root', b'\\x02\\tB\\xed\\x80\\xf9T(\\xd9~\\xed\\xd3(\\xd9\\x90\\xc5\\xac\\xd6\\xc0\\xb0#\\x89O\\x1d\\xcc\\xe2i\\xaa\\xf2\\xa1=|')]))])), (b'31 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 15366368), (b'pieces root', b'm\\xc2\\x90\\x94\\x90\\xf4\\x01\\xef\\xdf\\x82\\xa6\\xc8\\xfe\\xee\\xc7\\x06*1\\xa6\\xc2\\xe1\\x8e9\\xf7\\x10\\xaa\\xf6Ra\\xc6\\x1e\\x06')]))])), (b'32 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 14097446), (b'pieces root', b\"\\xbf\\xe8\\x14\\x15\\x13\\xb1xT\\xef\\x19\\xe5Dmh\\xd48<\\x93$\\xca\\xc9\\x92\\xedX\\x01\\xb4\\xda\\xf1\\xf0\\xd7\\xdc'\")]))])), (b'33 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 8691562), (b'pieces root', b'H\\x12\\x831\\x18MfTp\\xe1!\\xb6\\xaf)3\\xb5\\xfa\\xad\\xaf\\xd6\\xd1\\x94X\\x8a\\xea\\x17\\xc2\\xbb\\xa8\\xda\\xf6\\x16')]))])), (b'34 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 18585492), (b'pieces root', b'\\xd6x\\xafd\\xfc\\xdd\\x9c,\\x95\\xdd>\\xbaE\\x03\\x11\\xbf\\xdb\\x80\\x9a\\x8b?\\x91\\xdf\\xe2o\\xa1\\x7f k3\\xf9}')]))])), (b'35 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 14333175), (b'pieces root', b'\\xe1\\x04\\xa9\\x8ah\\xa6W2\\xd5\\xb7\\xf7\\x11*\\xd0\\x82\\r\\x1b\\x11\\xafq\\\\\\x86C(\\xfa\\x99\\xb3\\xdc]\\xee\\x04\\xf0')]))])), (b'36 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 16783668), (b'pieces root', b'\\x9a\\r\\x10j\\x87Z.g\\x95I+D\\xcd,w\\x83\\xd1F\\x16\\xa7\\xd0\\\\`7\\xfbZ:3\\xa1\\x19%t')]))])), (b'37 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 19032708), (b'pieces root', b'\\x07\\xf9\\xb6\\x9cW\\xbb \\\\0\\xf6B=\\xf74\\xf9\\x1cO\\x0b\\xe6\\x93_\\xe0\\xb1O\\xf2\\x82yL\\xc8\\xdc{\\x8e')]))])), (b'38 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 14793348), (b'pieces root', b'-m\\x9b\\xa0\\x02W,!\\xe2\"Bjb\\xcc\\xe0\\x104\\xb5\\xfen\\xb8\\xed\\xfe\\xda\\xe0\\x1fZr\\x89\\xf5$\\xf6')]))])), (b'39 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 9859340), (b'pieces root', b\"G\\xedO\\x8c\\x80\\xd6\\xf3\\xa1CGP\\x13\\x03\\xc7\\x9fI\\xd7Y\\n\\xf1v\\xd8'\\xb3$9:/a\\tg\\xfa\")]))])), (b'40 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 21681312), (b'pieces root', b' W\\xcd\\xcc\\xb9<\\x11\\xbc\\x0e\\x9e\\xfcm\\x04;\\x98^\\xd8\\xb0QvA\\x1c\\x81&\\xb8\\x16\\xb0+\\x1enB\\xfd')]))])), (b'41 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 13917724), (b'pieces root', b'm\\x7f}\\xbb#\\xb9\\xaf7\\x95\\x94\\x88Y\\xfe<\\x15\\x8a\\x1c\\xa1\\xdd9\\x93nK\\x8b/\\xcchX\\x1d\\xce\\x16\\x95')]))])), (b'42 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 14964290), (b'pieces root', b'Kk]\\xbe\\xef9\\x12\\xe4\\xd4u\\xafaN\\xde\\xfbD\\x80E\\x1a#|o\\xe3\\xb4\\xdd/dvB\\xbd\\xd7u')]))])), (b'43 - King of Alchemy - Simon Archer.mp3', OrderedDict([(b'', OrderedDict([(b'length', 421404), (b'pieces root', b'XE\\xb8\\x05Ih\\x80\\xd2L$j\\xe8\\x88h\\xcd\\x1d\\xafhs\\xa8\\xdd\\xfc\\x08\\xba\\x19\\xb6\\xd4\\xc4I@`\\x92')]))])), (b'Simon Archer - King of Alchemy.m3u', OrderedDict([(b'', OrderedDict([(b'length', 6855), (b'pieces root', b'\\x8e\\x90\\x18t\\x8e\\xe8\\x8f\\x11\\x01EY\\x86\\xac\\xb8\\xa5\\x9d\\xce\\xf0\\xe6\\xf0\\x01k\\xf0\\xcfu]YN\\xf5bv\\x9e')]))]))]), '44b84847f7d829225c788e161017e484526e5259']\n",
- "sha1 [109, b'\\xbe^\\xdc\\xd8\\x99\\x98\\xf0\\xe8_\\x8d\\xcbZ\\xc7\\xd21\\t`\\xec\\x9c\\xee', 'b4bf549d9d48bce1c1e026ff451ee76069b98c00']\n",
- "collections [119, [b'org.archive.relaxingsounds'], 'ed7d4e9657cbfcde6baf89ace313ae77a1cefe91']\n",
- "meta version [298, 2, '18d35502fca02a30811e4e001809ddd4147167e6']\n",
- "filehash [314, b'\\xc9m.\\x93\\xbd\\x18fj:\\xb3${\\x9ak\\x9e\\xdbUI\\xf2\\xb5', '44af4eb9d35b94218b6fe5eb25a30b8e22fa5844']\n",
- "ed2k [399, b',\\xf0O\\x9e\\x829\\x8e\\x1b{\\xf58\\xea\\x94\\n\\xe8\\x92', '44af4eb9d35b94218b6fe5eb25a30b8e22fa5844']\n",
- "source [908, 'BT世界网 https://www.btsj6.com/', '417ef639eb95fbf68175a6a6b03076f9ee5f5744']\n",
- "file-duration [1283, [0, 0, 39097], '449a9054916600bc0a395a47c4a2421aa06ad04a']\n",
- "file-media [1283, [-1, -1, 0], '449a9054916600bc0a395a47c4a2421aa06ad04a']\n",
- "profiles [1283, [OrderedDict([(b'acodec', b'aac'), (b'height', 0), (b'vcodec', b''), (b'width', 0)])], '449a9054916600bc0a395a47c4a2421aa06ad04a']\n",
- "publisher-url.utf-8 [1766, 'http://my155.cc', '4488cffb9ad5afc1174bc96754e9887158ce03eb']\n",
- "publisher.utf-8 [1830, '小隻馬', '4488cffb9ad5afc1174bc96754e9887158ce03eb']\n",
- "publisher-url [2602, 'http://my155.cc', '4488cffb9ad5afc1174bc96754e9887158ce03eb']\n",
- "publisher [2746, '小隻馬', '4488cffb9ad5afc1174bc96754e9887158ce03eb']\n",
- "name.utf-8 [3724, '60 Assorted Magazines Collection PDF September 4 2022 Set 3', '449a9e0e7375b6b6b7f55bdd6214f034a2edd4b8']\n",
- "private [5625, 0, '449f65629260c258a999e6474f22ae00e83ee47a']\n",
- "length [15890, 5209971966, '449a38ef7e042bd2d75e8921aa02f6f244165d9d']\n",
- "name [47843, 'Big Buck Bunny', 'dd8255ecdc7ca55fb0bbf81323d87062db1f6d1c']\n",
- "piece length [47843, 262144, 'dd8255ecdc7ca55fb0bbf81323d87062db1f6d1c']\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"s = monotonic()\n",
"keys = {}\n",
@@ -2180,1859 +173,12 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": null,
"id": "fea0f2b6",
"metadata": {
"scrolled": true
},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "0.10204320191405714 s 92.3207156741843 brez ključa source, publisher, publisher-url ali comment 854 virov\n"
- ]
- },
- {
- "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('tabindex', '0');\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",
- " 'z-index: 2;'\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(\n",
- " 'style',\n",
- " 'box-sizing: content-box;' +\n",
- " 'pointer-events: none;' +\n",
- " 'position: relative;' +\n",
- " 'z-index: 0;'\n",
- " );\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;' +\n",
- " 'left: 0;' +\n",
- " 'pointer-events: none;' +\n",
- " 'position: absolute;' +\n",
- " 'top: 0;' +\n",
- " '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",
- " /* This rescales the canvas back to display pixels, so that it\n",
- " * appears correct on HiDPI screens. */\n",
- " canvas.style.width = width + 'px';\n",
- " canvas.style.height = height + 'px';\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",
- " /* User Agent sniffing is bad, but WebKit is busted:\n",
- " * https://bugs.webkit.org/show_bug.cgi?id=144526\n",
- " * https://bugs.webkit.org/show_bug.cgi?id=181818\n",
- " * The worst that happens here is that they get an extra browser\n",
- " * selection when dragging, if this check fails to catch them.\n",
- " */\n",
- " var UA = navigator.userAgent;\n",
- " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n",
- " if(isWebKit) {\n",
- " return function (event) {\n",
- " /* This prevents the web browser from automatically changing to\n",
- " * the text insertion cursor when the button is pressed. We\n",
- " * want to control all of the cursor setting manually through\n",
- " * the 'cursor' event from matplotlib */\n",
- " event.preventDefault()\n",
- " return fig.mouse_event(event, name);\n",
- " };\n",
- " } else {\n",
- " return function (event) {\n",
- " return fig.mouse_event(event, name);\n",
- " };\n",
- " }\n",
- " }\n",
- "\n",
- " canvas_div.addEventListener(\n",
- " 'mousedown',\n",
- " on_mouse_event_closure('button_press')\n",
- " );\n",
- " canvas_div.addEventListener(\n",
- " 'mouseup',\n",
- " on_mouse_event_closure('button_release')\n",
- " );\n",
- " canvas_div.addEventListener(\n",
- " 'dblclick',\n",
- " on_mouse_event_closure('dblclick')\n",
- " );\n",
- " // Throttle sequential mouse events to 1 every 20ms.\n",
- " canvas_div.addEventListener(\n",
- " 'mousemove',\n",
- " on_mouse_event_closure('motion_notify')\n",
- " );\n",
- "\n",
- " canvas_div.addEventListener(\n",
- " 'mouseenter',\n",
- " on_mouse_event_closure('figure_enter')\n",
- " );\n",
- " canvas_div.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",
- " canvas_div.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.canvas_div.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",
- "\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",
- " if (name === 'button_press') {\n",
- " this.canvas.focus();\n",
- " this.canvas_div.focus();\n",
- " }\n",
- "\n",
- " // from https://stackoverflow.com/q/1114465\n",
- " var boundingRect = this.canvas.getBoundingClientRect();\n",
- " var x = (event.clientX - boundingRect.left) * this.ratio;\n",
- " var y = (event.clientY - boundingRect.top) * 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",
- " 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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n",
- "\n",
- "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"<div id='\" + id + \"'></div>\");\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",
- " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\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",
- " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\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 = '<i class=\"fa ' + image + ' fa-lg\"></i>';\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 = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\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": [
- "<IPython.core.display.Javascript object>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "text/html": [
- "<img src=\"data:image/png;base64,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Uz4AOP3kCKxatUreffddueCCC+Szzz6T999/X84///zkHCBHggACCCDQbgQIgO2mKzmRQhdoamoyXhN48803y/e//3356U9/KkceeWSop6WvH5wxY4bs3LnT2M9tt90mv/nNb2TRokWh7teu8cwrrXbs2CG9evWyW93R50k5t8zB7rfffjJnzhw5++yzpaKiQvbff39ZuHChTJgwwdH5OF1pxIgRRh/rH12y9+u0jbDXS1rfhH2+tI9AEgQIgEnoBY4BgX0Cn376qUyaNEm+8Y1vyMyZM1tcLrnkEiOkaTgLcqmurpaqqioZMGBAogJgbW2tbN++XQYOHGgEliCWXbt2SU1NjfTt29doLixTp8eaHcQaGhpky5Yt0q9fP+nYsWObTbgNi9puaWmplJSUBBYAc//Dwek5W62X2zd+22N7BBCwFyAA2huxBgKxC0QVVtJUiYnK1GrweK3EOQ2AGqI7d+6ct3uv+81uKKgAqMFXj6eoqCj27xgHgEDaBAiAaetxzjexArNnz5Z/+7d/k5UrVxrVmokTJ8qzzz4rP/7xj42fZy9z586VqVOnyvr16+W6666TP/zhD8Yv0WOPPVb+8z//U3Ta7/e//72cddZZsnHjxlbTqN/61rdk8eLF8vrrr4vdFHBjY6P88Ic/lIceesioUB1yyCFGZfLLX/6ypaMe19ixY43P/+d//kc6dOggV199tfz7v/97SzVPp3a//e1vy29/+1ujKnf88cfLfffdJ6NGjTK2y50C3rZtm1xzzTXy5ptvGpXBAw44QL773e8a10vq8uCDD8oPfvADWbt2baswceaZZ0rv3r3lscceazW9rUE3LFMzGK3sXnbZZfLee+/JyJEjjT760pe+ZDkFrD56vtqvWh0bOnSocb6XXnppXkVU7dQrE2gnT54s//Vf/2WEPw2LZlPAP/vZz+S5554zths0aJDceeedct5555na6w/1kgAdj3qdqraplypkL7feeqvhq6HzX//1X+V///d/jYq1joP/+I//MMaqLpnxpuPixhtvlBUrVojaaP9kX3qg17/q+eqUeF1dnTEt/pOf/MSojrMggEAwAgTAYBxpBQFfAhs2bJBhw4YZv4jPOeccY1pWw85FF11ktKvh4S9/+Ys88sgjxt/79Okj9fX1xi/G4447zri+S6cONazNnz9fPvzwQyN4lZWVyY9+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\" width=\"640\">"
- ],
- "text/plain": [
- "<IPython.core.display.HTML object>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "163 \t PMEDIA\n",
- "130 \t http://tapochek.net/index.php\n",
- "122 \t 高清下载吧!\n",
- "122 \t https://FreeCourseWeb.com\n",
- "93 \t 灣搭拉咩拉\n",
- "88 \t 脫拉庫\n",
- "82 \t 第一會所新片@SIS001\n",
- "79 \t 大师兄福利网\n",
- "77 \t 2048\n",
- "75 \t 1024社區最新地址\n",
- "74 \t \n",
- "64 \t LostFilm.TV\n",
- "47 \t [https://tanhuazu.com] 探花族社区\n",
- "46 \t 2048核基地\n",
- "44 \t https://hjd.tw\n",
- "43 \t 1024核工厂\n",
- "42 \t RV原创\n",
- "41 \t 1024社區\n",
- "39 \t 小贾_KTXP\n",
- "37 \t 國產精品\n",
- "36 \t 麻豆之神\n",
- "34 \t 吃雞大神\n",
- "34 \t b48t.com\n",
- "33 \t https://crackshash.com/\n",
- "33 \t 老含及\n",
- "31 \t 欧宝\n",
- "30 \t https://rh2048.com\n",
- "27 \t 小隻馬\n",
- "27 \t 1024\n",
- "27 \t AV大平台\n",
- "26 \t @蜂鳥论坛@\n",
- "25 \t Weagogo\n",
- "25 \t 第一會所新片\n",
- "25 \t JAV Torrent 掲示板\n",
- "22 \t 发发发\n",
- "21 \t 刷刷刷\n",
- "21 \t https://1tors.ru/\n",
- "20 \t 1024工厂\n",
- "20 \t hjd.tw\n",
- "19 \t 不予\n",
- "17 \t 小樱\n",
- "17 \t (美女裸聊直播 uur68.com)\n",
- "17 \t xue0117\n",
- "15 \t 美女裸聊直播\n",
- "15 \t xp1024\n",
- "15 \t 老司机论坛\n",
- "15 \t b'\\xcf\\xeb\\xb7\\xa2\\xc8\\xb4\\xb2\\xbb\\xbb\\xe1'\n",
- "14 \t olo\n",
- "13 \t nyaa001\n",
- "13 \t b'dioguitar23(\\xb2\\xc4\\xa4\\xbb\\xa4\\xd1\\xc5]\\xa4\\xfd)\\xad\\xec\\xb3\\xd0'\n",
- "13 \t https://discord.gg/vbJ7RTn\n",
- "13 \t PiRaX @ TamilBlasters.Net\n",
- "13 \t 愛在黑夜001\n",
- "12 \t b'\\xb3\\xcc\\xb7sAV \\xa4\\xd1\\xaa\\xc5\\xbd\\xd7\\xbe\\xc2 IP'\n",
- "12 \t Zamunda.NET\n",
- "11 \t [animelayer.ru] Animelayer\n",
- "11 \t 發片小王子@18p2p\n",
- "11 \t https://infocon.org/\n",
- "11 \t 约战竞技场\n",
- "11 \t orion\n",
- "11 \t 規懶趴會\n",
- "10 \t BT世界网 https://www.btsj6.com/\n",
- "10 \t threesixtyp\n",
- "10 \t U6A6磁力搜索---U6A6.COM\n",
- "10 \t cangkong\n",
- "10 \t dioguitar23(第六天魔王)@dioguitar23.net\n",
- "10 \t 0\n",
- "10 \t BBVC\n",
- "9 \t dio88.net(第六天魔王)@最新AV海量免費播放~魔王在線\n",
- "9 \t 1024核工厂/\n",
- "9 \t 百撸社区\n",
- "8 \t Zelka.ORG\n",
- "8 \t b'\\xc1\\xf9\\xd4\\xc2\\xc1\\xaa\\xc3\\xcb'\n",
- "8 \t 百撸社区|高清资源\n",
- "8 \t dioguitar23.co(第六天魔王)@最新AV海量免費播放~魔王在線\n",
- "8 \t x\n",
- "8 \t buxxa\n",
- "7 \t [tp.m-team.cc] M-Team - TP\n",
- "7 \t PMEDIA NETWORK\n",
- "7 \t 6969bt.com\n",
- "7 \t www.dio8899.net(第六天魔王)@最新AV海量免費播放~魔王在線\n",
- "7 \t BT-btt.com\n",
- "6 \t Mp4Ba\n",
- "6 \t 性吧RV原创\n",
- "6 \t K8bet\n",
- "6 \t Burnbit\n",
- "6 \t 94i88影城-点击跳转\n",
- "6 \t hotaru\n",
- "6 \t b'\\xb7\\xf6\\xba~\\xad\\xd1\\xbc\\xd6\\xb3\\xa1 dioguitar23 \\xad\\xec\\xb3\\xd0'\n",
- "6 \t 00armand00\n",
- "6 \t 么么哒\n",
- "6 \t https://www.javhdbbs.com\n",
- "6 \t XP1024\n",
- "6 \t [https://majomparade.eu]\n",
- "6 \t 鱼香肉丝\n",
- "6 \t Hotaru\n",
- "5 \t atrrea\n",
- "5 \t rutracker.org\n",
- "5 \t olo@SIS001\n",
- "5 \t 广东雨神\n",
- "5 \t b'\\xab\\xb0\\xa5\\xab\\xad\\xb7\\xb1\\xa1~\\xc5]\\xa7\\xd9\\xad\\xec\\xb3\\xd0'\n",
- "5 \t YURASUKA\n",
- "5 \t ♥im520♥\n",
- "5 \t arsenal-fan\n",
- "5 \t [http://x-torrents.org] X-Torrents.org\n",
- "5 \t arsenal-fan@avsp2p.com\n",
- "5 \t 1stDragon\n",
- "5 \t dioguitar23(第六天魔王)@mw6.me\n",
- "5 \t 成年人的小游戏\n",
- "5 \t 99BT工厂 @ 5120911\n",
- "5 \t HiHBT 精品薈萃\n",
- "5 \t https://www.1024btgc.com\n",
- "5 \t hhd800.com\n",
- "4 \t 杏吧论坛\n",
- "4 \t zgome@18p2p\n",
- "4 \t 顶冠文化\n",
- "4 \t XIU\n",
- "4 \t b'\\x9e\\xb3\\xb4\\xee\\xc0\\xad\\xdf\\xe3\\xc0\\xad@kb978.com'\n",
- "4 \t https://downloadcursos.top/\n",
- "4 \t youiv\n",
- "4 \t yoy123\n",
- "4 \t 上善若水@www.sexinsex.net\n",
- "4 \t RZK\n",
- "4 \t Torrent downloaded from torrent cache at http://torcache.net/\n",
- "4 \t 魔王之家\n",
- "4 \t rxrj\n",
- "4 \t 杏吧\n",
- "4 \t dio66.net(第六天魔王)@最新AV海量免費播放~魔王在線\n",
- "4 \t 更多精彩!尽在99BT工厂@5120911\n",
- "4 \t xueru10405\n",
- "4 \t 1030社區---1030.ws\n",
- "4 \t www.crackshash.com\n",
- "4 \t nyaa.si\n",
- "4 \t M88(明陞)\n",
- "4 \t www.dio7777.net(第六天魔王)@最新AV海量免費播放~魔王在線\n",
- "4 \t GF@1024核工廠\n",
- "4 \t Western/HD-Jiggly\n",
- "4 \t 【RV原创】【sex8.cc】\n",
- "4 \t kenelm\n",
- "4 \t https://DesignOptimal.com\n",
- "4 \t >亞捷視圖<\n",
- "3 \t m6688.net(第六天魔王)@最新AV海量免費播放~魔王在線\n",
- "3 \t 1314\n",
- "3 \t oldman原創DVD@18p2p.com\n",
- "3 \t sogood@18p2p\n",
- "3 \t ? nike ?\n",
- "3 \t https://toonshub.xyz\n",
- "3 \t 黑色点击\n",
- "3 \t https://www.torrentdosfilmes.tv/\n",
- "3 \t 1024社区\n",
- "3 \t dioguitar23(第六天魔王)\n",
- "3 \t 嗨咻阁\n",
- "3 \t 枫雪动漫\n",
- "3 \t 【神秘巨星CI】\n",
- "3 \t dioguitar23(第六天魔王)@bbs.hotavxxx.com\n",
- "3 \t GIF出处系列\n",
- "3 \t https://www.terralibera.net/\n",
- "3 \t dioguitar23@dio66.net\n",
- "3 \t dioguitar23(第六天魔王)@hotavxxx.com\n",
- "3 \t chikan\n",
- "3 \t 神秘巨星CI\n",
- "3 \t 萌你一脸@第一会所\n",
- "3 \t 罗马教皇@草榴社区 luckjam@sexinsex.net\n",
- "3 \t uid-346380\n",
- "3 \t Download from Sajber.org/blog\n",
- "3 \t 美女裸聊约炮\n",
- "3 \t @微信订阅号专注稀有汁源\n",
- "3 \t susun=eastv\n",
- "3 \t bbvc\n",
- "3 \t 草榴社区\n",
- "3 \t rh2048.com/\n",
- "3 \t www.javhdbbs.com\n",
- "3 \t 2048核基地!!\n",
- "3 \t 衣选集团\n",
- "3 \t b'\\xc1\\xf9\\xd4\\xc2\\xcc\\xec\\xbf\\xd5'\n",
- "3 \t Gfker@1024核工廠\n",
- "3 \t b'99\\xa5\\xfd\\xa5\\xcd'\n",
- "3 \t 18p2p by_UID 1380364\n",
- "3 \t 漫之学园\n",
- "3 \t https://bbs2048.org/\n",
- "3 \t 9200\n",
- "3 \t 安西教练\n",
- "3 \t MingYSub\n",
- "3 \t 尘封追忆+色十八\n",
- "3 \t Downloaded from CracksHash.com\n",
- "3 \t https://rutor.org\n",
- "3 \t jav20s8.com/\n",
- "3 \t [http://baibako.tv] BaibaKo.TV\n",
- "2 \t MN Nambiar @ TamilBlasters.Net\n",
- "2 \t 老司机\n",
- "2 \t dioguitar23.net(第六天魔王)@最新AV海量免費播放~魔王在線\n",
- "2 \t https://media.defcon.org/\n",
- "2 \t https://sexasia.net/feed\n",
- "2 \t http://www.acgyinghua.com/\n",
- "2 \t b'\\xab\\xb0\\xa5\\xab\\xad\\xb7\\xb1\\xa1 dioguitar23 \\xad\\xec\\xb3\\xd0'\n",
- "2 \t Lucian2009@第一会所\n",
- "2 \t www.dio889.net(第六天魔王)@最新AV海量免費播放~魔王在線\n",
- "2 \t TYBBX2\n",
- "2 \t roger92402094\n",
- "2 \t https://downloadcursos.top\n",
- "2 \t lxdng1218\n",
- "2 \t 飘嫖\n",
- "2 \t 红馆-红人馆-网络红人之家\n",
- "2 \t CHANNEL NEO\n",
- "2 \t ccc32.com\n",
- "2 \t dioguitar23(第六天魔王)@dio999.com\n",
- "2 \t 注册就送39元,联系:330545486\n",
- "2 \t b'\\xb7\\xf6\\xba~\\xad\\xd1\\xbc\\xd6\\xb3\\xa1@\\xb4A\\xab\\xbd\\xa8\\xe0'\n",
- "2 \t ITELLYOU\n",
- "2 \t Aidoru-Online\n",
- "2 \t 联系TG:yyllzy,fulihuoqu\n",
- "2 \t MP4BA电影网\n",
- "2 \t 強片皇帝999\n",
- "2 \t sogclub No.2\n",
- "2 \t D2mp4\n",
- "2 \t 【U6A6.COM】_全网磁力最快更新\n",
- "2 \t mmklp@第一会所\n",
- "2 \t ssss1111@18p2p\n",
- "2 \t 感冒清@sis001\n",
- "2 \t afnami@64.78.163.55\n",
- "2 \t 1024核工厂最新地址\n",
- "2 \t 11.55\n",
- "2 \t 西門吹水\n",
- "2 \t goldpuzjying\n",
- "2 \t uid=1591117\n",
- "2 \t [http://rudub.tv] RuDub.TV\n",
- "2 \t https://to-url.com/torrent-igruha\n",
- "2 \t 蜂鸟色区\n",
- "2 \t b'\\xb3\\xc7\\xca\\xd0\\xefL\\xc7\\xe9~\\xc4\\xa7\\xbd\\xe4\\xd4\\xad\\x84\\x93'\n",
- "2 \t 百撸社区|高清影片\n",
- "2 \t [http://energy-torrent.com] Energy-Torrent\n",
- "2 \t SoushkinBoudera\n",
- "2 \t [http://bko.baibako.tv] BaibaKo.TV\n",
- "2 \t 冷月无声\n",
- "2 \t 奥利给\n",
- "2 \t b'\\xab\\xb0\\xa5\\xab\\xad\\xb7\\xb1\\xa1~\\xa4p\\xb9t\\xad\\xec\\xb3\\xd0'\n",
- "2 \t b'tanw\\xa9\\xceyk3325@www.sogclub.com'\n",
- "2 \t 3Li\n",
- "2 \t b'giogio99\\xad\\xec\\xb3\\xd0'\n",
- "2 \t buxxa=bbvc\n",
- "2 \t BradPitt\n",
- "2 \t pin0314(1470)@www.mycould.com\n",
- "2 \t b'\\xa4\\xc6\\xb0\\xa9\\xc0s@mimip2p'\n",
- "2 \t 遁去的壹\n",
- "2 \t 弄死你娃L@2018x.win\n",
- "2 \t downloadcursos.top\n",
- "2 \t KTXP_秋沫\n",
- "2 \t Domaha.tv\n",
- "2 \t 水母飄\n",
- "2 \t 月岚星辰520@第一会所\n",
- "2 \t xinnian\n",
- "2 \t kaniuniu\n",
- "2 \t dio889.net(第六天魔王)@最新AV海量免費播放~魔王在線\n",
- "2 \t 清雨\n",
- "2 \t www.loliba.info\n",
- "2 \t crazylazy\n",
- "2 \t 感冒清@sis001.com\n",
- "2 \t 淘宝天猫优惠券秒杀\n",
- "2 \t 会飞的象@第一会所\n",
- "2 \t mule_by_SpeedPluss.ORG\n",
- "2 \t bigwai\n",
- "2 \t 深深可许@第一会所\n",
- "2 \t BT伙计\n",
- "2 \t 最新地址\n",
- "2 \t judexkwok(SIS)\n",
- "2 \t ntlv0@hotmail.com\n",
- "2 \t sex8.cc\n",
- "2 \t b'\\xb7\\xf6\\xba~\\xad\\xd1\\xbc\\xd6\\xb3\\xa1~\\xaf\\xab\\xad\\xb7\\xa4p\\xa4l\\xad\\xec\\xb3\\xd0'\n",
- "2 \t Betway(必威)\n",
- "2 \t 天空树蜡香\n",
- "2 \t 更多精彩!尽在99BT工厂\n",
- "2 \t suchuanxia^@^18p2p\n",
- "1 \t gnhyc11@18p2p.com\n",
- "1 \t fyoulapk@18p2p\n",
- "1 \t 塔卡小爹賽\n",
- "1 \t HD一条街论坛\n",
- "1 \t dioguitar23原創\n",
- "1 \t b'\\xb3\\xce\\xbf\\xd5\\xd1\\xa7\\xd4\\xb0'\n",
- "1 \t cnmzlwb\n",
- "1 \t zb77@18p2p\n",
- "1 \t https://www.asmr.one/work/RJ374870\n",
- "1 \t [uid-1591117]\n",
- "1 \t 奈特羅德\n",
- "1 \t https://mega.nz/#F!DK4lCSwB!QdwaMCT3SpOxISAgnuX7nQ\n",
- "1 \t 小葫芦@www.sis001.com\n",
- "1 \t 柏林没有梦\n",
- "1 \t ls611\n",
- "1 \t qqtnt007\n",
- "1 \t 3E523E31D247_by_FDZone.ORG\n",
- "1 \t JPopsuki 2.0 626225292\n",
- "1 \t https://elamigosedition.com/\n",
- "1 \t guroemon\n",
- "1 \t lyf634041775\n",
- "1 \t 1234567890\n",
- "1 \t https://bitnova.info/\n",
- "1 \t asfile@SIS001\n",
- "1 \t b'\\xbd\\xad\\xc4\\xcf\\xb7\\xe7\\xd3\\xea'\n",
- "1 \t mikocon @ bbs.2djgame.net\n",
- "1 \t http://mm.aayun.cc\n",
- "1 \t aqcd123\n",
- "1 \t 维尼\n",
- "1 \t iii\n",
- "1 \t pornolab\n",
- "1 \t 极影字幕\n",
- "1 \t b'\\xc9\\xab\\xd6\\xd0\\xc9\\xab@ypzhq\\xd4\\xad\\xb4\\xb4'\n",
- "1 \t roger92402094(SIS)\n",
- "1 \t erest\n",
- "1 \t Baslilon=Baslilon23\n",
- "1 \t sigma\n",
- "1 \t 寂寞如漫天雪花\n",
- "1 \t C:\\Users\\pongphon\\OneDrive\\Desktop\\New folder (2)\\FC2PPV 1218169 [Odorless video] [Leaked] JULIA High image quality BEB-016 JULIA Sweaty Backroom .ts\n",
- "1 \t JPopsuki 2.0 2131292835\n",
- "1 \t 不予@暗香阁\n",
- "1 \t sogclub No.2 BY sogclub\n",
- "1 \t uid-1591117\n",
- "1 \t b'\\xba\\xda\\xc2\\xfb\\xb0\\xc5'\n",
- "1 \t 微信一夜ONS协会\n",
- "1 \t b'KUHO\\xd2\\xd5\\xca\\xf5\\xc1\\xaa\\xc3\\xcb'\n",
- "1 \t b'\\xb6\\xc0\\xa5i\\xa8\\xe0_by_FDZone.org'\n",
- "1 \t 中文字幕無水印\n",
- "1 \t http://www.wozai020.com\n",
- "1 \t sop168\n",
- "1 \t b'SP\\xa7\\xe4\\xbc\\xd6\\xa4l@\\xaa\\xe1\\xa9M\\xa9|'\n",
- "1 \t tiantianlu186@公仔箱論壇\n",
- "1 \t luckyjune\n",
- "1 \t SK`|yEsMan<sk·>\n",
- "1 \t b'@aaming2002@\\xa3\\xa2\\xb3\\xd5\\xba\\xba\\xa3\\xa2\\xc9\\xab\\xd6\\xd0\\xc9\\xab\\xa3\\xa2\\xc3\\xce\\xb9\\xab\\xd4\\xb0\\xa3\\xa2MimiP2P\\xa3\\xa2\\xa3\\xc4.\\xa3\\xc3P2P\\xa3\\xa2WaiKeungSite\\xa3\\xa2p2pZONE\\xa3\\xa2Mr.P2P\\xa3\\xa2'\n",
- "1 \t hkkane@18p2p\n",
- "1 \t www.4hu.com\n",
- "1 \t b'\\xaeL\\xaa\\xef\\xacK@99p2p'\n",
- "1 \t 夜蒅星宸@第一会所\n",
- "1 \t 【更多资源用加手机QQ-17182252050】\n",
- "1 \t jjjhn2003@18p2p\n",
- "1 \t XIEYUXIA\n",
- "1 \t b'@\\xc0\\xcb\\xb7\\xad\\xd4\\xc6@'\n",
- "1 \t yjs521\n",
- "1 \t hhbb_zcm\n",
- "1 \t twsb.co\n",
- "1 \t https://www.musicastorrent.com/\n",
- "1 \t pandafood#panda1314#gg5123 獨家首發\n",
- "1 \t 探花族\n",
- "1 \t zhoudehua200\n",
- "1 \t AV大平台 - 发布页\n",
- "1 \t b'tanw\\xa9\\xceyk3325'\n",
- "1 \t Rivera@18p2p.com\n",
- "1 \t b'\\xd7\\xcf\\xc3\\xb5\\xb9\\xe5'\n",
- "1 \t [kp.m-team.cc] M-Team - TP\n",
- "1 \t www.spankhash.com\n",
- "1 \t UID 235465@www.mimip2p.net\n",
- "1 \t 草榴社区@MianSheng\n",
- "1 \t Странник\n",
- "1 \t hgr168168\n",
- "1 \t BJ\n",
- "1 \t mecaca\n",
- "1 \t 昆仑虚之巅@草榴社區\n",
- "1 \t [欧美美@草榴社区]\n",
- "1 \t 没线的风筝\n",
- "1 \t 尼尼撸-综合网站\n",
- "1 \t 100%真人激情裸聊 www.78xo.com\n",
- "1 \t jettej\n",
- "1 \t Daddy\n",
- "1 \t diamond\n",
- "1 \t 中文片库\n",
- "1 \t https://worldmkv.com\n",
- "1 \t b'yatsingkoon@\\xa1\\xb9\\xb6q\\xb3c\\xa4\\xc0\\xa8\\xc9\\xbd\\xd7\\xbe\\xc2\\xa1\\xb9'\n",
- "1 \t 入微\n",
- "1 \t https://discord.com/invite/wweVHZd6qg\n",
- "1 \t 602@第一会所\n",
- "1 \t 3484988vikci@第一会所\n",
- "1 \t evilzy\n",
- "1 \t 化骨龍\n",
- "1 \t https://www.kobo.com/ebook/an-archdemon-s-dilemma-how-to-love-your-elf-bride-volume-13\n",
- "1 \t cqkd_czy\n",
- "1 \t 不辣de皮特\n",
- "1 \t kaito\n",
- "1 \t u3c3.com\n",
- "1 \t ☆影视帝国论坛☆\n",
- "1 \t aaa23\n",
- "1 \t hevcbay.com\n",
- "1 \t gn7650104\n",
- "1 \t 老舅电影\n",
- "1 \t 捕鼠人\n",
- "1 \t https://www.gamestorrents.nu/\n",
- "1 \t 公主殿下@第一會所\n",
- "1 \t b'\\xb8\\xb4\\xbb\\xee126'\n",
- "1 \t 微信公众号:卡其影视分享\n",
- "1 \t 百虎动画\n",
- "1 \t 425307@癡漢俱樂部\n",
- "1 \t avp2p\n",
- "1 \t GIFchuchushipin\n",
- "1 \t EndlesSea\n",
- "1 \t Tanhuazu-探花族\n",
- "1 \t 推特搞啥呢\n",
- "1 \t @K8bet.io@\n",
- "1 \t Misfits\n",
- "1 \t 黑暗虫洞\n",
- "1 \t magazinesbb.com\n",
- "1 \t b'\\xc9\\xab\\xd6\\xd0\\xc9\\xab\\xd5\\x93\\x89\\xaf@www.SIS.xxx'\n",
- "1 \t 草榴社区@z10271\n",
- "1 \t 冰封爱河\n",
- "1 \t b'[http://www.uniongang.net] \\xd4\\xe8\\xeb\\xfc\\xec\\xfb \\xee\\xf2 ELEKTRI4KA | \\xdd\\xcb\\xc5\\xca\\xd2\\xd0\\xc8\\xd7\\xca\\xc0 \\xed\\xe0 Uniongang'\n",
- "1 \t zhangqq789@第一会所\n",
- "1 \t wangye6\n",
- "1 \t ann@myfun4u.org\n",
- "1 \t kino9999@18p2p\n",
- "1 \t b'CHD\\xc1\\xaa\\xc3\\xcb'\n",
- "1 \t satu@hongfire\n",
- "1 \t polee\n",
- "1 \t GM3089@18P2P\n",
- "1 \t BT工厂 @ 5120911\n",
- "1 \t sklc-P2P101.COM\n",
- "1 \t b'\\xb0\\xcb\\xd6\\xd8\\xf7\\xec'\n",
- "1 \t b'\\xcc\\xda\\xb7\\xc9\\xd4\\xda\\xcf\\xdf'\n",
- "1 \t b'doa_o[\\xb9\\xc5\\xce\\xef\\xce\\xdd]'\n",
- "1 \t 缘聚岛\n",
- "1 \t 素人辣妹正妹報報\n",
- "1 \t b'sweetsmile@CHD\\xc1\\xaa\\xc3\\xcb'\n",
- "1 \t javtv.me\n",
- "1 \t zhaochuan99\n",
- "1 \t 四魂制作组\n",
- "1 \t 动漫花園\n",
- "1 \t View my conspiracy torrents at\n",
- "1 \t 春卅娘@18p2p\n",
- "1 \t JPopsuki 2.0 904012437\n",
- "1 \t wearebest@18P2P\n",
- "1 \t HTCdesireHD@第一會所\n",
- "1 \t shinjico\n",
- "1 \t 得得撸 www.dedelu.com\n",
- "1 \t Western&HD-Jiggly\n",
- "1 \t ningchia\n",
- "1 \t filelist.ro\n",
- "1 \t dengzhi123_by_FDZone.ORG\n",
- "1 \t b'\\xab\\xb0\\xa5\\xab\\xad\\xb7\\xb1\\xa1 dioguitar23(\\xb2\\xc4\\xa4\\xbb\\xa4\\xd1\\xc5]\\xa4\\xfd)\\xad\\xec\\xb3\\xd0'\n",
- "1 \t HZHJS\n",
- "1 \t Audible\n",
- "1 \t skyuz\n",
- "1 \t ever\n",
- "1 \t El tio WAPILLO :v\n",
- "1 \t 草莓TV\n",
- "1 \t 加菲豆@第一会所\n",
- "1 \t yaoshiqiao\n",
- "1 \t PB\n",
- "1 \t b'\\xb9\\xda\\xa4\\xbd\\xb6\\xe9\\xaeT\\xbc\\xd6\\xa4u\\xa7{@p16847'\n",
- "1 \t 54CECB5A0EA7_by_FDZone.ORG\n",
- "1 \t b'\\xc0\\xcb\\xd7\\xd3\\xd0\\xa1\\xb5\\xb6'\n",
- "1 \t rendell_by_mimip2p.net, rendellxx_by_fdzone.org, rendell@SexInSex!\n",
- "1 \t https://e-hentai.org\n",
- "1 \t jinzebin86@18p2p.com\n",
- "1 \t birdmanfocker@18p2p\n",
- "1 \t GH37DgaBef6rQJyE2nvqb5YpS\n",
- "1 \t AVdian@126.com\n",
- "1 \t 亞瑟王\n",
- "1 \t b'Bianca_Cooper_Touch99.com \\xa6\\xb3\\xa7\\xf3\\xa6h\\xa6n\\xb9\\xcf'\n",
- "1 \t wT3j6PNrC5aOcD04yJ7xRotF8\n",
- "1 \t 村花论坛\n",
- "1 \t b'\\xc4\\xfa_\\x89\\xf4\\xb9\\xab\\x88@\\x8a\\xca\\x98\\xb7\\xb9\\xa4\\xb7\\xbb'\n",
- "1 \t FISH321@18P2P\n",
- "1 \t 第一会所 sis001\n",
- "1 \t huPE@18P2P\n",
- "1 \t houlai=biaoqian\n",
- "1 \t b'qilibi@\\xc1\\xf9\\xd4\\xc2\\xc2\\x93\\xc3\\xcb'\n",
- "1 \t 天池妖尊\n",
- "1 \t sing0212000\n",
- "1 \t wandy_by_FDZone.org\n",
- "1 \t XO@kazamis\n",
- "1 \t KOOK\n",
- "1 \t HQC\n",
- "1 \t mc733\n",
- "1 \t 爱游戏\n",
- "1 \t 1158012^@^18p2p\n",
- "1 \t b'Bianca_Cooper \\xa7\\xf3\\xa6h\\xac\\xfc\\xb9\\xcf\\xa5u\\xa6bTouch99'\n",
- "1 \t xiaocuitj\n",
- "1 \t 星星不舔屄\n",
- "1 \t https://www.crnaberza.com CrnaBerza\n",
- "1 \t boby@mimip2p\n",
- "1 \t magnet360@163.com\n",
- "1 \t Japanadultvideos 論壇 <-----按此瀏覽更多\n",
- "1 \t [http://x-torrents.nu] X-Torrents.org\n",
- "1 \t euphoricer\n",
- "1 \t zlb273692399@第一会所\n",
- "1 \t 花和尚\n",
- "1 \t b'\\xb4\\xbf\\xb0\\xae\\xc9\\xe7\\xc7\\xf8/wbzt'\n",
- "1 \t 三石@第一会所\n",
- "1 \t JackyCheung@草榴社區\n",
- "1 \t b'\\xbf\\xe7\\xca\\xa1\\xbe\\xdc\\xb7\\xf1@9999999'\n",
- "1 \t 菜牙电影网\n",
- "1 \t mehappy2012\n",
- "1 \t https://www.jp.square-enix.com/music/sem/page/chrono/trigger_revival/\n",
- "1 \t Scientists used to invent telephones, airplanes, microwave ovens... now all they invent is statistics that say they should get more funding.\n",
- "1 \t RoxMarty\n",
- "1 \t rczhi@18p2p.com\n",
- "1 \t kkk8568\n",
- "1 \t kenan2763\n",
- "1 \t arthurwarlike@第一会所\n",
- "1 \t b'\\xb3\\xc7\\xca\\xd0\\xefL\\xc7\\xe9~~\\xcb\\xba\\xd2\\xb9\\xd4\\xad\\x84\\x93'\n",
- "1 \t 東方明珠=ccvvm\n",
- "1 \t 从小缺钙\n",
- "1 \t www.lupola.com\n",
- "1 \t Jackie\n",
- "1 \t ashow.cc\n",
- "1 \t 品色影院\n",
- "1 \t 8400327@草榴社區\n",
- "1 \t gamezealot@18p2p\n",
- "1 \t uhla454@第一会所\n",
- "1 \t 宅鱼\n",
- "1 \t 1024核工厂 Bt7086\n",
- "1 \t hilllxs\n",
- "1 \t 豺狼也柔情\n",
- "1 \t 99堂\n",
- "1 \t 老肥\n",
- "1 \t Chikyuji-Animes, 2006 maggle!\n",
- "1 \t chaorentwo@18p2p\n",
- "1 \t 若無其事@18p2p.com\n",
- "1 \t hhd000.com\n",
- "1 \t 掠风窃尘\n",
- "1 \t b'\\xd3\\xd5\\xbb\\xf3\\xd3\\xe9\\xc0\\xd6\\xcd\\xf8\\xb5\\xe3\\xbb\\xf7\\xbd\\xf8\\xc8\\xeb \\xa8w\\xec\\xe1\\xbf\\xa1\\xc9\\xd9\\xec\\xe1\\xa8w'\n",
- "1 \t Kura999 from WaikeungBBS\n",
- "1 \t XFSUB\n",
- "1 \t huiasd\n",
- "1 \t b'Rory @ D.C.\\xb8\\xea\\xb0T\\xa5\\xe6\\xacy\\xba\\xf4'\n",
- "1 \t https://t.me/deletetvwrestling\n",
- "1 \t dodododo\n",
- "1 \t Rambo@18p2p\n",
- "1 \t b'\\xce\\xde\\xd0\\xc4\\xce\\xde\\xb4\\xe6'\n",
- "1 \t filmplay\n",
- "1 \t avdian@126.com\n",
- "1 \t 1025\n",
- "1 \t 956828@18p2p\n",
- "1 \t 夜游神\n",
- "1 \t b'\\xb2\\xbb\\xb5\\xc3\\xb2\\xbb\\xc9\\xab'\n",
- "1 \t vbiukj\n",
- "1 \t jnd16d\n",
- "1 \t 烽火不熄\n",
- "1 \t pietro716\n",
- "1 \t Lus\n",
- "1 \t b'\\x98Y\\xd4\\xad\\xa4\\xe6\\x97@'\n",
- "1 \t 國產無碼\n",
- "1 \t b'\\xd0\\xc2\\xc7\\xd7\\xc3\\xdc\\xb0\\xae\\xc8\\xcb\\xc2\\xdb\\xcc\\xb3@\\xd6\\xc1\\xd7\\xf0\\xcc\\xec\\xc1\\xfa'\n",
- "1 \t wangzhifeng@18p2p\n",
- "1 \t dabohong_by_fdzone.org\n",
- "1 \t TODO\n",
- "1 \t b'\\xb7\\xc9\\xd3\\xb0\\xbf\\xcd\\xcd\\xf8'\n",
- "1 \t yav.me\n",
- "1 \t Torrent downloaded from torrent cache at torcache.net\n",
- "1 \t http://www.jizhang1.space/?3316427\n",
- "1 \t handsomemouse@18p2p\n",
- "1 \t 面瘫\n",
- "1 \t yyyyyuuuuu@18p2p\n",
- "1 \t 狼主@SexInSex.net\n",
- "1 \t 1394130143@第一会所\n",
- "1 \t jove\n",
- "1 \t 电骡爱好者\n",
- "1 \t westkyo@www.sis001.com\n",
- "1 \t lzmcmbj@18p2p\n",
- "1 \t dioguitar23(第六天魔王)@dioguitar23.me\n",
- "1 \t VISTOR_by_FDZone.ORG\n",
- "1 \t chris930\n",
- "1 \t [WMAN-LorD] [UHD] [4K] [2160p] [REAL4K] [TGx]\n",
- "1 \t b'A\\xab\\xac\\xa4\\xa3\\xa8}\\xc3\\xc8'\n",
- "1 \t b'\\xb8\\xfc\\xb6\\xe0\\xb8\\xfc\\xd0\\xc2\\xb5\\xe7\\xd3\\xb0\\xcf\\xc2\\xd4\\xd8\\xc7\\xeb\\xb5\\xe3\\xbb\\xf7\\xd5\\xe2\\xc0\\xef'\n",
- "1 \t destiny999@18p2p\n",
- "1 \t HOUSEKEEPER\n",
- "1 \t RV原创组\n",
- "1 \t b'\\xc3\\xe2\\xb7\\xd1\\xd4\\xda\\xcf\\xdf\\xd2\\xf4\\xc0\\xd6'\n",
- "1 \t www.1024pk.com\n",
- "1 \t 爱城\n",
- "1 \t amge50@www.sogclub.com\n",
- "1 \t OneStar\n",
- "1 \t b'Jocky123#\\xb8\\xfc\\xb6\\xe0\\xb5\\xc4\\xbe\\xab\\xb2\\xca\\xd3\\xb0\\xc6\\xac!'\n",
- "1 \t https://getcomics.info\n",
- "1 \t 点击-海量种子\n",
- "1 \t btziyuan\n",
- "1 \t [http://x-torrents.org] X-Torrents.org (ex X-Torrents.ru)\n",
- "1 \t https://www.lspback.com\n",
- "1 \t foxmoder996\n",
- "1 \t https://share.dmhy.org/topics/list/user_id/712935\n",
- "1 \t 玛尔亲王@第一会所\n",
- "1 \t rtjhuytu\n",
- "1 \t 淨空法師專集網站\n",
- "1 \t b'\\xa1\\xb6\\xbd\\xcc\\xd3\\xfd\\xca\\xd6\\xc0\\xad\\xca\\xd6\\xa1\\xb7'\n",
- "1 \t mc733+zgome\n",
- "1 \t Goddess\n",
- "1 \t NikeのB@第一会所\n",
- "1 \t b'dvt\\xb0\\xc9'\n",
- "1 \t 微博:止于影书,公众号:影遇见书,@小鱼\n",
- "1 \t free4\n",
- "1 \t 靜風@sis001\n",
- "1 \t dcsk_By_FDZone.org\n",
- "1 \t sigma@www.mimip2p.com\n",
- "1 \t 看翍荭尘\n",
- "1 \t bjiok\n",
- "1 \t lins2b\n",
- "1 \t 小馬克_by_FDZone.ORG\n",
- "1 \t FSFS555@第一会所\n",
- "1 \t flowerff\n",
- "1 \t lascruces\n",
- "1 \t ?nike?\n",
- "1 \t SEX8.CC\n",
- "1 \t b'\\xb3\\xc9\\xc8\\xcb\\xc2\\xdb\\xcc\\xb3\\xbf\\xaa\\xb7\\xc5\\xd7\\xa2\\xb2\\xe1'\n",
- "1 \t APKMAZA.CO\n",
- "1 \t 13121152@18p2p\n",
- "1 \t UID 185363@www.mimip2p.com\n",
- "1 \t b'\\xa4^\\xa4\\xa2\\xb5\\xbe@FDZone.org'\n",
- "1 \t 更多资源联系qq1273288348\n",
- "1 \t https://nyaa.si/user/mrshowoff\n",
- "1 \t https://boards.4channel.org/h/#s=hentai+upscales\n",
- "1 \t mimu@18P2P\n",
- "1 \t b'\\xd7\\xd3\\xc7\\xe9 \\xd7\\xa3\\xba\\xd8\\xc9\\xab\\xd6\\xd0\\xc9\\xab \\xcb\\xc4\\xd6\\xdc\\xc4\\xea \\xcc\\xd8\\xb1\\xf0\\xcb\\xae\\xd3\\xa1\\xd1\\xb9\\xd6\\xc6'\n",
- "1 \t 殇情\n",
- "1 \t 风来西林\n",
- "1 \t b'Nike\\xa4\\xce\\xa3\\xc2'\n",
- "1 \t [www.pttime.org] PT时间\n",
- "1 \t QxR\n",
- "1 \t sunchiua_by_P2Pzone.org\n",
- "1 \t wazx528\n",
- "1 \t popgofansub\n",
- "1 \t b'\\xc3\\xe2\\xb7\\xd1\\xb5\\xe7\\xd3\\xb0\\xcf\\xc2\\xd4\\xd8\\xbb\\xf9\\xb5\\xd8'\n",
- "1 \t gremichaem\n",
- "1 \t b'\\xd0\\xc7\\xb3\\xbd\\xd0\\xa1\\xb7\\xe7\\xa3\\xa6\\xbe\\xab\\xc9\\xf1\\xc9\\xab\\xcb\\xd8\\xa3\\xa6cookiexp\\xa3\\xc0\\xd1\\xb0\\xba\\xfc\\xc9\\xe7\\xc7\\xf8'\n",
- "1 \t sukebei.nyaa.si\n",
- "1 \t pademon18p2p\n",
- "1 \t aaamfk+zgome+bbryans\n",
- "1 \t cyxy@http://38.114.38.172/forum/\n",
- "1 \t b'\\xd3\\xd7\\xc5\\xae\\xbc\\xab\\xc6\\xb7'\n",
- "1 \t https://e-hentai.org/g/2375721/1b5e081312/\n",
- "1 \t 18P2P_dioguitar23.co(第六天魔王)@最新AV海量免費播放~魔王在線\n",
- "1 \t b'AV\\xce\\xc4\\x99n\\xa3\\xfcADULT INTEGRATED COMMUNITY'\n",
- "1 \t UID 1357210@18P2P.com\n",
- "1 \t fuckkkingou\n",
- "1 \t 闲云野鹤\n",
- "1 \t LAPUMiA.NeT\n",
- "1 \t adult_cn\n",
- "1 \t psoke\n",
- "1 \t 18p2p@liyang8926\n",
- "1 \t littlefatbee\n",
- "1 \t 秋叶TV\n",
- "1 \t msy91\n",
- "1 \t Niraya\n",
- "1 \t https://www.kobo.com/ebook/that-time-i-got-reincarnated-as-a-slime-vol-13-light-novel\n",
- "1 \t JPopsuki 2.0 941661648\n",
- "1 \t yamyedye@18P2P\n",
- "1 \t dansnow\n",
- "1 \t H2CO3\n",
- "1 \t b'\\x8e\\xf7\\x8e\\xf7@\\x88\\xc3\\x91\\xe9\\x9a\\xa0\\x8c\\xb4\\x91n'\n",
- "1 \t kamigami\n",
- "1 \t G@1024核工廠\n",
- "1 \t The Seaside Corpse\n",
- "1 \t b'\\xadw\\xbd\\xde_by_FDZone.ORG'\n",
- "1 \t fangbayern\n",
- "1 \t 君乐\n",
- "1 \t Doctor Who\n",
- "1 \t 第一流氓@18P2P\n",
- "1 \t Deviloid.net\n",
- "1 \t b'\\xc1\\xf9\\xd4\\xc2\\xc1\\xaa\\xc3\\xcb hgfhgf'\n",
- "1 \t wcer@18p2p.com\n",
- "1 \t https://www.yitarx.com\n",
- "1 \t wuchengzhou9000@www.SexInSex.net\n",
- "1 \t nwcd\n",
- "1 \t p2p_user@mimip2p\n",
- "1 \t zza@live.com\n",
- "1 \t 清风浪子@草榴社区\n",
- "1 \t http://www.zone54.com\n",
- "1 \t ssan998\n",
- "1 \t xxfhd.com\n",
- "1 \t mybmw320_by_SpeedPluss.ORG\n",
- "1 \t woaibt@1024核工厂\n",
- "1 \t b'[http://www.uniongang.tv] \\xd4\\xe8\\xeb\\xfc\\xec\\xfb \\xee\\xf2 ELEKTRI4KA | \\xdd\\xcb\\xc5\\xca\\xd2\\xd0\\xc8\\xd7\\xca\\xc0 \\xed\\xe0 Uniongang'\n",
- "1 \t hegongc163\n",
- "1 \t t66y\n",
- "1 \t cctc55\n",
- "1 \t tto@18P2P\n",
- "1 \t Antidot Team\n",
- "1 \t Torrent Galaxy\n",
- "1 \t 萤火虫IT服务全国连锁\n",
- "1 \t 葬爱@18p2p\n",
- "1 \t 贴心话\n",
- "1 \t xuerui810405\n",
- "1 \t SoulSeek\n",
- "1 \t abbt@18p2p.com\n",
- "1 \t lixuhua\n",
- "1 \t b'\\xcc\\x93\\x9fo'\n",
- "1 \t animekayo.com\n",
- "1 \t qiupianhao\n",
- "1 \t 173489627\n",
- "1 \t wak11110@18P2P\n",
- "1 \t [http://hdtracker.org] HD TRACKER\n",
- "1 \t www.eien-acg.com\n",
- "1 \t index0123\n",
- "1 \t hndwje\n",
- "1 \t http://www.meitubb.com/forum.php\n",
- "1 \t https://anidb.net/file/3082403\n",
- "1 \t 更多精彩 @ 卡卡拉\n",
- "1 \t olo@第一会所\n",
- "1 \t https://e-hentai.org/g/2255154/778b4d24e6/\n",
- "1 \t sujinding@第一会所\n",
- "1 \t MKO\n",
- "1 \t chleicool=fym0624=patpat608\n",
- "1 \t 撸二九论坛\n",
- "1 \t flybird186\n",
- "1 \t b'[http://hdclub.org] \\xd2\\xf0\\xe5\\xea\\xe5\\xf0 HDClub - \\xf1\\xea\\xe0\\xf7\\xe0\\xf2\\xfc \\xe1\\xe5\\xf1\\xef\\xeb\\xe0\\xf2\\xed\\xee \\xf4\\xe8\\xeb\\xfc\\xec\\xfb HD, \\xf1\\xea\\xe0\\xf7\\xe0\\xf2\\xfc Blu-ray \\xf4\\xe8\\xeb\\xfc\\xec\\xfb, HD DVD \\xe8 HD audio, HDTV \\xf2\\xee\\xf0\\xf0\\xe5\\xed\\xf2'\n",
- "1 \t https://www.omgyes.com\n",
- "1 \t DVD 2008\n",
- "1 \t b'[http://uniongang.tv] \\xd4\\xe8\\xeb\\xfc\\xec\\xfb \\xee\\xf2 ELEKTRI4KA | \\xdd\\xcb\\xc5\\xca\\xd2\\xd0\\xc8\\xd7\\xca\\xc0 \\xed\\xe0 Uniongang'\n",
- "1 \t b'\\xb9\\xfd\\xc5\\xab\\xd6\\xc6\\xd4\\xec\\xb2\\xa9\\xbf\\xcd'\n",
- "1 \t 3267506\n",
- "1 \t 中国电信\n",
- "1 \t 9clonely\n",
- "1 \t b'\\xd2\\xf9\\xc3\\xf1\\xcd\\xf2\\xcb\\xea'\n",
- "1 \t 幸运流星@四仔论坛\n",
- "1 \t Lista Espiritualista\n",
- "1 \t 雪光梦想\n",
- "1 \t https://exhentai.org/g/1964478/8ed0a899ca\n",
- "1 \t olo@sis001\n",
- "1 \t 3zi@第一會所\n",
- "1 \t Andy\n",
- "1 \t b'\\xb7\\xd6\\xcf\\xed'\n",
- "1 \t 24262830.\n",
- "1 \t 食色性者\n",
- "1 \t aj11@mimip2p.net\n",
- "1 \t srwH\n",
- "1 \t 鴻仔\n",
- "1 \t 校园迷糊大王\n",
- "1 \t WCG\n",
- "1 \t b'(\\xd3\\xf4\\xc3\\xc6)\\xb0\\xae\\xbf\\xb4\\xb5\\xe7\\xd3\\xb0'\n",
- "1 \t kiva@18p2p\n",
- "1 \t b'\\xbb\\xd8\\xbc\\xd2001@18p2p'\n",
- "1 \t ffxx\n",
- "1 \t chikan@T66Y\n",
- "1 \t 瑞倪维儿护肤专卖\n",
- "1 \t auriga@18p2p\n",
- "1 \t yinchong818@(sis)\n",
- "1 \t 酷安\n",
- "1 \t JPopsuki 2.0 14486345\n",
- "1 \t 若無其事@18p2p\n",
- "1 \t b'stormly+taitan12+zhaoZero41+chinami2002+glen246+faberge@darkeagle-\\xbax\\x84\\xf0\\xaa\\xc0'\n",
- "1 \t CMCT团队荣誉出品\n",
- "1 \t kennyboy\n",
- "1 \t 2AV.COM\n",
- "1 \t DoraemonLL\n",
- "1 \t duwangyang\n",
- "1 \t cjy21\n",
- "1 \t cnman@18P2P\n",
- "1 \t zwl508\n",
- "1 \t hangzhouyang\n",
- "1 \t 99BT工厂\n",
- "1 \t TorrentLeech.org\n",
- "1 \t MPCStar\n",
- "1 \t sharemovie\n",
- "1 \t sexav.tv\n",
- "1 \t bbking\n",
- "1 \t giga17100\n",
- "1 \t QQ272286821\n",
- "1 \t 尤里\n",
- "1 \t 吴天@第一会所\n",
- "1 \t MyAV@18p2p\n",
- "1 \t b'\\xa5\\xda\\xa9`\\xa5\\xdd\\xa5\\xeb\\xa5\\xed\\xa9`\\xa5\\xb9'\n",
- "1 \t 牛丝社\n",
- "1 \t 汐\n",
- "1 \t nvsdyi\n",
- "1 \t oldman@18p2p\n",
- "1 \t b'dioguitar23\\xad\\xec\\xb3\\xd0'\n",
- "1 \t b'\\xb6\\xe0\\xb2\\xca\\xc9\\xe7\\xc7\\xf8'\n",
- "1 \t lianghua@18p2p\n",
- "1 \t aiai2013\n",
- "1 \t computerking123@www.SexInSex.net\n",
- "1 \t b'dioguitar23(\\xb2\\xc4\\xa4\\xbb\\xa4\\xd1\\xc5]\\xa4\\xfd)@hotavxxx.com'\n",
- "1 \t 梦幻天堂·龙网@航子(www.LWgod.cc)\n",
- "1 \t dio99.com(第六天魔王)@最新AV海量免費播放~魔王在線\n",
- "1 \t deatht\n",
- "1 \t 18P2Pjheang168\n",
- "1 \t 性吧发片部 ou89279546\n",
- "1 \t b'\\xc4\\xfa'\n",
- "1 \t jasonchan@18p2p\n",
- "1 \t https://t.me/zongmange\n",
- "1 \t asiamarket@18p2p\n",
- "1 \t huanglaoda@xuhu\n",
- "1 \t sxjjh7171\n",
- "1 \t 喜歡下雨天@SIS001\n",
- "1 \t Nikola\n",
- "1 \t 好人\n",
- "1 \t b'\\xcf\\xeb\\xb0l\\x85s\\xb2\\xbb\\x95\\xfe'\n",
- "1 \t Wowshadow.net\n",
- "1 \t Fp\n",
- "1 \t 色花堂—FVG\n",
- "1 \t b'\\xba\\xda\\xb0\\xb5\\xca\\xa5\\xb5\\xee'\n",
- "1 \t xmq\n",
- "1 \t kilin\n",
- "1 \t http://mmgg.cctve.cn/\n",
- "1 \t UID: 661086 UID: 1258553 UID: 78965\n",
- "1 \t WOLF字幕组\n",
- "1 \t chaijoe@18p2p\n",
- "1 \t https://one2048.com\n",
- "1 \t lloveppp@18p2p\n",
- "1 \t (同城裸聊约炮)\n",
- "1 \t b'[https://tracker.0day.kiev.ua] \\xd2\\xf0\\xe5\\xea\\xe5\\xf0 0day.kiev.ua'\n",
- "1 \t Ferech\n",
- "1 \t SRD\n",
- "1 \t プリズム☆ま~じカル ~PRISM Generations!~\n",
- "1 \t Blu-Ray\n",
- "1 \t wuaibin\n",
- "1 \t JPopsuki 2.0 1081189358\n",
- "1 \t b'\\xb2D\\xad\\xb7\\xae\\xf6\\xa4l'\n",
- "1 \t 哆学家\n",
- "1 \t Forest of Good and Evil 1-2\n",
- "1 \t DOBI\n",
- "1 \t QQ:649020789\n",
- "1 \t JPopsuki 2.0 383208255\n",
- "1 \t http://ehtracker.org/2135832/announce\n",
- "1 \t shuangyuboy@第一會所\n",
- "1 \t №追风少年☆@第一会所\n",
- "1 \t dontknowhat (TGx)\n",
- "1 \t LAPUMiA.Org\n",
- "1 \t fhm2888@第一会所\n",
- "1 \t https://rips.club/\n",
- "1 \t 魅影论坛\n",
- "1 \t 最新网址\n",
- "1 \t Zamunda.SE\n",
- "1 \t 整理不易,请保种\n",
- "1 \t https://freeplay.space/\n",
- "1 \t b'\\xacn\\xacn\\xad^\\xb6\\xaf\\xa4Q\\xa4K\\xa5{ \\xad\\xba\\xad\\xb6'\n",
- "1 \t wo010101\n",
- "1 \t abner166@18p2p\n",
- "1 \t dioguitar23(第六天魔王)原創\n",
- "1 \t life小絮\n",
- "1 \t tvboxnow\n",
- "1 \t 撸一发吧\n",
- "1 \t haobu3455\n",
- "1 \t anikaiser@18p2p\n",
- "1 \t b'5Q \\xcb\\xae\\xe9\\xbf\\xcd\\xa4@\\xc6\\xe6\\xd1\\xc8'\n",
- "1 \t javkiss\n",
- "1 \t wangxiaowu005@www.SexInSex.net\n",
- "1 \t lanyidong\n",
- "1 \t www.preall.com\n",
- "1 \t 18p2p~海綿體 原創\n",
- "1 \t b'\\xc1x\\xd3\\xc2\\xeb\\x85\\xcc\\xec\\xeaP\\xeb\\x85\\xe9L'\n",
- "1 \t 吉时综合论坛\n",
- "1 \t 愛在黑夜\n",
- "1 \t 天使动漫\n",
- "1 \t LJZ\n",
- "1 \t spider.\n",
- "1 \t b'\\xbb\\xb7\\xc7\\xf2\\xbc\\xab\\xcf\\xde\\xcf\\xc2\\xd4\\xd8'\n",
- "1 \t HHH\n",
- "1 \t 蜂鸟-日本同步-首发\n",
- "1 \t b'\\xc5\\xb0\\xb0\\xae\\xd3\\xd7\\xd3\\xd7'\n",
- "1 \t yakupe\n",
- "1 \t UID-968398@18P2P\n",
- "1 \t b'\\xc3\\xa8\\xba~\\xad\\xd1\\xbc\\xd6\\xb3\\xa1@\\xb4A\\xab\\xbd\\xa8\\xe0'\n",
- "1 \t b'lniklegend[\\xe3n\\xa4\\xeb\\xad\\xec\\xb3\\xd0\\xb2\\xd5]'\n",
- "1 \t JPopsuki 2.0 600921940\n",
- "1 \t https://exhentai.org/g/1701233/d6aed3161e/\n",
- "1 \t b'you15648g \\xad\\xec\\xb3\\xd0\\xb5o\\xb0e'\n",
- "1 \t yihyii@www.sogclub.com\n",
- "0 \t ostali\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"s = monotonic()\n",
"def removeminorities(population, minrepr=0, ostalo=\"ostalo\"):\n",
@@ -4082,19 +228,10 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": null,
"id": "4bd1f517",
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "...\n",
- "9.945079553872347 s 335643 različnih tipov v 3084321 datotekah in 259.2602232018344 TiB\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"s = monotonic()\n",
"from mimetypes import guess_type\n",
@@ -4151,2951 +288,10 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": null,
"id": "82ab922a",
"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('tabindex', '0');\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",
- " 'z-index: 2;'\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(\n",
- " 'style',\n",
- " 'box-sizing: content-box;' +\n",
- " 'pointer-events: none;' +\n",
- " 'position: relative;' +\n",
- " 'z-index: 0;'\n",
- " );\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;' +\n",
- " 'left: 0;' +\n",
- " 'pointer-events: none;' +\n",
- " 'position: absolute;' +\n",
- " 'top: 0;' +\n",
- " '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",
- " /* This rescales the canvas back to display pixels, so that it\n",
- " * appears correct on HiDPI screens. */\n",
- " canvas.style.width = width + 'px';\n",
- " canvas.style.height = height + 'px';\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",
- " /* User Agent sniffing is bad, but WebKit is busted:\n",
- " * https://bugs.webkit.org/show_bug.cgi?id=144526\n",
- " * https://bugs.webkit.org/show_bug.cgi?id=181818\n",
- " * The worst that happens here is that they get an extra browser\n",
- " * selection when dragging, if this check fails to catch them.\n",
- " */\n",
- " var UA = navigator.userAgent;\n",
- " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n",
- " if(isWebKit) {\n",
- " return function (event) {\n",
- " /* This prevents the web browser from automatically changing to\n",
- " * the text insertion cursor when the button is pressed. We\n",
- " * want to control all of the cursor setting manually through\n",
- " * the 'cursor' event from matplotlib */\n",
- " event.preventDefault()\n",
- " return fig.mouse_event(event, name);\n",
- " };\n",
- " } else {\n",
- " return function (event) {\n",
- " return fig.mouse_event(event, name);\n",
- " };\n",
- " }\n",
- " }\n",
- "\n",
- " canvas_div.addEventListener(\n",
- " 'mousedown',\n",
- " on_mouse_event_closure('button_press')\n",
- " );\n",
- " canvas_div.addEventListener(\n",
- " 'mouseup',\n",
- " on_mouse_event_closure('button_release')\n",
- " );\n",
- " canvas_div.addEventListener(\n",
- " 'dblclick',\n",
- " on_mouse_event_closure('dblclick')\n",
- " );\n",
- " // Throttle sequential mouse events to 1 every 20ms.\n",
- " canvas_div.addEventListener(\n",
- " 'mousemove',\n",
- " on_mouse_event_closure('motion_notify')\n",
- " );\n",
- "\n",
- " canvas_div.addEventListener(\n",
- " 'mouseenter',\n",
- " on_mouse_event_closure('figure_enter')\n",
- " );\n",
- " canvas_div.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",
- " canvas_div.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.canvas_div.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",
- "\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",
- " if (name === 'button_press') {\n",
- " this.canvas.focus();\n",
- " this.canvas_div.focus();\n",
- " }\n",
- "\n",
- " // from https://stackoverflow.com/q/1114465\n",
- " var boundingRect = this.canvas.getBoundingClientRect();\n",
- " var x = (event.clientX - boundingRect.left) * this.ratio;\n",
- " var y = (event.clientY - boundingRect.top) * 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",
- " 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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n",
- "\n",
- "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"<div id='\" + id + \"'></div>\");\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",
- " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\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",
- " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\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 = '<i class=\"fa ' + image + ' fa-lg\"></i>';\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 = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\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": [
- "<IPython.core.display.Javascript object>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "text/html": [
- "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8oAAAZ+CAYAAACfDN3wAAAgAElEQVR4XuzdB7gdVbk38PeGEmogCqEeQrnSAhKKIFyqeEGKmgiINAXpRQg9gEACCEgRUJqANKkBhNBB5APpPfSOEFqkc5ESEfhc637nfOmzz87eZ84+85vnOQ/k7DUza37vzPPs/1lrZv7jq38vYSFAgAABAgQIECBAgAABAgTiP9IiKDsTCBAgQIAAAQIECBAgQIDA/woIys4EAgQIECBAgAABAgQIECAwjoCg7HQgQIAAAQIECBAgQIAAAQKCsnOAAAECBAgQIECAAAECBAhMWsCIsjODAAECBAgQIECAAAECBAgYUXYOECBAgAABAgQIECBAgAABI8rOAQIECBAgQIAAAQIECBAgUChg6nUhkQYECBAgQIAAAQIECBAgUCUBQblK1XasBAgQIECAAAECBAgQIFAoICgXEmlAgAABAgQIECBAgAABAlUSEJSrVG3HSoAAAQIECBAgQIAAAQKFAoJyIZEGBAgQIECAAAECBAgQIFAlAUG5StV2rAQIECBAgAABAgQIECBQKCAoFxJpQIAAAQIECBAgQIAAAQJVEhCUq1Rtx0qAAAECBAgQIECAAAEChQKCciGRBgQIECBAgAABAgQIECBQJQFBuUrVdqwECBAgQIAAAQIECBAgUCggKBcSaUCAAAECBAgQIECAAAECVRIQlKtUbcdKgAABAgQIECBAgAABAoUCgnIhkQYECBAgQIAAAQIECBAgUCUBQblK1XasBAgQIECAAAECBAgQIFAoICgXEmlAgAABAgQIECBAgAABAlUSEJSrVG3HSoAAAQIECBAgQIAAAQKFAoJyIZEGBAgQIECAAAECBAgQIFAlAUG5StV2rAQIECBAgAABAgQIECBQKCAoFxJpQIAAAQIECBAgQIAAAQJVEhCUq1Rtx0qAAAECBAgQIECAAAEChQKCciGRBgQIECBAgAABAgQIECBQJQFBuUrVdqwECBAgQIAAAQIECBAgUCggKBcSaUCAAAECBAgQIECAAAECVRIQlKtUbcdKgAABAgQIECBAgAABAoUCgnIhkQYECBAgQIAAAQIECBAgUCUBQblK1XasBAgQIECAAAECBAgQIFAoICgXEmlAgAABAgQIECBAgAABAlUSEJSrVG3HSoAAAQIECBAgQIAAAQKFAoJyIZEGBAgQIECAAAECBAgQIFAlAUG5StV2rAQIECBAgAABAgQIECBQKCAoFxJpQIAAAQIECBAgQIAAAQJVEhCUq1Rtx0qAAAECBAgQIECAAAEChQKCciGRBgQIECBAgAABAgQIECBQJQFBuUrVdqwECBAgQIAAAQIECBAgUCggKBcSaUCAAAECBAgQIECAAAECVRIQlKtUbcdKgAABAgQIECBAgAABAoUCgnIhkQYECBAgQIAAAQIECBAgUCUBQblK1XasBAgQIECAAAECBAgQIFAoICgXEmlAgAABAgQIECBAgAABAlUSEJSrVG3HSoAAAQIECBAgQIAAAQKFAoJyIZEGBAgQIECAAAECBAgQIFAlAUG5StV2rAQIECBAgAABAgQIECBQKCAoFxJpQIAAAQIECBAgQIAAAQJVEhCUq1Rtx0qAAAECBAgQIECAAAEChQKCciGRBgQIECBAgAABAgQIECBQJQFBuUrVdqwECBAgQIAAAQIECBAgUCggKBcSaUCAAAECBAgQIECAAAECVRIQlKtUbcdKgAABAgQIECBAgAABAoUCgnIhkQYECBAgQIAAAQIECBAgUCUBQblK1XasBAgQIECAAAECBAgQIFAoICgXEmlAgAABAgQIECBAgAABAlUSEJSrVG3HSoAAAQIECBAgQIAAAQKFAoJyIZEGBAgQIECAAAECBAgQIFAlAUG5StV2rAQIECBAgAABAgQIECBQKCAoFxJpQIAAAQIECBAgQIAAAQJVEhCUq1Rtx0qAAAECBAgQIECAAAEChQKCciGRBgQIECBAgAABAgQIECBQJQFBuUrVdqwECBAgQIAAAQIECBAgUCggKBcSaUCAAAECBAgQIECAAAECVRIQlKtUbcdKgAABAgQIECBAgAABAoUCgnIhkQYECBAgQIAAAQIECBAgUCUBQblK1XasBAgQIECAAAECBAgQIFAoICgXEmlAgAABAgQIECBAgAABAlUSEJSrVG3HSoAAAQIECBAgQIAAAQKFAoJyIZEGBAgQIECAAAECBAgQIFAlAUG5StV2rAQIECBAgAABAgQIECBQKCAoFxJpQIAAAQIECBAgQIAAAQJVEhCUq1Rtx0qAAAECBAgQIECAAAEChQKCciGRBgQIECBAgAABAgQIECBQJQFBuUrVdqwECBAgQIAAAQIECBAgUCggKBcSaUCAAAECBAgQIECAAAECVRIQlKtUbcdKgAABAgQIECBAgAABAoUCgnIhkQYECBAgQIAAAQIECBAgUCUBQblK1XasBAgQIECAAAECBAgQIFAoICgXEmlAgAABAgQIECBAgAABAlUSEJSrVG3HSoAAAQIECBAgQIAAAQKFAoJyIZEGBAgQIECAAAECBAgQIFAlAUG5StV2rAQIECBAgAABAgQIECBQKCAoFxJpQIAAAQIECBAgQIAAAQJVEhCUq1Rtx0qAAAECBAgQIECAAAEChQKCciGRBgQIECBAgAABAgQIECBQJQFBuUrVdqwECBAgQIAAAQIECBAgUCggKBcSaUCAAAECBAgQIECAAAECVRIQlKtUbcdKgAABAgQIECBAgAABAoUCgnIhkQYECBAgQIAAAQIECBAgUCUBQblK1XasBAgQIECAAAECBAgQIFAoICgXEmlAgAABAgQIECBAgAABAlUSEJSrVG3HSoAAAQIECBAgQIAAAQKFAoJyIZEGBAgQIECAAAECBAgQIFAlAUG5StV2rAQIECBAgAABAgQIECBQKCAoFxJpQIAAAQIECBAgQIAAAQJVEhCUq1Rtx0qAAAECBAgQIECAAAEChQKCciGRBgQIECBAgAABAgQIECBQJQFBuUrVdqwECBAgQIAAAQIECBAgUCggKBcSaUCAAAECBAgQIECAAAECVRIQlKtUbcdKgAABAgQIECBAgAABAoUCgnIhkQYECBAgQIAAAQIECBAgUCUBQblK1XasBAgQIECAAAECBAgQIFAoICgXEmlAgAABAgQIECBAgAABAlUSEJSrVG3HSoAAAQIECBAgQIAAAQKFAoJyIZEGBAgQIECAAAECBAgQIFAlAUG5StV2rAQIECBAgAABAgQIECBQKCAoFxJpQIAAAQIECBAgQIAAAQJVEhCUq1Rtx0qAAAECBAgQIECAAAEChQKCciGRBgQIECBAgAABAgQIECBQJQFBuUrVdqwECBAgQIAAAQIECBAgUCggKBcSaUCAAAECBAgQIECAAAECVRIQlKtUbcdKgAABAgQIECBAgAABAoUCgnIhkQYECBAgQIAAAQIECBAgUCUBQblK1XasBAgQIECAAAECBAgQIFAoICgXEmlAgAABAgQIECBAgAABAlUSEJSrVG3HSoAAAQIECBAgQIAAAQKFAoJyIZEGBAgQIECAAAECBAgQIFAlAUG5StV2rAQIECBAgAABAgQIECBQKCAoFxJpQIAAAQIECBAgQIAAAQJVEhCUq1Rtx0qAAAECBAgQIECAAAEChQKCciGRBgQIECBAgAABAgQIECBQJQFBuUrVdqwECBAgQIAAAQIECBAgUCggKBcSaUCAAAECBAgQIECAAAECVRIQlKtUbcdKgAABAgQIECBAgAABAoUCgnIhkQYECBAgQIAAAQIECBAgUCUBQblK1XasBAgQIECAAAECBAgQIFAoICgXEmlAgAABAgQIECBAgAABAlUSEJSrVG3HSoAAAQIECBAgQIAAAQKFAoJyIZEGBAgQIECAAAECBAgQIFAlAUG5StV2rAQIECBAgAABAgQIECBQKCAoFxJpQIAAAQIECBAgQIAAAQJVEhCUq1Rtx0qAAAECBAgQIECAAAEChQKCciGRBgQIECBAgAABAgQIECBQJQFBuUrVdqwECBAgQIAAAQIECBAgUCggKBcSaUCAAAECBAgQIECAAAECVRIQlKtUbcdKgAABAgQIECBAgAABAoUCgnIhkQYECBAgQIAAAQIECBAgUCUBQblK1XasBAgQIECAAAECBAgQIFAoICgXEmlAgAABAgQIECBAgAABAlUSEJSrVG3HSoAAAQIECBAgQIAAAQKFAoJyIZEGBAgQIECAAAECBAgQIFAlAUG5StV2rAQIECBAgAABAgQIECBQKCAoFxJpQIAAAQIECBAgQIAAAQJVEhCUq1Rtx0qAAAECBAgQIECAAAEChQKCciGRBgQIECBAgAABAgQIECBQJQFBuUrVdqwECBAgQIAAAQIECBAgUCggKBcSaUCAAAECBAgQIECAAAECVRIQlKtUbcdKgAABAgQIECBAgAABAoUCgnIhkQYECBAgQIAAAQIECBAgUCUBQblK1XasBAgQIECAAAECBAgQIFAoICgXEmlAgAABAgQIECBAgAABAlUSEJSrVG3HSoAAAQIECBAgQIAAAQKFAoJyIZEGBAgQIECAAAECBAgQIFAlAUG5StV2rAQIECBAgAABAgQIECBQKCAoFxJpQIAAAQIECBAgQIAAAQJVEhCUq1Rtx0qAAAECBAgQIECAAAEChQKCciGRBgQIECBAgAABAgQIECBQJQFBuUrVdqwECBAgQIAAAQIECBAgUCggKBcSaUCAAAECBAgQIECAAAECVRIQlKtUbcdKgAABAgQIECBAgAABAoUCgnIhkQYECBAgQIAAAQIECBAgUCUBQblK1XasBAgQIECAAAECBAgQIFAoICgXEmlAgAABAgQIECBAgAABAlUSEJSrVG3HSoAAAQIECBAgQIAAAQKFAoJyIZEGBAgQIECAAAECBAgQIFAlAUG5StV2rAQIECBAgAABAgQIECBQKCAoFxJpQIAAAQIECBAgQIAAAQJVEhCUq1Rtx0qAAAECBAgQIECAAAEChQKCciGRBgQIECBAgAABAgQIECBQJQFBuUrVdqwECBAgQIAAAQIECBAgUCggKBcSaUCAAAECBAgQIECAAAECVRIQlKtUbcdKgAABAgQIECBAgAABAoUCgnIhkQYECBAgQIAAAQIECBAgUCUBQblK1XasBAgQIECAAAECBAgQIFAoICgXEmlAgAABAj1dYPDgwbHsssvGIYccEpdeemkcddRR8cADD8R0003X0w/d8REgQIAAAQKTEBCUnRYECBAgUHmBv//97/HNb34zjjzyyNh///3jz3/+cw7O7ctFF10Ub731VgwZMqTpVgsuuGCsueaace655+Z9vfzyy7HQQgvFOeecE1tvvXVT95/2m5bbbrut0/tJdksuuWQMGjSo0+umFd54440444wz8voDBw6saxvJbJtttsl/5FhhhRXq2oaVCBAgQIBAEhCUnQcECBAgQODfAhdffHFsvvnmeVR5+PDh45lsuOGG8cQTT+TQ2uzlkUceiT59+sQiiyySd9UqQXmWWWaJjTfeuCPgd9bpwQcfjG9961tT9QcBQbmz6toTIECAwOQEBGXnBgECBAgQKBDoyqA8YVcE5dpPT0G5distCRAgQGDKAoKyM4QAAQIEuqXAsGHD8sjuww8/HIcffnjccsstaRpUfP/7348TTjgh5pxzzo5+f/nll3HcccfF2WefHX/7299ittlmi+9973t5KvX8888/xeN7++2346CDDoobbrghT69Oo7mLLrpo3vd3v/vdPA369ttvn2gbX331Vf7dP//5zzjmmGPiggsuyPtO66dgnX7X3sc0nTiNFKfPe/XqNd62Vlpppfj888/zcaallqnXaQp2mh494Qh3u1l73yZ34OnzY489Nk455ZRI087TlOlf/epX8etf/zqv0j71+rPPPss2f/nLX3Lfp5lmmlhsscVi6NCh8cMf/rBj86kuEy5rrLFGx3bSaHzazl//+tf49NNPY/HFF48999wzfvazn3Xsb6211ppoG4ceemikY0pLGnE+7LDD4s4774xPPvkkllhiiTjggAPixz/+ccd6kwrKb775Zq7H//zP/8T1118f3/jGN7rl+a5TBAgQINC9BATl7lUPvSFAgACB/yfQHvr69++fw1AKrU8++WQcfPDBOcjed999HQ/b2nHHHfP9rbvttlsORSlApnYzzDBDDqBzzDHHZF1ToE5tUlBM2/3ggw/yv1N43HTTTeOpp56KHXbYIV588cW48sorO7bz7W9/O1JA32CDDeKOO+6I/fbbL1ZZZZV45ZVXIgW8FNZTuJtxxhnj6quvzsEy3fucjqN9eeaZZ3Lg++1vfxu/+MUv8q+7Iii322677bZ5uvSrr76a/zDwxRdf5CDcHpQ//PDDfF/22muvHfPNN1/+o0D6g8VvfvObPEX6pz/9ae7zvffeG9/5zncihd3knpb0B4Nk+Oyzz+Yp1f369csuX//61/MfFdJU9xTMk1sKsX/605/y/cW//OUvs2la0h850s//+T//J//hI/1RIdU42V5yySV5mve4925PGJRTQF9//fXzNlINpnQeuPAIECBAgMC4AoKy84EAAQIEuqVAe5hLI48pmLUv6cFaW2yxRQ5b6b/tYXOXXXbJI6Tty/3335+D1YEHHphD8OSWWWedNbbbbrs8Sj25ZXJTr1NY22yzzeKKK66IH/3oRx2rt99ve+qpp8bOO+8c//rXv3JYS4Hzwgsv7GiXHhx24okn5gdZpQCZlmYH5fSHgHnmmSfWW2+9HE7bl7vvvjv+67/+K8YdCZ7QIwXpNBq900475T8mtI+Cp3aTu0c5+aQ/MDz//PPR1tbWsckUYNNIfTr29j8qTO4e5fTHhPQHh1TTaaedtmMbaXbBQw89FK+99loeqR83KKfj3GijjWKdddaJP/7xj/mPJhYCBAgQIFCrgKBcq5R2BAgQINClAu1BOYXO5ZdfvmPfKXSm0JSm7Z511llx2mmnRQrJKUSloDXukkY008hmGvGc3JLCawp8e++9dx7tTfua8LVQkwvKW265ZVx33XV5yvaE049TKFx99dXz66bSss8+++QgP2bMmBwMU+hMbVZdddUYMWJER/eaHZTTFPMUUi+//PIcJMdd0r7Tz7hPvb7ssstymH/00Ufj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yk1h7dRGBeVOcXVN43Rv8pVXXhmDBg1qyA4F5YYw2ggBAgQIECBAgECdAoJy5+AE5c55NaO1oNwM1X9v8+WXX46FFlooHnnkkXwPcmcWQbkzWtoSIECAAAECBAh0dwFBuXMVEpQ759WM1oJyM1QF5Sap2iwBAgQIECBAgEArCgjKnauaoNw5r2a0FpQLVMeOHRv77rtvXHLJJZFO2BVWWCFOOOGE+Na3vhXvv/9+7LbbbnHzzTfnh23NP//8ceCBB8Y222zT8Wqn9s2vscYacdttt8UDDzyQ26SR5s8//zyPNqftLbfcch09mXBEOT24a6+99sr76dWrV6y66qpx0kknxYILLljTOWHqdU1MGhEgQIAAAQIECDRJQFDuHKyg3DmvZrQWlAtU99hjj7j88svjrLPOyg/POuaYY+Lqq6+OF154IQ455JC466674swzz4w55pgj/+7TTz+N73//+zkQr7jiivkVTuk9ydNPP3187Wtfy+9CfuONN2L55ZfPez7++OPj2muvjeeffz4/qCst4wblTz75JIfp1VZbLb87edppp40jjjgiHnrooXjsscfydidcUrhPP+1LutDS66TahoyIXr1nasZ5ZJsECBAgQIAAAQIEJisgKHfu5BCUO+fVjNaC8hRUP/744/xk6nPPPTc233zz3DKNAqeR3BRa77jjjhyQzz777Im2Uus9yl988UXex0UXXRQbbrjhREE5bTuF86effrpjlPqf//xnzD777HHVVVfFOuusM9G+hw0bFsOHD5/o94JyMy4h2yRAgAABAgQIECgSEJSLhMb/XFDunFczWgvKU1BNI7bLLLNMfjDXuK9iGjx4cA63m2yySWy00Uax6KKL5sCanlKdXt2UlskF5bfeeiuPRKeR5b///e+RgnIaNT755JNjl112mSgo77rrrvH73/8+ZphhhvF6mtY55ZRTYuedd57oCIwoN+NSsU0CBAgQIECAAIF6BQTlzskJyp3zakZrQXkKqo8++mie9vzKK6/EAgss0NEyBeKvf/3r8Yc//CHefvvtuO666/IU6yuuuCJSsD3uuOMmG5TXX3/9vE4a8U3hu3fv3rHyyivHQQcdlEep0zLu1OsUhB9++OG48MILJ+rpnHPOGbPNNlvheeEe5UIiDQgQIECAAAECBJooICh3DldQ7pxXM1oLylNQTVOv033F55xz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8cYbb8Taa68dQ4YMEZQbWDebIkCAAAECBJovICg339geeo6AoFx+LQXlBtYgBeWHH3449ttvv9h0003zO5APPfTQWHfddWPw4MGRPj/hhBNixIgRMXr06Lj//vtjrbXWiiWWWCJOOumkmHvuuXNgfuKJJ/J7k6ebbrrcu1tvvTW22267GDVqVPzpT38SlBtYM5siQIAAAQIEukZAUO4aZ3vpGQKCcvl1FJQbWIMUhL/44ou444478lbT/88222zxox/9KM4///z8uzFjxsQ888wT99xzT3z22Wc5KF9yySU5WKflvffei/nnnz/OPffc+PGPfxzvvvtuvi/5ggsuiNVXXz3/vmhEeezYsZF+2pd0obW1tUXbkBHRq/dMDTximyJAgAABAgQI1CYgKNfmpBWBJCAol38eCMoNrEEKygMGDIhTTjmlY6v9+/fP06733Xff/LuvvvoqevXqFSNHjow+ffrkoPzKK6/EAgss0LFOCsaDBg3Ko9EpZC+66KJx9NFH589rCcrDhg2L4cOHT3RkgnIDi21TBAgQIECAQKcEBOVOcWlccQFBufwTQFBuYA1SUB44cGCceOKJHVtdcMEF8whw+mlf/o0eV155Zcw+++yTDcppqvYhhxyS2/zjH//oWDcF7S+//DLfB33GGWfEz3/+84mOwIhyA4tqUwQIECBAgEBDBATlhjDaSEUEBOXyCy0oN7AG9QbldC9zmmadlvfffz9PvT7nnHPy755++uk8hbt9SSPRv/71r/OTr+ebb77o27dv4RF4PVQhkQYECBAgQIBAkwUE5SYD23yPEhCUyy+noNzAGtQblNN07fQwr7nmmisOOuig/NCu559/Pj81e8KllqnXE64jKDewyDZFgAABAgQI1CUgKNfFZqWKCgjK5RdeUG5gDeoNytdcc00MHTo0h+P0eqgzzzwz/3dSi6DcwILZFAECBAgQINBlAoJyl1HbUQ8QEJTLL6KgXGIN2t+jnKZbp3uRm7W40Jola7sECBAgQIAAAQIEGi/g+3vjTTu7RUG5s2INbC8oNxDTpggQIECAAAECBAj0EAFBufxCCsol1kBQLhHfrgkQIECAAAECBAh0UwFBufzCCMrl12CKPZjw9VJjxoyJrbbaKj/1errpposPPvig8Ag8zKuQSAMCBAgQIFApAfcLV6rcDrYFBQTl8osmKJdfg04F5f333z+uu+66/B7m2WabLfr161d4BIJyIZEGBAgQIECgUgKCcqXK7WBbUEBQLr9ognL5NehUUN54441j5plnjvPOO6/mngvKNVNpSIAAAQIEKiEgKFeizA6yhQUE5fKLJyh3YQ3S66OWWmqpvMcLLrggpplmmth5553j8MMPj38XIt56663Ydttt45Zbbom55547jjjiiPxe5SFDhuSfNA37lVde6ejxz372s0iviypaBOUiIZ8TIECAAIFqCQjK1aq3o209AUG5/JoJyl1YgxSUH3rooRyGU0B+8MEHY4cddogTTzwxtt9++1h//fXj1VdfjTPOOCOmn3762H333eORRx6JI488Mgflt99+O376059Gnz594qSTTooZZ5wxT78uWgTlIiGfEyBAgACBagkIytWqt6NtPQFBufyaCcpdWIMUlNOo8ZNPPplHkNMydOjQuPrqq+Oqq66KxRZbLO69995YaaWV8mfPPPNMLLHEEnHCCSfkoJyWQYMG5XcuT2kkeezYsZF+2pd0obW1tUXbkBHRq/dMXXjEdkWAAAECBAh0RwFBuTtWRZ8I/H8BQbn8s0FQ7sIapKC88MILx9lnn92x15EjR0a67/jyyy/P//3ss8/ylOz2pW/fvnHooYd2KigPGzYshg8fPtGRCcpdWGy7IkCAAAEC3VhAUO7GxdE1Av8WEJTLPw0E5S6swZSC8iWXXBI/+clP8khwr169piooG1HuwqLaFQECBAgQaEEBQbkFi6bLlRIQlMsvt6DchTVon3r91FNPdez1gAMOiDSqnF73tPjii8d9990XK664Yv782Wefzb/r7NTrCQ/JPcpdWGS7IkCAAAECLSAgKLdAkXSx0gKCcvnlF5S7sAbtD/NKD+7acccd4+GHH84P8Tr++OPzv9dbb71444038sO8pp122jzdOj38q/1hXqmrtdyjLCh3YVHtigABAgQItKCAoNyCRdPlSgkIyuWXW1DuwhqkoDxgwID48ssv46KLLsr3IqeAnIJwerjXmDFjYrvttsuvh5prrrny66EOPvjgjtdDCcpdWCy7IkCAAAECPVhAUO7BxXVoPUJAUC6/jIJyF9YgBeWBAwfm10F15eJC60pt+yJAgAABAgQIECAwdQK+v0+dXyPWFpQboVjjNgTlGqE0I0CAAAECBAgQIFBhAUG5/OILyl1YA0G5C7Ht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EZTTNOoUkmudej3hAQrKXV5yOyRAgACBHiIgKPeQQjoMAi0mICiXXzAjyl1QgykF5bfffjvmn3/+2GOPPfKI8hNPPBH77rtvPPfccx1B+d13380P7VpjjTXyw7xmm222uPfee/N9zOn3RYugXCTkcwIECBAgMGkBQdmZQYBAGQKCchnq4+9TUO6CGhTdo3zxxRfnB3a9+eabsdxyy+Uw/IMf/KAjKKcuPvbYYzlA33nnnfnJ2e2vh1p44YULj0BQLiTSgAABAgQITFJAUHZiECBQhoCgXIa6oFy+ehf3wIXWxeB2R4AAAQIECBAgeRu/nwAAIABJREFUQGAqBHx/nwq8Bq1qRLlBkN15My607lwdfSNAgAABAgQIECAwvoDv7+WfEYJy+TVoeg9caE0ntgMCBAgQIECAAAECDRPw/b1hlHVvSFCum65rVtx6663jgw8+iKuuuqruHbpHuW46KxIgQIBANxNwz3A3K4juECDQFAFBuSmsndqooNwprq5vLCh3vbk9EiBAgED3FRCUu29t9IwAgcYJCMqNs6x3S4JyvXJdtJ6g3EXQdkOAAAECLSEgKLdEmXSSAIGpFBCUpxKwAasLylOB+NVXX8Wxxx4bp59+en6106KLLhoHH3xwbLzxxnHbbbfFWmutFddee21+9dOzzz4byyyzTJx11lmx9NJL570OGzYsT6keNWpURy8mfJVUe1Bedtll45RTTonPPvssNttss/jd734X008/fU29N/W6JiaNCBAgQKAFBATlFiiSLhIgMNUCgvJUE071BgTlqSA86KCD4k9/+lOkcPuNb3wj/vrXv8ZOO+0UN910U6QQnYLyEkssESeddFLMPffcOTA/8cQT8dxzz8V0001Xc1C+4oorYoMNNsgh/OWXX45tttkmtt9++/jVr341yd6PHTs20k/7ki60tra2aBsyInr1nmkqjtiqBAgQIECgXAFBuVx/eydAoGsEBOWucZ7SXgTlOmvw8ccfxxxzzBG33nprrLzyyh1b2W677eKTTz6JHXbYIQflSy65JDbddNP8+XvvvRfzzz9/nHvuufHjH/+45qB8zTXXxKuvvhozzfS/ITeNYO+7777x4YcfRq9evSY6gjRSPXz48Il+LyjXWWyrESBAgEC3ERCUu00pdIQAgSYKCMpNxK1x04JyjVATNnvggQdixRVXjJlnnnm8j/75z39Gmib961//OgflV155JRZYYIGONumzQYMGxaGHHlpzUB49enQO5O3Lo48+GgMHDsyjy/3795/oCIwo11lUqxEgQIBAtxcQlLt9iXSQAIEGCAjKDUCcyk0IynUC3nffffHtb38734s833zzjbeV3r17x4svvjjZoDx48OA45JBD4rDDDos0rToF3/Yl3fOc7kVOITgt6R7lyQXlCUP45A7FPcp1FtlqBAgQINDtBATlblcSHSJAoAkCgnITUDu5SUG5k2DtzT/66KOYc84548wzz4ytttpqoq20P8zr0ksvzdOs0/L+++/nqdfnnHNO/t1pp52WR5XHjBkT/y5EbrPFFlvEXXfdNV5QTlOvX3vttZhxxhlzm9///vexzz77THbq9YSdEZTrLLLVCBAgQKDbCQjK3a4kOkSAQBMEBOUmoHZyk4JyJ8HGbf7LX/4y3y98/PHHx6qrrhrphL777rtjlllmyVOi09TrAQMG5Id5zTXXXJEe/pWecP3888/nJ1Y//fTT+fOjjjoqPyn7xhtvzA/s6tOnz3hBOY06f//734+0vzSKnB7mlX7SerUsgnItStoQIECAQCsICMqtUCV9JEBgagUE5akVnPr1BeWpMExPtk6vaTr11FPjpZdeitlnnz2WW265/HTrL7/8MgflNBo8dOjQHI7T66HSCHT6b/uSgvaRRx6ZH/S10UYbxWKLLRZnnHHGeEH5gw8+yOukKdnp/uOf/OQncfLJJ0ea4l3LIijXoqQNAQIECLSCgKDcClXSRwIEplZAUJ5awalfX1CeesNJbqF96nWabp0CdJmLC61MffsmQIAAAQIECBAg0DkB398759WM1oJyM1T/vU1BuUmwNkuAAAECBAgQIECghwsIyuUXWFBuUg0E5SbB2iwBAgQIECBAgACBHi4gKJdfYEG55Bp0RaB2j3LJRbZ7AgQIEJikgPuNnRgECBCYtICgXP6ZISiXXANBueQC2D0BAgQIlCYgKJdGb8cECHRzAUG5/AIJyiXXQFAuuQB2T4AAAQKlCQjKpdHbMQEC3VxAUC6/QIJyg2uw5pprxtJLLx3TTDNNnHfeefl9yYcffnhsscUWsdtuu8Xll18e/fr1y693Wm+99SZ66Nenn36a36n87rvvxvXXXx8bbLBBrLHGGnH00Ud39PTtt9+OeeedN26++eb8CqqixdTrIiGfEyBAgEAZAoJyGer2SYBAKwgIyuVXSVBucA1SUH744Ydjv/32i0033TQuvfTSOPTQQ2PdddeNwYMHR/r8hBNOiBEjRsTo0aPj/vvvz2E3vUbq38WIDTfcMGaYYYa46qqrYuaZZ86B+thjj83vVU6fpyX9LgXntH6vXr0mOoL0ruX0076kC62trS3ahoyIXr1navAR2xwBAgQIEKhPQFCuz81aBAj0fAFBufwaC8oNrkEKwl988UXccccdecvp/2ebbbb40Y9+FOeff37+3ZgxY2KeeeaJe+65Jz777LMclJ955pkcrBdZZJG4+OKL80h0WtpHj2+99dZYbbXV8u9WWWWVWHXVVeOYY46ZZO+HDRsWw4cPn+gzQbnBxbY5AgQIEJgqAUF5qvisTIBADxYQlMsvrqDc4BqkoDxgwIA45ZRTOrbcv3//PO163333zb/76quv8kjwyJEjo0+fPjkozz///PGtb30rLrvssjxte9xl/fXXjwUWWCBOP/30+Nvf/hYLL7xwjBo1KpZZZplJ9t6IcoOLanMECBAg0BQBQbkprDZKgEAPEBCUyy+ioNzgGqSgPHDgwDjxxBM7trzgggvGkCFD8k/7kqZRX3nllTH77LPnoLzjjjvGFVdcEWnkON3jPO5y4YUXxh577BFvvvlmHkVOI85PPPFEzT13j3LNVBoSIECAQBcKCMpdiG1XBAi0lICgXH65BOUG16DeoJzuUT7iiCPy9Oz0JOwll1yyo2cff/xxzDXXXDkgDx06NLbaaqv831oXQblWKe0IECBAoCsFBOWu1LYvAgRaSUBQLr9agnKDazA1QTmNLu+55545EKewvPjii3f0Lj01+8knn4zHHnssP9grTcWudRGUa5XSjgABAgS6UkBQ7kpt+yJAoJUEBOXyqyUoN7gGUxuUU3d23333/BqpFJYXXXTR3MP2V0Wtvvrqcfvtt3eq14Jyp7g0JkCAAIEuEhCUuwjabggQaDkBQbn8kgnK5deg6T1woTWd2A4IECBAgAABAgQINEzA9/eGUda9IUG5brrWWdGF1jq10lMCBAgQIECAAAECvr+Xfw4IyuXXoOk9cKE1ndgOCBAgQIAAAQIECDRMwPf3hlHWvSFBuW661lnRPcqtUys9JUCAQNkC7hsuuwL2T4AAgQhBufyzQFAuvwZN74Gg3HRiOyBAgECPERCUe0wpHQgBAi0sICiXXzxBufwaNL0HgnLTie2AAAECPUZAUO4xpXQgBAi0sICgXH7xBOUm1OCaa66JrbbaKt57773o1atXjBo1KpZddtnYZ5994thjj8173HHHHfOUipNPPjl22223uOOOO3L7RRZZJA488MDYbLPNcrvf//73cdhhh8Wrr76at9W+/OAHP4i+ffvGeeedV3gEgnIhkQYECBAg8P8EBGWnAgECBMoXEJTLr4Gg3IQafPjhh/G1r30t7r///lh++eXjpJNOiiOOOCIWWmih/Lu0LLbYYrHnnnvG97///bj44ovju9/9bvTp0yeuu+66/Pu77rorVlpppRye55lnnvwe5bXXXjuv+/7778fcc88dKZCvs846Ex3B2LFjI/20L+lCa2tri7YhI6JX75macMQ2SYAAAQI9RUBQ7imVdBwECLSygKBcfvUE5SbVIAXkzTffPPbee+8YPHhwfOtb34rhw4fHO++8Ex9//HEOv08//XQsvvjiE/Vggw02iCWWWCKOO+64/NkPf/jDmGOOOeIPf/hD/vcZZ5wRhx56aLz22msxzTTTTLT+sGHD8r4mXATlJhXbZgkQINCDBATlHlRMh0KAQMsKCMrll05QblINUkB+7rnn4uqrr44555wzbr/99vjpT3+aR5Y/+OCDPGo8ZsyY+OKLL+Loo4+OSy+9NF5//fU8Epx+UrgeMWJE7l367w477BB///vfo3fv3rHGGmvEcsstFyeccMIke29EuUlFtVkCBAhUQEBQrkCRHSIBAt1eQFAuv0SCcpNq0H6f8m233ZanR6eQm8Lz9NNPn6dOp7CcwvExxxyTf0488cRYeumlY+aZZ44hQ4bEtNNOG1dddVXu3aeffhpzzTVXnHvuuXlkun///vHAAw/kad21LO5RrkVJGwIECBBIAoKy84AAAQLlCwjK5ddAUG5SDdrvU04P9UpTrS+77LIYOXJkHHXUUTko77HHHrHLLrvke5T79evXMa36yy+/zNOu0097UE5d3HrrreOjjz7K9y2fffbZ8cwzz9Tcc0G5ZioNCRAgUHkBQbnypwAAAgS6gYCgXH4RBOUm1iCN+D766KP5YV677rprDshpZPjzzz+PJ598MpZccsk8BfuKK66ISy65JD/F+je/+U2ear3WWmuNF5T//Oc/51C94IILxpZbbhm//OUva+65oFwzlYYECBCovICgXPlTAAABAt1AQFAuvwiCchNrkF4Hdfzxx8cTTzwRAwYMyHsaOHBgvPHGG3kq9r/x81Otf/7zn8df/vKXmGmmmfK9yKNHj440Ij3uiHK6lzk9ufrNN9+MF198MRZeeOGaey4o10ylIQECBCovIChX/hQAQIBANxAQlMsvgqBcfg2a3gMXWtOJ7YAAAQIECBAgQIBAwwR8f28YZd0bEpTrpmudFV1orVMrPSVAgAABAgQIECDg+3v554CgXH4NxutBerJ1eup1eip2oxZTrxslaTsECBDo/gKmTnf/GukhAQIEigQE5SKh5n8uKDffuFN7SK+CSk+3Tk/CbtQiKDdK0nYIECDQ/QUE5e5fIz0kQIBAkYCgXCTU/M8F5eYbl74HQbn0EugAAQIEukxAUO4yajsiQIBA0wQE5abR1rxhQblmqsY1fPnll2OhhRaaaINrrLFGfl/yuFOvhw0blp9+vfPOO8cRRxwR7777bmywwQZx5plnxuyzz15TpwTlmpg0IkCAQI8QEJR7RBkdBAECFRcQlMs/AQTlEmqQXvX09ttvd+x5zJgx8d3vfjd22WWX/NqnCYPycccdFyuttFJ+1VS6aLbddttYccUV48ILL6yp94JyTUwaESBAoEcICMo9oowOggCBigsIyuWfAIJyyTX47LPPYs0114w555wzRo4cGeeff/5EQTmNJKdR6Pnnnz/39sYbb8yjyq+//nrMPffcEx3B2LFjI/20L+lCS+9gbhsyInr1nqnkI7Z7AgQIEGimgKDcTF3bJkCAQNcICMpd4zylvQjKJddgiy22iFGjRsW9994bs846a0z41Os09TqF55deeqmjpx9++GGedn3bbbdFmq494ZLWGT58+ES/F5RLLrbdEyBAoAsEBOUuQLYLAgQINFlAUG4ycA2bF5RrQGpWkzRSfMIJJ8T9998fiyyySN5NLUG5/cK5/fbbY/XVV5+oe0aUm1Ux2yVAgED3FxCUu3+N9JAAAQJFAoJykVDzPxeUm288yT1cccUVsdlmm8UNN9wQa6+9dkebSQXlFKhHjx4d8847b2530003xfrrrz/ZqdcT7tA9yiUV2W4JECBQgoCgXAK6XRIgQKDBAoJyg0Hr2JygXAfa1K7yxBNP5Idz7bXXXrHrrrt2bG766aePq6++epIP81p55ZUjPdQrXTTbbbddLLfccnHxxRfX1BVBuSYmjQgQINAjBATlHlFGB0GAQMUFBOXyTwBBuYQapFHjbbbZZqI9T+n1UDvuuGN+PdR7772XR5PPOuus6Nu3b029F5RrYtKIAAECPUJAUO4RZXQQBAhUXEBQLv8EEJTLr8EUe9D+HuX0wK96F0G5XjnrESBAoPUEBOXWq5keEyBAYEIBQbn8c0JQLr8GXRaU09Oy+/Tp082PWPcIECBAgAABAgQIVFtAUC6//oJy+TUQlLt5DXSPAAECBAgQIECAQFcKCMpdqT3pfQnK5deg6T0w9brpxHZAgACBhgiYNt0QRhshQIBAywsIyuWXUFAusQZrrrlmDBw4ME488cSae/HvgsWVV14ZgwYNqnkdQblmKg0JECBQqoCgXCq/nRMgQKDbCAjK5ZdCUC6xBoJyifh2TYAAgW4oICh3w6LoEgECBEoQEJRLQJ9gl4JySTXYeuut47zzzhtv78OHD4/TTz89Hn/88fj617+eP/vBD34QH3zwQdx2222x8MILxyuvvNKxTv/+/ePll18uPAIjyoVEGhAgQKBbCAjK3aIMOkGAAIHSBQTl0ksQgnJJNUhPoF5vvfViqaWWisMOOyz3Ys4554zVVlst5pprrjy9OoXmoUOHxqOPPhopFL/99tvRr1+/OOecc+J73/teTDPNNHmdokVQLhLyOQECBLqHgKDcPeqgFwQIEChbQFAuuwIhKJdZgklNvX7ppZfyfcu77LJL/O53v4szzjgjtthii45u1nKP8tixYyP9tC/pQmtra4u2ISOiV++Zyjxk+yZAgACBKQgIyk4PAgQIEEgCgnL554ER5RJrMLl7lFM43nHHHWPTTTeNSy65ZLwe1hKUhw0bFmka94SLoFxise2aAAECNQgIyjUgaUKAAIEKCAjK5RdZUC6xBpMLyltuuWUOyCussELceeedMe2003b0spagbES5xKLaNQECBKZCQFCeCjyrEiBAoAcJCMrlF1NQLrEG66yzTiy22GJ5inX7cumll8Y222wTN998cx5R3m677cYbHZ5++unj4osvjo022qjmnrtHuWYqDQkQIFCqgKBcKr+dEyBAoNsICMrll0JQLrEGO+ywQ4waNSpGjBgRs8wyS3zyySf5/uQ0bfoXv/hF/PnPf44NNtgg/vrXv8a3v/3t3NNFF100vvvd78YhhxwSvXv3jr59+xYegaBcSKQBAQIEuoWAoNwtyqATBAgQKF1AUC69BB7mVWYJnnvuufjZz36Wn2r96aefxtprr52nWd9www2pMLlre+21V1x99dU5UKcwfc011+TfpddCzTfffF4PVWYB7ZsAAQINFhCUGwxqcwQIEGhRAUG5/MIZUS6/Bk3vgQut6cR2QIAAAQIECBAgQKBhAr6/N4yy7g0JynXTtc6KLrTWqZWeEiBAgAABAgQIEPD9vfxzQFAuvwZN74ELrenEdkCAAAECBAgQIECgYQK+vzeMsu4NCcp105W74oILLhhDhgzJP0WLh3kVCfmcAAECkxdw37CzgwABAgS6WkBQ7mrxifcnKJdfg7p68Pbbb8fMM88cM800U+H6gnIhkQYECBCYrICg7OQgQIAAga4WEJS7WlxQLl+8hB4IyiWg2yUBAj1GQFDuMaV0IAQIEGgZAUG5/FIZUS6pBjfeeGMcccQR8cQTT8Q000wTK6+8cpx00kmxyCKL5P9fY4014uijj+7oXRpBnnfeeePmm2+OtdZaK0y9LqlwdkuAQOUEBOXKldwBEyBAoHQBQbn0EniPclkluOKKK/K7kpdeeun4+OOP45BDDsnvRE7vSz711FPj2GOPzf9uf5/yySefnIPz6NGjo1evXoJyWYWzXwIEKicgKFeu5A6YAAECpQsIyqWXQFAuvwT/24M0YtyvX794/PHHY6655sqjx7feemusttpq+fNVVlklVl111TjmmGPyv6c0ojx27NhIP+1LutDa2tqibciI6NW7+J7m7mKiHwQIEOgOAoJyd6iCPhAgQKBaAoJy+fU29bqkGrz44otx8MEHx7333hvvvPNOfPnll3lk+brrrov1118//yywwAJx+umnx9/+9rdYeOGF82jzMsssUxiUhw0bFsOHD5/oyATlkopttwQItLSAoNzS5dN5AgQItKSAoFx+2QTlkmqw5JJL5lHe/fbbL48ep6C81FJLxZVXXhmDBg2KCy+8MPbYY49488038yjyxRdfnO9nbl+MKJdUOLslQKByAoJy5UrugAkQIFC6gKBceglMvS6jBO+++27MMccc8de//rVjavWdd96Z/789KKfR5TQFOwXkoUOHxlZbbZX/W0tQnvCYPPW6jCrbJwECPUVAUO4plXQcBAgQaB0BQbn8WhlRLqEGafQ43Y+83nrrxaGHHpof0JVC8AMPPNARlFO3tthii3jyySfjscceyw/2SlOxBeUSCmaXBAhUWkBQrnT5HTwBAgRKERCUS2Efb6eCckk1uOWWW2L33XePl156KRZbbLH47W9/G2uuueZ4Qfn666+PDTbYIFZfffW4/fbbx+up10OVVDi7JUCgcgKCcuVK7oAJECBQuoCgXHoJTL0uvwTN74ELrfnG9kCAAAECBAgQIECgUQK+vzdKsv7tGFGu365l1nShtUypdJQAAQIECBAgQIBA+P5e/kkgKJdfg6b3wIXWdGI7IECAAAECBAgQINAwAd/fG0ZZ94YE5brpWmdFT71unVrpKQEC5Qm4F7k8e3smQIAAgfEFBOXyzwhBufwadKoHnXmIV/uGBeVOEWtMgEBFBQTlihbeYRMgQKAbCgjK5RdFUC6/BjX14J///GdMP/30ISjXxKURAQIEOi0gKHeazAoECBAg0CQBQblJsJ3YrKDcCaxmNL388stj+PDh8cILL8RMM80Uyy67bIwcOTJ23XXX+OCDD2KllVaK3/3udx0hecLXRH311VeF3TKiXEikAQECBEJQdhIQIECAQHcREJTLr4SgXGIN3nzzzVhggQXimGOOicGDB8dHH30Ud9xxR/z0pz+N3XbbLa644or8+/333z9SIJ533nljmWWWiR122CG233773PO555678AgE5UIiDQgQICAoOwcIECBAoNsICMrll0JQLrEGDz/8cCy//PLx8ssvR//+/cfrydZbbx033nhjjB49Oo8mty+1TL0eO3ZspJ/2JV1obW1t0TZkRPTqPVOJR2zXBAgQ6L4CRpS7b230jAABAlUTEJTLr7igXGINvvjii1h33XXj/vvvz/9dZ511YuONN46+fftGCsqvv/56/PnPfx6vh7UE5WHDhuXp3BMugnKJxbZrAgS6vYCg3O1LpIMECBCojICgXH6pBeWSa5CmVN99991x8803x5VXXhljxoyJ++67LwfddI/yVVdd1emgbES55KLaPQECLSkgKLdk2XSaAAECPVJAUC6/rIJy+TXo6EEaYU5TsPfaa6947LHHJhmUF1100dhxxx1j7733rrnn7lGumUpDAgQqLCAoV7j4Dp0AAQLdTEBQLr8ggnKJNUgjx3/5y1/ylOt+/frlkeQtt9wyjyJfeumlkwzKqe2MM84Yp556avTu3TvmmGOOwiMQlAuJNCBAgICHeTkHCBAgQKDbCAjK5ZdCUC6xBk8//XTsueeekR7qlS6GNJr8i1/8Ij/xOt2jPKmp1/fee28eUX722WfzA7u8HqrEAto1AQI9SsCIco8qp4MhQIBASwsIyuWXT1AuvwZN74ELrenEdkCAAAECBAgQIECgYQK+vzeMsu4NCcp107XOii601qmVnhIgQIAAAQIECBDw/b38c0BQLr8GTe+BC63pxHZAgAABAgQIECBAoGECvr83jLLuDQnKddO1zooe5tU6tdJTAgSmTsB9xlPnZ20CBAgQ6B4CgnL5dRCUy69B03sgKDed2A4IEOgmAoJyNymEbhAgQIDAVAkIylPF15CVBeWGMHbvjQjK3bs+ekeAQOMEBOXGWdoSAQIECJQnICiXZ9++Z0G5STVYc80145vf/GbMMMMMcdZZZ8X0008fO+20UwwbNizvMb36ab/99ouRI0fGhx9+GP/5n/8ZRx99dGywwQb5ncqnn356bLTRRrntwIED44033oi33nor//uee+6J1VdfPd5///2YZZZZCo9AUC4k0oAAgR4iICj3kEI6DAIECFRcQFAu/wQQlJtUgxSUH3nkkdhrr71i8803z+E2vRv5pptuirXXXjv+67/+Kz766KM44YQTYpFFFomnnnoqpplmmlhvvfVyQJ533nnjd7/7XQ7Dc801V8w888xx1113xZJLLhlHHXVUDtjpncq1LIJyLUraECDQEwQE5Z5QRcdAgAABAoJy+eeAoNykGqSg/MUXX8Qdd9zRsYcVV1wxvvOd7+SfFIiffvrpWHTRRSfqQQrIZ5xxRjz++OM5EB9xxBGxwAIL5IC9yy67xLrrrhvLLrtsHoGe1DJ27NhIP+1LutDa2tqibciI6NV7piYdsc0SIECgfAFBufwa6AEBAgQITL2AoDz1hlO7BUF5agUns34KygMGDIhTTjmlo8UPf/jD+PrXvx6LL754/v0rr7wyybVTQF5mmWXyVOsjjzwyjzSnoHznnXfGhRdeGH379o0RI0bksD2pJU3vHj58+EQfCcpNKrbNEiDQbQQE5W5TCh0hQIAAgakQEJSnAq9BqwrKDYKccDMpKKd7i0888cSOjwYNGhSzzz57LL/88nHcccdNNih/9dVXHfcpp6B82GGH5RHhddZZJ6688spYbbXV8pTsWWeddZK9N6LcpKLaLAEC3V5AUO72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7Dddzgf26NFDP3hr6dKlDvVgvVmWh7Ju5fae3J/stjj9IYAAAggggAACgS9AUDZfI4KyQzU4efKkXLhwQT+p2vRGUDZdgez7JygHbm0YGQIIIIAAAgggYEqAoGxK/r/9EpTN18DxERCUHSf2uwOCst90HIgAAggggAACCISsAEHZfGkJyg7V4OKp14sWLZLExET57rvvpGjRolK3bl1JSUmRYsWKyfnz52X06NHy6quvytGjR+X666+XsWPHyp133qlHduDAAalevbosXrxYpk2bJp999plce+218vLLL0vDhg0tjZ6gbInJyE4EZSPsdIoAAggggAACCAS0AEHZfHkIyg7VwBuUX3rpJalSpYqMGzdO2rdvL6dOnZINGzbIww8/LFdeeaVMmjRJEhIS5JVXXtEBOikpSf8tNTVVB2JvUK5du7a8+OKL+m/Dhg2TrVu36uBdsGDBTGeQkZEh6se7qQ+ax+MRT1yyREQWdeiMadYfAYKyP2ocgwACCCCAAAIIhLYAQdl8fQnKDtXAG5RHjBghf//733XgrVq1aqberrnmGunfv78888wzvtfq168v9erVkxkzZviC8uuvvy49e/bU++zZs0eioqLkq6++EhWgL99U8FZXsC/fCMoOFTsfzRKU84HHoQgggAACCCCAQIgKEJTNF5ag7FANvEFZTZlu06aNbNmyRf/bunVriY2NlVKlSon3A7Bu3Tpp2rSpbyRPPvmk7Nq1S9auXesLyup4FZ7VduLECSldurSsX79ebr/99kxnwBVlh4rqQLMEZQdQaRIBBBBAAAEEEAhyAYKy+QISlB2qwcX3KKunX2/cuFFWr14tS5YskcOHD+t7jcuUKSMlSpTIFHjj4uJk9+7d8uGHH/qC8ueffy4xMTF6tGrZKRW0P/roI2nWrFmuZ8A9yrkSGduBoGyMno4RQAABBBBAAIGAFSAomy8NQdmhGmS3jvK5c+f0FOxBgwbpn+ymXqvp19OnTycoO1SfQGmWoBwolWAcCCCAAAIIIIBA4AgQlM3XgqDsUA28QXno0KH6yrCacl2+fHl9Jfmhhx6SpUuXStu2bWXy5MkycuRI/dRrdcV41qxZMnHixEwP8+KKskOFMtwsQdlwAegeAQQQQAABBBAIQAGCsvmiEJQdqoE3KD///POi7jnesWOHvidZXU1+/PHHZcCAAbrni5eH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\" width=\"970\">"
- ],
- "text/plain": [
- "<IPython.core.display.HTML object>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "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('tabindex', '0');\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",
- " 'z-index: 2;'\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(\n",
- " 'style',\n",
- " 'box-sizing: content-box;' +\n",
- " 'pointer-events: none;' +\n",
- " 'position: relative;' +\n",
- " 'z-index: 0;'\n",
- " );\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;' +\n",
- " 'left: 0;' +\n",
- " 'pointer-events: none;' +\n",
- " 'position: absolute;' +\n",
- " 'top: 0;' +\n",
- " '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",
- " /* This rescales the canvas back to display pixels, so that it\n",
- " * appears correct on HiDPI screens. */\n",
- " canvas.style.width = width + 'px';\n",
- " canvas.style.height = height + 'px';\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",
- " /* User Agent sniffing is bad, but WebKit is busted:\n",
- " * https://bugs.webkit.org/show_bug.cgi?id=144526\n",
- " * https://bugs.webkit.org/show_bug.cgi?id=181818\n",
- " * The worst that happens here is that they get an extra browser\n",
- " * selection when dragging, if this check fails to catch them.\n",
- " */\n",
- " var UA = navigator.userAgent;\n",
- " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n",
- " if(isWebKit) {\n",
- " return function (event) {\n",
- " /* This prevents the web browser from automatically changing to\n",
- " * the text insertion cursor when the button is pressed. We\n",
- " * want to control all of the cursor setting manually through\n",
- " * the 'cursor' event from matplotlib */\n",
- " event.preventDefault()\n",
- " return fig.mouse_event(event, name);\n",
- " };\n",
- " } else {\n",
- " return function (event) {\n",
- " return fig.mouse_event(event, name);\n",
- " };\n",
- " }\n",
- " }\n",
- "\n",
- " canvas_div.addEventListener(\n",
- " 'mousedown',\n",
- " on_mouse_event_closure('button_press')\n",
- " );\n",
- " canvas_div.addEventListener(\n",
- " 'mouseup',\n",
- " on_mouse_event_closure('button_release')\n",
- " );\n",
- " canvas_div.addEventListener(\n",
- " 'dblclick',\n",
- " on_mouse_event_closure('dblclick')\n",
- " );\n",
- " // Throttle sequential mouse events to 1 every 20ms.\n",
- " canvas_div.addEventListener(\n",
- " 'mousemove',\n",
- " on_mouse_event_closure('motion_notify')\n",
- " );\n",
- "\n",
- " canvas_div.addEventListener(\n",
- " 'mouseenter',\n",
- " on_mouse_event_closure('figure_enter')\n",
- " );\n",
- " canvas_div.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",
- " canvas_div.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.canvas_div.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",
- "\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",
- " if (name === 'button_press') {\n",
- " this.canvas.focus();\n",
- " this.canvas_div.focus();\n",
- " }\n",
- "\n",
- " // from https://stackoverflow.com/q/1114465\n",
- " var boundingRect = this.canvas.getBoundingClientRect();\n",
- " var x = (event.clientX - boundingRect.left) * this.ratio;\n",
- " var y = (event.clientY - boundingRect.top) * 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",
- " 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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n",
- "\n",
- "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"<div id='\" + id + \"'></div>\");\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",
- " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\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",
- " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\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 = '<i class=\"fa ' + image + ' fa-lg\"></i>';\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 = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\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": [
- "<IPython.core.display.Javascript object>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "text/html": [
- "<img src=\"data:image/png;base64,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a3tq4epICNau8tJ4nAkQrOOs4OwuAggggAAClgoQrO0pDMHanlq4OhKCtau8NB5nAgTrOCs4u4sAAggggIClAgRrewpDsI5wLfQe6po1a5rXaE2cOFHy5csngwYNkg4dOkjPnj1l5syZUrp0aRk1apR5Z7Uuy5cvl969e8v69eulePHi0qlTJ/OaLX2P9ZtvvikDBw6U3bt3S0JCQnC0LVu2lGLFipk+nCwEaydKrIOAMwGCtTMn1kIAAQQQQAABdwUI1u76htI6wToULQfrarBeu3at9OnTR9q3by/Tp0+XAQMGSLNmzaR169aivx8xYoSkpqbKrl275MiRI1KtWjXp3Lmz/PWvf5XNmzfLI488Io8//rgkJyfL4cOHpVy5crJo0SJp0qSJGYFuU7ZsWZk/f740bdrUwahECNaOmFgJAUcCBGtHTKyEAAIIIIAAAi4LEKxdBg6heYJ1CFhOVtXgfPr0aVmxYoVZXf9fpEgRadOmjUyaNMn8bP/+/SYsf/755yYcz5o1S7799lvJkyeP+f2YMWPkmWeeEX01ls5S33333VKyZEl55513zO/feustE9b37NljZsazWtLS0kS/AouedImJiZKYlCoJ+Qs42RXWQQCBbAQI1hwaCCCAAAIIIGCDAMHahir8zxgI1hGuhQbr6tWry+jRo4MtV6xY0VwGrpd763L27FkTmOfOnSsTJkwwwXv8+PHB9fWS8Nq1a8vOnTulQoUKZna7W7du8tNPP0n+/PmlYcOGcs0115iZ7+wWne1OSUk559cE6wgXnObiUoBgHZdlZ6cRQAABBBCwToBgbU9JCNYRrkVW76muVKmSJCUlma/AorPTs2fPNvdI673S48aNC/5u3bp1UqdOHXOpuM4ynzx5UsqUKWNCeN26dUWD+urVq+Xaa6/NdvTMWEe4sDSHQDoBgjWHAwIIIIAAAgjYIECwtqEK/zMGgnWEaxFqsNaAnNWl4H379pWjR48GH1im92AfP35c6tWrZ0K43osdysI91qFosS4C5xcgWHOEIIAAAggggIANAgRrG6pAsHalCqEGa52B1oeXdenSxVwuvmXLFunatWvw4WWBQX700Udy1113ic5+P/jgg/L888+HNH6CdUhcrIzAeQUI1hwgCCCAAAIIIGCDAMHahioQrF2pQqjBulWrVud93VZgkPoQNL0sfN++ffL9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\" width=\"982\">"
- ],
- "text/plain": [
- "<IPython.core.display.HTML object>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "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('tabindex', '0');\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",
- " 'z-index: 2;'\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(\n",
- " 'style',\n",
- " 'box-sizing: content-box;' +\n",
- " 'pointer-events: none;' +\n",
- " 'position: relative;' +\n",
- " 'z-index: 0;'\n",
- " );\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;' +\n",
- " 'left: 0;' +\n",
- " 'pointer-events: none;' +\n",
- " 'position: absolute;' +\n",
- " 'top: 0;' +\n",
- " '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",
- " /* This rescales the canvas back to display pixels, so that it\n",
- " * appears correct on HiDPI screens. */\n",
- " canvas.style.width = width + 'px';\n",
- " canvas.style.height = height + 'px';\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",
- " /* User Agent sniffing is bad, but WebKit is busted:\n",
- " * https://bugs.webkit.org/show_bug.cgi?id=144526\n",
- " * https://bugs.webkit.org/show_bug.cgi?id=181818\n",
- " * The worst that happens here is that they get an extra browser\n",
- " * selection when dragging, if this check fails to catch them.\n",
- " */\n",
- " var UA = navigator.userAgent;\n",
- " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n",
- " if(isWebKit) {\n",
- " return function (event) {\n",
- " /* This prevents the web browser from automatically changing to\n",
- " * the text insertion cursor when the button is pressed. We\n",
- " * want to control all of the cursor setting manually through\n",
- " * the 'cursor' event from matplotlib */\n",
- " event.preventDefault()\n",
- " return fig.mouse_event(event, name);\n",
- " };\n",
- " } else {\n",
- " return function (event) {\n",
- " return fig.mouse_event(event, name);\n",
- " };\n",
- " }\n",
- " }\n",
- "\n",
- " canvas_div.addEventListener(\n",
- " 'mousedown',\n",
- " on_mouse_event_closure('button_press')\n",
- " );\n",
- " canvas_div.addEventListener(\n",
- " 'mouseup',\n",
- " on_mouse_event_closure('button_release')\n",
- " );\n",
- " canvas_div.addEventListener(\n",
- " 'dblclick',\n",
- " on_mouse_event_closure('dblclick')\n",
- " );\n",
- " // Throttle sequential mouse events to 1 every 20ms.\n",
- " canvas_div.addEventListener(\n",
- " 'mousemove',\n",
- " on_mouse_event_closure('motion_notify')\n",
- " );\n",
- "\n",
- " canvas_div.addEventListener(\n",
- " 'mouseenter',\n",
- " on_mouse_event_closure('figure_enter')\n",
- " );\n",
- " canvas_div.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",
- " canvas_div.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.canvas_div.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",
- "\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",
- " if (name === 'button_press') {\n",
- " this.canvas.focus();\n",
- " this.canvas_div.focus();\n",
- " }\n",
- "\n",
- " // from https://stackoverflow.com/q/1114465\n",
- " var boundingRect = this.canvas.getBoundingClientRect();\n",
- " var x = (event.clientX - boundingRect.left) * this.ratio;\n",
- " var y = (event.clientY - boundingRect.top) * 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",
- " 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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n",
- "\n",
- "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"<div id='\" + id + \"'></div>\");\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",
- " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\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",
- " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\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 = '<i class=\"fa ' + image + ' fa-lg\"></i>';\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 = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\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": [
- "<IPython.core.display.Javascript object>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "text/html": [
- "<img src=\"data:image/png;base64,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CCCAAKGQPoAAAggggAACCCCAAAIIhFiAUBjixufQEXAp0KFDB2nWrJkMHTpUZs+eLQ899JCsXLlSypYt63I3qAuBUifw1FNPmXPmjTfekC+++EJ++9vfyptvvim/+c1vSt2xsMMIIIAAAiVTgFBYMtuFvUIg5QS++eYbOeuss2TkyJFy3333yX/913+ZkOgtzz33nHz77beSlZVl/djr1asnrVq1kqlTp5q6tmzZIvXr15cpU6ZI165drddfkivIzs6WnJwcOXz4cN5uqpUuS5cuzec1evRouffee60fzo8//iijRo0ybebti1eptmG3bt3k888/F21Xl4v2FTXR/mNz0bb43e9+J+eff77893//t9x4441y991351VZ2H4U7OO6n61bt5bnn39eOnbsGNjuFtZf/BYexDmvnydnnHGGtG/f3m+1+dbzzv14+nJR/TKunUniRu+88468/vrr5vM3IyMjiXtC1QggkCwBQmGy5KkXgRAKzJw5U2666SYzWqjBI3L5wx/+IOvXr7d+ga11vv/++1KpUiU5+eST84UcQqFIYRf5H374oXHSi29dErmQjqfbf/fdd1KtWjUZNmyY2b/IZefOnfLZZ5+ZLxjKly8fT/Fxb6P1/vvf/8735UbchRWzoYbexo0bmy9W3nrrLUlPT8/borD9KNjHS2IoDOKcP/bYY03I9b7gidU/kb5cVL+MdT+Svf5f/vIX6devX1K+XEn2sVM/Agj8rwChkJ6AAAIlQiCIC8R4D4SRwv/I+Rn5SeRCOp42SqWL73iOP4htCIWFKybSl231y59++kmOPvpoSUtLO2KndXSyQoUKQXSJfGUQCgMnpUAESp0AobDUNRk7jEBwAl4AWLNmjQwfPtzcs6QXIldddZWMHTvWjM54y6FDh0QvHCZPnmy+Ta5cubJcccUVZjpo7dq1i9wpHc0ZPHiwvPLKK2aKqI7SNWzY0IwW6rQ4nRKo90gVXLwpjD///LOZPjhjxgxTt26vIVJ/5+2jTh/T0RH9e+QoipZ5wQUXyC+//CJ6nLr4mT4abWqgn9Ckdegx6UXjk08+ab6B/+CDD6Rq1arypz/9yYx2lSlTJu9wd+3aJffff78sXLhQ1Eo9dYqgjqgWNfqlU70mTpwo27dvNyaRS6dOnczUxi+//DLvvk29L23cuHGybt060856b9rDDz+cb6Qr3umj6tujRw+ZN2+ezJo1y7TPgQMHTBvrv7/66ivTVtpODz74YL4pakuWLJEHHnhA/vWvf4le9Op65513njzzzDOmv+jU3oLLrbfeakaH/E4f9Y5LR6NHjBghixcvNhfeV155penr2p+95fHHHzf38H388ceyf/9+adCggXTp0sVM2Yy8B7ZgH9HRSh25WrZsWb7dPXjwoNSpU8f0wxdeeMH8zU+f9grRaZaPPfaY8dFF7yX8f//v/0n37t3Nv2OZPqplqYGOiv/www9mSqoe76mnnlrsB8vLL79szuOPPvpITjzxRLnjjjtMGQWnG/vxK+6c93NOFBaaWrZsmTfNeceOHWZ0Wfdb+9FJJ51krPQYjjrqKHO8hYXCwvpyQRxvu2j9Un+vI7pa/4oVK0T7QNOmTU3d2ue8xeu/r732mjlPXnzxRfO5ocFQP1/1v5944gkZMGCArF27Vq6++mqzno5Q6zmj55t3bl133XXm3KpYsWJe+Wqk7aR9Tz+rt27dKqeccopZT89RXbxzo+Cx/OMf/zCfY34++2P9LCq2s7ECAgg4FyAUOienQgRKjoB3MVC3bl25/vrrTUDbsGGDDBkyxIS29957L+8iuHfv3vL000/LnXfeaS4m9KJI19MLaw1bJ5xwQtQD04sbXUcvRLTcPXv2mH/rdEQNLzo9sVevXmYa4Pz58/PKufDCC80FiV5E6YV2//79pXnz5ubCRi+29EJ+1apVcswxx8iiRYvkj3/8o7lXUY/DW/TC/vTTT5dHH33UXEjr4ioU6sW3hjq9oNOLbr041f3Qi7QJEyaYfdHgpBdseux6ca3TA/VY9UE8l19+udkm2qLhrkmTJiYYaiDzFvWtWbOmqWfMmDHm13pBqMFT77+75pprTCjR+6i0DL1o9aaGxhMKtT4tU8PCSy+9JOecc465J7Ft27bmHriBAwfKJZdcYurSdtM+8O677xob7UfaPvp33V+9n0kvcl999VVjpW2r4Vb7kIYg7zg1OOr031hDobaD9jmtT0OW7ptOadYvO7zlnnvuMfuoYbRcuXIm0Gvf1S9LItcrGMZ0f/v27SubNm0yF97eol+GtGvXzvRRLcNvn9bt9YsB/cJGffWLAu3z2q92795tQoEusYRC7fv6ZYAeswYLvb9X20HbLvKLioJ9TtuxTZs2ctFFF4n6aMjRL2X0XuFt27bluwfVj19R57zfc2L58uVy6aWXmnsl9bNIF/1yRPuyBkINvPoF0aBBg0xf0T6nXwioo4ZiXQqGwsL6cmHnX25ubpH9Ur/k+v3vf2/OZ/3cUmMNd/r5pNPotQ/q4vVfDaz6OacP5NIvIvTLk8suu8z0UQ15WsaZZ55pjufcc881bahf+OixaR36ua19Rc8978s9LV9DobZ59erVzf2/+qWFtpsG1o0bN5ovPLQc/Z1+8aBfWtSqVcvsmzqqp5/P/lg+i6J+oPEHBBBIqgChMKn8VI5AcgW8AKAjIH/961/zdkZHEzp37mxG5vR/vWB1++23m1EFb9EwoYFGL0z0ojnactxxx5mLeR2RibZEmz6q34rrRZx+I64Xxt6iYVBHk/RCq0+fPvLrr7+aETa9kHr22Wfz1tOLXh0d+/rrr+X44483v3cVCvXCUEf/9Nt9b9Hw+/e//92MaOro0d/+9je57bbbZM6cOaLf9HuLXqTpvuvDH/TiMtqiF4EazN9+++28VXR0UttKLyj1QlKfWKkXf+qkwcVbdJRHw0uLFi3MyJgusYZCvZ/LG/nQ0Tf9gkEXHfnQIKfHoSOl3qLHqRfE+gVDz549TbtqGToKogG3sKWoaXqxhsKC+6NBVIOejlAWNvKkAU5/9EJeA7WO5FapUsXsZsEw9v3335sRNL34jjwf9Hi1L+jFt45Q+e3T2ke0fW644QZzLkZbYgmFGk4jv2jQB8/oF0IamPRLmGiL/k37kX55of1Nl3379plzSUf1Ih9MFFlGUX7RzvlYzolo9xTqOaWfAxqW9DzzFv2SRNtHf6+hJzIURuvL0UyK6pcanjdv3my8dB918UYLNXhqkNb+5vXfW265RaZNm5avKm80VQO5hl9v0dF9HXHUL+00IHqLdy7peahfyOiiddSoUUM++eQT0c9hXTTIaz/VPqpfWOkSbfpoLJ/9fj6LonYw/oAAAkkXIBQmvQnYAQSSJ+AFAA1Y+n/o3qIBS0dodIrepEmTzBRIDRkaAjWIRS7et8n6rX20RYOajgz++c9/NqN4WlfBV1FEu0C8+eab86Z/Fbxoz8zMzBdo9GJPQ6uOEuiIil6E6ToXX3yxCV3e4ioU6jHraEzk4t3bpVMj9dg0MOhFul5gRx6fTnfTizkNhnoRGG3REUcdAdWLN28KoI6Q6KLtpYu2oQYwfQWITmGLXHQfdJqYXijqEkso1LCuUz+1D+gIQ+RTC3W/NYDpcUROQ9bwoBen2t4ajvSiWbfX/dI+piN4GmAjlyBDYaST1uEFEO0z6q2LTkPWEU0N2hp4Ihft5/pFiC6FhTENFrqOXvTrqI6O6OnIy1133WU8dPHbpzU46yiNPhlSQ0a0JZZQqK+30DK9RUeLTjvtNNMW3uhVwXp05EpHjLR9dDQpctG6NcxEhkK/ftHO+VjOiWihUL8gOvvss/Om63r7rKO4jRo1yvsyyQuFRfXlaO7R+qV6aR/XL2Eiv0TTcrwve3RkVt29UFjwyyNdV0OhjsAV7IP6eaafF6tXr863azrCqu2kX8I88sgj5m/6maJfKuiXGpGL9kkdjdTPdl2ihcJYPvv9fBZF7cT8AQEEki5AKEx6E7ADCCRPwAsAOoKh05ciF51+qBeiOp1Tp1zp9CwdKSh4/6CGPJ3Oqd9EF3XxpGUsWLDArKsXcjpNSi+QtB5dol0g6iiZToeKtug36PpNui46JU0v+LwLX/3GXEexIr851/VchUKdBlnQxfvmXUcvdaqh+umF6aeffnrEIWpw1otunR4abfFCh4726pRTz8AbQdXtdERAp45GWzS8aIDWJZZQqFOG9cJYR2R0OmLkoiPDGhb0/qyCi94Tp1MzdSqdLjpdVvuChlPvHj4NUeqjS5ChUEf6Iqc6Fxxp1DCnIVUDtppqX9GRMQ3YOqro3Wel+1VYGPP6nE5/1emW2g66nTcypdv57dNeu+k+6Zcb0ZZYQmHBV1L4eciSfj5o/XoO6whV5KIjTRpAvFAYi1+0cz6WcyJaKNRzR7/cirbo1Fv9TPOOv6i+HK2MaP3S89JpvwXPOx3x1ftTdfqmTgH1+l9hX7hpKNT+qn0nctHR48I+L7x19L5lnY2gi3dPoTdd3Vun4GdgtFAYy2e/n8+iqA3CHxBAIOkChMKkNwE7gEDyBIIaKdRROZ1+5mfRi0a9t0ovJvUbb7141iXaBaJ+g6/hwVuvYB36jXzkQzJ0FEcvhHS0Rqdj6iiL1hl5v5SfUKjTz/Tbe32IS+Si91Tqt//Rpst56+oFnd+RQg0SOqJY2EihOmnYK2rRkRW9yNTj1PX1AlD32xu580bD5s6dmze9s2B53jS0WEKhhgEd6dMLUJ2CqVPgvKW4kUK9t67g6IUGUx211tEoDZr6dx3lcBkKvfsCNSx4U2H1mLzR1uJCofdQGR3x1NE3HVnXvhc5ku63T9sYKYwnFHojXxpuixspjMWvqJFCv+dEtFCoI2F6r120ae06fVJ/vFBYVF+Odu4VNVKoI3b6GRJtpNAbsfZCoY7iR04F1Tq9h1XpPaSRi35Zp20SeX9r5N814Hrv7Ew0FBY3Uljws7+4zyI//x/BOgggkBwBQmFy3KkVgRIhUNw9hd4UR2+KmY7ejB8/Pm/f9UJGpyrq6IF+oxzLoiOFOj1Ppxfqcu2115pg401j9MrScKDT7SKn7RVVj44S6rQtHX3SEQd96IU+ZCVy8RMKvft29F5Eb1qhPpxFRyL1W3o/odDPPYXehb9Ov1QTb/G+uS/44JzCjl0Ds95DpGFb71nUB2/ofaHeohe+3hMH9YEVRS2xhELvhd86LVjvF9ULYLXXRe+F1JEyvVc18kXrGkw1rBd8OE7kPu3du9cEWp0GpyOIOlVOL7J1371pcd76sd5TWNxIoYYe7ecaqr1RbG1rvadOR3OKC4W6XxrMdSRY207v19RQru0Sa5/WdtNRVR2FnT59etRmsz1SqBX7vacwFr9o53ws54TeJ6znuXdPrIek06U1WGqg8u4BLQyw4INmCuvL0eCL6pf6QCy9J1TvK9Sp+Lro/ZU6TVpH1AreUxhLKNSgq59pemyFPZk3cn/9hkKv3XSmgT74yVti/ewv7rOoyA8f/ogAAkkVIBQmlZ/KEUiuQMGnj+q0Nu/po/q0Pr0I1qcv6qL3IemFvE7p0wDiPX1Un6qn9xB5D3EpeER6ga8hRS9s9R4aHdnTCyCduqUPjvEeCuPti06303sOvafs6ciLjirpQxW0bg2hOjVMp2jpBbo+cTQyTGl9Okqg+6Pr6EWNPkkycvETCvWCTkcgdYqXhhO9X0dHQfRiTv/mJxR6Tx/VJ1zqPuhFqoZqDU56nLp4T1rUMvXpo/qCcg3HetGn7VHU00e9Y9KLTW9US4+5sIfT6GijPp1Qn+CpD4DRC2UN4NrG+nRDrVuXeEJh5Hbeg1y8p4/qPYf6pYE6ek8f1YDqPX1UQ7yuo9N89YEg6qEjIBoe9WE1+gRWXbxpnNoG+moPbzQk6FCoIzj6wBu9qNcQqvujoyXa33UqsJ9QqPetad/Rqdb68BkNmJGvvIilT3tPH9V7Fb2nj+qFu45SeW3mIhRqwNV+oy4anPQYNKDrvZg6rdw7H2Lxi3bOx3JO6Gia3p+nI7l63nszB9RcR9Q0kGnI1/bQcrUd9TzUfqftUzAUFtaXi/qUjtYvvaeP6n2Neq+zfo7qOa/nZmFPH40lFOoooY5E6xcc+oWLjojqZ4B+Nmn52j7efa9+Q6F3r7N+zuu95PoZq2bqGctnv5/PouT+vx61I4BANAFCIX0DgRALeBdl+sAC/W+94NWLCJ3WpSMd+hjzyOCho1fekzO99xRq2CjqPYX66HZ9h5VO49QLML3HTC/+dVqgXnR7L2LWb891NEXvH9RgpxeZ3oWm3hukYUpHLjXk6RMctU59J5lecOloSuSiT0zVkTINIhqwCi5+QqFuo68S0Cerap16wamjjnohVvC9bIV1IW/ql46e6T7qk0A1zOgTLHV77z1puq0+SEKDk/eeQr2/U0O0PuykqPcURtar22uQ1Hu/1Lnguxp1XS1fHbW9tV10JEynN+o0N30YUCKhULf1Rjc1yOgx6kW49iudRqkjrhrk9OEWup/e1FYdAdYgqVNtNWDodEB9Yqpe2OqXAd6i941qONdApPse73sKixsp1Pr0tRp6L5i2u365oG2h967qlyEFQ6Fe/GugL7ho39M+7z3Ft+DfY+nT2u+99xRqv9FQrUFHw6Au+r8F96NgH4/28no/9xR6+67v0FMXDX7ad/TBM/o+vYLng1+/os55v+eEvi5Ep7XqF1P6BNnI9xRqcNb7+nS/9csSDTg6sqbhVr+o0S9DCguFhfXlaP83Ea1f6vreewr1Cy0NS/plg56n3vsBdZ14po/qdhoMdTaDTgfW/qfhVz9XddRUp257sxv8hkItUz/r9D5gPQ91fwu+p9DvZ7+fz6JonvweAQSSJ0AoTJ49NSOQdAEvFBa8UE76jqXADkS7HygFDo1D+D8BHaHWUTK9DzKZS0nZj2QaUDcCCCCAQGIChMLE/NgagVItQCi013yEQnu2yS5Zp+npKKCOsOqTJAs+fMXV/pWU/XB1vNSDAAIIIGBPgFBoz5aSESjxAoRCe01EKLRnm+yS9bzR6dU6pVQfihL5iguX+1ZS9sPlMVMXAggggIAdAUKhHVdKRQABBBBAAAEEEEAAAQRKhQChsFQ0EzuJAAIIIIAAAggggAACCNgRIBTacaVUBBBAAAEEEEAAAQQQQKBUCBAKS0UzsZMIIIAAAggggAACCCCAgB0BQqEdV2el6ruE9P1f+v4lfR8RCwIIIIAAAggggAACqSCg7yvet2+fnHjiiYW+fzcVjrGkHAOhsKS0RJz7oS/k1ZdVsyCAAAIIIIAAAgggkIoC+k7Y2rVrp+KhlZhjIhSWmKaIb0f27t0rGRkZ5gXKlSpViq8QtkIAAQQQQAABBBBAoIQJ/Pvf/zaDH3v27JHKlSuXsL1Lrd0hFJby9tSTRU8SDYeEwlLemOw+AggggAACCCCAQJ4A17nuOgOh0J21lZo4WaywUigCCCCAAAIIIIBAkgW4znXXAIRCd9ZWauJkscJKoQgggAACCCCAAAJJFuA6110DEArdWVupiZPFCiuFIoAAAggggAACCCRZgOtcdw1AKHRnbaUmThYrrBSKAAIIIIAAAgggkGQBrnPdNQCh0J21lZo4WaywUigCCCCAAAIIIIBAkgW4znXXAIRCd9ZWauJkscJKoQgggAACCCCAAAJJFuA6110DEArdWVupiZPFCiuFIoAAAggggAACCCRZgOtcdw1AKHRnbaUmThYrrBSKAAIIIIAAAgggkGQBrnPdNQCh0J21lZo4WaywUigCCCCAAAIIIIBAkgW4znXXAIRCd9ZWauJkscJKoQgggAACCCCAAAJJFuA6110DEArdWVupiZPFCiuFIoAAAggggAACCCRZgOtcdw1AKHRnbaUmThYrrBSKAAIIIIAAAgggkGQBrnPdNQCh0J21lZo4WaywUigCCCCAAAIIIIBAkgW4znXXAIRCd9ZWauJkscJKoQgggAACCCCAAAJJFuA6110DEArdWVupiZPFCiuFIoAAAggggAACCCRZgOtcdw1AKHRnbaUmThYrrBSKAAIIIIAAAgggkGQBrnPdNQCh0J21lZo4WaywUigCCCCAAAIIIIBAkgW4znXXAIRCd9ZWauJkscJKoQgggAACCCCAAAJJFuA6110DEArdWVupiZPFCiuFIoAAAggggAACCCRZgOtcdw1AKHRnbaUmThYrrBSKAAIIIIAAAgggkGQBrnPdNQCh0J21lZo4WaywUigCCCCAAAIIIIBAkgW4znXXAIRCd9ZWauJkscJKoQgggAACCCCAAAJJFuA6110DEArdWVupiZPFCiuFIoAAAggggAACCCRZgOtcdw1AKHRnbaUmThYrrBSKAAIIIIAAAgggkGQBrnPdNQCh0J21lZo4WaywUigCCCCAAAIIIIBAkgW4znXXAIRCd9ZWauJkscJKoQgggAACCCCAAAJJFuA6110DEArdWVupiZPFCiuFIoAAAggggAACCCRZgOtcdw1AKHRnbaUm72TJzJoj6eUrWKmDQhFAAAEEEEAAAQTCKbDl4SuTduCEQnf0hEJ31lZqIqT3CJAAACAASURBVBRaYaVQBBBAAAEEEEAAgf8RIBSGoxsQCkt5OxMKS3kDsvsIIIAAAggggEAJFiAUluDGCXDXCIUBYsZb1KeffirNmjWTMmXKyJ49e2IqhlAYExcrI4AAAggggAACCMQgQCiMAasUr0ooTHLj/fLLL9K8eXOpVq2avPPOO4TCJLcH1SOAAAIIIIAAAgj8R4BQGI7eQCj00c6tWrWSxo0bm5G8adOmSbly5WT48OHSuXNnufPOO2Xu3LlSvXp1mTBhgrRt21aWLl0qrVu3lpdeekkGDRokGzdulCZNmsikSZNMOZHLfffdJ19//bVcdtllkpWVRSj00R6sggACCCCAAAIIIOBGgFDoxjnZtRAKfbSAhsI1a9ZI//79pVOnTjJ79mwZNmyYtGnTRjp06CD697Fjx8qcOXNk27ZtsmLFChMKTz/9dBk/frzUrFnThMP169fLpk2bpGzZsqbWJUuWSI8ePWTt2rXywgsv+AqFubm5oj/eotNHMzMzhaeP+mhIVkEAAQQQQAABBBCISYBQGBNXqV2ZUOij6TT0HTx4UJYtW2bW1v+uXLmyXHPNNTJ9+nTzux07dkitWrXk3XfflQMHDphQOGvWLBMiddm1a5fUrl1bpk6dKtdff718//335j7CGTNmSIsWLczv/YwUZmdnS05OzhF7TSj00ZCsggACCCCAAAIIIBCTAKEwJq5SuzKh0EfTaShs1KiRPP7443lr161b10wd7devn/nd4cOHJT09XRYuXCiVKlUyoXDr1q1Sp06dvG00BLZv396MMmqgbNiwoTz88MPm735DISOFPhqMVRBAAAEEEEAAAQQCESAUBsJY4gshFPpoIg2FTZs2lXHjxuWtXa9ePTOypz/ekpaWJvPnz5eMjIyooVCnmw4dOtSs88MPP+Rtq6Hy0KFD5r7Fp59+Wv70pz/52DMRnj7qi4mVEEAAAQQQQAABBOIQIBTGgVYKNyEU+mi0eEOh3nuoU0V12b17t5k+OmXKFPO7jz76yExD9RYdYXzkkUfME0hPOukkqVKlio89IxT6QmIlBBBAAAEEEEAAgbgECIVxsZW6jQiFPpos3lCoU071QTM1atSQwYMHmwfKfPLJJ+bppQUXv9NHC27HSKGPBmQVBBBAAAEEEEAAgbgECIVxsZW6jQiFPpos3lD44osvyoABA0wQ1FdSTJw40fxvYQuh0EdDsAoCCCCAAAIIIICAUwFCoVPupFVGKLRA772nUKeM6r2DNhdGCm3qUjYCCCCAAAIIIBBuAUJhONqfUGihnZMRCvfu3WueesqCAAIIIIAAAggggEAqCHiDH1zn2m9NQqEFY0KhBVSKRAABBBBAAAEEEAiVAKHQXXMTCt1ZW6mJk8UKK4UigAACCCCAAAIIJFmA61x3DUAodGdtpSZOFiusFIoAAggggAACCCCQZAGuc901AKHQnbWVmnjQjBVWCkUAAQQQQAABBIoVSOZDWIrduRRYgVDorhEJhZasXd1XSCi01IAUiwACCCCAAAIIFCNAKLTbRQiFdn0jSycUWrImFFqCpVgEEEAAAQQQQKCECBAK7TYEodCuL6HQgS+h0AEyVSCAAAIIIIAAAkkUIBTaxScU2vUlFMbh26pVK2ncuLGUKVNGpk2bJuXKlZPhw4dL586d5c4775S5c+dK9erVZcKECdK2bVspGAp/+ukn6dixo3z//feyePFiufLKK6Vly5by8MMP5+3Nzp075cQTT5TXX39dWrdu7WsvmT7qi4mVEEAAAQQQQACBwAUIhYGT5iuQUGjXl1AYh6+GwjVr1kj//v2lU6dOMnv2bBk2bJi0adNGOnToIPr3sWPHypw5c2Tbtm2yYsUKE+x2794taWlp8oc//EGOPvpoWbBggVSsWNGEx9GjR8uWLVvM33XR32lI1O3T09N97SWh0BcTKyGAAAIIIIAAAoELEAoDJyUU2iWNWjr3FPqE19B38OBBWbZsmdlC/7ty5cpyzTXXyPTp083vduzYIbVq1ZJ3331XDhw4YELhxx9/bELkySefLDNnzjQjjLp4o4JLliyRSy65xPyuefPmcvHFF8uoUaOi7lVubq7oj7doKMzMzJTMrDmSXr6Cz6NhNQQQQAABBBBAAIFEBQiFiQoWvT0jhXZ9I0snFPq01lDYqFEjefzxx/O2qFu3rpk62q9fP/O7w4cPmxG+hQsXSqVKlUworF27tpx33nny/PPPm6mnkUu7du2kTp068tRTT8nnn38uDRo0kLVr10qTJk2i7lV2drbk5OQc8XdCoc+GZDUEEEAAAQQQQCAgAUJhQJBRiiEU2vUlFMbhq6GwadOmMm7cuLyt69WrJ1lZWebHW3Qq6Pz58yUjI8OEwt69e8u8efNERwT1nsTI5dlnn5W+ffvK9u3bzeigjiSuX7++yL1jpDCOxmMTBBBAAAEEEEDAggCh0AJqRJGEQru+hMI4fOMNhXpP4YgRI8wUU334zBlnnJFX+/79+6VGjRomDA4YMEC6dOli/jeWhXsKY9FiXQQQQAABBBBAIDgBQmFwloWVRCi060sojMM3kVCoo4Z33323CX8aDE877bS8PdCnl27YsEHWrVtnHjqj00ljWQiFsWixLgIIIIAAAgggEJwAoTA4S0KhXcviSueewuKE/u/viYZCLeauu+4yr67QYNiwYUNTsvd6ihYtWsibb77pc2/+sxqhMGYyNkAAAQQQQAABBAIRIBQGwhi1EEYK7fpGlk4odGdtpSZCoRVWCkUAAQQQQAABBIoVIBQWS5TQCoTChPhi2phQGBNXyVuZUFjy2oQ9QgABBBBAAIFwCBAK7bYzodCuLyOF7nyt18TJYp2YChBAAAEEEEAAAQSSIMB1rjt0RgrdWVupiZPFCiuFIoAAAggggAACCCRZgOtcdw1AKHRnbaUmThYrrBSKAAIIIIAAAgggkGQBrnPdNQCh0J21lZq4p9AKK4UigAACCJRCAe7vKoWNxi4jUIQAodBd9yAUurO2UhOh0AorhSKAAAIIlEIBQmEpbDR2GQFCYYnoA4TCEtEM/9mJevXqSVZWlvnxsxAK/SixDgIIIIBAGAQIhWFoZY4xTAKMFLprbUKhO2tfNe3cuVMqVqwoFSpU8LU+odAXEyshgAACCIRAgFAYgkbmEEMlQCh019yEQnfWVmoiFFphpVAEEEAAgVIoQCgshY3GLiNQhACh0F33IBQGbP3qq6/KiBEjZP369VKmTBm56KKLZPz48XLyySeb/27ZsqU8/PDDebXqyOCJJ54or7/+urRu3VqYPhpwg1AcAggggEBoBAiFoWlqDjQkAoRCdw1NKAzYet68eZKWliaNGzeW/fv3y9ChQ2XLli2ydu1aeeKJJ2T06NHm37qOLhMmTDAhcdu2bZKenl5sKMzNzRX98RY9WTIzMyUza46kl/c35TTgQ6Y4BBBAAAEESoQAobBENAM7gUBgAoTCwCiLLYhQWCxRYivoSGD16tXlX//6l9SoUcOMCi5ZskQuueQSU3Dz5s3l4osvllGjRpl/FzdSmJ2dLTk5OUfsFKEwsXZiawQQQACB0i9AKCz9bcgRIBApQCh01x8IhQFbf/bZZzJkyBBZvny5fPfdd3Lo0CEzYvjyyy9Lu3btzE+dOnXkqaeeks8//1waNGhgRhGbNGniKxQyUhhwg1EcAggggEDKCBAKU6YpORAEjACh0F1HIBQGbH3GGWeY6Zz9+/c3o4IaCs8880yZP3++tG/fXp599lnp27evbN++3YwOzpw509x/6C3FjRQW3F0eNBNwA1IcAggggECpFSAUltqmY8cRKFSAUOiuYxAKA7T+/vvv5YQTTpB//vOfedND33rrLfPfXijUUUOdRqphcMCAAdKlSxfzv4TCABuCohBAAAEEQilAKAxls3PQKSxAKHTXuITCAK11VFDvH2zbtq0MGzbMPDxGA9/KlSvzQqFW17lzZ9mwYYOsW7fOPHRGp5MSCgNsCIpCAAEEEAilAKEwlM3OQaewAKHQXeMSCgO2fuONN+Suu+6SzZs3y6mnniqPPvqotGrVKl8oXLx4sVx55ZXSokULefPNN/PtAdNHA24QikMAAQQQCI0AoTA0Tc2BhkSAUOiuoQmF7qyt1MQ9hVZYKRQBBBBAoBQKEApLYaOxywgUIUAodNc9CIXurK3UxMlihZVCEUAAAQQQQAABBJIswHWuuwYgFLqztlITJ4sVVgpFAAEEEEAAAQQQSLIA17nuGoBQ6M7aSk2cLFZYKRQBBBBAAAEEEEAgyQJc57prAEKhO2srNXGyWGGlUAQQQAABBBBAAIEkC3Cd664BCIXurK3UxINmrLBSKAIIIIBAKRTgQTOlsNHYZQSKECAUuusehEJH1lOnTpWsrCzZs2dPoDUSCgPlpDAEEEAAgVIsQCgsxY3HriNQiACh0F23IBQ6sv7pp59k37595uX2QS6EwiA1KQsBBBBAoDQLEApLc+ux7wgcKUAodNcrCIXurK3URCi0wkqhCCCAAAKlUIBQWAobjV1GoAgBQqG77kEoDNB6y5YtUr9+/SNKbNmypXTt2jXf9NHs7GxZsGCB9OnTR0aMGCHff/+9XHnllTJx4kTJyMjwvVeEQt9UrIgAAgggkOIChMIUb2AOL3QChEJ3TU4oDND64MGDsnPnzrwSd+zYIb/73e/k9ttvlwYNGhwRCv/yl7/IBRdcIGPGjBHt9N27d5fzzz9fnn32Wd97RSj0TcWKCCCAAAIpLkAoTPEG5vBCJ0AodNfkhEJL1gcOHJBWrVpJtWrVZOHChTJ9+vQjQqGOEOroYu3atc1evPrqq2a08KuvvpKaNWsWume5ubmiP96iJ0tmZqZkZs2R9PIVLB0NxSKAAAIIIFDyBQiFJb+N2EMEYhEgFMaildi6hMLE/KJu3blzZ1m7dq0sX75cjjvuOCn49FGdPqpBcfPmzXll7N2710wdXbp0qeiU08IW3S4nJ+eIPxEKLTUkxSKAAAIIlBoBQmGpaSp2FAFfAoRCX0yBrEQoDIQxfyE6Ajh27FhZsWKFnHzyyeaPfkKh1/HffPNNadGiRaF7xkihhQajSAQQQACBlBAgFKZEM3IQCOQJEArddQZCYcDW8+bNkxtvvFFeeeUVueyyy/JKLywUanjctm2bnHjiiWa91157Tdq1a1fk9NGCu8s9hQE3IMUhgAACCJRaAUJhqW06dhyBQgUIhe46BqEwQOv169ebB8fcc889cscdd+SVXK5cOVm0aFGhD5q56KKLRB84o52+R48ecvbZZ8vMmTN97xWh0DcVKyKAAAIIpLgAoTDFG5jDC50AodBdkxMKA7TW0cBu3bodUWJRr6To3bu3eSXFrl27zCjhpEmTpEqVKr73ilDom4oVEUAAAQRSXIBQmOINzOGFToBQ6K7JCYXurPPV5L2nUB9Gk8hCKExEj20RQAABBFJJgFCYSq3JsSAgZiZd5cqVRR/GWKlSJUgsChAKLeIWVTShMEnwVIsAAgggkLIChMKUbVoOLKQChEJ3DU8odGdtdaSQb1CS1JBUiwACCCCAAAIIIGBFgFBohbXQQgmF7qyt1MTJYoWVQhFAAAEEEEAAAQSSLMB1rrsGIBS6s7ZSEyeLFVYKRQABBBBAAAEEEEiyANe57hqAUOjO2kpNPGjGCiuFIoAAAggELMD9fgGDUhwCIRAgFLprZEKhO2srNREKrbBSKAIIIIBAwAKEwoBBKQ6BEAgQCt01MqEwAevDhw+Lvmdw7ty5snv3bvPI3K5du8q4ceMSKDW2TQmFsXmxNgIIIIBAcgQIhclxp1YESrMAodBd6xEKE7B+5ZVX5I9//KMsXbpUGjRoIB07dpRzzz2XUJiAKZsigAACCKSmAKEwNduVo0LApgCh0KZu/rIJhQlYT5gwQUaPHi1bt241pbRq1UqaNm1KKEzAlE0RQAABBFJTgFCYmu3KUSFgU4BQaFOXUBiIrk4TnTZtWl5ZdevWlXr16uULhTNmzDABcePGjVKxYkW59NJLzb+rV6+et92GDRukf//+smzZMtHpqBoqp06dKieffLKv/WT6qC8mVkIAAQQQSLIAoTDJDUD1CJRCAUKhu0ZjpDBOa31Z/KOPPipPP/20rFy5UsqUKSPXXXddvlA4efJkqVWrlpx66qny7bffyt133y1VqlSRxYsXm1q/+uorOeuss8wI48CBA6VSpUry9ttvS/Pmzc02hS25ubmiP96iJ0tmZqZkZs2R9PIV4jwaNkMAAQQQQMCuAKHQri+lI5CKAoRCd61KKEzAWkf99GfLli2mlOKmj2p4PP/882Xfvn1y7LHHyqBBg2TWrFlmJLFs2bK+9iQ7O1tycnKOWJdQ6IuPlRBAAAEEkiRAKEwSPNUiUIoFCIXuGo9QmIB1caHw/fffFw1xa9eulV27dsmhQ4fkxx9/FJ0yesYZZ0i7du2kWrVq+aahFrc7jBQWJ8TfEUAAAQRKogChsCS2CvuEQMkWIBS6ax9CYQLWRYXC/fv3m3sML7/8crnttttM+Nu2bZu0adNGNCzqvYPXXnutGTGMvDcx1t3hnsJYxVgfAQQQQCAZAoTCZKhTJwKlW4BQ6K79CIUJWBcVClevXm1eT6FBUO/500UfPNOlS5e8UKjTQDUQxjJ9tODuEgoTaEA2RQABBBBwJkAodEZNRQikjACh0F1TEgoTsC4qFO7cuVNq164tffv2NSOF69evl379+smmTZvyQuH3339vHijTsmVL86CZypUry/Lly819h9EeNEMoTKDB2BQBBBBAIGkChMKk0VMxAqVWgFDorukIhQlYF3dP4cyZM83DZLZv3y5nn322CX5XX311XijUqtetW2fC4ltvvWWeYOq9kqJBgwa+9oyRQl9MrIQAAgggkGQBQmGSG4DqESiFAoRCd41GKHRnbaUmQqEVVgpFAAEEEAhYgFAYMCjFIRACAUKhu0YmFLqztlITJ4sVVgpFAAEEEEAAAQQQSLIA17nuGoBQ6M7aSk2cLFZYKRQBBBBAAAEEEEAgyQJc57prAEKhO2srNXGyWGGlUAQQQAABBBBAAIEkC3Cd664BCIXurK3UxMlihZVCEUAAAQQQQAABBJIswHWuuwYgFLqztlITD5qxwkqhCCCAAAIRAjwkhu6AAALJECAUulMnFLqztlITodAKK4UigAACCBAK6QMIIJBkAUKhuwYgFLqzzlfTxo0bzUvtP/zwQ9m7d6+ceOKJctNNN8mwYcOkbNmyvveKUOibihURQAABBOIUYKQwTjg2QwCBhAQIhQnxxbQxoTAmruBW3rx5s7z55pvmpfYZGRnywQcfSM+ePaV79+4ycuRI3xURCn1TsSICCCCAQJwChMI44dgMAQQSEiAUJsQX08aEQh9crVq1ksaNG0uZMmVk2rRpUq5cORk+fLh07txZ7rzzTpk7d65Ur15dJkyYIG3btpWlS5dK69at5aWXXpJBgwaJjgo2adJEJk2aZMqJttxzzz2ycuVKWbZsmY+9+t9VCIW+qVgRAQQQQCBOAUJhnHBshgACCQkQChPii2ljQqEPLg2Fa9askf79+0unTp1k9uzZZppnmzZtpEOHDqJ/Hzt2rMyZM0e2bdsmK1asMKHw9NNPl/Hjx0vNmjVNOFy/fr1s2rSp0Omhn376qVx99dVyzTXXyIgRI3zsFaHQNxIrIoAAAggkJEAoTIiPjRFAIE4BQmGccHFsRij0gaah7+DBg3kjePrflStXNgFu+vTppoQdO3ZIrVq15N1335UDBw6YUDhr1iwTInXZtWuX1K5dW6ZOnSrXX399Xq3Nmzc3gTM3N1d69eolTz75pKSnp0fdK11Pf7xFT5bMzEzJzJoj6eUr+DgaVkEAAQQQQCA2AUJhbF6sjQACwQgQCoNx9FMKodCHkobCRo0ayeOPP563dt26dc3U0X79+pnfHT582IS5hQsXSqVKlUwo3Lp1q9SpUydvm2bNmkn79u3NKKO3fPHFF7Jv3z5zT6GWddddd5kRyWhLdna25OTkHPFnQqGPhmQVBBBAAIG4BAiFcbGxEQIIJChAKEwQMIbNCYU+sDQUNm3aVMaNG5e3dr169SQrK8v8eEtaWprMnz/fPDgmWijU6aZDhw4ttNYZM2aY0UINiXr/YmELI4U+GoxVEEAAAQQCFSAUBspJYQgg4FOAUOgTKoDVCIU+EOMNhXrvoTdVdPfu3Wb66JQpU/JNH42s/plnnpE//elP8tNPP8lRRx3lY8940IwvJFZCAAEEEEhIgFCYEB8bI4BAnAKEwjjh4tiMUOgDLd5QqFNO9UEzNWrUkMGDB8vatWvlk08+MU8vffbZZ80DZ/RppOXLl5fVq1fL3XffbR5aoyOGfheePupXivUQQAABBOIVIBTGK8d2CCCQiAChMBG92LYlFPrwijcUvvjiizJgwAATBPWVFBMnTjT/q4uOIo4aNco8jVTvR9R7FG+++WYTDI8++mgfe/W/qxAKfVOxIgIIIIBAnAKEwjjh2AwBBBISIBQmxBfTxoTCmLj8rey9p1CnjOr9hTYXQqFNXcpGAAEEEFABQiH9AAEEkiFAKHSnTii0YE0otIBKkQgggAACSRMgFCaNnooRCLUAodBd8xMKLVgnIxTu3bvXvAqDBQEEEEAAAQQQQACBVBAgFLprRUKhO2srNXGyWGGlUAQQQAABBBBAAIEkC3Cd664BCIXurK3UxMlihZVCEUAAAQQQQAABBJIswHWuuwYgFLqztlITD5qxwkqhCCCAQOAC3JcXOCkFIoBAigsQCt01MKHQnbWpKS0tTebPny/t27cPpGZCYSCMFIIAAghYFyAUWiemAgQQSDEBQqG7BiUUxmG9ZcsWqV+/vrz//vvStGnTmEogFMbExcoIIIBAyggQClOmKTkQBBBwJEAodAStA1f/8+L0w+6qS42aCIWp0Y4cBQIIIOBSgFDoUpu6EEAgFQQIhe5aMdShMDc3V/r16yezZs0S7XTnnnuujB07Vs477zzRF8/feeed8vrrr8sPP/wgtWvXlkGDBkm3bt3MFNDIpWXLlqKvoVi5cqVZR0cQf/nlFzOKqOWdffbZeasXHCn86quv5J577jH1pKeny8UXXyzjx4+XevXq+eoFTB/1xcRKCCCAQNIFCIVJbwJ2AAEESpkAodBdg4U6FPbt21fmzp0rkyZNkrp168qoUaNk0aJF8umnn8rQoUPl7bfflokTJ8oJJ5xgfvfTTz/JVVddZcLf+eefL2+88YY0atRIypUrJ1WrVpUlS5bI119/Leecc45pwTFjxshLL70kn3zyiRx33HHmd5Gh8McffzTB8ZJLLpGsrCw56qijZMSIEbJ69WpZt26dKbe4hVBYnBB/RwABBEqGAKGwZLQDe4EAAqVHgFDorq1CGwr3798vVapUkalTp8pNN91kxHV0T0foNKAtW7bMhMHJkycf0Rp+p48ePHjQ1PHcc8/JH/7whyNCoZatQfSjjz7KG338+eefJSMjQxYsWCCXX375EXXr6Kb+eIueLJmZmZKZNUfSy1dw13OoCQEEEEAgJgFCYUxcrIwAAgiYmXyVK1eWvXv3SqVKlRCxKBDaUKgjcU2aNBENeDpK6C0dOnQwQe66666Ta6+9Vho2bGjCmT4ttHnz5ma1aKHw22+/NSOMOmL4zTffiIZCHQ2cMGGC3H777UeEwjvuuEP+9re/ydFHH52viXWbxx9/XPr06XNE02dnZ0tOTs4RvycUWjxLKBoBBBAIQIBQGAAiRSCAQKgECIXumju0ofCDDz4wUze3bt0qderUyRPX8Hf88cfL3//+d9m5c6e8/PLLZprovHnzREPcX/7yl6ihsF27dmYbDW0aNMuXLy8XXXSRDB482Iw+6hI5fVRD35o1a+TZZ589osWrVatmvhkpuDBS6O7koCYEEEAgSAFCYZCalIUAAmEQIBS6a+XQhkKdPqr3AU6ZMiXf9FF91YQGuHvvvTdfK+iInj6URjun3jd40kknyapVq/LuH9SV9b7BJ554Qrp06WK2/eKLL0zg1IfNFBYK9X7F++67z4TMeIfEuafQ3clCTQgggEAiAoTCRPTYFgEEwihAKHTX6qENhUqsQe355583o4Ia3rwHzXz22WcmyOkDY/RBMjo6N2DAANHpoe+99578+uuvJsTpCGCPHj3M9E8d1WvWrJnoCJ8+PVQ7sYZIDY4jR44sNBR6D5rRgPnAAw+YJ5xu27ZNXnjhBbOt/ru4hVBYnBB/RwABBEqGAKGwZLQDe4EAAqVHgFDorq1CHQoPHDgg/fv3l5kzZ8q+ffvyvZJCnwKqD4jRUbxjjjnGPCFUg6KOJOqiTyzVIKevlNC/6Ssp9FUUvXr1kn/9618mZGoY1BFHDZ+FjRRqOTt27DCjhYsXLzb7oAHxsssuM9NU/YweEgrdnSzUhAACCCQiQChMRI9tEUAgjAKEQnetHupQ6I7ZXk2EQnu2lIwAAggEKUAoDFKTshBAIAwChEJ3rUwodGdtpSZCoRVWCkUAAQQCFyAUBk5KgQggkOIChEJ3DUwodGdtpSZOFiusFIoAAggggAACCCCQZAGuc901AKHQnbWVmjhZrLBSKAIIIIAAAggggECSBbjOddcAhEJ31lZq4mSxwkqhCCCAAAIIIIAAAkkW4DrXXQMQCt1ZW6mJewqtsFIoAgggkJAA9w8mxMfGCCCAgBEgFLrrCIRCd9ZWaiIUWmGlUAQQQCAhAUJhQnxsjAACCBAKHfcBQqFj8KCrIxQGLUp5CCCAQOIChMLEDSkBAQQQYKTQXR8gFLqztlITodAKK4UigAACCQkQChPiY2MEEECAkULHfYBQaBn8559/lnLlysVUy8GDByUtLU3S09OL3Y5QWCwRKyCAAALOBQiFzsmpEAEEUlCAkUJ3jUooDNi6VatWcuaZZ5ogOH36dGnUqJH88Y9/+jX0mAAAIABJREFUlClTpsjmzZulatWqctVVV8moUaPk2GOPNbVPnTpVsrKyZMaMGdK/f3/ZtGmTfPLJJ1K/fv1i945QWCwRKyCAAALOBQiFzsmpEAEEUlCAUOiuUQmFAVtrKFy9erX06dNHunfvLocPH5ZXX31VmjRpIvXq1ZPPP/9cbr/9drn00kvliSeeyAuFvXr1kvPOO09Gjx4txx9/vNSuXVsqVqx4xN7l5uaK/niLniyZmZmSmTVH0stXCPhoKA4BBBBAIB4BQmE8amyDAAII5BcgFLrrEYTCgK01FO7du1fef//9qCU///zzJjR+9913eaGwW7dusnbtWhMei1qys7MlJyfniFUIhQE3JMUhgAACCQgQChPAY1MEEEDg/wQIhe66AqEwYGsNhaeccopMnDgxr+R//OMfMnLkSPnwww/N+1Z+/fVXOXDggPzwww9mNFCnj/bu3dv8Tu8lLGphpDDgBqM4BBBAwIIAodACKkUigEDoBAiF7pqcUBiwtYbCpk2byrhx40zJW7duldNOO01uu+026dSpk7mn8K233jJTS3fv3i0ZGRl59xTu2bMn5r3hnsKYydgAAQQQsC5AKLROTAUIIBACAUKhu0YmFAZsXTAUzps3T2644QZzH6D3NNERI0bIkCFDCIUB21McAgggUFIECIUlpSXYDwQQKM0ChEJ3rUcoDNi6YCjU+wSbNWtmRg71qaNvv/22DBw4UL766itCYcD2FIcAAgiUFAFCYUlpCfYDAQRKswCh0F3rEQoDti4YCrX4sWPHmqeK6vTQFi1aSOfOneWWW24hFAZsT3EIIIBASREgFJaUlmA/EECgNAsQCt21HqHQnbWVmrin0AorhSKAAAIJCRAKE+JjYwQQQMAIEArddQRCoTtrKzVxslhhpVAEEEAAAQQQQACBJAtwneuuAQiF7qyt1MTJYoWVQhFAAAEEEEAAAQSSLMB1rrsGIBS6s7ZSEyeLFVYKRQABBBBAAAEEEEiyANe57hqAUOjO2kpNnCxWWCkUAQQQQAABBBBAIMkCXOe6awBCoTtrKzXxoBkrrBSKAAII5Anw0Bg6AwIIIJAcAUKhO3dCYYDWXbt2Na+dWLBgQYClFl0UodAZNRUhgEBIBQiFIW14DhsBBJIuQCh01wSEwgCt9+7dK4cPH5aMjIwASyUUOsOkIgQQQKAQAUIh3QIBBBBIjgCh0J07odCdtZWaGCm0wkqhCCCAQJ4AoZDOgAACCCRHgFDozp1QGKB15PTRVq1ayZlnnmlKnzFjhpQpU0b69Okjw4cPl7S0NPP77du3S48ePWTJkiVSs2ZNefDBB2XQoEGSlZVlfvwshEI/SqyDAAIIxC9AKIzfji0RQACBRAQIhYnoxbYtoTA2ryLXLhgKV69eLd27dzdhcNWqVdKrVy8ZN26c9OzZ05Tz+9//Xr777jt56qmnpGzZsnLPPffIihUrZOTIkYTCANuFohBAAIFEBAiFieixLQIIIBC/AKEwfrtYtyQUxipWxPoFQ+G3334rGzZsyBsZHDBggCxatEg+/PBD+fjjj+X000+XlStXyrnnnmtK/fTTT+WUU06RsWPHRg2Fubm5oj/eoidLZmamZGbNkfTyFQI8GopCAAEEEFABQiH9AAEEEEiOAKHQnTuhMEDrgqGwQYMGMnny5LwaFi5cKB07dpQDBw7ISy+9ZP5bA156enreOlWrVpWhQ4dGDYXZ2dmSk5NzxF4TCgNsSIpCAAEEIgQIhXQHBBBAIDkChEJ37oTCAK1jCYUvvviiXHfddUeEwipVqsiwYcMYKQywXSgKAQQQSESAUJiIHtsigAAC8QsQCuO3i3VLQmGsYkWsX9j0UZ0q6i0DBw4UHS2MnD6q9xqec845ZhU/00cLVs+DZgJsQIpCAAEEChEgFNItEEAAgeQIEArduRMKA7Qu7EEz+lCZ3r17y5o1a8wDZsaMGWP+rYs+aGbXrl3y5JNPmgfN/PnPf5bly5fLQw89JH379vW1Z4RCX0yshAACCMQtQCiMm44NEUAAgYQECIUJ8cW0MaEwJq6iVy4YChs1aiSHDh2S5557zrySQsOgPlk08pUU+nRS75UUGgb1VRQPPPBAXnAsbvcIhcUJ8XcEEEAgMQFCYWJ+bI0AAgjEK0AojFcu9u0IhbGbRd3ixhtvNOFP30uo7yls2rSpeQWF3+XLL780TxJ944035LLLLvO1GaHQFxMrIYAAAnELEArjpmNDBBBAICEBQmFCfDFtTCiMiavwlX/99VfZtGmTtGvXzozw6b2DfkKhjhD+8MMP0rhxY/Mi+/79+8tXX31lytLppH4WQqEfJdZBAAEE4hcgFMZvx5YIIIBAIgKEwkT0YtuWUBibV6Frr127Vpo3by6tW7c2o4T6BFE/ofC1114z9xFu3rxZjjvuOFOGjizWrVvX915xsvimYkUEEEAAAQQQQACBUiTAda67xiIUurO2UhMnixVWCkUAAQQQQAABBBBIsgDXue4agFDoztpKTZwsVlgpFAEEEEAAAQQQQCDJAlznumsAQqE7ays1cU+hFVYKRQCBUi7AfYClvAHZfQQQQOB/BAiF7roBodCdtZWaCIVWWCkUAQRKuQChsJQ3ILuPAAIIEAqd9gFCoVPu/1RWr149805C/dFlx44d0qVLF3nnnXfMk0f37Nnja88Ihb6YWAkBBEImQCgMWYNzuAggkJICjBS6a1ZCoTvrfDUVDIX33XefvPzyyzJ//nypXLmyVK9e3deeEQp9MbESAgiETIBQGLIG53ARQCAlBQiF7pqVUOjOushQ2LFjR6lYsaJMmzYtpj0iFMbExcoIIBASAUJhSBqaw0QAgZQWIBS6a15CYQDW+k7CM88805Sk7yksU6aM9OnTR4YPHy5paWny7bffSvfu3eWNN96QmjVryogRI2Tw4MF500d11HDr1q15e3LrrbfK1KlTfe0ZodAXEyshgEDIBAiFIWtwDhcBBFJSgFDorlkJhQFYayhcvXq1CX4aBletWiW9evUyL6Lv2bOntGvXTr744gt5+umnpVy5cnLXXXfJ+++/LyNHjjTBcOfOnXLLLbdIpUqVZPz48XLMMceYKaSFLbm5uaI/3qInS2ZmpmRmzZH08hUCOBqKQAABBEq/AKGw9LchR4AAAggQCt31AUJhANYaCnU0cMOGDWZkUJcBAwbIokWLZMGCBXLqqafK8uXL5YILLjB/+/jjj+X000+XsWPH5j1opn379pKRkVHsCGF2drbk5OQcsdeEwgAakiIQQCBlBAiFKdOUHAgCCIRYgFDorvEJhQFYayhs0KCBTJ48Oa+0hQsXit4nOHfuXPO/Bw4cMNNKvaVKlSoybNiwmEMhI4UBNBhFIIBAygsQClO+iTlABBAIgQCh0F0jEwoDsC4qFM6aNUtuuOEGM+UzPT094VBYcHe5pzCABqQIBBBIOQFCYco1KQeEAAIhFCAUumt0QmEA1t700Q8//DCvtIEDB4qOFuorJk477TR577335Pzzzzd/37hxo/ldPNNHCYUBNBhFIIBAygsQClO+iTlABBAIgQCh0F0jEwoDsPYeNKMPlendu7esWbPGPGBmzJgx5t9t27aVr7/+2jxo5qijjjJTRvXBNN6DZnQX/N5TSCgMoMEoAgEEUl6AUJjyTcwBIoBACAQIhe4amVAYgLWGwkaNGsmhQ4fkueeeM/cOahjU0KcPntmxY4f06NHDvJKiRo0a5pUUQ4YMyXslBaEwgEagCAQQQCBCgFBId0AAAQRKvwCh0F0bEgoDsNZQ2LRpU/MKCtcL9xS6Fqc+BBAoDQKEwtLQSuwjAgggULQAodBdDyEUBmBdEkLh3r17zXsOWRBAAAEEEEAAAQQQSAUBQqG7ViQUBmBNKAwAkSIQQAABBBBAAAEEEIgQIBS66w6EQnfWVmriZLHCSqEIIIAAAggggAACSRbgOtddAxAK3VlbqYmTxQorhSKAAAIIIIAAAggkWYDrXHcNQCh0Z22lJh40Y4WVQhFAoBQJ8FCZUtRY7CoCCCAQgwChMAasBFclFCYImOzNCYXJbgHqRwCBZAsQCpPdAtSPAAII2BEgFNpxLaxUQqE7ays1EQqtsFIoAgiUIgFCYSlqLHYVAQQQiEGAUBgDVoKrEgoTBEz25oTCZLcA9SOAQLIFCIXJbgHqRwABBOwIEArtuDJSGIPriy++KF26dJFdu3ZJenq6rF27Vpo1ayb33nuvjB492pTUu3dv0c7apk0bycrKkhkzZsif//xn+eKLL6Rdu3Yybdo0mTt3rgwbNkz0PYI333yzecF9mTJlZODAgfKPf/xDli9fnm+vzjrrLOnQoYPk5OT42ltCoS8mVkIAgRQWIBSmcONyaAggEGoBQqG75mekMIq1hriqVavKihUr5JxzzpHx48fLiBEjpH79+uZ3upx66qly9913y9FHHy29evUSfV/hI488Ivv27ZNrrrnGbJeRkWFC4ebNm+Xaa6+V6dOnS6dOnWT9+vXSuHFj+fTTT+Xkk0825W3YsEHOPPNM2bhxozRs2NBXLyAU+mJiJQQQSGEBQmEKNy6HhgACoRYgFLprfkJhEdYa6m666SYz+qejd+edd54Zwfvuu+9k//79UqtWLfnoo4/MaF+3bt3yBbzbbrtNnnnmGfnmm2/k2GOPNbVcccUVUq9ePXnqqafMv5s0aSIdO3aUIUOGmH8PGjRI3njjjbzQWdiu5ebmiv54i54smZmZkpk1R9LLV3DXc6gJAQQQKCEChMIS0hDsBgIIIBCwAKEwYNAiiiMUFoGjYXDTpk2yaNEiqVatmrz55ptyyy23mBHDPXv2mFHCHTt2yNSpU+WOO+4wQdFbdHRQp47q6J+33HrrrWYU8YUXXjC/GjVqlEyePFk+/vhjOXz4sDRo0MBMQ+3bt2/UvcrOzi50aimh0N1JQ00IIFCyBAiFJas92BsEEEAgKAFCYVCSxZdDKCzCyLuvcOnSpXL55ZebUT8NiuXKlZPdu3ebYDh79mwTCjXM6b+9RcPbggULzL2I3tK1a1ezjv5ely+//FLq1Kkjq1atkp9++klatmwpX331ldSoUSPqXjFSWHynZg0EEAiXAKEwXO3N0SKAQHgECIXu2ppQWIS1d1+hPnBGRwGff/55WbhwoTz00EMmFOqI3u233x53KNSq9T5EnaaqoVDvO3z11Vdjan3uKYyJi5URQCAFBQiFKdioHBICCCDwPwKEQnfdgFBYjLUGtg8++MA8aEaniGoY1JG8X375xUwNPeOMMxIKhRMnThQdVfz5559l7Nix5gmlsSyEwli0WBcBBFJRgFCYiq3KMSGAAAKEQpd9gFBYjLa+gmLMmDHmaaGNGjUyazdt2lS+/vprM500LS0toVCo00lr1qxpXlMR+VAav52AUOhXivUQQCBVBQiFqdqyHBcCCIRdgJFCdz2AUOjO2kpNhEIrrBSKAAKlSIBQWIoai11FAAEEYhAgFMaAleCqhMIEAZO9OaEw2S1A/QggkGwBQmGyW4D6EUAAATsChEI7roWVSih0Z22lJk4WK6wUigACCCCAAAIIIJBkAa5z3TUAodCdtZWaOFmssFIoAggggAACCCCAQJIFuM511wCEQnfWVmriZLHCSqEIIIAAAggggAACSRbgOtddAxAK3VlbqYl7Cq2wUigCCJRQAe4fLKENw24hgAACFgQIhRZQoxRJKHRnbaUmQqEVVgpFAIESKkAoLKENw24hgAACFgQIhRZQCYXuUFu1amXeZThu3DjrlRIKrRNTAQIIlCABQmEJagx2BQEEELAsQCi0DBxRPCOFFqx37dolZcuWleOOO85C6fmLJBRaJ6YCBBAoQQKEwhLUGOwKAgggYFmAUGgZmFDoDth2TYRC28KUjwACJUmAUFiSWoN9QQABBOwKEArt+kaWzkihBevI6aNPPPGEjB07Vr744gupXLmyXHLJJTJ37lxTa25urvTr109mzZol2unPPfdcs+55553ne68Ihb6pWBEBBFJAgFCYAo3IISCAAAI+BQiFPqECWI1QGABiwSK8UHjzzTfLhRdeKM8884w0b95cdFrpsmXL5K677jKb9O3b1wTESZMmSd26dWXUqFGyaNEi+fTTT6Vq1aqF7pkGSf3xFj1ZMjMzJTNrjqSXr2DhaCgSAQQQKDkChMKS0xbsCQIIIGBbgFBoW/g/5RMKLVh7obBFixbSrVs3+fLLL4+4v3D//v1SpUoVmTp1qtx0001mL3755RepV6+eZGVlmRHEwpbs7GzJyck54k+EQgsNSZEIIFDiBAiFJa5J2CEEEEDAmgCh0BrtEQUTCi1Ye6Fw+PDh8tvf/la2b98uV1xxhfnp0KGDVKhQQdatWydNmjSRLVu2mFFCb9G/a1icPHlyoXvGSKGFBqNIBBAoNQKEwlLTVOwoAgggkLAAoTBhQt8FEAp9U/lfMfKewl9//VWWLl0qr7/+usybN0/S09Nl5cqVsnXrVvPaCv3fOnXq5BXevn17Of744+Xvf/+7rwq5p9AXEyshgECKCBAKU6QhOQwEEEDAhwCh0AdSQKsQCgOCjCwm2nsKdcpoRkaGzJ49W9q0aWPuG5wyZUq+6aP169c300fvvfdeX3tGKPTFxEoIIJAiAoTCFGlIDgMBBBDwIUAo9IEU0CqEwoAgCwuFv/vd72Tz5s2i9xbqlNDFixfLnXfeaaaONmrUyIS/559/3owK6mih96CZzz77zKzvZyEU+lFiHQQQSBUBQmGqtCTHgQACCBQvQCgs3iioNQiFQUlGlOONFHbs2FHuv/9+EwIPHDggp5xyigwePFiuv/56s7b+rn///jJz5kzZt28fr6Sw0BYUiQACqSVAKEyt9uRoEEAAgaIECIXu+geh0J21lZoYKbTCSqEIIFBCBQiFJbRh2C0EEEDAggCh0AJqlCIJhe6srdTEyWKFlUIRQAABBBBAAAEEkizAda67BiAUurO2UhMnixVWCkUAAQQQQAABBBBIsgDXue4agFDoztpKTZwsVlgpFAEEEEAAAQQQQCDJAlznumsAQqE7ays1cbJYYaVQBBBAAAEEEEAAgSQLcJ3rrgEIhe6srdTEg2assFIoAgjEIMDDX2LAYlUEEEAAAd8ChELfVAmvSChMmDD+Arp27Sp79uyRBQsWxF0IoTBuOjZEAIGABAiFAUFSDAIIIIBAPgFCobsOQSh0Z31ETYTCJOJTNQIIBCZAKAyMkoIQQAABBCIECIXuugOh0J01oTCJ1lSNAAL2BAiF9mwpGQEEEAizAKHQXesTCqNYHz58WEaPHi1PPfWUbN++XRo2bChDhgyRjh07ytKlS6V169by0ksvyaBBg2Tjxo3SpEkTmTRpkjRu3NiUmJ2dbaaFrl27Nq+GcePGif5s2bLF/M4bKWzWrJk8/vjjcuDAAbnxxhvlsccek3LlyvnqBUwf9cXESgggYFGAUGgRl6IRQACBEAsQCt01PqEwivXgwYPlhRdeMCHulFNOkX/+859y2223yWuvvSYaGDUUnn766TJ+/HipWbOmCYfr16+XTZs2SdmyZX2Hwnnz5smVV15pAqeGxW7duknPnj3lwQcf9NULCIW+mFgJAQQsChAKLeJSNAIIIBBiAUKhu8YnFBZivX//fjnhhBNkyZIlctFFF+Wt0aNHD/nxxx+lV69eJhTOmjVLOnXqZP6+a9cuqV27tkydOlWuv/5636HwxRdflC+++EIqVKhgytGRyX79+snevXslPT39iL3Lzc0V/fEWPVkyMzMlM2uOpJf/3zJYEEAAAZcChEKX2tSFAAIIhEeAUOiurQmFhVivXLlSzj//fKlYsWK+v/7888+iUz0feeQREwq3bt0qderUyVtH/9a+fXsZNmyY71C4bds2Ez695YMPPpCmTZuaUcO6desesXc6LTUnJ+eI3xMK3Z001IQAAvkFCIX0CAQQQAABGwKEQhuqhZdJKCzE5b333pMLL7zQ3Dt40kkn5VujfPny8tlnn0UNhR06dJChQ4fKAw88IDo1VEOet+g9inrvYOQ9hdFCYcHA6ZXBSKG7k4OaEEDAnwCh0J8TayGAAAIIxCZAKIzNK5G1CYWF6O3bt0+qVasmEydOlC5duhyxhvegmdmzZ5uporrs3r3bTB+dMmWK+d2TTz5pRgt37NghaWlpZp3OnTvL22+/nS8U6vTRL7/8Uo455hizzt/+9je59957o04fLbgz3FOYSPdnWwQQCEKAUBiEImUggAACCES7ztXbqipVqgSQRQFCYRTc+++/39zfN2bMGLn44otFw9c777wjxx57rJnWqdNHGzVqZB40U6NGDdEH0+iTRj/55BPz5NCPPvrI/P2hhx4yTyx99dVXzcNktENHjhTqaOJVV10lWp+ODuqDZvRHt/OzEAr9KLEOAgjYFCAU2tSlbAQQQCC8AowUumt7QmEUa33CqL4a4oknnpDNmzdLRkaGnH322eYpo4cOHTKhUEf5BgwYYIKgvpJCRxb1f71FQ+XIkSPNQ2iuvfZaOfXUU+Xpp58+4pUUuo1OK9WpoTfccINMmDBBdJqqn4VQ6EeJdRBAwKYAodCmLmUjgAAC4RUgFLpre0JhHNbe9FGdMqphMZkLoTCZ+tSNAAIqQCikHyCAAAII2BAgFNpQLbxMQmEc1oTCONDYBAEEUlaAUJiyTcuBIYAAAkkVIBS64ycUxmFdEkMhN+DG0ZBsggACCCCAAAIIIFBiBQiF7pqGUOjO2kpNnCxWWCkUAQQQQAABBBBAIMkCXOe6awBCoTtrKzVxslhhpVAEEEAAAQQQQACBJAtwneuuAQiF7qyt1MSDZqywUigCCMQgwD2FMWCxKgIIIICAbwFCoW+qhFckFCZMmNwCCIXJ9ad2BBDg6aP0AQQQQAABOwKEQjuuhZVKKHRnbaUmQqEVVgpFAIEYBBgpjAGLVRFAAAEEfAsQCn1TJbwioTBhwuQWQChMrj+1I4AAI4X0AQQQQAABOwKEQjuujBS6c3VWE6HQGTUVIYBAFAFGCukaCCCAAAI2BAiFNlQLL5ORwgStDx8+LKNHj5annnpKtm/fLg0bNpQhQ4bItddeK7///e/lqKOOkldeeUXS0tJkz549ctZZZ0mXLl3kwQcfNDVPmTJFRo0aJZ9//rnUq1dP7rrrLrn99tt97xWh0DcVKyKAgCUBQqElWIpFAAEEQi5AKHTXAQiFCVoPHjxYXnjhBRk3bpyccsop8s9//lNuu+02ee211+Q3v/mNNG7cWIYNGyZ9+/aVG264QT777DN55513pGzZsjJx4kTztwkTJkizZs3k/fffl549e8pf//pXufXWWwvds9zcXNEfb9GTJTMzUzKz5kh6+QoJHg2bI4AAArELEApjN2MLBBBAAIHiBQiFxRsFtQahMAHJ/fv3ywknnCBLliyRiy66KK+kHj16yI8//ijPPfecPP/882Zk8J577pHx48eb4KejibrUqVNHHnnkEbnxxhvzth0xYoQsXrzYBMfCluzsbMnJyTniT4TCBBqSTRFAICEBQmFCfGyMAAIIIBBFgFDormsQChOwXrlypZx//vlSsWLFfKX8/PPPZuTvvffeM7+/6aabZObMmfLkk0+aUURddu7cKdWrV5djjjlG0tPT87b/9ddfpXLlyvLNN98UumeMFCbQYGyKAAJWBAiFVlgpFAEEEAi9AKHQXRcgFCZgraHvwgsvlKVLl8pJJ52Ur6Ty5cubaZ06YqgBUaeN6hTSMWPGmPU09NWsWVNmzJghF1xwQb5ty5QpI/Xr1/e1Z9xT6IuJlRBAwKIAodAiLkUjgAACIRYgFLprfEJhAtb79u2TatWqmXsDdYpoYUufPn1MaHz00UelXbt25l7DSy+91Kxau3Zt6d27t3kwTbwLoTBeObZDAIGgBAiFQUlSDgIIIIBApACh0F1/IBQmaH3//febJ4/qCODFF18s2nn1fsBjjz3W3G94zTXXyLvvvitnn322CX9Tp06VdevWSZUqVWTSpEnmaaMPPfSQtG3b1jxAZtWqVbJ7925zD6KfhVDoR4l1EEDApgCh0KYuZSOAAALhFSAUumt7QmGC1vpKiscee0yeeOIJ2bx5s2RkZJgAOHDgQOnUqZOZMqr/rYveL/jb3/7WvHpi9uzZ5nf6MBp9pcWHH35o7k3Up5VmZWVJhw4dfO0ZodAXEyshgIBFAUKhRVyKRgABBEIsQCh01/iEQnfWVmoiFFphpVAEEIhBgFAYAxarIoAAAgj4FiAU+qZKeEVCYcKEyS2AkyW5/tSOAAIIIIAAAgggYEeA61w7roWVSih0Z22lJk4WK6wUigACCCCAAAIIIJBkAa5z3TUAodCdtZWaOFmssFIoAggggAACCCCAQJIFuM511wCEQnfWVmriZLHCSqEIIIAAAggggAACSRbgOtddAxAK3VlbqYkHzVhhpVAEQiXAg2JC1dwcLAIIIFBqBAiF7pqKUBigdatWraRp06Yybty4QkvVV1Ho6yb0J6iFUBiUJOUgEF4BQmF4254jRwABBEqyAKHQXesQCgO0Li4U7ty507yLsEKFCoHVSigMjJKCEAitAKEwtE3PgSOAAAIlWoBQ6K55CIUBWhcXCgOsKq8oQqENVcpEIFwChMJwtTdHiwACCJQWAUKhu5YiFAZoraHwzDPPNCXOmDFDypQpI3369JHhw4dLWlqaFJw+qr+bOHGivPzyy/Laa6/JSSedJGPGjJGrr77a914RCn1TsSICCEQRIBTSNRBAAAEESqIAodBdqxAKA7TWULh69Wrp3r27CYOrVq2SXr16mXsMe/bsWWgorF27towaNUrOO+88eeyxx2Ty5MmydetWqVq1qq89IxT6YmIlBBAoQoBQSPdAAAEEECiJAoRCd61CKAzQWkPht99+Kxs2bDAjg7oMGDBAFi1aJB9++GGhofD++++XTn0AAAAgAElEQVQ3I4m67N+/X4477jhZvHixXHHFFYXuWW5uruiPt+jJkpmZKZlZcyS9fHD3KgbIQlEIIFDCBQiFJbyB2D0EEEAgpAKEQncNTygM0FpDYYMGDcxon7csXLhQOnbsKAcOHJCTTz4539NHNTjOmTNHrrvuurz1K1eubEYMb7nllkL3LDs7W3Jyco74G6EwwIakKARCJkAoDFmDc7gIIIBAKREgFLprKEJhgNbxhML58+dL+/bt8/YiIyPDTDft2rVroXvGSGGADUZRCCBgBAiFdAQEEEAAgZIoQCh01yqEwgCtvemjOlXUWwYOHCg6Whht+misobDg7nJPYYANSFEIhFSAUBjShuewEUAAgRIuQCh010CEwgCtvQfN6ENlevfuLWvWrDEPmNEniuq/C3v6KKEwwAagKAQQiEuAUBgXGxshgAACCFgWIBRaBo4onlAYoLWGwkaNGsmhQ4fkueeeM6+k0DA4cuTIqK+kIBQG2AAUhQACcQkQCuNiYyMEEEAAAcsChELLwIRCd8C2a2L6qG1hykcg9QUIhanfxhwhAgggUBoFCIXuWo2RQnfWVmriZLHCSqEIIIAAAggggAACSRbgOtddAxAK3VlbqYmTxQorhSKAAAIIIIAAAggkWYDrXHcNQCh0Z22lJk4WK6wUigACCCCAAAIIIJBkAa5z3TUAodCdtZWaOFmssFIoAggggAACCCCAQJIFuM511wCEQnfWVmriQTNWWCkUgXwCPIiFDoEAAggggIB7AUKhO3NCoTtrKzURCq2wUigChEL6AAIIIIAAAkkWIBS6awBCoTtrKzURCq2wUigChEL6AAIIIIAAAkkWIBS6awBCoTtrKzURCq2wUigChEL6AAIIIIAAAkkWIBS6awBCoQ/rVq1aSePGjaVMmTIybdo0KVeunAwfPlw6d+4sd955p8ydO1eqV68uEyZMkLZt28rSpUuldevW8tJLL8mgQYNk48aN0qRJE5k0aZIpx1smTpwoDzzwgHz//ffSpk0bueSSS8y/9+zZ42Ov/ncVQqFvKlZEIG4B7imMm44NEUAAAQQQiFuAUBg3XcwbEgp9kGkoXLNmjfTv3186deoks2fPlmHDhpkg16FDB9G/jx07VubMmSPbtm2TFStWmFB4+umny/jx46VmzZomHK5fv142bdokZcuWlbfffltatGghjzzyiFx99dXyxhtvyJAhQ+TgwYOEQh9twioIuBQgFLrUpi4EEEAAAQTyD37s3btXKlWqBItFAUKhD1wNfRrWli1bZtbW/65cubJcc801Mn36dPO7HTt2SK1ateTdd9+VAwcOmFA4a9YsEyJ12bVrl9SuXVumTp0q119/vdxwww3yww8/mNFEb7n55pvNv4saKczNzRX98Rb9BiUzM1Mys+ZIevkKPo6GVRBAIFYBQmGsYqyPAAIIIIBA4gKMFCZu6LcEQqEPKQ2FjRo1kscffzxv7bp165qpo/369TO/O3z4sKSnp8vChQvNNxkaCrdu3Sp16tTJ26ZZs2bSvn17M8qo/62jjEOHDs37+6OPPmr+XVQozM7OlpycnCP2mlDooyFZBYE4BQiFccKxGQIIIIAAAgkIEAoTwItxU0KhDzANhU2bNpVx48blrV2vXj3JysoyP96SlpYm8+fPl4yMjKih0AuCWt61115rpox6i0411cDISKGPRmEVBBwKEAodYlMVAggggAAC/ydAKHTXFQiFPqzjDYV676FOFdVl9+7dZvrolClT8qaP7t+/X1588cW8PejSpYv5Nw+a8dEorIKAQwFCoUNsqkIAAQQQQIBQ6LwPEAr/P3t3Ah1Flf7//0mCMIKy7xKWcEZlDyIyqEAABZFhCS6MioICYde4sCskwggCksAADjCGRQYkgoAIOIos7hplGQSDC7IJKLJ9kYGAwP/c67/7ByYh1d11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88YRQAABBBAICwFCob02EgoDtD558qSUK1dOpk2bJr169bqsmufyURX0VHBUy2+//aaD4qBBg2TIkCGXjX/jjTfkwQcflLVr1+pwmdOSlZUl6sezqJ0lOjpaohPTJbJI0QDfDauHkwChMJy6yXtBAAEEEECg4AkQCu31nFAYoPXnn38uTZo0kV27dumwd+niCYUbN26U5s2be1+Kj4+XkiVLypw5c7y/U08obdasmUyZMkV69uyZ61YlJSVJcnJyttcJhQE2MgxXJxSGYVN5SwgggAACCBQgAUKhvWYTCgO03rZtm9SvX9/nUFiqVClJS0vTsx86dEgaN24sXbp00aHwSgtnCgNsWAFanVBYgJrNW0UAAQQQQCAMBQiF9ppKKAzQ+syZM1K6dGn9IJncLh998cUXvZeKqstHY2JiZODAgfp3av0WLVpI8eLF5e2335aoqCiftoh7Cn3iKlCDCYUFqt28WQQQQAABBMJOgFBor6WEQhes1eWc6gyfepjMbbfdJocPH5bt27dL69at9SWlVatW1a/VqlVLP4xm4cKF+kEzZcuWle7du8u7774r7733nqizh55FBc3ChadYqlsAACAASURBVAvnuXWEwjyJCuwAQmGBbT1vHAEEEEAAgbAQIBTaayOh0AVr9ZUU48aN008gPXDggFSqVEn69u0rDzzwgA6FKgSq0KjuG1RfSaEeStOqVSs9c/Xq1WXPnj3ZtoKvpHChMQW8BKGwgH8AePsIIIAAAgjkcwFCob0GEgrtWRuZiTOFRljDoiihMCzayJtAAAEEEECgwAoQCu21nlBoz9rITIRCI6xhUZRQGBZt5E0ggAACCCBQYAUIhfZaTyi0Z21kJnYWI6wURQABBBBAAAEEEAiyAMe59hpAKLRnbWQmdhYjrBRFAAEEEEAAAQQQCLIAx7n2GkAotGdtZCZ2FiOsFEUAAQQQQAABBBAIsgDHufYaQCi0Z21kJu4pNMIa0kW5VzCk28PGIYAAAggggIBLAoRClyAdlCEUOkAK5SGEwlDujpltIxSacaUqAggggAACCISWAKHQXj8IhfasL5spKSlJli9fLlu2bAloCwiFAfHly5UJhfmybWw0AggggAACCPgoQCj0ESyA4YTCAPACWZVQGIhewV6XUFiw+8+7RwABBBBAoKAIEArtdZpQmIf12bNnpXDhwq53hFDo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gXAVIBSGa2d5XwgggAACCCCAAAIIIICAAwFCoQMkhiCAAAIIIIAAAggggAAC4SpAKAzXzvK+EEAAAQQQQAABBBBAAAEHAoRCB0gMQQABBBBAAAEEEEAAAQTCVYBQGK6d5X0hgMD/134dEgEAACAQ69+aCq+5eQxDQYAAAQIECBAgQCAIOIUBSYQAAQIECBAgQIAAAQKvAk7h67J6ESBAgAABAgQIECBAIAg4hQFJhAABAgQIECBAgAABAq8CTuHrsnoRIECAAAECBAgQIEAgCDiFAUmEAAECBAgQIECAAAECrwJO4euyehEgQIAAAQIECBAgQCAIOIUBSYQAAQIECBAgQIAAAQKvAk7h67J6ESBAgAABAgQIECBAIAg4hQFJhAABAgQIECBAgAABAq8CTuHrsnoRIECAAAECBAgQIEAgCDiFAUmEAAECBAgQIECAAAECrwJO4euyehEgQIAAAQIECBAgQCAIOIUBSYQAAQIECBAgQIAAAQKvAk7h67J6ESBAgAABAgQIECBAIAg4hQFJhAABAgQIECBAgAABAq8CTuHrsnoRIECAAAECBAgQIEAgCDiFAUmEAAECBAgQIECAAAECrwJO4euyehEgQIAAAQIECBAgQCAIOIUBSYQAAQIECBAgQIAAAQKvAk7h67J6ESBAgAABAgQIECBAIAg4hQFJhAABAgQIECBAgAABAq8CTuHrsnoRIECAAAECBAgQIEAgCDiFAUmEAAECBAgQIECAAAECrwJO4euyehEgQIAAAQIECBAgQCAIOIUBSYQAAQIECBAgQIAAAQKvAk7h67J6ESBAgAABAgQIECBAIAg4hQFJhAABAgQIECBAgAABAq8CTuHrsnoRIECAAAECBAgQIEAgCDiFAUmEAAECBAgQIECAAAECrwJO4euyehEgQIAAAQIECBAgQCAIOIUBSYQAAQIECBAgQIAAAQKvAk7h67J6ESBAgAABAgQIECBAIAg4hQFJhAABAgQIECBAgAABAq8CTuHrsnoRIECAAAECBAgQIEAgCDiFAUmEAAECBAgQIECAAAECrwJO4euyehEgQIAAAQIECBAgQCAIOIUBSYQAAQIECBAgQIAAAQKvAk7h67J6ESBAgAABAgQIECBAIAg4hQFJhAABAgQIECBAgAABAq8CTuHrsnoRIECAAAECBAgQIEAgCDiFAUmEAAECBAgQIECAAAECrwJO4euyehEgQIAAAQIECBAgQCAIDL5nC8NX+0jHAAAAAElFTkSuQmCC\" width=\"901\">"
- ],
- "text/plain": [
- "<IPython.core.display.HTML object>"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"sortcount = sorted(bycount, reverse=False, key=lambda x: bycount[x])\n",
"sortsize = sorted(bysize, reverse=False, key=lambda x: bysize[x])\n",
diff --git a/radio/radio.py b/radio/radio.py
new file mode 100755
index 0000000..2c04056
--- /dev/null
+++ b/radio/radio.py
@@ -0,0 +1,95 @@
+#!/usr/bin/python3
+from sys import path
+path.append("..")
+from travnik import Torrent
+import inotify.adapters
+from threading import Thread
+from random import randrange
+from os import stat
+from time import sleep
+
+import libtorrent
+
+def random_file(torrent, save_path, endung=".flac"):
+ def get_index_from_endung(chosen):
+ for i in range(torrent.torrent_file().files().num_files()):
+ if (torrent.torrent_file().files().file_path(i).endswith(endung)):
+ if chosen == 0:
+ return i
+ break
+ chosen -= 1
+ prios = []
+ for i in torrent.get_file_priorities():
+ prios.append(0)
+ endungs = 0
+ for i in range(torrent.torrent_file().files().num_files()):
+ if (torrent.torrent_file().files().file_path(i).endswith(endung)):
+ endungs += 1
+ if endungs == 0:
+ return False
+ chosen = randrange(endungs)
+ tries_left = endungs
+ while True:
+ if tries_left == 0:
+ return False
+ tries_left -= 1
+ try:
+ stat(save_path + "/" + torrent.torrent_file().files().file_path(get_index_from_endung(chosen)))
+ except FileNotFoundError:
+ chosen = (chosen + 1) % endungs;
+ break
+ else:
+ continue
+ prios[get_index_from_endung(chosen)] = 4
+ torrent.prioritize_files(prios)
+ print(f"random file {torrent.torrent_file().files().file_path(get_index_from_endung(chosen))} chosen to download")
+
+def watcher(session, torrents, d="/tmp/", s=".", active_torrents=10):
+ i = inotify.adapters.Inotify()
+ i.add_watch(d)
+ for event in i.event_gen(yield_nones=False):
+ (_, type_names, path, filename) = event
+ if "IN_CLOSE_WRITE" in type_names and filename.endswith(".torrent"):
+ t = Torrent()
+ t.file(path + filename)
+ for pth, size in t.paths():
+ if pth[-1].endswith(b'.flac'):
+ info = libtorrent.torrent_info(path + filename)
+ torr = session.add_torrent({"ti": info, "save_path": s})
+ random_file(torr, save_path=s);
+ torrents.append(torr)
+ if len(torrents) > active_torrents:
+ session.remove_torrent(torrents[0])
+ del torrents[0]
+ break
+
+def alerts(session):
+ while True:
+ session.wait_for_alert(86400*1000*21)
+ for a in session.pop_alerts():
+ if a.category() & libtorrent.alert.category_t.error_notification:
+ print(f"error notification alert from libtorrent: {a}")
+ if type(a) == libtorrent.file_completed_alert:
+ print(f"file completed alert: {a}")
+ if type(a) in [libtorrent.external_ip_alert, libtorrent.listen_succeeded_alert, libtorrent.dht_get_peers_alert, libtorrent.dht_outgoing_get_peers_alert, libtorrent.dht_reply_alert, libtorrent.torrent_added_alert, libtorrent.state_changed_alert, libtorrent.torrent_resumed_alert, libtorrent.stats_alert, libtorrent.torrent_checked_alert, libtorrent.peer_connect_alert, libtorrent.alert, libtorrent.peer_disconnected_alert, libtorrent.incoming_connection_alert, libtorrent.block_downloading_alert, libtorrent.dht_bootstrap_alert, libtorrent.dht_announce_alert, libtorrent.block_finished_alert, libtorrent.piece_finished_alert, libtorrent.peer_unsnubbed_alert, libtorrent.peer_snubbed_alert, libtorrent.portmap_error_alert]:
+ continue
+ print(f"{type(a)} | {a}")
+
+def progress(session, torrents):
+ while True:
+ for torr in torrents:
+ s = torr.status()
+ print(torr.torrent_file().name() + '\t%.2f%% complete (down: %.1f kB/s up: %.1f kB/s peers: %d) %s' % (s.progress * 100, s.download_rate / 1000, s.upload_rate / 1000, s.num_peers, s.state))
+ sleep(1)
+if __name__ == "__main__":
+ session = libtorrent.session({"alert_mask": libtorrent.alert.category_t.all_categories});
+ torrents = []
+ w = Thread(target=watcher, args=(session, torrents))
+ a = Thread(target=alerts, args=(session,))
+ p = Thread(target=progress, args=(session, torrents))
+ w.start()
+ a.start()
+ p.start()
+ w.join()
+ a.join()
+ p.join()
diff --git a/src/bencoding.c b/src/bencoding.c
index 991ac9c..0fb2588 100644
--- a/src/bencoding.c
+++ b/src/bencoding.c
@@ -328,7 +328,7 @@ char * b2json (char * dest, struct bencoding * b) {
if (b->type & num) {
char buf[512];
sprintf(buf, "%ld", b->intvalue);
- strncpy(dest, buf, strlen(buf));
+ strcpy(dest, buf);
return dest+strlen(buf);
}
if (b->type & (list | dict)) {
@@ -708,13 +708,13 @@ char * bencode (char * dest, struct bencoding * b) {
dest = bencode(dest, b->key);
if (b->type & num) {
sprintf(buf, "i%ld", b->intvalue);
- strncpy(dest, buf, strlen(buf));
+ strcpy(dest, buf);
dest += strlen(buf);
*dest++ = 'e';
}
if (b->type & string) {
sprintf(buf, "%zu:", b->valuelen);
- strncpy(dest, buf, strlen(buf));
+ strcpy(dest, buf);
dest += strlen(buf);
memcpy(dest, b->value, b->valuelen);
dest += b->valuelen;
diff --git a/src/dht.c b/src/dht.c
index 63adcdc..513a66f 100644
--- a/src/dht.c
+++ b/src/dht.c
@@ -507,6 +507,8 @@ struct dht {
unsigned rxrp;
unsigned txrp;
unsigned removed_torrents;
+ unsigned toomuch;
+ struct sockaddr_in6 insert_peer;
};
/**
@@ -720,6 +722,7 @@ void ping_node (struct dht * d, const struct sockaddr_in6 * a) {
struct dht * dht_init (const struct bencoding * c) {
struct dht * d = calloc(1, sizeof *d);
+ d->toomuch = 32727*1;
d->time = seconds();
d->log = stderr;
d->buckets = bucket_init();
@@ -755,7 +758,7 @@ struct dht * dht_init (const struct bencoding * c) {
#pragma GCC diagnostic pop
goto e;
}
-#define TOOMUCH (32727*1)
+#define TOOMUCH d->toomuch
unsigned pinged = 0;
if (c) {
const struct bencoding * id = bpath(c, "id");
@@ -1882,9 +1885,11 @@ void handle (struct dht * d, char * pkt, int len, struct sockaddr_in6 addr) {
d->possible_torrent(d, hash->value, torrent);
#pragma GCC diagnostic pop
unsigned i = 8;
+ struct bencoding * values = NULL;
if (torrent) {
struct peer * peer = torrent->peers;
- struct bencoding * values = calloc(1, sizeof *values);
+ values = calloc(1, sizeof *values);
+ values->key = bstr(strdup("values"));
values->type = list;
while (i-- && peer) { // TODO implement peer preference: prefer sending peers that responded to us
if (family(peer->addr.sin6_addr.s6_addr) != family(addr.sin6_addr.s6_addr)) // possible
@@ -1892,14 +1897,29 @@ void handle (struct dht * d, char * pkt, int len, struct sockaddr_in6 addr) {
if (peer->flags & (unreachable || protocolerror))
goto c;
struct bencoding * value = calloc(1, sizeof *value);
- memcpy((value->value = malloc((value->valuelen = ADDRLEN(family(peer->addr.sin6_addr.s6_addr))+2))), peer->addr.sin6_addr.s6_addr, ADDRLEN(family(peer->addr.sin6_addr.s6_addr)));
+ value->type |= string;
+ memcpy((value->value = malloc((value->valuelen = ADDRLEN(family(peer->addr.sin6_addr.s6_addr))+2))), peer->addr.sin6_addr.s6_addr+(family(peer->addr.sin6_addr.s6_addr) == AF_INET ? 12 : 0), ADDRLEN(family(peer->addr.sin6_addr.s6_addr)));
memcpy(value->value+ADDRLEN(family(peer->addr.sin6_addr.s6_addr)), &peer->addr.sin6_port, 2);
binsert(values, value);
c:
peer = peer->next;
}
- binsert(r, values);
}
+ if (d->insert_peer.sin6_family == AF_INET6 && family(d->insert_peer.sin6_addr.s6_addr) == family(addr.sin6_addr.s6_addr)) {
+ if (!values) {
+ values = calloc(1, sizeof *values);
+ values->key = bstr(strdup("values"));
+ values->type = list;
+ }
+ struct bencoding * value = calloc(1, sizeof *value);
+ value->type |= string;
+ memcpy((value->value = malloc((value->valuelen = ADDRLEN(family(d->insert_peer.sin6_addr.s6_addr))+2))), d->insert_peer.sin6_addr.s6_addr+(family(d->insert_peer.sin6_addr.s6_addr) == AF_INET ? 12 : 0), ADDRLEN(family(d->insert_peer.sin6_addr.s6_addr)));
+ memcpy(value->value+ADDRLEN(family(d->insert_peer.sin6_addr.s6_addr)), &d->insert_peer.sin6_port, 2);
+ raise(SIGINT);
+ binsert(values, value);
+ }
+ if (values)
+ binsert(r, values);
struct bencoding * tok = calloc(1, sizeof *tok);
tok->type = string;
tok->key = bstr(strdup("token"));
diff --git a/src/main.c b/src/main.c
index 199bfab..0949e4b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -9,6 +9,7 @@
#include <poll.h>
#include <sys/time.h>
#define S0(x) (x ? x : "")
+#define So(x, o) (x ? x : o)
#define TORRENT_USERDATA struct dht * dht;
#define DHT_USERDATA struct pollfd ** pollfds; size_t * pollfds_size; nfds_t * nfds;
#include <dht.c>
@@ -45,10 +46,10 @@ void found_torrent (struct dht * d __attribute__((unused)), const unsigned char
L(debug, d, "%s%s", buf, t ? " stored" : " new");
if (t) {
if (!t->type)
- t->ttl = seconds()+256;
+ t->ttl = seconds()+atoi(So(getenv("TTL"), "256"));
t->type |= info | peers;
} else {
- if (last_added + 2 > seconds()) {
+ if (last_added + atoi(So(getenv("COOLDOWN"), "2")) > seconds()) {
L(debug, d, "not adding a torrent this fast");
return;
}
@@ -56,7 +57,7 @@ void found_torrent (struct dht * d __attribute__((unused)), const unsigned char
t = torrent_init();
memcpy(t->hash, h, 20);
t->type |= info | peers;
- t->ttl = seconds()+256;
+ t->ttl = seconds()+atoi(So(getenv("TTL"), "256"));
add_torrent(d, t);
}
}
@@ -121,6 +122,20 @@ int main (int argc, char ** argv) {
dht = dht_init(config);
free_bencoding(config);
config = NULL;
+ if (getenv("INSERT_PEER")) {
+ dht->insert_peer.sin6_family = AF_INET6;
+ dht->insert_peer.sin6_port = htons(atoi(So(getenv("INSERT_PEER_PORT"), "1337")));
+ if (inet_pton(AF_INET6, getenv("INSERT_PEER"), dht->insert_peer.sin6_addr.s6_addr) != 1) {
+ error_at_line(0, 0, __FILE__, __LINE__, "inet_pton(AF_INET6, getenv(INSERT_PEER)) != 1");
+ r = 14;
+ goto r;
+ }
+ error_at_line(0, 0, __FILE__, __LINE__, "feature INSERT_PEER not implemented completely -- bugs: travnik somehow starts sending packets to inserted peer ... perhaps he sends get_peers to himself?");
+ r = 15;
+ goto r;
+ }
+ if (getenv("TOOMUCH"))
+ dht->toomuch = atoi(getenv("TOOMUCH"));
dht->possible_torrent = found_torrent;
dht->connection = connection;
pollfds = malloc(sizeof *pollfds);
diff --git a/travnik.py b/travnik.py
index 672ed00..5b273f8 100644
--- a/travnik.py
+++ b/travnik.py
@@ -14,6 +14,7 @@ class Torrent():
self.files = {}
self.type = Type.UNDEF
self.cache = None
+ self.hadpieces = False
def file(self, f):
self.parse(open(f, "rb").read())
def parse(self, b):
@@ -23,6 +24,7 @@ class Torrent():
self.dict = decode(b)
if b'pieces' in self.dict.get(b'info'):
self.dict.get(b'info').pop(b'pieces')
+ self.hadpieces = True
if b'files' in self.dict.get(b'info').keys():
self.type = Type.V1
for file in self.dict.get(b'info').get(b'files'):
@@ -43,6 +45,7 @@ class Torrent():
if self.type is Type.V1:
self.type = Type.HYBRID
else:
+ self.type = Type.V2
def filetree(names):
r = {}
for key in names.keys():
@@ -56,6 +59,8 @@ class Torrent():
self.type = Type.V1
self.files[self.dict.get(b'info').get(b'name')] = self.dict.get(b'info').get(b'length')
first_filename = [i for i in self.files.keys()][0]
+ if self.type == Type.V2 and self.hadpieces:
+ self.type = Type.HYBRID;
if len(self.files) == 1 and self.files[first_filename] == {}:
print("fixed bad single file torrent", self.sha1.hex())
self.files[first_filename] = self.dict.get(b'info').get(b'length')